Przeglądaj źródła

for DayGrid, use firstCol/lastCol instead of rtl

Adam Shaw 7 lat temu
rodzic
commit
606cff2a4c

+ 10 - 6
src/basic/DayGrid.ts

@@ -41,8 +41,8 @@ export interface RenderProps { // TODO: combine with DayGridProps
 
 
 export interface DayGridSeg extends Seg {
 export interface DayGridSeg extends Seg {
   row: number
   row: number
-  leftCol: number
-  rightCol: number
+  firstCol: number
+  lastCol: number
 }
 }
 
 
 export interface DayGridCell {
 export interface DayGridCell {
@@ -576,6 +576,7 @@ export default class DayGrid extends DateComponentProps<DayGridProps> {
   // `row` is the row number.
   // `row` is the row number.
   // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.
   // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.
   limitRow(row, levelLimit) {
   limitRow(row, levelLimit) {
+    let { colCnt, isRtl } = this
     let rowStruct = this.eventRenderer.rowStructs[row]
     let rowStruct = this.eventRenderer.rowStructs[row]
     let moreNodes = [] // array of "more" <a> links and <td> DOM nodes
     let moreNodes = [] // array of "more" <a> links and <td> DOM nodes
     let col = 0 // col #, left-to-right (not chronologically)
     let col = 0 // col #, left-to-right (not chronologically)
@@ -622,12 +623,15 @@ export default class DayGrid extends DateComponentProps<DayGridProps> {
       // iterate though segments in the last allowable level
       // iterate though segments in the last allowable level
       for (i = 0; i < levelSegs.length; i++) {
       for (i = 0; i < levelSegs.length; i++) {
         seg = levelSegs[i]
         seg = levelSegs[i]
-        emptyCellsUntil(seg.leftCol) // process empty cells before the segment
+        let leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol
+        let rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol
+
+        emptyCellsUntil(leftCol) // process empty cells before the segment
 
 
         // determine *all* segments below `seg` that occupy the same columns
         // determine *all* segments below `seg` that occupy the same columns
         colSegsBelow = []
         colSegsBelow = []
         totalSegsBelow = 0
         totalSegsBelow = 0
-        while (col <= seg.rightCol) {
+        while (col <= rightCol) {
           segsBelow = this.getCellSegs(row, col, levelLimit)
           segsBelow = this.getCellSegs(row, col, levelLimit)
           colSegsBelow.push(segsBelow)
           colSegsBelow.push(segsBelow)
           totalSegsBelow += segsBelow.length
           totalSegsBelow += segsBelow.length
@@ -635,7 +639,7 @@ export default class DayGrid extends DateComponentProps<DayGridProps> {
         }
         }
 
 
         if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links?
         if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links?
-          td = cellMatrix[levelLimit - 1][seg.leftCol] // the segment's parent cell
+          td = cellMatrix[levelLimit - 1][leftCol] // the segment's parent cell
           rowSpan = td.rowSpan || 1
           rowSpan = td.rowSpan || 1
           segMoreNodes = []
           segMoreNodes = []
 
 
@@ -645,7 +649,7 @@ export default class DayGrid extends DateComponentProps<DayGridProps> {
             segsBelow = colSegsBelow[j]
             segsBelow = colSegsBelow[j]
             moreLink = this.renderMoreLink(
             moreLink = this.renderMoreLink(
               row,
               row,
-              seg.leftCol + j,
+              leftCol + j,
               [ seg ].concat(segsBelow) // count seg as hidden too
               [ seg ].concat(segsBelow) // count seg as hidden too
             )
             )
             moreWrap = createElement('div', null, moreLink)
             moreWrap = createElement('div', null, moreLink)

+ 9 - 7
src/basic/DayGridEventRenderer.ts

@@ -123,18 +123,20 @@ export default class DayGridEventRenderer extends SimpleDayGridEventRenderer {
       if (levelSegs) {
       if (levelSegs) {
         for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level
         for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level
           seg = levelSegs[j]
           seg = levelSegs[j]
+          let leftCol = dayGrid.isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol
+          let rightCol = dayGrid.isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol
 
 
-          emptyCellsUntil(seg.leftCol)
+          emptyCellsUntil(leftCol)
 
 
           // create a container that occupies or more columns. append the event element.
           // create a container that occupies or more columns. append the event element.
           td = createElement('td', { className: 'fc-event-container' }, seg.el) as HTMLTableCellElement
           td = createElement('td', { className: 'fc-event-container' }, seg.el) as HTMLTableCellElement
-          if (seg.leftCol !== seg.rightCol) {
-            td.colSpan = seg.rightCol - seg.leftCol + 1
+          if (leftCol !== rightCol) {
+            td.colSpan = rightCol - leftCol + 1
           } else { // a single-column segment
           } else { // a single-column segment
             loneCellMatrix[i][col] = td
             loneCellMatrix[i][col] = td
           }
           }
 
 
-          while (col <= seg.rightCol) {
+          while (col <= rightCol) {
             cellMatrix[i][col] = td
             cellMatrix[i][col] = td
             segMatrix[i][col] = seg
             segMatrix[i][col] = seg
             col++
             col++
@@ -240,8 +242,8 @@ function isDaySegCollision(seg: Seg, otherSegs: Seg) {
     otherSeg = otherSegs[i]
     otherSeg = otherSegs[i]
 
 
     if (
     if (
-      otherSeg.leftCol <= seg.rightCol &&
-      otherSeg.rightCol >= seg.leftCol
+      otherSeg.firstCol <= seg.lastCol &&
+      otherSeg.lastCol >= seg.firstCol
     ) {
     ) {
       return true
       return true
     }
     }
@@ -253,5 +255,5 @@ function isDaySegCollision(seg: Seg, otherSegs: Seg) {
 
 
 // A cmp function for determining the leftmost event
 // A cmp function for determining the leftmost event
 function compareDaySegCols(a: Seg, b: Seg) {
 function compareDaySegCols(a: Seg, b: Seg) {
-  return a.leftCol - b.leftCol
+  return a.firstCol - b.firstCol
 }
 }

+ 4 - 2
src/basic/DayGridFillRenderer.ts

@@ -47,8 +47,10 @@ export default class DayGridFillRenderer extends FillRenderer {
   renderFillRow(type, seg: Seg): HTMLElement {
   renderFillRow(type, seg: Seg): HTMLElement {
     let { dayGrid } = this
     let { dayGrid } = this
     let colCnt = dayGrid.colCnt
     let colCnt = dayGrid.colCnt
-    let startCol = seg.leftCol
-    let endCol = seg.rightCol + 1
+    let leftCol = dayGrid.isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol
+    let rightCol = dayGrid.isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol
+    let startCol = leftCol
+    let endCol = rightCol + 1
     let className
     let className
     let skeletonEl: HTMLElement
     let skeletonEl: HTMLElement
     let trEl: HTMLTableRowElement
     let trEl: HTMLTableRowElement

+ 4 - 12
src/basic/SimpleDayGrid.ts

@@ -44,7 +44,7 @@ export default class SimpleDayGrid extends DateComponent<SimpleDayGridProps> {
     let { dateProfile, dayTable } = props
     let { dateProfile, dayTable } = props
 
 
     dayGrid.receiveProps(
     dayGrid.receiveProps(
-      Object.assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, dayGrid, dayTable, this.isRtl), {
+      Object.assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, dayGrid, dayTable), {
         dateProfile,
         dateProfile,
         cells: dayTable.cells,
         cells: dayTable.cells,
         isRigid: props.isRigid
         isRigid: props.isRigid
@@ -94,18 +94,10 @@ export default class SimpleDayGrid extends DateComponent<SimpleDayGridProps> {
 SimpleDayGrid.prototype.isInteractable = true
 SimpleDayGrid.prototype.isInteractable = true
 
 
 
 
-export class DayGridSlicer extends Slicer<DayGridSeg, [DayTable, boolean]> {
+export class DayGridSlicer extends Slicer<DayGridSeg, [DayTable]> {
 
 
-  sliceRange(dateRange: DateRange, dayTable: DayTable, isRtl: boolean): DayGridSeg[] {
-    return dayTable.sliceRange(dateRange).map(function(seg) {
-      return {
-        isStart: seg.isStart,
-        isEnd: seg.isEnd,
-        row: seg.row,
-        leftCol: isRtl ? (dayTable.colCnt - 1 - seg.lastCol) : seg.firstCol,
-        rightCol: isRtl ? (dayTable.colCnt - 1 - seg.firstCol) : seg.lastCol
-      }
-    })
+  sliceRange(dateRange: DateRange, dayTable: DayTable): DayGridSeg[] {
+    return dayTable.sliceRange(dateRange)
   }
   }
 
 
 }
 }