author | David Douard <david.douard@logilab.fr> |
Mon, 11 Feb 2013 11:47:50 +0100 | |
changeset 8829 | bb14dc9848ec |
parent 8185 | 864fc1f147a4 |
child 10027 | 292c81246347 |
permissions | -rw-r--r-- |
/** * 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, submitSucces, 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 submitSucces(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(); });