Remove version-specific logic

2.0
Matheus Clemente 2023-11-08 14:54:09 -03:00
parent 8bf2bbfae2
commit 327068c7e9
1 changed files with 215 additions and 587 deletions

View File

@ -1,12 +1,4 @@
const CMPBrowser = {
MODULE_NAME: "compendium-browser",
MODULE_VERSION: "0.8.0",
MAXLOAD: 500, //Default for the maximum number to load before displaying a message that you need to filter to see more
};
const STOP_SEARCH = "StopSearchException";
// JV-080 - Adding a 'not-migrated' exception for v10 if the compendiums are not migrated to the new format (breaks e.g. npc compendium browser)
const STOP_SEARCH = "StopSearchException";
const NOT_MIGRATED = "NotMigratedException";
class CompendiumBrowser extends Application {
@ -122,7 +114,6 @@ class CompendiumBrowser extends Application {
event.preventDefault();
return false;
}
if (CompendiumBrowser.isFoundryV10Plus) {
event.dataTransfer.setData(
"text/plain",
JSON.stringify({
@ -130,16 +121,6 @@ class CompendiumBrowser extends Application {
uuid: `Compendium.${pack.collection}.${li.getAttribute("data-entry-id")}`,
})
);
} else {
event.dataTransfer.setData(
"text/plain",
JSON.stringify({
type: pack.documentName,
pack: pack.collection,
id: li.getAttribute("data-entry-id"),
})
);
}
},
false
);
@ -432,7 +413,6 @@ class CompendiumBrowser extends Application {
}
async loadAndFilterItems(browserTab = "spell", updateLoading = null) {
console.log(`Load and Filter Items | Started loading ${browserTab}s`);
console.time("loadAndFilterItems");
await this.checkListsLoaded();
@ -440,7 +420,7 @@ class CompendiumBrowser extends Application {
this.CurrentSeachNumber = seachNumber;
const maxLoad = game.settings.get(CMPBrowser.MODULE_NAME, "maxload") ?? CMPBrowser.MAXLOAD;
const maxLoad = game.settings.get("compendium-browser", "maxload");
//0.4.1: Load and filter just one of spells, feats, and items (specified by browserTab)
let unfoundSpells = "";
@ -581,71 +561,30 @@ class CompendiumBrowser extends Application {
}
}
// this.removeDuplicates(compactItems);
/*
if (unfoundSpells !== '') {
console.log(`Load and Fliter Items | List of Spells that don't have a class associated to them:`);
console.log(unfoundSpells);
}
*/
this.itemsLoaded = true;
console.timeEnd("loadAndFilterItems");
console.log(`Load and Filter Items | Finished loading ${Object.keys(compactItems).length} ${browserTab}s`);
updateLoading(numItemsLoaded, true);
return compactItems;
}
async loadAndFilterNpcs(updateLoading = null) {
console.log("NPC Browser | Started loading NPCs");
const seachNumber = Date.now();
this.CurrentSeachNumber = seachNumber;
console.time("loadAndFilterNpcs");
let npcs = {};
const maxLoad = game.settings.get(CMPBrowser.MODULE_NAME, "maxload") ?? CMPBrowser.MAXLOAD;
const maxLoad = game.settings.get("compendium-browser", "maxload");
let numNpcsLoaded = 0;
this.npcsLoaded = false;
// fields required for displaying and decorating NPCs
let requiredIndexFields;
if (CompendiumBrowser.isFoundryV11Plus) {
requiredIndexFields = [
"name",
"img",
"system.details.cr",
"system.traits.size",
"system.details.type.value",
];
} else if (CompendiumBrowser.isFoundryV10Plus) {
requiredIndexFields = [
"name",
"img",
"system.details.cr",
"system.traits.size",
"system.details.type",
"items.type",
"items.system.damage.parts",
];
} else {
requiredIndexFields = [
"name",
"img",
"data.details.cr",
"data.traits.size",
"data.details.type",
"items.type",
"items.system.damage.parts",
];
}
// add any fields required for currently active filters
//also remove the duplicate fields for sanity
const indexFields = [
...new Set(requiredIndexFields.concat(Object.values(this.npcFilters.activeFilters).map((f) => f.path))),
...new Set(
["name", "img", "system.details.cr", "system.traits.size", "system.details.type.value"].concat(
Object.values(this.npcFilters.activeFilters).map((f) => f.path)
)
),
];
let collectionName = "unknown";
try {
@ -662,8 +601,7 @@ class CompendiumBrowser extends Application {
npc5e.img = game.dnd5e.moduleArt.map.get(npc5e.uuid.replace(".Actor", ""))?.actor;
}
// JV-080: We're in a v10 foundry but the data doesn't have Actor#system - this means index fields won't have populated. Can't 'browse' like this.
if (CompendiumBrowser.isFoundryV10Plus && npc5e.system == undefined) {
if (npc5e.system == undefined) {
collectionName = pack.collection;
throw NOT_MIGRATED;
}
@ -676,7 +614,6 @@ class CompendiumBrowser extends Application {
}
throw STOP_SEARCH;
}
// JV-080: Special case. Compendium Folders creates Actors called #[CF_tempEntity] as placeholders for it's functions. Avoid them
if (npc5e.name != "#[CF_tempEntity]") {
const decoratedNpc = this.decorateNpc(npc5e, indexFields);
if (
@ -721,7 +658,6 @@ class CompendiumBrowser extends Application {
this.npcsLoaded = true;
console.timeEnd("loadAndFilterNpcs");
console.log(`NPC Browser | Finished loading NPCs: ${Object.keys(npcs).length} NPCs`);
updateLoading(numNpcsLoaded, true);
return npcs;
}
@ -813,7 +749,7 @@ class CompendiumBrowser extends Application {
if (elements?.length) {
//0.4.2b: On a tab-switch, only reload if there isn't any data already
if (options?.reload || !elements[0].children.length) {
const maxLoad = game.settings.get(CMPBrowser.MODULE_NAME, "maxload") ?? CMPBrowser.MAXLOAD;
const maxLoad = game.settings.get("compendium-browser", "maxload");
const updateLoading = async (numLoaded, doneLoading) => {
if (loadingMessage.length) {
this.renderLoading(loadingMessage[0], browserTab, numLoaded, numLoaded >= maxLoad, doneLoading);
@ -1008,24 +944,13 @@ class CompendiumBrowser extends Application {
if (!item5e) return null;
//Decorate and then filter a compendium entry - returns null or the item
//JV-080 - v10 does away with item.data and everything is under #system but we want to decorate the first level of the item for return
const item = { ...item5e };
//JV-080: Folding these down to base item.x level so we can have v10 Item#system coexist with v9- Item
if (CompendiumBrowser.isFoundryV10Plus) {
item.level = item5e.system?.level;
item.components = item5e.system?.components;
item.damage = item5e.system?.damage;
item.classes = item5e.system?.classes;
item.requirements = item5e.system?.requirements;
} else {
item = item5e.data;
item.level = item5e.data?.level;
item.components = item5e.data?.level;
item.damage = item.data?.damage; // equivalent to: item5e.data.data.xxx - Ugh. The 'fold down' in v10 makes sense now.
item.classes = item.data?.classes;
item.requirements = item.data?.requirements;
}
// getting damage types (common to all Items, although some won't have any)
item.damageTypes = [];
@ -1073,11 +998,6 @@ class CompendiumBrowser extends Application {
// getting uses/ressources status
item.usesRessources = item5e.hasLimitedUses;
//JV-080: In v10 this is only a getter (and will already exist since item = item5e.system)
if (!CompendiumBrowser.isFoundryV10Plus) {
item.hasSave = item5e.hasSave;
}
} else if (item.type === "subclass") {
//subclasses dont exist lower then version 10
item.classRequirement = [item.system.classIdentifier];
@ -1110,20 +1030,13 @@ class CompendiumBrowser extends Application {
}, {});
//0.8.0: update for V10 to use actor.system instead of actor.data
let npcData;
if (CompendiumBrowser.isFoundryV10Plus) {
npcData = npc.system;
} else {
npcData = npc.data;
}
let npcData = npc.system;
// cr display
let cr = npcData.details?.cr; //0.7.2c: Possibly because of getIndex() use we now have to check for existence of details (doesn't for Character-type NPCs)
if (cr === undefined || cr === "") cr = 0;
else cr = Number(cr);
// JV-080: moved here because we want the OG number for orderCR but can't depend on .details.cr being present
decoratedNpc.orderCR = cr;
if (cr > 0 && cr < 1) cr = "1/" + 1 / cr;
@ -1140,12 +1053,7 @@ class CompendiumBrowser extends Application {
if (CONFIG.DND5E.actorSizes[npcData.traits.size] !== undefined) {
decoratedNpc.displaySize = CONFIG.DND5E.actorSizes[npcData.traits.size];
}
let npcSize;
if (CompendiumBrowser.isFoundryV10Plus) {
npcSize = npc.system.traits.size;
} else {
npcSize = npc.data.traits.size;
}
let npcSize = npc.system.traits.size;
switch (npcSize) {
case "grg":
decoratedNpc.filterSize = 5;
@ -1167,29 +1075,8 @@ class CompendiumBrowser extends Application {
decoratedNpc.filterSize = 2;
break;
}
if (CompendiumBrowser.isFoundryV10Minus) {
// getting value for HasSpells and damage types
decoratedNpc.hasSpells = npc.items?.type?.some((itemType) => itemType === "spell");
let npcDamagePart;
if (CompendiumBrowser.isFoundryV10Plus) {
npcDamagePart = npc.items?.system?.damage?.parts;
} else {
npcDamagePart = npc.items?.data?.damage?.parts;
}
decoratedNpc.damageDealt = npcDamagePart
? npcDamagePart.filter((p) => p?.length >= 2).map((p) => p[1])
: [];
}
// JV-080: Think we have covered this off above now. We're making no assumptions and assuring that all decoratedNpc fields are now not 'undef'
//handle poorly constructed npc
//if (npcData.details?.type && !(npcData.details?.type instanceof Object)){
// npcData.details.type = {value: npcData.details?.type};
//}
return decoratedNpc;
} catch (e) {
console.log("%c Error loading NPC:" + npc.name, "background: white; color: red");
throw e;
}
}
@ -1337,7 +1224,7 @@ class CompendiumBrowser extends Application {
}
}
// creating game setting container
game.settings.register(CMPBrowser.MODULE_NAME, "settings", {
game.settings.register("compendium-browser", "settings", {
name: "Compendium Browser Settings",
hint: "Settings to exclude packs from loading and visibility of the browser",
default: defaultSettings,
@ -1347,12 +1234,12 @@ class CompendiumBrowser extends Application {
this.settings = settings;
},
});
game.settings.register(CMPBrowser.MODULE_NAME, "maxload", {
game.settings.register("compendium-browser", "maxload", {
name: game.i18n.localize("CMPBrowser.SETTING.Maxload.NAME"),
hint: game.i18n.localize("CMPBrowser.SETTING.Maxload.HINT"),
scope: "world",
config: true,
default: CMPBrowser.MAXLOAD,
default: 500,
type: Number,
range: {
// If range is specified, the resulting setting will be a range slider
@ -1363,7 +1250,7 @@ class CompendiumBrowser extends Application {
});
// load settings from container and apply to default settings (available compendie might have changed)
let settings = game.settings.get(CMPBrowser.MODULE_NAME, "settings");
let settings = game.settings.get("compendium-browser", "settings");
for (let compKey in defaultSettings.loadedSpellCompendium) {
//v0.7.1 Check for settings.loadedSpellCompendium
if (settings.loadedSpellCompendium && settings.loadedSpellCompendium[compKey] !== undefined) {
@ -1382,31 +1269,13 @@ class CompendiumBrowser extends Application {
defaultSettings.allowNpcBrowser = settings.allowNpcBrowser ? true : false;
if (game.user.isGM) {
game.settings.set(CMPBrowser.MODULE_NAME, "settings", defaultSettings);
console.log("New default settings set");
console.log(defaultSettings);
game.settings.set("compendium-browser", "settings", defaultSettings);
}
this.settings = defaultSettings;
//0.9.5 Set the CompendiumBrowser.isFoundryV8Plus variable for different code-paths
//If v9, then game.data.version will throw a deprecation warning so test for v9 first
CompendiumBrowser.isFoundryV8Plus =
game.release?.generation >= 10 ||
game.data.release?.generation >= 9 ||
game.data.version?.startsWith("0.8");
// If V10, we need to know this because in v10(+) Item5e#data and Actor#data have changed to Item5e#system and Actor#system
CompendiumBrowser.isFoundryV10Plus = game.release?.generation >= 10;
CompendiumBrowser.isFoundryV10Minus =
game.release?.generation <= 10 ||
game.data.release?.generation <= 9 ||
game.data.version?.startsWith("0.8");
CompendiumBrowser.isFoundryV11Plus = game.release?.generation >= 11;
}
saveSettings() {
game.settings.set(CMPBrowser.MODULE_NAME, "settings", this.settings);
game.settings.set("compendium-browser", "settings", this.settings);
}
//FILTERS - Added on the Ready hook
@ -1450,7 +1319,6 @@ class CompendiumBrowser extends Application {
async addSpellFilters() {
// Spellfilters
//Foundry v10+ Item#data is now Item#system
if (CompendiumBrowser.isFoundryV10Plus) {
this.addSpellFilter("CMPBrowser.general", "DND5E.Source", "system.source", "text");
this.addSpellFilter("CMPBrowser.general", "DND5E.Level", "system.level", "multiSelect", {
0: "DND5E.SpellCantrip",
@ -1513,92 +1381,10 @@ class CompendiumBrowser extends Application {
true
);
this.addSpellFilter("DND5E.SpellComponents", "DND5E.Ritual", "system.components.ritual", "bool");
this.addSpellFilter(
"DND5E.SpellComponents",
"DND5E.Concentration",
"system.components.concentration",
"bool"
);
this.addSpellFilter("DND5E.SpellComponents", "DND5E.Concentration", "system.components.concentration", "bool");
this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentVerbal", "system.components.vocal", "bool");
this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentSomatic", "system.components.somatic", "bool");
this.addSpellFilter(
"DND5E.SpellComponents",
"DND5E.ComponentMaterial",
"system.components.material",
"bool"
);
} else {
this.addSpellFilter("CMPBrowser.general", "DND5E.Source", "data.source", "text");
this.addSpellFilter("CMPBrowser.general", "DND5E.Level", "data.level", "multiSelect", {
0: "DND5E.SpellCantrip",
1: "1",
2: "2",
3: "3",
4: "4",
5: "5",
6: "6",
7: "7",
8: "8",
9: "9",
});
this.addSpellFilter(
"CMPBrowser.general",
"DND5E.SpellSchool",
"data.school",
"select",
CONFIG.DND5E.spellSchools
);
this.addSpellFilter("CMPBrowser.general", "CMPBrowser.castingTime", "data.activation.type", "select", {
action: "DND5E.Action",
bonus: "DND5E.BonusAction",
reaction: "DND5E.Reaction",
minute: "DND5E.TimeMinute",
hour: "DND5E.TimeHour",
day: "DND5E.TimeDay",
});
this.addSpellFilter(
"CMPBrowser.general",
"CMPBrowser.spellType",
"data.actionType",
"select",
CONFIG.DND5E.itemActionTypes
);
this.addSpellFilter(
"CMPBrowser.general",
"CMPBrowser.damageType",
"damageTypes",
"select",
CONFIG.DND5E.damageTypes
);
this.addSpellFilter(
"CMPBrowser.general",
"ITEM.TypeClass",
"data.classes",
"select",
{
artificer: "CMPBrowser.artificer",
bard: "CMPBrowser.bard",
cleric: "CMPBrowser.cleric",
druid: "CMPBrowser.druid",
paladin: "CMPBrowser.paladin",
ranger: "CMPBrowser.ranger",
sorcerer: "CMPBrowser.sorcerer",
warlock: "CMPBrowser.warlock",
wizard: "CMPBrowser.wizard",
},
true
);
this.addSpellFilter("DND5E.SpellComponents", "DND5E.Ritual", "data.components.ritual", "bool");
this.addSpellFilter(
"DND5E.SpellComponents",
"DND5E.Concentration",
"data.components.concentration",
"bool"
);
this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentVerbal", "data.components.vocal", "bool");
this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentSomatic", "data.components.somatic", "bool");
this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentMaterial", "data.components.material", "bool");
}
this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentMaterial", "system.components.material", "bool");
}
async addItemFilters() {
@ -1606,11 +1392,7 @@ class CompendiumBrowser extends Application {
// Feature Filters
//Foundry v10+ Item#data is now Item#system
if (CompendiumBrowser.isFoundryV10Plus) {
this.addItemFilter("CMPBrowser.general", "DND5E.Source", "system.source", "text");
} else {
this.addItemFilter("CMPBrowser.general", "DND5E.Source", "data.source", "text");
}
this.addItemFilter("CMPBrowser.general", "Item Type", "type", "select", {
consumable: "ITEM.TypeConsumable",
@ -1637,7 +1419,6 @@ class CompendiumBrowser extends Application {
},
true
);
if (CompendiumBrowser.isFoundryV10Plus) {
this.addItemFilter(
"CMPBrowser.GameMechanics",
"DND5E.ItemActivationCost",
@ -1645,15 +1426,6 @@ class CompendiumBrowser extends Application {
"select",
CONFIG.DND5E.abilityActivationTypes
);
} else {
this.addItemFilter(
"CMPBrowser.GameMechanics",
"DND5E.ItemActivationCost",
"data.activation.type",
"select",
CONFIG.DND5E.abilityActivationTypes
);
}
this.addItemFilter(
"CMPBrowser.GameMechanics",
@ -1664,7 +1436,6 @@ class CompendiumBrowser extends Application {
);
this.addItemFilter("CMPBrowser.GameMechanics", "CMPBrowser.UsesResources", "usesRessources", "bool");
if (CompendiumBrowser.isFoundryV10Plus) {
this.addItemFilter(
"CMPBrowser.ItemSubtype",
"ITEM.TypeWeapon",
@ -1686,58 +1457,14 @@ class CompendiumBrowser extends Application {
"text",
CONFIG.DND5E.consumableTypes
);
} else {
this.addItemFilter(
"CMPBrowser.ItemSubtype",
"ITEM.TypeWeapon",
"data.weaponType",
"text",
CONFIG.DND5E.weaponTypes
);
this.addItemFilter(
"CMPBrowser.ItemSubtype",
"ITEM.TypeEquipment",
"data.armor.type",
"text",
CONFIG.DND5E.equipmentTypes
);
this.addItemFilter(
"CMPBrowser.ItemSubtype",
"ITEM.TypeConsumable",
"data.consumableType",
"text",
CONFIG.DND5E.consumableTypes
);
}
if (CompendiumBrowser.isFoundryV10Plus) {
this.addItemFilter(
"CMPBrowser.MagicItems",
"DND5E.Rarity",
"system.rarity",
"select",
CONFIG.DND5E.itemRarity
);
} else {
//0.7.2c: Fix rarity encoding (uses camelcase names)
this.addItemFilter("CMPBrowser.MagicItems", "DND5E.Rarity", "data.rarity", "select", {
common: "DND5E.ItemRarityCommon",
uncommon: "DND5E.ItemRarityUncommon",
rare: "DND5E.ItemRarityRare",
veryRare: "DND5E.ItemRarityVeryRare",
legendary: "DND5E.ItemRarityLegendary",
});
}
this.addItemFilter("CMPBrowser.MagicItems", "DND5E.Rarity", "system.rarity", "select", CONFIG.DND5E.itemRarity);
}
async addFeatFilters() {
// Feature Filters
//Foundry v10+ Item#data is now Item#system
if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter("CMPBrowser.general", "DND5E.Source", "system.source", "text");
} else {
this.addFeatFilter("CMPBrowser.general", "DND5E.Source", "data.source", "text");
}
this.addFeatFilter(
"CMPBrowser.general",
"ITEM.TypeClass",
@ -1766,15 +1493,11 @@ class CompendiumBrowser extends Application {
feat: "ITEM.TypeFeat",
};
//subclasses don't exist lower then version 10
if (CompendiumBrowser.isFoundryV10Plus) {
featureTypes.subclass = "ITEM.TypeSubclass";
featureTypes.background = "DND5E.Background";
}
this.addFeatFilter("CMPBrowser.general", "CMPBrowser.overall", "type", "select", featureTypes, false);
if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter(
"CMPBrowser.general",
"DND5E.ItemFeatureType",
@ -1786,9 +1509,7 @@ class CompendiumBrowser extends Application {
}, {}),
false
);
}
if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter(
"CMPBrowser.general",
"CMPBrowser.subfeature",
@ -1796,9 +1517,7 @@ class CompendiumBrowser extends Application {
"select",
dnd5e.config.featureTypes.class.subtypes
);
}
if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter(
"CMPBrowser.GameMechanics",
"DND5E.ItemActivationCost",
@ -1806,15 +1525,6 @@ class CompendiumBrowser extends Application {
"select",
CONFIG.DND5E.abilityActivationTypes
);
} else {
this.addFeatFilter(
"CMPBrowser.GameMechanics",
"DND5E.ItemActivationCost",
"data.activation.type",
"select",
CONFIG.DND5E.abilityActivationTypes
);
}
this.addFeatFilter(
"CMPBrowser.GameMechanics",
"CMPBrowser.damageType",
@ -1845,51 +1555,14 @@ class CompendiumBrowser extends Application {
async addNpcFilters() {
// NPC Filters
//Foundry v10+ Actor#data is now Actor#system
if (CompendiumBrowser.isFoundryV10Plus) {
this.addNpcFilter("CMPBrowser.general", "DND5E.Source", "system.details.source", "text");
this.addNpcFilter(
"CMPBrowser.general",
"DND5E.Size",
"system.traits.size",
"select",
CONFIG.DND5E.actorSizes
);
if (CompendiumBrowser.isFoundryV10Minus) {
this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasSpells", "hasSpells", "bool");
}
this.addNpcFilter("CMPBrowser.general", "DND5E.Size", "system.traits.size", "select", CONFIG.DND5E.actorSizes);
this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasLegAct", "system.resources.legact.max", "bool");
this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasLegRes", "system.resources.legres.max", "bool");
this.addNpcFilter("CMPBrowser.general", "DND5E.ChallengeRating", "system.details.cr", "numberCompare");
} else {
this.addNpcFilter("CMPBrowser.general", "DND5E.Source", "data.details.source", "text");
this.addNpcFilter(
"CMPBrowser.general",
"DND5E.Size",
"data.traits.size",
"select",
CONFIG.DND5E.actorSizes
);
this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasSpells", "hasSpells", "bool");
this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasLegAct", "data.resources.legact.max", "bool");
this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasLegRes", "data.resources.legres.max", "bool");
this.addNpcFilter("CMPBrowser.general", "DND5E.ChallengeRating", "data.details.cr", "numberCompare");
}
let npcDetailsPath;
//Foundry v10+ Actor#data is now Actor#system
if (CompendiumBrowser.isFoundryV10Plus) {
npcDetailsPath = "system.details.type.value";
}
//Foundry 0.8.x: Creature type (data.details.type) is now a structure, so we check data.details.types.value instead
else if (CompendiumBrowser.isFoundryV8Plus) {
npcDetailsPath = "data.details.type.value";
} else {
//0.7.x
npcDetailsPath = "data.details.type";
}
let npcDetailsPath = "system.details.type.value";
this.addNpcFilter(
"CMPBrowser.general",
@ -1898,8 +1571,6 @@ class CompendiumBrowser extends Application {
"select",
CompendiumBrowser.CREATURE_TYPES
);
//Foundry v10+ Actor#data is now Actor#system
if (CompendiumBrowser.isFoundryV10Plus) {
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityStr", "system.abilities.str.value", "numberCompare");
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityDex", "system.abilities.dex.value", "numberCompare");
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityCon", "system.abilities.con.value", "numberCompare");
@ -1939,58 +1610,6 @@ class CompendiumBrowser extends Application {
CONFIG.DND5E.conditionTypes,
true
);
} else {
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityStr", "data.abilities.str.value", "numberCompare");
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityDex", "data.abilities.dex.value", "numberCompare");
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityCon", "data.abilities.con.value", "numberCompare");
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityInt", "data.abilities.int.value", "numberCompare");
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityWis", "data.abilities.wis.value", "numberCompare");
this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityCha", "data.abilities.cha.value", "numberCompare");
this.addNpcFilter(
"CMPBrowser.dmgInteraction",
"DND5E.DamImm",
"data.traits.di.value",
"multiSelect",
CONFIG.DND5E.damageTypes,
true
);
this.addNpcFilter(
"CMPBrowser.dmgInteraction",
"DND5E.DamRes",
"data.traits.dr.value",
"multiSelect",
CONFIG.DND5E.damageTypes,
true
);
this.addNpcFilter(
"CMPBrowser.dmgInteraction",
"DND5E.DamVuln",
"data.traits.dv.value",
"multiSelect",
CONFIG.DND5E.damageTypes,
true
);
this.addNpcFilter(
"CMPBrowser.dmgInteraction",
"DND5E.ConImm",
"data.traits.ci.value",
"multiSelect",
CONFIG.DND5E.conditionTypes,
true
);
}
if (CompendiumBrowser.isFoundryV10Minus) {
this.addNpcFilter(
"CMPBrowser.dmgInteraction",
"CMPBrowser.dmgDealt",
"damageDealt",
"multiSelect",
CONFIG.DND5E.damageTypes,
true
);
}
}
/**
@ -2109,7 +1728,6 @@ class CompendiumBrowser extends Application {
}
} else {
ui.notifications.warn(`Unknown filter type?`);
console.log(filter);
}
}
};
@ -2149,7 +1767,6 @@ class CompendiumBrowser extends Application {
} catch (err) {
ui.notifications.warn("failed to copy javascript to clipboard, check logs for string");
console.error("Failed to copy: ", err);
console.log(text);
}
}
@ -2194,7 +1811,11 @@ class CompendiumBrowser extends Application {
let tabBar = html.find("div.tab.spellbook .spellcasting-ability");
const cbButton = $(
`<div style="max-width:40px;min-width:32px;"><button class="compendium-browser spell-browser-btn"><i class="fa-duotone fa-book"></i></button></div>`
`<div style="flex: 0 0 22px; align-self: center; text-align: center;">
<a class="compendium-browser spell-browser-btn">
<i class="fa-duotone fa-book"></i>
</a>
</div>`
);
tabBar.append(cbButton);
@ -2207,9 +1828,12 @@ class CompendiumBrowser extends Application {
let tabBar = html.find("div.spellbook-filters");
const cbButton = $(
`<div style="max-width:40px;min-width:32px;"><button class="compendium-browser spell-browser-btn"><i class="fa-duotone fa-book"></i></button></div>`
`<div style="flex: 0 0 22px; align-self: center; text-align: center;">
<a class="compendium-browser spell-browser-btn">
<i class="fa-duotone fa-book"></i>
</a>
</div>`
);
console.log(tabBar);
tabBar.append(cbButton);
@ -2232,9 +1856,13 @@ class CompendiumBrowser extends Application {
static async addASISheetButton(cb, html) {
await html.find(".feat-browser-btn").remove();
let dropArea = html.find("div.drop-area");
let dropArea = html.find("h3:nth-child(3)");
const cbButton = $(
`<div style="max-width:40px;min-width:32px;"><button class="compendium-browser feat-browser-btn"><i class="fa-duotone fa-book"></i></button></div>`
`<span style="font-size: 16px;">
<a class="compendium-browser feat-browser-btn">
<i class="fa-duotone fa-book"></i>
</a>
</span>`
);
dropArea.append(cbButton);
@ -2258,7 +1886,7 @@ class CompendiumBrowser extends Application {
for (let cls of Object.keys(character.classes)) {
if (options.includes(cls)) {
return [{ section: "CMPBrowsergeneral", label: "ITEMTypeClass", value: cls }];
return [{ section: "CMPBrowsergeneral", label: "ITEM.TypeClass", value: cls }];
}
}