A Qcodo based CMS/ecommerce framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

226 lines
8.0 KiB

/////////////////////////////////////////////
// Block Control: Resize Handle functionality
/////////////////////////////////////////////
qcodo.registerControlResizeHandle = function(mixControl, blnVertical) {
var objControl; if (!(objControl = qcodo.getControl(mixControl))) return;
var objWrapper = objControl.wrapper;
objWrapper.resizeHandle = true;
objWrapper.resizeDirectionVertical = blnVertical;
objWrapper.resizeUpperControls = new Array();
objWrapper.resizeLowerControls = new Array();
if (!objWrapper.handle) {
if (qcodo.isBrowser(qcodo.SAFARI))
qcodo.registerControlHandle(objControl, 'move');
else if (qcodo.isBrowser(qcodo.IE)) {
if (objWrapper.resizeDirectionVertical)
qcodo.registerControlHandle(objControl, 'row-resize');
else
qcodo.registerControlHandle(objControl, 'col-resize');
} else {
if (objWrapper.resizeDirectionVertical)
qcodo.registerControlHandle(objControl, 'ns-resize');
else
qcodo.registerControlHandle(objControl, 'ew-resize');
};
// Assign Event Handlers
qcodo.enableMouseDrag();
objWrapper.handleMouseDown = function(objEvent, objHandle) {
this.startUpperSizes = new Array();
this.startLowerSizes = new Array();
this.startLowerPositions = new Array();
if (this.resizeDirectionVertical) {
this.offsetY = qcodo.page.y - this.getAbsolutePosition().y;
this.startDragY = qcodo.page.y;
for (var intIndex = 0; intIndex < this.resizeUpperControls.length; intIndex++) {
var objUpperControl = this.resizeUpperControls[intIndex];
this.startUpperSizes[intIndex] = eval(objUpperControl.control.style.height.replace(/px/, ""));
};
for (var intIndex = 0; intIndex < this.resizeLowerControls.length; intIndex++) {
var objLowerControl = this.resizeLowerControls[intIndex];
this.startLowerPositions[intIndex] = objLowerControl.getAbsolutePosition().y;
this.startLowerSizes[intIndex] = eval(objLowerControl.control.style.height.replace(/px/, ""));
};
if (this.resizeMinimum != null)
this.resizeMinimumY = this.getAbsolutePosition().y - (this.offsetTop - this.resizeMinimum);
else
this.resizeMinimumY = null;
if (this.resizeMaximum != null)
this.resizeMaximumY = this.getAbsolutePosition().y - (this.offsetTop - this.resizeMaximum);
else
this.resizeMaximumY = null;
} else {
this.offsetX = qcodo.page.x - this.getAbsolutePosition().x;
this.startDragX = qcodo.page.x;
for (var intIndex = 0; intIndex < this.resizeUpperControls.length; intIndex++) {
var objUpperControl = this.resizeUpperControls[intIndex];
this.startUpperSizes[intIndex] = eval(objUpperControl.control.style.width.replace(/px/, ""));
};
for (var intIndex = 0; intIndex < this.resizeLowerControls.length; intIndex++) {
var objLowerControl = this.resizeLowerControls[intIndex];
this.startLowerPositions[intIndex] = objLowerControl.getAbsolutePosition().x;
this.startLowerSizes[intIndex] = eval(objLowerControl.control.style.width.replace(/px/, ""));
};
if (this.resizeMinimum != null)
this.resizeMinimumX = this.getAbsolutePosition().x - (this.offsetLeft - this.resizeMinimum);
else
this.resizeMinimumX = null;
if (this.resizeMaximum != null)
this.resizeMaximumX = this.getAbsolutePosition().x - (this.offsetLeft - this.resizeMaximum);
else
this.resizeMaximumX = null;
};
return qcodo.terminateEvent(objEvent);
};
objWrapper.handleMouseMove = function(objEvent, objHandle) {
if (this.resizeDirectionVertical) {
var intNewY = qcodo.page.y - this.offsetY;
if (this.resizeMinimumY != null)
intNewY = Math.max(intNewY, this.resizeMinimumY);
if (this.resizeMaximumY != null)
intNewY = Math.min(intNewY, this.resizeMaximumY);
var intDeltaY = intNewY - this.startDragY + this.offsetY;
// Update ResizeHandle's Position
this.setAbsolutePosition(this.getAbsolutePosition().x, intNewY);
// Resize Upper Controls
for (var intIndex = 0; intIndex < this.resizeUpperControls.length; intIndex++) {
var objUpperControl = this.resizeUpperControls[intIndex];
objUpperControl.updateStyle("height", this.startUpperSizes[intIndex] + intDeltaY + "px");
};
// Reposition Lower Controls
for (var intIndex = 0; intIndex < this.resizeLowerControls.length; intIndex++) {
var objLowerControl = this.resizeLowerControls[intIndex];
objLowerControl.setAbsolutePosition(
objLowerControl.getAbsolutePosition().x,
this.startLowerPositions[intIndex] + intDeltaY);
objLowerControl.updateStyle("height", this.startLowerSizes[intIndex] - intDeltaY + "px");
};
} else {
var intNewX = qcodo.page.x - this.offsetX;
if (this.resizeMinimumX != null)
intNewX = Math.max(intNewX, this.resizeMinimumX);
if (this.resizeMaximumX != null)
intNewX = Math.min(intNewX, this.resizeMaximumX);
var intDeltaX = intNewX - this.startDragX + this.offsetX;
// Update ResizeHandle's Position
this.setAbsolutePosition(intNewX, this.getAbsolutePosition().y);
// Resize Upper Controls
for (var intIndex = 0; intIndex < this.resizeUpperControls.length; intIndex++) {
var objUpperControl = this.resizeUpperControls[intIndex];
objUpperControl.updateStyle("width", this.startUpperSizes[intIndex] + intDeltaX + "px");
};
// Reposition Lower Controls
for (var intIndex = 0; intIndex < this.resizeLowerControls.length; intIndex++) {
var objLowerControl = this.resizeLowerControls[intIndex];
objLowerControl.setAbsolutePosition(
this.startLowerPositions[intIndex] + intDeltaX,
objLowerControl.getAbsolutePosition().y);
objLowerControl.updateStyle("width", this.startLowerSizes[intIndex] - intDeltaX + "px");
};
};
// Update Handle Position
this.updateHandle(false);
return qcodo.terminateEvent(objEvent);
};
objWrapper.handleMouseUp = function(objEvent, objHandle) {
// See if we've even resized at all
var blnResized = true;
if (this.resizeDirectionVertical) {
if (this.startDragY == qcodo.page.y)
blnResized = false;
} else {
if (this.startDragX == qcodo.page.x)
blnResized = false;
};
if (blnResized) {
this.updateHandle(true);
// Setup OnResize (if applicable)
if (this.control.getAttribute("onqcodoresize")) {
this.control.qcodoresize = function(strOnResizeCommand) {
eval(strOnResizeCommand);
};
this.control.qcodoresize(this.control.getAttribute("onqcodoresize"));
};
return qcodo.terminateEvent(objEvent);
} else {
// If we haven't resized at all, go ahead and run the control's onclick method
// (if applicable) or just propogate the click up
if (this.control.onclick)
return this.control.onclick(objEvent);
else
return true;
};
};
objWrapper.setUpperControl = function(mixControl) {
var objControl; if (!(objControl = qcodo.getControl(mixControl))) return;
var objWrapper = objControl.wrapper;
this.resizeUpperControls[this.resizeUpperControls.length] = objWrapper;
};
objWrapper.setLowerControl = function(mixControl) {
var objControl; if (!(objControl = qcodo.getControl(mixControl))) return;
var objWrapper = objControl.wrapper;
this.resizeLowerControls[this.resizeLowerControls.length] = objWrapper;
};
objWrapper.resizeMinimum = null;
objWrapper.resizeMaximum = null;
objWrapper.setResizeMinimum = function(intMinimum) {
this.resizeMinimum = intMinimum;
};
objWrapper.setResizeMaximum = function(intMaximum) {
this.resizeMaximum = intMaximum;
};
// Wrapper Shortcuts
objWrapper.setUC = objWrapper.setUpperControl;
objWrapper.setLC = objWrapper.setLowerControl;
objWrapper.setReMi = objWrapper.setResizeMinimum;
objWrapper.setReMa = objWrapper.setResizeMaximum;
} else {
objWrapper.updateHandle();
};
};
//////////////////
// Qcodo Shortcuts
//////////////////
qc.regCRH = qcodo.registerControlResizeHandle;