From dbaaa26ffa1c4fdff9038a2698325d772b5b6f0b Mon Sep 17 00:00:00 2001 From: Henry Jewkes Date: Fri, 6 Aug 2021 10:49:50 -0700 Subject: [PATCH 1/2] Fix the rage click system I fixed some problems with rage click detection over hackday, I'm just porting them back to this repo. --- src/tracking/click.js | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/tracking/click.js b/src/tracking/click.js index 893449a..a923b7b 100644 --- a/src/tracking/click.js +++ b/src/tracking/click.js @@ -1,7 +1,9 @@ +import {finder} from '@medv/finder' + export default class ClickTracker { constructor(splitClient, tracked=[]) { this.splitClient = splitClient; - this.tracked = tracked || []; + this.tracked = tracked; this.RAGE_MIN_CLICKS = 5; // 5 clicks this.RAGE_COOLDOWN = 300; // Less than 300 ms apart @@ -22,9 +24,9 @@ export default class ClickTracker { // Trackers trackClick(clickEvent) { + const target = finder(clickEvent.target); const rage = this.isRageClick(clickEvent); - if(rage || this.isTrackedElement(clickEvent)) { - const target = clickEvent.target || clickEvent.srcElement; + if(rage || this.isTrackedElement(target)) { const properties = { "click.target": target, "click.rage": rage @@ -35,8 +37,8 @@ export default class ClickTracker { // Internal Methods - isTrackedElement(clickEvent) { - const target = clickEvent.target || clickEvent.srcElement; + isTrackedElement(target) { + return true; if(this.tracked.find((selector) => target.matches(selector))) { return true; } else { @@ -45,25 +47,35 @@ export default class ClickTracker { } isRageClick(clickEvent, currentTime = this.now()) { - const target = clickEvent.target || clickEvent.srcElement; - if(this.lastClick && this.lastClick.target === target && currentTime - this.lastClick.time < this.RAGE_COOLDOWN) { + if(this.lastClick && this.lastClick.target === clickEvent.target && currentTime - this.lastClick.time < this.RAGE_COOLDOWN) { const delay = currentTime - this.lastClick.time; + + var rage = false; + if(!this.lastClick.triggered && this.lastClick.count >= this.RAGE_MIN_CLICKS) { + // Rage confirmed + rage = true; + } + console.log(rage) + // Some rage, update state this.lastClick = { - target: target, + target: clickEvent.target, count: this.lastClick.count + 1, time: currentTime, - triggered: false, + triggered: rage || this.lastClick.triggered, + delay: delay }; - if(!this.lastClick.triggered && this.lastClick.count >= this.RAGE_MIN_CLICKS) { - // Rage confirmed - return true; + if(rage) { + const rage_event = new CustomEvent('split.rage_click', this.lastClick); + document.dispatchEvent(rage_event); } + + return rage; } else { // No rage, reset state this.lastClick = { - target: target, + target: clickEvent.target, count: 1, time: currentTime, triggered: false, @@ -77,4 +89,4 @@ export default class ClickTracker { now() { return new Date().getTime(); } -} \ No newline at end of file +} From ccd973667c70219737c536f8b1f3325c68825af7 Mon Sep 17 00:00:00 2001 From: Henry Jewkes Date: Fri, 6 Aug 2021 10:58:35 -0700 Subject: [PATCH 2/2] Update click.js --- src/tracking/click.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tracking/click.js b/src/tracking/click.js index a923b7b..38e958d 100644 --- a/src/tracking/click.js +++ b/src/tracking/click.js @@ -38,7 +38,6 @@ export default class ClickTracker { // Internal Methods isTrackedElement(target) { - return true; if(this.tracked.find((selector) => target.matches(selector))) { return true; } else {