bgraphics2031
05-06-2007, 04:22 PM
Hello everyone. I've been working with this piece of code trying to port it over from IE to Firefox. It's supposed to let you resize an iframe column dynamically. I've followed the guidelines at Mozilla http://developer.mozilla.org/en/docs/Migrate_apps_from_Internet_Explorer_to_Mozilla
but I am still stuck. This is my first real attempt at working with JS so any suggestions will be greatly appreciated. Let me know if I need to attach any other info. Thanks!
var sResizableElement = "TH"; //Elements to be resized
var iResizeThreshold = 8;
var iEdgeThreshold = 8;
var iSizeThreshold = 20;
var sVBarID = "VBar";
var oResizeTarget = null; //position and distance moved
var iStartX = null;
var iEndX = null;
var iSizeX = null;
function TableResize_CreateVBar() //Creates VBar on load
{
var objItem = document.getElementById(sVBarID);
//alert(objItem);
if(!objItem)
{
objItem = document.createElement("SPAN");
objItem.id = sVBarID;
objItem.style.position = "absolute";
objItem.style.top = "0px";
objItem.style.left = "0px";
objItem.style.height = "0px";
objItem.style.width = "2px";
objItem.style.background = "silver";
objItem.style.borderleft = "1px solid black";
objItem.style.display = "none";
document.body.appendChild(objItem);
//alert(objItem);
}
}
if(window.addEventListener)
{
window.addEventListener("load", TableResize_CreateVBar,0);
}
else if(window.attachEvent)
{
window.attachEvent("onload", TableResize_CreateVBar);
}
function TableResize_GetOwnerHeader(objReference) //gets the TH
{
var oElement = objReference;
while(oElement != null && oElement.tagName != null && oElement.tagName != "BODY")
{
if(oElement.tagName.toUpperCase() == sResizeableElement)
{
return oElement; //print alert?
}
oElement = oElement.parentNode;
//alert(oElement);
}
return null;
}
function TableResize_GetFirstColumnCell(objTable, iCellIndex)
{
var oHeaderCell = objTable.rows[0].cells[iCellIndex];
//alert(oHeaderCell);
return oHeaderCell; //alert?
}
function TableResize_CleanUp()
{
var oVBar = document.getElementById(sVBarID);
if(oVBar)
{
oVBar.style.display = "none";
}
iEndX = null;
iSizeX = null;
iStartX = null;
oResizeTarget = null;
oAdjacentCell = null;
//alert(oVBar);
return true;
}
function TableResize_OnMouseMove(objTable, event)
{
var objTH = null;
objTH = objTable.createTHead(objTable, event); //creates a new thead or returns the current thead
//alert(objTH);
if(!objTH)
return;
var oVBar = document.getElementById(sVBarID);
alert(oVBar);
if (!oVBar)
return;
var oAdjacentCell = objTH.nextSibling;
if((event.offsetX >= (objTH.offsetWidth - iEdgeThreshold)) && (oAdjacentCell != null))
{
objTH.style.cursor = "e-resize"; //find correct property
}
else
{
if(objTH.style.cursor)
{
objTH.style.cursor = objTH.style.cursor;
}
else
{
objTH.style.cursor = "e-resize";
}
}
if(oVBar.style.display == "inline")
{
oVBar.style.left = window.event.clientX + document.body.scrollLeft;
document.selection.empty(); //window.event?
}
return true
}
function TableResize_OnMouseDown(objTable, event)
{
var oTargetCell = event.target;
//alert(event.target);
if(!oTargetCell)
return;
if(oTargetCell.parentNode.tagName.toUpperCase() == sResizableElement)
{
oTargetCell = oTargetCell.parentNode;
}
var oHeaderCell = TableResize_GetFirstColumnCell(objTable, oTargetCell.cellIndex);
if((oHeaderCell.tagName.toUpperCase() == sResizableElement) && (oTargetCell.style.cursor == ""))
{
iStartX = event.screenX;
oResizeTarget = oHeaderCell;
objTable.setAttribute("Resizing","true");
//Set Capture?
oVBar.style.left = window.event.clientX + document.body.scrollLeft;
oVBar.style.height = objTable.parentNode.clientHeight;
oVBar.style.display = "inline";
}
return true;
}
function TableResize_OnMouseUp(objTable, event)
{
var oAdjacentCell = null;
var iAdjCellOldWidth = 0;
var iResizeOldWidth = 0;
if(iStartX != null && oResizeTarget != null)
{
iEndX = event.screenX;
iSizeX = iEndX - iStartX;
objTable.setAttribute("Resizing", "false");
if((oResizeTarget.offsetWidth + iSizeX) >= iSizeThreshold)
{
if(Math.abs(iSizeX) >= iResizeThreshold)
{
if(oResizeTarget.nextSibling != null)
{
oAdjacentCell = oResizeTarget.nextSibling;
iAdjCellOldWidth = (oAdjacentCell.offsetWidth);
}
else
{
oAdjacentCell = null;
}
iResizeOldWidth = (oResizeTarget.offsetWidth);
oResizeTarget.style.width = iResizeOldWidth + iSizeX;
if((oAdjacentCell != null) && (oAdjacentCell.tagName.toUpperCase() == sResizableElement))
{
oAdjacentCell.style.width = (((iAdjacentCellOldWidth - iSizeX) >= iSizeThreshold) ? (iAdjCellOldWidth - iSizeX):(oAdjacentCell.style.width = iSizeThreshold))
}
}
}
else
{
oResizeTarget.style.width = iSizeThreshold;
}
}
TableResize_CleanUp();
return true;
}
but I am still stuck. This is my first real attempt at working with JS so any suggestions will be greatly appreciated. Let me know if I need to attach any other info. Thanks!
var sResizableElement = "TH"; //Elements to be resized
var iResizeThreshold = 8;
var iEdgeThreshold = 8;
var iSizeThreshold = 20;
var sVBarID = "VBar";
var oResizeTarget = null; //position and distance moved
var iStartX = null;
var iEndX = null;
var iSizeX = null;
function TableResize_CreateVBar() //Creates VBar on load
{
var objItem = document.getElementById(sVBarID);
//alert(objItem);
if(!objItem)
{
objItem = document.createElement("SPAN");
objItem.id = sVBarID;
objItem.style.position = "absolute";
objItem.style.top = "0px";
objItem.style.left = "0px";
objItem.style.height = "0px";
objItem.style.width = "2px";
objItem.style.background = "silver";
objItem.style.borderleft = "1px solid black";
objItem.style.display = "none";
document.body.appendChild(objItem);
//alert(objItem);
}
}
if(window.addEventListener)
{
window.addEventListener("load", TableResize_CreateVBar,0);
}
else if(window.attachEvent)
{
window.attachEvent("onload", TableResize_CreateVBar);
}
function TableResize_GetOwnerHeader(objReference) //gets the TH
{
var oElement = objReference;
while(oElement != null && oElement.tagName != null && oElement.tagName != "BODY")
{
if(oElement.tagName.toUpperCase() == sResizeableElement)
{
return oElement; //print alert?
}
oElement = oElement.parentNode;
//alert(oElement);
}
return null;
}
function TableResize_GetFirstColumnCell(objTable, iCellIndex)
{
var oHeaderCell = objTable.rows[0].cells[iCellIndex];
//alert(oHeaderCell);
return oHeaderCell; //alert?
}
function TableResize_CleanUp()
{
var oVBar = document.getElementById(sVBarID);
if(oVBar)
{
oVBar.style.display = "none";
}
iEndX = null;
iSizeX = null;
iStartX = null;
oResizeTarget = null;
oAdjacentCell = null;
//alert(oVBar);
return true;
}
function TableResize_OnMouseMove(objTable, event)
{
var objTH = null;
objTH = objTable.createTHead(objTable, event); //creates a new thead or returns the current thead
//alert(objTH);
if(!objTH)
return;
var oVBar = document.getElementById(sVBarID);
alert(oVBar);
if (!oVBar)
return;
var oAdjacentCell = objTH.nextSibling;
if((event.offsetX >= (objTH.offsetWidth - iEdgeThreshold)) && (oAdjacentCell != null))
{
objTH.style.cursor = "e-resize"; //find correct property
}
else
{
if(objTH.style.cursor)
{
objTH.style.cursor = objTH.style.cursor;
}
else
{
objTH.style.cursor = "e-resize";
}
}
if(oVBar.style.display == "inline")
{
oVBar.style.left = window.event.clientX + document.body.scrollLeft;
document.selection.empty(); //window.event?
}
return true
}
function TableResize_OnMouseDown(objTable, event)
{
var oTargetCell = event.target;
//alert(event.target);
if(!oTargetCell)
return;
if(oTargetCell.parentNode.tagName.toUpperCase() == sResizableElement)
{
oTargetCell = oTargetCell.parentNode;
}
var oHeaderCell = TableResize_GetFirstColumnCell(objTable, oTargetCell.cellIndex);
if((oHeaderCell.tagName.toUpperCase() == sResizableElement) && (oTargetCell.style.cursor == ""))
{
iStartX = event.screenX;
oResizeTarget = oHeaderCell;
objTable.setAttribute("Resizing","true");
//Set Capture?
oVBar.style.left = window.event.clientX + document.body.scrollLeft;
oVBar.style.height = objTable.parentNode.clientHeight;
oVBar.style.display = "inline";
}
return true;
}
function TableResize_OnMouseUp(objTable, event)
{
var oAdjacentCell = null;
var iAdjCellOldWidth = 0;
var iResizeOldWidth = 0;
if(iStartX != null && oResizeTarget != null)
{
iEndX = event.screenX;
iSizeX = iEndX - iStartX;
objTable.setAttribute("Resizing", "false");
if((oResizeTarget.offsetWidth + iSizeX) >= iSizeThreshold)
{
if(Math.abs(iSizeX) >= iResizeThreshold)
{
if(oResizeTarget.nextSibling != null)
{
oAdjacentCell = oResizeTarget.nextSibling;
iAdjCellOldWidth = (oAdjacentCell.offsetWidth);
}
else
{
oAdjacentCell = null;
}
iResizeOldWidth = (oResizeTarget.offsetWidth);
oResizeTarget.style.width = iResizeOldWidth + iSizeX;
if((oAdjacentCell != null) && (oAdjacentCell.tagName.toUpperCase() == sResizableElement))
{
oAdjacentCell.style.width = (((iAdjacentCellOldWidth - iSizeX) >= iSizeThreshold) ? (iAdjCellOldWidth - iSizeX):(oAdjacentCell.style.width = iSizeThreshold))
}
}
}
else
{
oResizeTarget.style.width = iSizeThreshold;
}
}
TableResize_CleanUp();
return true;
}