diff options
Diffstat (limited to 'web/lib/ResizeSensor.js')
-rw-r--r-- | web/lib/ResizeSensor.js | 166 |
1 files changed, 0 insertions, 166 deletions
diff --git a/web/lib/ResizeSensor.js b/web/lib/ResizeSensor.js deleted file mode 100644 index e5ce136a8..000000000 --- a/web/lib/ResizeSensor.js +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Copyright Marc J. Schmidt. See the LICENSE file at the top-level - * directory of this distribution and at - * https://github.com/marcj/css-element-queries/blob/master/LICENSE. - */ -; -(function() { - - /** - * Class for dimension change detection. - * - * @param {Element|Element[]|Elements|jQuery} element - * @param {Function} callback - * - * @constructor - */ - this.ResizeSensor = function(element, callback) { - /** - * - * @constructor - */ - function EventQueue() { - this.q = []; - this.add = function(ev) { - this.q.push(ev); - }; - - var i, j; - this.call = function() { - for (i = 0, j = this.q.length; i < j; i++) { - this.q[i].call(); - } - }; - } - - /** - * @param {HTMLElement} element - * @param {String} prop - * @returns {String|Number} - */ - function getComputedStyle(element, prop) { - if (element.currentStyle) { - return element.currentStyle[prop]; - } else if (window.getComputedStyle) { - return window.getComputedStyle(element, null).getPropertyValue(prop); - } else { - return element.style[prop]; - } - } - - /** - * - * @param {HTMLElement} element - * @param {Function} resized - */ - function attachResizeEvent(element, resized) { - if (!element.resizedAttached) { - element.resizedAttached = new EventQueue(); - element.resizedAttached.add(resized); - } else if (element.resizedAttached) { - element.resizedAttached.add(resized); - return; - } - - element.resizeSensor = document.createElement('div'); - element.resizeSensor.className = 'resize-sensor'; - var style = 'position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;'; - var styleChild = 'position: absolute; left: 0; top: 0;'; - - element.resizeSensor.style.cssText = style; - element.resizeSensor.innerHTML = - '<div class="resize-sensor-expand" style="' + style + '">' + - '<div style="' + styleChild + '"></div>' + - '</div>' + - '<div class="resize-sensor-shrink" style="' + style + '">' + - '<div style="' + styleChild + ' width: 200%; height: 200%"></div>' + - '</div>'; - element.appendChild(element.resizeSensor); - - if (!{fixed: 1, absolute: 1}[getComputedStyle(element, 'position')]) { - element.style.position = 'relative'; - } - - var expand = element.resizeSensor.childNodes[0]; - var expandChild = expand.childNodes[0]; - var shrink = element.resizeSensor.childNodes[1]; - var shrinkChild = shrink.childNodes[0]; - - var lastWidth, lastHeight; - - var reset = function() { - expandChild.style.width = expand.offsetWidth + 10 + 'px'; - expandChild.style.height = expand.offsetHeight + 10 + 'px'; - expand.scrollLeft = expand.scrollWidth; - expand.scrollTop = expand.scrollHeight; - shrink.scrollLeft = shrink.scrollWidth; - shrink.scrollTop = shrink.scrollHeight; - lastWidth = element.offsetWidth; - lastHeight = element.offsetHeight; - }; - - reset(); - - var changed = function() { - if (element.resizedAttached) { - element.resizedAttached.call(); - } - }; - - var addEvent = function(el, name, cb) { - if (el.attachEvent) { - el.attachEvent('on' + name, cb); - } else { - el.addEventListener(name, cb); - } - }; - - var onScroll = function() { - if (element.offsetWidth != lastWidth || element.offsetHeight != lastHeight) { - changed(); - } - reset(); - } - - addEvent(expand, 'scroll', onScroll); - addEvent(shrink, 'scroll', onScroll); - } - - var elementType = Object.prototype.toString.call(element); - var isCollectionTyped = ('[object Array]' === elementType - || ('[object NodeList]' === elementType) - || ('[object HTMLCollection]' === elementType) - || ('undefined' !== typeof jQuery && element instanceof jQuery) //jquery - || ('undefined' !== typeof Elements && element instanceof Elements) //mootools - ); - - if (isCollectionTyped) { - var i = 0, j = element.length; - for (; i < j; i++) { - attachResizeEvent(element[i], callback); - } - } else { - attachResizeEvent(element, callback); - } - - this.detach = function() { - if (isCollectionTyped) { - var i = 0, j = element.length; - for (; i < j; i++) { - ResizeSensor.detach(element[i]); - } - } else { - ResizeSensor.detach(element); - } - }; - }; - - this.ResizeSensor.detach = function(element) { - if (element.resizeSensor) { - element.removeChild(element.resizeSensor); - delete element.resizeSensor; - delete element.resizedAttached; - } - }; - -})(); |