diff --git a/src/common/zotero.js b/src/common/zotero.js index be386780a1..3cb69ea116 100644 --- a/src/common/zotero.js +++ b/src/common/zotero.js @@ -227,7 +227,11 @@ var Zotero = new function() { } if (err.stack) { - Zotero.Errors.log(err.stack); + let error = err.stack; + if (Zotero.isSafari) { + error = err.message + '\n' + error; + } + Zotero.Errors.log(error); } else { Zotero.Errors.log(err.message ? err.message : err.toString(), fileName, lineNumber); } diff --git a/src/safari/global.js b/src/safari/global.js index 325b2a1b78..547cce06ce 100644 --- a/src/safari/global.js +++ b/src/safari/global.js @@ -110,9 +110,7 @@ Zotero.Connector_Browser = new function() { if(tab.translators && tab.translators.length) { Zotero.Connector_Browser.saveWithTranslator(tab, 0); } else { - var withSnapshot = Zotero.Connector.isOnline ? Zotero.Connector.automaticSnapshots : - Zotero.Prefs.get('automaticSnapshots'); - Zotero.Connector_Browser.saveAsWebpage(tab, withSnapshot); + Zotero.Connector_Browser.saveAsWebpage(tab); } } else if (command === "zotero-preferences") { Zotero.Connector_Browser.openTab(safari.extension.baseURI+"preferences/preferences.html"); @@ -169,10 +167,10 @@ Zotero.Connector_Browser = new function() { return Zotero.Messaging.sendMessage("translate", [tab.instanceID, tab.translators[i].translatorID], tab); } - this.saveAsWebpage = function(tab, withSnapshot) { + this.saveAsWebpage = function(tab) { let title = tab.title.split('/'); title = title[title.length-1]; - return Zotero.Messaging.sendMessage("saveAsWebpage", [tab.instanceID || 0, [title, withSnapshot]], tab); + return Zotero.Messaging.sendMessage("saveAsWebpage", [tab.instanceID || 0, title], tab); } this.openTab = function(url) { @@ -242,12 +240,10 @@ Zotero.Connector_Browser = new function() { var translators = tab.translators; var isPDF = tab.contentType == 'application/pdf'; - if (translators && translators.length) { - _showTranslatorIcon(translators[0]); - } else if (isPDF || tab.isPDFFrame) { + if (isPDF || tab.isPDFFrame) { Zotero.Connector_Browser._showPDFIcon(); - } else { - _showWebpageIcon(); + } else if (translators) { + _showTranslatorIcon(translators[0]); } } @@ -272,30 +268,16 @@ Zotero.Connector_Browser = new function() { _zoteroButton.toolTip = _getTranslatorLabel(translator); } - function _showWebpageIcon() { - _zoteroButton.image = Zotero.ItemTypes.getImageSrc("webpage-gray").replace('images/', 'images/toolbar/'); - var withSnapshot = Zotero.Connector.isOnline ? Zotero.Connector.automaticSnapshots : - Zotero.Prefs.get('automaticSnapshots'); - if (withSnapshot) { - _zoteroButton.toolTip = "Save to Zotero (Web Page with Snapshot)"; - } else { - _zoteroButton.toolTip = "Save to Zotero (Web Page without Snapshot)"; - } - } - this._showPDFIcon = function() { _zoteroButton.image = safari.extension.baseURI + "images/toolbar/pdf.png"; _zoteroButton.toolTip = "Save to Zotero (PDF)"; } function _getTranslatorLabel(translator) { - var translatorName = translator.label; - if(translator.runMode === Zotero.Translator.RUN_MODE_ZOTERO_STANDALONE) { - translatorName += " via Zotero Standalone"; - } - - return "Save to Zotero (" + translatorName + ")"; + var translatorName = translator.label ? ` (${translator.label})` : ''; + return `Save to Zotero${translatorName}`; } + } // register handlers diff --git a/src/safari/messaging_inject.js b/src/safari/messaging_inject.js index 10879cc46c..c1e7263560 100644 --- a/src/safari/messaging_inject.js +++ b/src/safari/messaging_inject.js @@ -121,8 +121,10 @@ Zotero.Messaging = new function() { }, err)); result = ['error', err]; } - safari.self.tab.dispatchMessage('response', [messageId, result]); - return; + if (result != undefined) { + safari.self.tab.dispatchMessage('response', [messageId, result]); + return; + } } // next determine original function name diff --git a/src/safari/popoverTranslatorSelector.html b/src/safari/popoverTranslatorSelector.html index 174f0ddc59..a36c1a38a3 100644 --- a/src/safari/popoverTranslatorSelector.html +++ b/src/safari/popoverTranslatorSelector.html @@ -7,6 +7,8 @@ margin: 0; font-family: -apple-system; font-size: 14px; + overflow: hidden; + background-color: #eee; } menu { list-style: none; @@ -14,11 +16,16 @@ margin: 4px 0; } li { - line-height: 1.5em; - padding: 0 20px; + line-height: 1.6em; + padding: 0 50px 0 20px; white-space: nowrap; + position: relative; } - li:hover { + li li { + margin: 0 -50px 0 -20px; + padding: 0 50px 0 30px; + } + li.enabled:hover { background-color: #4397fa; color: #fff; } @@ -27,96 +34,306 @@ color: inherit; text-decoration: inherit; } + li a { + color: #8c95a4; + } + li.enabled a { + color: inherit; + } + li.submenu { + padding: 1px 50px 1px 20px; + background-color: #e4e4e4 + } + li.submenu.collapsed { + display: none; + } + + li.submenu-headline .chevron { + position: absolute; + right: 9px; + top: calc(50% - 5px); + width: 10px; + height: 10px; + background-size: 10px; + transform: rotate(90deg); + /* Icon made by Google and licensed under CC 3.0 */ + background-image: url(data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDM1NyAzNTciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM1NyAzNTc7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGc+Cgk8ZyBpZD0icGxheS1hcnJvdyI+CgkJPHBvbHlnb24gcG9pbnRzPSIzOC4yNSwwIDM4LjI1LDM1NyAzMTguNzUsMTc4LjUgICAiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K); + background-repeat: no-repeat; + } + li.submenu-headline.collapsed .chevron { + transform: none; + } + li .checkbox { + position: absolute; + left: 4px; + top: calc(50% - 6px); + width: 12px; + height: 12px; + background-size: 12px; + background-repeat: no-repeat; + } + li .checkbox.checked { + /* Icon made by Google and licensed under CC 3.0 */ + background-image: url(data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDQ0OC44IDQ0OC44IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NDguOCA0NDguODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnIGlkPSJjaGVjayI+CgkJPHBvbHlnb24gcG9pbnRzPSIxNDIuOCwzMjMuODUgMzUuNywyMTYuNzUgMCwyNTIuNDUgMTQyLjgsMzk1LjI1IDQ0OC44LDg5LjI1IDQxMy4xLDUzLjU1ICAgIiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==); + } hr { + margin: 2px -2px; border-top: 2px #ddd solid; + border-bottom: none; + } + li hr { + margin: 2px -52px 2px -22px; + border-color: #ccc; } - -
  • Save to Zotero (Web Page with Snapshot)
  • -
  • Save to Zotero (Web Page without Snapshot)
  • -
    -
  • Zotero Preferences
  • -
    +