+++ /dev/null
-/**
- * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
- * on the protection form
- *
- * @param String tableId Identifier of the table containing UI bits
- * @param String labelText Text to use for the checkbox label
- */
-function protectInitialize( tableId, labelText ) {
- if( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) )
- return false;
-
- 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 col = document.createElement( 'td' );
- row.appendChild( col );
-
- var check = document.createElement( 'input' );
- check.id = 'mwProtectUnchained';
- check.type = 'checkbox';
- col.appendChild( check );
- addClickHandler( check, protectChainUpdate );
-
- col.appendChild( document.createTextNode( ' ' ) );
- var label = document.createElement( 'label' );
- label.setAttribute( 'for', 'mwProtectUnchained' );
- label.appendChild( document.createTextNode( labelText ) );
- col.appendChild( label );
-
- check.checked = !protectAllMatch();
- protectEnable( check.checked );
-
- allowCascade();
-
- return true;
-}
-
-function allowCascade() {
- var lists = protectSelectors();
- for( var i = 0; i < lists.length; i++ ) {
- if( lists[i].selectedIndex > -1 ) {
- var items = lists[i].getElementsByTagName( 'option' );
- var selected = items[ lists[i].selectedIndex ].value;
- if( wgCascadeableLevels.indexOf( selected ) == -1 ) {
- document.getElementById( 'mwProtect-cascade' ).checked = false;
- document.getElementById( 'mwProtect-cascade' ).disabled = true;
- return false;
- }
- }
- }
- document.getElementById( 'mwProtect-cascade' ).disabled = false;
- return true;
-}
-
-/**
- * When protection levels are locked together, update the rest
- * when one action's level changes
- *
- * @param Element source Level selector that changed
- */
-function protectLevelsUpdate(source) {
- if( !protectUnchained() )
- protectUpdateAll( source.selectedIndex );
- allowCascade();
-}
-
-/**
- * Update chain status and enable/disable various bits of the UI
- * when the user changes the "unlock move permissions" checkbox
- */
-function protectChainUpdate() {
- if( protectUnchained() ) {
- protectEnable( true );
- } else {
- protectChain();
- protectEnable( false );
- }
- allowCascade();
-}
-
-/**
- * Are all actions protected at the same level?
- *
- * @return boolean
- */
-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;
-}
-
-/**
- * Is protection chaining on or off?
- *
- * @return bool
- */
-function protectUnchained() {
- var unchain = document.getElementById( 'mwProtectUnchained' );
- return unchain
- ? unchain.checked
- : true; // No control, so we need to let the user set both levels
-}
-
-/**
- * Find the highest-protected action and set all others to that level
- */
-function protectChain() {
- var maxIndex = -1;
- protectForSelectors(function(set) {
- if (set.selectedIndex > maxIndex) {
- maxIndex = set.selectedIndex;
- }
- });
- protectUpdateAll(maxIndex);
-}
-
-/**
- * Protect all actions at the specified level
- *
- * @param int index Protection level
- */
-function protectUpdateAll(index) {
- protectForSelectors(function(set) {
- if (set.selectedIndex != index) {
- set.selectedIndex = index;
- }
- });
-}
-
-/**
- * Apply a callback to each protection selector
- *
- * @param callable func Callback function
- */
-function protectForSelectors(func) {
- var selectors = protectSelectors();
- for (var i = 0; i < selectors.length; i++) {
- func(selectors[i]);
- }
-}
-
-/**
- * Get a list of all protection selectors on the page
- *
- * @return Array
- */
-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;
-}
-
-/**
- * Enable/disable protection selectors
- *
- * @param boolean val Enable?
- */
-function protectEnable(val) {
- // fixme
- var first = true;
- protectForSelectors(function(set) {
- if (first) {
- first = false;
- } else {
- set.disabled = !val;
- set.style.visible = val ? "visible" : "hidden";
- }
- });
-}