+/* global extDependencyMap */
( function ( $ ) {
$( function () {
var $label, labelText;
var $textbox = $( document.getElementById( $( this ).attr( 'rel' ) ) );
// FIXME: Ugh, this is ugly
if ( $( this ).val() === 'other' ) {
- $textbox.removeProp( 'readonly' ).closest( '.config-block' ).slideDown( 'fast' );
+ $textbox.prop( 'readonly', false ).closest( '.config-block' ).slideDown( 'fast' );
} else {
$textbox.prop( 'readonly', true ).closest( '.config-block' ).slideUp( 'fast' );
}
$memc.hide( 'slow' );
}
} );
+
+ function areReqsSatisfied( name ) {
+ var i, ext, skin, node;
+ if ( !extDependencyMap[ name ] ) {
+ return true;
+ }
+
+ if ( extDependencyMap[ name ].extensions ) {
+ for ( i in extDependencyMap[ name ].extensions ) {
+ ext = extDependencyMap[ name ].extensions[ i ];
+ node = document.getElementById( 'config_ext-' + ext );
+ if ( !node || !node.checked ) {
+ return false;
+ }
+ }
+ }
+ if ( extDependencyMap[ name ].skins ) {
+ for ( i in extDependencyMap[ name ].skins ) {
+ skin = extDependencyMap[ name ].skins[ i ];
+ node = document.getElementById( 'config_skin-' + skin );
+ if ( !node || !node.checked ) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ // Disable checkboxes if the extension has dependencies
+ $( '.mw-ext-with-dependencies input' ).prop( 'disabled', true );
+ $( 'input[data-name]' ).change( function () {
+ $( '.mw-ext-with-dependencies input' ).each( function () {
+ var $this = $( this ),
+ name = $this.data( 'name' );
+ if ( areReqsSatisfied( name ) ) {
+ // Un-disable it!
+ $this.prop( 'disabled', false );
+ } else {
+ // Disable the checkbox, and uncheck it if it is checked
+ $this.prop( 'disabled', true );
+ if ( $this.prop( 'checked' ) ) {
+ $this.prop( 'checked', false );
+ }
+ }
+ } );
+ } );
} );
}( jQuery ) );