add: example for extra lib/reader tabpanels

This commit is contained in:
xiangyu 2023-01-03 22:26:03 +08:00
parent 29b64b5800
commit 51badae189
3 changed files with 162 additions and 2 deletions

View File

@ -2,4 +2,6 @@ menuitem.label=Addon Template: Menuitem
menupopup.label=Addon Template: Menupopup menupopup.label=Addon Template: Menupopup
menuitem.submenulabel=Addon Template menuitem.submenulabel=Addon Template
menuitem.filemenulabel=Addon Template: File Menuitem menuitem.filemenulabel=Addon Template: File Menuitem
prefs.title=Template prefs.title=Template
tabpanel.lib.tab.label=Lib Tab
tabpanel.reader.tab.label=Reader Tab

View File

@ -2,4 +2,6 @@ menuitem.label=Addon Template: 菜单
menupopup.label=Addon Template: 弹出菜单 menupopup.label=Addon Template: 弹出菜单
menuitem.submenulabel=Addon Template menuitem.submenulabel=Addon Template
menuitem.filemenulabel=Addon Template: 文件菜单 menuitem.filemenulabel=Addon Template: 文件菜单
prefs.title=插件模板 prefs.title=插件模板
tabpanel.lib.tab.label=库标签
tabpanel.reader.tab.label=阅读器标签

View File

@ -19,6 +19,9 @@ class AddonViews extends AddonModule {
// You can init the UI elements that // You can init the UI elements that
// cannot be initialized with overlay.xul // cannot be initialized with overlay.xul
this._Addon.toolkit.Tool.log("Initializing UI"); this._Addon.toolkit.Tool.log("Initializing UI");
/**
* Example: menu items starts
*/
const menuIcon = "chrome://addontemplate/content/icons/favicon@0.5x.png"; const menuIcon = "chrome://addontemplate/content/icons/favicon@0.5x.png";
// item menuitem with icon // item menuitem with icon
this._Addon.toolkit.UI.insertMenuItem("item", { this._Addon.toolkit.UI.insertMenuItem("item", {
@ -56,7 +59,13 @@ class AddonViews extends AddonModule {
label: this._Addon.locale.getString("menuitem.filemenulabel"), label: this._Addon.locale.getString("menuitem.filemenulabel"),
oncommand: "alert('Hello World! File Menuitem.')", oncommand: "alert('Hello World! File Menuitem.')",
}); });
/**
* Example: menu items ends
*/
/**
* Example: extra column starts
*/
// Initialize extra columns // Initialize extra columns
this._Addon.toolkit.ItemTree.register( this._Addon.toolkit.ItemTree.register(
"test1", "test1",
@ -96,7 +105,13 @@ class AddonViews extends AddonModule {
}, },
} }
); );
/**
* Example: extra column ends
*/
/**
* Example: custom cell starts
*/
// Customize cells // Customize cells
this._Addon.toolkit.ItemTree.addRenderCellHook( this._Addon.toolkit.ItemTree.addRenderCellHook(
"title", "title",
@ -107,6 +122,143 @@ class AddonViews extends AddonModule {
return span; return span;
} }
); );
/**
* Example: custom cell ends
*/
/**
* Example: extra library tab starts
*/
const libTabId = this._Addon.toolkit.UI.registerLibraryTabPanel(
this._Addon.locale.getString("tabpanel.lib.tab.label"),
(panel: XUL.Element, win: Window) => {
const elem = this._Addon.toolkit.UI.creatElementsFromJSON(
win.document,
{
tag: "vbox",
namespace: "xul",
subElementOptions: [
{
tag: "h2",
directAttributes: {
innerText: "Hello World!",
},
},
{
tag: "div",
directAttributes: {
innerText: "This is a library tab.",
},
},
{
tag: "button",
directAttributes: {
innerText: "Unregister",
},
listeners: [
{
type: "click",
listener: () => {
this._Addon.toolkit.UI.unregisterLibraryTabPanel(
libTabId
);
},
},
],
},
],
}
);
panel.append(elem);
},
{
targetIndex: 1,
}
);
/**
* Example: extra library tab ends
*/
/**
* Example: extra reader tab starts
*/
const readerTabId = `${config.addonRef}-extra-reader-tab`;
this._Addon.toolkit.UI.registerReaderTabPanel(
this._Addon.locale.getString("tabpanel.reader.tab.label"),
(
panel: XUL.Element,
deck: XUL.Deck,
win: Window,
reader: _ZoteroReaderInstance
) => {
if (!panel) {
this._Addon.toolkit.Tool.log(
"This reader do not have right-side bar. Adding reader tab skipped."
);
return;
}
this._Addon.toolkit.Tool.log(reader);
const elem = this._Addon.toolkit.UI.creatElementsFromJSON(
win.document,
{
tag: "vbox",
id: `${config.addonRef}-${reader._instanceID}-extra-reader-tab-div`,
namespace: "xul",
// This is important! Don't create content for multiple times
ignoreIfExists: true,
subElementOptions: [
{
tag: "h2",
directAttributes: {
innerText: "Hello World!",
},
},
{
tag: "div",
directAttributes: {
innerText: "This is a reader tab.",
},
},
{
tag: "div",
directAttributes: {
innerText: `Reader: ${reader._title.slice(0, 20)}`,
},
},
{
tag: "div",
directAttributes: {
innerText: `itemID: ${reader.itemID}.`,
},
},
{
tag: "button",
directAttributes: {
innerText: "Unregister",
},
listeners: [
{
type: "click",
listener: () => {
this._Addon.toolkit.UI.unregisterReaderTabPanel(
readerTabId
);
},
},
],
},
],
}
);
panel.append(elem);
},
{
tabId: readerTabId,
}
);
/**
* Example: extra reader tab ends
*/
} }
public unInitViews() { public unInitViews() {
@ -118,6 +270,10 @@ class AddonViews extends AddonModule {
// Remove title cell patch // Remove title cell patch
this._Addon.toolkit.ItemTree.removeRenderCellHook("title"); this._Addon.toolkit.ItemTree.removeRenderCellHook("title");
this._Addon.toolkit.UI.unregisterReaderTabPanel(
`${config.addonRef}-extra-reader-tab`
);
} }
public showProgressWindow( public showProgressWindow(