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 |