Keep IEFixes separate, load conditionally in JS
authorAryeh Gregor <simetrical@users.mediawiki.org>
Wed, 13 Jan 2010 15:47:36 +0000 (15:47 +0000)
committerAryeh Gregor <simetrical@users.mediawiki.org>
Wed, 13 Jan 2010 15:47:36 +0000 (15:47 +0000)
Per Code Review suggestion by Bryan on r60994.  Saves about a kilobyte
for browsers other than IE<7 after gzipping.

skins/common/IEFixes.js [new file with mode: 0644]
skins/common/wikibits.js

diff --git a/skins/common/IEFixes.js b/skins/common/IEFixes.js
new file mode 100644 (file)
index 0000000..19f8031
--- /dev/null
@@ -0,0 +1,127 @@
+// IE fixes javascript
+
+var isMSIE55 = (window.showModalDialog && window.clipboardData && window.createPopup);
+var doneIETransform;
+var doneIEAlphaFix;
+
+if (document.attachEvent)
+  document.attachEvent('onreadystatechange', hookit);
+
+function hookit() {
+    if (!doneIETransform && document.getElementById && document.getElementById('bodyContent')) {
+        doneIETransform = true;
+        relativeforfloats();
+        fixalpha();
+    }
+}
+
+// png alpha transparency fixes
+function fixalpha( logoId ) {
+    // bg
+    if (isMSIE55 && !doneIEAlphaFix)
+    {
+        var plogo = document.getElementById( logoId || 'p-logo' );
+        if (!plogo) return;
+
+        var logoa = plogo.getElementsByTagName('a')[0];
+        if (!logoa) return;
+
+        var bg = logoa.currentStyle.backgroundImage;
+        var imageUrl = bg.substring(5, bg.length-2);
+
+        doneIEAlphaFix = true;
+
+        if (imageUrl.substr(imageUrl.length-4).toLowerCase() == '.png') {
+            var logospan = logoa.appendChild(document.createElement('span'));
+
+            logoa.style.backgroundImage = 'none';
+            logospan.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + imageUrl + ')';
+            logospan.style.height = '100%';
+            logospan.style.position = 'absolute';
+            logospan.style.width = logoa.currentStyle.width;
+            logospan.style.cursor = 'hand';
+            // Center image with hack for IE5.5
+            if (document.documentElement.dir == "rtl")
+            {
+              logospan.style.right = '50%';
+              logospan.style.setExpression('marginRight', '"-" + (this.offsetWidth / 2) + "px"');
+            }
+            else
+            {
+              logospan.style.left = '50%';
+              logospan.style.setExpression('marginLeft', '"-" + (this.offsetWidth / 2) + "px"');
+            }
+            logospan.style.top = '50%';
+            logospan.style.setExpression('marginTop', '"-" + (this.offsetHeight / 2) + "px"');
+
+            var linkFix = logoa.appendChild(logoa.cloneNode());
+            linkFix.style.position = 'absolute';
+            linkFix.style.height = '100%';
+            linkFix.style.width = '100%';
+        }
+    }
+}
+
+// fix ie6 disappering float bug
+function relativeforfloats() {
+    var bc = document.getElementById('bodyContent');
+    if (bc) {
+        var tables = bc.getElementsByTagName('table');
+        var divs = bc.getElementsByTagName('div');
+    }
+    setrelative(tables);
+    setrelative(divs);
+}
+function setrelative (nodes) {
+    var i = 0;
+    while (i < nodes.length) {
+        if(((nodes[i].style.float && nodes[i].style.float != ('none') ||
+        (nodes[i].align && nodes[i].align != ('none'))) &&
+        (!nodes[i].style.position || nodes[i].style.position != 'relative')))
+        {
+            nodes[i].style.position = 'relative';
+        }
+        i++;
+    }
+}
+
+
+// Expand links for printing
+
+String.prototype.hasClass = function(classWanted)
+{
+    var classArr = this.split(/\s/);
+    for (var i=0; i<classArr.length; i++)
+      if (classArr[i].toLowerCase() == classWanted.toLowerCase()) return true;
+    return false;
+}
+
+var expandedURLs;
+
+onbeforeprint = function() {
+    expandedURLs = [];
+
+    var contentEl = document.getElementById("content");
+
+    if (contentEl)
+    {
+      var allLinks = contentEl.getElementsByTagName("a");
+
+      for (var i=0; i < allLinks.length; i++) {
+          if (allLinks[i].className.hasClass("external") && !allLinks[i].className.hasClass("free")) {
+              var expandedLink = document.createElement("span");
+              var expandedText = document.createTextNode(" (" + allLinks[i].href + ")");
+              expandedLink.appendChild(expandedText);
+              allLinks[i].parentNode.insertBefore(expandedLink, allLinks[i].nextSibling);
+              expandedURLs[i] = expandedLink;
+          }
+      }
+   }
+}
+
+onafterprint = function()
+{
+    for (var i=0; i < expandedURLs.length; i++)
+        if (expandedURLs[i])
+            expandedURLs[i].removeNode(true);
+}
index 4434315..dbd85e4 100644 (file)
@@ -1028,130 +1028,5 @@ function removeHandler( element, remove, handler ) {
 hookEvent( 'load', runOnloadHook );
 
 if ( ie6_bugs ) {
-       var isMSIE55 = ( window.showModalDialog && window.clipboardData && window.createPopup );
-       var doneIETransform;
-       var doneIEAlphaFix;
-
-       if ( document.attachEvent ) {
-               document.attachEvent( 'onreadystatechange', hookit );
-       }
-
-       function hookit() {
-               if ( !doneIETransform && document.getElementById && document.getElementById( 'bodyContent' ) ) {
-                       doneIETransform = true;
-                       relativeforfloats();
-                       fixalpha();
-               }
-       }
-
-       // png alpha transparency fixes
-       function fixalpha( logoId ) {
-               // bg
-               if ( isMSIE55 && !doneIEAlphaFix ) {
-                       var plogo = document.getElementById( logoId || 'p-logo' );
-                       if ( !plogo ) {
-                               return;
-                       }
-
-                       var logoa = plogo.getElementsByTagName('a')[0];
-                       if ( !logoa ) {
-                               return;
-                       }
-
-                       var bg = logoa.currentStyle.backgroundImage;
-                       var imageUrl = bg.substring( 5, bg.length - 2 );
-
-                       doneIEAlphaFix = true;
-
-                       if ( imageUrl.substr( imageUrl.length - 4 ).toLowerCase() == '.png' ) {
-                               var logospan = logoa.appendChild( document.createElement( 'span' ) );
-
-                               logoa.style.backgroundImage = 'none';
-                               logospan.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + imageUrl + ')';
-                               logospan.style.height = '100%';
-                               logospan.style.position = 'absolute';
-                               logospan.style.width = logoa.currentStyle.width;
-                               logospan.style.cursor = 'hand';
-                               // Center image with hack for IE5.5
-                               if ( document.documentElement.dir == 'rtl' ) {
-                                       logospan.style.right = '50%';
-                                       logospan.style.setExpression( 'marginRight', '"-" + (this.offsetWidth / 2) + "px"' );
-                               } else {
-                                       logospan.style.left = '50%';
-                                       logospan.style.setExpression( 'marginLeft', '"-" + (this.offsetWidth / 2) + "px"' );
-                               }
-                               logospan.style.top = '50%';
-                               logospan.style.setExpression( 'marginTop', '"-" + (this.offsetHeight / 2) + "px"' );
-
-                               var linkFix = logoa.appendChild( logoa.cloneNode() );
-                               linkFix.style.position = 'absolute';
-                               linkFix.style.height = '100%';
-                               linkFix.style.width = '100%';
-                       }
-               }
-       }
-
-       // fix ie6 disappering float bug
-       function relativeforfloats() {
-               var bc = document.getElementById( 'bodyContent' );
-               if ( bc ) {
-                       var tables = bc.getElementsByTagName( 'table' );
-                       var divs = bc.getElementsByTagName( 'div' );
-               }
-               setrelative( tables );
-               setrelative( divs );
-       }
-       function setrelative( nodes ) {
-               var i = 0;
-               while ( i < nodes.length ) {
-                       if( ( ( nodes[i].style.float && nodes[i].style.float != ( 'none' ) ||
-                               ( nodes[i].align && nodes[i].align != ( 'none' ) ) ) &&
-                               ( !nodes[i].style.position || nodes[i].style.position != 'relative' ) ) )
-                       {
-                               nodes[i].style.position = 'relative';
-                       }
-                       i++;
-               }
-       }
-
-       // Expand links for printing
-       String.prototype.hasClass = function( classWanted ) {
-               var classArr = this.split(/\s/);
-               for ( var i = 0; i < classArr.length; i++ ) {
-                       if ( classArr[i].toLowerCase() == classWanted.toLowerCase() ) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       var expandedURLs;
-
-       onbeforeprint = function() {
-               expandedURLs = [];
-
-               var contentEl = document.getElementById( 'content' );
-
-               if ( contentEl ) {
-                       var allLinks = contentEl.getElementsByTagName( 'a' );
-
-                       for ( var i = 0; i < allLinks.length; i++ ) {
-                               if ( allLinks[i].className.hasClass( 'external' ) && !allLinks[i].className.hasClass( 'free' ) ) {
-                                       var expandedLink = document.createElement( 'span' );
-                                       var expandedText = document.createTextNode( ' (' + allLinks[i].href + ')' );
-                                       expandedLink.appendChild( expandedText );
-                                       allLinks[i].parentNode.insertBefore( expandedLink, allLinks[i].nextSibling );
-                                       expandedURLs[i] = expandedLink;
-                               }
-                       }
-               }
-       }
-
-       onafterprint = function() {
-               for ( var i = 0; i < expandedURLs.length; i++ ) {
-                       if ( expandedURLs[i] ) {
-                               expandedURLs[i].removeNode( true );
-                       }
-               }
-       }
+       importScriptURI( stylepath + '/common/IEFixes.js' );
 }