diff --git a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js index 48e7a37a22b78e1f1154bcaec9471d51e4a1c3a5..8bfa3d57fc4fdb53f6c9dad257cfbca34eed7c4c 100644 --- a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js +++ b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js @@ -420,9 +420,21 @@ formReader.formReaderDirective = function ($q, formReaderService, propertiesSrvc if (formReaderService["isFunctionCall"](oField["visible"])) { isVisible = formReaderService["callFunction"](oField["visible"]); } else if(formReaderService["isTernaryString"](oField["visible"])) { - isVisible = scope.$eval(oField["visible"]); + try { + isVisible = scope.$eval(oField["visible"]); + } catch (e) { + isVisible = false; + } + } else if(formReaderService["isCustomTernaryString"](oField["visible"])) { + try { + isVisible = scope.$eval(formReaderService["translateCustomTernaryString"](oField["visible"], scope['oFormValues'], scope['sFormDefinitionName'])); + } catch (e) { + isVisible = false; + } } else if (goog.isBoolean(oField["visible"])) { isVisible = oField["visible"]; + } else if (oField["visible"] == true || oField["visible"] == false || oField["visible"] == "true" || oField["visible"] == "false") { + isVisible = oField["visible"]; } else { isVisible = false; } @@ -614,6 +626,26 @@ formReader.formReaderDirective = function ($q, formReaderService, propertiesSrvc }); }; + /** + * Transforme en int + * + * @param {string} sField + * @return {number} + */ + scope['int'] = scope['parseInt'] = function (sField) { + return parseInt(sField); + } + + /** + * Transforme en float + * + * @param {string} sField + * @return {number} + */ + scope['float'] = scope['parseFloat'] = function (sField) { + return parseFloat(sField); + } + // Attend la suppression du scope. scope.$on("$destroy", function () { // Supprime toutes les données du formulaire. diff --git a/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js b/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js index f174cfef86ee19958d0c70f808509c9881e49bae..f3baa43a1fde7180abd8099aeeee8cc80fccfaaf 100644 --- a/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js +++ b/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js @@ -642,6 +642,9 @@ formReader.formReaderService = function ($translate, $rootScope, $q, $log, $time bCheckFunction = true; var bReturn = false; if (typeof (sString) === "string") { + if (sString.substr(0, 1) === '=') { + return false; + } aMatchResult = sString.match(/(.+)\((.*)\)/); if (aMatchResult !== null) { if (bCheckFunction) { @@ -678,6 +681,91 @@ formReader.formReaderService = function ($translate, $rootScope, $q, $log, $time return false; } }, + /** + * isCustomTernaryString function. + * La chaine de caractère passée est une expression ternaire définie par l'administrateur + * ex : "= {{puissance}} == 500" + * @param {string} sString Chaine de caractère. + * @return {boolean} + */ + "isCustomTernaryString": function (sString) { + if (goog.isDefAndNotNull(this['translateCustomTernaryString'](sString))) { + return true; + } else { + return false; + } + }, + + /** + * translateCustomTernaryString function + * Traduit une chaine ternaire customisée par une chaine ternaire exploitable + * ex : "= {{puissance}} == 500" devient "oFormValues[sFormDefinitionName].puissance == 500 ? true : false" + * @param {string} sString + * @param {object} oFormValues + * @param {string} sFormDefinitionName + * @return {string} + */ + "translateCustomTernaryString": function (sString, oFormValues, sFormDefinitionName) { + + // Verif type + if (!goog.isString(sString)) { + return null; + } + + // Vérification chaine + if (sString.substr(0, 1) !== '=') { + return null; + } + + if (!goog.isDefAndNotNull(RegExp('==').exec(sString))) { + return null; + } + + // Enlève le premier signe "=" + sString = sString.substr(1); + + // Cherche les attributs + var aAttrs = []; + var attrRegex = RegExp('{{(\\w*?)}}','g'); + var attrRegexResult; + while ((attrRegexResult = attrRegex.exec(sString)) !== null) { + aAttrs.push(attrRegexResult); + } + + // Remplace les attributs + var sReplacer; + for (var i = 0; i < aAttrs.length; i++) { + if (goog.isDefAndNotNull(aAttrs[i][0]) && goog.isDefAndNotNull(aAttrs[i][1])) { + + // Pour les valeurs simples + sReplacer = 'oFormValues[sFormDefinitionName].' + aAttrs[i][1]; + + // Pour valeurs dans les listes déroulantes + if (goog.isDefAndNotNull(oFormValues)) { + if (goog.isDefAndNotNull(oFormValues[sFormDefinitionName])) { + if (goog.isDefAndNotNull(oFormValues[sFormDefinitionName][aAttrs[i][1]])) { + if (goog.isDefAndNotNull(oFormValues[sFormDefinitionName][aAttrs[i][1]]['selectedOption'])) { + if (goog.isDefAndNotNull(oFormValues[sFormDefinitionName][aAttrs[i][1]]['selectedOption']['value'])) { + sReplacer = 'oFormValues[sFormDefinitionName].' + aAttrs[i][1] + '.selectedOption.value'; + } + $log.log(aAttrs[i][0] + ': ' + oFormValues[sFormDefinitionName][aAttrs[i][1]]['selectedOption']['value']); + } else { + $log.log(aAttrs[i][0] + ': ' + oFormValues[sFormDefinitionName][aAttrs[i][1]]); + } + } + } + } + + + sString = sString.replace(aAttrs[i][0], sReplacer); + } + } + + // Ajoute le retour true/false + sString = sString + ' ? true : false'; + + return sString; + }, /** * selectFirstOption function. * Sélectionne la 1ere option d'un <select>. diff --git a/src/vitis/client/javascript/externs/studio/lang/lang-en.json b/src/vitis/client/javascript/externs/studio/lang/lang-en.json index 2a8607765144ea740a1a942c6b65707e030622e0..ca2c8719f889d84db5deb53cf801a99adaa8a05b 100755 --- a/src/vitis/client/javascript/externs/studio/lang/lang-en.json +++ b/src/vitis/client/javascript/externs/studio/lang/lang-en.json @@ -156,7 +156,9 @@ "Required": "Required", "displayOnly": "Display only", "DefaultValue": "Default value", - "Value": "Value" + "Value": "Value", + "Visible": "Visible", + "VisibleHelp": "Utilisez le gestionnaire de sources de données (bouton en bas à droite) pour ajouter ou modifier une source données" }, "BusinessObject": { "BusinessObject": "Business object", diff --git a/src/vitis/client/javascript/externs/studio/lang/lang-fr.json b/src/vitis/client/javascript/externs/studio/lang/lang-fr.json index bb90dd51670f0baf1ea619c0d44a06a62d86e815..ae9fd62b4e586cd3b7ccd7a6cc3cf5416949567d 100755 --- a/src/vitis/client/javascript/externs/studio/lang/lang-fr.json +++ b/src/vitis/client/javascript/externs/studio/lang/lang-fr.json @@ -162,7 +162,9 @@ "Required": "Requis", "displayOnly": "Uniquement en consultation", "DefaultValue": "Valeur par défaut", - "Value": "Valeur" + "Value": "Valeur", + "Visible": "Visible", + "VisibleHelp": "Pour afficher/cacher le champ utilisez true/false ou une expression complexe utilisant les valeurs du formulaire ex : \"= {{id_com}} == 75000\", ex : \"= int({{puissance}}) + int({{portee}}) == 1000\"" }, "BusinessObject": { "BusinessObject": "Objet métier", diff --git a/src/vitis/client/javascript/externs/studio/templates/ElementForm.html b/src/vitis/client/javascript/externs/studio/templates/ElementForm.html index bb5dddce2a859473da12dabbef8415a187ef84d0..f1b2cff9fbd997cbec3c37d8323ca9e5553aec30 100755 --- a/src/vitis/client/javascript/externs/studio/templates/ElementForm.html +++ b/src/vitis/client/javascript/externs/studio/templates/ElementForm.html @@ -1481,6 +1481,7 @@ <textarea ng-disabled="locker" ng-model="model.default_value" id="Element_Form_value_input" type="text" class="form-control" aria-describedby="Element_Form_value_label" rows="5"></textarea> </div> </div> + <!-- Codemirror --> <div ng-switch-when="codemirror"> <div class="input-group element-margin input-group-xs"> <span class="input-group-addon" id="Element_Form_label_label">{{::ctrl.text.Component.General.Label}}</span> @@ -2175,8 +2176,23 @@ --> </div> <!-- Default --> - <span ng-switch-default> - </span> + <div ng-switch-default> + </div> + <!-- Champ visible --> + <div> + <div ng-if="model.type != 'undefined'" class="input-group element-margin input-group-xs"> + <span id="Element_Form_visible_label" class="input-group-addon">{{::ctrl.text.Component.General.Visible}}</span> + <textarea ng-disabled="locker" + ng-model="model.visible" + id="Element_Form_visible_input" + type="text" + class="form-control" + aria-describedby="Element_Form_visible_label" + data-app-helper-icon + data-text="{{::ctrl.text.Component.General.VisibleHelp}}" + rows="3"></textarea> + </div> + </div> </div> </form> </div>