mirror of
https://github.com/Kornstalx/5etools-mirror-2.github.io.git
synced 2025-10-28 20:45:35 -05:00
141 lines
3.9 KiB
JavaScript
141 lines
3.9 KiB
JavaScript
"use strict";
|
|
|
|
class RacesSublistManager extends SublistManager {
|
|
static get _ROW_TEMPLATE () {
|
|
return [
|
|
new SublistCellTemplate({
|
|
name: "Name",
|
|
css: "bold ve-col-5 pl-0",
|
|
colStyle: "",
|
|
}),
|
|
new SublistCellTemplate({
|
|
name: "Ability",
|
|
css: "ve-col-5",
|
|
colStyle: "",
|
|
}),
|
|
new SublistCellTemplate({
|
|
name: "Size",
|
|
css: "ve-col-2 ve-text-center pr-0",
|
|
colStyle: "text-center",
|
|
}),
|
|
];
|
|
}
|
|
|
|
pGetSublistItem (race, hash) {
|
|
const cellsText = [
|
|
race.name,
|
|
new SublistCell({text: race._slAbility, css: race._slAbility === "Lineage (choose)" ? "italic" : ""}),
|
|
(race.size || [Parser.SZ_VARIES]).map(sz => Parser.sizeAbvToFull(sz)).join("/"),
|
|
];
|
|
|
|
const $ele = $(`<div class="lst__row lst__row--sublist ve-flex-col">
|
|
<a href="#${UrlUtil.autoEncodeHash(race)}" class="lst--border lst__row-inner">
|
|
${this.constructor._getRowCellsHtml({values: cellsText})}
|
|
</a>
|
|
</div>
|
|
`)
|
|
.contextmenu(evt => this._handleSublistItemContextMenu(evt, listItem))
|
|
.click(evt => this._listSub.doSelect(listItem, evt));
|
|
|
|
const listItem = new ListItem(
|
|
hash,
|
|
$ele,
|
|
race.name,
|
|
{
|
|
hash,
|
|
ability: race._slAbility,
|
|
},
|
|
{
|
|
entity: race,
|
|
mdRow: [...cellsText],
|
|
},
|
|
);
|
|
return listItem;
|
|
}
|
|
}
|
|
|
|
class RacesPage extends ListPage {
|
|
constructor () {
|
|
const pageFilter = new PageFilterRaces();
|
|
super({
|
|
dataSource: DataUtil.race.loadJSON.bind(DataUtil.race, {isAddBaseRaces: true}),
|
|
prereleaseDataSource: DataUtil.race.loadPrerelease.bind(DataUtil.race),
|
|
brewDataSource: DataUtil.race.loadBrew.bind(DataUtil.race),
|
|
|
|
pFnGetFluff: Renderer.race.pGetFluff.bind(Renderer.race),
|
|
|
|
pageFilter,
|
|
|
|
dataProps: ["race"],
|
|
|
|
bookViewOptions: {
|
|
namePlural: "races",
|
|
pageTitle: "Races Book View",
|
|
},
|
|
|
|
hasAudio: true,
|
|
});
|
|
}
|
|
|
|
_addData (data) {
|
|
if (data.race && data.race.length) super._addData(data);
|
|
if (!data.subrace || !data.subrace.length) return;
|
|
|
|
// Attach each subrace to a parent race, and recurse
|
|
const nxtData = Renderer.race.adoptSubraces(this._dataList, data.subrace);
|
|
|
|
if (nxtData.length) this._addData({race: Renderer.race.mergeSubraces(nxtData)});
|
|
}
|
|
|
|
getListItem (race, rcI, isExcluded) {
|
|
const hash = UrlUtil.autoEncodeHash(race);
|
|
if (this._seenHashes.has(hash)) return null;
|
|
this._seenHashes.add(hash);
|
|
|
|
this._pageFilter.mutateAndAddToFilters(race, isExcluded);
|
|
|
|
const eleLi = document.createElement("div");
|
|
eleLi.className = `lst__row ve-flex-col ${isExcluded ? "lst__row--blocklisted" : ""}`;
|
|
|
|
const size = (race.size || [Parser.SZ_VARIES]).map(sz => Parser.sizeAbvToFull(sz)).join("/");
|
|
const source = Parser.sourceJsonToAbv(race.source);
|
|
|
|
eleLi.innerHTML = `<a href="#${hash}" class="lst--border lst__row-inner">
|
|
<span class="bold ve-col-4 pl-0">${race.name}</span>
|
|
<span class="ve-col-4 ${race._slAbility === "Lineage (choose)" ? "italic" : ""}">${race._slAbility}</span>
|
|
<span class="ve-col-2 ve-text-center">${size}</span>
|
|
<span class="ve-col-2 ve-text-center ${Parser.sourceJsonToSourceClassname(race.source)} pr-0" title="${Parser.sourceJsonToFull(race.source)}" ${Parser.sourceJsonToStyle(race.source)}>${source}</span>
|
|
</a>`;
|
|
|
|
const listItem = new ListItem(
|
|
rcI,
|
|
eleLi,
|
|
race.name,
|
|
{
|
|
hash,
|
|
ability: race._slAbility,
|
|
size,
|
|
source,
|
|
cleanName: PageFilterRaces.getInvertedName(race.name) || "",
|
|
alias: PageFilterRaces.getListAliases(race),
|
|
},
|
|
{
|
|
isExcluded,
|
|
},
|
|
);
|
|
|
|
eleLi.addEventListener("click", (evt) => this._list.doSelect(listItem, evt));
|
|
eleLi.addEventListener("contextmenu", (evt) => this._openContextMenu(evt, this._list, listItem));
|
|
|
|
return listItem;
|
|
}
|
|
|
|
_renderStats_doBuildStatsTab ({ent}) {
|
|
this._$pgContent.empty().append(RenderRaces.$getRenderedRace(ent));
|
|
}
|
|
}
|
|
|
|
const racesPage = new RacesPage();
|
|
racesPage.sublistManager = new RacesSublistManager();
|
|
window.addEventListener("load", () => racesPage.pOnLoad());
|