/* 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/. */
"use strict";
// This is loaded into chrome windows with the subscript loader. Wrap in
// a block to prevent accidentally leaking globals onto `window`.
{
ChromeUtils.defineESModuleGetters(this, {
ScreenshotsUtils: "resource:///modules/ScreenshotsUtils.sys.mjs",
});
class ScreenshotsButtons extends MozXULElement {
static #template = null;
static get markup() {
return `
`;
}
static get fragment() {
if (!ScreenshotsButtons.#template) {
ScreenshotsButtons.#template = MozXULElement.parseXULToFragment(
ScreenshotsButtons.markup
);
}
return ScreenshotsButtons.#template;
}
get buttonGroup() {
return this.shadowRoot?.querySelector("moz-button-group");
}
get visibleButton() {
return this.shadowRoot?.getElementById("visible-page");
}
get fullpageButton() {
return this.shadowRoot?.getElementById("full-page");
}
connectedCallback() {
if (this.shadowRoot) {
this.ownerDocument.l10n.connectRoot(this.shadowRoot);
} else {
const shadowRoot = this.attachShadow({ mode: "open" });
this.ownerDocument.l10n.connectRoot(shadowRoot);
shadowRoot.append(ScreenshotsButtons.fragment.cloneNode(true));
}
this.buttonGroup.addEventListener("click", this);
}
disconnectedCallback() {
this.ownerDocument.l10n.disconnectRoot(this.shadowRoot);
this.buttonGroup.removeEventListener("click", this);
}
handleEvent(event) {
switch (event.target) {
case this.visibleButton:
ScreenshotsUtils.takeScreenshot(gBrowser.selectedBrowser, "Visible");
break;
case this.fullpageButton:
ScreenshotsUtils.takeScreenshot(gBrowser.selectedBrowser, "FullPage");
break;
}
}
/**
* Focus the last used button.
* This will default to the visible page button.
*
* @param {string} buttonToFocus
*/
async focusButton(buttonToFocus) {
await this.buttonGroup.updateComplete;
if (buttonToFocus === "fullpage") {
this.fullpageButton.focus({ focusVisible: true });
} else if (buttonToFocus === "first") {
this.buttonGroup.firstElementChild.focus({ focusVisible: true });
} else if (buttonToFocus === "last") {
this.buttonGroup.lastElementChild.focus({ focusVisible: true });
} else {
this.visibleButton.focus({ focusVisible: true });
}
}
}
customElements.define("screenshots-buttons", ScreenshotsButtons);
}