summaryrefslogtreecommitdiffstats
path: root/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/Buttons.sys.mjs
blob: 2bc12d901288a3eca6dc22197942c0a3a3d0b066 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* 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/. */

import { CustomizableUI } from "resource:///modules/CustomizableUI.sys.mjs";

export var Buttons = {
  init(libDir) {
    createWidget();
  },

  configurations: {
    navBarButtons: {
      selectors: ["#nav-bar"],
      applyConfig: async () => {
        CustomizableUI.addWidgetToArea(
          "screenshot-widget",
          CustomizableUI.AREA_NAVBAR
        );
      },
    },

    tabsToolbarButtons: {
      selectors: ["#TabsToolbar"],
      applyConfig: async () => {
        CustomizableUI.addWidgetToArea(
          "screenshot-widget",
          CustomizableUI.AREA_TABSTRIP
        );
      },
    },

    menuPanelButtons: {
      selectors: ["#widget-overflow"],
      applyConfig: async () => {
        CustomizableUI.addWidgetToArea(
          "screenshot-widget",
          CustomizableUI.AREA_FIXED_OVERFLOW_PANEL
        );
      },

      async verifyConfig() {
        let browserWindow =
          Services.wm.getMostRecentWindow("navigator:browser");
        if (browserWindow.PanelUI.panel.state == "closed") {
          return "The button isn't shown when the panel isn't open.";
        }
        return undefined;
      },
    },

    custPaletteButtons: {
      selectors: ["#customization-palette"],
      applyConfig: async () => {
        CustomizableUI.removeWidgetFromArea("screenshot-widget");
      },

      async verifyConfig() {
        let browserWindow =
          Services.wm.getMostRecentWindow("navigator:browser");
        if (
          browserWindow.document.documentElement.getAttribute("customizing") !=
          "true"
        ) {
          return "The button isn't shown when we're not in customize mode.";
        }
        return undefined;
      },
    },
  },
};

function createWidget() {
  let id = "screenshot-widget";
  let spec = {
    id,
    label: "My Button",
    removable: true,
    tooltiptext: "",
    type: "button",
  };
  CustomizableUI.createWidget(spec);

  // Append a <style> for the image
  let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");
  let st = browserWindow.document.createElementNS(
    "http://www.w3.org/1999/xhtml",
    "style"
  );
  let styles =
    "" +
    "#screenshot-widget > .toolbarbutton-icon {" +
    "  list-style-image: url(chrome://browser/skin/thumb-down.svg);" +
    "}";
  st.appendChild(browserWindow.document.createTextNode(styles));
  browserWindow.document.documentElement.appendChild(st);
}