add: example for extra lib/reader tabpanels
This commit is contained in:
		
							parent
							
								
									29b64b5800
								
							
						
					
					
						commit
						51badae189
					
				@ -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
 | 
				
			||||||
@ -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=阅读器标签
 | 
				
			||||||
							
								
								
									
										156
									
								
								src/views.ts
									
									
									
									
									
								
							
							
						
						
									
										156
									
								
								src/views.ts
									
									
									
									
									
								
							@ -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(
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user