1999-07-01 22:56:04 +00:00
|
|
|
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Netscape Public License
|
|
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
|
|
* http://www.mozilla.org/NPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* NPL.
|
|
|
|
*
|
|
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
|
|
* Communications Corporation. Portions created by Netscape are
|
|
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
|
|
* Reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
var appCore = null;
|
|
|
|
var defaultStatus = "default status text";
|
1999-07-14 00:03:57 +00:00
|
|
|
var explicitURL = false;
|
1999-07-01 22:56:04 +00:00
|
|
|
|
1999-09-21 22:54:05 +00:00
|
|
|
/*
|
|
|
|
// pinkerton 9/21/99
|
|
|
|
// disabling d&d code for pre-alpha thang
|
1999-09-02 23:16:37 +00:00
|
|
|
function BeginDragPersonalToolbar ( event )
|
|
|
|
{
|
|
|
|
//XXX we rely on a capturer to already have determined which item the mouse was over
|
|
|
|
//XXX and have set an attribute.
|
|
|
|
|
|
|
|
// if the click is on the toolbar proper, ignore it. We only care about clicks on
|
|
|
|
// items.
|
|
|
|
var toolbar = document.getElementById("PersonalToolbar");
|
|
|
|
if ( event.target == toolbar )
|
|
|
|
return true; // continue propagating the event
|
|
|
|
|
|
|
|
var dragStarted = false;
|
|
|
|
var dragService = Components.classes["component://netscape/widget/dragservice"].getService();
|
|
|
|
if ( dragService ) dragService = dragService.QueryInterface(Components.interfaces.nsIDragService);
|
|
|
|
if ( dragService ) {
|
|
|
|
var trans = Components.classes["component://netscape/widget/transferable"].createInstance();
|
|
|
|
if ( trans ) trans = trans.QueryInterface(Components.interfaces.nsITransferable);
|
|
|
|
if ( trans ) {
|
|
|
|
trans.addDataFlavor("moz/toolbaritem");
|
|
|
|
var genData = Components.classes["component://netscape/supports-wstring"].createInstance();
|
1999-09-09 11:33:38 +00:00
|
|
|
var data = null;
|
1999-09-02 23:16:37 +00:00
|
|
|
if ( genData ) data = genData.QueryInterface(Components.interfaces.nsISupportsWString);
|
|
|
|
if ( data ) {
|
|
|
|
|
1999-09-09 11:33:38 +00:00
|
|
|
var id = event.target.getAttribute("id");
|
|
|
|
data.data = id;
|
|
|
|
|
|
|
|
dump("ID: " + id + "\n");
|
|
|
|
|
|
|
|
var database = toolbar.database;
|
|
|
|
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
|
|
if ((!rdf) || (!database)) return(false);
|
|
|
|
|
|
|
|
// make sure its a bookmark, bookmark separator, or bookmark folder
|
|
|
|
var src = rdf.GetResource(id, true);
|
|
|
|
var prop = rdf.GetResource("http://www.w3.org/1999/02/22-rdf-syntax-ns#type", true);
|
|
|
|
var target = database.GetTarget(src, prop, true);
|
|
|
|
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFResource);
|
|
|
|
if (target) target = target.Value;
|
|
|
|
if ((!target) || (target == "")) return(false);
|
|
|
|
|
|
|
|
dump("Type: '" + target + "'\n");
|
|
|
|
|
|
|
|
if ((target != "http://home.netscape.com/NC-rdf#BookmarkSeparator") &&
|
|
|
|
(target != "http://home.netscape.com/NC-rdf#Bookmark") &&
|
|
|
|
(target != "http://home.netscape.com/NC-rdf#Folder")) return(false);
|
|
|
|
|
|
|
|
trans.setTransferData ( "moz/toolbaritem", genData, id.length*2 ); // double byte data (19*2)
|
1999-09-02 23:16:37 +00:00
|
|
|
var transArray = Components.classes["component://netscape/supports-array"].createInstance();
|
|
|
|
if ( transArray ) transArray = transArray.QueryInterface(Components.interfaces.nsISupportsArray);
|
|
|
|
if ( transArray ) {
|
|
|
|
// put it into the transferable as an |nsISupports|
|
|
|
|
var genTrans = trans.QueryInterface(Components.interfaces.nsISupports);
|
|
|
|
transArray.AppendElement(genTrans);
|
|
|
|
var nsIDragService = Components.interfaces.nsIDragService;
|
|
|
|
dragService.invokeDragSession ( transArray, null, nsIDragService.DRAGDROP_ACTION_COPY +
|
|
|
|
nsIDragService.DRAGDROP_ACTION_MOVE );
|
|
|
|
dragStarted = true;
|
|
|
|
}
|
|
|
|
} // if data object
|
|
|
|
} // if transferable
|
|
|
|
} // if drag service
|
|
|
|
|
|
|
|
return !dragStarted; // don't propagate the event if a drag has begun
|
|
|
|
|
|
|
|
} // BeginDragPersonalToolbar
|
|
|
|
|
|
|
|
|
|
|
|
function DropPersonalToolbar ( event )
|
|
|
|
{
|
|
|
|
var dropAccepted = false;
|
|
|
|
|
|
|
|
var dragService = Components.classes["component://netscape/widget/dragservice"].getService();
|
|
|
|
if ( dragService ) dragService = dragService.QueryInterface(Components.interfaces.nsIDragService);
|
|
|
|
if ( dragService ) {
|
|
|
|
var dragSession = dragService.getCurrentSession();
|
|
|
|
if ( dragSession ) {
|
|
|
|
var trans = Components.classes["component://netscape/widget/transferable"].createInstance();
|
|
|
|
if ( trans ) trans = trans.QueryInterface(Components.interfaces.nsITransferable);
|
|
|
|
if ( trans ) {
|
1999-09-09 11:33:38 +00:00
|
|
|
|
|
|
|
// get references to various services/resources once up-front
|
|
|
|
var personalToolbarRes = null;
|
|
|
|
|
|
|
|
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
|
|
if (rdf)
|
|
|
|
{
|
|
|
|
personalToolbarRes = rdf.GetResource("NC:PersonalToolbarFolder");
|
|
|
|
}
|
|
|
|
var rdfc = Components.classes["component://netscape/rdf/container"].getService();
|
|
|
|
if (rdfc) rdfc = rdfc.QueryInterface(Components.interfaces.nsIRDFContainer);
|
|
|
|
|
1999-09-02 23:16:37 +00:00
|
|
|
trans.addDataFlavor("moz/toolbaritem");
|
|
|
|
for ( var i = 0; i < dragSession.numDropItems; ++i ) {
|
|
|
|
dragSession.getData ( trans, i );
|
|
|
|
var dataObj = new Object();
|
|
|
|
var bestFlavor = new Object();
|
|
|
|
var len = new Object();
|
|
|
|
trans.getAnyTransferData ( bestFlavor, dataObj, len );
|
|
|
|
if ( dataObj ) dataObj = dataObj.value.QueryInterface(Components.interfaces.nsISupportsWString);
|
|
|
|
if ( dataObj ) {
|
|
|
|
|
1999-09-09 11:33:38 +00:00
|
|
|
// remember len is in bytes, not chars
|
|
|
|
var id = dataObj.data.substring(0, len.value / 2);
|
|
|
|
dump("ID: '" + id + "'\n");
|
1999-09-02 23:16:37 +00:00
|
|
|
|
1999-09-09 11:33:38 +00:00
|
|
|
var objectRes = rdf.GetResource(id, true);
|
|
|
|
|
1999-09-02 23:16:37 +00:00
|
|
|
dragSession.canDrop = true;
|
1999-09-09 11:33:38 +00:00
|
|
|
var dropAccepted = true;
|
|
|
|
|
|
|
|
var toolbar = document.getElementById("PersonalToolbar");
|
|
|
|
var database = toolbar.database;
|
|
|
|
if (database && rdf && rdfc && personalToolbarRes && objectRes)
|
|
|
|
{
|
|
|
|
|
|
|
|
rdfc.Init(database, personalToolbarRes);
|
|
|
|
|
|
|
|
// Note: RDF Sequences are one-based, not zero-based
|
|
|
|
|
|
|
|
// XXX figure out the REAL index to insert at;
|
|
|
|
// for the moment, insert it as the first element (pos=1)
|
|
|
|
var newIndex = 1;
|
|
|
|
|
|
|
|
var currentIndex = rdfc.IndexOf(objectRes);
|
|
|
|
if (currentIndex > 0)
|
|
|
|
{
|
|
|
|
dump("Element '" + id + "' was at position # " + currentIndex + "\n");
|
|
|
|
// rdfc.RemoveElement(objectRes, true);
|
|
|
|
dump("Element '" + id + "' removed from position # " + currentIndex + "\n");
|
|
|
|
}
|
|
|
|
// rdfc.InsertElementAt(objectRes, newIndex, true);
|
|
|
|
dump("Element '" + id + "' re-inserted at new position # " + newIndex + ".\n");
|
|
|
|
}
|
|
|
|
|
1999-09-02 23:16:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
} // foreach drag item
|
|
|
|
|
|
|
|
} // if transferable
|
|
|
|
} // if dragsession
|
|
|
|
} // if dragservice
|
|
|
|
|
|
|
|
return !dropAccepted; // don't propagate the event if a drag was accepted
|
|
|
|
|
|
|
|
} // DropPersonalToolbar
|
|
|
|
|
1999-09-09 06:27:43 +00:00
|
|
|
|
|
|
|
function DragOverPersonalToolbar ( event )
|
|
|
|
{
|
|
|
|
var validFlavor = false;
|
|
|
|
|
|
|
|
var dragService = Components.classes["component://netscape/widget/dragservice"].getService();
|
|
|
|
if ( dragService ) dragService = dragService.QueryInterface(Components.interfaces.nsIDragService);
|
|
|
|
if ( dragService ) {
|
|
|
|
var dragSession = dragService.getCurrentSession();
|
|
|
|
if ( dragSession ) {
|
1999-09-09 11:33:38 +00:00
|
|
|
if ( dragSession.isDataFlavorSupported("moz/toolbaritem") )
|
1999-09-09 06:27:43 +00:00
|
|
|
validFlavor = true;
|
|
|
|
//XXX other flavors here...
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// touch the attribute to trigger the repaint with the drop feedback.
|
|
|
|
if ( validFlavor ) {
|
|
|
|
//XXX this is really slow and likes to refresh N times per second.
|
|
|
|
var toolbar = document.getElementById("PersonalToolbar");
|
|
|
|
toolbar.setAttribute ( "tb-triggerrepaint", 0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
} // DragOverPersonalToolbar
|
1999-09-21 22:54:05 +00:00
|
|
|
*/
|
1999-09-02 23:16:37 +00:00
|
|
|
|
1999-09-15 11:36:34 +00:00
|
|
|
function UpdateHistory(event)
|
|
|
|
{
|
1999-08-05 20:15:33 +00:00
|
|
|
// This is registered as a capturing "load" event handler. When a
|
|
|
|
// document load completes in the content window, we'll be
|
|
|
|
// notified here. This allows us to update the global history and
|
|
|
|
// set the document's title information.
|
|
|
|
|
1999-09-18 03:32:53 +00:00
|
|
|
// dump("UpdateHistory: content's location is '" + window.content.location.href + "',\n");
|
1999-08-05 20:15:33 +00:00
|
|
|
//dump(" title is '" + window.content.document.title + "'\n");
|
|
|
|
|
1999-09-15 11:36:34 +00:00
|
|
|
if (window.content.location.href && window.content.location.href != "")
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
1999-09-16 11:00:20 +00:00
|
|
|
var history = Components.classes["component://netscape/browser/global-history"].getService();
|
|
|
|
if (history) history = history.QueryInterface(Components.interfaces.nsIGlobalHistory);
|
|
|
|
if (history) history.SetPageTitle(window.content.location.href, window.content.document.title);
|
1999-09-15 11:36:34 +00:00
|
|
|
}
|
|
|
|
catch (ex)
|
|
|
|
{
|
|
|
|
dump("failed to set the page title.\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
1999-08-05 20:15:33 +00:00
|
|
|
|
1999-09-07 08:52:22 +00:00
|
|
|
function UpdateBookmarksLastVisitedDate(event)
|
1999-08-06 20:49:16 +00:00
|
|
|
{
|
1999-09-16 23:44:07 +00:00
|
|
|
|
1999-09-15 11:36:34 +00:00
|
|
|
if (window.content.location.href && window.content.location.href != "")
|
1999-09-07 08:52:22 +00:00
|
|
|
{
|
1999-09-15 11:36:34 +00:00
|
|
|
// if the URL is bookmarked, update its "Last Visited" date
|
|
|
|
var bmks = Components.classes["component://netscape/browser/bookmarks-service"].getService();
|
|
|
|
if (bmks) bmks = bmks.QueryInterface(Components.interfaces.nsIBookmarksService);
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if (bmks) bmks.UpdateBookmarkLastVisitedDate(window.content.location.href);
|
|
|
|
}
|
|
|
|
catch(ex)
|
|
|
|
{
|
|
|
|
dump("failed to update bookmark last visited date.\n");
|
|
|
|
}
|
1999-09-07 08:52:22 +00:00
|
|
|
}
|
1999-08-06 20:49:16 +00:00
|
|
|
}
|
|
|
|
|
1999-09-02 04:46:30 +00:00
|
|
|
function createBrowserInstance() {
|
|
|
|
appCore = Components
|
|
|
|
.classes[ "component://netscape/appshell/component/browser/instance" ]
|
|
|
|
.createInstance( Components.interfaces.nsIBrowserInstance );
|
|
|
|
if ( !appCore ) {
|
1999-09-14 21:30:57 +00:00
|
|
|
alert( "Error creating browser instance\n" );
|
1999-09-02 04:46:30 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function Startup()
|
|
|
|
{
|
1999-09-03 22:55:25 +00:00
|
|
|
// Position window.
|
|
|
|
var win = document.getElementById( "main-window" );
|
|
|
|
var x = win.getAttribute( "x" );
|
|
|
|
var y = win.getAttribute( "y" );
|
1999-09-19 06:28:04 +00:00
|
|
|
// dump(" move to "+x+" "+y+"\n");
|
1999-09-03 22:55:25 +00:00
|
|
|
window.moveTo( x, y );
|
1999-09-14 21:30:57 +00:00
|
|
|
|
|
|
|
// TileWindow();
|
1999-09-10 01:03:06 +00:00
|
|
|
// Make sure window fits on screen initially
|
|
|
|
// FitToScreen();
|
|
|
|
|
|
|
|
// Set default home page
|
|
|
|
var pref = Components.classes['component://netscape/preferences'];
|
|
|
|
if (pref)
|
|
|
|
{
|
|
|
|
pref = pref.getService();
|
1999-09-19 06:28:04 +00:00
|
|
|
// dump("QIing for pref interface\n");
|
1999-09-10 01:03:06 +00:00
|
|
|
|
|
|
|
pref = pref.QueryInterface(Components.interfaces.nsIPref);
|
|
|
|
if ( pref )
|
|
|
|
{
|
|
|
|
var homebutton = document.getElementById("home-button")
|
|
|
|
if ( homebutton )
|
|
|
|
{
|
|
|
|
var defaultURL = homebutton.getAttribute("defaultURL" );
|
|
|
|
// dump("Set default homepage to +"+defaultURL+" \n");
|
|
|
|
pref.SetDefaultCharPref( "browser.startup.homepage",defaultURL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
1999-09-03 22:55:25 +00:00
|
|
|
|
1999-09-10 01:03:06 +00:00
|
|
|
|
1999-09-14 21:30:57 +00:00
|
|
|
// Create the browser instance component.
|
|
|
|
createBrowserInstance();
|
|
|
|
if (appCore == null) {
|
|
|
|
// Give up.
|
|
|
|
window.close();
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
1999-08-05 20:15:33 +00:00
|
|
|
|
1999-09-14 21:30:57 +00:00
|
|
|
// Initialize browser instance..
|
|
|
|
appCore.setWebShellWindow(window);
|
1999-09-18 03:32:53 +00:00
|
|
|
|
1999-09-14 21:30:57 +00:00
|
|
|
tryToSetContentWindow();
|
1999-09-18 03:32:53 +00:00
|
|
|
|
1999-08-05 20:15:33 +00:00
|
|
|
// Add a capturing event listener to the content window so we'll
|
|
|
|
// be notified when onloads complete.
|
|
|
|
window.addEventListener("load", UpdateHistory, true);
|
1999-09-07 08:52:22 +00:00
|
|
|
window.addEventListener("load", UpdateBookmarksLastVisitedDate, true);
|
1999-09-18 03:32:53 +00:00
|
|
|
// Check for window.arguments[0]. If present, go to that url.
|
1999-09-02 04:46:30 +00:00
|
|
|
if ( window.arguments && window.arguments[0] ) {
|
|
|
|
// Load it using yet another psuedo-onload handler.
|
|
|
|
onLoadViaOpenDialog();
|
|
|
|
}
|
1999-09-18 03:32:53 +00:00
|
|
|
|
1999-09-14 23:09:19 +00:00
|
|
|
sidebarOverlayInit();
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
1999-07-14 00:03:57 +00:00
|
|
|
function Shutdown() {
|
1999-09-03 22:55:25 +00:00
|
|
|
// Get the current window position/size.
|
|
|
|
var x = window.screenX;
|
|
|
|
var y = window.screenY;
|
|
|
|
var h = window.outerHeight;
|
|
|
|
var w = window.outerWidth;
|
1999-09-10 01:03:06 +00:00
|
|
|
|
1999-09-03 22:55:25 +00:00
|
|
|
// Store these into the window attributes (for persistence).
|
|
|
|
var win = document.getElementById( "main-window" );
|
|
|
|
win.setAttribute( "x", x );
|
|
|
|
win.setAttribute( "y", y );
|
|
|
|
win.setAttribute( "height", h );
|
|
|
|
win.setAttribute( "width", w );
|
|
|
|
|
1999-07-14 00:03:57 +00:00
|
|
|
// Close the app core.
|
|
|
|
if ( appCore ) {
|
|
|
|
appCore.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function onLoadWithArgs() {
|
|
|
|
// See if Startup has been run.
|
|
|
|
if ( appCore ) {
|
|
|
|
// See if load in progress (loading default page).
|
|
|
|
if ( document.getElementById("Browser:Throbber").getAttribute("busy") == "true" ) {
|
|
|
|
dump( "Stopping load of default initial page\n" );
|
|
|
|
appCore.stop();
|
|
|
|
}
|
|
|
|
dump( "Loading page specified on ShowWindowWithArgs\n" );
|
|
|
|
appCore.loadInitialPage();
|
|
|
|
} else {
|
|
|
|
// onLoad handler timing is not correct yet.
|
|
|
|
dump( "onLoadWithArgs not needed yet\n" );
|
1999-07-14 00:03:57 +00:00
|
|
|
// Remember that we want this url.
|
|
|
|
explicitURL = true;
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-09-02 04:46:30 +00:00
|
|
|
function onLoadViaOpenDialog() {
|
|
|
|
// See if load in progress (loading default page).
|
|
|
|
if ( document.getElementById("Browser:Throbber").getAttribute("busy") == "true" ) {
|
|
|
|
dump( "Stopping load of default initial page\n" );
|
|
|
|
appCore.stop();
|
|
|
|
}
|
|
|
|
dump( "Loading page specified via openDialog\n" );
|
1999-09-18 03:32:53 +00:00
|
|
|
dump("Check if a view source window \n");
|
|
|
|
if( window.arguments[1]=="view-source" )
|
|
|
|
{
|
|
|
|
dump(" A view source window \n");
|
|
|
|
var element = document.getElementById("main-window");
|
|
|
|
|
|
|
|
var preface = element.getAttribute("viewsourcetitlepreface");
|
|
|
|
element.setAttribute( "titlepreface", preface );
|
|
|
|
appCore.isViewSource = true;
|
|
|
|
element.setAttribute("windowtype","Browser:view-source");
|
|
|
|
}
|
1999-09-02 04:46:30 +00:00
|
|
|
appCore.loadUrl( window.arguments[0] );
|
|
|
|
}
|
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function tryToSetContentWindow() {
|
1999-07-14 00:03:57 +00:00
|
|
|
if ( window.content ) {
|
1999-09-12 08:27:01 +00:00
|
|
|
var pref = 0;
|
1999-07-01 22:56:04 +00:00
|
|
|
dump("Setting content window\n");
|
1999-07-14 00:03:57 +00:00
|
|
|
appCore.setContentWindow( window.content );
|
1999-07-01 22:56:04 +00:00
|
|
|
// Have browser app core load appropriate initial page.
|
|
|
|
|
1999-07-14 00:03:57 +00:00
|
|
|
if ( !explicitURL ) {
|
1999-09-12 08:27:01 +00:00
|
|
|
pref = Components.classes['component://netscape/preferences'];
|
1999-07-14 00:03:57 +00:00
|
|
|
|
|
|
|
// if all else fails, use trusty "about:blank" as the start page
|
|
|
|
var startpage = "about:blank";
|
|
|
|
if (pref) {
|
|
|
|
pref = pref.getService();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
dump("failed to get component://netscape/preferences\n");
|
|
|
|
}
|
|
|
|
if (pref) {
|
|
|
|
pref = pref.QueryInterface(Components.interfaces.nsIPref);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
dump("failed to get pref service\n");
|
|
|
|
}
|
|
|
|
if (pref) {
|
|
|
|
// from mozilla/modules/libpref/src/init/all.js
|
|
|
|
// 0 = blank
|
|
|
|
// 1 = home (browser.startup.homepage)
|
|
|
|
// 2 = last
|
1999-07-27 21:48:08 +00:00
|
|
|
choice = 1;
|
|
|
|
try {
|
|
|
|
choice = pref.GetIntPref("browser.startup.page");
|
|
|
|
}
|
|
|
|
catch (ex) {
|
|
|
|
dump("failed to get the browser.startup.page pref\n");
|
|
|
|
}
|
1999-07-14 00:03:57 +00:00
|
|
|
dump("browser.startup.page = " + choice + "\n");
|
|
|
|
switch (choice) {
|
|
|
|
case 0:
|
|
|
|
startpage = "about:blank";
|
|
|
|
break;
|
|
|
|
case 1:
|
1999-07-27 21:48:08 +00:00
|
|
|
try {
|
|
|
|
startpage = pref.CopyCharPref("browser.startup.homepage");
|
|
|
|
}
|
|
|
|
catch (ex) {
|
|
|
|
dump("failed to get the browser.startup.homepage pref\n");
|
|
|
|
startpage = "about:blank";
|
|
|
|
}
|
1999-07-14 00:03:57 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
var history = Components.classes['component://netscape/browser/global-history'];
|
|
|
|
if (history) {
|
|
|
|
history = history.getService();
|
|
|
|
}
|
|
|
|
if (history) {
|
|
|
|
history = history.QueryInterface(Components.interfaces.nsIGlobalHistory);
|
|
|
|
}
|
|
|
|
if (history) {
|
|
|
|
startpage = history.GetLastPageVisted();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
startpage = "about:blank";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
dump("failed to QI pref service\n");
|
|
|
|
}
|
|
|
|
dump("startpage = " + startpage + "\n");
|
|
|
|
document.getElementById("args").setAttribute("value", startpage);
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
appCore.loadInitialPage();
|
|
|
|
} else {
|
|
|
|
// Try again.
|
|
|
|
dump("Scheduling later attempt to set content window\n");
|
|
|
|
window.setTimeout( "tryToSetContentWindow()", 100 );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-07-15 00:48:51 +00:00
|
|
|
function Translate(src, dest, engine)
|
1999-07-01 22:56:04 +00:00
|
|
|
{
|
1999-09-07 08:52:22 +00:00
|
|
|
var service = "http://levis.alis.com:8080";
|
1999-07-01 22:56:04 +00:00
|
|
|
service += "?AlisSourceLang=" + src;
|
|
|
|
service += "&AlisTargetLang=" + dest;
|
1999-07-15 00:48:51 +00:00
|
|
|
service += "&AlisMTEngine=" + engine;
|
1999-09-07 08:52:22 +00:00
|
|
|
|
|
|
|
// if we're already viewing a translated page, the just get the
|
|
|
|
// last argument (which we expect to always be "AlisMTEngine")
|
|
|
|
var targetURI = window.content.location.href;
|
|
|
|
var targetURIIndex = targetURI.indexOf("AlisTargetURI=");
|
|
|
|
if (targetURIIndex >= 0)
|
|
|
|
{
|
|
|
|
targetURI = targetURI.substring(targetURIIndex + 14);
|
|
|
|
}
|
|
|
|
service += "&AlisTargetURI=" + targetURI;
|
|
|
|
|
1999-07-14 00:03:57 +00:00
|
|
|
window.content.location.href = service;
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function RefreshUrlbar()
|
|
|
|
{
|
|
|
|
//Refresh the urlbar bar
|
1999-07-14 00:03:57 +00:00
|
|
|
document.getElementById('urlbar').value = window.content.location.href;
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
1999-08-30 22:08:38 +00:00
|
|
|
function gotoHistoryIndex(index)
|
|
|
|
{
|
|
|
|
appCore.gotoHistoryIndex(index);
|
|
|
|
}
|
1999-07-14 00:03:57 +00:00
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function BrowserBack()
|
|
|
|
{
|
|
|
|
// Get a handle to the back-button
|
|
|
|
var bb = document.getElementById("canGoBack");
|
|
|
|
// If the button is disabled, don't bother calling in to Appcore
|
|
|
|
if ( (bb.getAttribute("disabled")) == "true" )
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Going Back\n");
|
|
|
|
appCore.back();
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-07-14 00:03:57 +00:00
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function BrowserForward()
|
|
|
|
{
|
|
|
|
// Get a handle to the back-button
|
|
|
|
var fb = document.getElementById("canGoForward");
|
|
|
|
// If the button is disabled, don't bother calling in to Appcore
|
|
|
|
if ( (fb.getAttribute("disabled")) == "true" )
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Going Forward\n");
|
|
|
|
appCore.forward();
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-07-14 00:03:57 +00:00
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
|
|
|
|
function BrowserCanStop() {
|
|
|
|
var stop = document.getElementById("canStop");
|
|
|
|
if ( stop ) {
|
|
|
|
var stopDisabled = stop.getAttribute("disabled");
|
|
|
|
var stopButton = document.getElementById( "stop-button" );
|
|
|
|
if ( stopButton ) {
|
|
|
|
if ( stopDisabled == "true") {
|
|
|
|
stopButton.setAttribute( "disabled", "true" );
|
|
|
|
} else {
|
|
|
|
stopButton.setAttribute( "disabled", "" );
|
|
|
|
}
|
|
|
|
}
|
1999-07-14 00:03:57 +00:00
|
|
|
//Enable/disable the stop menu item
|
|
|
|
var stopMenu = document.getElementById( "menuitem-stop" );
|
|
|
|
if ( stopMenu ) {
|
|
|
|
if ( stopDisabled == "true") {
|
|
|
|
stopMenu.setAttribute( "disabled", "true" );
|
|
|
|
} else {
|
|
|
|
stopMenu.setAttribute( "disabled", "" );
|
|
|
|
}
|
|
|
|
}
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserStop() {
|
|
|
|
// Get a handle to the "canStop" broadcast id
|
|
|
|
var stopBElem = document.getElementById("canStop");
|
|
|
|
if (!stopBElem) {
|
|
|
|
dump("Couldn't obtain handle to stop Broadcast element\n");
|
|
|
|
return;
|
1999-07-14 00:03:57 +00:00
|
|
|
}
|
1999-07-01 22:56:04 +00:00
|
|
|
|
|
|
|
var canStop = stopBElem.getAttribute("disabled");
|
|
|
|
var sb = document.getElementById("stop-button");
|
|
|
|
|
|
|
|
if (!sb) {
|
1999-07-14 00:03:57 +00:00
|
|
|
dump("Could not obtain handle to stop button\n");
|
|
|
|
return;
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// If the stop button is currently disabled, just return
|
|
|
|
if ((sb.getAttribute("disabled")) == "true") {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Stop button has just been pressed. Disable it.
|
|
|
|
sb.setAttribute("disabled", "true");
|
|
|
|
|
|
|
|
// Get a handle to the stop menu item.
|
|
|
|
var sm = document.getElementById("menuitem-stop");
|
|
|
|
if (!sm) {
|
|
|
|
dump("Couldn't obtain menu item Stop\n");
|
|
|
|
} else {
|
|
|
|
// Disable the stop menu-item.
|
|
|
|
sm.setAttribute("disabled", "true");
|
|
|
|
}
|
|
|
|
|
|
|
|
//Call in to BrowserAppcore to stop the current loading
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Going to Stop\n");
|
|
|
|
appCore.stop();
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
1999-09-19 06:28:04 +00:00
|
|
|
|
1999-07-14 00:03:57 +00:00
|
|
|
|
|
|
|
function BrowserReallyReload(reloadType) {
|
|
|
|
// Get a handle to the "canReload" broadcast id
|
|
|
|
var reloadBElem = document.getElementById("canReload");
|
|
|
|
if (!reloadBElem) {
|
|
|
|
dump("Couldn't obtain handle to reload Broadcast element\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var canreload = reloadBElem.getAttribute("disabled");
|
1999-07-01 22:56:04 +00:00
|
|
|
|
1999-07-14 00:03:57 +00:00
|
|
|
|
|
|
|
// If the reload button is currently disabled, just return
|
1999-09-19 06:28:04 +00:00
|
|
|
if ( canreload) {
|
1999-07-14 00:03:57 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Call in to BrowserAppcore to reload the current loading
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Going to reload\n");
|
|
|
|
appCore.reload(reloadType);
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserHome()
|
|
|
|
{
|
1999-07-14 00:03:57 +00:00
|
|
|
window.content.home();
|
1999-07-01 22:56:04 +00:00
|
|
|
RefreshUrlbar();
|
|
|
|
}
|
|
|
|
|
1999-08-25 01:30:17 +00:00
|
|
|
function OpenBookmarkURL(node, root)
|
1999-07-01 22:56:04 +00:00
|
|
|
{
|
|
|
|
if (node.getAttribute('container') == "true") {
|
|
|
|
return false;
|
|
|
|
}
|
1999-07-22 22:11:21 +00:00
|
|
|
|
|
|
|
var url = node.getAttribute('id');
|
|
|
|
try
|
|
|
|
{
|
1999-08-25 01:30:17 +00:00
|
|
|
var rootNode = document.getElementById(root);
|
|
|
|
var ds = null;
|
|
|
|
if (rootNode)
|
|
|
|
{
|
|
|
|
ds = rootNode.database;
|
|
|
|
}
|
1999-08-05 01:38:02 +00:00
|
|
|
// add support for IE favorites under Win32, and NetPositive URLs under BeOS
|
1999-08-25 01:30:17 +00:00
|
|
|
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
|
|
|
|
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
|
|
|
if (rdf)
|
1999-07-22 22:11:21 +00:00
|
|
|
{
|
1999-08-25 01:30:17 +00:00
|
|
|
if (ds)
|
1999-07-22 22:11:21 +00:00
|
|
|
{
|
1999-08-25 01:30:17 +00:00
|
|
|
var src = rdf.GetResource(url, true);
|
|
|
|
var prop = rdf.GetResource("http://home.netscape.com/NC-rdf#URL", true);
|
|
|
|
var target = ds.GetTarget(src, prop, true);
|
|
|
|
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
|
|
|
if (target) target = target.Value;
|
|
|
|
if (target) url = target;
|
|
|
|
|
1999-07-22 22:11:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(ex)
|
|
|
|
{
|
|
|
|
}
|
1999-07-01 22:56:04 +00:00
|
|
|
|
|
|
|
// Ignore "NC:" urls.
|
|
|
|
if (url.substring(0, 3) == "NC:") {
|
|
|
|
return false;
|
|
|
|
}
|
1999-10-01 03:28:43 +00:00
|
|
|
// Check if we have a browser window
|
|
|
|
if ( window.content == null )
|
|
|
|
{
|
|
|
|
window.openDialog( "chrome://navigator/content/navigator.xul", "_blank", "chrome,all,dialog=no", url );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
window.content.location.href = url;
|
|
|
|
RefreshUrlbar();
|
|
|
|
}
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
1999-08-19 20:00:43 +00:00
|
|
|
function OpenSearch(tabName, searchStr)
|
1999-08-05 23:09:42 +00:00
|
|
|
{
|
1999-08-19 20:00:43 +00:00
|
|
|
dump("OpenSearch searchStr: '" + searchStr + "'\n\n");
|
|
|
|
|
|
|
|
window.openDialog("resource:/res/samples/search.xul", "SearchWindow", "dialog=no,close,chrome,resizable", tabName, searchStr);
|
1999-08-05 23:09:42 +00:00
|
|
|
}
|
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function BrowserNewWindow()
|
|
|
|
{
|
1999-09-19 06:28:04 +00:00
|
|
|
OpenBrowserWindow();
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
1999-09-14 21:30:57 +00:00
|
|
|
function BrowserEditPage(url)
|
1999-07-01 22:56:04 +00:00
|
|
|
{
|
1999-09-16 19:20:56 +00:00
|
|
|
window.openDialog( "chrome://editor/content", "_blank", "chrome,all,dialog=no", url );
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
1999-09-14 21:30:57 +00:00
|
|
|
function BrowserNewEditorWindow()
|
1999-07-01 22:56:04 +00:00
|
|
|
{
|
1999-09-14 21:30:57 +00:00
|
|
|
// Open editor window to default page.
|
|
|
|
BrowserEditPage( "resource:/res/html/empty_doc.html" );
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserOpenWindow()
|
|
|
|
{
|
1999-08-20 23:17:12 +00:00
|
|
|
//opens a window where users can select a web location to open
|
1999-09-18 01:27:36 +00:00
|
|
|
window.openDialog( "chrome://navigator/content/openLocation.xul", "_blank", "chrome,modal", appCore );
|
1999-09-14 21:30:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function createInstance( progid, iidName ) {
|
|
|
|
var iid = eval( "Components.interfaces." + iidName );
|
|
|
|
return Components.classes[ progid ].createInstance( iid );
|
|
|
|
}
|
|
|
|
|
|
|
|
function openNewWindowWith( url ) {
|
1999-09-16 19:20:56 +00:00
|
|
|
var newWin = window.openDialog( "chrome://navigator/content/navigator.xul", "_blank", "chrome,all,dialog=no", url );
|
1999-09-14 21:30:57 +00:00
|
|
|
|
|
|
|
// Fix new window.
|
|
|
|
newWin.saveFileAndPos = true;
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
1999-08-20 23:17:12 +00:00
|
|
|
|
|
|
|
function BrowserOpenFileWindow()
|
|
|
|
{
|
1999-09-14 21:30:57 +00:00
|
|
|
// Get filespecwithui component.
|
|
|
|
var fileSpec = createInstance( "component://netscape/filespecwithui", "nsIFileSpecWithUI" );
|
|
|
|
var url = fileSpec.chooseFile( "Open File" );
|
|
|
|
if ( url != "" ) {
|
|
|
|
openNewWindowWith( url );
|
|
|
|
}
|
1999-08-20 23:17:12 +00:00
|
|
|
}
|
1999-07-01 22:56:04 +00:00
|
|
|
|
|
|
|
function OpenFile(url) {
|
1999-09-14 21:30:57 +00:00
|
|
|
// Obsolete (called from C++ code that is no longer called).
|
|
|
|
dump( "OpenFile called?\n" );
|
|
|
|
openNewWindowWith( url );
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserCopy()
|
|
|
|
{
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Copying\n");
|
|
|
|
appCore.copy();
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function BrowserAddBookmark(url,title)
|
|
|
|
{
|
|
|
|
var bmks = Components.classes["component://netscape/browser/bookmarks-service"].getService();
|
|
|
|
bmks = bmks.QueryInterface(Components.interfaces.nsIBookmarksService);
|
|
|
|
bmks.AddBookmark(url, title);
|
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserEditBookmarks()
|
1999-09-14 23:09:19 +00:00
|
|
|
{
|
1999-08-11 22:27:57 +00:00
|
|
|
window.open("chrome://bookmarks/content/", "BookmarksWindow", "chrome,menubar,resizable,scrollbars");
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserPrintPreview()
|
|
|
|
{
|
|
|
|
// Borrowing this method to show how to
|
|
|
|
// dynamically change icons
|
|
|
|
dump("BrowserPrintPreview\n");
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Changing Icons\n");
|
|
|
|
appCore.printPreview();
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserPrint()
|
|
|
|
{
|
|
|
|
// Borrowing this method to show how to
|
|
|
|
// dynamically change icons
|
|
|
|
if (appCore != null) {
|
|
|
|
appCore.print();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserSetDefaultCharacterSet(aCharset)
|
|
|
|
{
|
|
|
|
if (appCore != null) {
|
|
|
|
appCore.SetDocumentCharset(aCharset);
|
1999-07-14 00:03:57 +00:00
|
|
|
window.content.location.reload();
|
1999-07-01 22:56:04 +00:00
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserClose()
|
|
|
|
{
|
1999-09-03 22:55:25 +00:00
|
|
|
// This code replicates stuff in Shutdown(). It is here because
|
|
|
|
// window.screenX and window.screenY have real values. We need
|
|
|
|
// to fix this eventually but by replicating the code here, we
|
|
|
|
// provide a means of saving position (it just requires that the
|
|
|
|
// user close the window via File->Close (vs. close box).
|
|
|
|
|
|
|
|
// Get the current window position/size.
|
|
|
|
var x = window.screenX;
|
|
|
|
var y = window.screenY;
|
|
|
|
var h = window.outerHeight;
|
|
|
|
var w = window.outerWidth;
|
|
|
|
|
|
|
|
// Store these into the window attributes (for persistence).
|
|
|
|
var win = document.getElementById( "main-window" );
|
|
|
|
win.setAttribute( "x", x );
|
|
|
|
win.setAttribute( "y", y );
|
|
|
|
win.setAttribute( "height", h );
|
|
|
|
win.setAttribute( "width", w );
|
|
|
|
|
1999-09-02 04:46:30 +00:00
|
|
|
window.close();
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
1999-09-16 23:44:07 +00:00
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
|
1999-09-01 20:14:02 +00:00
|
|
|
function BrowserSelectAll() {
|
|
|
|
if (appCore != null) {
|
1999-09-02 04:46:30 +00:00
|
|
|
appCore.selectAll();
|
1999-09-01 20:14:02 +00:00
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function BrowserFind() {
|
|
|
|
if (appCore != null) {
|
|
|
|
appCore.find();
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserFindAgain() {
|
|
|
|
if (appCore != null) {
|
|
|
|
appCore.findNext();
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserLoadURL()
|
|
|
|
{
|
|
|
|
if (appCore == null)
|
|
|
|
{
|
|
|
|
dump("BrowserAppCore has not been initialized\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// rjc: added support for URL shortcuts (3/30/1999)
|
|
|
|
try {
|
|
|
|
var bmks = Components.classes["component://netscape/browser/bookmarks-service"].getService();
|
|
|
|
bmks = bmks.QueryInterface(Components.interfaces.nsIBookmarksService);
|
|
|
|
|
|
|
|
var shortcutURL = bmks.FindShortcut(document.getElementById('urlbar').value);
|
|
|
|
|
|
|
|
dump("FindShortcut: in='" + document.getElementById('urlbar').value + "' out='" + shortcutURL + "'\n");
|
|
|
|
|
|
|
|
if ((shortcutURL != null) && (shortcutURL != "")) {
|
|
|
|
document.getElementById('urlbar').value = shortcutURL;
|
|
|
|
}
|
1999-08-06 20:49:16 +00:00
|
|
|
}
|
1999-07-01 22:56:04 +00:00
|
|
|
catch (ex) {
|
|
|
|
// stifle any exceptions so we're sure to load the URL.
|
|
|
|
}
|
|
|
|
|
|
|
|
appCore.loadUrl(document.getElementById('urlbar').value);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function WalletEditor()
|
|
|
|
{
|
1999-09-16 23:44:07 +00:00
|
|
|
window.open("chrome://wallet/content/WalletEditor.xul","walletEditor","modal,chrome,height=504,width=436");
|
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function WalletSafeFillin()
|
|
|
|
{
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Wallet Safe Fillin\n");
|
1999-07-14 00:03:57 +00:00
|
|
|
appCore.walletPreview(window, window.content);
|
1999-07-01 22:56:04 +00:00
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function WalletChangePassword()
|
|
|
|
{
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Wallet Change Password\n");
|
|
|
|
appCore.walletChangePassword();
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function WalletQuickFillin()
|
|
|
|
{
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Wallet Quick Fillin\n");
|
1999-07-14 00:03:57 +00:00
|
|
|
appCore.walletQuickFillin(window.content);
|
1999-07-01 22:56:04 +00:00
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-08-24 00:48:16 +00:00
|
|
|
function WalletRequestToCapture()
|
|
|
|
{
|
|
|
|
if (appCore != null) {
|
|
|
|
dump("Wallet Request To Capture\n");
|
|
|
|
appCore.walletRequestToCapture(window.content);
|
|
|
|
} else {
|
|
|
|
dump("BrowserAppCore has not been created!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function WalletSamples()
|
|
|
|
{
|
1999-09-16 23:44:07 +00:00
|
|
|
window.content.location.href= 'http://people.netscape.com/morse/wallet/samples/';
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function SignonViewer()
|
|
|
|
{
|
1999-09-16 23:44:07 +00:00
|
|
|
window.open("chrome://wallet/content/SignonViewer.xul","SSViewer","modal,chrome,height=504,width=436");
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function CookieViewer()
|
|
|
|
{
|
1999-09-16 23:44:07 +00:00
|
|
|
window.open("chrome://wallet/content/CookieViewer.xul","CookieViewer","modal,chrome,height=504,width=436");
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function OpenMessenger()
|
|
|
|
{
|
1999-09-16 19:20:56 +00:00
|
|
|
window.open("chrome://messenger/content/", "_blank", "chrome,menubar,toolbar,resizable");
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function OpenAddressbook()
|
|
|
|
{
|
1999-09-16 19:20:56 +00:00
|
|
|
window.open("chrome://addressbook/content/", "_blank", "chrome,menubar,toolbar,resizable");
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function MsgNewMessage()
|
|
|
|
{
|
1999-09-14 21:30:57 +00:00
|
|
|
// Open message compose window.
|
1999-09-16 19:20:56 +00:00
|
|
|
window.openDialog( "chrome://messengercompose/content/", "_blank", "chrome,all,dialog=no", "" );
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function BrowserViewSource()
|
|
|
|
{
|
1999-09-18 03:32:53 +00:00
|
|
|
dump("BrowserViewSource(); \n ");
|
|
|
|
// window.openDialog( "chrome://navigator/content/viewSource.xul", "_blank", "chrome,all,dialog=no", window.content.location );
|
|
|
|
// Use a browser window to view source
|
|
|
|
window.openDialog( "chrome://navigator/content/", "_blank", "chrome,menubar,status,dialog=no", window.content.location,"view-source" );
|
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
|
1999-07-22 00:27:14 +00:00
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
var bindCount = 0;
|
|
|
|
function onStatus() {
|
|
|
|
var status = document.getElementById("Browser:Status");
|
|
|
|
if ( status ) {
|
|
|
|
var text = status.getAttribute("value");
|
|
|
|
if ( text == "" ) {
|
|
|
|
text = defaultStatus;
|
|
|
|
}
|
|
|
|
var statusText = document.getElementById("statusText");
|
|
|
|
if ( statusText ) {
|
|
|
|
statusText.setAttribute( "value", text );
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
dump("Can't find status broadcaster!\n");
|
|
|
|
}
|
|
|
|
}
|
1999-08-18 03:17:20 +00:00
|
|
|
|
|
|
|
function onProtocolClick()
|
|
|
|
{
|
|
|
|
//TODO: need to hookup to page info
|
|
|
|
var status = document.getElementById("Browser:Status");
|
|
|
|
if ( status ) {
|
|
|
|
//var msg = "Hey, don't touch me there!";
|
|
|
|
//status.setAttribute("value",msg);
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
}
|
1999-08-18 03:17:20 +00:00
|
|
|
function onProtocolChange()
|
|
|
|
{
|
|
|
|
var protocolIcon = document.getElementById("Browser:ProtocolIcon");
|
|
|
|
var uri = protocolIcon.getAttribute("uri");
|
|
|
|
var icon = document.getElementById("protocol-icon");
|
|
|
|
|
|
|
|
icon.setAttribute("src",uri);
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
1999-08-18 03:17:20 +00:00
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
function doTests() {
|
|
|
|
}
|
1999-08-18 03:17:20 +00:00
|
|
|
|
1999-07-01 22:56:04 +00:00
|
|
|
var startTime = 0;
|
|
|
|
function onProgress() {
|
|
|
|
var throbber = document.getElementById("Browser:Throbber");
|
|
|
|
var meter = document.getElementById("Browser:LoadingProgress");
|
|
|
|
if ( throbber && meter ) {
|
|
|
|
var busy = throbber.getAttribute("busy");
|
1999-07-14 00:03:57 +00:00
|
|
|
var wasBusy = meter.getAttribute("mode") == "undetermined" ? "true" : "false";
|
1999-07-01 22:56:04 +00:00
|
|
|
if ( busy == "true" ) {
|
1999-07-14 00:03:57 +00:00
|
|
|
if ( wasBusy == "false" ) {
|
|
|
|
// Remember when loading commenced.
|
|
|
|
startTime = (new Date()).getTime();
|
|
|
|
// Turn progress meter on.
|
|
|
|
meter.setAttribute("mode","undetermined");
|
|
|
|
}
|
|
|
|
// Update status bar.
|
|
|
|
} else if ( busy == "false" && wasBusy == "true" ) {
|
|
|
|
// Record page loading time.
|
1999-07-01 22:56:04 +00:00
|
|
|
var status = document.getElementById("Browser:Status");
|
|
|
|
if ( status ) {
|
|
|
|
var elapsed = ( (new Date()).getTime() - startTime ) / 1000;
|
|
|
|
var msg = "Document: Done (" + elapsed + " secs)";
|
|
|
|
dump( msg + "\n" );
|
|
|
|
status.setAttribute("value",msg);
|
|
|
|
defaultStatus = msg;
|
|
|
|
}
|
1999-07-14 00:03:57 +00:00
|
|
|
// Turn progress meter off.
|
|
|
|
meter.setAttribute("mode","normal");
|
1999-07-01 22:56:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function dumpProgress() {
|
|
|
|
var broadcaster = document.getElementById("Browser:LoadingProgress");
|
|
|
|
var meter = document.getElementById("meter");
|
|
|
|
dump( "bindCount=" + bindCount + "\n" );
|
|
|
|
dump( "broadcaster mode=" + broadcaster.getAttribute("mode") + "\n" );
|
|
|
|
dump( "broadcaster value=" + broadcaster.getAttribute("value") + "\n" );
|
|
|
|
dump( "meter mode=" + meter.getAttribute("mode") + "\n" );
|
|
|
|
dump( "meter value=" + meter.getAttribute("value") + "\n" );
|
|
|
|
}
|
|
|
|
|
1999-09-03 22:55:25 +00:00
|
|
|
function BrowserReload() {
|
|
|
|
dump( "Sorry, command not implemented: " + window.event.srcElement + "\n" );
|
|
|
|
}
|
1999-09-10 01:03:06 +00:00
|
|
|
|
1999-09-19 07:11:34 +00:00
|
|
|
function hiddenWindowStartup()
|
|
|
|
{
|
|
|
|
// Disable menus which are not appropriate
|
|
|
|
var disabledItems = ['cmd_close', 'Browser:SendPage', 'Browser:EditPage', 'Browser:PrintSetup', 'Browser:PrintPreview',
|
|
|
|
'Browser:Print', 'canGoBack', 'canGoForward', 'Browser:Home', 'Browser:AddBookmark', 'cmd_undo',
|
|
|
|
'cmd_redo', 'cmd_cut', 'cmd_copy','cmd_paste', 'cmd_delete', 'cmd_selectAll'];
|
|
|
|
for ( id in disabledItems )
|
|
|
|
{
|
1999-09-19 07:21:20 +00:00
|
|
|
// dump("disabling "+disabledItems[id]+"\n");
|
1999-09-19 07:11:34 +00:00
|
|
|
var broadcaster = document.getElementById( disabledItems[id]);
|
|
|
|
broadcaster.setAttribute("disabled","true");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-09-10 01:03:06 +00:00
|
|
|
// Tile
|
|
|
|
function TileWindow()
|
|
|
|
{
|
|
|
|
var xShift = 25;
|
|
|
|
var yShift = 50;
|
|
|
|
var done = false;
|
|
|
|
var windowManager = Components.classes['component://netscape/rdf/datasource?name=window-mediator'].getService();
|
|
|
|
dump("got window Manager \n");
|
|
|
|
var windowManagerInterface = windowManager.QueryInterface( Components.interfaces.nsIWindowMediator);
|
|
|
|
|
|
|
|
var enumerator = windowManagerInterface.GetEnumerator( null );
|
|
|
|
|
|
|
|
var xOffset = screen.availLeft;
|
|
|
|
var yOffset = screen.availRight;
|
|
|
|
do
|
|
|
|
{
|
|
|
|
var currentWindow = windowManagerInterface.ConvertISupportsToDOMWindow ( enumerator.GetNext() );
|
|
|
|
if ( currentWindow.screenX == screenX && currentWindow.screenY == screenY )
|
|
|
|
{
|
|
|
|
alreadyThere = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} while ( enumerator.HasMoreElements() )
|
|
|
|
|
|
|
|
if ( alreadyThere )
|
|
|
|
{
|
|
|
|
enumerator = windowManagerInterface.GetEnumerator( null );
|
|
|
|
do
|
|
|
|
{
|
|
|
|
var currentWindow = windowManagerInterface.ConvertISupportsToDOMWindow ( enumerator.GetNext() );
|
|
|
|
if ( currentWindow.screenX == screenX+xOffset*xShift+yOffset*xShift && currentWindow.screenY == screenY+yShift*xOffset && window != currentWindow )
|
|
|
|
{
|
|
|
|
xOffset++;
|
|
|
|
if ( (screenY+outerHeight < screen.availHeight) && (screenY+outerHeight+yShift*xOffset > screen.availHeight ) )
|
|
|
|
{
|
|
|
|
dump(" increment yOffset");
|
|
|
|
yOffset++;
|
|
|
|
xOffset = 0;
|
|
|
|
}
|
|
|
|
enumerator = windowManagerInterface.GetEnumerator( null );
|
|
|
|
}
|
|
|
|
} while ( enumerator.HasMoreElements() )
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( xOffset > 0 || yOffset >0 )
|
|
|
|
{
|
|
|
|
dump( "offsets:"+xOffset+" "+yOffset+"\n");
|
|
|
|
dump("Move by ("+ xOffset*xShift + yOffset*xShift +","+ yShift*xOffset +")\n");
|
|
|
|
moveBy( xOffset*xShift + yOffset*xShift, yShift*xOffset );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Make sure that a window fits fully on the screen. Will move to preserve size, and then shrink to fit
|
|
|
|
function FitToScreen()
|
|
|
|
{
|
|
|
|
var moveX = screenX;
|
|
|
|
var sizeX = outerWidth;
|
|
|
|
var moveY = screenY;
|
|
|
|
var sizeY = outerHeight;
|
|
|
|
|
|
|
|
dump( " move to ("+moveX+","+moveY+") size to ("+sizeX+","+sizeY+") \n");
|
|
|
|
var totalWidth = screenX+outerWidth;
|
|
|
|
if ( totalWidth > screen.availWidth )
|
|
|
|
{
|
|
|
|
if( outerWidth > screen.availWidth )
|
|
|
|
{
|
|
|
|
sizeX = screen.availWidth;
|
|
|
|
moveX = screen.availLeft;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
moveX = screen.availWidth- outerWidth;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var totalHeight = screenY+outerHeight;
|
|
|
|
if ( totalHeight > screen.availHeight )
|
|
|
|
{
|
|
|
|
if( outerWidth > screen.availHeight )
|
|
|
|
{
|
|
|
|
sizeY = screen.availHeight;
|
|
|
|
moveY = screen.availTop;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
moveY = screen.availHeight- outerHeight;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
dump( " move to ("+moveX+","+moveY+") size to ("+sizeX+","+sizeY+") \n");
|
|
|
|
if ( (moveY- screenY != 0 ) || (moveX-screenX != 0 ) )
|
|
|
|
moveTo( moveX,moveY );
|
|
|
|
|
|
|
|
// Maintain a minimum size
|
|
|
|
if ( sizeY< 100 )
|
|
|
|
sizeY = 100;
|
|
|
|
if ( sizeX < 100 )
|
|
|
|
sizeX = 100;
|
|
|
|
if ( (sizeY- outerHeight != 0 ) || (sizeX-outerWidth != 0 ) )
|
|
|
|
{
|
|
|
|
//outerHeight = sizeY;
|
|
|
|
//outerWidth = sizeX;
|
|
|
|
resizeTo( sizeX,sizeY );
|
|
|
|
}
|
|
|
|
}
|
1999-09-16 04:15:40 +00:00
|
|
|
|
|
|
|
// Set given attribute of specified context-menu item. If the
|
|
|
|
// value is null, then it removes the attribute (which works
|
|
|
|
// nicely for the disabled attribute).
|
|
|
|
function setContextMenuItemAttr( id, attr, val ) {
|
|
|
|
var elem = document.getElementById( id );
|
|
|
|
if ( elem ) {
|
|
|
|
if ( val == null ) {
|
|
|
|
// null indicates attr should be removed.
|
|
|
|
elem.removeAttribute( attr );
|
|
|
|
} else {
|
|
|
|
// Set attr=val.
|
|
|
|
elem.setAttribute( attr, val );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set context menu attribute according to like attribute of another node
|
|
|
|
// (such as a broadcaster).
|
|
|
|
function setContextMenuItemAttrFromNode( item_id, attr, other_id ) {
|
|
|
|
var elem = document.getElementById( other_id );
|
|
|
|
if ( elem && elem.getAttribute( attr ) == "true" ) {
|
|
|
|
setContextMenuItemAttr( item_id, attr, "true" );
|
|
|
|
} else {
|
|
|
|
setContextMenuItemAttr( item_id, attr, null );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Return "true" if we're not on a link, null otherwise (seems odd, but it gives
|
|
|
|
// us the proper value to which to set a disabled attribute to).
|
|
|
|
function isNotOnLink( event ) {
|
|
|
|
// Not implemented so all link-based options are disabled.
|
|
|
|
return "true";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Returns "true" if we're not in a frame, null otherwise (see above).
|
|
|
|
function isNotInFrame( event ) {
|
|
|
|
// Not implemented so all frame-based options are disabled.
|
|
|
|
return "true";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Returns "true" if we're not on an image, null otherwise (see above).
|
|
|
|
function isNotOnImage( event ) {
|
|
|
|
// Not implemented so all image-based options are disabled.
|
|
|
|
return "true";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Returns "true" if we're not on a background image, null otherwise (see above).
|
|
|
|
function isNotOnBGImage( event ) {
|
|
|
|
// Not implemented so all background-image-based options are disabled.
|
|
|
|
return "true";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Returns "true" if there's no text selected, null otherwise (see above).
|
|
|
|
function isNoTextSelected( event ) {
|
|
|
|
// Not implemented so all text-selected-based options are disabled.
|
|
|
|
return "true";
|
|
|
|
}
|
|
|
|
|
1999-09-22 07:30:44 +00:00
|
|
|
// Takes JS expression and dumps "expr="+expr+"\n"
|
|
|
|
function dumpExpr( expr ) {
|
|
|
|
dump( expr+"="+eval(expr)+"\n" );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Function to display contextual info.
|
|
|
|
function dumpContext() {
|
|
|
|
dumpExpr( " contextTarget.element" );
|
|
|
|
dumpExpr( "contextTarget.element.tagName" );
|
|
|
|
dumpExpr( " contextTarget.onImage" );
|
|
|
|
dumpExpr( " contextTarget.imageSrc" );
|
|
|
|
dumpExpr( " contextTarget.onLink" );
|
|
|
|
dumpExpr( " contextTarget.linkHref" );
|
|
|
|
dumpExpr( " contextTarget.inFrame" );
|
|
|
|
dumpExpr( " contextTarget.frameHref" );
|
|
|
|
dumpExpr( " contextTarget.hasBGImage" );
|
|
|
|
dumpExpr( " contextTarget.bgImageSrc" );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remember what was clicked on and gather info about it.
|
|
|
|
var contextTarget;
|
|
|
|
function BrowserSetContextTarget( node ) {
|
|
|
|
// Initialize contextual info.
|
|
|
|
contextTarget = new Object;
|
|
|
|
contextTarget.onImage = false;
|
|
|
|
contextTarget.onLink = false;
|
|
|
|
contextTarget.inFrame = false;
|
|
|
|
contextTarget.hasBGImage = false;
|
|
|
|
|
|
|
|
// Remember the element that was clicked.
|
|
|
|
contextTarget.element = node;
|
|
|
|
|
|
|
|
// See if the user clicked on an image.
|
|
|
|
if ( contextTarget.element.nodeType == 1
|
|
|
|
&&
|
|
|
|
contextTarget.element.tagName.toUpperCase() == "IMG" ) {
|
|
|
|
// Record that.
|
|
|
|
contextTarget.onImage = true;
|
|
|
|
contextTarget.imageSrc = contextTarget.element.getAttribute( "SRC" );
|
|
|
|
}
|
|
|
|
|
|
|
|
// See if the user clicked in a frame.
|
|
|
|
if ( contextTarget.element.ownerDocument != window.content.document ) {
|
|
|
|
contextTarget.inFrame = true;
|
|
|
|
contextTarget.frameHref = contextTarget.element.ownerDocument.location.href;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bubble out, looking for link.
|
|
|
|
var elem = contextTarget.element;
|
|
|
|
while ( elem ) {
|
|
|
|
// Test for element types of interest.
|
|
|
|
if ( elem.nodeType == 1 && elem.tagName.toUpperCase() == "A" ) {
|
|
|
|
// Clicked on a link.
|
|
|
|
contextTarget.onLink = true;
|
|
|
|
contextTarget.linkHref = elem.getAttribute( "HREF" );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
elem = elem.parentNode;
|
|
|
|
}
|
|
|
|
dumpContext();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set various context menu attributes based on the state of the world.
|
1999-09-16 04:15:40 +00:00
|
|
|
function BrowserSetupContextMenu( menu, event ) {
|
1999-09-22 07:30:44 +00:00
|
|
|
// Get context.
|
|
|
|
BrowserSetContextTarget(document.popupNode);
|
1999-09-16 04:15:40 +00:00
|
|
|
|
1999-09-22 07:30:44 +00:00
|
|
|
//-------------------------------------------------------------------------
|
1999-09-17 23:53:20 +00:00
|
|
|
|
1999-09-22 07:30:44 +00:00
|
|
|
var needSep = false;
|
|
|
|
|
|
|
|
// Remove open/edit link if not applicable.
|
|
|
|
if ( !contextTarget.onLink ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-openlink" ) );
|
|
|
|
menu.removeChild( document.getElementById( "context-editlink" ) );
|
|
|
|
} else {
|
|
|
|
needSep = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remove open frame if not applicable.
|
|
|
|
if ( !contextTarget.inFrame ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-openframe" ) );
|
|
|
|
} else {
|
|
|
|
needSep = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !needSep ) {
|
|
|
|
// Remove separator.
|
|
|
|
menu.removeChild( document.getElementById( "context-sep-open" ) );
|
|
|
|
}
|
1999-09-16 04:15:40 +00:00
|
|
|
|
1999-09-17 23:53:20 +00:00
|
|
|
//-------------------------------------------------------------------------
|
1999-09-16 04:15:40 +00:00
|
|
|
|
|
|
|
// Back determined by canGoBack broadcaster.
|
|
|
|
setContextMenuItemAttrFromNode( "context-back", "disabled", "canGoBack" );
|
|
|
|
|
|
|
|
// Forward determined by canGoForward broadcaster.
|
|
|
|
setContextMenuItemAttrFromNode( "context-forward", "disabled", "canGoForward" );
|
|
|
|
|
|
|
|
// Reload is always OK.
|
|
|
|
|
|
|
|
// Stop determined by canStop broadcaster.
|
|
|
|
setContextMenuItemAttrFromNode( "context-stop", "disabled", "canStop" );
|
|
|
|
|
1999-09-17 23:53:20 +00:00
|
|
|
//-------------------------------------------------------------------------
|
1999-09-16 04:15:40 +00:00
|
|
|
|
|
|
|
// View source is always OK.
|
|
|
|
|
1999-09-17 23:53:20 +00:00
|
|
|
// View frame source depends on whether we're in a frame.
|
1999-09-22 07:30:44 +00:00
|
|
|
if ( !contextTarget.inFrame ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-viewframesource" ) );
|
|
|
|
}
|
1999-09-17 23:53:20 +00:00
|
|
|
|
1999-09-16 04:15:40 +00:00
|
|
|
// View Info don't work no way no how.
|
1999-09-22 07:30:44 +00:00
|
|
|
menu.removeChild( document.getElementById( "context-viewinfo" ) );
|
1999-09-16 04:15:40 +00:00
|
|
|
|
1999-09-22 07:30:44 +00:00
|
|
|
// View Frame Info isn't working, either.
|
|
|
|
menu.removeChild( document.getElementById( "context-viewframeinfo" ) );
|
1999-09-17 23:53:20 +00:00
|
|
|
|
1999-09-22 07:30:44 +00:00
|
|
|
// View Image depends on whether an image was clicked on.
|
|
|
|
if ( !contextTarget.onImage ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-viewimage" ) );
|
|
|
|
}
|
1999-09-16 04:15:40 +00:00
|
|
|
|
1999-09-17 23:53:20 +00:00
|
|
|
//-------------------------------------------------------------------------
|
1999-09-16 04:15:40 +00:00
|
|
|
|
|
|
|
// Add bookmark always OK.
|
|
|
|
|
|
|
|
// Send Page not working yet.
|
1999-09-22 07:30:44 +00:00
|
|
|
menu.removeChild( document.getElementById( "context-sendpage" ) );
|
1999-09-16 04:15:40 +00:00
|
|
|
|
1999-09-17 23:53:20 +00:00
|
|
|
//-------------------------------------------------------------------------
|
1999-09-16 04:15:40 +00:00
|
|
|
|
|
|
|
// Save page is always OK.
|
|
|
|
|
1999-09-17 23:53:20 +00:00
|
|
|
// Save frame as depends on whether we're in a frame.
|
1999-09-22 07:30:44 +00:00
|
|
|
if ( !contextTarget.inFrame ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-saveframe" ) );
|
|
|
|
}
|
1999-09-17 23:53:20 +00:00
|
|
|
|
|
|
|
// Save link depends on whether we're in a link.
|
1999-09-22 07:30:44 +00:00
|
|
|
if ( !contextTarget.onLink ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-savelink" ) );
|
|
|
|
}
|
1999-09-17 23:53:20 +00:00
|
|
|
|
1999-09-16 04:15:40 +00:00
|
|
|
// Save background image depends on whether there is one.
|
1999-09-22 07:30:44 +00:00
|
|
|
if ( !contextTarget.hasBGImage ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-savebgimage" ) );
|
|
|
|
}
|
1999-09-16 04:15:40 +00:00
|
|
|
|
1999-09-22 07:30:44 +00:00
|
|
|
// Save image depends on whether there is one.
|
|
|
|
if ( !contextTarget.onImage ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-saveimage" ) );
|
|
|
|
}
|
1999-09-16 04:15:40 +00:00
|
|
|
|
1999-09-17 23:53:20 +00:00
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// Select All is always OK.
|
1999-09-16 04:15:40 +00:00
|
|
|
|
|
|
|
// Copy depends on whether there is selected text.
|
|
|
|
setContextMenuItemAttr( "context-copy", "disabled", isNoTextSelected() );
|
|
|
|
|
|
|
|
// Copy link location depends on whether we're on a link.
|
1999-09-22 07:30:44 +00:00
|
|
|
if ( !contextTarget.onLink ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-copylink" ) );
|
|
|
|
}
|
1999-09-16 04:15:40 +00:00
|
|
|
|
1999-09-22 07:30:44 +00:00
|
|
|
// Copy image location depends on whether we're on an image.
|
|
|
|
if ( !contextTarget.onImage ) {
|
|
|
|
menu.removeChild( document.getElementById( "context-copyimage" ) );
|
|
|
|
}
|
1999-09-16 04:15:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Temporary workaround for DOM api not yet implemented.
|
|
|
|
function cloneNode( item ) {
|
|
|
|
// Create another element like the one we're cloning.
|
|
|
|
var node = document.createElement( item.tagName );
|
|
|
|
|
|
|
|
// Copy attributes from argument item to the new one.
|
|
|
|
var attrs = item.attributes;
|
|
|
|
for ( var i = 0; i < attrs.length; i++ ) {
|
|
|
|
var attr = attrs.item( i );
|
|
|
|
node.setAttribute( attr.nodeName, attr.nodeValue );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Voila!
|
|
|
|
return node;
|
|
|
|
}
|
|
|
|
|
|
|
|
// "create" the context menu by cloning the template.
|
|
|
|
function BrowserCreateContextMenu( menu, event ) {
|
|
|
|
var template = document.getElementById( "context-template" );
|
|
|
|
var items = template.childNodes;
|
|
|
|
for ( var i = 0; i < items.length; i++ ) {
|
|
|
|
// Replicate item.
|
|
|
|
//var item = items.item(i).cloneNode( false );
|
|
|
|
|
|
|
|
// cloneNode not implemented, fake it.
|
|
|
|
var item = cloneNode( items.item(i) );
|
|
|
|
|
|
|
|
// Change id.
|
|
|
|
item.setAttribute( "id", item.getAttribute( "id" ).replace( "template-", "context-" ) );
|
|
|
|
|
|
|
|
// Add it to popup menu.
|
|
|
|
menu.appendChild( item );
|
|
|
|
}
|
|
|
|
// Tweak the menu.
|
|
|
|
BrowserSetupContextMenu( menu, event );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remove all the children which we added at oncreate.
|
|
|
|
function BrowserDestroyContextMenu( menu ) {
|
|
|
|
var items = menu.childNodes;
|
|
|
|
for ( var i = 0; i < items.length; i++ ) {
|
|
|
|
menu.removeChild( items.item(i) );
|
|
|
|
}
|
|
|
|
}
|