From ef99935e0a232e4daf1877ad1cf874ffc5246e10 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Wed, 6 Dec 2017 17:02:11 +1300 Subject: [PATCH] Double tapping --- src/js/components/Track.js | 36 ++++++++++++++++++++++++++-------- src/js/components/TrackList.js | 20 ++++++++++++------- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/js/components/Track.js b/src/js/components/Track.js index 66dd6956..f126bbe9 100755 --- a/src/js/components/Track.js +++ b/src/js/components/Track.js @@ -19,6 +19,7 @@ export default class Track extends React.Component{ hover: false } + this.last_touchstart = 0; this.start_position = false } @@ -108,37 +109,56 @@ export default class Track extends React.Component{ handleDoubleClick(e){ console.log("handleDoubleClick"); - var target = $(e.target); + this.props.handleDoubleClick(e); } handleTouchStart(e){ console.log("handleTouchStart"); - e.preventDefault(); var target = $(e.target); + var timestamp = Math.floor(Date.now()); + + // Clicked a nested link (ie Artist name), so no touch intervention required + if (target.is('a')){ + console.log('a'); + return false; + + // We started a touchstart within 300ms ago, so handle as double-tap + } else if ((timestamp - this.last_touchstart) > 0 && (timestamp - this.last_touchstart) <= 300){ + e.preventDefault(); + this.props.handleSelection(e); + this.props.handleDoubleClick(e); // Touch-drag zone - if (target.hasClass('drag-zone')){ + } else if (target.hasClass('drag-zone')){ + e.preventDefault(); this.props.handleTouchDrag(e); // Select zone } else if (target.hasClass('select-zone')){ + e.preventDefault(); this.props.handleSelection(e); - // Clicked a nested link (ie Artist name), so no dragging required - } else if (target.is('a')){ - return false; - // Touch contextable } else if (target.hasClass('touch-contextable')){ + e.preventDefault(); this.props.handleContextMenu(e); } + // Save our last tap + this.last_touchstart = timestamp; + return false; } handleTouchEnd(e){ console.log("handleTouchEnd"); - e.preventDefault(); + var target = $(e.target); + var timestamp = Math.floor(Date.now()); + + // Clicked a nested link (ie Artist name), so no dragging required + if (!target.is('a')){ + e.preventDefault(); + } } handleContextMenu(e){ diff --git a/src/js/components/TrackList.js b/src/js/components/TrackList.js index f225bc92..d0443750 100755 --- a/src/js/components/TrackList.js +++ b/src/js/components/TrackList.js @@ -177,8 +177,10 @@ class TrackList extends React.Component{ } handleDoubleClick(e,track_key){ - if (this.props.context_menu) this.props.uiActions.hideContextMenu() - this.playTracks() + if (this.props.context_menu){ + this.props.uiActions.hideContextMenu(); + } + this.playTracks(); } handleContextMenu(e,track_key = null){ @@ -263,17 +265,21 @@ class TrackList extends React.Component{ } playTracks(){ - let selected_tracks = this.digestTracksKeys() - let selected_tracks_indexes = helpers.arrayOf('index',selected_tracks) + let selected_tracks = this.digestTracksKeys(); + let selected_tracks_indexes = helpers.arrayOf('index',selected_tracks); + + if (selected_tracks.length <= 0){ + return this.props.uiActions.createNotification('No tracks selected', 'bad'); + } // Our parent handles playing if (this.props.playTracks !== undefined){ - return this.props.playTracks(selected_tracks) + return this.props.playTracks(selected_tracks); // Default to playing the URIs } else { - let selected_tracks_uris = helpers.arrayOf('uri',selected_tracks) - return this.props.mopidyActions.playURIs(selected_tracks_uris, this.props.uri) + let selected_tracks_uris = helpers.arrayOf('uri',selected_tracks); + return this.props.mopidyActions.playURIs(selected_tracks_uris, this.props.uri); } }