From 6b880204546fb6e58344954c25f9f58d02eb3d90 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Mon, 20 Dec 2004 19:13:59 +0000 Subject: [PATCH] more asset manager changes --- www/extras/assetManager/Asset.js | 56 +++++ www/extras/assetManager/AssetManager.js | 278 +++++++++++++++++++++ www/extras/assetManager/ContextMenu.js | 87 +++++++ www/extras/assetManager/Display.js | 297 +++++++++++++++++++++++ www/extras/assetManager/EventManager.js | 135 +++++++++++ www/extras/assetManager/Grid.js | 86 +++++++ www/extras/assetManager/Tools.js | 147 +++++++++++ www/extras/assetManager/assetManager.css | 30 +++ www/extras/assetManager/breakerLine.gif | Bin 0 -> 70 bytes 9 files changed, 1116 insertions(+) create mode 100644 www/extras/assetManager/Asset.js create mode 100644 www/extras/assetManager/AssetManager.js create mode 100644 www/extras/assetManager/ContextMenu.js create mode 100644 www/extras/assetManager/Display.js create mode 100644 www/extras/assetManager/EventManager.js create mode 100644 www/extras/assetManager/Grid.js create mode 100644 www/extras/assetManager/Tools.js create mode 100644 www/extras/assetManager/assetManager.css create mode 100644 www/extras/assetManager/breakerLine.gif diff --git a/www/extras/assetManager/Asset.js b/www/extras/assetManager/Asset.js new file mode 100644 index 000000000..b03783ba0 --- /dev/null +++ b/www/extras/assetManager/Asset.js @@ -0,0 +1,56 @@ + +//--------Constructor-------------------- + +function Asset() { + //properties + this.url = ""; + this.rank = 1; + this.assetId = ""; + this.type = ""; + this.title = ""; + this.size = 0; + this.lastUpdate = ""; + this.icon = ""; + this.div = null; + + //methods + this.edit = Asset_edit; + this.view = Asset_view; + this.displayProperties = Asset_displayProperties; +} + +//---------Method Implementations ------------- + + + + +//Edit the properties of an asset (edit) +//------------------------------- +//url + ?||& + func=edit +function Asset_edit() { + location.href = manager.tools.addParamDelimiter(this.url) + "func=edit"; +} + +//View an asset (view) +//------------- +//url + ?||& + func=view +function Asset_view() { + location.href = manager.tools.addParamDelimiter(this.url) + "func=view"; +} + +function Asset_displayProperties() { + html = ""; + html+="" + html+="" + html+="" + html+="" + html+="" + html+="
Title:" + this.title + "
Rank:" + this.rank + "
Asset ID:" + this.assetId + "
Asset Type:" + this.type + "
Size:" + this.size + "
Last Updated:" + this.lastUpdate + "
"; + manager.display.displayPropertiesWindow(html); +} + + + + + + diff --git a/www/extras/assetManager/AssetManager.js b/www/extras/assetManager/AssetManager.js new file mode 100644 index 000000000..df18e0e8f --- /dev/null +++ b/www/extras/assetManager/AssetManager.js @@ -0,0 +1,278 @@ +//--------Constructor-------------------- + +function AssetManager(assetArrayData,headerArrayData,lables,crumbtrail) { + this.tools = new Tools(); + this.contextMenu = new ContextMenu(); + this.display = new Display(); + this.eventManager = new EventManager(); + + + this.keys = new Array(); + this.keys[0] = "rank"; + this.keys[1] = "title"; + this.keys[2] = "type"; + this.keys[3] = "lastUpdate"; + this.keys[4] = "size"; + + this.parentURL = ""; + + this.lables = lables; + this.crumbtrail = crumbtrail; + this.parentURL = "d"; + this.renderAssets = AssetManager_renderAssets; + this.assetArrayData = assetArrayData; + this.columnHeadings = headerArrayData; + this.assets = new Array(); + this.getAsset= AssetManager_getAsset; + this.buildCrumbTrail = AssetManager_buildCrumbTrail; + this.displayContextMenu = AssetManager_displayContextMenu; + this.editTree=AssetManager_editTree; + this.setParent=AssetManager_setParent; + this.setRank=AssetManager_setRank; + this.remove = AssetManager_remove; + this.cut = AssetManager_cut; + this.copy = AssetManager_copy; + this.sortGrid = AssetManager_sortGrid; + this.getSelectedAssetIds = AssetManager_getSelectedAssetIds; +} + +function AssetManager_getManager() { + //debug(manager.assetArrayData); + return manager; +} + +function AssetManager_renderAssets() { + + + var gridStr = ''; + var eventStr=''; + var id = ""; + + for (i=0;i' + this.columnHeadings[i] + ''; + eventStr += 'document.getElementById("' + id + '").onclick=AssetManager_getManager().eventManager.gridHeaderClick;'; + } + + gridStr+= ''; +//['Rank','Title','Type','Last Updated','Size']; + for (i=0;i'; + + /* rank, title, type, lastUpdate, size, url, assetId */ + asset = new Asset(); + + asset.rank = this.assetArrayData[i][0]; + asset.title = this.assetArrayData[i][1]; + asset.type = this.assetArrayData[i][2]; + asset.lastUpdate = this.assetArrayData[i][3]; + asset.size = this.assetArrayData[i][4]; + asset.url = this.assetArrayData[i][5]; + asset.assetId = this.assetArrayData[i][6]; + asset.icon = this.assetArrayData[i][7]; + this.assets[i]=asset; + + //add the row events +// eventStr += 'document.getElementById("' + id + '").onclick=Grid_rowClicked;'; +// eventStr += 'document.getElementById("' + id + '").onmouseover=Grid_rowMouseOver;'; +// eventStr += 'document.getElementById("' + id + '").onmouseout=Grid_rowMouseOut;'; + eventStr += 'document.getElementById("' + id + '").ondblclick=AssetManager_getManager().eventManager.assetDoubleClick;'; + eventStr += 'document.getElementById("' + id + '").onmousedown=AssetManager_getManager().eventManager.assetMouseDown;'; + eventStr += 'document.getElementById("' + id + '").oncontextmenu=AssetManager_getManager().eventManager.assetRightClick;'; + eventStr += 'document.getElementById("' + id + '").asset = AssetManager_getManager().assets[' + i + '];'; + eventStr += 'AssetManager_getManager().assets[' + i + '].div = document.getElementById("' + id + '");'; + + + for (k=0;k' + this.assetArrayData[i][k] + ''; +// eventStr += 'document.getElementById("' + id + '").asset = AssetManager_getManager().assets[' + i + '];'; + } + } + gridStr+=''; + + gridStr += '
'; + + document.getElementById("workspace").innerHTML=gridStr; + eval(eventStr); + + this.buildCrumbTrail(); + + + } + +function AssetManager_buildCrumbTrail() { + var crumbtrail = document.getElementById("crumbtrail"); + var contents = ""; + + for (i=0;i' + this.crumbtrail[i][1] + ''; + if (i != this.crumbtrail.length -1) { + contents += ""; + } + } + + this.parentURL = "http://" + this.tools.getHostName("http://www.yahoo.com") + this.crumbtrail[this.crumbtrail.length -1][1]; + + contents += '
 -> 
'; + + crumbtrail.innerHTML = contents; + +// for (i=0;i' + this.crumbtrail[i][1] + ''; +// if (i != this.crumbtrail.lenght) { +// contents += " -> "; +// } + + //} +} + +function AssetManager_getAsset(obj) { + + while (obj.tagName!=this.display.topLevelElement && obj.className != "am-grid-row") { + obj=this.display.dom? obj.parentNode : obj.parentElement + } + + return obj.asset; +} + +function AssetManager_displayContextMenu(x,y) { + + var arr = new Array(); + + if (this.display.overObjects.length == 1) { + arr[arr.length] = new ContextMenuItem("View","javascript:manager.display.contextMenu.owner.view()"); + arr[arr.length] = new ContextMenuItem("Edit","javascript:manager.display.contextMenu.owner.edit()"); + } + + arr[arr.length] = new ContextMenuItem("Delete","javascript:manager.remove()"); + arr[arr.length] = new ContextMenuItem("",""); + arr[arr.length] = new ContextMenuItem("Cut","javascript:AssetManager_getManager().cut()"); + arr[arr.length] = new ContextMenuItem("Copy","javascript:manager.copy()"); + + if (this.display.overObjects.length ==1) { + arr[arr.length] = new ContextMenuItem("",""); + arr[arr.length] = new ContextMenuItem("Edit Tree","javascript:manager.editTree()"); + arr[arr.length] = new ContextMenuItem("Properties","javascript:manager.display.contextMenu.owner.displayProperties()"); + } +// alert("x = " + x + " y= " + y); + + manager.contextMenu.render(arr,x,y,this); +} + + +//url + ?||& + func=editTree +function AssetManager_editTree() { + location.href = this.tools.addParamDelimiter(this.parentURL) + "func=editTree"; +} + +//Moving to a new parent (move) +//---------------------- +//url + ?||& + func=setParent&assetId= + assetId +function AssetManager_setParent(parentId) { + location.href = this.tools.addParamDelimiter(this.parentURL) + "func=setParent&assetId="+ parentId; +} + +//Set the rank of an asset amongst its siblings (move) +//--------------------------------------------- +//url + ?||& + func=setRank&rank= + newRank +function AssetManager_setRank(rank) { + location.href = this.tools.addParamDelimiter(this.parentURL) + "func=setRank&rank="+ rank; +} + + +//Copy an asset to the clipboard (copy) +//------------------------------ +//url + ?||& + func=copy +function AssetManager_copy() { + location.href = this.tools.addParamDelimiter(this.parentURL) + "func=copyList" + this.getSelectedAssetIds(); +} + +//Cut an asset to the clipboard (cut) +//----------------------------- +//url + ?||& + func=cut +function AssetManager_cut() { + location.href = this.tools.addParamDelimiter(this.parentURL) + "func=cutList" + this.getSelectedAssetIds(); +} + +//Delete an asset. (delete) +//---------------- +//url + ?||& + func=delete (do a javascript confirm on this) +function AssetManager_remove() { + if (window.confirm("Are you sure you want to delete this asset? Click OK to continue, or Cancel if you made a mistake.")) { + location.href = this.tools.addParamDelimiter(this.parentURL) + "func=deleteList" + this.getSelectedAssetIds(); + } +} + +function AssetManager_getSelectedAssetIds() { + var assetIds = ""; + for (i=0;i") { + colHeader.sortOrder="<"; + document.getElementById('am_grid.headers.' + columnIndex).innerHTML = this.columnHeadings[columnIndex] + " (up)"; + + }else { + colHeader.sortOrder=">"; + document.getElementById('am_grid.headers.' + columnIndex).innerHTML = this.columnHeadings[columnIndex] + "(down)"; + } + + + var rowArray = new Array(); + + for (i=0; i'); + +//Constructor for a context menu +function ContextMenu() { + this.render = ContextMenu_render; + this.hide = ContextMenu_hide; + this.owner = null; + this.contextMenu = document.getElementById("contextMenu"); + this.contextMenu.oncontextmenu=new function() {return false;}; + this.contextMenu.onmousedown=new function() {return false;}; + this.contextMenu.onmouseup=new function() {return false;}; + this.nameArray = new Array(); +} + +//Container used by the render method to delimit context menu items +function ContextMenuItem(cminame,cmilink) { + this.name = cminame; + this.link = cmilink; + +} + +//---------Method Implementations ------------- + + +//renders the context menu based on the contextMenuItemArray and owner. +function ContextMenu_render(contextMenuItemArray,x,y,owner) { +// manager.tools.showObject(this.contextMenu); +// alert("top = " + this.contextMenu.className); + + this.owner = owner; + + var html=''; + for (var i=0;i
     ' + contextMenuItemArray[i].name + '
'; + } + + html+=''; + html+=''; + this.nameArray[this.nameArray.length] = name; + } + + html+='
'; + this.contextMenu.innerHTML = html; + + for (var k=0;k parseInt(this.contextMenu.offsetHeight)) { + this.contextMenu.style.top = (y + document.body.scrollTop - this.contextMenu.offsetHeight -1) + "px"; + }else { + this.contextMenu.style.top = (y + document.body.scrollTop + 3) + "px"; + } + this.contextMenu.style.left= (x + document.body.scrollLeft) + "px"; + + + manager.display.bringToFront(this.contextMenu); + + //alert(this.contextMenu.style.top); + manager.tools.showObject(this.contextMenu); +} + +//hides the context menu +function ContextMenu_hide() { + for (var k=0;k"; + + propWindow = document.getElementById("propertiesWindow"); + propWindow.innerHTML=temp; + propWindow.style.top=50 + document.body.scrollTop; + propWindow.style.left=50 + document.body.scrollLeft; + manager.tools.showObject(propWindow); + this.bringToFront(propWindow); +} + + +function Display_dragStart(firedobj,xCoordinate,yCoordinate) { + if (!firedobj) return; + + if (this.shiftKeyDown) return; + + + + while (firedobj.tagName!=this.topLevelElement && firedobj.className.indexOf("am-grid-row") == -1 && firedobj.className != "dragable") { + firedobj=manager.display.dom? firedobj.parentNode : firedobj.parentElement + } + + + if (firedobj.className.indexOf("am-grid-row") == -1 && firedobj.className != "dragable") { + return; + } + + this.dragEnabled=true; + +// while (firedobj.tagName!=this.topLevelElement) { + // for (i =0;ix1 && x < (x1 + obj.offsetWidth)) { + if (y> y1 && y< (y1 + obj.offsetHeight)) { + //for (j=0;j(y1 + obj.bpm.children[j].offsetTop) && y < (y1 + obj.bpm.children[j].offsetTop + obj.bpm.children[j].offsetHeight)) { + return obj; + // } + //} + } + } + } + + return returnObj; +} + +function Display_keyDown(e) { + if (e.keyCode==16) { + this.shiftKeyDown = true; + }else if (e.keyCode ==17) { + this.controlKeyDown = true; + }else if (e.keyCode == 46 ) { + manager.remove(); + } +} + +function Display_keyUp(e) { + if (e.keyCode==16) { + this.shiftKeyDown = false; + }else if (e.keyCode ==17) { + this.controlKeyDown = false; + } +} + + +//checks to see if the scroll bars need to be adjusted +function Display_adjustScrollBars(e) { + var scrY=0; + var scrX=0; + + if (e.clientY > document.body.clientHeight-this.scrollJump) { + if (e.clientY + document.body.scrollTop < this.pageHeight - (this.scrollJump + 40)) { + scrY=this.scrollJump; + window.scroll(document.body.scrollLeft,document.body.scrollTop + scrY); + this.y-=scrY; + } + }else if (e.clientY < this.scrollJump) { + if (document.body.scrollTop < this.scrollJump) { + scrY = document.body.scrollTop; + }else { + scrY=this.scrollJump; + } + window.scroll(document.body.scrollLeft,document.body.scrollTop - scrY); + this.y+=scrY; + } + + + if (e.clientX > document.body.clientWidth-this.scrollJump) { + if (e.clientX + document.body.scrollLeft < this.pageWidth - (this.scrollJump + 40)) { + scrX=this.scrollJump; + window.scroll(document.body.scrollLeft + scrX,document.body.scrollTop); + this.x-=scrX; + } + }else if (e.clientX < this.scrollJump) { + if (document.body.scrollLeft < this.scrollJump) { + scrX = document.body.scrollLeft; + }else { + scrX=this.scrollJump; + } + window.scroll(document.body.scrollLeft - scrX,document.body.scrollTop); + this.x+=scrX; + } +} + + diff --git a/www/extras/assetManager/EventManager.js b/www/extras/assetManager/EventManager.js new file mode 100644 index 000000000..e0d9285bd --- /dev/null +++ b/www/extras/assetManager/EventManager.js @@ -0,0 +1,135 @@ + +//--------Constructor-------------------- + +function EventManager() { + //int document events + document.onmousedown=EventManager_documentMouseDown; + document.onmouseup=EventManager_documentMouseUp; + document.onmousemove=EventManager_documentMouseMove; + + document.onkeydown=EventManager_keyDown; + document.onkeyup=EventManager_keyUp; + + this.gridHeaderClick = EventManager_gridHeaderClick; + this.assetDoubleClick = EventManager_assetDoubleClick; + this.assetRightClick = EventManager_assetRightClick; + this.assetMouseDown = EventManager_assetMouseDown; + +} + +//---------Method Implementations ------------- + +function EventManager_keyDown(e) { + var dom = document.getElementById&&!document.all; + e=dom? e : event; + manager.display.keyDown(e); + return false; +} + +function EventManager_keyUp(e) { + var dom = document.getElementById&&!document.all; + e=dom? e : event; + manager.display.keyUp(e); + return false; +} + +function EventManager_assetDoubleClick(e) { + var dom = document.getElementById&&!document.all; + var e=dom? e : event; + var obj =dom? e.target : e.srcElement + + AssetManager_getManager().getAsset(obj).edit(); +} + +function EventManager_assetRightClick(e) { + var dom = document.getElementById&&!document.all; + e=dom? e : event; + + if (!dom) { + e.cancelBubble = true; + e.returnValue = false; + } + + obj =dom? e.target : e.srcElement + + var asset = manager.getAsset(obj); + + manager.display.contextMenu.owner = asset; + manager.displayContextMenu(e.clientX,e.clientY); + + return false; +} + +function EventManager_assetMouseDown(e) { + var dom = document.getElementById&&!document.all; + e=dom? e : event; + + if (e.button==2) { + //this is a hack to get the context menu stuff to work right in IE + if (!dom) { + e.cancelBubble = true; + e.returnValue = false; + } + } + + return false; +} + +function EventManager_documentMouseDown(e) { + var dom = document.getElementById&&!document.all; + e=dom? e : event; + obj =dom? e.target : e.srcElement + + var asset = manager.getAsset(obj); + + if (asset) { + + if (e.button != 2 || (e.button == 2 && !manager.display.isSelected(asset))) { + manager.display.selectAsset(asset); + } + if (e.button != 2) { + manager.display.dragStart(asset.div,e.clientX,e.clientY); + return; + } + } + + if (e.button != 2) { + manager.display.dragStart(obj,e.clientX,e.clientY); + } + return true; +} + +function EventManager_documentMouseUp(e) { + var dom = document.getElementById&&!document.all; + e=dom? e : event; + obj =dom? e.target : e.srcElement + //obj = manager.tools.getActivity(obj); + + var asset = manager.getAsset(obj); + + + if (manager.display.contextMenu.owner && (!asset || asset.assetId != manager.display.contextMenu.owner.assetId)) { + manager.display.contextMenu.hide(); + } + manager.display.dragStop(); + //if (obj) manager.display.selectActivity(obj); + + return false; +} + +function EventManager_documentMouseMove(e) { + var dom = document.getElementById&&!document.all; + e=dom? e : event; + manager.display.move(e); + return false; +} + +function EventManager_gridHeaderClick(e) { + var dom = document.getElementById&&!document.all; + var e=dom? e : event; + var obj =dom? e.target : e.srcElement + + var parts = obj.id.split("."); + + AssetManager_getManager().sortGrid(parts[parts.length-1]); +} diff --git a/www/extras/assetManager/Grid.js b/www/extras/assetManager/Grid.js new file mode 100644 index 000000000..48ab121d4 --- /dev/null +++ b/www/extras/assetManager/Grid.js @@ -0,0 +1,86 @@ + + +function Grid(headerArray, dataArray,gridId) { + this.headerArray = headerArray; + this.dataArray = dataArray; + this.render = Grid_render; + this.sortColumn = Grid_sortColumn; + this.gridId = gridId; + this.attachEvents = Grid_attachEvents; + //this.attachRowProperty = Grid_attachRowProperty; + //this.attachRowEvent = Grid_attachRowEvent; + +} + +function Grid_render(div) { + + +// obj = document.getElementById(key); +// obj.ondblclick=AssetManager_getManager().eventManager.activityDoubleClick; + // obj.oncontextmenu=AssetManager_getManager().eventManager.activityRightClick; + // obj.onmousedown=AssetManager_getManager().eventManager.activityMouseDown; + + + var gridStr = ''; + var eventStr=''; + var id = ""; + + + for (i=0;i' + this.headerArray[i] + ''; + eventStr += 'document.getElementById("' + id + '").onclick=Grid_headerClicked;'; + } + + gridStr+= ''; +//['Rank','Title','Type','Last Updated','Size']; + for (i=0;i'; + eventStr += 'document.getElementById("' + id + '").onclick=Grid_rowClicked;'; + eventStr += 'document.getElementById("' + id + '").onmouseover=Grid_rowMouseOver;'; + eventStr += 'document.getElementById("' + id + '").onmouseout=Grid_rowMouseOut;'; + eventStr += 'document.getElementById("' + id + '").ondblclick=Grid_rowDoubleClick;'; + eventStr += 'document.getElementById("' + id + '").onmousedown=Grid_rowMouseDown;'; + eventStr += 'document.getElementById("' + id + '").oncontextmenu=Grid_rowContextMenu;'; + + for (k=0;k' + this.dataArray[i][k] + ''; + } + } + gridStr+=''; + + gridStr += '
'; + + div.innerHTML = grid(); + + +} + +function Grid_rowClicked(e) { + +} + +function Grid_rowMouseOver(e) { + +} + +function Grid_rowMouseOut(e) { + +} + +function Grid_rowDoubleClick(e) { + +} + +function Grid_rowMouseDown(e) { + +} + +function Grid_rowContextMenu(e) { + +} + +function Grid_sortColumn() { + +} \ No newline at end of file diff --git a/www/extras/assetManager/Tools.js b/www/extras/assetManager/Tools.js new file mode 100644 index 000000000..605c98c95 --- /dev/null +++ b/www/extras/assetManager/Tools.js @@ -0,0 +1,147 @@ + +//--------Constructor-------------------- + +function Tools() { + this.dom=document.getElementById&&!document.all; + this.topLevelElement=this.dom? "HTML" : "BODY" + this.getActivity = Tools_getActivity; + this.debug = Tools_debug; + this.debugEnabled = false; + this.getElementChildren = Tools_getElementChildren; + this.showObject = Tools_showObject; + this.hideObject = Tools_hideObject; + this.cancelEvent = Tools_cancelEvent; + this.setCookie = Tools_setCookie; + this.getCookie = Tools_getCookie; + this.deleteCookie = Tools_deleteCookie; + this.addParamDelimiter = Tools_addParamDelimiter; + this.getHostName = Tools_getHostName; + document.write(''); + + this.debugArea = document.getElementById("tools_debugArea"); +} + +function Tools_getHostName(url) { + debug(url); + var serverParts = url.split("/"); + return serverParts[2]; +} + +//returns a ? or & based on contents of url +function Tools_addParamDelimiter(url) { + + + if (url.indexOf("?") == -1) { + return url + "?"; + }else { + return url + "&"; + } +} + + +//returns a ? or & based on contents of url +function Tools_addParamDelimiter(url) { + + var serverParts = location.href.split("/"); + var server = serverParts[0] + "//" +serverParts[2]; + + if (url.indexOf("?") == -1) { + return server + url + "?"; + }else { + return server + url + "&"; + } +} + +//---------Method Implementations ------------- + +//utility method to cancle a build in event. +//ex. Assume you do not want a link to work. +// var tools = new Tools(); +// document.getElementById("linkID").onclick=tools.cancleEvent +function Tools_cancelEvent() { + return false; +} + +//recurses up a tree to get any activity of className activity +function Tools_getActivity(obj) { + var parts = obj.id.split("."); + return manager.assets[parts[0] + "." + parts[1] + "." + parts[2]]; +} + +//shows a positionable element by toggling the style display property +function Tools_showObject(obj) { + if (obj) { + obj.style.visibility="visible"; + obj.style.display="block"; + } +} + +//hides a positionable element by toggling the style display property +function Tools_hideObject(obj) { + if (obj) { + obj.style.display="none"; + } +} + +//gets the element children of a dom object +function Tools_getElementChildren(obj) { + var myArray= new Array(); + mycnt = 0; + for (i=0;i0f#JE&t*IEY0oOf7_0#WnHc;4 literal 0 HcmV?d00001