( function ( mw, $ ) { var ProtectionForm, reasonCodePointLimit = mw.config.get( 'wgCommentCodePointLimit' ), reasonByteLimit = mw.config.get( 'wgCommentByteLimit' ); ProtectionForm = window.ProtectionForm = { /** * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox) * on the protection form * * @return {boolean} */ init: function () { var $cell = $( '' ), $row = $( '' ).append( $cell ); if ( !$( '#mwProtectSet' ).length ) { return false; } if ( mw.config.get( 'wgCascadeableLevels' ) !== undefined ) { $( 'form#mw-Protect-Form' ).submit( this.toggleUnchainedInputs.bind( ProtectionForm, true ) ); } this.getExpirySelectors().each( function () { $( this ).change( ProtectionForm.updateExpiryList.bind( ProtectionForm, this ) ); } ); this.getExpiryInputs().each( function () { $( this ).on( 'keyup change', ProtectionForm.updateExpiry.bind( ProtectionForm, this ) ); } ); this.getLevelSelectors().each( function () { $( this ).change( ProtectionForm.updateLevels.bind( ProtectionForm, this ) ); } ); $( '#mwProtectSet > tbody > tr:first' ).after( $row ); // If there is only one protection type, there is nothing to chain if ( $( '[id ^= mw-protect-table-]' ).length > 1 ) { $cell.append( $( '' ) .attr( { id: 'mwProtectUnchained', type: 'checkbox' } ) .click( this.onChainClick.bind( this ) ) .prop( 'checked', !this.areAllTypesMatching() ), document.createTextNode( ' ' ), $( '