"use strict"; class RacesSublistManager extends SublistManager { constructor () { super({ sublistClass: "subraces", }); } 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 = $(`
${this.constructor._getRowCellsHtml({values: cellsText})}
`) .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}), dataSourceFluff: DataUtil.raceFluff.loadJSON.bind(DataUtil.raceFluff), prereleaseDataSource: DataUtil.race.loadPrerelease.bind(DataUtil.race), brewDataSource: DataUtil.race.loadBrew.bind(DataUtil.race), pFnGetFluff: Renderer.race.pGetFluff.bind(Renderer.race), pageFilter, listClass: "races", dataProps: ["race"], isMarkdownPopout: true, 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 = ` ${race.name} ${race._slAbility} ${size} ${source} `; 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());