163 lines
5.7 KiB
JavaScript
163 lines
5.7 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
|
|
// Horizon custom decorator for angular schema form
|
|
angular
|
|
.module('schemaForm')
|
|
.config(config);
|
|
|
|
config.$inject = [
|
|
'schemaFormDecoratorsProvider',
|
|
'sfBuilderProvider',
|
|
'sfPathProvider',
|
|
'sfErrorMessageProvider',
|
|
'$windowProvider',
|
|
'hzBuilderProvider'
|
|
];
|
|
|
|
function config(
|
|
decoratorsProvider,
|
|
sfBuilderProvider,
|
|
sfPathProvider,
|
|
sfErrorMessageProvider,
|
|
$windowProvider,
|
|
hzBuilderProvider
|
|
) {
|
|
var base = $windowProvider.$get().STATIC_URL + 'framework/widgets/form/fields/';
|
|
var simpleTransclusion = sfBuilderProvider.builders.simpleTransclusion;
|
|
var ngModelOptions = sfBuilderProvider.builders.ngModelOptions;
|
|
var ngModel = sfBuilderProvider.builders.ngModel;
|
|
var sfField = sfBuilderProvider.builders.sfField;
|
|
var condition = sfBuilderProvider.builders.condition;
|
|
var array = sfBuilderProvider.builders.array;
|
|
var tabs = hzBuilderProvider.$get().tabsBuilder;
|
|
var defaults = [sfField, ngModel, ngModelOptions, condition];
|
|
|
|
// Define all our templates
|
|
decoratorsProvider.defineDecorator('bootstrapDecorator', {
|
|
textarea: {
|
|
template: base + 'textarea.html',
|
|
builder: defaults
|
|
},
|
|
fieldset: {
|
|
template: base + 'fieldset.html',
|
|
builder: [sfField, simpleTransclusion, condition]
|
|
},
|
|
array: {
|
|
template: base + 'array.html',
|
|
builder: [sfField, ngModelOptions, ngModel, array, condition]
|
|
},
|
|
tabarray: {
|
|
template: base + 'tabarray.html',
|
|
builder: [sfField, ngModelOptions, ngModel, array, condition]
|
|
},
|
|
tabs: {
|
|
template: base + 'tabs.html',
|
|
builder: [sfField, ngModelOptions, tabs, condition]
|
|
},
|
|
section: {
|
|
template: base + 'section.html',
|
|
builder: [sfField, simpleTransclusion, condition]
|
|
},
|
|
conditional: {
|
|
template: base + 'section.html',
|
|
builder: [sfField, simpleTransclusion, condition]
|
|
},
|
|
select: {
|
|
template: base + 'select.html',
|
|
builder: defaults
|
|
},
|
|
checkbox: {
|
|
template: base + 'checkbox.html',
|
|
builder: defaults
|
|
},
|
|
checkboxes: {
|
|
template: base + 'checkboxes.html',
|
|
builder: [sfField, ngModelOptions, ngModel, array, condition]
|
|
},
|
|
number: {
|
|
template: base + 'default.html',
|
|
builder: defaults
|
|
},
|
|
password: {
|
|
template: base + 'default.html',
|
|
builder: defaults
|
|
},
|
|
submit: {
|
|
template: base + 'submit.html',
|
|
builder: defaults
|
|
},
|
|
button: {
|
|
template: base + 'submit.html',
|
|
builder: defaults
|
|
},
|
|
radios: {
|
|
template: base + 'radios.html',
|
|
builder: defaults
|
|
},
|
|
'radios-inline': {
|
|
template: base + 'radios-inline.html',
|
|
builder: defaults
|
|
},
|
|
radiobuttons: {
|
|
template: base + 'radio-buttons.html',
|
|
builder: defaults
|
|
},
|
|
help: {
|
|
template: base + 'help.html',
|
|
builder: defaults
|
|
},
|
|
'default': {
|
|
template: base + 'default.html',
|
|
builder: defaults
|
|
}
|
|
}, []);
|
|
|
|
// Define and register our validation messages
|
|
// These are the error codes provided by the tv4 validator:
|
|
// https://github.com/geraintluff/tv4/blob/master/source/api.js
|
|
var defaultMessages = {
|
|
"default": gettext("The data in this field is invalid"),
|
|
0: gettext("Invalid type, expected {$schema.type$}"),
|
|
1: gettext("No enum match for: {$viewValue$}"),
|
|
10: gettext("Data does not match any schemas from 'anyOf'"),
|
|
11: gettext("Data does not match any schemas from 'oneOf'"),
|
|
12: gettext("Data is valid against more than one schema from 'oneOf'"),
|
|
13: gettext("Data matches schema from 'not'"),
|
|
// Numeric errors
|
|
100: gettext("{$viewValue$} is not a multiple of {$schema.multipleOf$}"),
|
|
101: gettext("{$viewValue$} is less than the allowed minimum of {$schema.minimum$}"),
|
|
102: gettext("{$viewValue$} is equal to the exclusive minimum {$schema.minimum$}"),
|
|
103: gettext("{$viewValue$} is greater than the allowed maximum of {$schema.maximum$}"),
|
|
104: gettext("{$viewValue$} is equal to the exclusive maximum {$schema.maximum$}"),
|
|
105: gettext("{$viewValue$} is not a valid number"),
|
|
// String errors
|
|
/* eslint-disable max-len */
|
|
200: gettext("{$schema.title$} is too short ({$viewValue.length$} characters), minimum {$schema.minLength$}"),
|
|
201: gettext("{$schema.title$} is too long ({$viewValue.length$} characters), maximum {$schema.maxLength$}"),
|
|
/* eslint-enable max-len */
|
|
202: gettext("{$schema.title$} is formatted incorrectly"),
|
|
// Object errors
|
|
300: gettext("Too few properties defined, minimum {$schema.minProperties$}"),
|
|
301: gettext("Too many properties defined, maximum {$schema.maxProperties$}"),
|
|
302: gettext("{$schema.title$} is a required field"),
|
|
303: gettext("Additional properties not allowed"),
|
|
304: gettext("Dependency failed - key must exist"),
|
|
// Array errors
|
|
400: gettext("Array is too short ({$value.length$} items), minimum {$schema.minItems$}"),
|
|
401: gettext("Array is too long ({$value.length$} items), maximum {$schema.maxItems$}"),
|
|
402: gettext("Array items must be unique"),
|
|
403: gettext("Additional items not allowed"),
|
|
// Format errors
|
|
500: gettext("Format validation failed"),
|
|
501: gettext("Keyword failed: '{$title$}'"),
|
|
// Schema structure
|
|
600: gettext("Circular $refs"),
|
|
// Non-standard validation options
|
|
1000: gettext("Unknown property (not in schema)")
|
|
};
|
|
|
|
sfErrorMessageProvider.setDefaultMessages(defaultMessages);
|
|
}
|
|
})();
|