@@ -45,15 +45,17 @@ $templateCache.put("decorators/material/textarea.html","<md-input-container clas
45
45
var condition = sfBuilderProvider . builders . condition ;
46
46
var array = sfBuilderProvider . builders . array ;
47
47
48
+ var sfLayout = sfLayout ;
48
49
var sfMessagesNode = sfMessagesNodeHandler ( ) ;
49
50
var sfMessages = sfMessagesBuilder ;
50
51
var sfOptions = sfOptionsBuilder ;
51
52
var mdAutocomplete = mdAutocompleteBuilder ;
52
53
var mdSwitch = mdSwitchBuilder ;
53
54
var mdDatepicker = mdDatepickerBuilder ;
54
55
var mdTabs = mdTabsBuilder ;
56
+ var textarea = textareaBuilder ;
55
57
56
- var core = [ sfField , ngModel , ngModelOptions , condition ] ;
58
+ var core = [ sfField , ngModel , ngModelOptions , condition , sfLayout ] ;
57
59
var defaults = core . concat ( sfMessages ) ;
58
60
var arrays = core . concat ( array ) ;
59
61
@@ -76,15 +78,25 @@ $templateCache.put("decorators/material/textarea.html","<md-input-container clas
76
78
radios : { template : base + 'radios.html' , builder : defaults } ,
77
79
'radios-inline' : { template : base + 'radios-inline.html' , builder : defaults } ,
78
80
radiobuttons : { template : base + 'radio-buttons.html' , builder : defaults } ,
79
- section : { template : base + 'section.html' , builder : [ sfField , simpleTransclusion , condition ] } ,
81
+ section : { template : base + 'section.html' , builder : [ sfField , simpleTransclusion , condition , sfLayout ] } ,
80
82
select : { template : base + 'select.html' , builder : defaults . concat ( sfOptions ) } ,
81
83
submit : { template : base + 'submit.html' , builder : defaults } ,
82
84
tabs : { template : base + 'tabs.html' , builder : [ sfField , mdTabs , condition ] } ,
83
85
tabarray : { template : base + 'tabarray.html' , builder : arrays } ,
84
- textarea : { template : base + 'textarea.html' , builder : defaults } ,
86
+ textarea : { template : base + 'textarea.html' , builder : defaults . concat ( textarea ) } ,
85
87
switch : { template : base + 'switch.html' , builder : defaults . concat ( mdSwitch ) }
86
88
} ) ;
87
89
90
+ function sfLayout ( args ) {
91
+ var layoutDiv = args . fieldFrag . querySelector ( '[sf-layout]' ) ;
92
+
93
+ if ( args . form . grid ) {
94
+ Object . getOwnPropertyNames ( args . form . grid ) . forEach ( function ( property , idx , array ) {
95
+ layoutDiv . setAttribute ( property , args . form . grid [ property ] ) ;
96
+ } ) ;
97
+ } ;
98
+ } ;
99
+
88
100
function sfMessagesNodeHandler ( ) {
89
101
var html = '<div ng-if="ngModel.$invalid" ng-messages="ngModel.$error"><div sf-message ng-message></div></div>' ;
90
102
var div = document . createElement ( 'div' ) ;
@@ -100,6 +112,14 @@ $templateCache.put("decorators/material/textarea.html","<md-input-container clas
100
112
}
101
113
} ;
102
114
115
+ function textareaBuilder ( args ) {
116
+ var textareaFrag = args . fieldFrag . querySelector ( 'textarea' ) ;
117
+ var maxLength = args . form . maxlength || false ;
118
+ if ( textareaFrag && maxLength ) {
119
+ textareaFrag . setAttribute ( 'md-maxlength' , maxLength ) ;
120
+ } ;
121
+ } ;
122
+
103
123
function mdAutocompleteBuilder ( args ) {
104
124
var mdAutocompleteFrag = args . fieldFrag . querySelector ( 'md-autocomplete' ) ;
105
125
var minLength = args . form . minLength || 1 ;
@@ -130,9 +150,6 @@ $templateCache.put("decorators/material/textarea.html","<md-input-container clas
130
150
mdSwitchFrag . setAttribute ( 'ng-true-value' , args . form . schema . titleMap . true ) ;
131
151
mdSwitchFrag . setAttribute ( 'ng-false-value' , args . form . schema . titleMap . false ) ;
132
152
}
133
- if ( args . form . schema . ink ) {
134
- mdSwitchFrag . setIdAttribute ( 'md-no-ink' , args . form . schema . ink ) ;
135
- }
136
153
} ;
137
154
138
155
function sfOptionsBuilder ( args ) {
@@ -156,11 +173,6 @@ $templateCache.put("decorators/material/textarea.html","<md-input-container clas
156
173
// TODO enable filter to allow processing results
157
174
// args.form.optionSource = link.href.replace(related, '$1$1 model.$2 | _externalOptionUri $3$3');
158
175
args . form . optionSource = link . href . replace ( related , '$1$1 model.$2 $3$3' ) ;
159
- // args.form.watchList = [];
160
- // matched = args.form.optionSource.match(source);
161
- // while ((matched = source.exec(args.form.optionSource)) !== null) {
162
- // args.form.watchList.push(matched);
163
- // };
164
176
} ;
165
177
} ;
166
178
@@ -169,19 +181,6 @@ $templateCache.put("decorators/material/textarea.html","<md-input-container clas
169
181
else {
170
182
args . form . selectOptions = sfOptionsProcessor ( args . form ) ;
171
183
} ;
172
-
173
- // TODO implement $watch for remote data loading after the page loads
174
- function getOptionsHandler ( form , evalExpr ) {
175
- if ( form . optionData ) {
176
- return evalExpr ( form . optionData ) ;
177
- } ;
178
-
179
- if ( form . selectOptions ) {
180
- return form . selectOptions ;
181
- } ;
182
-
183
- return [ ] ;
184
- } ;
185
184
} ;
186
185
187
186
function mdDatepickerBuilder ( args ) {
@@ -232,6 +231,18 @@ $templateCache.put("decorators/material/textarea.html","<md-input-container clas
232
231
} ;
233
232
} ;
234
233
234
+ function getOptionsHandler ( form , evalExpr ) {
235
+ if ( form . optionData ) {
236
+ return evalExpr ( form . optionData ) ;
237
+ } ;
238
+
239
+ if ( form . selectOptions ) {
240
+ return form . selectOptions ;
241
+ } ;
242
+
243
+ return [ ] ;
244
+ } ;
245
+
235
246
function sfOptionsProcessor ( data ) {
236
247
var enumTitleMap = [ ] ;
237
248
0 commit comments