diff --git a/chrome/content/zotero/contextPane.js b/chrome/content/zotero/contextPane.js index 449ab3572e..21ca80c7e5 100644 --- a/chrome/content/zotero/contextPane.js +++ b/chrome/content/zotero/contextPane.js @@ -238,7 +238,10 @@ var ZoteroContextPane = new function () { var reader = Zotero.Reader.getByTabID(Zotero_Tabs.selectedID); if (reader) { var editor = _getActiveEditor(); - reader.enableAddToNote(!!editor); + var libraryReadOnly = editor && editor.item && !_isLibraryEditable(editor.item.libraryID); + var noteReadOnly = editor && editor.item + && (editor.item.deleted || editor.item.parentItem && editor.item.parentItem.deleted); + reader.enableAddToNote(!!editor && !libraryReadOnly && !noteReadOnly); } } diff --git a/chrome/content/zotero/xpcom/reader.js b/chrome/content/zotero/xpcom/reader.js index 731049122d..c677821710 100644 --- a/chrome/content/zotero/xpcom/reader.js +++ b/chrome/content/zotero/xpcom/reader.js @@ -72,6 +72,7 @@ class ReaderInstance { state, location, promptImport: false, + readOnly: this._isReadOnly(), showItemPaneToggle: this._showItemPaneToggle, sidebarWidth: this._sidebarWidth, sidebarOpen: this._sidebarOpen, @@ -254,6 +255,21 @@ class ReaderInstance { return null; } + _isReadOnly() { + let item = Zotero.Items.get(this._itemID); + if (item.deleted || item.parentItem && item.parentItem.deleted) { + return true; + } + let { libraryID } = item; + var type = Zotero.Libraries.get(libraryID).libraryType; + if (type === 'group') { + var groupID = Zotero.Groups.getGroupIDFromLibraryID(libraryID); + var group = Zotero.Groups.get(groupID); + return !group.editable; + } + return false; + } + _dataURLtoBlob(dataurl) { let parts = dataurl.split(','); let mime = parts[0].match(/:(.*?);/)[1]; @@ -876,7 +892,10 @@ class Reader { // Ignore other notifications if the attachment no longer exists let item = Zotero.Items.get(reader._itemID); if (item) { - if (event === 'delete') { + if (event === 'trash' && (ids.includes(item.id) || ids.includes(item.parentItemID))) { + reader.close(); + } + else if (event === 'delete') { let disappearedIDs = reader.annotationItemIDs.filter(x => ids.includes(x)); if (disappearedIDs.length) { let keys = disappearedIDs.map(id => extraData[id].key); diff --git a/pdf-reader b/pdf-reader index abf50dfce6..65bb0ea542 160000 --- a/pdf-reader +++ b/pdf-reader @@ -1 +1 @@ -Subproject commit abf50dfce6450f3d1776da872934077be653fca7 +Subproject commit 65bb0ea542694d8a88a6c1aacb8488274ad96c03