about summary refs log tree commit diff
path: root/app/javascript/flavours/glitch/util/is_mobile.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/javascript/flavours/glitch/util/is_mobile.js')
-rw-r--r--app/javascript/flavours/glitch/util/is_mobile.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/app/javascript/flavours/glitch/util/is_mobile.js b/app/javascript/flavours/glitch/util/is_mobile.js
new file mode 100644
index 000000000..7e584e8fa
--- /dev/null
+++ b/app/javascript/flavours/glitch/util/is_mobile.js
@@ -0,0 +1,35 @@
+import { supportsPassiveEvents } from 'detect-passive-events';
+import { forceSingleColumn } from 'flavours/glitch/util/initial_state';
+
+const LAYOUT_BREAKPOINT = 630;
+
+export function isMobile(width, columns) {
+  switch (columns) {
+  case 'multiple':
+    return false;
+  case 'single':
+    return true;
+  default:
+    return forceSingleColumn || width <= LAYOUT_BREAKPOINT;
+  }
+};
+
+const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
+
+let userTouching = false;
+let listenerOptions = supportsPassiveEvents ? { passive: true } : false;
+
+function touchListener() {
+  userTouching = true;
+  window.removeEventListener('touchstart', touchListener, listenerOptions);
+}
+
+window.addEventListener('touchstart', touchListener, listenerOptions);
+
+export function isUserTouching() {
+  return userTouching;
+}
+
+export function isIOS() {
+  return iOS;
+};