summaryrefslogtreecommitdiff
path: root/src/js/util/mxDivResizer.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/util/mxDivResizer.js')
-rw-r--r--src/js/util/mxDivResizer.js151
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;
+};