fix citation sort issues
This commit is contained in:
parent
d35ca68586
commit
624902c726
|
@ -381,11 +381,9 @@ Zotero.CSL.prototype.preprocessItems = function(items) {
|
||||||
var item = items[i];
|
var item = items[i];
|
||||||
|
|
||||||
// handle subsequent author substitutes
|
// handle subsequent author substitutes
|
||||||
Zotero.debug(item.getField("title"));
|
|
||||||
if(item._csl.authors.length && lastAuthors) {
|
if(item._csl.authors.length && lastAuthors) {
|
||||||
var authorsAreSame = true;
|
var authorsAreSame = true;
|
||||||
for(var i=item._csl.authors.length-1; i>=0; i--) {
|
for(var i=item._csl.authors.length-1; i>=0; i--) {
|
||||||
Zotero.debug(i);
|
|
||||||
if(!lastAuthors[i] ||
|
if(!lastAuthors[i] ||
|
||||||
lastAuthors[i].firstName != item._csl.authors[i].firstName ||
|
lastAuthors[i].firstName != item._csl.authors[i].firstName ||
|
||||||
lastAuthors[i].lastName != item._csl.authors[i].lastName ||
|
lastAuthors[i].lastName != item._csl.authors[i].lastName ||
|
||||||
|
@ -721,7 +719,7 @@ Zotero.CSL.prototype._parseFields = function(ref, position, type, bibCitElement,
|
||||||
// create serialized representation
|
// create serialized representation
|
||||||
itemDesc._serialized = this._serializeElement(itemDesc.name, itemDesc);
|
itemDesc._serialized = this._serializeElement(itemDesc.name, itemDesc);
|
||||||
// add to serialization for type
|
// add to serialization for type
|
||||||
if(bibCitElement) {
|
if(bibCitElement && bibCitElement._serializations) {
|
||||||
bibCitElement._serializations[position][type][itemDesc._serialized] = itemDesc;
|
bibCitElement._serializations[position][type][itemDesc._serialized] = itemDesc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -802,9 +800,12 @@ Zotero.CSL.prototype._parseBibliographyOptions = function() {
|
||||||
// for classes, use the sort order that
|
// for classes, use the sort order that
|
||||||
if(algorithm == "author-date") {
|
if(algorithm == "author-date") {
|
||||||
this._bib.sortOrder = [this._getFieldDefaults("author"),
|
this._bib.sortOrder = [this._getFieldDefaults("author"),
|
||||||
this._getFieldDefaults("date")];
|
this._getFieldDefaults("date"),
|
||||||
|
this._getFieldDefaults("titles")];
|
||||||
this._bib.sortOrder[0].name = "author";
|
this._bib.sortOrder[0].name = "author";
|
||||||
|
this._bib.sortOrder[0]["name-as-sort-order"] = "all";
|
||||||
this._bib.sortOrder[1].name = "date";
|
this._bib.sortOrder[1].name = "date";
|
||||||
|
this._bib.sortOrder[2].name = "titles";
|
||||||
} else if(algorithm == "label") {
|
} else if(algorithm == "label") {
|
||||||
this._bib.sortOrder = [this._getFieldDefaults("label")];
|
this._bib.sortOrder = [this._getFieldDefaults("label")];
|
||||||
this._bib.sortOrder[0].name = "label";
|
this._bib.sortOrder[0].name = "label";
|
||||||
|
@ -813,7 +814,7 @@ Zotero.CSL.prototype._parseBibliographyOptions = function() {
|
||||||
this._bib.sortOrder[0].name = "cited";
|
this._bib.sortOrder[0].name = "cited";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this._bib.sortOrder = this._parseFields(bibliography.sort, "first", false, this._bib);
|
this._bib.sortOrder = this._parseFields(bibliography.sort.children(), "first", false, this._bib);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse et al
|
// parse et al
|
||||||
|
@ -992,17 +993,24 @@ Zotero.CSL.prototype._compareItem = function(a, b, opt) {
|
||||||
var sortElement = this._bib.sortOrder[i];
|
var sortElement = this._bib.sortOrder[i];
|
||||||
|
|
||||||
if(sortElement.name == "date") {
|
if(sortElement.name == "date") {
|
||||||
var bDate = b.getField("date");
|
var aValue = a.getField("date", true);
|
||||||
var aDate = a.getField("date");
|
var bValue = b.getField("date", true);
|
||||||
if(bDate > aDate) {
|
|
||||||
|
if(bValue == "" && aValue != "") {
|
||||||
return -1;
|
return -1;
|
||||||
} else if(bDate < aDate) {
|
} else if(aValue == "" && bValue != "") {
|
||||||
|
return 1;
|
||||||
|
} else if(bValue > aValue) {
|
||||||
|
return -1;
|
||||||
|
} else if(bValue < aValue) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var formattedStringA = new Zotero.CSL.FormattedString(this, "compare");
|
var formattedStringA = new Zotero.CSL.FormattedString(this, "compare");
|
||||||
var formattedStringB = new Zotero.CSL.FormattedString(this, "compare");
|
var formattedStringB = new Zotero.CSL.FormattedString(this, "compare");
|
||||||
|
|
||||||
|
//Zotero.debug('comparing '+sortElement.name+' on "'+a.getField("title")+'" and "'+b.getField("title")+'"');
|
||||||
|
|
||||||
this._getFieldValue(sortElement.name, sortElement, a,
|
this._getFieldValue(sortElement.name, sortElement, a,
|
||||||
formattedStringA, this._bib);
|
formattedStringA, this._bib);
|
||||||
this._getFieldValue(sortElement.name, sortElement, b,
|
this._getFieldValue(sortElement.name, sortElement, b,
|
||||||
|
@ -1010,6 +1018,7 @@ Zotero.CSL.prototype._compareItem = function(a, b, opt) {
|
||||||
|
|
||||||
var aValue = formattedStringA.get().toLowerCase();
|
var aValue = formattedStringA.get().toLowerCase();
|
||||||
var bValue = formattedStringB.get().toLowerCase();
|
var bValue = formattedStringB.get().toLowerCase();
|
||||||
|
//Zotero.debug(aValue+" vs "+bValue);
|
||||||
|
|
||||||
if(bValue > aValue) {
|
if(bValue > aValue) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1219,8 +1228,17 @@ Zotero.CSL.prototype._getFieldValue = function(name, element, item, formattedStr
|
||||||
} else if(element.relation == "event") {
|
} else if(element.relation == "event") {
|
||||||
string = item.getField("conferenceName");
|
string = item.getField("conferenceName");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
// if comparing, drop "a" or "the" from title
|
||||||
|
if(formattedString.format == "compare" && string.length > 1) {
|
||||||
|
if(string.substr(0, 2).toLowerCase() == "a ") {
|
||||||
|
string = string.substr(2);
|
||||||
|
} else if(string.length > 3 && string.substr(0, 4).toLowerCase() == "the ") {
|
||||||
|
string = string.substr(4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(string) {
|
if(string) {
|
||||||
data.append(string, child);
|
data.append(string, child);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user