Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/CoreHome/angularjs/common/directives/field-condition.js')
-rw-r--r--plugins/CoreHome/angularjs/common/directives/field-condition.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/plugins/CoreHome/angularjs/common/directives/field-condition.js b/plugins/CoreHome/angularjs/common/directives/field-condition.js
new file mode 100644
index 0000000000..5d936c4480
--- /dev/null
+++ b/plugins/CoreHome/angularjs/common/directives/field-condition.js
@@ -0,0 +1,89 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+/**
+ * Usage:
+ * <div piwik-form-condition>
+ */
+(function () {
+ angular.module('piwikApp.directive').directive('fieldCondition', piwikFieldCondition);
+
+ piwikFieldCondition.$inject = ['piwik', '$timeout'];
+
+ function piwikFieldCondition(piwik, $timeout){
+
+ function evaluate(scope, condition, element)
+ {
+ if (scope.$eval(condition, scope.allValues)) {
+ element.show();
+ } else {
+ element.hide();
+ }
+ }
+
+ function getValueFromElement(element)
+ {
+ if (element.attr('type') === 'checkbox') {
+ return element.is(':checked')
+ } else if (element.attr('type') === 'radio') {
+ var name = element.attr('name');
+ return $('.form-group [name=' + name + ']:checked').val()
+ } else if (element.prop('tagName').toLowerCase() === 'select') {
+ var name = element.val();
+ if (name.indexOf('string:') === 0) {
+ return name.substr('string:'.length);
+ }
+
+ return name;
+ }
+
+ return element.val();
+ }
+
+ function evaluateConditionalExpression(scope, condition, element)
+ {
+ var fieldParts = condition.replace('!', '');
+ fieldParts = fieldParts.split(' ');
+ var fieldNames = [];
+ fieldParts.forEach(function (name) {
+ name = $.trim(name);
+ if (name && name.length > 3) {
+ fieldNames.push(name);
+ }
+ });
+
+ scope.allValues = {};
+ angular.forEach(fieldNames, function (name) {
+ var actualField = $('.form-group [name=' + name + ']').first();
+ if (actualField.size()) {
+ scope.allValues[name] = getValueFromElement(actualField);
+ actualField.on('change', function () {
+ scope.allValues[name] = getValueFromElement($(this));
+ evaluate(scope, condition, element);
+ })
+ }
+ });
+
+ evaluate(scope, condition, element);
+ }
+
+
+ return {
+ priority: 10, // makes sure to render after other directives, otherwise the content might be overwritten again see https://github.com/piwik/piwik/pull/8467
+ restrict: 'A',
+ link: function(scope, element, attrs) {
+
+ var condition = attrs.fieldCondition;
+ if (condition) {
+ $timeout(function (){
+ evaluateConditionalExpression(scope, condition, element);
+ });
+ }
+ },
+ };
+ }
+})(); \ No newline at end of file