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
|
* exports items to clipboard
|
||||||
*/
|
*/
|
||||||
function exportItemsToClipboard(items, translatorID) {
|
function exportItemsToClipboard(items, format) {
|
||||||
function _translate(items, translatorID, callback) {
|
function _translate(items, format, callback) {
|
||||||
let translation = new Zotero.Translate.Export();
|
let translation = new Zotero.Translate.Export();
|
||||||
translation.setItems(items.slice());
|
translation.setItems(items.slice());
|
||||||
translation.setTranslator(translatorID);
|
translation.setTranslator(format.id);
|
||||||
|
if (format.options) {
|
||||||
|
translation.setDisplayOptions(format.options);
|
||||||
|
}
|
||||||
translation.setHandler("done", callback);
|
translation.setHandler("done", callback);
|
||||||
translation.translate();
|
translation.translate();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If translating with virtual "Markdown + Rich Text" translator, use Note Markdown and
|
// If translating with virtual "Markdown + Rich Text" translator, use Note Markdown and
|
||||||
// Note HTML instead
|
// Note HTML instead
|
||||||
if (translatorID == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
if (format.id == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||||
translatorID = Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN;
|
let markdownFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN, options: format.markdownOptions };
|
||||||
_translate(items, translatorID, (obj, worked) => {
|
let htmlFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML, options: format.htmlOptions };
|
||||||
|
_translate(items, markdownFormat, (obj, worked) => {
|
||||||
if (!worked) {
|
if (!worked) {
|
||||||
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
translatorID = Zotero.Translators.TRANSLATOR_ID_NOTE_HTML;
|
_translate(items, htmlFormat, (obj2, worked) => {
|
||||||
_translate(items, translatorID, (obj2, worked) => {
|
|
||||||
if (!worked) {
|
if (!worked) {
|
||||||
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
||||||
return;
|
return;
|
||||||
|
@ -293,14 +296,14 @@ var Zotero_File_Interface = new function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
_translate(items, translatorID, (obj, worked) => {
|
_translate(items, format, (obj, worked) => {
|
||||||
if (!worked) {
|
if (!worked) {
|
||||||
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let text = obj.string;
|
let text = obj.string;
|
||||||
// For Note HTML translator use body content only
|
// 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']
|
let parser = Components.classes['@mozilla.org/xmlextras/domparser;1']
|
||||||
.createInstance(Components.interfaces.nsIDOMParser);
|
.createInstance(Components.interfaces.nsIDOMParser);
|
||||||
let doc = parser.parseFromString(text, 'text/html');
|
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
|
// If exporting with virtual "Markdown + Rich Text" translator, call Note Markdown
|
||||||
// and Note HTML translators instead
|
// and Note HTML translators instead
|
||||||
if (format.id === Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
if (format.id === Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||||
let markdownFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN };
|
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 };
|
let htmlFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML, options: format.htmlOptions };
|
||||||
Zotero.QuickCopy.getContentFromItems(items, markdownFormat, (obj, worked) => {
|
Zotero.QuickCopy.getContentFromItems(items, markdownFormat, (obj, worked) => {
|
||||||
if (!worked) {
|
if (!worked) {
|
||||||
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
Zotero.log(Zotero.getString('fileInterface.exportError'), 'warning');
|
||||||
|
|
|
@ -94,7 +94,9 @@ Zotero_Preferences.Export = {
|
||||||
format = Zotero.QuickCopy.unserializeSetting(format);
|
format = Zotero.QuickCopy.unserializeSetting(format);
|
||||||
var menulist = document.getElementById("zotero-noteQuickCopy-menu");
|
var menulist = document.getElementById("zotero-noteQuickCopy-menu");
|
||||||
menulist.setAttribute('preference', "pref-noteQuickCopy-setting");
|
menulist.setAttribute('preference', "pref-noteQuickCopy-setting");
|
||||||
|
menulist.removeEventListener('command', this.updateNoteQuickCopyUI);
|
||||||
|
menulist.addEventListener('command', this.updateNoteQuickCopyUI);
|
||||||
|
|
||||||
if (!format) {
|
if (!format) {
|
||||||
format = menulist.value;
|
format = menulist.value;
|
||||||
}
|
}
|
||||||
|
@ -149,11 +151,42 @@ Zotero_Preferences.Export = {
|
||||||
return;
|
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');
|
var itemNode = document.createElement('menuitem');
|
||||||
itemNode.setAttribute('value', val);
|
itemNode.setAttribute('value', value);
|
||||||
itemNode.setAttribute('label', translator.label);
|
itemNode.setAttribute('label', translator.label);
|
||||||
// itemNode.setAttribute('oncommand', 'Zotero_Preferences.Export.updateQuickCopyUI()');
|
|
||||||
popup.appendChild(itemNode);
|
popup.appendChild(itemNode);
|
||||||
|
|
||||||
if (format.mode == 'export' && format.id == translator.translatorID) {
|
if (format.mode == 'export' && format.id == translator.translatorID) {
|
||||||
|
@ -162,6 +195,70 @@ Zotero_Preferences.Export = {
|
||||||
});
|
});
|
||||||
|
|
||||||
menulist.click();
|
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"/>
|
<label value="&zotero.preferences.quickCopy.noteFormat;" control="zotero-noteQuickCopy-menu"/>
|
||||||
<menulist id="zotero-noteQuickCopy-menu" label="&zotero.general.loading;"/>
|
<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/>
|
<separator/>
|
||||||
|
|
||||||
<label value="&zotero.preferences.quickCopy.siteEditor.setings;" control="quickCopy-siteSettings"/>
|
<label value="&zotero.preferences.quickCopy.siteEditor.setings;" control="quickCopy-siteSettings"/>
|
||||||
<hbox class="virtualized-table-container" flex="1" height="120px">
|
<hbox class="virtualized-table-container" flex="1" height="120px">
|
||||||
<html:div id="quickCopy-siteSettings"/>
|
<html:div id="quickCopy-siteSettings"/>
|
||||||
|
|
|
@ -269,6 +269,9 @@ Zotero.QuickCopy = new function() {
|
||||||
// Allow to reuse items array
|
// Allow to reuse items array
|
||||||
translation.setItems(items.slice());
|
translation.setItems(items.slice());
|
||||||
translation.setTranslator(format.id);
|
translation.setTranslator(format.id);
|
||||||
|
if (format.options) {
|
||||||
|
translation.setDisplayOptions(format.options);
|
||||||
|
}
|
||||||
translation.setHandler("done", callback);
|
translation.setHandler("done", callback);
|
||||||
translation.translate();
|
translation.translate();
|
||||||
return true;
|
return true;
|
||||||
|
@ -325,8 +328,8 @@ Zotero.QuickCopy = new function() {
|
||||||
// If virtual "Markdown + Rich Text" translator is selected, preload Note Markdown and
|
// If virtual "Markdown + Rich Text" translator is selected, preload Note Markdown and
|
||||||
// Note HTML translators
|
// Note HTML translators
|
||||||
if (format.id == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
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_MARKDOWN, options: format.markdownOptions });
|
||||||
await _preloadFormat({ mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML });
|
await _preloadFormat({ mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML, options: format.htmlOptions });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return _preloadFormat(format);
|
return _preloadFormat(format);
|
||||||
|
|
|
@ -443,8 +443,8 @@ class ReaderInstance {
|
||||||
// If exporting with virtual "Markdown + Rich Text" translator, call Note Markdown
|
// If exporting with virtual "Markdown + Rich Text" translator, call Note Markdown
|
||||||
// and Note HTML translators instead
|
// and Note HTML translators instead
|
||||||
if (format.id === Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
if (format.id === Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||||
let markdownFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_MARKDOWN };
|
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 };
|
let htmlFormat = { mode: 'export', id: Zotero.Translators.TRANSLATOR_ID_NOTE_HTML, options: format.htmlOptions };
|
||||||
Zotero.QuickCopy.getContentFromItems(items, markdownFormat, (obj, worked) => {
|
Zotero.QuickCopy.getContentFromItems(items, markdownFormat, (obj, worked) => {
|
||||||
if (!worked) {
|
if (!worked) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -2401,7 +2401,7 @@ var ZoteroPane = new function()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
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.caption "Quick Copy">
|
||||||
<!ENTITY zotero.preferences.quickCopy.itemFormat "Item Format:">
|
<!ENTITY zotero.preferences.quickCopy.itemFormat "Item Format:">
|
||||||
<!ENTITY zotero.preferences.quickCopy.noteFormat "Note 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.copyAsHTML "Copy as HTML">
|
||||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.setings "Site-Specific Settings:">
|
<!ENTITY zotero.preferences.quickCopy.siteEditor.setings "Site-Specific Settings:">
|
||||||
<!ENTITY zotero.preferences.quickCopy.siteEditor.domainPath "Domain/Path">
|
<!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.setting", "bibliography=http://www.zotero.org/styles/chicago-note-bibliography");
|
||||||
pref("extensions.zotero.export.quickCopy.dragLimit", 50);
|
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
|
// Integration settings
|
||||||
pref("extensions.zotero.integration.port", 50001);
|
pref("extensions.zotero.integration.port", 50001);
|
||||||
|
|
Loading…
Add table
Reference in a new issue