Closes #1464, Limit number of creators in metadata pane
Displays "[x] more..." label that can be clicked to show all creators. Switching away from the item resets. This might need some further tweaking. Untruncated display of large creator lists is probably faster now as well, though definitely not enough for the ATLAS Experiment.
This commit is contained in:
parent
c45198c90b
commit
263439c6ab
3 changed files with 85 additions and 17 deletions
|
@ -3,7 +3,7 @@ scrollbox
|
||||||
padding-top: 3px;
|
padding-top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
row > label:first-child, .creator-type-label
|
row > label:first-child, .creator-type-label, #more-creators-label
|
||||||
{
|
{
|
||||||
color: #7f7f7f;
|
color: #7f7f7f;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,9 @@
|
||||||
<field name="clickHandler"/>
|
<field name="clickHandler"/>
|
||||||
<field name="blurHandler"/>
|
<field name="blurHandler"/>
|
||||||
|
|
||||||
|
<field name="_initialVisibleCreators">10</field>
|
||||||
|
<field name="_displayAllCreators"/>
|
||||||
|
|
||||||
<!-- Modes are predefined settings groups for particular tasks -->
|
<!-- Modes are predefined settings groups for particular tasks -->
|
||||||
<field name="_mode">"view"</field>
|
<field name="_mode">"view"</field>
|
||||||
<property name="mode" onget="return this._mode;">
|
<property name="mode" onget="return this._mode;">
|
||||||
|
@ -113,6 +116,12 @@
|
||||||
if (!(val instanceof Zotero.Item)) {
|
if (!(val instanceof Zotero.Item)) {
|
||||||
throw ("<zoteroitembox>.item must be a Zotero.Item");
|
throw ("<zoteroitembox>.item must be a Zotero.Item");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When changing items, reset truncation of creator list
|
||||||
|
if (!this._item || val.id != this._item.id) {
|
||||||
|
this._displayAllCreators = false;
|
||||||
|
}
|
||||||
|
|
||||||
this._item = val;
|
this._item = val;
|
||||||
this.refresh();
|
this.refresh();
|
||||||
]]>
|
]]>
|
||||||
|
@ -509,20 +518,46 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
this._creatorCount = 0;
|
this._creatorCount = 0;
|
||||||
if (this.item.numCreators() > 0) {
|
var num = this.item.numCreators();
|
||||||
for (var i = 0, len=this.item.numCreators(); i<len; i++) {
|
if (num > 0) {
|
||||||
|
var max = Math.min(num, this._initialVisibleCreators);
|
||||||
|
// If fewer than five more, just display
|
||||||
|
if (num < max + 5 || this._displayAllCreators) {
|
||||||
|
max = num;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < max; i++) {
|
||||||
this.addCreatorRow(this.item.getCreator(i).ref,
|
this.addCreatorRow(this.item.getCreator(i).ref,
|
||||||
this.item.getCreator(i).creatorTypeID);
|
this.item.getCreator(i).creatorTypeID);
|
||||||
|
|
||||||
|
if (i == max - 2) {
|
||||||
|
this.disableCreatorAddButtons();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._addCreatorRow) {
|
// Additional creators not displayed
|
||||||
this.addCreatorRow(false, false, true);
|
if (num > max) {
|
||||||
this._addCreatorRow = false;
|
this.addMoreCreatorsRow(num - max);
|
||||||
|
|
||||||
|
this.disableCreatorAddButtons();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// If we didn't start with creators truncated,
|
||||||
|
// don't truncate for as long as we're viewing
|
||||||
|
// this item, so that added creators aren't
|
||||||
|
// immediately hidden
|
||||||
|
this._displayAllCreators = true;
|
||||||
|
|
||||||
|
if (this._addCreatorRow) {
|
||||||
|
this.addCreatorRow(false, false, true);
|
||||||
|
this._addCreatorRow = false;
|
||||||
|
this.disableCreatorAddButtons();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (this.editable && Zotero.CreatorTypes.itemTypeHasCreators(this.item.itemTypeID)) {
|
else if (this.editable && Zotero.CreatorTypes.itemTypeHasCreators(this.item.itemTypeID)) {
|
||||||
// Add default row
|
// Add default row
|
||||||
this.addCreatorRow(false, false, true, true);
|
this.addCreatorRow(false, false, true, true);
|
||||||
|
this.disableCreatorAddButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move to next or previous field if (shift-)tab was pressed
|
// Move to next or previous field if (shift-)tab was pressed
|
||||||
|
@ -636,12 +671,6 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable the "+" button on previous rows
|
|
||||||
var elems = this._dynamicFields.getElementsByAttribute('value', '+');
|
|
||||||
if (elems.length) {
|
|
||||||
this.disableButton(elems[elems.length-1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (creator.fieldMode == 1) {
|
if (creator.fieldMode == 1) {
|
||||||
var firstName = '';
|
var firstName = '';
|
||||||
var lastName = creator.lastName ? creator.lastName : this._defaultFullName;
|
var lastName = creator.lastName ? creator.lastName : this._defaultFullName;
|
||||||
|
@ -774,6 +803,27 @@
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
|
||||||
|
<method name="addMoreCreatorsRow">
|
||||||
|
<parameter name="num"/>
|
||||||
|
<body>
|
||||||
|
<![CDATA[
|
||||||
|
var box = document.createElement('box');
|
||||||
|
|
||||||
|
var label = document.createElement('label');
|
||||||
|
label.id = 'more-creators-label';
|
||||||
|
// TODO: localize
|
||||||
|
label.setAttribute('value', num + " more…");
|
||||||
|
label.setAttribute('onclick',
|
||||||
|
"var binding = document.getBindingParent(this); "
|
||||||
|
+ "binding._displayAllCreators = true; "
|
||||||
|
+ "binding.refresh()"
|
||||||
|
);
|
||||||
|
|
||||||
|
this.addDynamicRow(box, label, true);
|
||||||
|
]]>
|
||||||
|
</body>
|
||||||
|
</method>
|
||||||
|
|
||||||
<method name="addDateRow">
|
<method name="addDateRow">
|
||||||
<parameter name="field"/>
|
<parameter name="field"/>
|
||||||
<parameter name="value"/>
|
<parameter name="value"/>
|
||||||
|
@ -1117,18 +1167,31 @@
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
button.setAttribute('disabled', false);
|
button.setAttribute('disabled', false);
|
||||||
button.setAttribute("onclick",
|
button.setAttribute("onclick",
|
||||||
"document.getBindingParent(this).disableButton(this); "
|
"var parent = document.getBindingParent(this); "
|
||||||
|
+ "parent.disableButton(this); "
|
||||||
+ "var creator = new Zotero.Creator; "
|
+ "var creator = new Zotero.Creator; "
|
||||||
+ "creator.fieldMode = " + (fieldMode ? fieldMode : 0) + "; "
|
+ "creator.fieldMode = " + (fieldMode ? fieldMode : 0) + "; "
|
||||||
+ "document.getBindingParent(this).addCreatorRow(creator, "
|
+ "parent.addCreatorRow("
|
||||||
+ (creatorTypeID ? creatorTypeID : 'false') + ", true);");
|
+ "creator, "
|
||||||
|
+ (creatorTypeID ? creatorTypeID : 'false') + ", true"
|
||||||
|
+ ");"
|
||||||
|
);
|
||||||
]]>
|
]]>
|
||||||
</body>
|
</body>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
|
|
||||||
|
<method name="disableCreatorAddButtons">
|
||||||
|
<body>
|
||||||
|
<![CDATA[
|
||||||
|
// Disable the "+" button on all creator rows
|
||||||
|
var elems = this._dynamicFields.getElementsByAttribute('value', '+');
|
||||||
|
for (var i = 0, len = elems.length; i < len; i++) {
|
||||||
|
this.disableButton(elems[i]);
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</body>
|
||||||
|
</method>
|
||||||
|
|
||||||
|
|
||||||
<method name="createValueElement">
|
<method name="createValueElement">
|
||||||
|
|
|
@ -30,6 +30,11 @@ row > label:first-child, .creator-type-label
|
||||||
margin-right: 0 !important;
|
margin-right: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#more-creators-label
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
row > label
|
row > label
|
||||||
{
|
{
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue