Fix parsing of CSL date fields in extractExtraField()

This commit is contained in:
Dan Stillman 2020-03-02 01:34:27 -05:00
parent 78b5dbaca1
commit 83cc65eea6
2 changed files with 20 additions and 1 deletions

View file

@ -972,7 +972,9 @@ Zotero.Utilities.Internal = {
for (let cslVar in map) {
let normalized = this._normalizeExtraKey(cslVar);
let existing = fieldNames.get(normalized) || [];
fieldNames.set(normalized, new Set([...existing, ...map[cslVar]]));
// Text fields are one-to-many; date fields are one-to-one
let additional = Array.isArray(map[cslVar]) ? map[cslVar] : [map[cslVar]];
fieldNames.set(normalized, new Set([...existing, ...additional]));
}
}

View file

@ -215,6 +215,14 @@ describe("Zotero.Utilities.Internal", function () {
assert.equal(creators[0].name, 'Bar');
});
it("should extract a CSL date field", function () {
var str = 'issued: 2000';
var { fields, extra } = Zotero.Utilities.Internal.extractExtraFields(str);
assert.equal(fields.size, 1);
assert.equal(fields.get('date'), 2000);
assert.strictEqual(extra, '');
});
it("should extract a CSL name", function () {
var str = 'container-author: First || Last';
var { creators, extra } = Zotero.Utilities.Internal.extractExtraFields(str);
@ -243,6 +251,15 @@ describe("Zotero.Utilities.Internal", function () {
assert.lengthOf(creators, 0);
assert.strictEqual(extra, str);
});
it("should extract the citeproc-js cheater syntax", function () {
var issued = '{:number-of-pages:11}\n{:issued:2014}';
var { fields, extra } = Zotero.Utilities.Internal.extractExtraFields(issued);
assert.equal(fields.size, 2);
assert.equal(fields.get('numPages'), 11);
assert.equal(fields.get('date'), 2014);
assert.strictEqual(extra, '');
});
});
describe("#combineExtraFields", function () {