File tree Expand file tree Collapse file tree 3 files changed +57
-1
lines changed Expand file tree Collapse file tree 3 files changed +57
-1
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ Documentation
4
4
1 . [ Basic Usage] ( #basic-usage )
5
5
1 . [ Handling Submit] ( #handling-submit )
6
6
1 . [ Global Options] ( #global-options )
7
+ 1 . [ Form defaults in schema] ( #form-defaults-in-schema )
7
8
1 . [ Form types] ( #form-types )
8
9
1 . [ Default form types] ( #default-form-types )
9
10
1 . [ Form definitions] ( #form-definitions )
174
175
< / div>
175
176
` ` `
176
177
178
+ Form defaults in schema
179
+ -----------------------
180
+ Its recommended to split presentation and validation into a form definition and a json schema. But
181
+ if you for some reason can't do this, but *do* have the power to change the schema, you can supply form
182
+ default values within the schema using the custom attribute ` x- schema- form` . ` x- schema- form` should
183
+ be a form object and acts as form definition defaults for that field.
177
184
185
+ Example schema.
186
+ ` ` ` js
187
+ {
188
+ " type" : " object" ,
189
+ " properties" : {
190
+ " comment" : {
191
+ " type" : " string" ,
192
+ " title" : " Comment" ,
193
+ " x-schema-form" : {
194
+ " type" : " textarea" ,
195
+ " placeholder" : " Don't hold back"
196
+ }
197
+ }
198
+ }
199
+ }
200
+ ` ` `
178
201
179
202
Form types
180
203
----------
Original file line number Diff line number Diff line change @@ -40,8 +40,15 @@ angular.module('schemaForm').provider('schemaForm',
40
40
var def ;
41
41
for ( var i = 0 ; i < rules . length ; i ++ ) {
42
42
def = rules [ i ] ( name , schema , options ) ;
43
+
43
44
//first handler in list that actually returns something is our handler!
44
45
if ( def ) {
46
+
47
+ // Do we have form defaults in the schema under the x-schema-form-attribute?
48
+ if ( def . schema [ 'x-schema-form' ] && angular . isObject ( def . schema [ 'x-schema-form' ] ) ) {
49
+ def = angular . extend ( def , def . schema [ 'x-schema-form' ] ) ;
50
+ }
51
+
45
52
return def ;
46
53
}
47
54
}
@@ -67,14 +74,16 @@ angular.module('schemaForm').provider('schemaForm',
67
74
if ( schema . minimum ) { f . minimum = schema . minimum + ( schema . exclusiveMinimum ? 1 : 0 ) ; }
68
75
if ( schema . maximum ) { f . maximum = schema . maximum - ( schema . exclusiveMaximum ? 1 : 0 ) ; }
69
76
70
- //Non standard attributes
77
+ // Non standard attributes (DONT USE DEPRECATED)
78
+ // If you must set stuff like this in the schema use the x-schema-form attribute
71
79
if ( schema . validationMessage ) { f . validationMessage = schema . validationMessage ; }
72
80
if ( schema . enumNames ) { f . titleMap = canonicalTitleMap ( schema . enumNames , schema [ 'enum' ] ) ; }
73
81
f . schema = schema ;
74
82
75
83
// Ng model options doesn't play nice with undefined, might be defined
76
84
// globally though
77
85
f . ngModelOptions = f . ngModelOptions || { } ;
86
+
78
87
return f ;
79
88
} ;
80
89
Original file line number Diff line number Diff line change @@ -257,6 +257,30 @@ describe('schemaForm', function() {
257
257
} ) ;
258
258
} ) ;
259
259
260
+ it . only ( 'should handle x-schema-form defaults' , function ( ) {
261
+ inject ( function ( schemaForm ) {
262
+
263
+ var schema = {
264
+ "type" : "object" ,
265
+ "properties" : {
266
+ "name" : {
267
+ "title" : "Name" ,
268
+ "description" : "Gimme yea name lad" ,
269
+ "type" : "string" ,
270
+ "x-schema-form" : {
271
+ "type" : "textarea"
272
+ }
273
+ }
274
+ }
275
+ } ;
276
+
277
+
278
+
279
+ var f = schemaForm . defaults ( schema , { } ) ;
280
+ f . form [ 0 ] . type . should . be . eq ( 'textarea' ) ;
281
+ } ) ;
282
+ } ) ;
283
+
260
284
it ( 'should ignore parts of schema in ignore list' , function ( ) {
261
285
inject ( function ( schemaForm ) {
262
286
You can’t perform that action at this time.
0 commit comments