--- /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();
+});
+