web/data/cubicweb.preferences.js
changeset 1808 aa09e20dd8c0
parent 1671 10608b9e79cb
child 1865 62d3726ad8cb
equal deleted inserted replaced
1693:49075f57cf2c 1808:aa09e20dd8c0
     1 /* toggle visibility of an element by its id
     1 /* toggle visibility of an element by its id
     2  * & set current visibility status in a cookie
     2  * & set current visibility status in a cookie
     3  * XXX whenever used outside of preferences, don't forget to
     3  * XXX whenever used outside of preferences, don't forget to
     4  *     move me in a more appropriate place
     4  *     move me in a more appropriate place
     5  */
     5  */
     6 function toggle_and_remember_visibility(elemId, cookiename) {
     6 
       
     7 function toggleVisibility(elemId, cookiename) {
       
     8     _clearPreviousMessages();
     7     jqNode(elemId).toggleClass('hidden');
     9     jqNode(elemId).toggleClass('hidden');
     8     async_remote_exec('set_cookie', cookiename,
    10     asyncRemoteExec('set_cookie', cookiename,
     9                       jQuery('#' + elemId).attr('class'));
    11                       jQuery('#' + elemId).attr('class'));
    10 }
    12 }
       
    13 
       
    14 function closeFieldset(fieldsetid){
       
    15     var linklabel = _('open all');
       
    16     var linkhref = 'javascript:openFieldset("' +fieldsetid + '")'
       
    17     _toggleFieldset(fieldsetid, 1, linklabel, linkhref)
       
    18 }
       
    19 
       
    20 function openFieldset(fieldsetid){
       
    21     var linklabel = _('close all');
       
    22     var linkhref = 'javascript:closeFieldset("'+ fieldsetid + '")'
       
    23     _toggleFieldset(fieldsetid, 0, linklabel, linkhref)
       
    24 }
       
    25 
       
    26 
       
    27 function _toggleFieldset(fieldsetid, closeaction, linklabel, linkhref){
       
    28     jQuery('#'+fieldsetid).find('div.openlink').each(function(){
       
    29 	    var link = A({'href' : "javascript:noop();",
       
    30 			  'onclick' : linkhref},
       
    31 			  linklabel)
       
    32 	    jQuery(this).empty().append(link);
       
    33 	});
       
    34     jQuery('#'+fieldsetid).find('fieldset[id]').each(function(){
       
    35 	    var fieldset = jQuery(this);
       
    36 	    if(closeaction){
       
    37 		fieldset.addClass('hidden')
       
    38 	    }else{
       
    39 		fieldset.removeClass('hidden');
       
    40 		linkLabel = (_('open all'));
       
    41 	    }
       
    42 	});
       
    43 }
       
    44 
       
    45 function validatePrefsForm(formid){
       
    46     var form = getNode(formid);
       
    47     freezeFormButtons(formid);
       
    48     try {
       
    49 	var d = _sendForm(formid, null);
       
    50     } catch (ex) {
       
    51 	log('got exception', ex);
       
    52 	return false;
       
    53     }
       
    54     function _callback(result, req) {
       
    55 	_clearPreviousMessages();
       
    56 	_clearPreviousErrors(formid);
       
    57 	// success
       
    58 	if(result[0]){
       
    59 	    return submitSucces(formid)
       
    60 	}
       
    61  	// Failures
       
    62 	unfreezeFormButtons(formid);
       
    63 	var descr = result[1];
       
    64         if (!isArrayLike(descr) || descr.length != 2) {
       
    65 	   log('got strange error :', descr);
       
    66 	   updateMessage(descr);
       
    67 	   return ;
       
    68 	}
       
    69         _displayValidationerrors(formid, descr[0], descr[1]);
       
    70 	var dom = DIV({'class':'critical'},
       
    71 		      _("please correct errors below"));
       
    72 	jQuery(form).find('div.formsg').empty().append(dom);
       
    73 	updateMessage(_(""));
       
    74 	return false;
       
    75     }
       
    76     d.addCallback(_callback);
       
    77     return false;
       
    78 }
       
    79 
       
    80 function submitSucces(formid){
       
    81     var form = jQuery('#'+formid);
       
    82     setCurrentValues(form);
       
    83     var dom = DIV({'class':'message'},
       
    84 		  _("changes applied"));
       
    85     jQuery(form).find('div.formsg').empty().append(dom);
       
    86     jQuery(form).find('input').removeClass('changed');
       
    87     checkValues(form, true);
       
    88     return;
       
    89 }
       
    90 
       
    91 function _clearPreviousMessages() {
       
    92     jQuery('div#appMsg').addClass('hidden');
       
    93     jQuery('div.formsg').empty();
       
    94 }
       
    95 
       
    96 function _clearPreviousErrors(formid) {
       
    97     jQuery('#' + formid + ' span.error').remove();
       
    98 }
       
    99 
       
   100 
       
   101 function checkValues(form, success){
       
   102     var unfreezeButtons = false;
       
   103     jQuery(form).find('select').each(function () { 
       
   104 	    unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
       
   105 	});
       
   106     jQuery(form).find('[type=text]').each(function () {
       
   107 	    unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
       
   108 	});
       
   109     jQuery(form).find('input[type=radio]').each(function () { 
       
   110 	    if (jQuery(this).attr('checked')){
       
   111 		unfreezeButtons = _checkValue(jQuery(this), unfreezeButtons);
       
   112 	    }
       
   113      }); 
       
   114    
       
   115     if (unfreezeButtons){
       
   116 	unfreezeFormButtons(form.attr('id'));
       
   117     }else{
       
   118 	if (!success){
       
   119 	    _clearPreviousMessages();
       
   120 	}
       
   121 	_clearPreviousErrors(form.attr('id'));
       
   122 	freezeFormButtons(form.attr('id'));
       
   123     }
       
   124 }
       
   125 
       
   126 function _checkValue(input, unfreezeButtons){
       
   127      var currentValueInput = jQuery("input[id=current-" + input.attr('name') + "]");
       
   128      if (currentValueInput.attr('value') != input.attr('value')){
       
   129 	 input.addClass('changed');
       
   130 	 unfreezeButtons = true;
       
   131      }else{
       
   132 	 input.removeClass('changed');
       
   133 	 jQuery("span[id=err-" + input.attr('id') + "]").remove();
       
   134      }	
       
   135      input.removeClass('error');
       
   136      return unfreezeButtons
       
   137 }
       
   138 
       
   139 
       
   140 function setCurrentValues(form){
       
   141     jQuery(form).find('input[id^=current-value]').each(function () { 
       
   142 	    var currentValueInput = jQuery(this);
       
   143 	    var name = currentValueInput.attr('id').split('-')[1];
       
   144 	    jQuery(form).find("[name=" + name + "]").each(function (){
       
   145 		    var input = jQuery(this);
       
   146 		    if(input.attr('type')=='radio'){
       
   147 			if(input.attr('checked')){
       
   148 			    log(input.attr('value'));
       
   149 			    currentValueInput.attr('value', input.attr('value'));
       
   150 			}
       
   151 		    }else{
       
   152 			currentValueInput.attr('value', input.attr('value'));
       
   153 		    }
       
   154 		});
       
   155     });
       
   156 }
       
   157 
       
   158 
       
   159 function initEvents(){
       
   160   jQuery('form').each(function() { 
       
   161 	  var form = jQuery(this);
       
   162 	  freezeFormButtons(form.attr('id'));
       
   163 	  form.find('input[type=text]').keyup(function(){  
       
   164 		  checkValues(form);	   
       
   165           });
       
   166 	  form.find('input[type=radio]').change(function(){  
       
   167 		  checkValues(form);	   
       
   168           });
       
   169 	  form.find('select').change(function(){  
       
   170 		  checkValues(form);	 
       
   171           });
       
   172     });
       
   173 }
       
   174 
       
   175 $(document).ready(function() {
       
   176 	initEvents();
       
   177 });
       
   178