var ElementMaxHeight = function() {
2 this.initialize.apply(this, arguments);
3}
4
5ElementMaxHeight.prototype = {
6 initialize: function(className) {
7 this.elements = document.getElementsByClassName(className || 'maxheight');
8 this.textElement = document.createElement('span');
9 this.textElement.appendChild(document.createTextNode('A'));
10 this.textElement.style.display = 'block';
11 this.textElement.style.position = 'absolute';
12 this.textElement.style.fontSize = '1em';
13 this.textElement.style.top = '-1000px';
14 this.textElement.style.left = '-1000px';
15 document.body.appendChild(this.textElement);
16 this.textElementHeight = document.getDimensions(this.textElement).height;
17 var __object = this;
18 var __checkFontSize = this.checkFontSize;
19 this.checkFontSizeInterval = window.setInterval(function() {return __checkFontSize.apply(__object)}, 500);
20
21 this.expand();
22
23 // Refresh elements height onResize event
24 var __expand = this.expand;
25 if (window.addEventListener) {
26 window.addEventListener('resize', function(event) {return __expand.apply(__object, [( event || window.event)])}, false);
27 } else if (window.attachEvent) {
28 window.attachEvent('onresize', function(event) {return __expand.apply(__object, [( event || window.event)])});
29 }
30 },
31
32 expand: function() {
33 this.reset();
34 for (var i = 0; i < this.elements.length; i++) {
35 this.elements[i].style.height = document.getDimensions(this.elements[i].parentNode).height + 'px';
36 }
37 },
38
39 reset: function() {
40 for (var i = 0; i < this.elements.length; i++) {
41 this.elements[i].style.height = 'auto';
42 }
43 },
44
45 checkFontSize: function() {
46 var height = document.getDimensions(this.textElement).height;
47 if(this.textElementHeight != height) {
48 this.textElementHeight = height;
49 this.expand();
50 }
51 }
52}
53
54
55if (!!document.evaluate) {
56 document._getElementsByXPath = function(expression, parentElement) {
57 var results = [];
58 var query = document.evaluate(expression, parentElement || document,
59 null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
60 for (var i = 0, length = query.snapshotLength; i < length; i++)
61 results.push(query.snapshotItem(i));
62 return results;
63 }
64}
65
66document.getElementsByClassName = function(className, parentElement) {
67 if (!!document.evaluate) {
68 var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
69 return document._getElementsByXPath(q, parentElement);
70 } else {
71 var children = (parentElement || document.body).getElementsByTagName('*');
72 var elements = [], child;
73 for (var i = 0, length = children.length; i < length; i++) {
74 child = children[i];
75 if (child.className.length != 0 &&
76 (child.className == className ||
77 child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))) {
78 elements.push(child);
79 }
80 }
81 return elements;
82 }
83}
84
85document.getDimensions = function (element) {
86 var display = element.style.display;
87 if (display != 'none' && display != null) { // Safari bug
88 return {width: element.offsetWidth, height: element.offsetHeight};
89 }
90
91 return {width: originalWidth, height: originalHeight};
92}
