forked from MapComplete/MapComplete
Reformat all files with prettier
This commit is contained in:
parent
e22d189376
commit
b541d3eab4
382 changed files with 50893 additions and 35566 deletions
|
@ -1,21 +1,23 @@
|
|||
import Combine from "./Combine";
|
||||
import BaseUIElement from "../BaseUIElement";
|
||||
import {Translation} from "../i18n/Translation";
|
||||
import {FixedUiElement} from "./FixedUiElement";
|
||||
import Title from "./Title";
|
||||
import List from "./List";
|
||||
import Hash from "../../Logic/Web/Hash";
|
||||
import Link from "./Link";
|
||||
import {Utils} from "../../Utils";
|
||||
import Combine from "./Combine"
|
||||
import BaseUIElement from "../BaseUIElement"
|
||||
import { Translation } from "../i18n/Translation"
|
||||
import { FixedUiElement } from "./FixedUiElement"
|
||||
import Title from "./Title"
|
||||
import List from "./List"
|
||||
import Hash from "../../Logic/Web/Hash"
|
||||
import Link from "./Link"
|
||||
import { Utils } from "../../Utils"
|
||||
|
||||
export default class TableOfContents extends Combine {
|
||||
|
||||
private readonly titles: Title[]
|
||||
|
||||
constructor(elements: Combine | Title[], options?: {
|
||||
noTopLevel: false | boolean,
|
||||
maxDepth?: number
|
||||
}) {
|
||||
constructor(
|
||||
elements: Combine | Title[],
|
||||
options?: {
|
||||
noTopLevel: false | boolean
|
||||
maxDepth?: number
|
||||
}
|
||||
) {
|
||||
let titles: Title[]
|
||||
if (elements instanceof Combine) {
|
||||
titles = TableOfContents.getTitles(elements.getElements()) ?? []
|
||||
|
@ -23,7 +25,7 @@ export default class TableOfContents extends Combine {
|
|||
titles = elements ?? []
|
||||
}
|
||||
|
||||
let els: { level: number, content: BaseUIElement }[] = []
|
||||
let els: { level: number; content: BaseUIElement }[] = []
|
||||
for (const title of titles) {
|
||||
let content: BaseUIElement
|
||||
if (title.title instanceof Translation) {
|
||||
|
@ -41,29 +43,27 @@ export default class TableOfContents extends Combine {
|
|||
|
||||
const vis = new Link(content, "#" + title.id)
|
||||
|
||||
Hash.hash.addCallbackAndRun(h => {
|
||||
Hash.hash.addCallbackAndRun((h) => {
|
||||
if (h === title.id) {
|
||||
vis.SetClass("font-bold")
|
||||
} else {
|
||||
vis.RemoveClass("font-bold")
|
||||
}
|
||||
})
|
||||
els.push({level: title.level, content: vis})
|
||||
|
||||
els.push({ level: title.level, content: vis })
|
||||
}
|
||||
const minLevel = Math.min(...els.map(e => e.level))
|
||||
const minLevel = Math.min(...els.map((e) => e.level))
|
||||
if (options?.noTopLevel) {
|
||||
els = els.filter(e => e.level !== minLevel)
|
||||
els = els.filter((e) => e.level !== minLevel)
|
||||
}
|
||||
|
||||
if (options?.maxDepth) {
|
||||
els = els.filter(e => e.level <= (options.maxDepth + minLevel))
|
||||
els = els.filter((e) => e.level <= options.maxDepth + minLevel)
|
||||
}
|
||||
|
||||
|
||||
super(TableOfContents.mergeLevel(els).map(el => el.SetClass("mt-2")));
|
||||
super(TableOfContents.mergeLevel(els).map((el) => el.SetClass("mt-2")))
|
||||
this.SetClass("flex flex-col")
|
||||
this.titles = titles;
|
||||
this.titles = titles
|
||||
}
|
||||
|
||||
private static getTitles(elements: BaseUIElement[]): Title[] {
|
||||
|
@ -78,13 +78,15 @@ export default class TableOfContents extends Combine {
|
|||
return titles
|
||||
}
|
||||
|
||||
private static mergeLevel(elements: { level: number, content: BaseUIElement }[]): BaseUIElement[] {
|
||||
const maxLevel = Math.max(...elements.map(e => e.level))
|
||||
const minLevel = Math.min(...elements.map(e => e.level))
|
||||
private static mergeLevel(
|
||||
elements: { level: number; content: BaseUIElement }[]
|
||||
): BaseUIElement[] {
|
||||
const maxLevel = Math.max(...elements.map((e) => e.level))
|
||||
const minLevel = Math.min(...elements.map((e) => e.level))
|
||||
if (maxLevel === minLevel) {
|
||||
return elements.map(e => e.content)
|
||||
return elements.map((e) => e.content)
|
||||
}
|
||||
const result: { level: number, content: BaseUIElement } [] = []
|
||||
const result: { level: number; content: BaseUIElement }[] = []
|
||||
let running: BaseUIElement[] = []
|
||||
for (const element of elements) {
|
||||
if (element.level === maxLevel) {
|
||||
|
@ -94,7 +96,7 @@ export default class TableOfContents extends Combine {
|
|||
if (running.length !== undefined) {
|
||||
result.push({
|
||||
content: new List(running),
|
||||
level: maxLevel - 1
|
||||
level: maxLevel - 1,
|
||||
})
|
||||
running = []
|
||||
}
|
||||
|
@ -103,7 +105,7 @@ export default class TableOfContents extends Combine {
|
|||
if (running.length !== undefined) {
|
||||
result.push({
|
||||
content: new List(running),
|
||||
level: maxLevel - 1
|
||||
level: maxLevel - 1,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -112,8 +114,8 @@ export default class TableOfContents extends Combine {
|
|||
|
||||
AsMarkdown(): string {
|
||||
const depthIcons = ["1.", " -", " +", " *"]
|
||||
const lines = ["## Table of contents\n"];
|
||||
const minLevel = Math.min(...this.titles.map(t => t.level))
|
||||
const lines = ["## Table of contents\n"]
|
||||
const minLevel = Math.min(...this.titles.map((t) => t.level))
|
||||
for (const title of this.titles) {
|
||||
const prefix = depthIcons[title.level - minLevel] ?? " ~"
|
||||
const text = title.title.AsMarkdown().replace("\n", "")
|
||||
|
@ -123,4 +125,4 @@ export default class TableOfContents extends Combine {
|
|||
|
||||
return lines.join("\n") + "\n\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue