--- loncom/html/res/adm/pages/bookmarkmenu/bookmarklib.js 2000/11/07 17:25:32 1.11 +++ loncom/html/res/adm/pages/bookmarkmenu/bookmarklib.js 2001/12/19 17:21:28 1.19 @@ -1,287 +1,511 @@ +// The LearningOnline Network with CAPA // bookmarklib.js +// +// $Id: bookmarklib.js,v 1.19 2001/12/19 17:21:28 albertel Exp $ +// +// Copyright Michigan State University Board of Trustees +// +// This file is part of the LearningOnline Network with CAPA (LON-CAPA). +// +// LON-CAPA is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// LON-CAPA is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with LON-CAPA; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// Functions combined with the HTML code in admbookmarks.pm -// and code in bookmarkmenu_toolbar.html +// /home/httpd/html/adm/gpl.txt // +// http://www.lon-capa.org/ +// +// +// This is a rewritten version of bookmarklib.js +// +// Functions to be combined with the HTML code found in +// admbookmarks.pm. The combination will provide a complete +// functionality for the bookmarkmenu in accordance to defined +// requirements. +// +// For further information and documentation regarding this program, +// please refer to bookmarkmenu_OOD.txt, the design documentation for +// bookmarkmenu. +// +// +// +// The perl module admbookmarks.pm interacts with this library by +// generating a page that includes bookmarklib.js and a JavaScript +// function initializeTree() that builds the the tree using successive +// newLink() and newFolder() calls and one cache=new newCache() call. +// The entire newLink()/newFolder() succession is the string that is +// stored in the userspace on Lon-Capa as bookmarks. +// +// +// Created on: 12-28-2000 by Benjamin Tyszka +// Edited: 12-29-2000 by Benjamin Tyszka +// mm-dd-yyyy by Xxxxxxxx Xxxxxx + + +//clienttitle="Enter title here";//debug +//clienthref="Enter url here"; //debug + +//function ugh_oh( msg, url, ln ) { +// alert("Error: "+msg+" in "+url+" at line: "+ln); +// return true; +//} + +//alert("Does alert even work?"); + +//window.onerror=ugh_oh; +//this.onerror=ugh_oh; -//------------------------------------------------------------------------------- -// Here are all of the bookmark methods: -//------------------------------------------------------------------------------- - -//-------------------------------------------------------Adds a link to an object -function addLink(name, link, address, position) { - this.lname = name; - this.link = link; - this.address = address; - this.position = position; - this.state = "link"; - this.icon = "/res/adm/pages/bookmarkmenu/link.gif"; - this.pressed = "/res/adm/pages/bookmarkmenu/link_pressed.gif"; - this.hover = hover; - this.remove = remove - this.exists = true; -} - -//-----------------------------------------------------Adds a folder to an object -function addFolder(name, size, address) { - this.p = new Array(); //BEN got rid of size in Array Agument - // Currently SIZE doesn't matter - // This probably works cross-browser - this.lname = name; - this.address = address; - this.state = "opened"; - this.icon = "/res/adm/pages/bookmarkmenu/folder_opened.gif"; - this.pressed = "/res/adm/pages/bookmarkmenu/folder_opened_pressed.gif"; - this.swapState = swapState; - this.clickFolder = clickFolder; - this.clickLink = clickLink; - this.hover = hover; - this.remove = remove; - this.bump = bump; - this.insertLink = insertLink; - this.insertFolder = insertFolder; - this.exists = true; + +//--------------------------------------------------------------------- +// Tree object +//--------------------------------------------------------------------- +// Basis for user's bookmarks and folders - All properties and methods +// pertaining to a user in general are found here. Refer to +// bookmarkmenu_OOD.txt for further documenation. +function newTree() { + this.redraw = redraw; + this.treeSave = treeSave; + this.bookmarks = new newFolder("bookmarks",true); + this.cache = new newCache(); +} + +//------------------------------------------refresh folder/link display +function redraw() { + image_num = -1; // reset to before (-1 not 0) the first image + with(frames[4].document) { + open(); //--------for 'compliant' browsers + clear(); //----------for Mozilla (Netscape6) + write("\n" ); + write("\n" ); + write("\n" ); + } +// bendebugger=window.open('','HTML_DUMP','scrollbars'); //debug +// bendebugger.document.clear(); //debug +// bendebugger.document.write('TEXT DOCUMENT: NONE OF THE TAGS SHOULD WORK\n'); //debug + var objPath="top.tree.bookmarks"; + depth=0; + for(var i=0;i\n\n"); + top.frames[4].document.close(); +// bendebugger.document.close(); //debug +// return false; //debug +} + +//-----------------generate 'save-string' and submit to admbookmarks.pm +function treeSave() { + saveStrng=""; + var objPath="window.tree.bookmarks"; + var n=0; + for(var i=0;i\n"+saveStrng); //debug +// bendebugger.document.close(); +// END OF DEBUG STUFF +// NOW SUBMIT THE STRING TO PERL MODULE -CHECK ADDRESS CHECK ADDRESS + top.frames[7].document.saveBookmarks.hiddenbookmarks.value=saveStrng; + top.frames[7].document.saveBookmarks.submit; } -//-----------------------------------------Swaps folder state from open to closed -function swapState() { - if (this.state == "closed") { - this.state = "opened"; - this.icon = "/res/adm/pages/bookmarkmenu/folder_opened.gif"; - this.pressed = "/res/adm/pages/bookmarkmenu/folder_opened_pressed.gif"; - } else { - this.state = "closed"; - this.icon = "/res/adm/pages/bookmarkmenu/folder_closed.gif"; - this.pressed = "/res/adm/pages/bookmarkmenu/folder_closed_pressed.gif"; - } - redrawTree(); - } - -//------------------------------------------swaps the dragged icon into the image -function hover( object ) { - if ( dragCache != "" ) { - object.src = this.pressed; - if (lastDrug != -1) { - parent.frames[4].document.images[lastDrug].src = lastIcon; - } - lastIcon = this.icon; - lastDrug = object.name; - } -} - -//------------------------------------------------------The click on link method -function clickLink( object, position ) { - if (dragCache=="") { //---------'pick up' the icon - dragCache=object.src; - lastIcon=this.p[position].icon; - lastDrug=object.name; - addressCache=new addLink(this.p[position].lname,this.p[position].link,this.p[position].address,position); - this.p[position].remove(); - } else { //--------'put down' the icon - dragCache=""; - if (addressCache.state=="link") { //------differently if a link - this.insertLink(position); - } else { //--------------than a folder - this.insertFolder(position); - } - redrawTree(); - } -} - -//-----------------------------------------------------The click on Folder method -function clickFolder( object ) { - if (dragCache=="") { //---------'pick up' the icon - dragCache=object.src; - lastIcon=this.icon; - lastDrug=object.name; - addressCache=new addFolder(this.lname,this.p.length,this.address); //ben debug see sheet - shiftFolder(this,addressCache,0); //this is a whole new line - this.remove(); - } else { //--------'put down' the icon - dragCache = ""; - if ( addressCache.state == "link" ) { //-----place link into folder - this.insertLink(0); - } else { //---place folder into folder - this.insertFolder(0); - } - redrawTree(); - } -} - -//---------Folder method to place link in middle of other links (should simplify code) -function insertLink( position ) { - this.bump(position); - this.p[position]=new addLink(addressCache.lname,addressCache.link,this.address, position); -} - - -//---------------------------Recursive folder Method to bump items up one to make room -function bump(position) { - // long term: make recursive - var i=this.p.length; // First, create a new spot at the top. - if (i>0) { // Does folder have any elements? - if (this.p[i-1].state=="link") { - this.p[i]=new addLink(this.p[i-1].lname,this.p[i-1].link,this.address,i); - } else { - this.p[i]=new addFolder(this.p[i-1].lname,this.p[i-1].p.length,this.address+".p["+i+"]"); - } - this.p[i].exists=this.p[i-1].exists; // preserve existance - i--; // Second, shift others up one - while (i >= position+1 ) { - if ( this.p[i-1].state == "link" ) { - this.p[ i ] = new addLink( this.p[ i-1 ].lname, this.p[i-1].link, this.p[i-1].address, i); - } else { - this.p[ i ] = new addFolder( this.p[ i-1 ].lname, this.p[i-1].p.length, this.address+".p["+ i +"]" ); - // move all of the inner folder stuff - shiftFolder(this.p[i-1],this,i); - } - this.p[i].exists=this.p[i-1].exists; // ben debug this just added - i--; - } + +//--------------------------------------------------------------------- +// Folder object +//--------------------------------------------------------------------- +// Pertains to a userdefined folder. Refer to +// bookmarkmenu_OOD.txt for further documentation. +function newFolder(name,opened) { + // Folder Properties + this.state = "folder"; + this.name = name; + this.opened = opened; + if (this.opened) { + this.icon = "/res/adm/pages/bookmarkmenu/folder_open.gif"; + } else { + this.icon = "/res/adm/pages/bookmarkmenu/folder_close.gif"; } + this.exists = true; + this.highlited = false; + this.p = new Array(); // ---- ordered folder contents + // Folder Methods + this.addLink = addLink; + this.addFolder = addFolder; + this.insertLink = insertLink; + this.swapState = swapState; + this.moveTo = moveTo; + this.bump = bump; + this.folderEdit = folderEdit; + this.folderDraw = folderDraw; + this.folderWriteSave = folderWriteSave; + this.folderHover = folderHover; + this.folderClick = folderClick; + this.linkClick = linkClick;//--Folder method, because of 'bump' +} + +//------------------------------Add link to last position within folder +function addLink(name,url) { +// if (this.length!=0) { + var location=this.p.length; +// alert("THE ADD link:"+name+", location:"+location); +// } + this.p[location]=new newLink(name,url); +// var location=this.length+1; +// tree.treeRedraw(); //commented so that we can make tree. one more below +} + +//----------------------Add empty folder to last position within folder +function addFolder(name,opened) { +// if (this.length!=0) { + var location=this.p.length; +// alert("THE ADD FOLDER:"+name+", location:"+location); +// } + this.p[location]=new newFolder(name,opened); +// var location=this.length+1; +// tree.treeRedraw(); +} + +//----------------------------------------Places folder within a folder +function insertLink(location,name,url) { + this.bump(location); + this.p[location]=new newLink(name,url); + tree.redraw(); } -//-----------------------------------------------------------Opens the page -function clickOnBookmark(url) { - open(url,opener.clientwindow.name); // <------THIS IS REAL VERSION -// opener.open(url); // <------THIS IS FAKE VERSION +//----------------------------------Swap folder between open and closed +function swapState() { + this.opened=(!this.opened); + if (this.opened) { + this.icon = "/res/adm/pages/bookmarkmenu/folder_open.gif"; + } else { + this.icon = "/res/adm/pages/bookmarkmenu/folder_close.gif"; + } + top.tree.redraw(); } +//-------------------recursive, Moves folder and contents to new object +// Don't forget to 'bump' before calling moveTo! +function moveTo(object1) { + object1=new newFolder(this.name,this.opened); + for (var i=0;i=location;i--) { + if (this.p[i].exists) { //saves time by not moving non-existing items + if (this.p[i].state=="folder") { + this.p[i+1]=this.p[i].moveTo(this.p[i+1]); + } else { + var name=this.p[i].name; + var url =this.p[i].url; + this.p[i+1]=new newLink(name,url); + this.p[i+1].exists=this.p[i].exists; + } +// this.p[i].exists=false; // may not be neccessary if I'm careful + } else { + if (i!=this.p.length-1) { + this.p[i+1].exists=false; + } + } + } +} +function folderEdit() { -//------------------------------------------------------------------------- -// Now we have standard (non-method) functions -//------------------------------------------------------------------------- - - -//---------------------------------shifts contents of folder up one position -function shiftFolder(object1, object2, n) { - object2.p[n] = new addFolder(object1.lname,object1.length,object2.address+".p["+n+"]"); - for (var i=0; i" ); + } +// with (bendebugger.document) { +// write("

|-tr-||-td-||-a href=JavaScript:"+objPath+".swapState();-|\n" ); +// write("|-img src=/res/adm/pages/bookmarkmenu/folder_pointer_opened.gif border=0-||-/a-|\n" ); +// write("|-a href='JavaScript:"+objPath+".folderClick();'\n" ); +// write("onmouseover="+objPath+".folderHover("+image_num+");-|\n" ); +// write("|-img src=/res/adm/pages/bookmarkmenu/pix.gif height=25 width="+20*(depth)+" border=0-||-/a-|\n"); +// write("|-a href='javaScript:"+objPath+".folderClick();'" ); +// write("onmouseover='"+objPath+".folderHover("+image_num+");'-|\n" ); +// write("|-img src="+this.icon+" border=0-||-/a-|\n" ); +// write( this.name ); +// write("|-/td-||-/tr-|\n" ); +// } //whole thing is a debug + for(var i=0;i

" ); + } +// with (bendebugger.document) { +// write("

|-tr-||-td-||-a href=JavaScript:"+objPath+".swapState();-|\n" ); +// write("|-img src=/res/adm/pages/bookmarkmenu/folder_pointer_closed.gif border=0-||-/a-|\n" ); +// write("|-a href='JavaScript:"+objPath+".folderClick();'" ); +// write(" onmouseover="+objPath+".folderHover("+image_num+");-|\n" ); +// write("|-img src=/res/adm/pages/bookmarkmenu/pix.gif height=25 width="+20*(depth)+" border=0-||-/a-|\n"); +// write("|-a href=JavaScript:"+objPath+".folderClick();-|\n" ); +// write("|-img src="+this.icon+" border=0-||-/a-|\n" ); +// write( this.name ); +// write("|-/td-||-/tr-|\n" ); +// } + } +} -//--------Method to place folder in middle of other links (this simplifies code) -function insertFolder(position) { - this.bump(position); - shiftFolder(addressCache.p[0],this,position); //ben debug was addressCache.p[0] +//-------------generate folder save string and recurse through contents +function folderWriteSave(objPath,pos) { + saveStrng += objPath+".addFolder('"+this.name+"',"+this.opened+");\n"; + var n=0; //-----alt. counter doesn't count non-exists links/marks +// alert(saveStrng+" with a length: "+this.p.length); //DEBUG + for(var i=0;i
'; - instr+='Address:

'; - instr+='

'; - instr+=''; - instr+=''; - instr+='
" ); + write("" ); + write("" ); + write(""); + write("" ); + write("" ); + write( this.name+"
" ); + write("" ); + write("" ); + write(""); + write("" ); + write("" ); + write( this.name+"
'; - instr+=''; - savedoc.write(instr); - savedoc.close(); + +//--------------------------------------------------------------------- +// Link object +//--------------------------------------------------------------------- +// Pertains to a userdefined link. Refer to +// bookmarkmenu_OOD.txt for further documentation. +function newLink(name, url) { + // Link Properties + this.state = "link"; + this.name = name; + this.url = url; + this.exists = true; + this.highlited = false; + this.icon = "/res/adm/pages/bookmarkmenu/link.gif"; + // Link Methods + this.linkGoto = linkGoto; + this.linkEdit = linkEdit; + this.linkDraw = linkDraw; + this.linkWriteSave = linkWriteSave; + this.linkHover = linkHover; +// this.linkClick = linkClick; --not a link method, now a folder method +} + +function linkGoto() { + self.opener.clientwindow.location.href=this.url; +} + +function linkEdit() { + } -//--------------------------------------Add the just-named link at end of bookmarks -function addNewLink(title,address) { - nextPosition=bookmarkpal.bookmarks.p.length; - bookmarkpal.bookmarks.p[nextPosition]=new addLink(title,address,"bookmarks",nextPosition); - add_link.close(); - redrawTree(); -} - -//-----------------------Add the just-named link and then position within bookmarks -function addNewLink_b(title,address) { - dragCache="/res/adm/pages/bookmarkmenu/folder_opened.gif"; - lastIcon="/res/adm/pages/bookmarkmenu/folder_opened.gif"; - lastDrug="-1"; - addressCache=new addLink(title,address,"doesnotmatter",1); - add_link.close(); -} - -//----------------------------------------------------------------Add new Folder -function newFolder() { - add_link=window.open('','Link','width=360,height=165,scrollbars=0'); - savedoc=add_link.document; - var instr='New Folder'; - instr+='
'; - instr+=''; - instr+='
'; - instr+='Folder Name:

'; - instr+='
'; - instr+=''; - instr+=''; - instr+='
'; - instr+=''; - savedoc.write(instr); - savedoc.close(); +//------------------------------------generate HTML for individual link +function linkDraw(depth,objPath,pstn) { + var tmpObjPath = objPath+".p["+pstn+"]"; + image_num+=2; + with (parent.frames[4].document) { + write(""); + write(""); + write(""); + write(""); + write(""); + write(this.name+"" ); + } +// with (bendebugger.document) { +// write("

|-tr-||-td-||-a href='javaScript:"+objPath+".linkClick("+pstn+");'\n" ); +// write(" onmouseover='"+objPath+".p["+pstn+"].linkHover("+image_num+");'-|\n"); +// write("|-img src=/res/adm/pages/bookmarkmenu/pix.gif height=25 width="+(20*(depth)+15)+" border=0-||-/a-|\n"); +// write("|-a href='javaScript:"+objPath+".linkClick("+pstn+");'"); +// write(" onmouseover='"+objPath+".p["+pstn+"].linkHover("+image_num+");'-|\n"); +// write("|-img src=/res/adm/pages/bookmarkmenu/link.gif border=0-||-/a-|"); //this.icon replaced with link.gif +// write("|-a href='javaScript:"+objPath+".p["+pstn+"].linkGoto();'" ); +// write(" onmouseover='"+objPath+".p["+pstn+"].linkHover("+image_num+");'-|\n"); +// write(this.name+"|-/td-||-/tr-|\n" ); +// } //debug +} + +//---------------------------generate link information for saving links +function linkWriteSave(objPath) { + saveStrng+= objPath+".addLink('"+this.name+"','"+this.url+"');\n"; +} + +//--------------------------swaps icons around when hovering link image +function linkHover(img_num) { + if (window.tree.cache.isLoaded) { + if (window.tree.cache.lastImg==-2) { + frames[7].document.images[1].src='/res/adm/pages/bookmarkmenu/folder_trash.gif'; + } else { + frames[4].document.images[window.tree.cache.lastImg].src=window.tree.cache.icon; + } + window.tree.cache.lastImg=img_num; + window.tree.cache.icon=this.icon; + frames[4].document.images[img_num].src="/res/adm/pages/bookmarkmenu/link_drag.gif"; + } } -//----------------------Add the just-named folder at the end of the bookmarks list -function addNewFolder(title) { - nextPosition=bookmarkpal.bookmarks.p.length; - nextAddress="bookmarks.p["+nextPosition+"]"; - bookmarkpal.bookmarks.p[nextPosition]=new addFolder(title,1,nextAddress); - add_link.close(); - redrawTree(); + +//--------------------------------------------------------------------- +// Cache object +//--------------------------------------------------------------------- +// Contains everything related to dragging/dropping folers and links. +// Refer to bookmarkmenu_OOD.txt for further documentation. +function newCache() { + // Cache Properties + this.isLoaded = false; + this.state = ""; + this.lastImg = -1; //I don't know if I can do this yet. + //It doesn't seem to cause errors. + this.Icon = ""; + this.folder = new newFolder('cache',false); + // Cache Methods + this.cacheLoad = cacheLoad; + this.cacheEmpty = cacheEmpty; +} + +//----------------------------------------------Load cache for dragging +function cacheLoad(object1) { + if (object1.state=="folder") { +//alert('cacheLoad11 '+object1.name+' is now: '+this.folder.name); + frames[7].document.images[0].src = '/res/adm/pages/bookmarkmenu/folder_anim.gif'; + object2=object1.moveTo(this.folder); + this.folder=object2; +//alert('cacheLoad22 '+object1.name+' is now: '+this.folder.name); + } else { + frames[7].document.images[0].src = '/res/adm/pages/bookmarkmenu/link_anim.gif'; + this.folder = new newLink(object1.name,object1.url); + } + this.isLoaded = true; + object1.exists = false; } -//---------------------------------Add the just-named folder and then position it -function addNewFolder_b(title) { - dragCache="/res/adm/pages/bookmarkmenu/folder_opened.gif"; - lastIcon="/res/adm/pages/bookmarkmenu/folder_opened.gif"; - lastDrug="-1"; - addressCache=new addFolder("doesnotmatter",1,"doesnotmatter"); - addressCache.p[0]=new addFolder(title,1,"doesnotmatter"); - addressCache.p[0].exists=true; //this and line above are debug - add_link.close(); +//---------------------------Places Cache's contents in front of a link +function cacheEmpty(object1,position) { + object1.bump(position); + if (this.folder.state=="folder") { +//alert('cacheEmpty11 is emptying named: '+this.folder.name+' to: '+object1.p[position].name); + object2=this.folder.moveTo(object1.p[position]); + object1.p[position]=object2; +//alert('cacheEmpty22 is emptying named: '+this.folder.name+' to:'+object1.p[position].name); + } else { + object1.p[position] = new newLink(this.folder.name,this.folder.url); + } + frames[7].document.images[0].src = '/res/adm/pages/bookmarkmenu/folder_static.gif'; + this.isLoaded = false; + this.lastImg = -1; //I don't know if I can do this yet. + //It doesn't seem to cause errors + tree.redraw(); } @@ -289,120 +513,108 @@ function addNewFolder_b(title) { +//--------------------------------------------------------------------- +// Functions not associated with an object +//--------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// The following are construction functions. -//----------------------------------------------------------------------------- - -//--------------------------------------------------generate the Tree HTML code -function drawTree(depth, folder) { - for (var i=0; i=0) { - drawTree(depth+1,folder[i].p); - } - } - } +function clickTrash() { + if (tree.cache.isLoaded) { + tree.cache.isLoaded = false; + tree.cache.lastImg = -1; // I don't know if this works yet + tree.redraw(); + frames[7].document.images[0].src = '/res/adm/pages/bookmarkmenu/folder_static.gif'; + frames[7].document.images[1].src = '/res/adm/pages/bookmarkmenu/folder_trash.gif'; } } -//----------------------------------------Writes HTML code for individual folder -function drawFolder(depth, folder) { - parent.frames[4].document.write("
"); - parent.frames[4].document.write(""); - image_num++; - if ( depth != 1 ) { - image_num++; - parent.frames[4].document.write(""); - } - parent.frames[4].document.write(""); - image_num++; - parent.frames[4].document.write(" "+folder.lname+"
"); -} - -//--------------------------------------Writes HTML code for individual link -function drawLink(depth, folder) { - parent.frames[4].document.write("
"); - image_num++; - parent.frames[4].document.write(""); - - parent.frames[4].document.write(""); - image_num++; - parent.frames[4].document.write(""+folder.lname+"
"); -} - -//--------------------Calls Build and draws functions. This function also takes -// care of housekeeping -function initializeTree() { -// bookmarkpal = new buildUserTree(); - redrawTree(); -} - -//--------------------------------Redraws screen without initiallizing anything -function redrawTree() { - parent.frames[4].document.clear(); //---although depreciated, mozilla still needs it - parent.frames[4].document.open(); - image_num=0; - parent.frames[4].document.write(""); - drawTree(1,bookmarkpal.bookmarks.p); //----giving error: bookmarkpal not defined - parent.frames[4].document.write(""); -} - -//----------------------------------------------------------------------------- -// Saves bookmarks by building and then 'put'ing the string that generates the -// bookmarks -//----------------------------------------------------------------------------- - -//--------------recovers old bookmarks this is a debug function remove it later -function recover() { - parent.frames[7].document.saveBookmarks.hiddenbookmarks.value='recover'; - parent.frames[7].document.saveBookmarks.submit(); +function hoverTrash() { + if (window.tree.cache.isLoaded) { + frames[4].document.images[window.tree.cache.lastImg].src=window.tree.cache.icon; + window.tree.cache.lastImg=-2; + window.tree.cache.icon='/res/adm/pages/bookmarkmenu/folder_trash.gif'; + frames[7].document.images[1].src = '/res/adm/pages/bookmarkmenu/folder_trash_hover.gif'; + } } -//----------------------------------------------------------starts save process -function save() { -// parent.frames[4].document.clear(); // debug -// parent.frames[4].document.write("

Debug: Beginning save process...

"); // debug -// saveVar="this.bookmarks=new addFolder(\"Stuff\","+bookmarkpal.bookmarks.p.length+",\"bookmarks\");\n"; - saveVar=" "; - saveTree("bookmarks",bookmarkpal.bookmarks.p); -// parent.frames[4].document.write("

writing variable...

"+saveVar+"

...done

"); // debug - parent.frames[7].document.saveBookmarks.hiddenbookmarks.value=saveVar; - return true; +//-----------------------------------------Generates HTML in each frame +function buildBookmarkMenu() { + var frmHTML1 = "\n\n\n"; + frames[0].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/ul_corner.gif"+frmHTML2 ); + frames[1].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/upper_bar.gif"+frmHTML2 ); + frames[2].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/ur_corner.gif"+frmHTML2 ); + frames[3].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/left_bar.gif"+frmHTML2 ); + frames[5].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/right_bar.gif"+frmHTML2 ); + frames[6].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/left_bar.gif"+frmHTML2 ); + frames[8].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/right_bar.gif"+frmHTML2 ); + frames[9].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/ll_corner.gif"+frmHTML2 ); + frames[10].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/lower_bar.gif"+frmHTML2); + frames[11].document.write(frmHTML1+"/res/adm/pages/bookmarkmenu/lr_corner.gif"+frmHTML2); } -//---------------------------------------------------------generate save string -function saveTree(depth_string,folder) { - var n=0; // n renumbers links because - for (var i=0; i=0) { - saveTree(depth_string+".p["+n+"]",folder[i].p); - } - } - n++; - } + +//---------------------------- +function queryNewLink() { + add_link=window.open('','Link','width=360,height=165'); + clienthref="[ENTER ADDRESS HERE]"; + clienttitle="[ENTER NAME HERE]"; +// this.onerror=ugh_oh; // this doesn't seem to work properly +// clienthref=this.opener.clientwindow.window.location.pathname; +// clienttitle=this.opener.clientwindow.title; + with(add_link.document) { + open(); + clear(); + write("
" ); + write("
\n"); + write("" ); + write("
Link Name:
" ); + write("
Address:
" ); + write(""); + write("
" ); + write("
" ); + close(); } } - -//-------------------------Writes javascript code for generating individual folder -function saveFolder(depth_string, folder) { - saveVar+="this."+depth_string+"=new addFolder(\""+folder.lname+"\","+folder.p.length+",\""+depth_string+"\");\n"; +//---------------------------- +function queryNewFolder() { + add_link=window.open('','Link','width=360,height=165'); + with(add_link.document) { + open(); + clear(); + write("
" ); + write("
\n"); + write("" ); + write("
Folder Name:
" ); + write("" ); + write("
" ); + write("
" ); + close(); + } } +//--------------------------- +function addNewLink(title,address) { + tree.bookmarks.addLink(title,address); + add_link.close(); + tree.redraw(); + return true; +} -//-------------------------Writes javascript code for generating individual link -function saveLink(depth_string,link,newpos) { - saveVar+="this."+depth_string+".p["+newpos+"]=new addLink(\""+link.lname+"\",\""+link.link+"\",\""+depth_string+"\","+newpos+");\n"; +//--------------------------- +function addNewFolder(title) { + tree.bookmarks.addFolder(title); + add_link.close(); + tree.redraw(); + return true; } + +