DayGridHelperRenderer.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { htmlToElement } from '../util/dom-manip'
  2. import HelperRenderer from '../component/renderers/HelperRenderer'
  3. import DayGrid from './DayGrid'
  4. export default class DayGridHelperRenderer extends HelperRenderer {
  5. component: DayGrid
  6. // Renders a mock "helper" event. `sourceSeg` is the associated internal segment object. It can be null.
  7. renderSegs(segs, sourceSeg) {
  8. let helperNodes = []
  9. let rowStructs
  10. // TODO: not good to call eventRenderer this way
  11. rowStructs = this.eventRenderer.renderSegRows(segs)
  12. // inject each new event skeleton into each associated row
  13. this.component.rowEls.forEach(function(rowNode, row) {
  14. let skeletonEl = htmlToElement('<div class="fc-helper-skeleton"><table></table></div>') // will be absolutely positioned
  15. let skeletonTopEl: HTMLElement
  16. let skeletonTop
  17. // If there is an original segment, match the top position. Otherwise, put it at the row's top level
  18. if (sourceSeg && sourceSeg.row === row) {
  19. skeletonTopEl = sourceSeg.el
  20. } else {
  21. skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody')
  22. if (!skeletonTopEl) { // when no events
  23. skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table')
  24. }
  25. }
  26. skeletonTop = skeletonTopEl.getBoundingClientRect().top -
  27. rowNode.getBoundingClientRect().top // the offsetParent origin
  28. skeletonEl.style.top = skeletonTop + 'px'
  29. skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl)
  30. rowNode.appendChild(skeletonEl)
  31. helperNodes.push(skeletonEl)
  32. })
  33. return helperNodes // must return the elements rendered
  34. }
  35. }