www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 8e8bc1507142fdb3e2952e73c41924d28ad0678f
parent 30a0bbcca2094cb79fd7084d5e8b94ffe52b0512
Author: Dan Stillman <dstillman@zotero.org>
Date:   Tue,  2 Jul 2013 16:48:53 -0400

Closes #291, Default to last-used item type when creating item via
keyboard

Diffstat:
Mchrome/content/zotero/bindings/itembox.xml | 43+++++++++++++++++++++++++++++++++++++++++++
Mchrome/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 @@ -51,6 +51,7 @@ <field name="clickHandler"/> <field name="blurHandler"/> + <field name="eventHandlers">[]</field> <field name="_initialVisibleCreators">10</field> <field name="_displayAllCreators"/> @@ -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 @@ </method> + <!-- + Available handlers: + + - 'itemtypechange' + + Note: 'this' in the function will be bound to the item box. + --> + <method name="addHandler"> + <parameter name="eventName"/> + <parameter name="func"/> + <body> + <![CDATA[ + if (!this.eventHandlers[eventName]) { + this.eventHandlers[eventName] = []; + } + this.eventHandlers[eventName].push(func); + ]]> + </body> + </method> + + <method name="removeHandler"> + <parameter name="eventName"/> + <parameter name="func"/> + <body> + <![CDATA[ + if (!this.eventHandlers[eventName]) { + return; + } + var pos = this.eventHandlers[eventName].indexOf(func); + if (pos != -1) { + this.eventHandlers[eventName].splice(pos, 1); + } + ]]> + </body> + </method> + + <method name="_id"> <parameter name="id"/> <body> diff --git 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()) {