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 |