diff --git a/app/controllers/config.controller.js b/app/controllers/config.controller.js index 4d32e25..8bd5bd9 100644 --- a/app/controllers/config.controller.js +++ b/app/controllers/config.controller.js @@ -4,9 +4,9 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio //console.log($scope.model.value); //define empty items - var newPropertyModel = '{alias: "", remove: false, collapse: false, label: "", helpText: "", view: "", value: "", config: ""}'; - var newFieldsetModel = '{alias: "", remove: false, collapse: false, labelTemplate: "", tooltip: "", icon: "", label: "", headerText: "", footerText: "", properties:[' + newPropertyModel + ']}'; - var defaultFieldsetConfigModel = eval("({showAdvancedOptions: false, hideFieldsetToolbar: false, enableMultipleFieldsets: false, hideFieldsetControls: false, hideFieldsetLabels: false, hidePropertyLabel: false, maxFieldsets: null, fieldsets: [" + newFieldsetModel + "]})"); + var newPropertyModel = '{"alias": "", "remove": false, "collapse": false, "label": "", "helpText": "", "view": "", "value": "", "config": ""}'; + var newFieldsetModel = '{"alias": "", "remove": false, "collapse": false, "labelTemplate": "", "tooltip": "", "icon": "", "label": "", "headerText": "", "footerText": "", "properties": [' + newPropertyModel + ']}'; + var defaultFieldsetConfigModel = JSON.parse('{"showAdvancedOptions": false, "hideFieldsetToolbar": false, "enableMultipleFieldsets": false, "hideFieldsetControls": false, "hideFieldsetLabels": false, "hidePropertyLabel": false, "maxFieldsets": null, "fieldsets": [' + newFieldsetModel + ']}'); //ini the model $scope.model.value = $scope.model.value || defaultFieldsetConfigModel; @@ -164,7 +164,7 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio //handles a fieldset add $scope.addFieldsetRow = function ($index, $event) { - $scope.archetypeConfigRenderModel.fieldsets.splice($index + 1, 0, eval("(" + newFieldsetModel + ")")); + $scope.archetypeConfigRenderModel.fieldsets.splice($index + 1, 0, JSON.parse(newFieldsetModel)); $scope.focusFieldset(); } @@ -179,7 +179,7 @@ angular.module("umbraco").controller("Imulus.ArchetypeConfigController", functio //handles a property add $scope.addPropertyRow = function (fieldset, $index) { - fieldset.properties.splice($index + 1, 0, eval("(" + newPropertyModel + ")")); + fieldset.properties.splice($index + 1, 0, JSON.parse(newPropertyModel)); } //rather than splice the archetypeConfigRenderModel, we're hiding this and cleaning onFormSubmitting diff --git a/app/controllers/controller.js b/app/controllers/controller.js index 8f95650..e185504 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -214,7 +214,7 @@ //helper to add an empty fieldset to the render model function getEmptyRenderFieldset (fieldsetModel) { - return eval("({ alias: '" + fieldsetModel.alias + "', remove: false, properties: []})"); + return JSON.parse('{"alias": "' + fieldsetModel.alias + '", "remove": false, "properties": []}'); } //helper for validation diff --git a/app/directives/archetypeproperty.js b/app/directives/archetypeproperty.js index 5ec5b33..3202746 100644 --- a/app/directives/archetypeproperty.js +++ b/app/directives/archetypeproperty.js @@ -17,6 +17,31 @@ } } + //helper that returns a JS ojbect from 'value' string or the original string + function jsonOrString(value, developerMode, debugLabel){ + if(value && typeof value == 'string'){ + try{ + if(developerMode == '1'){ + console.log("Trying to parse " + debugLabel + ": " + value); + } + value = JSON.parse(value); + } + catch(exception) + { + if(developerMode == '1'){ + console.log("Failed to parse " + debugLabel + "."); + } + } + } + + if(value && developerMode == '1'){ + console.log(debugLabel + " post-parsing: "); + console.log(value); + } + + return value; + } + var linker = function (scope, element, attrs) { var configFieldsetModel = getFieldsetByAlias(scope.archetypeConfig.fieldsets, scope.fieldset.alias); @@ -28,44 +53,10 @@ var defaultValue = configFieldsetModel.properties[scope.propertyConfigIndex].value; //try to convert the config to a JS object - if(config && typeof config == 'string'){ - try{ - if(scope.archetypeConfig.developerMode == '1'){ - console.log("Trying to eval config: " + config); - } - config = eval("(" + config + ")"); - } - catch(exception) - { - if(scope.archetypeConfig.developerMode == '1'){ - console.log("Failed to eval config."); - } - } - } - - if(config && scope.archetypeConfig.developerMode == '1'){ - console.log("Config post-eval: " + config); - } + config = jsonOrString(config, scope.archetypeConfig.developerMode, "config"); //try to convert the defaultValue to a JS object - if(defaultValue && typeof defaultValue == 'string'){ - try{ - if(scope.archetypeConfig.developerMode == '1'){ - console.log("Trying to eval default value: " + defaultValue); - } - defaultValue = eval("(" + defaultValue + ")"); - } - catch(exception) - { - if(scope.archetypeConfig.developerMode == '1'){ - console.log("Failed to eval defaultValue."); - } - } - } - - if(defaultValue && scope.archetypeConfig.developerMode == '1'){ - console.log("Default value post-eval: " + defaultValue); - } + defaultValue = jsonOrString(defaultValue, scope.archetypeConfig.developerMode, "defaultValue"); if (view) { @@ -87,7 +78,7 @@ if (!renderModelPropertyIndex) { - scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties.push(eval("({alias: '" + alias + "', value:'" + defaultValue + "'})")); + scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties.push(JSON.parse('{"alias": "' + alias + '", "value": "' + defaultValue + '"}')); renderModelPropertyIndex = getPropertyIndexByAlias(scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties, alias); } scope.model.value = scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex].properties[renderModelPropertyIndex].value;