www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 3179a2f0e7c1d5860729ec4fce97f6ef81f1dae8
parent 3de5ed1332aaa47a56b72ef37ba258f8db7e39d0
Author: Dan Stillman <dstillman@zotero.org>
Date:   Fri, 10 Jun 2016 20:35:14 -0400

Fix various issues with note pane tags box

Diffstat:
Mchrome/content/zotero/bindings/noteeditor.xml | 6++++++
Mchrome/content/zotero/bindings/tagsbox.xml | 23+++++++++++++++++------
Atest/tests/noteeditorTest.js | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 77 insertions(+), 6 deletions(-)

diff --git a/chrome/content/zotero/bindings/noteeditor.xml b/chrome/content/zotero/bindings/noteeditor.xml @@ -416,6 +416,12 @@ var x = this.boxObject.screenX; var y = this.boxObject.screenY; this.id('tagsPopup').openPopupAtScreen(x, y, false); + + // If editable and no existing tags, open new empty row + var tagsBox = this.id('tags'); + if (tagsBox.mode == 'edit' && tagsBox.count == 0) { + this.id('tags').new(); + } ]]></body> </method> diff --git a/chrome/content/zotero/bindings/tagsbox.xml b/chrome/content/zotero/bindings/tagsbox.xml @@ -82,6 +82,7 @@ return; } this._item = val; + this._lastTabIndex = false; this.reload(); ]]> </setter> @@ -95,13 +96,15 @@ if (this.item) { var tags = this.item.getTags(); - if (tags) { - for(var i = 0; i < tags.length; i++) - { - r = r + tags[i].tag + ", "; - } - r = r.substr(0,r.length-2); + + // Sort tags alphabetically + var collation = Zotero.getLocaleCollation(); + tags.sort((a, b) => collation.compareString(1, a.tag, b.tag)); + + for (let i = 0; i < tags.length; i++) { + r = r + tags[i].tag + ", "; } + r = r.substr(0,r.length-2); } return r; @@ -725,6 +728,14 @@ <method name="new"> <body> <![CDATA[ + var rowsElement = this.id('tagRows'); + var rows = rowsElement.childNodes; + + // Don't add new row if there already is one + if (rows.length > this.count) { + return; + } + var row = this.addDynamicRow(); row.firstChild.nextSibling.click(); return row; diff --git a/test/tests/noteeditorTest.js b/test/tests/noteeditorTest.js @@ -0,0 +1,54 @@ +"use strict"; + +describe("Note Editor", function () { + var win, zp; + + before(function* () { + win = yield loadZoteroPane(); + zp = win.ZoteroPane; + }); + + after(function () { + win.close(); + }); + + describe("Tags box", function () { + it("should open new row for editing if no tags", function* () { + var note = yield createDataObject('item', { itemType: 'note' }); + var noteEditor = win.document.getElementById('zotero-note-editor'); + var linksBox = noteEditor._id('links-box'); + linksBox.tagsClick(); + var tagsBox = linksBox.id('tagsPopup').firstChild; + var tagRows = tagsBox.id('tagRows'); + assert.equal(tagRows.childNodes.length, 1); + }); + + it("should only open one new row for editing", function* () { + var note = yield createDataObject('item', { itemType: 'note' }); + var noteEditor = win.document.getElementById('zotero-note-editor'); + var linksBox = noteEditor._id('links-box'); + linksBox.tagsClick(); + // Close and reopen + linksBox.id('tagsPopup').hidePopup(); + linksBox.tagsClick(); + + // Should still be only one empty row + var tagsBox = linksBox.id('tagsPopup').firstChild; + var tagRows = tagsBox.id('tagRows'); + assert.equal(tagRows.childNodes.length, 1); + }); + + it("should show tags in alphabetical order", function* () { + var note = new Zotero.Item('note'); + note.addTag('B'); + yield note.saveTx(); + note.addTag('A'); + note.addTag('C'); + yield note.saveTx(); + + var noteEditor = win.document.getElementById('zotero-note-editor'); + var linksBox = noteEditor._id('links-box'); + assert.equal(linksBox.id('tags').summary, "A, B, C"); + }); + }); +});