ソースを参照

fix listview mouse interactions

Adam Shaw 7 年 前
コミット
143f0822cb
2 ファイル変更12 行追加23 行削除
  1. 11 0
      src/interactions/EventClicking.ts
  2. 1 23
      src/list/ListView.ts

+ 11 - 0
src/interactions/EventClicking.ts

@@ -2,6 +2,7 @@ import DateComponent from '../component/DateComponent'
 import { listenBySelector } from '../util/dom-event'
 import { getElSeg } from '../component/renderers/EventRenderer'
 import EventApi from '../api/EventApi'
+import { elementClosest } from '../util/dom-manip'
 
 /*
 Detects when the user clicks on an event within a DateComponent
@@ -27,6 +28,12 @@ export default class EventClicking {
     let seg = getElSeg(segEl)!
 
     if (component.isValidSegDownEl(ev.target as HTMLElement)) {
+
+      // our way to simulate a link click for elements that can't be <a> tags
+      // grab before trigger fired in case trigger trashes DOM thru rerendering
+      let hasUrlContainer = elementClosest(ev.target as HTMLElement, '.fc-has-url')
+      let url = hasUrlContainer ? (hasUrlContainer.querySelector('a[href]') as any).href : ''
+
       component.publiclyTrigger('eventClick', [
         {
           event: new EventApi(
@@ -38,6 +45,10 @@ export default class EventClicking {
           view: component.view
         }
       ])
+
+      if (url && !ev.defaultPrevented) {
+        window.location.href = url
+      }
     }
   }
 

+ 1 - 23
src/list/ListView.ts

@@ -16,6 +16,7 @@ export default class ListView extends View {
   // initialized after the class
   eventRendererClass: any
 
+  isInteractable = true
   segSelector: any = '.fc-list-item' // which elements accept event actions
 
   scroller: ScrollComponent
@@ -235,26 +236,3 @@ export default class ListView extends View {
 }
 
 ListView.prototype.eventRendererClass = ListEventRenderer
-
-/*
-export default class ListEventPointing extends EventPointing {
-
-  // for events with a url, the whole <tr> should be clickable,
-  // but it's impossible to wrap with an <a> tag. simulate this.
-  handleClick(seg, ev) {
-    let url
-
-    super.handleClick(seg, ev) // might prevent the default action
-
-    // not clicking on or within an <a> with an href
-    if (!elementClosest(ev.target, 'a[href]')) {
-      url = seg.footprint.eventDef.url
-
-      if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler
-        window.location.href = url // simulate link click
-      }
-    }
-  }
-
-}
-*/