1 | <public:component>
|
---|
2 | <public:attach event="onpropertychange" onevent="iePNGFix(0)" />
|
---|
3 |
|
---|
4 | <script type="text/javascript">
|
---|
5 |
|
---|
6 | // IE5.5+ PNG Alpha Fix v1.0
|
---|
7 | // (c) 2004-2008 Angus Turnbull http://www.twinhelix.com
|
---|
8 |
|
---|
9 | // This is licensed under the GNU LGPL, version 2.1 or later.
|
---|
10 | // For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
---|
11 |
|
---|
12 |
|
---|
13 | // This must be a path to a blank image, relative to the HTML document(s).
|
---|
14 | // In production use I suggest '/images/blank.gif' or similar. That's all!
|
---|
15 | if (typeof blankImg == 'undefined') var blankImg = 'v.5/out/dist/images/blank.gif';
|
---|
16 |
|
---|
17 |
|
---|
18 |
|
---|
19 | function filt(s, b)
|
---|
20 | {
|
---|
21 | var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
|
---|
22 | var sM = (currentStyle.backgroundRepeat == 'no-repeat') ? 'crop' : 'scale';
|
---|
23 | s = (s || '').replace(/\(/g, '%28').replace(/\)/g, '%29');
|
---|
24 |
|
---|
25 | if (s && !(/IMG|INPUT/.test(nodeName) && !b) &&
|
---|
26 | currentStyle.width == 'auto' && currentStyle.height == 'auto')
|
---|
27 | {
|
---|
28 | style.width = offsetWidth + 'px';
|
---|
29 | style.height = clientHeight + 'px';
|
---|
30 | if (currentStyle.display == 'inline') style.display = 'inline-block';
|
---|
31 | }
|
---|
32 |
|
---|
33 | if (filters[f])
|
---|
34 | {
|
---|
35 | filters[f].enabled = s ? true : false;
|
---|
36 | if (s) with (filters[f]) { src = s }
|
---|
37 | }
|
---|
38 | else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="' + sM + '")';
|
---|
39 | }
|
---|
40 |
|
---|
41 | function iePNGFix(init)
|
---|
42 | {
|
---|
43 | if (!/MSIE (5\.5|6)/.test(navigator.userAgent) || typeof filters == 'unknown') return;
|
---|
44 | var evt = init ? { propertyName: 'src,background' } : event;
|
---|
45 | var isSrc = /src/.test(evt.propertyName);
|
---|
46 | var isBg = /background/.test(evt.propertyName);
|
---|
47 | var isClass = !init &&
|
---|
48 | ((this.className != this._png_class) && (this.className || this._png_class));
|
---|
49 | if (!(isSrc || isBg || isClass)) return;
|
---|
50 | this._png_class = this.className;
|
---|
51 | var blank = blankImg.match(/([^\/]+)$/)[1];
|
---|
52 |
|
---|
53 | // Required for Whatever:hover support - erase any set BG if className changes.
|
---|
54 | if (isClass && ((style.backgroundImage.indexOf('url(') == -1) ||
|
---|
55 | (style.backgroundImage.indexOf(blank) > -1)))
|
---|
56 | {
|
---|
57 | setTimeout(function() { this.style.backgroundImage = '' }, 0);
|
---|
58 | return;
|
---|
59 | }
|
---|
60 |
|
---|
61 | if (isSrc && this.src && /IMG|INPUT/.test(nodeName))
|
---|
62 | {
|
---|
63 | if ((/\.png/i).test(src))
|
---|
64 | {
|
---|
65 | filt(src, 1);
|
---|
66 | src = blankImg;
|
---|
67 | }
|
---|
68 | else if (src.indexOf(blank) == -1) filt();
|
---|
69 | }
|
---|
70 |
|
---|
71 | var bgSrc = currentStyle.backgroundImage || style.backgroundImage;
|
---|
72 | if ((bgSrc + this.src).indexOf(blank) == -1)
|
---|
73 | {
|
---|
74 | var bgPNG = bgSrc.match(/^url[("']+(.*\.png[^\)"']*)[\)"']+[^\)]*$/i);
|
---|
75 |
|
---|
76 | if (bgPNG)
|
---|
77 | {
|
---|
78 | style.backgroundImage = 'url("' + blankImg + '")';
|
---|
79 | filt(bgPNG[1], 0);
|
---|
80 | // Unclickable elements inside PNG backgrounds.
|
---|
81 | var tags = ['a', 'input', 'select', 'textarea', 'iframe', 'object'],
|
---|
82 | t = tags.length, tFix = [];
|
---|
83 | while (t--)
|
---|
84 | {
|
---|
85 | var elms = all.tags(tags[t]), e = elms.length;
|
---|
86 | while (e--) tFix.push(elms[e]);
|
---|
87 | }
|
---|
88 | var t = tFix.length;
|
---|
89 | if (t && (/relative|absolute/i).test(currentStyle.position))
|
---|
90 | alert('IEPNGFix: Children of positioned element are unclickable:\n\n<' +
|
---|
91 | nodeName + (id && ' id=' + id) + '>');
|
---|
92 | while (t--)
|
---|
93 | if (!(/relative|absolute/i).test(tFix[t].currentStyle.position))
|
---|
94 | tFix[t].style.position = 'relative';
|
---|
95 | }
|
---|
96 | else filt();
|
---|
97 | }
|
---|
98 | }
|
---|
99 |
|
---|
100 | iePNGFix(1);
|
---|
101 |
|
---|
102 | </script>
|
---|
103 | </public:component>
|
---|