diff --git a/.gitignore b/.gitignore index d83b20cc6..8bea62915 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # generated files dist/ !dist/LICENSE +components/ +jsonforms.d.ts +jsonforms.js temp/ coverage/ reports/ diff --git a/package.json b/package.json index 52b4dbae3..b0350514b 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,10 @@ "bugs": "https://github.com/eclipsesource/jsonforms/issues", "homepage": "http://github.eclipsesource.com/jsonforms/", "license": "MIT", - "main": "/", + "main": "jsonforms.js", + "typings": "jsonforms.d.ts", "scripts": { + "tsc": "tsc", "dev": "webpack --config webpack/webpack.dev.js && webpack-dev-server --config webpack/webpack.dev.js --NODE_ENV=dev --inline", "dev-bootstrap": "webpack --config webpack/webpack.dev-bootstrap.js && webpack-dev-server --config webpack/webpack.dev-bootstrap.js --NODE_ENV=dev --inline", "test": "karma start --NODE_ENV=test", diff --git a/src/bootstrap/controls/boolean/boolean-directive.ts b/src/bootstrap/controls/boolean/boolean-directive.ts index ae851c9ab..5e69b5940 100644 --- a/src/bootstrap/controls/boolean/boolean-directive.ts +++ b/src/bootstrap/controls/boolean/boolean-directive.ts @@ -1,7 +1,16 @@ +const booleanTemplate = ` + +`; + export default angular .module('jsonforms-bootstrap.renderers.controls.boolean', ['jsonforms-bootstrap.renderers.controls']) .run(['$templateCache', $templateCache => { - $templateCache.put('boolean.html', require('./boolean.html')); + $templateCache.put('boolean.html', booleanTemplate); }]) .name; diff --git a/src/bootstrap/controls/boolean/boolean.html b/src/bootstrap/controls/boolean/boolean.html deleted file mode 100644 index 098410ac6..000000000 --- a/src/bootstrap/controls/boolean/boolean.html +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/src/bootstrap/controls/bootstrap-controls-directive.ts b/src/bootstrap/controls/bootstrap-controls-directive.ts index 969a70980..fe7eeafbc 100644 --- a/src/bootstrap/controls/bootstrap-controls-directive.ts +++ b/src/bootstrap/controls/bootstrap-controls-directive.ts @@ -1,6 +1,17 @@ +const controlTemplate = `
+
+ +
+
+
+
+ {{alert.msg}} +
+
`; + export default angular .module('jsonforms-bootstrap.renderers.controls', ['jsonforms-bootstrap']) .run(['$templateCache', $templateCache => { - $templateCache.put('control.html', require('./control.html')); + $templateCache.put('control.html', controlTemplate); }]) .name; diff --git a/src/bootstrap/controls/control.html b/src/bootstrap/controls/control.html deleted file mode 100644 index 0fdfec4f2..000000000 --- a/src/bootstrap/controls/control.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
- -
-
-
-
- {{alert.msg}} -
-
diff --git a/src/bootstrap/controls/datetime/datetime-directive.ts b/src/bootstrap/controls/datetime/datetime-directive.ts index f34818047..b4645cab8 100644 --- a/src/bootstrap/controls/datetime/datetime-directive.ts +++ b/src/bootstrap/controls/datetime/datetime-directive.ts @@ -1,8 +1,8 @@ import {RendererTester, NOT_FITTING} from '../../../components/renderers/renderer-service'; -import {IUISchemaElement} from '../../../jsonforms'; import {IPathResolver} from '../../../components/services/pathresolver/jsonforms-pathresolver'; import {DateTimeController, DateTimeControllerScope} from '../../../components/renderers/controls/datetime/datetime-directive'; +import {IUISchemaElement} from "../../../../uischema"; class DateTimeDirective implements ng.IDirective { restrict = 'E'; @@ -46,6 +46,27 @@ const DateTimeControlBootstrapRendererTester: RendererTester = function(element: } return NOT_FITTING; }; + +const datetimeTemplate = ` +
+ + + + +
+
`; + export default angular .module('jsonforms-bootstrap.renderers.controls.datetime', ['jsonforms-bootstrap.renderers.controls']) @@ -55,6 +76,6 @@ export default angular DateTimeControlBootstrapRendererTester) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('datetimeBootstrap.html', require('./datetimeBootstrap.html')); + $templateCache.put('datetimeBootstrap.html', datetimeTemplate); }]) .name; diff --git a/src/bootstrap/controls/datetime/datetimeBootstrap.html b/src/bootstrap/controls/datetime/datetimeBootstrap.html deleted file mode 100644 index 4c00754ec..000000000 --- a/src/bootstrap/controls/datetime/datetimeBootstrap.html +++ /dev/null @@ -1,19 +0,0 @@ - -
- - - - -
-
diff --git a/src/bootstrap/layouts/categories/categorization-directive.ts b/src/bootstrap/layouts/categories/categorization-directive.ts index 60f2e4e9c..712ae014b 100644 --- a/src/bootstrap/layouts/categories/categorization-directive.ts +++ b/src/bootstrap/layouts/categories/categorization-directive.ts @@ -1,7 +1,26 @@ +const categorizationTemplate = ` +
+
+ + +
+ + +
+
+
+
+
+
`; + export default angular .module('jsonforms-bootstrap.renderers.layouts.categories', ['jsonforms.renderers.layouts', 'jsonforms-bootstrap']) .run(['$templateCache', $templateCache => { - $templateCache.put('categorization.html', require('./categorization.html')); + $templateCache.put('categorization.html', categorizationTemplate); }]) .name; diff --git a/src/bootstrap/layouts/categories/categorization.html b/src/bootstrap/layouts/categories/categorization.html deleted file mode 100644 index c1127d108..000000000 --- a/src/bootstrap/layouts/categories/categorization.html +++ /dev/null @@ -1,18 +0,0 @@ - -
-
- - -
- - -
-
-
-
-
-
diff --git a/src/bootstrap/layouts/group/group-directive.ts b/src/bootstrap/layouts/group/group-directive.ts index 74c7c510a..ef8cf91cb 100644 --- a/src/bootstrap/layouts/group/group-directive.ts +++ b/src/bootstrap/layouts/group/group-directive.ts @@ -1,7 +1,19 @@ +const groupTemplate = ` +
+
+ {{vm.label}} + + +
+
+
`; + export default angular .module('jsonforms-bootstrap.renderers.layouts.group', ['jsonforms.renderers.layouts', 'jsonforms-bootstrap']) .run(['$templateCache', $templateCache => { - $templateCache.put('group.html', require('./group.html')); + $templateCache.put('group.html', groupTemplate); }]) .name; diff --git a/src/bootstrap/layouts/group/group.html b/src/bootstrap/layouts/group/group.html deleted file mode 100644 index 1f033fc9a..000000000 --- a/src/bootstrap/layouts/group/group.html +++ /dev/null @@ -1,11 +0,0 @@ - -
-
- {{vm.label}} - - -
-
-
diff --git a/src/bootstrap/layouts/horizontal/horizontal-directive.ts b/src/bootstrap/layouts/horizontal/horizontal-directive.ts index 94d7d99c2..89ce28c54 100644 --- a/src/bootstrap/layouts/horizontal/horizontal-directive.ts +++ b/src/bootstrap/layouts/horizontal/horizontal-directive.ts @@ -34,6 +34,17 @@ const BootstrapHorizontalLayoutRendererTester: RendererTester = function(element } return 3; }; + +const horizontalTemplate = ` +
+
+
+ +
+
+
+
`; + export default angular .module('jsonforms-bootstrap.renderers.layouts.horizontal', ['jsonforms.renderers.layouts', 'jsonforms-bootstrap']) @@ -43,6 +54,6 @@ export default angular BootstrapHorizontalLayoutRendererTester) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('horizontal.html', require('./horizontal.html')); + $templateCache.put('horizontal.html', horizontalTemplate); }]) .name; diff --git a/src/bootstrap/layouts/horizontal/horizontal.html b/src/bootstrap/layouts/horizontal/horizontal.html deleted file mode 100644 index 9a9af06d7..000000000 --- a/src/bootstrap/layouts/horizontal/horizontal.html +++ /dev/null @@ -1,9 +0,0 @@ - -
-
-
- -
-
-
-
diff --git a/src/bootstrap/layouts/masterdetail/masterdetail-collection.html b/src/bootstrap/layouts/masterdetail/masterdetail-collection.html deleted file mode 100644 index d9bf477ca..000000000 --- a/src/bootstrap/layouts/masterdetail/masterdetail-collection.html +++ /dev/null @@ -1,36 +0,0 @@ -
- - - - {{key}} - - - - - - - - - {{child.name!=undefined?child.name:child}} - - - -
- -
-
-
-
-
-
diff --git a/src/bootstrap/layouts/masterdetail/masterdetail-directives.ts b/src/bootstrap/layouts/masterdetail/masterdetail-directives.ts index 3fa44e0d4..62145d84e 100644 --- a/src/bootstrap/layouts/masterdetail/masterdetail-directives.ts +++ b/src/bootstrap/layouts/masterdetail/masterdetail-directives.ts @@ -1,11 +1,64 @@ +const masterDetailTemplate = ` +
+ +
+ + +
+ +
+ +
+
`; + +const masterDetailCollectionTemplate = ` +
+ + + + {{key}} + + + + + + + + + {{child.name!=undefined?child.name:child}} + + + +
+ +
+
+
+
+
+
`; + export default angular .module('jsonforms-bootstrap.renderers.layouts.masterdetail', ['jsonforms.renderers.layouts', 'jsonforms-bootstrap']) .run(['$templateCache', $templateCache => { - $templateCache.put('masterdetail.html', require('./masterdetail.html')); + $templateCache.put('masterdetail.html', masterDetailTemplate); }]) .run(['$templateCache', $templateCache => { - $templateCache.put('masterdetail-collection.html', - require('./masterdetail-collection.html')); + $templateCache.put('masterdetail-collection.html', masterDetailCollectionTemplate); }]) .name; diff --git a/src/bootstrap/layouts/masterdetail/masterdetail.html b/src/bootstrap/layouts/masterdetail/masterdetail.html deleted file mode 100644 index c7f0d043b..000000000 --- a/src/bootstrap/layouts/masterdetail/masterdetail.html +++ /dev/null @@ -1,14 +0,0 @@ -
- -
- - -
- -
- -
-
diff --git a/src/bootstrap/layouts/vertical/vertical-directive.ts b/src/bootstrap/layouts/vertical/vertical-directive.ts index 232d5d40e..6162fca04 100644 --- a/src/bootstrap/layouts/vertical/vertical-directive.ts +++ b/src/bootstrap/layouts/vertical/vertical-directive.ts @@ -1,7 +1,16 @@ +const verticalTemplate = ` + +
+
+ +
+
+
`; + export default angular .module('jsonforms-bootstrap.renderers.layouts.vertical', ['jsonforms.renderers.layouts', 'jsonforms-bootstrap']) .run(['$templateCache', $templateCache => { - $templateCache.put('vertical.html', require('./vertical.html')); + $templateCache.put('vertical.html', verticalTemplate); }]) .name; diff --git a/src/bootstrap/layouts/vertical/vertical.html b/src/bootstrap/layouts/vertical/vertical.html deleted file mode 100644 index 8a1244ac2..000000000 --- a/src/bootstrap/layouts/vertical/vertical.html +++ /dev/null @@ -1,7 +0,0 @@ - -
-
- -
-
-
diff --git a/src/components/form/form-directive.ts b/src/components/form/form-directive.ts index ebbc5ef38..2378d97ea 100644 --- a/src/components/form/form-directive.ts +++ b/src/components/form/form-directive.ts @@ -15,18 +15,26 @@ import {IDataProvider} from '../services/data/data-service'; import {RuleService} from '../services/rule/rule-service'; import {DefaultDataProvider} from '../services/data/data-services'; import {RendererService} from '../renderers/renderer-service'; -import {IUISchemaElement} from '../../jsonforms'; +import {IUISchemaElement} from '../../uischema'; +import {SchemaElement} from '../../jsonschema'; export class FormController { static $inject = ['RendererService', 'PathResolver', 'UiSchemaRegistry', 'SchemaGenerator', '$compile', '$q', '$scope']; - public element: any; public uiSchema: IUISchemaElement; private isInitialized = false; private childScope: ng.IScope; + private static isDataProvider(testMe: any): testMe is IDataProvider { + return testMe !== undefined && testMe.hasOwnProperty('fetchData'); + } + + private static isUiSchemaProvider(testMe: any): testMe is IUiSchemaProvider { + return testMe !== undefined && testMe.hasOwnProperty('fetchUiSchema'); + } + constructor( private rendererService: RendererService, private PathResolver: IPathResolver, @@ -37,13 +45,6 @@ export class FormController { private scope: JsonFormsDirectiveScope ) { } - private static isDataProvider(testMe: any): testMe is IDataProvider { - return testMe !== undefined && testMe.hasOwnProperty('fetchData'); - } - - private static isUiSchemaProvider(testMe: any): testMe is IUiSchemaProvider { - return testMe !== undefined && testMe.hasOwnProperty('fetchUiSchema'); - } public init() { if (this.isInitialized) { @@ -166,11 +167,15 @@ export interface JsonFormsDirectiveScope extends ng.IScope { data: any; } +const formTemplate = ` +
+
+
`; -export class JsonFormsDirective implements ng.IDirective { +export class JsonFormsDirective implements ng.IDirective { restrict = 'E'; - template = require('./form.html'); + templateUrl = 'form.html'; controller = FormController; controllerAs = 'vm'; // we can't use bindToController because we want watchers @@ -219,7 +224,7 @@ export interface JsonFormsInnerDirectiveScope extends ng.IScope { export class JsonFormsInnerDirective implements ng.IDirective { restrict = 'E'; - template = require('./form.html'); + templateUrl = 'form.html'; controller = InnerFormController; controllerAs = 'vm'; bindToController = { @@ -231,3 +236,11 @@ export class JsonFormsInnerDirective implements ng.IDirective { ctrl.init(); } } + +export default angular.module('jsonforms.form.directives', ['jsonforms.form']) + .directive('jsonforms', () => new JsonFormsDirective()) + .directive('jsonformsInner', () => new JsonFormsInnerDirective()) + .run(['$templateCache', ($templateCache: ng.ITemplateCacheService) => + $templateCache.put('form.html', formTemplate)] + ) + .name; diff --git a/src/components/form/form.ts b/src/components/form/form.ts index d3afb71e1..a7d391c90 100644 --- a/src/components/form/form.ts +++ b/src/components/form/form.ts @@ -27,11 +27,10 @@ import arrayControlDirective from '../renderers/controls/array/array-directive'; import referenceControlDirective from '../renderers/controls/reference/reference-directive'; import datetimeControlDirective from '../renderers/controls/datetime/datetime-directive'; import enumControlDirective from '../renderers/controls/enum/enum-directive'; +import formsDirective from '../form/form-directive'; import norendererDirective from '../renderers/norenderer-directive'; -import {JsonFormsDirective, JsonFormsInnerDirective} from './form-directive'; - export default angular .module('jsonforms.form', [ rendererService, @@ -41,6 +40,8 @@ export default angular uiSchemaGenerator, schemaGenerator, + formsDirective, + controlDirective, layoutDirective, norendererDirective, @@ -62,6 +63,4 @@ export default angular masterDetailDirectives, ]) - .directive('jsonforms', () => new JsonFormsDirective()) - .directive('jsonformsInner', () => new JsonFormsInnerDirective()) .name; diff --git a/src/components/generators/jsonforms-uischemagenerator.ts b/src/components/generators/jsonforms-uischemagenerator.ts index 73314f483..62df8035e 100644 --- a/src/components/generators/jsonforms-uischemagenerator.ts +++ b/src/components/generators/jsonforms-uischemagenerator.ts @@ -2,7 +2,7 @@ import {IUISchemaGenerator} from './generators'; import {PathUtil} from '../services/pathutil'; -import {IUISchemaElement, IControlObject, ILayout} from '../../jsonforms'; +import {IUISchemaElement, IControlObject, ILayout} from '../../uischema'; export class UISchemaGenerator implements IUISchemaGenerator { diff --git a/src/components/ng-services/uischemaregistry/uischemaregistry-service.ts b/src/components/ng-services/uischemaregistry/uischemaregistry-service.ts index 1f4ceb2ba..4a54b2d41 100644 --- a/src/components/ng-services/uischemaregistry/uischemaregistry-service.ts +++ b/src/components/ng-services/uischemaregistry/uischemaregistry-service.ts @@ -1,4 +1,4 @@ -import {IUISchemaElement} from '../../../jsonforms'; +import {IUISchemaElement} from '../../../uischema'; import {IUISchemaGenerator} from '../../generators/generators'; export interface UiSchemaRegistry { diff --git a/src/components/renderers/controls/abstract-control.ts b/src/components/renderers/controls/abstract-control.ts index d9599881e..a5374239b 100644 --- a/src/components/renderers/controls/abstract-control.ts +++ b/src/components/renderers/controls/abstract-control.ts @@ -4,8 +4,8 @@ import {RendererTester, NOT_FITTING} from '../renderer-service'; import {Services, ServiceId, IValidationService, ISchemaProvider} from '../../services/services'; import {IRuleService, IRuleServiceCallBack} from '../../services/rule/rule-service'; import {IDataProvider} from '../../services/data/data-service'; -import {IControlObject, IRule, IWithLabel, ILabelObject, IUISchemaElement} - from '../../../jsonforms'; +import {IRule, IControlObject, IWithLabel, ILabelObject, IUISchemaElement} from '../../../uischema'; +import {SchemaElement} from '../../../jsonschema'; export abstract class AbstractControl implements IRuleServiceCallBack { diff --git a/src/components/renderers/controls/array/array-directive.ts b/src/components/renderers/controls/array/array-directive.ts index 6bc60cecf..9657495c1 100644 --- a/src/components/renderers/controls/array/array-directive.ts +++ b/src/components/renderers/controls/array/array-directive.ts @@ -4,7 +4,8 @@ import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolv import {PathUtil} from '../../../services/pathutil'; import {IUISchemaGenerator} from '../../../generators/generators'; import {AbstractControl, ControlRendererTester} from '../abstract-control'; -import {IUISchemaElement, IGroup} from '../../../../jsonforms'; +import {IUISchemaElement, IGroup} from '../../../../uischema'; +import {SchemaArray} from '../../../../jsonschema'; class ArrayReadOnlyDirective implements ng.IDirective { restrict = 'E'; diff --git a/src/components/renderers/controls/boolean/boolean-directive.ts b/src/components/renderers/controls/boolean/boolean-directive.ts index 8005d9570..173ee7f1c 100644 --- a/src/components/renderers/controls/boolean/boolean-directive.ts +++ b/src/components/renderers/controls/boolean/boolean-directive.ts @@ -17,6 +17,15 @@ class BooleanController extends AbstractControl { } } +const booleanTemplate = ` + +`; + export default angular .module('jsonforms.renderers.controls.boolean', ['jsonforms.renderers.controls']) .directive('booleanControl', () => new BooleanDirective()) @@ -24,6 +33,6 @@ export default angular RendererService.register('boolean-control', ControlRendererTester('boolean', 1)) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('boolean.html', require('./boolean.html')); + $templateCache.put('boolean.html', booleanTemplate); }]) .name; diff --git a/src/components/renderers/controls/boolean/boolean.html b/src/components/renderers/controls/boolean/boolean.html deleted file mode 100644 index 098410ac6..000000000 --- a/src/components/renderers/controls/boolean/boolean.html +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/src/components/renderers/controls/control.html b/src/components/renderers/controls/control.html deleted file mode 100644 index 1ba807d1f..000000000 --- a/src/components/renderers/controls/control.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
- -
-
-
-
- {{alert.msg}} -
-
diff --git a/src/components/renderers/controls/controls-directive.ts b/src/components/renderers/controls/controls-directive.ts index 952b756a3..6ace90eb5 100644 --- a/src/components/renderers/controls/controls-directive.ts +++ b/src/components/renderers/controls/controls-directive.ts @@ -1,3 +1,14 @@ +const controlTemplate = `
+
+ +
+
+
+
+ {{alert.msg}} +
+
`; + class ControlDirective implements ng.IDirective { restrict = 'E'; transclude = true; @@ -8,6 +19,6 @@ export default angular .module('jsonforms.renderers.controls', ['jsonforms.renderers']) .directive('jsonformsControl', () => new ControlDirective) .run(['$templateCache', $templateCache => { - $templateCache.put('control.html', require('./control.html')); + $templateCache.put('control.html', controlTemplate); }]) .name; diff --git a/src/components/renderers/controls/datetime/datetime-directive.ts b/src/components/renderers/controls/datetime/datetime-directive.ts index 37e957f71..f0450b4ca 100644 --- a/src/components/renderers/controls/datetime/datetime-directive.ts +++ b/src/components/renderers/controls/datetime/datetime-directive.ts @@ -1,7 +1,7 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractControl} from '../abstract-control'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {IUISchemaElement} from '../../../../uischema'; class DateTimeDirective implements ng.IDirective { restrict = 'E'; @@ -50,6 +50,18 @@ const DateTimeControlRendererTester: RendererTester = function(element: IUISchem return NOT_FITTING; }; +const datetimeTemplate = ` + +`; + export default angular .module('jsonforms.renderers.controls.datetime', ['jsonforms.renderers.controls']) .directive('datetimeControl', () => new DateTimeDirective()) @@ -57,6 +69,6 @@ export default angular RendererService.register('datetime-control', DateTimeControlRendererTester) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('datetime.html', require('./datetime.html')); + $templateCache.put('datetime.html', datetimeTemplate); }]) .name; diff --git a/src/components/renderers/controls/datetime/datetime.html b/src/components/renderers/controls/datetime/datetime.html deleted file mode 100644 index 66e2fadc8..000000000 --- a/src/components/renderers/controls/datetime/datetime.html +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/src/components/renderers/controls/enum/enum-directive.ts b/src/components/renderers/controls/enum/enum-directive.ts index 4db2343d4..e1d03695c 100644 --- a/src/components/renderers/controls/enum/enum-directive.ts +++ b/src/components/renderers/controls/enum/enum-directive.ts @@ -1,7 +1,8 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractControl} from '../abstract-control'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {SchemaElement} from '../../../../jsonschema'; +import {IUISchemaElement} from '../../../../uischema'; class EnumDirective implements ng.IDirective { restrict = 'E'; diff --git a/src/components/renderers/controls/reference/reference-directive.ts b/src/components/renderers/controls/reference/reference-directive.ts index d6c1720d7..5b54f16c2 100644 --- a/src/components/renderers/controls/reference/reference-directive.ts +++ b/src/components/renderers/controls/reference/reference-directive.ts @@ -1,7 +1,7 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractControl} from '../abstract-control'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {IUISchemaElement} from '../../../../uischema'; class ReferenceDirective implements ng.IDirective { restrict = 'E'; diff --git a/src/components/renderers/controls/string/string-directive.ts b/src/components/renderers/controls/string/string-directive.ts index e57e065b6..c5663eb92 100644 --- a/src/components/renderers/controls/string/string-directive.ts +++ b/src/components/renderers/controls/string/string-directive.ts @@ -1,7 +1,8 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractControl, ControlRendererTester} from '../abstract-control'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {IUISchemaElement} from '../../../../uischema'; + class StringDirective implements ng.IDirective { restrict = 'E'; diff --git a/src/components/renderers/extras/label/label-directive.ts b/src/components/renderers/extras/label/label-directive.ts index 867e9852a..a36a6de6c 100644 --- a/src/components/renderers/extras/label/label-directive.ts +++ b/src/components/renderers/extras/label/label-directive.ts @@ -1,6 +1,7 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {IUISchemaElement} from '../../../../uischema'; + class LabelDirective implements ng.IDirective { restrict = 'E'; template = `{{vm.text}}
`; diff --git a/src/components/renderers/layouts/abstract-layout.ts b/src/components/renderers/layouts/abstract-layout.ts index 3c4b90e82..738dc6171 100644 --- a/src/components/renderers/layouts/abstract-layout.ts +++ b/src/components/renderers/layouts/abstract-layout.ts @@ -1,7 +1,7 @@ import {Services, ServiceId} from '../../services/services'; import {IRuleService, IRuleServiceCallBack} from '../../services/rule/rule-service'; import {IDataProvider} from '../../services/data/data-service'; -import {ILayout, IRule} from '../../../jsonforms'; +import {ILayout, IRule} from '../../../uischema'; export abstract class AbstractLayout implements IRuleServiceCallBack { diff --git a/src/components/renderers/layouts/categories/categorization-directive.ts b/src/components/renderers/layouts/categories/categorization-directive.ts index c95f6f58e..42b1c8539 100644 --- a/src/components/renderers/layouts/categories/categorization-directive.ts +++ b/src/components/renderers/layouts/categories/categorization-directive.ts @@ -1,7 +1,7 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractLayout} from '../abstract-layout'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {IUISchemaElement} from '../../../../uischema'; class CategorizationDirective implements ng.IDirective { restrict = 'E'; @@ -21,6 +21,29 @@ class CategorizationController extends AbstractLayout { this.selectedCategory = category; } } + +const categorizationTemplate = ` +
+
+
    +
  • + + {{category.label}} + +
  • +
+
+
+ + +
+
+
`; + const CategorizationLayoutRendererTester: RendererTester = function(element: IUISchemaElement, dataSchema: any, dataObject: any, @@ -37,6 +60,6 @@ export default angular RendererService.register('categorization', CategorizationLayoutRendererTester) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('categorization.html', require('./categorization.html')); + $templateCache.put('categorization.html', categorizationTemplate); }]) .name; diff --git a/src/components/renderers/layouts/categories/categorization.html b/src/components/renderers/layouts/categories/categorization.html deleted file mode 100644 index 601f4558c..000000000 --- a/src/components/renderers/layouts/categories/categorization.html +++ /dev/null @@ -1,14 +0,0 @@ - -
-
-
    -
  • - {{category.label}} -
  • -
-
-
- -
-
-
diff --git a/src/components/renderers/layouts/categories/categorization.spec.ts b/src/components/renderers/layouts/categories/categorization.spec.ts index 9aa8382e2..737fd3428 100644 --- a/src/components/renderers/layouts/categories/categorization.spec.ts +++ b/src/components/renderers/layouts/categories/categorization.spec.ts @@ -52,7 +52,7 @@ describe('Categorization', () => { scope.data = { 'name': 'John Doe '}; let el = $compile('')(scope); scope.$digest(); - expect(el.html()).toContain('>Tab1'); - expect(el.html()).toContain('>MyTab2'); + expect(el.html()).toMatch(/>\s*Tab1\s*<\/span>/); + expect(el.html()).toMatch(/>\s*MyTab2\s*<\/span>/); })); }); diff --git a/src/components/renderers/layouts/group/group-directive.ts b/src/components/renderers/layouts/group/group-directive.ts index be30162cf..2116114e6 100644 --- a/src/components/renderers/layouts/group/group-directive.ts +++ b/src/components/renderers/layouts/group/group-directive.ts @@ -1,7 +1,8 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractLayout} from '../abstract-layout'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {IUISchemaElement} from '../../../../uischema'; + class GroupDirective implements ng.IDirective { restrict = 'E'; templateUrl = 'group.html'; @@ -29,6 +30,17 @@ const GroupLayoutRendererTester: RendererTester = function(element: IUISchemaEle return 2; }; +const groupTemplate = ` +
+
+ {{vm.label}} + + +
+
+
`; + export default angular .module('jsonforms.renderers.layouts.group', ['jsonforms.renderers.layouts']) .directive('grouplayout', () => new GroupDirective()) @@ -36,6 +48,6 @@ export default angular RendererService.register('grouplayout', GroupLayoutRendererTester) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('group.html', require('./group.html')); + $templateCache.put('group.html', groupTemplate); }]) .name; diff --git a/src/components/renderers/layouts/group/group.html b/src/components/renderers/layouts/group/group.html deleted file mode 100644 index e9c4e393c..000000000 --- a/src/components/renderers/layouts/group/group.html +++ /dev/null @@ -1,10 +0,0 @@ - -
-
- {{vm.label}} - - -
-
-
diff --git a/src/components/renderers/layouts/horizontal/horizontal-directive.ts b/src/components/renderers/layouts/horizontal/horizontal-directive.ts index 469f0ca02..498e12ded 100644 --- a/src/components/renderers/layouts/horizontal/horizontal-directive.ts +++ b/src/components/renderers/layouts/horizontal/horizontal-directive.ts @@ -2,7 +2,8 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractLayout} from '../abstract-layout'; import {LabelObjectUtil} from '../../controls/abstract-control'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {IUISchemaElement} from '../../../../uischema'; + class HorizontalDirective implements ng.IDirective { restrict = 'E'; @@ -43,6 +44,18 @@ const HorizontalLayoutRendererTester: RendererTester = function(element: IUISche return 2; }; +const horizontalTemplate = ` +
+
+
+
+ +
+
+
+
+
`; + export default angular .module('jsonforms.renderers.layouts.horizontal', ['jsonforms.renderers.layouts']) .directive('horizontallayout', () => new HorizontalDirective()) @@ -50,6 +63,6 @@ export default angular RendererService.register('horizontallayout', HorizontalLayoutRendererTester) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('horizontal.html', require('./horizontal.html')); + $templateCache.put('horizontal.html', horizontalTemplate); }]) .name; diff --git a/src/components/renderers/layouts/horizontal/horizontal.html b/src/components/renderers/layouts/horizontal/horizontal.html deleted file mode 100644 index 23678374f..000000000 --- a/src/components/renderers/layouts/horizontal/horizontal.html +++ /dev/null @@ -1,11 +0,0 @@ - -
-
-
-
- -
-
-
-
-
diff --git a/src/components/renderers/layouts/layout-directive.ts b/src/components/renderers/layouts/layout-directive.ts index a01f80101..24197d474 100644 --- a/src/components/renderers/layouts/layout-directive.ts +++ b/src/components/renderers/layouts/layout-directive.ts @@ -1,3 +1,5 @@ +const layoutTemplate = `
+
`; export default angular .module('jsonforms.renderers.layouts', ['jsonforms.renderers']) @@ -9,6 +11,6 @@ export default angular }; }) .run(['$templateCache', $templateCache => { - $templateCache.put('layout.html', require('./layout.html')); + $templateCache.put('layout.html', layoutTemplate); }]) .name; diff --git a/src/components/renderers/layouts/layout.html b/src/components/renderers/layouts/layout.html deleted file mode 100644 index ecf9a99b6..000000000 --- a/src/components/renderers/layouts/layout.html +++ /dev/null @@ -1,2 +0,0 @@ -
-
diff --git a/src/components/renderers/layouts/masterdetail/masterdetail-collection.html b/src/components/renderers/layouts/masterdetail/masterdetail-collection.html deleted file mode 100644 index ffed9e493..000000000 --- a/src/components/renderers/layouts/masterdetail/masterdetail-collection.html +++ /dev/null @@ -1,28 +0,0 @@ -
- -
diff --git a/src/components/renderers/layouts/masterdetail/masterdetail-directives.ts b/src/components/renderers/layouts/masterdetail/masterdetail-directives.ts index 32ff1d7da..3b4f41f3c 100644 --- a/src/components/renderers/layouts/masterdetail/masterdetail-directives.ts +++ b/src/components/renderers/layouts/masterdetail/masterdetail-directives.ts @@ -1,7 +1,9 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractControl} from '../../controls/abstract-control'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {SchemaElement} from '../../../../jsonschema'; +import {IUISchemaElement} from '../../../../uischema'; + class MasterDetailDirective implements ng.IDirective { restrict = 'E'; templateUrl = 'masterdetail.html'; @@ -117,6 +119,69 @@ class MasterDetailMember implements angular.IDirective { } } +const masterDetailTemplate = ` +
+ +
+ + +
+ +
+ +
+
`; + +const masterDetailCollectionTemplate = ` +
+ +
`; + export default angular .module('jsonforms.renderers.layouts.masterdetail', ['jsonforms.renderers.layouts']) .directive('masterDetail', () => new MasterDetailDirective()) @@ -124,11 +189,10 @@ export default angular RendererService.register('master-detail', MasterDetailControlRendererTester) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('masterdetail.html', require('./masterdetail.html')); + $templateCache.put('masterdetail.html', masterDetailTemplate); }]) .run(['$templateCache', $templateCache => { - $templateCache.put('masterdetail-collection.html', - require('./masterdetail-collection.html')); + $templateCache.put('masterdetail-collection.html', masterDetailCollectionTemplate); }]) .directive('jsonformsMasterdetailCollection', () => new MasterDetailCollectionDirective()) .directive('jsonformsMasterdetailMember', () => new MasterDetailMember()) diff --git a/src/components/renderers/layouts/masterdetail/masterdetail.html b/src/components/renderers/layouts/masterdetail/masterdetail.html deleted file mode 100644 index a724fb758..000000000 --- a/src/components/renderers/layouts/masterdetail/masterdetail.html +++ /dev/null @@ -1,12 +0,0 @@ -
- -
- - -
- -
- -
-
diff --git a/src/components/renderers/layouts/vertical/vertical-directive.ts b/src/components/renderers/layouts/vertical/vertical-directive.ts index 1e377ca20..66806ab1e 100644 --- a/src/components/renderers/layouts/vertical/vertical-directive.ts +++ b/src/components/renderers/layouts/vertical/vertical-directive.ts @@ -1,7 +1,7 @@ import {RendererTester, NOT_FITTING} from '../../renderer-service'; import {IPathResolver} from '../../../services/pathresolver/jsonforms-pathresolver'; import {AbstractLayout} from '../abstract-layout'; -import {IUISchemaElement} from '../../../../jsonforms'; +import {IUISchemaElement} from '../../../../uischema'; class VerticalDirective implements ng.IDirective { restrict = 'E'; @@ -27,6 +27,17 @@ const VerticalLayoutRendererTester: RendererTester = function(element: IUISchema return 2; }; +const verticalTemplate = ` + +
+
+
+ +
+
+
+
`; + export default angular .module('jsonforms.renderers.layouts.vertical', ['jsonforms.renderers.layouts']) .directive('verticallayout', () => new VerticalDirective()) @@ -34,6 +45,6 @@ export default angular RendererService.register('verticallayout', VerticalLayoutRendererTester) ]) .run(['$templateCache', $templateCache => { - $templateCache.put('vertical.html', require('./vertical.html')); + $templateCache.put('vertical.html', verticalTemplate); }]) .name; diff --git a/src/components/renderers/norenderer-directive.ts b/src/components/renderers/norenderer-directive.ts index 0755252ed..9e2ebe438 100644 --- a/src/components/renderers/norenderer-directive.ts +++ b/src/components/renderers/norenderer-directive.ts @@ -1,4 +1,5 @@ -import {IUISchemaElement} from '../../jsonforms'; +import {IUISchemaElement} from '../../uischema'; + class NoRendererDirective implements ng.IDirective { restrict = 'E'; template = ` diff --git a/src/components/renderers/renderer-service.ts b/src/components/renderers/renderer-service.ts index c60cacab6..8d46e83cc 100644 --- a/src/components/renderers/renderer-service.ts +++ b/src/components/renderers/renderer-service.ts @@ -1,5 +1,5 @@ import {IPathResolver} from '../services/pathresolver/jsonforms-pathresolver'; -import {IUISchemaElement} from '../../jsonforms'; +import {IUISchemaElement} from '../../uischema'; export interface RendererService { register(directiveName: string, tester: RendererTester): void; diff --git a/src/components/services/pathresolver/jsonforms-pathresolver.ts b/src/components/services/pathresolver/jsonforms-pathresolver.ts index 59734b69d..5f3b19331 100644 --- a/src/components/services/pathresolver/jsonforms-pathresolver.ts +++ b/src/components/services/pathresolver/jsonforms-pathresolver.ts @@ -1,5 +1,6 @@ import {PathUtil} from '../pathutil'; +import {SchemaElement} from '../../../jsonschema'; export interface IPathResolver { toInstancePath(schemaPath: string): string; diff --git a/src/components/services/rule/rule-service.ts b/src/components/services/rule/rule-service.ts index b8ecf3c41..5d2b301d5 100644 --- a/src/components/services/rule/rule-service.ts +++ b/src/components/services/rule/rule-service.ts @@ -1,7 +1,8 @@ import {ServiceId} from '../services'; import {IService} from '../services'; import {IPathResolver} from '../pathresolver/jsonforms-pathresolver'; -import {IRule, ILeafCondition, RuleEffect} from '../../../jsonforms'; +import {IRule, ILeafCondition, RuleEffect} from '../../../uischema'; + export interface IRuleService extends IService { addRuleTrack(ruleServiceCallback: IRuleServiceCallBack): void; diff --git a/src/components/services/services.ts b/src/components/services/services.ts index f30425c59..ef89ff1f0 100644 --- a/src/components/services/services.ts +++ b/src/components/services/services.ts @@ -1,6 +1,7 @@ - import {PathResolver} from './pathresolver/jsonforms-pathresolver'; -import {IUISchemaElement} from '../../jsonforms'; +import {SchemaElement} from '../../jsonschema'; +import {IUISchemaElement} from '../../uischema'; + // TODO: replace let tv4 = require('tv4'); diff --git a/src/index.ts b/src/index.ts index 2c86941ad..57f7033fe 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,4 @@ + import 'angular'; import form from './components/form/form'; import capitalize from './components/ng-services/capitalize/capitalize.filter'; @@ -11,3 +12,16 @@ export default angular.module('jsonforms', [ capitalize, pathResolver ]).name; + +export interface JsonFormsScope extends angular.IScope { + data: any; + schema: any; + uiSchema: any; +} + +export * from './uischema'; +export * from './jsonschema'; + +export {AbstractControl, ControlRendererTester} + from './components/renderers/controls/abstract-control' +export {IPathResolver} from './components/services/pathresolver/jsonforms-pathresolver'; diff --git a/src/jsonschema.ts b/src/jsonschema.ts new file mode 100644 index 000000000..ebfaaaecc --- /dev/null +++ b/src/jsonschema.ts @@ -0,0 +1,25 @@ +export interface SchemaElement { + type?: string; + enum?: SchemaElement[]; +} + +export interface SchemaObject extends SchemaElement { + // TODO: specify properties + properties?: any; + additionalProperties?: any; + required?: StringArray; +} + +export interface SchemaArray extends SchemaElement { + // TODO: specify items + items?: any; +} + +export interface SchemaString extends SchemaElement { + format?: string; +} + +// Array type +export interface StringArray { + [index: number]: string; +} diff --git a/src/jsonforms.ts b/src/uischema.ts similarity index 90% rename from src/jsonforms.ts rename to src/uischema.ts index 685ea3208..6adc01556 100644 --- a/src/jsonforms.ts +++ b/src/uischema.ts @@ -1,18 +1,19 @@ - -import IScope = angular.IScope; export interface IRule { effect: RuleEffect; condition: ICondition; } + export enum RuleEffect { HIDE = 'HIDE', SHOW = 'SHOW', ENABLE = 'ENABLE', DISABLE = 'DISABLE' } + export interface ICondition { type: string; // nice to have } + export interface ILeafCondition extends ICondition { scope: { $ref: string; @@ -61,8 +62,3 @@ export interface IArrayControlObject extends IControlObject { export interface IColumnControlObject extends IControlObject { } -export interface JsonFormsScope extends IScope { - data: any; - schema: any; - uiSchema: any; -} diff --git a/tsconfig.json b/tsconfig.json index 3e04bf01f..52760a94f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,10 +7,14 @@ "declaration":true, "module": "commonjs", "experimentalDecorators": true, - "outDir": "dist" + "outDir": "." }, + "files": [ + "./src/index.ts", + "./typings/main.d.ts", + "./src/declarations.d.ts" + ], "exclude": [ - "out", "node_modules", "dist", "dev", diff --git a/typings/jsonschema.d.ts b/typings/jsonschema.d.ts deleted file mode 100644 index 27e01e4bb..000000000 --- a/typings/jsonschema.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -interface SchemaElement{ - type?: string; -enum?: SchemaElement[] -} - -interface SchemaObject extends SchemaElement{ - //TODO: specify properties - properties?: any; - additionalProperties?: any; - required?: StringArray; -} - -interface SchemaArray extends SchemaElement{ - //TODO: specify items - items?: any; -} - -interface SchemaString extends SchemaElement { - format?: string -} - -// Array type -interface StringArray{ - [index: number]: string; -} \ No newline at end of file