X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.special.block.js;h=255b878adf4b31070163f123c71e823b4240ffca;hb=ce54089bdf6020c4dd7dc5d1d3c54f11b7f9fefc;hp=cb54e71d08c86419a3b27c3fb3bea8d987d39243;hpb=2f5d88819799f077f4d3a3288dad104141692f20;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.special.block.js b/resources/src/mediawiki.special.block.js index cb54e71d08..255b878adf 100644 --- a/resources/src/mediawiki.special.block.js +++ b/resources/src/mediawiki.special.block.js @@ -3,23 +3,25 @@ */ ( function () { // Like OO.ui.infuse(), but if the element doesn't exist, return null instead of throwing an exception. - function infuseOrNull( elem ) { - try { - return OO.ui.infuse( elem ); - } catch ( er ) { + function infuseIfExists( $el ) { + if ( !$el.length ) { return null; } + return OO.ui.infuse( $el ); } $( function () { // This code is also loaded on the "block succeeded" page where there is no form, // so username and expiry fields might also be missing. - var blockTargetWidget = infuseOrNull( 'mw-bi-target' ), - anonOnlyField = infuseOrNull( $( '#mw-input-wpHardBlock' ).closest( '.oo-ui-fieldLayout' ) ), - enableAutoblockField = infuseOrNull( $( '#mw-input-wpAutoBlock' ).closest( '.oo-ui-fieldLayout' ) ), - hideUserField = infuseOrNull( $( '#mw-input-wpHideUser' ).closest( '.oo-ui-fieldLayout' ) ), - watchUserField = infuseOrNull( $( '#mw-input-wpWatch' ).closest( '.oo-ui-fieldLayout' ) ), - expiryWidget = infuseOrNull( 'mw-input-wpExpiry' ); + var blockTargetWidget = infuseIfExists( $( '#mw-bi-target' ) ), + anonOnlyField = infuseIfExists( $( '#mw-input-wpHardBlock' ).closest( '.oo-ui-fieldLayout' ) ), + enableAutoblockField = infuseIfExists( $( '#mw-input-wpAutoBlock' ).closest( '.oo-ui-fieldLayout' ) ), + hideUserField = infuseIfExists( $( '#mw-input-wpHideUser' ).closest( '.oo-ui-fieldLayout' ) ), + watchUserField = infuseIfExists( $( '#mw-input-wpWatch' ).closest( '.oo-ui-fieldLayout' ) ), + expiryWidget = infuseIfExists( $( '#mw-input-wpExpiry' ) ), + editingRestrictionWidget = infuseIfExists( $( '#mw-input-wpEditingRestriction' ) ), + preventTalkPageEdit = infuseIfExists( $( '#mw-input-wpDisableUTEdit' ) ), + pageRestrictionsWidget = infuseIfExists( $( '#mw-input-wpPageRestrictions' ) ); function updateBlockOptions() { var blocktarget = blockTargetWidget.getValue().trim(), @@ -30,7 +32,8 @@ expiryValue = expiryWidget.getValue(), // infinityValues are the values the SpecialBlock class accepts as infinity (sf. wfIsInfinity) infinityValues = [ 'infinite', 'indefinite', 'infinity', 'never' ], - isIndefinite = infinityValues.indexOf( expiryValue ) !== -1; + isIndefinite = infinityValues.indexOf( expiryValue ) !== -1, + editingRestrictionValue = editingRestrictionWidget ? editingRestrictionWidget.getValue() : undefined; if ( enableAutoblockField ) { enableAutoblockField.toggle( !( isNonEmptyIp ) ); @@ -44,12 +47,27 @@ if ( watchUserField ) { watchUserField.toggle( !( isIpRange && !isEmpty ) ); } + if ( pageRestrictionsWidget ) { + pageRestrictionsWidget.setDisabled( editingRestrictionValue === 'sitewide' ); + } + if ( preventTalkPageEdit ) { + // TODO: (T210475) this option is disabled for partial blocks unless + // a namespace restriction for User_talk namespace is in place. + // This needs to be updated once Namespace restrictions is available + if ( editingRestrictionValue === 'partial' ) { + preventTalkPageEdit.setDisabled( true ); + } else { + preventTalkPageEdit.setDisabled( false ); + } + } + } if ( blockTargetWidget ) { // Bind functions so they're checked whenever stuff changes blockTargetWidget.on( 'change', updateBlockOptions ); expiryWidget.on( 'change', updateBlockOptions ); + editingRestrictionWidget.on( 'change', updateBlockOptions ); // Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours) updateBlockOptions();