// 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(); } })();