aboutsummaryrefslogtreecommitdiff
path: root/website/logi/iepngfix.htc
diff options
context:
space:
mode:
Diffstat (limited to 'website/logi/iepngfix.htc')
-rwxr-xr-xwebsite/logi/iepngfix.htc187
1 files changed, 187 insertions, 0 deletions
diff --git a/website/logi/iepngfix.htc b/website/logi/iepngfix.htc
new file mode 100755
index 00000000..58df65fc
--- /dev/null
+++ b/website/logi/iepngfix.htc
@@ -0,0 +1,187 @@
+<public:component>
+<script type="text/javascript">
+
+// IE5.5+ PNG Alpha Fix v2.0 Alpha
+// (c) 2004-2008 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 || {};
+
+
+// This must be a path to a blank image, relative to the HTML document(s).
+// In production use I suggest '/images/blankImg' or similar. That's all!
+IEPNGFix.blankImg = 'logi-img/clear.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'
+ ) {
+ elm.style.width = elm.offsetWidth + 'px';
+ 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)) {
+ 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>