[Pkg-mozext-commits] [tabmixplus] 49/107: Add content script to use bookmark name as tab title in about:newtab
David Prévot
taffit at moszumanska.debian.org
Tue Dec 29 19:02:49 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository tabmixplus.
commit 6304babfa7b76550d1ab5a4febf30a178d3cc9cc
Author: onemen <tabmix.onemen at gmail.com>
Date: Sat Nov 7 16:17:39 2015 +0200
Add content script to use bookmark name as tab title in about:newtab
---
chrome.manifest | 2 +-
chrome/content/content.js | 46 ++++++++++++++++++--
chrome/content/links/newTab.js | 35 +++------------
chrome/content/minit/tablib.js | 4 +-
chrome/content/places/places.js | 9 +++-
modules/AboutNewTab.jsm | 96 +++++++++++++++++++++++++++++++++++++++++
modules/Utils.jsm | 18 +++++++-
7 files changed, 171 insertions(+), 39 deletions(-)
diff --git a/chrome.manifest b/chrome.manifest
index fb60af1..b783094 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -49,7 +49,7 @@ overlay chrome://browser/content/preferences/tabs.xul chrome://tab
style chrome://browser/content/preferences/preferences.xul chrome://tabmixplus/content/preferences/overlay/preferences.css
overlay chrome://mozapps/content/extensions/extensions.xul chrome://tabmixplus/content/links/links.xul
-overlay about:newtab chrome://tabmixplus/content/links/newTab.xul
+overlay about:newtab chrome://tabmixplus/content/links/newTab.xul appversion<42.0
overlay chrome://mozapps/content/downloads/unknownContentType.xul chrome://tabmixplus/content/links/removeBlankTab.xul
overlay chrome://mozapps/content/handling/dialog.xul chrome://tabmixplus/content/links/removeBlankTab.xul
diff --git a/chrome/content/content.js b/chrome/content/content.js
index 068a4a9..a52c9f1 100644
--- a/chrome/content/content.js
+++ b/chrome/content/content.js
@@ -25,7 +25,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "ContextMenu",
XPCOMUtils.defineLazyModuleGetter(this, "TabmixUtils",
"resource://tabmixplus/Utils.jsm");
-var self = this;
+XPCOMUtils.defineLazyModuleGetter(this, "TabmixAboutNewTab",
+ "resource://tabmixplus/AboutNewTab.jsm");
var PROCESS_TYPE_CONTENT = TabmixSvc.version(380) &&
Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT;
@@ -170,9 +171,9 @@ var TabmixContentHandler = {
};
var TabmixClickEventHandler = {
- init: function init() {
+ init: function init(global) {
if (PROCESS_TYPE_CONTENT) {
- self.addEventListener("click", this, true);
+ global.addEventListener("click", this, true);
}
},
@@ -329,5 +330,42 @@ var TabmixClickEventHandler = {
}
};
+var AboutNewTabHandler = {
+ init: function(global) {
+ if (!TabmixSvc.version(420)) {
+ return;
+ }
+
+ addMessageListener("Tabmix:updateTitlefrombookmark", this);
+
+ let contentLoaded = false;
+ global.addEventListener("pageshow", event => {
+ if (event.target != content.document) {
+ return;
+ }
+ let doc = content.document;
+ // we don't need to update titles on first show if the pref is off
+ if (doc.documentURI.toLowerCase() == "about:newtab" &&
+ (contentLoaded || TabmixSvc.prefBranch.getBoolPref("titlefrombookmark"))) {
+ contentLoaded = true;
+ this.updateTitles();
+ }
+ });
+ },
+
+ receiveMessage: function({name}) {
+ if (name == "Tabmix:updateTitlefrombookmark") {
+ this.updateTitles();
+ }
+ },
+
+ updateTitles: function() {
+ if (content && content.gGrid) {
+ TabmixAboutNewTab.updateTitles(content.gGrid.cells);
+ }
+ }
+};
+
TabmixContentHandler.init();
-TabmixClickEventHandler.init();
+TabmixClickEventHandler.init(this);
+AboutNewTabHandler.init(this);
diff --git a/chrome/content/links/newTab.js b/chrome/content/links/newTab.js
index 0246651..9225506 100644
--- a/chrome/content/links/newTab.js
+++ b/chrome/content/links/newTab.js
@@ -1,34 +1,13 @@
"use strict";
+// This file is in use for all versions before Firefox 42.0
(function Tabmix_newTab() {
- function updateTitle() {
- if (!gGrid.cells)
- return;
- let win = Tabmix.getTopWin();
- if (win)
- win.TMP_Places._titlefrombookmark = Tabmix.prefs.getBoolPref("titlefrombookmark");
- gGrid.cells.forEach(function(cell) {
- let site = cell.site;
- if (!site)
- return;
- let url = site.url;
- let title = site.title || url;
- title = win.TMP_Places.getTitleFromBookmark(url, title);
- let tooltip = (title == url ? title : title + "\n" + url);
- let link = site._querySelector(".newtab-link");
- link.setAttribute("title", tooltip);
- site._querySelector(".newtab-title").textContent = title;
- });
- }
-
- let win = Tabmix.getTopWin();
- if (win && win.Tabmix && win.Tabmix.initialization.onWindowOpen.initialized) {
- Services.prefs.addObserver("extensions.tabmix.titlefrombookmark", updateTitle, false);
- window.addEventListener("unload", function TMP_removeObserver(aEvent) {
- aEvent.currentTarget.removeEventListener("unload", TMP_removeObserver, false);
- Services.prefs.removeObserver("extensions.tabmix.titlefrombookmark", updateTitle);
+ let PREF = "extensions.tabmix.titlefrombookmark";
+ if (Services.prefs.getBoolPref(PREF)) {
+ window.addEventListener("load", function loadGrid() {
+ window.removeEventListener("load", loadGrid, false);
+ let {updateTitles} = Cu.import("resource://tabmixplus/AboutNewTab.jsm", {}).TabmixAboutNewTab;
+ updateTitles(gGrid.cells);
}, false);
- if (Tabmix.prefs.getBoolPref("titlefrombookmark"))
- updateTitle();
}
}());
diff --git a/chrome/content/minit/tablib.js b/chrome/content/minit/tablib.js
index cb9c48b..cd192e1 100644
--- a/chrome/content/minit/tablib.js
+++ b/chrome/content/minit/tablib.js
@@ -1763,10 +1763,10 @@ var tablib = { // eslint-disable-line
let width = aTab.boxObject.width;
aTab.removeAttribute("width");
if (width != aTab.boxObject.width)
- TMP_Places.afterTabTitleChanged(true);
+ TMP_Places.afterTabTitleChanged(false);
}
else if (aTab.hasAttribute("fadein"))
- TMP_Places.afterTabTitleChanged(true);
+ TMP_Places.afterTabTitleChanged(false);
// don't keep unnecessary reference to current tab
if (!TMP_Places.inUpdateBatch)
TMP_Places.currentTab = null;
diff --git a/chrome/content/places/places.js b/chrome/content/places/places.js
index 1e80707..62f9b9b 100644
--- a/chrome/content/places/places.js
+++ b/chrome/content/places/places.js
@@ -26,6 +26,7 @@ var TMP_Places = {
init: function TMP_PC_init() {
Tabmix.lazy_import(this, "PlacesUtils", "Places", "TabmixPlacesUtils");
+ Tabmix.lazy_import(this, "AboutNewTab", "AboutNewTab", "TabmixAboutNewTab");
this.contextMenu.toggleEventListener(true);
@@ -344,8 +345,12 @@ var TMP_Places = {
return false;
},
- afterTabTitleChanged: function TMP_PC_afterTabTitleChanged(aChanged) {
- if (!aChanged && !this._tabTitleChanged)
+ afterTabTitleChanged: function(bookmarkChanged = true) {
+ if (bookmarkChanged && !this.inUpdateBatch) {
+ this.AboutNewTab.updateAllBrowsers(window);
+ }
+
+ if (bookmarkChanged && !this._tabTitleChanged)
return;
if (this.inUpdateBatch) {
this._tabTitleChanged = true;
diff --git a/modules/AboutNewTab.jsm b/modules/AboutNewTab.jsm
new file mode 100644
index 0000000..f548cf1
--- /dev/null
+++ b/modules/AboutNewTab.jsm
@@ -0,0 +1,96 @@
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["TabmixAboutNewTab"];
+
+const Cu = Components.utils;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+XPCOMUtils.defineLazyModuleGetter(this, "DirectoryLinksProvider",
+ "resource:///modules/DirectoryLinksProvider.jsm");
+
+XPCOMUtils.defineLazyGetter(this, "gAllPages", function() {
+ let tmp = {};
+ Cu.import("resource://gre/modules/NewTabUtils.jsm", tmp);
+ return tmp.NewTabUtils.allPages;
+});
+
+XPCOMUtils.defineLazyModuleGetter(this, "TabmixSvc",
+ "resource://tabmixplus/Services.jsm");
+
+XPCOMUtils.defineLazyModuleGetter(this, "TabmixPlacesUtils",
+ "resource://tabmixplus/Places.jsm");
+
+this.TabmixAboutNewTab = Object.freeze({
+ updateAllBrowsers: function(window) {
+ AboutNewTabInternal.updateAllBrowsers(window);
+ },
+
+ updateBrowser: function(browser) {
+ AboutNewTabInternal.updateBrowser(browser);
+ },
+
+ updateTitles: function(cells) {
+ AboutNewTabInternal.updateTitles(cells);
+ },
+});
+
+var AboutNewTabInternal = {
+ // update all opened about:newtab browsers in a window including preloaded
+ // browser if exist
+ updateAllBrowsers: function(window) {
+ let tabBrowser = window.gBrowser;
+ let tabPanels = tabBrowser.mPanelContainer.childNodes;
+ let browsers = Array.map(tabPanels, tabPanel => tabBrowser.getBrowserForTabPanel(tabPanel))
+ .filter(browser => browser.currentURI.spec == "about:newtab");
+ browsers.forEach(browser => this.updateBrowser(browser));
+ },
+
+ updateBrowser: function(browser) {
+ if (TabmixSvc.version(420)) {
+ browser.messageManager.sendAsyncMessage("Tabmix:updateTitlefrombookmark");
+ } else {
+ try {
+ let doc = browser.contentDocument || browser.contentDocumentAsCPOW;
+ this.updateTitles(doc.defaultView.gGrid.cells);
+ } catch (ex) {
+ TabmixSvc.console.reportError(ex);
+ }
+ }
+ },
+
+ updateTitles: function(cells = []) {
+ cells.forEach(cell => {
+ let site = cell.site;
+ if (!site) {
+ return;
+ }
+
+ let enhancedTitle;
+ if (TabmixSvc.version(340)) {
+ let enhanced = gAllPages.enhanced &&
+ DirectoryLinksProvider.getEnhancedLink(site.link);
+ enhancedTitle = enhanced && enhanced.title;
+ }
+
+ let url = site.url;
+ let title, tooltip;
+ if (TabmixSvc.version(400)) {
+ let tabmixTitle = TabmixPlacesUtils.getTitleFromBookmark(url, site.title);
+ title = enhancedTitle ? enhancedTitle :
+ site.link.type == "history" ? site.link.baseDomain :
+ tabmixTitle;
+ tooltip = (tabmixTitle == url ? tabmixTitle : tabmixTitle + "\n" + url);
+ } else {
+ title = enhancedTitle ||
+ TabmixPlacesUtils.getTitleFromBookmark(url, site.title || url);
+ tooltip = (title == url ? title : title + "\n" + url);
+ }
+
+ let link = site._querySelector(".newtab-link");
+ link.setAttribute("title", tooltip);
+ site._querySelector(".newtab-title").textContent = title;
+ site.refreshThumbnail();
+ });
+ },
+};
diff --git a/modules/Utils.jsm b/modules/Utils.jsm
index f7a0811..ad2e4b6 100644
--- a/modules/Utils.jsm
+++ b/modules/Utils.jsm
@@ -16,8 +16,8 @@ const FMM_MESSAGES = [
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Services",
- "resource://gre/modules/Services.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
+ "resource://gre/modules/PrivateBrowsingUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "TabmixSvc",
"resource://tabmixplus/Services.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "DocShellCapabilities",
@@ -26,6 +26,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AutoReload",
"resource://tabmixplus/AutoReload.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "MergeWindows",
"resource://tabmixplus/MergeWindows.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "TabmixAboutNewTab",
+ "resource://tabmixplus/AboutNewTab.jsm");
this.TabmixUtils = {
initMessageManager: function(window) {
@@ -34,6 +36,18 @@ this.TabmixUtils = {
// Load the frame script after registering listeners.
mm.loadFrameScript("chrome://tabmixplus/content/content.js", true);
+
+ // call TabmixAboutNewTab.updateBrowser for gBrowser._preloadedBrowser,
+ // if it already exist before we loaded our frame script
+ if (TabmixSvc.version(420)) {
+ let {gBrowser, BROWSER_NEW_TAB_URL} = window;
+ if (TabmixSvc.prefBranch.getBoolPref("titlefrombookmark") &&
+ BROWSER_NEW_TAB_URL == "about:newtab" &&
+ gBrowser._preloadedBrowser && gBrowser._isPreloadingEnabled() &&
+ !PrivateBrowsingUtils.isWindowPrivate(window)) {
+ TabmixAboutNewTab.updateBrowser(gBrowser._preloadedBrowser);
+ }
+ }
},
deinit: function(window) {
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tabmixplus.git
More information about the Pkg-mozext-commits
mailing list