commit a5365bb9386ca087129e12f79be4500a965ec1a2
parent 60026d5f3965fd3ef1f0b0bb5c3b5a06df7df0d7
Author: Simon Kornblith <simon@simonster.com>
Date: Mon, 4 Oct 2010 00:40:59 +0000
closes #1732, Creator sequence breaks in RDF export with > 10 creators (thanks Frank)
Diffstat:
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/chrome/content/zotero/xpcom/rdf/serialize.js b/chrome/content/zotero/xpcom/rdf/serialize.js
@@ -580,9 +580,35 @@ __Serializer.prototype.statementsToXML = function(sts) {
var type = null;
var results = []
- Zotero.debug(sz.toStr(subject));
var sts = subjects[sz.toStr(subject)]; // relevant statements
- sts.sort();
+ // Sort only on the predicate, leave the order at object
+ // level undisturbed. This leaves multilingual content in
+ // the order of entry (for partner literals), which helps
+ // readability.
+ //
+ // For the predicate sort, we attempt to split the uri
+ // as a hint to the sequence, as sequenced items seems
+ // to be of the form http://example.com#_1, http://example.com#_2,
+ // et cetera. Probably not the most optimal of fixes, but
+ // it does work.
+ sts.sort(function(a,b){
+ var aa = a.predicate.uri.split('#_');
+ var bb = a.predicate.uri.split('#_');
+ if (aa[0] > bb[0]) {
+ return 1;
+ } else if (aa[0] < bb[0]) {
+ return -1;
+ } else {
+ if ("undefined" !== typeof aa[1] && "undefined" !== typeof bb[1]) {
+ if (parseInt(aa[1], 10) > parseInt(bb[1], 10)) {
+ return 1;
+ } else if (parseInt(aa[1], 10) < parseInt(bb[1], 10)) {
+ return -1;
+ }
+ }
+ }
+ return 0;
+ });
for (var i=0; i<sts.length; i++) {
var st = sts[i];