session_url » Revisions »
Differences
This shows you the differences between the selected revisions of the page.
| 2025-03-31 | 2025-05-15 | ||
| stable 6.5 released (martin) | no summary (152.56.137.48) (hidden) (untrusted) | ||
| Line 6: | Line 6: | ||
| To ease assembling the %%URL%%, you can have WinSCP [[ui_generateurl|generate it for you]]. | To ease assembling the %%URL%%, you can have WinSCP [[ui_generateurl|generate it for you]]. | ||
| - | ===== [[syntax]] Syntax ===== | ||
| - | <code> | + | <!DOCTYPE html> |
| - | <protocol> :// [ <username> [ : <password> ] [ ; <advanced> ] @ ] <host> [ : <port> ] / | + | <html lang="en"> |
| - | </code> | + | <head> |
| + | <meta charset="UTF-8" /> | ||
| + | <meta name="viewport" content="width=device-width, initial-scale=1.0"/> | ||
| + | <title>Talking Tom Clone</title> | ||
| + | <style> | ||
| + | body { | ||
| + | font-family: Arial, sans-serif; | ||
| + | text-align: center; | ||
| + | background: #f0f0f0; | ||
| + | padding: 40px; | ||
| + | } | ||
| + | |||
| + | img { | ||
| + | width: 300px; | ||
| + | border-radius: 20px; | ||
| + | box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); | ||
| + | } | ||
| + | |||
| + | button { | ||
| + | margin-top: 20px; | ||
| + | padding: 15px 30px; | ||
| + | font-size: 20px; | ||
| + | background-color: #4CAF50; | ||
| + | color: white; | ||
| + | border: none; | ||
| + | border-radius: 10px; | ||
| + | cursor: pointer; | ||
| + | transition: background 0.3s; | ||
| + | } | ||
| + | |||
| + | button:hover { | ||
| + | background-color: #45a049; | ||
| + | } | ||
| + | |||
| + | #status { | ||
| + | margin-top: 15px; | ||
| + | font-weight: bold; | ||
| + | } | ||
| + | </style> | ||
| + | </head> | ||
| + | <body> | ||
| + | <h1>Talking Tom Clone</h1> | ||
| + | <img src="https://freeimage.host/images/2024/05/15/3rFyMyF.png" alt="Talking Tom" /> | ||
| + | ··<br> | ||
| + | <button id="toggleButton">Play</button> | ||
| + | ·<div id="status">Press play to start listening</div> | ||
| + | |||
| + | <script> | ||
| + | const button = document.getElementById("toggleButton"); | ||
| + | const statusText = document.getElementById("status"); | ||
| + | let listening = false; | ||
| + | let recognition; | ||
| + | |||
| + | if ("webkitSpeechRecognition" in window) { | ||
| + | recognition = new webkitSpeechRecognition(); | ||
| + | recognition.continuous = false; | ||
| + | recognition.lang = "en-US"; | ||
| + | recognition.interimResults = false; | ||
| + | |||
| + | recognition.onstart = () => { | ||
| + | statusText.textContent = "Listening..."; | ||
| + | }; | ||
| + | |||
| + | recognition.onresult = (event) => { | ||
| + | const transcript = event.results[0][0].transcript; | ||
| + | speak(transcript); | ||
| + | }; | ||
| + | |||
| + | recognition.onerror = (event) => { | ||
| + | console.error("Speech recognition error:", event.error); | ||
| + | statusText.textContent = "Error occurred: " + event.error; | ||
| + | }; | ||
| + | |||
| + | recognition.onend = () => { | ||
| + | if (listening) { | ||
| + | recognition.start(); // auto-restart | ||
| + | } | ||
| + | }; | ||
| + | } else { | ||
| + | alert("Speech recognition not supported in this browser."); | ||
| + | } | ||
| + | |||
| + | function speak(text) { | ||
| + | const utterance = new SpeechSynthesisUtterance(text); | ||
| + | speechSynthesis.speak(utterance); | ||
| + | statusText.textContent = "Repeating: " + text; | ||
| + | } | ||
| + | |||
| + | button.onclick = () => { | ||
| + | if (!listening) { | ||
| + | recognition.start(); | ||
| + | listening = true; | ||
| + | button.textContent = "Stop"; | ||
| + | } else { | ||
| + | recognition.stop(); | ||
| + | listening = false; | ||
| + | button.textContent = "Play"; | ||
| + | statusText.textContent = "Stopped listening"; | ||
| + | } | ||
| + | }; | ||
| + | </script> | ||
| + | </body> | ||
| + | </html> | ||
| ===== [[elements]] Elements ===== | ===== [[elements]] Elements ===== | ||