Feast 2.0!
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

87 строки
1.7 KiB

  1. export interface LogEntry {
  2. render: () => HTMLElement[];
  3. }
  4. export class LogLines implements LogEntry {
  5. lines: string[]
  6. constructor (...lines: string[]) {
  7. this.lines = lines
  8. }
  9. render (): HTMLElement[] {
  10. return this.lines.map(line => {
  11. const div = document.createElement("div")
  12. div.innerText = line
  13. return div
  14. })
  15. }
  16. }
  17. export enum FormatOpt {
  18. Damage = "log-damage"
  19. }
  20. export class FormatText implements LogEntry {
  21. constructor (private line: string, private opt: FormatOpt) {
  22. }
  23. render (): HTMLElement[] {
  24. const span = document.createElement("span")
  25. span.innerText = this.line
  26. span.classList.add(this.opt)
  27. return [span]
  28. }
  29. }
  30. export class LogLine implements LogEntry {
  31. private parts: Array<string|LogEntry>
  32. constructor (...parts: Array<string|LogEntry>) {
  33. this.parts = parts
  34. }
  35. render (): HTMLElement[] {
  36. const span = document.createElement("span")
  37. this.parts.forEach(part => {
  38. if (typeof part === "string") {
  39. const partSpan = document.createElement("span")
  40. partSpan.innerText = part
  41. span.appendChild(partSpan)
  42. } else {
  43. (part as LogEntry).render().forEach(logPart => {
  44. span.appendChild(logPart)
  45. })
  46. }
  47. })
  48. return [span]
  49. }
  50. }
  51. export class FAElem implements LogEntry {
  52. constructor (private name: string) {
  53. }
  54. render (): HTMLElement[] {
  55. const i = document.createElement("i")
  56. this.name.split(" ").map(cls => i.classList.add(cls))
  57. return [i]
  58. }
  59. }
  60. export class CompositeLog implements LogEntry {
  61. entries: LogEntry[]
  62. constructor (...entries: LogEntry[]) {
  63. this.entries = entries
  64. }
  65. render (): HTMLElement[] {
  66. return this.entries.flatMap(e => e.render())
  67. }
  68. }