add: export template
This commit is contained in:
parent
cbbfff999a
commit
94d7f40ea5
|
|
@ -3,7 +3,8 @@ pref.title=BNotes
|
|||
menuItem.setMainNote=As Workspace Note
|
||||
menuItem.exportNote=Export Note
|
||||
|
||||
menuEdit.templatePicker=Insert Template to Workspace Note
|
||||
menuEdit.insertTemplate=Insert Template to Workspace Note
|
||||
menuEdit.exportTemplate=Export Template...
|
||||
menuEdit.templateEditor=Template Editor
|
||||
|
||||
menuTools.syncManager=Sync Manager
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ pref.title=BNotes
|
|||
menuItem.setMainNote=设为工作区主笔记
|
||||
menuItem.exportNote=导出笔记
|
||||
|
||||
menuEdit.templatePicker=插入模板到工作区笔记
|
||||
menuEdit.insertTemplate=插入模板到工作区笔记
|
||||
menuEdit.exportTemplate=导出模板...
|
||||
menuEdit.templateEditor=模板编辑器
|
||||
|
||||
menuTools.syncManager=同步管理器
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ class Addon {
|
|||
templates: { name: string }[];
|
||||
};
|
||||
templatePicker: {
|
||||
mode: "insert" | "create";
|
||||
mode: "insert" | "create" | "export";
|
||||
data: Record<string, any>;
|
||||
};
|
||||
prompt?: Prompt;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,10 @@ enum OPTIONS {
|
|||
"exportNote",
|
||||
}
|
||||
|
||||
export async function showExportNoteOptions(noteIds: number[]) {
|
||||
export async function showExportNoteOptions(
|
||||
noteIds: number[],
|
||||
overwriteOptions: Record<string, any> = {}
|
||||
) {
|
||||
const items = Zotero.Items.get(noteIds);
|
||||
const noteItems: Zotero.Item[] = [];
|
||||
items.forEach((item) => {
|
||||
|
|
@ -109,7 +112,10 @@ export async function showExportNoteOptions(noteIds: number[]) {
|
|||
|
||||
await data.unloadLock?.promise;
|
||||
if (data._lastButtonId === "confirm") {
|
||||
addon.api.$export.exportNotes(noteItems, data as Record<string, boolean>);
|
||||
await addon.api.$export.exportNotes(
|
||||
noteItems,
|
||||
Object.assign(data as Record<string, boolean>, overwriteOptions)
|
||||
);
|
||||
dataKeys.forEach((key) => {
|
||||
setPref(`export.${key}`, Boolean(data[key]));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ export function registerMenus() {
|
|||
"menuEdit",
|
||||
{
|
||||
tag: "menuitem",
|
||||
label: getString("menuEdit.templatePicker"),
|
||||
label: getString("menuEdit.insertTemplate"),
|
||||
icon: `chrome://${config.addonRef}/content/icons/favicon.png`,
|
||||
commandListener: (ev) => {
|
||||
addon.hooks.onShowTemplatePicker();
|
||||
|
|
@ -48,6 +48,19 @@ export function registerMenus() {
|
|||
"before",
|
||||
menuEditAnchor
|
||||
);
|
||||
ztoolkit.Menu.register(
|
||||
"menuEdit",
|
||||
{
|
||||
tag: "menuitem",
|
||||
label: getString("menuEdit.exportTemplate"),
|
||||
icon: `chrome://${config.addonRef}/content/icons/favicon.png`,
|
||||
commandListener: (ev) => {
|
||||
addon.hooks.onShowTemplatePicker("export");
|
||||
},
|
||||
},
|
||||
"before",
|
||||
menuEditAnchor
|
||||
);
|
||||
ztoolkit.Menu.register(
|
||||
"menuEdit",
|
||||
{
|
||||
|
|
@ -79,6 +92,7 @@ export function registerMenus() {
|
|||
},
|
||||
});
|
||||
|
||||
// create note menu in library
|
||||
const newNoteMenu = document
|
||||
.querySelector("#zotero-tb-note-add")
|
||||
?.querySelector("menupopup") as XUL.MenuPopup;
|
||||
|
|
@ -102,6 +116,7 @@ export function registerMenus() {
|
|||
addon.hooks.onCreateNoteFromTemplate("item", "library"),
|
||||
});
|
||||
|
||||
// create note menu in reader side panel
|
||||
ztoolkit.Menu.register(
|
||||
document.querySelector(
|
||||
"#context-pane-add-child-note-button-popup"
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ function showTemplatePicker(
|
|||
mode: "create",
|
||||
data?: { noteType?: "standalone" | "item"; parentItemId?: number }
|
||||
): void;
|
||||
function showTemplatePicker(mode: "export", data?: {}): void;
|
||||
function showTemplatePicker(): void;
|
||||
function showTemplatePicker(
|
||||
mode: typeof addon.data.templatePicker.mode = "insert",
|
||||
|
|
@ -61,12 +62,16 @@ function getTemplatePromptHandler(name: string) {
|
|||
case "create":
|
||||
await createTemplateNoteCallback(name);
|
||||
break;
|
||||
case "export":
|
||||
await exportTemplateCallback(name);
|
||||
break;
|
||||
case "insert":
|
||||
default:
|
||||
await insertTemplateCallback(name);
|
||||
break;
|
||||
}
|
||||
addon.data.templatePicker.mode = "insert";
|
||||
addon.data.templatePicker.data = {};
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -87,7 +92,6 @@ async function insertTemplateCallback(name: string) {
|
|||
html,
|
||||
addon.data.templatePicker.data.lineIndex
|
||||
);
|
||||
addon.data.templatePicker.data = {};
|
||||
}
|
||||
|
||||
async function createTemplateNoteCallback(name: string) {
|
||||
|
|
@ -118,3 +122,18 @@ async function createTemplateNoteCallback(name: string) {
|
|||
}
|
||||
await insertTemplateCallback(name);
|
||||
}
|
||||
|
||||
async function exportTemplateCallback(name: string) {
|
||||
// Create temp note
|
||||
const noteItem = new Zotero.Item("note");
|
||||
noteItem.libraryID = Zotero.Libraries.userLibraryID;
|
||||
await noteItem.saveTx();
|
||||
addon.data.templatePicker.data.noteId = noteItem.id;
|
||||
await insertTemplateCallback(name);
|
||||
// Export note
|
||||
await addon.hooks.onShowExportNoteOptions([noteItem.id], {
|
||||
setAutoSync: false,
|
||||
});
|
||||
// Delete temp note
|
||||
await Zotero.Items.erase(noteItem.id);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue