124 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
let direction = null;
 | 
						|
 | 
						|
const drawText = async (textData) => {
 | 
						|
    const text = document.getElementById("text");
 | 
						|
    let { position } = textData;
 | 
						|
    switch (textData.position) {
 | 
						|
        case "left":
 | 
						|
            addClass(text, position);
 | 
						|
            direction = "left";
 | 
						|
            break;
 | 
						|
        case "top":
 | 
						|
            addClass(text, position);
 | 
						|
            direction = "top";
 | 
						|
            break;
 | 
						|
        case "right":
 | 
						|
            addClass(text, position);
 | 
						|
            direction = "right";
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            addClass(text, "left");
 | 
						|
            direction = "left";
 | 
						|
            break;
 | 
						|
    }
 | 
						|
 | 
						|
    text.innerHTML = textData.text;
 | 
						|
    document.getElementById("drawtext-container").style.display = "block";
 | 
						|
    await sleep(100);
 | 
						|
    addClass(text, "show");
 | 
						|
};
 | 
						|
 | 
						|
const changeText = async (textData) => {
 | 
						|
    const text = document.getElementById("text");
 | 
						|
    let { position } = textData;
 | 
						|
 | 
						|
    removeClass(text, "show");
 | 
						|
    addClass(text, "pressed");
 | 
						|
    addClass(text, "hide");
 | 
						|
 | 
						|
    await sleep(500);
 | 
						|
    removeClass(text, "left");
 | 
						|
    removeClass(text, "right");
 | 
						|
    removeClass(text, "top");
 | 
						|
    removeClass(text, "bottom");
 | 
						|
    removeClass(text, "hide");
 | 
						|
    removeClass(text, "pressed");
 | 
						|
 | 
						|
    switch (textData.position) {
 | 
						|
        case "left":
 | 
						|
            addClass(text, position);
 | 
						|
            direction = "left";
 | 
						|
            break;
 | 
						|
        case "top":
 | 
						|
            addClass(text, position);
 | 
						|
            direction = "top";
 | 
						|
            break;
 | 
						|
        case "right":
 | 
						|
            addClass(text, position);
 | 
						|
            direction = "right";
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            addClass(text, "left");
 | 
						|
            direction = "left";
 | 
						|
            break;
 | 
						|
    }
 | 
						|
    text.innerHTML = textData.text;
 | 
						|
 | 
						|
    await sleep(100);
 | 
						|
    text.classList.add("show");
 | 
						|
};
 | 
						|
 | 
						|
const hideText = async () => {
 | 
						|
    const text = document.getElementById("text");
 | 
						|
    removeClass(text, "show");
 | 
						|
    addClass(text, "hide");
 | 
						|
 | 
						|
    setTimeout(() => {
 | 
						|
        removeClass(text, "left");
 | 
						|
        removeClass(text, "right");
 | 
						|
        removeClass(text, "top");
 | 
						|
        removeClass(text, "bottom");
 | 
						|
        removeClass(text, "hide");
 | 
						|
        removeClass(text, "pressed");
 | 
						|
        document.getElementById("drawtext-container").style.display = "none";
 | 
						|
    }, 1000);
 | 
						|
};
 | 
						|
 | 
						|
const keyPressed = () => {
 | 
						|
    const text = document.getElementById("text");
 | 
						|
    addClass(text, "pressed");
 | 
						|
};
 | 
						|
 | 
						|
window.addEventListener("message", (event) => {
 | 
						|
    const data = event.data;
 | 
						|
    const action = data.action;
 | 
						|
    const textData = data.data;
 | 
						|
    switch (action) {
 | 
						|
        case "DRAW_TEXT":
 | 
						|
            return drawText(textData);
 | 
						|
        case "CHANGE_TEXT":
 | 
						|
            return changeText(textData);
 | 
						|
        case "HIDE_TEXT":
 | 
						|
            return hideText();
 | 
						|
        case "KEY_PRESSED":
 | 
						|
            return keyPressed();
 | 
						|
        default:
 | 
						|
            return;
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
const sleep = (ms) => {
 | 
						|
    return new Promise((resolve) => setTimeout(resolve, ms));
 | 
						|
};
 | 
						|
 | 
						|
const removeClass = (element, name) => {
 | 
						|
    if (element.classList.contains(name)) {
 | 
						|
        element.classList.remove(name);
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
const addClass = (element, name) => {
 | 
						|
    if (!element.classList.contains(name)) {
 | 
						|
        element.classList.add(name);
 | 
						|
    }
 | 
						|
};
 |