[Core JS] wikibits.js / IEFixes clean up
[lhc/web/wiklou.git] / skins / common / IEFixes.js
1 // IE fixes javascript
2
3 window.isMSIE55 = ( window.showModalDialog && window.clipboardData && window.createPopup );
4 window.doneIETransform = undefined;
5 window.doneIEAlphaFix = undefined;
6
7 window.hookit = function() {
8 if ( !doneIETransform && document.getElementById && document.getElementById( 'bodyContent' ) ) {
9 doneIETransform = true;
10 relativeforfloats();
11 fixalpha();
12 }
13 };
14
15 if ( document.attachEvent ) {
16 document.attachEvent( 'onreadystatechange', window.hookit );
17 }
18
19 // png alpha transparency fixes
20 window.fixalpha = function( 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 if( isMSIE55 ) {
67 // Legacy modules are loaded from the bottom
68 // No need to wait for DOMContentReady or window.onload
69 fixalpha();
70 }
71
72 // fix ie6 disappering float bug
73 window.relativeforfloats = function() {
74 var bc = document.getElementById( 'bodyContent' );
75 if ( bc ) {
76 var tables = bc.getElementsByTagName( 'table' );
77 var divs = bc.getElementsByTagName( 'div' );
78 setrelative( tables );
79 setrelative( divs );
80 }
81 };
82
83 window.setrelative = function( nodes ) {
84 var i = 0;
85 while ( i < nodes.length ) {
86 if( ( ( nodes[i].style.float && nodes[i].style.float != ( 'none' ) ||
87 ( nodes[i].align && nodes[i].align != ( 'none' ) ) ) &&
88 ( !nodes[i].style.position || nodes[i].style.position != 'relative' ) ) )
89 {
90 nodes[i].style.position = 'relative';
91 }
92 i++;
93 }
94 };
95
96 // Expand links for printing
97 String.prototype.hasClass = function( classWanted ) {
98 var classArr = this.split(/\s/);
99 for ( var i = 0; i < classArr.length; i++ ) {
100 if ( classArr[i].toLowerCase() == classWanted.toLowerCase() ) {
101 return true;
102 }
103 }
104 return false;
105 };
106
107 window.expandedURLs = undefined;
108
109 window.onbeforeprint = function() {
110 expandedURLs = [];
111
112 var contentEl = document.getElementById( 'content' );
113
114 if ( contentEl ) {
115 var allLinks = contentEl.getElementsByTagName( 'a' );
116
117 for ( var i = 0; i < allLinks.length; i++ ) {
118 if ( allLinks[i].className.hasClass( 'external' ) && !allLinks[i].className.hasClass( 'free' ) ) {
119 var expandedLink = document.createElement( 'span' );
120 var expandedText = document.createTextNode( ' (' + allLinks[i].href + ')' );
121 expandedLink.appendChild( expandedText );
122 allLinks[i].parentNode.insertBefore( expandedLink, allLinks[i].nextSibling );
123 expandedURLs[i] = expandedLink;
124 }
125 }
126 }
127 };
128
129 window.onafterprint = function() {
130 for ( var i = 0; i < expandedURLs.length; i++ ) {
131 if ( expandedURLs[i] ) {
132 expandedURLs[i].removeNode( true );
133 }
134 }
135 };