From 65ef6a6926b9de976367a67c6bd7c906c5d4d19c Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Wed, 25 Oct 2006 04:07:40 +0000 Subject: [PATCH] A very quick little addition to please the masses Add options to browser context menu, "Add Selection to Zotero Note" and "Create Zotero Note from Selection" "Add Note" context menu option on items --- chrome/content/zotero/overlay.js | 118 +++++++++++++++++++++++--- chrome/content/zotero/overlay.xul | 13 ++- chrome/locale/en-US/zotero/zotero.dtd | 4 + 3 files changed, 120 insertions(+), 15 deletions(-) diff --git a/chrome/content/zotero/overlay.js b/chrome/content/zotero/overlay.js index e2c9abfb48..fa1ee0715c 100644 --- a/chrome/content/zotero/overlay.js +++ b/chrome/content/zotero/overlay.js @@ -51,8 +51,10 @@ var ZoteroPane = new function() this.buildCollectionContextMenu = buildCollectionContextMenu; this.buildItemContextMenu = buildItemContextMenu; this.onDoubleClick = onDoubleClick; + this.contextPopupShowing = contextPopupShowing; this.openNoteWindow = openNoteWindow; this.newNote = newNote; + this.addTextToNote = addTextToNote; this.addItemFromPage = addItemFromPage; this.addAttachmentFromDialog = addAttachmentFromDialog; this.addAttachmentFromPage = addAttachmentFromPage; @@ -121,6 +123,9 @@ var ZoteroPane = new function() menuitem.setAttribute("oncommand","ZoteroPane.newItem("+itemTypes[i]['id']+")"); moreMenu.appendChild(menuitem); } + + var menu = document.getElementById("contentAreaContextMenu"); + menu.addEventListener("popupshowing", ZoteroPane.contextPopupShowing, false); } /* @@ -240,13 +245,11 @@ var ZoteroPane = new function() itemsView = new Zotero.ItemTreeView(itemgroup); document.getElementById('zotero-items-tree').view = itemsView; - document.getElementById('zotero-tb-collection-rename').disabled = itemgroup.isLibrary(); itemsView.selection.clearSelection(); } else { document.getElementById('zotero-items-tree').view = itemsView = null; - document.getElementById('zotero-tb-collection-rename').disabled = true; } } @@ -636,7 +639,7 @@ var ZoteroPane = new function() if(itemsView && itemsView.selection.count > 0) { - enable.push(3,4,5,7); + enable.push(4,5,6,8); // Multiple items selected if (itemsView.selection.count > 1) @@ -652,34 +655,34 @@ var ZoteroPane = new function() var itemID = item.ref.getID(); menu.setAttribute('itemID', itemID); - show.push(0,1,2); + show.push(0,1,2,3); } else { - hide.push(0,1,2); + hide.push(0,1,2,3); } } } else { - disable.push(3,4,6,7); + disable.push(4,5,7,8); } // Remove from collection if (itemsView._itemGroup.isCollection()) { - menu.childNodes[3].setAttribute('label', Zotero.getString('pane.items.menu.remove' + multiple)); - show.push(3); + menu.childNodes[4].setAttribute('label', Zotero.getString('pane.items.menu.remove' + multiple)); + show.push(4); } else { - hide.push(3); + hide.push(4); } // Plural if necessary - menu.childNodes[4].setAttribute('label', Zotero.getString('pane.items.menu.erase' + multiple)); - menu.childNodes[6].setAttribute('label', Zotero.getString('pane.items.menu.export' + multiple)); - menu.childNodes[7].setAttribute('label', Zotero.getString('pane.items.menu.createBib' + multiple)); + menu.childNodes[5].setAttribute('label', Zotero.getString('pane.items.menu.erase' + multiple)); + menu.childNodes[7].setAttribute('label', Zotero.getString('pane.items.menu.export' + multiple)); + menu.childNodes[8].setAttribute('label', Zotero.getString('pane.items.menu.createBib' + multiple)); for (var i in disable) { @@ -726,15 +729,72 @@ var ZoteroPane = new function() } } - function newNote(popup) + + // Updates browser context menu options + function contextPopupShowing() + { + var menuitem = document.getElementById("zotero-context-add-to-current-note"); + var showing = false; + if (menuitem){ + var items = getSelectedItems(); + if (itemsView.selection.count==1 && items[0] && items[0].isNote() + && window.gContextMenu.isTextSelected) + { + menuitem.hidden = false; + showing = true; + } + else + { + menuitem.hidden = true; + } + } + + var menuitem = document.getElementById("zotero-context-add-to-new-note"); + if (menuitem){ + if (window.gContextMenu.isTextSelected) + { + menuitem.hidden = false; + showing = true; + } + else + { + menuitem.hidden = true; + } + } + + var separator = document.getElementById("zotero-context-separator"); + separator.hidden = !showing; + } + + function newNote(popup, parent, text) { if (!popup) { var item = this.newItem(Zotero.ItemTypes.getID('note')); - document.getElementById('zotero-note-editor').focus(); + var note = document.getElementById('zotero-note-editor'); + try { + // trim + text = text.replace(/^[\xA0\r\n\s]*(.*)[\xA0\r\n\s]*$/m, "$1"); + } + catch (e){} + if (text) + { + note.value = '"' + text + '"'; + } + note.save(); + note.focus(); + + if (parent) + { + Zotero.debug(parent); + Zotero.debug(item.getID()); + item.setSource(parent); + selectItem(item.getID()); + } } else { + // TODO: _text_ var c = getSelectedCollection(); if (c) { @@ -747,6 +807,36 @@ var ZoteroPane = new function() } } + function addTextToNote(text) + { + try { + // trim + text = text.replace(/^[\xA0\r\n\s]*(.*)[\xA0\r\n\s]*$/m, "$1"); + } + catch (e){} + + if (!text || !text.length) + { + return false; + } + + var items = getSelectedItems(); + if (itemsView.selection.count == 1 && items[0] && items[0].isNote()) + { + var note = items[0].getNote() + items[0].updateNote(note + "\n\n" + '"' + text + '"'); + var noteElem = document.getElementById('zotero-note-editor') + noteElem.focus(); + noteElem.id('noteField').inputField.editor. + selectionController.scrollSelectionIntoView(1, + 1, + true); + return true; + } + + return false; + } + function openNoteWindow(id, parent) { window.open('chrome://zotero/content/note.xul?v=1'+(id ? '&id='+id : '')+(parent ? '&coll='+parent : ''),'','chrome,resizable,centerscreen'); diff --git a/chrome/content/zotero/overlay.xul b/chrome/content/zotero/overlay.xul index 10e313d388..d9470b043a 100644 --- a/chrome/content/zotero/overlay.xul +++ b/chrome/content/zotero/overlay.xul @@ -44,6 +44,17 @@ label="&zotero.name;" oncommand="ZoteroPane.toggleDisplay();"/> + + + + + + + @@ -65,6 +76,7 @@ + @@ -79,7 +91,6 @@ - diff --git a/chrome/locale/en-US/zotero/zotero.dtd b/chrome/locale/en-US/zotero/zotero.dtd index 0987336b32..9c936c137e 100644 --- a/chrome/locale/en-US/zotero/zotero.dtd +++ b/chrome/locale/en-US/zotero/zotero.dtd @@ -1,5 +1,8 @@ + + + @@ -16,6 +19,7 @@ +