Feast 2.0!
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 

39 satır
913 B

  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. const p = document.createElement('p')
  11. this.lines.forEach(line => {
  12. const div = document.createElement('div')
  13. div.innerText = line
  14. p.appendChild(div)
  15. })
  16. return [p]
  17. }
  18. }
  19. export class CompositeLog implements LogEntry {
  20. entries: LogEntry[]
  21. constructor (...entries: LogEntry[]) {
  22. this.entries = entries
  23. }
  24. render (): HTMLElement[] {
  25. return this.entries.map(entry => entry.render()).reduce((results: HTMLElement[], next: HTMLElement[]) => results.concat(next), [])
  26. }
  27. }
  28. export function log (entry: LogEntry): void {
  29. entry.render().forEach(elem => document.querySelector('#log')?.appendChild(elem))
  30. }