diff --git a/system/scripts/importer/importer-dialog.js b/system/scripts/importer/importer-dialog.js
deleted file mode 100644
index 322e577..0000000
--- a/system/scripts/importer/importer-dialog.js
+++ /dev/null
@@ -1,362 +0,0 @@
-/**
- * Import Compendium from raw csv text
- */
-export class ImporterL5r5e extends FormApplication {
- /**
- * Selected compendium
- * @private
- */
- _selectedCompendium = {
- name: "",
- type: "",
- };
-
- /**
- * Importable compendiums list (unlocked only)
- * @private
- */
- _compendiumsList = [];
-
- /**
- * Assign the default options
- * @override
- */
- static get defaultOptions() {
- return mergeObject(super.defaultOptions, {
- id: "l5r5e-importer-dialog",
- classes: ["l5r5e", "importer-dialog"],
- template: CONFIG.l5r5e.paths.templates + "importer/importer-dialog.html",
- title: "L5R Import",
- width: 400,
- height: 660,
- resizable: true,
- });
- }
-
- /**
- * Create dialog
- */
- constructor(options = null) {
- super(options);
- this._loadCompendiumsList();
- this._selectCompendiumByName(this._compendiumsList[0]?.collection);
- }
-
- /**
- * Load compendiums list (unlocked only)
- * @private
- */
- _loadCompendiumsList() {
- const packs = game.packs.filter((p) => {
- return p.locked === false && ["Item", "Actor"].includes(p.metadata.entity);
- });
- if (packs.length < 1) {
- return [];
- }
- packs.sort((a, b) => a.collection.localeCompare(b.collection));
- this._compendiumsList = packs;
- }
-
- /**
- * Select a compendium and type by name
- * @private
- */
- _selectCompendiumByName(name) {
- if (name == null) {
- return;
- }
- this._selectedCompendium = {
- name: name,
- type: this._compendiumsList.find((e) => e.collection === name).entity,
- };
- }
-
- /**
- * Construct and return the data object used to render the HTML template for this form application.
- * @param options
- * @return {Object}
- */
- getData(options = null) {
- return {
- data: {
- selectedCompendium: this._selectedCompendium,
- compendiumList: this._compendiumsList,
- typesList: {
- Item: ["item", "armor", "weapon", "technique", "property", "peculiarity", "advancement"],
- Actor: ["character", "npc"],
- },
- },
- };
- }
-
- /**
- * Render the dialog
- * @param force
- * @param options
- * @returns {Application}
- */
- render(force, options) {
- // GM only
- if (!game.user.isGM) {
- return;
- }
-
- options = {
- ...options,
- };
-
- if (force === undefined) {
- force = true;
- }
-
- return super.render(force, options);
- }
-
- /**
- * Listen to html elements
- * @override
- */
- activateListeners(html) {
- super.activateListeners(html);
-
- html.find("#l5r5e-import-cn").on("change", async (event) => {
- this._selectCompendiumByName(event.target.value);
- this.render(false);
- });
- }
-
- /**
- * This method is called upon form submission after form data is validated
- * @param event The initial triggering submission event
- * @param formData The object of validated form data with which to update the object
- * @returns A Promise which resolves once the update operation has completed
- * @override
- */
- async _updateObject(event, formData) {
- await this.import(
- formData.compendiumName,
- formData.importType,
- formData.importLang,
- formData.importDesc,
- formData.rawtext,
- formData.separator
- );
- }
-
- /**
- * Main function for importing
- *
- * @param {String} compendiumName CompendiumCollection name
- * @param {String} importType Item type (armor, character...)
- * @param {String} rawText Text to import
- * @param {String} separator Separator text/character ";", "|"...
- */
- async import(compendiumName, importType, importLang, importDesc, rawText, separator) {
- try {
- if (!rawText || /^\s*$/.test(rawText)) {
- throw "RawText is empty";
- }
- if (!importType) {
- throw "ImportType is empty";
- }
- if (!importLang) {
- throw "importLang is empty";
- }
- if (!importDesc) {
- throw "importDesc is empty";
- }
- if (!separator) {
- throw "Separator is empty";
- }
- if (!separator.indexOf(rawText) < 0) {
- throw "Separator was not found in RawText";
- }
-
- // Find the target compendium
- const targetCompendium = await game.packs.find((p) => p.collection === compendiumName);
- if (targetCompendium == null) {
- throw "Could not find compendium with the name " + compendiumName;
- }
-
- // useful props
- const targetEntity = targetCompendium.metadata.entity;
- // const targetSystem = targetCompendium.metadata.system;
-
- // console.log('ImporterL5r5e | ', targetCompendium, targetEntity, importType, importLang, importDesc, separator); return;
-
- // Parse data
- let entitiesList = [];
- const linesList = rawText.match(/[^\r\n]+/g);
- for (let sCurrLine of linesList) {
- sCurrLine = sCurrLine.trim();
- if (sCurrLine) {
- let aRows = this._line2Row(sCurrLine, separator);
- let oEntity = this._template(targetEntity, importType, importLang, importDesc, aRows);
-
- if (oEntity) {
- entitiesList.push(oEntity);
- } else {
- console.warn(`ImporterL5r5e | wrong format for `, sCurrLine);
- }
- }
- } //fr linesList
-
- if (entitiesList.length < 1) {
- throw "entitiesList is empty";
- }
-
- // Create temporary Actor entities which impose structure on the imported data
- let entities;
- switch (targetEntity) {
- case "Item":
- entities = await Item.create(entitiesList, { temporary: true });
- break;
-
- case "Actor":
- entities = await Actor.create(entitiesList, { temporary: true });
- break;
-
- default:
- console.error("ImporterL5r5e | Unknown/unsupported TargetEntity " + targetEntity);
- return;
- } //swi
-
- if (entitiesList.length === 1) {
- entities = [entities];
- }
- if (entities.length < 1) {
- throw "entities is empty";
- }
-
- // Save each temporary entity into the Compendium pack
- for (let entity of entities) {
- await targetCompendium.importEntity(entity);
- //console.log(`ImporterL5r5e | Imported entity ${entity.name} into Compendium pack ${targetCompendium.collection}`);
- } //fr
-
- //console.log(`ImporterL5r5e | Finished importing ${entities.length} entitie(s) into Compendium pack ${targetCompendium.collection}`);
- new Dialog({
- title: `ImporterL5r5e | Job finished`,
- content: `Finished importing ${entities.length} entitie(s) into Compendium pack ${targetCompendium.collection}`,
- buttons: {
- ok: {
- label: "Ok",
- },
- },
- default: "ok",
- }).render(true);
- } catch (sEx) {
- console.error(sEx);
-
- new Dialog({
- title: `ImporterL5r5e | Job error`,
- content: sEx,
- buttons: {
- ok: {
- label: "Ok",
- },
- },
- default: "ok",
- }).render(true);
- }
- }
-
- /**
- * Split and sanitize one line
- *
- * @param {String} str Text
- * @param {String} separator Text separator
- * @returns {String}
- */
- _line2Row(str, separator) {
- if (separator === "]") {
- separator = "\\]";
- }
- if (separator === "|") {
- separator = "|";
- }
- if (separator === "\\") {
- separator = "\\\\";
- }
- return str
- .replace(new RegExp("^[" + separator + "]+|[" + separator + "]+$", "g"), "") // clean boundary separator
- .replace(new RegExp("([\\S]+)[\\s]*[\\\\]{2}[\\s]*([\\S]+)", "g"), "$1
$2") // "\\" -> "br"
- .split(separator)
- .map((s) => s.trim());
- }
-
- /**
- * Basic conversion to L5R5e template
- *
- * @param {String} targetEntity Entity Type (Item, Actor...)
- * @param {String} importType Import type for Items (edges, skills...)
- * @param {String} importLang Language en,fr
- * @param {String} importDesc Desc full|light
- * @param {String[]} rows Data's array
- * @returns {Object}
- */
- _template(targetEntity, importType, importLang, importDesc, rows) {
- const isEng = importLang === "en";
- const isLight = importDesc === "light";
-
- switch (targetEntity) {
- case "Item":
- // Subtypes of Item
- switch (importType) {
- case "item":
- return {
- name: rows[isEng ? 1 : 0],
- img: rows[10] || "systems/l5r5e/assets/icons/fire.svg",
- permission: {
- default: 0,
- },
- type: "item",
- data: {
- equipped: false,
- quantity: 1,
- weight: rows[3] || 0,
- rarity: rows[2] || 0,
- zeni: rows[4] || 0,
- properties: ImporterL5r5e._formatProperties(rows[5]),
- description: ImporterL5r5e._formatDescription(
- rows[isEng ? (isLight ? 8 : 9) : isLight ? 6 : 7]
- ),
- },
- };
- }
- break;
-
- case "Actor":
- // Subtypes of Actor
- switch (importType) {
- case "character":
- case "npc":
- }
- break;
- }
-
- console.error(`ImporterL5r5e | Unknown/unsupported ${targetEntity} ImportType : ${importType}`);
- }
-
- /**
- * Basic Description formatting
- *
- * @param {String} str Text
- * @returns {String}
- */
- static _formatDescription(str) {
- if (undefined === str) {
- return null;
- }
- return "
" + str.replace(new RegExp("
", "g"), "
") + "
"; - } - - /** - * explode and get properties by name, store theirs ids - * @private - */ - static _formatProperties(str) { - // TODO explode and get properties by name, store theirs ids - return str; - } -} //cls diff --git a/system/scripts/main-l5r5e.js b/system/scripts/main-l5r5e.js index e526db3..1f7601e 100644 --- a/system/scripts/main-l5r5e.js +++ b/system/scripts/main-l5r5e.js @@ -3,7 +3,6 @@ import { L5R5E } from "./config.js"; import { HelpersL5r5e } from "./helpers.js"; import { RegisterSettings } from "./settings.js"; import { PreloadTemplates } from "./preloadTemplates.js"; -import { ImporterL5r5e } from "./importer/importer-dialog.js"; // Actors import { ActorL5r5e } from "./actor.js"; import { CharacterSheetL5r5e } from "./actors/character-sheet.js"; @@ -57,7 +56,6 @@ Hooks.once("init", async function () { game.l5r5e = { HelpersL5r5e, DicePickerDialog, - ImporterL5r5e, }; // Register custom system settings diff --git a/system/templates/importer/importer-dialog.html b/system/templates/importer/importer-dialog.html deleted file mode 100644 index 4eef0f0..0000000 --- a/system/templates/importer/importer-dialog.html +++ /dev/null @@ -1,67 +0,0 @@ - \ No newline at end of file