From e48199a223798fba76496a8abb4371126c7312ac Mon Sep 17 00:00:00 2001
From: Rafael Ostertag <rafael.ostertag@math.uzh.ch>
Date: Tue, 3 May 2016 08:24:45 +0200
Subject: [PATCH] Helper.stringToBool(): converts a string to a boolean value.
 Support for `data-hidden` and `data-disabled` attributes, which are used to
 initially configure form elements.

---
 javascript/src/Helper/NameSpaceFunctions.js | 28 ++++++++++++++
 javascript/src/QfqForm.js                   | 43 +++++++++++++++++++++
 mockup/elementconfiguration.html            |  4 +-
 3 files changed, 73 insertions(+), 2 deletions(-)

diff --git a/javascript/src/Helper/NameSpaceFunctions.js b/javascript/src/Helper/NameSpaceFunctions.js
index e4fb0da62..c4906e51c 100644
--- a/javascript/src/Helper/NameSpaceFunctions.js
+++ b/javascript/src/Helper/NameSpaceFunctions.js
@@ -15,4 +15,32 @@ QfqNS.Helper = QfqNS.Helper || {};
             errorThrown, "error");
         alert.show();
     };
+
+    n.stringToBool = function (string) {
+        if (typeof string !== "string") {
+            return string;
+        }
+        var lowerCase = string.toLowerCase().trim();
+
+        switch (lowerCase) {
+            case "1":
+            case "yes":
+            case "y":
+            case "t":
+            case "true":
+            case "enabled":
+            case "enable":
+                return true;
+            case "0":
+            case "no":
+            case "n":
+            case "f":
+            case "false":
+            case "disabled":
+            case "enable":
+                return false;
+            default:
+                return false;
+        }
+    };
 })(QfqNS.Helper);
\ No newline at end of file
diff --git a/javascript/src/QfqForm.js b/javascript/src/QfqForm.js
index 50231abda..0c95e9f28 100644
--- a/javascript/src/QfqForm.js
+++ b/javascript/src/QfqForm.js
@@ -69,10 +69,53 @@ var QfqNS = QfqNS || {};
             function (obj) {
                 n.Helper.showAjaxError(null, obj.textStatus, obj.errorThrown);
             });
+
+        var configurationData = this.readElementConfigurationData();
+
+        this.applyElementConfiguration(configurationData);
     };
 
     n.QfqForm.prototype.on = n.EventEmitter.onMixin;
 
+    /**
+     *
+     * @private
+     */
+    n.QfqForm.prototype.readElementConfigurationData = function () {
+        var $configuredElements = $("#" + this.formId + " [data-hidden],#" + this.formId + " [data-disabled]");
+
+        var configurationArray = [];
+        $configuredElements.each(function (index, element) {
+            try {
+                var $element = $(element);
+                if (!element.hasAttribute("name")) {
+                    n.Log.warning("Element has configuration data, but no name. Skipping");
+                    return;
+                }
+
+                var configuration = {};
+                configuration['form-element'] = $element.attr('name');
+
+                var hiddenVal = $element.data('hidden');
+                if (hiddenVal !== undefined) {
+                    configuration.hidden = n.Helper.stringToBool(hiddenVal);
+                }
+
+                var disabledVal = $element.data('disabled');
+                if (disabledVal !== undefined) {
+                    configuration.disabled = n.Helper.stringToBool(disabledVal);
+                }
+
+                configurationArray.push(configuration);
+            } catch (e) {
+                n.Log.error(e.message);
+            }
+        });
+
+        return configurationArray;
+
+    };
+
     /**
      * @public
      * @param bsTabs
diff --git a/mockup/elementconfiguration.html b/mockup/elementconfiguration.html
index fad1efb7f..6569d7db8 100644
--- a/mockup/elementconfiguration.html
+++ b/mockup/elementconfiguration.html
@@ -89,7 +89,7 @@
             </div>
 
             <div class="col-md-6">
-                <input id="text" type="text" class="form-control" name="text">
+                <input id="text" type="text" class="form-control" name="text" data-disabled="true">
             </div>
 
         </div>
@@ -141,7 +141,7 @@
             <div class="col-md-6">
                 <div class="checkbox">
                     <label>
-                        <input type="checkbox" id="checkbox" name="checkbox">
+                        <input type="checkbox" id="checkbox" name="checkbox" data-hidden="no">
                     </label>
 
                     <p class="help-block"></p>
-- 
GitLab