* add OutputPage::addScriptFile() for easier adding of JS files, similar to OutputPag...
authorBrion Vibber <brion@users.mediawiki.org>
Fri, 9 May 2008 20:18:35 +0000 (20:18 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Fri, 9 May 2008 20:18:35 +0000 (20:18 +0000)
* broke Special:Allmessages-specific JS out of wikibits.js to allmessages.js

includes/DefaultSettings.php
includes/EditPage.php
includes/OutputPage.php
includes/SpecialAllmessages.php
skins/common/allmessages.js [new file with mode: 0644]
skins/common/wikibits.js

index fecd94e..5992757 100644 (file)
@@ -1347,7 +1347,7 @@ $wgCacheEpoch = '20030516000000';
  * to ensure that client-side caches don't keep obsolete copies of global
  * styles.
  */
-$wgStyleVersion = '141';
+$wgStyleVersion = '142';
 
 
 # Server-side caching:
index 3efd454..684ed66 100644 (file)
@@ -1463,10 +1463,8 @@ END
         * of the preview button
         */
        function doLivePreviewScript() {
-               global $wgStylePath, $wgJsMimeType, $wgStyleVersion, $wgOut, $wgTitle;
-               $wgOut->addHTML( '<script type="'.$wgJsMimeType.'" src="' .
-                       htmlspecialchars( "$wgStylePath/common/preview.js?$wgStyleVersion" ) .
-                       '"></script>' . "\n" );
+               global $wgOut, $wgTitle;
+               $wgOut->addScriptFile( 'preview.js' );
                $liveAction = $wgTitle->getLocalUrl( 'action=submit&wpPreview=true&live=true' );
                return "return !lpDoPreview(" .
                        "editform.wpTextbox1.value," .
index 190042e..dbd275d 100644 (file)
@@ -90,6 +90,21 @@ class OutputPage {
                                        'href' => $wgStylePath . '/' . $style . '?' . $wgStyleVersion ) );
        }
 
+       /**
+        * Add a JavaScript file out of skins/common, or a given relative path.
+        * @param string $file filename in skins/common or complete on-server path (/foo/bar.js)
+        */
+       function addScriptFile( $file ) {
+               global $wgStylePath, $wgStyleVersion, $wgJsMimeType;
+               if( substr( $file, 0, 1 ) == '/' ) {
+                       $path = $file;
+               } else {
+                       $path =  "{$wgStylePath}/common/{$file}";
+               }
+               $encPath = htmlspecialchars( $path );
+               $this->addScript( "<script type=\"{$wgJsMimeType}\" src=\"$path?$wgStyleVersion\"></script>\n" );
+       }
+       
        /**
         * Add a self-contained script tag with the given contents
         * @param string $script JavaScript text, no <script> tags
@@ -671,8 +686,8 @@ class OutputPage {
        public function output() {
                global $wgUser, $wgOutputEncoding, $wgRequest;
                global $wgContLanguageCode, $wgDebugRedirects, $wgMimeType;
-               global $wgJsMimeType, $wgStylePath, $wgUseAjax, $wgAjaxSearch, $wgAjaxWatch;
-               global $wgServer, $wgStyleVersion, $wgEnableMWSuggest;
+               global $wgJsMimeType, $wgUseAjax, $wgAjaxSearch, $wgAjaxWatch;
+               global $wgServer, $wgEnableMWSuggest;
 
                if( $this->mDoNothing ){
                        return;
@@ -762,21 +777,21 @@ class OutputPage {
                $sk = $wgUser->getSkin();
 
                if ( $wgUseAjax ) {
-                       $this->addScript( "<script type=\"{$wgJsMimeType}\" src=\"{$wgStylePath}/common/ajax.js?$wgStyleVersion\"></script>\n" );
+                       $this->addScriptFile( 'ajax.js' );
 
                        wfRunHooks( 'AjaxAddScript', array( &$this ) );
 
                        if( $wgAjaxSearch && $wgUser->getBoolOption( 'ajaxsearch' ) ) {
-                               $this->addScript( "<script type=\"{$wgJsMimeType}\" src=\"{$wgStylePath}/common/ajaxsearch.js?$wgStyleVersion\"></script>\n" );
+                               $this->addScriptFile( 'ajaxsearch.js' );
                                $this->addScript( "<script type=\"{$wgJsMimeType}\">hookEvent(\"load\", sajax_onload);</script>\n" );
                        }
 
                        if( $wgAjaxWatch && $wgUser->isLoggedIn() ) {
-                               $this->addScript( "<script type=\"{$wgJsMimeType}\" src=\"{$wgStylePath}/common/ajaxwatch.js?$wgStyleVersion\"></script>\n" );
+                               $this->addScriptFile( 'ajaxwatch.js' );
                        }
                        
                        if ( $wgEnableMWSuggest && !$wgUser->getOption( 'disablesuggest', false ) ){
-                               $this->addScript( "<script type=\"{$wgJsMimeType}\" src=\"{$wgStylePath}/common/mwsuggest.js?$wgStyleVersion\"></script>\n" );                                  
+                               $this->addScriptFile( 'mwsuggest.js' );
                        }
                }
 
index 6aa1e90..462c326 100644 (file)
@@ -41,6 +41,7 @@ function wfSpecialAllmessages() {
        wfProfileOut( __METHOD__ . '-setup' );
 
        wfProfileIn( __METHOD__ . '-output' );
+       $wgOut->addScriptFile( 'allmessages.js' );
        if ( $ot == 'php' ) {
                $navText .= wfAllMessagesMakePhp( $messages );
                $wgOut->addHTML( 'PHP | <a href="' . $wgTitle->escapeLocalUrl( 'ot=html' ) . '">HTML</a> | ' .
diff --git a/skins/common/allmessages.js b/skins/common/allmessages.js
new file mode 100644 (file)
index 0000000..d95a142
--- /dev/null
@@ -0,0 +1,83 @@
+var allmessages_nodelist = false;
+var allmessages_modified = false;
+var allmessages_timeout = false;
+var allmessages_running = false;
+
+function allmessagesmodified() {
+       allmessages_modified = !allmessages_modified;
+       allmessagesfilter();
+}
+
+function allmessagesfilter() {
+       if ( allmessages_timeout )
+               window.clearTimeout( allmessages_timeout );
+
+       if ( !allmessages_running )
+               allmessages_timeout = window.setTimeout( 'allmessagesfilter_do();', 500 );
+}
+
+function allmessagesfilter_do() {
+       if ( !allmessages_nodelist )
+               return;
+
+       var text = document.getElementById('allmessagesinput').value;
+       var nodef = allmessages_modified;
+
+       allmessages_running = true;
+
+       for ( var name in allmessages_nodelist ) {
+               var nodes = allmessages_nodelist[name];
+               var display = ( name.indexOf( text ) == -1 ? 'none' : '' );
+
+               for ( var i = 0; i < nodes.length; i++)
+                       nodes[i].style.display =
+                               ( nodes[i].className == "def" && nodef
+                                 ? 'none' : display );
+       }
+
+       if ( text != document.getElementById('allmessagesinput').value ||
+            nodef != allmessages_modified )
+               allmessagesfilter_do();  // repeat
+
+       allmessages_running = false;
+}
+
+function allmessagesfilter_init() {
+       if ( allmessages_nodelist )
+               return;
+
+       var nodelist = new Array();
+       var templist = new Array();
+
+       var table = document.getElementById('allmessagestable');
+       if ( !table ) return;
+
+       var rows = document.getElementsByTagName('tr');
+       for ( var i = 0; i < rows.length; i++ ) {
+               var id = rows[i].getAttribute('id')
+               if ( id && id.substring(0,16) != 'sp-allmessages-r' ) continue;
+               templist[ id ] = rows[i];
+       }
+
+       var spans = table.getElementsByTagName('span');
+       for ( var i = 0; i < spans.length; i++ ) {
+               var id = spans[i].getAttribute('id')
+               if ( id && id.substring(0,17) != 'sp-allmessages-i-' ) continue;
+               if ( !spans[i].firstChild || spans[i].firstChild.nodeType != 3 ) continue;
+
+               var nodes = new Array();
+               var row1 = templist[ id.replace('i', 'r1') ];
+               var row2 = templist[ id.replace('i', 'r2') ];
+
+               if ( row1 ) nodes[nodes.length] = row1;
+               if ( row2 ) nodes[nodes.length] = row2;
+               nodelist[ spans[i].firstChild.nodeValue ] = nodes;
+       }
+
+       var k = document.getElementById('allmessagesfilter');
+       if (k) { k.style.display = ''; }
+
+       allmessages_nodelist = nodelist;
+}
+
+hookEvent( "load", allmessagesfilter_init );
index b3b6c40..3546545 100644 (file)
@@ -798,90 +798,6 @@ function scrollEditBox() {
 }
 hookEvent( 'load', scrollEditBox );
 
-var allmessages_nodelist = false;
-var allmessages_modified = false;
-var allmessages_timeout = false;
-var allmessages_running = false;
-
-function allmessagesmodified() {
-       allmessages_modified = !allmessages_modified;
-       allmessagesfilter();
-}
-
-function allmessagesfilter() {
-       if ( allmessages_timeout )
-               window.clearTimeout( allmessages_timeout );
-
-       if ( !allmessages_running )
-               allmessages_timeout = window.setTimeout( 'allmessagesfilter_do();', 500 );
-}
-
-function allmessagesfilter_do() {
-       if ( !allmessages_nodelist )
-               return;
-
-       var text = document.getElementById('allmessagesinput').value;
-       var nodef = allmessages_modified;
-
-       allmessages_running = true;
-
-       for ( var name in allmessages_nodelist ) {
-               var nodes = allmessages_nodelist[name];
-               var display = ( name.indexOf( text ) == -1 ? 'none' : '' );
-
-               for ( var i = 0; i < nodes.length; i++)
-                       nodes[i].style.display =
-                               ( nodes[i].className == "def" && nodef
-                                 ? 'none' : display );
-       }
-
-       if ( text != document.getElementById('allmessagesinput').value ||
-            nodef != allmessages_modified )
-               allmessagesfilter_do();  // repeat
-
-       allmessages_running = false;
-}
-
-function allmessagesfilter_init() {
-       if ( allmessages_nodelist )
-               return;
-
-       var nodelist = new Array();
-       var templist = new Array();
-
-       var table = document.getElementById('allmessagestable');
-       if ( !table ) return;
-
-       var rows = document.getElementsByTagName('tr');
-       for ( var i = 0; i < rows.length; i++ ) {
-               var id = rows[i].getAttribute('id')
-               if ( id && id.substring(0,16) != 'sp-allmessages-r' ) continue;
-               templist[ id ] = rows[i];
-       }
-
-       var spans = table.getElementsByTagName('span');
-       for ( var i = 0; i < spans.length; i++ ) {
-               var id = spans[i].getAttribute('id')
-               if ( id && id.substring(0,17) != 'sp-allmessages-i-' ) continue;
-               if ( !spans[i].firstChild || spans[i].firstChild.nodeType != 3 ) continue;
-
-               var nodes = new Array();
-               var row1 = templist[ id.replace('i', 'r1') ];
-               var row2 = templist[ id.replace('i', 'r2') ];
-
-               if ( row1 ) nodes[nodes.length] = row1;
-               if ( row2 ) nodes[nodes.length] = row2;
-               nodelist[ spans[i].firstChild.nodeValue ] = nodes;
-       }
-
-       var k = document.getElementById('allmessagesfilter');
-       if (k) { k.style.display = ''; }
-
-       allmessages_nodelist = nodelist;
-}
-
-hookEvent( "load", allmessagesfilter_init );
-
 /*
        Written by Jonathan Snook, http://www.snook.ca/jonathan
        Add-ons by Robert Nyman, http://www.robertnyman.com