mirror of
https://github.com/Kornstalx/5etools-mirror-2.github.io.git
synced 2025-10-28 20:45:35 -05:00
v1.198.3
This commit is contained in:
@@ -72,34 +72,34 @@ class DeitiesPage extends ListPage {
|
||||
});
|
||||
}
|
||||
|
||||
getListItem (g, dtI, isExcluded) {
|
||||
this._pageFilter.mutateAndAddToFilters(g, isExcluded);
|
||||
getListItem (ent, dtI, isExcluded) {
|
||||
this._pageFilter.mutateAndAddToFilters(ent, isExcluded);
|
||||
|
||||
const eleLi = document.createElement("div");
|
||||
eleLi.className = `lst__row ve-flex-col ${isExcluded ? "lst__row--blocklisted" : ""}`;
|
||||
|
||||
const source = Parser.sourceJsonToAbv(g.source);
|
||||
const hash = UrlUtil.autoEncodeHash(g);
|
||||
const alignment = g.alignment ? g.alignment.join("") : "\u2014";
|
||||
const domains = g.domains.join(", ");
|
||||
const source = Parser.sourceJsonToAbv(ent.source);
|
||||
const hash = UrlUtil.autoEncodeHash(ent);
|
||||
const alignment = ent.alignment ? ent.alignment.join("") : "\u2014";
|
||||
const domains = ent.domains.join(", ");
|
||||
|
||||
eleLi.innerHTML = `<a href="#${hash}" class="lst--border lst__row-inner">
|
||||
<span class="bold col-3 pl-0">${g.name}</span>
|
||||
<span class="col-2 ve-text-center">${g.pantheon}</span>
|
||||
<span class="bold col-3 pl-0">${ent.name}</span>
|
||||
<span class="col-2 ve-text-center">${ent.pantheon}</span>
|
||||
<span class="col-2 ve-text-center">${alignment}</span>
|
||||
<span class="col-3 ${g.domains[0] === VeCt.STR_NONE ? `list-entry-none` : ""}">${domains}</span>
|
||||
<span class="col-2 ve-text-center ${Parser.sourceJsonToColor(g.source)} pr-0" title="${Parser.sourceJsonToFull(g.source)}" ${Parser.sourceJsonToStyle(g.source)}>${source}</span>
|
||||
<span class="col-3 ${ent.domains[0] === VeCt.STR_NONE ? `list-entry-none` : ""}">${domains}</span>
|
||||
<span class="col-2 ve-text-center ${Parser.sourceJsonToColor(ent.source)} pr-0" title="${Parser.sourceJsonToFull(ent.source)}" ${Parser.sourceJsonToStyle(ent.source)}>${source}</span>
|
||||
</a>`;
|
||||
|
||||
const listItem = new ListItem(
|
||||
dtI,
|
||||
eleLi,
|
||||
g.name,
|
||||
ent.name,
|
||||
{
|
||||
hash,
|
||||
source,
|
||||
title: g.title || "",
|
||||
pantheon: g.pantheon,
|
||||
title: ent.title || "",
|
||||
pantheon: ent.pantheon,
|
||||
alignment,
|
||||
domains,
|
||||
},
|
||||
|
||||
@@ -13,7 +13,7 @@ class PageFilterActions extends PageFilter {
|
||||
displayFn: StrUtil.uppercaseFirst,
|
||||
itemSortFn: SortUtil.ascSortLower,
|
||||
});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["Optional/Variant Action", "SRD", "Basic Rules"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["Optional/Variant Action", "SRD", "Basic Rules", "Legacy"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (it) {
|
||||
@@ -21,6 +21,7 @@ class PageFilterActions extends PageFilter {
|
||||
it._fMisc = [];
|
||||
if (it.srd) it._fMisc.push("SRD");
|
||||
if (it.basicRules) it._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (it.fromVariant) it._fMisc.push("Optional/Variant Action");
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ class PageFilterBackgrounds extends PageFilter {
|
||||
});
|
||||
this._asiFilter = new AbilityScoreFilter({header: "Ability Scores"});
|
||||
this._otherBenefitsFilter = new Filter({header: "Other Benefits"});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["Has Info", "Has Images", "SRD", "Basic Rules"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["Has Info", "Has Images", "SRD", "Basic Rules", "Legacy"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (bg) {
|
||||
@@ -54,6 +54,7 @@ class PageFilterBackgrounds extends PageFilter {
|
||||
bg._fMisc = [];
|
||||
if (bg.srd) bg._fMisc.push("SRD");
|
||||
if (bg.basicRules) bg._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(bg.source)) bg._fMisc.push("Legacy");
|
||||
if (bg.hasFluff || bg.fluff?.entries) bg._fMisc.push("Has Info");
|
||||
if (bg.hasFluffImages || bg.fluff?.images) bg._fMisc.push("Has Images");
|
||||
bg._fOtherBenifits = [];
|
||||
@@ -152,7 +153,7 @@ class ModalFilterBackgrounds extends ModalFilter {
|
||||
|
||||
<div class="col-4 ${bg._versionBase_isVersion ? "italic" : ""} ${this._getNameStyle()}">${bg._versionBase_isVersion ? `<span class="px-3"></span>` : ""}${bg.name}</div>
|
||||
<div class="col-6">${bg._skillDisplay}</div>
|
||||
<div class="col-1 pr-0 ve-text-center ${Parser.sourceJsonToColor(bg.source)}" title="${Parser.sourceJsonToFull(bg.source)}" ${Parser.sourceJsonToStyle(bg.source)}>${source}</div>
|
||||
<div class="col-1 pr-0 ve-flex-h-center ${Parser.sourceJsonToColor(bg.source)}" title="${Parser.sourceJsonToFull(bg.source)}" ${Parser.sourceJsonToStyle(bg.source)}>${source}${Parser.sourceJsonToMarkerHtml(bg.source)}</div>
|
||||
</div>`;
|
||||
|
||||
const btnShowHidePreview = eleRow.firstElementChild.children[1].firstElementChild;
|
||||
|
||||
@@ -239,7 +239,7 @@ class PageFilterBestiary extends PageFilter {
|
||||
});
|
||||
this._miscFilter = new Filter({
|
||||
header: "Miscellaneous",
|
||||
items: ["Familiar", ...Object.keys(Parser.MON_MISC_TAG_TO_FULL), "Bonus Actions", "Lair Actions", "Legendary", "Mythic", "Adventure NPC", "Spellcaster", ...Object.values(Parser.ATB_ABV_TO_FULL).map(it => `${PageFilterBestiary.MISC_FILTER_SPELLCASTER}${it}`), "Regional Effects", "Reactions", "Reprinted", "Swarm", "Has Variants", "Modified Copy", "Has Alternate Token", "Has Info", "Has Images", "Has Token", "Has Recharge", "SRD", "Basic Rules", "AC from Item(s)", "AC from Natural Armor", "AC from Unarmored Defense", "Summoned by Spell", "Summoned by Class"],
|
||||
items: ["Familiar", ...Object.keys(Parser.MON_MISC_TAG_TO_FULL), "Bonus Actions", "Lair Actions", "Legendary", "Mythic", "Adventure NPC", "Spellcaster", ...Object.values(Parser.ATB_ABV_TO_FULL).map(it => `${PageFilterBestiary.MISC_FILTER_SPELLCASTER}${it}`), "Regional Effects", "Reactions", "Reprinted", "Swarm", "Has Variants", "Modified Copy", "Has Alternate Token", "Has Info", "Has Images", "Has Token", "Has Recharge", "SRD", "Basic Rules", "Legacy", "AC from Item(s)", "AC from Natural Armor", "AC from Unarmored Defense", "Summoned by Spell", "Summoned by Class"],
|
||||
displayFn: (it) => Parser.monMiscTagToFull(it).uppercaseFirst(),
|
||||
deselFn: (it) => ["Adventure NPC", "Reprinted"].includes(it),
|
||||
itemSortFn: PageFilterBestiary.ascSortMiscFilter,
|
||||
@@ -347,6 +347,7 @@ class PageFilterBestiary extends PageFilter {
|
||||
if (mon.altArt) mon._fMisc.push("Has Alternate Token");
|
||||
if (mon.srd) mon._fMisc.push("SRD");
|
||||
if (mon.basicRules) mon._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(mon.source)) mon._fMisc.push("Legacy");
|
||||
if (mon.tokenUrl || mon.hasToken) mon._fMisc.push("Has Token");
|
||||
if (mon.mythic) mon._fMisc.push("Mythic");
|
||||
if (mon.hasFluff || mon.fluff?.entries) mon._fMisc.push("Has Info");
|
||||
@@ -667,7 +668,7 @@ class ModalFilterBestiary extends ModalFilter {
|
||||
<div class="col-4 ${mon._versionBase_isVersion ? "italic" : ""} ${this._getNameStyle()}">${mon._versionBase_isVersion ? `<span class="px-3"></span>` : ""}${mon.name}</div>
|
||||
<div class="col-4">${type}</div>
|
||||
<div class="col-2 ve-text-center">${cr}</div>
|
||||
<div class="col-1 ve-text-center ${Parser.sourceJsonToColor(mon.source)} pr-0" title="${Parser.sourceJsonToFull(mon.source)}" ${Parser.sourceJsonToStyle(mon.source)}>${source}</div>
|
||||
<div class="col-1 ve-flex-h-center ${Parser.sourceJsonToColor(mon.source)} pr-0" title="${Parser.sourceJsonToFull(mon.source)}" ${Parser.sourceJsonToStyle(mon.source)}>${source}${Parser.sourceJsonToMarkerHtml(mon.source)}</div>
|
||||
</div>`;
|
||||
|
||||
const btnShowHidePreview = eleRow.firstElementChild.children[1].firstElementChild;
|
||||
|
||||
@@ -13,12 +13,13 @@ class PageFilterCharCreationOptions extends PageFilter {
|
||||
displayFn: Parser.charCreationOptionTypeToFull,
|
||||
itemSortFn: PageFilterCharCreationOptions._filterFeatureTypeSort,
|
||||
});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Has Images", "Has Info"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Legacy", "Has Images", "Has Info"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (it) {
|
||||
it._fOptionType = Parser.charCreationOptionTypeToFull(it.optionType);
|
||||
it._fMisc = it.srd ? ["SRD"] : [];
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (it.hasFluff || it.fluff?.entries) it._fMisc.push("Has Info");
|
||||
if (it.hasFluffImages || it.fluff?.images) it._fMisc.push("Has Images");
|
||||
}
|
||||
|
||||
@@ -956,7 +956,7 @@ class ModalFilterClasses extends ModalFilter {
|
||||
|
||||
eleLabel.innerHTML = `<div class="col-1 pl-0 ve-flex-vh-center"><div class="fltr-cls__tgl"></div></div>
|
||||
<div class="bold col-9 ${cls._versionBase_isVersion ? "italic" : ""}">${cls._versionBase_isVersion ? `<span class="px-3"></span>` : ""}${cls.name}</div>
|
||||
<div class="col-2 pr-0 ve-text-center ${Parser.sourceJsonToColor(cls.source)}" title="${Parser.sourceJsonToFull(cls.source)}" ${Parser.sourceJsonToStyle(cls.source)}>${source}</div>`;
|
||||
<div class="col-2 pr-0 ve-flex-h-center ${Parser.sourceJsonToColor(cls.source)}" title="${Parser.sourceJsonToFull(cls.source)}" ${Parser.sourceJsonToStyle(cls.source)}>${source}${Parser.sourceJsonToMarkerHtml(cls.source)}</div>`;
|
||||
|
||||
return new ListItem(
|
||||
clsI,
|
||||
@@ -980,7 +980,7 @@ class ModalFilterClasses extends ModalFilter {
|
||||
|
||||
eleLabel.innerHTML = `<div class="col-1 pl-0 ve-flex-vh-center"><div class="fltr-cls__tgl"></div></div>
|
||||
<div class="col-9 pl-1 ve-flex-v-center ${sc._versionBase_isVersion ? "italic" : ""}">${sc._versionBase_isVersion ? `<span class="px-3"></span>` : ""}<span class="mx-3">\u2014</span> ${sc.name}</div>
|
||||
<div class="col-2 pr-0 ve-text-center ${Parser.sourceJsonToColor(sc.source)}" title="${Parser.sourceJsonToFull(sc.source)}" ${Parser.sourceJsonToStyle(sc.source)}>${source}</div>`;
|
||||
<div class="col-2 pr-0 ve-flex-h-center ${Parser.sourceJsonToColor(sc.source)}" title="${Parser.sourceJsonToFull(sc.source)}" ${Parser.sourceJsonToStyle(sc.source)}>${source}${Parser.sourceJsonToMarkerHtml(sc.source)}</div>`;
|
||||
|
||||
return new ListItem(
|
||||
`${clsI}--${scI}`,
|
||||
|
||||
@@ -6,7 +6,7 @@ class PageFilterClassesBase extends PageFilter {
|
||||
|
||||
this._miscFilter = new Filter({
|
||||
header: "Miscellaneous",
|
||||
items: ["Reprinted", "Sidekick", "SRD", "Basic Rules"],
|
||||
items: ["Reprinted", "Sidekick", "SRD", "Basic Rules", "Legacy"],
|
||||
deselFn: (it) => { return it === "Reprinted" || it === "Sidekick"; },
|
||||
displayFnMini: it => it === "Reprinted" ? "Repr." : it,
|
||||
displayFnTitle: it => it === "Reprinted" ? it : "",
|
||||
@@ -55,6 +55,7 @@ class PageFilterClassesBase extends PageFilter {
|
||||
if (cls.isReprinted) cls._fMisc.push("Reprinted");
|
||||
if (cls.srd) cls._fMisc.push("SRD");
|
||||
if (cls.basicRules) cls._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(cls.source)) cls._fMisc.push("Legacy");
|
||||
if (cls.isSidekick) cls._fMisc.push("Sidekick");
|
||||
|
||||
cls.subclasses.forEach(sc => {
|
||||
@@ -64,6 +65,7 @@ class PageFilterClassesBase extends PageFilter {
|
||||
sc._fMisc = [];
|
||||
if (sc.srd) sc._fMisc.push("SRD");
|
||||
if (sc.basicRules) sc._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(sc.source)) sc._fMisc.push("Legacy");
|
||||
if (sc.isReprinted) sc._fMisc.push("Reprinted");
|
||||
});
|
||||
}
|
||||
|
||||
@@ -16,13 +16,14 @@ class PageFilterConditionsDiseases extends PageFilter {
|
||||
displayFn: PageFilterConditionsDiseases.getDisplayProp,
|
||||
deselFn: (it) => it === "disease" || it === "status",
|
||||
});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Basic Rules", "Has Images", "Has Info"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Basic Rules", "Legacy", "Has Images", "Has Info"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (it) {
|
||||
it._fMisc = [];
|
||||
if (it.srd) it._fMisc.push("SRD");
|
||||
if (it.basicRules) it._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (it.hasFluff || it.fluff?.entries) it._fMisc.push("Has Info");
|
||||
if (it.hasFluffImages || it.fluff?.images) it._fMisc.push("Has Images");
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ class PageFilterCultsBoons extends PageFilter {
|
||||
});
|
||||
this._miscFilter = new Filter({
|
||||
header: "Miscellaneous",
|
||||
items: ["Reprinted"],
|
||||
items: ["Legacy", "Reprinted"],
|
||||
deselFn: (it) => it === "Reprinted",
|
||||
isMiscFilter: true,
|
||||
});
|
||||
@@ -23,6 +23,7 @@ class PageFilterCultsBoons extends PageFilter {
|
||||
static mutateForFilters (it) {
|
||||
it._fType = it.__prop === "cult" ? "Cult" : it.type ? `Boon, ${it.type}` : "Boon";
|
||||
it._fMisc = [];
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (this._isReprinted({reprintedAs: it.reprintedAs, tag: it.__prop, prop: it.__prop, page: UrlUtil.PG_CULTS_BOONS})) it._fMisc.push("Reprinted");
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ class PageFilterDecks extends PageFilter {
|
||||
|
||||
this._miscFilter = new Filter({
|
||||
header: "Miscellaneous",
|
||||
items: ["Has Card Art", "SRD"],
|
||||
items: ["Has Card Art", "SRD", "Legacy"],
|
||||
isMiscFilter: true,
|
||||
selFn: it => it === "Has Card Art",
|
||||
});
|
||||
@@ -15,6 +15,7 @@ class PageFilterDecks extends PageFilter {
|
||||
static mutateForFilters (ent) {
|
||||
ent._fMisc = [];
|
||||
if (ent.srd) ent._fMisc.push("SRD");
|
||||
if (SourceUtil.isLegacySourceWotc(ent.source)) ent._fMisc.push("Legacy");
|
||||
if (ent.hasCardArt) ent._fMisc.push("Has Card Art");
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
"use strict";
|
||||
|
||||
class PageFilterDeities extends PageFilter {
|
||||
static unpackAlignment (g) {
|
||||
g.alignment.sort(SortUtil.alignmentSort);
|
||||
if (g.alignment.length === 2 && g.alignment.includes("N")) {
|
||||
const out = [...g.alignment];
|
||||
static unpackAlignment (ent) {
|
||||
ent.alignment.sort(SortUtil.alignmentSort);
|
||||
if (ent.alignment.length === 2 && ent.alignment.includes("N")) {
|
||||
const out = [...ent.alignment];
|
||||
if (out[0] === "N") out[0] = "NX";
|
||||
else out[1] = "NY";
|
||||
return out;
|
||||
}
|
||||
return MiscUtil.copy(g.alignment);
|
||||
return MiscUtil.copy(ent.alignment);
|
||||
}
|
||||
|
||||
constructor () {
|
||||
@@ -28,35 +28,36 @@ class PageFilterDeities extends PageFilter {
|
||||
});
|
||||
this._miscFilter = new Filter({
|
||||
header: "Miscellaneous",
|
||||
items: ["Grants Piety Features", "Has Info", "Has Images", "Reprinted", "SRD", "Basic Rules"],
|
||||
items: ["Grants Piety Features", "Has Info", "Has Images", "Reprinted", "SRD", "Basic Rules", "Legacy"],
|
||||
displayFn: StrUtil.uppercaseFirst,
|
||||
deselFn: (it) => it === "Reprinted",
|
||||
isMiscFilter: true,
|
||||
});
|
||||
}
|
||||
|
||||
static mutateForFilters (g) {
|
||||
g._fAlign = g.alignment ? PageFilterDeities.unpackAlignment(g) : [];
|
||||
if (!g.category) g.category = VeCt.STR_NONE;
|
||||
if (!g.domains) g.domains = [VeCt.STR_NONE];
|
||||
g.domains.sort(SortUtil.ascSort);
|
||||
static mutateForFilters (ent) {
|
||||
ent._fAlign = ent.alignment ? PageFilterDeities.unpackAlignment(ent) : [];
|
||||
if (!ent.category) ent.category = VeCt.STR_NONE;
|
||||
if (!ent.domains) ent.domains = [VeCt.STR_NONE];
|
||||
ent.domains.sort(SortUtil.ascSort);
|
||||
|
||||
g._fMisc = [];
|
||||
if (g.reprinted) g._fMisc.push("Reprinted");
|
||||
if (g.srd) g._fMisc.push("SRD");
|
||||
if (g.basicRules) g._fMisc.push("Basic Rules");
|
||||
if (g.entries) g._fMisc.push("Has Info");
|
||||
if (g.symbolImg) g._fMisc.push("Has Images");
|
||||
if (g.piety) g._fMisc.push("Grants Piety Features");
|
||||
ent._fMisc = [];
|
||||
if (ent.reprinted) ent._fMisc.push("Reprinted");
|
||||
if (ent.srd) ent._fMisc.push("SRD");
|
||||
if (ent.basicRules) ent._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(ent.source)) ent._fMisc.push("Legacy");
|
||||
if (ent.entries) ent._fMisc.push("Has Info");
|
||||
if (ent.symbolImg) ent._fMisc.push("Has Images");
|
||||
if (ent.piety) ent._fMisc.push("Grants Piety Features");
|
||||
}
|
||||
|
||||
addToFilters (g, isExcluded) {
|
||||
addToFilters (ent, isExcluded) {
|
||||
if (isExcluded) return;
|
||||
|
||||
this._sourceFilter.addItem(g.source);
|
||||
this._domainFilter.addItem(g.domains);
|
||||
this._pantheonFilter.addItem(g.pantheon);
|
||||
this._categoryFilter.addItem(g.category);
|
||||
this._sourceFilter.addItem(ent.source);
|
||||
this._domainFilter.addItem(ent.domains);
|
||||
this._pantheonFilter.addItem(ent.pantheon);
|
||||
this._categoryFilter.addItem(ent.category);
|
||||
}
|
||||
|
||||
async _pPopulateBoxOptions (opts) {
|
||||
|
||||
@@ -55,7 +55,7 @@ class PageFilterFeats extends PageFilter {
|
||||
this._immuneFilter = FilterCommon.getDamageImmuneFilter();
|
||||
this._defenceFilter = new MultiFilter({header: "Damage", filters: [this._vulnerableFilter, this._resistFilter, this._immuneFilter]});
|
||||
this._conditionImmuneFilter = FilterCommon.getConditionImmuneFilter();
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["Has Info", "Has Images", "SRD", "Basic Rules"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["Has Info", "Has Images", "SRD", "Basic Rules", "Legacy"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (feat) {
|
||||
@@ -85,6 +85,7 @@ class PageFilterFeats extends PageFilter {
|
||||
}
|
||||
feat._fMisc = feat.srd ? ["SRD"] : [];
|
||||
if (feat.basicRules) feat._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(feat.source)) feat._fMisc.push("Legacy");
|
||||
if (feat.hasFluff || feat.fluff?.entries) feat._fMisc.push("Has Info");
|
||||
if (feat.hasFluffImages || feat.fluff?.images) feat._fMisc.push("Has Images");
|
||||
if (feat.repeatable != null) feat._fMisc.push(feat.repeatable ? "Repeatable" : "Not Repeatable");
|
||||
@@ -198,7 +199,7 @@ class ModalFilterFeats extends ModalFilter {
|
||||
<div class="col-4 ${feat._versionBase_isVersion ? "italic" : ""} ${this._getNameStyle()}">${feat._versionBase_isVersion ? `<span class="px-3"></span>` : ""}${feat.name}</div>
|
||||
<span class="col-3 ${feat._slAbility === VeCt.STR_NONE ? "italic" : ""}">${feat._slAbility}</span>
|
||||
<span class="col-3 ${feat._slPrereq === VeCt.STR_NONE ? "italic" : ""}">${feat._slPrereq}</span>
|
||||
<div class="col-1 pr-0 ve-text-center ${Parser.sourceJsonToColor(feat.source)}" title="${Parser.sourceJsonToFull(feat.source)}" ${Parser.sourceJsonToStyle(feat.source)}>${source}</div>
|
||||
<div class="col-1 pr-0 ve-flex-h-center ${Parser.sourceJsonToColor(feat.source)}" title="${Parser.sourceJsonToFull(feat.source)}" ${Parser.sourceJsonToStyle(feat.source)}>${source}${Parser.sourceJsonToMarkerHtml(feat.source)}</div>
|
||||
</div>`;
|
||||
|
||||
const btnShowHidePreview = eleRow.firstElementChild.children[1].firstElementChild;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
class PageFilterEquipment extends PageFilter {
|
||||
static _MISC_FILTER_ITEMS = [
|
||||
"Item Group", "Bundle", "SRD", "Basic Rules", "Has Images", "Has Info", "Reprinted",
|
||||
"Item Group", "Bundle", "SRD", "Basic Rules", "Legacy", "Has Images", "Has Info", "Reprinted",
|
||||
];
|
||||
|
||||
static _RE_FOUNDRY_ATTR = /(?:[-+*/]\s*)?@[a-z0-9.]+/gi;
|
||||
@@ -86,6 +86,7 @@ class PageFilterEquipment extends PageFilter {
|
||||
if (item.packContents) item._fMisc.push("Bundle");
|
||||
if (item.srd) item._fMisc.push("SRD");
|
||||
if (item.basicRules) item._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(item.source)) item._fMisc.push("Legacy");
|
||||
if (item.hasFluff || item.fluff?.entries) item._fMisc.push("Has Info");
|
||||
if (item.hasFluffImages || item.fluff?.images) item._fMisc.push("Has Images");
|
||||
if (item.miscTags) item._fMisc.push(...item.miscTags.map(Parser.itemMiscTagToFull));
|
||||
@@ -482,7 +483,7 @@ class ModalFilterItems extends ModalFilter {
|
||||
|
||||
<div class="col-5 ${item._versionBase_isVersion ? "italic" : ""} ${this._getNameStyle()}">${item._versionBase_isVersion ? `<span class="px-3"></span>` : ""}${item.name}</div>
|
||||
<div class="col-5">${type.uppercaseFirst()}</div>
|
||||
<div class="col-1 ve-text-center ${Parser.sourceJsonToColor(item.source)} pr-0" title="${Parser.sourceJsonToFull(item.source)}" ${Parser.sourceJsonToStyle(item.source)}>${source}</div>
|
||||
<div class="col-1 ve-flex-h-center ${Parser.sourceJsonToColor(item.source)} pr-0" title="${Parser.sourceJsonToFull(item.source)}" ${Parser.sourceJsonToStyle(item.source)}>${source}${Parser.sourceJsonToMarkerHtml(item.source)}</div>
|
||||
</div>`;
|
||||
|
||||
const btnShowHidePreview = eleRow.firstElementChild.children[1].firstElementChild;
|
||||
|
||||
@@ -6,7 +6,7 @@ class PageFilterLanguages extends PageFilter {
|
||||
|
||||
this._typeFilter = new Filter({header: "Type", items: ["standard", "exotic", "rare", "secret"], itemSortFn: null, displayFn: StrUtil.uppercaseFirst});
|
||||
this._scriptFilter = new Filter({header: "Script", displayFn: StrUtil.uppercaseFirst});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["Has Fonts", "SRD", "Basic Rules", "Has Images", "Has Info"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["Has Fonts", "SRD", "Basic Rules", "Legacy", "Has Images", "Has Info"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (it) {
|
||||
@@ -14,6 +14,7 @@ class PageFilterLanguages extends PageFilter {
|
||||
if (it.fonts || it._fonts) it._fMisc.push("Has Fonts");
|
||||
if (it.srd) it._fMisc.push("SRD");
|
||||
if (it.basicRules) it._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (it.hasFluff || it.fluff?.entries) it._fMisc.push("Has Info");
|
||||
if (it.hasFluffImages || it.fluff?.images) it._fMisc.push("Has Images");
|
||||
}
|
||||
|
||||
@@ -4,11 +4,12 @@ class PageFilterObjects extends PageFilter {
|
||||
constructor () {
|
||||
super();
|
||||
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Has Images", "Has Info", "Has Token"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Legacy", "Has Images", "Has Info", "Has Token"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (obj) {
|
||||
obj._fMisc = obj.srd ? ["SRD"] : [];
|
||||
if (SourceUtil.isLegacySourceWotc(obj.source)) obj._fMisc.push("Legacy");
|
||||
if (obj.tokenUrl || obj.hasToken) obj._fMisc.push("Has Token");
|
||||
if (obj.hasFluff || obj.fluff?.entries) obj._fMisc.push("Has Info");
|
||||
if (obj.hasFluffImages || obj.fluff?.images) obj._fMisc.push("Has Images");
|
||||
|
||||
@@ -59,7 +59,7 @@ class PageFilterOptionalFeatures extends PageFilter {
|
||||
this._featureFilter,
|
||||
],
|
||||
});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Grants Additional Spells"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Legacy", "Grants Additional Spells"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (it) {
|
||||
@@ -123,6 +123,7 @@ class PageFilterOptionalFeatures extends PageFilter {
|
||||
it.featureType.sort((a, b) => SortUtil.ascSortLower(Parser.optFeatureTypeToFull(a), Parser.optFeatureTypeToFull(b)));
|
||||
|
||||
it._fMisc = it.srd ? ["SRD"] : [];
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (it.additionalSpells) it._fMisc.push("Grants Additional Spells");
|
||||
}
|
||||
|
||||
@@ -225,7 +226,7 @@ class ModalFilterOptionalFeatures extends ModalFilter {
|
||||
<span class="col-2 ve-text-center" title="${optfeat._dFeatureType}">${optfeat._lFeatureType}</span>
|
||||
<span class="col-4 ve-text-center">${prerequisite}</span>
|
||||
<span class="col-1 ve-text-center">${level}</span>
|
||||
<div class="col-1 pr-0 ve-text-center ${Parser.sourceJsonToColor(optfeat.source)}" title="${Parser.sourceJsonToFull(optfeat.source)}" ${Parser.sourceJsonToStyle(optfeat.source)}>${source}</div>
|
||||
<div class="col-1 pr-0 ve-flex-h-center ${Parser.sourceJsonToColor(optfeat.source)}" title="${Parser.sourceJsonToFull(optfeat.source)}" ${Parser.sourceJsonToStyle(optfeat.source)}>${source}${Parser.sourceJsonToMarkerHtml(optfeat.source)}</div>
|
||||
</div>`;
|
||||
|
||||
const btnShowHidePreview = eleRow.firstElementChild.children[1].firstElementChild;
|
||||
|
||||
@@ -111,7 +111,7 @@ class PageFilterRaces extends PageFilter {
|
||||
});
|
||||
this._miscFilter = new Filter({
|
||||
header: "Miscellaneous",
|
||||
items: ["Base Race", "Key Race", "Lineage", "Modified Copy", "Reprinted", "SRD", "Basic Rules", "Has Images", "Has Info"],
|
||||
items: ["Base Race", "Key Race", "Lineage", "Modified Copy", "Reprinted", "SRD", "Basic Rules", "Legacy", "Has Images", "Has Info"],
|
||||
isMiscFilter: true,
|
||||
// N.b. "Reprinted" is not red by default, as we assume tastes vary w.r.t. ability score style
|
||||
});
|
||||
@@ -141,6 +141,7 @@ class PageFilterRaces extends PageFilter {
|
||||
if (r._isCopy) r._fMisc.push("Modified Copy");
|
||||
if (r.srd) r._fMisc.push("SRD");
|
||||
if (r.basicRules) r._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(r.source)) r._fMisc.push("Legacy");
|
||||
if (r.hasFluff || r.fluff?.entries) r._fMisc.push("Has Info");
|
||||
if (r.hasFluffImages || r.fluff?.images) r._fMisc.push("Has Images");
|
||||
if (r.lineage) r._fMisc.push("Lineage");
|
||||
@@ -285,7 +286,7 @@ class ModalFilterRaces extends ModalFilter {
|
||||
<div class="col-4 ${race._versionBase_isVersion ? "italic" : ""} ${this._getNameStyle()}">${race._versionBase_isVersion ? `<span class="px-3"></span>` : ""}${race.name}</div>
|
||||
<div class="col-4">${ability.asTextShort}</div>
|
||||
<div class="col-2 ve-text-center">${size}</div>
|
||||
<div class="col-1 pr-0 ve-text-center ${Parser.sourceJsonToColor(race.source)}" title="${Parser.sourceJsonToFull(race.source)}" ${Parser.sourceJsonToStyle(race.source)}>${source}</div>
|
||||
<div class="col-1 pr-0 ve-flex-h-center ${Parser.sourceJsonToColor(race.source)}" title="${Parser.sourceJsonToFull(race.source)}" ${Parser.sourceJsonToStyle(race.source)}>${source}${Parser.sourceJsonToMarkerHtml(race.source)}</div>
|
||||
</div>`;
|
||||
|
||||
const btnShowHidePreview = eleRow.firstElementChild.children[1].firstElementChild;
|
||||
|
||||
@@ -37,7 +37,7 @@ class PageFilterRecipes extends PageFilter {
|
||||
});
|
||||
this._miscFilter = new Filter({
|
||||
header: "Miscellaneous",
|
||||
items: ["SRD"],
|
||||
items: ["SRD", "Legacy"],
|
||||
isMiscFilter: true,
|
||||
displayFn: PageFilterRecipes._miscTagToFull,
|
||||
});
|
||||
@@ -45,6 +45,7 @@ class PageFilterRecipes extends PageFilter {
|
||||
|
||||
static mutateForFilters (it) {
|
||||
it._fMisc = it.srd ? ["SRD"] : [];
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (it.miscTags) it._fMisc.push(...it.miscTags);
|
||||
it._fServes = (it.serves?.min != null && it.serves?.max != null) ? [it.serves.min, it.serves.max] : (it.serves?.exact ?? null);
|
||||
it._fDiet = it.diet ? PageFilterRecipes._DIET_TO_FULL[it.diet] || it.diet : null;
|
||||
|
||||
@@ -159,6 +159,7 @@ class PageFilterSpells extends PageFilter {
|
||||
if ((!s.miscTags || (s.miscTags && !s.miscTags.includes("SCL"))) && s.entriesHigherLevel) out.push("SCL");
|
||||
if (s.srd) out.push("SRD");
|
||||
if (s.basicRules) out.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(s.source)) s._fMisc.push("Legacy");
|
||||
if (s.hasFluff || s.fluff?.entries) out.push("Has Info");
|
||||
if (s.hasFluffImages || s.fluff?.images) out.push("Has Images");
|
||||
return out;
|
||||
@@ -358,7 +359,7 @@ class PageFilterSpells extends PageFilter {
|
||||
this._optionalfeaturesFilter = new SearchableFilter({header: "Other Option/Feature"});
|
||||
this._metaFilter = new Filter({
|
||||
header: "Components & Miscellaneous",
|
||||
items: [...PageFilterSpells._META_FILTER_BASE_ITEMS, "Ritual", "SRD", "Basic Rules", "Has Images", "Has Token"],
|
||||
items: [...PageFilterSpells._META_FILTER_BASE_ITEMS, "Ritual", "SRD", "Basic Rules", "Legacy", "Has Images", "Has Token"],
|
||||
itemSortFn: PageFilterSpells.sortMetaFilter,
|
||||
isMiscFilter: true,
|
||||
displayFn: it => Parser.spMiscTagToFull(it),
|
||||
@@ -676,7 +677,7 @@ class ModalFilterSpells extends ModalFilter {
|
||||
<div class="col-1 sp__school-${spell.school} ve-text-center" title="${Parser.spSchoolAndSubschoolsAbvsToFull(spell.school, spell.subschools)}" ${Parser.spSchoolAbvToStyle(spell.school)}>${school}</div>
|
||||
<div class="col-0-5 ve-text-center" title="Concentration">${concentration}</div>
|
||||
<div class="col-2 text-right">${range}</div>
|
||||
<div class="col-1 pr-0 ve-text-center ${Parser.sourceJsonToColor(spell.source)}" title="${Parser.sourceJsonToFull(spell.source)}" ${Parser.sourceJsonToStyle(spell.source)}>${source}</div>
|
||||
<div class="col-1 pr-0 ve-flex-h-center ${Parser.sourceJsonToColor(spell.source)}" title="${Parser.sourceJsonToFull(spell.source)}" ${Parser.sourceJsonToStyle(spell.source)}>${source}${Parser.sourceJsonToMarkerHtml(spell.source)}</div>
|
||||
</div>`;
|
||||
|
||||
const btnShowHidePreview = eleRow.firstElementChild.children[1].firstElementChild;
|
||||
|
||||
@@ -10,12 +10,13 @@ class PageFilterTables extends PageFilter {
|
||||
constructor () {
|
||||
super({sourceFilterOpts: {selFn: PageFilterTables._sourceSelFn}});
|
||||
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Basic Rules"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Basic Rules", "Legacy"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (it) {
|
||||
it._fMisc = it.srd ? ["SRD"] : [];
|
||||
if (it.basicRules) it._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
}
|
||||
|
||||
addToFilters (it, isExcluded) {
|
||||
|
||||
@@ -26,7 +26,7 @@ class PageFilterTrapsHazards extends PageFilter {
|
||||
displayFn: Parser.trapHazTypeToFull,
|
||||
itemSortFn: PageFilterTrapsHazards.sortFilterType.bind(PageFilterTrapsHazards),
|
||||
});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Basic Rules", "Has Images", "Has Info"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Basic Rules", "Legacy", "Has Images", "Has Info"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (it) {
|
||||
@@ -35,6 +35,7 @@ class PageFilterTrapsHazards extends PageFilter {
|
||||
it._fMisc = [];
|
||||
if (it.srd) it._fMisc.push("SRD");
|
||||
if (it.basicRules) it._fMisc.push("Basic Rules");
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (it.hasFluff || it.fluff?.entries) it._fMisc.push("Has Info");
|
||||
if (it.hasFluffImages || it.fluff?.images) it._fMisc.push("Has Images");
|
||||
}
|
||||
|
||||
@@ -8,11 +8,12 @@ class PageFilterVariantRules extends PageFilter {
|
||||
super();
|
||||
|
||||
this._ruleTypeFilter = new Filter({header: "Rule Type", items: ["O", "V", "VO", "VV", "U"], displayFn: Parser.ruleTypeToFull});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Legacy"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (rule) {
|
||||
rule._fMisc = rule.srd ? ["SRD"] : [];
|
||||
if (SourceUtil.isLegacySourceWotc(rule.source)) rule._fMisc.push("Legacy");
|
||||
rule._fRuleType = rule.ruleType || "U";
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ class PageFilterVehicles extends PageFilter {
|
||||
this._hpFilter = new RangeFilter({header: "Hit Points"});
|
||||
this._hpFilter = new RangeFilter({header: "Hit Points"});
|
||||
this._creatureCapacityFilter = new RangeFilter({header: "Creature Capacity"});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Has Images", "Has Info", "Has Token"], isMiscFilter: true});
|
||||
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Legacy", "Has Images", "Has Info", "Has Token"], isMiscFilter: true});
|
||||
}
|
||||
|
||||
static mutateForFilters (it) {
|
||||
@@ -59,6 +59,7 @@ class PageFilterVehicles extends PageFilter {
|
||||
it._fCreatureCapacity = (it.capCrew || 0) + (it.capPassenger || 0) + (it.capCreature || 0);
|
||||
|
||||
it._fMisc = it.srd ? ["SRD"] : [];
|
||||
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
||||
if (it.tokenUrl || it.hasToken) it._fMisc.push("Has Token");
|
||||
if (it.hasFluff || it.fluff?.entries) it._fMisc.push("Has Info");
|
||||
if (it.hasFluffImages || it.fluff?.images) it._fMisc.push("Has Images");
|
||||
|
||||
49
js/filter.js
49
js/filter.js
@@ -1722,11 +1722,11 @@ class Filter extends FilterBase {
|
||||
}
|
||||
|
||||
_defaultItemState (item, {isForce = false} = {}) {
|
||||
// Avoid setting state for new items if the user already has filter state. This prevents the case where e.g.:
|
||||
// Avoid setting state for new items if the user already has active filter state. This prevents the case where e.g.:
|
||||
// - The user has cleared their source filter;
|
||||
// - A new source is added to the site;
|
||||
// - The new source becomes the *only* selected item in their filter.
|
||||
if (!isForce && this._hasUserSavedState) return this._state[item.item] = 0;
|
||||
if (!isForce && this._hasUserSavedState && !Object.values(this.__state).some(Boolean)) return this._state[item.item] = 0;
|
||||
|
||||
// if both a selFn and a deselFn are specified, we default to deselecting
|
||||
this._state[item.item] = this._getDefaultState(item.item);
|
||||
@@ -2275,6 +2275,10 @@ class Filter extends FilterBase {
|
||||
this._doToggleDisplay();
|
||||
}
|
||||
|
||||
_getFilterItem (item) {
|
||||
return item instanceof FilterItem ? item : new FilterItem({item});
|
||||
}
|
||||
|
||||
addItem (item) {
|
||||
if (item == null) return;
|
||||
|
||||
@@ -2285,7 +2289,7 @@ class Filter extends FilterBase {
|
||||
}
|
||||
|
||||
if (!this.__itemsSet.has(item.item || item)) {
|
||||
item = item instanceof FilterItem ? item : new FilterItem({item});
|
||||
item = this._getFilterItem(item);
|
||||
Filter._validateItemNest(item, this._nests);
|
||||
|
||||
this._isItemsDirty = true;
|
||||
@@ -2295,23 +2299,6 @@ class Filter extends FilterBase {
|
||||
}
|
||||
}
|
||||
|
||||
static _isItemsEqual (item1, item2) {
|
||||
return (item1 instanceof FilterItem ? item1.item : item1) === (item2 instanceof FilterItem ? item2.item : item2);
|
||||
}
|
||||
|
||||
removeItem (item) {
|
||||
const ixItem = this._items.findIndex(it => Filter._isItemsEqual(it, item));
|
||||
if (~ixItem) {
|
||||
const item = this._items[ixItem];
|
||||
|
||||
// FIXME this doesn't remove any associated hooks, and is therefore a minor memory leak
|
||||
this._isItemsDirty = true;
|
||||
item.rendered.detach();
|
||||
item.btnMini.detach();
|
||||
this._items.splice(ixItem, 1);
|
||||
}
|
||||
}
|
||||
|
||||
addNest (nestName, nestMeta) {
|
||||
// may need to allow this in future
|
||||
// can easily be circumvented by initialising with empty nests in filter construction
|
||||
@@ -2839,16 +2826,26 @@ class SourceFilter extends Filter {
|
||||
|
||||
doSetPillsClear () { return this._doSetPillsClear(); }
|
||||
|
||||
_getFilterItem (item) {
|
||||
return item instanceof FilterItem ? item : new SourceFilterItem({item});
|
||||
}
|
||||
|
||||
addItem (item) {
|
||||
const out = super.addItem(item);
|
||||
this._tmpState.ixAdded++;
|
||||
return out;
|
||||
}
|
||||
|
||||
removeItem (item) {
|
||||
const out = super.removeItem(item);
|
||||
this._tmpState.ixAdded--;
|
||||
return out;
|
||||
trimState_ () {
|
||||
if (!this._items?.length) return;
|
||||
|
||||
const sourcesLoaded = new Set(this._items.map(itm => itm.item));
|
||||
const nxtState = MiscUtil.copyFast(this.__state);
|
||||
Object.keys(nxtState)
|
||||
.filter(k => !sourcesLoaded.has(k))
|
||||
.forEach(k => delete nxtState[k]);
|
||||
|
||||
this._proxyAssignSimple("state", nxtState, true);
|
||||
}
|
||||
|
||||
_getHeaderControls_addExtraStateBtns (opts, wrpStateBtnsOuter) {
|
||||
@@ -3066,7 +3063,9 @@ class SourceFilter extends Filter {
|
||||
static getCompleteFilterSources (ent) {
|
||||
if (!ent.otherSources) return ent.source;
|
||||
|
||||
const otherSourcesFilt = ent.otherSources.filter(src => !ExcludeUtil.isExcluded("*", "*", src.source, {isNoCount: true}));
|
||||
const otherSourcesFilt = ent.otherSources
|
||||
// Avoid `otherSources` from e.g. homebrews which are not loaded, and so lack their metadata
|
||||
.filter(src => !ExcludeUtil.isExcluded("*", "*", src.source, {isNoCount: true}) && SourceUtil.isKnownSource(src.source));
|
||||
if (!otherSourcesFilt.length) return ent.source;
|
||||
|
||||
return [ent.source].concat(otherSourcesFilt.map(src => new SourceFilterItem({item: src.source, isIgnoreRed: true, isOtherSource: true})));
|
||||
|
||||
@@ -29,6 +29,9 @@ class LootGenPage {
|
||||
this._lootGenUi.addHookAll("state", () => savedStateDebounced());
|
||||
this._lootGenUi.addHookAll("meta", () => savedStateDebounced());
|
||||
|
||||
$(`#wrp-loading`).remove();
|
||||
$(`#wrp-content`).showVe();
|
||||
|
||||
window.dispatchEvent(new Event("toolsLoaded"));
|
||||
}
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@ class ListPageMultiSource extends ListPage {
|
||||
}
|
||||
|
||||
Object.keys(this._loadedSources)
|
||||
.map(src => new FilterItem({item: src, pFnChange: this._pLoadSource.bind(this)}))
|
||||
.map(src => new SourceFilterItem({item: src, pFnChange: this._pLoadSource.bind(this)}))
|
||||
.forEach(fi => this._pageFilter.sourceFilter.addItem(fi));
|
||||
|
||||
const prerelease = await (this._prereleaseDataSource ? this._prereleaseDataSource() : PrereleaseUtil.pGetBrewProcessed());
|
||||
|
||||
@@ -170,7 +170,7 @@ class NavBar {
|
||||
NavBar._CAT_CACHE,
|
||||
{
|
||||
html: "Preload Adventure Text <small>(50MB+)</small>",
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, /data\/adventure/),
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, {route: /data\/adventure/}),
|
||||
title: "Preload adventure text for offline use.",
|
||||
},
|
||||
);
|
||||
@@ -178,7 +178,7 @@ class NavBar {
|
||||
NavBar._CAT_CACHE,
|
||||
{
|
||||
html: "Preload Book Images <small>(1GB+)</small>",
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, /img\/book/),
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, {route: /img\/book/, isRequireImages: true}),
|
||||
title: "Preload book images offline use. Note that book text is preloaded automatically.",
|
||||
},
|
||||
);
|
||||
@@ -186,7 +186,7 @@ class NavBar {
|
||||
NavBar._CAT_CACHE,
|
||||
{
|
||||
html: "Preload Adventure Text and Images <small>(2GB+)</small>",
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, /(?:data|img)\/adventure/),
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, {route: /(?:data|img)\/adventure/, isRequireImages: true}),
|
||||
title: "Preload adventure text and images for offline use.",
|
||||
},
|
||||
);
|
||||
@@ -194,7 +194,7 @@ class NavBar {
|
||||
NavBar._CAT_CACHE,
|
||||
{
|
||||
html: "Preload All Images <small>(4GB+)</small>",
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, /img/),
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, {route: /img/, isRequireImages: true}),
|
||||
title: "Preload all images for offline use.",
|
||||
},
|
||||
);
|
||||
@@ -202,7 +202,7 @@ class NavBar {
|
||||
NavBar._CAT_CACHE,
|
||||
{
|
||||
html: "Preload All <small>(5GB+)</small>",
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, /./),
|
||||
click: (evt) => NavBar.InteractionManager._pOnClick_button_preloadOffline(evt, {route: /./, isRequireImages: true}),
|
||||
title: "Preload everything for offline use.",
|
||||
},
|
||||
);
|
||||
@@ -811,7 +811,7 @@ NavBar.InteractionManager = class {
|
||||
}
|
||||
}
|
||||
|
||||
static async _pOnClick_button_preloadOffline (evt, route) {
|
||||
static async _pOnClick_button_preloadOffline (evt, {route, isRequireImages = false}) {
|
||||
evt.preventDefault();
|
||||
|
||||
if (globalThis.swCacheRoutes === undefined) {
|
||||
@@ -819,6 +819,14 @@ NavBar.InteractionManager = class {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isRequireImages && globalThis.DEPLOYED_IMG_ROOT) {
|
||||
JqueryUtil.doToast({
|
||||
type: "danger",
|
||||
content: `The "${evt.currentTarget.innerText.split("(")[0].trim()}" option is not currently supported on this site version. Try again some other time!`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
globalThis.swCacheRoutes(route);
|
||||
}
|
||||
|
||||
|
||||
@@ -433,17 +433,20 @@ class Omnisearch {
|
||||
? `<a href="${adventureBookSourceHref}">${ptPageInner}</a>`
|
||||
: ptPageInner;
|
||||
|
||||
const ptSourceInner = source ? `<span class="${Parser.sourceJsonToColor(source)}" ${Parser.sourceJsonToStyle(source)} title="${Parser.sourceJsonToFull(source)}">${Parser.sourceJsonToAbv(source)}</span>` : `<span></span>`;
|
||||
const ptSourceInner = source
|
||||
? `<span class="${Parser.sourceJsonToColor(source)}" ${Parser.sourceJsonToStyle(source)} title="${Parser.sourceJsonToFull(source)}">${Parser.sourceJsonToAbv(source)}</span>`
|
||||
: `<span></span>`;
|
||||
const ptSource = ptPage || !adventureBookSourceHref
|
||||
? ptSourceInner
|
||||
: `<a href="${adventureBookSourceHref}">${ptSourceInner}</a>`;
|
||||
|
||||
$$`<div class="omni__row-result split-v-center stripe-odd">
|
||||
${$link}
|
||||
<div class="inline-block">
|
||||
<div class="ve-flex-v-center">
|
||||
${ptSource}
|
||||
${isSrd ? `<span class="ve-muted omni__disp-srd help-subtle relative" title="Available in the Systems Reference Document">[SRD]</span>` : ""}
|
||||
${ptPage}
|
||||
${Parser.sourceJsonToMarkerHtml(source, {isList: false, additionalStyles: "omni__disp-source-marker"})}
|
||||
${ptPage ? `<span class="omni__wrp-page small-caps">${ptPage}</span>` : ""}
|
||||
</div>
|
||||
</div>`.appendTo(this._dispSearchOutput);
|
||||
}
|
||||
|
||||
@@ -664,6 +664,14 @@ Parser.sourceJsonToStylePart = function (source) {
|
||||
return "";
|
||||
};
|
||||
|
||||
Parser.sourceJsonToMarkerHtml = function (source, {isList = true, additionalStyles = ""} = {}) {
|
||||
source = Parser._getSourceStringFromSource(source);
|
||||
// TODO(Future) consider enabling this
|
||||
// if (SourceUtil.isPartneredSourceWotc(source)) return `<span class="help-subtle ve-source-marker ${isList ? `ve-source-marker--list` : ""} ve-source-marker--partnered ${additionalStyles}" title="D&D Partnered Source">✦</span>`;
|
||||
if (SourceUtil.isLegacySourceWotc(source)) return `<span class="help-subtle ve-source-marker ${isList ? `ve-source-marker--list` : ""} ve-source-marker--legacy ${additionalStyles}" title="Legacy Source">ʟ</span>`;
|
||||
return "";
|
||||
};
|
||||
|
||||
Parser.stringToSlug = function (str) {
|
||||
return str.trim().toLowerCase().toAscii().replace(/[^\w ]+/g, "").replace(/ +/g, "-");
|
||||
};
|
||||
|
||||
@@ -172,7 +172,9 @@ class SearchPage {
|
||||
? `<a href="${adventureBookSourceHref}">${ptPageInner}</a>`
|
||||
: ptPageInner;
|
||||
|
||||
const ptSourceInner = source ? `<i>${Parser.sourceJsonToFull(source)}</i> (<span class="${Parser.sourceJsonToColor(source)}" ${Parser.sourceJsonToStyle(source)}>${Parser.sourceJsonToAbv(source)}</span>)${isSrd ? `<span class="ve-muted relative help-subtle pg-search__disp-srd" title="Available in the Systems Reference Document">[SRD]</span>` : ""}` : `<span></span>`;
|
||||
const ptSourceInner = source
|
||||
? `<i>${Parser.sourceJsonToFull(source)}</i> (<span class="${Parser.sourceJsonToColor(source)}" ${Parser.sourceJsonToStyle(source)}>${Parser.sourceJsonToAbv(source)}</span>)${isSrd ? `<span class="ve-muted relative help-subtle pg-search__disp-srd" title="Available in the Systems Reference Document">[SRD]</span>` : ""}${Parser.sourceJsonToMarkerHtml(source, {isList: false, additionalStyles: "pg-search__disp-source-marker"})}`
|
||||
: `<span></span>`;
|
||||
const ptSource = ptPage || !adventureBookSourceHref
|
||||
? ptSourceInner
|
||||
: `<a href="${adventureBookSourceHref}">${ptSourceInner}</a>`;
|
||||
|
||||
84
js/utils.js
84
js/utils.js
@@ -2,7 +2,7 @@
|
||||
|
||||
// in deployment, `IS_DEPLOYED = "<version number>";` should be set below.
|
||||
globalThis.IS_DEPLOYED = undefined;
|
||||
globalThis.VERSION_NUMBER = /* 5ETOOLS_VERSION__OPEN */"1.197.2"/* 5ETOOLS_VERSION__CLOSE */;
|
||||
globalThis.VERSION_NUMBER = /* 5ETOOLS_VERSION__OPEN */"1.197.3"/* 5ETOOLS_VERSION__CLOSE */;
|
||||
globalThis.DEPLOYED_IMG_ROOT = undefined;
|
||||
// for the roll20 script to set
|
||||
globalThis.IS_VTT = false;
|
||||
@@ -447,8 +447,8 @@ CleanUtil._ELLIPSIS_COLLAPSE_REGEX = /\s*(\.\s*\.\s*\.)/g;
|
||||
CleanUtil._DASH_COLLAPSE_REGEX = /[ ]*([\u2014\u2013])[ ]*/g;
|
||||
|
||||
// SOURCES =============================================================================================================
|
||||
globalThis.SourceUtil = {
|
||||
ADV_BOOK_GROUPS: [
|
||||
globalThis.SourceUtil = class {
|
||||
static ADV_BOOK_GROUPS = [
|
||||
{group: "core", displayName: "Core"},
|
||||
{group: "supplement", displayName: "Supplements"},
|
||||
{group: "setting", displayName: "Settings"},
|
||||
@@ -459,68 +459,79 @@ globalThis.SourceUtil = {
|
||||
{group: "screen", displayName: "Screens"},
|
||||
{group: "recipe", displayName: "Recipes"},
|
||||
{group: "other", displayName: "Miscellaneous"},
|
||||
],
|
||||
];
|
||||
|
||||
_subclassReprintLookup: {},
|
||||
async pInitSubclassReprintLookup () {
|
||||
static _subclassReprintLookup = {};
|
||||
static async pInitSubclassReprintLookup () {
|
||||
SourceUtil._subclassReprintLookup = await DataUtil.loadJSON(`${Renderer.get().baseUrl}data/generated/gendata-subclass-lookup.json`);
|
||||
},
|
||||
}
|
||||
|
||||
isSubclassReprinted (className, classSource, subclassShortName, subclassSource) {
|
||||
static isSubclassReprinted (className, classSource, subclassShortName, subclassSource) {
|
||||
const fromLookup = MiscUtil.get(SourceUtil._subclassReprintLookup, classSource, className, subclassSource, subclassShortName);
|
||||
return fromLookup ? fromLookup.isReprinted : false;
|
||||
},
|
||||
}
|
||||
|
||||
static isKnownSource (source) {
|
||||
return SourceUtil.isSiteSource(source)
|
||||
|| (typeof PrereleaseUtil !== "undefined" && PrereleaseUtil.hasSourceJson(source))
|
||||
|| (typeof BrewUtil2 !== "undefined" && BrewUtil2.hasSourceJson(source));
|
||||
}
|
||||
|
||||
/** I.e., not homebrew. */
|
||||
isSiteSource (source) { return !!Parser.SOURCE_JSON_TO_FULL[source]; },
|
||||
static isSiteSource (source) { return !!Parser.SOURCE_JSON_TO_FULL[source]; }
|
||||
|
||||
isAdventure (source) {
|
||||
static isAdventure (source) {
|
||||
if (source instanceof FilterItem) source = source.item;
|
||||
return Parser.SOURCES_ADVENTURES.has(source);
|
||||
},
|
||||
}
|
||||
|
||||
isCoreOrSupplement (source) {
|
||||
static isCoreOrSupplement (source) {
|
||||
if (source instanceof FilterItem) source = source.item;
|
||||
return Parser.SOURCES_CORE_SUPPLEMENTS.has(source);
|
||||
},
|
||||
}
|
||||
|
||||
isNonstandardSource (source) {
|
||||
static isNonstandardSource (source) {
|
||||
if (source == null) return false;
|
||||
return (
|
||||
(typeof BrewUtil2 === "undefined" || !BrewUtil2.hasSourceJson(source))
|
||||
&& SourceUtil.isNonstandardSourceWotc(source)
|
||||
)
|
||||
|| SourceUtil.isPrereleaseSource(source);
|
||||
},
|
||||
}
|
||||
|
||||
isPartneredSourceWotc (source) {
|
||||
static isPartneredSourceWotc (source) {
|
||||
if (source == null) return false;
|
||||
return Parser.SOURCES_PARTNERED_WOTC.has(source);
|
||||
},
|
||||
}
|
||||
|
||||
static isLegacySourceWotc (source) {
|
||||
if (source == null) return false;
|
||||
return source === Parser.SRC_VGM || source === Parser.SRC_MTF;
|
||||
}
|
||||
|
||||
// TODO(Future) remove this in favor of simply checking existence in `PrereleaseUtil`
|
||||
// TODO(Future) cleanup uses of `PrereleaseUtil.hasSourceJson` to match
|
||||
isPrereleaseSource (source) {
|
||||
static isPrereleaseSource (source) {
|
||||
if (source == null) return false;
|
||||
if (typeof PrereleaseUtil !== "undefined" && PrereleaseUtil.hasSourceJson(source)) return true;
|
||||
return source.startsWith(Parser.SRC_UA_PREFIX)
|
||||
|| source.startsWith(Parser.SRC_UA_ONE_PREFIX);
|
||||
},
|
||||
}
|
||||
|
||||
isNonstandardSourceWotc (source) {
|
||||
static isNonstandardSourceWotc (source) {
|
||||
return SourceUtil.isPrereleaseSource(source)
|
||||
|| source.startsWith(Parser.SRC_PS_PREFIX)
|
||||
|| source.startsWith(Parser.SRC_AL_PREFIX)
|
||||
|| source.startsWith(Parser.SRC_MCVX_PREFIX)
|
||||
|| Parser.SOURCES_NON_STANDARD_WOTC.has(source);
|
||||
},
|
||||
}
|
||||
|
||||
FILTER_GROUP_STANDARD: 0,
|
||||
FILTER_GROUP_PARTNERED: 1,
|
||||
FILTER_GROUP_NON_STANDARD: 2,
|
||||
FILTER_GROUP_HOMEBREW: 3,
|
||||
static FILTER_GROUP_STANDARD = 0;
|
||||
static FILTER_GROUP_PARTNERED = 1;
|
||||
static FILTER_GROUP_NON_STANDARD = 2;
|
||||
static FILTER_GROUP_HOMEBREW = 3;
|
||||
|
||||
getFilterGroup (source) {
|
||||
static getFilterGroup (source) {
|
||||
if (source instanceof FilterItem) source = source.item;
|
||||
if (
|
||||
(typeof PrereleaseUtil !== "undefined" && PrereleaseUtil.hasSourceJson(source))
|
||||
@@ -529,9 +540,9 @@ globalThis.SourceUtil = {
|
||||
if (typeof BrewUtil2 !== "undefined" && BrewUtil2.hasSourceJson(source)) return SourceUtil.FILTER_GROUP_HOMEBREW;
|
||||
if (SourceUtil.isPartneredSourceWotc(source)) return SourceUtil.FILTER_GROUP_PARTNERED;
|
||||
return SourceUtil.FILTER_GROUP_STANDARD;
|
||||
},
|
||||
}
|
||||
|
||||
getAdventureBookSourceHref (source, page) {
|
||||
static getAdventureBookSourceHref (source, page) {
|
||||
if (!source) return null;
|
||||
source = source.toLowerCase();
|
||||
|
||||
@@ -549,9 +560,9 @@ globalThis.SourceUtil = {
|
||||
mappedSource = mappedSource.toLowerCase();
|
||||
|
||||
return `${docPage}#${[mappedSource, page ? `page:${page}` : null].filter(Boolean).join(HASH_PART_SEP)}`;
|
||||
},
|
||||
}
|
||||
|
||||
getEntitySource (it) { return it.source || it.inherits?.source; },
|
||||
static getEntitySource (it) { return it.source || it.inherits?.source; }
|
||||
};
|
||||
|
||||
// CURRENCY ============================================================================================================
|
||||
@@ -3097,6 +3108,17 @@ if (!IS_DEPLOYED && !IS_VTT && typeof window !== "undefined") {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// TODO(img) remove this in future
|
||||
window.addEventListener("load", () => {
|
||||
if (window.location?.host === "5etools-mirror-1.github.io") {
|
||||
JqueryUtil.doToast({
|
||||
type: "warning",
|
||||
isAutoHide: false,
|
||||
content: $(`<div>This mirror is no longer being updated/maintained, and will be shut down on March 1st 2024.<br>Please use <a href="https://5etools-mirror-2.github.io/" rel="noopener noreferrer">5etools-mirror-2.github.io</a> instead, and <a href="https://gist.github.com/5etools-mirror-2/40d6d80f40205882d3fa5006fae963a4" rel="noopener noreferrer">migrate your data</a>.</div>`),
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// SORTING =============================================================================================================
|
||||
|
||||
Reference in New Issue
Block a user