Merge pull request #2676 from mrtcode/note-html-export-links
Add "Include Zotero Links" option for note export and QuickCopy
This commit is contained in:
commit
70f9462913
14 changed files with 188 additions and 28 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');
|
||||
|
|
|
@ -89,12 +89,16 @@ Zotero_Preferences.Export = {
|
|||
* Builds the note Quick Copy drop-down from the current global pref
|
||||
*/
|
||||
populateNoteQuickCopyList: async function () {
|
||||
document.getElementById('noteQuickCopy-format-options').removeAttribute('hidden');
|
||||
|
||||
// Initialize default format drop-down
|
||||
var format = Zotero.Prefs.get("export.noteQuickCopy.setting");
|
||||
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 +153,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 +197,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('noteQuickCopy-markdown-options');
|
||||
var htmlOptions = document.getElementById('noteQuickCopy-html-options');
|
||||
var markdownIncludeAppLinks = document.getElementById("noteQuickCopy-markdown-includeAppLinks");
|
||||
var htmlIncludeAppLinks = document.getElementById("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("noteQuickCopy-markdown-includeAppLinks");
|
||||
var htmlIncludeAppLinks = document.getElementById("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,38 @@
|
|||
|
||||
<label value="&zotero.preferences.quickCopy.noteFormat;" control="zotero-noteQuickCopy-menu"/>
|
||||
<menulist id="zotero-noteQuickCopy-menu" label="&zotero.general.loading;"/>
|
||||
|
||||
|
||||
<table id="noteQuickCopy-format-options"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
hidden="hidden">
|
||||
<tbody id="noteQuickCopy-markdown-options">
|
||||
<tr>
|
||||
<th>
|
||||
<xul:label value="&zotero.preferences.quickCopy.markdown;"/>
|
||||
</th>
|
||||
<td>
|
||||
<xul:checkbox id="noteQuickCopy-markdown-includeAppLinks"
|
||||
oncommand="Zotero_Preferences.Export.onUpdateNoteExportOptions()"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
<tbody id="noteQuickCopy-html-options">
|
||||
<tr>
|
||||
<th>
|
||||
<xul:label value="&zotero.preferences.quickCopy.html;"/>
|
||||
</th>
|
||||
<td>
|
||||
<xul:checkbox id="noteQuickCopy-html-includeAppLinks"
|
||||
oncommand="Zotero_Preferences.Export.onUpdateNoteExportOptions()"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<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"/>
|
||||
|
|
|
@ -49,7 +49,7 @@ Zotero.Prefs = new function(){
|
|||
if (!fromVersion) {
|
||||
fromVersion = 0;
|
||||
}
|
||||
var toVersion = 5;
|
||||
var toVersion = 6;
|
||||
if (fromVersion < toVersion) {
|
||||
for (var i = fromVersion + 1; i <= toVersion; i++) {
|
||||
switch (i) {
|
||||
|
@ -85,6 +85,24 @@ Zotero.Prefs = new function(){
|
|||
case 5:
|
||||
this.clear('extensions.spellcheck.inline.max-misspellings', true);
|
||||
break;
|
||||
|
||||
// If the note Quick Copy setting was set to Markdown + Rich Text but in a
|
||||
// non-default way (e.g., because of whitespace differences), clear the pref
|
||||
// to pick up the new app-link options
|
||||
case 6:
|
||||
var o = this.get('export.noteQuickCopy.setting');
|
||||
try {
|
||||
o = JSON.parse(o);
|
||||
if (o.mode == 'export'
|
||||
&& o.id == Zotero.Translators.TRANSLATOR_ID_MARKDOWN_AND_RICH_TEXT) {
|
||||
this.clear('export.noteQuickCopy.setting');
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.logError(e);
|
||||
this.clear('export.noteQuickCopy.setting');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.set('prefVersion', toVersion);
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -264,6 +264,12 @@ grid row hbox:first-child
|
|||
min-height: 1.5em; /* Fix collapse on Windows */
|
||||
}
|
||||
|
||||
#noteQuickCopy-format-options th {
|
||||
font-weight: normal;
|
||||
text-align: right;
|
||||
max-width: 3.6em;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cite pane
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1 +1 @@
|
|||
2022-09-28 08:35:26
|
||||
2022-10-22 20:40:04
|
||||
|
|
|
@ -17,7 +17,7 @@ function makePath {
|
|||
|
||||
if [ -z "$FX_EXECUTABLE" ]; then
|
||||
if [ "`uname`" == "Darwin" ]; then
|
||||
FX_EXECUTABLE="$( dirname "$ROOT_DIR" )/zotero-standalone-build/xulrunner/Firefox.app/Contents/MacOS/firefox"
|
||||
FX_EXECUTABLE="$( dirname "$ROOT_DIR" )/zotero-standalone-build-60/xulrunner/Firefox.app/Contents/MacOS/firefox"
|
||||
else
|
||||
FX_EXECUTABLE="$( dirname "$ROOT_DIR" )/zotero-standalone-build/xulrunner/firefox-x86_64/firefox"
|
||||
fi
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 6538b03fa30878ee48840ffc237e3c39c57bc1cc
|
||||
Subproject commit 37a8ce41f51f9c5ff6d0019cf3f1fb55c0855390
|
Loading…
Add table
Reference in a new issue