diff options
author | Nicolas Vigier <boklm@mageia.org> | 2011-10-24 18:01:35 +0000 |
---|---|---|
committer | Nicolas Vigier <boklm@mageia.org> | 2011-10-24 18:01:35 +0000 |
commit | 246b38834224f9575f7b22cf84428ff615cb5acd (patch) | |
tree | 9e856efbb5a8f14faedf83432687b2a4bef5c493 /skins/common/IEFixes.js | |
download | mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.tar mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.tar.gz mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.tar.bz2 mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.tar.xz mediawiki-246b38834224f9575f7b22cf84428ff615cb5acd.zip |
add mediawiki themes
Diffstat (limited to 'skins/common/IEFixes.js')
-rw-r--r-- | skins/common/IEFixes.js | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/skins/common/IEFixes.js b/skins/common/IEFixes.js new file mode 100644 index 0000000..762d7a7 --- /dev/null +++ b/skins/common/IEFixes.js @@ -0,0 +1,128 @@ +// IE fixes javascript + +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 ); + } + } +} |