You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by ru...@apache.org on 2017/10/02 13:16:27 UTC
[whimsy] branch master updated: experimental swipe support
This is an automated email from the ASF dual-hosted git repository.
rubys pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git
The following commit(s) were added to refs/heads/master by this push:
new 2497db8 experimental swipe support
2497db8 is described below
commit 2497db8dabfc3064ea2473a8614b33b3f0d9e68b
Author: Sam Ruby <ru...@intertwingly.net>
AuthorDate: Mon Oct 2 09:15:57 2017 -0400
experimental swipe support
---
www/board/agenda/views/app.js.rb | 1 +
www/board/agenda/views/layout/main.js.rb | 3 +-
www/board/agenda/views/touch.js.rb | 53 ++++++++++++++++++++++++++++++++
3 files changed, 56 insertions(+), 1 deletion(-)
diff --git a/www/board/agenda/views/app.js.rb b/www/board/agenda/views/app.js.rb
index 1386377..002c6f4 100644
--- a/www/board/agenda/views/app.js.rb
+++ b/www/board/agenda/views/app.js.rb
@@ -5,6 +5,7 @@ require_relative 'event-bus'
# common
require_relative 'router'
require_relative 'keyboard'
+require_relative 'touch'
require_relative 'utils'
# General layout
diff --git a/www/board/agenda/views/layout/main.js.rb b/www/board/agenda/views/layout/main.js.rb
index a2de545..0f286dd 100644
--- a/www/board/agenda/views/layout/main.js.rb
+++ b/www/board/agenda/views/layout/main.js.rb
@@ -112,8 +112,9 @@ class Main < Vue
end
end
- # start watching keystrokes
+ # start watching keystrokes and fingers
Keyboard.initEventHandlers()
+ Touch.initEventHandlers()
# whenever the window is resized, adjust margins of the main area to
# avoid overlapping the header and footer areas
diff --git a/www/board/agenda/views/touch.js.rb b/www/board/agenda/views/touch.js.rb
new file mode 100644
index 0000000..2778081
--- /dev/null
+++ b/www/board/agenda/views/touch.js.rb
@@ -0,0 +1,53 @@
+#
+# Respond to swipes
+#
+
+class Touch
+ def self.initEventHandlers()
+ threshold = 150 # minimum distance required to be considered a swipe
+ limit = 100 # max distance in other direction
+ allowedTime = 500 # maximum time
+
+ startX = 0
+ startY = 0
+ startTime = 0
+
+ document.body.addEventListener :touchstart do |event|
+ touchobj = event.changedTouches[0]
+ startX = touchobj.pageX
+ startY = touchobj.pageY
+ startTime = Date.new().getTime()
+ end
+
+ document.body.addEventListener :touchend do |event|
+ elapsed = startTime - Date.new().getTime()
+ return if elapsed > allowedTime
+
+ touchobj = event.changedTouches[0]
+ distX = startX - touchobj.pageX
+ distY = startY - touchobj.pageY
+
+ swipedir = 'none'
+
+ if Math.abs(distX) >= threshold and Math.abs(distY) <= limit
+ swipedir = (distX < 0) ? 'left' : 'right'
+ elsif Math.abs(distY) >= threshold and Math.abs(distX) <= limit
+ swipedir = (distY < 0) ? 'up' : 'down'
+ end
+
+ case swipedir
+ when 'left'
+ link = document.querySelector("a[rel=prev]")
+ link.click() if link
+
+ when 'right'
+ link = document.querySelector("a[rel=prev]")
+ link.click() if link
+
+ when 'up', 'down'
+ Main.navigate history.state.path.sub(/\w+\/?$/, '') || '.'
+ end
+ end
+
+ end
+end
--
To stop receiving notification emails like this one, please contact
['"commits@whimsical.apache.org" <co...@whimsical.apache.org>'].