DayGridFillRenderer.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { htmlToElement, createElement, appendToElement, prependToElement } from '../util/dom-manip'
  2. import FillRenderer from '../component/renderers/FillRenderer'
  3. import DayGrid from './DayGrid'
  4. import { Seg } from '../component/DateComponent'
  5. import DayGridSlicer from './DayGridSlicer';
  6. export default class DayGridFillRenderer extends FillRenderer {
  7. fillSegTag: string = 'td' // override the default tag name
  8. dayGrid: DayGrid
  9. constructor(dayGrid: DayGrid) {
  10. super(dayGrid.context)
  11. this.dayGrid = dayGrid
  12. }
  13. attachSegs(type, segs: Seg[]) {
  14. let els = []
  15. let i
  16. let seg
  17. let skeletonEl: HTMLElement
  18. for (i = 0; i < segs.length; i++) {
  19. seg = segs[i]
  20. skeletonEl = this.renderFillRow(type, seg)
  21. this.dayGrid.rowEls[seg.row].appendChild(skeletonEl)
  22. els.push(skeletonEl)
  23. }
  24. return els
  25. }
  26. // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.
  27. renderFillRow(type, seg: Seg): HTMLElement {
  28. let { dayGrid } = this
  29. let slicer = (dayGrid.props as any).slicer as DayGridSlicer
  30. let colCnt = slicer.colCnt
  31. let startCol = seg.leftCol
  32. let endCol = seg.rightCol + 1
  33. let className
  34. let skeletonEl: HTMLElement
  35. let trEl: HTMLTableRowElement
  36. if (type === 'businessHours') {
  37. className = 'bgevent'
  38. } else {
  39. className = type.toLowerCase()
  40. }
  41. skeletonEl = htmlToElement(
  42. '<div class="fc-' + className + '-skeleton">' +
  43. '<table><tr></tr></table>' +
  44. '</div>'
  45. )
  46. trEl = skeletonEl.getElementsByTagName('tr')[0]
  47. if (startCol > 0) {
  48. trEl.appendChild(createElement('td', { colSpan: startCol }))
  49. }
  50. (seg.el as HTMLTableCellElement).colSpan = endCol - startCol
  51. trEl.appendChild(seg.el)
  52. if (endCol < colCnt) {
  53. trEl.appendChild(createElement('td', { colSpan: colCnt - endCol }))
  54. }
  55. let introHtml = dayGrid.renderProps.renderIntroHtml()
  56. if (introHtml) {
  57. if (dayGrid.isRtl) {
  58. appendToElement(trEl, introHtml)
  59. } else {
  60. prependToElement(trEl, introHtml)
  61. }
  62. }
  63. return skeletonEl
  64. }
  65. }