Merge IEFixes.js into wikibits.js
[lhc/web/wiklou.git] / skins / common / wikibits.js
index af932c3..0789b6f 100644 (file)
@@ -25,6 +25,8 @@ if (clientPC.indexOf('opera') != -1) {
        var opera7_bugs = is_opera_seven && !is_opera_95;
        var opera95_bugs = /opera\/(9\.5)/.test( clientPC );
 }
+// Start at 4 to minimize the chance of breaking on IE10 :)
+var ie6_bugs = /msie [4-6]/.test( clientPC );
 
 // Global external objects used by this script.
 /*extern ta, stylepath, skin */
@@ -999,3 +1001,130 @@ function removeHandler( element, remove, handler ) {
 //note: all skins should call runOnloadHook() at the end of html output,
 //      so the below should be redundant. It's there just in case.
 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);
+       }
+}