www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

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>