Преглед изворни кода

mirror goes thru handlers, and gets flag

Adam Shaw пре 7 година
родитељ
комит
a8ea9dbf6b

+ 4 - 2
src/component/DateComponent.ts

@@ -270,7 +270,7 @@ export default abstract class DateComponent extends Component {
   }
   }
 
 
 
 
-  triggerRenderedSegs(segs: Seg[]) {
+  triggerRenderedSegs(segs: Seg[], isMirrors: boolean = false) {
     if (this.hasPublicHandlers('eventAfterRender')) {
     if (this.hasPublicHandlers('eventAfterRender')) {
       let calendar = this.getCalendar()
       let calendar = this.getCalendar()
 
 
@@ -282,6 +282,9 @@ export default abstract class DateComponent extends Component {
               seg.eventRange.def,
               seg.eventRange.def,
               seg.eventRange.instance
               seg.eventRange.instance
             ),
             ),
+            isMirror: isMirrors,
+            isStart: seg.isStart,
+            isEnd: seg.isEnd,
             el: seg.el,
             el: seg.el,
             view: this
             view: this
           }
           }
@@ -604,7 +607,6 @@ export default abstract class DateComponent extends Component {
       this.eventRenderer.renderSegs(
       this.eventRenderer.renderSegs(
         this.eventRangesToSegs(eventRanges)
         this.eventRangesToSegs(eventRanges)
       )
       )
-      this.triggerRenderedSegs(this.eventRenderer.getSegs())
 
 
       // hack to fire eventAfterAllRender
       // hack to fire eventAfterAllRender
       let calendar = this.getCalendar()
       let calendar = this.getCalendar()

+ 6 - 3
src/component/renderers/EventRenderer.ts

@@ -82,6 +82,8 @@ export default class EventRenderer {
     if (this.renderFgSegs(fgSegs) !== false) { // no failure?
     if (this.renderFgSegs(fgSegs) !== false) { // no failure?
       this.fgSegs = fgSegs
       this.fgSegs = fgSegs
     }
     }
+
+    this.view.triggerRenderedSegs(this.getSegs())
   }
   }
 
 
 
 
@@ -151,7 +153,7 @@ export default class EventRenderer {
 
 
   // Renders and assigns an `el` property for each foreground event segment.
   // Renders and assigns an `el` property for each foreground event segment.
   // Only returns segments that successfully rendered.
   // Only returns segments that successfully rendered.
-  renderFgSegEls(segs: Seg[]) {
+  renderFgSegEls(segs: Seg[], isMirrors?: boolean) {
     let hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender')
     let hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender')
     let html = ''
     let html = ''
     let renderedSegs = []
     let renderedSegs = []
@@ -170,7 +172,7 @@ export default class EventRenderer {
         let seg = segs[i]
         let seg = segs[i]
 
 
         if (hasEventRenderHandlers) { // optimization
         if (hasEventRenderHandlers) { // optimization
-          el = this.filterEventRenderEl(seg, el)
+          el = this.filterEventRenderEl(seg, el, isMirrors)
         }
         }
 
 
         if (el) {
         if (el) {
@@ -217,7 +219,7 @@ export default class EventRenderer {
 
 
   // Given an event and the default element used for rendering, returns the element that should actually be used.
   // Given an event and the default element used for rendering, returns the element that should actually be used.
   // Basically runs events and elements through the eventRender hook.
   // Basically runs events and elements through the eventRender hook.
-  filterEventRenderEl(seg: Seg, el) {
+  filterEventRenderEl(seg: Seg, el: HTMLElement, isMirror: boolean = false) {
 
 
     let custom = this.view.publiclyTrigger('eventRender', [
     let custom = this.view.publiclyTrigger('eventRender', [
       {
       {
@@ -226,6 +228,7 @@ export default class EventRenderer {
           seg.eventRange.def,
           seg.eventRange.def,
           seg.eventRange.instance,
           seg.eventRange.instance,
         ),
         ),
+        isMirror,
         isStart: seg.isStart,
         isStart: seg.isStart,
         isEnd: seg.isEnd,
         isEnd: seg.isEnd,
         // TODO: include seg.range once all components consistently generate it
         // TODO: include seg.range once all components consistently generate it

+ 3 - 1
src/component/renderers/MirrorRenderer.ts

@@ -41,7 +41,7 @@ export default abstract class MirrorRenderer {
     let i
     let i
 
 
     // assigns each seg's el and returns a subset of segs that were rendered
     // assigns each seg's el and returns a subset of segs that were rendered
-    segs = this.eventRenderer.renderFgSegEls(segs)
+    segs = this.eventRenderer.renderFgSegEls(segs, true) // isMirrors=true
 
 
     for (i = 0; i < segs.length; i++) {
     for (i = 0; i < segs.length; i++) {
       let classList = segs[i].el.classList
       let classList = segs[i].el.classList
@@ -59,6 +59,8 @@ export default abstract class MirrorRenderer {
 
 
     this.mirrorEls = this.renderSegs(segs, sourceSeg)
     this.mirrorEls = this.renderSegs(segs, sourceSeg)
     this.segs = segs
     this.segs = segs
+
+    this.view.triggerRenderedSegs(segs, true) // isMirrors=true
   }
   }
 
 
 
 

+ 1 - 0
tests/automated/legacy/eventRender.js

@@ -28,6 +28,7 @@ describe('eventRender', function() {
               expect(arg.event.start).toBeDefined()
               expect(arg.event.start).toBeDefined()
               expect(arg.el instanceof HTMLElement).toBe(true)
               expect(arg.el instanceof HTMLElement).toBe(true)
               expect(typeof arg.view).toBe('object')
               expect(typeof arg.view).toBe('object')
+              expect(arg.isMirror).toBe(false)
               $(arg.el).css('font-size', '20px')
               $(arg.el).css('font-size', '20px')
             },
             },
             eventAfterAllRender: function() {
             eventAfterAllRender: function() {

+ 12 - 4
tests/automated/legacy/selectMirror.js

@@ -7,13 +7,21 @@ describe('selectMirror', function() {
     selectMirror: true
     selectMirror: true
   })
   })
 
 
-  it('goes through eventRender', function() {
+  it('goes through eventRender and eventAfterRender', function() {
     initCalendar({
     initCalendar({
-      eventRender: function(arg) {
-        $(arg.el).addClass('didEventRender')
+      eventRender(arg) {
+        expect(arg.isMirror).toBe(true)
+        $(arg.el).addClass('eventDidRender')
+      },
+      eventAfterRender(arg) {
+        expect(arg.isMirror).toBe(true)
+        $(arg.el).addClass('eventDidPosition')
       }
       }
     })
     })
+
     currentCalendar.select('2014-08-04T01:00:00Z', '2014-08-04T04:00:00Z')
     currentCalendar.select('2014-08-04T01:00:00Z', '2014-08-04T04:00:00Z')
-    expect($('.fc-mirror')).toHaveClass('didEventRender')
+
+    expect($('.fc-mirror')).toHaveClass('eventDidRender')
+    expect($('.fc-mirror')).toHaveClass('eventDidPosition')
   })
   })
 })
 })