Item pane fixes and cleanup
- Restored save when clicking from open text field to another item - Delay/weirdness when switching items/tabs should be gone - Tab content updates properly when using Ctrl-arrows to navigate - Removed some obsolete code
This commit is contained in:
parent
820d1cf28f
commit
dc2fba7b12
5 changed files with 89 additions and 94 deletions
|
@ -193,7 +193,6 @@
|
||||||
|
|
||||||
<field name="_selectField"/>
|
<field name="_selectField"/>
|
||||||
<field name="_beforeRow"/>
|
<field name="_beforeRow"/>
|
||||||
<field name="_activeScrollbox"/>
|
|
||||||
<field name="_addCreatorRow"/>
|
<field name="_addCreatorRow"/>
|
||||||
<field name="_creatorCount"/>
|
<field name="_creatorCount"/>
|
||||||
|
|
||||||
|
@ -895,10 +894,10 @@
|
||||||
<method name="scrollToTop">
|
<method name="scrollToTop">
|
||||||
<body>
|
<body>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
if (!this._activeScrollbox) {
|
// DEBUG: Valid nsIScrollBoxObject but methods return errors
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
var sbo = this._activeScrollbox.boxObject;
|
var sbo = document.getAnonymousNodes(this)[0].boxObject;
|
||||||
sbo.QueryInterface(Components.interfaces.nsIScrollBoxObject);
|
sbo.QueryInterface(Components.interfaces.nsIScrollBoxObject);
|
||||||
sbo.scrollTo(0,0);
|
sbo.scrollTo(0,0);
|
||||||
]]>
|
]]>
|
||||||
|
@ -910,10 +909,10 @@
|
||||||
<parameter name="elem"/>
|
<parameter name="elem"/>
|
||||||
<body>
|
<body>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
if (!this._activeScrollbox) {
|
// DEBUG: Valid nsIScrollBoxObject but methods return errors
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
var sbo = this._activeScrollbox.boxObject;
|
var sbo = document.getAnonymousNodes(this)[0].boxObject;
|
||||||
sbo.QueryInterface(Components.interfaces.nsIScrollBoxObject);
|
sbo.QueryInterface(Components.interfaces.nsIScrollBoxObject);
|
||||||
sbo.ensureElementIsVisible(elem);
|
sbo.ensureElementIsVisible(elem);
|
||||||
]]>
|
]]>
|
||||||
|
@ -2120,6 +2119,19 @@
|
||||||
</body>
|
</body>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
|
||||||
|
<method name="blurOpenField">
|
||||||
|
<body>
|
||||||
|
<![CDATA[
|
||||||
|
var textboxes = document.getAnonymousNodes(this)[0].getElementsByTagName('textbox');
|
||||||
|
if (textboxes && textboxes.length) {
|
||||||
|
textboxes[0].inputField.blur();
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</body>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
|
||||||
<method name="_id">
|
<method name="_id">
|
||||||
<parameter name="id"/>
|
<parameter name="id"/>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -640,6 +640,22 @@
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
|
||||||
|
<method name="scrollToTop">
|
||||||
|
<body>
|
||||||
|
<![CDATA[
|
||||||
|
Zotero.debug('SCROLL TO TOP');
|
||||||
|
if (!this._activeScrollbox) {
|
||||||
|
Zotero.debug('NO');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var sbo = this._activeScrollbox.boxObject;
|
||||||
|
sbo.QueryInterface(Components.interfaces.nsIScrollBoxObject);
|
||||||
|
sbo.scrollTo(0,0);
|
||||||
|
]]>
|
||||||
|
</body>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
|
||||||
<method name="ensureElementIsVisible">
|
<method name="ensureElementIsVisible">
|
||||||
<parameter name="elem"/>
|
<parameter name="elem"/>
|
||||||
<body>
|
<body>
|
||||||
|
@ -653,6 +669,18 @@
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
|
||||||
|
<method name="blurOpenField">
|
||||||
|
<body>
|
||||||
|
<![CDATA[
|
||||||
|
var textboxes = document.getAnonymousNodes(this)[0].getElementsByTagName('textbox');
|
||||||
|
if (textboxes && textboxes.length) {
|
||||||
|
textboxes[0].inputField.blur();
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</body>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
|
||||||
<method name="id">
|
<method name="id">
|
||||||
<parameter name="id"/>
|
<parameter name="id"/>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -21,18 +21,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var ZoteroItemPane = new function() {
|
var ZoteroItemPane = new function() {
|
||||||
var _itemBeingEdited;
|
var _lastItem;
|
||||||
|
|
||||||
var _lastPane;
|
|
||||||
var _loaded;
|
|
||||||
|
|
||||||
var _lastTabIndex;
|
|
||||||
var _tabDirection;
|
|
||||||
var _tabIndexMaxTagsFields = 0;
|
|
||||||
|
|
||||||
this.onLoad = onLoad;
|
this.onLoad = onLoad;
|
||||||
this.viewItem = viewItem;
|
|
||||||
this.loadPane = loadPane;
|
|
||||||
|
|
||||||
|
|
||||||
function onLoad()
|
function onLoad()
|
||||||
|
@ -46,95 +37,58 @@ var ZoteroItemPane = new function() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_deck = document.getElementById('zotero-view-item');
|
|
||||||
_itemBox = document.getElementById('zotero-editpane-item-box');
|
_itemBox = document.getElementById('zotero-editpane-item-box');
|
||||||
_tagsBox = document.getElementById('zotero-editpane-tags');
|
_tagsBox = document.getElementById('zotero-editpane-tags');
|
||||||
_relatedBox = document.getElementById('zotero-editpane-related');
|
_relatedBox = document.getElementById('zotero-editpane-related');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Loads an item
|
* Load an item
|
||||||
*/
|
*/
|
||||||
function viewItem(thisItem, mode) {
|
this.viewItem = function (item, mode, index) {
|
||||||
//Zotero.debug('Viewing item');
|
if (!index) {
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Zotero.debug('Viewing item in pane ' + index);
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case 0:
|
||||||
|
var box = _itemBox;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
var box = _tagsBox;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
var box = _relatedBox;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Force blur() when clicking off a textbox to another item in middle
|
// Force blur() when clicking off a textbox to another item in middle
|
||||||
// pane, since for some reason it's not being called automatically
|
// pane, since for some reason it's not being called automatically
|
||||||
if (_itemBeingEdited && _itemBeingEdited != thisItem) {
|
if (_lastItem && _lastItem != item) {
|
||||||
switch (_deck.selectedIndex) {
|
switch (index) {
|
||||||
// Info
|
|
||||||
case 0:
|
case 0:
|
||||||
// TODO: fix
|
case 1:
|
||||||
//var boxes = _itemBox.getElementsByTagName('textbox');
|
box.blurOpenField();
|
||||||
|
// DEBUG: Currently broken
|
||||||
// When coming from another element, scroll pane to top
|
//box.scrollToTop();
|
||||||
//scrollToTop();
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Tags
|
|
||||||
case 3:
|
|
||||||
var boxes = document.getAnonymousNodes(_tagsBox)[0].getElementsByTagName('textbox');
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (boxes && boxes.length == 1) {
|
|
||||||
//boxes[0].inputField.blur();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_itemBeingEdited = thisItem;
|
_lastItem = item;
|
||||||
_loaded = {};
|
|
||||||
|
|
||||||
loadPane(_deck.selectedIndex, mode);
|
if (mode) {
|
||||||
}
|
box.mode = mode;
|
||||||
|
|
||||||
|
|
||||||
function loadPane(index, mode) {
|
|
||||||
//Zotero.debug('Loading item pane ' + index);
|
|
||||||
|
|
||||||
// Clear the tab index when switching panes
|
|
||||||
if (_lastPane!=index) {
|
|
||||||
_lastTabIndex = null;
|
|
||||||
}
|
}
|
||||||
_lastPane = index;
|
else {
|
||||||
|
box.mode = 'edit';
|
||||||
if (_loaded[index]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_loaded[index] = true;
|
|
||||||
|
|
||||||
// Info pane
|
|
||||||
if (index == 0) {
|
|
||||||
// Hack to allow read-only mode in right pane -- probably a better
|
|
||||||
// way to allow access to this
|
|
||||||
if (mode) {
|
|
||||||
_itemBox.mode = mode;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_itemBox.mode = 'edit';
|
|
||||||
}
|
|
||||||
_itemBox.item = _itemBeingEdited;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Tags pane
|
|
||||||
else if (index == 1) {
|
|
||||||
if (mode) {
|
|
||||||
_tagsBox.mode = mode;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_tagsBox.mode = 'edit';
|
|
||||||
}
|
|
||||||
|
|
||||||
var focusMode = 'tags';
|
|
||||||
var focusBox = _tagsBox;
|
|
||||||
_tagsBox.item = _itemBeingEdited;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Related pane
|
|
||||||
else if (index == 2) {
|
|
||||||
_relatedBox.item = _itemBeingEdited;
|
|
||||||
}
|
}
|
||||||
|
box.item = item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1073,13 +1073,14 @@ var ZoteroPane = new function()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
document.getElementById('zotero-item-pane-content').selectedIndex = 1;
|
document.getElementById('zotero-item-pane-content').selectedIndex = 1;
|
||||||
|
var pane = document.getElementById('zotero-view-tabbox').selectedIndex;
|
||||||
if (this.collectionsView.editable) {
|
if (this.collectionsView.editable) {
|
||||||
ZoteroItemPane.viewItem(item.ref);
|
ZoteroItemPane.viewItem(item.ref, null, pane);
|
||||||
tabs.selectedIndex = document.getElementById('zotero-view-item').selectedIndex;
|
tabs.selectedIndex = document.getElementById('zotero-view-item').selectedIndex;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
document.getElementById('zotero-view-item').selectedIndex = 0;
|
ZoteroItemPane.viewItem(item.ref, 'view', pane);
|
||||||
ZoteroItemPane.viewItem(item.ref, 'view');
|
tabs.selectedIndex = document.getElementById('zotero-view-item').selectedIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -392,7 +392,7 @@
|
||||||
<groupbox pack="center" align="center">
|
<groupbox pack="center" align="center">
|
||||||
<label id="zotero-view-selected-label"/>
|
<label id="zotero-view-selected-label"/>
|
||||||
</groupbox>
|
</groupbox>
|
||||||
<tabbox id="zotero-view-tabbox" flex="1" oncommand="if (this.selectedIndex !== '') { ZoteroItemPane.loadPane(this.selectedIndex); }">
|
<tabbox id="zotero-view-tabbox" flex="1" onselect="if (!ZoteroPane.collectionsView.selection || event.originalTarget.localName != 'tabpanels') { return; }; ZoteroItemPane.viewItem(ZoteroPane.getSelectedItems()[0], ZoteroPane.collectionsView.editable ? 'edit' : 'view', this.selectedIndex)">
|
||||||
<tabs>
|
<tabs>
|
||||||
<tab label="&zotero.tabs.info.label;"/>
|
<tab label="&zotero.tabs.info.label;"/>
|
||||||
<tab label="&zotero.tabs.tags.label;"/>
|
<tab label="&zotero.tabs.tags.label;"/>
|
||||||
|
|
Loading…
Reference in a new issue