add: remove addon elements
This commit is contained in:
parent
c8b92a8ff9
commit
06bc324b5e
@ -8,7 +8,7 @@ class Addon {
|
|||||||
public events: AddonEvents;
|
public events: AddonEvents;
|
||||||
public views: AddonViews;
|
public views: AddonViews;
|
||||||
public prefs: AddonPrefs;
|
public prefs: AddonPrefs;
|
||||||
public utils: AddonUtils;
|
public Utils: AddonUtils;
|
||||||
// root path to access the resources
|
// root path to access the resources
|
||||||
public rootURI: string;
|
public rootURI: string;
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ class Addon {
|
|||||||
this.events = new AddonEvents(this);
|
this.events = new AddonEvents(this);
|
||||||
this.views = new AddonViews(this);
|
this.views = new AddonViews(this);
|
||||||
this.prefs = new AddonPrefs(this);
|
this.prefs = new AddonPrefs(this);
|
||||||
this.utils = new AddonUtils(this);
|
this.Utils = new AddonUtils(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
src/utils.ts
18
src/utils.ts
@ -94,6 +94,7 @@ class AddonUtils extends AddonModule {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
this.UI = {
|
this.UI = {
|
||||||
|
addonElements: [],
|
||||||
createElement: (
|
createElement: (
|
||||||
doc: Document,
|
doc: Document,
|
||||||
tagName: string,
|
tagName: string,
|
||||||
@ -107,13 +108,26 @@ class AddonUtils extends AddonModule {
|
|||||||
if (tagName === "fragment") {
|
if (tagName === "fragment") {
|
||||||
return doc.createDocumentFragment();
|
return doc.createDocumentFragment();
|
||||||
} else if (namespace === "xul") {
|
} else if (namespace === "xul") {
|
||||||
return this.Compat.createXULElement(doc, tagName);
|
const e = this.Compat.createXULElement(doc, tagName);
|
||||||
|
this.UI.addonElements.push(e);
|
||||||
|
return e;
|
||||||
} else {
|
} else {
|
||||||
return doc.createElementNS(namespaces[namespace], tagName) as
|
const e = doc.createElementNS(namespaces[namespace], tagName) as
|
||||||
| HTMLElement
|
| HTMLElement
|
||||||
| SVGAElement;
|
| SVGAElement;
|
||||||
|
this.UI.addonElements.push(e);
|
||||||
|
return e;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
removeAddonElements: () => {
|
||||||
|
this.UI.addonElements.forEach((e) => {
|
||||||
|
try {
|
||||||
|
e?.remove();
|
||||||
|
} catch (e) {
|
||||||
|
this._Addon.Utils.Tool.log(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
creatElementsFromJSON: (doc: Document, options: ElementOptions) => {
|
creatElementsFromJSON: (doc: Document, options: ElementOptions) => {
|
||||||
this.Tool.log(options);
|
this.Tool.log(options);
|
||||||
if (
|
if (
|
||||||
|
15
src/views.ts
15
src/views.ts
@ -4,7 +4,6 @@ const { addonRef, addonID } = require("../package.json");
|
|||||||
|
|
||||||
class AddonViews extends AddonModule {
|
class AddonViews extends AddonModule {
|
||||||
// You can store some element in the object attributes
|
// You can store some element in the object attributes
|
||||||
private testButton: XUL.Button;
|
|
||||||
private progressWindowIcon: object;
|
private progressWindowIcon: object;
|
||||||
|
|
||||||
constructor(parent: Addon) {
|
constructor(parent: Addon) {
|
||||||
@ -24,7 +23,7 @@ class AddonViews extends AddonModule {
|
|||||||
const menuIcon =
|
const menuIcon =
|
||||||
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAC9klEQVQ4jU1TzW/UZRB+Zub9fexXt7s0YG0RAlTAg6EqjfUkMYYDN2OiJngxXOBEBP0T9KY3LiQe1JgYP4BEw0laBSGgSSVIYhNLw5cuaaXdbnf39/G+73jo/hommcxhMk9m5nkeUlUU4RQkBJ25kwRHv358LmAcEUbKRNxJfRAb8kbIqip1Mw2mn4nOMJ4IVWUAuHE/e3m1748IAyt9bxZXbPDCWHiJGa37qzZcz9SUAsK1e+kJowBtAoAIAEJDVcNAKaCZYweHzjPRyORo8P1fS/apwGBqZiGpzN5JT9UiEkPFLAAa1FCos5Z4fdBG9cf5ZO7geGhOX+y+Hwq1XhwLPv234z8UhjgFTGLBACoFiir828+Xb/etTnVT3TpSZrPw2D7993L+7njdLN5q5Tfnl+3JekRwCpgPLvW/AXAYQD7YQgwTanHUowj2P4eSC+W3Stz7dXtdzjngQCSAV1gAht77obdJAxPQy9VZjywOUFKFEkBeCZNbcWjhUd9+Mde73CwzVKEAiIXghaABw/VyxfSYHD+8y7yqCpQMaSzkmYDMYWhXw7R3NsxnTMgGz1dWgBWAVUgtpKUddfllelwe1SOayz3YKWgo5uy7W739H8+uff7sSHCtHNAp9VAhwAzu9pmDbB+mC/90/Ru/t3R07xb58vpDNxkbqFOloZhzJuz4eTE5GzB1haGdVJmL2zOn2NOUq3dX/XPtxB/aVqE/AFUCGAoOGL3hEi+N1qS7pUwaCdLXJ+JPDAC1HjIc03okuLKS6EPrcX5nnf9slni+m+u+1cTLsanq4pv7GnvbqTaEYBVAJFhnAnzugW0VvpA5vLKW6sXU4dvL9+w7E03+yroNhkLZqNWQ1qohdWohdQwTmAjqVLGnwT/dXnavhUIsBLS6+tZIiW74jR9t6l0BKpIIMF5hYkO4+sCeth67zcBe7VRfmr1rPyobuJUEknv4Qu6F5AGAAVwhAJnHfgWiouEVgVUc8AqphHRzosnXC8aedPD/kPxathRorWcAAAAASUVORK5CYII=";
|
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAC9klEQVQ4jU1TzW/UZRB+Zub9fexXt7s0YG0RAlTAg6EqjfUkMYYDN2OiJngxXOBEBP0T9KY3LiQe1JgYP4BEw0laBSGgSSVIYhNLw5cuaaXdbnf39/G+73jo/hommcxhMk9m5nkeUlUU4RQkBJ25kwRHv358LmAcEUbKRNxJfRAb8kbIqip1Mw2mn4nOMJ4IVWUAuHE/e3m1748IAyt9bxZXbPDCWHiJGa37qzZcz9SUAsK1e+kJowBtAoAIAEJDVcNAKaCZYweHzjPRyORo8P1fS/apwGBqZiGpzN5JT9UiEkPFLAAa1FCos5Z4fdBG9cf5ZO7geGhOX+y+Hwq1XhwLPv234z8UhjgFTGLBACoFiir828+Xb/etTnVT3TpSZrPw2D7993L+7njdLN5q5Tfnl+3JekRwCpgPLvW/AXAYQD7YQgwTanHUowj2P4eSC+W3Stz7dXtdzjngQCSAV1gAht77obdJAxPQy9VZjywOUFKFEkBeCZNbcWjhUd9+Mde73CwzVKEAiIXghaABw/VyxfSYHD+8y7yqCpQMaSzkmYDMYWhXw7R3NsxnTMgGz1dWgBWAVUgtpKUddfllelwe1SOayz3YKWgo5uy7W739H8+uff7sSHCtHNAp9VAhwAzu9pmDbB+mC/90/Ru/t3R07xb58vpDNxkbqFOloZhzJuz4eTE5GzB1haGdVJmL2zOn2NOUq3dX/XPtxB/aVqE/AFUCGAoOGL3hEi+N1qS7pUwaCdLXJ+JPDAC1HjIc03okuLKS6EPrcX5nnf9slni+m+u+1cTLsanq4pv7GnvbqTaEYBVAJFhnAnzugW0VvpA5vLKW6sXU4dvL9+w7E03+yroNhkLZqNWQ1qohdWohdQwTmAjqVLGnwT/dXnavhUIsBLS6+tZIiW74jR9t6l0BKpIIMF5hYkO4+sCeth67zcBe7VRfmr1rPyobuJUEknv4Qu6F5AGAAVwhAJnHfgWiouEVgVUc8AqphHRzosnXC8aedPD/kPxathRorWcAAAAASUVORK5CYII=";
|
||||||
// item menuitem with icon
|
// item menuitem with icon
|
||||||
this._Addon.utils.UI.insertMenuItem("item", {
|
this._Addon.Utils.UI.insertMenuItem("item", {
|
||||||
tag: "menuitem",
|
tag: "menuitem",
|
||||||
id: "zotero-itemmenu-addontemplate-test",
|
id: "zotero-itemmenu-addontemplate-test",
|
||||||
label: "Addon Template: Menuitem",
|
label: "Addon Template: Menuitem",
|
||||||
@ -32,7 +31,7 @@ class AddonViews extends AddonModule {
|
|||||||
icon: menuIcon,
|
icon: menuIcon,
|
||||||
});
|
});
|
||||||
// item menupopup with sub-menuitems
|
// item menupopup with sub-menuitems
|
||||||
this._Addon.utils.UI.insertMenuItem(
|
this._Addon.Utils.UI.insertMenuItem(
|
||||||
"item",
|
"item",
|
||||||
{
|
{
|
||||||
tag: "menu",
|
tag: "menu",
|
||||||
@ -50,8 +49,11 @@ class AddonViews extends AddonModule {
|
|||||||
"#zotero-itemmenu-addontemplate-test"
|
"#zotero-itemmenu-addontemplate-test"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
this._Addon.Utils.UI.insertMenuItem("menuFile", {
|
||||||
|
tag: "menuseparator",
|
||||||
|
});
|
||||||
// menu->File menuitem
|
// menu->File menuitem
|
||||||
this._Addon.utils.UI.insertMenuItem("menuFile", {
|
this._Addon.Utils.UI.insertMenuItem("menuFile", {
|
||||||
tag: "menuitem",
|
tag: "menuitem",
|
||||||
label: "Addon Template: File Menuitem",
|
label: "Addon Template: File Menuitem",
|
||||||
oncommand: "alert('Hello World! File Menuitem.')",
|
oncommand: "alert('Hello World! File Menuitem.')",
|
||||||
@ -70,10 +72,7 @@ class AddonViews extends AddonModule {
|
|||||||
public unInitViews() {
|
public unInitViews() {
|
||||||
const Zotero = this._Addon.Zotero;
|
const Zotero = this._Addon.Zotero;
|
||||||
Zotero.debug("Uninitializing UI");
|
Zotero.debug("Uninitializing UI");
|
||||||
const _window: Window = Zotero.getMainWindow();
|
this._Addon.Utils.UI.removeAddonElements();
|
||||||
_window.document
|
|
||||||
.querySelector("#zotero-itemmenu-addontemplate-test")
|
|
||||||
?.remove();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public showProgressWindow(
|
public showProgressWindow(
|
||||||
|
6
typing/global.d.ts
vendored
6
typing/global.d.ts
vendored
@ -17,11 +17,13 @@ declare interface ZoteroTool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
declare interface ZoteroUI {
|
declare interface ZoteroUI {
|
||||||
|
addonElements: Element[];
|
||||||
createElement: (
|
createElement: (
|
||||||
doc: Document,
|
doc: Document,
|
||||||
tagName: string,
|
tagName: string,
|
||||||
namespace: "html" | "svg" | "xul"
|
namespace: "html" | "svg" | "xul"
|
||||||
) => XUL.Element | DocumentFragment | HTMLElement | SVGAElement;
|
) => XUL.Element | DocumentFragment | HTMLElement | SVGAElement;
|
||||||
|
removeAddonElements: () => void;
|
||||||
creatElementsFromJSON: (
|
creatElementsFromJSON: (
|
||||||
doc: Document,
|
doc: Document,
|
||||||
options: ElementOptions
|
options: ElementOptions
|
||||||
@ -60,9 +62,9 @@ declare interface ElementOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
declare interface MenuitemOptions {
|
declare interface MenuitemOptions {
|
||||||
tag: "menuitem" | "menu";
|
tag: "menuitem" | "menu" | "menuseparator";
|
||||||
id?: string;
|
id?: string;
|
||||||
label: string;
|
label?: string;
|
||||||
// data url (chrome://xxx.png) or base64 url (data:image/png;base64,xxx)
|
// data url (chrome://xxx.png) or base64 url (data:image/png;base64,xxx)
|
||||||
icon?: string;
|
icon?: string;
|
||||||
class?: string;
|
class?: string;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user