From ffbb8b2cfe6444f7c4427a4c8b5c4a77fd278837 Mon Sep 17 00:00:00 2001 From: Antoine Vandecreme Date: Wed, 30 Mar 2016 11:16:29 -0400 Subject: [PATCH] Add support of overlays rotation on IE9. --- src/openseadragon.js | 43 +++++++++++++++++++++++++++++++++++++++++++ src/overlay.js | 18 ++++++++++++------ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/openseadragon.js b/src/openseadragon.js index 07523516..94c7de6a 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -1337,6 +1337,49 @@ if (typeof define === 'function' && define.amd) { return window.getComputedStyle( element, "" ); }, + /** + * Returns the property with the correct vendor prefix appended. + * @param {String} property the property name + * @returns {String} the property with the correct prefix or null if not + * supported. + */ + getCssPropertyWithVendorPrefix: function(property) { + var memo = {}; + + $.getCssPropertyWithVendorPrefix = function(property) { + if (memo[property] !== undefined) { + return memo[property]; + } + var style = document.createElement('div').style; + var result = null; + if (style[property] !== undefined) { + result = property; + } else { + var prefixes = ['Webkit', 'Moz', 'MS', 'O', + 'webkit', 'moz', 'ms', 'o']; + var suffix = $.capitalizeFirstLetter(property); + for (var i = 0; i < prefixes.length; i++) { + var prop = prefixes[i] + suffix; + if (style[prop] !== undefined) { + result = prop; + break; + } + } + } + memo[property] = result; + return result; + }; + return $.getCssPropertyWithVendorPrefix(property); + }, + + /** + * Capitalizes the first letter of a string + * @param {String} string + * @returns {String} The string with the first letter capitalized + */ + capitalizeFirstLetter: function(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + }, /** * Determines if a point is within the bounding rectangle of the given element (hit-test). diff --git a/src/overlay.js b/src/overlay.js index 4e7552c6..c8a5ed22 100644 --- a/src/overlay.js +++ b/src/overlay.js @@ -257,12 +257,18 @@ style.height = size.y + "px"; } } - if (rotate) { - style.transformOrigin = this._getTransformOrigin(); - style.transform = "rotate(" + rotate + "deg)"; - } else { - style.transformOrigin = ""; - style.transform = ""; + var transformOriginProp = $.getCssPropertyWithVendorPrefix( + 'transformOrigin'); + var transformProp = $.getCssPropertyWithVendorPrefix( + 'transform'); + if (transformOriginProp && transformProp) { + if (rotate) { + style[transformOriginProp] = this._getTransformOrigin(); + style[transformProp] = "rotate(" + rotate + "deg)"; + } else { + style[transformOriginProp] = ""; + style[transformProp] = ""; + } } style.position = "absolute";