Add equipment planner toolbox module
All checks were successful
Deploy Sokko G / deploy (push) Successful in 7s

This commit is contained in:
Shinuwa 2026-08-09 10:03:55 +02:00
parent ac33a55c8b
commit d53d4160af
33 changed files with 3522 additions and 20 deletions

View file

@ -332,6 +332,73 @@ export function validateSiteContent(site) {
"toolboxes.modules.taskPlanner.prerequisiteCheckboxLabel",
"toolboxes.modules.taskPlanner.removeRelationTitle",
"toolboxes.modules.taskPlanner.emptyTasks",
"toolboxes.modules.equipmentPlanner.typePlaceholder",
"toolboxes.modules.equipmentPlanner.equipmentIconLabel",
"toolboxes.modules.equipmentPlanner.equipmentPlaceholder",
"toolboxes.modules.equipmentPlanner.addEquipmentButton",
"toolboxes.modules.equipmentPlanner.summaryTitle",
"toolboxes.modules.equipmentPlanner.activeEquipmentsSingular",
"toolboxes.modules.equipmentPlanner.activeEquipmentsPlural",
"toolboxes.modules.equipmentPlanner.numericTotalsTitle",
"toolboxes.modules.equipmentPlanner.equipmentTotalsTitle",
"toolboxes.modules.equipmentPlanner.socketTotalsTitle",
"toolboxes.modules.equipmentPlanner.mixedTotalsTitle",
"toolboxes.modules.equipmentPlanner.summaryTooltipTitle",
"toolboxes.modules.equipmentPlanner.textBonusesTitle",
"toolboxes.modules.equipmentPlanner.emptyTotals",
"toolboxes.modules.equipmentPlanner.emptyTextBonuses",
"toolboxes.modules.equipmentPlanner.emptyEquipments",
"toolboxes.modules.equipmentPlanner.activeLabel",
"toolboxes.modules.equipmentPlanner.includeInSummaryLabel",
"toolboxes.modules.equipmentPlanner.reorderTypeTitle",
"toolboxes.modules.equipmentPlanner.renameTypeTitle",
"toolboxes.modules.equipmentPlanner.showTypeTitle",
"toolboxes.modules.equipmentPlanner.hideTypeTitle",
"toolboxes.modules.equipmentPlanner.reorderEquipmentTitle",
"toolboxes.modules.equipmentPlanner.renameEquipmentTitle",
"toolboxes.modules.equipmentPlanner.showDetailsTitle",
"toolboxes.modules.equipmentPlanner.hideDetailsTitle",
"toolboxes.modules.equipmentPlanner.deleteEquipmentTitle",
"toolboxes.modules.equipmentPlanner.tabsLabel",
"toolboxes.modules.equipmentPlanner.statsTab",
"toolboxes.modules.equipmentPlanner.socketsTab",
"toolboxes.modules.equipmentPlanner.craftTab",
"toolboxes.modules.equipmentPlanner.displayStatsTitle",
"toolboxes.modules.equipmentPlanner.displaySocketTitle",
"toolboxes.modules.equipmentPlanner.editModeTitle",
"toolboxes.modules.equipmentPlanner.viewModeTitle",
"toolboxes.modules.equipmentPlanner.editModeButton",
"toolboxes.modules.equipmentPlanner.viewModeButton",
"toolboxes.modules.equipmentPlanner.obtainLabel",
"toolboxes.modules.equipmentPlanner.obtainPlaceholder",
"toolboxes.modules.equipmentPlanner.emptyObtain",
"toolboxes.modules.equipmentPlanner.characteristicsTitle",
"toolboxes.modules.equipmentPlanner.traitIconLabel",
"toolboxes.modules.equipmentPlanner.categoryPlaceholder",
"toolboxes.modules.equipmentPlanner.traitNamePlaceholder",
"toolboxes.modules.equipmentPlanner.traitValuePlaceholder",
"toolboxes.modules.equipmentPlanner.addTraitButton",
"toolboxes.modules.equipmentPlanner.reorderTraitTitle",
"toolboxes.modules.equipmentPlanner.reorderCategoryTitle",
"toolboxes.modules.equipmentPlanner.deleteTraitTitle",
"toolboxes.modules.equipmentPlanner.emptyCharacteristics",
"toolboxes.modules.equipmentPlanner.materialsTitle",
"toolboxes.modules.equipmentPlanner.materialNamePlaceholder",
"toolboxes.modules.equipmentPlanner.materialQtyLabel",
"toolboxes.modules.equipmentPlanner.addMaterialButton",
"toolboxes.modules.equipmentPlanner.deleteMaterialTitle",
"toolboxes.modules.equipmentPlanner.socketItemsTitle",
"toolboxes.modules.equipmentPlanner.emptySocketItems",
"toolboxes.modules.equipmentPlanner.socketNamePlaceholder",
"toolboxes.modules.equipmentPlanner.socketShapeLabel",
"toolboxes.modules.equipmentPlanner.socketColorLabel",
"toolboxes.modules.equipmentPlanner.addSocketButton",
"toolboxes.modules.equipmentPlanner.bonusNamePlaceholder",
"toolboxes.modules.equipmentPlanner.addBonusButton",
"toolboxes.modules.equipmentPlanner.deleteSocketTitle",
"toolboxes.modules.equipmentPlanner.deleteBonusTitle",
"toolboxes.modules.equipmentPlanner.addSocketLinkLabel",
"toolboxes.modules.equipmentPlanner.deleteSocketLinkTitle",
"toolboxes.modules.imageAnnotation.addImage",
"toolboxes.modules.imageAnnotation.replaceImage",
"toolboxes.modules.imageAnnotation.pastePlaceholder",
@ -432,7 +499,7 @@ export function validateLibraryData(payload) {
assert.equal(typeof payload.modules[module.id], "object", `library.modules.${module.id} must be an object`);
});
["notepad", "checklist", "images", "links", "counters", "combos", "calculator", "table", "timer", "taskPlanner", "imageAnnotation"].forEach((type) => {
["notepad", "checklist", "images", "links", "counters", "combos", "calculator", "table", "timer", "taskPlanner", "equipmentPlanner", "imageAnnotation"].forEach((type) => {
assert.ok(payload.toolbox.modules.some((module) => module.type === type), `library must include a ${type} example`);
});
@ -451,6 +518,12 @@ export function validateLibraryData(payload) {
assert.ok(Array.isArray(taskData.tasks), "library task planner example must contain tasks");
assert.ok(Array.isArray(taskData.relations), "library task planner example must contain relations");
assert.ok(taskData.relations.length >= 1, "library task planner example must include a parent/child relation");
const equipmentModule = payload.toolbox.modules.find((module) => module.type === "equipmentPlanner");
const equipmentData = payload.modules[equipmentModule.id];
assert.ok(Array.isArray(equipmentData.types), "library equipment planner example must contain types");
assert.ok(Array.isArray(equipmentData.equipments), "library equipment planner example must contain equipments");
assert.ok(equipmentData.equipments.some((equipment) => Array.isArray(equipment.socketItems) && equipment.socketItems.length), "library equipment planner example must include socket items");
}
function assertSnakeCase(value, path) {