mirror of
https://github.com/milk-net/milk-net.github.io.git
synced 2025-04-19 21:53:40 -05:00
231 lines
7.1 KiB
JavaScript
231 lines
7.1 KiB
JavaScript
"use strict";
|
|
|
|
function initRemote(element){
|
|
/* set up event listener for remote control buttons */
|
|
let svgDoc = element.contentDocument;
|
|
|
|
if (svgDoc)
|
|
svgLoaded(svgDoc)
|
|
else
|
|
element.addEventListener("load", function(){svgLoaded(this.contentDocument);});
|
|
|
|
element.style.display = "block";
|
|
}
|
|
|
|
function svgLoaded(svgDoc){
|
|
let buttonArray = ["powerbutton", "1button", "2button", "3button", "4button", "5button", "6button", "7button", "8button", "9button", "0button", "redbutton", "greenbutton", "yellowbutton", "bluebutton", "textbutton", "cancelbutton", "stretchbutton", "indexbutton", "stopbutton", "revealbutton", "mixbutton", "timetextbutton", "modebutton", "blank1", "pupbutton", "pdownbutton", "mutebutton"];
|
|
|
|
/* create listeners for each element in buttonarray */
|
|
for (let index = 0, len = buttonArray.length; index < len; ++index) {
|
|
addListenerForSVGButton(svgDoc.getElementById(buttonArray[index]), false);
|
|
}
|
|
|
|
/* create listeners with key repeat */
|
|
addListenerForSVGButton(svgDoc.getElementById("vupbutton"), true);
|
|
addListenerForSVGButton(svgDoc.getElementById("vdownbutton"), true);
|
|
|
|
svgDoc.getElementById("body").addEventListener("touchend",function(e){e.preventDefault();},false); // ignore touching remote
|
|
}
|
|
|
|
function buttonPush(event, buttonID, repeat){
|
|
if (event)
|
|
event.preventDefault();
|
|
let bbox = buttonID.getBBox();
|
|
let cx = bbox.x + bbox.width/2;
|
|
let cy = bbox.y + bbox.height/2;
|
|
buttonID.setAttribute("transform","translate(" + cx*0.1 + " " + cy*0.1 + ") scale(0.9)");
|
|
if (repeat)
|
|
buttonID.repeatInterval = setInterval(function(){buttonPush(false,buttonID)}, 200);
|
|
if (!(buttonID.debounce))
|
|
buttonPressHandler(buttonID.id);
|
|
}
|
|
|
|
function buttonUnpush(buttonID){
|
|
if (!(buttonID.debounce)){
|
|
clearInterval(buttonID.debounceInterval);
|
|
buttonID.debounceInterval = setInterval(function(){buttonID.debounce = false;}, 20);
|
|
buttonID.debounce = true;
|
|
}
|
|
}
|
|
|
|
function addListenerForSVGButton(buttonID, repeat){
|
|
buttonID.addEventListener("touchstart",function(e){
|
|
if (navigator.vibrate)
|
|
window.navigator.vibrate(10);
|
|
e.preventDefault();
|
|
buttonPush(e, buttonID, repeat);
|
|
},false);
|
|
buttonID.addEventListener("touchend",function(){
|
|
buttonID.removeAttribute("transform");
|
|
clearInterval(buttonID.repeatInterval);
|
|
buttonUnpush(buttonID);
|
|
},false);
|
|
/* on mousedown scale button to 90% to indicate button press */
|
|
buttonID.addEventListener("mousedown",function(e){buttonPush(e, buttonID, repeat)}, false);
|
|
/* on mouseup or mouseleave remove transformations (return button to original size) */
|
|
buttonID.addEventListener("mouseup",function(){buttonID.removeAttribute("transform"); clearInterval(buttonID.repeatInterval);},false);
|
|
buttonID.addEventListener("mouseleave",function(){buttonID.removeAttribute("transform"); clearInterval(buttonID.repeatInterval);},false);
|
|
}
|
|
|
|
window.addEventListener("keydown", handleKeydown);
|
|
|
|
function handleKeydown(event){
|
|
if (event.repeat)
|
|
return;
|
|
|
|
switch (event.key){
|
|
case "0":
|
|
case "1":
|
|
case "2":
|
|
case "3":
|
|
case "4":
|
|
case "5":
|
|
case "6":
|
|
case "7":
|
|
case "8":
|
|
case "9":
|
|
buttonPressHandler(event.key + "button");
|
|
break;
|
|
case "p":
|
|
case "P":
|
|
buttonPressHandler("powerbutton");
|
|
break;
|
|
case "t":
|
|
case "T":
|
|
buttonPressHandler("textbutton");
|
|
break;
|
|
case "c":
|
|
case "C":
|
|
buttonPressHandler("cancelbutton");
|
|
break;
|
|
case "s":
|
|
case "S":
|
|
buttonPressHandler("stretchbutton");
|
|
break;
|
|
case "m":
|
|
buttonPressHandler("mixbutton");
|
|
break;
|
|
case "?":
|
|
buttonPressHandler("revealbutton");
|
|
break;
|
|
case "h":
|
|
case "H":
|
|
buttonPressHandler("stopbutton");
|
|
break;
|
|
case "i":
|
|
case "I":
|
|
buttonPressHandler("indexbutton");
|
|
break;
|
|
case "r":
|
|
case "R":
|
|
buttonPressHandler("redbutton");
|
|
break;
|
|
case "g":
|
|
case "G":
|
|
buttonPressHandler("greenbutton");
|
|
break;
|
|
case "y":
|
|
case "Y":
|
|
buttonPressHandler("yellowbutton");
|
|
break;
|
|
case "b":
|
|
case "B":
|
|
buttonPressHandler("bluebutton");
|
|
break;
|
|
case "M":
|
|
buttonPressHandler("mutebutton");
|
|
break;
|
|
case "+":
|
|
buttonPressHandler("vupbutton");
|
|
break;
|
|
case "-":
|
|
buttonPressHandler("vdownbutton");
|
|
break;
|
|
case "ArrowUp":
|
|
event.preventDefault();
|
|
buttonPressHandler("pupbutton");
|
|
break;
|
|
case "ArrowDown":
|
|
event.preventDefault();
|
|
buttonPressHandler("pdownbutton");
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* determine which button was pressed from the id passed by the listener and call appropriate handler function */
|
|
function buttonPressHandler(buttonID){
|
|
switch(buttonID) {
|
|
case "powerbutton":
|
|
powerbuttonhandler();
|
|
break;
|
|
case "textbutton":
|
|
textbuttonhandler();
|
|
break;
|
|
case "cancelbutton":
|
|
cancelbuttonhandler();
|
|
break;
|
|
case "stretchbutton":
|
|
sizebuttonhandler();
|
|
break;
|
|
case "mixbutton":
|
|
mixbuttonhandler();
|
|
break;
|
|
case "timetextbutton":
|
|
timetextbuttonhandler();
|
|
break;
|
|
case "revealbutton":
|
|
revealbuttonhandler();
|
|
break;
|
|
case "modebutton":
|
|
break;
|
|
/* match any of the number buttons */
|
|
case "1button":
|
|
case "2button":
|
|
case "3button":
|
|
case "4button":
|
|
case "5button":
|
|
case "6button":
|
|
case "7button":
|
|
case "8button":
|
|
case "9button":
|
|
case "0button":
|
|
numberButtonHandler(parseInt(buttonID.substring(0,1)));
|
|
break;
|
|
case "blank1":
|
|
blank1handler();
|
|
break;
|
|
case "vupbutton":
|
|
volumebuttonhandler("up");
|
|
break;
|
|
case "vdownbutton":
|
|
volumebuttonhandler("down");
|
|
break;
|
|
case "mutebutton":
|
|
volumebuttonhandler("mute");
|
|
break;
|
|
case "pupbutton":
|
|
channelbuttonhandler("up");
|
|
break;
|
|
case "pdownbutton":
|
|
channelbuttonhandler("down");
|
|
break;
|
|
case "redbutton":
|
|
linkbuttonhandler(0);
|
|
break;
|
|
case "greenbutton":
|
|
linkbuttonhandler(1);
|
|
break;
|
|
case "yellowbutton":
|
|
linkbuttonhandler(2);
|
|
break;
|
|
case "bluebutton":
|
|
linkbuttonhandler(3);
|
|
break;
|
|
case "indexbutton":
|
|
linkbuttonhandler(5);
|
|
break;
|
|
case "stopbutton":
|
|
stopbuttonhandler();
|
|
break;
|
|
}
|
|
}
|