From 1cc0586c75eba245ae53bc30a445a7572b8d5911 Mon Sep 17 00:00:00 2001 From: kjac Date: Sat, 10 Jan 2015 11:16:00 +0100 Subject: [PATCH] Support alternative property in label template Allow fieldset label templates to contain alternative/fallback property aliases and/or functions by seperating with "|" - e.g. {{title|myFunction(text)}} --- app/controllers/controller.js | 39 ++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/app/controllers/controller.js b/app/controllers/controller.js index 78569d0..d37eb0e 100644 --- a/app/controllers/controller.js +++ b/app/controllers/controller.js @@ -38,22 +38,33 @@ var parsedTemplate = template; while ((results = rgx.exec(template)) !== null) { - var propertyAlias = ""; + // split the template in case it consists of multiple property aliases and/or functions + var parts = results[1].split("|"); + var templateLabelValue = ""; + for(var i = 0; i < parts.length; i++) { + // stop looking for a template label value if a previous template part already yielded a value + if(templateLabelValue != "") { + break; + } + + var part = parts[i]; + + //test for function + var beginIndexOf = part.indexOf("("); + var endIndexOf = part.indexOf(")"); - //test for function - var beginIndexOf = results[1].indexOf("("); - var endIndexOf = results[1].indexOf(")"); - - if(beginIndexOf != -1 && endIndexOf != -1) - { - var functionName = results[1].substring(0, beginIndexOf); - propertyAlias = results[1].substring(beginIndexOf + 1, endIndexOf); - parsedTemplate = parsedTemplate.replace(results[0], executeFunctionByName(functionName, window, $scope.getPropertyValueByAlias(fieldset, propertyAlias), $scope)); - } - else { - propertyAlias = results[1]; - parsedTemplate = parsedTemplate.replace(results[0], $scope.getPropertyValueByAlias(fieldset, propertyAlias)); + if(beginIndexOf != -1 && endIndexOf != -1) + { + var functionName = part.substring(0, beginIndexOf); + var propertyAlias = part.substring(beginIndexOf + 1, endIndexOf); + templateLabelValue = executeFunctionByName(functionName, window, $scope.getPropertyValueByAlias(fieldset, propertyAlias), $scope); + } + else { + propertyAlias = part; + templateLabelValue = $scope.getPropertyValueByAlias(fieldset, propertyAlias); + } } + parsedTemplate = parsedTemplate.replace(results[0], templateLabelValue); } return parsedTemplate;