Skip to content

Instantly share code, notes, and snippets.

@mstriemer
Created March 10, 2021 16:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mstriemer/f306b4f263ac8b39fe480878f5378d9a to your computer and use it in GitHub Desktop.
Save mstriemer/f306b4f263ac8b39fe480878f5378d9a to your computer and use it in GitHub Desktop.
Make a Reader Mode pageAction button
diff --git a/browser/actors/AboutReaderParent.jsm b/browser/actors/AboutReaderParent.jsm
--- a/browser/actors/AboutReaderParent.jsm
+++ b/browser/actors/AboutReaderParent.jsm
@@ -14,16 +14,21 @@ ChromeUtils.defineModuleGetter(
"PlacesUtils",
"resource://gre/modules/PlacesUtils.jsm"
);
ChromeUtils.defineModuleGetter(
this,
"ReaderMode",
"resource://gre/modules/ReaderMode.jsm"
);
+ChromeUtils.defineModuleGetter(
+ this,
+ "PageActions",
+ "resource:///modules/PageActions.jsm"
+);
const gStringBundle = Services.strings.createBundle(
"chrome://global/locale/aboutReader.properties"
);
// A set of all of the AboutReaderParent actors that exist.
// See bug 1631146 for a request for a less manual way of doing this.
let gAllActors = new Set();
@@ -177,16 +182,17 @@ class AboutReaderParent extends JSWindow
return;
}
let win = browser.ownerGlobal;
let button = win.document.getElementById("reader-mode-button");
let menuitem = win.document.getElementById("menu_readerModeItem");
let key = win.document.getElementById("key_toggleReaderMode");
+ PageActions.actionForID("readerMode").setDisabled(!browser.isArticle, win);
if (this.isReaderMode()) {
gAllActors.add(this);
let closeText = gStringBundle.GetStringFromName("readerView.close");
button.setAttribute("readeractive", true);
button.hidden = false;
button.setAttribute("aria-label", closeText);
diff --git a/browser/modules/PageActions.jsm b/browser/modules/PageActions.jsm
--- a/browser/modules/PageActions.jsm
+++ b/browser/modules/PageActions.jsm
@@ -31,16 +31,21 @@ ChromeUtils.defineModuleGetter(
"BinarySearch",
"resource://gre/modules/BinarySearch.jsm"
);
ChromeUtils.defineModuleGetter(
this,
"PrivateBrowsingUtils",
"resource://gre/modules/PrivateBrowsingUtils.jsm"
);
+ChromeUtils.defineModuleGetter(
+ this,
+ "AboutReaderParent",
+ "resource:///actors/AboutReaderParent.jsm"
+);
const ACTION_ID_BOOKMARK = "bookmark";
const ACTION_ID_PIN_TAB = "pinTab";
const ACTION_ID_BOOKMARK_SEPARATOR = "bookmarkSeparator";
const ACTION_ID_BUILT_IN_SEPARATOR = "builtInSeparator";
const ACTION_ID_TRANSIENT_SEPARATOR = "transientSeparator";
const PREF_PERSISTED_ACTIONS = "browser.pageActions.persistedActions";
@@ -1168,16 +1173,24 @@ var gBuiltInActions = [
onShowingInPanel(buttonNode) {
browserPageActions(buttonNode).bookmark.onShowingInPanel(buttonNode);
},
onCommand(event, buttonNode) {
browserPageActions(buttonNode).bookmark.onCommand(event, buttonNode);
},
},
+ // reader mode
+ {
+ id: "readerMode",
+ onCommand(event, buttonNode) {
+ AboutReaderParent.buttonClick(event);
+ },
+ },
+
// pin tab
{
id: ACTION_ID_PIN_TAB,
onBeforePlacedInWindow(browserWindow) {
function handlePinEvent() {
browserPageActions(browserWindow).pinTab.updateState();
}
function handleWindowUnload() {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment