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:
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");
+ });
+ });
+});