NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
function loadScript(url, callback) { // Adding the script tag to the head as suggested before var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; // Then bind the event to the callback function. // There are several events for cross browser compatibility. script.onreadystatechange = callback; script.onload = callback; // Fire the loading head.appendChild(script); } var elements = []; var elementsNames = []; var pageX; var pageY; var actualURL; var dataLogs = []; var username = getCookie("username"); function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null; } function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1); if (c.indexOf(name) == 0) return c.substring(name.length, c.length); } return ""; } if (username==""){ username = getURLParameter('username'); } console.log("Cookie " + getCookie('username')); if (username!=""){ if (getCookie('username')=="") { document.cookie = "username=" + username; } } /** initialisation **/ var date = new Date(); var timeStamp = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "." + date.getMilliseconds(); var urlChangeEvent = "{Type: \"URL\", TimeStamp: \""+ timeStamp +"\", URL: \"" + window.location.href + "\"}"; console.log(urlChangeEvent); uploadData(urlChangeEvent); actualURL = window.location.href; /** initilisation **/ function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1); if (c.indexOf(name) == 0) return c.substring(name.length,c.length); } return ""; } var myVar = setInterval(function () { logPositions(elements, elementsNames); var result = getElements(dynamicElementsQueries); var tempElements = result[0]; var tempNames = result[1]; logPositions(tempElements, tempNames); }, 75); //// before leave page send data to logger function sendLogsBeforeLeave() { localStorage.setItem("aois", JSON.stringify(dataLogs)); window.onbeforeunload = null; } function exitConfirmation () { //setTimeout( sendLogsBeforeLeave, 0 ); localStorage.setItem("aois", JSON.stringify(dataLogs)); return "There are unsaved changes on this canvas, all your changes will be lost if you exit !"; } window.onbeforeunload = exitConfirmation(); function logPositions(tempElements, tempElementsNames) { for (var i = 0; i < tempElements.length; i++) { var elm = tempElements[i]; var pElm = getScreenCoordinatesOf(elm); if (checkVisible(pElm, elm)) { var dimensions = computeDimensions(pElm, elm); var date = new Date(); var timeStamp = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "." + date.getMilliseconds(); var position = "{Type: \"Position\", TimeStamp: \""+ timeStamp +"\", URL: \""+actualURL+"\", AOIName: \"" + tempElementsNames[i] +"\", PositionX:\""+ dimensions.pX +"\"," + " PositionY:\""+ dimensions.pY +"\", Width:\""+ dimensions.width +"\", Height:\""+ dimensions.height +"\"}"; console.log(position); uploadData(position); } } } function uploadData(data){ /* var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { // console.log(xmlhttp.responseText); } }; dataLogs.push(data); if (dataLogs.length > 50) { xmlhttp.open("POST", url + "logger.php?username="+username, true); xmlhttp.send(dataLogs.join("\n")); dataLogs = []; }*/ } function checkVisible(pElm, elm) { if (!(pElm && elm)) return false; return (pElm.y + elm.offsetHeight > pageY) && (pElm.y < window.innerHeight + pageY) && (pElm.x + elm.offsetWidth > pageX) && (pElm.x < window.innerWidth + pageX); } function computeDimensions(positionElm, elm) { var pY, pX, height, width; if (positionElm.y < pageY) { height = elm.offsetHeight - (pageY - positionElm.y); pY = pageY; } else if (positionElm.y + elm.offsetHeight > window.innerHeight + pageY) { pY = positionElm.y; height = (positionElm.y + elm.offsetHeight) - (window.innerHeight + pageY); } else { height = elm.offsetHeight; pY = positionElm.y; } if (positionElm.x < pageX) { width = elm.offsetWidth - (pageX - positionElm.x); pX = pageX; } else { width = elm.offsetWidth; pX = positionElm.x; } return { pY: pY, pX: pX, width: width, height: height }; } window.onmousemove = function (e) { pageX = e.screenX - e.clientX; pageY = e.screenY - e.clientY; // console.log(pageX + " " + pageY); //console.log("window w h " + window.innerWidth + " " + window.innerHeight); }; window.onmousedown = function (e) { var button = ""; button = e.button === 0 ? "LEFT_BUTTON" : "RIGHT_BUTTON"; var mouseEvent = "{Type: \"MouseEvent\", TimeStamp: \""+ timeStamp +"\", URL: \""+actualURL+"\", ClickX:\""+ e.screenX +"\"," + "ClickY:\""+ e.screenY +"\", MouseButton:\""+ button +"\"}"; console.log(mouseEvent); uploadData(mouseEvent); //logPositions(elementIDs); }; document.onkeypress = function (e){ var charCode = (typeof e.which == "number") ? e.which : e.keyCode var keyEvent = "{Type: \"KeyEvent\", TimeStamp: \""+ timeStamp +"\", URL: \""+actualURL+"\", Key:\""+ charCode +"\"}"; console.log(keyEvent); uploadData(keyEvent); }; function getElementsByClassName() { var result = []; for (var i = 0; i < elementsByClass.length; i++) { var elements = document.getElementsByClassName(elementsByClass[i]); if (elements) { var counter = 0; for (var j=0;j<elements.length;j++){ result.push(elements[j]); elementsNames.push(elementsByClass[i] + "_" + counter); counter++; } } } console.log(result); return result; } // funkcia vrati pole, ktore obsahuje 2 polia [objekty, mena objektov] function getElements(tempQueries) { var result = []; var tempNames = []; for (var i = 0; i < tempQueries.length; i++) { var elem = document.querySelector(tempQueries[i]); if (elem) { result.push(elem); tempNames.push(tempQueries[i]); } } return [result, tempNames]; } function getScreenCoordinatesOf(obj) { try { if (obj) { var p = {}; var box = obj.getBoundingClientRect(); p.x = Math.round(pageX + box.left); p.y = Math.round(pageY + box.top); return p; } } catch (e) { console.log(e); } } //var createUserCookies=function() { // username = setUserCookies(); //}; // // //loadScript("http://localhost/experiment/experiment/tampermonkey-scripts/user-id.js", createUserCookies);