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

106 строки
2.1 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. DamageInst = "damage-instance"
  20. }
  21. export class FormatEntry implements LogEntry {
  22. constructor (private entry: LogEntry, private opt: FormatOpt) {
  23. }
  24. render (): HTMLElement[] {
  25. const span = document.createElement("span")
  26. this.entry.render().forEach(elem => {
  27. span.appendChild(elem)
  28. })
  29. span.classList.add(this.opt)
  30. return [span]
  31. }
  32. }
  33. export class FormatText implements LogEntry {
  34. constructor (private opt: FormatOpt, private line: string) {
  35. }
  36. render (): HTMLElement[] {
  37. const span = document.createElement("span")
  38. span.innerText = this.line
  39. span.classList.add(this.opt)
  40. return [span]
  41. }
  42. }
  43. export class LogLine implements LogEntry {
  44. private parts: Array<string|LogEntry>
  45. constructor (...parts: Array<string|LogEntry>) {
  46. this.parts = parts
  47. }
  48. render (): HTMLElement[] {
  49. const span = document.createElement("span")
  50. this.parts.forEach(part => {
  51. if (typeof part === "string") {
  52. const partSpan = document.createElement("span")
  53. partSpan.innerText = part
  54. span.appendChild(partSpan)
  55. } else {
  56. (part as LogEntry).render().forEach(logPart => {
  57. span.appendChild(logPart)
  58. })
  59. }
  60. })
  61. return [span]
  62. }
  63. }
  64. export class FAElem implements LogEntry {
  65. constructor (private name: string) {
  66. }
  67. render (): HTMLElement[] {
  68. const i = document.createElement("i")
  69. this.name.split(" ").map(cls => i.classList.add(cls))
  70. return [i]
  71. }
  72. }
  73. export class CompositeLog implements LogEntry {
  74. entries: LogEntry[]
  75. constructor (...entries: LogEntry[]) {
  76. this.entries = entries
  77. }
  78. render (): HTMLElement[] {
  79. return this.entries.flatMap(e => e.render())
  80. }
  81. }