Skip to content

Commit eda5925

Browse files
committed
fix(directives) Add support for subkeys in subschemas for directives
1 parent 81c63db commit eda5925

File tree

2 files changed

+46
-8
lines changed

2 files changed

+46
-8
lines changed

js/directives/form.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -383,9 +383,7 @@ formsAngular
383383
template += ' </div> ';
384384
}
385385

386-
template += '<div class="pull-left">' +
387-
processInstructions(info.schema, false, {subschema: true, formstyle: info.formStyle, model: options.model, subschemaRoot: info.name}) +
388-
'</div>';
386+
template += processInstructions(info.schema, false, {subschema: true, formstyle: info.formStyle, model: options.model, subschemaRoot: info.name});
389387

390388
template += ' </div>' +
391389
'</div>';
@@ -502,6 +500,12 @@ formsAngular
502500
}
503501
}
504502
}
503+
for (prop in options) {
504+
if (options.hasOwnProperty(prop) && prop[0] !== '$') {
505+
newElement += ' fng-opt-' + prop + '="' + options[prop].toString().replace(/"/g,'&quot;') + '"'; break;
506+
}
507+
}
508+
505509
newElement += '></' + directiveName + '>';
506510
result += newElement;
507511
callHandleField = false;

js/services/plugin-helper.js

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,65 @@ formsAngular.factory('pluginHelper', ['formMarkupHelper',function (formMarkupHel
99

1010
exports.extractFromAttr = function (attr, directiveName) {
1111
var info = {};
12+
var options = {formStyle: attr.formstyle};
1213
var directiveOptions = {};
1314
var directiveNameLength = directiveName.length;
1415
for (var prop in attr) {
1516
if (attr.hasOwnProperty(prop)) {
1617
if (prop.slice(0, 6) === 'fngFld') {
17-
info[prop.slice(6).toLowerCase()] = attr[prop].replace(/&quot;/g,'"');
18+
info[prop.slice(6).toLowerCase()] = attr[prop].replace(/&quot;/g, '"');
19+
} else if (prop.slice(0, 6) === 'fngOpt') {
20+
options[prop.slice(6).toLowerCase()] = attr[prop].replace(/&quot;/g,'"');
1821
} else if (prop.slice(0,directiveNameLength) === directiveName) {
1922
directiveOptions[prop.slice(directiveNameLength).toLowerCase()] = attr[prop].replace(/&quot;/g,'"');
2023
}
2124
}
2225
}
23-
var options = {formStyle: attr.formstyle};
2426
return {info: info, options: options, directiveOptions: directiveOptions};
2527
};
2628

2729
exports.buildInputMarkup = function (scope, model, info, options, addButtons, needsX, generateInputControl) {
2830
var fieldChrome = formMarkupHelper.fieldChrome(scope, info, options,' id="cg_' + info.id + '"');
2931
var controlDivClasses = formMarkupHelper.controlDivClasses(options);
3032
var elementHtml = fieldChrome.template + formMarkupHelper.label(scope, info, addButtons, options);
31-
var buildingBlocks;
33+
var modelString, idString, nameString;
34+
3235
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}}';
3439
} 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+
}
3667
}
68+
69+
var buildingBlocks = formMarkupHelper.allInputsVars(scope, info, options, modelString, idString, nameString);
70+
3771
elementHtml += formMarkupHelper['handle' + (addButtons ? 'Array' : '') + 'InputAndControlDiv'](
3872
formMarkupHelper.inputChrome(
3973
generateInputControl(buildingBlocks),

0 commit comments

Comments
 (0)