Handle extension dependencies in the installer
[lhc/web/wiklou.git] / mw-config / config.js
index acb9664..ab57b7b 100644 (file)
@@ -1,3 +1,4 @@
+/* global extDependencyMap */
 ( function ( $ ) {
        $( function () {
                var $label, labelText;
                                $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 ) );