parent
80d5b74cf3
commit
7eaa57562f
2 changed files with 50 additions and 6 deletions
|
@ -36,6 +36,7 @@ Zotero.ItemFields = new function() {
|
||||||
var _baseMappedFields = [];
|
var _baseMappedFields = [];
|
||||||
var _typeFieldIDsByBase = {};
|
var _typeFieldIDsByBase = {};
|
||||||
var _typeFieldNamesByBase = {};
|
var _typeFieldNamesByBase = {};
|
||||||
|
var _baseFieldIDsByTypeAndField = {};
|
||||||
|
|
||||||
// Privileged methods
|
// Privileged methods
|
||||||
this.getName = getName;
|
this.getName = getName;
|
||||||
|
@ -288,13 +289,13 @@ Zotero.ItemFields = new function() {
|
||||||
var typeFieldID = this.getID(typeField);
|
var typeFieldID = this.getID(typeField);
|
||||||
|
|
||||||
if (!itemTypeID) {
|
if (!itemTypeID) {
|
||||||
throw ("Invalid item type '" + itemType + "' in ItemFields.getBaseIDFromTypeAndField()");
|
throw new Error("Invalid item type '" + itemType + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
_fieldCheck(typeField, 'getBaseIDFromTypeAndField');
|
_fieldCheck(typeField, 'getBaseIDFromTypeAndField');
|
||||||
|
|
||||||
if (!this.isValidForType(typeFieldID, itemTypeID)) {
|
if (!this.isValidForType(typeFieldID, itemTypeID)) {
|
||||||
throw ("'" + typeField + "' is not a valid field for '" + itemType + "' in ItemFields.getBaseIDFromTypeAndField()");
|
throw new Error("'" + typeField + "' is not a valid field for '" + itemType + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
// If typeField is already a base field, just return that
|
// If typeField is already a base field, just return that
|
||||||
|
@ -302,8 +303,8 @@ Zotero.ItemFields = new function() {
|
||||||
return typeFieldID;
|
return typeFieldID;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Zotero.DB.valueQuery("SELECT baseFieldID FROM baseFieldMappingsCombined "
|
if (!_baseFieldIDsByTypeAndField[itemTypeID]) return false;
|
||||||
+ "WHERE itemTypeID=? AND fieldID=?", [itemTypeID, typeFieldID]);
|
return _baseFieldIDsByTypeAndField[itemTypeID][typeFieldID] || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -466,16 +467,25 @@ Zotero.ItemFields = new function() {
|
||||||
}
|
}
|
||||||
_baseTypeFields = fields;
|
_baseTypeFields = fields;
|
||||||
|
|
||||||
var sql = "SELECT baseFieldID, fieldID, fieldName "
|
var sql = "SELECT itemTypeID, baseFieldID, fieldID, fieldName "
|
||||||
+ "FROM baseFieldMappingsCombined JOIN fieldsCombined USING (fieldID)";
|
+ "FROM baseFieldMappingsCombined JOIN fieldsCombined USING (fieldID)";
|
||||||
var rows = yield Zotero.DB.queryAsync(sql);
|
var rows = yield Zotero.DB.queryAsync(sql);
|
||||||
for each(var row in rows) {
|
for (let i = 0; i < rows.length; i++) {
|
||||||
|
let row = rows[i];
|
||||||
|
// Type fields by base
|
||||||
if (!_typeFieldIDsByBase[row['baseFieldID']]) {
|
if (!_typeFieldIDsByBase[row['baseFieldID']]) {
|
||||||
_typeFieldIDsByBase[row['baseFieldID']] = [];
|
_typeFieldIDsByBase[row['baseFieldID']] = [];
|
||||||
_typeFieldNamesByBase[row['baseFieldID']] = [];
|
_typeFieldNamesByBase[row['baseFieldID']] = [];
|
||||||
}
|
}
|
||||||
_typeFieldIDsByBase[row['baseFieldID']].push(row['fieldID']);
|
_typeFieldIDsByBase[row['baseFieldID']].push(row['fieldID']);
|
||||||
_typeFieldNamesByBase[row['baseFieldID']].push(row['fieldName']);
|
_typeFieldNamesByBase[row['baseFieldID']].push(row['fieldName']);
|
||||||
|
|
||||||
|
// Base fields by type and field
|
||||||
|
if (!_baseFieldIDsByTypeAndField[row.itemTypeID]) {
|
||||||
|
_baseFieldIDsByTypeAndField[row.itemTypeID] = {};
|
||||||
|
}
|
||||||
|
_baseFieldIDsByTypeAndField[row.itemTypeID][row.fieldID] = row.baseFieldID;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all fields mapped to base types
|
// Get all fields mapped to base types
|
||||||
|
|
34
test/tests/itemFieldsTest.js
Normal file
34
test/tests/itemFieldsTest.js
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
describe("Zotero.ItemFields", function () {
|
||||||
|
describe("#getBaseIDFromTypeAndField()", function () {
|
||||||
|
it("should return the base field id for an item type and base-mapped field", function* () {
|
||||||
|
assert.equal(
|
||||||
|
Zotero.ItemFields.getBaseIDFromTypeAndField('audioRecording', 'label'),
|
||||||
|
Zotero.ItemFields.getID('publisher')
|
||||||
|
);
|
||||||
|
|
||||||
|
// Accept ids too
|
||||||
|
assert.equal(
|
||||||
|
Zotero.ItemFields.getBaseIDFromTypeAndField(
|
||||||
|
Zotero.ItemTypes.getID('audioRecording'),
|
||||||
|
Zotero.ItemFields.getID('label')
|
||||||
|
),
|
||||||
|
Zotero.ItemFields.getID('publisher')
|
||||||
|
);
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return the base field id for an item type and base field", function* () {
|
||||||
|
assert.equal(
|
||||||
|
Zotero.ItemFields.getBaseIDFromTypeAndField('book', 'publisher'),
|
||||||
|
Zotero.ItemFields.getID('publisher')
|
||||||
|
);
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should return false for an item type and non-base-mapped field", function* () {
|
||||||
|
assert.isFalse(
|
||||||
|
Zotero.ItemFields.getBaseIDFromTypeAndField('audioRecording', 'runningTime')
|
||||||
|
);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
Add table
Add a link
Reference in a new issue