diff --git a/chrome/content/zotero/browser.js b/chrome/content/zotero/browser.js index b0771f35c..4f3d48281 100644 --- a/chrome/content/zotero/browser.js +++ b/chrome/content/zotero/browser.js @@ -150,8 +150,10 @@ var Zotero_Browser = new function() { } /** - * Scrapes a page (called when the capture icon is clicked - * @return void + * Saves from current page using translator (called when the capture icon is clicked) + * + * @param {String} [translator] + * @param {Event} [event] */ this.scrapeThisPage = function (translator, event) { // Perform translation @@ -161,19 +163,21 @@ var Zotero_Browser = new function() { Zotero_Browser.performTranslation(tab.page.translate); } else { - // Keep in sync with cmd_zotero_newItemFromCurrentPage - // - // DEBUG: Possible to just trigger command directly with event? Assigning it to the - // command property of the icon doesn't seem to work, and neither does goDoCommand() - // from chrome://global/content/globalOverlay.js. Getting the command by id and - // running doCommand() works but doesn't pass the event. - ZoteroPane.addItemFromPage( - 'temporaryPDFHack', + this.saveAsWebPage( (event && event.shiftKey) ? !Zotero.Prefs.get('automaticSnapshots') : null ); } } + // Keep in sync with cmd_zotero_newItemFromCurrentPage + this.saveAsWebPage = function (includeSnapshots) { + // DEBUG: Possible to just trigger command directly with event? Assigning it to the + // command property of the icon doesn't seem to work, and neither does goDoCommand() + // from chrome://global/content/globalOverlay.js. Getting the command by id and + // running doCommand() works but doesn't pass the event. + ZoteroPane.addItemFromPage('temporaryPDFHack', includeSnapshots); + } + /* * flags a page for annotation */ @@ -495,8 +499,8 @@ var Zotero_Browser = new function() { while(popup.hasChildNodes()) popup.removeChild(popup.lastChild); var tab = _getTabObject(this.tabbrowser.selectedBrowser); - - if (tab.getCaptureState() == tab.CAPTURE_STATE_TRANSLATABLE) { + var captureState = tab.getCaptureState(); + if (captureState == tab.CAPTURE_STATE_TRANSLATABLE) { let translators = tab.page.translators; for (var i=0, n = translators.length; i < n; i++) { let translator = translators[i]; @@ -514,7 +518,30 @@ var Zotero_Browser = new function() { }, false); popup.appendChild(menuitem); } - + } + + let webPageIcon = tab.getWebPageCaptureIcon(Zotero.hiDPI); + let menuitem = document.createElement("menuitem"); + menuitem.setAttribute("label", Zotero.getString('ingester.saveToZoteroAsWebPageWithSnapshot')); + menuitem.setAttribute("image", webPageIcon); + menuitem.setAttribute("class", "menuitem-iconic"); + menuitem.addEventListener("command", function (event) { + Zotero_Browser.saveAsWebPage(true); + event.stopPropagation(); + }); + popup.appendChild(menuitem); + + menuitem = document.createElement("menuitem"); + menuitem.setAttribute("label", Zotero.getString('ingester.saveToZoteroAsWebPageWithoutSnapshot')); + menuitem.setAttribute("image", webPageIcon); + menuitem.setAttribute("class", "menuitem-iconic"); + menuitem.addEventListener("command", function (event) { + Zotero_Browser.saveAsWebPage(false); + event.stopPropagation(); + }); + popup.appendChild(menuitem); + + if (captureState == tab.CAPTURE_STATE_TRANSLATABLE) { popup.appendChild(document.createElement("menuseparator")); let menuitem = document.createElement("menuitem"); @@ -535,38 +562,8 @@ var Zotero_Browser = new function() { var locateEngines = Zotero.LocateManager.getVisibleEngines(); Zotero_LocateMenu.addLocateEngines(popup, locateEngines, _constructLookupFunction(tab, function(e, obj) { - Zotero_LocateMenu.locateItem(e, obj.newItems); - }), true); - } - else { - let webPageIcon = tab.getCaptureIcon(Zotero.hiDPI); - let automaticSnapshots = Zotero.Prefs.get('automaticSnapshots'); - let snapshotEvent = { - shiftKey: !automaticSnapshots - }; - let noSnapshotEvent = { - shiftKey: automaticSnapshots - }; - - let menuitem = document.createElement("menuitem"); - menuitem.setAttribute("label", "Save to Zotero as Web Page (with snapshot)"); - menuitem.setAttribute("image", webPageIcon); - menuitem.setAttribute("class", "menuitem-iconic"); - menuitem.addEventListener("command", function (event) { - Zotero_Browser.scrapeThisPage(null, snapshotEvent); - event.stopPropagation(); - }); - popup.appendChild(menuitem); - - menuitem = document.createElement("menuitem"); - menuitem.setAttribute("label", "Save to Zotero as Web Page (without snapshot)"); - menuitem.setAttribute("image", webPageIcon); - menuitem.setAttribute("class", "menuitem-iconic"); - menuitem.addEventListener("command", function (event) { - Zotero_Browser.scrapeThisPage(null, noSnapshotEvent); - event.stopPropagation(); - }); - popup.appendChild(menuitem); + Zotero_LocateMenu.locateItem(e, obj.newItems); + }), true); } } @@ -902,12 +899,17 @@ Zotero_Browser.Tab.prototype.getCaptureIcon = function (hiDPI) { ? "chrome://zotero/skin/treesource-collection" + suffix + ".png" : Zotero.ItemTypes.getImageSrc(itemType)); - // TODO: Show icons for images, PDFs, etc.? default: - return "chrome://zotero/skin/treeitem-webpage" + suffix + ".png"; + return this.getWebPageCaptureIcon(hiDPI); } } +// TODO: Show icons for images, PDFs, etc.? +Zotero_Browser.Tab.prototype.getWebPageCaptureIcon = function (hiDPI) { + var suffix = hiDPI ? "@2x" : ""; + return "chrome://zotero/skin/treeitem-webpage" + suffix + ".png"; +} + Zotero_Browser.Tab.prototype.getCaptureTooltip = function() { switch (this.getCaptureState()) { case this.CAPTURE_STATE_DISABLED: diff --git a/chrome/locale/en-US/zotero/zotero.properties b/chrome/locale/en-US/zotero/zotero.properties index defa75cbc..ba3353075 100644 --- a/chrome/locale/en-US/zotero/zotero.properties +++ b/chrome/locale/en-US/zotero/zotero.properties @@ -484,6 +484,8 @@ save.error.cannotAddFilesToCollection = You cannot add files to the currently se ingester.saveToZotero = Save to Zotero ingester.saveToZoteroUsing = Save to Zotero using "%S" +ingester.saveToZoteroAsWebPageWithSnapshot = Save to Zotero as Web Page (with snapshot) +ingester.saveToZoteroAsWebPageWithoutSnapshot = Save to Zotero as Web Page (without snapshot) ingester.scraping = Saving Item… ingester.scrapingTo = Saving to ingester.scrapeComplete = Item Saved