aboutsummaryrefslogtreecommitdiff
path: root/app/src/web/assets/js/click_a.ts
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2019-02-05 23:16:29 -0500
committerGitHub <noreply@github.com>2019-02-05 23:16:29 -0500
commit8e3bfc168009c8682c4f6191d655f3ca10ae9f21 (patch)
treecf8419a06e193c08622ead5e6854b995a5eeba77 /app/src/web/assets/js/click_a.ts
parent83fb36f666fbb934b74b5f763b8ffb2e56ca7761 (diff)
parentddfc310fde5f50ba52ef930287449c2e08faaca8 (diff)
downloadfrost-8e3bfc168009c8682c4f6191d655f3ca10ae9f21.tar.gz
frost-8e3bfc168009c8682c4f6191d655f3ca10ae9f21.tar.bz2
frost-8e3bfc168009c8682c4f6191d655f3ca10ae9f21.zip
Merge pull request #1334 from AllanWang/fix/offline-crash
Fix/offline crash
Diffstat (limited to 'app/src/web/assets/js/click_a.ts')
-rw-r--r--app/src/web/assets/js/click_a.ts57
1 files changed, 57 insertions, 0 deletions
diff --git a/app/src/web/assets/js/click_a.ts b/app/src/web/assets/js/click_a.ts
new file mode 100644
index 00000000..5023610e
--- /dev/null
+++ b/app/src/web/assets/js/click_a.ts
@@ -0,0 +1,57 @@
+(function () {
+ let prevented = false;
+
+ const _frostAClick = (e: Event) => {
+ // check for valid target
+ const target = e.target || e.currentTarget || e.srcElement;
+ if (!(target instanceof Element)) {
+ console.log("No element found");
+ return
+ }
+ let element: Element = target;
+ // Notifications are two layers under
+ for (let i = 0; i < 2; i++) {
+ if (element.tagName !== 'A') {
+ element = <Element>element.parentElement;
+ }
+ }
+ if (element.tagName === 'A') {
+ if (!prevented) {
+ const url = element.getAttribute('href');
+ if (!url || url === '#') {
+ return
+ }
+ console.log(`Click intercept ${url}`);
+ // If Frost is injected, check if loading the url through an overlay works
+ if (Frost.loadUrl(url)) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ } else {
+ console.log("Click intercept prevented")
+ }
+ }
+ };
+
+ /*
+ * On top of the click event, we must stop it for long presses
+ * Since that will conflict with the context menu
+ * Note that we only override it on conditions where the context menu
+ * Will occur
+ */
+ const _frostPreventClick = () => {
+ console.log("Click _frostPrevented");
+ prevented = true;
+ };
+
+ document.addEventListener('click', _frostAClick, true);
+ let clickTimeout: number | undefined = undefined;
+ document.addEventListener('touchstart', () => {
+ clickTimeout = setTimeout(_frostPreventClick, 400);
+ }, true);
+ document.addEventListener('touchend', () => {
+ prevented = false;
+ clearTimeout(clickTimeout)
+ }, true);
+}).call(undefined);
+