www

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

commit 2b7d7ebfbf92ce224ad7665951071076da80930e
parent 2b4f2e3a0f4683c90671a73113ce53512a034486
Author: Dan Stillman <dstillman@zotero.org>
Date:   Fri, 15 Mar 2013 17:40:59 -0400

Don't rely on object property order to sort tags

It works, but in theory it's not guaranteed in JS.

Diffstat:
Mchrome/content/zotero/bindings/tagselector.xml | 22++++++++++++++++------
Mchrome/content/zotero/xpcom/data/tags.js | 5-----
2 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/chrome/content/zotero/bindings/tagselector.xml b/chrome/content/zotero/bindings/tagselector.xml @@ -226,9 +226,19 @@ // Remove children tagsToggleBox.textContent = ""; - var lastTag; + // Sort by name + var orderedTags = []; + var collation = Zotero.getLocaleCollation(); for (let tagID in self._tags) { - let tagButton = self._makeClickableTag(tagID, lastTag, self.editable); + orderedTags.push(self._tags[tagID]) + } + orderedTags.sort(function(a, b) { + return collation.compareString(1, a.name, b.name); + }); + + var lastTag; + for (let i=0; i<orderedTags.length; i++) { + let tagButton = self._makeClickableTag(orderedTags[i], lastTag, self.editable); if (tagButton) { tagButton.addEventListener('click', function(event) { self.handleTagClick(event, this); @@ -741,16 +751,16 @@ <method name="_makeClickableTag"> - <parameter name="tagID"/> + <parameter name="tagObj"/> <parameter name="lastTag"/> <parameter name="editable"/> <body> <![CDATA[ - var tagInfo = this._tags[tagID], tagName = tagInfo.name; + var tagID = tagObj.id, tagName = tagObj.name, tagType = tagObj.type; // If the last tag was the same, add this tagID and tagType to it if(lastTag && lastTag.value === tagName) { lastTag.setAttribute('tagID', lastTag.getAttribute('tagID') + '-' + tagID); - lastTag.setAttribute('tagType', lastTag.getAttribute('tagType') + '-' + tagInfo.type); + lastTag.setAttribute('tagType', lastTag.getAttribute('tagType') + '-' + tagType); return false; } @@ -759,7 +769,7 @@ label.setAttribute('value', tagName); label.setAttribute('tagID', tagID); - label.setAttribute('tagType', tagInfo.type); + label.setAttribute('tagType', tagType); if (editable) { label.setAttribute('context', 'tag-menu'); } diff --git a/chrome/content/zotero/xpcom/data/tags.js b/chrome/content/zotero/xpcom/data/tags.js @@ -186,11 +186,6 @@ Zotero.Tags = new function() { return {}; } - var collation = Zotero.getLocaleCollation(); - tags.sort(function(a, b) { - return collation.compareString(1, a.name, b.name); - }); - var indexed = {}; for (var i=0; i<tags.length; i++) { var tag = this.get(tags[i].tagID, true);