104 lines
4.7 KiB
JavaScript
104 lines
4.7 KiB
JavaScript
angular.module('umbraco.services').factory('archetypeService', function () {
|
|
//public
|
|
return {
|
|
//helper that returns a JS ojbect from 'value' string or the original string
|
|
jsonOrString: function (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;
|
|
},
|
|
getFieldsetByAlias: function (fieldsets, alias)
|
|
{
|
|
return _.find(fieldsets, function(fieldset){
|
|
return fieldset.alias == alias;
|
|
});
|
|
},
|
|
getPropertyIndexByAlias: function(properties, alias){
|
|
for (var i in properties)
|
|
{
|
|
if (properties[i].alias == alias) {
|
|
return i;
|
|
}
|
|
}
|
|
},
|
|
getPropertyByAlias: function (fieldset, alias){
|
|
return _.find(fieldset.properties, function(property){
|
|
return property.alias == alias;
|
|
});
|
|
},
|
|
getUniquePropertyAlias: function (currentScope, propertyAliasParts) {
|
|
if (currentScope.hasOwnProperty('fieldsetIndex') && currentScope.hasOwnProperty('property') && currentScope.hasOwnProperty('propertyConfigIndex'))
|
|
{
|
|
var currentPropertyAlias = "f" + currentScope.fieldsetIndex + "-" + currentScope.property.alias + "-p" + currentScope.propertyConfigIndex;
|
|
propertyAliasParts.push(currentPropertyAlias);
|
|
}
|
|
else if (currentScope.hasOwnProperty('isPreValue')) // Crappy way to identify this is the umbraco property scope
|
|
{
|
|
var umbracoPropertyAlias = currentScope.$parent.$parent.property.alias; // Crappy way to get the umbraco host alias once we identify its scope
|
|
propertyAliasParts.push(umbracoPropertyAlias);
|
|
}
|
|
|
|
if (currentScope.$parent)
|
|
this.getUniquePropertyAlias(currentScope.$parent, propertyAliasParts);
|
|
|
|
return _.unique(propertyAliasParts).reverse().join("-");
|
|
},
|
|
getFieldset: function(scope) {
|
|
return scope.archetypeRenderModel.fieldsets[scope.fieldsetIndex];
|
|
},
|
|
getFieldsetProperty: function (scope) {
|
|
return this.getFieldset(scope).properties[scope.renderModelPropertyIndex];
|
|
},
|
|
setFieldsetValidity: function (fieldset) {
|
|
// mark the entire fieldset as invalid if there are any invalid properties in the fieldset, otherwise mark it as valid
|
|
fieldset.isValid =
|
|
_.find(fieldset.properties, function (property) {
|
|
return property.isValid == false
|
|
}) == null;
|
|
},
|
|
validateProperty: function (fieldset, property, configFieldsetModel) {
|
|
var propertyConfig = this.getPropertyByAlias(configFieldsetModel, property.alias);
|
|
|
|
if (propertyConfig) {
|
|
// use property.value !== property.value to check for NaN values on numeric inputs
|
|
if (propertyConfig.required && (property.value == null || property.value === "" || property.value !== property.value)) {
|
|
property.isValid = false;
|
|
}
|
|
// issue 116: RegEx validate property value
|
|
// Only validate the property value if anything has been entered - RegEx is considered a supplement to "required".
|
|
if (property.isValid == true && propertyConfig.regEx && property.value) {
|
|
var regEx = new RegExp(propertyConfig.regEx);
|
|
if (regEx.test(property.value) == false) {
|
|
property.isValid = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
this.setFieldsetValidity(fieldset);
|
|
},
|
|
// called when the value of any property in a fieldset changes
|
|
propertyValueChanged: function (fieldset, property) {
|
|
// it's the Umbraco way to hide the invalid state when altering an invalid property, even if the new value isn't valid either
|
|
property.isValid = true;
|
|
this.setFieldsetValidity(fieldset);
|
|
}
|
|
}
|
|
}); |