/* FILE ARCHIVED ON 17:45:20 Mar 10, 2011 AND RETRIEVED FROM THE AN OPENWAYBACK INSTANCE ON 13:13:35 Apr 27, 2024. JAVASCRIPT APPENDED BY OPENWAYBACK, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). */ /* * Background position Fixed * Also fixes non-visible images * Yereth Jansen (yereth@yereth.nl) * personal website: www.yereth.nl * */ /* * jQuery ifixpng plugin * (previously known as pngfix) * Version 3.0 (2008/06/20) * @requires jQuery v1.2.0 or above * * Examples at: https://cybercemetery.unt.edu/archive/fcic/20110310174520/http://jquery.khurshid.com * Copyright (c) 2007 Kush M. * Dual licensed under the MIT and GPL licenses: * https://cybercemetery.unt.edu/archive/fcic/20110310174520/http://www.opensource.org/licenses/mit-license.php * https://cybercemetery.unt.edu/archive/fcic/20110310174520/http://www.gnu.org/licenses/gpl.html */ /** * * @example * * optional if location of pixel.gif if different to default which is images/pixel.gif * $.ifixpng('media/pixel.gif'); * * $('img[@src$=.png], #panel').ifixpng(); * * @apply hack to all png images and #panel which icluded png img in its css * * @name ifixpng * @type jQuery * @cat Plugins/Image * @return jQuery * @author jQuery Community */ ;(function($) { /** * helper variables and function */ $.ifixpng = function(customPixel) { $.ifixpng.pixel = customPixel; }; $.ifixpng.regexp = { bg: /^url\(["']?(.*\.png([?].*)?)["']?\)$/i, img: /.*\.png([?].*)?$/i }, $.ifixpng.getPixel = function() { return $.ifixpng.pixel || 'images/pixel.gif'; }; var hack = { base : $('base').attr('href'), ltie7 : $.browser.msie && $.browser.version < 7, filter : function(src) { return "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='"+src+"')"; } }; /** * Applies ie png hack to selected dom elements * * $('img[@src$=.png]').ifixpng(); * @desc apply hack to all images with png extensions * * $('#panel, img[@src$=.png]').ifixpng(); * @desc apply hack to element #panel and all images with png extensions * * @name ifixpng */ $.fn.ifixpng = hack.ltie7 ? function() { function fixImage(image, source, width, height, hidden) { image.css({filter:hack.filter(source), width: width, height: height}) .attr({src:$.ifixpng.getPixel()}) .positionFix(); } return this.each(function() { var $$ = $(this); if ($$.is('img') || $$.is('input')) { // hack image tags present in dom var source, img; if (this.src && this.src.match($.ifixpng.regexp.img)) { // make sure it is png image // use source tag value if set source = (hack.base && this.src.substring(0,1)!='/' && this.src.indexOf(hack.base) === -1) ? hack.base + this.src : this.src; // If the width is not set, we have a problem; the image is not probably visible or not loaded // and we need a work around. if (!this.width || !this.height) { $(new Image()).one('load', function() { fixImage($$, source, this.width, this.height); $(this).remove(); }).attr('src', source); // If the image already has dimensions (it's loaded and visible) we can fix it straight away. } else fixImage($$, source, this.width, this.height); } } else if (this.style) { // hack png css properties present inside css var imageSrc = $$.css('backgroundImage'); // Background repeated images we cannot fix unfortunately if (imageSrc && imageSrc.match($.ifixpng.regexp.bg) && this.currentStyle.backgroundRepeat == 'no-repeat') { imageSrc = RegExp.$1; var x = this.currentStyle.backgroundPositionX || 0, y = this.currentStyle.backgroundPositionY || 0; if (x || y) { var css = {}, img; if (x == 'left') css.left = 0; // if right is 0, we have to check if the parent has an odd width, because of an IE bug else if (x == 'right') css.right = $$.outerWidth() % 2 === 1 ? -1 : 0; else if (x.indexOf('%') == -1 || parseInt(x) < 50) css.left = x; else css.right = (100 - parseInt(x)) + '%'; // if bottom is 0, we have to check if the parent has an odd height, because of an IE bug if (y == 'bottom') css.bottom = $$.outerHeight() % 2 === 1 ? -1 : 0; else if (y == 'top') css.top = 0; else if (y.indexOf('%') == -1 || parseInt(y) < 50) css.top = y; else css.bottom = (100 - parseInt(y)) + '%'; img = new Image(); $(img).one('load', function() { if (css.top == 'center') css.top = ($$.outerHeight() - this.height) / 2; if (css.left == 'center') css.left = ($$.outerWidth() - this.width) / 2; $$.positionFix().css({backgroundImage: 'none'}).prepend( $('
').css(css).css({ width: this.width, height: this.height, position: 'absolute', filter: hack.filter(imageSrc) }) ); $(this).remove(); }); img.src = imageSrc; } else { $$.css({backgroundImage: 'none', filter:hack.filter(imageSrc)}); } } } }); } : function() { return this; }; /** * positions selected item relatively */ $.fn.positionFix = function() { return this.each(function() { var $$ = $(this); if ($$.css('position') != 'absolute') $$.css({position:'relative'}); }); }; })(jQuery);