From 8e8bc1507142fdb3e2952e73c41924d28ad0678f Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Tue, 2 Jul 2013 16:48:53 -0400 Subject: [PATCH] Closes #291, Default to last-used item type when creating item via keyboard --- chrome/content/zotero/bindings/itembox.xml | 43 +++++++++++++++++ chrome/content/zotero/zoteroPane.js | 55 ++++++++++++++++------ 2 files changed, 83 insertions(+), 15 deletions(-) diff --git a/chrome/content/zotero/bindings/itembox.xml b/chrome/content/zotero/bindings/itembox.xml index bea4490bd..d763c9297 100644 --- a/chrome/content/zotero/bindings/itembox.xml +++ b/chrome/content/zotero/bindings/itembox.xml @@ -51,6 +51,7 @@ + [] 10 @@ -1103,6 +1104,11 @@ this.refresh(); } + if (this.eventHandlers['itemtypechange'] && this.eventHandlers['itemtypechange'].length) { + var self = this; + this.eventHandlers['itemtypechange'].forEach(function (f) f.bind(self)()); + } + return true; } @@ -2290,6 +2296,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/chrome/content/zotero/zoteroPane.js b/chrome/content/zotero/zoteroPane.js index d6f5a0092..caa793efc 100644 --- a/chrome/content/zotero/zoteroPane.js +++ b/chrome/content/zotero/zoteroPane.js @@ -647,8 +647,28 @@ var ZoteroPane = new function() document.getElementById('zotero-tb-search').select(); break; case 'newItem': - ZoteroPane_Local.newItem(2); // book - var menu = document.getElementById('zotero-editpane-item-box').itemTypeMenu; + // Default to most recent item type from here or the + // New Type menu + var mru = Zotero.Prefs.get('newItemTypeMRU'); + // Or fall back to 'book' + var typeID = mru ? mru.split(',')[0] : 2; + ZoteroPane_Local.newItem(typeID); + let itemBox = document.getElementById('zotero-editpane-item-box'); + var menu = itemBox.itemTypeMenu; + var self = this; + var handleTypeChange = function () { + self.addItemTypeToNewItemTypeMRU(this.itemTypeMenu.value); + itemBox.removeHandler('itemtypechange', handleTypeChange); + }; + // Only update the MRU when the menu is opened for the + // keyboard shortcut, not on subsequent opens + var removeTypeChangeHandler = function () { + itemBox.removeHandler('itemtypechange', handleTypeChange); + itemBox.itemTypeMenu.firstChild.removeEventListener('popuphiding', removeTypeChangeHandler); + }; + itemBox.addHandler('itemtypechange', handleTypeChange); + itemBox.itemTypeMenu.firstChild.addEventListener('popuphiding', removeTypeChangeHandler); + menu.focus(); document.getElementById('zotero-editpane-item-box').itemTypeMenu.menupopup.openPopup(menu, "before_start", 0, 0); break; @@ -750,25 +770,30 @@ var ZoteroPane = new function() // Update most-recently-used list for New Item menu if (manual) { - var mru = Zotero.Prefs.get('newItemTypeMRU'); - if (mru) { - var mru = mru.split(','); - var pos = mru.indexOf(typeID + ''); - if (pos != -1) { - mru.splice(pos, 1); - } - mru.unshift(typeID); - } - else { - var mru = [typeID + '']; - } - Zotero.Prefs.set('newItemTypeMRU', mru.slice(0, 5).join(',')); + this.addItemTypeToNewItemTypeMRU(typeID); } return Zotero.Items.get(itemID); } + this.addItemTypeToNewItemTypeMRU = function (itemTypeID) { + var mru = Zotero.Prefs.get('newItemTypeMRU'); + if (mru) { + var mru = mru.split(','); + var pos = mru.indexOf(itemTypeID + ''); + if (pos != -1) { + mru.splice(pos, 1); + } + mru.unshift(itemTypeID); + } + else { + var mru = [itemTypeID + '']; + } + Zotero.Prefs.set('newItemTypeMRU', mru.slice(0, 5).join(',')); + } + + function newCollection(parent) { if (!Zotero.stateCheck()) {