X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=mw-config%2Fconfig.js;h=99290f445370724ca480814b8a4fc65a4244a29a;hb=0441c8194107fb48f056a8732d2f2c64cc0232e5;hp=acb9664aee1cbe01c56d225a8924cafbd3e4900a;hpb=6a3aadf097511eab605701d8d0adfe2a1d476f9d;p=lhc%2Fweb%2Fwiklou.git diff --git a/mw-config/config.js b/mw-config/config.js index acb9664aee..99290f4453 100644 --- a/mw-config/config.js +++ b/mw-config/config.js @@ -1,3 +1,4 @@ +/* global extDependencyMap */ ( function ( $ ) { $( function () { var $label, labelText; @@ -72,7 +73,9 @@ // Hide "other" textboxes by default // Should not be done in CSS for javascript disabled compatibility - $( '.enabledByOther' ).closest( '.config-block' ).hide(); + if ( !$( '#config__NamespaceType_other' ).is( ':checked' ) ) { + $( '.enabledByOther' ).closest( '.config-block' ).hide(); + } // Enable/disable "other" textboxes $( '.enableForOther' ).click( function () { @@ -86,7 +89,7 @@ } ); // Synchronize radio button label for sitename with textbox - $label = $( 'label[for=config__NamespaceType_site-name]' ); + $label = $( 'label[for="config__NamespaceType_site-name"]' ); labelText = $label.text(); $label.text( labelText.replace( '$1', '' ) ); $( '#config_wgSitename' ).on( 'keyup change', syncText ).each( syncText ); @@ -100,5 +103,49 @@ $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 ); + $( '.config-ext-input[data-name]' ).on( 'change', function () { + $( '.mw-ext-with-dependencies input' ).each( function () { + var name = this.getAttribute( 'data-name' ); + if ( areReqsSatisfied( name ) ) { + // Re-enable it! + this.disabled = false; + } else { + // Uncheck and disable the checkbox + this.checked = false; + this.disabled = true; + } + } ); + } ); } ); }( jQuery ) );