Explorar o código

adjust isMultiDayRange

Adam Shaw %!s(int64=7) %!d(string=hai) anos
pai
achega
33abdf7686

+ 2 - 2
src/agenda/TimeGridEventRenderer.ts

@@ -3,6 +3,7 @@ import { removeElement, applyStyle } from '../util/dom-manip'
 import { createFormatter } from '../datelib/formatting'
 import EventRenderer from '../component/renderers/EventRenderer'
 import { Seg } from '../component/DateComponent'
+import { isMultiDayRange } from '../util/misc'
 
 const FULL_TIME_FORMAT = createFormatter({ hour: 'numeric', minute: '2-digit' })
 
@@ -88,7 +89,6 @@ export default class TimeGridEventRenderer extends EventRenderer {
 
   // Renders the HTML for a single event segment's default rendering
   fgSegHtml(seg: Seg) {
-    let view = this.view
     let eventRange = seg.eventRange
     let eventDef = eventRange.eventDef
     let eventUi = eventRange.ui
@@ -105,7 +105,7 @@ export default class TimeGridEventRenderer extends EventRenderer {
     classes.unshift('fc-time-grid-event', 'fc-v-event')
 
     // if the event appears to span more than one day...
-    if (view.isMultiDayRange(eventRange.range)) {
+    if (isMultiDayRange(eventRange.range)) {
       // Don't display time text on segments that run entirely through a day.
       // That would appear as midnight-midnight and would look dumb.
       // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)

+ 1 - 10
src/component/DateComponent.ts

@@ -4,7 +4,7 @@ import { default as Component, RenderForceFlags } from './Component'
 import Calendar from '../Calendar'
 import View from '../View'
 import { DateProfile } from '../DateProfileGenerator'
-import { DateMarker, DAY_IDS, addDays, startOfDay, diffDays, diffWholeDays } from '../datelib/marker'
+import { DateMarker, DAY_IDS, addDays, startOfDay, diffWholeDays } from '../datelib/marker'
 import { Duration, createDuration } from '../datelib/duration'
 import { DateSpan } from '../structs/date-span'
 import { EventRenderRange, sliceEventStore, computeEventDefUi, EventUiHash, computeEventDefUis } from '../component/event-rendering'
@@ -15,7 +15,6 @@ import { EventInteractionState } from '../interactions/event-interaction-state'
 import { assignTo } from '../util/object'
 import browserContext from '../common/browser-context'
 import { Hit } from '../interactions/HitDragging'
-import { computeVisibleDayRange } from '../util/misc'
 import { DateRange, rangeContainsMarker } from '../datelib/date-range'
 import EventApi from '../api/EventApi'
 import { parseEventDef, createEventInstance } from '../structs/event'
@@ -1075,14 +1074,6 @@ export default abstract class DateComponent extends Component {
   }
 
 
-  // Does the given range visually appear to occupy more than one day?
-  isMultiDayRange(range) {
-    let dayRange = computeVisibleDayRange(range, this.nextDayThreshold)
-
-    return diffDays(dayRange.start, dayRange.end) > 1
-  }
-
-
   isValidSegDownEl(el: HTMLElement) {
     return !this.eventDrag && !this.eventResize &&
       !elementClosest(el, '.fc-helper') &&

+ 11 - 3
src/list/ListEventRenderer.ts

@@ -2,6 +2,7 @@ import { htmlEscape } from '../util/html'
 import EventRenderer from '../component/renderers/EventRenderer'
 import ListView from './ListView'
 import { Seg } from '../component/DateComponent'
+import { isMultiDayRange } from '../util/misc'
 
 export default class ListEventRenderer extends EventRenderer {
 
@@ -23,6 +24,7 @@ export default class ListEventRenderer extends EventRenderer {
     let theme = calendar.theme
     let eventRange = seg.eventRange
     let eventDef = eventRange.eventDef
+    let eventInstance = eventRange.eventInstance
     let eventUi = eventRange.ui
     let url = eventDef.url
     let classes = [ 'fc-list-item' ].concat(eventUi.classNames)
@@ -31,13 +33,19 @@ export default class ListEventRenderer extends EventRenderer {
 
     if (eventDef.isAllDay) {
       timeHtml = view.getAllDayHtml()
-    } else if (view.isMultiDayRange(eventRange.range)) {
-      if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day
+    } else if (isMultiDayRange(eventRange.range)) {
+      if (seg.isStart) {
         timeHtml = htmlEscape(this._getTimeText(
-          seg.start,
+          eventInstance.range.start,
           seg.end,
           false // isAllDay
         ))
+      } else if (seg.isEnd) {
+        timeHtml = htmlEscape(this._getTimeText(
+          seg.start,
+          eventInstance.range.end,
+          false // isAllDay
+        ))
       } else { // inner segment that lasts the whole day
         timeHtml = view.getAllDayHtml()
       }

+ 8 - 0
src/util/misc.ts

@@ -483,6 +483,14 @@ export function computeVisibleDayRange(timedRange: DateRange, nextDayThreshold:
 }
 
 
+// spans from one day into another?
+export function isMultiDayRange(range: DateRange) {
+  let visibleRange = computeVisibleDayRange(range, createDuration(0))
+
+  return diffDays(visibleRange.start, visibleRange.end) > 1
+}
+
+
 export function diffDates(date0: DateMarker, date1: DateMarker, dateEnv: DateEnv, largeUnit?: string) {
   if (largeUnit === 'year') {
     return createDuration(dateEnv.diffWholeYears(date0, date1), 'year')!