cubicweb/web/data/cubicweb.preferences.js
changeset 11057 0b59724cb3f2
parent 10988 f1f7331bef84
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/web/data/cubicweb.preferences.js	Sat Jan 16 13:48:51 2016 +0100
@@ -0,0 +1,152 @@
+/**
+ * toggle visibility of an element by its id & set current visibility status in a cookie
+ *
+ */
+
+var prefsValues = {};
+
+function togglePrefVisibility(elemId) {
+    clearPreviousMessages();
+    jQuery('#' + elemId).toggleClass('hidden');
+}
+
+function closeFieldset(fieldsetid) {
+    var linklabel = _("open all");
+    var linkhref = 'javascript:openFieldset("' + fieldsetid + '")';
+    _toggleFieldset(fieldsetid, 1, linklabel, linkhref);
+}
+
+function openFieldset(fieldsetid) {
+    var linklabel = _("close all");
+    var linkhref = 'javascript:closeFieldset("' + fieldsetid + '")';
+    _toggleFieldset(fieldsetid, 0, linklabel, linkhref);
+}
+
+function _toggleFieldset(fieldsetid, closeaction, linklabel, linkhref) {
+    jQuery('#' + fieldsetid).find('div.openlink').each(function() {
+        var link = A({
+            'href': "javascript:$.noop();",
+            'onclick': linkhref
+        },
+        linklabel);
+        jQuery(this).empty().append(link);
+    });
+    jQuery('#' + fieldsetid).find('fieldset[id]').each(function() {
+        var fieldset = jQuery(this);
+        if (closeaction) {
+            fieldset.addClass('hidden');
+        } else {
+            fieldset.removeClass('hidden');
+            linkLabel = (_("open all"));
+        }
+    });
+}
+
+function validatePrefsForm(formid) {
+    clearPreviousMessages();
+    _clearPreviousErrors(formid);
+    return validateForm(formid, null, submitSuccess, submitFailure);
+}
+
+function submitFailure(result, formid, cbargs) {
+    var $form = jQuery('#' + formid);
+    var dom = DIV({'class': 'critical'}, _("please correct errors below"));
+    $form.find('div.formsg').empty().append(dom);
+    unfreezeFormButtons(formid);
+    var descr = result[1];
+    _displayValidationerrors(formid, descr[0], descr[1]);
+    $form.find('span.error').next().focus();
+    return false; // so handleFormValidationResponse doesn't try to display error
+}
+
+function submitSuccess(result, formid, cbargs) {
+    var $form = jQuery('#' + formid);
+    setCurrentValues($form);
+    var dom = DIV({'class': 'msg'}, _("changes applied"));
+    $form.find('div.formsg').empty().append(dom);
+    $form.find('input').removeClass('changed');
+    checkValues($form, true);
+    return;
+}
+
+function clearPreviousMessages() {
+    jQuery('div#appMsg').addClass('hidden');
+    jQuery('div.formsg').empty();
+}
+
+function checkValues(form, success) {
+    var unfreezeButtons = false;
+    jQuery(form).find('select').each(function() {
+        unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
+    });
+    jQuery(form).find('[type=text]').each(function() {
+        unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
+    });
+    jQuery(form).find('input[type=radio]:checked').each(function() {
+        unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
+    });
+
+    if (unfreezeButtons) {
+        unfreezeFormButtons(form.attr('id'));
+    } else {
+        if (!success) {
+            clearPreviousMessages();
+        }
+        _clearPreviousErrors(form.attr('id'));
+        freezeFormButtons(form.attr('id'));
+    }
+}
+
+function _checkValue(input, unfreezeButtons) {
+    var currentValue = prefsValues[input.attr('name')];
+    if (currentValue != input.val()) {
+        input.addClass('changed');
+        unfreezeButtons = true;
+    } else {
+        input.removeClass('changed');
+        jQuery('span[id="err-' + input.attr('id') + '"]').remove();
+    }
+    input.removeClass('error');
+    return unfreezeButtons;
+}
+
+function setCurrentValues(form) {
+    jQuery(form).find('[name^=value]').each(function() {
+        var input = jQuery(this);
+        var name = input.attr('name');
+        if (input.attr('type') == 'radio') {
+            // NOTE: there seems to be a bug with jQuery(input).attr('checked')
+            //       in our case, we can't rely on its value, we use
+            //       the DOM API instead.
+            if (input[0].checked) {
+                prefsValues[name] = input.val();
+            }
+        } else {
+            prefsValues[name] = input.val();
+        }
+        jQuery(form).find('input[name="edits-' + name + '"]').val(prefsValues[name]);
+    });
+}
+
+function initEvents() {
+    jQuery('form').each(function() {
+        var form = jQuery(this);
+        //freezeFormButtons(form.attr('id'));
+        form.find('.validateButton').attr('disabled', 'disabled');
+        form.find('input[type=text]').keyup(function() {
+            checkValues(form);
+        });
+        form.find('input[type=radio]').change(function() {
+            checkValues(form);
+        });
+        form.find('select').change(function() {
+            checkValues(form);
+        });
+        setCurrentValues(form);
+    });
+}
+
+$(document).ready(function() {
+    initEvents();
+});
+