Closes #291, Default to last-used item type when creating item via
keyboard
This commit is contained in:
parent
30a0bbcca2
commit
8e8bc15071
|
@ -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>
|
||||
|
|
|
@ -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()) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user