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:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,6 +1,6 @@
|
||||
desktop.ini
|
||||
node_modules
|
||||
/img/
|
||||
img
|
||||
|
||||
# IntelliJ project files
|
||||
.idea/
|
||||
@@ -16,6 +16,7 @@ trash_in
|
||||
# Generated files
|
||||
sitemap.xml
|
||||
*.DS_Store
|
||||
Thumbs.db
|
||||
.rsync-filter
|
||||
|
||||
# Generated service worker files
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
@font-face{font-family:"Convergence";font-style:normal;font-weight:400;src:local("Convergence-Regular"),url("../fonts/Convergence-Regular.woff2") format("woff2")}@font-face{font-family:"Roboto";font-style:normal;font-weight:400;src:local("Roboto"),url("../fonts/Roboto-Regular.woff2") format("woff2")}@font-face{font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;src:local("glyphicons-halflings-regular"),url("../fonts/glyphicons-halflings-regular.woff2") format("woff2")}@font-face{font-family:"Blambot Casual";src:local("Blambot-Casual"),url("../fonts/Blambot-Casual-Regular.woff2") format("woff2")}@keyframes kf-fade-out{from{opacity:1}to{opacity:0}}.pg-search__ipt{border-right:0}.pg-search__wrp-result{border:1px solid #ccc;border-radius:5px;min-height:calc(1rem + 48px + 2px)}.pg-search__disp-token{width:48px;height:48px;align-self:center}.pg-search__disp-srd{font-size:8.5px;vertical-align:super;top:2px;margin-left:3px}.pg-search__wrp-preview{width:500px;border:1px solid #ccc}.pg-search__btn-toggle-preview--expanded{border-top-left-radius:0;border-bottom-left-radius:0}@media only screen and (max-width: 768px){.pg-search__btn-toggle-preview--expanded{border-top-left-radius:3px;border-bottom-left-radius:3px}}.night-mode .pg-search__wrp-result{border:1px solid #555;background:#222}.night-mode .pg-search__wrp-preview{border:1px solid #555}.style-switch__wide .pg-search__wrp-preview{width:50vw}/*# sourceMappingURL=search.css.map */
|
||||
@font-face{font-family:"Convergence";font-style:normal;font-weight:400;src:local("Convergence-Regular"),url("../fonts/Convergence-Regular.woff2") format("woff2")}@font-face{font-family:"Roboto";font-style:normal;font-weight:400;src:local("Roboto"),url("../fonts/Roboto-Regular.woff2") format("woff2")}@font-face{font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;src:local("glyphicons-halflings-regular"),url("../fonts/glyphicons-halflings-regular.woff2") format("woff2")}@font-face{font-family:"Blambot Casual";src:local("Blambot-Casual"),url("../fonts/Blambot-Casual-Regular.woff2") format("woff2")}@keyframes kf-fade-out{from{opacity:1}to{opacity:0}}.pg-search__ipt{border-right:0}.pg-search__wrp-result{border:1px solid #ccc;border-radius:5px;min-height:calc(1rem + 48px + 2px)}.pg-search__disp-token{width:48px;height:48px;align-self:center}.pg-search__disp-srd,.pg-search__disp-source-marker{font-size:8.5px;vertical-align:super;top:2px;margin-left:3px}.pg-search__wrp-preview{width:500px;border:1px solid #ccc}.pg-search__btn-toggle-preview--expanded{border-top-left-radius:0;border-bottom-left-radius:0}@media only screen and (max-width: 768px){.pg-search__btn-toggle-preview--expanded{border-top-left-radius:3px;border-bottom-left-radius:3px}}.night-mode .pg-search__wrp-result{border:1px solid #555;background:#222}.night-mode .pg-search__wrp-preview{border:1px solid #555}.style-switch__wide .pg-search__wrp-preview{width:50vw}/*# sourceMappingURL=search.css.map */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2618,5 +2618,16 @@
|
||||
"ver": "1.197.2",
|
||||
"date": "2024-01-03",
|
||||
"txt": "- Added Dungeons of Drakkenheim tokens\n- Fixed crash when attempting to load some books (FTD, SatO, VRGR)\n- Fixed crash when clicking an already-open area in the Dynamic Map Viewer\n- Fixed Search page crash when attempting to load images for pages\n- (Fixed typos/added tags)"
|
||||
},
|
||||
{
|
||||
"ver": "1.197.3",
|
||||
"date": "2024-01-06",
|
||||
"txt": "- Added Dynamic Map Viewer support to Dungeons of Drakkenheim\n- Added \"Legacy\" Miscellaneous filter to various list pages\n- Added \"Legacy\" marker to Omnisearch results\n- (Fixed typos/added tags)"
|
||||
},
|
||||
{
|
||||
"ver": "1.198.0",
|
||||
"date": "2024-01-06",
|
||||
"title": "The Saturday Mirror",
|
||||
"txt": "- Converted remaining images to `.webp`\n- (Brew) Moved Bestiary tokens into a more sensible directory structure; tokens may now be found under `bestiary/token` (similar to the existing setup for `objects`/`vehicles`)\n- (Fixed typos/added tags)"
|
||||
}
|
||||
]
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -204,7 +204,7 @@ Unearthed Arcana content can be accessed by cycling the "All Sources"
|
||||
|
||||
<h3>Use <a href="https://foundryvtt.com/" rel="noopener">Foundry</a>?</h3>
|
||||
<p>No? <span class="help" title="Please note that Foundry Gaming, LLC. and The Norr Group Ltd. are in no way affiliated, and that Foundry Gaming, LLC. does not condone the use of their software in violation of your local laws.">Well, you should!</span> Foundry is a modernized, better-than replacement for Roll20, which prioritizes modding support. It is the 5etools platform of choice for VTT integrations.</p>
|
||||
<p>To install the <a href="plutonium.html">Plutonium</a> module, and start using all of 5etools' content in your game, paste the manifest URL<sup class="ve-small">[<a title="Plutonium manifest URL for most recent supported Foundry version" href="https://raw.githubusercontent.com/TheGiddyLimit/plutonium-next/master/module.json" target="_blank" rel="noopener noreferrer">current</a>/<a title="Plutonium manifest URL for Foundry v10" href="https://raw.githubusercontent.com/TheGiddyLimit/plutonium-next/master/module-foundry10.json" target="_blank" rel="noopener noreferrer">v10</a>/<a title="Plutonium manifest URL for Foundry v9" href="https://raw.githubusercontent.com/TheGiddyLimit/plutonium-next/master/module-foundry9.json" target="_blank" rel="noopener noreferrer">v9</a>]</sup> into your Foundry server's module installer. See the <a href="plutonium.html">Plutonium Features</a> page for an overview of the functionality the module provides.</p>
|
||||
<p>To install the <a href="plutonium.html">Plutonium</a> module, and start using all of 5etools' content in your game, paste the manifest URL<sup class="ve-small">[<a title="Plutonium manifest URL for most recent supported Foundry version" href="https://raw.githubusercontent.com/TheGiddyLimit/plutonium-next/master/module.json" target="_blank" rel="noopener noreferrer">current</a>/<a title="Plutonium manifest URL for Foundry v11" href="https://raw.githubusercontent.com/TheGiddyLimit/plutonium-next/master/module-foundry11.json" target="_blank" rel="noopener noreferrer">v11</a>/<a title="Plutonium manifest URL for Foundry v10" href="https://raw.githubusercontent.com/TheGiddyLimit/plutonium-next/master/module-foundry10.json" target="_blank" rel="noopener noreferrer">v10</a>]</sup> into your Foundry server's module installer. See the <a href="plutonium.html">Plutonium Features</a> page for an overview of the functionality the module provides.</p>
|
||||
<p>You can also install the <a href="plutonium.html#rivet-browser-extension">Rivet</a> browser extension (<a rel="noopener noreferrer" href="https://chrome.google.com/webstore/detail/rivet/igmilfmbmkmpkjjgoabaagaoohhhbjde">Chrome</a>/<a rel="noopener noreferrer" href="https://addons.mozilla.org/en-GB/firefox/addon/rivet/">Firefox</a>) to import content from the site with a single click.</p>
|
||||
|
||||
<h3>Use Roll20?</h3>
|
||||
|
||||
@@ -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 =============================================================================================================
|
||||
|
||||
@@ -75,7 +75,9 @@
|
||||
</nav>
|
||||
|
||||
<div class="view-col-group--cancer h-100 mh-0">
|
||||
<div class="container view-col-wrapper view-col-wrapper--cancer">
|
||||
<div class="py-2 ve-flex-vh-center initial-message initial-message--large h-100" id="wrp-loading">Loading...</div>
|
||||
|
||||
<div class="container view-col-wrapper view-col-wrapper--cancer ve-hidden" id="wrp-content">
|
||||
<div class="view-col" id="lootgen-lhs" style="flex: 4;"></div>
|
||||
|
||||
<div class="cancer__wrp-mobile-1 cancer__anchor"><div class="cancer__disp-cancer"></div><!--5ETOOLS_AD_MOB_PLAYER_1--></div>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
<div id="content" class="maps ve-flex h-100 mobile__h-initial mobile__ve-flex-col min-h-0">
|
||||
<div class="ve-flex-vh-center h-100 w-100">
|
||||
<div class="ve-flex ve-muted initial-message italic maps__disp-message-initial px-3">Loading...</div>
|
||||
<div class="ve-flex initial-message initial-message--large px-3">Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
1095
package-lock.json
generated
1095
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "5etools",
|
||||
"author": "TheGiddyLimit",
|
||||
"version": "1.197.2",
|
||||
"version": "1.197.3",
|
||||
"license": "MIT",
|
||||
"description": "A site dedicated to making playing games with your friends as easy as possible.",
|
||||
"type": "module",
|
||||
@@ -54,8 +54,8 @@
|
||||
"probe-image-size": "^7.2.3",
|
||||
"readline-sync": "^1.4.10",
|
||||
"sass": "^1.56.1",
|
||||
"sharp": "^0.30.5",
|
||||
"simple-git": "^3.15.1",
|
||||
"sharp": "^0.33.1",
|
||||
"simple-git": "^3.22.0",
|
||||
"stylelint": "^13.13.1",
|
||||
"stylelint-config-sass-guidelines": "^8.0.0",
|
||||
"terser": "^5.15.1",
|
||||
|
||||
@@ -23,3 +23,9 @@
|
||||
text-decoration-color: $rgb-source-PSA !important;
|
||||
}
|
||||
}
|
||||
|
||||
.night-mode .ve-source-marker {
|
||||
&--partnered {
|
||||
color: #27ac8c;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -649,3 +649,29 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ve-source-marker {
|
||||
position: relative;
|
||||
font-size: 80%;
|
||||
display: inline-block;
|
||||
margin-left: 1px;
|
||||
align-self: start;
|
||||
|
||||
&--list {
|
||||
left: 1px;
|
||||
margin-top: 1px;
|
||||
margin-left: -20px;
|
||||
padding-left: 20px;
|
||||
line-height: 8px;
|
||||
height: 8px;
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
&--partnered {
|
||||
color: #00c797;
|
||||
}
|
||||
|
||||
&--legacy {
|
||||
color: $rgb-font--muted;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -469,10 +469,21 @@ input[type=checkbox].sidemenu__row__label__cb {
|
||||
|
||||
&disp-srd {
|
||||
font-size: 8.5px;
|
||||
vertical-align: super;
|
||||
align-self: start;
|
||||
top: 2px;
|
||||
margin-right: 1px;
|
||||
margin-left: -2px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
&disp-source-marker {
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
&wrp-page {
|
||||
margin-left: 4px;
|
||||
font-family: "Convergence", Arial, sans-serif;
|
||||
font-weight: 100;
|
||||
font-size: 94%;
|
||||
}
|
||||
|
||||
// region Clear button
|
||||
@@ -1765,7 +1776,7 @@ tr.regionaleffect {
|
||||
line-height: 2.3em;
|
||||
|
||||
&--large {
|
||||
font-size: 5vmin;
|
||||
font-size: 4vmin;
|
||||
color: initial;
|
||||
}
|
||||
}
|
||||
@@ -3006,7 +3017,7 @@ th.border {
|
||||
|
||||
.stripe-odd-table > tbody > tr:nth-child(odd),
|
||||
.stripe-even-table > tbody > tr:nth-child(even) {
|
||||
background-color: #4e4e4e80; // pre-blend (50% opacity): 38 38 38
|
||||
background-color: $rgb-stripe-grey--night;
|
||||
}
|
||||
|
||||
#please-select-message.showing > td {
|
||||
|
||||
@@ -81,7 +81,7 @@ $rgb-shadow-grey--dark: rgba(0, 0, 0, 0.475);
|
||||
|
||||
$rgb-stripe-grey: #88888818;
|
||||
$rgb-stripe-grey--faint: #bbbbbb18;
|
||||
$rgb-stripe-grey--night: #aaa4;
|
||||
$rgb-stripe-grey--night: #aaa2;
|
||||
|
||||
$rgb-cb-grey: #666;
|
||||
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
&disp-srd {
|
||||
&disp-srd,
|
||||
&disp-source-marker {
|
||||
font-size: 8.5px;
|
||||
vertical-align: super;
|
||||
top: 2px;
|
||||
|
||||
Reference in New Issue
Block a user