aboutsummaryrefslogtreecommitdiff
path: root/app/src/web/assets/js/click_a.js
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2019-02-05 22:13:41 -0500
committerGitHub <noreply@github.com>2019-02-05 22:13:41 -0500
commit330bf2857396b15752afadb030c981a1cb2848fe (patch)
treece224b4ce241ccc58af32614052b2a407f3e89c0 /app/src/web/assets/js/click_a.js
parentc484c2728c1688ed695205a420eba3f2b2ba179d (diff)
downloadfrost-330bf2857396b15752afadb030c981a1cb2848fe.tar.gz
frost-330bf2857396b15752afadb030c981a1cb2848fe.tar.bz2
frost-330bf2857396b15752afadb030c981a1cb2848fe.zip
Enhancement/js (#1344)
* Attempt to add package json * Add initial typescript components * Convert remaining files * Remove some null checks * Reorganize folders * Add missing js and tests for file paths * Delete unused babelrc * Remove unused packages
Diffstat (limited to 'app/src/web/assets/js/click_a.js')
-rw-r--r--app/src/web/assets/js/click_a.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/app/src/web/assets/js/click_a.js b/app/src/web/assets/js/click_a.js
new file mode 100644
index 00000000..7faafc15
--- /dev/null
+++ b/app/src/web/assets/js/click_a.js
@@ -0,0 +1,55 @@
+"use strict";
+(function () {
+ var prevented = false;
+ var _frostAClick = function (e) {
+ // check for valid target
+ var target = e.target || e.currentTarget || e.srcElement;
+ if (!(target instanceof Element)) {
+ console.log("No element found");
+ return;
+ }
+ var element = target;
+ // Notifications are two layers under
+ for (var i = 0; i < 2; i++) {
+ if (element.tagName !== 'A') {
+ element = element.parentElement;
+ }
+ }
+ if (element.tagName === 'A') {
+ if (!prevented) {
+ var 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
+ */
+ var _frostPreventClick = function () {
+ console.log("Click _frostPrevented");
+ prevented = true;
+ };
+ document.addEventListener('click', _frostAClick, true);
+ var clickTimeout = undefined;
+ document.addEventListener('touchstart', function () {
+ clickTimeout = setTimeout(_frostPreventClick, 400);
+ }, true);
+ document.addEventListener('touchend', function () {
+ prevented = false;
+ clearTimeout(clickTimeout);
+ }, true);
+}).call(undefined);