build_typeSchemaData.html (3074B)
1 <html> 2 <head> 3 <title>Build schemaData.js</title> 4 </head> 5 <body> 6 <p>This script builds typeSchemaData.js, which contains Zotero schema information for the connector.</p> 7 <p id="result"></p> 8 <script src="../include.js"></script> 9 <script type="text/javascript"> 10 Zotero.Promise.coroutine(function* (){ 11 // Create schema 12 var schema = {"itemTypes":{}, "creatorTypes":{}, "fields":{}}; 13 var types = Zotero.ItemTypes.getTypes(); 14 15 var fieldIDs = yield Zotero.DB.columnQueryAsync("SELECT fieldID FROM fieldsCombined"); 16 var baseMappedFields = Zotero.ItemFields.getBaseMappedFields(); 17 18 for (let fieldID of fieldIDs) { 19 var fieldObj = [/* name */Zotero.ItemFields.getName(fieldID)]; 20 try { 21 fieldObj.push(/* localizedString */Zotero.getString("itemFields." + fieldObj.name)); 22 } catch(e) { 23 fieldObj.push(/* name -> localizedString */fieldObj[0]); 24 } 25 fieldObj.push(/* isBaseField */ !baseMappedFields.includes(fieldID)); 26 schema.fields[fieldID] = fieldObj; 27 } 28 29 // names, localizedStrings, creatorTypes, and fields for each item type 30 for (let type of types) { 31 var fieldIDs = Zotero.ItemFields.getItemTypeFields(type.id); 32 var baseFields = {}; 33 for (let fieldID of fieldIDs) { 34 if (baseMappedFields.includes(fieldID)) { 35 baseFields[fieldID] = Zotero.ItemFields.getBaseIDFromTypeAndField(type.id, fieldID); 36 } 37 } 38 39 var icon = Zotero.ItemTypes.getImageSrc(type.name); 40 icon = icon.substr(icon.lastIndexOf("/")+1); 41 42 try { 43 var creatorTypes = Zotero.CreatorTypes.getTypesForItemType(type.id).map((creatorType) => creatorType.id); 44 } catch (e) { 45 creatorTypes = []; 46 } 47 var primaryCreatorType = Zotero.CreatorTypes.getPrimaryIDForType(type.id); 48 if(creatorTypes[0] != primaryCreatorType) { 49 creatorTypes.splice(creatorTypes.indexOf(primaryCreatorType), 1); 50 creatorTypes.unshift(primaryCreatorType); 51 } 52 53 schema.itemTypes[type.id] = [ 54 /* name */type.name, 55 /* localizedString */Zotero.ItemTypes.getLocalizedString(type.name), 56 /* creatorTypes */creatorTypes, 57 /* fields */ fieldIDs, 58 /* baseFields */baseFields, 59 /* icon */icon 60 ]; 61 62 } 63 64 var types = Zotero.CreatorTypes.getTypes(); 65 for (let type of types) { 66 schema.creatorTypes[type.id] = [ 67 /* name */type.name, 68 /* localizedString */Zotero.CreatorTypes.getLocalizedString(type.name) 69 ]; 70 } 71 72 // Write to file 73 var nsIFilePicker = Components.interfaces.nsIFilePicker; 74 var fp = Components.classes["@mozilla.org/filepicker;1"] 75 .createInstance(nsIFilePicker); 76 fp.init(window, Zotero.getString('dataDir.selectDir'), nsIFilePicker.modeGetFolder); 77 78 let resultElem = document.getElementById('result'); 79 if (fp.show() != nsIFilePicker.returnOK) { 80 result.innerHTML = '<p>Failed.</p>'; 81 } else { 82 let schemaFile = fp.file; 83 schemaFile.append("connectorTypeSchemaData.js"); 84 Zotero.File.putContents(schemaFile, `Zotero.Connector_Types.schema = ${JSON.stringify(schema)}`); 85 result.innerHTML = `<p>Wrote ${schemaFile.path} successfully.</p>`; 86 } 87 })(); 88 </script> 89 </body> 90 </html>