// Name: ResizableControl.ResizableControlBehavior.debug.js
// Assembly: AjaxControlToolkit
// Version: 4.5.7.1213
// FileVersion: 4.5.7.1213
// (c) 2010 CodePlex Foundation
///
///
///
(function() {
var scriptName = "ExtendedResizable";
function execute() {
Type.registerNamespace('Sys.Extended.UI');
Sys.Extended.UI.ResizableControlBehavior = function(element) {
///
/// The ResizableControlBehavior makes the target element resizable
///
///
/// DOM element associated with the behaviro
///
Sys.Extended.UI.ResizableControlBehavior.initializeBase(this, [element]);
this._HandleCssClass = "";
this._ResizableCssClass = "";
this._HandleOffsetX = 0;
this._HandleOffsetY = 0;
this._MinimumWidth = 0;
this._MinimumHeight = 0;
this._MaximumWidth = 100000;
this._MaximumHeight = 100000;
this._frame = null;
this._handle = null;
this._handleHolder = null;
this._lining = null;
this._tracking = false;
this._lastClientX = 0;
this._lastClientY = 0;
this._onmouseoverDelegate = null;
this._onmouseoutDelegate = null;
this._onmousedownDelegate = null;
this._onmousemoveDelegate = null;
this._onmouseupDelegate = null;
this._onselectstartDelegate = null;
}
Sys.Extended.UI.ResizableControlBehavior.prototype = {
initialize : function() {
///
/// Initialize the behavior
///
Sys.Extended.UI.ResizableControlBehavior.callBaseMethod(this, 'initialize');
this._frame = this.get_element();
var savedSizeString = Sys.Extended.UI.ResizableControlBehavior.callBaseMethod(this, 'get_ClientState');
if (savedSizeString && (-1 != savedSizeString.indexOf(','))) {
var savedSize = savedSizeString.split(',');
this._frame.style.width = savedSize[0]+'px';
this._frame.style.height = savedSize[1]+'px';
}
this._lining = document.createElement('DIV');
this._lining.style.width = $common.getCurrentStyle(this._frame, 'width');
this._lining.style.height = $common.getCurrentStyle(this._frame, 'height');
this._lining.style.position = 'absolute';
this._lining.style.backgroundColor = 'black'; // Keeps browsers from ignoring the content-free element
this._lining.style.opacity = "0"; // Makes the lining invisible
this._lining.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=0)"; // Ditto, for IE
this._lining.style.visibility = 'hidden';
this._frame.insertBefore(this._lining, this._frame.firstChild);
this._handleHolder = document.createElement('DIV');
this._handleHolder.style.width = '0px';
this._handleHolder.style.height = '0px';
this._handleHolder.style.position = ((Sys.Browser.agent === Sys.Browser.Opera) ? 'relative' : 'absolute');
this._frame.insertBefore(this._handleHolder, this._frame.firstChild);
this._handle = document.createElement('DIV');
this._handle.className = this._HandleCssClass;
this._handle.style.position = 'absolute';
this._handleHolder.appendChild(this._handle);
this._onmouseoverDelegate = Function.createDelegate(this, this._onmouseover);
$addHandler(this._handle, 'mouseover', this._onmouseoverDelegate);
this._onmouseoutDelegate = Function.createDelegate(this, this._onmouseout);
$addHandler(this._handle, 'mouseout', this._onmouseoutDelegate);
this._onmousedownDelegate = Function.createDelegate(this, this._onmousedown);
$addHandler(this._handle, 'mousedown', this._onmousedownDelegate);
this._onmousemoveDelegate = Function.createDelegate(this, this._onmousemove);
this._onmouseupDelegate = Function.createDelegate(this, this._onmouseup);
this._onselectstartDelegate = Function.createDelegate(this, this._onselectstart);
this._resizeControl(0, 0, 0, 0);
this._rememberSize();
},
dispose : function() {
///
/// Dispose the behavior
///
if (this._onmouseoverDelegate) {
$removeHandler(this._handle, 'mouseover', this._onmouseoverDelegate);
this._onmouseoverDelegate = null;
}
if (this._onmouseoutDelegate) {
$removeHandler(this._handle, 'mouseout', this._onmouseoutDelegate);
this._onmouseoutDelegate = null;
}
if (this._onmousedownDelegate) {
$removeHandler(this._handle, 'mousedown', this._onmousedownDelegate);
this._onmousedownDelegate = null;
}
if (this._onmousemoveDelegate) {
if (this.tracking) {
$removeHandler(document, 'mousemove', this._onmousemoveDelegate);
}
this._onmousemoveDelegate = null;
}
if (this._onmouseupDelegate) {
if (this.tracking) {
$removeHandler(document, 'mouseup', this._onmouseupDelegate);
}
this._onmouseupDelegate = null;
}
if (this._onselectstartDelegate) {
if (this.tracking) {
$removeHandler(document, 'selectstart', this._onselectstartDelegate);
if (Sys.Browser.agent === Sys.Browser.Opera) {
$removeHandler(document, 'mousedown', this._onselectstartDelegate);
}
}
this._onselectstartDelegate = null;
}
Sys.Extended.UI.ResizableControlBehavior.callBaseMethod(this, 'dispose');
},
_onmouseover : function() {
///
/// Handler for the handle's mouseover event
///
Sys.UI.DomElement.addCssClass(this._frame, this._ResizableCssClass);
},
_onmouseout : function() {
///
/// Handler for the handle's mouseout event
///
if (!this._tracking) {
Sys.UI.DomElement.removeCssClass(this._frame, this._ResizableCssClass);
}
},
_onmousedown : function(e) {
///
/// Handler for the handle's mousedown event
///
if (!e) {
e = event;
}
this._onmousedownImplementation(e.clientX, e.clientY);
},
_onmousedownImplementation : function(clientX, clientY) {
///
/// Setup the target for resizing when its handle receives a mousedown event
///
///
/// X coordinate of the click
///
///
/// Y coordinate of the click
///
this._tracking = true;
this._resizeControl(clientX, clientY, 0, 0);
this._lining.style.visibility = 'visible'; // Overlay resizing control to avoid interacting with it (ex: IFRAME)
$addHandler(document, 'mousemove', this._onmousemoveDelegate);
$addHandler(document, 'mouseup', this._onmouseupDelegate);
$addHandler(document, 'selectstart', this._onselectstartDelegate);
if (Sys.Browser.agent === Sys.Browser.Opera) {
$addHandler(document, 'mousedown', this._onselectstartDelegate);
}
this.raiseResizeBegin();
},
_onmousemove : function(e) {
///
/// Handler for the handle's mousemove event
///
if (!e) {
e = event;
}
this._onmousemoveImplementation(e.clientX, e.clientY);
},
_onmousemoveImplementation : function(clientX, clientY) {
///
/// Resize the target when the handle receives mousemove events
///
///
/// X coordinate of the click
///
///
/// Y coordinate of the click
///
if (this._tracking) {
var deltaX = (clientX-this._lastClientX);
var deltaY = (clientY-this._lastClientY);
this._resizeControl(clientX, clientY, deltaX, deltaY);
}
},
_onmouseup : function() {
///
/// Handler for the handle's mouseup event
///
this._tracking = false;
this._rememberSize();
this._lining.style.visibility = 'hidden';
$removeHandler(document, 'mousemove', this._onmousemoveDelegate);
$removeHandler(document, 'mouseup', this._onmouseupDelegate);
$removeHandler(document, 'selectstart', this._onselectstartDelegate);
if (Sys.Browser.agent === Sys.Browser.Opera) {
$removeHandler(document, 'mousedown', this._onselectstartDelegate);
}
Sys.UI.DomElement.removeCssClass(this._frame, this._ResizableCssClass);
},
_onselectstart : function(e) {
///
/// Handler for the target's selectstart event
///
///
/// Event info
///
e.preventDefault();
return false;
},
_resizeControl : function(clientX, clientY, deltaX, deltaY) {
///
/// Resize the target
///
///
/// Starting X coordinate
///
///
/// Starting Y coordinate
///
///
/// Change in the width
///
///
/// Change in the height
///
this._lastClientX = clientX;
this._lastClientY = clientY;
var _liningWidth = Math.min(Math.max(this._lining.offsetWidth+deltaX, Math.max(this._MinimumWidth, this._handle.offsetWidth)), this._MaximumWidth);
var _liningHeight = Math.min(Math.max(this._lining.offsetHeight+deltaY, Math.max(this._MinimumHeight, this._handle.offsetHeight)), this._MaximumHeight);
this._lining.style.width = _liningWidth+'px';
this._lining.style.height = _liningHeight+'px';
this._frame.style.width = _liningWidth+'px';
this._frame.style.height = _liningHeight+'px';
var _handleLeft = this._lining.offsetWidth-this._handle.offsetWidth+this._HandleOffsetX;
var _handleTop = this._lining.offsetHeight-this._handle.offsetHeight+this._HandleOffsetY;
this._handle.style.left = _handleLeft+'px';
this._handle.style.top = _handleTop+'px';
this.raiseResizing();
},
_rememberSize : function() {
///
/// Save the size in ClientState
///
var size = this.get_Size();
Sys.Extended.UI.ResizableControlBehavior.callBaseMethod(this, 'set_ClientState', [ size.width+','+size.height ]);
this.raiseResize();
},
_measurementToNumber : function(m) {
///
/// Get the magnitude of a measurement
///
///
/// Measurement
///
///
/// Magnitude of a measurement
///
return m.replace('px', '');
},
get_HandleCssClass : function() {
///
/// The name of the CSS class to apply to the resize handle
///
return this._HandleCssClass;
},
set_HandleCssClass : function(value) {
if (this._HandleCssClass) {
throw String.format(Sys.Extended.UI.Resources.ResizableControlBehavior_CannotChangeProperty, 'HandleCssClass');
}
this._HandleCssClass = value;
this.raisePropertyChanged('HandleCssClass');
},
get_ResizableCssClass : function() {
///
/// name of the CSS class to apply to the element when resizing
///
return this._ResizableCssClass;
},
set_ResizableCssClass : function(value) {
if (this._ResizableCssClass) {
throw String.format(Sys.Extended.UI.Resources.ResizableControlBehavior_CannotChangeProperty, 'ResizableCssClass');
}
this._ResizableCssClass = value;
this.raisePropertyChanged('ResizableCssClass');
},
get_HandleOffsetX : function() {
///
/// Horizontal offset to apply to the location of the resize handle
///
return this._HandleOffsetX;
},
set_HandleOffsetX : function(value) {
if (this._HandleOffsetX != value) {
this._HandleOffsetX = value;
this.raisePropertyChanged('HandleOffsetX');
}
},
get_HandleOffsetY : function() {
///
/// Vertical offset to apply to the location of the resize handle
///
return this._HandleOffsetY;
},
set_HandleOffsetY : function(value) {
if (this._HandleOffsetY != value) {
this._HandleOffsetY = value;
this.raisePropertyChanged('HandleOffsetY');
}
},
get_MinimumWidth : function() {
///
/// Minimum width of the resizable element
///
return this._MinimumWidth;
},
set_MinimumWidth : function(value) {
if (this._MinimumWidth != value) {
this._MinimumWidth = value;
this.raisePropertyChanged('MinimumWidth');
}
},
get_MinimumHeight : function() {
///
/// Minimum height of the resizable element
///
return this._MinimumHeight;
},
set_MinimumHeight : function(value) {
if (this._MinimumHeight != value) {
this._MinimumHeight = value;
this.raisePropertyChanged('MinimumHeight');
}
},
get_MaximumWidth : function() {
///
/// Maximum width of the resizing element
///
return this._MaximumWidth;
},
set_MaximumWidth : function(value) {
if (this._MaximumWidth != value) {
this._MaximumWidth = value;
this.raisePropertyChanged('MaximumWidth');
}
},
get_MaximumHeight : function() {
///
/// Maximum height of the resizing element
///
return this._MaximumHeight;
},
set_MaximumHeight : function(value) {
if (this._MaximumHeight != value) {
this._MaximumHeight = value;
this.raisePropertyChanged('MaximumHeight');
}
},
add_resizing : function(handler) {
///
/// Add a handler to the resizing event
///
///
/// Handler
///
this.get_events().addHandler("resizing", handler);
},
remove_resizing : function(handler) {
///
/// Remove a handler from the resizing event
///
///
/// Handler
///
this.get_events().removeHandler("resizing", handler);
},
raiseResizing : function() {
///
/// Raise the resizing event
///
var onResizingHandler = this.get_events().getHandler("resizing");
if (onResizingHandler) {
onResizingHandler(this, Sys.EventArgs.Empty);
}
},
get_resizing : function() {
///
/// Function to invoke on resizing (can a Function, name of a Function, or expression that evaluates to a Function)
///
return this.get_events().getHandler("resizing");
},
set_resizing : function(value) {
if (value && (0 < value.length)) {
var func = $common.resolveFunction(value);
if (func) {
this.add_resizing(func);
} else {
throw Error.argumentType('value', typeof(value), 'Function', String.format(Sys.Extended.UI.Resources.ResizableControlBehavior_InvalidHandler, 'resizing'));
}
}
},
add_resize : function(handler) {
///
/// Add a handler to the resize event
///
///
/// Handler
///
this.get_events().addHandler("resize", handler);
},
remove_resize : function(handler) {
///
/// Remove a handler from the resize event
///
///
/// Handler
///
this.get_events().removeHandler("resize", handler);
},
raiseResize : function() {
///
/// Raise the resize event
///
var onResizeHandler = this.get_events().getHandler("resize");
if (onResizeHandler) {
onResizeHandler(this, Sys.EventArgs.Empty);
}
},
get_resize : function() {
///
/// Function to invoke on resize (can be a Function, name of a Function, or expression that evaluates to a Function)
///
return this.get_events().getHandler("resize");
},
set_resize : function(value) {
if (value && (0 < value.length)) {
var func = $common.resolveFunction(value);
if (func) {
this.add_resize(func);
} else {
throw Error.argumentType('value', typeof(value), 'Function', String.format(Sys.Extended.UI.Resources.ResizableControlBehavior_InvalidHandler, 'resize'));
}
}
},
add_resizebegin : function(handler) {
///
/// Add a handler to the resizebegin event
///
///
/// Handler
///
this.get_events().addHandler("resizebegin", handler);
},
remove_resizebegin : function(handler) {
///
/// Remove a handler from the resizebegin event
///
///
/// Handler
///
this.get_events().removeHandler("resizebegin", handler);
},
raiseResizeBegin : function() {
///
/// Raise the resizebegin event
///
var onresizebeginHandler = this.get_events().getHandler("resizebegin");
if (onresizebeginHandler) {
onresizebeginHandler(this, Sys.EventArgs.Empty);
}
},
get_resizebegin : function() {
///
/// Function to invoke on resizebegin (can be a Function, name of a Function, or expression that evaluates to a Function)
///
return this.get_events().getHandler("resizebegin");
},
set_resizebegin : function(value) {
if (value && (0 < value.length)) {
var func = $common.resolveFunction(value);
if (func) {
this.add_resizebegin(func);
} else {
throw Error.argumentType('value', typeof(value), 'Function', String.format(Sys.Extended.UI.Resources.ResizableControlBehavior_InvalidHandler, 'resizebegin'));
}
}
},
get_Size : function() {
///
/// Size of the target (of the form {width, height})
///
return { width: this._measurementToNumber($common.getCurrentStyle(this._lining, 'width')),
height: this._measurementToNumber($common.getCurrentStyle(this._lining, 'height'))};
},
set_Size : function(value) {
var deltaX = value.width-this._measurementToNumber($common.getCurrentStyle(this._lining, 'width'));
var deltaY = value.height-this._measurementToNumber($common.getCurrentStyle(this._lining, 'height'));
this._resizeControl(0, 0, deltaX, deltaY);
this._rememberSize();
this.raisePropertyChanged('Size');
}
}
Sys.Extended.UI.ResizableControlBehavior.registerClass('Sys.Extended.UI.ResizableControlBehavior', Sys.Extended.UI.BehaviorBase);
Sys.registerComponent(Sys.Extended.UI.ResizableControlBehavior, { name: "resizable" });
} // execute
if (window.Sys && Sys.loader) {
Sys.loader.registerScript(scriptName, ["ExtendedBase", "ExtendedCommon"], execute);
}
else {
execute();
}
})();