diff --git a/components/renderers/controls/array/array-renderer.ts b/components/renderers/controls/array/array-renderer.ts index 752d2c478..59c404542 100644 --- a/components/renderers/controls/array/array-renderer.ts +++ b/components/renderers/controls/array/array-renderer.ts @@ -2,7 +2,7 @@ class ArrayRenderer implements JSONForms.IRenderer { - protected maxSize = 99; + protected maxSize = 100; priority = 99; constructor(private renderService: JSONForms.IRenderService, private pathResolver: JSONForms.IPathResolver) { } @@ -96,7 +96,7 @@ class ArrayRenderer implements JSONForms.IRenderer { return controlDescription; } else { let submitElement = {}; - let supportsSubmit = element.options != undefined && element.options['submit']; + let supportsSubmit = !(element.options != undefined && element.options['submit'] == false); let generatedGroups = this.createControlGroupPerItem(schemaPath, items, data == undefined ? 0 : data.length); let buttonText = JSONForms.PathUtil.beautifiedLastFragment(schemaPath); @@ -111,7 +111,8 @@ class ArrayRenderer implements JSONForms.IRenderer { - + `; @@ -122,7 +123,7 @@ class ArrayRenderer implements JSONForms.IRenderer { containerDescription['submitControls'] = this.createControlsForSubmit(items, schemaPath, submitElement, services); if (data == undefined) { containerDescription["instance"][containerDescription['path']] = []; - data = []; + data = containerDescription["instance"][containerDescription['path']]; } containerDescription['submitCallback'] = () => data.push(_.clone(submitElement)); } diff --git a/components/renderers/controls/boolean/boolean-renderer.spec.ts b/components/renderers/controls/boolean/boolean-renderer.spec.ts index e91a4d8b7..1dfd3e540 100644 --- a/components/renderers/controls/boolean/boolean-renderer.spec.ts +++ b/components/renderers/controls/boolean/boolean-renderer.spec.ts @@ -22,7 +22,7 @@ describe('Boolean renderer', () => { scope.data = { "vegetarian": true }; let el = $compile('')(scope); scope.$digest(); - let input = angular.element(el[0].getElementsByClassName('jsf-control')); + let input = angular.element(el[0].getElementsByClassName('jsf-control-boolean')); expect(input.attr("disabled")).toBeDefined(); })); }); \ No newline at end of file diff --git a/components/renderers/controls/boolean/boolean-renderer.ts b/components/renderers/controls/boolean/boolean-renderer.ts index 51c518cd5..3e65345ae 100644 --- a/components/renderers/controls/boolean/boolean-renderer.ts +++ b/components/renderers/controls/boolean/boolean-renderer.ts @@ -7,7 +7,7 @@ class BooleanRenderer implements JSONForms.IRenderer { render(element: IControlObject, subSchema: SchemaElement, schemaPath: string, services: JSONForms.Services) { var control = JSONForms.RenderDescriptionFactory.createControlDescription(schemaPath, services, element); control['template'] = ` - + `; return control; } diff --git a/components/renderers/controls/control.html b/components/renderers/controls/control.html index f00df447e..95c193bc0 100644 --- a/components/renderers/controls/control.html +++ b/components/renderers/controls/control.html @@ -1,10 +1,10 @@ -
+
- +
-
+
-
- {{alert.msg}} +
+ {{alert.msg}}
diff --git a/components/renderers/controls/datetime/datetime-renderer.spec.ts b/components/renderers/controls/datetime/datetime-renderer.spec.ts index a61ec5991..6687252f7 100644 --- a/components/renderers/controls/datetime/datetime-renderer.spec.ts +++ b/components/renderers/controls/datetime/datetime-renderer.spec.ts @@ -37,7 +37,7 @@ describe('DateTimeTest', () => { scope.data = { "birthDate": "1985-06-02 20:15:36" }; let el = $compile('')(scope); scope.$digest(); - let input = angular.element(el[0].getElementsByClassName('jsf-control')); + let input = angular.element(el[0].getElementsByClassName('jsf-control-datetime')); expect(input.attr("readonly")).toBeDefined(); })); // TODO: add test cases to check whether validation works diff --git a/components/renderers/controls/datetime/datetime-renderer.ts b/components/renderers/controls/datetime/datetime-renderer.ts index 00e05b362..a331ffc84 100644 --- a/components/renderers/controls/datetime/datetime-renderer.ts +++ b/components/renderers/controls/datetime/datetime-renderer.ts @@ -13,7 +13,7 @@ class DatetimeRenderer implements JSONForms.IRenderer { control['template'] = `
- +
`; - return JSONForms.RenderDescriptionFactory.createContainerDescription(99, renderedElements, template, services, element); + return JSONForms.RenderDescriptionFactory.createContainerDescription(100, renderedElements, template, services, element); } isApplicable(uiElement: IUISchemaElement, jsonSchema: SchemaElement, schemaPath) :boolean { diff --git a/components/services/services.ts b/components/services/services.ts index c9df695bf..acf0d9021 100644 --- a/components/services/services.ts +++ b/components/services/services.ts @@ -108,7 +108,7 @@ module JSONForms{ results['errors'].forEach((error) => { if (error['schemaPath'].indexOf("required") != -1) { var propName = error['dataPath'] + "/" + error['params']['key']; - this.validationResults.get(instance)[propName] = "Missing property"; + this.validationResults.get(instance)[propName] = "Required"; } else { this.validationResults.get(instance)[error['dataPath']] = error['message']; } diff --git a/examples/app/arrays/arrays.html b/examples/app/arrays/arrays.html index fe24e26ab..ec87b8c6a 100644 --- a/examples/app/arrays/arrays.html +++ b/examples/app/arrays/arrays.html @@ -1,4 +1,4 @@ -
+

Bound data

@@ -7,8 +7,7 @@

Bound data

-
- +

JSONForms generated Forms

diff --git a/examples/app/custom/custom.html b/examples/app/custom/custom.html index f63a90a93..acc725ea5 100644 --- a/examples/app/custom/custom.html +++ b/examples/app/custom/custom.html @@ -1,19 +1,18 @@ - -
+
-

Bound data

+

JSONForms generated Forms

- {{vm.formattedData()}} +
-
+
-

JSONForms generated Forms

+

Bound data

- +
{{vm.formattedData()}}
diff --git a/examples/app/default-ui/defaultui.html b/examples/app/default-ui/defaultui.html index 3b623b1ed..a68e2e14c 100644 --- a/examples/app/default-ui/defaultui.html +++ b/examples/app/default-ui/defaultui.html @@ -1,18 +1,17 @@ -
+
-

Bound data

+

JSONForms generated default Forms

- {{vm.formattedData()}} +
- -
+
-

JSONForms generated default Forms

+

Bound data

- +
{{vm.formattedData()}}
diff --git a/examples/app/default/default-schema.html b/examples/app/default/default-schema.html index c223cac20..37ac09239 100644 --- a/examples/app/default/default-schema.html +++ b/examples/app/default/default-schema.html @@ -1,18 +1,18 @@ -
+
-

Bound data

+

JSONForms generated default schema and default forms

- {{vm.formattedData()}} +
-
+
-

JSONForms generated default schema and default forms

+

Bound data

- +
{{vm.formattedData()}}
diff --git a/examples/app/local/local.controller.js b/examples/app/local/local.controller.js index 76e287f0e..b702a2e00 100644 --- a/examples/app/local/local.controller.js +++ b/examples/app/local/local.controller.js @@ -36,11 +36,12 @@ angular.module('makeithappen').controller('LocalController', function() { "occupation": { "type": "string" }, - "test_wrong": { + /* FIXME: disabling arrays for primitive types */ + /*"test_wrong": { "type": "array", "items": {"type":"string"} - }, - "test_correct": { + },*/ + "hobbies": { "type": "array", "items": {"type":"object","properties": {"name": {"type": "string"}}} } @@ -48,8 +49,7 @@ angular.module('makeithappen').controller('LocalController', function() { "required": ["occupation", "nationality"] }; vm.uiSchema = { - "type": "Group", - "label": "This is a fancy label", + "type": "VerticalLayout", "elements": [ { "type": "VerticalLayout", @@ -225,38 +225,6 @@ angular.module('makeithappen').controller('LocalController', function() { { name: 'Jimmy', personalData:{age: 32} - }, - { - name: 'Max', - personalData:{age: 35} - }, - { - name: 'Jonas', - personalData:{age: 34} - }, - { - name: 'Edgar', - personalData:{age: 30} - }, - { - name: 'Eugen', - personalData:{age: 29} - }, - { - name: 'Johannes', - personalData:{age: 26} - }, - { - name: 'Alex', - personalData:{age: 25} - }, - { - name: 'Stefan', - personalData:{age: 27} - }, - { - name: 'Eva', - personalData:{age: 30} } ] }; diff --git a/examples/app/local/local.html b/examples/app/local/local.html index 6331b17ef..69317f208 100644 --- a/examples/app/local/local.html +++ b/examples/app/local/local.html @@ -1,22 +1,27 @@ -
+
-

Bound data

+

Basic controls

-
{{vm.formattedData()}}
+
-
+
-

JSONForms generated Forms

-
-
- +

Master/Detail control

+
+
+

Bound data

+
+
+
{{vm.formattedData()}}
+
+
diff --git a/examples/app/placeholder/placeholder-posts.html b/examples/app/placeholder/placeholder-posts.html index 259fb50b7..ea21d84c1 100644 --- a/examples/app/placeholder/placeholder-posts.html +++ b/examples/app/placeholder/placeholder-posts.html @@ -1,9 +1,9 @@ -

Posts

-
+

Posts

+
-
-
+
+
-
+
diff --git a/examples/app/polymer/polymer.html b/examples/app/polymer/polymer.html index d54faca4a..ff4a47186 100644 --- a/examples/app/polymer/polymer.html +++ b/examples/app/polymer/polymer.html @@ -1,4 +1,5 @@ -
+ +

Bound data

@@ -7,6 +8,3 @@

Bound data

- - - diff --git a/examples/assets/images/bg.jpg b/examples/assets/images/bg.jpg new file mode 100644 index 000000000..8bb9d5b73 Binary files /dev/null and b/examples/assets/images/bg.jpg differ diff --git a/examples/css/main.css b/examples/css/main.css new file mode 100644 index 000000000..fdb56f021 --- /dev/null +++ b/examples/css/main.css @@ -0,0 +1,144 @@ +h1 { + color: white; +} + +.jsf h2 { + color: white; +} + +.jsf label { + color: white; +} + +body { + background-image: url('../assets/images/bg.jpg'); + font-family: 'Open Sans', sans-serif; +} + +.panel > .panel-heading { + background: #CEDB50 none; + color: black; +} + + +.jsf .panel-default > .panel-heading { + background: #337AB7 none; + color: white; +} + +.panel > .panel-body { + background: #0C2339 none; +} + +* { + border-radius: 0 !important; +} + +.jsf-vertical-layout > [class*="col-"] { + padding-left: 0px !important; + padding-right: 0px !important; +} + +.jsf-group > [class*="col-"] { + padding-left: 0px !important; + padding-right: 0px !important; +} + + +.jsf-group { + /*background-color: #161716;*/ + color: white; + border: 0 solid #337AB7; + padding: 0; + background-color: #0C2339; +} + +.jsf .row { + margin-right: 0; + margin-left: 0; +} + +.jsf-control { +} + +.jsf .alert { + padding: 5px; + margin-top: 0.5em; + margin-bottom: 0.5em; + color: white; + background-color: #FF263F; +} + + +.jsf .panel { + border: 1px solid #337AB7; +} + +.jsf-vertical-layout { + background-color: #0C2339; + color: white; + border: 1px solid #337AB7; + padding-top: 5px; +} + +.jsf-label { + font-size: 1.25em; + /*background-color: #6AAED8;*/ +} + +.accordion-group { + background: #99B2B7 none; + color: white; +} + +.accordion-heading { + background: #99B2B7 none; + color: white; +} + +.accordion { + background: #99B2B7 none; + color: white; +} + +.jsf legend { + color: white; +} + +.footer { + color: white; +} + +.jsf-masterdetail{ + +} + +.jsf .jsf-masterdetail .panel-body { + padding-bottom: 0; +} +.jsf .jsf-masterdetail .panel-group { + margin-bottom: 5px; +} + +.jsf .jsf-masterdetail .jsf-masterdetail-empty .panel-body { + padding-bottom: 0; + padding-top: 0; +} +.jsf .jsf-masterdetail .jsf-masterdetail-empty .panel-heading + .panel-collapse .panel-body { + border-width: 0; +} +.jsf .jsf-masterdetail .jsf-masterdetail-empty .panel-group { + margin-bottom: 0; + border-width: 0; +} +.jsf-masterdetail-selected { + font-weight: bold; + color: #CEDB50; +} +.jsf-masterdetail-property { + font-style: italic; + color: white; +} +.jsf-masterdetail-header { + text-decoration: none; +} diff --git a/examples/embed-index.html b/examples/embed-index.html index e161b6198..254310160 100644 --- a/examples/embed-index.html +++ b/examples/embed-index.html @@ -19,6 +19,7 @@ +