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