diff options
Diffstat (limited to 'src/js/util/mxDivResizer.js')
-rw-r--r-- | src/js/util/mxDivResizer.js | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/js/util/mxDivResizer.js b/src/js/util/mxDivResizer.js new file mode 100644 index 0000000..2a2e4eb --- /dev/null +++ b/src/js/util/mxDivResizer.js @@ -0,0 +1,151 @@ +/** + * $Id: mxDivResizer.js,v 1.22 2010-01-02 09:45:14 gaudenz Exp $ + * Copyright (c) 2006-2010, JGraph Ltd + */ +/** + * Class: mxDivResizer + * + * Maintains the size of a div element in Internet Explorer. This is a + * workaround for the right and bottom style being ignored in IE. + * + * If you need a div to cover the scrollwidth and -height of a document, + * then you can use this class as follows: + * + * (code) + * var resizer = new mxDivResizer(background); + * resizer.getDocumentHeight = function() + * { + * return document.body.scrollHeight; + * } + * resizer.getDocumentWidth = function() + * { + * return document.body.scrollWidth; + * } + * resizer.resize(); + * (end) + * + * Constructor: mxDivResizer + * + * Constructs an object that maintains the size of a div + * element when the window is being resized. This is only + * required for Internet Explorer as it ignores the respective + * stylesheet information for DIV elements. + * + * Parameters: + * + * div - Reference to the DOM node whose size should be maintained. + * container - Optional Container that contains the div. Default is the + * window. + */ +function mxDivResizer(div, container) +{ + if (div.nodeName.toLowerCase() == 'div') + { + if (container == null) + { + container = window; + } + + this.div = div; + var style = mxUtils.getCurrentStyle(div); + + if (style != null) + { + this.resizeWidth = style.width == 'auto'; + this.resizeHeight = style.height == 'auto'; + } + + mxEvent.addListener(container, 'resize', + mxUtils.bind(this, function(evt) + { + if (!this.handlingResize) + { + this.handlingResize = true; + this.resize(); + this.handlingResize = false; + } + }) + ); + + this.resize(); + } +}; + +/** + * Function: resizeWidth + * + * Boolean specifying if the width should be updated. + */ +mxDivResizer.prototype.resizeWidth = true; + +/** + * Function: resizeHeight + * + * Boolean specifying if the height should be updated. + */ +mxDivResizer.prototype.resizeHeight = true; + +/** + * Function: handlingResize + * + * Boolean specifying if the width should be updated. + */ +mxDivResizer.prototype.handlingResize = false; + +/** + * Function: resize + * + * Updates the style of the DIV after the window has been resized. + */ +mxDivResizer.prototype.resize = function() +{ + var w = this.getDocumentWidth(); + var h = this.getDocumentHeight(); + + var l = parseInt(this.div.style.left); + var r = parseInt(this.div.style.right); + var t = parseInt(this.div.style.top); + var b = parseInt(this.div.style.bottom); + + if (this.resizeWidth && + !isNaN(l) && + !isNaN(r) && + l >= 0 && + r >= 0 && + w - r - l > 0) + { + this.div.style.width = (w - r - l)+'px'; + } + + if (this.resizeHeight && + !isNaN(t) && + !isNaN(b) && + t >= 0 && + b >= 0 && + h - t - b > 0) + { + this.div.style.height = (h - t - b)+'px'; + } +}; + +/** + * Function: getDocumentWidth + * + * Hook for subclassers to return the width of the document (without + * scrollbars). + */ +mxDivResizer.prototype.getDocumentWidth = function() +{ + return document.body.clientWidth; +}; + +/** + * Function: getDocumentHeight + * + * Hook for subclassers to return the height of the document (without + * scrollbars). + */ +mxDivResizer.prototype.getDocumentHeight = function() +{ + return document.body.clientHeight; +}; |