1
1
angular . module ( "schemaForm" ) . run ( [ "$templateCache" , function ( $templateCache ) { $templateCache . put ( "decorators/bootstrap/actions-trcl.html" , "<div class=\"btn-group schema-form-actions {{form.htmlClass}}\" ng-transclude=\"\"></div>" ) ;
2
2
$templateCache . put ( "decorators/bootstrap/actions.html" , "<div class=\"btn-group schema-form-actions {{form.htmlClass}}\"><input ng-repeat-start=\"item in form.items\" type=\"submit\" class=\"btn {{ item.style || \'btn-default\' }} {{form.fieldHtmlClass}}\" value=\"{{item.title}}\" ng-if=\"item.type === \'submit\'\"> <button ng-repeat-end=\"\" class=\"btn {{ item.style || \'btn-default\' }} {{form.fieldHtmlClass}}\" type=\"button\" ng-disabled=\"form.readonly\" ng-if=\"item.type !== \'submit\'\" ng-click=\"buttonClick($event,item)\"><span ng-if=\"item.icon\" class=\"{{item.icon}}\"></span>{{item.title}}</button></div>" ) ;
3
- $templateCache . put ( "decorators/bootstrap/array.html" , "<div class=\"schema-form-array {{form.htmlClass}}\" sf-field-model=\"sf-new-array\" sf-new-array=\"\"><h3 ng-show=\"form.title && form.notitle !== true\"></h3><ol class=\"list-group\" ui-sortable=\"\"><li class=\"list-group-item {{form.fieldHtmlClass}}\" schema-form-array-items=\"\" sf-field-model=\"ng-repeat\" ng-repeat=\"item in $$value$$ track by $index\"><button ng-hide=\"form.readonly || form.remove === null\" ng-click=\"deleteFromArray($index)\" ng-disabled=\"form.schema.minItems >= modelArray.length\" style=\"position: relative; z-index: 20;\" type=\"button\" class=\"close pull-right\"><span aria-hidden=\"true\">×</span><span class=\"sr-only\">Close</span></button></li></ol><div class=\"clearfix\" style=\"padding: 15px;\" ng-model=\"modelArray\" schema-validate=\"form\"><div class=\"help-block\" ng-show=\"(hasError() && errorMessage(schemaError())) || form.description\" ng-bind-html=\"(hasError() && errorMessage(schemaError())) || form.description\"></div><button ng-hide=\"form.readonly || form.add === null\" ng-click=\"appendToArray()\" ng-disabled=\"form.schema.maxItems <= modelArray.length\" type=\"button\" class=\"btn {{ form.style.add || \'btn-default\' }} pull-right\"><i class=\"glyphicon glyphicon-plus\"></i> {{ form.add || \'Add\'}}</button></div></div>" ) ;
3
+ $templateCache . put ( "decorators/bootstrap/array.html" , "<div class=\"schema-form-array {{form.htmlClass}}\" sf-field-model=\"sf-new-array\" sf-new-array=\"\"><label class=\"control-label\" ng-show=\"showTitle()\">{{ form.title }}</label><ol class=\"list-group\" ui-sortable=\"\"><li class=\"list-group-item {{form.fieldHtmlClass}}\" schema-form-array-items=\"\" sf-field-model=\"ng-repeat\" ng-repeat=\"item in $$value$$ track by $index\"><button ng-hide=\"form.readonly || form.remove === null\" ng-click=\"deleteFromArray($index)\" ng-disabled=\"form.schema.minItems >= modelArray.length\" style=\"position: relative; z-index: 20;\" type=\"button\" class=\"close pull-right\"><span aria-hidden=\"true\">×</span><span class=\"sr-only\">Close</span></button></li></ol><div class=\"clearfix\" style=\"padding: 15px;\" ng-model=\"modelArray\" schema-validate=\"form\"><div class=\"help-block\" ng-show=\"(hasError() && errorMessage(schemaError())) || form.description\" ng-bind-html=\"(hasError() && errorMessage(schemaError())) || form.description\"></div><button ng-hide=\"form.readonly || form.add === null\" ng-click=\"appendToArray()\" ng-disabled=\"form.schema.maxItems <= modelArray.length\" type=\"button\" class=\"btn {{ form.style.add || \'btn-default\' }} pull-right\"><i class=\"glyphicon glyphicon-plus\"></i> {{ form.add || \'Add\'}}</button></div></div>" ) ;
4
4
$templateCache . put ( "decorators/bootstrap/checkbox.html" , "<div class=\"checkbox schema-form-checkbox {{form.htmlClass}}\" ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\"><label class=\"{{form.labelHtmlClass}}\"><input type=\"checkbox\" sf-changed=\"form\" ng-disabled=\"form.readonly\" sf-field-model=\"\" schema-validate=\"form\" class=\"{{form.fieldHtmlClass}}\" name=\"{{form.key.slice(-1)[0]}}\"> <span ng-bind-html=\"form.title\"></span></label><div class=\"help-block\" sf-message=\"form.description\"></div></div>" ) ;
5
5
$templateCache . put ( "decorators/bootstrap/checkboxes.html" , "<div sf-field-model=\"sf-new-array\" sf-new-array=\"\" class=\"form-group schema-form-checkboxes {{form.htmlClass}}\" ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\"><label class=\"control-label {{form.labelHtmlClass}}\" ng-show=\"showTitle()\">{{form.title}}</label><div class=\"checkbox\" ng-repeat=\"val in titleMapValues track by $index\"><label><input type=\"checkbox\" ng-disabled=\"form.readonly\" sf-changed=\"form\" class=\"{{form.fieldHtmlClass}}\" ng-model=\"titleMapValues[$index]\" name=\"{{form.key.slice(-1)[0]}}\"> <span ng-bind-html=\"form.titleMap[$index].name\"></span></label></div><div class=\"help-block\" sf-message=\"form.description\"></div></div>" ) ;
6
6
$templateCache . put ( "decorators/bootstrap/default.html" , "<div class=\"form-group schema-form-{{form.type}} {{form.htmlClass}}\" ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess(), \'has-feedback\': form.feedback !== false }\"><label class=\"control-label {{form.labelHtmlClass}}\" ng-class=\"{\'sr-only\': !showTitle()}\" for=\"{{form.key.slice(-1)[0]}}\">{{form.title}}</label> <input ng-if=\"!form.fieldAddonLeft && !form.fieldAddonRight\" ng-show=\"form.key\" type=\"{{form.type}}\" step=\"any\" sf-changed=\"form\" placeholder=\"{{form.placeholder}}\" class=\"form-control {{form.fieldHtmlClass}}\" id=\"{{form.key.slice(-1)[0]}}\" sf-field-model=\"\" ng-disabled=\"form.readonly\" schema-validate=\"form\" name=\"{{form.key.slice(-1)[0]}}\" aria-describedby=\"{{form.key.slice(-1)[0] + \'Status\'}}\"><div ng-if=\"form.fieldAddonLeft || form.fieldAddonRight\" ng-class=\"{\'input-group\': (form.fieldAddonLeft || form.fieldAddonRight)}\"><span ng-if=\"form.fieldAddonLeft\" class=\"input-group-addon\" ng-bind-html=\"form.fieldAddonLeft\"></span> <input ng-show=\"form.key\" type=\"{{form.type}}\" step=\"any\" sf-changed=\"form\" placeholder=\"{{form.placeholder}}\" class=\"form-control {{form.fieldHtmlClass}}\" id=\"{{form.key.slice(-1)[0]}}\" sf-field-model=\"\" ng-disabled=\"form.readonly\" schema-validate=\"form\" name=\"{{form.key.slice(-1)[0]}}\" aria-describedby=\"{{form.key.slice(-1)[0] + \'Status\'}}\"> <span ng-if=\"form.fieldAddonRight\" class=\"input-group-addon\" ng-bind-html=\"form.fieldAddonRight\"></span></div><span ng-if=\"form.feedback !== false\" class=\"form-control-feedback\" ng-class=\"evalInScope(form.feedback) || {\'glyphicon\': true, \'glyphicon-ok\': hasSuccess(), \'glyphicon-remove\': hasError() }\" aria-hidden=\"true\"></span> <span ng-if=\"hasError() || hasSuccess()\" id=\"{{form.key.slice(-1)[0] + \'Status\'}}\" class=\"sr-only\">{{ hasSuccess() ? \'(success)\' : \'(error)\' }}</span><div class=\"help-block\" sf-message=\"form.description\"></div></div>" ) ;
7
- $templateCache . put ( "decorators/bootstrap/fieldset.html" , "<fieldset ng-disabled=\"form.readonly\" class=\"schema-form-fieldset {{form.htmlClass}}\"><legend ng-show =\"form.title && !form.notitle \">{{ form.title }}</legend><div class=\"help-block\" ng-show=\"form.description\" ng-bind-html=\"form.description\"></div></fieldset>" ) ;
7
+ $templateCache . put ( "decorators/bootstrap/fieldset.html" , "<fieldset ng-disabled=\"form.readonly\" class=\"schema-form-fieldset {{form.htmlClass}}\"><legend ng-class =\"{\'sr-only\': !showTitle() } \">{{ form.title }}</legend><div class=\"help-block\" ng-show=\"form.description\" ng-bind-html=\"form.description\"></div></fieldset>" ) ;
8
8
$templateCache . put ( "decorators/bootstrap/help.html" , "<div class=\"helpvalue schema-form-helpvalue {{form.htmlClass}}\" ng-bind-html=\"form.helpvalue\"></div>" ) ;
9
9
$templateCache . put ( "decorators/bootstrap/radio-buttons.html" , "<div class=\"form-group schema-form-radiobuttons {{form.htmlClass}}\" ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\"><div><label class=\"control-label {{form.labelHtmlClass}}\" ng-show=\"showTitle()\">{{form.title}}</label></div><div class=\"btn-group\"><label sf-field-model=\"replaceAll\" class=\"btn {{ (item.value === $$value$$) ? form.style.selected || \'btn-default\' : form.style.unselected || \'btn-default\'; }}\" ng-class=\"{ active: item.value === $$value$$ }\" ng-repeat=\"item in form.titleMap\"><input type=\"radio\" class=\"{{form.fieldHtmlClass}}\" sf-changed=\"form\" style=\"display: none;\" ng-disabled=\"form.readonly\" sf-field-model=\"\" schema-validate=\"form\" ng-value=\"item.value\" name=\"{{form.key.join(\'.\')}}\"> <span ng-bind-html=\"item.name\"></span></label></div><div class=\"help-block\" sf-message=\"form.description\"></div></div>" ) ;
10
10
$templateCache . put ( "decorators/bootstrap/radios-inline.html" , "<div class=\"form-group schema-form-radios-inline {{form.htmlClass}}\" ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\"><label class=\"control-label {{form.labelHtmlClass}}\" ng-show=\"showTitle()\">{{form.title}}</label><div><label class=\"radio-inline\" ng-repeat=\"item in form.titleMap\"><input type=\"radio\" class=\"{{form.fieldHtmlClass}}\" sf-changed=\"form\" ng-disabled=\"form.readonly\" sf-field-model=\"\" schema-validate=\"form\" ng-value=\"item.value\" name=\"{{form.key.join(\'.\')}}\"> <span ng-bind-html=\"item.name\"></span></label></div><div class=\"help-block\" sf-message=\"form.description\"></div></div>" ) ;
@@ -24,6 +24,32 @@ function(decoratorsProvider, sfBuilderProvider, sfPathProvider) {
24
24
var ngModel = sfBuilderProvider . builders . ngModel ;
25
25
var sfField = sfBuilderProvider . builders . sfField ;
26
26
27
+ var condition = function ( args ) {
28
+ // Do we have a condition? Then we slap on an ng-if on all children,
29
+ // but be nice to existing ng-if.
30
+ if ( args . form . condition ) {
31
+ var evalExpr = 'evalExpr(' + args . path + '.contidion, { model: model, "arrayIndex": $index})' ;
32
+ if ( args . form . key ) {
33
+ var strKey = sfPathProvider . stringify ( args . form . key ) ;
34
+ evalExpr = 'evalExpr(' + args . path + '.condition,{ model: model, "arrayIndex": $index, ' +
35
+ '"modelValue": model' + ( strKey [ 0 ] === '[' ? '' : '.' ) + strKey + '})' ;
36
+ }
37
+
38
+ var children = args . fieldFrag . children ;
39
+ for ( var i = 0 ; i < children . length ; i ++ ) {
40
+ var child = children [ i ] ;
41
+ var ngIf = child . getAttribute ( 'ng-if' ) ;
42
+ child . setAttribute (
43
+ 'ng-if' ,
44
+ ngIf ?
45
+ '(' + ngIf +
46
+ ') || (' + evalExpr + ')'
47
+ : evalExpr
48
+ ) ;
49
+ }
50
+ }
51
+ } ;
52
+
27
53
var array = function ( args ) {
28
54
var items = args . fieldFrag . querySelector ( '[schema-form-array-items]' ) ;
29
55
if ( items ) {
@@ -37,7 +63,6 @@ function(decoratorsProvider, sfBuilderProvider, sfPathProvider) {
37
63
args . form . schema . items . type &&
38
64
args . form . schema . items . type . indexOf ( 'object' ) === - 1 &&
39
65
args . form . schema . items . type . indexOf ( 'array' ) === - 1 ) {
40
- console . log ( 'setting state modelValue' , args . form ) ;
41
66
var strKey = sfPathProvider . stringify ( args . form . key ) . replace ( / " / g, '"' ) + '[$index]' ;
42
67
state . modelValue = 'modelArray[$index]' ; //(args.state.modelName || 'model') + (strKey[0] !== '[' ? '.' : '') + strKey;
43
68
//state.modelValue = 'model' + sfPathProvider.normalize(args.form.key) + '[$index]'; // 'modelArray[$index]';
@@ -68,15 +93,15 @@ function(decoratorsProvider, sfBuilderProvider, sfPathProvider) {
68
93
}
69
94
} ;
70
95
71
- var defaults = [ sfField , ngModel , ngModelOptions ] ;
96
+ var defaults = [ sfField , ngModel , ngModelOptions , condition ] ;
72
97
decoratorsProvider . defineDecorator ( 'bootstrapDecorator' , {
73
98
textarea : { template : base + 'textarea.html' , builder : defaults } ,
74
- fieldset : { template : base + 'fieldset.html' , builder : [ sfField , simpleTransclusion ] } ,
75
- array : { template : base + 'array.html' , builder : [ sfField , ngModelOptions , ngModel , array ] } ,
76
- tabarray : { template : base + 'tabarray.html' , builder : [ sfField , ngModelOptions , ngModel , array ] } ,
77
- tabs : { template : base + 'tabs.html' , builder : [ sfField , ngModelOptions , ngModel , tabs ] } ,
78
- section : { template : base + 'section.html' , builder : [ sfField , simpleTransclusion ] } ,
79
- conditional : { template : base + 'section.html' , builder : [ sfField , simpleTransclusion ] } ,
99
+ fieldset : { template : base + 'fieldset.html' , builder : [ sfField , simpleTransclusion , condition ] } ,
100
+ array : { template : base + 'array.html' , builder : [ sfField , ngModelOptions , ngModel , array , condition ] } ,
101
+ tabarray : { template : base + 'tabarray.html' , builder : [ sfField , ngModelOptions , ngModel , array , condition ] } ,
102
+ tabs : { template : base + 'tabs.html' , builder : [ sfField , ngModelOptions , tabs , condition ] } ,
103
+ section : { template : base + 'section.html' , builder : [ sfField , simpleTransclusion , condition ] } ,
104
+ conditional : { template : base + 'section.html' , builder : [ sfField , simpleTransclusion , condition ] } ,
80
105
actions : { template : base + 'actions.html' , builder : defaults } ,
81
106
select : { template : base + 'select.html' , builder : defaults } ,
82
107
checkbox : { template : base + 'checkbox.html' , builder : defaults } ,
0 commit comments