parent
02fa08e266
commit
dd2d13b4e4
2 changed files with 68 additions and 68 deletions
File diff suppressed because one or more lines are too long
132
webdata/fn.js
132
webdata/fn.js
|
|
@ -19,47 +19,47 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// [1 Touch, 2 Touches, 3 Touches] (as pixel)
|
// [1 Touch, 2 Touches, 3 Touches] (as pixel)
|
||||||
const TOUCH_MOVE_THRESHOLD = [10, 15, 15];
|
var TOUCH_MOVE_THRESHOLD = [10, 15, 15];
|
||||||
// Max time between consecutive touches for clicking or dragging (as milliseconds)
|
// Max time between consecutive touches for clicking or dragging (as milliseconds)
|
||||||
const TOUCH_TIMEOUT = 250;
|
var TOUCH_TIMEOUT = 250;
|
||||||
// [[pixel/second, multiplicator], ...]
|
// [[pixel/second, multiplicator], ...]
|
||||||
const POINTER_ACCELERATION = [
|
var POINTER_ACCELERATION = [
|
||||||
[0, 0],
|
[0, 0],
|
||||||
[87, 1],
|
[87, 1],
|
||||||
[173, 1],
|
[173, 1],
|
||||||
[553, 2]
|
[553, 2]
|
||||||
];
|
];
|
||||||
|
|
||||||
const POINTER_BUTTON_LEFT = 0;
|
var POINTER_BUTTON_LEFT = 0;
|
||||||
const POINTER_BUTTON_RIGHT = 1;
|
var POINTER_BUTTON_RIGHT = 1;
|
||||||
const POINTER_BUTTON_MIDDLE = 2;
|
var POINTER_BUTTON_MIDDLE = 2;
|
||||||
|
|
||||||
const KEY_VOLUME_MUTE = 0;
|
var KEY_VOLUME_MUTE = 0;
|
||||||
const KEY_VOLUME_DOWN = 1;
|
var KEY_VOLUME_DOWN = 1;
|
||||||
const KEY_VOLUME_UP = 2;
|
var KEY_VOLUME_UP = 2;
|
||||||
const KEY_MEDIA_PLAY_PAUSE = 3;
|
var KEY_MEDIA_PLAY_PAUSE = 3;
|
||||||
const KEY_MEDIA_PREV_TRACK = 4;
|
var KEY_MEDIA_PREV_TRACK = 4;
|
||||||
const KEY_MEDIA_NEXT_TRACK = 5;
|
var KEY_MEDIA_NEXT_TRACK = 5;
|
||||||
const KEY_BROWSER_BACK = 6;
|
var KEY_BROWSER_BACK = 6;
|
||||||
const KEY_BROWSER_FORWARD = 7;
|
var KEY_BROWSER_FORWARD = 7;
|
||||||
const KEY_SUPER = 8;
|
var KEY_SUPER = 8;
|
||||||
|
|
||||||
let ws;
|
var ws;
|
||||||
let pad;
|
var pad;
|
||||||
let padlabel;
|
var padlabel;
|
||||||
|
|
||||||
let touchMoved = false;
|
var touchMoved = false;
|
||||||
let touchStart = 0;
|
var touchStart = 0;
|
||||||
let touchLastEnd = 0;
|
var touchLastEnd = 0;
|
||||||
let touchReleasedCount = 0;
|
var touchReleasedCount = 0;
|
||||||
let ongoingTouches = [];
|
var ongoingTouches = [];
|
||||||
let moveXSum = 0;
|
var moveXSum = 0;
|
||||||
let moveYSum = 0;
|
var moveYSum = 0;
|
||||||
let scrollXSum = 0;
|
var scrollXSum = 0;
|
||||||
let scrollYSum = 0;
|
var scrollYSum = 0;
|
||||||
let dragging = false;
|
var dragging = false;
|
||||||
let draggingTimeout = null;
|
var draggingTimeout = null;
|
||||||
let scrolling = false;
|
var scrolling = false;
|
||||||
|
|
||||||
function fullscreenEnabled() {
|
function fullscreenEnabled() {
|
||||||
return (document.fullscreenEnabled ||
|
return (document.fullscreenEnabled ||
|
||||||
|
|
@ -125,7 +125,7 @@ function copyTouch(touch, timeStamp) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function ongoingTouchIndexById(idToFind) {
|
function ongoingTouchIndexById(idToFind) {
|
||||||
for (let i = 0; i < ongoingTouches.length; i++) {
|
for (var i = 0; i < ongoingTouches.length; i++) {
|
||||||
if (ongoingTouches[i].identifier == idToFind) {
|
if (ongoingTouches[i].identifier == idToFind) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
@ -134,17 +134,17 @@ function ongoingTouchIndexById(idToFind) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function calculatePointerAccelerationMult(speed) {
|
function calculatePointerAccelerationMult(speed) {
|
||||||
for (let i = 0; i < POINTER_ACCELERATION.length; i++) {
|
for (var i = 0; i < POINTER_ACCELERATION.length; i++) {
|
||||||
let s2 = POINTER_ACCELERATION[i][0];
|
var s2 = POINTER_ACCELERATION[i][0];
|
||||||
let a2 = POINTER_ACCELERATION[i][1];
|
var a2 = POINTER_ACCELERATION[i][1];
|
||||||
if (s2 <= speed) {
|
if (s2 <= speed) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
return a2;
|
return a2;
|
||||||
}
|
}
|
||||||
let s1 = POINTER_ACCELERATION[i - 1][0];
|
var s1 = POINTER_ACCELERATION[i - 1][0];
|
||||||
let a1 = POINTER_ACCELERATION[i - 1][1];
|
var a1 = POINTER_ACCELERATION[i - 1][1];
|
||||||
return ((speed - s1) / (s2 - s1)) * (a2 - a1) + a1;
|
return ((speed - s1) / (s2 - s1)) * (a2 - a1) + a1;
|
||||||
}
|
}
|
||||||
if (POINTER_ACCELERATION.length > 0) {
|
if (POINTER_ACCELERATION.length > 0) {
|
||||||
|
|
@ -159,15 +159,15 @@ function onDraggingTimeout() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateMoveAndScroll() {
|
function updateMoveAndScroll() {
|
||||||
let moveX = Math.trunc(moveXSum);
|
var moveX = Math.trunc(moveXSum);
|
||||||
let moveY = Math.trunc(moveYSum);
|
var moveY = Math.trunc(moveYSum);
|
||||||
if (Math.abs(moveX) >= 1 || Math.abs(moveY) >= 1) {
|
if (Math.abs(moveX) >= 1 || Math.abs(moveY) >= 1) {
|
||||||
moveXSum -= moveX;
|
moveXSum -= moveX;
|
||||||
moveYSum -= moveY;
|
moveYSum -= moveY;
|
||||||
ws.send("m" + moveX + ";" + moveY);
|
ws.send("m" + moveX + ";" + moveY);
|
||||||
}
|
}
|
||||||
let scrollX = Math.trunc(scrollXSum);
|
var scrollX = Math.trunc(scrollXSum);
|
||||||
let scrollY = Math.trunc(scrollYSum);
|
var scrollY = Math.trunc(scrollYSum);
|
||||||
if (Math.abs(scrollX) >= 1 || Math.abs(scrollY) >= 1) {
|
if (Math.abs(scrollX) >= 1 || Math.abs(scrollY) >= 1) {
|
||||||
scrollXSum -= scrollX;
|
scrollXSum -= scrollX;
|
||||||
scrollYSum -= scrollY;
|
scrollYSum -= scrollY;
|
||||||
|
|
@ -182,15 +182,15 @@ function handleStart(evt) {
|
||||||
touchStart = evt.timeStamp;
|
touchStart = evt.timeStamp;
|
||||||
touchMoved = false;
|
touchMoved = false;
|
||||||
}
|
}
|
||||||
let touches = evt.changedTouches;
|
var touches = evt.changedTouches;
|
||||||
for (let i = 0; i < touches.length; i++) {
|
for (var i = 0; i < touches.length; i++) {
|
||||||
if (touches[i].target != pad && touches[i].target != padlabel &&
|
if (touches[i].target != pad && touches[i].target != padlabel &&
|
||||||
ongoingTouches.length == 0) {
|
ongoingTouches.length == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
let touch = copyTouch(touches[i], evt.timeStamp);
|
var touch = copyTouch(touches[i], evt.timeStamp);
|
||||||
let idx = ongoingTouchIndexById(touch.identifier);
|
var idx = ongoingTouchIndexById(touch.identifier);
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
ongoingTouches.push(touch);
|
ongoingTouches.push(touch);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -216,9 +216,9 @@ function handleStart(evt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleEnd(evt) {
|
function handleEnd(evt) {
|
||||||
let touches = evt.changedTouches;
|
var touches = evt.changedTouches;
|
||||||
for (let i = 0; i < touches.length; i++) {
|
for (var i = 0; i < touches.length; i++) {
|
||||||
let idx = ongoingTouchIndexById(touches[i].identifier);
|
var idx = ongoingTouchIndexById(touches[i].identifier);
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -239,7 +239,7 @@ function handleEnd(evt) {
|
||||||
ws.send("b" + POINTER_BUTTON_LEFT + ";0");
|
ws.send("b" + POINTER_BUTTON_LEFT + ";0");
|
||||||
}
|
}
|
||||||
if (!touchMoved && evt.timeStamp - touchStart < TOUCH_TIMEOUT) {
|
if (!touchMoved && evt.timeStamp - touchStart < TOUCH_TIMEOUT) {
|
||||||
let button = 0;
|
var button = 0;
|
||||||
if (touchReleasedCount == 1) {
|
if (touchReleasedCount == 1) {
|
||||||
button = POINTER_BUTTON_LEFT;
|
button = POINTER_BUTTON_LEFT;
|
||||||
} else if (touchReleasedCount == 2) {
|
} else if (touchReleasedCount == 2) {
|
||||||
|
|
@ -259,16 +259,16 @@ function handleEnd(evt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleMove(evt) {
|
function handleMove(evt) {
|
||||||
let sumX = 0;
|
var sumX = 0;
|
||||||
let sumY = 0;
|
var sumY = 0;
|
||||||
let touches = evt.changedTouches;
|
var touches = evt.changedTouches;
|
||||||
for (let i = 0; i < touches.length; i++) {
|
for (var i = 0; i < touches.length; i++) {
|
||||||
let idx = ongoingTouchIndexById(touches[i].identifier);
|
var idx = ongoingTouchIndexById(touches[i].identifier);
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!touchMoved) {
|
if (!touchMoved) {
|
||||||
let dist = Math.sqrt(Math.pow(touches[i].pageX - ongoingTouches[idx].pageXStart, 2) +
|
var dist = Math.sqrt(Math.pow(touches[i].pageX - ongoingTouches[idx].pageXStart, 2) +
|
||||||
Math.pow(touches[i].pageY - ongoingTouches[idx].pageYStart, 2));
|
Math.pow(touches[i].pageY - ongoingTouches[idx].pageYStart, 2));
|
||||||
if (ongoingTouches.length > TOUCH_MOVE_THRESHOLD.length ||
|
if (ongoingTouches.length > TOUCH_MOVE_THRESHOLD.length ||
|
||||||
dist > TOUCH_MOVE_THRESHOLD[ongoingTouches.length - 1] ||
|
dist > TOUCH_MOVE_THRESHOLD[ongoingTouches.length - 1] ||
|
||||||
|
|
@ -276,9 +276,9 @@ function handleMove(evt) {
|
||||||
touchMoved = true;
|
touchMoved = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let dx = touches[i].pageX - ongoingTouches[idx].pageX;
|
var dx = touches[i].pageX - ongoingTouches[idx].pageX;
|
||||||
let dy = touches[i].pageY - ongoingTouches[idx].pageY;
|
var dy = touches[i].pageY - ongoingTouches[idx].pageY;
|
||||||
let timeDelta = evt.timeStamp - ongoingTouches[idx].timeStamp;
|
var timeDelta = evt.timeStamp - ongoingTouches[idx].timeStamp;
|
||||||
sumX += dx * calculatePointerAccelerationMult(Math.abs(dx) / timeDelta * 1000);
|
sumX += dx * calculatePointerAccelerationMult(Math.abs(dx) / timeDelta * 1000);
|
||||||
sumY += dy * calculatePointerAccelerationMult(Math.abs(dy) / timeDelta * 1000);
|
sumY += dy * calculatePointerAccelerationMult(Math.abs(dy) / timeDelta * 1000);
|
||||||
ongoingTouches[idx].pageX = touches[i].pageX;
|
ongoingTouches[idx].pageX = touches[i].pageX;
|
||||||
|
|
@ -298,22 +298,22 @@ function handleMove(evt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function challengeResponse(message) {
|
function challengeResponse(message) {
|
||||||
let shaObj = new jsSHA("SHA-256", "TEXT");
|
var shaObj = new jsSHA("SHA-256", "TEXT");
|
||||||
shaObj.setHMACKey(message, "TEXT");
|
shaObj.setHMACKey(message, "TEXT");
|
||||||
shaObj.update(window.location.hash.substr(1));
|
shaObj.update(window.location.hash.substr(1));
|
||||||
return btoa(shaObj.getHMAC("BYTES"));
|
return btoa(shaObj.getHMAC("BYTES"));
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addEventListener("load", function() {
|
window.addEventListener("load", function() {
|
||||||
let authenticated = false;
|
var authenticated = false;
|
||||||
let opening = document.getElementById("opening");
|
var opening = document.getElementById("opening");
|
||||||
let closed = document.getElementById("closed");
|
var closed = document.getElementById("closed");
|
||||||
pad = document.getElementById("pad");
|
pad = document.getElementById("pad");
|
||||||
padlabel = document.getElementById("padlabel");
|
padlabel = document.getElementById("padlabel");
|
||||||
let keys = document.getElementById("keys");
|
var keys = document.getElementById("keys");
|
||||||
let keyboard = document.getElementById("keyboard");
|
var keyboard = document.getElementById("keyboard");
|
||||||
let fullscreenbutton = document.getElementById("fullscreenbutton");
|
var fullscreenbutton = document.getElementById("fullscreenbutton");
|
||||||
let text = document.getElementById("text");
|
var text = document.getElementById("text");
|
||||||
|
|
||||||
function showScene(scene) {
|
function showScene(scene) {
|
||||||
[opening, closed, pad, keys, keyboard].forEach(function(e) {
|
[opening, closed, pad, keys, keyboard].forEach(function(e) {
|
||||||
|
|
@ -345,7 +345,7 @@ window.addEventListener("load", function() {
|
||||||
text.value = "";
|
text.value = "";
|
||||||
showScene(opening);
|
showScene(opening);
|
||||||
|
|
||||||
let wsURL = new URL("ws", location.href);
|
var wsURL = new URL("ws", location.href);
|
||||||
wsURL.protocol = wsURL.protocol == "http:" ? "ws:" : "wss:";
|
wsURL.protocol = wsURL.protocol == "http:" ? "ws:" : "wss:";
|
||||||
ws = new WebSocket(wsURL);
|
ws = new WebSocket(wsURL);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue