<!DOCTYPE html>
<html lang="en" ng-app="appDemo">
  <head>
    <title>Easy form generator</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="create amazing forms without coding: form editor based on angular formly">
    <meta name="author" content="Erwan Datin (MacKentoch)">
    <!-- IMPORTANT : angular js lib (here for better result with ng-cloak) -->
    <script type="text/javascript" src="./vendors/js/angular.min.js"></script>
    <!-- Bootstrap core CSS -->
    <link href="./vendors/css/bootstrap.min.css" rel="stylesheet">
    <!-- font-awesome -->
    <link href="./vendors/css/font-awesome.min.css" rel="stylesheet">
    <!-- animate -->
    <link href="./vendors/css/animate.min.css" rel="stylesheet">
    <!-- textAngular -->
    <link rel='stylesheet' href='./vendors/css/textAngular.min.css'>
    <!-- taoster angular -->
    <link rel='stylesheet' href='./vendors/css/toaster.min.css'>
    <!-- nya select bootstrap -->
    <link rel='stylesheet' href='./vendors/css/nya-bs-select.min.css'>
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="./vendors/html5shiv/dist/html5shiv.min.js"></script>
      <script src="./vendors/respondJS/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <!-- NOTE : ng-cloak here is not optimal solution : better to use it only where it is needed (I just take a shortcut as this an example not a production sample)  -->
  <body ng-controller="demoController as demoCtrl" ng-cloak>
    <div>
      <!-- navigation : just decoration it is not easy form generator
      =============================================================-->
      <header id="pageHeader" >
        <div class="navbar navbar-default navbar-fixed-top">
            <div class="container">
              <div class="navbar-header">
                <a class="navbar-brand" href="#">Easy form generator</a>
                <button class="navbar-toggle" type="button" data-toggle="collapse" data-target="#navbar-main">
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                </button>
              </div>
              <div class="navbar-collapse collapse" id="navbar-main">
                <ul class="nav navbar-nav">
                </ul>
                <ul class="nav navbar-nav navbar-right">
                  <li><a class="socialIcon" target="_blank" href="https://github.com/MacKentoch"><span class="text-center"><i class="fa fa-github"></i></span></a></li>
                  <li><a class="socialIcon" target="_blank" href="https://twitter.com/erwan_datin"><span class="text-center"><i class="fa fa-twitter"></i></span></a></li>
                </ul>
              </div>
            </div>
          </div>
      </header>
      <div class="jumbotron">
        <h1>Easy Form Generator : Drag and drop way</h1>
        <p class="text-center">This is currently in development (BETA).</p>
        <p class="text-center">It may change so I can't tell you this will look like the same when released.</p>
        <p class="text-center"><a class="btn btn-primary btn-lg" href="https://github.com/MacKentoch/easyFormGenerator"><i class="fa fa-github"></i>&nbsp;go github</a></p>
        <div class="well">
          <h3>
            How to :
          </h3>
          <ul>
            <li>
              <h5>
                expand a group of control (left column)
              </h5>
            </li>
            <li><h5>drag controls from left column then drop into right column</h5></li>
            <li><h5>drag and drop controls within right column to re-order controls</h5></li>
            <li><h5>drag and drop lines of controls within right column to re-order lines</h5></li>
            <li><h5>right click controls (right column) to edit and customize it</h5></li>
            <li><h5>Check your form anytime (preview tab - upper right)</h5></li>
          </ul>
          <br/>
          <div class="col-md-10 col-md-offset-1">
            <div class="alert alert-warning" role="alert">
              <h4>This version is still in BETA so better use chrome to have a nice experience.</h4>
            </div>
          </div>

        </div>
      </div>
      <hr/>
      <!-- Easy Form Generator (here drag and drop way) is now a ridiculous small html :
      =============================================================-->
      <eda-dragdrop-way-easy-form-gen
            eda-easy-form-generator-model="demoCtrl.easyFormGeneratorModel"
            eda-save-form-event="demoCtrl.saveForm(edaEasyFormGeneratorModel)">
      </eda-dragdrop-way-easy-form-gen>
    </div>
    <script type="text/javascript">
      //demo purpose : here should be your app
      //just inject easy form generator and bind properties
      //then,
      (function (){
        'use strict';
        angular
          .module('appDemo', [
            'eda.easyformGen.dragDropWay' //injects easy form generator drag and drop way
          ])
          .controller('demoController', demoController);

        demoController.$inject = ['$timeout'];
        function demoController($timeout){
          var demoCtrl = this;

          demoCtrl.easyFormGeneratorModel  = {};
          demoCtrl.saveForm               = saveForm;

          //demo purpose only :
          //in 3 seconds a new form will be bound to easy form generator :
          timedModelChanged();

          /**
           * when click on save form, will call your save form function :
           */
          function saveForm(easyFormGeneratorModel){
            console.info('-> from here : you can save models to database (your controller)');
            console.dir({
                'What is it?' : 'this log shows you easy form returned model on save event',
                'easyFormGeneratorModel' : easyFormGeneratorModel
            });

          /**
           *
           * MORE DETAILS ON 'easyFormGeneratorModel'
           * ----------------------------------------
           *
           * easy form generator model properties:
           *
           * - formName:                   {string} (at save step you name your form)
           * - btnSubmitText:              {string} (if 'Submit' does not suits to you change submit button name)
           * - btnCancelText:              {string} (if 'Cancel' does not suits to you change cancel button name)
           * - edaFieldsMode:              {array} - easy form generator model that describe form
           * - edaFieldsModelStringified:  {string} - exactly same as edaFieldsModel it is just stringified
           * - formlyFieldsModel:          {object} - easy form generator model translate by itself 'edaFieldsModel' to 'angular formly fields model' -> usefull is you just need a formly directive
           * - dataModel:                  {object} - this object is filled when filling form.
           */

          }

          /**
           * to simulate server async load of a form model (3 seconds is eternity I hope your server won't take so much time)
           *
           * easy form generator will render it when timer done
           */
          function timedModelChanged(){
            $timeout(function(){

              demoCtrl
                .easyFormGeneratorModel
                .formName = 'DemoForm';

              demoCtrl
                .easyFormGeneratorModel
                .edaFieldsModel = testACompleteForm();

              demoCtrl
                .easyFormGeneratorModel
                .btnSubmitText = 'I Confirm';

              demoCtrl
                .easyFormGeneratorModel
                .btnCancelText = 'I give up';

              console.info('timeout model change');
              console.dir(demoCtrl.easyFormGeneratorModel);
            }, 3000);
          }

          /**
           * an easy form generator model as demo
           *
           * here as a demo, it could be retrieved from a database
           */
          function testACompleteForm(){
            var _testACompleteForm =  [
              {
                "line": 1,
                "activeColumn": 1,
                "columns": [
                  {
                    "numColumn": 1,
                    "exist": true,
                    "control": {
                      "type": "header",
                      "key": "header-1441426238190",
                      "selectedControl": "Header",
                      "subtype": "",
                      "templateOptions": {
                        "label": "",
                        "required": false,
                        "description": "A Loaded Form from Your controller",
                        "placeholder": "",
                        "options": []
                      },
                      "formlyExpressionProperties": {},
                      "formlyValidators": {},
                      "formlyValidation": {},
                      "edited": true
                    }
                  }
                ]
              },
              {
                "line": -1,
                "activeColumn": 1,
                "columns": [
                  {
                    "numColumn": 1,
                    "exist": true,
                    "control": {
                      "type": "input",
                      "key": "input-1441426278314",
                      "selectedControl": "TextInput",
                      "subtype": "",
                      "templateOptions": {
                        "label": "text input",
                        "required": true,
                        "description": "text input",
                        "placeholder": "text input",
                        "options": []
                      },
                      "formlyExpressionProperties": {},
                      "formlyValidators": {},
                      "formlyValidation": {
                        "messages": {}
                      },
                      "edited": true
                    }
                  },
                  {
                    "numColumn": 2,
                    "exist": true,
                    "control": {
                      "type": "input",
                      "key": "input-1441426295927",
                      "selectedControl": "Password",
                      "subtype": "password",
                      "templateOptions": {
                        "label": "password",
                        "required": true,
                        "description": "password",
                        "placeholder": "password",
                        "options": []
                      },
                      "formlyExpressionProperties": {},
                      "formlyValidators": {},
                      "formlyValidation": {
                        "messages": {}
                      },
                      "edited": true
                    }
                  },
                  {
                    "numColumn": 3,
                    "exist": true,
                    "control": {
                      "type": "input",
                      "key": "input-1441426313388",
                      "selectedControl": "Email",
                      "subtype": "email",
                      "templateOptions": {
                        "label": "email",
                        "required": true,
                        "description": "email",
                        "placeholder": "email",
                        "options": []
                      },
                      "formlyExpressionProperties": {},
                      "formlyValidators": {
                        "emailShape": {
                          "message": "$viewValue + ' is not a valid email'"
                        }
                      },
                      "formlyValidation": {
                        "messages": {}
                      },
                      "edited": true
                    }
                  }
                ]
              },
              {
                "line": -1,
                "activeColumn": 1,
                "columns": [
                  {
                    "numColumn": 1,
                    "exist": true,
                    "control": {
                      "type": "datepicker",
                      "key": "datepicker-1441426325143",
                      "selectedControl": "Date",
                      "subtype": "",
                      "templateOptions": {
                        "label": "date",
                        "required": true,
                        "description": "date",
                        "placeholder": "",
                        "options": [],
                        "datepickerPopup": "dd-MMMM-yyyy"
                      },
                      "formlyExpressionProperties": {},
                      "formlyValidators": {},
                      "formlyValidation": {
                        "messages": {}
                      },
                      "edited": true
                    }
                  },
                  {
                    "numColumn": 2,
                    "exist": true,
                    "control": {
                      "type": "basicSelect",
                      "key": "basicSelect-1441426346817",
                      "selectedControl": "BasicSelect",
                      "subtype": "",
                      "templateOptions": {
                        "label": "",
                        "required": false,
                        "description": "",
                        "placeholder": "",
                        "options": [
                          {
                            "name": "opt1",
                            "value": 0,
                            "group": ""
                          },
                          {
                            "name": "opt2",
                            "value": 1,
                            "group": ""
                          },
                          {
                            "name": "opt3",
                            "value": 2,
                            "group": ""
                          }
                        ]
                      },
                      "formlyExpressionProperties": {},
                      "formlyValidators": {},
                      "formlyValidation": {
                        "messages": {}
                      },
                      "edited": true
                    }
                  }
                ]
              },
              {
                "line": -1,
                "activeColumn": 1,
                "columns": [
                  {
                    "numColumn": 1,
                    "exist": true,
                    "control": {
                      "type": "richEditor",
                      "key": "richEditor-1441426365355",
                      "selectedControl": "RichTextEditor",
                      "subtype": "",
                      "templateOptions": {
                        "label": "",
                        "required": false,
                        "description": "",
                        "placeholder": "",
                        "options": []
                      },
                      "formlyExpressionProperties": {},
                      "formlyValidators": {},
                      "formlyValidation": {
                        "messages": {}
                      },
                      "edited": true
                    }
                  }
                ]
              }
            ]
            return _testACompleteForm;
          }




        }
      })();
    </script>

    <!-- footer : declare JS dependencies
    =============================================================-->
    <footer id="pageFooter">
      <!-- jquery framework : top 1 priority -->
      <script type="text/javascript" src="./vendors/js/jquery.min.js"></script>
      <!-- bootstrap framework scripts -->
      <script type="text/javascript" src="./vendors/js/bootstrap.min.js"></script>
      <!-- angular ui bootstrap -->
      <script type="text/javascript" src="./vendors/js/ui-bootstrap-tpls.min.js"></script>
      <script type="text/javascript" src="../dist/eda.dragdropway.min.js"></script>
      <!-- textAngular Includes -->
      <script src='./vendors/js/textAngular-rangy.min.js'></script>
      <script src='./vendors/js/textAngular-sanitize.min.js'></script>
      <script src='./vendors/js/textAngular.min.js'></script>
      <!-- lodash -->
      <script src='./vendors/js/lodash.min.js'></script>
      <!-- angular-Strap -->
      <script type="text/javascript" src="./vendors/js/angular-strap.min.js"></script>
      <script type="text/javascript" src="./vendors/js/angular-strap.tpl.min.js"></script>
      <script type="text/javascript" src="./vendors/js/angular-resource.min.js"></script>
      <!-- angular animate -->
      <script type="text/javascript" src="./vendors/js/angular-animate.min.js"></script>
      <!-- angular toaster -->
      <script type="text/javascript" src="./vendors/js/toaster.min.js"></script>
      <!-- nya select bootstrap -->
      <script type="text/javascript" src="./vendors/js/nya-bs-select.min.js"></script>
    </footer>

  </body>
</html>