Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| ef_informatik:voci_rest [2022-05-24 08:13] – [Aufgabe: Statische Webseite] hof | ef_informatik:voci_rest [2022-05-31 13:16] (aktuell) – sca | ||
|---|---|---|---|
| Zeile 81: | Zeile 81: | ||
| using Grapevine; | using Grapevine; | ||
| - | // Start the standalone REST server. | + | namespace |
| - | using (var server = RestServerBuilder.UseDefaults().Build()) { | + | |
| - | // We want to serve static content (HTML, CSS, JS that is not modified | + | |
| - | // but transferred to the client as is from the " | + | |
| - | string staticPath = Path.Combine(Directory.GetCurrentDirectory(), | + | |
| - | server.ContentFolders.Add(staticPath); | + | |
| - | server.UseContentFolders(); | + | |
| - | | + | class VociServer { |
| - | // The server will scan the entire assembly for RestResource annotations | + | static void Main(string[] args) { |
| - | // and add them to the served prefixes. | + | |
| - | server.Start(); | + | using (var server = RestServerBuilder.UseDefaults().Build()) |
| + | { | ||
| + | | ||
| + | // and add them to the served prefixes. | ||
| - | | + | |
| - | Console.WriteLine(" | + | // but transferred |
| - | Console.ReadLine(); | + | |
| + | server.ContentFolders.Add(staticPath); | ||
| + | server.UseContentFolders(); | ||
| + | |||
| + | // Start the server. | ||
| + | server.Start(); | ||
| + | |||
| + | | ||
| + | Console.ReadLine(); | ||
| + | } | ||
| + | } | ||
| } | } | ||
| </ | </ | ||
| - | Wenn wir ihn starten mit `dotnet run`, können wir alle Dateien im `website` Ordner übertragen. | + | Wenn wir ihn starten mit `dotnet run`, können wir alle Dateien im `website` Ordner übertragen. |
| + | |||
| + | ``` | ||
| + | dotnet build -p: | ||
| + | dotnet run | ||
| + | ``` | ||
| Eine einfache Website könnte beispielsweise mit folgendem HTML dargestellt werden: | Eine einfache Website könnte beispielsweise mit folgendem HTML dargestellt werden: | ||
| Zeile 118: | Zeile 130: | ||
| * Binde `grapevine` in deinen Code ein. | * Binde `grapevine` in deinen Code ein. | ||
| - | * Füge einen Ordner `website` in den Projekt ein und füge eine leere Website | + | * Füge einen Ordner `website` in den Projekt ein und füge obige HTML-Seite |
| * Starte den Server mit `dotnet run` und rufe http:// | * Starte den Server mit `dotnet run` und rufe http:// | ||
| Zeile 201: | Zeile 213: | ||
| #### Aufgabe: Statische Webseite | #### Aufgabe: Statische Webseite | ||
| * Baue eine einfache Webseite mit HTML & CSS für die Voci-App (more details coming). | * Baue eine einfache Webseite mit HTML & CSS für die Voci-App (more details coming). | ||
| - | * Lerninhalte zu HTML & CSS im [[gf_informatik: | + | * Lerninhalte zu HTML & CSS im [[gf_informatik: |
| #### Aufgabe: Web-App | #### Aufgabe: Web-App | ||
| * Verknüpfen von Website und dynamischen Inhalten mit Javascript (TBD). | * Verknüpfen von Website und dynamischen Inhalten mit Javascript (TBD). | ||
| + | |||
| + | |||
| + | ## JavaScript | ||
| + | |||
| + | JavaScript einbinden: | ||
| + | <code html index.html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <meta name=" | ||
| + | <link rel=" | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | <div class=" | ||
| + | <span id=" | ||
| + | <input type=" | ||
| + | <div class=" | ||
| + | <button type=" | ||
| + | </ | ||
| + | </ | ||
| + | <div class=" | ||
| + | <p id=" | ||
| + | <p id=" | ||
| + | </ | ||
| + | </ | ||
| + | <script src=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | JavaScript Code: | ||
| + | <code javascript voci.js> | ||
| + | /** | ||
| + | * Function called when the user clicks the submit button or presses Enter. | ||
| + | */ | ||
| + | async function submit() { | ||
| + | // Get the original and translated words, send them to the server. | ||
| + | original = document.getElementById(" | ||
| + | translation = document.getElementById(" | ||
| + | uri = `/ | ||
| + | let response = await fetch(uri); | ||
| + | |||
| + | let response_text = await response.text(); | ||
| + | if (!response.ok) { | ||
| + | // something unexpected happened... | ||
| + | console.log(`Error: | ||
| + | return; | ||
| + | } | ||
| + | // Update the status text. | ||
| + | document.getElementById(" | ||
| + | | ||
| + | // And fetch the next word. | ||
| + | next(); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Update the stats. | ||
| + | */ | ||
| + | async function updateStats() { | ||
| + | uri = '/ | ||
| + | let response = await fetch(uri); | ||
| + | let response_text = await response.text(); | ||
| + | document.getElementById(" | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Fetches a new word to translate. Called automatically after submit(), and initially for the first | ||
| + | * word. | ||
| + | */ | ||
| + | async function next() { | ||
| + | // Ensure the stats are correctly displayed. | ||
| + | updateStats(); | ||
| + | |||
| + | uri = `/random`; | ||
| + | let response = await fetch(uri); | ||
| + | let response_text = await response.text(); | ||
| + | if (!response.ok) { | ||
| + | console.log(`Error: | ||
| + | return; | ||
| + | } | ||
| + | document.getElementById(" | ||
| + | document.getElementById(" | ||
| + | } | ||
| + | |||
| + | /** Called when a key is released within input. */ | ||
| + | async function keyup(input, | ||
| + | var code = event.code; | ||
| + | if (code == " | ||
| + | submit(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Initial call to fetch the first word. | ||
| + | next(); | ||
| + | </ | ||
| + | |||