Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 04685e9

Browse files
Remove templates needing compiling with gulp
Template dependencies are now loaded through webpack also
1 parent d95d8a2 commit 04685e9

23 files changed

+424
-233
lines changed

‎dist/angular-schema-form-bootstrap.js

Lines changed: 264 additions & 126 deletions
Large diffs are not rendered by default.

‎examples/bootstrap-example.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,6 @@ <h3>Schema</h3>
220220
<script type="text/javascript" src="../bower_components/angular-ui-ace/ui-ace.js"></script>
221221
<script type="text/javascript" src="../bower_components/pickadate/lib/picker.js"></script>
222222
<script type="text/javascript" src="../bower_components/pickadate/lib/picker.date.js"></script>
223-
<script type="text/javascript" src="../bower_components/pickadate/lib/translations/nl_NL.js"></script>
224223

225224
<script type="text/javascript" src="../bower_components/spectrum/spectrum.js"></script>
226225
<script type="text/javascript" src="../bower_components/spectrum/i18n/jquery.spectrum-sv.js"></script>

‎package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
"description": "Bootstrap 3 decorator for Angular Schema Form",
55
"main": "dist/bootstrap-decorator.js",
66
"scripts": {
7-
"templates": "gulp templates",
87
"dist": "npm run build && npm run minify",
98
"build": "webpack",
109
"watch": "webpack --watch",
11-
"minify": "uglifyjs dist/angular-schema-form-material.js --comments --output=dist/angular-schema-form-material.min.js",
10+
"minify": "uglifyjs dist/angular-schema-form-bootstrap.js --comments --output=dist/angular-schema-form-bootstrap.min.js",
1211
"test": "echo \"Error: no test specified\" && exit 1",
1312
"test-not-yet-done": "karma start --single-run --browsers PhantomJS karma.conf.js --log-level info"
1413
},
@@ -41,6 +40,9 @@
4140
"gulp-uglify": "^1.2.0",
4241
"gulp-watch": "^4.2.4",
4342
"gulp-webserver": "^0.9.1",
43+
"html": "^1.0.0",
44+
"html-loader": "^0.4.4",
45+
"html-webpack-plugin": "^2.22.0",
4446
"karma": "^0.13.22",
4547
"karma-chai-sinon": "^0.1.5",
4648
"karma-coverage": "^1.0.0",
@@ -51,6 +53,7 @@
5153
"mocha": "^2.5.3",
5254
"mocha-lcov-reporter": "0.0.1",
5355
"ng-cache-loader": "0.0.16",
56+
"ngtemplate-loader": "^1.3.1",
5457
"protractor": "^2.5.1",
5558
"sinon": "^1.17.4",
5659
"sinon-chai": "^2.8.0",

‎src/bootstrap-decorator.js

Lines changed: 115 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,111 +1,131 @@
1-
(function(angular, undefined) {'use strict';
2-
angular
3-
.module('schemaForm')
4-
.config(bootstrapDecoratorConfig)
5-
.filter('sfCamelKey', sfCamelKeyFilter);
1+
// angular-templatecache-loader
2+
let textareaTemplate = require('./bootstrap/textarea.html');
3+
let fieldsetTemplate = require('./bootstrap/fieldset.html');
4+
let arrayTemplate = require('./bootstrap/array.html');
5+
let tabarrayTemplate = require('./bootstrap/tabarray.html');
6+
let tabsTemplate = require('./bootstrap/tabs.html');
7+
let sectionTemplate = require('./bootstrap/section.html');
8+
let actionsTemplate = require('./bootstrap/actions.html');
9+
let selectTemplate = require('./bootstrap/select.html');
10+
let checkboxTemplate = require('./bootstrap/checkbox.html');
11+
let checkboxesTemplate = require('./bootstrap/checkboxes.html');
12+
let submitTemplate = require('./bootstrap/submit.html');
13+
let radiosTemplate = require('./bootstrap/radios.html');
14+
let radiosInlineTemplate = require('./bootstrap/radios-inline.html');
15+
let radiobuttonsTemplate = require('./bootstrap/radio-buttons.html');
16+
let helpTemplate = require('./bootstrap/help.html');
17+
let defaultTemplate = require('./bootstrap/default.html');
618

7-
bootstrapDecoratorConfig.$inject = [
8-
'schemaFormProvider', 'schemaFormDecoratorsProvider', 'sfBuilderProvider', 'sfPathProvider', '$injector'
9-
];
19+
angular
20+
.module('schemaForm')
21+
.config(bootstrapDecoratorConfig)
22+
.filter('sfCamelKey', sfCamelKeyFilter);
1023

11-
functionbootstrapDecoratorConfig(
12-
schemaFormProvider,decoratorsProvider,sfBuilderProvider,sfPathProvider,$injector){
13-
varbase='decorators/bootstrap/';
24+
bootstrapDecoratorConfig.$inject=[
25+
'schemaFormProvider','schemaFormDecoratorsProvider','sfBuilderProvider','sfPathProvider','$injector'
26+
];
1427

15-
var simpleTransclusion = sfBuilderProvider.builders.simpleTransclusion;
16-
var ngModelOptions = sfBuilderProvider.builders.ngModelOptions;
17-
var ngModel = sfBuilderProvider.builders.ngModel;
18-
var sfField = sfBuilderProvider.builders.sfField;
19-
var condition = sfBuilderProvider.builders.condition;
20-
var array = sfBuilderProvider.builders.array;
21-
var numeric = sfBuilderProvider.builders.numeric;
28+
function bootstrapDecoratorConfig(
29+
schemaFormProvider, decoratorsProvider, sfBuilderProvider, sfPathProvider, $injector) {
30+
var base = 'decorators/bootstrap/';
2231

23-
// Tabs is so bootstrap specific that it stays here.
24-
var tabs = function(args) {
25-
if (args.form.tabs && args.form.tabs.length > 0) {
26-
var tabContent = args.fieldFrag.querySelector('.tab-content');
32+
var simpleTransclusion = sfBuilderProvider.builders.simpleTransclusion;
33+
var ngModelOptions = sfBuilderProvider.builders.ngModelOptions;
34+
var ngModel = sfBuilderProvider.builders.ngModel;
35+
var sfField = sfBuilderProvider.builders.sfField;
36+
var condition = sfBuilderProvider.builders.condition;
37+
var array = sfBuilderProvider.builders.array;
38+
var numeric = sfBuilderProvider.builders.numeric;
2739

28-
args.form.tabs.forEach(function(tab, index) {
29-
var div = document.createElement('div');
30-
div.className = 'tab-pane';
31-
div.setAttribute('ng-disabled', 'form.readonly');
32-
div.setAttribute('ng-show', 'selected.tab === ' + index);
33-
div.setAttribute('ng-class', '{active: selected.tab === ' + index + '}');
40+
// Tabs is so bootstrap specific that it stays here.
41+
var tabs = function(args) {
42+
if (args.form.tabs && args.form.tabs.length > 0) {
43+
var tabContent = args.fieldFrag.querySelector('.tab-content');
3444

35-
var childFrag = args.build(tab.items, args.path + '.tabs[' + index + '].items', args.state);
36-
div.appendChild(childFrag);
37-
tabContent.appendChild(div);
38-
});
39-
}
40-
};
45+
args.form.tabs.forEach(function(tab, index) {
46+
var evalExpr = '(evalExpr(' + args.path + '.tabs[' + index + ']' +
47+
'.condition, { model: model, "arrayIndex": $index}))';
48+
var div = document.createElement('div');
49+
div.className = 'tab-pane';
50+
div.setAttribute('ng-disabled', 'form.readonly');
51+
div.setAttribute('ng-show', 'selected.tab === ' + index);
52+
div.setAttribute('ng-class', '{active: selected.tab === ' + index + '}');
53+
if(!!tab.condition) {
54+
div.setAttribute('ng-if', evalExpr);
55+
};
4156

42-
var selectPlaceholder = function(args) {
43-
if (args.form.placeholder) {
44-
var selectBox = args.fieldFrag.querySelector('select');
45-
var option = document.createElement('option');
46-
option.setAttribute('value', '');
47-
48-
/* We only want the placeholder to show when we do not have a value on the model.
49-
* We make ngModel builder replace all so we can use $$value$$.
50-
*/
51-
option.setAttribute('sf-field-model', 'replaceAll');
57+
var childFrag = args.build(tab.items, args.path + '.tabs[' + index + '].items', args.state);
58+
div.appendChild(childFrag);
59+
tabContent.appendChild(div);
60+
});
61+
}
62+
};
5263

53-
/* https://github.com/angular/angular.js/issues/12190#issuecomment-115277040
54-
* angular > 1.4 does a emptyOption.attr('selected', true)
55-
* which does not like the ng-if comment.
56-
*/
57-
if (angular.version.major === 1 && angular.version.minor < 4) {
58-
option.setAttribute('ng-if', '$$value$$ === undefined');
59-
} else {
60-
option.setAttribute('ng-show', '$$value$$ === undefined');
61-
}
64+
var selectPlaceholder = function(args) {
65+
if (args.form.placeholder) {
66+
var selectBox = args.fieldFrag.querySelector('select');
67+
var option = document.createElement('option');
68+
option.setAttribute('value', '');
6269

63-
option.textContent = args.form.placeholder;
70+
/* We only want the placeholder to show when we do not have a value on the model.
71+
* We make ngModel builder replace all so we can use $$value$$.
72+
*/
73+
option.setAttribute('sf-field-model', 'replaceAll');
6474

65-
selectBox.appendChild(option);
75+
/* https://github.com/angular/angular.js/issues/12190#issuecomment-115277040
76+
* angular > 1.4 does a emptyOption.attr('selected', true)
77+
* which does not like the ng-if comment.
78+
*/
79+
if (angular.version.major === 1 && angular.version.minor < 4) {
80+
option.setAttribute('ng-if', '$$value$$ === undefined');
81+
} else {
82+
option.setAttribute('ng-show', '$$value$$ === undefined');
6683
}
67-
};
6884

69-
var defaults = [sfField, ngModel, ngModelOptions, condition];
70-
decoratorsProvider.defineDecorator('bootstrapDecorator', {
71-
textarea: {template: base + 'textarea.html', builder: defaults},
72-
fieldset: {template: base + 'fieldset.html', builder: [sfField, simpleTransclusion, condition]},
73-
array: {template: base + 'array.html', builder: [sfField, ngModelOptions, ngModel, array, condition]},
74-
tabarray: {template: base + 'tabarray.html', builder: [sfField, ngModelOptions, ngModel, array, condition]},
75-
tabs: {template: base + 'tabs.html', builder: [sfField, ngModelOptions, tabs, condition]},
76-
section: {template: base + 'section.html', builder: [sfField, simpleTransclusion, condition]},
77-
conditional: {template: base + 'section.html', builder: [sfField, simpleTransclusion, condition]},
78-
actions: {template: base + 'actions.html', builder: defaults},
79-
select: {template: base + 'select.html', builder: defaults.concat(selectPlaceholder)},
80-
checkbox: {template: base + 'checkbox.html', builder: defaults},
81-
checkboxes: {template: base + 'checkboxes.html', builder: [sfField, ngModelOptions, ngModel, array, condition]},
82-
number: {template: base + 'default.html', builder: defaults.concat(numeric)},
83-
password: {template: base + 'default.html', builder: defaults},
84-
submit: {template: base + 'submit.html', builder: defaults},
85-
button: {template: base + 'submit.html', builder: defaults},
86-
radios: {template: base + 'radios.html', builder: defaults},
87-
'radios-inline': {template: base + 'radios-inline.html', builder: defaults},
88-
radiobuttons: {template: base + 'radio-buttons.html', builder: defaults},
89-
help: {template: base + 'help.html', builder: defaults},
90-
'default': {template: base + 'default.html', builder: defaults}
91-
}, []);
85+
option.textContent = args.form.placeholder;
86+
87+
selectBox.appendChild(option);
88+
}
9289
};
9390

94-
/**
95-
* sfCamelKey Filter
96-
*/
97-
function sfCamelKeyFilter() {
98-
return function(formKey) {
99-
if (!formKey) { return ''; };
100-
var part, i, key;
101-
key = formKey.slice();
102-
for (i = 0; i < key.length; i++) {
103-
part = key[i].toLowerCase().split('');
104-
if (i && part.length) { part[0] = part[0].toUpperCase(); };
105-
key[i] = part.join('');
106-
};
107-
return key.join('');
91+
var defaults = [sfField, ngModel, ngModelOptions, condition];
92+
decoratorsProvider.defineDecorator('bootstrapDecorator', {
93+
textarea: {template: textareaTemplate, builder: defaults},
94+
fieldset: {template: fieldsetTemplate, builder: [sfField, simpleTransclusion, condition]},
95+
array: {template: arrayTemplate, builder: [sfField, ngModelOptions, ngModel, array, condition]},
96+
tabarray: {template: tabarrayTemplate, builder: [sfField, ngModelOptions, ngModel, array, condition]},
97+
tabs: {template: tabsTemplate, builder: [sfField, ngModelOptions, tabs, condition]},
98+
section: {template: sectionTemplate, builder: [sfField, simpleTransclusion, condition]},
99+
conditional: {template: sectionTemplate, builder: [sfField, simpleTransclusion, condition]},
100+
actions: {template: actionsTemplate, builder: defaults},
101+
select: {template: selectTemplate, builder: defaults.concat(selectPlaceholder)},
102+
checkbox: {template: checkboxTemplate, builder: defaults},
103+
checkboxes: {template: checkboxesTemplate, builder: [sfField, ngModelOptions, ngModel, array, condition]},
104+
number: {template: defaultTemplate, builder: defaults.concat(numeric)},
105+
password: {template: defaultTemplate, builder: defaults},
106+
submit: {template: submitTemplate, builder: defaults},
107+
button: {template: submitTemplate, builder: defaults},
108+
radios: {template: radiosTemplate, builder: defaults},
109+
'radios-inline': {template: radiosInlineTemplate, builder: defaults},
110+
radiobuttons: {template: radiobuttonsTemplate, builder: defaults},
111+
help: {template: helpTemplate, builder: defaults},
112+
'default': {template: defaultTemplate, builder: defaults}
113+
}, []);
114+
};
115+
116+
/**
117+
* sfCamelKey Filter
118+
*/
119+
function sfCamelKeyFilter() {
120+
return function(formKey) {
121+
if (!formKey) { return ''; };
122+
var part, i, key;
123+
key = formKey.slice();
124+
for (i = 0; i < key.length; i++) {
125+
part = key[i].toLowerCase().split('');
126+
if (i && part.length) { part[0] = part[0].toUpperCase(); };
127+
key[i] = part.join('');
108128
};
129+
return key.join('');
109130
};
110-
111-
})(angular, undefined);
131+
};
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /