Moved some of the functionality from mediawiki.legacy.prefs into mediawiki.specials...
authorTrevor Parscal <tparscal@users.mediawiki.org>
Mon, 4 Oct 2010 22:16:18 +0000 (22:16 +0000)
committerTrevor Parscal <tparscal@users.mediawiki.org>
Mon, 4 Oct 2010 22:16:18 +0000 (22:16 +0000)
includes/specials/SpecialPreferences.php
resources/Resources.php
resources/mediawiki/mediawiki.specials.preferences.js [new file with mode: 0644]
skins/common/prefs.js

index 4cd54c0..72cda27 100644 (file)
@@ -51,8 +51,9 @@ class SpecialPreferences extends SpecialPage {
                        $this->showResetForm();
                        return;
                }
-               
+
                $wgOut->addModules( 'mediawiki.legacy.prefs' );
+               $wgOut->addModuleScripts( 'mediawiki.specials.preferences' );
 
                if ( $wgRequest->getCheck( 'success' ) ) {
                        $wgOut->wrapWikiMsg(
index 09d5e94..b86af7a 100644 (file)
@@ -304,6 +304,9 @@ return array(
                'scripts' => 'resources/mediawiki/mediawiki.js',
                'debugScripts' => 'resources/mediawiki/mediawiki.log.js',
        ) ),
+       'mediawiki.specials.preferences' => new ResourceLoaderFileModule( array(
+               'scripts' => 'resources/mediawiki/mediawiki.specials.preferences.js',
+       ) ),
        
        /* MediaWiki Legacy */
        
diff --git a/resources/mediawiki/mediawiki.specials.preferences.js b/resources/mediawiki/mediawiki.specials.preferences.js
new file mode 100644 (file)
index 0000000..9122a11
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * JavaScript for Special:Preferences
+ */
+
+$( '#prefsubmit' ).attr( 'id', 'prefcontrol' ).end()
+$( '#preferences' )
+       .addClass( 'jsprefs' )
+       .before( $( '<ul id="preftoc"></ul>' ) )
+       .find( '> fieldset' )
+       .hide()
+       .addClass( 'prefsection' )
+       .find( '> legend' )
+       .addClass( 'mainLegend' )
+       .each( function( i ) {
+               $(this).parent().attr( 'id', 'prefsection-' + i );
+               if ( i === 0 ) {
+                       $(this).parent().show();
+               }
+               $( '#preftoc' ).append(
+                       $( '<li></li>' )
+                               .addClass( i === 0 ? 'selected' : null )
+                               .append(
+                                       $( '<a></a>')
+                                               .text( $(this).text() )
+                                               .attr( 'href', '#prefsection-' + i )
+                                               .mousedown( function( e ) {
+                                                       $(this).parent().parent().find( 'li' ).removeClass( 'selected' );
+                                                       $(this).parent().addClass( 'selected' );
+                                                       e.preventDefault();
+                                                       return false;
+                                               } )
+                                               .click( function( e ) {
+                                                       $( '#preferences > fieldset' ).hide();
+                                                       $( '#prefsection-' + i ).show();
+                                                       e.preventDefault();
+                                                       return false;
+                                               } )
+                               )
+               );
+       } );
index b0ed97c..5de9bae 100644 (file)
@@ -1,81 +1,3 @@
-// generate toc from prefs form, fold sections
-// XXX: needs testing on IE/Mac and safari
-// more comments to follow
-window.tabbedprefs = function() {
-       var prefform = document.getElementById( 'preferences' );
-       if ( !prefform || !document.createElement ) {
-               return;
-       }
-       if ( prefform.nodeName.toLowerCase() == 'a' ) {
-               return; // Occasional IE problem
-       }
-       prefform.className = prefform.className + 'jsprefs';
-       var sections = [];
-       var children = prefform.childNodes;
-       var seci = 0;
-       for ( var i = 0; i < children.length; i++ ) {
-               if ( children[i].nodeName.toLowerCase() == 'fieldset' ) {
-                       children[i].id = 'prefsection-' + seci;
-                       children[i].className = 'prefsection';
-                       if ( is_opera ) {
-                               children[i].className = 'prefsection operaprefsection';
-                       }
-                       var legends = children[i].getElementsByTagName('legend');
-                       sections[seci] = {};
-                       if ( legends[0] ) {
-                               legends[0].className = 'mainLegend';
-                       }
-                       if ( legends[0] && legends[0].firstChild.nodeValue ) {
-                               sections[seci].text = legends[0].firstChild.nodeValue;
-                       } else {
-                               sections[seci].text = '# ' + seci;
-                       }
-                       sections[seci].secid = children[i].id;
-                       seci++;
-                       if ( sections.length != 1 ) {
-                               children[i].style.display = 'none';
-                       } else {
-                               var selectedid = children[i].id;
-                       }
-               }
-       }
-       var toc = document.createElement( 'ul' );
-       toc.id = 'preftoc';
-       toc.selectedid = selectedid;
-       for ( i = 0; i < sections.length; i++ ) {
-               var li = document.createElement( 'li' );
-               if ( i === 0 ) {
-                       li.className = 'selected';
-               }
-               var a = document.createElement( 'a' );
-               a.href = '#' + sections[i].secid;
-               a.onmousedown = a.onclick = uncoversection;
-               a.appendChild( document.createTextNode( sections[i].text ) );
-               a.secid = sections[i].secid;
-               li.appendChild( a );
-               toc.appendChild( li );
-       }
-       prefform.parentNode.insertBefore( toc, prefform.parentNode.childNodes[0] );
-       document.getElementById( 'prefsubmit' ).id = 'prefcontrol';
-}
-
-window.uncoversection = function() {
-       var oldsecid = this.parentNode.parentNode.selectedid;
-       var newsec = document.getElementById( this.secid );
-       if ( oldsecid != this.secid ) {
-               var ul = document.getElementById( 'preftoc' );
-               document.getElementById( oldsecid ).style.display = 'none';
-               newsec.style.display = 'block';
-               ul.selectedid = this.secid;
-               var lis = ul.getElementsByTagName( 'li' );
-               for ( var i = 0; i< lis.length; i++ ) {
-                       lis[i].className = '';
-               }
-               this.parentNode.className = 'selected';
-       }
-       return false;
-}
-
 // Timezone stuff
 // tz in format [+-]HHMM
 window.checkTimezone = function( tz, msg ) {
@@ -214,4 +136,3 @@ window.updateTimezoneSelection = function( force_offset ) {
 }
 
 addOnloadHook( timezoneSetup );
-addOnloadHook( tabbedprefs );