closes #1680, Allow repeat use of item in a citation (patch due entirely to Frank)

see notes at referenced ticket for information re: modifications in behavior
This commit is contained in:
Simon Kornblith 2010-06-29 06:34:20 +00:00
parent 40b6ed19f8
commit 78d46dc0f0
2 changed files with 255 additions and 112 deletions

View File

@ -24,12 +24,14 @@
*/ */
var Zotero_Citation_Dialog = new function () { var Zotero_Citation_Dialog = new function () {
// Array value [0] is property name.
// Array value [1] is default value of property.
var _preserveData = { var _preserveData = {
"prefix":"value", "prefix":["value", ""],
"suffix":"value", "suffix":["value", ""],
"label":"selectedIndex", "label":["selectedIndex", 0],
"locator":"value", "locator":["value", ""],
"suppress-author":"checked" "suppress-author":["checked", false]
}; };
var _itemData = new Object(); var _itemData = new Object();
@ -42,9 +44,11 @@ var Zotero_Citation_Dialog = new function () {
var _locatorNameArray = {}; var _locatorNameArray = {};
var _autoRegeneratePref; var _autoRegeneratePref;
var _acceptButton; var _acceptButton;
var _multipleSourceButton;
var _sortCheckbox; var _sortCheckbox;
var _citationList; var _citationList;
var _originalHTML; var _originalHTML;
var serial_number;
var io; var io;
this.load = load; this.load = load;
@ -56,7 +60,8 @@ var Zotero_Citation_Dialog = new function () {
this.down = down; this.down = down;
this.add = add; this.add = add;
this.remove = remove; this.remove = remove;
this.sortCitation = sortCitation; this.setSortToggle = setSortToggle;
this.citationSortUnsort = citationSortUnsort;
this.confirmRegenerate = confirmRegenerate; this.confirmRegenerate = confirmRegenerate;
this.accept = accept; this.accept = accept;
this.cancel = cancel; this.cancel = cancel;
@ -72,9 +77,15 @@ var Zotero_Citation_Dialog = new function () {
// find accept button // find accept button
_acceptButton = document.getElementById("zotero-add-citation-dialog").getButton("accept"); _acceptButton = document.getElementById("zotero-add-citation-dialog").getButton("accept");
_multipleSourceButton = document.documentElement.getButton("extra1");
_autoRegeneratePref = Zotero.Prefs.get("integration.autoRegenerate"); _autoRegeneratePref = Zotero.Prefs.get("integration.autoRegenerate");
_citationList = document.getElementById("citation-list"); _citationList = document.getElementById("citation-list");
// Manipulated by _addItem(). Discriminates between cite instances
// based on the same item in the same citation. Internal throwaway variable,
// reset each time _multipleSourcesOn is set to true.
serial_number = 0;
// if a style with sortable citations, present checkbox // if a style with sortable citations, present checkbox
if(io.sortable) { if(io.sortable) {
_sortCheckbox = document.getElementById("keepSorted"); _sortCheckbox = document.getElementById("keepSorted");
@ -85,16 +96,16 @@ var Zotero_Citation_Dialog = new function () {
// load locators // load locators
var locators = Zotero.Cite.labels; var locators = Zotero.Cite.labels;
var menu = document.getElementById("label"); var menu = document.getElementById("label");
var popup = document.getElementById("locator-type-popup"); var label_list = document.getElementById("locator-type-popup");
var i = 0; var i = 0;
for(var value in locators) { for(var value in locators) {
var locator = locators[value]; var locator = locators[value];
var locatorLabel = locator[0].toUpperCase()+locator.substr(1); var locatorLabel = locator[0].toUpperCase()+locator.substr(1);
// add to popup // add to list of labels
var child = document.createElement("menuitem"); var child = document.createElement("menuitem");
child.setAttribute("value", value); child.setAttribute("value", value);
child.setAttribute("label", locatorLabel); child.setAttribute("label", locatorLabel);
popup.appendChild(child); label_list.appendChild(child);
// add to array // add to array
_locatorIndexArray[locator] = i; _locatorIndexArray[locator] = i;
_locatorNameArray[i] = locator; _locatorNameArray[i] = locator;
@ -108,28 +119,53 @@ var Zotero_Citation_Dialog = new function () {
// if we already have a citation, load data from it // if we already have a citation, load data from it
document.getElementById('editor').format = "RTF"; document.getElementById('editor').format = "RTF";
if(io.citation.citationItems.length) { if(io.citation.citationItems.length) {
if(io.citation.citationItems.length == 1) { if(io.citation.citationItems.length === 1) {
// single citation // single citation
toggleMultipleSources(false);
_suppressNextTreeSelect = true; _suppressNextTreeSelect = true;
itemsView.selectItem(io.citation.citationItems[0].id); // treeview from selectItemsDialog.js itemsView.selectItem(io.citation.citationItems[0].id); // treeview from xpcom/itemTreeView.js
for(var property in _preserveData) { for(var box in _preserveData) {
if(io.citation.citationItems[0][property]) { var property = _preserveData[box][0];
if(property == "label") { if(io.citation.citationItems[0][box]) {
document.getElementById(property)[_preserveData[property]] = _locatorIndexArray[io.citation.citationItems[0][property]]; if(box === "label") {
document.getElementById(box)[property] = _locatorIndexArray[io.citation.citationItems[0][box]];
} else { } else {
document.getElementById(property)[_preserveData[property]] = io.citation.citationItems[0][property]; document.getElementById(box)[property] = io.citation.citationItems[0][box];
} }
} }
} }
} else { } else {
// multiple citations // multiple citations
toggleMultipleSources(); toggleMultipleSources(true);
var _itemData = {};
// There is a little thrashing here, with repeated writes and
// overwrites of node content. But sticking to the same
// workflow for all updates (node -> array -> io.citation) makes
// debugging a little less painful.
for(var i=0; i<io.citation.citationItems.length; i++) { for(var i=0; i<io.citation.citationItems.length; i++) {
var item = Zotero.Items.get(io.citation.citationItems[i].id); var item = Zotero.Items.get(io.citation.citationItems[i].id);
if(item) { if(item) {
_addItem(item); var itemNode = _addItem(item);
_itemData[io.citation.citationItems[i].id] = io.citation.citationItems[i]; var itemDataID = itemNode.getAttribute("value");
_itemData[itemDataID] = {};
for(var box in _preserveData) {
var domBox = document.getElementById(box);
var property = _preserveData[box][0];
if("undefined" !== typeof io.citation.citationItems[i][box]) {
if(box === "label") {
domBox[property] = _locatorIndexArray[io.citation.citationItems[i][box]];
} else {
domBox[property] = io.citation.citationItems[i][box];
} }
} else {
domBox[property] = _preserveData[box][1];
}
}
_itemSelected(itemDataID, true);
}
}
for (var box in _preserveData) {
document.getElementById(box).disabled = true;
} }
} }
@ -140,50 +176,53 @@ var Zotero_Citation_Dialog = new function () {
} }
_updateAccept(); _updateAccept();
} else {
toggleMultipleSources(false);
} }
} }
/* /*
* turn on/off multiple sources item list * turn on/off multiple sources item list
*/ */
function toggleMultipleSources() { function toggleMultipleSources(mode) {
if (mode === false || mode === true) {
_multipleSourcesOn = !mode;
}
_multipleSourcesOn = !_multipleSourcesOn; _multipleSourcesOn = !_multipleSourcesOn;
var popup = document.defaultView;
var dialog = document.getElementById("zotero-add-citation-dialog");
if (dialog.getAttribute("height") == 1) {
popup.sizeToContent();
}
if(_multipleSourcesOn) { if(_multipleSourcesOn) {
var items = itemsView.getSelectedItems(true); _multipleSourceButton.label = Zotero.getString("citation.singleSource");
var itemID = (items.length ? items[0] : false); document.getElementById("multiple-sources").setAttribute("hidden", false);
// var itemDataID = itemID+"::"+0; popup.resizeTo(750, dialog.getAttribute("height"));
document.getElementById("multiple-sources").hidden = undefined; //popup.moveBy((600 - 750)/2, 0);
document.getElementById("zotero-add-citation-dialog").width = "750";
document.documentElement.getButton("extra1").label = Zotero.getString("citation.singleSource"); serial_number = 0;
// move user field content to multiple before adding XXXXX
if (itemID) {
// _itemData[itemDataID] = new Object(); // The mode is forced only when run from load(), in which case
_itemData[itemID] = new Object(); // the adding of items is done separately.
var element; if (mode !== true) {
for (var box in _preserveData) { this.add(true);
element = document.getElementById(box);
// _itemData[itemDataID][box] = element[_preserveData[box]];
_itemData[itemID][box] = element[_preserveData[box]];
}
}
treeItemSelected();
// disable adding info until citation added
_itemSelected(false);
// add current selection
if (itemID) {
this.add();
} else {
_updateAccept();
_updatePreview();
} }
} else { } else {
document.getElementById("multiple-sources").hidden = true; _multipleSourceButton.label = Zotero.getString("citation.multipleSources");
document.getElementById("zotero-add-citation-dialog").width = "600"; document.getElementById("multiple-sources").setAttribute("hidden", true);
document.documentElement.getButton("extra1").label = Zotero.getString("citation.multipleSources"); popup.resizeTo(600, dialog.getAttribute("height"));
//popup.moveBy((750 - 600)/2, 0);
// enable all fields // enable all fields
for(var i in _preserveData) { for(var box in _preserveData) {
document.getElementById(i).disabled = false; document.getElementById(box).disabled = false;
}
var itemID = false;
if (_citationList.selectedIndex > -1) {
var itemDataID = _citationList.getSelectedItem(0).getAttribute("value");
itemID = itemDataID.slice(0, itemDataID.indexOf(":"));
} }
// delete item list // delete item list
@ -191,6 +230,11 @@ var Zotero_Citation_Dialog = new function () {
// delete all items // delete all items
_clearCitationList(); _clearCitationList();
// refresh
if (itemID) {
itemsView.wrappedJSObject.selectItem(itemID);
}
_updateAccept(); _updateAccept();
_updatePreview(); _updatePreview();
} }
@ -205,23 +249,32 @@ var Zotero_Citation_Dialog = new function () {
_updateAccept(); _updateAccept();
return; return;
} }
var items = itemsView.getSelectedItems(true); // treeview from selectItemsDialog.js var items = itemsView.getSelectedItems(true); // treeview from xpcom/itemTreeView.js
var itemID = (items.length ? items[0] : false); var itemID = (items.length ? items[0] : false);
if(_multipleSourcesOn) { if(_multipleSourcesOn) {
// if item is also on right side, show info // We can safely use itemID here, because none of these operations
var hasBeenAdded = itemID && _itemData[itemID] !== undefined; // affect selected items; this is all about the tree and navigation.
// disable boxes if item not added; otherwise, enable
_itemSelected(hasBeenAdded ? itemID : false);
// turn off highlight in selected item list // turn off highlight in selected item list
_suppressNextListSelect = true; _suppressNextListSelect = true;
document.getElementById("citation-list").selectedIndex = -1; document.getElementById("citation-list").selectedIndex = -1;
// disable adding nothing, or things already added
document.getElementById("add").disabled = !itemID || hasBeenAdded; // disable all fields
for(var box in _preserveData) {
document.getElementById(box).disabled = true;
}
// disable adding nothing
document.getElementById("add").disabled = !itemID;
document.getElementById("remove").disabled = true; document.getElementById("remove").disabled = true;
document.getElementById("up").disabled = true; document.getElementById("up").disabled = true;
document.getElementById("down").disabled = true; document.getElementById("down").disabled = true;
} else { } else {
for(var box in _preserveData) {
document.getElementById(box).disabled = !itemID;
}
_updateAccept(); _updateAccept();
_updatePreview(); _updatePreview();
} }
@ -238,14 +291,14 @@ var Zotero_Citation_Dialog = new function () {
} }
var selectedListItem = _citationList.getSelectedItem(0); var selectedListItem = _citationList.getSelectedItem(0);
var selectedListIndex = _citationList.selectedIndex; var selectedListIndex = _citationList.selectedIndex;
var itemID = (selectedListItem ? selectedListItem.value : false); var itemDataID = (selectedListItem ? selectedListItem.getAttribute("value") : false);
_itemSelected(itemID); _itemSelected(itemDataID);
// turn off highlight in item tree // turn off highlight in item tree
_suppressNextTreeSelect = true; _suppressNextTreeSelect = true;
document.getElementById("zotero-items-tree").view.selection.clearSelection(); document.getElementById("zotero-items-tree").view.selection.clearSelection();
document.getElementById("remove").disabled = !itemID; document.getElementById("remove").disabled = !itemDataID;
document.getElementById("add").disabled = true; document.getElementById("add").disabled = true;
_configListPosition(!itemID, selectedListIndex); _configListPosition(!itemDataID, selectedListIndex);
} }
function _configListPosition(flag, selectedListIndex) { function _configListPosition(flag, selectedListIndex) {
@ -265,13 +318,13 @@ var Zotero_Citation_Dialog = new function () {
// automatically uncheck sorted checkbox if user is rearranging citation // automatically uncheck sorted checkbox if user is rearranging citation
if(_sortCheckbox && _sortCheckbox.checked) { if(_sortCheckbox && _sortCheckbox.checked) {
_sortCheckbox.checked = false; _sortCheckbox.checked = false;
sortCitation(); setSortToggle();
} }
var insertBeforeItem; var insertBeforeItem;
var selectedListItem = _citationList.getSelectedItem(0); var selectedListItem = _citationList.getSelectedItem(0);
var selectedListIndex = _citationList.selectedIndex; var selectedListIndex = _citationList.selectedIndex;
var itemID = selectedListItem.value; var itemDataID = selectedListItem.getAttribute("value");
if (direction === -1) { if (direction === -1) {
insertBeforeItem = selectedListItem.previousSibling; insertBeforeItem = selectedListItem.previousSibling;
} else { } else {
@ -280,7 +333,7 @@ var Zotero_Citation_Dialog = new function () {
var listItem = _citationList.removeChild(selectedListItem); var listItem = _citationList.removeChild(selectedListItem);
_citationList.insertBefore(listItem, insertBeforeItem); _citationList.insertBefore(listItem, insertBeforeItem);
_citationList.selectedIndex = (selectedListIndex + direction); _citationList.selectedIndex = (selectedListIndex + direction);
_itemSelected(itemID); _itemSelected(itemDataID);
_updatePreview(); _updatePreview();
_configListPosition(false, (selectedListIndex + direction)); _configListPosition(false, (selectedListIndex + direction));
} }
@ -294,20 +347,51 @@ var Zotero_Citation_Dialog = new function () {
} }
/* /*
* Adds a citation to the multipleSources list * Adds an item to the multipleSources list
*/ */
function add() { function add(first_item) {
var item = itemsView.getSelectedItems()[0]; // treeview from selectItemsDialog.js
_itemSelected(item.id);
_citationList.ensureElementIsVisible(_addItem(item));
// don't let someone select it again var pos, len;
document.getElementById("add").disabled = true; var item = itemsView.getSelectedItems()[0]; // treeview from xpcom/itemTreeView.js
// allow user to press OK if (!item) {
sortCitation();
_updateAccept();
_updatePreview();
return;
}
// Add to selection list and generate a new itemDataID for this cite.
var selectionNode = _addItem(item);
var itemDataID = selectionNode.getAttribute("value");
document.getElementById("add").disabled = !itemDataID;
// Save existing locator and affix field content, if any.
if (first_item) {
_itemSelected(itemDataID, true);
} else {
_itemSelected();
// set to defaults
for(var box in _preserveData) {
var property = _preserveData[box][0];
var default_value = _preserveData[box][1];
document.getElementById(box)[property] = default_value;
}
// Save default locator and affix element values to this multi-item.
_itemSelected(itemDataID, true);
}
for(var box in _preserveData) {
document.getElementById(box).disabled = true;
}
_citationList.ensureElementIsVisible(selectionNode);
// allow user to press OK
selectionNode = sortCitation(selectionNode);
_citationList.selectItem(selectionNode);
_updateAccept(); _updateAccept();
_updatePreview(); _updatePreview();
sortCitation(item.id);
} }
/* /*
@ -316,11 +400,11 @@ var Zotero_Citation_Dialog = new function () {
function remove() { function remove() {
var selectedListItem = _citationList.getSelectedItem(0); var selectedListItem = _citationList.getSelectedItem(0);
var selectedListIndex = _citationList.selectedIndex; var selectedListIndex = _citationList.selectedIndex;
var itemID = selectedListItem.value; var itemDataID = selectedListItem.getAttribute("value");
// remove from _itemData // remove from _itemData
delete _itemData[itemID]; delete _itemData[itemDataID];
_itemData[itemID] = undefined; _itemData[itemDataID] = undefined;
_lastSelected = null; _lastSelected = null;
// remove from list // remove from list
@ -336,17 +420,40 @@ var Zotero_Citation_Dialog = new function () {
} }
/* /*
* Sorts the list of citations * Sorts preview citations, if preview is open.
*/ */
function sortCitation(scrollToItemID) { function citationSortUnsort() {
setSortToggle();
sortCitation();
_updatePreview();
}
/*
* Sets the current sort toggle state persistently on the citation.
*/
function setSortToggle() {
if(!_sortCheckbox) return; if(!_sortCheckbox) return;
if(!_sortCheckbox.checked) { if(!_sortCheckbox.checked) {
io.citation.properties.unsorted = true; io.citation.properties.unsorted = true;
} else {
io.citation.properties.unsorted = false;
}
return; return;
} }
var selectedItemID = (_citationList.selectedItem ? _citationList.selectedItem.value : null); /*
Zotero.debug("item "+selectedItemID+" selected"); * Sorts the list of citations
*/
function sortCitation(scrollToItem) {
if(!_sortCheckbox) return scrollToItem;
if(!_sortCheckbox.checked) {
io.citation.properties.unsorted = true;
return scrollToItem;
}
var scrollToItemID = false;
if (scrollToItem) {
scrollToItemID = scrollToItem.getAttribute("value");
}
_getCitation(); _getCitation();
// delete all existing items from list // delete all existing items from list
@ -357,20 +464,24 @@ var Zotero_Citation_Dialog = new function () {
io.previewFunction(); io.previewFunction();
// add items back to list // add items back to list
var scrollTo = null; scrollToItem = null;
for(var i=0; i<io.citation.sortedItems.length; i++) { for(var i=0; i<io.citation.sortedItems.length; i++) {
var itemID = io.citation.sortedItems[i][0].id; var itemID = io.citation.sortedItems[i][0].id;
var itemDataID = io.citation.sortedItems[i][1].tmpItemDataID;
var item = Zotero.Items.get(itemID); var item = Zotero.Items.get(itemID);
var itemNode = _addItem(item); // Don't increment serial_number, and use the
if(itemID == selectedItemID) _citationList.selectedIndex = i; // existing itemDataID stored on the item in sortedItems
if(scrollToItemID && itemID == scrollToItemID) scrollTo = itemNode; var itemNode = _addItem(item, itemDataID);
if(itemDataID == scrollToItemID) _citationList.selectedIndex = i;
if(scrollToItemID && itemDataID == scrollToItemID) scrollToItem = itemNode;
} }
if(scrollTo) _citationList.ensureElementIsVisible(scrollTo); if(scrollToItem) _citationList.ensureElementIsVisible(scrollToItem);
return scrollToItem;
} }
/* /*
* Ask whether to modfiy the preview * Ask whether to modifiy the preview
*/ */
function confirmRegenerate(focusShifted) { function confirmRegenerate(focusShifted) {
if(document.getElementById('editor').value == _originalHTML || _originalHTML === undefined) { if(document.getElementById('editor').value == _originalHTML || _originalHTML === undefined) {
@ -491,23 +602,39 @@ var Zotero_Citation_Dialog = new function () {
function _updateAccept(status) { function _updateAccept(status) {
if(_multipleSourcesOn) { if(_multipleSourcesOn) {
_acceptButton.disabled = !_citationList.getRowCount(); _acceptButton.disabled = !_citationList.getRowCount();
// To prevent accidental data loss, do not allow change to
// single citation mode if multiple items are in selection
// list.
if (_citationList.getRowCount() > 1) {
_multipleSourceButton.disabled = true;
} else { } else {
_acceptButton.disabled = !itemsView.getSelectedItems().length; // treeview from selectItemsDialog.js _multipleSourceButton.disabled = false;
}
} else {
_acceptButton.disabled = !itemsView.getSelectedItems().length; // treeview from xpcom/itemTreeView.js
} }
} }
/* /*
* called when an item is selected; if itemID is false, disables fields; if * called when an item is selected; if itemDataID is false, disables fields; if
* itemID is undefined, only updates _itemData array * itemDataID is undefined, only updates _itemData array
*
* Note: This function no longer disables fields. That operation is
* now performed separately by explicit code.
*/ */
function _itemSelected(itemID) { function _itemSelected(itemDataID, forceSave) {
if (forceSave) {
_lastSelected = itemDataID;
}
if(_lastSelected && !_itemData[_lastSelected]) { if(_lastSelected && !_itemData[_lastSelected]) {
_itemData[_lastSelected] = new Object(); _itemData[_lastSelected] = new Object();
} }
for(var box in _preserveData) { for(var box in _preserveData) {
var domBox = document.getElementById(box); var domBox = document.getElementById(box);
var property = _preserveData[box]; var property = _preserveData[box][0];
// save property // save property
if(_lastSelected) { if(_lastSelected) {
@ -518,28 +645,26 @@ var Zotero_Citation_Dialog = new function () {
} }
} }
// restore previous property // restore previous property
if(itemID) { if(itemDataID) {
domBox.disabled = false; domBox.disabled = false;
if(_itemData[itemID] && _itemData[itemID][box] !== undefined) { if(_itemData[itemDataID] && _itemData[itemDataID][box] !== undefined) {
if(property == "label") { if(property == "label") {
domBox[property] = _locatorIndexArray[_itemData[itemID][box]]; domBox[property] = _locatorIndexArray[_itemData[itemDataID][box]];
} else { } else {
domBox[property] = _itemData[itemID][box]; domBox[property] = _itemData[itemDataID][box];
} }
} }
} else if(itemID !== undefined) {
domBox.disabled = true;
domBox[property] = "";
} }
} }
if(itemID !== undefined) _lastSelected = itemID; if(itemDataID !== undefined) _lastSelected = itemDataID;
} }
/* /*
* updates io.citation to reflect selected items * updates io.citation to reflect selected items
*/ */
function _getCitation() { function _getCitation() {
var key;
io.citation.citationItems = new Array(); io.citation.citationItems = new Array();
// use to map selectedIndexes back to page/paragraph/line // use to map selectedIndexes back to page/paragraph/line
@ -547,28 +672,37 @@ var Zotero_Citation_Dialog = new function () {
if(_multipleSourcesOn) { if(_multipleSourcesOn) {
_itemSelected(); // store locator info _itemSelected(); // store locator info
var listLength = _citationList.getRowCount(); var listLength = _citationList.getRowCount();
var citationItems = new Array();
if(listLength) { if(listLength) {
// generate citationItems // generate citationItems
for(var i=0; i<listLength; i++) { for(var i=0; i<listLength; i++) {
var itemID = _citationList.getItemAtIndex(i).getAttribute("value"); var itemDataID = _citationList.getItemAtIndex(i).getAttribute("value");
var citationItem = {};
var citationItem = _itemData[itemID]; for (key in _itemData[itemDataID]) {
// label is special everywhere
if (key === "label") {
citationItem.label = _locatorNameArray[_itemData[itemDataID].label];
} else if (_itemData[itemDataID][key]) {
citationItem[key] = _itemData[itemDataID][key];
}
}
citationItem["tmpItemDataID"] = itemDataID;
var itemID = itemDataID.slice(0, itemDataID.indexOf(":"));
citationItem.id = itemID; citationItem.id = itemID;
io.citation.citationItems.push(citationItem); io.citation.citationItems.push(citationItem);
} }
} }
} else { } else {
var items = itemsView.getSelectedItems(true); // treeview from selectItemsDialog.js var items = itemsView.getSelectedItems(true); // treeview from xpcom/itemTreeView.js
if(items.length) { if(items.length) {
var citationItem = {}; var citationItem = {};
citationItem.id = items[0]; citationItem.id = items[0];
for(var property in _preserveData) { for(var box in _preserveData) {
if(property == "label") { var property = _preserveData[box][0];
citationItem[property] = _locatorNameArray[document.getElementById(property).selectedIndex]; if(box == "label") {
citationItem[box] = _locatorNameArray[document.getElementById(box).selectedIndex];
} else { } else {
citationItem[property] = document.getElementById(property)[_preserveData[property]]; citationItem[box] = document.getElementById(box)[property];
} }
} }
@ -586,9 +720,18 @@ var Zotero_Citation_Dialog = new function () {
/* /*
* Add an item to the item list (multiple sources only) * Add an item to the item list (multiple sources only)
*/ */
function _addItem(item) { function _addItem(item, forceID) {
var itemNode = document.createElement("listitem"); var itemNode = document.createElement("listitem");
itemNode.setAttribute("value", item.id);
var itemDataID;
if (!forceID) {
serial_number += 1;
itemDataID = item.id + ":" + serial_number;
} else {
itemDataID = forceID;
}
itemNode.setAttribute("value", itemDataID);
itemNode.setAttribute("label", item.getField("title")); itemNode.setAttribute("label", item.getField("title"));
itemNode.setAttribute("class", "listitem-iconic"); itemNode.setAttribute("class", "listitem-iconic");
itemNode.setAttribute("image", item.getImageSrc()); itemNode.setAttribute("image", item.getImageSrc());

View File

@ -167,7 +167,7 @@
<toolbarbutton id="down" oncommand="Zotero_Citation_Dialog.down()" disabled="true"/> <toolbarbutton id="down" oncommand="Zotero_Citation_Dialog.down()" disabled="true"/>
</vbox> </vbox>
<vbox align="left"> <vbox align="left">
<checkbox id="keepSorted" hidden="true" checked="false" oncommand="Zotero_Citation_Dialog.sortCitation()" label="&zotero.citation.keepSorted.label;"/> <checkbox id="keepSorted" hidden="true" checked="false" oncommand="Zotero_Citation_Dialog.citationSortUnsort()" label="&zotero.citation.keepSorted.label;"/>
<listbox id="citation-list" flex="1" align="stretch" seltype="single" <listbox id="citation-list" flex="1" align="stretch" seltype="single"
onselect="Zotero_Citation_Dialog.listItemSelected();"/> onselect="Zotero_Citation_Dialog.listItemSelected();"/>
</vbox> </vbox>