Update typeSchemaData and builder script (#2576)
This commit is contained in:
parent
fe14ee79a3
commit
5196ba379b
3 changed files with 89 additions and 90 deletions
|
@ -6,94 +6,6 @@
|
||||||
<p>This script builds typeSchemaData.js, which contains Zotero schema information for the connector.</p>
|
<p>This script builds typeSchemaData.js, which contains Zotero schema information for the connector.</p>
|
||||||
<p id="result"></p>
|
<p id="result"></p>
|
||||||
<script src="../include.js"></script>
|
<script src="../include.js"></script>
|
||||||
<script type="text/javascript">
|
<script src="build_typeSchemaData.js"></script>
|
||||||
import FilePicker from 'zotero/modules/filePicker';
|
|
||||||
|
|
||||||
(async function () {
|
|
||||||
// Create schema
|
|
||||||
var schema = {"itemTypes":{}, "creatorTypes":{}, "fields":{}};
|
|
||||||
var types = Zotero.ItemTypes.getTypes();
|
|
||||||
|
|
||||||
var fieldIDs = await Zotero.DB.columnQueryAsync("SELECT fieldID FROM fieldsCombined");
|
|
||||||
var baseMappedFields = Zotero.ItemFields.getBaseMappedFields();
|
|
||||||
|
|
||||||
for (let fieldID of fieldIDs) {
|
|
||||||
var fieldObj = [/* name */Zotero.ItemFields.getName(fieldID)];
|
|
||||||
try {
|
|
||||||
// localizedString
|
|
||||||
let str = Zotero.getString("itemFields." + fieldObj.name);
|
|
||||||
if (str == "itemFields." + fieldObj.name) {
|
|
||||||
// Use name for localizedString
|
|
||||||
str = fieldObj[0];
|
|
||||||
}
|
|
||||||
fieldObj.push(str);
|
|
||||||
} catch(e) {
|
|
||||||
fieldObj.push(/* name -> localizedString */fieldObj[0]);
|
|
||||||
}
|
|
||||||
fieldObj.push(/* isBaseField */ !baseMappedFields.includes(fieldID));
|
|
||||||
schema.fields[fieldID] = fieldObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
// names, localizedStrings, creatorTypes, and fields for each item type
|
|
||||||
for (let type of types) {
|
|
||||||
var fieldIDs = Zotero.ItemFields.getItemTypeFields(type.id);
|
|
||||||
var baseFields = {};
|
|
||||||
for (let fieldID of fieldIDs) {
|
|
||||||
if (baseMappedFields.includes(fieldID)) {
|
|
||||||
baseFields[fieldID] = Zotero.ItemFields.getBaseIDFromTypeAndField(type.id, fieldID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var icon = Zotero.ItemTypes.getImageSrc(type.name);
|
|
||||||
icon = icon.substr(icon.lastIndexOf("/")+1);
|
|
||||||
|
|
||||||
try {
|
|
||||||
var creatorTypes = Zotero.CreatorTypes.getTypesForItemType(type.id).map((creatorType) => creatorType.id);
|
|
||||||
} catch (e) {
|
|
||||||
creatorTypes = [];
|
|
||||||
}
|
|
||||||
var primaryCreatorType = Zotero.CreatorTypes.getPrimaryIDForType(type.id);
|
|
||||||
if(creatorTypes[0] != primaryCreatorType) {
|
|
||||||
creatorTypes.splice(creatorTypes.indexOf(primaryCreatorType), 1);
|
|
||||||
creatorTypes.unshift(primaryCreatorType);
|
|
||||||
}
|
|
||||||
|
|
||||||
schema.itemTypes[type.id] = [
|
|
||||||
/* name */type.name,
|
|
||||||
/* localizedString */Zotero.ItemTypes.getLocalizedString(type.name),
|
|
||||||
/* creatorTypes */creatorTypes,
|
|
||||||
/* fields */ fieldIDs,
|
|
||||||
/* baseFields */baseFields,
|
|
||||||
/* icon */icon
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
var types = Zotero.CreatorTypes.getTypes();
|
|
||||||
for (let type of types) {
|
|
||||||
schema.creatorTypes[type.id] = [
|
|
||||||
/* name */type.name,
|
|
||||||
/* localizedString */Zotero.CreatorTypes.getLocalizedString(type.name)
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write to file
|
|
||||||
var fp = new FilePicker();
|
|
||||||
fp.init(window, Zotero.getString('dataDir.selectDir'), fp.modeGetFolder);
|
|
||||||
|
|
||||||
let resultElem = document.getElementById('result');
|
|
||||||
if (await fp.show() != fp.returnOK) {
|
|
||||||
result.innerHTML = '<p>Failed.</p>';
|
|
||||||
} else {
|
|
||||||
let schemaFile = fp.file;
|
|
||||||
schemaFile.append("connectorTypeSchemaData.js");
|
|
||||||
await Zotero.File.putContentsAsync(
|
|
||||||
schemaFile,
|
|
||||||
`Zotero.Connector_Types.schema = ${JSON.stringify(schema)}`
|
|
||||||
);
|
|
||||||
result.innerHTML = `<p>Wrote ${schemaFile} successfully.</p>`;
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
87
chrome/content/zotero/tools/build_typeSchemaData.js
Normal file
87
chrome/content/zotero/tools/build_typeSchemaData.js
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
import FilePicker from 'zotero/modules/filePicker';
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
// Create schema
|
||||||
|
var schema = {"itemTypes":{}, "creatorTypes":{}, "fields":{}};
|
||||||
|
var types = Zotero.ItemTypes.getTypes();
|
||||||
|
|
||||||
|
var fieldIDs = await Zotero.DB.columnQueryAsync("SELECT fieldID FROM fieldsCombined");
|
||||||
|
var baseMappedFields = Zotero.ItemFields.getBaseMappedFields();
|
||||||
|
|
||||||
|
for (let fieldID of fieldIDs) {
|
||||||
|
var fieldObj = [/* name */Zotero.ItemFields.getName(fieldID)];
|
||||||
|
try {
|
||||||
|
// localizedString
|
||||||
|
let str = Zotero.getString("itemFields." + fieldObj.name);
|
||||||
|
if (str == "itemFields." + fieldObj.name) {
|
||||||
|
// Use name for localizedString
|
||||||
|
str = fieldObj[0];
|
||||||
|
}
|
||||||
|
fieldObj.push(str);
|
||||||
|
} catch(e) {
|
||||||
|
fieldObj.push(/* name -> localizedString */fieldObj[0]);
|
||||||
|
}
|
||||||
|
fieldObj.push(/* isBaseField */ !baseMappedFields.includes(fieldID));
|
||||||
|
schema.fields[fieldID] = fieldObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
// names, localizedStrings, creatorTypes, and fields for each item type
|
||||||
|
for (let type of types) {
|
||||||
|
var fieldIDs = Zotero.ItemFields.getItemTypeFields(type.id);
|
||||||
|
var baseFields = {};
|
||||||
|
for (let fieldID of fieldIDs) {
|
||||||
|
if (baseMappedFields.includes(fieldID)) {
|
||||||
|
baseFields[fieldID] = Zotero.ItemFields.getBaseIDFromTypeAndField(type.id, fieldID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var icon = Zotero.ItemTypes.getImageSrc(type.name);
|
||||||
|
icon = icon.substr(icon.lastIndexOf("/")+1);
|
||||||
|
|
||||||
|
try {
|
||||||
|
var creatorTypes = Zotero.CreatorTypes.getTypesForItemType(type.id).map((creatorType) => creatorType.id);
|
||||||
|
} catch (e) {
|
||||||
|
creatorTypes = [];
|
||||||
|
}
|
||||||
|
var primaryCreatorType = Zotero.CreatorTypes.getPrimaryIDForType(type.id);
|
||||||
|
if(creatorTypes[0] != primaryCreatorType) {
|
||||||
|
creatorTypes.splice(creatorTypes.indexOf(primaryCreatorType), 1);
|
||||||
|
creatorTypes.unshift(primaryCreatorType);
|
||||||
|
}
|
||||||
|
|
||||||
|
schema.itemTypes[type.id] = [
|
||||||
|
/* name */type.name,
|
||||||
|
/* localizedString */Zotero.ItemTypes.getLocalizedString(type.name),
|
||||||
|
/* creatorTypes */creatorTypes,
|
||||||
|
/* fields */ fieldIDs,
|
||||||
|
/* baseFields */baseFields,
|
||||||
|
/* icon */icon
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var types = Zotero.CreatorTypes.getTypes();
|
||||||
|
for (let type of types) {
|
||||||
|
schema.creatorTypes[type.id] = [
|
||||||
|
/* name */type.name,
|
||||||
|
/* localizedString */Zotero.CreatorTypes.getLocalizedString(type.name)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write to file
|
||||||
|
var fp = new FilePicker();
|
||||||
|
fp.init(window, Zotero.getString('dataDir.selectDir'), fp.modeGetFolder);
|
||||||
|
|
||||||
|
let resultElem = document.getElementById('result');
|
||||||
|
if (await fp.show() != fp.returnOK) {
|
||||||
|
resultElem.innerHTML = '<p>Failed.</p>';
|
||||||
|
} else {
|
||||||
|
let schemaFile = Zotero.File.pathToFile(fp.file);
|
||||||
|
schemaFile.append("connectorTypeSchemaData.js");
|
||||||
|
await Zotero.File.putContentsAsync(
|
||||||
|
schemaFile,
|
||||||
|
`Zotero.Connector_Types.schema = ${JSON.stringify(schema)}`
|
||||||
|
);
|
||||||
|
resultElem.innerHTML = `<p>Wrote ${schemaFile} successfully.</p>`;
|
||||||
|
}
|
||||||
|
})();
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue