diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 18:12:39 +0000 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2006-10-11 18:12:39 +0000 |
commit | 183851b06bd6c52f3cae5375f433da720d410447 (patch) | |
tree | a477257decbf3360127f6739c2f9d0ec57a03d39 /skins/common/protect.js |
MediaWiki 1.7.1 wiederhergestellt
Diffstat (limited to 'skins/common/protect.js')
-rw-r--r-- | skins/common/protect.js | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/skins/common/protect.js b/skins/common/protect.js new file mode 100644 index 00000000..a144e5eb --- /dev/null +++ b/skins/common/protect.js @@ -0,0 +1,126 @@ +function protectInitialize(tableId, labelText) { + if (document.createTextNode) { + var box = document.getElementById(tableId); + if (!box) + return false; + + var tbody = box.getElementsByTagName('tbody')[0]; + var row = document.createElement('tr'); + tbody.appendChild(row); + + row.appendChild(document.createElement('td')); + var col2 = document.createElement('td'); + row.appendChild(col2); + + var check = document.createElement('input'); + check.id = "mwProtectUnchained"; + check.type = "checkbox"; + check.onclick = protectChainUpdate; + col2.appendChild(check); + + var label = document.createElement('label'); + label.setAttribute("for", "mwProtectUnchained"); + label.appendChild(document.createTextNode(labelText)); + col2.appendChild(label); + + if (protectAllMatch()) { + check.checked = false; + protectEnable(false); + } else { + check.checked = true; + protectEnable(true); + } + + return true; + } + return false; +} + +function protectLevelsUpdate(source) { + if (!protectUnchained()) { + protectUpdateAll(source.selectedIndex); + } +} + +function protectChainUpdate() { + if (protectUnchained()) { + protectEnable(true); + } else { + protectChain(); + protectEnable(false); + } +} + + +function protectAllMatch() { + var values = new Array(); + protectForSelectors(function(set) { + values[values.length] = set.selectedIndex; + }); + for (var i = 1; i < values.length; i++) { + if (values[i] != values[0]) { + return false; + } + } + return true; +} + +function protectUnchained() { + var unchain = document.getElementById("mwProtectUnchained"); + if (!unchain) { + alert("This shouldn't happen"); + return false; + } + return unchain.checked; +} + +function protectChain() { + // Find the highest-protected action and bump them all to this level + var maxIndex = -1; + protectForSelectors(function(set) { + if (set.selectedIndex > maxIndex) { + maxIndex = set.selectedIndex; + } + }); + protectUpdateAll(maxIndex); +} + +function protectUpdateAll(index) { + protectForSelectors(function(set) { + if (set.selectedIndex != index) { + set.selectedIndex = index; + } + }); +} + +function protectForSelectors(func) { + var selectors = protectSelectors(); + for (var i = 0; i < selectors.length; i++) { + func(selectors[i]); + } +} + +function protectSelectors() { + var all = document.getElementsByTagName("select"); + var ours = new Array(); + for (var i = 0; i < all.length; i++) { + var set = all[i]; + if (set.id.match(/^mwProtect-level-/)) { + ours[ours.length] = set; + } + } + return ours; +} + +function protectEnable(val) { + // fixme + var first = true; + protectForSelectors(function(set) { + if (first) { + first = false; + } else { + set.disabled = !val; + set.style.visible = val ? "visible" : "hidden"; + } + }); +} |