gecko-dev/suite/browser/navigator.js

1299 строки
36 KiB
JavaScript
Исходник Обычный вид История

1999-07-02 02:56:04 +04: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.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
1999-07-02 02:56:04 +04:00
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
1999-07-02 02:56:04 +04:00
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
1999-07-02 02:56:04 +04:00
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
1999-07-02 02:56:04 +04:00
*/
var pref = null;
var bundle = srGetStrBundle("chrome://navigator/locale/navigator.properties");
// in case we fail to get the start page, load this
var startPageDefault = "about:blank";
// in case we fail to get the home page, load this
var homePageDefault = bundle.GetStringFromName( "homePageDefault" );
try {
pref = Components.classes['component://netscape/preferences'];
pref = pref.getService();
pref = pref.QueryInterface(Components.interfaces.nsIPref);
}
catch (ex) {
dump("failed to get prefs service!\n");
pref = null;
}
var appCore = null;
var explicitURL = false;
var textZoom = 1.0;
// Stored Status, Link and Loading values
var defaultStatus = bundle.GetStringFromName( "defaultStatus" );
var jsStatus = null;
var jsDefaultStatus = null;
var overLink = null;
var startTime = 0;
1999-07-02 02:56:04 +04:00
//cached elements/ fields
var statusTextFld = null;
var throbberElement = null;
var stopButton = null;
var stopMenu = null;
var locationFld = null;
var backButton = null;
var forwardButton = null;
function UpdateHistory(event)
{
// 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.
// dump("UpdateHistory: content's location is '" + window.content.location.href + "',\n");
//dump(" title is '" + window.content.document.title + "'\n");
if ((window.content.location.href) && (window.content.location.href != ""))
{
try
{
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);
}
catch (ex)
{
dump("failed to set the page title.\n");
}
}
}
function savePage( url ) {
// Default is to save current page.
if ( !url ) {
url = window.content.location.href;
}
// Use stream xfer component to prompt for destination and save.
var xfer = Components
.classes[ "component://netscape/appshell/component/xfer" ]
.getService( Components.interfaces.nsIStreamTransfer );
try {
// When Necko lands, we need to receive the real nsIChannel and
// do SelectFileAndTransferLocation!
// Use this for now...
xfer.SelectFileAndTransferLocationSpec( url, window );
} catch( exception ) {
// Failed (or cancelled), give them another chance.
dump( "SelectFileAndTransferLocationSpec failed, rv=" + exception + "\n" );
}
return;
}
1999-11-22 22:55:47 +03:00
function UpdateBookmarksLastVisitedDate(event)
{
if ((window.content.location.href) && (window.content.location.href != ""))
{
try
{
// 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);
if (bmks) bmks.UpdateBookmarkLastVisitedDate(window.content.location.href);
}
catch(ex)
{
dump("failed to update bookmark last visited date.\n");
}
}
}
function UpdateInternetSearchResults(event)
{
if ((window.content.location.href) && (window.content.location.href != ""))
{
var searchInProgressFlag = false;
try
{
var search = Components.classes["component://netscape/rdf/datasource?name=internetsearch"].getService();
if (search) search = search.QueryInterface(Components.interfaces.nsIInternetSearchService);
if (search) searchInProgressFlag = search.FindInternetSearchResults(window.content.location.href);
}
catch(ex)
{
}
if (searchInProgressFlag == true)
{
RevealSearchPanel();
}
}
}
function createBrowserInstance()
{
appCore = Components
.classes[ "component://netscape/appshell/component/browser/instance" ]
.createInstance( Components.interfaces.nsIBrowserInstance );
if ( !appCore ) {
alert( "Error creating browser instance\n" );
}
}
1999-07-02 02:56:04 +04:00
function UpdateStatusField()
{
var text = defaultStatus;
if(jsStatus)
text = jsStatus;
else if(overLink)
text = overLink;
else if(jsDefaultStatus)
text = jsDefaultStatus;
if(!statusTextFld)
statusTextFld = document.getElementById("statusText");
statusTextFld.setAttribute("value", text);
}
function nsXULBrowserWindow()
{
}
nsXULBrowserWindow.prototype =
{
QueryInterface : function(iid)
{
if(iid.equals(Components.interfaces.nsIXULBrowserWindow))
return this;
throw Components.results.NS_NOINTERFACE;
},
setJSStatus : function(status)
{
if(status == "")
jsStatus = null;
else
jsStatus = status;
UpdateStatusField();
},
setJSDefaultStatus : function(status)
{
if(status == "")
jsDefaultStatus = null;
else
jsDefaultStatus = status;
UpdateStatusField();
},
setDefaultStatus : function(status)
{
if(status == "")
defaultStatus = null;
else
defaultStatus = status;
UpdateStatusField();
},
setOverLink : function(link)
{
if(link == "")
overLink = null;
else
overLink = link;
UpdateStatusField();
},
setNetworkActive : function(active)
{
if(!throbberElement)
throbberElement = document.getElementById("Throbber");
throbberElement.setAttribute("busy", active);
var meter = document.getElementById("statusbar-icon");
if(active) // starting network activity
{
// Remember when loading commenced.
startTime = (new Date()).getTime();
// Turn progress meter on.
meter.setAttribute("mode","undetermined");
}
else // network activity finished
{
// Record page loading time.
var elapsed = ( (new Date()).getTime() - startTime ) / 1000;
var msg = bundle.GetStringFromName("nv_done") + " (" + elapsed + " secs)";
dump( msg + "\n" );
defaultStatus = msg;
UpdateStatusField();
window.XULBrowserWindow.setDefaultStatus(msg);
// Turn progress meter off.
meter.setAttribute("mode","normal");
}
},
setWindowActive : function(active)
{
if(!stopButton)
stopButton = document.getElementById("stop-button");
if(!stopMenu)
stopMenu = document.getElementById("menuitem-stop");
stopButton.setAttribute("disabled", !active);
stopMenu.setAttribute("disabled", !active);
},
onLocationChange : function(location)
{
if(!locationFld)
locationFld = document.getElementById("urlbar");
// We should probably not do this if the value has changed since the user
// searched
locationFld.setAttribute("value", location);
UpdateBackForwardButtons();
}
}
function UpdateBackForwardButtons()
{
if(!backButton)
backButton = document.getElementById("canGoBack");
if(!forwardButton)
forwardButton = document.getElementById("canGoForward");
backButton.setAttribute("disabled", !appCore.canGoBack);
forwardButton.setAttribute("disabled", !appCore.canGoForward);
}
function Startup()
{
window.XULBrowserWindow = new nsXULBrowserWindow();
// TileWindow();
// Make sure window fits on screen initially
//FitToScreen();
// Create the browser instance component.
createBrowserInstance();
if (appCore == null) {
// Give up.
window.close();
}
// Initialize browser instance..
appCore.setWebShellWindow(window);
tryToSetContentWindow();
// Add a capturing event listener to the content area
// (rjc note: not the entire window, otherwise we'll get sidebar pane loads too!)
// so we'll be notified when onloads complete.
var contentArea = document.getElementById("appcontent");
if (contentArea)
{
contentArea.addEventListener("load", UpdateHistory, true);
contentArea.addEventListener("load", UpdateBookmarksLastVisitedDate, true);
contentArea.addEventListener("load", UpdateInternetSearchResults, true);
}
1999-07-02 02:56:04 +04:00
// Check for window.arguments[0]. If present, go to that url.
if ( window.arguments && window.arguments[0] ) {
// Load it using yet another psuedo-onload handler.
onLoadViaOpenDialog();
}
1999-07-02 02:56:04 +04:00
}
function Shutdown()
{
try
{
// If bookmarks are dirty, flush 'em to disk
var bmks = Components.classes["component://netscape/browser/bookmarks-service"].getService();
if (bmks) bmks = bmks.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
if (bmks) bmks.Flush();
}
catch (ex)
{
}
try
{
// give history a change at flushing to disk also
var history = getService( "component://netscape/browser/global-history", "nsIRDFRemoteDataSource" );
if (history)
history.Flush();
}
catch (ex)
{
}
// Close the app core.
if ( appCore )
appCore.close();
}
function onLoadViaOpenDialog() {
// See if load in progress (loading default page).
if ( document.getElementById("Throbber").getAttribute("busy") == "true" ) {
dump( "Stopping load of default initial page\n" );
appCore.stop();
}
dump( "Loading page specified via openDialog\n" );
appCore.loadUrl( window.arguments[0] );
1999-07-02 02:56:04 +04:00
}
function tryToSetContentWindow() {
var startpage = startPageDefault;
if ( window.content ) {
dump("Setting content window\n");
appCore.setContentWindow( window.content );
// Have browser app core load appropriate initial page.
/* sspitzer: I think this code is unnecessary, but I'll leave it until I prove it */
/* START OF UNNECESSARY CODE */
if ( !explicitURL ) {
try {
var handler = Components.classes['component://netscape/commandlinehandler/general-startup-browser'];
handler = handler.getService();
handler = handler.QueryInterface(Components.interfaces.nsICmdLineHandler);
if (handler) {
startpage = handler.defaultArgs;
}
}
catch (ex) {
dump("failed, reason: " + ex + "\n");
startpage = startPageDefault;
}
//dump("startpage = " + startpage + "\n");
var args = document.getElementById("args")
if (args) args.setAttribute("value", startpage);
}
/* END OF UNNECESSARY CODE */
appCore.loadInitialPage();
} else {
// Try again.
dump("Scheduling later attempt to set content window\n");
window.setTimeout( "tryToSetContentWindow()", 100 );
}
}
1999-07-02 02:56:04 +04:00
function Translate()
{
var service = "http://cgi.netscape.com/cgi-bin/translate.cgi?AlisUI=simple_frames/ns_home";
// if we're already viewing a translated page, then just get the
// last argument (which we expect to always be "AlisTargetURI")
var targetURI = window.content.location.href;
var targetURIIndex = targetURI.indexOf("AlisTargetURI=");
if (targetURIIndex >= 0)
{
targetURI = targetURI.substring(targetURIIndex + 14);
}
service += "&AlisTargetURI=" + targetURI;
window.content.location.href = service;
}
1999-07-02 02:56:04 +04:00
function RefreshUrlbar()
{
//Refresh the urlbar bar
document.getElementById('urlbar').value = window.content.location.href;
}
function gotoHistoryIndex(index)
{
appCore.gotoHistoryIndex(index);
}
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-02 02:56:04 +04: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-02 02:56:04 +04: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;
}
var canStop = stopBElem.getAttribute("disabled");
var sb = document.getElementById("stop-button");
if (!sb) {
dump("Could not obtain handle to stop button\n");
return;
}
// 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");
}
}
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");
// If the reload button is currently disabled, just return
if ( canreload) {
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-02 02:56:04 +04:00
function BrowserHome()
{
// this eventual calls nsGlobalWIndow::Home()
window.content.home();
RefreshUrlbar();
}
2006-09-14 09:49:08 +04:00
function setKeyword(index)
{
urlbar = document.getElementById('urlbar');
if (!urlbar)
return;
switch(index) {
case 0:
urlbar.focus();
urlbar.value = bundle.GetStringFromName("quoteKeyword");
urlbar.setSelectionRange(14,33);
break;
case 1:
urlbar.focus();
urlbar.value = bundle.GetStringFromName("localKeyword");
urlbar.setSelectionRange(12,27);
break;
case 2:
urlbar.focus();
urlbar.value = bundle.GetStringFromName("shopKeyword");
urlbar.setSelectionRange(13,22);
break;
case 3:
urlbar.focus();
urlbar.value = bundle.GetStringFromName("careerKeyword");
urlbar.setSelectionRange(8,19);
break;
case 4:
if (appCore)
appCore.loadUrl(bundle.GetStringFromName("webmailKeyword"));
else
dump("Couldn't find instance of BrowserAppCore\n");
break;
case 5:
if (appCore)
appCore.loadUrl(bundle.GetStringFromName("keywordList"));
else
dump("Couldn't find instance of BrowserAppCore\n");
break;
break;
}
}
function OpenBookmarkURL(node, datasources)
{
if (node.getAttribute('container') == "true") {
return false;
}
1999-07-02 02:56:04 +04:00
var url = node.getAttribute('id');
try
{
// add support for IE favorites under Win32, and NetPositive URLs under BeOS
var rdf = Components.classes["component://netscape/rdf/rdf-service"].getService();
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
if (rdf && datasources)
{
var src = rdf.GetResource(url, true);
var prop = rdf.GetResource("http://home.netscape.com/NC-rdf#URL", true);
var target = datasources.GetTarget(src, prop, true);
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
if (target) target = target.Value;
if (target) url = target;
}
}
catch(ex)
{
}
// Ignore "NC:" urls.
if (url.substring(0, 3) == "NC:") {
return false;
}
// 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();
}
}
function OpenSearch(tabName, forceDialogFlag, searchStr)
1999-08-06 03:09:42 +04:00
{
var searchMode = 0;
var searchEngineURI = null;
var autoOpenSearchPanel = false;
1999-12-30 17:42:33 +03:00
var defaultSearchURL = null;
var fallbackDefaultSearchURL = "http://search.netscape.com/cgi-bin/search?search="
try
{
searchMode = pref.GetIntPref("browser.search.powermode");
autoOpenSearchPanel = pref.GetBoolPref("browser.search.opensidebarsearchpanel");
1999-12-30 17:42:33 +03:00
searchEngineURI = pref.CopyCharPref("browser.search.defaultengine");
1999-12-30 18:18:52 +03:00
defaultSearchURL = pref.CopyCharPref("browser.search.defaulturl");
}
catch(ex)
{
}
dump("Search defaultSearchURL: " + defaultSearchURL + "\n");
1999-12-30 17:42:33 +03:00
if ((defaultSearchURL == null) || (defaultSearchURL == ""))
{
// Fallback to a Netscape default (one that we can get sidebar search results for)
defaultSearchURL = fallbackDefaultSearchURL;
1999-12-30 17:42:33 +03:00
}
dump("This is before the search " + window.content.location.href + "\n");
dump("This is before the search " + searchStr + "\n");
if ((window.content.location.href == searchStr) || (searchStr == ''))
{
if (!(defaultSearchURL == fallbackDefaultSearchURL)) {
window.content.location.href = defaultSearchURL;
}
else
{
window.content.location.href = "http://search.netscape.com/"
}
}
else
{
if ((searchMode == 1) || (forceDialogFlag == true))
{
// Use a single search dialog
var cwindowManager = Components.classes["component://netscape/rdf/datasource?name=window-mediator"].getService();
var iwindowManager = Components.interfaces.nsIWindowMediator;
var windowManager = cwindowManager.QueryInterface(iwindowManager);
var searchWindow = windowManager.getMostRecentWindow("search:window");
if (searchWindow)
{
searchWindow.focus();
if (searchWindow.loadPage) searchWindow.loadPage(tabName, searchStr);
}
else
{
window.openDialog("chrome://search/content/search.xul", "SearchWindow", "dialog=no,close,chrome,resizable", tabName, searchStr);
}
}
else
{
if ((!searchStr) || (searchStr == "")) return;
var searchDS = Components.classes["component://netscape/rdf/datasource?name=internetsearch"].getService();
if (searchDS) searchDS = searchDS.QueryInterface(Components.interfaces.nsIInternetSearchService);
var escapedSearchStr = escape(searchStr);
defaultSearchURL += escapedSearchStr;
if (searchDS)
{
searchDS.RememberLastSearchText(escapedSearchStr);
if ((searchEngineURI != null) && (searchEngineURI != ""))
{
try
{
var searchURL = searchDS.GetInternetSearchURL(searchEngineURI, escapedSearchStr);
if ((searchURL != null) && (searchURL != ""))
{
defaultSearchURL = searchURL;
}
}
catch(ex)
{
}
}
}
window.content.location.href = defaultSearchURL;
}
}
// should we try and open up the sidebar to show the "Search Results" panel?
if (autoOpenSearchPanel == true)
{
RevealSearchPanel();
}
}
function RevealSearchPanel()
{
// rjc Note: the following is all a hack until the sidebar has appropriate APIs
// to check whether its shown/hidden, open/closed, and can show a particular panel
var sidebar = document.getElementById("sidebar-box");
var sidebar_splitter = document.getElementById("sidebar-splitter");
var searchPanel = document.getElementById("urn:sidebar:panel:search");
if (sidebar && sidebar_splitter && searchPanel)
{
var is_hidden = sidebar.getAttribute("hidden");
if (is_hidden && is_hidden == "true")
{
2006-09-14 09:43:55 +04:00
// SidebarShowHide() lives in sidebarOverlay.js
SidebarShowHide();
}
2006-09-14 09:43:55 +04:00
var splitter_state = sidebar_splitter.getAttribute("state");
if (splitter_state && splitter_state == "collapsed") {
sidebar_splitter.removeAttribute("state");
}
2006-09-14 09:43:55 +04:00
// SidebarSelectPanel() lives in sidebarOverlay.js
SidebarSelectPanel(searchPanel);
}
1999-08-06 03:09:42 +04:00
}
function BrowserNewWindow()
{
OpenBrowserWindow();
}
1999-07-02 02:56:04 +04:00
function BrowserEditPage(url)
{
window.openDialog( "chrome://editor/content", "_blank", "chrome,all,dialog=no", url );
}
//Note: BrowserNewEditorWindow() was moved to globalOverlay.xul and renamed to NewEditorWindow()
1999-07-02 02:56:04 +04:00
function BrowserOpenWindow()
{
//opens a window where users can select a web location to open
window.openDialog( "chrome://navigator/content/openLocation.xul", "_blank", "chrome,modal", appCore );
}
/* Called from the openLocation dialog. This allows that dialog to instruct
its opener to open a new window and then step completely out of the way.
Anything less byzantine is causing horrible crashes, rather believably,
though oddly only on Linux. */
function delayedOpenWindow(chrome,flags,url) {
setTimeout("window.openDialog('"+chrome+"','_blank','"+flags+"','"+url+"')", 10);
}
1999-09-15 01:30:57 +04:00
function createInstance( progid, iidName ) {
var iid = Components.interfaces[iidName];
return Components.classes[ progid ].createInstance( iid );
}
1999-10-01 08:43:45 +04:00
function createInstanceById( cid, iidName ) {
var iid = Components.interfaces[iidName];
return Components.classesByID[ cid ].createInstance( iid );
}
1999-10-01 08:43:45 +04:00
function getService( progid, iidName ) {
var iid = Components.interfaces[iidName];
return Components.classes[ progid ].getService( iid );
}
1999-10-01 08:43:45 +04:00
function getServiceById( cid, iidName ) {
var iid = Components.interfaces[iidName];
return Components.classesByID[ cid ].getService( iid );
}
1999-09-15 01:30:57 +04:00
function openNewWindowWith( url ) {
var newWin = window.openDialog( "chrome://navigator/content/navigator.xul", "_blank", "chrome,all,dialog=no", url );
// Fix new window.
newWin.saveFileAndPos = true;
}
const nsIFilePicker = Components.interfaces.nsIFilePicker;
function BrowserOpenFileWindow()
{
// Get filepicker component.
try {
var fp = Components.classes["component://mozilla/filepicker"].createInstance(nsIFilePicker);
fp.init(window, bundle.GetStringFromName("openFile"), nsIFilePicker.modeOpen);
fp.setFilters(nsIFilePicker.filterAll);
2006-09-14 09:48:00 +04:00
if (fp.show() == nsIFilePicker.returnOK) {
openNewWindowWith(fp.fileURL.spec);
}
} catch (ex) { }
}
function OpenFile(url) {
// Obsolete (called from C++ code that is no longer called).
dump( "OpenFile called?\n" );
1999-09-15 01:30:57 +04:00
openNewWindowWith( url );
}
1999-07-02 02:56:04 +04:00
function BrowserCopy()
{
if (appCore != null) {
dump("Copying\n");
appCore.copy();
} else {
dump("BrowserAppCore has not been created!\n");
}
}
1999-07-02 02:56:04 +04:00
function BrowserAddBookmark(url,title)
{
var bmks = Components.classes["component://netscape/browser/bookmarks-service"].getService();
bmks = bmks.QueryInterface(Components.interfaces.nsIBookmarksService);
if ((title == null) || (title == ""))
{
title = url;
}
bmks.AddBookmark(url, title);
}
1999-07-02 02:56:04 +04:00
// Set up a lame hack to avoid opening two bookmarks.
// Could otherwise happen with two Ctrl-B's in a row.
var gDisableBookmarks = false;
function enableBookmarks() {
gDisableBookmarks = false;
}
function BrowserEditBookmarks()
{
// Use a single sidebar bookmarks dialog
var cwindowManager = Components.classes['component://netscape/rdf/datasource?name=window-mediator'].getService();
var iwindowManager = Components.interfaces.nsIWindowMediator;
var windowManager = cwindowManager.QueryInterface(iwindowManager);
var bookmarksWindow = windowManager.getMostRecentWindow('bookmarks:manager');
if (bookmarksWindow) {
//debug("Reuse existing bookmarks window");
bookmarksWindow.focus();
} else {
//debug("Open a new bookmarks dialog");
if (true == gDisableBookmarks) {
//debug("Recently opened one. Wait a little bit.");
return;
}
gDisableBookmarks = true;
window.open("chrome://bookmarks/content/", "_blank", "chrome,menubar,resizable,scrollbars");
setTimeout(enableBookmarks, 2000);
1999-07-02 02:56:04 +04:00
}
}
1999-07-02 02:56:04 +04: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");
}
}
1999-07-02 02:56:04 +04:00
function BrowserPrint()
{
// Borrowing this method to show how to
// dynamically change icons
if (appCore != null) {
appCore.print();
}
1999-07-02 02:56:04 +04:00
}
function BrowserChangeTextZoom(aChange)
{
if (appCore != null) {
textZoom += (aChange * 0.1);
if (textZoom < 0.1) {
textZoom = 0.1;
}
appCore.setTextZoom(textZoom);
}
}
function BrowserSetDefaultCharacterSet(aCharset)
{
if (appCore != null) {
appCore.SetDocumentCharset(aCharset);
window.content.location.reload();
} else {
dump("BrowserAppCore has not been created!\n");
}
}
1999-07-02 02:56:04 +04:00
function BrowserClose()
{
// 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 );
window.close();
}
1999-07-02 02:56:04 +04:00
1999-09-02 00:14:02 +04:00
function BrowserSelectAll() {
if (appCore != null) {
appCore.selectAll();
} else {
dump("BrowserAppCore has not been created!\n");
}
}
1999-07-02 02:56:04 +04:00
function BrowserFind() {
if (appCore != null) {
appCore.find();
} else {
dump("BrowserAppCore has not been created!\n");
}
1999-07-02 02:56:04 +04:00
}
function BrowserFindAgain() {
if (appCore != null) {
appCore.findNext();
} else {
dump("BrowserAppCore has not been created!\n");
}
1999-07-02 02:56:04 +04:00
}
function BrowserLoadURL()
2006-09-14 09:43:54 +04:00
{
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 text = document.getElementById('urlbar').value;
var shortcutURL = bmks.FindShortcut(text);
if ((shortcutURL == null) || (shortcutURL == ""))
{
// rjc: add support for string substitution with shortcuts (4/4/2000)
// (see bug # 29871 for details)
var aOffset = text.indexOf(" ");
if (aOffset > 0)
{
var cmd = text.substr(0, aOffset);
var text = text.substr(aOffset+1);
var shortcutURL = bmks.FindShortcut(cmd);
if ((shortcutURL) && (shortcutURL != "") && (text != ""))
{
aOffset = shortcutURL.indexOf("%s");
if (aOffset >= 0)
{
shortcutURL = shortcutURL.substr(0, aOffset) + text + shortcutURL.substr(aOffset+2);
}
else
{
shortcutURL = null;
}
}
}
}
if ((shortcutURL != null) && (shortcutURL != ""))
{
document.getElementById('urlbar').value = shortcutURL;
}
}
catch (ex)
{
// stifle any exceptions so we're sure to load the URL.
}
appCore.loadUrl(document.getElementById('urlbar').value);
2006-09-14 09:43:54 +04:00
}
function readFromClipboard()
2006-09-14 09:43:54 +04:00
{
// Get clipboard.
var clipboard = Components
.classes["component://netscape/widget/clipboard"]
.getService ( Components.interfaces.nsIClipboard );
// Create tranferable that will transfer the text.
var trans = Components
.classes["component://netscape/widget/transferable"]
.createInstance( Components.interfaces.nsITransferable );
if ( !clipboard || !trans )
return;
trans.addDataFlavor( "text/unicode" );
clipboard.getData(trans, clipboard.kSelectionClipboard);
var data = new Object();
var dataLen = new Object();
trans.getTransferData("text/unicode", data, dataLen);
var url = null;
if (data)
2006-09-14 09:43:54 +04:00
{
data = data.value.QueryInterface(Components.interfaces
.nsISupportsWString);
url = data.data.substring(0, dataLen.value / 2);
2006-09-14 09:43:54 +04:00
}
return url;
2006-09-14 09:43:54 +04:00
}
function enclosingLink(node)
{
while (node)
{
var nodeName = node.nodeName;
if (nodeName == "")
return "";
nodeName = nodeName.toLowerCase();
if (nodeName == "" || nodeName == "body"
|| nodeName == "html" || nodeName == "#document")
return "";
var href = node.href;
if (nodeName == "a" && href != "")
return href;
node = node.parentNode;
}
return "";
}
function browserHandleMiddleClick(event)
{
var target = event.target;
if (pref.GetBoolPref("middlemouse.openNewWindow"))
{
var href = enclosingLink(target);
if (href != "")
{
openNewWindowWith(href);
event.preventBubble();
return;
}
}
if (pref.GetBoolPref("middlemouse.paste"))
{
var tagName = target.tagName;
if (tagName) tagName = tagName.toLowerCase();
var type = target.type;
if (type) type = type.toLowerCase();
if (!((tagName == "input"
&& (type == "" || type == "text" || type == "password"))
|| tagName == "textarea"))
{
var url = readFromClipboard();
//dump ("Loading URL on clipboard: '" + url + "'; length = " + url.length + "\n");
if (url.length > 0)
{
var urlBar = document.getElementById("urlbar");
urlBar.value = url;
BrowserLoadURL();
event.preventBubble();
}
}
}
}
1999-07-02 02:56:04 +04:00
function OpenMessenger()
{
window.open("chrome://messenger/content/", "_blank", "chrome,menubar,toolbar,resizable");
}
1999-07-02 02:56:04 +04:00
function OpenAddressbook()
{
window.open("chrome://addressbook/content/", "_blank", "chrome,menubar,toolbar,resizable");
}
function BrowserSendLink(pageUrl, pageTitle)
{
window.openDialog( "chrome://messengercompose/content/", "_blank",
"chrome,all,dialog=no",
"body='" + pageUrl + "',subject='" + pageTitle +
"',bodyislink=true");
}
function BrowserSendPage(pageUrl, pageTitle)
{
window.openDialog( "chrome://messengercompose/content/", "_blank",
"chrome,all,dialog=no",
"attachment='" + pageUrl + "',body='" + pageUrl +
"',subject='" + pageTitle + "',bodyislink=true");
}
1999-07-02 02:56:04 +04:00
function BrowserViewSource()
{
dump("BrowserViewSource(); \n ");
window.openDialog( "chrome://navigator/content/viewSource.xul",
"_blank",
"chrome,dialog=no",
window.content.location);
}
function doTests() {
}
1999-07-02 02:56:04 +04:00
function dumpProgress() {
var meter = document.getElementById("statusbar-icon");
dump( "meter mode=" + meter.getAttribute("mode") + "\n" );
dump( "meter value=" + meter.getAttribute("value") + "\n" );
}
function BrowserReload() {
dump( "Sorry, command not implemented.\n" );
}
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 )
{
// dump("disabling "+disabledItems[id]+"\n");
var broadcaster = document.getElementById( disabledItems[id]);
if (broadcaster)
broadcaster.setAttribute("disabled","true");
}
}
// 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 );
}
}
// Dumps all properties of anObject.
function dumpObject( anObject, prefix ) {
if ( prefix == null ) {
prefix = anObject;
}
for ( prop in anObject ) {
dump( prefix + "." + prop + " = " + anObject[prop] + "\n" );
}
1999-09-16 08:15:40 +04:00
}
// Takes JS expression and dumps "expr="+expr+"\n"
function dumpExpr( expr ) {
dump( expr+"="+eval(expr)+"\n" );
}
var leakDetector = null;
// Dumps current set of memory leaks.
function dumpMemoryLeaks() {
if (leakDetector == null)
leakDetector = createInstance("component://netscape/xpcom/leakdetector", "nsILeakDetector");
if (leakDetector != null)
leakDetector.dumpLeaks();
}