Add "Include Zotero Links" option for note export and QuickCopy
Fixes #2349
This commit is contained in:
parent
f2bfaeb7a9
commit
d0d3ed731d
9 changed files with 147 additions and 24 deletions
|
@ -238,26 +238,29 @@ var Zotero_File_Interface = new function() {
|
|||
/*
|
||||
* exports items to clipboard
|
||||
*/
|
||||
function exportItemsToClipboard(items, translatorID) {
|
||||
function _translate(items, translatorID, callback) {
|
||||
function exportItemsToClipboard(items, format) {
|
||||
function _translate(items, format, callback) {
|
||||
let translation = new Zotero.Translate.Export();
|
||||
translation.setItems(items.slice());
|
||||
translation.setTranslator(translatorID);
|
||||
translation.setTranslator(format.id);
|
||||
if (format.options) {
|
||||
translation.setDisplayOptions(format.options);
|
||||
}
|
||||
translation.setHandler("done", callback);
|
||||
translation.translate();
|
||||
}
|
||||
|
||||
// If translating with virtual "Markdown + Rich Text" translator, use Note Markdown and
|
||||
// Note HTML instead
|
||||
if (translatorID == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
translatorID = Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN;
|
||||
_translate(items, translatorID, (obj, worked) => {
|
||||
if (format.id == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
let markdownFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN, options: format.markdownOptions };
|
||||
let htmlFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML, options: format.htmlOptions };
|
||||
_translate(items, markdownFormat, (obj, worked) => {
|
||||
if (!worked) {
|
||||
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
||||
return;
|
||||
}
|
||||
translatorID = Zotero.Translators.TRANSLATOR_ID_NOTE_HTML;
|
||||
_translate(items, translatorID, (obj2, worked) => {
|
||||
_translate(items, htmlFormat, (obj2, worked) => {
|
||||
if (!worked) {
|
||||
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
||||
return;
|
||||
|
@ -293,14 +296,14 @@ var Zotero_File_Interface = new function() {
|
|||
});
|
||||
}
|
||||
else {
|
||||
_translate(items, translatorID, (obj, worked) => {
|
||||
_translate(items, format, (obj, worked) => {
|
||||
if (!worked) {
|
||||
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
||||
return;
|
||||
}
|
||||
let text = obj.string;
|
||||
// For Note HTML translator use body content only
|
||||
if (translatorID == Zotero.Translators.TRANSLATOR_ID_NOTE_HTML) {
|
||||
if (format.id == Zotero.Translators.TRANSLATOR_ID_NOTE_HTML) {
|
||||
let parser = Components.classes['@mozilla.org/xmlextras/domparser;1']
|
||||
.createInstance(Components.interfaces.nsIDOMParser);
|
||||
let doc = parser.parseFromString(text, 'text/html');
|
||||
|
|
|
@ -2012,8 +2012,8 @@ var ItemTree = class ItemTree extends LibraryTree {
|
|||
// If exporting with virtual "Markdown + Rich Text" translator, call Note Markdown
|
||||
// and Note HTML translators instead
|
||||
if (format.id === Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
let markdownFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN };
|
||||
let htmlFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML };
|
||||
let markdownFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN, options: format.markdownOptions };
|
||||
let htmlFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML, options: format.htmlOptions };
|
||||
Zotero.QuickCopy.getContentFromItems(items, markdownFormat, (obj, worked) => {
|
||||
if (!worked) {
|
||||
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
||||
|
|
|
@ -94,7 +94,9 @@ Zotero_Preferences.Export = {
|
|||
format = Zotero.QuickCopy.unserializeSetting(format);
|
||||
var menulist = document.getElementById("zotero-noteQuickCopy-menu");
|
||||
menulist.setAttribute('preference', "pref-noteQuickCopy-setting");
|
||||
|
||||
menulist.removeEventListener('command', this.updateNoteQuickCopyUI);
|
||||
menulist.addEventListener('command', this.updateNoteQuickCopyUI);
|
||||
|
||||
if (!format) {
|
||||
format = menulist.value;
|
||||
}
|
||||
|
@ -149,11 +151,42 @@ Zotero_Preferences.Export = {
|
|||
return;
|
||||
}
|
||||
|
||||
var val = JSON.stringify({ mode: 'export', id: translator.translatorID });
|
||||
var value = { mode: 'export', id: translator.translatorID };
|
||||
if (translator.translatorID == format.id) {
|
||||
value = format;
|
||||
}
|
||||
else if (translator.translatorID == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
value = {
|
||||
mode: 'export',
|
||||
id: translator.translatorID,
|
||||
markdownOptions: {
|
||||
includeAppLinks: true
|
||||
},
|
||||
htmlOptions: {
|
||||
includeAppLinks: false
|
||||
}
|
||||
};
|
||||
if (format.id == Zotero.Translators.TRANSLATOR_ID_NOTE_HTML && format.options) {
|
||||
value.htmlOptions = format.options;
|
||||
}
|
||||
}
|
||||
else if (translator.translatorID == Zotero.Translators.TRANSLATOR_ID_NOTE_HTML) {
|
||||
value = {
|
||||
mode: 'export',
|
||||
id: translator.translatorID,
|
||||
options: {
|
||||
includeAppLinks: false
|
||||
}
|
||||
};
|
||||
if (format.id == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT && format.htmlOptions) {
|
||||
value.options = format.htmlOptions;
|
||||
}
|
||||
}
|
||||
|
||||
value = JSON.stringify(value);
|
||||
var itemNode = document.createElement('menuitem');
|
||||
itemNode.setAttribute('value', val);
|
||||
itemNode.setAttribute('value', value);
|
||||
itemNode.setAttribute('label', translator.label);
|
||||
// itemNode.setAttribute('oncommand', 'Zotero_Preferences.Export.updateQuickCopyUI()');
|
||||
popup.appendChild(itemNode);
|
||||
|
||||
if (format.mode == 'export' && format.id == translator.translatorID) {
|
||||
|
@ -162,6 +195,70 @@ Zotero_Preferences.Export = {
|
|||
});
|
||||
|
||||
menulist.click();
|
||||
this.updateNoteQuickCopyUI();
|
||||
},
|
||||
|
||||
updateNoteQuickCopyUI: () => {
|
||||
var format = document.getElementById('zotero-noteQuickCopy-menu').value;
|
||||
format = JSON.parse(format);
|
||||
|
||||
var markdownOptions = document.getElementById('zotero-noteQuickCopy-markdown-options');
|
||||
var htmlOptions = document.getElementById('zotero-noteQuickCopy-html-options');
|
||||
var markdownIncludeAppLinks = document.getElementById("zotero-noteQuickCopy-markdown-includeAppLinks");
|
||||
var htmlIncludeAppLinks = document.getElementById("zotero-noteQuickCopy-html-includeAppLinks");
|
||||
|
||||
markdownIncludeAppLinks.label = Zotero.getString('exportOptions.includeAppLinks', Zotero.appName);
|
||||
htmlIncludeAppLinks.label = Zotero.getString('exportOptions.includeAppLinks', Zotero.appName);
|
||||
|
||||
if (format.id == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
markdownOptions.hidden = false;
|
||||
htmlOptions.hidden = false;
|
||||
markdownIncludeAppLinks.checked = format.markdownOptions && format.markdownOptions.includeAppLinks;
|
||||
htmlIncludeAppLinks.checked = format.htmlOptions && format.htmlOptions.includeAppLinks;
|
||||
}
|
||||
else if (format.id == Zotero.Translators.TRANSLATOR_ID_NOTE_HTML) {
|
||||
markdownOptions.hidden = true;
|
||||
htmlOptions.hidden = false;
|
||||
htmlIncludeAppLinks.checked = format.options && format.options.includeAppLinks;
|
||||
}
|
||||
else {
|
||||
markdownOptions.hidden = true;
|
||||
htmlOptions.hidden = true;
|
||||
}
|
||||
},
|
||||
|
||||
onUpdateNoteExportOptions() {
|
||||
var menulist = document.getElementById("zotero-noteQuickCopy-menu");
|
||||
var markdownIncludeAppLinks = document.getElementById("zotero-noteQuickCopy-markdown-includeAppLinks");
|
||||
var htmlIncludeAppLinks = document.getElementById("zotero-noteQuickCopy-html-includeAppLinks");
|
||||
|
||||
for (let i = 0; i < menulist.itemCount; i++) {
|
||||
let item = menulist.getItemAtIndex(i);
|
||||
let format = JSON.parse(item.getAttribute('value'));
|
||||
if (format.id == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
if (!format.markdownOptions) {
|
||||
format.markdownOptions = {};
|
||||
}
|
||||
if (!format.htmlOptions) {
|
||||
format.htmlOptions = {};
|
||||
}
|
||||
format.markdownOptions.includeAppLinks = markdownIncludeAppLinks.checked;
|
||||
format.htmlOptions.includeAppLinks = htmlIncludeAppLinks.checked;
|
||||
}
|
||||
else if (format.id == Zotero.Translators.TRANSLATOR_ID_NOTE_HTML) {
|
||||
if (!format.options) {
|
||||
format.options = {};
|
||||
}
|
||||
format.options.includeAppLinks = htmlIncludeAppLinks.checked;
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
item.value = JSON.stringify(format);
|
||||
}
|
||||
// After updating menulist item value we have to wait a bit before doing click(), to avoid anomalies
|
||||
// like an empty row in menulist. 0 in setTimeout is not enough
|
||||
setTimeout(() => menulist.click(), 50);
|
||||
},
|
||||
|
||||
|
||||
|
|
|
@ -71,9 +71,27 @@
|
|||
|
||||
<label value="&zotero.preferences.quickCopy.noteFormat;" control="zotero-noteQuickCopy-menu"/>
|
||||
<menulist id="zotero-noteQuickCopy-menu" label="&zotero.general.loading;"/>
|
||||
|
||||
|
||||
<vbox id="zotero-noteQuickCopy-markdown-options">
|
||||
<label value="&zotero.preferences.quickCopy.markdown;"/>
|
||||
<vbox style="margin-left: 2em">
|
||||
<checkbox id="zotero-noteQuickCopy-markdown-includeAppLinks"
|
||||
label="Include App Links"
|
||||
oncommand="Zotero_Preferences.Export.onUpdateNoteExportOptions()"/>
|
||||
</vbox>
|
||||
</vbox>
|
||||
|
||||
<vbox id="zotero-noteQuickCopy-html-options">
|
||||
<label value="&zotero.preferences.quickCopy.html;"/>
|
||||
<vbox style="margin-left: 2em">
|
||||
<checkbox id="zotero-noteQuickCopy-html-includeAppLinks"
|
||||
label="Include App Links"
|
||||
oncommand="Zotero_Preferences.Export.onUpdateNoteExportOptions()"/>
|
||||
</vbox>
|
||||
</vbox>
|
||||
|
||||
<separator/>
|
||||
|
||||
|
||||
<label value="&zotero.preferences.quickCopy.siteEditor.setings;" control="quickCopy-siteSettings"/>
|
||||
<hbox class="virtualized-table-container" flex="1" height="120px">
|
||||
<html:div id="quickCopy-siteSettings"/>
|
||||
|
|
|
@ -269,6 +269,9 @@ Zotero.QuickCopy = new function() {
|
|||
// Allow to reuse items array
|
||||
translation.setItems(items.slice());
|
||||
translation.setTranslator(format.id);
|
||||
if (format.options) {
|
||||
translation.setDisplayOptions(format.options);
|
||||
}
|
||||
translation.setHandler("done", callback);
|
||||
translation.translate();
|
||||
return true;
|
||||
|
@ -325,8 +328,8 @@ Zotero.QuickCopy = new function() {
|
|||
// If virtual "Markdown + Rich Text" translator is selected, preload Note Markdown and
|
||||
// Note HTML translators
|
||||
if (format.id == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
await _preloadFormat({ mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN });
|
||||
await _preloadFormat({ mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML });
|
||||
await _preloadFormat({ mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN, options: format.markdownOptions });
|
||||
await _preloadFormat({ mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML, options: format.htmlOptions });
|
||||
return;
|
||||
}
|
||||
return _preloadFormat(format);
|
||||
|
|
|
@ -443,8 +443,8 @@ class ReaderInstance {
|
|||
// If exporting with virtual "Markdown + Rich Text" translator, call Note Markdown
|
||||
// and Note HTML translators instead
|
||||
if (format.id === Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
let markdownFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN };
|
||||
let htmlFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML };
|
||||
let markdownFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN, options: format.markdownOptions };
|
||||
let htmlFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML, options: format.htmlOptions };
|
||||
Zotero.QuickCopy.getContentFromItems(items, markdownFormat, (obj, worked) => {
|
||||
if (!worked) {
|
||||
return;
|
||||
|
|
|
@ -2401,7 +2401,7 @@ var ZoteroPane = new function()
|
|||
return;
|
||||
}
|
||||
else {
|
||||
Zotero_File_Interface.exportItemsToClipboard(items, format.id);
|
||||
Zotero_File_Interface.exportItemsToClipboard(items, format);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -107,6 +107,8 @@
|
|||
<!ENTITY zotero.preferences.quickCopy.caption "Quick Copy">
|
||||
<!ENTITY zotero.preferences.quickCopy.itemFormat "Item Format:">
|
||||
<!ENTITY zotero.preferences.quickCopy.noteFormat "Note Format:">
|
||||
<!ENTITY zotero.preferences.quickCopy.markdown "Markdown:">
|
||||
<!ENTITY zotero.preferences.quickCopy.html "Rich Text/HTML:">
|
||||
<!ENTITY zotero.preferences.quickCopy.copyAsHTML "Copy as HTML">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.setings "Site-Specific Settings:">
|
||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.domainPath "Domain/Path">
|
||||
|
|
|
@ -129,7 +129,7 @@ pref("extensions.zotero.rtfScan.lastOutputFile", "");
|
|||
pref("extensions.zotero.export.quickCopy.setting", "bibliography=http://www.zotero.org/styles/chicago-note-bibliography");
|
||||
pref("extensions.zotero.export.quickCopy.dragLimit", 50);
|
||||
|
||||
pref("extensions.zotero.export.noteQuickCopy.setting", '{"mode": "export", "id": "a45eca67-1ee8-45e5-b4c6-23fb8a852873"}');
|
||||
pref("extensions.zotero.export.noteQuickCopy.setting", '{"mode":"export","id":"a45eca67-1ee8-45e5-b4c6-23fb8a852873","markdownOptions":{"includeAppLinks":true},"htmlOptions":{"includeAppLinks":false}}');
|
||||
|
||||
// Integration settings
|
||||
pref("extensions.zotero.integration.port", 50001);
|
||||
|
|
Loading…
Add table
Reference in a new issue