diff options
Diffstat (limited to 'phpBB/adm/style/permissions.js')
-rw-r--r-- | phpBB/adm/style/permissions.js | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/phpBB/adm/style/permissions.js b/phpBB/adm/style/permissions.js new file mode 100644 index 0000000000..adc8995c23 --- /dev/null +++ b/phpBB/adm/style/permissions.js @@ -0,0 +1,359 @@ +/** +* Hide and show all checkboxes +* status = true (show boxes), false (hide boxes) +*/ +function display_checkboxes(status) +{ + var form = document.getElementById('set-permissions'); + var cb = document.getElementsByTagName('input'); + var display; + + //show + if (status) + { + display = 'inline'; + } + //hide + else + { + display = 'none'; + } + + for (var i = 0; i < cb.length; i++ ) + { + if (cb[i].className == 'permissions-checkbox') + { + cb[i].style.display = display; + } + + } + +} + + +/** +* Change opacity of element +* e = element +* value = 0 (hidden) till 10 (fully visible) +*/ +function set_opacity(e, value) { + e.style.opacity = value/10; + + //IE opacity currently turned off, because of its astronomical stupidity + //e.style.filter = 'alpha(opacity=' + value*10 + ')'; +} + +/** +* Reset the opacity and checkboxes +* block_id = id of the element that needs to be toggled +*/ +function toggle_opacity(block_id) { + var cb = document.getElementById('checkbox' + block_id); + var fs = document.getElementById('perm' + block_id); + + if (cb.checked) + { + set_opacity(fs, 5); + } + else + { + set_opacity(fs, 10); + } +} + +/** +* Reset the opacity and checkboxes +* value = 0 (checked) and 1 (unchecked) +* except_id = id of the element not to hide +*/ +function reset_opacity(status, except_id) { + var perm = document.getElementById('set-permissions'); + var fs = perm.getElementsByTagName('fieldset'); + var opacity = 5; + + if (status) + { + opacity = 10; + } + + for (var i = 0; i < fs.length; i++ ) + { + if (fs[i].className != 'quick') + { + set_opacity(fs[i], opacity); + } + } + + if (typeof(except_id) != 'undefined') + { + set_opacity(document.getElementById('perm' + except_id), 10); + } + + //reset checkboxes too + marklist('set-permissions', 'inherit', !status); +} + + +/** +* Check whether we have a full radiobutton row of true +* index = offset for the row of inputs (0 == first row, 1 == second, 2 == third), +* rb = array of radiobuttons +*/ +function get_radio_status(index, rb) +{ + for (var i = index; i < rb.length; i = i + 3 ) + { + if (rb[i].checked != true) + { + if (i > index) + { + //at least one is true, but not all (custom) + return 2; + } + //first one is not true + return 0; + } + } + + // all radiobuttons true + return 1; +} + +/** +* Set tab colours +* id = panel the tab needs to be set for, +* init = initialising on open, +* quick = If no calculation needed, this contains the colour +*/ +function set_colours(id, init, quick) +{ + var table = document.getElementById('table' + id); + var tab = document.getElementById('tab' + id); + + if (typeof(quick) != 'undefined') + { + tab.className = 'permissions-preset-' + quick + ' activetab'; + return; + } + + var rb = table.getElementsByTagName('input'); + var colour = 'custom'; + + var status = get_radio_status(0, rb); + + if (status == 1) + { + colour = 'yes'; + } + else if (status == 0) + { + // We move on to No + status = get_radio_status(1, rb); + + if (status == 1) + { + colour = 'no'; + } + else if (status == 0) + { + // We move on to Never + status = get_radio_status(2, rb); + + if (status == 1) + { + colour = 'never'; + } + } + } + + if (init) + { + tab.className = 'permissions-preset-' + colour; + } + else + { + tab.className = 'permissions-preset-' + colour + ' activetab'; + } +} + +/** +* Initialise advanced tab colours on first load +* block_id = block that is opened +*/ +function init_colours(block_id) +{ + var block = document.getElementById('advanced' + block_id); + var panels = block.getElementsByTagName('div'); + var tab = document.getElementById('tab' + id); + + for (var i = 0; i < panels.length; i++) + { + if(panels[i].className == 'permissions-panel') + { + set_colours(panels[i].id.replace(/options/, ''), true); + } + } + + tab.className = tab.className + ' activetab'; +} + +/** +* Show/hide option panels +* value = suffix for ID to show +* adv = we are opening advanced permissions +* view = called from view permissions +*/ +function swap_options(pmask, fmask, cat, adv, view) +{ + id = pmask + fmask + cat; + active_option = active_pmask + active_fmask + active_cat; + + var old_tab = document.getElementById('tab' + active_option); + var new_tab = document.getElementById('tab' + id); + var adv_block = document.getElementById('advanced' + pmask + fmask); + + if (adv_block.style.display == 'block' && adv == true) + { + dE('advanced' + pmask + fmask, -1); + reset_opacity(1); + display_checkboxes(false); + return; + } + + // no need to set anything if we are clicking on the same tab again + if (new_tab == old_tab && !adv) + { + return; + } + + // init colours + if (adv && (pmask + fmask) != (active_pmask + active_fmask)) + { + init_colours(pmask + fmask); + display_checkboxes(true); + reset_opacity(1); + } + else if (adv) + { + //Checkbox might have been clicked, but we need full visibility + display_checkboxes(true); + reset_opacity(1); + } + + // set active tab + old_tab.className = old_tab.className.replace(/\ activetab/g, ''); + new_tab.className = new_tab.className + ' activetab'; + + if (id == active_option && adv != true) + { + return; + } + + dE('options' + active_option, -1); + + //hiding and showing the checkbox + if (document.getElementById('checkbox' + active_pmask + active_fmask)) + { + dE('checkbox' + pmask + fmask, -1); + + if ((pmask + fmask) != (active_pmask + active_fmask)) + { + document.getElementById('checkbox' + active_pmask + active_fmask).style.display = 'inline'; + } + } + + if (!view) + { + dE('advanced' + active_pmask + active_fmask, -1); + } + + if (!view) + { + dE('advanced' + pmask + fmask, 1); + } + dE('options' + id, 1); + + active_pmask = pmask; + active_fmask = fmask; + active_cat = cat; +} + +/** +* Mark all radio buttons in one panel +* id = table ID container, s = status ['y'/'u'/'n'] +*/ +function mark_options(id, s) +{ + var t = document.getElementById(id); + + if (!t) + { + return; + } + + var rb = t.getElementsByTagName('input'); + + for (var r = 0; r < rb.length; r++) + { + if (rb[r].id.substr(rb[r].id.length-1) == s) + { + rb[r].checked = true; + } + } +} + +function mark_one_option(id, field_name, s) +{ + var t = document.getElementById(id); + + if (!t) + { + return; + } + + var rb = t.getElementsByTagName('input'); + + for (var r = 0; r < rb.length; r++) + { + 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) + { + rb[r].checked = true; + } + } +} + +/** +* Reset role dropdown field to Select role... if an option gets changed +*/ +function reset_role(id) +{ + var t = document.getElementById(id); + + if (!t) + { + return; + } + + t.options[0].selected = true; +} + +/** +* Load role and set options accordingly +*/ +function set_role_settings(role_id, target_id) +{ + settings = role_options[role_id]; + + if (!settings) + { + return; + } + + // Mark all options to no (unset) first... + mark_options(target_id, 'u'); + + for (var r in settings) + { + mark_one_option(target_id, r, (settings[r] == 1) ? 'y' : 'n'); + } +} |