152 lines
3.1 KiB
JavaScript
152 lines
3.1 KiB
JavaScript
|
/**
|
||
|
* Copyright (c) 2006-2015, JGraph Ltd
|
||
|
* Copyright (c) 2006-2015, Gaudenz Alder
|
||
|
*/
|
||
|
/**
|
||
|
* 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;
|
||
|
};
|