diff --git a/chrome/content/zotero/integration/addCitationDialog.js b/chrome/content/zotero/integration/addCitationDialog.js index ac7ccf460..0beca4849 100644 --- a/chrome/content/zotero/integration/addCitationDialog.js +++ b/chrome/content/zotero/integration/addCitationDialog.js @@ -50,6 +50,8 @@ var Zotero_Citation_Dialog = new function () { this.toggleEditor = toggleEditor; this.treeItemSelected = treeItemSelected; this.listItemSelected = listItemSelected; + this.up = up; + this.down = down; this.add = add; this.remove = remove; this.sortCitation = sortCitation; @@ -215,19 +217,63 @@ var Zotero_Citation_Dialog = new function () { _updateAccept(); _updatePreview(); } + _configListPosition(document.getElementById("citation-list"), true); } /* * called when an item in the selected items list is clicked */ function listItemSelected() { - var selectedListItem = document.getElementById("citation-list").getSelectedItem(0); + var itemList = document.getElementById("citation-list"); + var selectedListItem = itemList.getSelectedItem(0); var itemID = (selectedListItem ? selectedListItem.value : false); _itemSelected(itemID); + _configListPosition(itemList, !itemID); document.getElementById("remove").disabled = !itemID; } + function _configListPosition(itemList,flag) { + var selectedIndex = itemList.selectedIndex; + if (selectedIndex > 0) { + document.getElementById("up").disabled = flag; + } else { + document.getElementById("up").disabled = true; + } + if (selectedIndex < (itemList.getRowCount() - 1)) { + document.getElementById("down").disabled = flag; + } else { + document.getElementById("down").disabled = true; + } + } + + function _move(direction) { + var insertBeforeItem; + var itemList = document.getElementById("citation-list"); + var selectedListItem = itemList.getSelectedItem(0); + var itemID = selectedListItem.value; + var selectedListIndex = itemList.selectedIndex; + if (direction === -1) { + insertBeforeItem = selectedListItem.previousSibling; + } else { + insertBeforeItem = selectedListItem.nextSibling.nextSibling; + } + var listItem = itemList.removeChild(selectedListItem); + itemList.insertBefore(listItem, insertBeforeItem); + itemList.selectedIndex = (selectedListIndex + direction); + _itemSelected(itemID); + _updatePreview(); + _configListPosition(itemList, false); + } + + function up() { + _move(-1); + } + + function down() { + _move(1); + } + /* * Adds a citation to the multipleSources list */ @@ -514,11 +560,15 @@ var Zotero_Citation_Dialog = new function () { */ function _addItem(item) { var itemNode = document.createElement("listitem"); + var itemList = document.getElementById("citation-list"); itemNode.setAttribute("value", item.getID()); itemNode.setAttribute("label", item.getField("title")); itemNode.setAttribute("class", "listitem-iconic"); itemNode.setAttribute("image", item.getImageSrc()); - document.getElementById("citation-list").appendChild(itemNode); + itemList.appendChild(itemNode); + itemList.focus(); + itemList.selectedIndex = itemList.childNodes.length-1; + _configListPosition(itemList, false); } /* diff --git a/chrome/content/zotero/integration/addCitationDialog.xul b/chrome/content/zotero/integration/addCitationDialog.xul index 025aa7258..11c59d962 100644 --- a/chrome/content/zotero/integration/addCitationDialog.xul +++ b/chrome/content/zotero/integration/addCitationDialog.xul @@ -159,15 +159,17 @@ - diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js index 22cb32531..d3925a7aa 100644 --- a/chrome/content/zotero/xpcom/integration.js +++ b/chrome/content/zotero/xpcom/integration.js @@ -616,10 +616,11 @@ Zotero.Integration.Document.prototype._updateSession = function(newField, editFi Zotero.Integration.Document.prototype._updateDocument = function(forceCitations, forceBibliography) { // update citations this._session.updateUpdateIndices(forceCitations); - this._deleteFields = this._deleteFields.concat(this._session.updateCitations()); - for(var i in this._session.citationText) { + var deleteCitations = this._session.updateCitations(); + this._deleteFields = this._deleteFields.concat([i for(i in deleteCitations)]); + for(var i in this._session.updateIndices) { citation = this._session.citationsByIndex[i]; - if(!citation) continue; + if(!citation || deleteCitations[i]) continue; var fieldCode = this._session.getCitationField(citation); if(fieldCode != citation.properties.field) { @@ -1370,14 +1371,14 @@ Zotero.Integration.Session.prototype.updateCitations = function() { Zotero.debug("Zotero.Integration: indices of updated citations"); Zotero.debug([key for(key in this.updateIndices)]); - var deleteCitations = []; + var deleteCitations = {}; for each(var indexList in [this.newIndices, this.updateIndices]) { for(var index in indexList) { index = parseInt(index); var citation = this.citationsByIndex[index]; if(citation.properties.delete) { - if(deleteCitations.indexOf(index) == -1) deleteCitations.push(index); + deleteCitations[index] = true; continue; } if(this.formatCitation(index, citation)) { diff --git a/chrome/skin/default/zotero/citation-down-gray.png b/chrome/skin/default/zotero/citation-down-gray.png new file mode 100644 index 000000000..d10dc7327 Binary files /dev/null and b/chrome/skin/default/zotero/citation-down-gray.png differ diff --git a/chrome/skin/default/zotero/citation-down.png b/chrome/skin/default/zotero/citation-down.png new file mode 100644 index 000000000..70e4a290d Binary files /dev/null and b/chrome/skin/default/zotero/citation-down.png differ diff --git a/chrome/skin/default/zotero/citation-up-gray.png b/chrome/skin/default/zotero/citation-up-gray.png new file mode 100644 index 000000000..fa9814437 Binary files /dev/null and b/chrome/skin/default/zotero/citation-up-gray.png differ diff --git a/chrome/skin/default/zotero/citation-up.png b/chrome/skin/default/zotero/citation-up.png new file mode 100644 index 000000000..1c5424554 Binary files /dev/null and b/chrome/skin/default/zotero/citation-up.png differ diff --git a/chrome/skin/default/zotero/integration.css b/chrome/skin/default/zotero/integration.css index 096b01461..ccb809d04 100644 --- a/chrome/skin/default/zotero/integration.css +++ b/chrome/skin/default/zotero/integration.css @@ -1,3 +1,20 @@ +#up { + list-style-image: url('chrome://zotero/skin/citation-up.png'); +} + +#up[disabled="true"] { + list-style-image: url('chrome://zotero/skin/citation-up-gray.png'); +} + +#down { + list-style-image: url('chrome://zotero/skin/citation-down.png'); +} + +#down[disabled="true"] { + list-style-image: url('chrome://zotero/skin/citation-down-gray.png'); +} + + #add { list-style-image: url('chrome://zotero/skin/citation-add.png'); } @@ -14,13 +31,18 @@ list-style-image: url('chrome://zotero/skin/citation-delete-gray.png'); } -#add .toolbarbutton-text, #remove .toolbarbutton-text +#citation-buttons > toolbarbutton +{ + margin: 2px 0 2px 4px !important; + padding: 0 !important; +} + +#citation-buttons > toolbarbutton > .toolbarbutton-text { margin: 0 !important; padding: 0 !important; } - #prefix, #suffix { width: 200px; }