feat: import notes

resolve: #10
This commit is contained in:
xiangyu 2022-05-16 17:34:01 +08:00
parent eac9a7e8bc
commit 4dd666c92d
5 changed files with 64 additions and 12 deletions

View File

@ -29,6 +29,7 @@
<keyset>
<key id="key_new" key="N" modifiers="accel" command="cmd_new" />
<key id="key_open" key="O" modifiers="accel" command="cmd_open" />
<key id="key_import" key="I" modifiers="accel" command="cmd_import" />
<key id="key_export" key="E" modifiers="accel" command="cmd_export" />
<key id="key_close" key="W" modifiers="accel" command="cmd_close" />
<key id="key_indent" keycode="VK_TAB" command="cmd_indent" />
@ -36,6 +37,7 @@
</keyset>
<command id="cmd_new" oncommand="Zotero.Knowledge4Zotero.events.onEditorEvent({type: 'createWorkspace'});" />
<command id="cmd_open" oncommand="Zotero.Knowledge4Zotero.events.onEditorEvent({type: 'selectMainKnowledge'});" />
<command id="cmd_import" oncommand="Zotero.Knowledge4Zotero.events.onEditorEvent({type: 'import'});" />
<command id="cmd_export" oncommand="Zotero.Knowledge4Zotero.events.onEditorEvent({type: 'export', content: {editorInstance: {_item: false}}});" />
<command id="cmd_close" oncommand="window.close();" />
<command id="cmd_addheading" oncommand="Zotero.Knowledge4Zotero.events.onEditorEvent({type: 'addHeading'});" />
@ -55,6 +57,7 @@
<menupopup id="menu_FilePopup">
<menuitem id="menu_new" label="&zotero.__addonRef__.workspace.menu.new;" key="key_new" accesskey="N" command="cmd_new" />
<menuitem id="menu_open" label="&zotero.__addonRef__.workspace.menu.open;" key="key_open" accesskey="O" command="cmd_open" />
<menuitem id="menu_import" label="&zotero.__addonRef__.workspace.menu.import;" key="key_import" accesskey="I" command="cmd_import" />
<menuitem id="menu_export" label="&zotero.__addonRef__.workspace.menu.export;" key="key_export" accesskey="E" command="cmd_export" />
<menuitem id="menu_close" label="&closeCmd.label;" key="key_close" accesskey="&closeCmd.accesskey;" command="cmd_close" />
</menupopup>

View File

@ -2,6 +2,7 @@
<!ENTITY zotero.__addonRef__.workspace.menu.new "Create New Main Note">
<!ENTITY zotero.__addonRef__.workspace.menu.open "Open Main Note...">
<!ENTITY zotero.__addonRef__.workspace.menu.import "Import Notes...">
<!ENTITY zotero.__addonRef__.workspace.menu.export "Export Main Note...">
<!ENTITY zotero.__addonRef__.workspace.menu.addheading "Insert Heading...">
<!ENTITY zotero.__addonRef__.workspace.menu.indent "Decrease Heading Level">

View File

@ -2,6 +2,7 @@
<!ENTITY zotero.__addonRef__.workspace.menu.new "创建新主笔记">
<!ENTITY zotero.__addonRef__.workspace.menu.open "打开主笔记...">
<!ENTITY zotero.__addonRef__.workspace.menu.import "导入笔记...">
<!ENTITY zotero.__addonRef__.workspace.menu.export "导出主笔记...">
<!ENTITY zotero.__addonRef__.workspace.menu.addheading "插入标题...">
<!ENTITY zotero.__addonRef__.workspace.menu.indent "降低标题层级">

View File

@ -667,6 +667,48 @@ class AddonEvents extends AddonBase {
-1,
node.model.lineIndex
);
} else if (message.type === "import") {
/*
message.content = {}
*/
const io = {
// Not working
singleSelection: true,
dataIn: null,
dataOut: null,
deferred: Zotero.Promise.defer(),
};
(window as unknown as XULWindow).openDialog(
"chrome://zotero/content/selectItemsDialog.xul",
"",
"chrome,dialog=no,centerscreen,resizable=yes",
io
);
await io.deferred.promise;
const ids = io.dataOut;
const notes = Zotero.Items.get(ids).filter((item: ZoteroItem) =>
item.isNote()
);
if (notes.length === 0) {
return;
}
const newLines = [];
newLines.push("<h1>Imported Notes</h1>");
newLines.push("<p> </p>");
for (const note of notes) {
const linkURL = this._Addon.knowledge.getNoteLink(note);
const linkText = note.getNoteTitle().trim();
newLines.push(
`<p><a href="${linkURL}">${linkText ? linkText : linkURL}</a></p>`
);
newLines.push("<p> </p>");
}
// End of line
await this._Addon.knowledge.addLinesToNote(undefined, newLines, 65535);
} else if (message.type === "export") {
/*
message.content = {

View File

@ -358,20 +358,12 @@ class Knowledge extends AddonBase {
this._Addon.views.showProgressWindow("Better Notes", "Not a note item");
return;
}
let libraryID = linkedNote.libraryID;
let library = Zotero.Libraries.get(libraryID);
let groupID: string;
if (library.libraryType === "user") {
groupID = "u";
} else if (library.libraryType === "group") {
groupID = `${library.id}`;
}
let noteKey = linkedNote.key;
let linkText = linkedNote.getNoteTitle().trim();
const link = this.getNoteLink(linkedNote);
const linkText = linkedNote.getNoteTitle().trim();
this.addSubLineToNote(
targetNote,
`<a href="zotero://note/${groupID}/${noteKey}/" rel="noopener noreferrer nofollow">${
linkText ? linkText : `zotero://note/${groupID}/${noteKey}/`
`<a href="${link}" rel="noopener noreferrer nofollow">${
linkText ? linkText : `${link}`
}</a>`,
lineIndex,
true
@ -382,6 +374,19 @@ class Knowledge extends AddonBase {
);
}
getNoteLink(note: ZoteroItem) {
let libraryID = note.libraryID;
let library = Zotero.Libraries.get(libraryID);
let groupID: string;
if (library.libraryType === "user") {
groupID = "u";
} else if (library.libraryType === "group") {
groupID = `${library.id}`;
}
let noteKey = note.key;
return `zotero://note/${groupID}/${noteKey}/`;
}
async modifyLineInNote(note: ZoteroItem, text: string, lineIndex: number) {
note = note || this.getWorkspaceNote();
if (!note) {