]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - skins/common/IEFixes.js
MediaWiki 1.11.0
[autoinstalls/mediawiki.git] / skins / common / IEFixes.js
1 // IE fixes javascript
2
3 var isMSIE55 = (window.showModalDialog && window.clipboardData && window.createPopup);
4 var doneIETransform;
5 var doneIEAlphaFix;
6
7 if (document.attachEvent)
8   document.attachEvent('onreadystatechange', hookit);
9
10 function hookit() {
11     if (!doneIETransform && document.getElementById && document.getElementById('bodyContent')) {
12         doneIETransform = true;
13         relativeforfloats();
14         fixalpha();
15     }
16 }
17
18 // png alpha transparency fixes
19 function fixalpha() {
20     // bg
21     if (isMSIE55 && !doneIEAlphaFix)
22     {
23         var plogo = document.getElementById('p-logo');
24         if (!plogo) return;
25
26         var logoa = plogo.getElementsByTagName('a')[0];
27         if (!logoa) return;
28
29         var bg = logoa.currentStyle.backgroundImage;
30         var imageUrl = bg.substring(5, bg.length-2);
31
32         doneIEAlphaFix = true;
33
34         if (imageUrl.substr(imageUrl.length-4).toLowerCase() == '.png') {
35             var logospan = logoa.appendChild(document.createElement('span'));
36
37             logoa.style.backgroundImage = 'none';
38             logospan.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + imageUrl + ')';
39             logospan.style.height = '100%';
40             logospan.style.position = 'absolute';
41             logospan.style.width = logoa.currentStyle.width;
42             logospan.style.cursor = 'hand';
43             // Center image with hack for IE5.5
44             if (document.documentElement.dir == "rtl")
45             {
46               logospan.style.right = '50%';
47               logospan.style.setExpression('marginRight', '"-" + (this.offsetWidth / 2) + "px"');
48             }
49             else
50             {
51               logospan.style.left = '50%';
52               logospan.style.setExpression('marginLeft', '"-" + (this.offsetWidth / 2) + "px"');
53             }
54             logospan.style.top = '50%';
55             logospan.style.setExpression('marginTop', '"-" + (this.offsetHeight / 2) + "px"');
56
57             var linkFix = logoa.appendChild(logoa.cloneNode());
58             linkFix.style.position = 'absolute';
59             linkFix.style.height = '100%';
60             linkFix.style.width = '100%';
61         }
62     }
63 }
64
65 // fix ie6 disappering float bug
66 function relativeforfloats() {
67     var bc = document.getElementById('bodyContent');
68     if (bc) {
69         var tables = bc.getElementsByTagName('table');
70         var divs = bc.getElementsByTagName('div');
71     }
72     setrelative(tables);
73     setrelative(divs);
74 }
75 function setrelative (nodes) {
76     var i = 0;
77     while (i < nodes.length) {
78         if(((nodes[i].style.float && nodes[i].style.float != ('none') ||
79         (nodes[i].align && nodes[i].align != ('none'))) &&
80         (!nodes[i].style.position || nodes[i].style.position != 'relative'))) 
81         {
82             nodes[i].style.position = 'relative';
83         }
84         i++;
85     }
86 }
87
88
89 // Expand links for printing
90
91 String.prototype.hasClass = function(classWanted)
92 {
93     var classArr = this.split(/\s/);
94     for (var i=0; i<classArr.length; i++)
95       if (classArr[i].toLowerCase() == classWanted.toLowerCase()) return true;
96     return false;
97 }
98
99 var expandedURLs;
100
101 onbeforeprint = function() { 
102     expandedURLs = [];
103
104     var contentEl = document.getElementById("content");
105
106     if (contentEl)
107     {
108       var allLinks = contentEl.getElementsByTagName("a");
109
110       for (var i=0; i < allLinks.length; i++) {
111           if (allLinks[i].className.hasClass("external") && !allLinks[i].className.hasClass("free")) {
112               var expandedLink = document.createElement("span");
113               var expandedText = document.createTextNode(" (" + allLinks[i].href + ")");
114               expandedLink.appendChild(expandedText);
115               allLinks[i].parentNode.insertBefore(expandedLink, allLinks[i].nextSibling);
116               expandedURLs[i] = expandedLink;
117           }
118       }
119    }
120 }
121
122 onafterprint = function()
123 {
124     for (var i=0; i < expandedURLs.length; i++)
125         if (expandedURLs[i])
126             expandedURLs[i].removeNode(true);
127 }