@@ -9,31 +9,65 @@ formsAngular.factory('pluginHelper', ['formMarkupHelper',function (formMarkupHel
9
9
10
10
exports . extractFromAttr = function ( attr , directiveName ) {
11
11
var info = { } ;
12
+ var options = { formStyle : attr . formstyle } ;
12
13
var directiveOptions = { } ;
13
14
var directiveNameLength = directiveName . length ;
14
15
for ( var prop in attr ) {
15
16
if ( attr . hasOwnProperty ( prop ) ) {
16
17
if ( prop . slice ( 0 , 6 ) === 'fngFld' ) {
17
- info [ prop . slice ( 6 ) . toLowerCase ( ) ] = attr [ prop ] . replace ( / & q u o t ; / g, '"' ) ;
18
+ info [ prop . slice ( 6 ) . toLowerCase ( ) ] = attr [ prop ] . replace ( / & q u o t ; / g, '"' ) ;
19
+ } else if ( prop . slice ( 0 , 6 ) === 'fngOpt' ) {
20
+ options [ prop . slice ( 6 ) . toLowerCase ( ) ] = attr [ prop ] . replace ( / & q u o t ; / g, '"' ) ;
18
21
} else if ( prop . slice ( 0 , directiveNameLength ) === directiveName ) {
19
22
directiveOptions [ prop . slice ( directiveNameLength ) . toLowerCase ( ) ] = attr [ prop ] . replace ( / & q u o t ; / g, '"' ) ;
20
23
}
21
24
}
22
25
}
23
- var options = { formStyle : attr . formstyle } ;
24
26
return { info : info , options : options , directiveOptions : directiveOptions } ;
25
27
} ;
26
28
27
29
exports . buildInputMarkup = function ( scope , model , info , options , addButtons , needsX , generateInputControl ) {
28
30
var fieldChrome = formMarkupHelper . fieldChrome ( scope , info , options , ' id="cg_' + info . id + '"' ) ;
29
31
var controlDivClasses = formMarkupHelper . controlDivClasses ( options ) ;
30
32
var elementHtml = fieldChrome . template + formMarkupHelper . label ( scope , info , addButtons , options ) ;
31
- var buildingBlocks ;
33
+ var modelString , idString , nameString ;
34
+
32
35
if ( addButtons ) {
33
- buildingBlocks = formMarkupHelper . allInputsVars ( scope , info , options , 'arrayItem' + ( needsX ? '.x' : '' ) , info . id + '_{{$index}}' , info . name + '_{{$index}}' ) ;
36
+ modelString = 'arrayItem' + ( needsX ? '.x' : '' ) ;
37
+ idString = info . id + '_{{$index}}' ;
38
+ nameString = info . name + '_{{$index}}' ;
34
39
} else {
35
- buildingBlocks = formMarkupHelper . allInputsVars ( scope , info , options , model + '.' + info . name , info . id , info . name ) ;
40
+ modelString = model + '.' + info . name ;
41
+ idString = info . id ;
42
+ nameString = info . name ;
43
+ }
44
+
45
+ if ( options . subschema && info . name . indexOf ( '.' ) !== - 1 ) {
46
+ // Schema handling - need to massage the ngModel and the id
47
+ var modelBase = model + '.' ;
48
+ var compoundName = info . name ;
49
+ var root = options . subschemaroot ;
50
+ var lastPart = compoundName . slice ( root . length + 1 ) ;
51
+ modelString = modelBase ;
52
+
53
+ if ( options . index ) {
54
+ modelString += root + '[' + options . index + '].' + lastPart ;
55
+ idString = 'f_' + modelString . slice ( modelBase . length ) . replace ( / ( \. | \[ | \] \. ) / g, '-' ) ;
56
+ } else {
57
+ modelString += root ;
58
+ if ( options . subkey ) {
59
+ idString = modelString . slice ( modelBase . length ) . replace ( / \. / g, '-' ) + '-subkey' + options . subkeyno + '-' + lastPart ;
60
+ modelString += '[' + '$_arrayOffset_' + root . replace ( / \. / g, '_' ) + '_' + options . subkeyno + '].' + lastPart ;
61
+ } else {
62
+ modelString += '[$index].' + lastPart ;
63
+ idString = null ;
64
+ nameString = compoundName . replace ( / \. / g, '-' ) ;
65
+ }
66
+ }
36
67
}
68
+
69
+ var buildingBlocks = formMarkupHelper . allInputsVars ( scope , info , options , modelString , idString , nameString ) ;
70
+
37
71
elementHtml += formMarkupHelper [ 'handle' + ( addButtons ? 'Array' : '' ) + 'InputAndControlDiv' ] (
38
72
formMarkupHelper . inputChrome (
39
73
generateInputControl ( buildingBlocks ) ,
0 commit comments