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