home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / mozil06.zip / bin / chrome / comm.jar / content / navigator / sessionHistoryUI.js < prev    next >
Text File  |  2001-02-14  |  7KB  |  212 lines

  1. /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  *
  13.  * The Original Code is mozilla.org code.
  14.  *
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation.  Portions created by Netscape are
  17.  * Copyright (C) 1998 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  *
  20.  * Contributor(s):
  21.  *  Jason Eager <jce2@po.cwru.edu>
  22.  *  Blake Ross <BlakeR1234@aol.com>
  23.  *  Peter Annema <disttsc@bart.nl>
  24.  *
  25.  */
  26. const MAX_HISTORY_MENU_ITEMS = 15
  27. const MAX_HISTORY_ITEMS = 100;
  28. var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"]
  29.              .getService(Components.interfaces.nsIRDFService);
  30. var rdfc = Components.classes["@mozilla.org/rdf/container-utils;1"]
  31.              .getService(Components.interfaces.nsIRDFContainerUtils);
  32. var localstore = rdf.GetDataSource("rdf:localstore");
  33.  
  34. function FillHistoryMenu( aParent, aMenu )
  35.   {
  36.     // Get the content area docshell
  37.     var browserElement = document.getElementById("content");
  38.     if (browserElement)
  39.       {
  40.          var foopy = { }; 
  41.          var ds;
  42.          var docShell;
  43.          // Try to get docshell from appCore so that go/forward/back
  44.          // menus work right after a theme switch. If fetching from
  45.          // appCore fails use, the original method,
  46.          if (appCore) {
  47.             appCore.getContentDocShell(foopy); 
  48.             ds = foopy.value; 
  49.          }
  50.          if (ds) {
  51.             dump("Got docshell from appCOre\n");
  52.             docShell = ds;
  53.          }
  54.          else
  55.             docShell = browserElement.boxObject.QueryInterface(Components.interfaces.nsIBrowserBoxObject).docShell;
  56.         if (docShell) {        
  57.             var webNavigation = docShell.QueryInterface(Components.interfaces.nsIWebNavigation);
  58.             if (webNavigation)
  59.               {
  60.                 var shistory = webNavigation.sessionHistory;
  61.                 if (shistory)
  62.                   {
  63.                     //Remove old entries if any
  64.                     deleteHistoryItems( aParent );
  65.                     var count = shistory.count;
  66.                     var index = shistory.index;
  67.                     var end;
  68.                     var j;
  69.                     var entry;
  70.                     
  71.                     switch (aMenu)
  72.                       {
  73.                         case "back":
  74.                           end = (index > MAX_HISTORY_MENU_ITEMS) ? index - MAX_HISTORY_MENU_ITEMS : 0;
  75.                           for ( j = index - 1; j >= end; j--) 
  76.                             {
  77.                               entry = shistory.getEntryAtIndex(j, false);
  78.                               if (entry) 
  79.                                 createMenuItem( aParent, j, entry.title );
  80.                             }
  81.                           break;
  82.                         case "forward":
  83.                           end  = ((count-index) > MAX_HISTORY_MENU_ITEMS) ? index + MAX_HISTORY_MENU_ITEMS : count;
  84.                           for ( j = index + 1; j < end; j++)
  85.                             {
  86.                               entry = shistory.getEntryAtIndex(j, false);
  87.                               if (entry)
  88.                                 createMenuItem( aParent, j, entry.title );
  89.                             }
  90.                           break;
  91.                         case "go":
  92.                           end = count > MAX_HISTORY_MENU_ITEMS ? count - MAX_HISTORY_MENU_ITEMS : 0;
  93.                           for( j = count - 1; j >= end; j-- )
  94.                             {
  95.                               entry = shistory.getEntryAtIndex(j, false);
  96.                               if (entry)
  97.                                 createCheckboxMenuItem( aParent, j, entry.title, j==index );
  98.                             }
  99.                           break;
  100.                       }
  101.                   }
  102.               }
  103.           }
  104.       }
  105.   }
  106.  
  107. function executeUrlBarHistoryCommand( aTarget) 
  108.   {
  109.     var index = aTarget.getAttribute("index");
  110.     var value = aTarget.getAttribute("value");
  111.     if (index != "nothing_available" && value) 
  112.       {
  113.         gURLBar.value = value;
  114.         BrowserLoadURL();
  115.       }
  116.   } 
  117.  
  118. function createUBHistoryMenu( aParent )
  119.   {
  120.     var ubHistory = appCore.urlbarHistory;
  121.     if (localstore) {
  122.       var entries = rdfc.MakeSeq(localstore, rdf.GetResource("nc:urlbar-history")).GetElements();
  123.       var i= MAX_HISTORY_MENU_ITEMS;
  124.       
  125.       // Delete any old menu items only if there are legitimate
  126.       // urls to display, otherwise we want to display the 
  127.       // '(Nothing Available)' item.     
  128.       deleteHistoryItems(aParent);
  129.       if (!entries.hasMoreElements()) {               
  130.         //Create the "Nothing Available" Menu item                             
  131.         var na = document.getElementById("na");
  132.         na = na.getAttribute("value");          
  133.         createMenuItem(aParent, "nothing_available", na);      
  134.       }     
  135.  
  136.       while (entries.hasMoreElements() && (i-- > 0)) {
  137.         var entry = entries.getNext();
  138.         if (entry) {
  139.           entry = entry.QueryInterface(Components.interfaces.nsIRDFLiteral);
  140.           var url = entry.Value;
  141.           createMenuItem(aParent, i, url);
  142.         }
  143.       }
  144.     }
  145.   }
  146.  
  147. function addToUrlbarHistory()
  148.   {
  149.     //var ubHistory = appCore.urlbarHistory;
  150.     var urlToAdd = gURLBar.value;
  151.     if (!urlToAdd)
  152.        return;
  153.     if (localstore) {
  154.     var entries = rdfc.MakeSeq(localstore, rdf.GetResource("nc:urlbar-history"));
  155.     var entry = rdf.GetLiteral(urlToAdd);
  156.     var index = entries.IndexOf(entry);
  157.  
  158.     if (index != -1) {
  159.       // we've got it already. Remove it from its old place 
  160.       // and insert it to the top
  161.       //dump("URL already in urlbar history\n");
  162.       entries.RemoveElementAt(index, true);
  163.     }
  164.  
  165.     // Otherwise, we've got a new URL in town. Add it!
  166.     // Put the new entry at the front of the list.
  167.     entries.InsertElementAt(entry, 1, true);
  168.  
  169.     // Remove any expired history items so that we don't let this grow
  170.     // without bound.
  171.     for (index = entries.GetCount(); index > MAX_HISTORY_ITEMS; --index) {
  172.       entries.RemoveElementAt(index, true);
  173.     }
  174.   }
  175.   }
  176.   
  177. function createMenuItem( aParent, aIndex, aValue)
  178.   {
  179.     var menuitem = document.createElement( "menuitem" );
  180.     menuitem.setAttribute( "value", aValue );
  181.     menuitem.setAttribute( "index", aIndex );
  182.     aParent.appendChild( menuitem );
  183.   }
  184.  
  185. function createCheckboxMenuItem( aParent, aIndex, aValue, aChecked)
  186.   {
  187.     var menuitem = document.createElement( "menuitem" );
  188.     menuitem.setAttribute( "type", "checkbox" );
  189.     menuitem.setAttribute( "value", aValue );
  190.     menuitem.setAttribute( "index", aIndex );
  191.     if (aChecked==true)
  192.       menuitem.setAttribute( "checked", "true" );
  193.     aParent.appendChild( menuitem );
  194.   }
  195.  
  196. function deleteHistoryItems( aParent)
  197.   {
  198.     var children = aParent.childNodes;
  199.     for (var i = 0; i < children.length; i++ )
  200.       {
  201.         var index = children[i].getAttribute( "index" );
  202.         if (index)           
  203.           aParent.removeChild( children[i] );
  204.       }
  205.   }
  206.  
  207. function updateGoMenu(event)
  208.   {
  209.     FillHistoryMenu(event.target, "go");
  210.   }
  211.  
  212.