Verzeichnisstruktur phpBB-3.0.0
- Veröffentlicht
- 12.12.2007
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
permissions.js
001 /**
002 * Hide and show all checkboxes
003 * status = true (show boxes), false (hide boxes)
004 */
005 function display_checkboxes(status)
006 {
007 var form = document.getElementById('set-permissions');
008 var cb = document.getElementsByTagName('input');
009 var display;
010
011 //show
012 if (status)
013 {
014 display = 'inline';
015 }
016 //hide
017 else
018 {
019 display = 'none';
020 }
021
022 for (var i = 0; i < cb.length; i++ )
023 {
024 if (cb[i].className == 'permissions-checkbox')
025 {
026 cb[i].style.display = display;
027 }
028
029 }
030
031 }
032
033
034 /**
035 * Change opacity of element
036 * e = element
037 * value = 0 (hidden) till 10 (fully visible)
038 */
039 function set_opacity(e, value) {
040 e.style.opacity = value/10;
041
042 //IE opacity currently turned off, because of its astronomical stupidity
043 //e.style.filter = 'alpha(opacity=' + value*10 + ')';
044 }
045
046 /**
047 * Reset the opacity and checkboxes
048 * block_id = id of the element that needs to be toggled
049 */
050 function toggle_opacity(block_id) {
051 var cb = document.getElementById('checkbox' + block_id);
052 var fs = document.getElementById('perm' + block_id);
053
054 if (cb.checked)
055 {
056 set_opacity(fs, 5);
057 }
058 else
059 {
060 set_opacity(fs, 10);
061 }
062 }
063
064 /**
065 * Reset the opacity and checkboxes
066 * value = 0 (checked) and 1 (unchecked)
067 * except_id = id of the element not to hide
068 */
069 function reset_opacity(status, except_id) {
070 var perm = document.getElementById('set-permissions');
071 var fs = perm.getElementsByTagName('fieldset');
072 var opacity = 5;
073
074 if (status)
075 {
076 opacity = 10;
077 }
078
079 for (var i = 0; i < fs.length; i++ )
080 {
081 if (fs[i].className != 'quick')
082 {
083 set_opacity(fs[i], opacity);
084 }
085 }
086
087 if (typeof(except_id) != 'undefined')
088 {
089 set_opacity(document.getElementById('perm' + except_id), 10);
090 }
091
092 //reset checkboxes too
093 marklist('set-permissions', 'inherit', !status);
094 }
095
096
097 /**
098 * Check whether we have a full radiobutton row of true
099 * index = offset for the row of inputs (0 == first row, 1 == second, 2 == third),
100 * rb = array of radiobuttons
101 */
102 function get_radio_status(index, rb)
103 {
104 for (var i = index; i < rb.length; i = i + 3 )
105 {
106 if (rb[i].checked != true)
107 {
108 if (i > index)
109 {
110 //at least one is true, but not all (custom)
111 return 2;
112 }
113 //first one is not true
114 return 0;
115 }
116 }
117
118 // all radiobuttons true
119 return 1;
120 }
121
122 /**
123 * Set tab colours
124 * id = panel the tab needs to be set for,
125 * init = initialising on open,
126 * quick = If no calculation needed, this contains the colour
127 */
128 function set_colours(id, init, quick)
129 {
130 var table = document.getElementById('table' + id);
131 var tab = document.getElementById('tab' + id);
132
133 if (typeof(quick) != 'undefined')
134 {
135 tab.className = 'permissions-preset-' + quick + ' activetab';
136 return;
137 }
138
139 var rb = table.getElementsByTagName('input');
140 var colour = 'custom';
141
142 var status = get_radio_status(0, rb);
143
144 if (status == 1)
145 {
146 colour = 'yes';
147 }
148 else if (status == 0)
149 {
150 // We move on to No
151 status = get_radio_status(1, rb);
152
153 if (status == 1)
154 {
155 colour = 'no';
156 }
157 else if (status == 0)
158 {
159 // We move on to Never
160 status = get_radio_status(2, rb);
161
162 if (status == 1)
163 {
164 colour = 'never';
165 }
166 }
167 }
168
169 if (init)
170 {
171 tab.className = 'permissions-preset-' + colour;
172 }
173 else
174 {
175 tab.className = 'permissions-preset-' + colour + ' activetab';
176 }
177 }
178
179 /**
180 * Initialise advanced tab colours on first load
181 * block_id = block that is opened
182 */
183 function init_colours(block_id)
184 {
185 var block = document.getElementById('advanced' + block_id);
186 var panels = block.getElementsByTagName('div');
187 var tab = document.getElementById('tab' + id);
188
189 for (var i = 0; i < panels.length; i++)
190 {
191 if(panels[i].className == 'permissions-panel')
192 {
193 set_colours(panels[i].id.replace(/options/, ''), true);
194 }
195 }
196
197 tab.className = tab.className + ' activetab';
198 }
199
200 /**
201 * Show/hide option panels
202 * value = suffix for ID to show
203 * adv = we are opening advanced permissions
204 * view = called from view permissions
205 */
206 function swap_options(pmask, fmask, cat, adv, view)
207 {
208 id = pmask + fmask + cat;
209 active_option = active_pmask + active_fmask + active_cat;
210
211 var old_tab = document.getElementById('tab' + active_option);
212 var new_tab = document.getElementById('tab' + id);
213 var adv_block = document.getElementById('advanced' + pmask + fmask);
214
215 if (adv_block.style.display == 'block' && adv == true)
216 {
217 dE('advanced' + pmask + fmask, -1);
218 reset_opacity(1);
219 display_checkboxes(false);
220 return;
221 }
222
223 // no need to set anything if we are clicking on the same tab again
224 if (new_tab == old_tab && !adv)
225 {
226 return;
227 }
228
229 // init colours
230 if (adv && (pmask + fmask) != (active_pmask + active_fmask))
231 {
232 init_colours(pmask + fmask);
233 display_checkboxes(true);
234 reset_opacity(1);
235 }
236 else if (adv)
237 {
238 //Checkbox might have been clicked, but we need full visibility
239 display_checkboxes(true);
240 reset_opacity(1);
241 }
242
243 // set active tab
244 old_tab.className = old_tab.className.replace(/\ activetab/g, '');
245 new_tab.className = new_tab.className + ' activetab';
246
247 if (id == active_option && adv != true)
248 {
249 return;
250 }
251
252 dE('options' + active_option, -1);
253
254 //hiding and showing the checkbox
255 if (document.getElementById('checkbox' + active_pmask + active_fmask))
256 {
257 dE('checkbox' + pmask + fmask, -1);
258
259 if ((pmask + fmask) != (active_pmask + active_fmask))
260 {
261 document.getElementById('checkbox' + active_pmask + active_fmask).style.display = 'inline';
262 }
263 }
264
265 if (!view)
266 {
267 dE('advanced' + active_pmask + active_fmask, -1);
268 }
269
270 if (!view)
271 {
272 dE('advanced' + pmask + fmask, 1);
273 }
274 dE('options' + id, 1);
275
276 active_pmask = pmask;
277 active_fmask = fmask;
278 active_cat = cat;
279 }
280
281 /**
282 * Mark all radio buttons in one panel
283 * id = table ID container, s = status ['y'/'u'/'n']
284 */
285 function mark_options(id, s)
286 {
287 var t = document.getElementById(id);
288
289 if (!t)
290 {
291 return;
292 }
293
294 var rb = t.getElementsByTagName('input');
295
296 for (var r = 0; r < rb.length; r++)
297 {
298 if (rb[r].id.substr(rb[r].id.length-1) == s)
299 {
300 rb[r].checked = true;
301 }
302 }
303 }
304
305 function mark_one_option(id, field_name, s)
306 {
307 var t = document.getElementById(id);
308
309 if (!t)
310 {
311 return;
312 }
313
314 var rb = t.getElementsByTagName('input');
315
316 for (var r = 0; r < rb.length; r++)
317 {
318 if (rb[r].id.substr(rb[r].id.length-field_name.length-3, field_name.length) == field_name && rb[r].id.substr(rb[r].id.length-1) == s)
319 {
320 rb[r].checked = true;
321 }
322 }
323 }
324
325 /**
326 * Reset role dropdown field to Select role... if an option gets changed
327 */
328 function reset_role(id)
329 {
330 var t = document.getElementById(id);
331
332 if (!t)
333 {
334 return;
335 }
336
337 t.options[0].selected = true;
338 }
339
340 /**
341 * Load role and set options accordingly
342 */
343 function set_role_settings(role_id, target_id)
344 {
345 settings = role_options[role_id];
346
347 if (!settings)
348 {
349 return;
350 }
351
352 // Mark all options to no (unset) first...
353 mark_options(target_id, 'u');
354
355 for (var r in settings)
356 {
357 mark_one_option(target_id, r, (settings[r] == 1) ? 'y' : 'n');
358 }
359 }
360