Annotation of loncom/html/res/adm/pages/bookmarkmenu/bookmarklib.js, revision 1.1
1.1 ! tyszkabe 1: // bookmarklib.js
! 2: //
! 3: // Functions used for bookmarkpal
! 4: //
! 5:
! 6:
! 7: //-------------------------------------------------------------------------------
! 8: // Here are all of the bookmark methods:
! 9: //-------------------------------------------------------------------------------
! 10:
! 11: //-------------------------------------------------------Adds a link to an object
! 12: function addLink(name, link, address, position) {
! 13: this.lname = name;
! 14: this.link = link;
! 15: this.address = address;
! 16: this.position = position;
! 17: this.state = "link";
! 18: this.icon = "link.gif";
! 19: this.pressed = "link_pressed.gif";
! 20: this.hover = hover;
! 21: this.remove = remove
! 22: this.exists = true;
! 23: }
! 24:
! 25: //-----------------------------------------------------Adds a folder to an object
! 26: function addFolder(name, size, address) {
! 27: this.p = new Array(size);
! 28: this.lname = name;
! 29: this.address = address;
! 30: this.state = "opened";
! 31: this.icon = "folder_opened.gif";
! 32: this.pressed = "folder_opened_pressed.gif";
! 33: this.swapState = swapState;
! 34: this.clickFolder = clickFolder;
! 35: this.clickLink = clickLink;
! 36: this.hover = hover;
! 37: this.remove = remove;
! 38: this.bump = bump;
! 39: this.insertLink = insertLink;
! 40: this.insertFolder = insertFolder;
! 41: this.exists = true;
! 42: }
! 43:
! 44: //-----------------------------------------Swaps folder state from open to closed
! 45: function swapState() {
! 46: if (this.state == "closed") {
! 47: this.state = "opened";
! 48: this.icon = "folder_opened.gif";
! 49: this.pressed = "folder_opened_pressed.gif";
! 50: } else {
! 51: this.state = "closed";
! 52: this.icon = "folder_closed.gif";
! 53: this.pressed = "folder_closed_pressed.gif";
! 54: }
! 55: redrawTree(1, bookmarkpal.bookmarks.p);
! 56: }
! 57:
! 58: //------------------------------------------swaps the dragged icon into the image
! 59: function hover( object ) {
! 60: if ( dragCache != "" ) {
! 61: object.src = this.pressed;
! 62: parent.frames[4].document.images[lastDrug].src = lastIcon;
! 63: lastIcon = this.icon;
! 64: lastDrug = object.name;
! 65: }
! 66: }
! 67:
! 68: //------------------------------------------------------The click on link method
! 69: function clickLink( object, position ) {
! 70: if (dragCache=="") { //---------'pick up' the icon
! 71: dragCache=object.src;
! 72: lastIcon=this.p[position].icon;
! 73: lastDrug=object.name;
! 74: addressCache=new addLink(this.p[position].lname,this.p[position].link,this.p[position].address,position);
! 75: this.p[position].remove();
! 76: } else { //--------'put down' the icon
! 77: dragCache="";
! 78: if ( addressCache.state == "link" ) { //------differently if a link
! 79: this.insertLink( position );
! 80: } else { //--------------than a folder
! 81: this.insertFolder( position );
! 82: }
! 83: redrawTree();
! 84: }
! 85: }
! 86:
! 87: //-----------------------------------------------------The click on Folder method
! 88: function clickFolder( object ) {
! 89: if (dragCache=="") { //---------'pick up' the icon
! 90: dragCache=object.src;
! 91: lastIcon=this.icon;
! 92: lastDrug=object.name;
! 93: addressCache=new addFolder("lame_folder",2,"doesnotmatter"); //used to be (this.lname,this.p.length+1,this.address)
! 94: shiftFolder(this,addressCache,1); //this is a whole new line
! 95: this.remove();
! 96: } else { //--------'put down' the icon
! 97: dragCache = "";
! 98: if ( addressCache.state == "link" ) { //-----place link into folder
! 99: this.insertLink( 1 );
! 100: // this.p[ this.p.length ] = new addLink( addressCache.lname, addressCache.link, this.address, this.p.length );
! 101: } else { //---place folder into folder
! 102: this.insertFolder( 1 );
! 103: // this.p[ this.p.length ] = new addFolder( addressCache.lname, addressCache.p.length, this.address+".p["+this.p.length+"]" );
! 104: // this.p[ this.p.length ].p = addressCache.p;
! 105: }
! 106: redrawTree();
! 107: }
! 108: }
! 109:
! 110: //---------Folder method to place link in middle of other links (should simplify code)
! 111: function insertLink( position ) {
! 112: this.bump( position );
! 113: this.p[ position ] = new addLink( addressCache.lname, addressCache.link, this.address, position );
! 114: }
! 115:
! 116:
! 117: //---------------------------Recursive folder Method to bump items up one to make room
! 118: // for new item. Currently, bump doesn't always work.
! 119: function bump( position ) {
! 120: // ORIGINAL RECURSIVE VERSION has short-comings but may work better because of 'not exists'
! 121: //
! 122: // if ( this.length >= position ) {
! 123: // this.bump( position + 1 );
! 124: // }
! 125: // position;
! 126: // this.p[ position + 1 ] = this.p[position ];
! 127: //
! 128: // NON RECURSIVE of the same thing (I'll probably stick with this).
! 129: // I can combine the creation and shifting if everything works out nicely
! 130: // Worry about what happens to the first link.
! 131: var i=this.p.length; // First, create a new spot at the top.
! 132: if (this.p[i-1].state=="link") {
! 133: this.p[i]=new addLink(this.p[i-1].lname,this.p[i-1].link,this.address,i);
! 134: } else {
! 135: this.p[i]=new addFolder(this.p[i-1].lname,this.p[i-1].p.length,this.address+".p["+i+"]");
! 136: }
! 137: this.p[i].exists=this.p[i-1].exists; // preserve existance
! 138: i--; // Second, shift others up one
! 139: while ( i >= position + 1 ) {
! 140: if ( this.p[i-1].state == "link" ) {
! 141: this.p[ i ] = new addLink( this.p[ i-1 ].lname, this.p[i-1].link, this.p[i-1].address, i);
! 142: } else {
! 143: this.p[ i ] = new addFolder( this.p[ i-1 ].lname, this.p[i-1].p.length, this.address+".p["+ i +"]" );
! 144: // move all of the inner folder stuff
! 145: shiftFolder( this.p[i-1], this, i);
! 146: }
! 147: // this.p[i].address = this.p[i-1].address;
! 148: // this.p[i].exists = this.p[ i-1 ].exists; // preserve existance
! 149: i--;
! 150: }
! 151: }
! 152:
! 153: //-----------------------------------------------------------Opens the page
! 154: function clickOnBookmark(url) {
! 155: // opener.clientwindow.location(url); // <------THIS IS REAL VERSION
! 156: opener.open(url); // <------THIS IS FAKE VERSION
! 157: }
! 158:
! 159:
! 160:
! 161:
! 162: //-------------------------------------------------------------------------
! 163: // Now we have standard (non-method) functions
! 164: //-------------------------------------------------------------------------
! 165:
! 166:
! 167: //---------------------------------shifts contents of folder up one position
! 168: function shiftFolder(object1, object2, n) {
! 169: object2.p[n] = new addFolder(object1.lname,object1.length,object2.address+".p["+n+"]");
! 170: for (var i=1; i<object1.p.length; i++) {
! 171: if (object1.p[i].state=="link") {
! 172: object2.p[n].p[i]=new addLink(object1.p[i].lname,object1.p[i].link,object2.p[n].address,i);
! 173: } else {
! 174: object2.p[n].p[i]=new addFolder(object1.p[i].lname,object1.p[i].length,object2.address+".p["+n+"].p["+i+"]");
! 175: shiftFolder(object1.p[i],object2.p[n],i);
! 176: }
! 177: object2.p[n].p[i].state=object1.p[i].state;
! 178: object2.p[n].p[i].icon=object1.p[i].icon;
! 179: object2.p[n].p[i].pressed=object1.p[i].pressed;
! 180: object2.p[n].p[i].exists=object1.p[i].exists;
! 181: }
! 182: object2.p[n].state=object1.state;
! 183: object2.p[n].icon=object1.icon;
! 184: object2.p[n].pressed=object1.pressed;
! 185: object2.p[n].exists=object1.exists;
! 186: }
! 187:
! 188:
! 189: //--------Method to place folder in middle of other links (this simplifies code)
! 190: function insertFolder(position) {
! 191: this.bump(position);
! 192: shiftFolder(addressCache.p[1],this,position);
! 193: }
! 194:
! 195:
! 196: //---------------------------delete link&folder from within other links&folders
! 197: function remove() {
! 198: this.exists = false;
! 199: }
! 200:
! 201: //---------------------Function that deletes link from dragging it to the trash
! 202: function clickTrash() {
! 203: dragCache = "";
! 204: redrawTree();
! 205: }
! 206:
! 207: //-----------------------------------------------------------------------------
! 208: // These functions should be incorporated as methods
! 209: // and the trash should be a folder. I'll work on this later.
! 210: //-----------------------------------------------------------------------------
! 211: function hoverTrash() {
! 212: // if ( dragCache != "" ) {
! 213: // parent.frames[6].document.images[0].src = lastIcon;
! 214: // lastIcon = "folder_trash.gif";
! 215: // }
! 216: }
! 217: //----------------------------------------------------------------------------
! 218:
! 219:
! 220: //-----------------------------------------------------------------------------
! 221: // The following are construction functions.
! 222: //-----------------------------------------------------------------------------
! 223:
! 224: //--------------------------------------------------generate the Tree HTML code
! 225: function drawTree(depth, folder) {
! 226: for (var i=1; i<folder.length; i++) {
! 227: if (folder[i].exists) {
! 228: if (folder[i].state=="link") {
! 229: drawLink(depth,folder[i]);
! 230: } else {
! 231: drawFolder(depth,folder[i]);
! 232: if (folder[i].state=="opened" && folder[i].p.length>=0) {
! 233: drawTree(depth+1,folder[i].p);
! 234: }
! 235: }
! 236: }
! 237: }
! 238: }
! 239:
! 240: //----------------------------------------Writes HTML code for individual folder
! 241: function drawFolder(depth, folder) {
! 242: parent.frames[4].document.write("<TABLE border=0 cellspacing=0 cellpadding=0><TR><TD valign=left nowrap>");
! 243: parent.frames[4].document.write("<a href=\"javascript:top.bookmarkpal."+folder.address+".swapState();\" ><IMG src='folder_pointer_"+folder.state+".gif' width=15 height=25 border=noborder ></a>");
! 244: image_num++;
! 245: if ( depth != 1 ) {
! 246: image_num++;
! 247: parent.frames[4].document.write("<A href=\"javascript:top.bookmarkpal."+folder.address+".clickFolder(document.images["+image_num+"]);\" onmouseover=\"top.bookmarkpal."+folder.address+".hover(document.images["+image_num+"])\" ><IMG src='folder_spacer.gif' width="+ 20*( depth - 1 ) +" height=25 border=noborder></A>");
! 248: }
! 249: parent.frames[4].document.write("<A href=\"javascript:top.bookmarkpal."+folder.address+".clickFolder(document.images["+image_num+"]);\" onmouseover=\"top.bookmarkpal."+folder.address+".hover(document.images["+image_num+"])\" ><IMG src='"+folder.icon+"' width=25 height=25 border=noborder name="+image_num+"></A>");
! 250: image_num++;
! 251: parent.frames[4].document.write("<TD valign=middle align=left nowrap><FONT face='Arial, Helvetica'> "+folder.lname+"</FONT></TABLE>");
! 252: }
! 253:
! 254: //--------------------------------------Writes HTML code for individual link
! 255: function drawLink(depth, folder) {
! 256: parent.frames[4].document.write("<TABLE border=0 cellspacing=0 cellpadding=0><TR><TD valign = middle nowrap>");
! 257: image_num++;
! 258: parent.frames[4].document.write("<A href=\"javascript:top.bookmarkpal."+folder.address+".clickLink(document.images["+image_num+"], "+folder.position+");\" onmouseover=\"top.bookmarkpal."+folder.address+".p["+ folder.position +"].hover(document.images["+image_num+"])\" ><IMG src='folder_spacer.gif' width="+ 20 * depth +" height=25 border=noborder></A>");
! 259:
! 260: parent.frames[4].document.write("<A href=\"javascript:top.bookmarkpal."+folder.address+".clickLink(document.images["+image_num+"], "+folder.position+");\" onmouseover=\"top.bookmarkpal."+folder.address+".p["+ folder.position +"].hover(document.images["+image_num+"])\" ><IMG src='"+folder.icon+"' width=25 height=25 border=noborder name="+image_num+" ></A>");
! 261: image_num++;
! 262: parent.frames[4].document.write("<TD valign=middle align=left nowrap><FONT size=-1 face='Arial, Helvetica'><A href=\"javascript:top.clickOnBookmark\( '"+folder.link+"\' );\">"+folder.lname+"</a></FONT></TABLE>");
! 263: }
! 264:
! 265: //--------------------Calls Build and draws functions. This function also takes
! 266: // care of housekeeping
! 267: function initializeTree() {
! 268: // trash = new addFolder();
! 269: bookmarkpal = new buildUserTree();
! 270: redrawTree();
! 271: // parent.frames[5.document.write("HELLO WORLDS!!");
! 272: }
! 273:
! 274: //--------------------------------Redraws screen without initiallizing anything
! 275: function redrawTree() {
! 276: parent.frames[4].document.clear();
! 277: image_num = 0;
! 278: parent.frames[4].document.write("<BODY>");
! 279: drawTree(1, bookmarkpal.bookmarks.p);
! 280: parent.frames[4].document.write("</BODY>");
! 281: }
! 282:
! 283: //-------------------------------------PreProcesses bookmarks before submitting
! 284: function saveBookmarks() {
! 285: stuff goes here.
! 286: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>