From a5365bb9386ca087129e12f79be4500a965ec1a2 Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Mon, 4 Oct 2010 00:40:59 +0000 Subject: [PATCH] closes #1732, Creator sequence breaks in RDF export with > 10 creators (thanks Frank) --- chrome/content/zotero/xpcom/rdf/serialize.js | 30 ++++++++++++++++++-- 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 index 0de4b28592..2676627507 100644 --- 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