This shows off the Open Source Form Builder and Renderer for Angular.js using the Form.io platform.
A Pen by Michael Bakker on CodePen.
This shows off the Open Source Form Builder and Renderer for Angular.js using the Form.io platform.
A Pen by Michael Bakker on CodePen.
<div class="jumbotron" style="padding-top: 20px; padding-bottom: 10px;"> | |
<div class="container text-center"> | |
<p><img src="http://code-maven.com/img/angularjs.png" /></p> | |
<h1>Form <a href="https://github.com/formio/ngFormBuilder" target="_blank">Builder</a> & <a href="https://github.com/formio/ngFormio" target="_blank">Renderer</a></h1> | |
<p><strong>Open Source</strong> by <a target="_blank" href="https://form.io"><img src="https://help.form.io/assets/formio-logo.png" /></a></p> | |
</div> | |
</div> | |
<div class="page-content" ng-app="formioApp"> | |
<div class="container-fluid"> | |
<div> | |
<div class="row"> | |
<div class="col-sm-8"> | |
<h3 class="text-center text-muted">The <a href="https://github.com/formio/ngFormBuilder" target="_blank">Form Builder</a> allows you to build a <select class="form-control form-type-select" ng-model="form.display" ng-options="display.name as display.title for display in displays"></select></h3> | |
<pre class="text-center bg-info"><h4><code><form-builder form="form"></form-builder></code></h4></pre> | |
<div class="well" style="background-color: #fdfdfd;"> | |
<form-builder form="form"></form-builder> | |
</div> | |
</div> | |
<div class="col-sm-4"> | |
<h3 class="text-center text-muted">as JSON Schema</h3> | |
<pre class="bg-info"><h4><code>$rootScope.form = </code></h4></pre> | |
<div class="well jsonviewer"> | |
<json-explorer data="form" collapsed="jsonCollapsed"></json-explorer> | |
</div> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="col-sm-8 col-sm-offset-2"> | |
<h3 class="text-center text-muted">which <a href="https://github.com/formio/ngFormio" target="_blank">Renders as a Form</a> in your Application</h3> | |
<pre class="text-center bg-info"><h4><code><formio form="form"></formio></code></h4></pre> | |
<div class="well"> | |
<formio form="form" ng-if="renderForm"></formio> | |
</div> | |
</div> | |
<div class="clearfix"></div> | |
</div> | |
<div class="row"> | |
<div class="col-sm-10 col-sm-offset-1 text-center"> | |
<h3 class="text-center text-muted">which connects to our API Platform</h3> | |
<p>hosted or on-premise</p> | |
<a href="https://form.io" target="_blank"><img style="width:100%" src="https://raw.githubusercontent.com/formio/help.form.io/gh-pages/assets/img/formioapi2.png" /></a> | |
</div> | |
</div> | |
<div class="row" style="margin-top: 40px;"> | |
<div class="col-sm-12 text-center"> | |
<a href="https://form.io" target="_blank" class="btn btn-lg btn-success">Get Started</a> | |
</div> | |
</div> | |
<div class="row well" style="margin-top: 50px;"> | |
<div class="container"> | |
<div class="row"> | |
<div class="col-lg-12 text-center"> | |
<h2 class="section-heading">We are Open Source!</h2> | |
<h3 class="section-subheading text-muted">We are proud to offer our core Form & API platform as Open Source.</h3> | |
<h3 class="section-subheading text-muted">Find us on GitHub @ <a href="https://github.com/formio/formio" target="_blank">https://github.com/formio/formio</a></h3> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="col-md-4"><a href="https://github.com/formio/formio" target="_blank"><img class="img-responsive" src="https://form.io/assets/images/github-logo.png"></a></div> | |
<div class="col-md-8"> | |
<p>Getting started is as easy as...</p> | |
<pre style="background-color: white;">git clone https://github.com/formio/formio.git | |
cd formio | |
npm install | |
node server</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<a href="https://github.com/formio/formio" target="_blank"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/e7bbb0521b397edbd5fe43e7f760759336b5e05f/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677265656e5f3030373230302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png"></a> | |
</div> |
angular | |
.module("formioApp", ["ui.bootstrap", "ui.select", "formio", "ngFormBuilder", "ngJsonExplorer"]) | |
.run([ | |
"$rootScope", | |
'formioComponents', | |
'$timeout', | |
function( | |
$rootScope, | |
formioComponents, | |
$timeout | |
) { | |
$rootScope.displays = [{ | |
name: 'form', | |
title: 'Form' | |
}, { | |
name: 'wizard', | |
title: 'Wizard' | |
}]; | |
$rootScope.form = { | |
components: [{ | |
"input": true, | |
"tableView": true, | |
"inputType": "text", | |
"inputMask": "", | |
"label": "First Name", | |
"key": "firstName", | |
"placeholder": "Enter your first name", | |
"prefix": "", | |
"suffix": "", | |
"multiple": false, | |
"defaultValue": "", | |
"protected": false, | |
"unique": false, | |
"persistent": true, | |
"validate": { | |
"required": false, | |
"minLength": "", | |
"maxLength": "", | |
"pattern": "", | |
"custom": "", | |
"customPrivate": false | |
}, | |
"conditional": { | |
"show": false, | |
"when": null, | |
"eq": "" | |
}, | |
"type": "textfield" | |
}, { | |
"input": true, | |
"tableView": true, | |
"inputType": "text", | |
"inputMask": "", | |
"label": "Last Name", | |
"key": "lastName", | |
"placeholder": "Enter your last name", | |
"prefix": "", | |
"suffix": "", | |
"multiple": false, | |
"defaultValue": "", | |
"protected": false, | |
"unique": false, | |
"persistent": true, | |
"validate": { | |
"required": false, | |
"minLength": "", | |
"maxLength": "", | |
"pattern": "", | |
"custom": "", | |
"customPrivate": false | |
}, | |
"conditional": { | |
"show": false, | |
"when": null, | |
"eq": "" | |
}, | |
"type": "textfield" | |
}, { | |
"input": true, | |
"tableView": true, | |
"label": "Message", | |
"key": "message", | |
"placeholder": "What do you think?", | |
"prefix": "", | |
"suffix": "", | |
"rows": 3, | |
"multiple": false, | |
"defaultValue": "", | |
"protected": false, | |
"persistent": true, | |
"validate": { | |
"required": false, | |
"minLength": "", | |
"maxLength": "", | |
"pattern": "", | |
"custom": "" | |
}, | |
"type": "textarea", | |
"conditional": { | |
"show": false, | |
"when": null, | |
"eq": "" | |
} | |
}, { | |
type: 'button', | |
theme: 'primary', | |
disableOnInvalid: true, | |
action: 'submit', | |
block: false, | |
rightIcon: '', | |
leftIcon: '', | |
size: 'md', | |
key: 'submit', | |
tableView: false, | |
label: 'Submit', | |
input: true | |
}], | |
display: 'form' | |
}; | |
$rootScope.renderForm = true; | |
$rootScope.$on('formUpdate', function(event, form) { | |
angular.merge($rootScope.form, form); | |
$rootScope.renderForm = false; | |
setTimeout(function() { | |
$rootScope.renderForm = true; | |
}, 10); | |
}); | |
var originalComps = _.cloneDeep($rootScope.form.components); | |
originalComps.push(angular.copy(formioComponents.components.button.settings)); | |
$rootScope.jsonCollapsed = true; | |
$timeout(function() { | |
$rootScope.jsonCollapsed = false; | |
}, 200); | |
var currentDisplay = 'form'; | |
$rootScope.$watch('form.display', function(display) { | |
if (display && (display !== currentDisplay)) { | |
currentDisplay = display; | |
if (display === 'form') { | |
$rootScope.form.components = originalComps; | |
} else { | |
$rootScope.form.components = [{ | |
type: 'panel', | |
input: false, | |
title: 'Page 1', | |
theme: 'default', | |
components: originalComps | |
}]; | |
} | |
} | |
}); | |
} | |
]); |
<script src="https://cdn.rawgit.com/odra/ng-json-explorer/master/dist/angular-json-explorer.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> | |
<script src="https://cdn.ckeditor.com/4.5.11/standard/ckeditor.js"></script> | |
<script src="https://unpkg.com/[email protected]/signature_pad.min.js"></script> | |
<script src="https://unpkg.com/ng-formio-builder@latest/dist/ngFormBuilder-full.js"></script> |
.formbuilder { | |
height: 600px; | |
} | |
.formcomponents { | |
width: 30%; | |
} | |
.formarea { | |
width: 70%; | |
} | |
.component-settings .nav-link { | |
font-size: 0.6em; | |
} | |
.jsonviewer { | |
max-height: 600px; | |
overflow: scroll; | |
} | |
.form-type-select { | |
display: inline-block; | |
width: 100px; | |
height: 28px; | |
vertical-align: top; | |
} |
<link href="https://cdn.rawgit.com/odra/ng-json-explorer/master/dist/angular-json-explorer.min.css" rel="stylesheet" /> | |
<link href="https://unpkg.com/ng-formio-builder@latest/dist/ngFormBuilder-complete.css" rel="stylesheet" /> | |
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" /> | |
<link href="https://unpkg.com/[email protected]/yeti/bootstrap.min.css" rel="stylesheet" /> |