-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathuserBehaviour.min.js
5 lines (5 loc) · 3.58 KB
/
userBehaviour.min.js
1
2
3
4
5
/**
* @author Taha Al-Jody <[email protected]>
* https://github.com/TA3/web-user-behaviour
*/
var userBehaviour=function(){var e={userInfo:!0,clicks:!0,mouseMovement:!0,mouseMovementInterval:1,mouseScroll:!0,mousePageChange:!0,timeCount:!0,clearAfterProcess:!0,processTime:15,windowResize:!0,visibilitychange:!0,processData:function(e){console.log(e)}},s={},n={processInterval:null,mouseInterval:null,mousePosition:[],eventListeners:{scroll:null,click:null,mouseMovement:null,windowResize:null,visibilitychange:null},eventsFunctions:{scroll(){i.mouseScroll.push([window.scrollX,window.scrollY,o()])},click(e){i.clicks.clickCount++;var s=[],n="";e.composedPath().forEach((i,t)=>{t!==e.composedPath().length-1&&t!==e.composedPath().length-2&&(n=i.localName,""!==i.className&&i.classList.forEach(e=>{n+="."+e}),""!==i.id&&(n+="#"+i.id),s.push(n))}),s=s.reverse().join(">"),i.clicks.clickDetails.push([e.clientX,e.clientY,s,o()])},mouseMovement(e){n.mousePosition=[e.clientX,e.clientY,o()]},windowResize(e){i.windowSizes.push([window.innerWidth,window.innerHeight,o()])},visibilitychange(e){i.visibilitychanges.push([document.visibilityState,o()]),c()}}},i={};function t(){i={userInfo:{windowSize:[window.innerWidth,window.innerHeight],appCodeName:navigator.appCodeName||"",appName:navigator.appName||"",vendor:navigator.vendor||"",platform:navigator.platform||"",userAgent:navigator.userAgent||""},time:{startTime:0,currentTime:0,stopTime:0},clicks:{clickCount:0,clickDetails:[]},mouseMovements:[],mouseScroll:[],contextChange:[],windowSizes:[],visibilitychanges:[]}}function o(){return Date.now()}function c(){s.processData(l()),s.clearAfterProcess&&t()}function l(){return!1===s.userInfo&&void 0!==userBehaviour.showResult().userInfo&&delete userBehaviour.showResult().userInfo,void 0!==s.timeCount&&s.timeCount&&(i.time.currentTime=o()),i}return t(),{showConfig:function n(){return Object.keys(s).length!==Object.keys(e).length?e:s},config:function n(i){s={},Object.keys(e).forEach(n=>{n in i?s[n]=i[n]:s[n]=e[n]})},start:function t(){Object.keys(s).length!==Object.keys(e).length&&(console.log("no config provided. using default.."),s=e),void 0!==s.timeCount&&s.timeCount&&(i.time.startTime=o()),s.mouseMovement&&(n.eventListeners.mouseMovement=window.addEventListener("mousemove",n.eventsFunctions.mouseMovement),n.mouseInterval=setInterval(()=>{n.mousePosition&&n.mousePosition.length&&(!i.mouseMovements.length||n.mousePosition[0]!==i.mouseMovements[i.mouseMovements.length-1][0]&&n.mousePosition[1]!==i.mouseMovements[i.mouseMovements.length-1][1])&&i.mouseMovements.push(n.mousePosition)},1e3*e.mouseMovementInterval)),s.clicks&&(n.eventListeners.click=window.addEventListener("click",n.eventsFunctions.click)),s.mouseScroll&&(n.eventListeners.scroll=window.addEventListener("scroll",n.eventsFunctions.scroll)),!1!==s.windowResize&&(n.eventListeners.windowResize=window.addEventListener("resize",n.eventsFunctions.windowResize)),!1!==s.visibilitychange&&(n.eventListeners.visibilitychange=window.addEventListener("visibilitychange",n.eventsFunctions.visibilitychange)),!1!==s.processTime&&(n.processInterval=setInterval(()=>{c()},1e3*s.processTime))},stop:function e(){!1!==s.processTime&&clearInterval(n.processInterval),clearInterval(n.mouseInterval),window.removeEventListener("scroll",n.eventsFunctions.scroll),window.removeEventListener("click",n.eventsFunctions.click),window.removeEventListener("mousemove",n.eventsFunctions.mouseMovement),window.removeEventListener("resize",n.eventsFunctions.windowResize),window.removeEventListener("visibilitychange",n.eventsFunctions.visibilitychange),i.time.stopTime=o(),c()},showResult:l,processResults:c}}();