123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <public:component>
- <script type="text/javascript">
- // IE5.5+ PNG Alpha Fix v2.0 Alpha
- // (c) 2004-2009 Angus Turnbull http://www.twinhelix.com
- // This is licensed under the GNU LGPL, version 2.1 or later.
- // For details, see: http://creativecommons.org/licenses/LGPL/2.1/
- var IEPNGFix = window.IEPNGFix || {};
- IEPNGFix.data = IEPNGFix.data || {};
- // CONFIG: blankImg is the path to blank.gif, *relative to the HTML document*.
- // Try either:
- // * An absolute path like: '/images/blank.gif'
- // * A path relative to this HTC file like: thisFolder + 'blank.gif'
- var thisFolder = document.URL.replace(/(\\|\/)[^\\\/]*$/, '/');
- IEPNGFix.blankImg = thisFolder + 'blank.gif';
- IEPNGFix.fix = function(elm, src, t) {
- // Applies an image 'src' to an element 'elm' using the DirectX filter.
- // If 'src' is null, filter is disabled.
- // Disables the 'hook' to prevent infinite recursion on setting BG/src.
- // 't' = type, where background tile = 0, background = 1, IMG SRC = 2.
- var h = this.hook.enabled;
- this.hook.enabled = 0;
- var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
- src = (src || '').replace(/\(/g, '%28').replace(/\)/g, '%29');
- if (
- src && !(/IMG|INPUT/.test(elm.nodeName) && (t != 2)) &&
- elm.currentStyle.width == 'auto' && elm.currentStyle.height == 'auto'
- ) {
- if (elm.offsetWidth) {
- elm.style.width = elm.offsetWidth + 'px';
- }
- if (elm.clientHeight) {
- elm.style.height = elm.clientHeight + 'px';
- }
- if (elm.currentStyle.display == 'inline') {
- elm.style.display = 'inline-block';
- }
- }
- if (t == 1) {
- elm.style.backgroundImage = 'url("' + this.blankImg + '")';
- }
- if (t == 2) {
- elm.src = this.blankImg;
- }
- if (elm.filters[f]) {
- elm.filters[f].enabled = src ? true : false;
- if (src) {
- elm.filters[f].src = src;
- }
- } else if (src) {
- elm.style.filter = 'progid:' + f + '(src="' + src +
- '",sizingMethod="' + (t == 2 ? 'scale' : 'crop') + '")';
- }
- this.hook.enabled = h;
- };
- IEPNGFix.process = function(elm, init) {
- // Checks the onpropertychange event (on first 'init' run, a fake event)
- // and calls the filter-applying-functions.
- if (
- !/MSIE (5\.5|6)/.test(navigator.userAgent) ||
- typeof elm.filters == 'unknown'
- ) {
- return;
- }
- if (!this.data[elm.uniqueID]) {
- this.data[elm.uniqueID] = {
- className: ''
- };
- }
- var data = this.data[elm.uniqueID],
- evt = init ? { propertyName: 'src,backgroundImage' } : event,
- isSrc = /src/.test(evt.propertyName),
- isBg = /backgroundImage/.test(evt.propertyName),
- isPos = /width|height|background(Pos|Rep)/.test(evt.propertyName),
- isClass = !init && ((elm.className != data.className) &&
- (elm.className || data.className));
- if (!(isSrc || isBg || isPos || isClass)) {
- return;
- }
- data.className = elm.className;
- var blank = this.blankImg.match(/([^\/]+)$/)[1],
- eS = elm.style,
- eCS = elm.currentStyle;
- // Required for Whatever:hover - erase set BG if className changes.
- if (
- isClass && (eS.backgroundImage.indexOf('url(') == -1 ||
- eS.backgroundImage.indexOf(blank) > -1)
- ) {
- return setTimeout(function() {
- eS.backgroundImage = '';
- }, 0);
- }
- // Foregrounds.
- if (isSrc && elm.src && { IMG: 1, INPUT: 1 }[elm.nodeName]) {
- if ((/\.png/i).test(elm.src)) {
- if (!elm.oSrc) {
- // MM rollover compat
- elm.oSrc = elm.src;
- }
- this.fix(elm, elm.src, 2);
- } else if (elm.src.indexOf(blank) == -1) {
- this.fix(elm, '');
- }
- }
- // Backgrounds.
- var bgSrc = eCS.backgroundImage || eS.backgroundImage;
- if ((bgSrc + elm.src).indexOf(blank) == -1) {
- var bgPNG = bgSrc.match(/url[("']+(.*\.png[^\)"']*)[\)"']/i);
- if (bgPNG) {
- if (this.tileBG && !{ IMG: 1, INPUT: 1 }[elm.nodeName]) {
- this.tileBG(elm, bgPNG[1]);
- this.fix(elm, '', 1);
- } else {
- if (data.tiles && data.tiles.src) {
- this.tileBG(elm, '');
- }
- this.fix(elm, bgPNG[1], 1);
- this.childFix(elm);
- }
- } else {
- if (data.tiles && data.tiles.src) {
- this.tileBG(elm, '');
- }
- this.fix(elm, '');
- }
- } else if ((isPos || isClass) && data.tiles && data.tiles.src) {
- this.tileBG(elm, data.tiles.src);
- }
- if (init) {
- this.hook.enabled = 1;
- elm.attachEvent('onpropertychange', this.hook);
- }
- };
- IEPNGFix.childFix = function(elm) {
- // "hasLayout" fix for unclickable children inside PNG backgrounds.
- var tags = [
- 'a',
- 'input',
- 'select',
- 'textarea',
- 'button',
- 'iframe',
- 'object'
- ],
- t = tags.length,
- tFix = [];
- while (t--) {
- var pFix = elm.all.tags(tags[t]),
- e = pFix.length;
- while (e--) {
- tFix.push(pFix[e]);
- }
- }
- t = tFix.length;
- if (t && (/relative|absolute/i).test(elm.currentStyle.position)) {
- alert('IEPNGFix: Unclickable children of element:' +
- '\n\n<' + elm.nodeName + (elm.id && ' id=' + elm.id) + '>');
- }
- while (t--) {
- if (!(/relative|absolute/i).test(tFix[t].currentStyle.position)) {
- tFix[t].style.position = 'relative';
- }
- }
- };
- IEPNGFix.hook = function() {
- if (IEPNGFix.hook.enabled) {
- IEPNGFix.process(element, 0);
- }
- };
- IEPNGFix.process(element, 1);
- </script>
- </public:component>
|