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