summaryrefslogtreecommitdiffstats
path: root/comm/suite/browser/sessionHistoryUI.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/suite/browser/sessionHistoryUI.js')
-rw-r--r--comm/suite/browser/sessionHistoryUI.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/comm/suite/browser/sessionHistoryUI.js b/comm/suite/browser/sessionHistoryUI.js
new file mode 100644
index 0000000000..f8fdcc79aa
--- /dev/null
+++ b/comm/suite/browser/sessionHistoryUI.js
@@ -0,0 +1,172 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var {AppConstants} = ChromeUtils.import(
+ "resource://gre/modules/AppConstants.jsm"
+);
+
+function toggleTabsFromOtherComputers()
+ {
+ // enable/disable the Tabs From Other Computers menu
+ let menuitem = document.getElementById("sync-tabs-menuitem");
+
+ // If Sync isn't configured yet, then don't show the menuitem.
+ if (Weave.Status.checkSetup() == Weave.CLIENT_NOT_CONFIGURED ||
+ Weave.Svc.Prefs.get("firstSync", "") == "notReady") {
+ menuitem.hidden = true;
+ return;
+ }
+
+ // The tabs engine might never be inited (if services.sync.registerEngines
+ // is modified), so make sure we avoid undefined errors.
+ let enabled = Weave.Service.isLoggedIn &&
+ Weave.Service.engineManager.get("tabs") &&
+ Weave.Service.engineManager.get("tabs").enabled;
+ menuitem.setAttribute("disabled", !enabled);
+ menuitem.hidden = false;
+ }
+
+function FillHistoryMenu(aParent, aMenu)
+{
+ // Remove old entries if any
+ deleteHistoryItems(aParent);
+
+ var sessionHistory = getWebNavigation().sessionHistory;
+
+ var count = sessionHistory.count;
+ var index = sessionHistory.index;
+ var end;
+ const MAX_HISTORY_MENU_ITEMS = 15;
+
+ switch (aMenu)
+ {
+ case "back":
+ end = index > MAX_HISTORY_MENU_ITEMS ? index - MAX_HISTORY_MENU_ITEMS
+ : 0;
+ if (index <= end)
+ return false;
+ for (let j = index - 1; j >= end; j--)
+ {
+ let entry = sessionHistory.getEntryAtIndex(j);
+ if (entry)
+ createHistoryMenuItem(aParent, j, entry);
+ }
+ break;
+ case "forward":
+ end = count - index > MAX_HISTORY_MENU_ITEMS ? index + MAX_HISTORY_MENU_ITEMS
+ : count - 1;
+ if (index >= end)
+ return false;
+ for (let j = index + 1; j <= end; j++)
+ {
+ let entry = sessionHistory.getEntryAtIndex(j);
+ if (entry)
+ createHistoryMenuItem(aParent, j, entry);
+ }
+ break;
+ case "go":
+ var startHistory = document.getElementById("startHistorySeparator");
+ var endHistory = document.getElementById("endHistorySeparator");
+ // var syncMenuItem = document.getElementById("sync-tabs-menuitem");
+ startHistory.hidden = (count == 0);
+ end = count > MAX_HISTORY_MENU_ITEMS ? count - MAX_HISTORY_MENU_ITEMS
+ : 0;
+ for (let j = count - 1; j >= end; j--)
+ {
+ let entry = sessionHistory.getEntryAtIndex(j);
+ if (entry)
+ createHistoryMenuItem(aParent, j, entry, endHistory, j == index);
+ }
+ // toggleTabsFromOtherComputers();
+ // endHistory.hidden = (endHistory == aParent.lastChild || syncMenuItem.hidden);
+ endHistory.hidden = (endHistory == aParent.lastChild);
+ break;
+ }
+ return true;
+}
+
+function executeUrlBarHistoryCommand( aTarget )
+ {
+ var index = aTarget.getAttribute("index");
+ var label = aTarget.getAttribute("label");
+ if (index != "nothing_available" && label)
+ {
+ gURLBar.value = label;
+ UpdatePageProxyState();
+ handleURLBarCommand();
+ }
+ }
+
+function createUBHistoryMenu( aParent )
+ {
+ while (aParent.hasChildNodes())
+ aParent.lastChild.remove();
+
+ var file = GetUrlbarHistoryFile();
+ if (file.exists()) {
+ var connection = Services.storage.openDatabase(file);
+ try {
+ if (connection.tableExists("urlbarhistory")) {
+ var statement = connection.createStatement(
+ "SELECT url FROM urlbarhistory ORDER BY ROWID DESC");
+ while (statement.executeStep())
+ aParent.appendChild(document.createElement("menuitem"))
+ .setAttribute("label", statement.getString(0));
+ statement.reset();
+ statement.finalize();
+ return;
+ }
+ } finally {
+ connection.close();
+ }
+ }
+ //Create the "Nothing Available" Menu item and disable it.
+ var na = aParent.appendChild(document.createElement("menuitem"));
+ na.setAttribute("label", gNavigatorBundle.getString("nothingAvailable"));
+ na.setAttribute("disabled", "true");
+ }
+
+function createHistoryMenuItem(aParent, aIndex, aEntry, aAnchor, aChecked)
+{
+ var menuitem = document.createElement("menuitem");
+ menuitem.setAttribute("label", aEntry.title);
+ menuitem.setAttribute("index", aIndex);
+ if (aChecked)
+ {
+ menuitem.setAttribute("type", "radio");
+ menuitem.setAttribute("checked", "true");
+ }
+
+ if (!aChecked || AppConstants.platform == "macosx")
+ {
+ menuitem.className = "menuitem-iconic bookmark-item menuitem-with-favicon";
+ PlacesUtils.favicons.getFaviconURLForPage(aEntry.URI,
+ function faviconURLCallback(aURI) {
+ if (aURI) {
+ menuitem.setAttribute("image",
+ PlacesUtils.favicons
+ .getFaviconLinkForIcon(aURI).spec);
+ }
+ }
+ );
+ }
+ aParent.insertBefore(menuitem, aAnchor);
+}
+
+function deleteHistoryItems(aParent)
+{
+ var children = aParent.childNodes;
+ for (let i = children.length - 1; i >= 0; --i)
+ {
+ if (children[i].hasAttribute("index"))
+ children[i].remove();
+ }
+}
+
+function updateGoMenu(event)
+ {
+ FillHistoryMenu(event.target, "go");
+ updateRecentMenuItems();
+ }