var ElementMaxHeight = function() { this.initialize.apply(this, arguments); } ElementMaxHeight.prototype = { initialize: function(className) { this.elements = document.getElementsByClassName(className || 'maxheight'); this.textElement = document.createElement('span'); this.textElement.appendChild(document.createTextNode('A')); this.textElement.style.display = 'block'; this.textElement.style.position = 'absolute'; this.textElement.style.fontSize = '1em'; this.textElement.style.top = '-1000px'; this.textElement.style.left = '-1000px'; document.body.appendChild(this.textElement); this.textElementHeight = document.getDimensions(this.textElement).height; var __object = this; var __checkFontSize = this.checkFontSize; this.checkFontSizeInterval = window.setInterval(function() {return __checkFontSize.apply(__object)}, 500); this.expand(); // Refresh elements height onResize event var __expand = this.expand; if (window.addEventListener) { window.addEventListener('resize', function(event) {return __expand.apply(__object, [( event || window.event)])}, false); } else if (window.attachEvent) { window.attachEvent('onresize', function(event) {return __expand.apply(__object, [( event || window.event)])}); } }, expand: function() { this.reset(); for (var i = 0; i < this.elements.length; i++) { this.elements[i].style.height = document.getDimensions(this.elements[i].parentNode).height + 'px'; } }, reset: function() { for (var i = 0; i < this.elements.length; i++) { this.elements[i].style.height = 'auto'; } }, checkFontSize: function() { var height = document.getDimensions(this.textElement).height; if(this.textElementHeight != height) { this.textElementHeight = height; this.expand(); } } } if (!!document.evaluate) { document._getElementsByXPath = function(expression, parentElement) { var results = []; var query = document.evaluate(expression, parentElement || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0, length = query.snapshotLength; i < length; i++) results.push(query.snapshotItem(i)); return results; } } document.getElementsByClassName = function(className, parentElement) { if (!!document.evaluate) { var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; return document._getElementsByXPath(q, parentElement); } else { var children = (parentElement || document.body).getElementsByTagName('*'); var elements = [], child; for (var i = 0, length = children.length; i < length; i++) { child = children[i]; if (child.className.length != 0 && (child.className == className || child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))) { elements.push(child); } } return elements; } } document.getDimensions = function (element) { var display = element.style.display; if (display != 'none' && display != null) { // Safari bug return {width: element.offsetWidth, height: element.offsetHeight}; } return {width: originalWidth, height: originalHeight}; }