feat: converted admin.html to Admin.svelte

file is broken, need refactor
This commit is contained in:
Laureηt 2021-12-13 18:34:20 +01:00
parent 236e5d49fd
commit ba419485c8
No known key found for this signature in database
GPG key ID: D88C6B294FD40994
9 changed files with 159 additions and 276 deletions

View file

@ -8,5 +8,5 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{yaml,yml,toml,html,svelte}]
[*.{yaml,yml,toml,html,svelte,json,js,ts,prettierrc}]
indent_size = 2

View file

@ -1,6 +1,6 @@
{
"useTabs": true,
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100
"useTabs": false,
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100
}

85
package-lock.json generated
View file

@ -7,6 +7,9 @@
"": {
"name": "booplaysgba",
"version": "0.0.1",
"dependencies": {
"sass": "^1.45.0"
},
"devDependencies": {
"@sveltejs/adapter-auto": "next",
"@sveltejs/kit": "next",
@ -19,7 +22,7 @@
"prettier-plugin-svelte": "^2.4.0",
"svelte": "^3.44.0",
"svelte-check": "^2.2.6",
"svelte-preprocess": "^4.9.4",
"svelte-preprocess": "^4.10.0",
"tslib": "^2.3.1",
"typescript": "^4.4.3"
}
@ -593,7 +596,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@ -639,7 +641,6 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"engines": {
"node": ">=8"
}
@ -658,7 +659,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@ -713,7 +713,6 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
"integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
"dev": true,
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@ -1408,7 +1407,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@ -1445,7 +1443,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@ -1491,7 +1488,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@ -1570,6 +1566,11 @@
"node": ">= 4"
}
},
"node_modules/immutable": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
"integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw=="
},
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@ -1615,7 +1616,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
@ -1639,7 +1639,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -1657,7 +1656,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@ -1669,7 +1667,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
@ -1864,7 +1861,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -1950,7 +1946,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
"dev": true,
"engines": {
"node": ">=8.6"
},
@ -2049,7 +2044,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
@ -2205,6 +2199,22 @@
"rimraf": "bin.js"
}
},
"node_modules/sass": {
"version": "1.45.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.45.0.tgz",
"integrity": "sha512-ONy5bjppoohtNkFJRqdz1gscXamMzN3wQy1YH9qO2FiNpgjLhpz/IPRGg0PpCjyz/pWfCOaNEaiEGCcjOFAjqw==",
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
"node": ">=8.9.0"
}
},
"node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@ -2295,7 +2305,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
"integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@ -2529,7 +2538,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@ -3095,7 +3103,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@ -3131,8 +3138,7 @@
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
"brace-expansion": {
"version": "1.1.11",
@ -3148,7 +3154,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
@ -3185,7 +3190,6 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
"integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
"dev": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@ -3672,7 +3676,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@ -3703,7 +3706,6 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"optional": true
},
"function-bind": {
@ -3736,7 +3738,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
}
@ -3791,6 +3792,11 @@
"integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==",
"dev": true
},
"immutable": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
"integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw=="
},
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@ -3827,7 +3833,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
@ -3844,8 +3849,7 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-fullwidth-code-point": {
"version": "3.0.0",
@ -3857,7 +3861,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@ -3865,8 +3868,7 @@
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"isexe": {
"version": "2.0.0",
@ -4021,8 +4023,7 @@
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"once": {
"version": "1.4.0",
@ -4089,8 +4090,7 @@
"picomatch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
"dev": true
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
},
"postcss": {
"version": "8.4.5",
@ -4144,7 +4144,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"requires": {
"picomatch": "^2.2.1"
}
@ -4248,6 +4247,16 @@
}
}
},
"sass": {
"version": "1.45.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.45.0.tgz",
"integrity": "sha512-ONy5bjppoohtNkFJRqdz1gscXamMzN3wQy1YH9qO2FiNpgjLhpz/IPRGg0PpCjyz/pWfCOaNEaiEGCcjOFAjqw==",
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
}
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@ -4310,8 +4319,7 @@
"source-map-js": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
"integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==",
"dev": true
"integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA=="
},
"sourcemap-codec": {
"version": "1.4.8",
@ -4456,7 +4464,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}

View file

@ -23,9 +23,12 @@
"prettier-plugin-svelte": "^2.4.0",
"svelte": "^3.44.0",
"svelte-check": "^2.2.6",
"svelte-preprocess": "^4.9.4",
"svelte-preprocess": "^4.10.0",
"tslib": "^2.3.1",
"typescript": "^4.4.3"
},
"type": "module"
"type": "module",
"dependencies": {
"sass": "^1.45.0"
}
}

80
src/routes/Admin.svelte Normal file
View file

@ -0,0 +1,80 @@
<script lang="ts">
import { onMount } from 'svelte';
let websocket: WebSocket | undefined;
onMount(() => {
websocket = new WebSocket('ws://localhost:6789/');
});
let passwordInput = document.querySelector('#password-text');
let divLogin = document.querySelector('#login');
let divDashboard = document.querySelector('#dashboard');
let stateList = document.querySelector('#stateList');
let saveButton = document.getElementById('save');
saveButton.onclick = function (event) {
websocket.send(JSON.stringify({ admin: 'save' }));
};
function receiveStates(ev) {
let msg = JSON.parse(ev.data);
let states = msg.states;
for (let i = 0; i < states.length; i++) {
let state = states[i];
let li = document.createElement('li');
let button = document.createElement('button');
button.onclick = () => websocket.send(JSON.stringify({ admin: 'load:' + state }));
button.appendChild(document.createTextNode(state));
li.appendChild(button);
stateList.appendChild(li);
}
}
function authSuccess(ev) {
let msg = JSON.parse(ev.data);
if (msg.auth === 'success') {
divLogin.style.display = 'none';
divDashboard.style.display = 'unset';
websocket.removeEventListener('message', authSuccess);
receiveStates(ev);
}
}
const sendCreds = () => () => {
if (websocket) {
let message = JSON.stringify({ auth: passwordInput.value });
websocket.send(message);
websocket.addEventListener('message', authSuccess);
}
};
passwordInput.addEventListener('keydown', function (e) {
if (e.key === 'Enter') {
sendCreds();
}
});
</script>
<title>Télécommande admin</title>
<div id="login">
<input type="password" id="password-text" />
<input type="button" id="password-button" value="Login" on:click={sendCreds()} />
</div>
<div id="dashboard">
<ul id="stateList" />
<button id="save">save</button>
</div>
<style lang="scss">
* {
padding: 0;
margin: 0;
}
#dashboard {
display: none;
}
</style>

View file

@ -1,10 +1,10 @@
<script lang="ts">
import { onMount } from "svelte";
import { onMount } from 'svelte';
let websocket: WebSocket | undefined;
onMount(() => {
websocket = new WebSocket("ws://localhost:6789/");
websocket = new WebSocket('ws://localhost:6789/');
});
const sendAction = (key: string) => () => {
@ -12,38 +12,40 @@
};
</script>
<title>Télécommande</title>
<table class="buttons">
<tr>
<td colspan="2" style="padding-bottom: 1rem;">
<button id="l" on:click={sendAction("l")}>L</button>
<button id="l" on:click={sendAction('l')}>L</button>
</td>
<td />
<td colspan="2" style="padding-bottom: 1rem; text-align: right;">
<button id="r" on:click={sendAction("r")}>R</button>
<button id="r" on:click={sendAction('r')}>R</button>
</td>
</tr>
<tr>
<td />
<td>
<button id="up" on:click={sendAction("up")}> </button>
<button id="up" on:click={sendAction('up')}> </button>
</td>
<td />
<td>
<button id="select" on:click={sendAction("select")}> select </button>
<button id="select" on:click={sendAction('select')}> select </button>
</td>
<td>
<button id="start" on:click={sendAction("start")}> start </button>
<button id="start" on:click={sendAction('start')}> start </button>
</td>
</tr>
<tr>
<td>
<button id="left" on:click={sendAction("left")}> &lt; </button>
<button id="left" on:click={sendAction('left')}> &lt; </button>
</td>
<td />
<td style="padding-right: 20%;">
<button id="right" on:click={sendAction("right")}> > </button>
<button id="right" on:click={sendAction('right')}> > </button>
</td>
<td />
<td />
@ -52,19 +54,19 @@
<tr>
<td />
<td>
<button id="down" on:click={sendAction("down")}> </button>
<button id="down" on:click={sendAction('down')}> </button>
</td>
<td />
<td>
<button id="a" on:click={sendAction("a")}>A</button>
<button id="a" on:click={sendAction('a')}>A</button>
</td>
<td>
<button id="b" on:click={sendAction("b")}>B</button>
<button id="b" on:click={sendAction('b')}>B</button>
</td>
</tr>
</table>
<style lang="sass">
<style lang="scss">
td {
text-align: center;
}

View file

@ -1,81 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Admin</title>
<style>
* {
padding: 0;
margin: 0;
}
#dashboard {
display: none;
}
</style>
</head>
<body>
<div id="login">
<input type="password" id="password-text">
<input type="button" id="password-button" value="Login" onclick="sendCreds();">
</div>
<div id="dashboard">
<ul id="stateList"></ul>
<button id="save">save</button>
</div>
<script>
let websocket = new WebSocket("wss://gba.inpt.fr:6789/");
let passwordInput = document.querySelector('#password-text');
let divLogin = document.querySelector("#login");
let divDashboard = document.querySelector("#dashboard");
let stateList = document.querySelector("#stateList");
let saveButton = document.getElementById('save');
saveButton.onclick = function (event) {
websocket.send(JSON.stringify({ 'admin': 'save' }));
}
function receiveStates(ev) {
let msg = JSON.parse(ev.data);
let states = msg.states
for (let i = 0; i < states.length; i++) {
let state = states[i];
let li = document.createElement('li');
let button = document.createElement('button');
button.onclick = () => websocket.send(JSON.stringify({ 'admin': "load:" + state }))
button.appendChild(document.createTextNode(state));
li.appendChild(button);
stateList.appendChild(li);
}
}
function authSuccess(ev) {
let msg = JSON.parse(ev.data);
if (msg.auth === "success") {
divLogin.style.display = "none";
divDashboard.style.display = "unset";
websocket.removeEventListener('message', authSuccess);
receiveStates(ev);
}
};
function sendCreds() {
let message = JSON.stringify({ "auth": passwordInput.value });
websocket.send(message)
websocket.addEventListener('message', authSuccess);
};
passwordInput.addEventListener("keydown", function (e) {
if (e.key === "Enter") { sendCreds(); }
});
</script>
</body>
</html>

View file

@ -1,128 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Telecommande</title>
<style>
* {
padding: 0;
margin: 0;
}
table {
margin: auto;
margin-top: 30vh;
}
td {
text-align: center;
}
#a,
#b {
border-radius: 50%;
width: 2rem;
height: 2rem;
}
#left,
#right,
#up,
#down {
border-radius: 10%;
width: 2rem;
height: 2rem;
}
#start,
#select,
#l,
#r {
border-radius: 25%;
width: 3.5rem;
}
</style>
</head>
<body>
<table class="buttons">
<tr>
<td colspan="2" style="padding-bottom: 1rem;"><button id="l">L</button></td>
<td></td>
<td colspan="2" style="padding-bottom: 1rem; text-align: right;"><button id="r">R</button></td>
</tr>
<tr>
<td></td>
<td><button id="up"></button></td>
<td></td>
<td><button id="select">select</button></td>
<td><button id="start">start</button></td>
</tr>
<tr>
<td><button id="left">
< </button>
</td>
<td></td>
<td style="padding-right: 3rem;"><button id="right"> > </button></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td><button id="down"> </button></td>
<td></td>
<td><button id="a">A</button></td>
<td><button id="b">B</button></td>
</tr>
</table>
<script>
let websocket = new WebSocket("ws://gba.inpt.fr:6789/");
let a = document.getElementById('a'),
b = document.getElementById('b'),
select = document.getElementById('select'),
start = document.getElementById('start'),
right = document.getElementById('right'),
left = document.getElementById('left'),
up = document.getElementById('up'),
down = document.getElementById('down'),
r = document.getElementById('r'),
l = document.getElementById('l');
a.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'a' }));
}
b.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'b' }));
}
select.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'select' }));
}
start.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'start' }));
}
right.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'right' }));
}
left.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'left' }));
}
up.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'up' }));
}
down.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'down' }));
}
r.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'r' }));
}
l.onclick = function (event) {
websocket.send(JSON.stringify({ action: 'l' }));
}
</script>
</body>
</html>

View file

@ -3,16 +3,16 @@ import preprocess from 'svelte-preprocess';
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://github.com/sveltejs/svelte-preprocess
// for more information about preprocessors
preprocess: preprocess(),
// Consult https://github.com/sveltejs/svelte-preprocess
// for more information about preprocessors
preprocess: preprocess(),
kit: {
adapter: adapter(),
kit: {
adapter: adapter(),
// hydrate the <div id="svelte"> element in src/app.html
target: '#svelte'
}
// hydrate the <div id="svelte"> element in src/app.html
target: '#svelte'
}
};
export default config;