From 951624bb13b938535ae509be0fbc0d293b1d1287 Mon Sep 17 00:00:00 2001 From: Hey-gramm Date: Sun, 27 Oct 2024 22:55:43 +0100 Subject: [PATCH 01/13] Translated using Weblate (German) Currently translated at 89.4% (668 of 747 strings) Co-authored-by: Hey-gramm Translate-URL: https://hosted.weblate.org/projects/hedy/adventures/de/ Translation: Hedy/Adventures --- content/adventures/de.yaml | 186 ++++++++++++++++++------------------- 1 file changed, 92 insertions(+), 94 deletions(-) diff --git a/content/adventures/de.yaml b/content/adventures/de.yaml index 7f1e2aa3f1e..ccc59ccc5b3 100644 --- a/content/adventures/de.yaml +++ b/content/adventures/de.yaml @@ -728,34 +728,28 @@ adventures: ``` 14: story_text: | - In this adventure you will build a calculator that calculates your mean grade for you. If you get your calculator to work, you can move on to the next adventure, which allows you to add two extra features. + In diesem Abenteuer wirst du einen Taschenrechner bauen, der einen Notendurchschnitt für dich berechnet. Wenn du in funktionsfähig gemacht hast, kannst du zum nächsten Abenteuer weiter gehen, in dem du zwei extra Features ergänzen kannst. - ### Exercise 1 - Fill in the blanks to get the calculator to work. - * Start with the fourth line, add a question to figure out what grade the student got. - * In the fifth line you'll want to calculate the total of all grades, so the total = total + grade. - * Then we get to set the return value. We want to return the mean, so the total devided by the amount of tests (4). - * Lastly we finish the code by calling the function in line 8. + ### Übung 1 + Fülle die Leerstellen, um den Taschenrechner funktionsfähig zu machen. + * Beginne mit der vierten Zeile, ergänze eine Frage, um herauszufinden, welche Note die Schüler:in bekommen hat. + * In der fünften Zeile solltest du die Gesamtzahl aller Noten berechnen, also gesamt = gesamt + note + * Dann setzen wir den Rückgabewert. Wir wollen den Durchschnitt zurückgeben, also gesamt geteilt durch die Anzahl Tests (4). + * Zuletzt vervollständigen wir den Code indem wir die Funktion in Zeile 8 aufrufen. - Did you get it? Awesome! Would you like to add even more to your calculator? **This adventure continues in the next tab!** + Hast du es hingekriegt? Wirklich toll! Willst du noch andere Sachen mit deinem Taschenrechner machen? **Dieses Abenteuer geht auf dem nächsten Tab weiter!** example_code: | ``` - {define} calculate_mean_grade - total = 0 + {define} berechne_notendurchschnitt + gesamt = 0 {for} i {in} {range} 1 {to} 4 - grade = {ask} _ - total = total + _ + note = {ask} _ + gesamt = gesamt + _ return _ / 4 - mean_grade = {call} _ - {print} 'Your mean grade is ' mean_grade + notendurchschnitt = {call} _ + {print} 'Dein Notendurchschnitt ist ' notendurchschnitt ``` - - total = total + _ - return _ / 4 - - mean_grade = {call} _ - {print} 'Your mean grade is ' mean_grade 15: story_text: | Du kannst die `{while}` Schleife zum Taschenrechnerspiel, was du im vorigen Level gelernt hast, hinzufügen. @@ -789,22 +783,22 @@ adventures: levels: 14: story_text: | - ### Exercise 2 - **This is the second part of this adventure.** The adventure starts in the previous tab. - Of course, you don't always want to calculate the mean of 4 tests. You might want to calculate the mean of 10 tests or only 2... - We can fix this problem by adding the argument and variable 'amount_of_tests'. - * Start a new line on line 3. Set the amount_of_tests argument by asking the student how many tests they have made. - * Change the 4 in line 4 to the new argument amount_of_tests. - * Lastly, change the 4 in line 6 to amount_of_tests + ### Übung 2 + **Das ist der zweite Teil dieses Abenteuers.** Das Abenteuer startet im vorherigen Tab. + Natürlich willst du nicht immer nur den Durchschnitt von 4 Tests berechnen. Vielleicht willst du den Mittelwert von 10 Tests oder nur 2 berechnen? + Du kannst das Problem beheben, indem du ein Argument und die Variable 'anzahl_von_tests' ergänzt. + * Beginne eine neue Zeile in der Zeile 3. Setze die anzahl_von_tests indem du die Schüler:in danach fragst, wie viele Tests geschrieben wurden. + * Ändere die 4 in der Zeile 4 in das neue Argument anzahl_von_tests. + * Zuletzt ändere noch die 4 in der Zeile 6 in anzahl_von_tests. - Try out your new program. Does it work? + Versuche dein neues Programm. Funktioniert es? - ### Exercise 3 - Did you want to make your program even better? Great! In the previous program you could only calculate the mean grade of 1 subject, but it would be better if you could calculate the mean grade for all subjects you want! - We won't tell you how to do it, but we will give you one tip: Start your code in line 1 with: define calculate_mean_grade with subject. + ### Übung 3 + Willst du dein Programm weiter verbessern? Großartig! Das letzte Programm konnte nur den Durchschnitt von einer Schüler:in berechnen. Es wäre aber besser, die Durchschnitt von allen Schüler:innen zu berechnen, die du willst. + Wie sagen dir nicht, wie du es machen sollst, geben dir aber einen Hinweis: Beginne deinen Code in Zeile 1 mit {define} berechne_notendurchschnitt {with} schüler_in. example_code: | ``` - # Use your own code from the previous adventure. + # Benutze deinen eigenen Code aus dem letzten Abenteuer. ``` clear_command: name: '{clear}' @@ -1438,12 +1432,9 @@ adventures: ``` 14: story_text: | - Wir lernen weitere neue Elemente kennen! Du kennst sie vielleicht schon aus der Mathematik, das `<` und das `>` Zeichen. - Das `<` prüft, ob die erste Zahl kleiner ist als die zweite, so überprüft Alter `<` 12 zum Beispiel, ob Alter kleiner als 12 ist. - Wenn du überprüfen willst, ob die erste Zahl kleiner oder gleich der zweiten ist, kannst du `<=` verwenden, zum Beispiel Alter `<=` 11. - Das `>` prüft, ob die erste Zahl größer als die zweite ist, so überprüft Punkte `>` 10 zum Beispiel ob Punkte größer als 10 ist. - Wenn du überprüfen willst, ob die erste Zahl größer oder gleich der zweiten ist, kannst du `>=` verwenden, also zum Beispiel Punkte `>=` 11. - All diese Vergleiche kannst du mit einem `{if}` verwenden, das geht so: + Mit dem Beispielcode kannst du berechnen, ob du in einem Fach bestanden hast (also eine 4 oder besser). + Wie du siehst, ist dieser Code extrem ineffizient, wegen des langen Codes in Zeile 5. + Die Noten 1 bis 4 wurden getrennt programmiert. Aber - Glück für dich, in diesem Level wirst du lernen, wie du ohne diesen extrem langen Code zurecht kommst. example_code: | ``` alter = {ask} 'Wie alt bist du?' @@ -2084,26 +2075,26 @@ adventures: levels: 14: story_text: | - In this level you can program the game 'Guess my number' + In diesem Level kannst du das Spiel 'Errate meine Zahl' programmiere. - ### Exercise - Fill in the correct symbols on the blanks to get the game to work. + ### Übung + Ergänze die richtigen Zeichen in den Leerstellen, so dass das Spiel funktioniert example_code: | ``` - {print} 'Guess my number' - numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 - number = numbers {at} {random} - game = 'on' + {print} 'Errate meine Zahl' + zahlen = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 + zahl = zahlen {at} {random} + spiel = 'läuft' {for} i {in} {range} 1 {to} 10 - {if} game == 'on' - guess = {ask} 'Which number do you think it is?' - {if} guess _ number - {print} 'Lower!' - {if} guess _ number - {print} 'Higher!' - {if} guess _ number - {print} 'You win!' - game = 'over' + {if} spiel == 'läuft' + vermutung = {ask} 'Welche Zahl meinst du ist es?' + {if} vermutung _ zahl + {print} 'Kleiner!' + {if} vermutung _ zahl + {print} 'Größer!' + {if} vermutung _ zahl + {print} 'Gewonnen!' + spiel = 'vorbei' ``` hangman: name: Galgenmännchen @@ -2326,6 +2317,12 @@ adventures: In den vorherigen Leveln hast du eine Einleitung ins Spukhaus-Spiel gemacht, aber wie du vielleicht gemerkt hast war das Ender der Geschichte immer schrecklich. In diesem Level kannst du die Geschichte interaktiver machen, indem du den Ausgang des Spiels änderst. Manchmal wirst du gefressen, manchmal kannst du entkommen! Lass Hedy zufällig entscheiden! + + ### Übung + Kopiere den Beispielcode und fülle die Leerstellen, so dass er funktioniert! + + **Extra** Die Geschichte ist ziemlich einfach. Vielleicht kannst du sie noch grusliger machen, indem du dir eine aufregendere Geschichte ausdenkst. + Es gibt bisher auch nur sehr wenige verschiedene Enden, es gib ja nur drei Möglichkeiten, was hinter der Tür sein kann. Vielleicht fallen dir noch mehr Monster für die Liste ein! example_code: | ``` _ Entfliehe dem Spukhaus! @@ -2368,7 +2365,7 @@ adventures: Kannst du die 4 fehlenden Wörter finden, um den Code zu vervollständigen? example_code: | ``` - {print} 'Entkomme aus dem Spukhaus!' + {print} 'Entkomme dem Spukhaus!' {print} 'Es sind 3 Türen vor dir...' Türen {is} 1, 2, 3 Monster {is} Werwolf, Mumie, Vampir, Zombie @@ -2434,28 +2431,28 @@ adventures: ``` 14: story_text: | - ### Exercise - In this level you can use the `<` and `>` symbol to introduce lives to your game. - Make sure the player loses a life when they come across the wrong monster and that the game stops if you have no lives left. + ### Übung + In diesem Level kannst du das `<` und `>` Symbol verwenden, um Leben in deinem Spiel zu verwenden. + Stelle sicher, dass die Spieler:in ein Leben verliert, wenn sie auf das falsche Monster trifft und das Spiel vorbei ist, wenn keine Leben mehr übrig sind. example_code: | ``` - {print} 'Escape from the haunted house' - lives = 3 - doors = 1, 2, 3 - monsters = 'the wicked witch', 'a zombie', 'a sleeping 3 headed dog' + {print} 'Entkomme dem Spukhaus' + leben = 3 + türen = 1, 2, 3 + monsters = 'die böse Hexe', 'ein Zombie', 'einen schlafenden 3-köpfiger Hund' {for} i {in} {range} 1 {to} 10 - {if} lives _ - good_door = doors {at} {random} + {if} leben _ + richtige_tür = türen {at} {random} monster = monsters {at} {random} - chosen_door = {ask} 'Which door do you choose?' - {if} good_door == chosen_door - {print} 'You have chosen the correct door' + gewählte_tür = {ask} 'Welche Tür nimmst du?' + {if}richtige_tür == gewählte_tür + {print} 'Du hast die richtige Tür gewählt' {else} - {print} 'You see...' monster - {if} monster == 'a sleeping 3 headed dog' - {print} 'Pffieuw.... Its asleep' + {print} 'Du siehst...' monster + {if} monster == 'einen schlafenden 3-köpfigen Hund' + {print} 'Ahh.... Er schläft' {else} - {print} 'You lose one life' + {print} 'Du verlierst ein Leben' lives = _ {else} {print} 'GAME OVER' @@ -2664,22 +2661,22 @@ adventures: Benutze diese Vergleiche so in einem `{if}`: example_code: | ``` - age = {ask} 'How old are you?' - {if} age > 12 - {print} 'You are older than I am!' + age = {ask} 'Wie alt bist du?' + {if} alter > 12 + {print} 'Du bist älter als ich!' ``` ``` - age = {ask} 'How old are you?' - {if} age < 12 - {print} 'You are younger than me!' + age = {ask} 'Wie alt bist du?' + {if} alter < 12 + {print} 'Du bist jünger als ich!' {else} - {print} 'You are older than me!' + {print} 'Du bist älter als ich!' ``` story_text_2: | Ab diesem Level kannst du zwei Gleichheitszeichen verwenden, um etwas zu vergleichen. Das ist in den meisten Programmiersprachen so: example_code_2: | ``` - name = {ask} 'Wie heisst du?' + name = {ask} 'Wie heißt du?' {if} name == 'Hedy' {print} 'Du bist cool!' ``` @@ -3270,26 +3267,26 @@ adventures: ``` 14: story_text: | - ### Exercise - In this level you can let Hedy tell you if you have saved up enough money! - Finish this code by filling in the blanks! + ### Übung + In diesem Level kannst du dir von Hedy sagen lassen, ob du genug Geld gespart hast. + Vervollständige den Code, in dem du die Leerstellen füllst. example_code: | ``` - _ calculate_budget with wish, money, allowance - to_save = wish - money - weeks = to_save / allowance - {if} wish _ money - {print} 'You need to save up some more!' - {print} 'Youll need ' weeks ' more weeks.' + _ berechne_budget {with} wunsch, erspartes, taschengeld + zu_sparen = wunsch - erspartes + wochen = zu_sparen / taschengeld + {if} wunsch _ erspartes + {print} 'Du musst noch weiter sparen!' + {print} 'Du brauchst noch 'wochen ' Wochen.' {else} - {print} 'Great! You have enough' - {print} 'Lets go shopping!' + {print} 'Großartige! Du hast genug' + {print} 'Kommt, wir gehen einkaufen!' - money = {ask} 'How much money have you saved?' - wish = {ask} 'How much money do you need?' - allowance = {ask} 'How much pocket money do you get each week?' + erspartes = {ask} 'Wie viel Geld hast du gespart?' + wunsch = {ask} 'Wie viel Geld brauchst du?' + taschengeld = {ask} 'Wie viel Taschengeld bekommst du jede Woche?' - {call} calculate_budget with _, _, _ + {call} berechne_budget {with} _, _, _ ``` pressit: name: Tastengedrücke @@ -3383,6 +3380,7 @@ adventures: levels: 14: story_text: | + ### Übung In diesem Abenteuer kannst du dein eigenes Quiz machen! Füll alle Lücken aus, füge mehr Fragen hinzu und hab Spaß bei deinem eigenen Quiz! Du kannst das Quiz machen über was du möchtest: dein Hobby, dein Lieblingstier, dein Lieblingsbuch, eigentlich über alles! example_code: | From e6cf6b6b932aa17d84bd094871124b7be9aaefcb Mon Sep 17 00:00:00 2001 From: R_SACI Date: Sun, 27 Oct 2024 22:55:43 +0100 Subject: [PATCH 02/13] Added translation using Weblate (Kabyle) Co-authored-by: R_SACI --- content/adventures/kab.yaml | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/adventures/kab.yaml diff --git a/content/adventures/kab.yaml b/content/adventures/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/adventures/kab.yaml @@ -0,0 +1 @@ +{} From 431a56ab4e8179d89229f3d0475a8442213069da Mon Sep 17 00:00:00 2001 From: Languages add-on Date: Sun, 27 Oct 2024 22:55:43 +0100 Subject: [PATCH 03/13] Added translation using Weblate (Kabyle) Added translation using Weblate (Kabyle) Added translation using Weblate (Kabyle) Added translation using Weblate (Kabyle) Added translation using Weblate (Kabyle) Added translation using Weblate (Kabyle) Added translation using Weblate (Kabyle) Added translation using Weblate (Kabyle) Added translation using Weblate (Kabyle) Co-authored-by: Languages add-on --- content/cheatsheets/kab.yaml | 1 + content/client-messages/kab.yaml | 1 + content/keywords/kab.yaml | 1 + content/pages/kab.yaml | 1 + content/parsons/kab.yaml | 1 + content/quizzes/kab.yaml | 1 + content/slides/kab.yaml | 1 + content/tutorials/kab.yaml | 1 + translations/kab/LC_MESSAGES/messages.po | 1929 ++++++++++++++++++++++ 9 files changed, 1937 insertions(+) create mode 100644 content/cheatsheets/kab.yaml create mode 100644 content/client-messages/kab.yaml create mode 100644 content/keywords/kab.yaml create mode 100644 content/pages/kab.yaml create mode 100644 content/parsons/kab.yaml create mode 100644 content/quizzes/kab.yaml create mode 100644 content/slides/kab.yaml create mode 100644 content/tutorials/kab.yaml create mode 100644 translations/kab/LC_MESSAGES/messages.po diff --git a/content/cheatsheets/kab.yaml b/content/cheatsheets/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/cheatsheets/kab.yaml @@ -0,0 +1 @@ +{} diff --git a/content/client-messages/kab.yaml b/content/client-messages/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/client-messages/kab.yaml @@ -0,0 +1 @@ +{} diff --git a/content/keywords/kab.yaml b/content/keywords/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/keywords/kab.yaml @@ -0,0 +1 @@ +{} diff --git a/content/pages/kab.yaml b/content/pages/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/pages/kab.yaml @@ -0,0 +1 @@ +{} diff --git a/content/parsons/kab.yaml b/content/parsons/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/parsons/kab.yaml @@ -0,0 +1 @@ +{} diff --git a/content/quizzes/kab.yaml b/content/quizzes/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/quizzes/kab.yaml @@ -0,0 +1 @@ +{} diff --git a/content/slides/kab.yaml b/content/slides/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/slides/kab.yaml @@ -0,0 +1 @@ +{} diff --git a/content/tutorials/kab.yaml b/content/tutorials/kab.yaml new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/content/tutorials/kab.yaml @@ -0,0 +1 @@ +{} diff --git a/translations/kab/LC_MESSAGES/messages.po b/translations/kab/LC_MESSAGES/messages.po new file mode 100644 index 00000000000..afae77d012c --- /dev/null +++ b/translations/kab/LC_MESSAGES/messages.po @@ -0,0 +1,1929 @@ +# Translations template for PROJECT. +# Copyright (C) 2024 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-06-26 16:04+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: kab\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.14.0\n" + +msgid "Access Before Assign" +msgstr "" + +msgid "Cyclic Var Definition" +msgstr "" + +msgid "Else Without If Error" +msgstr "" + +msgid "Function Undefined" +msgstr "" + +msgid "Has Blanks" +msgstr "" + +msgid "Incomplete" +msgstr "" + +msgid "Incomplete Repeat" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Invalid Argument" +msgstr "" + +msgid "Invalid Argument Type" +msgstr "" + +msgid "Invalid At Command" +msgstr "" + +msgid "Invalid Space" +msgstr "" + +msgid "Invalid Type Combination" +msgstr "" + +msgid "Lonely Echo" +msgstr "" + +msgid "Lonely Text" +msgstr "" + +msgid "Missing Additional Command" +msgstr "" + +msgid "Missing Colon Error" +msgstr "" + +msgid "Missing Command" +msgstr "" + +msgid "Missing Inner Command" +msgstr "" + +msgid "Missing Square Brackets" +msgstr "" + +msgid "Missing Variable" +msgstr "" + +msgid "Misspelled At Command" +msgstr "" + +msgid "No Indentation" +msgstr "" + +msgid "Non Decimal Variable" +msgstr "" + +msgid "Parse" +msgstr "" + +msgid "Pressit Missing Else" +msgstr "" + +msgid "Runtime Index Error" +msgstr "" + +msgid "Runtime Value Error" +msgstr "" + +msgid "Runtime Values Error" +msgstr "" + +msgid "Save Microbit code " +msgstr "" + +msgid "Too Big" +msgstr "" + +msgid "Too Few Indents" +msgstr "" + +msgid "Too Many Indents" +msgstr "" + +msgid "Unexpected Indentation" +msgstr "" + +msgid "Unquoted Assignment" +msgstr "" + +msgid "Unquoted Equality Check" +msgstr "" + +msgid "Unquoted Text" +msgstr "" + +msgid "Unsupported Float" +msgstr "" + +msgid "Unsupported String Value" +msgstr "" + +msgid "Unused Variable" +msgstr "" + +msgid "Var Undefined" +msgstr "" + +msgid "Wrong Level" +msgstr "" + +msgid "Wrong Number of Arguments" +msgstr "" + +msgid "account_overview" +msgstr "" + +msgid "actions" +msgstr "" + +msgid "add" +msgstr "" + +msgid "add_students" +msgstr "" + +msgid "add_your_language" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "advance_button" +msgstr "" + +msgid "adventure" +msgstr "" + +msgid "adventure_cloned" +msgstr "" + +msgid "adventure_code_button" +msgstr "" + +msgid "adventure_codeblock_button" +msgstr "" + +msgid "adventure_duplicate" +msgstr "" + +msgid "adventure_empty" +msgstr "" + +msgid "adventure_exp_3" +msgstr "" + +msgid "adventure_exp_classes" +msgstr "" + +msgid "adventure_flagged" +msgstr "" + +msgid "adventure_id_invalid" +msgstr "" + +msgid "adventure_length" +msgstr "" + +msgid "adventure_name_invalid" +msgstr "" + +msgid "adventure_prompt" +msgstr "" + +msgid "adventure_terms" +msgstr "" + +msgid "adventure_updated" +msgstr "" + +msgid "adventures" +msgstr "" + +msgid "adventures_completed" +msgstr "" + +msgid "adventures_info" +msgstr "" + +msgid "adventures_restored" +msgstr "" + +msgid "adventures_ticked" +msgstr "" + +msgid "adventures_tried" +msgstr "" + +msgid "ago" +msgstr "" + +msgid "agree_invalid" +msgstr "" + +msgid "agree_with" +msgstr "" + +msgid "ajax_error" +msgstr "" + +msgid "all" +msgstr "" + +msgid "all_class_highscores" +msgstr "" + +msgid "all_rows_missing_separator" +msgstr "" + +msgid "already_account" +msgstr "" + +msgid "already_program_running" +msgstr "" + +msgid "are_you_sure" +msgstr "" + +msgid "ask_needs_var" +msgstr "" + +msgid "available_in" +msgstr "" + +msgid "back_to_class" +msgstr "" + +msgid "become_a_sponsor" +msgstr "" + +msgid "birth_year" +msgstr "" + +msgid "bug" +msgstr "" + +msgid "by" +msgstr "" + +msgid "cancel" +msgstr "" + +msgid "cant_parse_exception" +msgstr "" + +msgid "certificate" +msgstr "" + +msgid "certified_teacher" +msgstr "" + +msgid "change_password" +msgstr "" + +msgid "cheatsheet_title" +msgstr "" + +msgid "class_already_joined" +msgstr "" + +msgid "class_customize_success" +msgstr "" + +msgid "class_graph_explanation" +msgstr "" + +msgid "class_logs" +msgstr "" + +msgid "class_name_duplicate" +msgstr "" + +msgid "class_name_empty" +msgstr "" + +msgid "class_name_invalid" +msgstr "" + +msgid "class_name_prompt" +msgstr "" + +msgid "class_performance_graph" +msgstr "" + +msgid "class_survey_description" +msgstr "" + +msgid "class_survey_later" +msgstr "" + +msgid "class_survey_question1" +msgstr "" + +msgid "class_survey_question2" +msgstr "" + +msgid "class_survey_question3" +msgstr "" + +msgid "class_survey_question4" +msgstr "" + +msgid "classes" +msgstr "" + +msgid "classes_info" +msgstr "" + +msgid "clear" +msgstr "" + +msgid "clone" +msgstr "" + +msgid "cloned_times" +msgstr "" + +msgid "close" +msgstr "" + +msgid "comma" +msgstr "" + +msgid "command_not_available_yet_exception" +msgstr "" + +msgid "command_unavailable_exception" +msgstr "" + +msgid "commands" +msgstr "" + +msgid "complete" +msgstr "" + +msgid "congrats_message" +msgstr "" + +msgid "connect_guest_teacher" +msgstr "" + +msgid "constant_variable_role" +msgstr "" + +msgid "content_invalid" +msgstr "" + +msgid "continue" +msgstr "" + +msgid "contributor" +msgstr "" + +msgid "copy_accounts_to_clipboard" +msgstr "" + +msgid "copy_clipboard" +msgstr "" + +msgid "copy_code" +msgstr "" + +msgid "copy_join_link" +msgstr "" + +msgid "copy_link_success" +msgstr "" + +msgid "copy_link_to_share" +msgstr "" + +msgid "copy_mail_link" +msgstr "" + +msgid "correct_answer" +msgstr "" + +msgid "country" +msgstr "" + +msgid "country_invalid" +msgstr "" + +msgid "create_account" +msgstr "" + +msgid "create_accounts" +msgstr "" + +msgid "create_accounts_placeholder" +msgstr "" + +msgid "create_accounts_prompt" +msgstr "" + +msgid "create_adventure" +msgstr "" + +msgid "create_class" +msgstr "" + +msgid "create_student_account" +msgstr "" + +msgid "create_student_account_explanation" +msgstr "" + +msgid "create_student_accounts" +msgstr "" + +msgid "create_teacher_account" +msgstr "" + +msgid "create_teacher_account_explanation" +msgstr "" + +msgid "create_usernames_and_passwords_desc" +msgstr "" + +msgid "create_usernames_and_passwords_title" +msgstr "" + +msgid "create_usernames_desc" +msgstr "" + +msgid "create_usernames_title" +msgstr "" + +msgid "creator" +msgstr "" + +msgid "current_password" +msgstr "" + +msgid "customization_deleted" +msgstr "" + +msgid "customize" +msgstr "" + +msgid "customize_adventure" +msgstr "" + +msgid "customize_class" +msgstr "" + +msgid "dash" +msgstr "" + +msgid "debug" +msgstr "" + +msgid "default_401" +msgstr "" + +msgid "default_403" +msgstr "" + +msgid "default_404" +msgstr "" + +msgid "default_500" +msgstr "" + +msgid "delete" +msgstr "" + +msgid "delete_adventure_prompt" +msgstr "" + +msgid "delete_class_prompt" +msgstr "" + +msgid "delete_confirm" +msgstr "" + +msgid "delete_invite" +msgstr "" + +msgid "delete_invite_prompt" +msgstr "" + +msgid "delete_public" +msgstr "" + +msgid "delete_success" +msgstr "" + +msgid "delete_tag_prompt" +msgstr "" + +msgid "destroy_profile" +msgstr "" + +msgid "developers_mode" +msgstr "" + +msgid "directly_available" +msgstr "" + +msgid "disable" +msgstr "" + +msgid "disable_explore_page" +msgstr "" + +msgid "disable_parsons" +msgstr "" + +msgid "disable_quizes" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "disabled_button_quiz" +msgstr "" + +msgid "discord_server" +msgstr "" + +msgid "distinguished_user" +msgstr "" + +msgid "double quotes" +msgstr "" + +msgid "download" +msgstr "" + +msgid "duplicate" +msgstr "" + +msgid "echo_and_ask_mismatch_exception" +msgstr "" + +msgid "echo_out" +msgstr "" + +msgid "edit_adventure" +msgstr "" + +msgid "edit_code_button" +msgstr "" + +msgid "email" +msgstr "" + +msgid "email_invalid" +msgstr "" + +msgid "end_quiz" +msgstr "" + +msgid "english" +msgstr "" + +msgid "enter" +msgstr "" + +msgid "enter_password" +msgstr "" + +msgid "enter_text" +msgstr "" + +msgid "error_logo_alt" +msgstr "" + +msgid "errors" +msgstr "" + +msgid "exclamation mark" +msgstr "" + +msgid "exercise" +msgstr "" + +msgid "exercise_doesnt_exist" +msgstr "" + +msgid "exists_email" +msgstr "" + +msgid "exists_username" +msgstr "" + +msgid "exit_preview_mode" +msgstr "" + +msgid "experience_invalid" +msgstr "" + +msgid "expiration_date" +msgstr "" + +msgid "favorite_program" +msgstr "" + +msgid "favourite_confirm" +msgstr "" + +msgid "favourite_program" +msgstr "" + +msgid "favourite_program_invalid" +msgstr "" + +msgid "favourite_success" +msgstr "" + +msgid "feature" +msgstr "" + +msgid "feedback" +msgstr "" + +msgid "feedback_message_error" +msgstr "" + +msgid "feedback_message_success" +msgstr "" + +msgid "feedback_modal_message" +msgstr "" + +msgid "female" +msgstr "" + +msgid "flag_adventure_prompt" +msgstr "" + +msgid "float" +msgstr "" + +msgid "for_teachers" +msgstr "" + +msgid "forgot_password" +msgstr "" + +msgid "from_another_teacher" +msgstr "" + +msgid "from_magazine_website" +msgstr "" + +msgid "from_video" +msgstr "" + +msgid "fun_statistics_msg" +msgstr "" + +msgid "gender" +msgstr "" + +msgid "gender_invalid" +msgstr "" + +msgid "general_settings" +msgstr "" + +msgid "get_certificate" +msgstr "" + +msgid "give_link_to_teacher" +msgstr "" + +msgid "go_back" +msgstr "" + +msgid "go_back_to_main" +msgstr "" + +msgid "go_to_question" +msgstr "" + +msgid "go_to_quiz_result" +msgstr "" + +msgid "goto_profile" +msgstr "" + +msgid "graph_title" +msgstr "" + +msgid "hand_in" +msgstr "" + +msgid "hand_in_exercise" +msgstr "" + +msgid "heard_about_hedy" +msgstr "" + +msgid "heard_about_invalid" +msgstr "" + +msgid "hedy_choice_title" +msgstr "" + +msgid "hedy_introduction_slides" +msgstr "" + +msgid "hedy_logo_alt" +msgstr "" + +msgid "hedy_on_github" +msgstr "" + +msgid "hello_logo" +msgstr "" + +msgid "hide_adventures" +msgstr "" + +msgid "hide_cheatsheet" +msgstr "" + +msgid "hide_classes" +msgstr "" + +msgid "hide_keyword_switcher" +msgstr "" + +msgid "hide_slides" +msgstr "" + +msgid "highest_level_reached" +msgstr "" + +msgid "highest_quiz_score" +msgstr "" + +msgid "hint" +msgstr "" + +msgid "ill_work_some_more" +msgstr "" + +msgid "image_invalid" +msgstr "" + +msgid "incomplete_command_exception" +msgstr "" + +msgid "incorrect_handling_of_quotes_exception" +msgstr "" + +msgid "incorrect_use_of_types_exception" +msgstr "" + +msgid "incorrect_use_of_variable_exception" +msgstr "" + +msgid "indentation_exception" +msgstr "" + +msgid "input" +msgstr "" + +msgid "input_variable_role" +msgstr "" + +msgid "integer" +msgstr "" + +msgid "invalid_class_link" +msgstr "" + +msgid "invalid_command_exception" +msgstr "" + +msgid "invalid_keyword_language_comment" +msgstr "" + +msgid "invalid_language_comment" +msgstr "" + +msgid "invalid_level_comment" +msgstr "" + +msgid "invalid_program_comment" +msgstr "" + +msgid "invalid_teacher_invitation_code" +msgstr "" + +msgid "invalid_tutorial_step" +msgstr "" + +msgid "invalid_username_password" +msgstr "" + +msgid "invite_by_username" +msgstr "" + +msgid "invite_date" +msgstr "" + +msgid "invite_message" +msgstr "" + +msgid "invite_prompt" +msgstr "" + +msgid "invite_teacher" +msgstr "" + +msgid "join_class" +msgstr "" + +msgid "join_prompt" +msgstr "" + +msgid "keybinding_waiting_for_keypress" +msgstr "" + +msgid "keyword_language_invalid" +msgstr "" + +msgid "landcode_phone_number" +msgstr "" + +msgid "language" +msgstr "" + +msgid "language_invalid" +msgstr "" + +msgid "languages" +msgstr "" + +msgid "last_edited" +msgstr "" + +msgid "last_update" +msgstr "" + +msgid "lastname" +msgstr "" + +msgid "leave_class" +msgstr "" + +msgid "level" +msgstr "" + +msgid "level_accessible" +msgstr "" + +msgid "level_disabled" +msgstr "" + +msgid "level_future" +msgstr "" + +msgid "level_invalid" +msgstr "" + +msgid "level_not_class" +msgstr "" + +msgid "level_title" +msgstr "" + +msgid "levels" +msgstr "" + +msgid "link" +msgstr "" + +msgid "list" +msgstr "" + +msgid "list_variable_role" +msgstr "" + +msgid "logged_in_to_share" +msgstr "" + +msgid "login" +msgstr "" + +msgid "login_long" +msgstr "" + +msgid "login_to_save_your_work" +msgstr "" + +msgid "logout" +msgstr "" + +msgid "longest_program" +msgstr "" + +msgid "mail_change_password_body" +msgstr "" + +msgid "mail_change_password_subject" +msgstr "" + +msgid "mail_error_change_processed" +msgstr "" + +msgid "mail_goodbye" +msgstr "" + +msgid "mail_hello" +msgstr "" + +msgid "mail_recover_password_body" +msgstr "" + +msgid "mail_recover_password_subject" +msgstr "" + +msgid "mail_reset_password_body" +msgstr "" + +msgid "mail_reset_password_subject" +msgstr "" + +msgid "mail_welcome_teacher_body" +msgstr "" + +msgid "mail_welcome_teacher_subject" +msgstr "" + +msgid "mail_welcome_verify_body" +msgstr "" + +msgid "mail_welcome_verify_subject" +msgstr "" + +msgid "mailing_title" +msgstr "" + +msgid "main_subtitle" +msgstr "" + +msgid "main_title" +msgstr "" + +msgid "make_sure_you_are_done" +msgstr "" + +msgid "male" +msgstr "" + +msgid "mandatory_mode" +msgstr "" + +msgid "more_info" +msgstr "" + +msgid "more_options" +msgstr "" + +msgid "multiple_keywords_warning" +msgstr "" + +msgid "multiple_levels_warning" +msgstr "" + +msgid "my_account" +msgstr "" + +msgid "my_adventures" +msgstr "" + +msgid "my_classes" +msgstr "" + +msgid "my_messages" +msgstr "" + +msgid "my_public_profile" +msgstr "" + +msgid "name" +msgstr "" + +msgid "nav_explore" +msgstr "" + +msgid "nav_hedy" +msgstr "" + +msgid "nav_learn_more" +msgstr "" + +msgid "nav_start" +msgstr "" + +msgid "new_password" +msgstr "" + +msgid "new_password_repeat" +msgstr "" + +msgid "newline" +msgstr "" + +msgid "next_adventure" +msgstr "" + +msgid "next_exercise" +msgstr "" + +msgid "next_page" +msgstr "" + +msgid "next_step_tutorial" +msgstr "" + +msgid "next_student" +msgstr "" + +msgid "no" +msgstr "" + +msgid "no_account" +msgstr "" + +msgid "no_accounts" +msgstr "" + +msgid "no_adventures_yet" +msgstr "" + +msgid "no_more_flat_if" +msgstr "" + +msgid "no_programs" +msgstr "" + +msgid "no_shared_programs" +msgstr "" + +msgid "no_students" +msgstr "" + +msgid "no_such_adventure" +msgstr "" + +msgid "no_such_class" +msgstr "" + +msgid "no_such_level" +msgstr "" + +msgid "no_such_program" +msgstr "" + +msgid "no_tag" +msgstr "" + +msgid "not_adventure_yet" +msgstr "" + +msgid "not_enrolled" +msgstr "" + +msgid "not_in_class_no_handin" +msgstr "" + +msgid "not_logged_in_cantsave" +msgstr "" + +msgid "not_logged_in_handin" +msgstr "" + +msgid "not_teacher" +msgstr "" + +msgid "number" +msgstr "" + +msgid "number_lines" +msgstr "" + +msgid "number_of_errors" +msgstr "" + +msgid "number_programs" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "one_level_error" +msgstr "" + +msgid "only_you_can_see" +msgstr "" + +msgid "open" +msgstr "" + +msgid "opening_date" +msgstr "" + +msgid "opening_dates" +msgstr "" + +msgid "option" +msgstr "" + +msgid "or" +msgstr "" + +msgid "other" +msgstr "" + +msgid "other_block" +msgstr "" + +msgid "other_settings" +msgstr "" + +msgid "other_source" +msgstr "" + +msgid "other_text" +msgstr "" + +msgid "overwrite_warning" +msgstr "" + +msgid "owner" +msgstr "" + +msgid "page_not_found" +msgstr "" + +msgid "pair_with_teacher" +msgstr "" + +msgid "parsons_title" +msgstr "" + +msgid "password" +msgstr "" + +msgid "password_change_not_allowed" +msgstr "" + +msgid "password_change_prompt" +msgstr "" + +msgid "password_change_success" +msgstr "" + +msgid "password_invalid" +msgstr "" + +msgid "password_repeat" +msgstr "" + +msgid "password_resetted" +msgstr "" + +msgid "password_six" +msgstr "" + +msgid "password_updated" +msgstr "" + +msgid "passwords_six" +msgstr "" + +msgid "passwords_too_short" +msgstr "" + +msgid "pending_invites" +msgstr "" + +msgid "people_with_a_link" +msgstr "" + +msgid "percentage" +msgstr "" + +msgid "period" +msgstr "" + +msgid "personal_text" +msgstr "" + +msgid "personal_text_invalid" +msgstr "" + +msgid "phone_number" +msgstr "" + +msgid "preferred_keyword_language" +msgstr "" + +msgid "preferred_language" +msgstr "" + +msgid "preview" +msgstr "" + +msgid "preview_teacher_mode" +msgstr "" + +msgid "previewing_adventure" +msgstr "" + +msgid "previewing_class" +msgstr "" + +msgid "previous_campaigns" +msgstr "" + +msgid "previous_page" +msgstr "" + +msgid "print_accounts" +msgstr "" + +msgid "print_logo" +msgstr "" + +msgid "privacy_terms" +msgstr "" + +msgid "private" +msgstr "" + +msgid "profile_logo_alt" +msgstr "" + +msgid "profile_picture" +msgstr "" + +msgid "profile_updated" +msgstr "" + +msgid "profile_updated_reload" +msgstr "" + +msgid "program_contains_error" +msgstr "" + +msgid "program_header" +msgstr "" + +msgid "program_too_large_exception" +msgstr "" + +msgid "programming_experience" +msgstr "" + +msgid "programming_invalid" +msgstr "" + +msgid "programs" +msgstr "" + +msgid "prompt_join_class" +msgstr "" + +msgid "provided_username_duplicates" +msgstr "" + +msgid "public" +msgstr "" + +msgid "public_adventures" +msgstr "" + +msgid "public_content" +msgstr "" + +msgid "public_content_info" +msgstr "" + +msgid "public_invalid" +msgstr "" + +msgid "public_profile" +msgstr "" + +msgid "public_profile_info" +msgstr "" + +msgid "public_profile_updated" +msgstr "" + +msgid "put" +msgstr "" + +msgid "question mark" +msgstr "" + +msgid "quiz_logo_alt" +msgstr "" + +msgid "quiz_score" +msgstr "" + +msgid "quiz_tab" +msgstr "" + +msgid "quiz_threshold_not_reached" +msgstr "" + +msgid "read_code_label" +msgstr "" + +msgid "recent" +msgstr "" + +msgid "recover_password" +msgstr "" + +msgid "regress_button" +msgstr "" + +msgid "remove" +msgstr "" + +msgid "remove_customization" +msgstr "" + +msgid "remove_customizations_prompt" +msgstr "" + +msgid "remove_student_prompt" +msgstr "" + +msgid "remove_user_prompt" +msgstr "" + +msgid "repair_program_logo_alt" +msgstr "" + +msgid "repeat_dep" +msgstr "" + +msgid "repeat_match_password" +msgstr "" + +msgid "repeat_new_password" +msgstr "" + +msgid "report_failure" +msgstr "" + +msgid "report_program" +msgstr "" + +msgid "report_success" +msgstr "" + +msgid "request_invalid" +msgstr "" + +msgid "request_teacher" +msgstr "" + +msgid "request_teacher_account" +msgstr "" + +msgid "required_field" +msgstr "" + +msgid "reset_adventure_prompt" +msgstr "" + +msgid "reset_adventures" +msgstr "" + +msgid "reset_button" +msgstr "" + +msgid "reset_password" +msgstr "" + +msgid "restart" +msgstr "" + +msgid "retrieve_adventure_error" +msgstr "" + +msgid "retrieve_class_error" +msgstr "" + +msgid "retrieve_tag_error" +msgstr "" + +msgid "role" +msgstr "" + +msgid "run_code_button" +msgstr "" + +msgid "save_parse_warning" +msgstr "" + +msgid "save_prompt" +msgstr "" + +msgid "save_success_detail" +msgstr "" + +msgid "score" +msgstr "" + +msgid "search" +msgstr "" + +msgid "search_button" +msgstr "" + +msgid "second_teacher" +msgstr "" + +msgid "second_teacher_copy_prompt" +msgstr "" + +msgid "second_teacher_prompt" +msgstr "" + +msgid "second_teacher_warning" +msgstr "" + +msgid "see_certificate" +msgstr "" + +msgid "select" +msgstr "" + +msgid "select_adventures" +msgstr "" + +msgid "select_all" +msgstr "" + +msgid "select_lang" +msgstr "" + +msgid "select_levels" +msgstr "" + +msgid "select_tag" +msgstr "" + +msgid "selected" +msgstr "" + +msgid "self_removal_prompt" +msgstr "" + +msgid "send_password_recovery" +msgstr "" + +msgid "sent_by" +msgstr "" + +msgid "sent_password_recovery" +msgstr "" + +msgid "settings" +msgstr "" + +msgid "share" +msgstr "" + +msgid "share_by_giving_link" +msgstr "" + +msgid "share_your_program" +msgstr "" + +msgid "signup_student_or_teacher" +msgstr "" + +msgid "single quotes" +msgstr "" + +msgid "slash" +msgstr "" + +msgid "sleeping" +msgstr "" + +msgid "slides" +msgstr "" + +msgid "slides_for_level" +msgstr "" + +msgid "slides_info" +msgstr "" + +msgid "social_media" +msgstr "" + +msgid "solution_example" +msgstr "" + +msgid "solution_example_explanation" +msgstr "" + +msgid "some_rows_missing_separator" +msgstr "" + +msgid "something_went_wrong_keyword_parsing" +msgstr "" + +msgid "space" +msgstr "" + +msgid "star" +msgstr "" + +msgid "start_learning" +msgstr "" + +msgid "start_quiz" +msgstr "" + +msgid "start_teaching" +msgstr "" + +msgid "step_title" +msgstr "" + +msgid "stepper_variable_role" +msgstr "" + +msgid "stop" +msgstr "" + +msgid "stop_code_button" +msgstr "" + +msgid "string" +msgstr "" + +msgid "student" +msgstr "" + +msgid "student_accounts_created" +msgstr "" + +msgid "student_adventures_table" +msgstr "" + +msgid "student_adventures_table_explanation" +msgstr "" + +msgid "student_already_in_class" +msgstr "" + +msgid "student_already_invite" +msgstr "" + +msgid "student_in_another_class" +msgstr "" + +msgid "student_information" +msgstr "" + +msgid "student_information_explanation" +msgstr "" + +msgid "student_not_existing" +msgstr "" + +msgid "student_signup_header" +msgstr "" + +msgid "students" +msgstr "" + +msgid "submission_time" +msgstr "" + +msgid "submit_answer" +msgstr "" + +msgid "submit_program" +msgstr "" + +msgid "submit_warning" +msgstr "" + +msgid "submitted" +msgstr "" + +msgid "submitted_header" +msgstr "" + +msgid "subscribe" +msgstr "" + +msgid "subscribe_newsletter" +msgstr "" + +msgid "successful_runs" +msgstr "" + +msgid "suggestion_color" +msgstr "" + +msgid "suggestion_note" +msgstr "" + +msgid "suggestion_number" +msgstr "" + +msgid "suggestion_numbers_or_strings" +msgstr "" + +msgid "surname" +msgstr "" + +msgid "survey" +msgstr "" + +msgid "survey_completed" +msgstr "" + +msgid "survey_skip" +msgstr "" + +msgid "survey_submit" +msgstr "" + +msgid "tag_in_adventure" +msgstr "" + +msgid "tag_input_placeholder" +msgstr "" + +msgid "tags" +msgstr "" + +msgid "teacher" +msgstr "" + +msgid "teacher_invalid" +msgstr "" + +msgid "teacher_invitation_require_login" +msgstr "" + +msgid "teacher_manual" +msgstr "" + +msgid "teacher_signup_header" +msgstr "" + +msgid "teacher_welcome" +msgstr "" + +msgid "teachers" +msgstr "" + +msgid "template_code" +msgstr "" + +msgid "this_turns_in_assignment" +msgstr "" + +msgid "title" +msgstr "" + +msgid "title_admin" +msgstr "" + +msgid "title_class-overview" +msgstr "" + +msgid "title_customize-adventure" +msgstr "" + +msgid "title_customize-class" +msgstr "" + +msgid "title_explore" +msgstr "" + +msgid "title_for-teacher" +msgstr "" + +msgid "title_join-class" +msgstr "" + +msgid "title_learn-more" +msgstr "" + +msgid "title_login" +msgstr "" + +msgid "title_my-profile" +msgstr "" + +msgid "title_privacy" +msgstr "" + +msgid "title_programs" +msgstr "" + +msgid "title_public-adventures" +msgstr "" + +msgid "title_recover" +msgstr "" + +msgid "title_reset" +msgstr "" + +msgid "title_signup" +msgstr "" + +msgid "title_start" +msgstr "" + +msgid "title_view-adventure" +msgstr "" + +msgid "token_invalid" +msgstr "" + +msgid "too_many_accounts" +msgstr "" + +msgid "tooltip_level_locked" +msgstr "" + +msgid "translate_error" +msgstr "" + +msgid "translating_hedy" +msgstr "" + +msgid "translator" +msgstr "" + +msgid "turned_into_teacher" +msgstr "" + +msgid "tutorial" +msgstr "" + +msgid "tutorial_code_snippet" +msgstr "" + +msgid "tutorial_message_not_found" +msgstr "" + +msgid "tutorial_title_not_found" +msgstr "" + +msgid "unauthorized" +msgstr "" + +msgid "unfavourite_confirm" +msgstr "" + +msgid "unfavourite_success" +msgstr "" + +msgid "unknown_variable_role" +msgstr "" + +msgid "unlock_thresholds" +msgstr "" + +msgid "unsaved_class_changes" +msgstr "" + +msgid "unsubmit_program" +msgstr "" + +msgid "unsubmit_warning" +msgstr "" + +msgid "unsubmitted" +msgstr "" + +msgid "update_adventure_prompt" +msgstr "" + +msgid "update_public" +msgstr "" + +msgid "updating_indicator" +msgstr "" + +msgid "use_custom_passwords" +msgstr "" + +msgid "use_generated_passwords" +msgstr "" + +msgid "use_of_blanks_exception" +msgstr "" + +msgid "use_of_nested_functions_exception" +msgstr "" + +msgid "used_in" +msgstr "" + +msgid "user" +msgstr "" + +msgid "user_inexistent" +msgstr "" + +msgid "user_not_private" +msgstr "" + +msgid "username" +msgstr "" + +msgid "username_contains_invalid_symbol" +msgstr "" + +msgid "username_contains_separator" +msgstr "" + +msgid "username_empty" +msgstr "" + +msgid "username_invalid" +msgstr "" + +msgid "username_special" +msgstr "" + +msgid "username_three" +msgstr "" + +msgid "usernames_too_short" +msgstr "" + +msgid "usernames_unavailable" +msgstr "" + +msgid "value" +msgstr "" + +msgid "view_adventures" +msgstr "" + +msgid "view_classes" +msgstr "" + +msgid "view_program" +msgstr "" + +msgid "view_slides" +msgstr "" + +msgid "waiting_for_submit" +msgstr "" + +msgid "walker_variable_role" +msgstr "" + +msgid "what_is_your_role" +msgstr "" + +msgid "what_should_my_code_do" +msgstr "" + +msgid "year_invalid" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "your_personal_text" +msgstr "" + +msgid "your_program" +msgstr "" From 0070f72bce417369ea74d67bffad0449870dee7c Mon Sep 17 00:00:00 2001 From: Prefill add-on Date: Sun, 27 Oct 2024 22:55:43 +0100 Subject: [PATCH 04/13] Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 44 strings) Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 637 strings) Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 403 strings) Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 2185 strings) Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 50 strings) Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 67 strings) Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 24 strings) Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 189 strings) Co-authored-by: Prefill add-on Translate-URL: https://hosted.weblate.org/projects/hedy/client-messages/kab/ Translate-URL: https://hosted.weblate.org/projects/hedy/commands/kab/ Translate-URL: https://hosted.weblate.org/projects/hedy/keywords/kab/ Translate-URL: https://hosted.weblate.org/projects/hedy/parsons/kab/ Translate-URL: https://hosted.weblate.org/projects/hedy/quizzes/kab/ Translate-URL: https://hosted.weblate.org/projects/hedy/slides/kab/ Translate-URL: https://hosted.weblate.org/projects/hedy/tutorials/kab/ Translate-URL: https://hosted.weblate.org/projects/hedy/web-texts/kab/ Translation: Hedy/Cheatsheets Translation: Hedy/Keywords Translation: Hedy/Parsons Translation: Hedy/Quizzes Translation: Hedy/Texts Translation: Hedy/Tutorials Translation: Hedy/client-messages Translation: Hedy/slides --- content/cheatsheets/kab.yaml | 208 +- content/client-messages/kab.yaml | 26 +- content/keywords/kab.yaml | 68 +- content/parsons/kab.yaml | 89 +- content/quizzes/kab.yaml | 2544 +++++++++++++++++++++- content/slides/kab.yaml | 566 ++++- content/tutorials/kab.yaml | 71 +- translations/kab/LC_MESSAGES/messages.po | 1944 +++++++++++------ 8 files changed, 4876 insertions(+), 640 deletions(-) diff --git a/content/cheatsheets/kab.yaml b/content/cheatsheets/kab.yaml index 0967ef424bc..fbb1f4417f8 100644 --- a/content/cheatsheets/kab.yaml +++ b/content/cheatsheets/kab.yaml @@ -1 +1,207 @@ -{} +2: +- name: '{is}' + demo_code: "name {is} Hedy\n{print} welcome name" + explanation: Give a word a name to use in the program using `{is}`. You can choose the name yourself. +- name: '{ask}' + demo_code: "color {is} {ask} What is your favorite color?\n{print} color is your favorite!" + explanation: Ask something with `{ask}`. Beware! You need to give the answer a name with `{is}`. +- demo_code: "{print} Let me think for one second...\n{sleep}\n{print} Hmm.. I need 3 more seconds...\n{sleep} 3\n{print} Eureka! Ive got it!" + explanation: With `{sleep}`, you can let Hedy pause for a (couple of) second(s). + name: '{sleep}' +- demo_code: "angle {is} 90\n{turn} angle\n{forward} 100" + explanation: Give a number a name using `{is}`. You can choose the name yourself. + name: '{is} with turtle' +3: +- name: Choose random + explanation: Choose a random word from a group with `{at}` and `{random}`. + demo_code: "animals {is} dog, cat, kangaroo\n{print} animals {at} {random}" +- explanation: '`{add}` an item `{to_list}` a list.' + demo_code: "animals {is} cow, cat\n{add} dog {to_list} animals" + name: '{add}' +- explanation: '`{remove}` an item `{from}` a list.' + demo_code: "animals {is} cat, dog, cow\n{remove} dog {from} animals" + name: '{remove}' +4: +- explanation: Print exactly using quotation marks. + name: '{print}' + demo_code: "{print} 'Hello welcome to Hedy.'" +- demo_code: "name {is} Hedy\n{print} 'my name is ' name" + name: '{is}' + explanation: Give a name to some text and `{print}` without quotation marks. +- name: '{ask}' + explanation: Ask something with `{ask}`. + demo_code: "color {is} {ask} 'What is your favorite color?'\n{print} color ' is your favorite!'" +7: +- explanation: Print exactly using quotation marks. + name: '{print}' + demo_code: "{print} 'Hello welcome to Hedy.'" +- name: '{ask}' + explanation: Ask something with `{ask}`. + demo_code: "color = {ask} 'What is your favorite color?'\n{print} color ' is your favorite!'" +- name: '{if}' + explanation: Make a choice with `{if}`. + demo_code: "color = {ask} 'What is your favorite color?'\n{if} color {is} green {print} 'pretty!' {else} {print} 'meh'" +- demo_code: '{repeat} 3 {times} {forward} 10' + explanation: Repeat a line of code with `{repeat}`. + name: '{repeat} with turtle' +8: +- name: '{print}' + explanation: Print something. Remember to use a quotation mark for literal printing. + demo_code: "{print} '5 times 5 is ' 5 * 5" +- name: '{ask}' + demo_code: "answer = {ask} 'What is 5 plus 5?'\n{if} answer {is} 10\n {print} 'Well done!'\n {print} 'Indeed, the answer was ' answer\n{else}\n {print} 'Oops!'\n {print} 'The answer is 10'" + explanation: Ask for the answer to a sum and check if it is correct. We can now print 2 lines. +- explanation: Repeat multiple lines. + name: '{repeat} with turtle' + demo_code: "{repeat} 4 {times}\n {turn} 90\n {forward} 50" +- name: '{pressed}' + explanation: Check whether a given key on the keyboard is `{pressed}`. + demo_code: "{if} a {is} {pressed}\n {print} 'You pressed A!'\n{else}\n {print} 'You pressed another key!'" +13: +- explanation: Two parts both need to be correct. + demo_code: "answer1 = {ask} 'What is 3+2?'\nanswer2 = {ask} 'What is 2+2?'\n{if} answer1 {is} 5 {and} answer2 {is} 4\n {print} 'Both answers are correct!'\n{else}\n {print} 'At least one answer is wrong!'" + name: '{and}' +- demo_code: "answer1 = {ask} 'What is 3+2?'\nanswer2 = {ask} 'What is 2+2?'\n{if} answer1 {is} 5 {or} answer2 {is} 4\n {print} 'At least one answer is correct!'\n{else}\n {print} 'Both answers are wrong!'" + name: '{or}' + explanation: At least 1 of the two parts need to be correct. If both are correct, it is also fine. +14: +- name: Smaller + explanation: We use the `<` to check if the first number is smaller than the second number. + demo_code: "age = {ask} 'How old are you?'\n{if} age < 13\n {print} 'You are younger than me!'" +- demo_code: "age = {ask} 'How old are you?'\n{if} age > 13\n {print} 'You are older than me!'" + name: Bigger + explanation: We use the `>` to check if the first number is bigger than the second number. +- demo_code: "answer = {ask} 'What is 5 * 5?'\n{if} answer == 25\n {print} 'That is correct!'" + name: Equal + explanation: We use the `==` to check if two things are the same. +- explanation: We use the `!=` to check if two things are not the same. + name: Not equal + demo_code: "answer = {ask} 'What is 5 * 5?'\n{if} answer != 25\n {print} 'That is not correct!'" +- demo_code: "age = {ask} 'How old are you?'\n{if} age <= 12\n {print} 'You are younger than me!'" + name: Smaller or equal + explanation: We use the `<=` to check if the first number is smaller than or equal to the second number. +- demo_code: "age = {ask} 'How old are you?'\n{if} age >= 14\n {print} 'You are older than me!'" + explanation: We use the `>=` to check if the first number is bigger than or equal to the second number. + name: Bigger or equal +16: +- name: square brackets + explanation: Lists with square brackets. + demo_code: "fruit = ['apple', 'banana', 'cherry']\n{print} fruit" +- name: Get an item from a list + explanation: To get an item from a list we use [number] so fruit[1] means, get the first fruit from the list! + demo_code: "fruit = ['banana', 'apple', 'cherry']\nfirstfruit = fruit[1]\n{print} firstfruit" +- name: Get a random item from a list + explanation: To get a random item from a list we use [{random}] so fruit[{random}] means, get a random fruit from the list! + demo_code: "fruit = ['banana', 'apple', 'cherry']\nrandom_fruit = fruit[{random}]\n{print} random_fruit" +17: +- explanation: '`{elif}`' + demo_code: "a = 2\n{if} a == 1:\n {print} 'a is 1'\n{elif} a == 2:\n {print} 'a is 2'\n{else}:\n {print} 'a is not 1 or 2'" + name: '{elif}' +- name: '{print}' + demo_code: "{for} i {in} {range} 1 {to} 12:\n {print} i\n{print} 'Ready or not, here I come!'" + explanation: When we use a `{for}`, we need to put a `:` behind the `{for}` statement! +- name: '{if}' + explanation: We need to do the same with all of our `{if}` statements. + demo_code: "color = {ask} 'What is your favorite color?'\n{if} color == 'green':\n {print} 'Your favorite color is green'\n{else}:\n {print} 'Your favorite color is not green'" +18: +- explanation: After `{print}` you need to use parentheses. + demo_code: "{print}('hi!')" + name: '{print}' +- name: '{range}' + explanation: After `{range}` you need to use parentheses. + demo_code: "{for} i {in} {range} (1,10):\n {print}('Hello, times ', i)" +- demo_code: "name = 'Hedy'\n{print}('my name is ', name)" + explanation: With `{print}` you need to use parentheses and commas if you print more items. + name: '{print} with var' +- name: ask something with {input} + explanation: Use `{input}` instead of `{ask}` to ask something. + demo_code: "name = {input}('What is your name?')\n{print}('So your name is ', name)" +5: +- explanation: Print exactly using quotation marks. + name: '{print}' + demo_code: "{print} 'Hello welcome to Hedy.'" +- name: '{ask}' + demo_code: "color {is} {ask} 'What is your favorite color?'\n{print} color ' is your favorite!'" + explanation: Ask something with `{ask}`. +- demo_code: "color {is} {ask} 'What is your favorite color?'\n{if} color {is} green {print} 'pretty!' {else} {print} 'meh'" + explanation: Make a choice with `{if}`. + name: '{if}' +- name: '{if} with turtle' + explanation: Make a choice with `{if}`. + demo_code: "answer {is} {ask} 'How far should I walk?'\n{if} answer {is} far {forward} 100 {else} {forward} 5" +- demo_code: "pretty_colors {is} green, yellow\ncolor {is} {ask} 'What is your favorite color?'\n{if} color {in} pretty_colors {print} 'pretty!' {else} {print} 'meh'" + explanation: Check elements with `{in}`. + name: '{in}' +- demo_code: "{if} a {is} {pressed} {print} 'You pressed A!' {else} {print} 'You pressed another key!'" + explanation: Check whether a given key on the keyboard is `{pressed}`. + name: '{pressed}' +9: +- name: '{if} with multiple lines' + demo_code: "answer = {ask} 'What is 10 plus 10?'\n{if} answer {is} 20\n {print} 'Well done!!'\n {print} 'The answer is indeed' answer\n{else}\n {print} 'Wrong'\n {print} 'The answer is 20'" + explanation: The answer of a sum of questions with `{ask}` and see if it is correct. Now we print out two lines. +- explanation: Repeat multiple lines. + name: '{repeat} with turtle' + demo_code: "{repeat} 4 {times}\n {turn} 90\n {forward} 50" +12: +- explanation: Decimal numbers. + demo_code: "{print} 'Calculate away!'\n{print} 'Two and a half plus two and a half is...'\n{print} 2.5 + 2.5" + name: float directly +- demo_code: "name = 'Hedy the Robot'\n{print} 'Hello ' name" + explanation: Text with quotation marks after `=` + name: assign text +- explanation: Text with quotation marks after `{if}`. + name: quotes after `{if}` comparison + demo_code: "name = {ask} 'Who are you?'\n{if} name = 'Hedy'\n {print} 'Hi there!'" +- demo_code: "superheroes = 'Iron Man', 'Batman', 'Superman'\n{print} superheroes {at} {random}" + explanation: A list with quotation marks. + name: quotes in list +1: +- demo_code: '{print} Hello welcome to Hedy!' + name: '{print}' + explanation: Print something with `{print}`. +- name: '{ask}' + demo_code: '{ask} What is your favorite color?' + explanation: Ask something with `{ask}`. +- demo_code: "{ask} What is your favorite color?\n{echo} so your favorite color is" + name: '{echo}' + explanation: Repeat something using `{echo}`. +- name: '{print} emojis' + demo_code: '{print} 🙋 🌍 ❗' + explanation: Print an emoji with `{print}`. +- demo_code: '{forward} 100' + explanation: Draw a line with `{forward}`. + name: '{forward}' +- demo_code: "{forward} 25\n{turn} {left}\n{forward} 25\n{turn} {right}" + explanation: Turn the drawing turtle with `{turn}`. + name: '{turn}' +15: +- demo_code: "answer = 0\n{while} answer != 25\n answer = {ask} 'What is 5 times 5?'\n{print} 'A correct answer has been given'" + explanation: We can use the `{while}` loop with not equal. + name: '{while}' +- name: Smaller {while} + demo_code: "count = 1\n{while} count < 3\n {print} 'We do this ' 3 - count ' more times'\n count = count + 1\n{print} 'We are done'" + explanation: We can also use the `{while}` loop with `<` and `>`. +6: +- demo_code: "{print} '5 times 5 is ' 5 * 5" + explanation: Print exactly using quotation marks. + name: '{print}' +- name: '{ask}' + demo_code: "answer = {ask} 'What is 10 plus 10?'\n{if} answer {is} 20 {print} 'Yes!' {else} {print} 'Oops'" + explanation: Ask for a calculation and check whether it is correct. +- name: '`{ask}` and `{if}` with turtle' + explanation: Ask the user how many angles they want. + demo_code: "angles = {ask} 'How many angles?'\nangle = 360 / angles\n{forward} 50" +10: +- name: '{print}' + demo_code: "{print} '5 times 5 is ' 5 * 5" + explanation: Print something. Remember to use a quotation mark for literal printing. +- explanation: Print all things in a list. + name: '{for} with a list' + demo_code: "animals {is} dog, cat, blobfish\n{for} animal {in} animals\n {print} 'I love ' animal" +11: +- demo_code: "{for} counter {in} {range} 1 {to} 5\n {print} counter" + explanation: We can use `{for}` with a `{range}`. + name: '{for} loop' +- name: '{ask}' + demo_code: "answer = {ask} 'What is 5 plus 5?'\n{if} answer {is} 10\n {print} 'Well done!'\n {print} 'Indeed, the answer was ' answer\n{else}\n {print} 'Oops!'\n {print} 'The answer is 10'" + explanation: Ask for the answer to a sum and check if it is correct. We can now print 2 lines. diff --git a/content/client-messages/kab.yaml b/content/client-messages/kab.yaml index 0967ef424bc..8ac6ad649ca 100644 --- a/content/client-messages/kab.yaml +++ b/content/client-messages/kab.yaml @@ -1 +1,25 @@ -{} +haunted: 🦇, 👻, 🎃 +turtle: 🐢 +Program_too_long: Your program takes too long to run. +Errors_found: You made a mistake! Don't worry, we still ran the program +ServerError: You wrote a program we weren't expecting. If you want to help, send us an email with the level and your program at hello@hedy.org. In the meantime, try something a little different and take another look at the examples. Thanks! +restaurant: 🍣, 🍕, 🍔 +Execute_error: Something went wrong while running the program. +CheckInternet: Check whether your Internet connection is working. +Transpile_success: +- Good job! +- Amazing! +- Well done! +- Excellent! +- You did great! +Program_repair: This could be the correct code, can you fix it? +Other_error: Oops! Maybe we made a little mistake. +Connection_error: We couldn't reach the server. +Transpile_warning: Warning! +Transpile_error: We can't run your program. +songs: 🎵,🎶 +Unsaved_Changes: You have an unsaved program. Do you want to leave without saving it? +rock: ✂️, 📜, 🗻 +dice: 🎲 +Empty_output: This code works but does not print anything. Add a print command to your code or use the turtle to get output. +fortune: 🔮, ✨ diff --git a/content/keywords/kab.yaml b/content/keywords/kab.yaml index 0967ef424bc..b9a45b848b4 100644 --- a/content/keywords/kab.yaml +++ b/content/keywords/kab.yaml @@ -1 +1,67 @@ -{} +is: is +in: in +input: input +'True': 'True' +define: define +turn: turn +if: if +d2: '2' +brown: brown +from: from +and: and +remove: remove +d7: '7' +'false': 'false' +d5: '5' +for: for +clear: clear +gray: gray +pink: pink +'False': 'False' +ask: ask +right: right +while: while +white: white +or: or +range: range +with: with +repeat: repeat +to: to +'true': 'true' +not_in: not in +d6: '6' +return: return +quote: "'" +at: at +times: times +forward: forward +orange: orange +d4: '4' +green: green +yellow: yellow +left: left +d1: '1' +elif: elif +red: red +random: random +black: black +print: print +call: call +d8: '8' +def: def +d9: '9' +pressed: pressed +play: play +to_list: to +d3: '3' +comma: ',' +add: add +echo: echo +length: length +else: else +d0: '0' +color: color +purple: purple +blue: blue +step: step +sleep: sleep diff --git a/content/parsons/kab.yaml b/content/parsons/kab.yaml index 0967ef424bc..efe255da183 100644 --- a/content/parsons/kab.yaml +++ b/content/parsons/kab.yaml @@ -1 +1,88 @@ -{} +levels: + 1: + 1: + code: "{print} Welcome to bakery Hedy!\n{ask} What type of pie do you want to order?\n{echo} So you want\n{print} Your order is being prepared!" + story: "Puzzels are exercises in which the lines of code are already written for you. You only have to place the lines in the correct order. Drag the lines of code into the input screen and run the code. Can you get the program to work?\n\nYou're a customer at bakery Hedy.\nYou walk into the bakery and are welcomed by the baker.\nHe asks what type of pie you want to order.\nThen he repeats your answer back to you.\nLastly, your order is being prepared." + 2: + code: "{print} This is DJ Hedy\n{ask} Are you ready to party?\n{ask} What song would you like to hear?\n{echo} Great choice! I love the song" + story: You're at the DJ Booth requesting a song. Create a program that asks if you are ready to party and then asks which song you would like to hear. + 5: + 2: + story: Create a maths game. + code: "{print} 'Solve this problem'\nanswer {is} {ask} '88 - 16 = ?'\n{if} answer {is} 72 {print} 'Correct!'\n{else} {print} 'Wrong! The answer was 72'" + 1: + story: "Make a program that checks if your favourite movie is already in the list of the computer.\nIf so, print that you have great taste, otherwise add the movie to the list." + code: "favorite_movies {is} Batman, Spiderman, The Avengers, Jurassic Park\nmovie {is} {ask} 'What is your favourite movie?'\n{if} movie {in} favorite_movies {print} 'You have great taste!'\n{else} {print} 'Such a shame that your favourite movie is not in the list, we will add it right away!'\n{add} movie {to_list} favorite_movies" + 6: + 2: + code: "{print} 'It is your birthday!'\npeople = {ask} 'How many people do you want to give a slice of cake?'\ncakes_amount = people/8\n{print} 'You will have to buy ' cakes_amount ' cakes'" + story: Create a program that helps you calculate how many cakes you should buy for your birthday party. + 1: + code: "age = {ask} 'How old are you?'\ndog_age = age * 7\ncat_age = age * 5\n{print} 'In dog years you are ' dog_age ' years old.'\n{print} 'In cat years you are ' cat_age ' years old.'" + story: "Make a program that calculates how old you are in dog and cat years.\nFirst ask the age of the user and start calculating.\nFirst calculate the dogyears then the catyears.\nShow the user the different ages." + 11: + 1: + code: "{for} number {in} {range} 10 {to} 1\n {print} number\n {sleep}\n {clear}\n{print} 'Happy New Year!'" + story: Create the count down clock for New Year's eve! The program should show the numbers from 10 to 1 for a second and then wish you a happy new year. + 2: + story: "Create a program that tells us the final results of the science fair. Firstly define the variable contestants, then the variable place.\n**Hint** Line 5 should be the sleep command, and you should end with saying congratulations." + code: "{print} 'And now we will reveal the results of the science fair'\ncontestants = Vivienne, Paul, Trixy, Bianca, Katya\nplace = 5\n{for} contestant {in} contestants\n {sleep} 2\n {print} 'On number ' place ' has ended... ' contestant\n place = place - 1\n{print} 'Congratulations!'" + 3: + 1: + story: "The new school year at Hogwarts is starting! \nIt is the job of the sorting hat to sort you into one of the houses.\nWhich house will you be sorted into? Are you a Gryffindor, Hufflepuff, Ravenclaw or Slytherin.\nBefore the sorting hat reveals your house, you can tell it to not pick one of the houses." + code: "{print} The sorting hat is ready to sort you into a Hogwarts house.\nhouses {is} Gryffindor, Hufflepuf, Ravenclaw, Slytherin\ndislike {is} {ask} Are there any houses you do not want to be part of?\n{remove} dislike {from} houses\n{print} Not dislike eh? Better be... houses {at} {random}" + 2: + story: Create a program that chooses a random meal for you. Make a list of food and a list of toppings and let the program decide what you'll have! + code: "food {is} pizza, icecream, salad, sandwich\ntoppings {is} chocolate, cheese, tuna, sprinkles\n{print} Your random meal for today is...\n{sleep} 2\n{print} food {at} {random} with toppings {at} {random}" + 3: + story: "In a chess tournament there are three players left.\nCreate a program that decides which two players have to play against each other first.\nStart by printing the two players who play the first match, then print against which player the winner will play." + code: "players {is} Liam, Noah, Sophie\nplayer_1 {is} players {at} {random}\n{remove} player_1 {from} players\nplayer_2 {is} players {at} {random}\n{print} player_1 ' first plays against ' player_2\n{remove} player_2 {from} players\n{print} 'The winner plays against ' players {at} {random}" + 10: + 2: + story: "This make-over robot will decide your new hairstyle for you. If you do not agree with the first choice, you can try again.\n**Mind** The variable people is defined in the first line. The variable hairstyles in the second." + code: "people = Betty, Amanda, Marc\nhairstyles = a bald head, a mohawk, a ponytail, spikes\n{for} person {in} people\n {print} person ' will get ' hairstyles {at} {random}\n happy = {ask} person ', are you happy with this choice?'\n {if} happy {is} yes\n {print} 'Great'\n {else}\n {print} 'Lets try again... Then 'person ' will get ' hairstyles {at} {random}" + 1: + story: "Help this family out by creating a schedule of who is cooking and what they should be making this week. The `{remove}` commands make sure nobody has to cook twice and they have a different dinner every day.\n**Mind!** the variable order should be first days, then people, and lastly dinner_options. This goes for the lines with the `{remove}` commands too." + code: "days = Monday, Tuesday, Wednesday, Thursday, Friday\npeople = mom, dad, Martin, Abby, Jesse\ndinner_options = pizza, tacos, pancakes, a salad, lasagne\n{for} day {in} days\n chosen_person = people {at} {random}\n chosen_dinner = dinner_options {at} {random}\n {print} 'On ' day ' ' chosen_person ' is making ' chosen_dinner\n {remove} chosen_person {from} people\n {remove} chosen_dinner {from} dinner_options" + 4: + 2: + story: Create a lottery that lets you choose an extra prize that you might win. + code: "prizes {is} car, hamster, 1 million euros\nprize {is} {ask} 'What would you like to win?'\n{add} prize {to_list} prizes\n{print} 'You won a ' prizes {at} {random}" + 1: + story: "You are the newest Pokémon trainer from Pallet Town!\nMake a program that selects your first Pokémon.\nLet the program wait a second before revealing your first Pokémon." + code: "pokemons {is} Pikachu, Charmander, Bulbasaur, Squirtle\n{print} 'This is going to be your first Pokémon!'\n{sleep}\n{print} pokemons {at} {random}" + 9: + 2: + story: "This code asks the costumers in a restaurant if they would like to order dessert. If they do, it asks them what kind of dessert. If they order tiramisu they are told that the tiramisu is sold out.\nCan you get the code to work?" + code: "order = {ask} 'Would you like to order dessert?'\n{if} order = yes\n dessert = {ask} 'What kind of dessert would you like?'\n {if} dessert = tiramisu\n {print} 'Sorry, we are out of tiramisu.'\n {else}\n {print} 'One ' dessert ' coming right up!'\n{else}\n {print} 'You dont want a dessert. No problem!'" + 1: + story: This game will give you three maths assignments. Each time the question is different. Can you figure out the order? + code: "numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n{repeat} 3 {times}\n number = numbers {at} {random}\n correct_answer = 5 * number\n answer = {ask} 'What is 5 times' number '?'\n {if} answer = correct_answer\n {print} 'Good job!'\n {else}\n {print} 'No! The correct answer is ' correct_answer" + 2: + 1: + story: "You and your friends are going to watch some Netflix.\nShow which movie you're about to watch and wish the viewers lot of fun!" + code: "{print} It is time for an evening of Netflix\nfilm {is} Sonic the Hedgehog 2\n{print} We're going to watch film\n{print} Have fun!" + 2: + story: This is the webshop of a toy store. Create a program where costumers can add an item to their shopping cart. + code: "{print} Welcome to our toystore\ntoy {is} {ask} What would you like to buy?\n{print} toy is added to your shopping cart.\n{print} Thank you for shopping with us!" + 7: + 1: + code: "{repeat} 3 {times} {print} 'Baby shark tututututudu'\n{print} 'Baby shark'\n{repeat} 3 {times} {print} 'Mommy shark tututututudu'\n{print} 'Mommy shark'\n{repeat} 3 {times} {print} 'Daddy shark tututututudu'\n{print} 'Daddy shark'" + story: Complete the baby shark song. First comes baby shark, then mommy and finally daddy shark. + 2: + code: "{print} 'the wheels on the bus go'\n{repeat} 3 {times} {print} 'round and round'\n{print} 'the wheels of the bus go round and round'\n{print} 'all through the town'" + story: Create the song 'The wheels on the bus go round and round' + 12: + 1: + code: "verses = 'What will we do with the drunken sailor', 'Way hey and up she rises'\n{for} verse {in} verses\n {for} count {in} {range} 1 {to} 3\n {print} verse\n {print} 'Early in the morning'" + story: "Sing the song 'What shall we do with the drunken sailor'. In case you don't know it, the song goed like this:\n\nWhat will we do with the drunken sailor\nWhat will we do with the drunken sailor\nWhat will we do with the drunken sailor\nEarly in the morning\nWay hey and up she rises\nWay hey and up she rises\nWay hey and up she rises\nEarly in the morning" + 2: + story: Play a game of Twister with us! First define the variable people, then limbs, then colors. + code: "people = 'Jess', 'Nick', 'Winston'\nlimbs = 'left hand', 'left foot', 'right hand', 'right foot'\ncolors = 'red', 'blue', 'green', 'yellow'\n{for} person {in} people\n {print} person ', put your ' limbs {at} {random} ' on ' colors {at} {random}" + 8: + 1: + story: "You and four other friends are playing Pokémon Go! Create a program that decides in which team each of you will play.\nEither red, yellow or blue! Take a little pause after announcing a team." + code: "teams = red, yellow, blue\n{print} 'Red, Yellow or Blue?'\n{repeat} 5 {times}\n {print} 'You are selected in team... '\n {print} teams {at} {random}\n {sleep} 2" + 2: + code: "counter = 11\n{repeat} 10 {times}\n counter = counter - 1\n {print} counter\n {sleep} 1\n{print} 'Ready or not here I come!'" + story: Print the countdown for a game of hide and seek. diff --git a/content/quizzes/kab.yaml b/content/quizzes/kab.yaml index 0967ef424bc..844f25a2dc9 100644 --- a/content/quizzes/kab.yaml +++ b/content/quizzes/kab.yaml @@ -1 +1,2543 @@ -{} +levels: + 13: + 5: + correct_answer: C + mp_choice_options: + - feedback: The prince is a little more picky than that! + option: Every person with shoe size 38 is this prince's one true love + - option: Every person named Cinderella is this prince's one true love + feedback: The prince is a little more picky than that! + - feedback: Fantastic! + option: Every person that is named Cinderella and has shoe size 38 is this prince's one true love + - feedback: The prince is a little more picky than that! + option: Every person that's not named Cinderella and does not have shoe size 38 is this prince's one true love + question_text: Which statement is true about this code? + code: "{if} name = 'Cinderella' {and} shoe_size = 38\n {print} 'You are my one true love!'" + hint: Both statements have to be true + question_score: '10' + 6: + mp_choice_options: + - option: Michael is a boy with glasses + feedback: Try again + - feedback: Try again + option: Marleen is a girl with glasses + - feedback: Try again + option: Wouter is a boy without glasses + - option: Sophie is a girl with glasses + feedback: Great job! + code: "{print} 'Let me guess which family member you are!'\nglasses = {ask} 'Do you wear glasses?'\nfemale = {ask} 'Are you female?'\n{if} glasses = 'yes' {and} female = 'yes'\n {print} 'You must be Sophie!'\n{if} glasses = 'no' {and} female = 'yes'\n {print} 'You must be Marleen!'\n{if} glasses = 'yes' {and} female = 'no'\n {print} 'You must be Wouter!'\n{if} glasses = 'no' {and} female = 'no'\n {print} 'You must be Michael!'" + question_text: Which statement about this code is true? + hint: Take a good look! Or do you need glasses? + correct_answer: D + question_score: '10' + 8: + question_text: What output do you get if you order popcorn but no drink? + mp_choice_options: + - feedback: You have paid too much! + option: "Welcome to the movie theater\nThat will be 8 dollars please\nEnjoy the movie" + - feedback: Amazing! + option: "Welcome to the movie theater\nThat will be 5 dollars please\nEnjoy the movie" + - feedback: That's not enough money! + option: "Welcome to the movie theater\nThat will be 3 dollars please\nEnjoy the movie" + - option: "Welcome to the movie theater\nOk\nEnjoy the movie" + feedback: You have to pay for your popcorn! + correct_answer: B + code: "{print} 'Welcome to the movie theater'\npopcorn = {ask} 'Would you like some popcorn?'\ndrink = {ask} 'Would you like a drink?'\n{if} popcorn = 'yes' {and} drink = 'yes'\n {print} 'That will be 8 dollars please'\n{if} popcorn = 'no' {and} drink = 'yes'\n {print} 'That will be 3 dollars please'\n{if} popcorn = 'yes' {and} drink = 'no'\n {print} 'That will be 5 dollars please'\n{if} popcorn = 'no' {and} drink = 'no'\n {print} 'Ok'\n{print} 'Enjoy the movie'" + hint: popcorn = yes and drink = no + question_score: '10' + 10: + question_text: Which command needs to be in line 8 at the place of the ??? ? + mp_choice_options: + - feedback: There are no items that are both the list of snacks and the list of drinks + option: '`{and}`' + - feedback: Great job! + option: '`{or}`' + - option: '`{in}`' + feedback: No + - feedback: No + option: '`{if}`' + question_score: '10' + code: "{print} 'Welcome to the product finder of this supermarkt'\nitem = {ask} 'What product are you looking for?'\nbakery = 'bread', 'buns', 'muffins'\ndrinks = 'soda', 'water', 'lemonade'\nsnacks = 'chips', 'nuts', 'dips'\nfrozen = 'fries', 'icecream', 'pizza'\nfruit = 'bananas', 'apples', 'oranges'\n{if} item {in} snacks ??? item {in} drinks\n {print} 'This item is in aisle 3'\n{if} item {in} bakery {or} item {in} bakery\n {print} 'This item in in the back of the store'\n{if} item {in} fruit\n {print} 'The fruit is sold near the register'" + correct_answer: B + hint: The item is either in the list of snacks, or in the list of drinks + 1: + mp_choice_options: + - option: "```\n{if} birthday {and} song = 'yes'\n```" + feedback: Almost there + - feedback: Hedy only sings for you if you like to hear a song + option: "```\n{if} birthday = 'yes' {and} name = 'Hedy'\n```" + - option: "```\n{if} song = 'yes' {and} birthday = 'yes'\n```" + feedback: Super! + - feedback: Hedy only sings if both answers are yes + option: "```\n{if} song = 'yes' {or} birthday = 'yes'\n```" + correct_answer: C + question_text: Which code should be filled in at the ??? ? + code: "name = {ask} 'What is your name?'\nsong = {ask} 'Whould you like to hear a song?'\nbirthday = {ask} 'Is today your birthday?'\n???\n {print} 'Happy Birthday to you!'\n {print} 'Happy Birthday to you!'\n {print} 'Happy Birthday dear ' name\n {print} 'Happy Birthday to you!'" + question_score: '10' + hint: Hedy sings if you want to hear a song and it's you birthday + 7: + mp_choice_options: + - option: The grey cat is called Abby + feedback: This is true! + - option: Milo the orange cat eats 4 scoops of cat nibbles + feedback: This is true + - feedback: Great job! + option: The black hamster needs to be fed a piece of carrot + - option: The yellow bird was fed this morning + feedback: This is true + question_text: Which statement is false? + hint: Read the last 4 lines carefully + question_score: '10' + correct_answer: C + code: "{print} 'Thank you for helping me take care of my pets'\n{print} 'Here is a program to help feed them'\nanimal = {ask} 'What kind of animal are they?'\ncolor = {ask} 'What colour are they?'\n{if} animal = 'cat' {and} color = 'grey'\n {print} 'That is Abby. She eats 3 scoops of cat nibbles'\n{if} animal = 'cat' {and} color = 'orange'\n {print} 'That is Milo. He eats 4 scoops of cat nibbles'\n{if} animal = 'bird' {or} color = 'black'\n {print} 'I fed them this moring! They do not need more food today'\n{if} animal = 'hamster' {and} color = 'brown'\n {print} 'You can feed them a piece of carrot'" + 3: + question_text: Which output is given to a member without a discount code? + mp_choice_options: + - option: You get a free apple pie! + feedback: Great job! + - option: That will be 5 dollars please + feedback: That is not true + - option: This code won't work, so there is no output + feedback: There is nothing wrong with the code + - feedback: There is! Read the question carefully + option: There is no way of knowing + code: "member = {ask} 'Do you have a membership card?'\ndiscount = {ask} 'Do you have a discount code?'\n{if} member = 'yes' {or} discount = 'yes'\n {print} 'You get a free apple pie!'\n{else}\n {print} 'That will be 5 dollars please'" + hint: Mind the command `{or}` in line 3 + correct_answer: A + question_score: '10' + 4: + mp_choice_options: + - option: "```\n{print} 'you win'\n```" + feedback: You win! + - feedback: You lose! + option: "```\n{print} 'you lose'\n```" + - option: "```\n{print} 'tie'\n```" + feedback: It's only a tie if both choices are the same + - option: "```\n{print} 'try again'\n```" + feedback: Try again! + code: "{if} computer_choice {is} 'rock' {and} your_choice {is} 'paper'" + question_text: Which line of code should follow this line in rock-paper-scissors game? + correct_answer: A + question_score: '10' + hint: Paper beats rock + 9: + mp_choice_options: + - option: "Line 3 should be:\n```\n{if} chocolate = 'yes' {and} sprinkles = 'yes'\n```" + feedback: Correct! + - option: "Line 3 should be: \n```\n{if} chocolate = 'no' {and} sprinkles = 'no'\n```" + feedback: This is not what I ordered! + - option: "Line 5 should be: \n```\n{if} chocolate = 'yes' {and} sprinkles = 'yes'\n```" + feedback: This is not what I ordered! + - option: "Line 7 should be:\n```\n{if} chocolate = 'yes' {and} sprinkles = 'no'\n```" + feedback: This is not what I ordered! + question_score: '10' + question_text: What is wrong with this code? + code: "1 chocolate = {ask} 'Would you like chocolate sauce on your ice cream?'\n2 sprinkles = {ask} 'Would you like sprinkles on your ice cream?'\n3 {if} chocolate {and} sprinkles = 'yes'\n4 {print} 'Ice cream with chocolate sauce and sprinkles, coming up!'\n5 {if} chocolate = 'yes' {and} sprinkles = 'no'\n6 {print} 'Ice cream with chocolate sauce, coming up!'\n7 {if} chocolate = 'no' {and} sprinkles = 'yes'\n8 {print} 'Ice cream with sprinkles, coming up'\n9 {if} chocolate = 'no' {and} sprinkles = 'no'\n10 {print} 'Just plain icecream, coming up!'" + correct_answer: A + hint: There is a mistake in line 3 + 2: + mp_choice_options: + - option: '`{and}`' + feedback: You don't have to be vegan and muslim + - feedback: Great thinking! + option: '`{or}`' + - feedback: No + option: '`+`' + - feedback: No + option: '`{print}`' + hint: Neither vegans nor muslims can eat sausage rolls. + correct_answer: B + code: "menu = 'cheese', 'sausage rolls', 'cookies'\ndiet = {ask} 'Do you have any dietary restrictions?'\n{if} diet = 'vegan' ??? diet = 'halal'\n {remove} 'sausage rolls' {from} menu" + question_text: Which command is missing in the code at the place of the ??? ? + question_score: '10' + 14: + 1: + mp_choice_options: + - feedback: This is not a symbol. + option: '`=>`' + - option: '`==`' + feedback: We are not comparing anything, just asking. + - option: '`!=`' + feedback: We are not comparing anything, just asking + - feedback: Right! + option: '`=`' + code: "name _ {ask} 'Who are you?'\n{if} name == 'Hedy'\n {print} 'Me too!'" + hint: We are not comparing anything, we are just asking a name. + question_text: Which symbol should be used on the blank? + question_score: '10' + correct_answer: D + 2: + correct_answer: C + mp_choice_options: + - feedback: No + option: '{if} name = Hedy' + - option: '{if} age = 24' + feedback: No + - option: answer = {ask} 'What is your answer' + feedback: Yes! + - feedback: No + option: answer == {ask} 'How are you doing?' + question_score: '10' + hint: When you are comparing two answers you should use == + question_text: Which of these codes has used the correct = or == symbol? + 4: + mp_choice_options: + - option: In line 1 == should be used instead of = + feedback: No that's not it + - option: Line 2 misses quotation marks + feedback: You are correct + - feedback: No that's not it + option: In line 4 = should have been used instead of == + - option: In line 4 <= should have been used instead of >= + feedback: No that's not it + hint: The symbols are right + code: "price = 10\nmoney = {ask} How much money do you have?\nbuy = {ask} 'Would you like to buy this teddy bear?'\n{if} money >= price {and} buy == 'yes'\n {print} 'You can buy the bear!'\n{else}\n {print} 'You cannot buy this bear!'" + question_text: What's wrong with this code? + correct_answer: B + question_score: '10' + 6: + mp_choice_options: + - feedback: It stops after 2 times + option: 10 times + - option: 0 times + feedback: It stops after 2 times + - option: 1 time + feedback: It stops after 2 times + - feedback: That is correct + option: 2 times + question_score: '10' + correct_answer: D + question_text: How many times do you have to say you are annoyed before this annoying game stops? + code: "lives = 2\n{repeat} 10 {times}\n {if} lives != 0\n answer = {ask} 'Are you annoyed yet?'\n {if} answer == 'yes'\n lives = lives - 1" + hint: "!= means 'is not'" + 7: + mp_choice_options: + - feedback: That's not quite right. + option: "`'Lower'` and `'Higher'` and `'You win!'`" + - option: "`'Higher'` and `'Lower'` and `'You win!'`" + feedback: You win! + - option: "`'You win!'` and `'Lower!'` and `'Higher'`" + feedback: That's not quite right. + - option: "`'Lower!'` and `'You win!'` and `'Higher!'`" + feedback: That's not quite right. + correct_answer: B + hint: The last one should say you win. + question_text: What should be filled in on the three blanks? + question_score: '10' + code: "{print} 'Guess which number'\nnumbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\nnumber = numbers {at} {random}\ngame = 'on'\n{for} i {in} {range} 1 {to} 10\n {if} game == 'on'\n guess = {ask} 'Which number do you think it is?'\n {if} guess < number\n {print} _\n {if} guess > number\n {print} _\n {if} guess == number\n {print} _\n game = 'over'" + 8: + question_score: '10' + mp_choice_options: + - feedback: True! + option: You must be taller than 120 cm to go on the roller coaster + - feedback: If you are 120 cm you won't get in + option: You must be taller than 119 cm to go on the roller coaster + - feedback: '> means greater than' + option: You must be shorter than 120 cm to go on the roller coaster + - option: There are no length restrictions to go on the roller coaster + feedback: There are. + correct_answer: A + question_text: Which statement is true about this roller coaster? + hint: '> means greater than' + code: "length = {ask} 'Please fill in your length in cm'\n{if} length < 120\n {print} 'Sorry, you cannot go on this roller coaster.'\n{else}\n {print} 'Enjoy the ride'" + 5: + mp_choice_options: + - feedback: 12 year olds are allowed too + option: '`> 12`' + - feedback: Great! + option: '`>= 12`' + - option: '`< 12`' + feedback: These kids are too young! + - feedback: These kids are too young + option: '`<= 12`' + hint: '> means greater than' + code: "age = {ask} 'How old are you?'\nticket = {ask} 'Do you have a ticket?'\n{if} age _ {and} ticket == 'yes'\n {print} 'You can enter the movie theater.'\n{else}\n {print} 'You are not allowed to come in!'" + question_score: '10' + question_text: Which symbol should be filled in on the blanks if the movie is suitable for kids for the age of 12 and up? + correct_answer: B + 10: + correct_answer: B + mp_choice_options: + - feedback: Look at who has the highest score! + option: "'player 1 wins'" + - option: "'player 2 wins'" + feedback: Yes! + - option: "'player 2 loses'" + feedback: Look at who has the highest score! + - feedback: No it's not, one player has a higher score + option: "'It is a tie'" + hint: You win the game by having the most points + code: "{print} 'Whoever gets the most points wins!'\n{if} points_player_1 < points_player_2\n {print} _" + question_text: What should be filled in in the blanks? + question_score: '10' + 9: + mp_choice_options: + - option: 1 or more + feedback: No + - option: 2 or more + feedback: No + - option: 8 or more + feedback: Almost + - feedback: Great! + option: 9 or more + code: "chocolate = {ask} 'How many pieces of chocolate have you eaten?'\n {if} chocolate <= 2\n {print} 'That is a healthy amount'\n {if} chocolate > 2 {and} chocolate =< 8\n {print} 'That is a bit much'\n {if} chocolate > 8\n {print} 'You will get a stomach ache!'" + hint: '> 8 means more than 8' + question_text: How many pieces of chocolate will give you a stomach ache according to this fitbit? + question_score: '10' + correct_answer: D + 3: + question_score: '10' + mp_choice_options: + - option: '`>` and `<`' + feedback: That's not it + - option: '`=` and `>=`' + feedback: That's not it + - option: '`<` and `>=`' + feedback: You are right + - option: '`+` and `==`' + feedback: That's not it + correct_answer: C + code: "guests = {ask} 'How many people are at the party?'\n{if} guests _ 130\n {print} 'You can come in!'\n{if} guests _ 130\n {print} 'Im sorry, the club is full. '\n {print} 'You have to wait for a guest to leave'" + hint: There are 130 people allowed in the club + question_text: Which symbols should be filled in on the two blanks? + 15: + 2: + question_score: '10' + mp_choice_options: + - feedback: No + option: "```\n{while} name = Hedy\n```" + - option: "```\n{while} age = 24\n```" + feedback: No + - feedback: Yes! + option: "```\n{while} time > 0\n```" + - option: "```\n{while} answer == yes'\n```" + feedback: A quotation mark is missing + question_text: Which of these codes has used the correct symbol(s)? + hint: When you are comparing two answers you should use == + correct_answer: C + 5: + question_text: What should be placed on the blank to make this program work correctly? + hint: wetness should get less each time + mp_choice_options: + - option: "```\n = wetness\n```" + feedback: That will not change anything + - feedback: You can't have two times = in one line + option: "```\n = wetness = 1\n```" + - option: "```\n = wetness - 1\n```" + feedback: You are correct! + - feedback: The program should count down + option: "```\n = wetness + 1\n```" + correct_answer: C + question_score: '10' + code: "wetness = 10\n{while} wetness != 0\n {print} 'Your hair is still wet, hair dryer on!'\n {sleep} 1\n {clear}\n wetness _\n\n{print} 'All dry!'" + 7: + mp_choice_options: + - option: '... change the first `{if}` into a `{while}`' + feedback: Perfect! + - feedback: That's not quite right. + option: '... change the second `{if}` into a `{while}`' + - feedback: That's not quite right. + option: '... change the third `{if}` into a `{while}`' + - feedback: That's not quite right. + option: '... change the fourth `{if}` into a `{while}`' + question_score: '10' + hint: The last one should say you win. + correct_answer: A + question_text: How should this program be changed so that it works? + code: "{print} 'Guess which number'\nnumbers = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\nnumber = numbers {at} {random}\ngame = 'on'\n{if} game == 'on'\n guess = {ask} 'Which number do you think it is?'\n {if} guess < number\n {print} _\n {if} guess > number\n {print} _\n {if} guess == number\n {print} _\n game = 'over'" + 8: + code: "{while} toilet == 'occupied'\n lights = 'on'\n air_freshener_sprays = 'yes'\n {sleep} 60\nlights = 'off'\nair_freshener_sprays = 'no'" + question_score: '10' + mp_choice_options: + - option: The lights and air freshener will turn off after 1 minute + feedback: False! + - option: The air freshener sprays once every minute and the lights stay on the whole time while you are on the toilet + feedback: Great job + - option: The air freshener sprays once you leave the toilet. + feedback: It only sprays when you're in there. + - feedback: That wouldn't be right. + option: The lights will always stay on. + hint: The block after the {while} command keeps happening while the toilet is occupied. + correct_answer: B + question_text: Which statement is true about this automated toilet system? + 10: + question_score: '10' + hint: You win the game by having the most points. Your name should appear on the screen + correct_answer: A + mp_choice_options: + - option: "```\n name_player_1\n```" + feedback: You are right! + - feedback: No they are losing! + option: "```\n name_player_2\n```" + - feedback: You should fill in a name, not a number + option: "```\n points_player_1\n```" + - feedback: You should fill in a name, not a number + option: "```\n points_player_2\n```" + question_text: 'What should be filled in in the blanks? Tip: the player with the most points is in the lead.' + code: "name_player_1 = {ask} 'Name player 1:'\nname_player_2 = {ask} 'Name player 2:'\n{while} points_player_1 > points_player_2\n {print} _ ' is in the lead right now!'" + 9: + mp_choice_options: + - feedback: No + option: Nothing. 1600 is not programmed into the app. + - feedback: No + option: You could eat some more + - option: That is alright + feedback: Yes! + - option: You have eaten enough for today + feedback: No + hint: 1600 is between 1000 and 2000 + question_score: '10' + correct_answer: C + code: "calories = {ask} 'How many calories have you eaten today?'\n {while} calories <= 1000\n {print} 'You could eat some more'\n {while} calories > 1000 {and} calories =< 2000\n {print} 'That is alright'\n {while} calories > 2000\n {print} 'You have had enough for today'" + question_text: What will the diet app say if you have eaten 1600 calories today? + 1: + mp_choice_options: + - feedback: That is not right. + option: '`=!`' + - option: '`==`' + feedback: You don't have to keep guessing if you've given the right answer. + - feedback: Correct + option: '`!=`' + - feedback: That's not it + option: '`=`' + correct_answer: C + hint: Keep guessing until you say Amsterdam + question_score: '10' + code: "answer = 0\n{while} answer _ 'Amsterdam'\n answer = {ask} 'What is the capital city of the Netherlands?'\n{print} 'You have given the correct answer'" + question_text: 'Which symbol should be used on the blank? Tip: You must keep guessing until you get it right.' + 4: + question_text: What's wrong with this code? + mp_choice_options: + - option: In line 1 `==` should be used instead of `=` + feedback: No that's not it + - option: Line 2 misses quotation marks + feedback: That's not right + - feedback: That's not it + option: In line 5 `{if}` should have been used instead of `{while}` + - feedback: You are correct + option: In line 5 `!=` should have been used instead of `==` + code: "options = 1, 2, 3, 4, 5, 6\n{print} 'Throw 6 as fast as you can!'\nthrown = 0\ntries = 0\n{while} thrown == 6\n thrown = options {at} {random}\n {print} 'You threw ' thrown\n tries = tries + 1\n{print} 'Yes! You have thrown 6 in ' tries ' tries.'" + hint: There is something wrong in line 5 + question_score: '10' + correct_answer: D + 3: + code: "_ age < 18\n {print} 'you are not allowed in this bar'" + mp_choice_options: + - option: '`{in}`' + feedback: That's not it + - option: '`{while}`' + feedback: You are right + - option: '`{for}`' + feedback: That's not it + - option: '`{range}`' + feedback: That's not it + question_score: '10' + question_text: Which command should be filled in on the blank? + correct_answer: B + hint: You are not allowed in the bar as long as you are 17 or younger + 6: + mp_choice_options: + - option: '`{while}` should be`{if}`' + feedback: No that is not right + - feedback: No that is not right + option: '`{if}` should be `{while}`' + - option: Line 3 should start with more indentation + feedback: No that's not right + - feedback: That is correct + option: Line 2 should start with less indentation + hint: Look closely at the indentation + correct_answer: D + question_text: What is wrong with this code? + question_score: '10' + code: "lives = 100\n {while} lives != 0\n answer = {ask} 'Are you annoyed yet?'\n {if} answer == 'yes'\n lives = lives - 1" + 16: + 2: + mp_choice_options: + - feedback: Mind the spacing. + option: "```\nfriends[i] has to do chores [i]\n```" + - option: "```\nfriends[1] has to do chores[1]\n```" + feedback: It will print 3 times that Wesley has to do the cooking + - feedback: The person has to do the chore, not the other way around + option: "```\nchores[i] ' has to do ' friends[random]\n```" + - option: "```\nfriends[i] ' has to do ' chores[i]\n```" + feedback: Fantastic! + code: "friends = ['Wesley', 'Eric', 'Kaylee']\nchores = ['the cooking', 'the cleaning', 'nothing']\n{for} i {in} {range} 1 {to} 3\n {print} _" + question_text: What should be filled in on the blanks if you want a list of what chores are done by whom? + hint: '`i` tells us what item in the list it is. So friend 1 does chore 1 etc.' + correct_answer: D + question_score: '10' + 3: + correct_answer: A + code: "friends = ['Wesley', 'Eric', 'Kaylee']\nchore = ['the cooking', 'the cleaning', 'nothing']\n{for} i {in} {range} 1 {to} 3\n {print} friends[i] has to do chores[i]" + mp_choice_options: + - feedback: Super! + option: "```\nWesley has to do the cooking\nEric has to do the cleaning\nKaylee has to do nothing\n```" + - option: "```\nKaylee has to do the cooking\nWesley has to do the cleaning\nEric has to do nothing\n```" + feedback: No, it is not random. + - feedback: Poor Wesley! + option: "```\nWesley has to do the cooking\nWesley has to do the cleaning\nWesley has to do the nothing\n```" + - feedback: That's not it + option: "```\nWesley has to do the cooking\nWesley has to do the cooking\nWesley has to do the cooking\n```" + hint: It's not random... + question_score: '10' + question_text: What is a possible output for this program? + 6: + mp_choice_options: + - option: You are not allowed to use the variable o. It should be named i. + feedback: i is the most commonly used variable name in this case, but it's not mandatory to use i. + - feedback: No, he likes minecraft. + option: The output will say that Jaylino likes fortnite. + - feedback: Correct + option: The output will say that Ryan likes fifa + - option: This code will not work. It will give and error. + feedback: No, the code is correct. + question_score: '10' + correct_answer: C + code: "people = ['Chris', 'Jaylino', 'Ryan']\ngames = ['fortnite', 'minecraft', 'fifa']\n{for} o {in} {range} 1 {to} 3\n {print} people[o] ' likes ' games[o]" + hint: There is nothing wrong with this code. + question_text: Which statement is true? + 8: + mp_choice_options: + - feedback: This is not right + option: "```\nteams = ['Macy and Kate', 'Lionell and Raj', 'Kim and Leroy']\nposition = ['first', 'second', 'third']\n{for} i {in} {range} 0 {to} 3\n{print} teams[random] ' get to go ' position[i]\n```" + - option: "```\nteams = ['Macy and Kate', 'Lionell and Raj', 'Kim and Leroy']\nposition = ['first', 'second', 'third']\n{for} i {in} {range} 1 {to} 3\n {print} teams[i] ' get to go ' position[i]\n```" + feedback: Amazing! + - feedback: This is not it. + option: "```\nteams = ['Macy', 'Kate', 'Lionell', 'Raj', 'Kim', 'Leroy']\nposition = ['first', 'second', 'third']\n{for} i {in} {range} 1 {to} 6\n {print} teams[random] ' get to go ' position[random]\n```" + - option: "```\nteams = ['Macy and Kate' 'Lionell and Raj' 'Kim and Leroy']\nposition = ['first' 'second' 'third']\n{for} teams {in} {range} 0 {to} 3\n {print} teams[i] ' get to go ' position[i]\n```" + feedback: This is not going to work! + question_score: '10' + correct_answer: B + code: "Macy and Kate get to go first\nLionell and Raj get to go second\nKim and Leroy get to go third" + hint: If you look carefully at the first line, you'll see that only the first two answers are possibly correct. + question_text: Which of these codes belongs to this output? + 9: + question_score: '10' + code: "countries = ['Canada', 'Zimbabwe', 'New Zealand']\n{for} i {in} {range} 0 {to} 1\n {print} 'I will travel to ' countries[random]" + mp_choice_options: + - option: "```\nI will travel to Canada\nI will travel to Canada\n```" + feedback: Great job! + - feedback: It will be repeated twice + option: "```\nI will travel to Canada\n```" + - feedback: This is not it. + option: "```\nI will travel to Canada, Zimbabwe and New Zealand\n```" + - feedback: It's only repeated twice + option: "```\nI will travel to Canada\nI will travel to Zimbabwe\nI will travel to New Zealand\n```" + hint: Range 0 to 1 is 2 times + question_text: What is a possible output for this code? + correct_answer: A + 7: + mp_choice_options: + - feedback: That is not right. + option: Line 1 needs less quotation marks + - feedback: It should not! + option: Line 3 should start with indentation + - feedback: It should not + option: Line 4 should start without indentation + - feedback: Amazing! + option: Line 4 needs more quotation marks. + question_text: What's wrong with this code? + correct_answer: D + code: "people = ['Savi', 'Senna', 'Fayenne']\ntransportation = ['bike', 'train', 'car']\n{for} i {in} {range} 1 {to} 3\n {print} people[i] goes to school by transportation[i]" + hint: There is a mistake made in the usage of quotation marks. + question_score: '10' + 10: + mp_choice_options: + - feedback: Almost there... but adding the winner to the list makes this raffle unfair + option: "```\nchosen_number = list_of_numbers at random\nprint books[i] ' will go to person number ' chosen_number\n{add} chosen_number {to} list_of_numbers\n```" + - option: "```\nprint person[i] ' wins ' book[i]\n```" + feedback: There is no list called 'person' + - feedback: This is not it. + option: "```\nchosen_number = list_of_numbers[people]\nprint books[people] ' will go to person number ' chosen_number\n{remove} chosen_number {from} list_of_numbers\n```" + - option: "```\nchosen_number = list_of_numbers[random]\nprint books[i] ' will go to person number ' chosen_number\n{remove} chosen_number {from} list_of_numbers\n```" + feedback: Fantastic! + hint: You need to use the {remove} command + correct_answer: D + code: "{print} 'The book raffle will start soon'\n{print} 'Get your tickets now!'\nbooks = ['Narnia', 'The Hobbit', 'Oliver Twist', 'Harry Potter', 'Green eggs and ham']\npeople = {ask} 'How many raffle tickets are sold?'\nlist_of_numbers = [1, 2]\n{for} i {in} {range} 3 {to} people\n {add} i {to} list_of_numbers\n{for} i {in} {range} 1 {to} 5" + question_text: Which 3 lines will complete this code correctly? + question_score: '10' + 5: + mp_choice_options: + - option: "```\n noises = ['moo', 'woof', 'neigh']\n```" + feedback: Mind the variable name and the order of the sounds. + - feedback: Look at line one to see how brackets are supposed to be used. + option: "```\n sounds = '[woof], [moo], [neigh]'\n```" + - feedback: Don't forget the quotation marks! + option: "```\n sounds = [woof, moo, neigh]\n```" + - feedback: Great job! + option: "```\n sounds = ['woof', 'moo', 'neigh']\n```" + hint: Look at line 1 to see proper use of brackets and quotation marks. + question_score: '10' + question_text: Which line should be filled in in the blank? + correct_answer: D + code: "animals = ['dog', 'cow', 'horse']\n_\n{for} i {in} {range} 1 {to} 3\n {print} 'the ' animals[i] ' says ' sounds[i]" + 4: + mp_choice_options: + - option: The variable in line 4 should be `friend[i]`, not `friends[i]` + feedback: That is not right. + - option: Line 3 should say `in range 1 to 3` not `in range 0 to 3` + feedback: Good catch! + - feedback: It's not a variable, it's just text. + option: Line 4 should say 'lucky_number', not 'lucky number + - feedback: That's not it + option: '{in} in line 3 should be removed' + correct_answer: B + hint: There's nothing wrong with line 4 + code: "friends = ['Jaylee', 'Erin', 'Fay']\nlucky_numbers = [15, 18, 6]\n{for} i {in} {range} 0 {to} 3\n print 'the lucky number of ' friends[i]\n print 'is ' lucky_numbers[i]" + question_score: '10' + question_text: What is wrong with this code? + 1: + mp_choice_options: + - feedback: This is the old way. + option: '`snacks {at} {random}`' + - option: '`[{random} snack]`' + feedback: The order is wrong. + - option: '`snacks[{random}]`' + feedback: Correct + - option: '`snacks[{at} {random}]`' + feedback: We do not need `at`anymore + code: "snacks = nachos, chips, cucumber, sweets\n{print} _" + question_score: '10' + correct_answer: C + hint: We no longer use {at} + question_text: Which command should be filled in on the blanks to print a random snack? + 17: + 5: + question_score: '10' + mp_choice_options: + - option: "```\n7\nanother number\nanother number\nanother number\nanother number\n71\n79\n97\n```" + feedback: Well done! + - option: "```\nanother number\n19\n29\n41\n53\n71\n79\n97\n```" + feedback: Try again. + - option: "```\n7\n19\n29\n41\n53\n71\n79\nanother number\n```" + feedback: One more try. + - option: "```\n7\n19\n29\n41\n53\n71\n79\n97\n```" + feedback: That is not it. + code: "numbers = [7, 19, 29, 41, 53, 71, 79, 97]\n{for} prime in numbers:\n {if} prime <= 10:\n {print} prime\n {elif} prime >= 60:\n {print} prime\n {elif} prime >= 90:\n {print} prime\n {else}:\n {print} 'another number'" + question_text: What is the output of this code? + hint: Think about how many times you need repeating and the values of if and elif. + correct_answer: A + 6: + mp_choice_options: + - feedback: Try again. + option: '`{elif}` is missing.' + - option: '`{else}` can only be used once.' + feedback: From now on we can use elif multiple times. + - option: Nothing! + feedback: There is a mistake. Look carefully! + - feedback: Amazing! + option: There is an indentation mistake in the last line. + correct_answer: D + code: "name = {ask} 'What is your name?'\n{if} name == 'Hedy':\n password = {ask} 'What is your password?'\n {if} password =='turtle123':\n {print} 'Yey'\n {else}:\n {print} 'Access denied'\n{else}:\n {print} 'Go fish'" + hint: There is a mistake somewhere... + question_score: '10' + question_text: What is wrong with code? + 9: + mp_choice_options: + - feedback: Try again! + option: "```\n {for} number in range -5 to 3:\n {if} number > 0: \n {print} number ' is positive'\n {elif} number < 0: \n {print} number ' is negative' \n {else}: \n {print} number ' is zero'\n```" + - feedback: That is not it. + option: "```\n {for} number in range -5 to 3:\n {if} number > 0: \n {print} number ' is positive'\n {elif} number <= 0: \n {print} number ' is negative' \n {else}: \n {print} number ' is zero'\n```" + - option: "```\n {for} number in range -5 to 3:\n {if} number >= 0: \n {print} number ' is positive'\n {elif} number < 0: \n {print} number ' is negative' \n {else}: \n {print} number ' is zero'\n```" + feedback: Very good! + - option: "```\n {for} number in range -5 to 3:\n {if} number < 0: \n {print} number ' is positive'\n {elif} number <=0: \n {print} number ' is negative' \n {else}: \n {print} number ' is zero'\n```" + feedback: That is not it. + correct_answer: C + question_text: Which one of the codes below gave this output? + code: "-5 is negative\n-4 is negative\n-3 is negative\n-2 is negative\n-1 is negative\n0 is positive\n1 is positive\n2 is positive\n3 is positive" + hint: Read the code carefully. + question_score: '10' + 10: + question_text: What is wrong with this code? + mp_choice_options: + - feedback: Try again. + option: The word num needs quotation marks. + - feedback: Not true. + option: The `{if}` command is not used correctly. + - option: Line 3 should be `volume_room = number * number * number`. + feedback: Well done! + - option: There is an indentation mistake in the last line. + feedback: Nope. + question_score: '10' + hint: Read the code carefully. + code: "{for} number in range 1 to 5:\n volume_room = num * num * num\n {print} volume_room ' cubic meters'\n {if} volume_room > 100:\n {print} 'this is a large room'\n {elif} volume_room < 100:\n {print} 'small room but cosy'\n {else}:\n {print} 'i will look for something else'" + correct_answer: C + 3: + hint: Think about how many times you need repeating. + mp_choice_options: + - option: "```\n🦔\n🦔\n🦔\n```" + feedback: Try again. + - feedback: One more try. + option: "```\n🦔\n🦔\n```" + - option: "```\n🦔\n🦔\n🦔\n🦔\n🦔\n🦔\n```" + feedback: Well done! + - feedback: That is not it. + option: "```\n🦔\n🦔\n🦔\n🦔\n🦔\n```" + code: "{for} x in range 1 to 3:\n {for} y in range 1 to 2:\n {print} 🦔" + correct_answer: C + question_score: '10' + question_text: How many hedgehogs will this code print? + 8: + hint: Read the code carefully. + mp_choice_options: + - option: '`{or}` cannot be used with `{if}`.' + feedback: Try again. + - option: In the `{for}` command `insect` should be `insects`. + feedback: Not true. + - feedback: Well done! + option: Nothing! + - option: There is an indentation mistake in the last line. + feedback: Nope. + question_score: '10' + question_text: What is wrong with code? + correct_answer: C + code: "insects = ['🐝', '🦋', '🕷', '🐞']\nyour_favorite = {ask} 'what is your favorite insect?'\n{for} insect in insects:\n {if} your_favorite == '🐝' {or} your_favorite == '🐞':\n {print} 'very useful'\n {elif} your_favorite == '🕷':\n {print} 'it can catch mosquitoes'\n {else}:\n {print} 'almost all insects can be useful one way or another'" + 4: + correct_answer: D + mp_choice_options: + - feedback: Try again. + option: The first `{elif}` should be used before the `print` command + - feedback: From now on we can use elif multiple times. + option: '`{elif}` can only be used once' + - feedback: Not correct. + option: '`==` used with `{elif}` should be replaced by `=`' + - feedback: Great! + option: '`{elif}` in the last line should be replaced by `{else}`' + question_text: What is wrong with code? + code: "name_color = {ask} 'What is your favorite color?'\n{if} name_color == 'red':\n {print} 'the color of a tomato'\n{elif} name_color == 'green':\n {print} 'the color of an apple'\n{elif} name_color == 'blue':\n {print} 'the color of a blueberry'\n{elif} name_color == 'yellow':\n {print} 'the color of a banana'\n{elif}:\n {print} 'this fruit-color does not exist'" + question_score: '10' + hint: Think about `{if}`, `{elif}`, `{else}`. + 2: + correct_answer: D + hint: Read the code carefully. + mp_choice_options: + - feedback: This is not it. + option: You cannot have so many variables. + - feedback: Not true! + option: The way the variables are multiplied is incorrect. + - feedback: Keep looking for the mistake. + option: One of the variables `noleap_year` does not belong with the `{if}` statement. + - option: The `noleap_year` has to be identical in both cases. + feedback: Correct! + code: "seconds_minute = 60\nminute_hour = 60\nhour_day = 24\nleap_year = 366\nno_leap_year = 365\nyears = ask 'what year is it?'\n{if} years = 2024:\n print seconds_minute * minute_hour * hour_day * leap_year\n{else}:\n print seconds_minute * minute_hour * hour_day * noleap_year" + question_text: What is wrong with this code? + question_score: '10' + 7: + question_score: '10' + mp_choice_options: + - feedback: Try again! + option: "```\n numbers = [1, 2 , 3, 4, 5]\n {for} n in numbers:\n result = n * 1\n {print} 'The result is ' result\n```" + - option: "```\nnumbers = [1, 2, 3, 4, 5]\n {for} u in numbers:\n number = u\n {print} 'The result is ' number\n```" + feedback: That is not it. + - option: "```\nnumbers = [1, 2, 3, 4, 5]\n {for} number in numbers:\n number = 3\n {print} 'The result is ' number\n```" + feedback: Very good! + - option: "```\nnumbers = [1, 2 , 3, 4, 5]\n {for} n in numbers:\n n = result\n {print} 'The result is ' result\n```" + feedback: That is not it. + hint: Think about mathematical symbols. + question_text: Which of the following codes will print five times 'the result is 3' on the screen? + correct_answer: C + 1: + mp_choice_options: + - option: "```\nm i n i o n s\n```" + feedback: This is not it. + - feedback: Correct! + option: "```\nBob\nKevin\nStuart\n```" + - option: "```\nminions\nminions\nminions\n```" + feedback: Take a look at the content of your list. + - option: "```\nB o b K e v i n S t u a r t\n```" + feedback: Do not loop through the letters. + correct_answer: B + question_text: What is the output of this code? + question_score: '10' + hint: Loop through your list. + code: "minions = ['Bob', 'Kevin', 'Stuart']\n{for} x in minions:\n {print} x" + 9: + 4: + mp_choice_options: + - option: Sleeping Beauty with shoe size 38 gets the output 'Ill keep looking' + feedback: No, she gets 'You are not the one!' + - feedback: No, she gets 'Ill keep looking' + option: Cinderella with shoe size 40 gets the output '❤️❤️❤️' + - option: Sleeping Beauty with shoe size 40 gets the output 'Ill keep looking' + feedback: That's right! + - feedback: No she gets '❤️❤️❤️' + option: Cinderella with shoe size 38 gets the output 'Ill keep looking' + code: "name = {ask} 'What is your name?'\nsize = {ask} 'What is your shoe size?'\n{if} size {is} 38\n {if} name {is} Cinderella\n {print} '❤️❤️❤️'\n {else}\n {print} 'You are not the one!'\n{else}\n {print} 'Ill keep looking'" + hint: No matter what your name is, if you have shoe size 40 you will get the message 'Ill keep looking'. + question_text: Which statement is true? + correct_answer: C + question_score: '10' + 6: + mp_choice_options: + - feedback: Don't forget the others + option: '`{if}`' + - feedback: Don't forget `{else}`! + option: '`{if}` `{repeat}`' + - option: '`{if}` `{else}` `{repeat}`' + feedback: Keep it up! + - feedback: Not with `{print}` + option: '`{if}` `{else}` `{repeat}` `{print}`' + question_text: After which command(s) should you use indentation (starting the next line with 4 spaces)? + correct_answer: C + hint: Indentation happens on the line below some commands + question_score: '10' + 2: + mp_choice_options: + - option: "```\nGood job!\nGood job!\n```" + feedback: That's not it! + - feedback: That's not it! + option: "```\nThe computer will explode in 5... 4... 3... 2... 1...\n```" + - feedback: That's not it! + option: "```\nGood job!\nGood job!\nYou can use the computer!\n```" + - option: "```\nGood job!\nYou can use the computer!\nGood job!\nYou can use the computer!\n```" + feedback: Correct! + correct_answer: D + code: "password = {ask} 'What is the password?'\ncorrect_password = Hedy\n{if} password {is} correct_password\n {repeat} 2 {times}\n {print} 'Good job!'\n {print} 'You can use the computer!'\n{else}\n {print} 'The computer will explode in 5... 4... 3... 2... 1...'" + question_text: What will be printed after entering the correct password? + hint: Everything under the `{repeat}` command is repeated twice. + question_score: '10' + 10: + question_score: '10' + mp_choice_options: + - option: All lines should start with 4 spaces + feedback: Only line 2 and 3 start with spaces + - option: Line 2 and 3 should start with 4 spaces + feedback: Line 3 should start with 8 + - option: Line 2 and 3 should start with 8 spaces + feedback: Line 2 should start with 4 + - feedback: You are correct! + option: line 2 should start with 4 spaces and line 3 with 8 + correct_answer: D + hint: The first line doesn't start with any spaces + question_text: Which statement is true? + code: "1 {repeat} 2 {times}\n2 {if} level {is} 9\n3 {print} 'Great job!'" + 1: + mp_choice_options: + - option: Nothing, this code is correct! + feedback: That's right! + - feedback: You are! + option: You're not allowed to use an `{if}` command after an `{ask}` command. + - feedback: You always have to use indentation. + option: You don't have to use indentation twice. + - feedback: It is not the indentation. + option: The indentation is wrong in the last `{if}` command. + correct_answer: A + question_text: What is wrong with this code? + code: "{repeat} 3 {times}\n food = {ask} 'What would you like to eat?'\n {if} food {is} fries\n sauce = {ask} 'What sauce would you like?'\n {print} 'One fries with ' sauce\n {if} food {is} pizza\n topping = {ask} 'What topping would you like?'\n {print} 'One pizza with ' topping\n{print} 'Thank you for your order'" + hint: All the indentation is done correctly. + question_score: '10' + 5: + output: "Icecream is the best!\nIcecream is the best!\nIcecream is the best!" + mp_choice_options: + - option: "```\ndessert = {ask} 'What is your favorite type of dessert?'\n{if} dessert {is} icecream\n {repeat} 3 {times}\n {print} 'Icecream is the best!'\n```" + feedback: Don't forget the indentation after `{repeat}` commands. + - feedback: Use indentation after an `{if}` command + option: "```\ndessert = {ask} 'What is your favorite type of dessert?'\n{if} dessert {is} icecream\n{repeat} 3 {times}\n {print} 'Icecream is the best!'\n```" + - option: "```\ndessert = {ask} 'What is your favorite type of dessert?'\n{if} dessert {is} icecream\n {repeat} 3 {times}\n {print} 'Icecream is the best!'\n```" + feedback: Perfect + - option: "```\n{repeat} 3 {times}\n dessert = {ask} 'What is your favorite type of dessert?'\n {if} dessert {is} icecream\n {repeat} 3 {times}\n {print} 'Icecream is the best!'\n```" + feedback: There are 2 `{repeat}` commands in this code. + question_score: '10' + correct_answer: C + question_text: Which code produced this output? + hint: Watch the indentation + 7: + question_score: '10' + code: "{if} food {is} pizza\n{if} size {is} medium\n{if} drink {is} coke\nprice = price - 5" + hint: After each `{if}` command, the line below should indent + mp_choice_options: + - option: "```\n{if} food {is} pizza\n {if} size {is} medium\n {if} drink {is} coke\n price = price - 5\n```" + feedback: Amazing! + - option: "```\n{if} food {is} pizza\n {if} size {is} medium\n{if} drink {is} coke\n price = price - 5\n```" + feedback: The second `{if}` misses code! + - option: "```\n{if} food {is} pizza\n{if} size {is} medium\n{if} drink {is} coke\n price = price - 5\n```" + feedback: Two consecutive `{if}`s is never correct. + - feedback: Almost right. Take another look at the last line + option: "```\n{if} food {is} pizza\n {if} size {is} medium\n {if} drink {is} coke\n price = price - 5\n```" + correct_answer: A + question_text: You'll get a 5 dollar discount if you order a medium pizza with coke.
But the code has a mistake! How to debug it? + 9: + question_score: '10' + mp_choice_options: + - feedback: You are allowed to + option: None, that is not allowed + - option: Only 1 + feedback: You could use more if you like + - feedback: You could use more if you like + option: '3' + - feedback: That is true + option: Infinite, as long as you keep using indentation correctly + question_text: How many `{if}` commands can be placed inside another `{if}` command? + correct_answer: D + hint: You can put an `{if}` command inside an `{if}` command. + 3: + mp_choice_options: + - feedback: You don't win a million! + option: case 1, sell + - option: case 1, open + feedback: You don't win a million + - feedback: You don't win a million + option: case 2, sell + - option: case 2, open + feedback: Great job! You win! + correct_answer: D + hint: Follow the right path + question_score: '10' + question_text: Which case should you choose to win a million dollars? + code: "{print} 'Choose the right case and win!'\ncase = {ask} 'Which case will you pick? 1 or 2?'\n{if} case {is} 1\n action = {ask} 'Open it or sell it?'\n {if} action {is} sell\n {print} 'You sell your case for 10 dollars'\n {if} action {is} open\n {print} 'You open the case and win an apple pie'\n{if} case {is} 2\n action = {ask} 'Open it or sell it?'\n {if} action {is} sell\n {print} 'You sell the case for 500 dollars'\n {if} action {is} open\n {print} 'You open the case and win a million dollars!'" + 8: + mp_choice_options: + - feedback: Yes you can. + option: You can't put two questions in a row + - feedback: Keen eye! Good job! + option: The variable called 'age' is later on used as 'years' + - option: You're not allowed to start with 8 spaces, like line 5 does + feedback: You actually must start like that. + - feedback: That's not true. + option: A code must always start with a `{print}` command in the first line + code: "age = {ask} 'Happy Birthday! How old are you?'\nsinging = {ask} 'Would you like us to sing?'\n{if} singing {is} yes\n {repeat} years {times}\n {print} 'Hip Hip Hooray'" + correct_answer: B + question_score: '10' + hint: The indentation is done right this time + question_text: What is wrong in this code? + 1: + 1: + mp_choice_options: + - option: Hedy + feedback: Good job! + - option: Heddy + feedback: Not this one! + - option: Haydie + feedback: Not this one! + - feedback: Not this one! + option: Heidi + hint: It's named after Hedy Lamarr. + correct_answer: A + question_score: '10' + question_text: What's this programming language called? + 6: + mp_choice_options: + - feedback: '`{print}` in line 1 is correct.' + option: In line 1 `{print}` should be replaced with `{ask}`. + - option: In line 2, `{print}` should be replaced with `{ask}`. + feedback: Great! You paid attention! + - feedback: '`{echo}` is correct.' + option: Line 3 has to begin with `{print}` instead of `{echo}`. + - feedback: No, there is a mistake somewhere else + option: In line 4, `{print}` is spelled wrong. + code: "{print} Hi im Hedy!\n{print} Which football team do you support?\n{echo} You support...\n{print} Cool! Me too!" + hint: Check the `{print}` commands. + question_score: '10' + correct_answer: B + question_text: What's wrong with this code? + 7: + mp_choice_options: + - option: In line 1 `{print}` needs to be replaced with `{ask}` + feedback: Are you sure something is wrong? + - option: In line 1 `{print}` needs to be replaced with `{echo}` + feedback: Are you sure something's wrong? + - feedback: Are you sure something is wrong? + option: In line 3 `{echo}` needs to be replaced with `{print}` + - option: Nothing! This is a perfect code! + feedback: Correct! + question_text: What's wrong with this code? + code: "{print} Welcome at Hedys restaurant!\n{ask} What would you like to eat?\n{echo} So you want to order ...\n{print} Coming right up! Enjoy!" + question_score: '10' + correct_answer: D + hint: Check the code line by line + 2: + mp_choice_options: + - feedback: '`{echo}` repeats a given answer.' + option: '`{echo}`' + - option: '`{print}`' + feedback: Correct! + - option: '`hello`' + feedback: Hello isn't a command. + - feedback: With `{ask}`, you can ask a question. + option: '`{ask}`' + code: _ Hello! + correct_answer: B + question_score: '10' + hint: _ Hello world! + question_text: Which need to be filled in on the blanks to make the text Hello! appear? + 4: + question_text: What is wrong with this code? + mp_choice_options: + - feedback: Correct! + option: '`{print}` in line 1 is missing.' + - option: The command in line 2 is spelled wrong. + feedback: The command is spelled correctly. + - option: "`{echo}` isn't a command." + feedback: "`{echo}` is a command, there's another mistake." + - option: Nothing! This is a perfect code! + feedback: Wrong, look carefully! + code: "Hi Im Hedy!\n{ask} Who are you?\n{echo} Hi..." + hint: Line 1 doesn't seem right + question_score: '10' + correct_answer: A + 8: + correct_answer: C + question_text: How do you use the `{echo}` command? + mp_choice_options: + - option: You can use it to `{ask}` a question. + feedback: That's what `{ask}` is for! + - feedback: That's what `{print}` is for! + option: You can use it exactly the same way as `{print}`. + - feedback: Good job! + option: You can use it to repeat an answer. + - feedback: That's not right... + option: You can use it to make text disappear. + hint: '`{echo}` is used after an `{ask}` command.' + question_score: '10' + 3: + mp_choice_options: + - feedback: "`{print}` prints text, but it doesn't ask questions." + option: "```\n{print} What is your favorite color?\n```" + - option: "```\n{ask} {print} What is your favorite color?\n```" + feedback: You only need one command, not two. + - option: "```\n{ask} What is your favorite color?\n```" + feedback: Great! + - feedback: '`{echo}` repeats your answer back to you.' + option: "```\n{echo} What is your favorite color?\n```" + hint: You can ask something with the `{ask}` command + correct_answer: C + question_score: '10' + question_text: How do you ask what someone's favorite color is? + 5: + correct_answer: D + mp_choice_options: + - feedback: No, you would like the answer to be repeated back to you. + option: '`{print}`' + - option: '`Hedy`' + feedback: Hedy isn't a command. + - option: '`{ask}`' + feedback: With `{ask}` you can ask a question. + - feedback: Right on! + option: '`{echo}`' + question_text: Which command is missing in line 2? + question_score: '10' + hint: You want to see the answer at the end of line 2... + code: "{ask} What is your favorite pet?\n_ So your favorite pet is..." + 10: + code: "{ask} Are you ready to go to level 2?\n{echo}\n{echo}" + mp_choice_options: + - option: Are you ready to go to level 2? + feedback: There are two `{echo}` commands + - feedback: Great job! + option: "Yes!\nYes!" + - option: Yes! + feedback: There are two `{echo}` commands + - option: "Are you ready to go to level 2?\nYes!" + feedback: There are two `{echo}` commands + question_text: Which output will be in your output screen after you've run this code? + hint: Let's go! + question_score: '10' + correct_answer: B + 9: + correct_answer: B + mp_choice_options: + - feedback: No, `{print}` is right. Where is the question being asked? + option: '`{print}` in line 1 should be `{ask}`' + - feedback: Super! + option: '`{print}` in line 2 should be `{ask}`' + - feedback: No, `{echo}` is right. Where is the question being asked? + option: '`{echo}` in line 3 should be `{ask}`' + - feedback: Look carefully for the mistake... + option: Nothing. This is a perfect code! + code: "{print} Hello!\n{print} How are you doing?\n{echo} So you are doing..." + question_text: What's wrong with this code? + question_score: '10' + hint: '`{ask}` allows you to ask a question' + 12: + 10: + mp_choice_options: + - option: "```\n{for} i {in} {range} 1 {to} 3\n```" + feedback: This is a hard one! All the actions on the list must be in the song. + - option: "```\n{for} action {in} actions\n```" + feedback: You are amazing! + - feedback: This is a hard one! All the actions on the list must be in the song. + option: "```\n{repeat} 3 {times}\n```" + - feedback: This is a hard one! All the actions on the list must be in the song. + option: "```\n{print} actions {at} {random}\n```" + question_score: '10' + hint: This is a hard one! All the actions on the list must be in the song. + question_text: Which line of code should be filled in at the `_` to complete the song ? + correct_answer: B + code: "actions = 'clap your hands', 'stomp your feet', 'shout Hurray!'\n_\n {for} i {in} {range} 0 {to} 1\n {print} 'if youre happy and you know it'\n {print} action\n {print} 'if youre happy and you know it and you really want to show it'\n {print} 'if youre happy and you know it'\n {print} action" + 4: + mp_choice_options: + - feedback: No + option: Line 1 and 2 + - feedback: No + option: Line 1, 2 and 3 + - option: Line 1, 2 and 4 + feedback: No + - feedback: Perfect! + option: All of the lines + hint: Does line 3 need quotation marks too? + code: "{print} Welcome to the online shoe shop\ncategory = {ask} What kind of shoes are you looking for?\n{if} category = high heels\n {print} High heels are 50% off now!" + question_text: In which lines are quotation marks needed to get the code to work? + correct_answer: D + question_score: '10' + 3: + hint: The quotation marks are used correctly + mp_choice_options: + - option: The name of the variable is different in line 1 than in line 2. + feedback: Correct! + - feedback: That's not true + option: The quotation marks aren't used correctly in line 2 + - option: You can't use the = sign when using an {ask} command + feedback: That's not true + - feedback: That's not true + option: Nothing is wrong. + code: "favorite_animal = {ask} 'What is your favorite animal?'\n{print} 'I like ' favoriteanimal ' too!'" + correct_answer: A + question_text: What's wrong with this code? + question_score: '10' + 8: + mp_choice_options: + - feedback: No + option: "```\n{print} '7 / 2'\n```" + - option: "```\n{print} 7 / 2\n```" + feedback: That is right! + - option: "```\n{print} 7 : 2\n```" + feedback: No + - feedback: No + option: "```\n{print} 7 * 2\n```" + hint: 7 devided by 2 is 3.5 + code: '3.5' + question_text: Which code was used to create this output? + question_score: '10' + correct_answer: B + 9: + question_score: '10' + mp_choice_options: + - feedback: You won nothing + option: "```\nprizes = 'one' 'million' 'dollars', 'nothing'\n```" + - feedback: You won nothing + option: "```\nprizes = 'one million dollars, nothing'\n```" + - option: "```\nprizes = 'one million dollars', 'nothing'\n```" + feedback: Winner! + - feedback: You won nothing + option: "```\n'prizes' = 'one million dollars', 'nothing'\n```" + hint: The items on the list should be in quotation marks + correct_answer: C + code: "_\n{print} 'You won ' prizes {at} {random} '!'" + question_text: Which code should be filled in in line 1 at the `_`? + 2: + hint: The second line is the same in each code, pay attention to the first line + mp_choice_options: + - feedback: All the different values of flavors should be in quotation marks. + option: "```\nflavors {is} vanilla, strawberry, chocolate\n{print} 'I would like a ' flavors {at} {random} ' cake.'\n```" + - feedback: All the different values of flavors should be in quotation marks. + option: "```\n'flavors = vanilla, strawberry, chocolate'\n{print} 'I would like a ' flavors {at} {random} ' cake.'\n```" + - option: "```\nflavors = 'vanilla', 'strawberry', 'chocolate'\n{print} 'I would like a ' flavors {at} {random} ' cake.'\n```" + feedback: Alright! + - feedback: All the different values of flavors should be in quotation marks. + option: "```\nflavors = 'vanilla, strawberry, chocolate'\n{print} 'I would like a ' flavors {at} {random} ' cake.'\n```" + correct_answer: C + question_score: '10' + question_text: Which of these codes is correct? + 1: + code: "{print} 'three and a half plus one and a half is...'\n{print} 3.5 + 1.5" + hint: Both lines are printed! + mp_choice_options: + - feedback: Don't forget the first line of code! + option: '5' + - feedback: This is not the one! + option: 3.5 + 1.5 + - option: "three and a half plus one and a half is...\nfive" + feedback: Take a close look at the second line... + - option: "three and a half plus one and a half is...\n5" + feedback: Great job! + question_text: Which output is correct? + correct_answer: D + question_score: '10' + 6: + correct_answer: C + mp_choice_options: + - feedback: What if you only order fries and a drink? + option: "```\nprice = 14\n```" + - option: "```\nprice = '14'\n```" + feedback: What if you only order fries and a drink? + - feedback: Excellent! + option: "```\nprice = price + 2\n```" + - feedback: Almost there! + option: "```\nprice = + 2\n```" + hint: What if you only order fries and a drink? + code: "{print} 'Welcome to McHedy!'\norder = {ask} 'Would you like a hamburger or fries?'\n{if} order = 'hamburger'\n price = 12\n{if} order = 'fries'\n price = 4\ndrinks = {ask} 'Would you like a drink with that for 2 dollars?'\n{if} drinks = 'yes'\n _\n{print} 'That will be ' price ' dollar please'" + question_score: '10' + question_text: Which line should be filled in at the `_`? + 7: + mp_choice_options: + - option: "It's my birthday! I've brought some snacks!\nFor you I have brought:\ncookies\ngrapes" + feedback: Terrific! + - option: "It's my birthday! I've brought some snacks!\nFor you I have brought:\ngrapes" + feedback: There's more options than just one + - option: "It's my birthday! I've brought some snacks!\nFor you I have brought:\ncheese\ngrapes" + feedback: A vegan person can't have cheese + - option: "It's my birthday! I've brought some snacks!\nFor you I have brought:\ngrapes\ncookies" + feedback: Almost there, but look at the order of snacks in the list + hint: What item is removed from the list when you answer 'vegan'? + code: "menu = 'cookies', 'cheese', 'grapes'\n{print} \"It's my birthday! I`ve brought some snacks!\"\ndiet = {ask} 'Do you have any dietary restrictions?'\n{if} diet = 'gluten free'\n {remove} 'cookies' {from} menu\n{if} diet = 'vegan'\n {remove} 'cheese' {from} menu\n{print} 'For you I have brought: '\n{for} snack {in} menu\n {print} snack" + question_score: '10' + correct_answer: A + question_text: Which output does a vegan get? + 5: + code: "name {is} {ask} 'What is your name?'\n{if} name {is} 'Agent007'\n a {is} 'Go to the airport '\nelse\n a {is} 'Go to the train station '\npassword {is} {ask} 'What is the password?'\n{if} password {is} 'TOPSECRET'\n b {is} 'tomorrow at 02.00'\n{else}\n b {is} 'today at 10.00'\n{print} a + b" + question_text: What output does Agent007 get when they put in the correct password? + mp_choice_options: + - feedback: The agent won't be catching any bad guys here + option: Go to the train station today at 10.00 + - feedback: You've cracked the code! + option: Go to the airport tomorrow at 02.00 + - option: Go to the train station tomorrow at 02.00 + feedback: The agent won't be catching any bad guys here + - option: Go to the airport tomorrow at 10.00 + feedback: The agent won't be catching any bad guys here + question_score: '10' + correct_answer: B + hint: The correct password is TOPSECRET + 5: + 5: + mp_choice_options: + - feedback: Indeed! + option: Because it needs to be in capitals, so SECRET + - feedback: No, this is not the password. + option: Because the password is alarm + - option: Because it's spelled wrong. + feedback: That's not how you spell secret + - option: Because Hedy makes a mistake + feedback: No, Hedy is right + question_score: '10' + code: "password {is} {ask} 'What is the password?'\n{if} password {is} SECRET {print} 'Correct!'\n{else} {print} 'ALARM! INTRUDER!'" + correct_answer: A + hint: The spelling of the word has to be exactly the same. + question_text: Why will Hedy say 'ALARM! INTRUDER' when you type in 'secret'? + 8: + mp_choice_options: + - option: "```\nfavorite animal\n```" + feedback: That's not the variable name. + - option: "```\nanimal\n```" + feedback: Great job! + - option: '`{if}`' + feedback: '`{if}` is already there' + - feedback: No, that's not it. + option: '`{print}`' + question_text: Which word should be on the place of the blank? + code: "animal {is} {ask} 'What is your favorite animal?'\n{if} _ {is} penguin {print} 'Thats my favorite animal too!'\n{else} {print} 'Cool! I like penguins.'" + question_score: '10' + hint: What the variable name? + correct_answer: B + 7: + hint: After `{else}` a `{print}` command follows + mp_choice_options: + - feedback: '`{if}` is in the line above.' + option: '`{if}`' + - option: '`{at}` `{random}`' + feedback: No, you don't need `{at} {random}`. + - feedback: There already is an `{else}` command + option: '`{else}`' + - feedback: Awesome! + option: '`{print}`' + question_score: '10' + question_text: Which word should be in the place of the blank? + correct_answer: D + code: "{print} 'I can predict if you will be a millionair or not!'\nname {is} {ask} 'Whats your name?'\n{if} name {is} Hedy {print} 'You will be a millionair!'\n{else} _ 'Unfortunately... No big money for you.'" + 10: + question_text: Which monster is standing behind door 1? + mp_choice_options: + - feedback: Awesome! + option: Hedy picks a random monster each time. + - feedback: Not always... + option: vampire + - option: werewolf + feedback: Not always... + - feedback: Not always... + option: giant spider + code: "{print} 'Escape from the haunted house!'\n{print} 'There are 3 doors in front of you'\ndoor {is} {ask} 'Which door do you choose?'\nmonsters {is} vampire, werewolf, giant spider\n{if} door {is} 2 {print} 'Yay, you can escape!'\n{else} {print} 'You are being devoured by a... ' monsters {at} {random}" + correct_answer: A + question_score: '10' + hint: Mind the last 3 words... monsters `{at} {random}`... + 2: + mp_choice_options: + - feedback: That's right! + option: fun + - option: less fun + feedback: If the name is Hedy, it will say 'fun'' + - option: Hedy + feedback: No, it doesn't print the name + - option: Error + feedback: Fortunately not! + code: "name {is} {ask} 'What is your name?'\n{if} name {is} Hedy {print} 'fun' {else} {print} 'less fun'" + question_score: '10' + hint: '`{if}` name `{is}` Hedy `{print}` ...?' + correct_answer: A + question_text: What appears in your output screen when you type in the name Hedy? + 6: + mp_choice_options: + - option: "```\n{if}\n```" + feedback: '`{if}` is already in the line above' + - feedback: No, you need `{else}`. + option: "```\n{at} {random}\n```" + - feedback: Great! + option: "```\n{else}\n```" + - option: "```\n{print}\n```" + feedback: '`{print}` is already there, we need a word before it!' + hint: '`{if}` goes together with...?' + correct_answer: C + question_text: Which word should be on the place of the blank in the last line? + code: "{print} 'Im Hedy the football fortune teller!'\n{print} 'I will predict what place your team will end up!'\nclub is {ask} 'Which club is your favorite?'\n{if} club {is} ajax {print} 'Ajax is going to win of course!'\n_ {print} 'Sorry, your club is gonna be in last place...'" + question_score: '10' + 9: + question_score: '10' + mp_choice_options: + - feedback: Bad choice! You're being eaten + option: '1' + - feedback: Super! You escaped! + option: '2' + - feedback: Bad choice! You're being eaten. + option: '3' + - feedback: Luckily not! + option: It's a trap, you will always be eaten! + hint: One of the doors will keep you safe.. + code: "{print} 'Escape from the haunted house!'\n{print} 'There are 3 doors in front of you'\ndoor {is} {ask} 'Which door do you choose?'\nmonsters {is} vampire, werewolf, giant spider\n{if} door {is} 2 {print} 'Yay, you can escape!'\n{else} {print} 'You are being devoured by a... ' monsters {at} {random}" + question_text: Which door should you choose to escape?? + correct_answer: B + 1: + mp_choice_options: + - feedback: There already is a `{print}` command. + option: '`{print}`' + - option: '`{if}`' + feedback: The `{if}` command is used in the line above. + - option: '`{sleep}`' + feedback: That's not it! + - option: '`{else}`' + feedback: That's right! + question_text: Which command should be filled in on the _? + question_score: '10' + correct_answer: D + code: "number {is} {ask} 'What is your lucky number?'\n{if} number {is} 5 {print} 'Mine too!'\n_ {print} 'My lucky number is 5!'" + hint: Which one goes together with the `{if}` command? + 4: + code: "password {is} {ask} 'What is the password?'\n{if} password {is} SECRET {print} 'Correct!'\n{else} {print} 'ALARM! INTRUDER!'" + mp_choice_options: + - feedback: That's printed if the correct answer is given, not the wrong one... + option: Correct + - feedback: That's not the right answer + option: SECRET + - option: Wrong! + feedback: No, this is not what Hedy will print + - option: ALARM! INTRUDER! + feedback: Great job! + hint: Your computer will sound the alarm for intruders! + correct_answer: D + question_text: What does Hedy print when you type in the wrong password? + question_score: '10' + 3: + mp_choice_options: + - feedback: This is printed when you type in the correct password + option: Correct! + - feedback: That's right!' + option: SECRET + - option: password + feedback: The password isn't password... + - feedback: This is printed when you type in the incorrect password! + option: ALARM INTRUDER + question_score: '10' + question_text: What is the right password? + hint: "`{if}` password `{is}` ... `{print}` 'Correct!'" + correct_answer: B + code: "password {is} {ask} 'What is the password?'\n{if} password {is} SECRET {print} 'Correct!'\n{else} {print} 'ALARM! INTRUDER!'" + 2: + 10: + correct_answer: D + mp_choice_options: + - feedback: You want to know the favorite flavor! + option: "```\n{sleep} 3\n```" + - option: "```\n{print} strawberries\n```" + feedback: You do not want a `{print}` command at the middle of the line... + - option: "```\nstrawberries, chocolate, vanilla\n```" + feedback: This way you are making a list. You don't want that now. + - feedback: That's right! + option: "```\n{ask} What flavor icecream do you like?\n```" + hint: You want to `{ask}` a question + question_text: What command should be used on the line 1? + question_score: '10' + code: "flavor {is} _\n{print} Your favorite icecream is...\n{sleep}\n{print} flavor" + 5: + question_score: '10' + hint: The computer waits for a second at the `{sleep}` command + mp_choice_options: + - feedback: fortunately not! + option: It slows down your computer + - option: It closes down Hedy + feedback: fortunately not! + - feedback: That's right! + option: Your program pauses for a second and then continues + - feedback: No it would be useless at the end of your code + option: You put it at the end so Hedy knows your program is finished + correct_answer: C + question_text: What happens when you use the `{sleep}` command? + 4: + mp_choice_options: + - option: Hi my name is name + feedback: The variable name is replaced with Hedy + - feedback: The variable name is replaced with Hedy + option: Hi my name is Hedy + - option: Hi my Hedy is name + feedback: The variable name is replaced with Hedy + - option: Hi my Hedy is Hedy + feedback: Correct, this mistake will be fixed in level 4! + question_score: '10' + hint: "'name' is being replaced with 'Hedy' in both places" + code: "name {is} Hedy\n{print} Hi my name is name" + question_text: What will you see on the output screen when you run this code? + correct_answer: D + 3: + mp_choice_options: + - feedback: The word name is replaced with Marleen + option: name goes to the market and she buys an apple. + - option: Marleen goes to the market. + feedback: The second part of the sentence isn't left out! + - feedback: Right on! + option: Marleen goes to the market and she buys an apple. + - feedback: She is not replaced with the name + option: Marleen goes to the market and Marleen buys an apple. + correct_answer: C + code: "name {is} Marleen\n{print} name goes to the market and she buys an apple." + question_score: '10' + question_text: What appears on your output screen when you run this code? + hint: The word name is replaced with Marleen + 1: + correct_answer: C + mp_choice_options: + - feedback: That is what `{ask}` is for + option: You can use the `{print}` command to ask questions. + - option: You can use the `{ask}` command to echo answers. + feedback: That is not true + - option: With the `{print}` command you can make text appear + feedback: Good + - option: With the `{sleep}` command, you can remove text from the screen. + feedback: That's not how `{sleep}` works. + hint: '`{print}` still works the same way as in level 1' + question_score: '10' + question_text: Which statement is true? + 7: + hint: You want the computer to wait for 3 seconds + mp_choice_options: + - option: "```\n{print} 3\n```" + feedback: You don't need to `{print}` + - feedback: Perfect! + option: "```\n{sleep} 3\n```" + - feedback: This way the bomb will explode in 1 second + option: "```\n{sleep}\n```" + - feedback: Make it easier on yourself by using the number 3 + option: "```\n{sleep} {sleep} {sleep}\n```" + correct_answer: B + code: "{print} I will explode in 3 seconds!\n_\n{print} BOOM!" + question_text: What command should be used on line 2? + question_score: '10' + 2: + mp_choice_options: + - option: "```\nname {is} {ask} What is your name?\n```" + feedback: Super! + - feedback: The words are right, the order is not! + option: "```\n{ask} {is} name What is your name\n```" + - feedback: This worked in level 1, but in level 2 and up it works differently. + option: "```\n{ask} What is your name?\n```" + - feedback: The words are right, the order isn't! + option: "```\n{ask} What is your name? {is} name\n```" + question_text: Which code is correct? + hint: "`{ask}` doesn't work like in level 1" + question_score: '10' + correct_answer: A + 9: + mp_choice_options: + - feedback: The variable name is animal + option: 'Line 1 should say: dogs `{is}` animals' + - feedback: Great! + option: 'Line 1 should say: animal `{is}` dogs' + - option: 'Line 2 should say: `{print}` I love animals' + feedback: The variable name is animal + - option: 'Line 2 should say: `{sleep}` I love animals' + feedback: Sleep is not used to `{print}` text + question_score: '10' + question_text: What is going wrong in this code? + code: "dogs {is} animal\n{print} I love animal" + hint: You want to `{print}` 'I love dogs' + correct_answer: B + 8: + mp_choice_options: + - option: "```\nage {ask} {is} How old are you?\n```" + feedback: That is the wrong order + - feedback: That is the wrong order + option: "```\n{ask} {is} age How old are you?\n```" + - feedback: You get it! + option: "```\nage {is} {ask} How old are you?\n```" + - feedback: Where is the `{ask}` command? + option: "```\nage {is} How old are you?\n```" + question_text: How would you correct the first line of code? + code: "{ask} {is} How old are you?\n{print} age" + question_score: '10' + hint: The variable name should come first + correct_answer: C + 6: + question_text: What should be on the lines? + code: "{print} And the award for best programming language goes to...\n_\n{print} Hedy!" + hint: Pause for dramatic effect... + mp_choice_options: + - feedback: Perfect! + option: '`{sleep}`' + - feedback: There is nothing to repeat back here + option: '`{echo}`' + - option: '`{print}`' + feedback: There is no text there to `{print}` there + - option: '`{ask}`' + feedback: There is no question there to be asked + correct_answer: A + question_score: '10' + 7: + 2: + hint: First the `{repeat}` command, then the `{print}` command + mp_choice_options: + - option: "```\n{print} 100 {times} 'hello'\n```" + feedback: "`{repeat}` 100 `{times}` `{print}` 'hello'" + - option: "```\n{print} {repeat} 100 {times} 'hello'\n```" + feedback: "{repeat} 100 {times} {print} 'hello'" + - feedback: "{repeat} 100 {times} {print} 'hello'" + option: "```\n{repeat} 'hello' 100 {times}\n```" + - feedback: That's right! + option: "```\n{repeat} 100 {times} {print} 'hello'\n```" + correct_answer: D + question_score: '10' + question_text: Which code is right? + 10: + hint: Mind the order of the sentences. + correct_answer: B + code: "if youre happy and you know it clap your hands\nif youre happy and you know it clap your hands\nif youre happy and you know it and you really want to show it\nif youre happy and you know it clap your hands" + mp_choice_options: + - feedback: Almost! the first line needs an extra word + option: "```\n{repeat} 2 {times} 'if youre happy and you know it clap your hands'\n{print} 'if youre happy and you know it and you really want to show it'\n{print} 'if youre happy and you know it clap your hands'\n```" + - option: "```\n{repeat} 2 {times} {print} 'if youre happy and you know it clap your hands'\n{print} 'if youre happy and you know it and you really want to show it'\n{print} 'if youre happy and you know it clap your hands'\n```" + feedback: Great! + - feedback: This is not in the right order. + option: "```\n{repeat} 3 {times} {print} 'if youre happy and you know it clap your hands'\n{print} 'if youre happy and you know it and you really want to show it'\n```" + - option: "```\n{repeat} 4 {times} 'if youre happy and you know it'\n{repeat} 2 {times} 'clap your hands'\n{print} 'and you really want to show it'\n{print} 'clap your hands'\n```" + feedback: This is not in the right order. + question_score: '10' + question_text: Which code belongs to this output? + 7: + mp_choice_options: + - option: "```\nWe will We will\nROCK YOU!\n```" + feedback: "'We will' won't appear twice in the same line" + - feedback: Great! + option: "```\nWe will\nWe will\nROCK YOU!\n```" + - feedback: ROCK YOU! won't be repeated + option: "```\nWe will\nROCK YOU!\nWe will\nROCK YOU!\n```" + - feedback: Mind the `{repeat}` command + option: "```\nWe will\nROCK YOU!" + hint: Mind the `{repeat}` command. + correct_answer: B + question_text: What will be the output from this code? + code: "{repeat} 2 {times} {print} 'We will'\n{print} 'ROCK YOU!'" + question_score: '10' + 3: + mp_choice_options: + - feedback: No, a word is missing + option: Right + - feedback: The word `{repeat}` is there, another word is missing + option: Wrong, the word `{repeat}` is missing + - option: Wrong, the word `{times}` is missing + feedback: The word `{times}` is there, another word is missing. + - option: Wrong, the word `{print}` is missing + feedback: Correct + correct_answer: D + code: "{repeat} 100 {times} 'Hello!'" + question_score: '10' + hint: "It should be: `{repeat}` 100 `{times}` `{print}` 'Hello'" + question_text: Is this code right or wrong? + 1: + mp_choice_options: + - feedback: No you can repeat a line. + option: '0' + - option: '1' + feedback: Correct, one line at a time + - option: '3' + feedback: In this level only one line at a time + - feedback: In this level you can only repeat one line at a time + option: infinite + correct_answer: B + question_score: '10' + question_text: How many lines can you repeat at once with the repeat command at this level? + hint: You can only repeat one line at a time + 8: + code: "Here comes the sun\nDo do do do\nHere comes the sun\nAnd I say\nIts alright" + mp_choice_options: + - option: "```\n{print} 'Here comes the sun'\n{print} 'Do do do do'\n{print} 'Here comes the sun'\n{print} 'And I say'\n{print} 'Its alright'\n```" + feedback: Awesome, you can't use the `{repeat}` command here. + - option: "```\n{repeat} 2 {times} {print} 'Here comes the sun'\n{print} 'And I say'\n{print} 'Its alright'" + feedback: Where did you leave 'Do do do do'? + - option: "```\n{repeat} 2 {times} {print} 'Here comes the sun'\n{print} 'Do do do do'\n{print} 'And I say'\n{print} 'Its alright'\n```" + feedback: This is not the correct order.. + - option: "```\n{repeat} 2 {times} {print} 'Here comes the sun'\n{repeat} 2 {times} {print} 'Do do'\n{print} 'And I say'\n{print} 'Its alright'\n```" + feedback: This is not the correct order.. + question_text: What Hedy code belongs to this output? + correct_answer: A + hint: '`{repeat}` can only be used if you want to execute the same line multiple times in a row.' + question_score: '10' + 6: + mp_choice_options: + - feedback: Only the second line is repeated 3 times + option: "```\nthe wheels on the bus go\nround and round\n```" + - option: "```\nthe wheels on the bus go\nthe wheels on the bus go\nthe wheels on the bus go\nround and round\n```" + feedback: Only the second line is repeated 3 times + - option: "```\nthe wheels on the bus go\nround and round\nthe wheels on the bus go\nround and round\nthe wheels on the bus go\nround and round\n```" + feedback: Only the second line is repeated 3 times + - option: "```\nthe wheels on the bus go\nround and round\nround and round\nround and round\n```" + feedback: All through the town! Perfect! + hint: Only 'round and round' is repeated 3 times. + question_score: '10' + question_text: What will be the output from this code? + code: "{print} 'The wheels on the bus go'\n{repeat} 3 {times} {print} ' round and round'" + correct_answer: D + 4: + question_score: '10' + mp_choice_options: + - option: "`I'm`" + feedback: That's right! + - feedback: '`{print}` is spelled correctly' + option: '`{print}`' + - feedback: '`{repeat}` is spelled correctly' + option: '`{repeat}`' + - feedback: '`{times}` is spelled correctly' + option: '`{times}`' + code: "{print} 'I'm blue'\n{repeat} 7 {times} {print} 'da ba dee, da ba da'" + hint: I'm is wrong, you can't use apostrophes in a sentence + correct_answer: A + question_text: Which word is wrong in the code? + 9: + mp_choice_options: + - feedback: Your repeated line is incorrect. + option: "```\n{print} 'Batman was flying through Gotham. '\n{print} 'When suddenly he heard someone screaming!'\n{print} 'Help!'\n{repeat} 3 {times} {print} 'Please help me!'\n```" + - option: "```\n{print} 'Batman was flying through Gotham.'\n{print} 'When suddenly he heard someone screaming!'\n{repeat} 3 {times} 'Help!'\n{print} 'Please help me!'\n```" + feedback: The `{print}` command is missing on line 3. + - option: "```\n{print} Batman was flying through Gotham.\n{print} When suddenly he heard someone screaming!\n{repeat} 3 {times} {print} Help!\n{print} Please help me!\n```" + feedback: You're missing the quotation marks + - option: "```\n{print} 'Batman was flying through Gotham.'\n{print} 'When suddenly he heard someone screaming!'\n{repeat} 3 {times} {print} 'Help!'\n{print} 'Please help me!'\n```" + feedback: Perfect + code: "Batman was flying through Gotham.\nWhen suddenly he heard someone screaming...\nHelp!\nHelp!\nHelp!\nPlease help me!" + correct_answer: D + question_score: '10' + question_text: What Hedy code belongs to this output? + hint: "'Help!' is repeated 3 times." + 5: + mp_choice_options: + - option: Correct + feedback: That's right! + - option: Wrong + feedback: That's not it + hint: The code is correct! + question_score: '10' + question_text: Is this code right or wrong? + code: "{repeat} 100 {times} {print} 'Hedy is awesome!'" + correct_answer: A + 8: + 4: + question_text: Which output is correct? + hint: The block under the `{repeat}` command is repeated twice. + mp_choice_options: + - option: "The children went:\nYay!\nWe are going on vacation!" + feedback: Mind the `{repeat}` command! + - option: "The children went:\nYay!\nWe are going on vacation!\nYay!\nWe are going on vacation!" + feedback: Correct! + - option: "The children went:\nYay!\nYay!\nWe are going on vacation!\nWe are going on vacation!" + feedback: This order is incorrect. + - option: "The children went:\nYay!\nYay!\nWe are going on vacation!" + feedback: The last line is repeated too. + correct_answer: B + code: "{print} 'The children went:'\n{repeat} 2 {times}\n {print} 'Yay!'\n {print} 'We are going on vacation!'" + question_score: '10' + 9: + mp_choice_options: + - feedback: The lines after the `{if}` and `{else}` command should start with 4 spaces + option: Line 2 and 4 + - feedback: Not only 3... + option: Only line 3 + - option: Line 3, 4 and 5 + feedback: Line 4 shouldn't + - feedback: Great job! + option: Line 3 and 5 + code: "1 music = {ask} 'What is your favorite music genre?'\n2 {if} music {is} rock\n3 {print} '🤘'\n4 {else}\n5 {print} '👎'" + question_score: '10' + hint: The lines after an `{if}` or `{else}` command should start with 4 spaces. + correct_answer: D + question_text: What line(s) in this code should start with 4 spaces? + 6: + mp_choice_options: + - feedback: There is no repetition in this answer. + option: "Welcome to restaurant Hedy\nPancakes" + - option: "Welcome to restaurant Hedy\nWelcome to restaurant Hedy\nPancakes\nPancakes" + feedback: This answer also repeats the welcome message + - option: "Welcome to restaurant Hedy\nWhat do you want to eat?\nWhat do you want to eat?\nPancakes\nPancakes" + feedback: Almost! But look at the question, it is not repeated. + - option: "Welcome to restaurant Hedy\nPancakes\nPancakes" + feedback: Well done! + hint: The first sentence and question will not be repeated + question_text: What will be the output of this code when we enter pancakes? + correct_answer: D + code: "{print} 'Welcome to restaurant Hedy'\n{repeat} 2 {times}\n food {is} {ask} 'What do you want to eat?'\n {print} food" + question_score: '10' + 8: + mp_choice_options: + - feedback: You are wrong! + option: "```\n{if} answer {is} 32\n {print} 'You are...'\n {sleep}\n {print} 'right!'\n {else}\n {print} 'You are wrong!'\n```" + - feedback: You are wrong! + option: "```\n{if} answer {is} 32\n{print} 'You are...'\n{sleep}\n{print} 'right!'\n{else}\n{print} 'You are wrong!'\n```" + - option: "```\n{if} answer {is} 32\n {print} 'You are...'\n {sleep}\n {print} 'right!'\n{else}\n {print} 'You are wrong!'\n```" + feedback: You are... right! + - option: "```\n{if} answer {is} 32\n {print} 'You are...'\n {sleep}\n{print} 'right!'\n{else}\n {print} 'You are wrong!'\n```" + feedback: You are wrong! + hint: What should happen if the person is right? And what else? + question_text: In which of the codes is the indentation done right? + correct_answer: C + question_score: '10' + 3: + mp_choice_options: + - option: "Baby shark tututudutudu\nBaby shark" + feedback: Mind the `{repeat}` command! + - feedback: The last line has no indentation, so it's not repeated. + option: "Baby shark tututudutudu\nBaby shark\nBaby shark tututudutudu\nBaby shark\nBaby shark tututudutudu\nBaby shark" + - feedback: Right! + option: "Baby shark tututudutudu\nBaby shark tututudutudu\nBaby shark tututudutudu\nBaby shark" + - feedback: What is being repeated and what isn't ? + option: "Baby shark tututudutudu\nBaby shark\nBaby shark\nBaby shark" + code: "{repeat} 3 {times}\n {print} 'Baby shark tututudutudu'\n{print} 'Baby shark'" + hint: What is being repeated and what is not? + question_text: What output will be produced when you run this program? + correct_answer: C + question_score: '10' + 2: + correct_answer: D + mp_choice_options: + - feedback: No it should be 2 lines. + option: This should be only one line, not 2. + - option: This `{print}` command has to be removed. + feedback: No, you need it. + - feedback: No, `{repeat}` is the correct spelling + option: There is a spelling mistake in the `{repeat}` command. + - option: The second line needs to start with 4 spaces as indentation. + feedback: Correct! + code: "{repeat} 5 {times}\n{print} 'Hedy is cool!'" + question_score: '10' + hint: Something is missing in the second line? + question_text: What is wrong with this code? + 10: + mp_choice_options: + - feedback: That's not true + option: All lines should start with 4 spaces + - option: Line 2 and 3 should start with 4 spaces + feedback: That's not true + - feedback: That's not true + option: Line 2 should start with 4 spaces + - option: Line 3 should start with 4 spaces + feedback: You are correct! + code: "1 level = {ask} 'What level are you on?'\n2 {if} level {is} 8\n3 {print} 'Great job!'" + question_text: Which statement is true? + hint: Only one line starts with 4 spaces, but which one...? + question_score: '10' + correct_answer: D + 1: + mp_choice_options: + - option: "Hello\nIm Hedy!" + feedback: Everything is printed twice. + - option: "Hello\nHello\nIm Hedy" + feedback: The second line is repeated twice as well. + - option: "Hello\nIm Hedy!\nHello\nIm Hedy!" + feedback: Super! + - feedback: Everything is printed twice + option: "Hello\nHello\nIm Hedy!\nIm Hedy!" + correct_answer: C + question_text: Which output will be produced by this code? + hint: Both lines are repeated twice. + question_score: '10' + code: "{repeat} 2 {times}\n {print} 'Hello'\n {print} 'Im Hedy!'" + 5: + question_score: '10' + mp_choice_options: + - option: The `{print}` commands on the last two lines should start on new lines and start with 4 spaces. + feedback: That's right! + - option: '`{else}` is not a command!' + feedback: It is! + - feedback: That's not true + option: Lines that start with `{if}` should start with 4 spaces + - feedback: That's not true + option: '`{ask}` is no longer a command' + correct_answer: A + code: "end = {ask} 'Do you want a happy or a sad ending?'\n{if} end {is} happy {print} 'They lived happily ever after'\n{else} {print} 'The world exploded. The end.'" + question_text: What is wrong with this code? + hint: Something is wrong with indentation + 7: + mp_choice_options: + - option: Nothing. This code is correct! + feedback: Something is wrong! + - feedback: You are! + option: You're not allowed to use an `{if}` command after an `{ask}` command. + - feedback: You always have to use indentation. + option: You don't have to use indentation twice. Only in the first `{if}` command. + - feedback: That's right. + option: The indentation is wrong in the first `{if}` command. + code: "food = {ask} 'What would you like to eat?'\n{if} food {is} fries\nsauce = {ask} 'What sauce would you like?'\n {print} 'One fries with ' sauce\n{if} food {is} pizza\n topping = {ask} 'What topping would you like?'\n {print} 'One pizza with ' topping\n{print} 'Thank you for your order'" + hint: Take a careful look at the indentation. + question_score: '10' + question_text: What is wrong with this code? + correct_answer: D + 3: + 2: + question_score: '10' + mp_choice_options: + - feedback: Good job! + option: 'You need commas in line 1: dog, cat, cow.' + - feedback: No, you don't need `{print}` + option: Line 1 needs to start with `{print}`. + - feedback: animals is correct. + option: Line 2 needs to say 'animal' instead of 'animals' + - feedback: '`{at} {random}` is the correct spelling' + option: '`{at} {random}` is spelled incorrectly' + correct_answer: A + hint: There's something wrong in line 1 + question_text: What's wrong with this code? + code: "animals {is} dog cat cow\n{print} animals {at} {random}" + 1: + mp_choice_options: + - option: '`{print}`' + feedback: '`{print}` is used to print text' + - feedback: '`{ask}` is used to ask a question' + option: '`{ask}`' + - option: '`{is}`' + feedback: '`{is}` is used to make a list' + - option: '`{at} {random}`' + feedback: Correct! + hint: Arbitrarily means without a plan or randomly. + question_score: '10' + correct_answer: D + question_text: What command(s) do you use to let Hedy pick something arbitrarily? + 5: + question_score: '10' + mp_choice_options: + - feedback: No, that's not wrong. + option: Line 1 needs to say `{print}` instead of `{ask}` + - feedback: No that's not wrong. + option: Line 2 needs to say `{ask}` instead of `{print}` + - feedback: No, that's not wrong. + option: Line 2 needs to say answers `{at} {random}` `{is}` yes, no, maybe + - feedback: That's right! + option: Nothing, this code is perfect + correct_answer: D + hint: Does this code even have a mistake? + code: "question {is} {ask} What do you want to know?\n{print} question\nanswers {is} yes, no, maybe\n{print} answers {at} {random}" + question_text: What is wrong in this code? + 7: + mp_choice_options: + - feedback: The remove command removes, the add command adds + option: The `{add}` command removes a random book from the list + - option: The `{add}` command adds a random book to a list + feedback: It doesn't. It adds your answer to the list! + - feedback: Correct! + option: The `{add}` command adds your favorite book to the list + - option: The `{add}` command prints your favorite book. + feedback: No, it adds your favorite book to the list + correct_answer: C + hint: The `{add}` command adds a book, but which one? + code: "books {is} Harry Potter, The Hobbit, Green Eggs and Ham\nyour_book {is} {ask} What is your favorite book?\n{add} your_book {to} books\n{print} books {at} {random}" + question_text: What does the `{add}` command do? + question_score: '10' + 9: + mp_choice_options: + - feedback: Maybe you want blue hair though! + option: 'Line 3 should say: `{remove}` blue `{from}` colors' + - feedback: You want to remove the chosen color so `{remove}` is right. + option: Line 3 should have an `{add}` command instead of a `{remove}` command + - feedback: Great job! + option: In line 4 the variable should be called colors instead of color + - feedback: Find the mistake! + option: Nothing, this is a correct code! + hint: Look at line 4 + question_score: '10' + correct_answer: C + question_text: What's wrong with this code? + code: "colors {is} blue, purple, green\nchosen_color {is} {ask} Which hair color wouldn't you like to have?\n{remove} chosen_color {from} colors\n{print} I will dye my hair color {at} {random}" + 6: + mp_choice_options: + - option: Line 2 needs to say question instead of answers + feedback: No that's not right + - option: Line 2 needs the `{is}` command + feedback: Correct + - option: Line 3 needs to say answer instead of answers + feedback: No the variable's called answers + - option: Nothing! This code is great! + feedback: Actually, line 2 has a mistake. + code: "question {is} {ask} What do you want to know?\nanswers yes, no, maybe\n{print} answers {at} {random}" + question_text: What's wrong with this code? + hint: There is something wrong with line 2. + question_score: '10' + correct_answer: B + 8: + mp_choice_options: + - option: You can't tell, because Hedy will `{print}` one of the 3 flavors `{at} {random}` + feedback: Take a look at the `{remove}` commands + - option: sea salt + feedback: sea salt is removed from the list + - feedback: Paprika is removed from the list + option: paprika + - option: sour cream + feedback: That's right! + correct_answer: D + question_score: '10' + question_text: What is the output of this code? + code: "crisps {is} sea salt, paprika, sour cream\n{remove} sea salt {from} crisps\n{remove} paprika {from} crisps\n{print} crisps {at} {random}" + hint: There are 3 flavors, bit 2 are removed. Which one remains? + 4: + mp_choice_options: + - option: "```\n{print} price\n```" + feedback: You don't want to `{print}` the word price, but you want to `{print}` one price out of your list `{at} {random}` + - option: "```\n{print} prices {at} {random}\n```" + feedback: Great! You've really paid attention. + - feedback: '`{at} {random}` is placed behind the variable.' + option: "```\n{print} {at} {random} price\n```" + - option: Nothing, this code is alright. + feedback: Look carefully for the mistake you missed! + hint: The variable name is prices + correct_answer: B + question_score: '10' + code: "prices {is} 1 dollar, 100 dollar, 1 million dollar\n{print} price {at} {random}" + question_text: What should change in line 2 to print a random price? + 10: + mp_choice_options: + - option: "```\n{remove} walked_yesterday {from} walkers\n```" + feedback: Super! + - option: "```\n{remove} walked_yesterday {to} walkers\n```" + feedback: '`{remove} {from}` or `{add} {to}`, not `{remove} {to}`' + - option: "```\n{remove} walkers {from} yesterday\n```" + feedback: yesterday is not a variable + - option: "```\n{add} walked_yesterday {to} walkers\n```" + feedback: This increased the chance that the person who walked yesterday now has to do it again. That's mean. + question_text: What should be on the _? + hint: The person who walked the dogs yesterday should be removed from the list. + code: "walkers {is} dad, mom, Sam, Petra\nwalked_yesterday {is} {ask} Who walked the dogs yesterday?\n{print} walked_yesterday shouldn't have to walk the dogs again today\n_\n{print} walkers {at} {random} , it's your turn to walk the dogs!" + question_score: '10' + correct_answer: A + 3: + mp_choice_options: + - option: "```\n{at} {random} {print} options\n```" + feedback: You're almost there. The order of the words isn't right yet. + - option: "```\n{print} rock {at} {random}\n```" + feedback: you don't always want the Hedy to {print} rock, sometimes you want scissors or paper. + - option: "```\n{print} options {at} {random}\n```" + feedback: Very good! + - option: Nothing, the code is correct! + feedback: Look carefully for the mistake + question_score: '10' + correct_answer: C + hint: The variable (the list) is called options. + code: "options {is} rock, paper, scissors\n{print} rock, paper, scissors {at} {random}" + question_text: How do you fix the mistake in line 2? + 11: + 1: + mp_choice_options: + - feedback: No + option: '`counter`' + - feedback: Correct + option: '`{range}`' + - feedback: No + option: '`{if}`' + - option: '`{for}`' + feedback: No + hint: What did you learn in this level? + code: "{for} i {in} _ 1 {to} 10\n {print} i" + correct_answer: B + question_text: What word should be at the place of the blank? + question_score: '10' + 4: + correct_answer: D + mp_choice_options: + - option: "```\n{for} i {in} {range} 0 {to} 10\n {print} i\n```" + feedback: Now Hedy prints the numbers from 0 to 10 instead of 10 to 0. + - feedback: Hedy would print negative numbers in this case. + option: "```\n{for} i {in} {range} 0 {to} 10\n {print} -1 * i\n```" + - feedback: Unfortunately this does not exist. + option: "```\n{for} i {in} {range} 10 {to} 0\n {print} i\n```" + - feedback: That's right! + option: "```\n{for} i {in} {range} 0 {to} 10\n {print} 10 - i\n```" + hint: It has to be a calculation… + output: "10\n9\n8\n7\n6\n5\n4\n3\n2\n1\n0" + question_score: '10' + question_text: Which code was used to get this output? + 10: + output: "Baby shark tututudutudu\nBaby shark tututudutudu\nBaby shark tututudutudu\nBaby shark" + mp_choice_options: + - option: "```\n{for} i {in} {range} 1 {to} 3\n {print} Baby shark tututudutudu\n {print} Baby shark\n```" + feedback: Mind the indentation + - option: "```\n{for} i {in} {range} 1 {to} 3\n {print} Baby shark tututudutudu\n{print} Baby shark\n```" + feedback: That's right! + - feedback: '`{range}` 0 `{to}` 3 is 4 times.' + option: "```\n{for} i {in} {range} 0 {to} 3\n {print} Baby shark tututudutudu\n{print} Baby shark\n```" + - option: "```\n{for} i {in} {range} 0 {to} 3\n {print} Baby shark tututudutudu\n {print} Baby shark\n```" + feedback: '`{range}` 0 `{to}` 3 is 4 times.' + hint: Mind the indentation + correct_answer: B + question_text: Which code belongs to this output? + question_score: '10' + 7: + mp_choice_options: + - option: "```\n{for} i {in} {range} 0 {to} 3\n```" + feedback: There's not always 3 people + - option: "```\n{for} i {in} {range} 1 {to} guests\n```" + feedback: The variable is not named guests + - feedback: Great! + option: "```\n{for} i {in} {range} 1 {to} people\n```" + - feedback: That's one order too many! + option: "```\n{for} i {in} {range} 0 {to} people\n```" + question_text: What should be on the place of the blank? + correct_answer: C + code: "{print} 'Welcome to Hedys diner'\npeople = {ask} 'How many people will be eating here tonight?'\n_\n food = {ask} 'What would you like to order?'\n {print} food" + hint: Use the variable 'people' + question_score: '10' + 9: + code: "age = {ask} 'How old are you?'\n{for} i {in} {range} 1 {to} age\n {print} 'Hip Hip Hoorray!'" + question_score: '10' + mp_choice_options: + - feedback: Try again + option: 1 time + - feedback: Try again + option: 2 times + - feedback: Try again + option: Never + - feedback: That's right! + option: That depends on how old you are + hint: '`{for}` i `{in}` `{range}` 1 `{to}` age' + question_text: How many times does Hedy chant Hip Hip Hooray? + correct_answer: D + 8: + mp_choice_options: + - feedback: The numbers don't appear. It doesn't say `{print}` i. + option: "```\n23\n24\n25\n```" + - feedback: The numbers don't appear. It doesn't say `{print}` i + option: "```\n23 hi 24 hi 25 hi\n```" + - feedback: Correct + option: "```\nhi\nhi\nhi\n```" + - feedback: No it will only appear 3 times. + option: The word 'hi' will appear 25 times in a row. + hint: It doesn't say `{print}` i + code: "{for} i {in} {range} 23 {to} 25\n {print} 'hi'" + question_score: '10' + question_text: What will be the output from this code? + correct_answer: C + 5: + mp_choice_options: + - option: The i in the last line need quotation marks + feedback: No it doesn't. + - feedback: You could use 1 to 5 just as well! + option: You can't use `{range}` 1 `{to}` 5 only `{range}` 1 `{to}` 10 + - option: Line 1 needs to start with an indention. + feedback: Not line 1... + - feedback: Perfect! + option: Line 2 needs to start with an indention + correct_answer: D + code: "{for} i {in} {range} 1 {to} 10\n{print} i" + hint: There is something wrong with the indention + question_text: What's wrong with this code? + question_score: '10' + 3: + mp_choice_options: + - option: "```\n{for} i {in} {range} 1 {to} 5\n {print} i\n{print} 'Once I caught a fish alive!'\n```" + feedback: Perfect + - option: "```\n{for} i {in} {range} 1 {to} 5\n{print} i\n{print} 'Once I caught a fish alive!'\n```" + feedback: This code won't work. You need an indent after {for}. + - option: "```\n{for} i {in} {range} 1 {to} 5\n {print} i\n {print} 'Once I caught a fish alive!'\n```" + feedback: Now Hedy will count '1 Once I caught a fish alive!, 2 Once I caught a fish alive! etc. + - option: "```\n{for} i {in} {range} 1 {to} 5\n {print} 'i'\n{print} 'Once I caught a fish alive!'\n```" + feedback: i is a variable and shouldn't have quotation marks + question_text: Which code was used to get this output? + hint: First all the numbers, then the sentence + correct_answer: A + output: "1\n2\n3\n4\n5\nOnce I caught a fish alive!" + question_score: '10' + 6: + mp_choice_options: + - option: 1 time + feedback: No + - feedback: No + option: 2 times + - feedback: That's right! + option: 3 times + - option: Never + feedback: No + code: "{for} i {in} {range} 0 {to} 2\n {print} 'Hello'" + hint: 0 also counts. So 0,1,2 that's 3 times. + question_score: '10' + question_text: How many times does the word Hello appear on your screen when you run the code? + correct_answer: C + 2: + mp_choice_options: + - option: "```\n1\n2\n3\n```" + feedback: Correct! + - feedback: That's not it + option: "```\n1 2 3\n```" + - option: "```\n1, 2, 3\n```" + feedback: That's not it + - feedback: That's not it + option: "```\n123\n```" + hint: How do the numbers appear in the screen? + question_text: What will be the output from this code? + correct_answer: A + code: "{for} i {in} {range} 1 {to} 3\n {print} i" + question_score: '10' + 4: + 2: + mp_choice_options: + - feedback: This quotation mark is skewed, you need a straight one. + option: "```\n{print} `hello`\n```" + - feedback: Correct + option: "```\n{print} 'hello'\n```" + - option: "```\n{print} hello\n```" + feedback: There are no quotation marks here! + - option: "```\n{print} ,hello,\n```" + feedback: This is a comma, you need quotation marks. + question_text: Which code uses the proper quotation marks? + question_score: '10' + correct_answer: B + hint: Pick the right quotation marks. + 5: + correct_answer: C + mp_choice_options: + - feedback: Never put the quotation mark in front of the `{print}` command. + option: "```\n'{print} options {at} {random}'\n```" + - option: "```\n{print} 'options' {at} {random}\n```" + feedback: options is a variable. You don't literally want to print 'options {at} {random}'. + - option: "```\n{print} options {at} {random}\n```" + feedback: That's right + - option: Nothing, the game already works! + feedback: Look carefully. There is an error. + question_text: What has to be changed in order for the game to work? + question_score: '10' + code: "options {is} rock, paper, scissors\n{print} 'options {at} {random}'" + hint: You don't want Hedy to literally print 'options {at} {random}', you want it to print 'rock' or 'paper' or 'scissors'. + 10: + mp_choice_options: + - feedback: A list doesn't need quotation marks + option: Quotation marks are missing in line 1 + - feedback: Correct + option: Quotation marks are missing in line 2 + - option: Quotation marks are missing in both line 2 and 3 + feedback: Line 3 doesn't need quotation marks because it's not printed literally + - feedback: You missed one! + option: Nothing, this code has no mistakes + code: "people {is} mom, dad, Emma, Sophie\n{print} The dishes are done by...\n{print} people {at} {random}" + correct_answer: B + question_score: '10' + hint: One line needs quotation marks, because you want it to be printed literally. + question_text: Which statement is true? + 8: + mp_choice_options: + - feedback: We need quotation marks + option: "```\n{print} So you pick door door\n```" + - feedback: If the player chooses door 3, Hedy will say 'So you pick 3 3 + option: "```\n{print} 'So you pick ' door door\n```" + - feedback: Super! + option: "```\n{print} 'So you pick door ' door\n```" + - feedback: Hedy will literally print 'So you pick door door + option: "```\n{print} 'So you pick door door'\n```" + hint: The second word door should be replaced with the number, the first should still be the word door... + question_score: '10' + correct_answer: C + code: "{print} 'Welcome at the money show!'\n{print} 'In front of you are 3 doors'\ndoor {is} {ask} 'Which door do you choose?'" + question_text: What would be a good next line for this code? + 7: + mp_choice_options: + - feedback: Correct! + option: Quotation marks are missing in line 1 + - option: Quotation marks are missing in line 2 + feedback: A variable doesn't need quotes + - feedback: You don't want Hedy to literally print 'answers {at} {random}' so no quotation marks needed here! + option: Quotation marks are missing in line 3 + - option: Nothing, this code is good as is! + feedback: Look carefully. You missed a mistake! + question_text: What's wrong with this code? + code: "question {is} {ask} What do you want to know?\nanswers {is} yes, no, maybe\n{print} answers {at} {random}" + hint: Check each line on whether they'd need quotation marks or not. + correct_answer: A + question_score: '10' + 4: + mp_choice_options: + - option: "You need quotation marks around the word `{print}`, like this: `'{print}'`." + feedback: The quotation marks shouldn't be around the command itself. + - feedback: Super! + option: You need quotation marks around the words you want to print. + - feedback: Both `{print}` and `{ask}` require quotation marks + option: You do not need quotation marks when using the `{ask}` command + - feedback: Unfortunately, Hedy is stricter than that. + option: You can choose yourself whether to use quotation marks or not. + hint: From level 4 on you need to use quotation marks. + question_text: Which statement is true? + question_score: '10' + correct_answer: B + 1: + mp_choice_options: + - feedback: That's right + option: "```\n{print} 'Im very excited to take this quiz!'\n```" + - option: "```\n{print} Im very excited to take this quiz!\n```" + feedback: '{print} now needs quotation marks!' + - option: "```\n{print} 'I'm very excited to take this quiz!'\n```" + feedback: do not use apostrophe or use backticks instead + - option: "```\n{print} 'I'm very excited to take this quiz!\n```" + feedback: careful when using quotes and apostrophe + hint: In level 4 you need quotation marks for 2 commands. + question_score: '10' + correct_answer: A + question_text: Which of these codes is correct? + 6: + mp_choice_options: + - feedback: Great! You get it! + option: "```\n{print} 'You win...' prices {at} {random}\n```" + - option: "```\n{print} You win... 'prices {at} {random}'\n```" + feedback: Hedy will literally print 'prices {at} {random}' + - option: "```\n{print} You win... prices {at} {random}\n```" + feedback: You need some quotation marks! + - option: "```\n{print} 'You win... prices {at} {random}'\n```" + feedback: Hedy will literally print 'prices {at} {random}'' + question_text: What would be a good next line in this code? + code: prices {is} 1 dollar, 100 dollars, 1 million dollars + correct_answer: A + question_score: '10' + hint: 'Think carefully: what is a variable and should be outside of the quotation marks? And what are normal words that should be inside?' + 3: + mp_choice_options: + - option: "```\n{print} Hi Im Hedy\n```" + feedback: Add quotation marks please! + - feedback: Both before and after the words you want to print should be a quotation mark. + option: "```\n{print} 'Hi Im Hedy\n```" + - feedback: The first quotation mark should be behind the word `{print}` + option: "```\n'{print} Hi Im Hedy'\n```" + - feedback: Perfect! + option: "```\n{print} 'Hi Im Hedy'\n```" + correct_answer: D + question_text: Where are the quotation marks used correctly? + hint: Both before and after the words you want to print should be a quotation mark. + question_score: '10' + 9: + code: "clubs {is} Real Madrid, Bayern Munchen, Manchester United, Ajax\n{print} clubs {at} {random} ' is going the win the champions league'" + hint: What are Hedy's options to randomly pick from? + mp_choice_options: + - feedback: Hedy could `{print}` that + option: Ajax is going to win the champions league + - feedback: Hedy could `{print}` that + option: Real Madrid is going to win the champions league + - option: Bayern Munchen is going to win the champions league + feedback: Hedy could `{print}` that + - feedback: That's right. It's not in the list + option: FC Barcelona is going to win the champions league + question_text: What will never appear in your output screen? + question_score: '10' + correct_answer: D + 10: + 5: + question_score: '10' + question_text: What word should be on the `_` with these digital dice? + correct_answer: B + mp_choice_options: + - option: players + feedback: It would say 'Ann throws Jesse', instead of 'Ann throws 6'. + - option: choices + feedback: That's right! + - feedback: You are very close. But you need Hedy to pick from the list called 'choices' not 'choice'... + option: choice + - feedback: Look at the names of the variables. + option: dice + hint: Hedy needs to pick a number `{at} {random}` + code: "{print} 'Welcome to the digital dice!'\nplayers = Ann, John, Jesse\nchoices = 1, 2, 3, 4, 5, 6\n{for} player {in} players\n {print} player ' throws ' _ {at} {random}" + 8: + mp_choice_options: + - option: "```\n'name gets a color shirt'\n```" + feedback: That's not it! + - option: "```\nname 'gets a ' colors {at} {random} ' shirt'\n```" + feedback: Great job! This was a hard one! + - feedback: You want each name printed. So the first word should not be names but... + option: "```\nnames 'gets a ' color {at} {random} ' shirt'\n```" + - feedback: There is no variable named people.. + option: "```\npeople ' gets a colors shirt'\n```" + code: "names = Donna, Tommy, Ben\ncolors = blue, red, purple\n{for} name {in} names\n {print} _" + question_text: What should be on the `_` in this code that decides which color shirt you get? + correct_answer: B + hint: Mind the quotation marks and the names of the variables + question_score: '10' + 7: + mp_choice_options: + - feedback: You are on fire! + option: "```\n{for} name {in} names\n```" + - feedback: No it should be for each name in the list nameS, so the other way around + option: "```\n{for} names {in} name\n```" + - option: "```\n{for} food {in} food\n```" + feedback: Each name should be told what they will have for dinner. + - option: "```\n{for} name {in} food\n```" + feedback: Each name should be told what they will have for dinner. + question_text: What line should be on the `_` in this code that decides what these people will have for dinner? + correct_answer: A + code: "names = Ron, Leslie, April, Andy\nfood = pasta, fries, salad\n_\n {print} name ' has to eat ' food {at} {random} ' for dinner'" + hint: Each name should be told what they will have for dinner. + question_score: '10' + 9: + code: "courses = appetizer, main course, dessert\nnames = Timon, Onno\n{for} name {in} names\n {for} course {in} courses\n food = {ask} name ', what would you like to eat as your ' course '?'\n {print} name ' orders ' food ' as their ' course" + mp_choice_options: + - option: Timon, what would you like to eat as your appetizer? + feedback: Perfect! + - option: Onno, what would you like to eat as your appetizer? + feedback: Timon is first on the list! + - option: Timon, what would you like to eat as your dessert? + feedback: Appetizers are first in the list + - option: You don't know that. Hedy will choose `{at} {random}`. + feedback: There is no `{at} {random}` in this code... + question_score: '10' + question_text: What is the first question Hedy will ask you when you run the program? + correct_answer: A + hint: The first options from both lists are chosen. + 3: + mp_choice_options: + - feedback: Line 2 says {for} each animal in the list of animals. So each animal is {print}ed. + option: dogs are lovely pets + - option: dogs, cats, hamsters, chickens are lovely pets + feedback: Each animal gets their own line in the output. + - option: "dogs are lovely pets\ncats are lovely pets\nhamsters are lovely pets\nchickens are lovely pets" + feedback: Great! + - option: You don't know yet. Because it chooses one of the animals {at} {random}. + feedback: Line 2 says {for} each animal in the list of animals. So each animal is {print}ed. + correct_answer: C + question_text: Which output is correct? + code: "animals = dogs, cats, hamsters, chickens\n{for} animal {in} animals\n {print} animal ' are lovely pets'" + hint: Line 2 says {for} each animal in the list of animals. So each animal is printed + question_score: '10' + 2: + mp_choice_options: + - feedback: Line 2 says `{for}` each meal in the list of meals. So each meal is printed. + option: I love pizza + - option: I love pasta + feedback: Line 2 says `{for}` each meal in the list of meals. So each meal is printed. + - option: I love pancakes + feedback: Line 2 says `{for}` each meal in the list of meals. So each meal is printed. + - feedback: Great! + option: "I love pizza\nI love pasta\nI love pancakes" + correct_answer: D + hint: Line 2 says for each meal in the list of meals. So each meal is printed. + code: "meals = pizza, pasta, pancakes\n{for} meal {in} meals\n {print} 'I love ' meal" + question_score: '10' + question_text: Which output is correct? + 1: + mp_choice_options: + - feedback: That's not it + option: "```\n{for} each compliment\n```" + - feedback: You deserve all those compliments! + option: "```\n{for} compliment {in} compliments\n```" + - feedback: That's not it + option: "```\n{if} compliment {in} compliments\n```" + - feedback: Almost there! + option: "```\n{for} compliments {in} compliment\n```" + question_text: What do we need to fill in on the `_` if we want to print each compliment? + hint: '`{for}` each compliment in the lists of compliments...' + question_score: '10' + correct_answer: B + code: "compliments = perfect, great job, amazing\n_\n {print} compliment" + 6: + question_text: Which of the answers below is a possible outcome when you run the code? + mp_choice_options: + - option: "```\nKelly chooses rock\n```" + feedback: Meredith wants to play too! + - option: "```\nMeredith chooses scissors\nKelly chooses rock\n```" + feedback: So close! But Kelly is first in the list, so she goes first + - feedback: Kelly wants to play too! + option: "```\nMeredith chooses paper\n```" + - feedback: Amazing! + option: "```\nKelly chooses paper\nMeredith chooses scissors\n```" + question_score: '10' + code: "choices = rock, paper, scissors\nplayers = Kelly, Meredith\n{for} player {in} players\n {print} player ' chooses ' choices {at} {random}" + correct_answer: D + hint: Each player will pick an option. The player that's first on the list will go first. + 4: + mp_choice_options: + - option: Line 2 needs to start with 4 spaces as indentation + feedback: No it doesn't. Only line 3 needs indentation, which it has. + - feedback: Line 2 is a `{for}`command so line 3 does need to start with an indent. + option: Line 3 does not need to start with 4 spaces as indentation + - feedback: Good job! + option: Line 3 should say item instead of groceries + - feedback: No it does not. + option: Line 2 should say groceries instead of item + hint: Line 2 says `{for}` each item in the list of groceries + question_text: What's wrong with this code? + correct_answer: C + code: "groceries = apples, bread, milk\n{for} item {in} groceries\n {print} 'We need ' groceries" + question_score: '10' + 10: + mp_choice_options: + - feedback: That is not true, you could end up without a prize. + option: Everybody will always win a prize. + - option: All the prizes always go to one single person. + feedback: That is not true. All the prizes are given away, but to random people + - option: Larry will never win a prize + feedback: That is not true. Larry has the same odds as the others + - option: Someone might win two prizes + feedback: You get it! + correct_answer: D + code: "prizes = 1 million dollars, car, sandwich\nnames = Bob, Patrick, Sandy, Larry\n{for} prize {in} prizes\n {print} 'The ' prize ' is won by ' names {at} {random}" + hint: Try to imagine the output of this code. + question_score: '10' + question_text: What is true about this code? + 6: + 7: + mp_choice_options: + - option: It could have been `price = 3` just as well. + feedback: No, that's not true. Hedy needs to add 3 dollars to the total. + - feedback: Hedy would understand, but it wouldn't be right. + option: Because Hedy doesn't understand `price = 3`. + - option: Because Hedy would otherwise forget about the previous order. The price would be 3 dollars in total. + feedback: That's right! + - option: Because the price is 0 dollars to begin with. + feedback: That's true, but not the reason + hint: The price shouldn't be 3, but 3 dollars more than it already was + code: "{print} 'Welcome at Hedys diner'\nfood = {ask} 'What would you like to eat?'\nprice = 0\n{if} food {is} hamburger price = price + 15\n{if} food {is} fries price = price + 6\ndrinks is {ask} 'What would you like to drink?'\n{if} drinks {is} coke price = price + 3\n{if} drinks {is} water price = price + 1\n{print} price ' dollars please'" + question_score: '10' + question_text: Why does line 7 say 'price is price + 3' instead of 'price is 3'? + correct_answer: C + 4: + mp_choice_options: + - feedback: Mind, Hedy also prints 'Your lucky number is...' + option: '30' + - feedback: Please try again. + option: '10' + - option: Your lucky number is... 30 + feedback: That's right! + - option: Your lucky number is... 10 + feedback: Her lucky number is name times age... + question_text: Kim is 10 years old. What will Hedy print for her? + code: "name = {ask} 'How many letters are in your name?'\nage = {ask} 'How old are you?'\nluckynumber = name*age\n{print} 'Your lucky number is...' luckynumber" + hint: 'Kim has 3 letters, she is 10 years old so: letters times age = 3*10 = 30.' + question_score: '10' + correct_answer: C + 2: + mp_choice_options: + - option: '`-`' + feedback: That's not it + - option: plus + feedback: That's not it + - option: '`*`' + feedback: That's not it + - option: '`+`' + feedback: Correct! + question_score: '10' + hint: It's the plus sign. + correct_answer: D + question_text: What do you use when you want to add two numbers? + 10: + mp_choice_options: + - feedback: You are allowed to use the `=` sign as well + option: You can only fill in the word is on the `_` + - option: You can fill in either the word is or the `=` sign on the `_` + feedback: Amazing! + - option: You have to fill in =is= on the `_` + feedback: No, one `=` sign is enough + - feedback: You can also use `=` with words. + option: You can only use the `=` sign when working with numbers, not with words. + hint: '`{is}` and `=` are both allowed' + correct_answer: B + question_score: '10' + question_text: Which statement is true? + code: "name _ Hedy\n{print} name 'is walking trough the forrest'" + 8: + mp_choice_options: + - option: There shouldn't be quotation marks in line 2 + feedback: No, there should be! + - feedback: Correct! + option: The variable is called correct answer, but a variable's name can only be 1 word. So it should be correct_answer + - option: The `{if}` and `{else}` commands should be in the same line. + feedback: No, that's not true. + - feedback: Variable names can be similar, but they can't be 2 words... + option: The variable in line 2 can't be called answer, because it is too similar to the variable correct answer. + code: "correct answer = 3*12\nanswer = {ask} 'What is 3 times 12?'\n{if} answer {is} correct answer {print} 'Good job!'\n{else} {print} 'No... It was ' correct answer" + correct_answer: B + question_text: Why is this code incorrect? + hint: Inspect what the variables are called. + question_score: '10' + 3: + hint: Mind the quotation marks!! + correct_answer: C + mp_choice_options: + - feedback: This would be the right answer if there were no quotation marks. + option: '30' + - feedback: Try again.. + option: '13' + - feedback: Correct! There are quotation marks, so Hedy will print it literally. + option: 3*10 + - option: Nothing, Hedy will give an error message. + feedback: No, Hedy will print it literally. + question_text: What's Hedy's output when you run this code? + code: "{print} '3*10'" + question_score: '10' + 9: + mp_choice_options: + - feedback: (2 bananas + 3 hygiene) * 10 football = 5*10 =? + option: 10% + - feedback: (2 bananas + 3 hygiene) * 10 football = 5*10 =? + option: 32% + - option: 50% + feedback: Super! You are 100 percent smart! + - feedback: (2 bananas + 3 hygiene) * 10 football = 5*10 =? + option: 100% + question_score: '10' + correct_answer: C + question_text: Imagine you love football a 10, you've eaten 2 bananas and have washed your hands 3 times today. How smart does the silly fortune teller think you are? + hint: (2 bananas + 3 hygiene) * 10 football = 5*10 =? + code: "{print} 'Im Hedy the silly fortune teller'\n{print} 'I will predict how smart you are!'\nfootball = {ask} 'On a scale of 0 to 10 how much do you love football?'\nbananas = {ask} 'How many bananas have you eaten this week?'\nhygiene = {ask} 'How many times did you wash your hands today??'\nresult = bananas + hygiene\nresult = result * football\n{print} 'You are ' result 'percent smart.'" + 1: + mp_choice_options: + - option: '20' + feedback: Correct! + - feedback: No, the plus sign is used in addition + option: '12' + - feedback: No, Hedy will calculate the answer + option: 2*10 + - feedback: Mind it's a calculation. + option: '210' + question_text: What's Hedy's output when you run this code? + code: '{print} 2*10' + correct_answer: A + hint: The `*` is used as a multiplication sign + question_score: '10' + 5: + mp_choice_options: + - option: 5 dollars + feedback: Unfortunately, it's not that cheap. + - feedback: No, it's 10 dollars each. + option: 10 dollars + - feedback: The * means multiplication. + option: 15 dollars + - option: 50 dollars + feedback: Great! + question_text: If 5 people eat at this restaurant, how much do they have to pay in total? + code: "{print} 'Welcome to Hedys!'\npeople = {ask} 'How many people are eating with us tonight?'\nprice = people * 10\n{print} 'That will be ' price 'dollar please'" + correct_answer: D + hint: '`price` `is` `people` `times` 10' + question_score: '10' + 6: + mp_choice_options: + - option: 15 dollars + feedback: Super! + - feedback: The fries are 6 dollars + option: 6 dollars + - option: 0 dollars + feedback: The hamburger isn't free! + - option: 21 dollars + feedback: That's the price for a hamburger and fries! + hint: Mind the fourth line. + code: "{print} 'Welcome at Hedys diner'\nfood = {ask} 'What would you like to eat?'\nprice = 0\n{if} food {is} hamburger price = 15\n{if} food {is} fries price = 6" + question_text: How much does a hamburger cost in this virtual restaurant? + question_score: '10' + correct_answer: A diff --git a/content/slides/kab.yaml b/content/slides/kab.yaml index 0967ef424bc..3de088e10b5 100644 --- a/content/slides/kab.yaml +++ b/content/slides/kab.yaml @@ -1 +1,565 @@ -{} +levels: + 0: + 2: + header: Programming + text: "Programming is giving instructions to a computer, using the language of the computer.\n\nSuch a language is called a \"programming language\"." + 3: + header: Programming Language + text: "Maybe you already know some programming languages?\nSome examples are:\n* Scratch\n* Python\n* HTML" + 4: + header: Programming + text: "If you can program, you can do many cool things:\n* Build interactive stories\n* Create computer drawings and draw these on paper or fabric\n* Build your own apps to use on your phone" + 7: + header: Programming in Hedy + code: '{print} Welcome to Hedy!' + text: We start the code with the Run code button underneath the code. + 8: + code: '{print} Welcome to Hedy!' + header: Programming in Hedy + text: Output appears on the right-hand side. + 9: + text: The output can also be a drawing. + header: Programming in Hedy + code: "{forward} 100\n{turn} {left}" + 6: + header: Programming in Hedy + text: Code words will be shown in pink. + code: '{print} Welcome to Hedy!' + 5: + header: Programming in Hedy + text: In Hedy we use special codes, like `{print}`. + code: '{print} Welcome to Hedy!' + 1: + header: Welcome to Hedy! + text: Hedy is a programming language. + 1: + 5: + header: '{echo}' + code: "{print} Hello!\n{ask} What is your name?\n{echo} hello" + text: "As you could see in the previous example. If you use the `{ask}` command, you can ask a question.\nThe answer, however doesn't show in the output screen.\n\nIf you do want the answer to show, you can use the final command of this level: `{echo}`.\n`{echo}` is used to repeat the answer of an `{ask}`." + 7: + editor: /hedy/1 + header: Programming! + text: Adventures are shown in tabs. + 12: + header: Debugging + debug: 'True' + code: "I am DJ Hedy\n{print} What song would you like to hear?\n{ask} I like that song too!\n{print} Next up... {echo}" + text: Debugging a code means getting rid of mistakes in the code. Let's debug this code together. Click the ladybug button to start the debugger. + 3: + header: The {print} command + code: "{print} Welcome to Hedy!\n{print} Start programming now!" + text: "You can change the text after the print command to whatever you want.\n\nOr you could print multiple lines by adding another line of code that also starts with `{print}`." + 2: + text: "The first code that you can use in level 1 is `{print}`.\n\n`{print}` is used to show text on the screen." + code: '{print} Show text on the screen' + header: '{print}' + 11: + text: '`{turn}` is used to make the turtle turn left or right.' + header: 'Drawing with the turtle: {turn}' + code: "{forward} 50\n{turn} {left}" + 1: + header: Welcome to level 1! + text: "We will start level 1 by making stories in Hedy!\n\nWe need three text codes to create interactive stories." + 8: + header: Programming! + text: The yellow arrow buttons can be used to copy examples. + editor: /hedy#print_command + 10: + code: '{forward} 50' + text: '`{forward}` is used to move the turtle forward.' + header: 'Drawing with the turtle: {forward}' + 4: + code: "{print} Welcome to your own rock scissors paper!\n{ask} What will you choose?" + header: '{ask}' + text: "The second code that you can use in level 1 is `{ask}`.\n\n`{ask}` is used to ask a question that can be answered." + 9: + header: Drawing with the turtle + text: Now that we have seen at text codes, we will now look at drawing codes next. + 6: + text: "With `{print}`, `{ask}` and `{echo}` you can already create a little story.\nThis is a good time to try the Parrot, Story and Rock, Paper Scissors adventures." + header: Programming! + editor: /hedy/1 + 13: + text: Enjoy the adventures in level 1! + header: Let the programming fun begin! + 2: + 3: + header: Interactive + code: "name {is} {ask} What is your name?\n{print} Hello name" + text: "We can also set a variable by asking questions.\n\nThe answer to the question is stored in the variable.\n\nThis way we don't need the `{echo}` command." + 6: + header: Sleep 5 + code: "pause {is} 10\n{print} My favorite colour is...\n{sleep} pause\n{print} green!" + text: "You can add a number after the `{sleep}` command if you want the pause to be longer.\n\nIf you want, you could even use a variable instead of a number to decide the duration of the sleep command." + 7: + header: Debugging + text: Debugging a code means getting rid of mistakes in the code. Let's debug this code together. Click the ladybug button to start the debugger. + debug: 'True' + code: "{print} Welcome to the donut shop!\nfilling {is} What kind of filling would you like?\n{print} You have chosen... Filling! Yum!\ntopping {ask} What kind of topping would you like?\ntopping is delicious!\n{print} I'll go get your donut. {sleep}\n{print} Here you go! A filling donut with toping!\n{ask} Have a nice day!" + 8: + header: Let the programming fun begin! + text: Enjoy the adventures in level 2! + 4: + text: Now that we use variables, we can use multiple variables instead of just one `{echo}` command. + code: "name {is} {ask} What is your name?\n{print} Hello name\nage {is} {ask} How old are you?\n{print} name is age years old." + header: Multiple variables + 2: + text: To make or 'set' a variable we use the `{is}` command + code: "name {is} Hedy\nage {is} 15\n{print} name is age years old" + header: Variables + 5: + text: You can also use the `{sleep}` command to pause the code for a while. + header: Sleep + code: "{print} My favorite colour is...\n{sleep} 2\n{print} green!" + 1: + header: Welcome to level 2 + text: "In this level you will learn to use variables.\n\nA variable is a word that can be used to store information.\n\nFor example: a name, age or favorite sports team." + 3: + 1: + header: Welcome to level 3 + text: In this level you'll learn how to make a list, add and remove items form your lists and pick a random item off that list. + 3: + header: At random + text: "You can use the list with the `{at}` `{random}` command.\nThe computer will randomly pick one item of the list.\nEvery time you run this code the output will differ." + code: "animals {is} dogs, cats, kangaroos\n{print} animals {at} {random}" + 5: + header: Add to + text: "You can add items to a list with the `{add}` `{to}` command.\n\nYou can choose what to add to the list or you can use the `{add}` `{to}` command in combination with the `{ask}` command.\nThis way you can let the player decide what to add to the list." + code: "animals {is} dog, cat, kangaroo\nlike {is} {ask} What is your favorite animal?\n{add} like {to_list} animals\n{print} I choose animals {at} {random}" + 4: + text: You can use the `{at}` `{random}` command in a sentence as well. + header: At random in a sentence + code: "animals {is} dogs, cats, kangaroos\n{print} My favorite animal is animals {at} {random}" + 8: + text: Enjoy the adventures in level 3! + header: Let's get to work! + 7: + debug: 'True' + header: Debugging + editor: "music_genres {is} rock, pop, metal, indie, jazz\nchosen_genre is music {at} {random}\n{print} Let's listen to chosen genre\nnice {ask} Do you like that genre?\n{remove} chosen_genre {from} chosen_genre\nsecond_choice {is} music_genres\n{print} or do you prefer... second_choice {at} {random}\n{remove} second_choice {to} music_genres\n{print} I like music_genre {random} best!" + text: Let's debug this code! + 6: + code: "animals {is} dog, cat, kangaroo\ndislike {is} {ask} What animal do you not like?\n{remove} dislike {from} animals\n{print} I choose animals {at} {random}" + text: "The opposite of the `{add}` `{to}` command is the `{remove}` `{from}` command.\nThis command removes an item from a list." + header: Remove from + 2: + header: Making a list + text: "You make a list with `{is}`.\n\nSeparate the items on your list with a comma." + code: animals {is} dogs, cats, kangaroos + 4: + 4: + code: "{print} 'print with quotes!'" + text: Each time you use the `{print}` command you need to put the text that you want to appear on the screen in quotation marks. + header: Quotation marks with print + 5: + header: Quotation marks with ask + text: This also goes for the `{ask}` command. + code: name {is} {ask} 'name please?' + 10: + header: Debugging + code: "{clear}\n{print} What a nice day to go to the beach!\n{ask} 'Do you want to build a sandcastle or swim in the ocean?'\n{print} 'You would like to activity '\n{print} 'I'd like to do that too'\n{print} 'Look at these beautiful seashells!'\ncolors {is} 'orange, silver, white, brown'\n{print} 'I love the colors {at} {random} one!'\nchoice {is} {ask} Which one do you like?" + debug: 'True' + text: Let's debug this code! + 9: + code: "{print} '3'\n{clear}\n{print} '2'\n{clear}\n{print} '1'\n{clear}\n{print} 'SURPRISE!'" + header: Clear + text: "In this level you'll also learn the {clear} command.\nWith this command you can wipe all the text from your output screen.\n\nBe careful that you always use a sleep command too. If you don't the computer will wipe all the text before you can read it!" + 2: + text: 'In the previous levels, you might have come across this problem:' + header: Problem + code: "name {is} Sophie\n{print} My name is name" + debug: 'True' + 3: + text: "In this level we will fix this problem by using quotation marks.\n\nThis also makes our code look more like 'real' Python code." + header: Fixing it with quotation marks + 8: + debug: 'True' + code: "{print} 'This won't work!'" + header: Quotation marks and contractions + text: "Be careful! Now that you are using quotation marks, you can't use apostrophes in contractions.\n\nPlease try to print a contraction like \"you're\" or \"I'm\" in the screen below and see what happens...." + 1: + header: Welcome to level 4 + code: "{print} 'print with quotes!'" + text: In this level you will learn how to use quotation marks. + 7: + code: "name {is} Harry\n{print} 'Hello ' name ', how are you?'" + header: Quotation marks and variables + text: "When variable names are used in the middle of a sentence, you have to leave the variables out of the quotation marks.\nThe rest of the sentence however, does need quotation marks. That looks like this:" + 11: + text: Enjoy the adventures in level 4! + header: Ready, Set, Go! + 6: + code: "name {is} Harry\n{print} 'Hello ' name" + text: "You do not want variable names to be printed on the screen.\nThis is why variables should be left out of the quotation marks, like this:" + header: Quotation marks and variables + 5: + 4: + header: else + code: "{if} name {is} Hedy {print} 'nice' {else} {print} 'boo!'" + text: "When using an `{if}` command, you can also add an `{else}` command.\nIf the answer is Hedy, the computer will print 'nice'.\nBut if the answer is something else the computer will print 'boo'" + 5: + code: "{if} name {is} Hedy {print} 'nice'\n{else} {print} 'boo!'" + header: Long lines + text: "You might have noticed that your lines can get very long when you have both an `{if}` and an `{else}` command.\n\nYou can choose to separate commands and put them on 2 lines, like this:" + 7: + text: Let's debug this code! + header: Debugging + code: "{print} Welcome to HedyAir Security!\nboarding_pass {is} {ask} 'Do you have your boarding pass?'\n{if} bording_pass yes {print} Great!\n{else} Please, get your boarding pass ready.\npassport {is} 'Can I see your passport, please?'\n{if} passport {is} yes 'thank you'\n{else} 'You can't fly without a passport'\ndeclare {is} {ask} Do you have anything to declare?\n{if} declare {is} yes\nitem_to_declare {is} {ask} 'What would you like to declare'\n{else} Alright\n{print} Thank you. Please head to gate A22.'" + debug: 'True' + 8: + text: Enjoy the adventures in level 5! + header: Let's go! + 2: + code: "name {is} {ask} 'what is your name?'\n{if} name {is} Hedy {print} 'nice'" + header: if + text: "The `{if}` command allows you to choose between two options.\nIn this example the computer will print 'nice' if the given answer is Hedy.\nIf the answer is not Hedy, the computer will do nothing." + 3: + debug: 'True' + text: "When using the `{if}` command, don't forget to use the `{print}` command.\nThis code will not work!" + header: Don't forget to print + code: "{if} name {is} Hedy 'nice'" + 1: + header: Welcome to level 5 + text: 'In this level you will learn to use 3 new commands: `{if}`, `{else}` and `{in}`.' + 6: + text: "If you have practised with the `{if}` and `{else}` commands, you can also try the `{in}` command.\n\nWith `{in}` you can let the computer check if an item is in a list, for example:\n\nPlease note that Hedy is case sensitive. This means that if you answer \"Green\" instead of \"green\", Hedy will print \"meh\"." + header: Another new command + code: "pretty_colors {is} green, yellow\nfavorite_color {is} {ask} 'What is your favorite color?'\n{if} favorite_color {in} pretty_colors {print} 'pretty!'\n{else} {print} 'meh'" + 6: + 10: + header: Let's get to work! + text: Enjoy the adventures in level 6! + 2: + code: "{print} '5 plus 5 is ' 5 + 5" + header: Addition + text: If you want to calculate an addition, simply use the plus sign. + 8: + text: 'You can use calculations with numbers, but you can also use variables to do calculations, like this:' + header: Calculations with variables + code: "number_1 = {ask} 'Fill in the first number:'\nnumber_2 = {ask} 'Fill in the second number:'\ncorrect_answer = number_1 * number_2\n{print} number_1 ' times ' number_2 ' is ' correct_answer" + 6: + header: Summary + text: In summary, you can use +, -, * and / to do maths. + code: "{print} '5 plus 5 is ' 5 + 5\n{print} '5 minus 5 is ' 5 - 5\n{print} '5 times 5 is ' 5 * 5\n{print} '5 divided by 5 is ' 5 / 5" + 4: + header: Multiplication + code: "{print} '5 times 5 is ' 5 * 5" + text: If you want to do multiplications, you can use the asterisk. + 5: + header: Division + text: You can use the slash for division. + code: "{print} '5 divided by 5 is ' 5 / 5" + 1: + header: Welcome to level 6 + text: In this level we are adding maths to our codes. + 7: + header: The = symbol + text: "From now on you can also use the = symbol instead of the `{is}` command.\nThis goes for both numbers and words, and it also goes after the `{if}` or `{else}` commands." + code: "name = Hedy\nanswer = 20 + 4" + 3: + code: "{print} '5 minus 5 is ' 5 - 5" + text: If you want to subtract, you can use the minus sign. + header: Subtraction + 9: + text: Let's debug this code! + header: Debugging + debug: 'True' + code: "{print} 'This is the water park ticket machine'\n{print} 'Price list: Children under 12 $3, Adults $5'\n{print} 'Mondays are 25% off'\namount_of_children = 'How many kids tickets would you like?'\namount_of_adults = 'How many adult tickets would you like?'\nday_of_the_week = {ask} 'What day is it?'\n{clear}\nchild_price = amount of children * 3\nadult_price = amount_of_adults + 5\ntotal_price = adult_price * child_price\n{if} day {is} monday\ntotal_price = total_price * 0.25\n{print} 'That will be total_price please'" + 7: + 3: + text: When using the repeat command, do not forget the `{print}` command. + debug: 'True' + header: Don't forget the print command + code: "{repeat} 5 {times} 'Help!'" + 2: + code: "{print} 'The prince kept calling for help'\n{repeat} 5 {times} {print} 'Help!'\n{print} 'Why is nobody helping me?'" + text: "If you want to repeat a line of code, you can use the `{repeat}` 3 `{times}` code.\nIf you want to repeat the line more times, simply change the number.\n\nFor example: If you are programming a story where your character shouts for help for 5 times, it could look like this:" + header: repeat 3 times + 4: + header: Repeat an ask command + text: You can also repeat an `{ask}`, `{if}` or `{else}` command multiple times. + code: "{repeat} 2 {times} answer = {ask} 'Did you know you could ask a question multiple times?'\n{if} answer {is} yes {repeat} 2 {times} {print} 'You knew that already!'\n{else} {repeat} 3 {times} {print} 'You have learned something new!'" + 5: + header: Debugging + text: Let's debug this code! + debug: 'True' + code: "{print} You gave stranded on a desert island.\n{repeat} 3 'Help!'\nrescued = {ask} Has anybody come to the rescue?\n{if} rescued yes {is}\n{print} Lucky!\n{else} {repeat} 3 {times} 'HELP!'\nrescued = 'What about now?'\n{if} yes\n{print} 'Hurray!\n{else} 'That's a shame... Oh well... time to build a shelter and find some food.'" + 1: + text: In this level you will learn how to repeat a line of code as many times a you'd like. + header: Welcome to level 7 + 6: + text: Enjoy the adventures in level 7! + header: Ready Set Go! + 8: + 5: + debug: 'True' + text: "The same goes for the `{if}` and `{else}` commands.\nThese were the commands before:" + header: if and else before + code: "{if} name {is} Hedy {print} 'nice'\n{else} {print} 'boo!'" + 8: + header: if statements inside if statements + text: "You might have thought of trying to put an if command inside a repeat command, or inside another if command.\nFor now, this is not possible yet. In the higher levels, it will be allowed, but for now let's focus on practising the `{if}` `{else}` and `{repeat}` commands with proper indentation first." + 9: + code: "{print} 'HedyWheels bus tickets machine'\nzone_1 = Town Hall, Library, Campus, Market Place\nzone_2 = Swimming Pool, Skate Park, Mall, Airport\ndestination = 'Where do you want to go?'\n{if} destination {in} zone 1\n{print} destination 'is in zone 1'\nprice = 3 euros\n {if} destination {is} zone_2\n{print} destination 'is in zone 2'\nprice = 6\nticket_types = {ask} 'Press 1 for a single use ticket.\nPress 2 for a round trip ticket:'\n{if} ticket_type = 1\n{print} 'You chose a single use ticket'\n{else}\n {print} You chose a round trip ticket'\nprice * 2\n{print} 'That will be ' price ' euros please'" + header: Debugging + debug: 'True' + text: Let's debug this code! + 7: + text: Just like with the `{repeat}` command, you can stop using indentation and the lines will always be shown. Not just if the statement is true. + code: "name = {ask} 'What is your name?'\n{if} name {is} Hedy\n {print} 'Welcome Hedy'\n{else}\n {print} 'Welcome programmer!' \n{print} '3..2..1.. Start programming!'" + header: stopping the indentation + 2: + debug: 'True' + code: "{repeat} 5 {times} {print} 'Help!'" + header: '{repeat} commands before' + text: "In the previous levels, the `{repeat}` command looked like this:\n\nYou could only repeat one line of code." + 3: + text: "In this level you can repeat multiple lines of code. To do this you must tell the computer which lines belong together and should be repeated.\nYou do this by using indentation.\n\nUse 4 spaces (or one tab) at the beginning of each line that you want to repeat, like this:" + code: "{repeat} 5 {times}\n {print} 'Hello everyone'\n {print} 'This will be printed 5 times'" + header: '{repeat} commands now' + 1: + header: Welcome to level 8 + text: In this level you will learn to use indentation to make the `{repeat}`, `{if}` and `{else}` commands work for multiple lines of code. + 6: + header: if and else now + text: "These are the `{if}` and `{else}` commands now.\nEach line after the `{if}` and `{else}` commands start with indentation." + code: "name = {ask} 'What is your name?'\n{if} name {is} Hedy\n {print} 'Welcome Hedy'\n{else}\n {print} 'Welcome programmer!'" + 10: + text: Enjoy the adventures in level 8! + header: Let's check out the adventures! + 4: + header: '{repeat} commands now' + text: "If you want to, you can continue after the `{repeat}` command without indentation.\nThe lines that do not start with indentation will not be repeated." + code: "{repeat} 3 {times}\n {print} 'Hello!'\n{print} 'We are done repeating!'" + 9: + 2: + text: You are allowed to combine `{repeat}` and `{if}` in this level. + code: "{repeat} 3 {times}\n food = {ask} 'What do you want?'\n {if} food {is} pizza\n {print} 'nice!'\n {else}\n {print} 'pizza is better'" + header: Multiple lines after `{repeat}` + 5: + header: Indentation matters + code: "continue = {ask} 'Do you want to continue?'\n{if} continue = yes\n sure = {ask} 'Are you sure?'\n {if} sure {is} yes\n {print} 'We will continue'\n{else}\n {print} 'You are not sure'" + text: Again, indentation is still very important and can make a big difference in the code. + 4: + code: "continue = {ask} 'Do you want to continue?'\n{if} continue = yes\n sure = {ask} 'Are you sure?'\n {if} sure {is} yes\n {print} 'We will continue'\n {else}\n {print} 'You are not sure'\n{else}\n {print} 'You do not want to continue'" + text: You can also use multiple lines after `{if}` + header: Multiple lines after `{if}` + 7: + text: Mind that the fourth and sixth line of this code starts with 8 spaces of indentation. + code: "{repeat} 3 {times}\n food = {ask} 'What do you want?'\n {if} food {is} pizza\n {print} 'nice!'\n {else}\n {print} 'pizza is better'" + header: Mind the indentation + 8: + text: Let's debug this code! + code: "{print} 'Welcome to HedyJumps, your parachute jump adventure!'\npeople = {ask} 'How many people are you jumping with today?\n{print} 'We'll ask all of you some questions for safety reasons.'\nextra_instructions_people = a, b\n{repeat} 3 {times}\n name = {ask} 'What is your name?'\njumped_before = 'Have you ever done a parachute jump before, ' name '?'\n{if} jumped_before no\n{print} 'No worries, you'll get an extra safety instruction in room 13'\n{add} name {to} extra_instructions_people\n{else}\n{print} 'Fun!'\n{print} 'Thanks for filling in the safety questions everyone. Enjoy your jump!'" + header: Debugging + debug: 'True' + 3: + header: Indentation matters! + text: Indentation is very important to tell the computer which lines should be repeated and which lines should only be ran once. + code: "{repeat} 3 {times}\n {print} 'This line will be repeated...'\n {print} 'This one too...'\n{print} 'but this one will not!'" + 6: + code: "{repeat} 3 {times}\n food = {ask} 'What do you want?'\n {if} food {is} pizza\n {print} 'nice!'\n {else}\n {print} 'pizza is better'" + text: "Now that you can use multiple lines of code after these command, you can also put them within each other.\nCheck it out:" + header: An `{if}` inside a `{repeat}` + 1: + header: Welcome to level 9 + text: "In this level you can use multiple lines of code after an `{if}` or after a `{repeat}` command.\n\nYou can even put a `{repeat}` command within another `{repeat}` command." + 9: + text: Enjoy the adventures in level 9! + header: Let's go! + 10: + 3: + header: The for command + text: 'Here you see another example of the `{for}` command:' + code: "days = Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday\nnames = mom, dad, Emma, Sophie\n{for} day {in} days\n {print} names {at} {random} ' does the dishes on ' day" + 4: + text: Let's debug this code + header: Debugging + debug: 'True' + code: "{print} 'Ladies and gentlemen!'\n{print} 'For one night and one night only in circus Hedy!'\nacts = shoot out of a canon, walk the tightrope, pack themself in a suitcase,\npeople = Iris the Incredible Achmed the Amazing Francis the Fantastic\n {for} people {in} acts\nchosen_person {is} people {random}\n chosen_person ' will ' act\n{add} chosen_person {from} people\n{print} 'Come and watch our show tonight!'\n{print} 'Tickets are only available at the counter" + 2: + header: The for command + code: "animals = dog, cat, blobfish\n{for} animal {in} animals\n {print} 'I love ' animal" + text: With for you can make a list and use all items on that list. `{for}` creates a block, like repeat and if so all lines in the block need to start with indentation (4 spaces). + 5: + header: Time to program! + text: Enjoy the adventures in level 10! + 1: + header: Welcome to level 10 + text: 'In this level you will learn a new command: `{for}`.' + 12: + 3: + header: Decimal numbers + text: "From this level on you are also allowed to use decimal numbers. This can make programs like your restaurant even better!\n\nNumbers do not need quotation marks." + code: "{print} 'decimal numbers now need to use a dot'\n{print} 2.5 + 2.5" + 6: + header: Functions + text: As you could see in the example a function is a block of code that can be called anytime. You use `{define}` to set the function and `{call}` to use it. + 5: + header: Twinkle Twinkle little star! + code: "{define} twinkle\n {print} 'Twinkle'\n {print} '...'\n\n{call} twinkle\n{print} 'Up above the world so high'\n{print} 'Like a diamond in the sky'\n{call} twinkle" + text: "In this program you see an example of a function.\nLet's see what happens if you fill in the rest of the song!" + 4: + text: "In this level you'll learn how to use functions. A function is a block of code you can easily use multiple times. Using functions helps us organize pieces of code that we can use again and again. To create a function, use define and give the function a name. Then put all the lines you want in the function in a indented block under the define line. Leave one empty line in your code to make it look nice and neat. Great job! You have created a function!\n\nNow, whenever we need that block of code, we just use call with the function's name to call it up! We don't have to type that block of code again." + header: Functions! + 2: + text: "This level makes some changes to the usage of quotation marks.\nFrom now on, **all texts** need to be in quotation marks. This includes values of variables, items on lists and text after {if} commands." + code: "name = 'Hedy the Robot'\n{print} 'Hello ' name" + header: Quotation marks + 8: + text: Enjoy the adventures in level 12! + header: Ready to try it out? + 7: + debug: 'True' + text: Let's debug this code! + code: "{call} new_member\n{print} 'Hi new member!'\nusername = {ask} 'What is your username?'\npassword = 'What is your password?'\n{print} 'Welcome to our club!'\n\nusername = {ask} 'Please enter your username. Are you a new member? Type New Member'\n{if} username = New Member\n{call} new member\n {else}\n password = {ask} 'Please enter password'" + header: Debugging + 1: + header: Welcome to level 12 + text: "From this level on you are allowed to use decimal numbers and there are some changes to the quotation marks.\nYou can also use functions from this level on!" + 13: + 1: + header: Welcome to level 13 + text: "We are now going to learn `{and}` and `{or}`! If you want to check two statements, you don't have to use two ifs but can use and and or.\nFrom now on you could also use arguments in your functions." + 5: + header: Example + text: "In this example you see how the argument 'place' is used in the function.\nRun the code and change 'ocean' and 'sea' to something else, and see what happens." + code: "{define} song {with} place\n {print} 'My Bonnie is over the ' place\n\n{call} song {with} 'ocean'\n{call} song {with} 'sea'\n{call} song {with} 'ocean'" + 6: + header: Example with variable + text: "You can also combine functions with a question.\n\nWhat happens if you make these changes:\n```\ndefine song with place\n print 'My Bonnie is ' place\n\nanswer is ask 'Where is my Bonnie?'\ncall song with answer\n```" + code: "{define} song {with} place\n {print} 'My Bonnie is over the ' place\n\n{call} song {with} 'ocean'\n{call} song {with} 'sea'\n{call} song {with} 'ocean'" + 7: + header: Even more questions! + text: "Now we have combined even more question with the function. Type this code and see what happens.\n\nNote how the variables and the arguments have the same name. This is allowed.\nDoes it confuse you? Just use different names, that is allowed as well.\n```\ndefine song with name, place\n print 'My ' name ' is ' place\n\nname is ask 'Who?'\nplace is ask 'Where are they?'\ncall song with name, place\n```" + code: "{define} song {with} place\n {print} 'My Bonnie is over the ' place\n\n{call} song {with} 'ocean'\n{call} song {with} 'sea'\n{call} song {with} 'ocean'" + 8: + header: Debugging + code: "{define} happiness {with} name\n {print} '🥳'\n{play} G\n{play} A\n{play} B\n{print} 'Party on, ' name\n{define} sadness\n{print} '😞'\n{play} E\n{play} D\n{play} C\n{print} 'Hope you feel better, ' name\n\nname = {ask} 'What is your' name '?'\nmood = {ask} 'Are you happy or sad?'\n{if} mood = happy\n {call} happiness {with} person\n{else} mood = sad\n {define} sadness {to} name" + debug: 'True' + text: Let's debug this code! + 9: + text: Enjoy the adventures in level 13! + header: Let's go! + 2: + text: "The `{and}` command is always used in a combination with the {if} command.\nThis way you can check if 2 statements are true. For example:" + header: The and command + code: "name = {ask} 'what is your name?'\nage = {ask} 'what is your age?'\n{if} name {is} 'Hedy' {and} age {is} 2\n {print} 'You are the real Hedy!'" + 3: + code: "name = {ask} 'what is your name?'\n{if} name {is} 'Hedy' {or} name {is} 'hedy'\n {print} 'Welcome!!'" + text: "The `{or}` works in the same way as the `{and}` command, but only 1 of the two statements has to be true.\n\nLet's see what happens when you change the `{and}` for `{or}`." + header: The or command + 4: + header: Functions with arguments + text: Now that you've learned how to use functions, you'll learn how to use a function with an **argument**. An argument is a variable that is used within a function. It is not used outside the function. + 14: + 1: + header: Welcome to level 14 + text: In this level you'll learn some new symbols that can help you improve your programs, like >. You will also learn to work with return values of a function. + 6: + text: Let's debug this code! + debug: 'True' + code: "item = 'not bought'\n{print} 'I would like to buy this item'\nprice == {ask} 'What is the price?'\n{if} price less than or the same as 10\n {print} 'Thats a great deal!'\n item = 'bought'\n{if} price is more than 10 {and} less than or the same as 20\n {print} 'Alright'\n item = 'bought'\n{if} price is more than 20 {and} less than 50\n {print} 'That is a bit much!'\n{if} price is more than or the same as 50\n {print} 'No way!'\n{if} item =! bought\n {print} 'Shame.. I wont buy it'\n{else}\n {print} 'I will buy it! Thank you!'" + header: Debugging + 2: + text: "These are the new symbols you can use:\n\n The > means bigger than...\n\n The >= means bigger than or the same as...\n\n The < means smaller than...\n\n The <= means smaller than or the same as...\n\nYou can use them like this:" + code: "age = {ask} 'How old are you?'\n{if} age < 13\n {print} 'You are younger than me!'\n{else}\n {print} 'You are older than me!'" + header: Symbols + 4: + header: Return value + text: In the previous levels you have learned to create functions and use arguments with them. Another great use of a function is to let it calculate something for you. You can give the function a calculation and it will give you the answer of the calculation. This answer is called a **return value**. + 5: + header: Return value + code: "{define} calculate_new_price {with} amount, percentage\n percentage = percentage / 100\n discount_amount = amount * percentage\n {return} amount - discount_amount\n\nold_price = {ask} 'How much is on the price tag?'\ndiscount = {ask} 'What percentage is the discount?'\n\nnew_price = {call} calculate_new_price {with} old_price, discount\n{print} 'The new price is ' new_price ' dollar'" + text: For example, in this code the function calculate_new_price will calculate the new price of any item. It will give you the new price as a return value. + 7: + header: Let's get to work! + text: Enjoy the adventures in level 14! + 3: + text: "You can also use:\n\n== is the same as.\n\n!= is not\n\n== is used in `{if}` statements." + header: Symbols + code: "answer = {ask} 'Do you want to learn more?'\n{if} answer == 'yes'\n {print} 'Go to the next adventure!'\n{if} answer != 'yes'\n {print} 'That is a shame!'" + 17: + 5: + header: Let's try it out! + text: Enjoy the adventures in level 17! + 4: + text: Let's debug this code! + debug: 'True' + code: "{define} ask_direction\n direction = {ask} 'Where do you want to go?'\n {if} direction = 'backwards'\n {turn} 180\n {else} direction == 'right'\n {turn} 90\n {else} direction == 'left'\n {turn} 270\n {forward} 100\n\ncontinue = 'yes'\n\n{while} continue == 'yes'\n {print} ask_direction\n {sleep}\n continue = 'do you want to draw some more?'\n {sleep}" + header: Debugging + 1: + header: Welcome to level 17 + text: in this level you will learn how to use a colon and you will learn the elif command. + 3: + code: "prices = ['1 million dollars', 'an apple pie', 'nothing']\nyour_price = prices[{random}]\n{print} 'You win ' your_price\n{if} your_price == '1 million dollars' :\n {print} 'Yeah! You are rich!'\n{elif} your_price == 'an apple pie' :\n {print} 'Lovely, an apple pie!'\n{else}:\n {print} 'Better luck next time..'" + header: Elif + text: 'In this level you can also use a new command: elif. elif is short for else if and you need it when you want to make 3 (or more!) options. Check it out!' + 2: + header: Colon + text: 'Now we are going to change indentation a little bit. Every time that we need an indentation, we need : at the line before the indentation.' + code: "prices = ['1 million dollars', 'an apple pie', 'nothing']\nyour_price = prices[{random}]\n{print} 'You win ' your_price\n{if} your_price == '1 million dollars' :\n {print} 'Yeah! You are rich!'\n{else}:\n {print} 'Better luck next time..'" + 16: + 3: + code: "{print} 'Friendship test'\n{subjects} = ['song', 'movie', 'food', 'drink']\nanswers_player_1 = []\nanswers_player_2 = []\nscore = 100\n\n{for} i {in} {range} 1 {to} 4\n answer = {ask} 'what is your favorite ' subjects[i]\n{add} answer {to} answers_player_1\n\n{print} 'Player 2, your turn!'\n{for} i {in} {range} 0 {to} 4\n answer_player_2 = {ask} 'what is player 1s favorite ' subjects\n {add} answer_player_2 {in} answers_player_2\n {if} answers_player_2[2] == answers_player_1[1]\n {print} 'Correct!'\n {else}\n {print} 'Wrong!'\n score = score - 25\n\n{print} 'Player 2, you've scored ' score '%'\n\n{if} score = 100\n {print} 'You are an amazing friend'\n{if} score < 100 {or} score >= 50\n {print} 'You could do better'\n{else} score < 50\n {print} 'Do you even know this person?!'" + header: Debugging + debug: 'True' + text: Let's debug this code! + 2: + code: "friends = ['Ahmed', 'Ben', 'Cayden']\n{print} friends[1] ' is the first friend on the list.'\n{print} friends[2] ' is the second friend on the list.'\n{print} friends[3] ' is the third friend on the list.'\n#now we will match 2 lists using the variable i\nlucky_numbers = [15, 18, 6]\n{for} i {in} {range} 1 {to} 3\n {print} friends[i] 's lucky number is ' lucky_numbers[i]" + header: Square brackets + text: We are going to make lists the Python way, with square brackets around the lists! We also keep the quotation marks around each item like we have learned in previous levels. We use square brackets to point out a place in a list. The at random command can not be used anymore. + 1: + text: In this level you will learn about the [square brackets] and how to use them. + header: Welcome to level 16 + 4: + text: Enjoy the adventures in level 16! + header: Let's try it out! + 15: + 3: + text: Let's debug this code! + code: "numbers = 1, 2\n\n{for} i {in} {range} 3 {to} 50\n {add} x {to} numbers\n i = + 1\n\nrandom_number = numbers {random}\nguesses = 10\n\n{while} guess = 0\n answer = 'Guess my number:'\n {if} answer >= random_number\n {print} 'lower'\n guesses = guesses -1\n {if} answer > random_number\n {print} 'higher!'\n guesses = guesses\n {else} answer = random_number\n {print} 'correct'\n guesses = 10" + debug: 'True' + header: Debugging + 4: + header: Let's try it out! + text: Enjoy the adventures in level 15! + 2: + header: '{while}' + text: "We are going to learn a new loop, the while loop! The loop continues as long as the statement is true. So don't forget to change the value in the loop.\n\nIn the example code, we continue until a correct answer has been given. If the correct answer is never given, the loop will never end!" + code: "answer = 0\n{while} answer != 25\n answer = {ask} 'What is 5 times 5?'\n{print} 'A correct answer has been given'" + 1: + text: In this level you will learn about the `{while}` loop. + header: Welcome to level 15 + 18: + 1: + text: Congratulations! You have reached the last level of Hedy! The code you have created here can be copied to real Python environments like replit or PyCharm, and you can continue learning there! Note however that Python can only read English commands, so if you have been using other languages, you will need to switch to English now. + header: Welcome to level 18 + 2: + editor: /hedy/18 + text: "We arrived at real Python code! That means we need to use parentheses with print and range from now on.\n\nAlso, if you want to print more than one item, you need to separate them by commas.\n\nThe final change we will need to make to get Python code is changing ask into input.\n\nClick on the 'print' tab for all the examples." + header: The Python way + 3: + header: The very last adventures! + text: Enjoy the very last adventures in level 18! + 11: + 1: + text: "In this level, we add a new form of the `{for}` command. In earlier levels, we used for with a list, but we can also use for with numbers.\n\nThis way we don't need the `{repeat}` command anymore." + header: Welcome to level 11 + 2: + header: The for command + code: "{for} counter {in} {range} 1 {to} 10\n {print} counter\n{print} 'Ready or not. Here I come!'" + text: 'This is what the new for command looks like:' + 4: + header: Debugging + debug: 'True' + code: "factor {is} {ask} 'Which table of multiplication do you need?'\n{repeat} {for} numbers {in} {range} 1 {to} 10 {times}\n {print} This is the table of multiplications for factor\n {print} number ' x ' factor ' = ' i * factor" + text: Let's debug this code! + 3: + code: "number = 10\n{for} i {in} {range} 1 {to} 10\n {print} i * number" + header: the variable i + text: "In the previous slide the variable was named 'counter', because it was counting down.\nYou can of course use any name for the variable you want.\nThe standard name for variables in this situation that is used in programming languages like Python is 'i'.\nThat looks like this:" + 5: + text: Enjoy the adventures in level 11! + header: Let's start programming! diff --git a/content/tutorials/kab.yaml b/content/tutorials/kab.yaml index 0967ef424bc..50ab0f63a75 100644 --- a/content/tutorials/kab.yaml +++ b/content/tutorials/kab.yaml @@ -1 +1,70 @@ -{} +intro: + steps: + 12: + title: Quiz + text: At the end of each level you can make the quiz. This way you can verify if you understand everything. + 11: + title: Puzzles + text: Do you think you understand the level quite well? Try the puzzles! You get lines of code in the wrong order, fix the order to get the program running. + 3: + title: The output window + text: The result of the code you execute will be shown here, you just created this! + 13: + title: Saving & sharing + text: You can save and share all your created programs with other Hedy users. + 10: + text: The other tabs contain adventures, which you can code for each level. They go from easy to hard. + title: Adventures + 6: + text: Choose a voice below the run button to let your program be read aloud. + title: Read aloud your program + 7: + text: Select a voice from the dropdown menu and run your program again to hear it being read aloud. + title: Run & listen + 9: + title: Level explanation + text: The first tab always contains the level explanation. In each level new commands will be explained here. + 15: + text: Click on 'next step' to really start coding with Hedy! + title: The end! + 1: + title: Welcome to Hedy! + text: In this tutorial we will explain all the Hedy features step-by-step. + 5: + title: Try it out! + text: Run the program, click 'next step' when you're done. + 8: + title: To the next level + text: When you think you understand everything and have practiced enough you can continue with the next level. When there is also a previous level there will be a button next to it to go back. + 4: + title: The run button + text: With this button you can run your program! Shall we give it a try in the next step? + 14: + title: Cheatsheet + text: If you forgot a command you can always use the cheatsheet. It shows a list of all commands you can use in the current level. You can find the cheatsheet at the 🤔 button + 2: + title: The code editor + text: In this window you write all the code, try typing something on the place of the underscores! +teacher: + steps: + 1: + title: Welcome to Hedy! + text: In this tutorial we will explain all the Hedy features step-by-step. + 3: + title: Customize classes + text: You can customize classes by hiding specific levels and/or adventures as well as making them available on a specific date. + 6: + title: Hedy documentation + text: Here you find a more extensive documentation with tips and tricks on how to use Hedy in the classroom. + 2: + text: As a teacher you can created classes and invite student or let them join through a link. You can view the programs and statistics of all your students. + title: Class management + 4: + text: You can create your own adventures and use them as assignments for your students. Create them here and add them to your classes in the class customization section. + title: Creating adventures + 7: + title: The end! + text: Click on 'next step' to get started as a Hedy teacher! + 5: + title: Creating accounts + text: You can create multiple accounts at once, only needing to provide an username and password. You can also directly add these accounts to one of your classes. diff --git a/translations/kab/LC_MESSAGES/messages.po b/translations/kab/LC_MESSAGES/messages.po index afae77d012c..198f5f1cf30 100644 --- a/translations/kab/LC_MESSAGES/messages.po +++ b/translations/kab/LC_MESSAGES/messages.po @@ -8,1922 +8,2600 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-06-26 16:04+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-10-27 21:55+0000\n" +"Last-Translator: Prefill add-on \n" "Language-Team: none\n" "Language: kab\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.8.2-dev\n" "Generated-By: Babel 2.14.0\n" +#, fuzzy msgid "Access Before Assign" -msgstr "" +msgstr "We detected that a variable `{name}` is being used on line {access_line_number} before being set. Can you set the variable before it is used?" +#, fuzzy msgid "Cyclic Var Definition" -msgstr "" +msgstr "We detected that a variable `{variable}` is being used on the right-hand side of the `{is}` command before being set. Can you set the variable before it is used?" +#, fuzzy msgid "Else Without If Error" -msgstr "" +msgstr "We detected that there is an `{else}` being used before an `{if}` on line {line_number}. Can you try writing an `{if}` before the `{else}`?" +#, fuzzy msgid "Function Undefined" -msgstr "" +msgstr "We detected that a function {name} is being used without being defined. Can you define the function before it is used?" +#, fuzzy msgid "Has Blanks" -msgstr "" +msgstr "We detected that the code seems to be incomplete. Can you fill in the blanks with code?" +#, fuzzy msgid "Incomplete" -msgstr "" +msgstr "We detected that part of the code seems to be missing from the `{incomplete_command}` on line {line_number}. Can you try adding what's missing?" +#, fuzzy msgid "Incomplete Repeat" -msgstr "" +msgstr "We detected that the `{repeat}` on line {line_number} is missing a `{command}` command. Can you try adding it?" +#, fuzzy msgid "Invalid" -msgstr "" +msgstr "We detected that `{invalid_command}` is not a Hedy level {level} command. Can you try using `{guessed_command}`?" +#, fuzzy msgid "Invalid Argument" -msgstr "" +msgstr "We detected that `{command}` is not usable with `{invalid_argument}`. Can you try changing `{invalid_argument}` to {allowed_types}?" +#, fuzzy msgid "Invalid Argument Type" -msgstr "" +msgstr "We detected that `{command}` doesn't work with `{invalid_argument}` because it is {invalid_type}. Can you try changing `{invalid_argument}` to {allowed_types}?" +#, fuzzy msgid "Invalid At Command" -msgstr "" +msgstr "We detected that `{command}` may not be used from level 16 onward. Can you try using square brackets `[]` for lists?" +#, fuzzy msgid "Invalid Space" -msgstr "" +msgstr "We detected that line {line_number} started with a space. Can you try removing the space?" +#, fuzzy msgid "Invalid Type Combination" -msgstr "" +msgstr "We detected that `{invalid_argument}` and `{invalid_argument_2}` cannot be used with `{command}` because one is {invalid_type} and the other is {invalid_type_2}. Can you try changing `{invalid_argument}` to {invalid_type_2} or `{invalid_argument_2}` to {invalid_type}?" +#, fuzzy msgid "Lonely Echo" -msgstr "" +msgstr "We detected that an `{echo}` is being used before or without using an `{ask}`. Can you try writing an `{ask}` before the `{echo}`?" +#, fuzzy msgid "Lonely Text" -msgstr "" +msgstr "We detected that the code seems to be missing a command with the text that was used in line {line_number}. Can you try writing the needed command with the text" +#, fuzzy msgid "Missing Additional Command" -msgstr "" +msgstr "We detected that the command `{command}` on line {line_number} is missing something. Can you try using `{missing_command}` in your code?" +#, fuzzy msgid "Missing Colon Error" -msgstr "" +msgstr "We detected that `{command}` needs a `:` at the end of line {line_number}. Starting from level 17, can you start adding a `:` at the end of line with commands?" +#, fuzzy msgid "Missing Command" -msgstr "" +msgstr "We detected that the code seems to be missing a command on line {line_number}. Can you try looking at the exercise section to find which command to use?" +#, fuzzy msgid "Missing Inner Command" -msgstr "" +msgstr "We detected that the code seems to be missing a command for the `{command}` statement on line {line_number}. Can you try looking at the exercise section to find which command to use?" +#, fuzzy msgid "Missing Square Brackets" -msgstr "" +msgstr "We detected that the list you created on line {line_number} is missing square brackets `[]`. Can you try adding square brackets around `[]` the list?" +#, fuzzy msgid "Missing Variable" -msgstr "" +msgstr "We detected that `{command}` is missing a variable at the start of the line. Can you try writing the variable before the `{command}?`" +#, fuzzy msgid "Misspelled At Command" -msgstr "" +msgstr "We detected that `{invalid_argument}` seems to have a spelling mistake on line {line_number}. Can you try writing `{command}` instead." +#, fuzzy msgid "No Indentation" -msgstr "" +msgstr "We detected that there seems to be too few {leading_spaces} spaces used on line {line_number}. Can you try increasing indentation by {indent_size} for each new block." +#, fuzzy msgid "Non Decimal Variable" -msgstr "" +msgstr "We detected that at line {line_number} you used a number Hedy does not support! Can you try a decimal number, like 2?" +#, fuzzy msgid "Parse" -msgstr "" +msgstr "We detected that `{character_found}` is being used on line {location[0]} which is not allowed. Can you try looking for a missing or an extra character on your code?" +#, fuzzy msgid "Pressit Missing Else" -msgstr "" +msgstr "We detected that the code is missing an `{else}` to handle other key presses. Can you try adding an `{else}` to your code?" +#, fuzzy msgid "Runtime Index Error" -msgstr "" +msgstr "We detected that the list {name} is empty or its index is missing. Can you make sure that the list is not empty or try writing a number inside the `[]` for the missing index?" +#, fuzzy msgid "Runtime Value Error" -msgstr "" +msgstr "We detected that `{command}` received disallowed value `{value}`. {tip}." +#, fuzzy msgid "Runtime Values Error" -msgstr "" +msgstr "We detected that `{command}` received disallowed values `{value}` and `{value}`. {tip}." +#, fuzzy msgid "Save Microbit code " -msgstr "" +msgstr "Save Microbit code" +#, fuzzy msgid "Too Big" -msgstr "" +msgstr "We detected that the program has {lines_of_code} lines, but we can only process {max_lines} lines. Can you try to shorten your program?" +#, fuzzy msgid "Too Few Indents" -msgstr "" +msgstr "We detected that line {line_number} has too few ({leading_spaces}) spaces. Can you try to add an extra space?" +#, fuzzy msgid "Too Many Indents" -msgstr "" +msgstr "We detected that line {line_number} has too many ({leading_spaces}) spaces. Can you try to remove the extra space?" +#, fuzzy msgid "Unexpected Indentation" -msgstr "" +msgstr "We detected that line {line_number} has too many ({leading_spaces}) spaces. Can you try adding {indent_size} more spaces per new block?" +#, fuzzy msgid "Unquoted Assignment" -msgstr "" +msgstr "We detected that the text to the right of the `{is}` is not written between quotes. This level requires you to start writing the text between quotes. Try doing that for the text {text}" +#, fuzzy msgid "Unquoted Equality Check" -msgstr "" +msgstr "We detected that the code is trying to check if a variable equals multiple words. Can you try using quotation marks for the words you want to check?" +#, fuzzy msgid "Unquoted Text" -msgstr "" +msgstr "We detected that text for `{ask}` or `{print}` seems to be missing their quotation marks. Can you try adding quotes for {unquotedtext}?" +#, fuzzy msgid "Unsupported Float" -msgstr "" +msgstr "We detected that the code uses non-integer numbers which are not supported yet. Can you try changing `{value}` to an integer?" +#, fuzzy msgid "Unsupported String Value" -msgstr "" +msgstr "We detected that text uses values it cannot contain `{invalid_value}`. Can you try removing the written value or change its type?" +#, fuzzy msgid "Unused Variable" -msgstr "" +msgstr "We detected that variable {variable_name} defined on line {line_number}, but not used. Can you try using the defined variable or remove it?" +#, fuzzy msgid "Var Undefined" -msgstr "" +msgstr "We detected that variable `{name}` is being used before being set. Can you set the variable before it is used or use quotation marks for `{name}`?" +#, fuzzy msgid "Wrong Level" -msgstr "" +msgstr "We detected that the written code is correct Hedy code, but `{offending_keyword}` is used on level {working_level}. {tip}" +#, fuzzy msgid "Wrong Number of Arguments" -msgstr "" +msgstr "We detected that function {name} has wrong number of arguments which is {used_number}. Can you try writing {defined_number} instead?" +#, fuzzy msgid "account_overview" -msgstr "" +msgstr "Account overview" +#, fuzzy msgid "actions" -msgstr "" +msgstr "Actions" +#, fuzzy msgid "add" -msgstr "" +msgstr "Add" +#, fuzzy msgid "add_students" -msgstr "" +msgstr "Add students" +#, fuzzy msgid "add_your_language" -msgstr "" +msgstr "Add your language!" +#, fuzzy msgid "admin" -msgstr "" +msgstr "Admin" +#, fuzzy msgid "advance_button" -msgstr "" +msgstr "Go to level {level}" +#, fuzzy msgid "adventure" -msgstr "" +msgstr "Adventure" +#, fuzzy msgid "adventure_cloned" -msgstr "" +msgstr "Adventure is cloned" +#, fuzzy msgid "adventure_code_button" -msgstr "" +msgstr "Adventure Code" +#, fuzzy msgid "adventure_codeblock_button" -msgstr "" +msgstr "Use this button when you want to create a block of code that students can run in your adventure. Tip: put the selection at the end of the last line of the code block and Enter 3 times to type after a code block." +#, fuzzy msgid "adventure_duplicate" -msgstr "" +msgstr "You already have an adventure with this name." +#, fuzzy msgid "adventure_empty" -msgstr "" +msgstr "You didn't enter an adventure name!" +#, fuzzy msgid "adventure_exp_3" -msgstr "" +msgstr "Make sure you always surround keywords with { } when you write them outside of code blocks, then they are recognized correctly. You can use the \"preview\" button to view a styled version of your adventure. To view the adventure on a dedicated page, select \"view\" from the teachers page." +#, fuzzy msgid "adventure_exp_classes" -msgstr "" +msgstr "Your adventure is used within the following classes" +#, fuzzy msgid "adventure_flagged" -msgstr "" +msgstr "The adventure was flagged successfully." +#, fuzzy msgid "adventure_id_invalid" -msgstr "" +msgstr "This adventure id is invalid." +#, fuzzy msgid "adventure_length" -msgstr "" +msgstr "Your adventure has to be at least 20 characters." +#, fuzzy msgid "adventure_name_invalid" -msgstr "" +msgstr "This adventure name is invalid." +#, fuzzy msgid "adventure_prompt" -msgstr "" +msgstr "Please enter the name of the adventure" +#, fuzzy msgid "adventure_terms" -msgstr "" +msgstr "I agree that my adventure might be made publicly available on Hedy." +#, fuzzy msgid "adventure_updated" -msgstr "" +msgstr "The adventure has been updated!" +#, fuzzy msgid "adventures" -msgstr "" +msgstr "Adventures" +#, fuzzy msgid "adventures_completed" -msgstr "" +msgstr "Adventures completed: {number_of_adventures}" +#, fuzzy msgid "adventures_info" -msgstr "" +msgstr "Each Hedy level has built-in exercises for students, which we call adventures. You can create your own adventures and add them to your classes. With your own adventures you can create adventures that are relevant and interesting for your students. You can find more information about creating your own adventures here." +#, fuzzy msgid "adventures_restored" -msgstr "" +msgstr "The default adventures have been restored." +#, fuzzy msgid "adventures_ticked" -msgstr "" +msgstr "Adventures ticked" +#, fuzzy msgid "adventures_tried" -msgstr "" +msgstr "Adventures tried" +#, fuzzy msgid "ago" -msgstr "" +msgstr "{timestamp} ago" +#, fuzzy msgid "agree_invalid" -msgstr "" +msgstr "You have to agree with the privacy terms." +#, fuzzy msgid "agree_with" -msgstr "" +msgstr "I agree to the" +#, fuzzy msgid "ajax_error" -msgstr "" +msgstr "There was an error, please try again." +#, fuzzy msgid "all" -msgstr "" +msgstr "All" +#, fuzzy msgid "all_class_highscores" -msgstr "" +msgstr "All students visible in class highscores" +#, fuzzy msgid "all_rows_missing_separator" -msgstr "" +msgstr "None of the rows contain a semicolon. Perhaps you want to let us auto generate passwords? If so, click the passwords toggle and create the accounts again. If this is not the case, use a semicolon to separate usernames and passwords on the following lines: {rows}" +#, fuzzy msgid "already_account" -msgstr "" +msgstr "Already have an account?" +#, fuzzy msgid "already_program_running" -msgstr "" +msgstr "There is already a program running, finish that one first." +#, fuzzy msgid "are_you_sure" -msgstr "" +msgstr "Are you sure? You cannot revert this action." +#, fuzzy msgid "ask_needs_var" -msgstr "" +msgstr "Starting in level 2, `{ask}` needs to be used with a variable. Example: name `{is}` `{ask}` What is your name?" +#, fuzzy msgid "available_in" -msgstr "" +msgstr "Available in:" +#, fuzzy msgid "back_to_class" -msgstr "" +msgstr "Go back to class" +#, fuzzy msgid "become_a_sponsor" -msgstr "" +msgstr "Become a sponsor" +#, fuzzy msgid "birth_year" -msgstr "" +msgstr "Birth year" +#, fuzzy msgid "bug" -msgstr "" +msgstr "Bug" +#, fuzzy msgid "by" -msgstr "" +msgstr "by" +#, fuzzy msgid "cancel" -msgstr "" +msgstr "Cancel" +#, fuzzy msgid "cant_parse_exception" -msgstr "" +msgstr "Couldn't parse the program" +#, fuzzy msgid "certificate" -msgstr "" +msgstr "Certificate of Completion" +#, fuzzy msgid "certified_teacher" -msgstr "" +msgstr "Certified teacher" +#, fuzzy msgid "change_password" -msgstr "" +msgstr "Change password" +#, fuzzy msgid "cheatsheet_title" -msgstr "" +msgstr "Cheatsheet" +#, fuzzy msgid "class_already_joined" -msgstr "" +msgstr "You are already a student of class" +#, fuzzy msgid "class_customize_success" -msgstr "" +msgstr "Class successfully customized." +#, fuzzy msgid "class_graph_explanation" -msgstr "" +msgstr "In this graph you can see represented the numbers of adventures your students have attempted (meaning they have done meaningful work in that adventure), with respect to the number of errors and successful runs." +#, fuzzy msgid "class_logs" -msgstr "" +msgstr "Last Login" +#, fuzzy msgid "class_name_duplicate" -msgstr "" +msgstr "You already have a class with this name." +#, fuzzy msgid "class_name_empty" -msgstr "" +msgstr "You didn't enter a class name!" +#, fuzzy msgid "class_name_invalid" -msgstr "" +msgstr "This class name is invalid." +#, fuzzy msgid "class_name_prompt" -msgstr "" +msgstr "Please enter the name of the new class" +#, fuzzy msgid "class_performance_graph" -msgstr "" +msgstr "Class performance graph" +#, fuzzy msgid "class_survey_description" -msgstr "" +msgstr "We would like to get a better overview of our Hedy users. By providing these answers, you would help improve Hedy. Thank you!" +#, fuzzy msgid "class_survey_later" -msgstr "" +msgstr "Remind me tomorrow" +#, fuzzy msgid "class_survey_question1" -msgstr "" +msgstr "What is the age range in your class?" +#, fuzzy msgid "class_survey_question2" -msgstr "" +msgstr "What is the spoken language in your class?" +#, fuzzy msgid "class_survey_question3" -msgstr "" +msgstr "What is the gender balance in your class?" +#, fuzzy msgid "class_survey_question4" -msgstr "" +msgstr "What distinguishes your students from others?" +#, fuzzy msgid "classes" -msgstr "" +msgstr "Classes" +#, fuzzy msgid "classes_info" -msgstr "" +msgstr "Create a class to follow the progress of each student in dashboard, and to customize the adventures your students see, and even adding your own! You can create as many classes as you like, and each class can have multiple teachers each one with different roles. You can also add as many students as you want, but mind that each student can only be in one class at a time. You can find more information about classes in the teacher manual." +#, fuzzy msgid "clear" -msgstr "" +msgstr "Clear" +#, fuzzy msgid "clone" -msgstr "" +msgstr "Clone" +#, fuzzy msgid "cloned_times" -msgstr "" +msgstr "Clones" +#, fuzzy msgid "close" -msgstr "" +msgstr "Close" +#, fuzzy msgid "comma" -msgstr "" +msgstr "a comma" +#, fuzzy msgid "command_not_available_yet_exception" -msgstr "" +msgstr "Command not available yet" +#, fuzzy msgid "command_unavailable_exception" -msgstr "" +msgstr "Command not correct anymore" +#, fuzzy msgid "commands" -msgstr "" +msgstr "Commands" +#, fuzzy msgid "complete" -msgstr "" +msgstr "Completed" +#, fuzzy msgid "congrats_message" -msgstr "" +msgstr "Congratulations, {username}, you have reached the following results with Hedy!" +#, fuzzy msgid "connect_guest_teacher" -msgstr "" +msgstr "I would like to be connected with a guest teacher who can give a few lessons" +#, fuzzy msgid "constant_variable_role" -msgstr "" +msgstr "constant" +#, fuzzy msgid "content_invalid" -msgstr "" +msgstr "This adventure is invalid." +#, fuzzy msgid "continue" -msgstr "" +msgstr "Continue" +#, fuzzy msgid "contributor" -msgstr "" +msgstr "Contributor" +#, fuzzy msgid "copy_accounts_to_clipboard" -msgstr "" +msgstr "Copy to clipboard" +#, fuzzy msgid "copy_clipboard" -msgstr "" +msgstr "Successfully copied to clipboard" +#, fuzzy msgid "copy_code" -msgstr "" +msgstr "Copy code" +#, fuzzy msgid "copy_join_link" -msgstr "" +msgstr "Copy join link" +#, fuzzy msgid "copy_link_success" -msgstr "" +msgstr "Join link successfully copied to clipboard" +#, fuzzy msgid "copy_link_to_share" -msgstr "" +msgstr "Copy link to share" +#, fuzzy msgid "copy_mail_link" -msgstr "" +msgstr "Please copy and paste this link into a new tab:" +#, fuzzy msgid "correct_answer" -msgstr "" +msgstr "The correct answer is" +#, fuzzy msgid "country" -msgstr "" +msgstr "Country" +#, fuzzy msgid "country_invalid" -msgstr "" +msgstr "Please select a valid country." +#, fuzzy msgid "create_account" -msgstr "" +msgstr "Create account" +#, fuzzy msgid "create_accounts" -msgstr "" +msgstr "Create accounts" +#, fuzzy msgid "create_accounts_placeholder" -msgstr "" +msgstr "Type the accounts or paste them from a spreadsheet" +#, fuzzy msgid "create_accounts_prompt" -msgstr "" +msgstr "You will create {number_of_accounts} student accounts. Are you sure?" +#, fuzzy msgid "create_adventure" -msgstr "" +msgstr "Create adventure" +#, fuzzy msgid "create_class" -msgstr "" +msgstr "Create a new class" +#, fuzzy msgid "create_student_account" -msgstr "" +msgstr "Create an account" +#, fuzzy msgid "create_student_account_explanation" -msgstr "" +msgstr "You can save your own programs with an account." +#, fuzzy msgid "create_student_accounts" -msgstr "" +msgstr "Create student accounts for" +#, fuzzy msgid "create_teacher_account" -msgstr "" +msgstr "Create a teacher account" +#, fuzzy msgid "create_teacher_account_explanation" -msgstr "" +msgstr "With a teacher account, you can save your programs and see the results of your students." +#, fuzzy msgid "create_usernames_and_passwords_desc" -msgstr "" +msgstr "Enter one username and password per line, separated by a semicolon. Or, if you have the data in a two-column spreadsheet, copy the file content and paste here." +#, fuzzy msgid "create_usernames_and_passwords_title" -msgstr "" +msgstr "Usernames and passwords" +#, fuzzy msgid "create_usernames_desc" -msgstr "" +msgstr "Enter one username per line or paste them from a spreadsheet." +#, fuzzy msgid "create_usernames_title" -msgstr "" +msgstr "Usernames" +#, fuzzy msgid "creator" -msgstr "" +msgstr "Creator" +#, fuzzy msgid "current_password" -msgstr "" +msgstr "Current password" +#, fuzzy msgid "customization_deleted" -msgstr "" +msgstr "Customizations successfully deleted." +#, fuzzy msgid "customize" -msgstr "" +msgstr "Customize" +#, fuzzy msgid "customize_adventure" -msgstr "" +msgstr "Customize adventure" +#, fuzzy msgid "customize_class" -msgstr "" +msgstr "Customize class" +#, fuzzy msgid "dash" -msgstr "" +msgstr "a dash" +#, fuzzy msgid "debug" -msgstr "" +msgstr "Debug" +#, fuzzy msgid "default_401" -msgstr "" +msgstr "Looks like you aren't authorized..." +#, fuzzy msgid "default_403" -msgstr "" +msgstr "Looks like this action is forbidden..." +#, fuzzy msgid "default_404" -msgstr "" +msgstr "We could not find that page..." +#, fuzzy msgid "default_500" -msgstr "" +msgstr "Something went wrong..." +#, fuzzy msgid "delete" -msgstr "" +msgstr "Delete" +#, fuzzy msgid "delete_adventure_prompt" -msgstr "" +msgstr "Are you sure you want to remove this adventure?" +#, fuzzy msgid "delete_class_prompt" -msgstr "" +msgstr "Are you sure you want to delete the class?" +#, fuzzy msgid "delete_confirm" -msgstr "" +msgstr "Are you sure you want to delete the program?" +#, fuzzy msgid "delete_invite" -msgstr "" +msgstr "Delete invitation" +#, fuzzy msgid "delete_invite_prompt" -msgstr "" +msgstr "Are you sure you want to remove this class invitation?" +#, fuzzy msgid "delete_public" -msgstr "" +msgstr "Delete public profile" +#, fuzzy msgid "delete_success" -msgstr "" +msgstr "Program deleted successfully." +#, fuzzy msgid "delete_tag_prompt" -msgstr "" +msgstr "Are you sure you want to delete this tag?" +#, fuzzy msgid "destroy_profile" -msgstr "" +msgstr "Delete profile" +#, fuzzy msgid "developers_mode" -msgstr "" +msgstr "Programmer's mode" +#, fuzzy msgid "directly_available" -msgstr "" +msgstr "Directly open" +#, fuzzy msgid "disable" -msgstr "" +msgstr "Disable" +#, fuzzy msgid "disable_explore_page" -msgstr "" +msgstr "Disable explore page" +#, fuzzy msgid "disable_parsons" -msgstr "" +msgstr "Disable all puzzles" +#, fuzzy msgid "disable_quizes" -msgstr "" +msgstr "Disable all quizes" +#, fuzzy msgid "disabled" -msgstr "" +msgstr "Disabled" +#, fuzzy msgid "disabled_button_quiz" -msgstr "" +msgstr "Your quiz score is below the threshold, try again!" +#, fuzzy msgid "discord_server" -msgstr "" +msgstr "Discord server" +#, fuzzy msgid "distinguished_user" -msgstr "" +msgstr "Distinguished user" +#, fuzzy msgid "double quotes" -msgstr "" +msgstr "double quotes" +#, fuzzy msgid "download" -msgstr "" +msgstr "Download" +#, fuzzy msgid "duplicate" -msgstr "" +msgstr "Duplicate" +#, fuzzy msgid "echo_and_ask_mismatch_exception" -msgstr "" +msgstr "Echo and ask mismatch" +#, fuzzy msgid "echo_out" -msgstr "" +msgstr "Starting in level 2 `{echo}` is no longer needed. You can repeat an answer with `{ask}` and `{print}` now. Example: `name {is} {ask} What are you called? {print} hello name`" +#, fuzzy msgid "edit_adventure" -msgstr "" +msgstr "Edit adventure" +#, fuzzy msgid "edit_code_button" -msgstr "" +msgstr "Edit code" +#, fuzzy msgid "email" -msgstr "" +msgstr "Email" +#, fuzzy msgid "email_invalid" -msgstr "" +msgstr "Please enter a valid email." +#, fuzzy msgid "end_quiz" -msgstr "" +msgstr "Quiz end" +#, fuzzy msgid "english" -msgstr "" +msgstr "English" +#, fuzzy msgid "enter" -msgstr "" +msgstr "Enter" +#, fuzzy msgid "enter_password" -msgstr "" +msgstr "Enter a new password for" +#, fuzzy msgid "enter_text" -msgstr "" +msgstr "Enter your answer here..." +#, fuzzy msgid "error_logo_alt" -msgstr "" +msgstr "Error logo" +#, fuzzy msgid "errors" -msgstr "" +msgstr "Errors" +#, fuzzy msgid "exclamation mark" -msgstr "" +msgstr "an exclamation mark" +#, fuzzy msgid "exercise" -msgstr "" +msgstr "Exercise" +#, fuzzy msgid "exercise_doesnt_exist" -msgstr "" +msgstr "This exercise doesn't exist" +#, fuzzy msgid "exists_email" -msgstr "" +msgstr "That email is already in use." +#, fuzzy msgid "exists_username" -msgstr "" +msgstr "That username is already in use." +#, fuzzy msgid "exit_preview_mode" -msgstr "" +msgstr "Exit preview mode" +#, fuzzy msgid "experience_invalid" -msgstr "" +msgstr "Please select a valid experience, choose (Yes, No)." +#, fuzzy msgid "expiration_date" -msgstr "" +msgstr "Expiration date" +#, fuzzy msgid "favorite_program" -msgstr "" +msgstr "Favorite program" +#, fuzzy msgid "favourite_confirm" -msgstr "" +msgstr "Are you sure you want to set this program as your favourite?" +#, fuzzy msgid "favourite_program" -msgstr "" +msgstr "Favourite program" +#, fuzzy msgid "favourite_program_invalid" -msgstr "" +msgstr "Your chosen favourite program is invalid." +#, fuzzy msgid "favourite_success" -msgstr "" +msgstr "Your program is set as favourite." +#, fuzzy msgid "feature" -msgstr "" +msgstr "Feature" +#, fuzzy msgid "feedback" -msgstr "" +msgstr "Feedback" +#, fuzzy msgid "feedback_message_error" -msgstr "" +msgstr "Something went wrong, please try again later." +#, fuzzy msgid "feedback_message_success" -msgstr "" +msgstr "Thank you, we received your feedback and will contact you if needed." +#, fuzzy msgid "feedback_modal_message" -msgstr "" +msgstr "Please send us a message with a category. We appreciate your help to improve Hedy!" +#, fuzzy msgid "female" -msgstr "" +msgstr "Female" +#, fuzzy msgid "flag_adventure_prompt" -msgstr "" +msgstr "Do you want to flag this adventure so that we check its appropriateness?" +#, fuzzy msgid "float" -msgstr "" +msgstr "a number" +#, fuzzy msgid "for_teachers" -msgstr "" +msgstr "For teachers" +#, fuzzy msgid "forgot_password" -msgstr "" +msgstr "Forgot your password?" +#, fuzzy msgid "from_another_teacher" -msgstr "" +msgstr "From another teacher" +#, fuzzy msgid "from_magazine_website" -msgstr "" +msgstr "From a magazine or website" +#, fuzzy msgid "from_video" -msgstr "" +msgstr "From a video" +#, fuzzy msgid "fun_statistics_msg" -msgstr "" +msgstr "Here are some fun statistics!" +#, fuzzy msgid "gender" -msgstr "" +msgstr "Gender" +#, fuzzy msgid "gender_invalid" -msgstr "" +msgstr "Please select a valid gender, choose (Female, Male, Other)." +#, fuzzy msgid "general_settings" -msgstr "" +msgstr "General settings" +#, fuzzy msgid "get_certificate" -msgstr "" +msgstr "Get your certificate!" +#, fuzzy msgid "give_link_to_teacher" -msgstr "" +msgstr "Give the following link to your teacher:" +#, fuzzy msgid "go_back" -msgstr "" +msgstr "Go back" +#, fuzzy msgid "go_back_to_main" -msgstr "" +msgstr "Go back to main page" +#, fuzzy msgid "go_to_question" -msgstr "" +msgstr "Go to question" +#, fuzzy msgid "go_to_quiz_result" -msgstr "" +msgstr "Go to quiz result" +#, fuzzy msgid "goto_profile" -msgstr "" +msgstr "Go to my profile" +#, fuzzy msgid "graph_title" -msgstr "" +msgstr "Errors per adventure completed on level {level}" +#, fuzzy msgid "hand_in" -msgstr "" +msgstr "Hand in" +#, fuzzy msgid "hand_in_exercise" -msgstr "" +msgstr "Hand in exercise" +#, fuzzy msgid "heard_about_hedy" -msgstr "" +msgstr "How have you heard about Hedy?" +#, fuzzy msgid "heard_about_invalid" -msgstr "" +msgstr "Please select a valid way you heard about us." +#, fuzzy msgid "hedy_choice_title" -msgstr "" +msgstr "Hedy's Choice" +#, fuzzy msgid "hedy_introduction_slides" -msgstr "" +msgstr "Hedy Introduction Slides" +#, fuzzy msgid "hedy_logo_alt" -msgstr "" +msgstr "Hedy logo" +#, fuzzy msgid "hedy_on_github" -msgstr "" +msgstr "Hedy on Github" +#, fuzzy msgid "hello_logo" -msgstr "" +msgstr "hello" +#, fuzzy msgid "hide_adventures" -msgstr "" +msgstr "Hide adventures" +#, fuzzy msgid "hide_cheatsheet" -msgstr "" +msgstr "Hide cheatsheet" +#, fuzzy msgid "hide_classes" -msgstr "" +msgstr "Hide classes" +#, fuzzy msgid "hide_keyword_switcher" -msgstr "" +msgstr "Hide keyword switcher" +#, fuzzy msgid "hide_slides" -msgstr "" +msgstr "Hide slides" +#, fuzzy msgid "highest_level_reached" -msgstr "" +msgstr "Highest level reached" +#, fuzzy msgid "highest_quiz_score" -msgstr "" +msgstr "Highest quiz score" +#, fuzzy msgid "hint" -msgstr "" +msgstr "Hint?" +#, fuzzy msgid "ill_work_some_more" -msgstr "" +msgstr "I'll work on it a little longer" +#, fuzzy msgid "image_invalid" -msgstr "" +msgstr "The image you chose is invalid." +#, fuzzy msgid "incomplete_command_exception" -msgstr "" +msgstr "Incomplete Command" +#, fuzzy msgid "incorrect_handling_of_quotes_exception" -msgstr "" +msgstr "Incorrect handling of quotes" +#, fuzzy msgid "incorrect_use_of_types_exception" -msgstr "" +msgstr "Incorrect use of types" +#, fuzzy msgid "incorrect_use_of_variable_exception" -msgstr "" +msgstr "Incorrect use of variable" +#, fuzzy msgid "indentation_exception" -msgstr "" +msgstr "Incorrect Indentation" +#, fuzzy msgid "input" -msgstr "" +msgstr "input from `{ask}`" +#, fuzzy msgid "input_variable_role" -msgstr "" +msgstr "input" +#, fuzzy msgid "integer" -msgstr "" +msgstr "a number" +#, fuzzy msgid "invalid_class_link" -msgstr "" +msgstr "Invalid link for joining the class." +#, fuzzy msgid "invalid_command_exception" -msgstr "" +msgstr "Invalid command" +#, fuzzy msgid "invalid_keyword_language_comment" -msgstr "" +msgstr "# The provided keyword language is invalid, keyword language is set to English" +#, fuzzy msgid "invalid_language_comment" -msgstr "" +msgstr "# The provided language is invalid, language set to English" +#, fuzzy msgid "invalid_level_comment" -msgstr "" +msgstr "# The provided level is invalid, level is set to level 1" +#, fuzzy msgid "invalid_program_comment" -msgstr "" +msgstr "# The provided program is invalid, please try again" +#, fuzzy msgid "invalid_teacher_invitation_code" -msgstr "" +msgstr "The teacher invitation code is invalid. To become a teacher, reach out to hello@hedy.org." +#, fuzzy msgid "invalid_tutorial_step" -msgstr "" +msgstr "Invalid tutorial step" +#, fuzzy msgid "invalid_username_password" -msgstr "" +msgstr "Invalid username/password." +#, fuzzy msgid "invite_by_username" -msgstr "" +msgstr "Invite by username" +#, fuzzy msgid "invite_date" -msgstr "" +msgstr "Invite date" +#, fuzzy msgid "invite_message" -msgstr "" +msgstr "You have received an invitation to join class" +#, fuzzy msgid "invite_prompt" -msgstr "" +msgstr "Enter a username" +#, fuzzy msgid "invite_teacher" -msgstr "" +msgstr "Invite a teacher" +#, fuzzy msgid "join_class" -msgstr "" +msgstr "Join class" +#, fuzzy msgid "join_prompt" -msgstr "" +msgstr "You need to have an account to join a class. Would you like to login now?" +#, fuzzy msgid "keybinding_waiting_for_keypress" -msgstr "" +msgstr "Waiting for a button press..." +#, fuzzy msgid "keyword_language_invalid" -msgstr "" +msgstr "Please select a valid keyword language (select English or your own language)." +#, fuzzy msgid "landcode_phone_number" -msgstr "" +msgstr "Please also add your country's landcode" +#, fuzzy msgid "language" -msgstr "" +msgstr "Language" +#, fuzzy msgid "language_invalid" -msgstr "" +msgstr "Please select a valid language." +#, fuzzy msgid "languages" -msgstr "" +msgstr "Which of these programming languages have you used before?" +#, fuzzy msgid "last_edited" -msgstr "" +msgstr "Last edited" +#, fuzzy msgid "last_update" -msgstr "" +msgstr "Last update" +#, fuzzy msgid "lastname" -msgstr "" +msgstr "Last Name" +#, fuzzy msgid "leave_class" -msgstr "" +msgstr "Leave class" +#, fuzzy msgid "level" -msgstr "" +msgstr "Level" +#, fuzzy msgid "level_accessible" -msgstr "" +msgstr "Level is open to students" +#, fuzzy msgid "level_disabled" -msgstr "" +msgstr "Level disabled" +#, fuzzy msgid "level_future" -msgstr "" +msgstr "This level automatically opens on " +#, fuzzy msgid "level_invalid" -msgstr "" +msgstr "This Hedy level is invalid." +#, fuzzy msgid "level_not_class" -msgstr "" +msgstr "This level has not been made available in your class yet" +#, fuzzy msgid "level_title" -msgstr "" +msgstr "Level" +#, fuzzy msgid "levels" -msgstr "" +msgstr "levels" +#, fuzzy msgid "link" -msgstr "" +msgstr "Link" +#, fuzzy msgid "list" -msgstr "" +msgstr "a list" +#, fuzzy msgid "list_variable_role" -msgstr "" +msgstr "list" +#, fuzzy msgid "logged_in_to_share" -msgstr "" +msgstr "You must be logged in to save and share a program." +#, fuzzy msgid "login" -msgstr "" +msgstr "Log in" +#, fuzzy msgid "login_long" -msgstr "" +msgstr "Log in to your account" +#, fuzzy msgid "login_to_save_your_work" -msgstr "" +msgstr "Log in to save your work" +#, fuzzy msgid "logout" -msgstr "" +msgstr "Log out" +#, fuzzy msgid "longest_program" -msgstr "" +msgstr "Longest program" +#, fuzzy msgid "mail_change_password_body" msgstr "" +"Your Hedy password has been changed. If you did this, all is good.\n" +"If you didn't change your password, please contact us immediately by replying to this email." +#, fuzzy msgid "mail_change_password_subject" -msgstr "" +msgstr "Your Hedy password has been changed" +#, fuzzy msgid "mail_error_change_processed" -msgstr "" +msgstr "Something went wrong when sending a validation mail, the changes are still correctly processed." +#, fuzzy msgid "mail_goodbye" msgstr "" +"Keep programming!\n" +"The Hedy team" +#, fuzzy msgid "mail_hello" -msgstr "" +msgstr "Hi {username}!" +#, fuzzy msgid "mail_recover_password_body" msgstr "" +"By clicking on this link, you can set a new Hedy password. This link is valid for 4 hours.\n" +"If you haven't required a password reset, please ignore this email: {link}" +#, fuzzy msgid "mail_recover_password_subject" -msgstr "" +msgstr "Request a password reset." +#, fuzzy msgid "mail_reset_password_body" msgstr "" +"Your Hedy password has been reset to a new one. If you did this, all is good.\n" +"If you didn't change your password, please contact us immediately by replying to this email." +#, fuzzy msgid "mail_reset_password_subject" -msgstr "" +msgstr "Your Hedy password has been reset" +#, fuzzy msgid "mail_welcome_teacher_body" msgstr "" - +"Welcome!\n" +"Congratulations on your brand new Hedy teacher's account. Welcome to the world wide community of Hedy teachers!\n" +"\n" +"What teacher's accounts can do\n" +"There are a number of extra options unlocked for you now.\n" +"\n" +"1. Extra explanation is available in the teacher's manual.\n" +"2. With your teacher account, you can create classes. Your students can than join your classes and you can see their progress. Classes are made and managed though the for teachers page.\n" +"3. You can fully customize your classes, for example you can open and close levels, enable or disable adventures and author your own adventures!\n" +"\n" +"Join our online community!\n" +"All Hedy teachers, programmers and other fans are welcome to join our Discord server. This is the ideal place to chat about Hedy: we have channels where you can show your cool projects and lessons, channels to report bugs, and channels to chat with other teachers and with the Hedy team.\n" +"\n" +"How to ask for help \n" +"If anything is unclear, you can let us know on Discord, or send us an email.\n" +"\n" +"How to report bugs\n" +"In Discord, we have a channel for reporting bugs, called #bugs. That is the perfect place to let us know about issues you are running into. If you know how to use GitHub, you can create an issue there.\n" + +#, fuzzy msgid "mail_welcome_teacher_subject" -msgstr "" +msgstr "Your Hedy teacher account is ready" +#, fuzzy msgid "mail_welcome_verify_body" msgstr "" +"Your Hedy account has been created successfully. Welcome!\n" +"Please click on this link to verify your email address: {link}" +#, fuzzy msgid "mail_welcome_verify_subject" -msgstr "" +msgstr "Welcome to Hedy" +#, fuzzy msgid "mailing_title" -msgstr "" +msgstr "Subscribe to the Hedy newsletter" +#, fuzzy msgid "main_subtitle" -msgstr "" +msgstr "Textual programming for the classroom" +#, fuzzy msgid "main_title" -msgstr "" +msgstr "Hedy" +#, fuzzy msgid "make_sure_you_are_done" -msgstr "" +msgstr "Make sure you are done! You will not be able to change your program anymore after you click \"Hand in\"." +#, fuzzy msgid "male" -msgstr "" +msgstr "Male" +#, fuzzy msgid "mandatory_mode" -msgstr "" +msgstr "Mandatory developer's mode" +#, fuzzy msgid "more_info" -msgstr "" +msgstr "More information" +#, fuzzy msgid "more_options" -msgstr "" +msgstr "More options" +#, fuzzy msgid "multiple_keywords_warning" -msgstr "" +msgstr "You are trying to use the keyword {orig_keyword}, but this keyword might have several meanings. Please choose the one you're trying to use from this list and copy paste it in your code, curly braces included: {keyword_list}" +#, fuzzy msgid "multiple_levels_warning" -msgstr "" +msgstr "We've noticed you have both selected several levels and included code snippets in your adventure, this might cause issues with the syntax highlighter and the automatic translation of keywords" +#, fuzzy msgid "my_account" -msgstr "" +msgstr "My account" +#, fuzzy msgid "my_adventures" -msgstr "" +msgstr "My adventures" +#, fuzzy msgid "my_classes" -msgstr "" +msgstr "My classes" +#, fuzzy msgid "my_messages" -msgstr "" +msgstr "My messages" +#, fuzzy msgid "my_public_profile" -msgstr "" +msgstr "My public profile" +#, fuzzy msgid "name" -msgstr "" +msgstr "Name" +#, fuzzy msgid "nav_explore" -msgstr "" +msgstr "Explore" +#, fuzzy msgid "nav_hedy" -msgstr "" +msgstr "Hedy" +#, fuzzy msgid "nav_learn_more" -msgstr "" +msgstr "Learn more" +#, fuzzy msgid "nav_start" -msgstr "" +msgstr "Home" +#, fuzzy msgid "new_password" -msgstr "" +msgstr "New password" +#, fuzzy msgid "new_password_repeat" -msgstr "" +msgstr "Repeat new password" +#, fuzzy msgid "newline" -msgstr "" +msgstr "a new line" +#, fuzzy msgid "next_adventure" -msgstr "" +msgstr "Next adventure" +#, fuzzy msgid "next_exercise" -msgstr "" +msgstr "Next exercise" +#, fuzzy msgid "next_page" -msgstr "" +msgstr "Next page" +#, fuzzy msgid "next_step_tutorial" -msgstr "" +msgstr "Next step >>>" +#, fuzzy msgid "next_student" -msgstr "" +msgstr "Next student" +#, fuzzy msgid "no" -msgstr "" +msgstr "No" +#, fuzzy msgid "no_account" -msgstr "" +msgstr "No account?" +#, fuzzy msgid "no_accounts" -msgstr "" +msgstr "There are no accounts to create." +#, fuzzy msgid "no_adventures_yet" -msgstr "" +msgstr "There are no public adventures yet..." +#, fuzzy msgid "no_more_flat_if" -msgstr "" +msgstr "Starting in level 8, the code after `{if}` needs to be placed on the next line and start with 4 spaces." +#, fuzzy msgid "no_programs" -msgstr "" +msgstr "There are no programs." +#, fuzzy msgid "no_shared_programs" -msgstr "" +msgstr "has no shared programs..." +#, fuzzy msgid "no_students" -msgstr "" +msgstr "There are no students in this class" +#, fuzzy msgid "no_such_adventure" -msgstr "" +msgstr "This adventure doesn't exist!" +#, fuzzy msgid "no_such_class" -msgstr "" +msgstr "No such Hedy class." +#, fuzzy msgid "no_such_level" -msgstr "" +msgstr "No such Hedy level!" +#, fuzzy msgid "no_such_program" -msgstr "" +msgstr "No such Hedy program!" +#, fuzzy msgid "no_tag" -msgstr "" +msgstr "No tag provided!" +#, fuzzy msgid "not_adventure_yet" -msgstr "" +msgstr "You must fill in an adventure name first" +#, fuzzy msgid "not_enrolled" -msgstr "" +msgstr "Looks like you are not in this class!" +#, fuzzy msgid "not_in_class_no_handin" -msgstr "" +msgstr "You are not in a class, so there's no need for you to hand in anything." +#, fuzzy msgid "not_logged_in_cantsave" -msgstr "" +msgstr "Your program will not be saved." +#, fuzzy msgid "not_logged_in_handin" -msgstr "" +msgstr "You must be logged in to hand in an assignment." +#, fuzzy msgid "not_teacher" -msgstr "" +msgstr "Looks like you are not a teacher!" +#, fuzzy msgid "number" -msgstr "" +msgstr "a number" +#, fuzzy msgid "number_lines" -msgstr "" +msgstr "Number of lines" +#, fuzzy msgid "number_of_errors" -msgstr "" +msgstr "Number of errors: {number_of_errors}" +#, fuzzy msgid "number_programs" -msgstr "" +msgstr "Number of programs ran" +#, fuzzy msgid "ok" -msgstr "" +msgstr "OK" +#, fuzzy msgid "one_level_error" -msgstr "" +msgstr "You need to select at least one level." +#, fuzzy msgid "only_you_can_see" -msgstr "" +msgstr "Only you can see this program." +#, fuzzy msgid "open" -msgstr "" +msgstr "Open" +#, fuzzy msgid "opening_date" -msgstr "" +msgstr "Opening date" +#, fuzzy msgid "opening_dates" -msgstr "" +msgstr "Opening dates" +#, fuzzy msgid "option" -msgstr "" +msgstr "Option" +#, fuzzy msgid "or" -msgstr "" +msgstr "or" +#, fuzzy msgid "other" -msgstr "" +msgstr "Other" +#, fuzzy msgid "other_block" -msgstr "" +msgstr "Another block language" +#, fuzzy msgid "other_settings" -msgstr "" +msgstr "Other settings" +#, fuzzy msgid "other_source" -msgstr "" +msgstr "Other" +#, fuzzy msgid "other_text" -msgstr "" +msgstr "Another text language" +#, fuzzy msgid "overwrite_warning" -msgstr "" +msgstr "You already have a program with this name, saving this program will replace the old one. Are you sure?" +#, fuzzy msgid "owner" -msgstr "" +msgstr "Owner" +#, fuzzy msgid "page_not_found" -msgstr "" +msgstr "We couldn't find that page!" +#, fuzzy msgid "pair_with_teacher" -msgstr "" +msgstr "I would like to be paired with another teacher for help" +#, fuzzy msgid "parsons_title" -msgstr "" +msgstr "Puzzle" +#, fuzzy msgid "password" -msgstr "" +msgstr "Password" +#, fuzzy msgid "password_change_not_allowed" -msgstr "" +msgstr "You're not allowed to change the password of this user." +#, fuzzy msgid "password_change_prompt" -msgstr "" +msgstr "Are you sure you want to change this password?" +#, fuzzy msgid "password_change_success" -msgstr "" +msgstr "Password of your student is successfully changed." +#, fuzzy msgid "password_invalid" -msgstr "" +msgstr "Your password is invalid." +#, fuzzy msgid "password_repeat" -msgstr "" +msgstr "Repeat password" +#, fuzzy msgid "password_resetted" -msgstr "" +msgstr "Your password has been successfully reset. You are being redirected to the login page." +#, fuzzy msgid "password_six" -msgstr "" +msgstr "Your password must contain at least six characters." +#, fuzzy msgid "password_updated" -msgstr "" +msgstr "Password updated." +#, fuzzy msgid "passwords_six" -msgstr "" +msgstr "All passwords need to be six characters or longer." +#, fuzzy msgid "passwords_too_short" -msgstr "" +msgstr "Passwords must be at least 6 characters long. Correct the following passwords, so that they are at least 6 symbols: {passwords}" +#, fuzzy msgid "pending_invites" -msgstr "" +msgstr "Pending invites" +#, fuzzy msgid "people_with_a_link" -msgstr "" +msgstr "Other people with a link can see this program. It also can be found on the \"Explore\" page." +#, fuzzy msgid "percentage" -msgstr "" +msgstr "percentage" +#, fuzzy msgid "period" -msgstr "" +msgstr "a period" +#, fuzzy msgid "personal_text" -msgstr "" +msgstr "Personal text" +#, fuzzy msgid "personal_text_invalid" -msgstr "" +msgstr "Your personal text is invalid." +#, fuzzy msgid "phone_number" -msgstr "" +msgstr "Phone number" +#, fuzzy msgid "preferred_keyword_language" -msgstr "" +msgstr "Preferred keyword language" +#, fuzzy msgid "preferred_language" -msgstr "" +msgstr "Preferred language" +#, fuzzy msgid "preview" -msgstr "" +msgstr "Preview" +#, fuzzy msgid "preview_teacher_mode" -msgstr "" +msgstr "This account is for you to try out Hedy, note that you need to sign out and create an actual account to save your progress." +#, fuzzy msgid "previewing_adventure" -msgstr "" +msgstr "Previewing adventure" +#, fuzzy msgid "previewing_class" -msgstr "" +msgstr "You are previewing class {class_name} as a teacher." +#, fuzzy msgid "previous_campaigns" -msgstr "" +msgstr "View previous campaigns" +#, fuzzy msgid "previous_page" -msgstr "" +msgstr "Previous page" +#, fuzzy msgid "print_accounts" -msgstr "" +msgstr "Print" +#, fuzzy msgid "print_logo" -msgstr "" +msgstr "print" +#, fuzzy msgid "privacy_terms" -msgstr "" +msgstr "Privacy terms" +#, fuzzy msgid "private" -msgstr "" +msgstr "Private" +#, fuzzy msgid "profile_logo_alt" -msgstr "" +msgstr "Profile icon." +#, fuzzy msgid "profile_picture" -msgstr "" +msgstr "Profile picture" +#, fuzzy msgid "profile_updated" -msgstr "" +msgstr "Profile updated." +#, fuzzy msgid "profile_updated_reload" -msgstr "" +msgstr "Profile updated, page will be re-loaded." +#, fuzzy msgid "program_contains_error" -msgstr "" +msgstr "This program contains an error, are you sure you want to share it?" +#, fuzzy msgid "program_header" -msgstr "" +msgstr "My programs" +#, fuzzy msgid "program_too_large_exception" -msgstr "" +msgstr "Programs too large" +#, fuzzy msgid "programming_experience" -msgstr "" +msgstr "Do you have programming experience?" +#, fuzzy msgid "programming_invalid" -msgstr "" +msgstr "Please select a valid programming language." +#, fuzzy msgid "programs" -msgstr "" +msgstr "Programs" +#, fuzzy msgid "prompt_join_class" -msgstr "" +msgstr "Do you want to join this class?" +#, fuzzy msgid "provided_username_duplicates" -msgstr "" +msgstr "You supplied the following usernames more than once: {usernames}" +#, fuzzy msgid "public" -msgstr "" +msgstr "Public" +#, fuzzy msgid "public_adventures" -msgstr "" +msgstr "Browse public adventures" +#, fuzzy msgid "public_content" -msgstr "" +msgstr "Public content" +#, fuzzy msgid "public_content_info" -msgstr "" +msgstr "You can also look for public adventures and use them as an example." +#, fuzzy msgid "public_invalid" -msgstr "" +msgstr "This agreement selection is invalid" +#, fuzzy msgid "public_profile" -msgstr "" +msgstr "Public profile" +#, fuzzy msgid "public_profile_info" -msgstr "" +msgstr "By selecting this box I make my profile visible for everyone. Be careful not to share personal information like your name or home address, because everyone will be able to see it!" +#, fuzzy msgid "public_profile_updated" -msgstr "" +msgstr "Public profile updated, page will be re-loaded." +#, fuzzy msgid "put" -msgstr "" +msgstr "Put" +#, fuzzy msgid "question mark" -msgstr "" +msgstr "a question mark" +#, fuzzy msgid "quiz_logo_alt" -msgstr "" +msgstr "Quiz logo" +#, fuzzy msgid "quiz_score" -msgstr "" +msgstr "Quiz score" +#, fuzzy msgid "quiz_tab" -msgstr "" +msgstr "Quiz" +#, fuzzy msgid "quiz_threshold_not_reached" -msgstr "" +msgstr "Quiz threshold not reached to unlock this level" +#, fuzzy msgid "read_code_label" -msgstr "" +msgstr "Read aloud" +#, fuzzy msgid "recent" -msgstr "" +msgstr "My recent programs" +#, fuzzy msgid "recover_password" -msgstr "" +msgstr "Request a password reset" +#, fuzzy msgid "regress_button" -msgstr "" +msgstr "Go back to level {level}" +#, fuzzy msgid "remove" -msgstr "" +msgstr "Remove" +#, fuzzy msgid "remove_customization" -msgstr "" +msgstr "Remove customization" +#, fuzzy msgid "remove_customizations_prompt" -msgstr "" +msgstr "Are you sure you want to remove this class's customizations?" +#, fuzzy msgid "remove_student_prompt" -msgstr "" +msgstr "Are you sure you want to remove the student from the class?" +#, fuzzy msgid "remove_user_prompt" -msgstr "" +msgstr "Confirm removing this user from the class." +#, fuzzy msgid "repair_program_logo_alt" -msgstr "" +msgstr "Repair program icon" +#, fuzzy msgid "repeat_dep" -msgstr "" +msgstr "Starting in level 8, `{repeat}` needs to be used with indentation. You can see examples on the `{repeat}` tab in level 8." +#, fuzzy msgid "repeat_match_password" -msgstr "" +msgstr "The repeated password does not match." +#, fuzzy msgid "repeat_new_password" -msgstr "" +msgstr "Repeat new password" +#, fuzzy msgid "report_failure" -msgstr "" +msgstr "This program does not exist or is not public" +#, fuzzy msgid "report_program" -msgstr "" +msgstr "Are you sure you want to report this program?" +#, fuzzy msgid "report_success" -msgstr "" +msgstr "This program has been reported" +#, fuzzy msgid "request_invalid" -msgstr "" +msgstr "Request invalid" +#, fuzzy msgid "request_teacher" -msgstr "" +msgstr "Would you like to become a teacher?" +#, fuzzy msgid "request_teacher_account" -msgstr "" +msgstr "Become a teacher" +#, fuzzy msgid "required_field" -msgstr "" +msgstr "Fields marked with an * are required" +#, fuzzy msgid "reset_adventure_prompt" -msgstr "" +msgstr "Are you sure you want to reset all selected adventures?" +#, fuzzy msgid "reset_adventures" -msgstr "" +msgstr "Reset selected adventures" +#, fuzzy msgid "reset_button" -msgstr "" +msgstr "Reset" +#, fuzzy msgid "reset_password" -msgstr "" +msgstr "Reset password" +#, fuzzy msgid "restart" -msgstr "" +msgstr "Restart" +#, fuzzy msgid "retrieve_adventure_error" -msgstr "" +msgstr "You're not allowed to view this adventure!" +#, fuzzy msgid "retrieve_class_error" -msgstr "" +msgstr "Only teachers can retrieve classes" +#, fuzzy msgid "retrieve_tag_error" -msgstr "" +msgstr "Error retrieving tags" +#, fuzzy msgid "role" -msgstr "" +msgstr "Role" +#, fuzzy msgid "run_code_button" -msgstr "" +msgstr "Run code" +#, fuzzy msgid "save_parse_warning" -msgstr "" +msgstr "This program contains an error, are you sure you want to save it?" +#, fuzzy msgid "save_prompt" -msgstr "" +msgstr "You need to have an account to save your program. Would you like to login now?" +#, fuzzy msgid "save_success_detail" -msgstr "" +msgstr "Program saved successfully." +#, fuzzy msgid "score" -msgstr "" +msgstr "Score" +#, fuzzy msgid "search" -msgstr "" +msgstr "Search..." +#, fuzzy msgid "search_button" -msgstr "" +msgstr "Search" +#, fuzzy msgid "second_teacher" -msgstr "" +msgstr "Second teacher" +#, fuzzy msgid "second_teacher_copy_prompt" -msgstr "" +msgstr "Are you sure you want to copy this teacher?" +#, fuzzy msgid "second_teacher_prompt" -msgstr "" +msgstr "Enter a teacher username to invite them." +#, fuzzy msgid "second_teacher_warning" -msgstr "" +msgstr "All teachers in this class can customize it." +#, fuzzy msgid "see_certificate" -msgstr "" +msgstr "See {username} certificate!" +#, fuzzy msgid "select" -msgstr "" +msgstr "Select" +#, fuzzy msgid "select_adventures" -msgstr "" +msgstr "Select and order adventures" +#, fuzzy msgid "select_all" -msgstr "" +msgstr "Select all" +#, fuzzy msgid "select_lang" -msgstr "" +msgstr "Select language" +#, fuzzy msgid "select_levels" -msgstr "" +msgstr "Select levels" +#, fuzzy msgid "select_tag" -msgstr "" +msgstr "Select tag" +#, fuzzy msgid "selected" -msgstr "" +msgstr "Selected" +#, fuzzy msgid "self_removal_prompt" -msgstr "" +msgstr "Are you sure you want to leave this class?" +#, fuzzy msgid "send_password_recovery" -msgstr "" +msgstr "Send me a password recovery link" +#, fuzzy msgid "sent_by" -msgstr "" +msgstr "This invitation is sent by" +#, fuzzy msgid "sent_password_recovery" -msgstr "" +msgstr "You should soon receive an email with instructions on how to reset your password." +#, fuzzy msgid "settings" -msgstr "" +msgstr "My personal settings" +#, fuzzy msgid "share" -msgstr "" +msgstr "Share" +#, fuzzy msgid "share_by_giving_link" -msgstr "" +msgstr "Show your program to other people by giving them the link below:" +#, fuzzy msgid "share_your_program" -msgstr "" +msgstr "Share your program" +#, fuzzy msgid "signup_student_or_teacher" -msgstr "" +msgstr "Are you a student or a teacher?" +#, fuzzy msgid "single quotes" -msgstr "" +msgstr "a single quote" +#, fuzzy msgid "slash" -msgstr "" +msgstr "a slash" +#, fuzzy msgid "sleeping" -msgstr "" +msgstr "Sleeping..." +#, fuzzy msgid "slides" -msgstr "" +msgstr "Slides" +#, fuzzy msgid "slides_for_level" -msgstr "" +msgstr "Slides for level" +#, fuzzy msgid "slides_info" -msgstr "" +msgstr "For each level of Hedy, we have created slides to help you teach. The slides contain explanations of each level, and Hedy examples that you can run inside the slides. Just click the link and get started! the Introduction slides are a general explanation of Hedy before level 1 The slides were created using slides.com. If you want to adapt them yourself, you can download them, and then upload the resulting zip file to slides.com. You can find more information about the slides in the teacher's manual." +#, fuzzy msgid "social_media" -msgstr "" +msgstr "Social media" +#, fuzzy msgid "solution_example" -msgstr "" +msgstr "Solution Example" +#, fuzzy msgid "solution_example_explanation" -msgstr "" +msgstr "This is where the solution of your adventure goes. This can be used if you want to share this adventure with other teacher's, so they can know what your suggested solution is." +#, fuzzy msgid "some_rows_missing_separator" -msgstr "" +msgstr "The following rows are missing a semicolon, so either the username or the password is missing: {rows}" +#, fuzzy msgid "something_went_wrong_keyword_parsing" -msgstr "" +msgstr "There is a mistake in your adventure, are all keywords correctly surrounded with { }?" +#, fuzzy msgid "space" -msgstr "" +msgstr "a space" +#, fuzzy msgid "star" -msgstr "" +msgstr "a star" +#, fuzzy msgid "start_learning" -msgstr "" +msgstr "Start learning" +#, fuzzy msgid "start_quiz" -msgstr "" +msgstr "Start quiz" +#, fuzzy msgid "start_teaching" -msgstr "" +msgstr "Start teaching" +#, fuzzy msgid "step_title" -msgstr "" +msgstr "Assignment" +#, fuzzy msgid "stepper_variable_role" -msgstr "" +msgstr "stepper" +#, fuzzy msgid "stop" -msgstr "" +msgstr "Stop" +#, fuzzy msgid "stop_code_button" -msgstr "" +msgstr "Stop program" +#, fuzzy msgid "string" -msgstr "" +msgstr "text" +#, fuzzy msgid "student" -msgstr "" +msgstr "Student" +#, fuzzy msgid "student_accounts_created" -msgstr "" +msgstr "Successfully created student accounts" +#, fuzzy msgid "student_adventures_table" -msgstr "" +msgstr "Student's Adventures" +#, fuzzy msgid "student_adventures_table_explanation" -msgstr "" +msgstr "This table displays the programs created by students for each adventure in a level. By clicking the eye icon, you can view the program's page; after reviewing the program, you can tick the checkmark to indicate completion." +#, fuzzy msgid "student_already_in_class" -msgstr "" +msgstr "This student is already in your class." +#, fuzzy msgid "student_already_invite" -msgstr "" +msgstr "This student already has a pending invitation." +#, fuzzy msgid "student_in_another_class" -msgstr "" +msgstr "This student is in another class. Ask the student to leave all classes and try again." +#, fuzzy msgid "student_information" -msgstr "" +msgstr "Student's Information" +#, fuzzy msgid "student_information_explanation" -msgstr "" +msgstr "This table displays basic information about the students in your class. There are also several actions you can do in this table: change the password of a student by clicking the pencil icon, view the program's page of a student by clicking the code icon, and delete a student from the class by clicking the red bin icon." +#, fuzzy msgid "student_not_existing" -msgstr "" +msgstr "This username doesn't exist." +#, fuzzy msgid "student_signup_header" -msgstr "" +msgstr "Student" +#, fuzzy msgid "students" -msgstr "" +msgstr "students" +#, fuzzy msgid "submission_time" -msgstr "" +msgstr "Handed in at" +#, fuzzy msgid "submit_answer" -msgstr "" +msgstr "Answer question" +#, fuzzy msgid "submit_program" -msgstr "" +msgstr "Submit" +#, fuzzy msgid "submit_warning" -msgstr "" +msgstr "Are you sure you want to submit this program?" +#, fuzzy msgid "submitted" -msgstr "" +msgstr "Submitted" +#, fuzzy msgid "submitted_header" -msgstr "" +msgstr "This is a submitted program and can't be altered." +#, fuzzy msgid "subscribe" -msgstr "" +msgstr "Subscribe" +#, fuzzy msgid "subscribe_newsletter" -msgstr "" +msgstr "Subscribe to the newsletter" +#, fuzzy msgid "successful_runs" -msgstr "" +msgstr "Successful runs: {successful_runs}" +#, fuzzy msgid "suggestion_color" -msgstr "" +msgstr "Try using another color" +#, fuzzy msgid "suggestion_note" -msgstr "" +msgstr "Try using a note between C0 and B9 or a number between 1 and 70" +#, fuzzy msgid "suggestion_number" -msgstr "" +msgstr "Try changing the value to a number" +#, fuzzy msgid "suggestion_numbers_or_strings" -msgstr "" +msgstr "Try changing the values to be all text or all numbers" +#, fuzzy msgid "surname" -msgstr "" +msgstr "First Name" +#, fuzzy msgid "survey" -msgstr "" +msgstr "Survey" +#, fuzzy msgid "survey_completed" -msgstr "" +msgstr "Survey completed" +#, fuzzy msgid "survey_skip" -msgstr "" +msgstr "Don't show this again" +#, fuzzy msgid "survey_submit" -msgstr "" +msgstr "Submit" +#, fuzzy msgid "tag_in_adventure" -msgstr "" +msgstr "Tag in adventure" +#, fuzzy msgid "tag_input_placeholder" -msgstr "" +msgstr "Enter a new tag" +#, fuzzy msgid "tags" -msgstr "" +msgstr "Tags" +#, fuzzy msgid "teacher" -msgstr "" +msgstr "Teacher" +#, fuzzy msgid "teacher_invalid" -msgstr "" +msgstr "Your teacher value is invalid." +#, fuzzy msgid "teacher_invitation_require_login" -msgstr "" +msgstr "To set up your profile as a teacher, we will need you to log in. If you don't have an account, please create one." +#, fuzzy msgid "teacher_manual" -msgstr "" +msgstr "Teacher manual" +#, fuzzy msgid "teacher_signup_header" -msgstr "" +msgstr "Teacher" +#, fuzzy msgid "teacher_welcome" -msgstr "" +msgstr "Welcome to Hedy! Your are now the proud owner of a teachers account which allows you to create classes and invite students." +#, fuzzy msgid "teachers" -msgstr "" +msgstr "Teachers" +#, fuzzy msgid "template_code" msgstr "" - +"This is the explanation of my adventure!\n" +"\n" +"This way I can show a command: print\n" +"\n" +"But sometimes I might want to show a piece of code, like this:\n" +"
\n"
+"ask What's your name?\n"
+"echo so your name is \n"
+"
" + +#, fuzzy msgid "this_turns_in_assignment" -msgstr "" +msgstr "This turns in your assignment to your teacher." +#, fuzzy msgid "title" -msgstr "" +msgstr "Title" +#, fuzzy msgid "title_admin" -msgstr "" +msgstr "Hedy - Administrator page" +#, fuzzy msgid "title_class-overview" -msgstr "" +msgstr "Hedy - Class overview" +#, fuzzy msgid "title_customize-adventure" -msgstr "" +msgstr "Hedy - Customize adventure" +#, fuzzy msgid "title_customize-class" -msgstr "" +msgstr "Hedy - Customize class" +#, fuzzy msgid "title_explore" -msgstr "" +msgstr "Hedy - Explore" +#, fuzzy msgid "title_for-teacher" -msgstr "" +msgstr "Hedy - For teachers" +#, fuzzy msgid "title_join-class" -msgstr "" +msgstr "Hedy - Join class" +#, fuzzy msgid "title_learn-more" -msgstr "" +msgstr "Hedy - Learn more" +#, fuzzy msgid "title_login" -msgstr "" +msgstr "Hedy - Login" +#, fuzzy msgid "title_my-profile" -msgstr "" +msgstr "Hedy - My account" +#, fuzzy msgid "title_privacy" -msgstr "" +msgstr "Hedy - Privacy terms" +#, fuzzy msgid "title_programs" -msgstr "" +msgstr "Hedy - My programs" +#, fuzzy msgid "title_public-adventures" -msgstr "" +msgstr "Hedy - Public adventures" +#, fuzzy msgid "title_recover" -msgstr "" +msgstr "Hedy - Recover account" +#, fuzzy msgid "title_reset" -msgstr "" +msgstr "Hedy - Reset password" +#, fuzzy msgid "title_signup" -msgstr "" +msgstr "Hedy - Create an account" +#, fuzzy msgid "title_start" -msgstr "" +msgstr "Hedy - Textual programming made easy" +#, fuzzy msgid "title_view-adventure" -msgstr "" +msgstr "Hedy - View adventure" +#, fuzzy msgid "token_invalid" -msgstr "" +msgstr "Your token is invalid." +#, fuzzy msgid "too_many_accounts" -msgstr "" +msgstr "You cannot create more than 100 student accounts." +#, fuzzy msgid "tooltip_level_locked" -msgstr "" +msgstr "Your teacher disabled this level" +#, fuzzy msgid "translate_error" -msgstr "" +msgstr "Something went wrong while translating the code. Try running the code to see if it has an error. Code with errors can not be translated." +#, fuzzy msgid "translating_hedy" -msgstr "" +msgstr "Translating Hedy" +#, fuzzy msgid "translator" -msgstr "" +msgstr "Translator" +#, fuzzy msgid "turned_into_teacher" -msgstr "" +msgstr "Congratulations! You successfully turned into a teacher." +#, fuzzy msgid "tutorial" -msgstr "" +msgstr "Tutorial" +#, fuzzy msgid "tutorial_code_snippet" msgstr "" +"{print} Hello world!\n" +"{print} I'm learning Hedy with the tutorial!" +#, fuzzy msgid "tutorial_message_not_found" -msgstr "" +msgstr "We couldn't find the requested tutorial step..." +#, fuzzy msgid "tutorial_title_not_found" -msgstr "" +msgstr "Tutorial step not found" +#, fuzzy msgid "unauthorized" -msgstr "" +msgstr "You don't have access rights for this page" +#, fuzzy msgid "unfavourite_confirm" -msgstr "" +msgstr "Are you sure you want to unfavourite this program?" +#, fuzzy msgid "unfavourite_success" -msgstr "" +msgstr "Your program is unfavourited." +#, fuzzy msgid "unknown_variable_role" -msgstr "" +msgstr "unknown" +#, fuzzy msgid "unlock_thresholds" -msgstr "" +msgstr "Unlock level thresholds" +#, fuzzy msgid "unsaved_class_changes" -msgstr "" +msgstr "There are unsaved changes, are you sure you want to leave this page?" +#, fuzzy msgid "unsubmit_program" -msgstr "" +msgstr "Unsubmit program" +#, fuzzy msgid "unsubmit_warning" -msgstr "" +msgstr "Are you sure you want to unsubmit this program?" +#, fuzzy msgid "unsubmitted" -msgstr "" +msgstr "Unsubmitted" +#, fuzzy msgid "update_adventure_prompt" -msgstr "" +msgstr "Are you sure you want to update this adventure?" +#, fuzzy msgid "update_public" -msgstr "" +msgstr "Update public profile" +#, fuzzy msgid "updating_indicator" -msgstr "" +msgstr "Updating" +#, fuzzy msgid "use_custom_passwords" -msgstr "" +msgstr "Provide your own passwords" +#, fuzzy msgid "use_generated_passwords" -msgstr "" +msgstr "Auto generate passwords" +#, fuzzy msgid "use_of_blanks_exception" -msgstr "" +msgstr "Use of blanks in programs" +#, fuzzy msgid "use_of_nested_functions_exception" -msgstr "" +msgstr "Use of nested functions" +#, fuzzy msgid "used_in" -msgstr "" +msgstr "Used in:" +#, fuzzy msgid "user" -msgstr "" +msgstr "user" +#, fuzzy msgid "user_inexistent" -msgstr "" +msgstr "This user doesn't exist" +#, fuzzy msgid "user_not_private" -msgstr "" +msgstr "This user either doesn't exist or doesn't have a public profile" +#, fuzzy msgid "username" -msgstr "" +msgstr "Username" +#, fuzzy msgid "username_contains_invalid_symbol" -msgstr "" +msgstr "Usernames cannot contain the symbol ':' or '@'. Remove these symbols from following rows: {usernames}" +#, fuzzy msgid "username_contains_separator" -msgstr "" +msgstr "Usernames cannot contain a semicolon. Perhaps you want to supply your own passwords? If so, click the passwords toggle and create the accounts again. If this is not the case, remove the semicolon from the following usernames: {usernames}" +#, fuzzy msgid "username_empty" -msgstr "" +msgstr "You didn't enter an username!" +#, fuzzy msgid "username_invalid" -msgstr "" +msgstr "Your username is invalid." +#, fuzzy msgid "username_special" -msgstr "" +msgstr "Username cannot contain `:` or `@`." +#, fuzzy msgid "username_three" -msgstr "" +msgstr "Username must contain at least three characters." +#, fuzzy msgid "usernames_too_short" -msgstr "" +msgstr "Usernames must be at least 3 characters long. Correct the following usernames, so that they are 3 or more symbols: {usernames}" +#, fuzzy msgid "usernames_unavailable" -msgstr "" +msgstr "The following usernames are not available: {usernames}. You can create similar accounts, for example, by appending an underscore or your class name." +#, fuzzy msgid "value" -msgstr "" +msgstr "Value" +#, fuzzy msgid "view_adventures" -msgstr "" +msgstr "View adventures" +#, fuzzy msgid "view_classes" -msgstr "" +msgstr "View classes" +#, fuzzy msgid "view_program" -msgstr "" +msgstr "View program" +#, fuzzy msgid "view_slides" -msgstr "" +msgstr "View slides" +#, fuzzy msgid "waiting_for_submit" -msgstr "" +msgstr "Waiting for submit" +#, fuzzy msgid "walker_variable_role" -msgstr "" +msgstr "walker" +#, fuzzy msgid "what_is_your_role" -msgstr "" +msgstr "What is your role?" +#, fuzzy msgid "what_should_my_code_do" -msgstr "" +msgstr "What should my code do?" +#, fuzzy msgid "year_invalid" -msgstr "" +msgstr "Please enter a year between 1900 and {current_year}." +#, fuzzy msgid "yes" -msgstr "" +msgstr "Yes" +#, fuzzy msgid "your_personal_text" -msgstr "" +msgstr "Your personal text..." +#, fuzzy msgid "your_program" -msgstr "" +msgstr "Your program" From 245a16ac88adad7271914b0f9fde848756ffd0c4 Mon Sep 17 00:00:00 2001 From: R_SACI Date: Sun, 27 Oct 2024 22:55:43 +0100 Subject: [PATCH 05/13] Translated using Weblate (Kabyle) Currently translated at 4.1% (1 of 24 strings) Co-authored-by: R_SACI Translate-URL: https://hosted.weblate.org/projects/hedy/client-messages/kab/ Translation: Hedy/client-messages --- content/client-messages/kab.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/client-messages/kab.yaml b/content/client-messages/kab.yaml index 8ac6ad649ca..90d7ae6b2d6 100644 --- a/content/client-messages/kab.yaml +++ b/content/client-messages/kab.yaml @@ -5,7 +5,7 @@ Errors_found: You made a mistake! Don't worry, we still ran the program ServerError: You wrote a program we weren't expecting. If you want to help, send us an email with the level and your program at hello@hedy.org. In the meantime, try something a little different and take another look at the examples. Thanks! restaurant: 🍣, 🍕, 🍔 Execute_error: Something went wrong while running the program. -CheckInternet: Check whether your Internet connection is working. +CheckInternet: Senqed tuqqna-k ɣer Internet tetteddu akken iwata. Transpile_success: - Good job! - Amazing! From 59501227668a15bc25e09b8dbde3daa766b54280 Mon Sep 17 00:00:00 2001 From: Prefill add-on Date: Sun, 27 Oct 2024 21:55:51 +0000 Subject: [PATCH 06/13] Translated using Weblate (Kabyle) Currently translated at 0.0% (0 of 464 strings) Translation: Hedy/Webpages Translate-URL: https://hosted.weblate.org/projects/hedy/webpages/kab/ --- content/pages/kab.yaml | 558 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 557 insertions(+), 1 deletion(-) diff --git a/content/pages/kab.yaml b/content/pages/kab.yaml index 0967ef424bc..ba2b5d902de 100644 --- a/content/pages/kab.yaml +++ b/content/pages/kab.yaml @@ -1 +1,557 @@ -{} +teacher-guide: +- subsections: + - title: What's Hedy? + text: "Hedy is a textual programming language, specifically developed for (pre-)teens (10 to 15 years old).\nIn contrast to programming languages for kids, like Scratch, Hedy doesn't use code blocks but textual code.\nSo with Hedy you'll learn how to type code like the real programmers do, but in small steps with playful exercises.\nThis way Hedy can function as a stepping stone to real programming languages like Python in an accessible and mostly fun way!\nIf you want to know more, you can watch this video about the development of Hedy as a programming language." + - title: Target audience + text: "Hedy is developed with middle school and junior high school students in mind (ages 10 - 15).\nIt's important for the students to be able to read well. We recommend not to start with Hedy before the students have achieved at least a 3rd grade reading level.\nStudents (and teachers!) don't need any programming experience before starting with Hedy." + - title: How does Hedy work? + text: "Hedy is divided into levels, in which new commands are taught. Each level contains a variety of adventures to practice the newly learned commands.\nAs a teacher, you get to decide which adventures are available for your students. Will they be making a restaurant, a calculator or a haunted house this level? Within each level, the adventures are arranged from easiest to hardest.\nSo your students keep getting challenged. The adventures can be done by the students individually, or you can use them in a classical instruction.\n\nThe adventures also include a code example, to make sure the less digitally informed teachers are able to use Hedy too!\nOf course Hedy also caters to the creative teachers that love to make their own lessonplans and adventures!\n\nAfter programming all the adventures of a certain level, your students can test their knowledge in the quiz.\nYou can track your students' work and their progress on the class page." + - text: "Hedy is web-based, which means it works on any device with a browser (Google Chrome, Firefox, Edge etc), so laptops, Chromebooks, tablets and even smartphones are suitable to use Hedy.\nThere's no need to download anything before working with Hedy, just go to the website and you're all set!" + title: Devices + - title: The Hedy Community + text: "All Hedy teachers, programmers and other fans are welcome to join our Discord server. This is the ideal place to chat about Hedy: we have channels where you can show your cool projects and lessons, channels to report bugs, and channels to chat with other teachers and with the Hedy team.\nHere you can find a video on how to join the Discord Community." + - title: Hedy and the GDPR + text: "Organizations in the EU have to comply with the GDPR (General Data Protection Regulation) when processing personal data.\nBecause this is a complex issue for many schools, you can use all Hedy programming functionalities without sharing personal data.\nThe easiest way to do this is to use Hedy without creating accounts for the teacher and students. Without accounts, all functionality is available, with the exception of personalizing levels, saving students' programs and viewing their progress. That is limiting, but there are schools that use Hedy in that way.\n\nA second way is for a teacher to create an account with an email address without personal data, for example \"docent25@email.com\". Apart from an email address, which is only required to reset your password, you do not need to share any information when you create a teacher account.\nWith a teacher account, you can create anonymous accounts for students, e.g. rainbow-student1, rainbow-student2, etc (See 'Teaching preparations' for a detailed manual). This way you can use all functionality of Hedy, including saving progress, without sharing personal data of yourself or your students.\n\nIf the above is not sufficient for your context, we can sign a processing agreement for the processing of your personal data." + title: Introduction + key: intro +- title: Tutorial + subsections: + - text: Do you want to follow the tutorial (again)? Click here. + title: Tutorial + key: tutorial +- subsections: + - text: You can prepare your classes at the For Teachers page. On this page you'll find everything you'll need to teach with Hedy, like your classes, your adventures and slides. All the functionalities of the for teachers page are explained below. + title: For teachers + - title: Creating a Class + text: "As a teacher, you can create a class for your students. In this class you can see the students' accounts and their programs and you could monitor their progress.\nThis video shows you how to quickly create a class in Hedy." + - text: "Are you teaching multiple classes? Then you don't have to customize each class individually. Simply make a class, costumize the class (see \"Customize your Class\" to learn how) and then duplicate this class as many times as you want.\nYou can duplicate the class on the 'For Teachers' page. If you duplicate a class, all the class settings are duplicated as well. This means that all the levels and adventures you've made unavailable for the first class will now be unavailable for the new class(es) as well.\nThe student accounts and second teacher accounts in your class will not be duplicated into the new class." + title: Duplicate a class + - title: Add a second teacher + text: "Are you not the only teacher that teaches your class? Then you can now add another teacher to the class. Go to the 'For teachers' page and click on the class. Then choose 'Invite a teacher' and fill in the username of your colleague.\nYour colleague will get an invitation on their account to join your class. They can see that invitation message by clicking on their username in the upper right corner of the screen and selecting 'My account'.\nOnce the other teacher accepts the invitation they can customize the class as well.\nTo remove a second teacher from your class, go to the class page and remove the second teacher. The teacher who's created the class cannot be removed." + - text: "You can customize your class and choose which adventures are available for your students. This way your students won't be overwhelmed by the amount of adventures and levels, and they can specifically focus on the adventures you'd like them to practice with.\nClick on your class on the for teachers page and choose 'customize class'. On this page you can select levels, set opening dates, unlock level thresholds and more.\n\n**Select and order adventures**\n\nIn this section you can select and order adventures. The pink tabs are adventures with new commands. The gray tabs are regular adventures. To rearrange the order of the adventures, you can drag the tabs. However, we do advise you to use the regular order of adventures as the Hedy team made sure the adventures go from easiest to hardest.\nIf you want to remove an adventure for your students, simply click the cross on the adventure's tab.\n\nIf you want to add adventures, for instance your own adventure or an adventure you accidentally removed, use this menu to add the adventure to your students' adventures. Simply click the adventure you want to add and it (re)appears in the line of adventures. To undo all your changes to the adventures, click 'Reset'.\n\n**Opening dates**\n\nWith this feature you can set opening dates for the levels. This way you can make a lesson plan before your course begins and not worry about opening new levels each week. In the image above the first level is opened directly, the second will open the 23th of september, and the 3rd level the week after. The other levels are closed.\nDon't want to set opening dates? No problem, just leave this section blank.\n\n**Unlock level thresholds**\n\nThis featue allows you to set a threshold for your students' quiz grade, before they can continue to the next level. For example, if you enter \"80\" your students have to score at least 80% on the quiz before they are allowed to go to the next level. If they haven't met the threshold, they are not allowed to continue and have to retake the quiz.\nDon't want to use the threshold? No worries, just keep this section blank.\n\n\n**Other settings**\n\nThere are some other setting that could be usefu to you aswell. Our first extra setting is 'Mandatory developer's mode'. In developers mode the students only see their input and output screens and the run button. The adventures are hidden and there are no cheatsheets available. This might come in handy in a test situation.\nIf this option is not selected the developer's mode is available for students too as a voluntary option.\n\nIf you want all your students to be visible in de class highscore, you can select the second option.\nWith all the other options you can choose to hide some functions or content for your students, this might help them focus more.\n\n**Save**\n\nDon't forget to save your changes when you're done customizing your class." + title: Customize your Class + - text: "To add students to your class go to the class page by clicking in the class name on the 'for teachers' page. Then click 'add students'. There are 2 ways to let your students join your class: You can create accounts for them, or they could create their own accounts.\n\n**You create accounts for your students**\nThe easiest way to add students to your class is by creating an account for them. This can be done by clicking the 'create student accounts' button and filling in the usernames and passwords for them.\nThe students can login with the username and password that you chose. Afterwards, they can change their username or password if they'd like and they'll still remain in your class.\nThis video shows how to add students to your class in the quickest and easiest way.\n\n**Students make their own accounts**\nYour students can also go to the Hedy website and create their own accounts, just like you did. To get them into your class, they simply have to click the invite link.\nYou can find the invite link on the class page and send it to your students. Mind that your students have to be logged in to Hedy when they click the link, in order to make it work smoothly.\nYou can also manually invite a student to your class with the button 'Invite by username'." + title: Student Accounts + - title: Setting preferred language + text: "When students create profiles they are supposed to choose a 'preferred language'. Hedy will always be loaded in this selected language.\nChanging this language can always be done later on by navigating to 'My account' and 'My personal settings' again.\n\n**For non-English speakers**\nNot only can you change the language of the adventures to your own language. You can also choose which language the keywords (for example 'print' or 'ask') should be in.\nThis way you can teach your students to code with English keywords, but you can also let them program in their own language. For example, Dutch students can use the command 'vraag' instead of 'ask'.\nIf a student wants to switch languages, they can click the keyword switcher. It will switch the keywords from English to the preferred language and back.\nFun fact! Students are allowed program in both English and their own language at the same time! So, if they have trouble remembering some keywords in English, but easily remember other ones they can use both at the same time.\n\n\n**Video**\nThis video show you how to set a preferred language and change the keywords to you preferred language as well." + - text: "When you are logged in, you'll see My programs next to your profile icon.\nThis option exists for your students too. In My programs you can find all the programs that you've worked on.\nBy default, programs will be saved to 'My programs' when you run the code, and every 10 seconds, under their default name\nand their level (for example: Story 5). If you want to store a program under a new name, just type the new name in the name bar.\nCurrently, only one program can be saved per level, per tab.\n\nYou (and your students) can also share programs using the share button next to program names.\nThese programs will be posted on our explore page, for everybody to see and use.\nIf you want to unshare your program, go to 'My programs' and click 'Unshare'.\n\nThe paper plane icon can be used to hand in programs to the teacher of a class. Programs that have been handed is will no longer be editable." + title: Storing programs + key: preparations + title: Teaching preparations +- subsections: + - title: Teaching with Hedy + text: "Hedy contains a lot of different levels that each teach a different new skill. We recommend to teach one level per lesson.\nThis gives your students the time to fully grasp a new command or concept and practice with it, before moving on to the next level.\nWe use this structure in our lessons: Introduction, New concepts and commands, let's get to work, puzzles and quizzes." + - title: Slides + text: "When giving instructions you might want to use our slides. Our slides are available on the 'For teachers' page. There is a set of slides for each level. In the slides all the new commands for that level are explained. We have aimed to explain why these changes are nessecary or how the new commands come in handy.\nWe also give some examples of how the new commands can be used. You could of course also use your own slides, or just open Hedy and show your students around the website. Whichever you prefer to give the best Hedy lessons!" + - title: Introduction + text: "You can start your lessons by activating your students' prior knowledge: What do they already know about the subject, what did they learn in the previous lesson and which mistakes did they make that they've now learned from?\nThis way all the previously learned commands and frequently made mistakes are fresh in your students' memories, when you start introducing the new lesson." + - title: Introduction of new concepts and commands + text: "The new concepts and commands can be very hard for some students to fully understand.\nThat's why it's of importance to model the proper use of the new commands to your students.\nEspecially in the lower levels, where some students have no experience with programming at all, it can be hard for them to understand the new abstract concepts.\nShowing a lot of examples makes an abstract concept (for instance: 'What is a variable?') more recognizable and easier to understand ('Look, the variable pet changed into dog'). Our slides could help you with that." + - title: Let's get to work + text: "Each level contains different adventures that you can find in the pink tabs. The first pink tab explains the new commands in this level.\nThe following tabs are adventures that the students can try out and make their own.\nThe adventures are arranged from easiest to hardest, so we recommend to start on the left and your your way to the right.\nThe last tab 'what's next' gives a little teaser of what you'll learn in the next level. Of course, you can select the adventures you want your students to do for each level.\nThey don't always have to make every adventure. Every adventure contains an example code, that the students can try out with the green button.\nThe example code gets copied to the workfield, where the students can try out the code and adjust it to make it their own.\nStimulate your students to turn the example code into their own projects by adding their own ideas and making their own variation of the adventure." + - title: Quizzes and puzzles + text: "To test whether your students have picked up all the new info in the level, you can let them take the quiz.\nThe quiz contains 10 multiple choice questions about the new concepts and command to that level.\nNot every level has a quiz yet, as we are still building the quizzes.\nSome levels also contain puzzles. Puzzles show the students a couple of line of code that the students have to put in the right order.\n\nThis video shows the quizzes and puzzles." + - title: Evaluation + text: "Round up your lesson by having a brief evaluation. What did the students learn? Which hardships did they come across?\nHow did they learn from their mistakes? And of course: What did they create?\nStudents are often very proud of their own creations, so it's nice to save a little time and give your students the opportunity to show their work to their classmates." + title: Teaching with Hedy + key: teaching +- key: teacher_statistics + title: Teacher Statistics + subsections: + - title: Live Dashboard + text: "If you would like to keep track of your students' progress, you can make use of the live dashboard. You can find the live dashboard by clicking 'Live statistics' on your class page.\n\nAll the features of this dashboard are explained below." + - title: Level Selection + text: "\nFirstly, you can select the levels you'd like to see on the dahsboard. Select the levels your students are currently working on by clicking on the number of that level. Deselect levels that you do not want to see by clicking them again.\nIn this example level 1 and 2 are selected. You can click on refresh to refresh the dashboard and get the most current stats." + - title: Class Overview + text: "\nIn the class overview you can see which adventure your students are working on right now. You can see that one student is working on the 'Rock, Paper, Scissors' adventure in level 1, one is working on the 'Fortune Teller' in level 1 and one student is working on the 'Rock, Paper, Scissors' adventure in level 2.\nIf you'd like to know which of your students is working on the adventure, simply click the number and their accountnames will appear.\nYou can also see how many of your students have finished the quiz. In this case, one student finished the quiz in level 1. Again, you can click the 1 to see which of your students it is.\n\nYou can also see one of the students is 'missing' from this overview. That's because he's working on an adventure in level 4, which is not selected." + - title: Student List + text: "\nHere you can find a list of your students and you can see their individual progress. The blue ring shows you what your students are currently working on.\n\nIt is important to notice that the blue dots means that a students 'attempted' the adventure. This means that they ran a code in this adventure and went on to the next adventure, so this does not automatically mean that they did a good job!\nIf you want to see how an individual student is getting along, you can click their name in this overview. This is what you see if you click on marleen_h3a for example:\n\nYou see that Marleen is having some trouble programming. She tried to run a program that contains blanks multiple times, so she might not realize that she has to change the code examples before running them.\nIn this way this overview can give you a better understanding of what a student is struggling with." + - title: Common Errors + text: "\nIf you're not only interested in individual struggles of your students, but you'd like to know what the whole class seems to be doing wrong, you can use this oversight of common errors.\nThe most common error messages that your students are recieving will appear in this oversight for you, so you could give some more instructions to the whole class if needed.\nBy clicking the error, you can see which students are having trouble with this error. By clicking resolve, you'll remove this error from the list." + - text: "\nAnother useful overview of all the programs your students made in a level can be found on your class page. Go to the class page and click 'Overview of programs per adventure'. Here you'll find this overview.\nYou could use this overview to check your students' work. If they have made a program in an adventure, an eye appears in your overview. Click the eye to view their work. Did you like it? Then you can check the box and a green tick will appear.\nThis way you create a nice overview for yourself of your students' results." + title: Overview of programs per adventure +- subsections: + - title: Make your own adventure + text: It is also possible for teachers to create your own adventure. This video shows you how to create your own adventure as a teacher and add it to your class(es). + - text: "On the explore page you can view the work of other Hedy users. You can try out their programs and use them as inspiration to create something cool yourself.\nYou can also add a program you've made to the explore page yourself by clicking 'Save and share code' in the coding screen or go to My Programs and click 'Share'.\nDon't want to share your work anymore? Simply go to 'My Programs' and click 'Unshare'.\nIf you want more information about the explore page, check out this video." + title: Explore page + - title: My achievements + text: "If you click on your username in the topright corner of your screen, you can go to My achievements. On this page you achievements are collected. Your students have such a page as well.\nWhen you hover over the badge with your mouse, you'll see how to earn the badge. There are hidden badges too, of which you'll have to find out yourself how to earn them.\nIf you want more information on the achievements, check out this video." + - title: High Scores + text: "On this page you can see the high scores of all Hedy users.\nIn this videoyou can learn some more about the high scores." + - text: "Is your (student's) code not working? There must be a bug (coding mistake) in it! You can use the debugger to find the mistake.\nThe debugger is the ladybug button in your coding screen. If you press it, you can run your code line by line to find your mistake.\nHave you found the mistake? Press the red stop button and the debugger will shut off." + title: Debugger + - title: Read aloud + text: Do you want the output of your program to be read aloud? Then you can use the read aloud function that is found under the 'run code' button in your coding screen. + - title: Programmers mode + text: "Distracted by all the adventures, or do you want to make a long program? Then check out the 'Programmers Mode' switch at the bottom of your coding screen.\nProgrammers mode allows you and your students to use a bigger coding screen." + - title: Cheat sheets + text: "In every level there is a button with this emoji 🤔. You and your students can find the \"cheat sheets\" there. On this cheat sheet, you can find all the commands that are usable in this level in their correct form.\nSo if you've forgotten how a command works, simply take a peek at the cheat sheet!" + - title: Video + text: This video shows you even more features of Hedy, like the cheatsheets and the keyword switcher. + title: Extra Hedy features + key: features +- subsections: + - title: What to do after Hedy? + text: "Congratulations on reaching the end of Hedy! Your students have now learned how to create their own basic programs in the Python programming language.\nOf course, you could keep programming in our Hedy compiler, but it might be more exciting for your students to transfer to a \"real\" Python interface.\nWould you like to continue teaching Python? Then please visit the Python website to learn how to get started in another compiler.\n\nNow that your students have a basic knowledge of programming in general, you could also show them around in other textual programming languages. The language might change but the concepts do not, so Hedy will still give them a big advantage." + title: After Hedy + key: after +- title: Answers to the exercises + key: answers + intro: "The answers to all the exercises can be found on the public profile of the useraccount 'Hedy_answers'. We often encourage students to use their own creativity in their answers, so these answers are merely a guideline as to what a possible correct answer could look like.\n\nTo go to the 'Hedy_answers' profile, please click here." +- levels: + - sections: + - example: + error_code: Hedy can't print this + error_text: For example they type a sentence without using print. + solution_text: Teach your students to always start a line of code with a command. + solution_code: '{print} Hedy can print this!' + title: Students forget to type commands + - example: + solution_code: "{ask} Why does my code work now?\n{print} Because I removed the capitals!" + error_text: Commands won't work if they are in capitals. + error_code: "Ask Why does my code fail?\nPrint Because I'm using capitals." + solution_text: Remove the capitals. + title: Students use capitals when typing commands + - example: + solution_code: "{ask} What's your name?\n{echo} Your name is" + error_code: '{echo} Your name is' + solution_text: Add an ask command to make it work. + error_text: Echo is made to repeat an answer after an ask command. Without ask echo won't do anything. + title: Students use echo without ask + - example: + solution_text: 'In level 1 we have to keep it at this:' + solution_code: "{ask} Which programming language is the most fun?\n{echo} The best is..." + error_code: "{ask} Which programming language is the most fun?\n{echo} is the best!" + error_text: And they are right! That's why they will learn to use proper variables in the next level. + title: Students want their echo word (variable) to be in the middle of a sentence + - title: 'Turtle: Students let the turtle walk off of the screen' + example: + solution_code: "{forward} 100\n{turn} 90" + solution_text: In the example, students tend to think that the turn command failed; even though it did what it what supossed to. What happened is the turtle walked past the screen limits. Use smaller numbers to prevent this from happening. + error_text: Often students love to try out big numbers when using the turtle, which causes the arrow to walk off the screen. + error_code: "{forward} 300\n{turn} 90" + - example: + error_text: Backward is not a command. + error_code: backward 100 + solution_text: 'To make the turtle go backwards, you use the forward command and a negative number. For example:' + solution_code: '{forward} -100' + title: "Turtle: Students use the command backward, but there's no such command." + level: '1' + - sections: + - title: Students make typos in their commands + example: + error_code: prinnt Don't make typos + error_text: Hedy can't recognize a command with a typo. + solution_text: Teach your students to read the error messages. This way they can find out themselves what went wrong. + solution_code: "{print} Don't make typos" + - example: + solution_code: order {is} {ask} What would you like to eat + error_text: In this level students learn about variables. The ask command requires a variable as well, but students forget this. + solution_text: In this level you have to tell Hedy where to save your answer, so it can be used later on. This is called a variable. + error_code: ask what would you like to eat + title: Students forget that the ask command has changed + - example: + error_code: "answer {is} {ask} Why doesn't {echo} work anymore?!\n{echo}" + solution_code: "answer {is} {ask} Why doens't {echo} work anymore?!\n{print} answer" + solution_text: Use a variable instead. + error_text: For some students it might be frustrating to learn that the `{echo}` command doesn't work anymore. That's why it's very important to explain the advantages of using variables. For example you can use multiple variables in a code, and you can put them anywhere you like in a sentence! + title: Students try to use the `{echo}` command + - example: + solution_code: "name {is} Hedy\n{print} Hi I'm name" + solution_text: So don't use a word you want to use in the text as a variable name. In level 4 this is solved with quotation marks. + error_text: In the example below the word 'name' is used as a variable, but also as a normal text. The output of this code will be 'Hi my Hedy is Hedy'. + error_code: "name {is} Hedy\n{print} Hi my name is name" + title: Students use a variable name or as a normal word + - example: + solution_text: Add an underscore. + error_text: A variable should be named with one word. You could use an underscore to connect two words. That counts as one. + error_code: chosen door is ask Which door do you pick + solution_code: chosen_door {is} {ask} which door do you pick + title: Students use long variable names containing two words. + - example: + error_code: "horse {is} {ask} What is your horse called\n{print} Your horse is called name" + solution_code: "name {is} {ask} What is your horse called\n{print} Your horse is called name" + solution_text: Always check whether the variable has the same name throughout the code. Slight differences can be hard to spot (for example plurals) but they will interfere with the code. + error_text: In this example the student has used 'horse' and 'name' for the same variables. + title: Students might use two different names for the same variable + level: '2' + - sections: + - example: + error_code: "groceries {is} apples, milk, chocolate\n{print} groceries" + solution_text: To print a list of all the groceries, you simply need to put them after a `{print}` command. Else you can use the list to print one item with `{at}` `{random}`. + solution_code: "{print} apples, milk, chocolate\n\n# or\n\ngroceries {is} apples, milk, chocolate\n{print} groceries {at} {random}" + error_text: A list can't be printed. You can only print one item from the list with {at} {random}. + title: Students try to print whole lists + - example: + solution_text: Don't use the names of variables or lists in regular text to print. In level 4 this problem is solved with quotation marks. + solution_code: "name {is} Hedy\n{print} Hi I'm name\n\n# or\n\nanimals {is} rhino, bee, swan\n{print} The best animal is... animals {at} {random}" + error_code: "name {is} Hedy\n{print} Hi my name is name\n\n# or\n\nanimal {is} rhino, bee, swan\n{print} The best animal is... animal {at} {random}" + error_text: This problem probably occured in level 2 as well. Now it can happen with lists too. + title: Students use the name of a variable or list as regular text + - example: + error_text: Like in the example + error_code: "birds {is} sparrow, seagull, robin\n{print} birds random" + solution_code: "birds {is} sparrow, seagull, robin\n{print} birds {at} {random}" + solution_text: This problem is solved by adding the word at. + title: Students forget `{at}` in `{at}` `{random}` + - example: + solution_text: Emphasize to your students that you always need a print to print text. + error_code: "fruit {is} apple, cherry, banana\nfruit {at} {random}" + error_text: Or they will sometimes put `{at}` `{random}` at the beginning of the line. + solution_code: "fruit {is} apple, cherry, banana\n{print} fruit {at} {random}" + title: Students forget to use the `{print}` command when also using the `{at}` `{random}` command + - title: Students forget to use commas in their lists + example: + error_text: In a list items are seperated with a comma. + solution_code: "pizzas {is} funghi, tonno, quattro stagioni\n{print} pizzas {at} {random}" + solution_text: After each item on your list, there should be a comma + error_code: "pizzas {is} funghi tonno quattro stagioni\n{print} pizzas {at} {random}" + - example: + solution_code: "clubs {is} Manchester United, Bayrn Munchen, FC Barcelona\n{print} clubs {at} {random}" + solution_text: Hedy can't print anything at random, because there is no list to choose from. + error_code: "clubs {is} Manchester United\n{print} clubs {at} {random}" + error_text: For example + title: Students try to use `{at}` `{random}` without a list + - example: + error_text: In the example below 'names' is not a list, but a variable. You cannot add anything to it. + solution_code: "names {is} Jake, Amy\nyour_name {is} {ask} Who are you?\n{add} your_name {to} names\n{print} names {at} {random}" + error_code: "names {is} Jake\nyour_name {is} {ask} Who are you?\n{add} your_name {to} names\n{print} names {at} {random}" + solution_text: There has to be a list first, so you have to add a second name to turn names into a list, for example Amy. If you don't want amy on your list, you can use remove to remove it after. + title: Students try to use add/remove without a list + - example: + solution_text: Hedy has to know which list the item should be added to/removed from. + solution_code: "adventures {is} story, parrot, dice\nchoice {is} Which adventure do you like best?\n{add} choice {to_list} adventures\n{remove} dice {from} adventures\n{print} I love adventures {at} {random}" + error_code: "adventures {is} story, parrot, dice\nchoice {is} Which adventure do you like best?\n{add} choice\n{remove} dice\n{print} I love adventures {at} {random}" + error_text: Without to/from the add/remove command won't work. + title: Students forget to use `{to}`/`{from}` in `{add}`/`{remove}` + level: '3' + - level: '4' + sections: + - title: Students forget to use quotation marks on both sides of the text + example: + solution_text: Add the correct quotation marks. + error_text: In this level print and ask need a set of quotation marks. One before of the text and one after. + error_code: "{print} Hello\nmood {is} {ask} 'How are you?" + solution_code: "{print} 'Hello'\nmood {is} {ask} 'How are you?'" + - example: + solution_code: "{print} 'Welcome to the restaurant'\nfood {is} {ask} 'What would you like to order?'" + solution_text: 'These are the correct quotation marks:' + error_code: "{print} `Welcome to the restaurant`\nfood {is} {ask} \"What would you like to order?\"" + error_text: It is important to start your lesson by checking if the students know how to type a quotation mark properly. On Hedy, students might use single quotes ('') and double quotes (""). Backticks on the other hand, are not considered valid quotes (``). + title: Students use the wrong quotation marks + - title: Students use an apostrophe in their text + example: + error_text: From this level on apostrophes are not allowed. They are often used in English when typing contractions like you're, don't or what's. + error_code: "{print} 'You're not allowed to type this'" + solution_text: You can choose to use the wrong grammar and just leave the apostrophe out. Or you could use the ` as an apostrophe. + solution_code: "{print} 'Youre allowed to type this'\n{print} 'And you`re able to do this'" + - level: '5' + sections: + - example: + error_text: After students use `{if}` or `{else}` they forget to use a second command like `{print}` or `{ask}`. + solution_text: Add the print command to fix it. + solution_code: "{if} name {is} Hedy {print} 'Great!'\n{else} {print} 'Hedy is better!'" + error_code: "{if} name {is} Hedy 'Great!'\n{else} Hedy {is} better!" + title: Students forget to use `{print}` in an `{if}` command + - example: + error_code: "horse {is} {ask} 'What is your horse called?'\n{if} name {is} Bonfire {print} 'cool'\n{else} {print} 'less cool!'" + solution_code: "horse {is} {ask} 'What is your horse called'\n{if} horse {is} Bonfire {print} 'cool!'\n{else} {print} 'less cool!'" + solution_text: Always check whether the variable has the same name throughout the code. Slight differences can be hard to spot (for example plurals) but they will interfere with the code. + error_text: In this example the student has used 'horse' and 'name' for the same variables. + title: Students might use two different names for the same variable + - example: + error_text: Using the `if` command can make the code lines very long and students tend to forget to use quotes. + solution_text: Always use 2 quotes in a print command. + error_code: "{if} name {is} Hedy {print} fun\n{else} {print} 'meh!" + solution_code: "{if} name {is} Hedy {print} 'fun'\n{else} {print} 'meh!'" + title: Students still forget the quotes on both sides + - example: + solution_text: Remove the quotes to get the code to work. + error_text: In this level there are no quotes around variable names. + solution_code: "{if} name {is} Hedy {print} 'fun'\n{else} {print} 'meh!" + error_code: "{if} name {is} 'Hedy' {print} 'fun'\n{else} {print} 'meh!'" + title: Students use quotes around variable names + - example: + solution_text: Add an underscore. + solution_code: chosen_door {is} {ask} 'which door do you pick?' + error_code: chosen door is ask Which door do you pick? + error_text: Variables in Hedy can't contain spaces, so, in order to use together several words, students need to connect them using underscores (_) + title: Students use long variable names containing two or more words + - example: + solution_code: "friends {is} Jesse, David, Souf\nname {is} {ask} 'Who are you?'\n{if} name {in} friends {print} 'You are funny'\n{else} {print} 'You are not funny'\n\n# or\n\nname {is} {ask} 'Who are you?'\n{if} naam {is} Jesse {print} 'You are funny'\n{if} naam {is} David {print} 'You are funny'\n{if} naam {is} Souf {print} 'You are funny'" + error_text: For example this student wants Hedy to tell all his friends that they are funny, while other classmates should be told that they are not. + solution_text: "You could use the `{in}` command for that. While it is explained in a higher level, it does already work in level 5.\nAnother solution is to use multiple `{if}` commands and no `{else}` command. The disadvantage is that it won't tell the other classmates that they are not funny." + error_code: "{if} name {is} Jesse, David, Souf {print} 'You are funny' {else} {print} 'You are not funny'" + title: Students want multiple answers to be correct + - example: + error_text: In the example below the password is 'password'. This will result in it always being correct. + solution_text: Pick a different name for your variable. + solution_code: "secret_password {is} {ask} 'What is the password'\n{if} secret_password {is} password {print} 'Access granted!'\n{else} {print} 'Access denied!'" + error_code: "password {is} {ask} 'What is the password?'\n{if} password {is} password {print} 'Access granted'\n{else} {print} 'Acces denied!'" + title: The students make the variable name the same as the value in the `{if}` statement + - sections: + - example: + error_text: Some students struggle with adding quotation marks or not. If you add quotation marks, the output screen will literally show '5+5'. + solution_code: '{print} 5 + 5' + error_code: "{print} '5 + 5'" + solution_text: In this code the output screen will print '10'. + title: Students struggle with quotation marks + - example: + solution_text: Or take it a step further like this. + error_text: 'Some students will find it hard to do maths with variables. Try to show them very simple examples, like:' + solution_code: "price = 0\n{print} 'Welcome to our burger restaurant'\nburger = {ask} 'Would you like a burger?'\n{if} burger = yes price = price + 10\ndrink = {ask} 'Would you like a drink?'\n{if} drink = yes price = price + 4\n{print} 'That will be ' price ' euros please'" + error_code: "age = {ask} 'How old are you?'\n{print} 'Next year you will be ' age + 1" + title: Students struggle with the concept of doing maths with a variable + level: '6' + - level: '7' + sections: + - example: + solution_text: 'This is the correct code:' + error_code: "{repeat} 3 {times} For he`s a jolly good fellow\n{repeat} 3 print" + solution_code: "{repeat} 3 {times} {print} 'For he`s a jolly good fellow'\n{repeat} 3 {times} {print} 'Which nobody can deny!'" + error_text: Make sure that the students know to use both the full repeat command and the print command. + title: Students forget one of the word of the repeat command, or they forget the print command + - example: + error_text: In this level you can only repeat one line of code multiple times. In this code the student wanted to print 3 different drinks, but it won't work. It will ask the question 3 times and only print the last answer. + error_code: "{repeat} 3 {times} drink = {ask} 'What would you like to drink?'\n{print} drink" + solution_text: You should go to the next level to be able to repeat multiple lines. So on this level you'll have to print everything seperately. + solution_code: "drink = {ask} 'What would you like to drink?'\n{print} drink\ndrink = {ask} 'What would you like to drink?'\n{print} drink\ndrink = {ask} 'What would you like to drink?'\n{print} drink" + title: Students try to repeat multiple lines + - title: Students make programs that take too long to run + example: + solution_text: Make sure the code doesn't take too long to execute + error_text: In this level it's very easy to make programs that take a lot of time to complete. If the program takes too long, it'll be stopped, this with the intention to prevent straining the student's machine. + error_code: "{repeat} 100 {times} {print} 'How many times can I repeat this?'" + solution_code: "{repeat} 20 {times} {print} 'This is enough'" + - sections: + - example: + error_code: "{repeat} 3 {times}\n{print} 'hello'" + solution_text: 'This is the correct code:' + solution_code: "{repeat} 3 {times}\n {print} 'hello'" + error_text: Indentation is a new concept in this level, and for some students it might be hard to learn. Make sure they practise some simple examples before making a whole program with it. + title: Students use the indentation wrong + - example: + error_text: For instance, in the code below the student wanted to take the drinks order of 3 people. But instead the program asked 3 times, but only wrote down one order. + solution_code: "{repeat} 3 {times}\n drink = {ask} 'What would you like to drink?'\n {print} drink" + solution_text: "In the correct code the third line starts with indentation too. This way it belongs to the repeat block and therefore it will be repeated 3 times.\nShowing your students these differences can help them understand why we need indentation to make our programs work." + error_code: "{repeat} 3 {times}\n drink = {ask} 'What would you like to drink?'\n{print} drink" + title: Students only repeat 1 line when they wanted to repeat multiple lines + - example: + error_code: "birthday = {ask} 'Is it you birthday?'\n{if} birthday = yes\n {repeat} 3 {times}\n {print} 'Hip Hip Hooray!'" + solution_text: 'This is the correct code for this level:' + error_text: "In this level students aren't allowed yet to put `{if}` statements inside other `{if}` statements or inside repeat loops.\nIn the next level this is allowed." + solution_code: "birthday = {ask} 'Is it you birthday?'\n{if} birthday = yes\n {print} 'Hip Hip Hooray!'\n {print} 'Hip Hip Hooray!'\n {print} 'Hip Hip Hooray!'" + title: Students want to nest `{if}` statements, or put `{if}` statements inside a loop + - example: + error_text: In this level it's very easy to make programs that take a lot of time to complete. If the program takes too long, it'll be stopped, this with the intention to prevent straining the student's machine. + solution_code: "{repeat} 20 {times}\n {print} 'This is enough'" + error_code: "{repeat} 100 {times}\n {print} 'How many times can I repeat this?'" + solution_text: Make sure the code doesn't take too long to execute + title: Students make programs that take too long to run + - title: Students use the `{if}` command to check if the variable value is the same as the variable name + example: + solution_text: You can fix this mistake by adding quotation marks. This way the computer knows that the second password in `{if} password {is} 'password'` is a string value (so normal text) and not the variable name. + error_code: "password {is} {ask} 'What is the password?'\n{if} password {is} password\n {print} 'You can come in'\n{else}\n {print} 'You are not allowed'" + solution_code: "password {is} {ask} 'What is the password?'\n{if} password {is} 'password'\n {print} 'You can come in'\n{else}\n {print} 'You are not allowed'" + error_text: "We've noticed a common error among our students: they try to create a program that checks for a password, but they make the password 'password'.\nIn line 2 the computer is asked to check whether the variable password is the same as the variable password, so itself. Which means the answer is always yes.\nSo with this code the answer will always be 'You can come in' no matter what the player fills in." + level: '8' + - level: '9' + sections: + - title: Students make mistakes with indentation + example: + error_text: The hardest part about this level is getting the indentation right. Students love nesting `{if}` statements, sometimes even inside other nested `{if}` statements. Keeping track of indentation can get pretty tough. + solution_text: This is the correct code. Try to keep track of all the different constructions when putting `{if}` statements inside other `{if}` statements. + error_code: "{print} 'Robin is walking downtown'\nlocation = {ask} 'Is Robin going into a shop, or does she go home?'\n{if} location {is} shop\n {print} 'She enters the shop.'\n {print} 'Robin sees an interesting looking book'\n book = {ask} 'Does Robin buy the book?'\n {if} book {is} yes\n{print} 'Robin buys the book and goes home'\n{else}\n {print} 'Robin leaves the shop and goes home'\n{else}\n {print} 'Robin goes home'" + solution_code: "{print} 'Robin is walking downtown'\nlocation = {ask} 'Is Robin going into a shop, or does she go home?'\n{if} location {is} shop\n {print} 'She enters the shop.'\n {print} 'Robin sees an interesting looking book'\n book = {ask} 'Does Robin buy the book?'\n {if} book {is} yes\n {print} 'Robin buys the book and goes home'\n {else}\n {print} 'Robin leaves the shop and goes home'\n{else}\n {print} 'Robin goes home'" + - sections: + - example: + solution_code: "animals {is} dog, cat, blobfish\n{for} animal {in} animals\n {print} 'I love ' animal" + error_code: "animals {is} dog, cat, blobfish\n{for} animal {in} animals\n {print} 'I love ' animals" + error_text: We often see that students try to print the list (in the example animals) instead of the items of the list. + solution_text: The word animals in the last line should be changed into animal. + title: Students do not use the `{for}` command correctly + - example: + error_code: "animals {is} dog, cat, blobfish\n{for} animal {in} animals\n{print} 'I love ' animals" + error_text: Students tend to forget to use indentation after a for command. + solution_code: "animals {is} dog, cat, blobfish\n{for} animal {in} animals\n {print} 'I love ' animal" + solution_text: You should use indentation after a for command. + title: Students forget the indentation + level: '10' + - sections: + - example: + solution_code: "{for} i {in} {range} 1 {to} 5\n {print} i" + solution_text: 'This is the correct code:' + error_text: Make sure that the students use indentation. + error_code: "{for} i {in} {range} 1 {to} 5\n{print} i" + title: Students forget to use indentation + - example: + error_text: "Some students don't understand that i is a variable. i is chosen, because it is used in Python programming, but you could just as easily use a different variable name.\nFor example, this code:" + solution_text: Could just as well be replaced with this code. It works the same. + solution_code: "{for} banana {in} {range} 1 {to} 5\n {print} banana" + error_code: "{for} i {in} {range} 1 {to} 5\n{print} i" + title: Students don't understand the i + level: '11' + - sections: + - title: Students forget quotation marks + example: + error_text: Students need more quotation marks now than in the previous levels. In this example quotation marks were forgotten in the list and in the `{if}` command. + solution_code: "superheroes = 'Spiderman', 'Batman', 'Iron Man'\nsuperhero = superheroes {at} {random}\n{if} superhero {is} 'Batman'\n {print} 'IM BATMAN!'" + error_code: "superheroes = Spiderman, Batman, Iron Man\nsuperhero = superheroes {at} {random}\n{if} superhero = Batman\n {print} 'IM BATMAN!'" + solution_text: 'This is the correct code:' + - example: + solution_text: 'This is the correct code:' + solution_code: "score = 25\nanswer {is} {ask} 'Do you want a point?'\n{if} answer {is} 'yes'\n score = score + 1\n {print} score" + error_text: "You can use quotation marks on numbers, but only if you want the computer to think of them as text. This means you can't do calculations with the number.\nIn the example below, you can't do maths with the number 25, because it's in quotation marks." + error_code: "score = '25'\nanswer {is} {ask} 'Do you want a point?'\n{if} answer {is} 'yes'\n score = score + 1\n {print} score" + title: Students use quotation marks on numbers they want to use for calculations + - example: + solution_code: '{print} 2.5 + 2.5' + error_code: '{print} 2,5 + 2,5' + error_text: Decimal numbers can be used from this level on, but you can't use commas. + solution_text: 'This is the correct code:' + title: Students use commas instead of periods in decimal numbers + level: '12' + - level: '13' + sections: + - example: + error_text: Both commands might appear similar, but their functions are very different. + solution_text: In this case, the person should answer yes on both questions, so you should use `and`. + solution_code: "game {is} {ask} 'Do you want to play a game?'\ntime {is} {ask} 'Do you have time to play?'\n{if} game {is} 'yes' {and} time {is} 'yes'\n {print} 'Lets play!'" + error_code: "game {is} {ask} 'Do you want to play a game?'\ntime {is} {ask} 'Do you have time to play?'\n{if} game {is} 'yes' {or} time {is} 'yes'\n {print} 'Lets play!'" + title: Students confuse `{and}` with `{or}` + - sections: + - example: + solution_text: 'This is the correct code:' + error_code: "age = {ask} 'How old are you?'\n{if} age < 12\n {print} 'You are older than I am!'" + solution_code: "age = {ask} 'How old are you?'\n{if} age > 12\n {print} 'You are older than I am!'" + error_text: Often, students are already familiar with these signs from maths class. But if your students don't know these signs yet, they might have a challenge with it. + title: Students confuse the < and > signs + - title: Students use the wrong signs for `!=` `<=` and `>=` + example: + error_text: These signs are probably new for most students. Make sure to explain these signs to your students. + solution_code: "name = {ask} 'What is your name?'\n{if} name != 'Hedy'\n {print} 'You are not Hedy'" + error_code: "name = {ask} 'What is your name?'\n{if} name = 'Hedy'\n {print} 'You are not Hedy'" + solution_text: 'This is the correct code:' + - title: Students forget to use the == sign + example: + error_text: In this level, students are still allowed to use = or is. But on other levels, or in python, they might get in trouble for that. So it is best to train them to use it. + solution_code: "name = {ask} 'What is your name?'\n{if} name == 'Hedy'\n {print} 'You are cool!'" + solution_text: 'This is the correct code:' + error_code: "name = {ask} 'What is your name?'\n{if} name = 'Hedy'\n {print} 'You are cool!'" + level: '14' + - level: '15' + sections: + - example: + solution_text: 'This is the correct code:' + solution_code: "answer = 0\n{while} answer != 25\n answer = {ask} 'What is 5 times 5?'\n{print} 'A correct answer has been given'" + error_text: Indentation is often hard for students. + error_code: "answer = 0\n{while} answer != 25\nanswer = {ask} 'What is 5 times 5?'\n{print} 'A correct answer has been given'" + title: Students forget indentation in the while loop + - sections: + - example: + error_code: "icecream = 'starwberry', 'chocolate'\n{print} 'I love ' icecream[{random}] ' icecream'" + solution_code: "icecream = ['starwberry', 'chocolate']\n{print} 'I love ' icecream[{random}] ' icecream'" + solution_text: 'This is the correct code:' + error_text: From this level on lists should be in brackets. + title: Students forget the brackets + - example: + error_text: From this level on lists should be in brackets. + solution_text: 'This is the correct code:' + solution_code: "icecream = ['starwberry', 'chocolate']\n{print} 'I love ' icecream[{random}] ' icecream'" + error_code: "icecream = ('starwberry', 'chocolate')\n{print} 'I love ' icecream[{random}] ' icecream'" + title: Students use the wrong brackets + - title: Students forget the quotation marks while focussing on the brackets + example: + solution_text: 'This is the correct code:' + solution_code: "icecream = ['starwberry', 'chocolate']\n{print} 'I love ' icecream[{random}] ' icecream'" + error_text: Students are sometimes very focussed on the new aspect of the syntax, that they forget the quotation marks. + error_code: "icecream = [starwberry, chocolate]\n{print} 'I love ' icecream[{random}] ' icecream'" + - example: + error_code: "icecream = [starwberry, chocolate]\n{print} 'I love ' icecream at random ' icecream'" + solution_text: 'This is the correct code:' + solution_code: "icecream = ['starwberry', 'chocolate']\n{print} 'I love ' icecream[{random}] ' icecream'" + error_text: Students are sometimes very focussed on the new aspect of the syntax, that they forget the quotation marks. + title: Students still use the old at random command + - example: + solution_code: "icecream = ['starwberry', 'chocolate']\n{print} 'I love ' icecream[{random}] ' icecream'" + error_code: "icecream = [starwberry, chocolate]\n{print} 'I love ' icecream[{random}] ' icecream'" + solution_text: 'This is the correct code:' + error_text: Students are sometimes very focussed on the new aspect of the syntax, that they forget the quotation marks. + title: Students forget the quotation marks while focussing on the brackets + level: '16' + - level: '17' + sections: + - example: + solution_text: 'This is the correct code:' + error_text: The `{elif}` command needs a condition behind it. It cannot be used like `{else}`, without a condition. + solution_code: "color = {ask} 'What is your favorite color?'\n{if} color == 'green':\n {print} 'green is nice'\n{elif} color == yellow:\n {print} 'yellow is alright'\n{else}:\n {print} 'I like green'" + error_code: "color = ask 'What is your favorite color?'\n{if} color == 'green':\n {print} 'green is nice'\n{elif}:\n {print} 'I like green'" + title: Students use `{elif}` like `{else}`, so without a condition + - example: + error_text: After each command that requires indentation, a colon should be used. + solution_code: "answer = {ask} 'How are you doing?'\n{if} answer {is} 'great':\n {print} 'Me too!'\n{elif} answer {is} 'bad':\n {print} 'Let me cheer you up!'\n{else}:\n {print} 'Im great!'" + solution_text: 'This is the correct code:' + error_code: "answer = ask 'How are you doing?'\n{if} answer {is} 'great'\n {print} 'Me too!'\n{elif} answer {is} 'bad'\n {print} 'Let me cheer you up!'\n{else}\n {print} 'Im great!'" + title: Students forget the colon + - sections: + - example: + error_text: Students will forget to put brackets around their text. + error_code: "{print} 'my name is Hedy!'" + solution_code: "{print}('my name is Hedy!')" + solution_text: 'This is the correct code:' + title: Students forget to use the brackets + - example: + solution_code: "{print}('My name is Hedy!')\nname = {input}('What is your name?')\n{print}('So your name is ', name)" + error_code: "{print}('My name is Hedy!')\nname = ask('What is your name?')\n{print}('So your name is ', name)" + solution_text: 'This is the correct code:' + error_text: The ask command has been used since level 1. So it might be hard for the students to switch to input instead of ask. + title: Students will still use the ask command + - title: Students might use the brackets as quotation marks + example: + solution_code: "temperature = 25\n{print}('It is ', temperature, 'degrees outside')" + error_text: They have learned to keep the variables outside of the quotation marks, so they might do the same with the brackets. Which is not the correct way to use them. + error_code: "temperature = 25\n{print}('It is ') temperature ('degrees outside')" + solution_text: 'This is the correct code:' + level: '18' + key: common_mistakes + title: Common mistakes + intro: You can learn from your mistakes, especially in coding! Making mistakes is unavoidable, and a great opportunity to learn, but for teachers, it can be a challenge to find the correct fix for a mistake! Especially as the programs get longer and longer as the students progress through the levels. That's why we've made a list with frequently made mistakes in each level, and their solutions. +home-sections: +- text: "Many schools and teachers around the world want to teach their students programming. Initially this is often done with playful tools, ranging from the Beebot robot to\nScratch Junior or Scratch. After using such tools, kids often want to move to more powerful, textual programming languages, like Python.\n\nPython however is hard, because it is only available in English, and requires learners to learn complex programming concepts and syntax at once.\nHedy is the easy way to get started with textual programming languages! Hedy is free to use, open source, and unlike any other textual programming language in three ways.\n\n1. Hedy is multi-lingual, you can use Hedy in your own language\n2. Hedy is gradual, so you can learn one concept and its syntax a time\n3. Hedy is built for the classroom, allowing teachers to fully customize their student's experience" + title: Textual programming made easy! +- text: While almost all textual programming language have keywords in English, such as `for` or `repeat`, Hedy can be used in any language! We currently support 47 different languages, including Dutch, Spanish, Arabic, Turkish, Chinese and Hindi. If your language is not available you can always start a new translation. + title: Multi-lingual programming +- text: Learning a programming language can be overwhelming, since learners have to learn concepts (for example if-else or loops) and syntax (like quotation marks or round brackets) at the same time. In Hedy, concepts are first introduced with little syntax and then refined. A scientifically proven way to learn! + title: Step by step learning +- text: "Hedy is suitable for kids aged 10 and up and designed for classroom use.\nTeachers can use our free, built-in lesson plans, but can also author their own lessons and load these into the Hedy user interface." + title: Built for the classroom +- title: Programming in context + text: Hedy shows programming in the broadest way possible, and can be used in variety of exciting ways. Hedy allows for the creation of digital and interactive stories, colorful drawings that can be shown on the screen but also drawn with a pen plotter or embroidered on a shirt, and can be used to create games or apps with buttons and keyboard actions. +- text: "Yes! Hedy is 'Open source', which means that everyone can help us make Hedy better.\nYou can find our code on Github.\nIf you like Hedy and want to contribute, we accept (and are very grateful for) donations!" + title: Is Hedy free? +- title: Do I need to install anything? + text: No. Hedy works in the browser, which is the program you are using to look at this page. Probably Chrome or Edge or Firefox. Hedy also works on phones and tablets. +- text: "No, that is not needed. All concepts are explained in the slides and in the interface for learners.\nIf you create a free teacher's account, you also get access to the teacher's manual with information on how to teach\nand frequently made mistakes." + title: Do I need programming experience to teach with Hedy? +join-sections: +- text: '# There are three ways in which you can support Hedy!' + title: Supporting Hedy +- title: Improving the language + text: "The gradual and multi-lingual nature of Hedy create a lot of interesting technical challenges.\nFind those issues on Github." +- title: Translating Hedy + text: "Not a programmer? No problem! Another way to support Hedy is by translating keywords, error messages, adventures and other content.\nThis is the current status, help us complete a language, or add a new one!\n\n\"Translation" +- text: "Hedy is designed to support teachers in providing programming lessons in class. We have specific teacher features like the option to create a class, customize it and see how your students are doing.\nIf you like Hedy, you can reach out to schools that you know to help teachers get started! We can help you find schools or teachers via Discord." + title: Help teachers get started +start-sections: +- text: "Welcome to Hedy, we are happy to help you get started with Hedy.\n\nOur [Teacher Manual](https://www.hedy.org/for-teachers/manual) has an overview of all features in detail, but this page has a brief overview so you know what it what before you dive in.\n\nA few highlights that are important to know:\n* Hedy is a tool designed to help manage a classroom of kids programming! You can create your own classes, lesson plans and follow how kids are doing.\n* You do not need to know a lot of programming if you begin, Hedy works step by step, also for you!\n* You can use Hedy in your native tongue because it has been translated into many other languages!\n* Every kid can programme!! Hedy is especially helpful for kids who have vision problems because it can read material aloud to you without the need for a mouse.\n* We are here to help, you can find us for example on [Discord](https://discord.gg/8yY7dEme9r) or you can [email-us](hello@hedy.org)." + title: Getting started with Hedy +- title: Teachers about Hedy + text: "Various teachers worldwide have expressed their passion for Hedy, as some have shared with us:\n\n*Incredibly inspiring! Super good way to make programming a lot more accessible for yourself, but also for students. Very fun to play with and a lot of potential to use with the students. I think it is a very nice tool! I believe this is a valuable way for children to start learning programming. Python and coding have always been very exciting, because the barrier to learning is very high. Now everything is a bit lower and it was explained that it can actually be very easy. I enjoyed seeing how Hedy tries to make programming as accessible as possible for users!*\nNetherlands: Mathematics teachers in training (secondary school)\n\n*Simple interface and good examples.* Teacher: 3rd - 6th grades (elementary)\n\n*Multilingual programming and just the gradual programming concept itself.* US: middle school, 6th-8th grade\n\n*The gradual nature of introducing programming.* Australia: High school\n\n*Continues automatically.* Netherlands: 2 HAVO-VWO\n\n*Both that the explanation can be in Dutch (and the code in English), and that it builds up with more and more possibilities.* Netherlands: Plus class group\n\n*But Hedy and its gradual levels...what an idea, I wanted to personally thank you for creating this. I cannot thank you enough. Also, I have never seen the level of engagement and enthusiasm of my students, as I have seen with Hedy. We have covered till level 5, and plan to spend one more week on it in classes and labs, before starting Python.* Pakistan\n\n*The 'realness' of programming, it resembles how it is in reality.* Netherlands: Plus class group 4 to 8\n\n*Step-by-step activities. Fun activities.* Netherlands: 1e All levels, 2e VWO/HAVO 2e VWO +, 3e HAVO 3e VWO\n\n*I really like Hedy very much and it is also nicely set up, which makes it good to use in primary school. Hedy's gradual approach works very well. The short explanation at the beginning of each level and the short example programs help to give the children a quick insight into what is new in the chosen level. The different assignments that the children can choose also work very well. You see the children choose assignments that appeal to them and they then get to work with them, through the levels. Hedy is great fun for children who are good at programming and want to get a taste of a real programming language. It is good preparation for secondary school as soon as more ICT education is given there.* Netherlands: Oegstgeest Montessori school\n\n*The construction is so good.* Netherlands: Lower secondary school HAVO-VWO\n\n*I can keep the pace of the class.* Netherlands: group 7 en 8\n\n![Felienne teaching kids](/images/teacherfeedback/Fkids1.JPG) *Felienne teaching kids*\n\n\n![Kids learning about Hedy](/images/teacherfeedback/Fkids2.JPG) *Kids learning about Hedy*" +learn-more-sections: +- title: The Hedy foundation + text: "Hedy is maintained by the Hedy Foundation (Stichting Hedy), Sportmanstaat 8, 2341 JG Oegstgeest, Dutch Chamber of Commerce number 94013985.\n\nThe board of the foundation consists of:\n\n * Felienne Hermans, president\n * Eelko Huizing, finance\n * Renée Merbis, secretary\n\nThe board of Stichting Hedy does not get any financial compensation for their tasks. " +- title: A deep dive! + text: "Want to know more about Hedy's philosophy and design? Check out this talk Felienne gave at the StrangeLoop Conference in 2022:\n\n" +- title: Hedy in the news + text: "Some websites and newspapers have written about Hedy since our release in early 2020. We keep a list here:\n* [Java Magazine 04.2023](images/Hedy_Javamagazine2023.pdf)\n* [Tech Optimism - A Solution to the IT Shortage (Dutch), August 2022](https://pom.show/2022/08/12/een-oplossing-voor-het-it-tekort/)\n* [Codeweek Podcast, July 2022](https://codeweek.eu/podcast/26)\n* [Heise.de (German), Januari 2022](https://www.heise.de/news/Hedy-die-mitwachsende-Programmiersprache-6336264.html)\n* [Strumenta, November 2021](https://tomassetti.me/teaching-programming-with-hedy/)\n* [Vives (Dutch), CodeWeek Special October 2021](images/Vives-174-Codeweek.pdf)\n* [CodeWeek.eu - Haunted House Challenge, September 2021](https://codeweek.eu/2021/challenges/haunted-house)\n* [Opensource.com, April 2021](https://opensource.com/article/21/4/hedy-teach-code)\n* [IO Magazine, April 2021](https://ict-research.nl/wordpress/wp-content/uploads/2021/04/IO-magazine-NR1-2021_web.pdf)\n* [Ingeniería De Software (Spanish), February 2021](https://ingenieriadesoftware.es/hedy-mejor-lenguaje-ensenar-programacion-ninos/)\n* [Hello World Magazine, February 2021](images/Hello_World_15_Hedy.pdf)\n* [Discoro, January 2021](https://discoro.wordpress.com/2021/01/09/hedy-gradually-learning-a-programming-language/)\n* [Felienne wins the Dutch award for ICT research for Hedy, January 2021](https://www.nwo.nl/en/news/felienne-hermans-receives-dutch-prize-ict-research-2021)\n* [SlashDot, August 2020](https://news.slashdot.org/story/20/08/17/024248/scientist-proposes-a-new-programming-language-for-teaching-coding-and-python)\n* [GenBeta (Spanish), August 2020](https://www.genbeta.com/desarrollo/nuevo-lenguaje-para-ensenar-programacion-a-ninos-como-se-ensena-a-leer-escribir-forma-gradual-niveles)\n* [Developpez (French), August 2020](https://programmation.developpez.com/actu/308095/Une-scientifique-propose-un-nouveau-langage-de-programmation-pour-enseigner-aux-enfants-le-codage-informatique-au-travers-d-une-approche-graduelle-implementee-en-Python-sur-13-paliers/)\n* [Vives (Dutch), October 2020](images/artikel_vives.pdf) \"Met Hedy stap voor stap leren programmeren\"\n* [Leiden University, April 2020](https://www.universiteitleiden.nl/en/news/2020/03/looking-to-distract-the-kids-while-you-work-from-home-get-them-programming)\n* [Mare (Dutch), April 2020](https://www.mareonline.nl/cultuur/computercode-voor-de-kids/)\n* [AG Connect (Dutch), April 2020](https://www.agconnect.nl/artikel/stapsgewijs-python-leren-programmeren-met-nieuwe-taal-hedy)" From 79895af8b46a9fa016b216fe92c475b9678e15fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=E1=BA=BF=20Tr=E1=BB=8Dng=20Ngh=C4=A9a?= Date: Mon, 28 Oct 2024 01:30:41 +0000 Subject: [PATCH 07/13] Translated using Weblate (Vietnamese) Currently translated at 4.0% (26 of 637 strings) Translation: Hedy/Texts Translate-URL: https://hosted.weblate.org/projects/hedy/web-texts/vi/ --- translations/vi/LC_MESSAGES/messages.po | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/translations/vi/LC_MESSAGES/messages.po b/translations/vi/LC_MESSAGES/messages.po index 0e4e74a176d..fb44d9d04f3 100644 --- a/translations/vi/LC_MESSAGES/messages.po +++ b/translations/vi/LC_MESSAGES/messages.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2000-01-01 00:00+0000\n" -"PO-Revision-Date: 2024-10-25 06:21+0000\n" -"Last-Translator: Prefill add-on \n" +"PO-Revision-Date: 2024-10-28 06:17+0000\n" +"Last-Translator: Bế Trọng Nghĩa \n" "Language-Team: vi \n" "Language: vi\n" "MIME-Version: 1.0\n" @@ -35,9 +35,8 @@ msgstr "Chúng tôi phát hiện hàm {name} được sử dụng mà chưa đư msgid "Has Blanks" msgstr "Chúng tôi phát hiện chương trình của bạn chưa hoàn thiện. Bạn có thể viết thêm vào chỗ trống được không?" -#, fuzzy msgid "Incomplete" -msgstr "We detected that part of the code seems to be missing from the `{incomplete_command}` on line {line_number}. Can you try adding what's missing?" +msgstr "Chúng tôi phát hiện chương trình của bạn đang bị thiếu một phần tại`{incomplete_command}` trên dòng {line_number}. Bạn có thể bổ sung phần còn thiếu được không?" #, fuzzy msgid "Incomplete Repeat" @@ -91,9 +90,8 @@ msgstr "It looks like you forgot to use a command on line {line_number}." msgid "Missing Inner Command" msgstr "It looks like you forgot to use a command with the `{command}` statement you used on line {line_number}." -#, fuzzy msgid "Missing Square Brackets" -msgstr "It looks like you forgot to use square brackets `[]` around the list you were creating on line {line_number}." +msgstr "Chúng tôi phát hiện danh sách được tạo trên dòng {line_number} đang thiếu dấu ngoặc vuông `[]`. Bạn có thể bổ sung ngoặc vuông `[]` xung quanh danh sách được không?" #, fuzzy msgid "Missing Variable" @@ -2893,4 +2891,3 @@ msgstr "Your program" #~ msgid "usernames_exist" #~ msgstr "One or more usernames is already in use." - From 311c1ee1a3f02227cbd500cef24cfb76ef3efd80 Mon Sep 17 00:00:00 2001 From: R_SACI Date: Sun, 27 Oct 2024 21:57:38 +0000 Subject: [PATCH 08/13] Translated using Weblate (Kabyle) Currently translated at 91.6% (22 of 24 strings) Translation: Hedy/client-messages Translate-URL: https://hosted.weblate.org/projects/hedy/client-messages/kab/ --- content/client-messages/kab.yaml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/content/client-messages/kab.yaml b/content/client-messages/kab.yaml index 90d7ae6b2d6..3cb1129058f 100644 --- a/content/client-messages/kab.yaml +++ b/content/client-messages/kab.yaml @@ -1,24 +1,24 @@ haunted: 🦇, 👻, 🎃 turtle: 🐢 -Program_too_long: Your program takes too long to run. -Errors_found: You made a mistake! Don't worry, we still ran the program +Program_too_long: Ahil-ik yettaṭṭaf aṭas n wakud i wakken ad yekker. +Errors_found: Tgiḍ tuccḍa ! Ur ttagad, nselkem ahil ServerError: You wrote a program we weren't expecting. If you want to help, send us an email with the level and your program at hello@hedy.org. In the meantime, try something a little different and take another look at the examples. Thanks! restaurant: 🍣, 🍕, 🍔 -Execute_error: Something went wrong while running the program. +Execute_error: Yella wayen ur neddi ara akken ilaq lawan n uselkem n wahil. CheckInternet: Senqed tuqqna-k ɣer Internet tetteddu akken iwata. Transpile_success: -- Good job! -- Amazing! -- Well done! -- Excellent! -- You did great! -Program_repair: This could be the correct code, can you fix it? -Other_error: Oops! Maybe we made a little mistake. -Connection_error: We couldn't reach the server. -Transpile_warning: Warning! -Transpile_error: We can't run your program. +- Igerrez! +- Gedha! +- Yelha! +- Izad! +- D amahil izaden! +Program_repair: Yezmer wagi d tangalt tameɣtut, tzemreḍ ad t-tṣeggmeḍ ? +Other_error: Ihuh! Waqil nga tuccḍa tamecṭuḥt. +Connection_error: Ur nessaweḍ ara ɣer uqeddac. +Transpile_warning: Ɣur-k! +Transpile_error: Ur nezmir ara ad nseddu ahil-ik. songs: 🎵,🎶 -Unsaved_Changes: You have an unsaved program. Do you want to leave without saving it? +Unsaved_Changes: Ahil-a ur yettwasekles ara. Tebɣiḍ ad teffɣeḍ war ma teskelseḍ-t? rock: ✂️, 📜, 🗻 dice: 🎲 Empty_output: This code works but does not print anything. Add a print command to your code or use the turtle to get output. From 8823ea11c192efcf978475bc81adf7a8a4d3a04c Mon Sep 17 00:00:00 2001 From: R_SACI Date: Mon, 28 Oct 2024 05:31:20 +0000 Subject: [PATCH 09/13] Translated using Weblate (Kabyle) Currently translated at 86.5% (58 of 67 strings) Translation: Hedy/Keywords Translate-URL: https://hosted.weblate.org/projects/hedy/keywords/kab/ --- content/keywords/kab.yaml | 90 +++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/content/keywords/kab.yaml b/content/keywords/kab.yaml index b9a45b848b4..18b2cd72378 100644 --- a/content/keywords/kab.yaml +++ b/content/keywords/kab.yaml @@ -1,67 +1,67 @@ -is: is -in: in -input: input +is: d +in: deg +input: sekcem 'True': 'True' -define: define -turn: turn -if: if +define: sbadu +turn: zzi +if: ma yella d2: '2' -brown: brown -from: from -and: and -remove: remove +brown: aqehwi +from: seg +and: akked +remove: kkes d7: '7' 'false': 'false' d5: '5' -for: for -clear: clear +for: i +clear: sfeḍ gray: gray -pink: pink +pink: axuxi 'False': 'False' -ask: ask -right: right -while: while -white: white -or: or +ask: ssuter +right: ayeffus +while: imi +white: amellal +or: neɣ range: range -with: with -repeat: repeat -to: to +with: akked +repeat: ales +to: ɣer 'true': 'true' -not_in: not in +not_in: mačči deg d6: '6' -return: return +return: uɣal ɣer deffir quote: "'" -at: at -times: times -forward: forward -orange: orange +at: ar +times: tikkal +forward: welleh +orange: aččinawi d4: '4' -green: green -yellow: yellow -left: left +green: azegzaw +yellow: awreɣ +left: ayeffus d1: '1' -elif: elif -red: red +elif: neɣ ma yella +red: azeggaɣ random: random -black: black -print: print -call: call +black: aberkan +print: siggez +call: asiwel d8: '8' def: def d9: '9' pressed: pressed -play: play -to_list: to +play: urar +to_list: ɣer d3: '3' comma: ',' -add: add -echo: echo -length: length -else: else +add: rnu +echo: yerra-d +length: teɣzi +else: neɣ d0: '0' -color: color +color: ini purple: purple -blue: blue -step: step -sleep: sleep +blue: amidadi +step: takkayt +sleep: gen From 0291d3ad0852db5d0ce9efe3c697a272e3afb299 Mon Sep 17 00:00:00 2001 From: R_SACI Date: Mon, 28 Oct 2024 03:44:19 +0000 Subject: [PATCH 10/13] Translated using Weblate (Kabyle) Currently translated at 0.9% (6 of 637 strings) Translation: Hedy/Texts Translate-URL: https://hosted.weblate.org/projects/hedy/web-texts/kab/ --- translations/kab/LC_MESSAGES/messages.po | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/translations/kab/LC_MESSAGES/messages.po b/translations/kab/LC_MESSAGES/messages.po index 198f5f1cf30..f76a0a27f9b 100644 --- a/translations/kab/LC_MESSAGES/messages.po +++ b/translations/kab/LC_MESSAGES/messages.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2024-06-26 16:04+0200\n" -"PO-Revision-Date: 2024-10-27 21:55+0000\n" -"Last-Translator: Prefill add-on \n" +"PO-Revision-Date: 2024-10-28 06:17+0000\n" +"Last-Translator: R_SACI \n" "Language-Team: none\n" "Language: kab\n" "MIME-Version: 1.0\n" @@ -2566,25 +2566,22 @@ msgstr "View adventures" msgid "view_classes" msgstr "View classes" -#, fuzzy msgid "view_program" -msgstr "View program" +msgstr "Sken ahil" #, fuzzy msgid "view_slides" msgstr "View slides" -#, fuzzy msgid "waiting_for_submit" -msgstr "Waiting for submit" +msgstr "Aṛaǧu n tuzna" #, fuzzy msgid "walker_variable_role" msgstr "walker" -#, fuzzy msgid "what_is_your_role" -msgstr "What is your role?" +msgstr "D acu-tt temlilt-ik?" #, fuzzy msgid "what_should_my_code_do" @@ -2594,14 +2591,11 @@ msgstr "What should my code do?" msgid "year_invalid" msgstr "Please enter a year between 1900 and {current_year}." -#, fuzzy msgid "yes" -msgstr "Yes" +msgstr "Ih" -#, fuzzy msgid "your_personal_text" -msgstr "Your personal text..." +msgstr "Aḍris-ik udmawan..." -#, fuzzy msgid "your_program" -msgstr "Your program" +msgstr "Ahil-ik" From 91be1be31225cdad5a93ca9c28db9e43d5bbfbf6 Mon Sep 17 00:00:00 2001 From: R_SACI Date: Mon, 28 Oct 2024 05:53:46 +0000 Subject: [PATCH 11/13] Translated using Weblate (Kabyle) Currently translated at 0.2% (1 of 464 strings) Translation: Hedy/Webpages Translate-URL: https://hosted.weblate.org/projects/hedy/webpages/kab/ --- content/pages/kab.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/content/pages/kab.yaml b/content/pages/kab.yaml index ba2b5d902de..b50d7e217ce 100644 --- a/content/pages/kab.yaml +++ b/content/pages/kab.yaml @@ -555,3 +555,4 @@ learn-more-sections: text: "Want to know more about Hedy's philosophy and design? Check out this talk Felienne gave at the StrangeLoop Conference in 2022:\n\n" - title: Hedy in the news text: "Some websites and newspapers have written about Hedy since our release in early 2020. We keep a list here:\n* [Java Magazine 04.2023](images/Hedy_Javamagazine2023.pdf)\n* [Tech Optimism - A Solution to the IT Shortage (Dutch), August 2022](https://pom.show/2022/08/12/een-oplossing-voor-het-it-tekort/)\n* [Codeweek Podcast, July 2022](https://codeweek.eu/podcast/26)\n* [Heise.de (German), Januari 2022](https://www.heise.de/news/Hedy-die-mitwachsende-Programmiersprache-6336264.html)\n* [Strumenta, November 2021](https://tomassetti.me/teaching-programming-with-hedy/)\n* [Vives (Dutch), CodeWeek Special October 2021](images/Vives-174-Codeweek.pdf)\n* [CodeWeek.eu - Haunted House Challenge, September 2021](https://codeweek.eu/2021/challenges/haunted-house)\n* [Opensource.com, April 2021](https://opensource.com/article/21/4/hedy-teach-code)\n* [IO Magazine, April 2021](https://ict-research.nl/wordpress/wp-content/uploads/2021/04/IO-magazine-NR1-2021_web.pdf)\n* [Ingeniería De Software (Spanish), February 2021](https://ingenieriadesoftware.es/hedy-mejor-lenguaje-ensenar-programacion-ninos/)\n* [Hello World Magazine, February 2021](images/Hello_World_15_Hedy.pdf)\n* [Discoro, January 2021](https://discoro.wordpress.com/2021/01/09/hedy-gradually-learning-a-programming-language/)\n* [Felienne wins the Dutch award for ICT research for Hedy, January 2021](https://www.nwo.nl/en/news/felienne-hermans-receives-dutch-prize-ict-research-2021)\n* [SlashDot, August 2020](https://news.slashdot.org/story/20/08/17/024248/scientist-proposes-a-new-programming-language-for-teaching-coding-and-python)\n* [GenBeta (Spanish), August 2020](https://www.genbeta.com/desarrollo/nuevo-lenguaje-para-ensenar-programacion-a-ninos-como-se-ensena-a-leer-escribir-forma-gradual-niveles)\n* [Developpez (French), August 2020](https://programmation.developpez.com/actu/308095/Une-scientifique-propose-un-nouveau-langage-de-programmation-pour-enseigner-aux-enfants-le-codage-informatique-au-travers-d-une-approche-graduelle-implementee-en-Python-sur-13-paliers/)\n* [Vives (Dutch), October 2020](images/artikel_vives.pdf) \"Met Hedy stap voor stap leren programmeren\"\n* [Leiden University, April 2020](https://www.universiteitleiden.nl/en/news/2020/03/looking-to-distract-the-kids-while-you-work-from-home-get-them-programming)\n* [Mare (Dutch), April 2020](https://www.mareonline.nl/cultuur/computercode-voor-de-kids/)\n* [AG Connect (Dutch), April 2020](https://www.agconnect.nl/artikel/stapsgewijs-python-leren-programmeren-met-nieuwe-taal-hedy)" +title: Tasemlkt n Hedy From 0e5adfd46322819dc13698209492ab890f088f1e Mon Sep 17 00:00:00 2001 From: weblate Date: Mon, 28 Oct 2024 06:37:24 +0000 Subject: [PATCH 12/13] =?UTF-8?q?=F0=9F=A4=96=20Automatically=20update=20g?= =?UTF-8?q?enerated=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/adventures/de.yaml | 14 ++-- grammars/keywords-kab.lark | 54 ++++++++++++ highlighting/highlighting-trad.json | 59 +++++++++++++ static/js/appbundle.js | 100 +++++++++++++++++++++++ static/js/appbundle.js.map | 4 +- static/js/message-translations.ts | 40 +++++++++ static_babel_content.json | 2 + translations/kab/LC_MESSAGES/messages.po | 3 +- translations/vi/LC_MESSAGES/messages.po | 1 + 9 files changed, 267 insertions(+), 10 deletions(-) create mode 100644 grammars/keywords-kab.lark diff --git a/content/adventures/de.yaml b/content/adventures/de.yaml index ccc59ccc5b3..961fd08277e 100644 --- a/content/adventures/de.yaml +++ b/content/adventures/de.yaml @@ -2661,16 +2661,16 @@ adventures: Benutze diese Vergleiche so in einem `{if}`: example_code: | ``` - age = {ask} 'Wie alt bist du?' - {if} alter > 12 - {print} 'Du bist älter als ich!' + age = {ask} 'How old are you?' + {if} age > 12 + {print} 'You are older than I am!' ``` ``` - age = {ask} 'Wie alt bist du?' - {if} alter < 12 - {print} 'Du bist jünger als ich!' + age = {ask} 'How old are you?' + {if} age < 12 + {print} 'You are younger than me!' {else} - {print} 'Du bist älter als ich!' + {print} 'You are older than me!' ``` story_text_2: | Ab diesem Level kannst du zwei Gleichheitszeichen verwenden, um etwas zu vergleichen. Das ist in den meisten Programmiersprachen so: diff --git a/grammars/keywords-kab.lark b/grammars/keywords-kab.lark new file mode 100644 index 00000000000..32f596bf693 --- /dev/null +++ b/grammars/keywords-kab.lark @@ -0,0 +1,54 @@ +_DEFINE: ("sbadu" | "define") _SPACE? +_CALL: ("asiwel" | "call") _SPACE? +_WITH: ("akked" | "with") _SPACE? +_DEF: ("def" | "def") _SPACE? +_RETURN: ("uɣal ɣer deffir" | "return") _SPACE? +_PRINT: ("siggez" | "print") _SPACE? +_PLAY: ("urar" | "play") _SPACE +_ASK: ("ssuter" | "ask") +_ECHO: ("yerra-d" | "echo") _SPACE? +_FORWARD: ("welleh" | "forward") _SPACE? +_TURN: ("zzi" | "turn") _SPACE? +left: ("ayeffus" | "left") _SPACE? +right: ("ayeffus" | "right") _SPACE? +black: ("aberkan" | "black") _SPACE? +blue: ("amidadi" | "blue") _SPACE? +brown: ("aqehwi" | "brown") _SPACE? +gray: ("gray" | "gray") _SPACE? +green: ("azegzaw" | "green") _SPACE? +orange: ("aččinawi" | "orange") _SPACE? +pink: ("axuxi" | "pink") _SPACE? +purple: ("purple" | "purple") _SPACE? +red: ("azeggaɣ" | "red") _SPACE? +white: ("amellal" | "white") _SPACE? +yellow: ("awreɣ" | "yellow") _SPACE? +_IS: _SPACE ("d" | "is") _SPACE +_STANDALONE_IS: ("d" | "is") +_SLEEP: ("gen" | "sleep") _SPACE? +_ADD_LIST: ("rnu" | "add") _SPACE +_TO_LIST: _SPACE? ("ɣer" | "to") +_REMOVE: ("kkes" | "remove") _SPACE +_FROM: _SPACE? ("seg" | "from") +_AT: _SPACE ("ar" | "at") _SPACE +random: ("random" | "random") _SPACE? +_IN: _SPACE ("deg" | "in") _SPACE +_NOT_IN: _SPACE ("mačči deg" | "not in") _SPACE +_IF: ("ma yella" | "if") _SPACE +_ELSE: "neɣ" | "else" +_AND: _SPACE? ("akked" | "and") _SPACE +_REPEAT: ("ales" | "repeat") _SPACE +_TIMES: _SPACE ("tikkal" | "times") +_FOR: ("i" | "for") _SPACE +_RANGE: ("range" | "range") _SPACE? +_TO: _SPACE ("ɣer" | "to") _SPACE +_STEP: "takkayt" | "step" +_ELIF: _SPACE? ("neɣ ma yella" | "elif") _SPACE +_INPUT: ("sekcem" | "input") +_OR: _SPACE? ("neɣ" | "or") _SPACE +_WHILE: ("imi" | "while") _SPACE +_LENGTH: "teɣzi" | "length" +_COLOR : ("ini" | "color") _SPACE? +_PRESSED: ("pressed" | "pressed") _SPACE? +clear: ("sfeḍ" | "clear") _SPACE? +TRUE: ("true" | "True" | "true" | "True") _SPACE? +FALSE: ("false" | "False" | "false" | "False") _SPACE? diff --git a/highlighting/highlighting-trad.json b/highlighting/highlighting-trad.json index e55c358a510..5fb7b8d1d92 100644 --- a/highlighting/highlighting-trad.json +++ b/highlighting/highlighting-trad.json @@ -1592,6 +1592,65 @@ "yellow": "きいろ|yellow", "DIGIT": "0123456789" }, + "kab": { + "False": "False", + "True": "True", + "add": "rnu|add", + "and": "akked|and", + "ask": "ssuter|ask", + "at": "ar|at", + "black": "aberkan|black", + "blue": "amidadi|blue", + "brown": "aqehwi|brown", + "call": "asiwel|call", + "clear": "sfeḍ|clear", + "color": "ini|color", + "comma": ",", + "def": "def", + "define": "sbadu|define", + "echo": "yerra-d|echo", + "elif": "neɣ ma yella|elif", + "else": "neɣ|else", + "false": "false", + "for": "i|for", + "forward": "welleh|forward", + "from": "seg|from", + "gray": "gray", + "green": "azegzaw|green", + "if": "ma yella|if", + "in": "deg|in", + "input": "sekcem|input", + "is": "d|is", + "left": "ayeffus|left", + "length": "teɣzi|length", + "not_in": "mačči deg|not in", + "or": "neɣ|or", + "orange": "aččinawi|orange", + "pink": "axuxi|pink", + "play": "urar|play", + "pressed": "pressed", + "print": "siggez|print", + "purple": "purple", + "random": "random", + "range": "range", + "red": "azeggaɣ|red", + "remove": "kkes|remove", + "repeat": "ales|repeat", + "return": "uɣal ɣer deffir|return", + "right": "ayeffus|right", + "sleep": "gen|sleep", + "step": "takkayt|step", + "times": "tikkal|times", + "to": "ɣer|to", + "to_list": "ɣer|to", + "true": "true", + "turn": "zzi|turn", + "while": "imi|while", + "white": "amellal|white", + "with": "akked|with", + "yellow": "awreɣ|yellow", + "DIGIT": "0123456789" + }, "kmr": { "False": "False", "True": "True", diff --git a/static/js/appbundle.js b/static/js/appbundle.js index 38d0e4dc8a8..3063f2afe71 100644 --- a/static/js/appbundle.js +++ b/static/js/appbundle.js @@ -61770,6 +61770,46 @@ ${o3}` : i3; "turtle": "\u{1F422}", "unsaved_class_changes": "There are unsaved changes, are you sure you want to leave this page?" }, + "kab": { + "CheckInternet": "Senqed tuqqna-k \u0263er Internet tetteddu akken iwata.", + "Connection_error": "Ur nessawe\u1E0D ara \u0263er uqeddac.", + "Empty_output": "This code works but does not print anything. Add a print command to your code or use the turtle to get output.", + "Errors_found": "Tgi\u1E0D tucc\u1E0Da ! Ur ttagad, nselkem ahil", + "Execute_error": "Yella wayen ur neddi ara akken ilaq lawan n uselkem n wahil.", + "Other_error": "Ihuh! Waqil nga tucc\u1E0Da tamec\u1E6Du\u1E25t.", + "Program_repair": "Yezmer wagi d tangalt tame\u0263tut, tzemre\u1E0D ad t-t\u1E63eggme\u1E0D ?", + "Program_too_long": "Ahil-ik yetta\u1E6D\u1E6Daf a\u1E6Das n wakud i wakken ad yekker.", + "ServerError": "You wrote a program we weren't expecting. If you want to help, send us an email with the level and your program at hello@hedy.org. In the meantime, try something a little different and take another look at the examples. Thanks!", + "Transpile_error": "Ur nezmir ara ad nseddu ahil-ik.", + "Transpile_success": "Igerrez!\nGedha!\nYelha!\nIzad!\nD amahil izaden!", + "Transpile_warning": "\u0194ur-k!", + "Unsaved_Changes": "Ahil-a ur yettwasekles ara. Teb\u0263i\u1E0D ad teff\u0263e\u1E0D war ma teskelse\u1E0D-t?", + "adventures_completed": "Adventures completed: {number_of_adventures}", + "adventures_restored": "The default adventures have been restored.", + "adventures_tried": "Adventures tried", + "copy_link_to_share": "Copy link to share", + "customization_deleted": "Customizations successfully deleted.", + "dice": "\u{1F3B2}", + "directly_available": "Directly open", + "disabled": "Disabled", + "errors": "Errors", + "fortune": "\u{1F52E}, \u2728", + "graph_title": "Errors per adventure completed on level {level}", + "haunted": "\u{1F987}, \u{1F47B}, \u{1F383}", + "level_title": "Level", + "multiple_keywords_warning": "You are trying to use the keyword {orig_keyword}, but this keyword might have several meanings. Please choose the one you're trying to use from this list and copy paste it in your code, curly braces included: {keyword_list}", + "number_of_errors": "Number of errors: {number_of_errors}", + "one_level_error": "You need to select at least one level.", + "restaurant": "\u{1F363}, \u{1F355}, \u{1F354}", + "rock": "\u2702\uFE0F, \u{1F4DC}, \u{1F5FB}", + "select_all": "Select all", + "selected": "Selected", + "songs": "\u{1F3B5},\u{1F3B6}", + "successful_runs": "Successful runs: {successful_runs}", + "teacher_welcome": "Welcome to Hedy! Your are now the proud owner of a teachers account which allows you to create classes and invite students.", + "turtle": "\u{1F422}", + "unsaved_class_changes": "There are unsaved changes, are you sure you want to leave this page?" + }, "kmr": { "CheckInternet": "Check whether your Internet connection is working.", "Connection_error": "We couldn't reach the server.", @@ -98373,6 +98413,65 @@ def note_with_error(value, err): yellow: "\u304D\u3044\u308D|yellow", DIGIT: "0123456789" }; + var kab = { + False: "False", + True: "True", + add: "rnu|add", + and: "akked|and", + ask: "ssuter|ask", + at: "ar|at", + black: "aberkan|black", + blue: "amidadi|blue", + brown: "aqehwi|brown", + call: "asiwel|call", + clear: "sfe\u1E0D|clear", + color: "ini|color", + comma: ",", + def: "def", + define: "sbadu|define", + echo: "yerra-d|echo", + elif: "ne\u0263 ma yella|elif", + else: "ne\u0263|else", + false: "false", + for: "i|for", + forward: "welleh|forward", + from: "seg|from", + gray: "gray", + green: "azegzaw|green", + if: "ma yella|if", + in: "deg|in", + input: "sekcem|input", + is: "d|is", + left: "ayeffus|left", + length: "te\u0263zi|length", + not_in: "ma\u010D\u010Di deg|not in", + or: "ne\u0263|or", + orange: "a\u010D\u010Dinawi|orange", + pink: "axuxi|pink", + play: "urar|play", + pressed: "pressed", + print: "siggez|print", + purple: "purple", + random: "random", + range: "range", + red: "azegga\u0263|red", + remove: "kkes|remove", + repeat: "ales|repeat", + return: "u\u0263al \u0263er deffir|return", + right: "ayeffus|right", + sleep: "gen|sleep", + step: "takkayt|step", + times: "tikkal|times", + to: "\u0263er|to", + to_list: "\u0263er|to", + true: "true", + turn: "zzi|turn", + while: "imi|while", + white: "amellal|white", + with: "akked|with", + yellow: "awre\u0263|yellow", + DIGIT: "0123456789" + }; var kmr = { False: "False", True: "True", @@ -100289,6 +100388,7 @@ def note_with_error(value, err): id, it, ja, + kab, kmr, ko, mi, diff --git a/static/js/appbundle.js.map b/static/js/appbundle.js.map index 35f97421d20..dd4dce19801 100644 --- a/static/js/appbundle.js.map +++ b/static/js/appbundle.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../node_modules/jszip/dist/jszip.min.js", "../../node_modules/@babel/runtime/helpers/arrayWithHoles.js", "../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js", "../../node_modules/@babel/runtime/helpers/arrayLikeToArray.js", "../../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js", "../../node_modules/@babel/runtime/helpers/nonIterableRest.js", "../../node_modules/@babel/runtime/helpers/slicedToArray.js", "../../node_modules/@babel/runtime/helpers/classCallCheck.js", "../../node_modules/@babel/runtime/helpers/typeof.js", "../../node_modules/@babel/runtime/helpers/toPrimitive.js", "../../node_modules/@babel/runtime/helpers/toPropertyKey.js", "../../node_modules/@babel/runtime/helpers/createClass.js", "../../node_modules/automation-events/build/es5/bundle.js", "../../node_modules/dompurify/src/utils.js", "../../node_modules/dompurify/src/tags.js", "../../node_modules/dompurify/src/attrs.js", "../../node_modules/dompurify/src/regexp.js", "../../node_modules/dompurify/src/purify.js", "ckeditor.js", "index.ts", "message-translations.ts", "client-messages.ts", "modal.ts", "app.ts", "../../node_modules/tone/Tone/version.ts", "../../node_modules/standardized-audio-context/src/module.ts", "../../node_modules/standardized-audio-context/src/factories/abort-error.ts", "../../node_modules/standardized-audio-context/src/factories/add-active-input-connection-to-audio-node.ts", "../../node_modules/standardized-audio-context/src/factories/add-audio-node-connections.ts", "../../node_modules/standardized-audio-context/src/factories/add-audio-param-connections.ts", "../../node_modules/standardized-audio-context/src/globals.ts", "../../node_modules/standardized-audio-context/src/helpers/is-constructible.ts", "../../node_modules/standardized-audio-context/src/helpers/split-import-statements.ts", "../../node_modules/standardized-audio-context/src/factories/add-audio-worklet-module.ts", "../../node_modules/standardized-audio-context/src/helpers/get-value-for-key.ts", "../../node_modules/standardized-audio-context/src/helpers/pick-element-from-set.ts", "../../node_modules/standardized-audio-context/src/helpers/delete-passive-input-connection-to-audio-node.ts", "../../node_modules/standardized-audio-context/src/helpers/get-event-listeners-of-audio-node.ts", "../../node_modules/standardized-audio-context/src/helpers/set-internal-state-to-active.ts", "../../node_modules/standardized-audio-context/src/guards/audio-worklet-node.ts", "../../node_modules/standardized-audio-context/src/helpers/set-internal-state-to-passive.ts", "../../node_modules/standardized-audio-context/src/helpers/set-internal-state-to-passive-when-necessary.ts", "../../node_modules/standardized-audio-context/src/factories/add-connection-to-audio-node.ts", "../../node_modules/standardized-audio-context/src/factories/add-passive-input-connection-to-audio-node.ts", "../../node_modules/standardized-audio-context/src/factories/add-silent-connection.ts", "../../node_modules/standardized-audio-context/src/factories/add-unrendered-audio-worklet-node.ts", "../../node_modules/standardized-audio-context/src/factories/analyser-node-constructor.ts", "../../node_modules/standardized-audio-context/src/helpers/is-owned-by-context.ts", "../../node_modules/standardized-audio-context/src/factories/analyser-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-buffer-copy-channel-methods-out-of-bounds-support.ts", "../../node_modules/standardized-audio-context/src/factories/index-size-error.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-audio-buffer-get-channel-data-method.ts", "../../node_modules/standardized-audio-context/src/factories/audio-buffer-constructor.ts", "../../node_modules/standardized-audio-context/src/constants.ts", "../../node_modules/standardized-audio-context/src/helpers/is-active-audio-node.ts", "../../node_modules/standardized-audio-context/src/factories/audio-buffer-source-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/audio-buffer-source-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/guards/audio-buffer-source-node.ts", "../../node_modules/standardized-audio-context/src/guards/biquad-filter-node.ts", "../../node_modules/standardized-audio-context/src/guards/constant-source-node.ts", "../../node_modules/standardized-audio-context/src/guards/gain-node.ts", "../../node_modules/standardized-audio-context/src/guards/oscillator-node.ts", "../../node_modules/standardized-audio-context/src/guards/stereo-panner-node.ts", "../../node_modules/standardized-audio-context/src/helpers/get-audio-node-connections.ts", "../../node_modules/standardized-audio-context/src/helpers/get-audio-param-connections.ts", "../../node_modules/standardized-audio-context/src/helpers/deactivate-active-audio-node-input-connections.ts", "../../node_modules/standardized-audio-context/src/helpers/deactivate-audio-graph.ts", "../../node_modules/standardized-audio-context/src/helpers/is-valid-latency-hint.ts", "../../node_modules/standardized-audio-context/src/factories/audio-context-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/audio-destination-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/audio-destination-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/audio-listener-factory.ts", "../../node_modules/standardized-audio-context/src/guards/audio-node.ts", "../../node_modules/standardized-audio-context/src/guards/audio-node-output-connection.ts", "../../node_modules/standardized-audio-context/src/helpers/insert-element-in-set.ts", "../../node_modules/standardized-audio-context/src/helpers/add-active-input-connection-to-audio-param.ts", "../../node_modules/standardized-audio-context/src/helpers/add-passive-input-connection-to-audio-param.ts", "../../node_modules/standardized-audio-context/src/guards/native-audio-node-faker.ts", "../../node_modules/standardized-audio-context/src/helpers/connect-native-audio-node-to-native-audio-node.ts", "../../node_modules/standardized-audio-context/src/helpers/delete-active-input-connection.ts", "../../node_modules/standardized-audio-context/src/helpers/delete-active-input-connection-to-audio-param.ts", "../../node_modules/standardized-audio-context/src/helpers/delete-event-listeners-of-audio-node.ts", "../../node_modules/standardized-audio-context/src/helpers/delete-passive-input-connection-to-audio-param.ts", "../../node_modules/standardized-audio-context/src/helpers/disconnect-native-audio-node-from-native-audio-node.ts", "../../node_modules/standardized-audio-context/src/helpers/get-native-audio-node.ts", "../../node_modules/standardized-audio-context/src/helpers/get-native-audio-param.ts", "../../node_modules/standardized-audio-context/src/helpers/is-part-of-a-cycle.ts", "../../node_modules/standardized-audio-context/src/helpers/is-passive-audio-node.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-node-disconnect-method-support.ts", "../../node_modules/standardized-audio-context/src/helpers/visit-each-audio-node-once.ts", "../../node_modules/standardized-audio-context/src/guards/native-audio-node.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-audio-node-disconnect-method.ts", "../../node_modules/standardized-audio-context/src/factories/audio-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/audio-param-factory.ts", "../../node_modules/standardized-audio-context/src/factories/audio-param-renderer.ts", "../../node_modules/standardized-audio-context/src/read-only-map.ts", "../../node_modules/standardized-audio-context/src/factories/audio-worklet-node-constructor.ts", "../../node_modules/standardized-audio-context/src/helpers/copy-from-channel.ts", "../../node_modules/standardized-audio-context/src/helpers/copy-to-channel.ts", "../../node_modules/standardized-audio-context/src/helpers/create-nested-arrays.ts", "../../node_modules/standardized-audio-context/src/helpers/get-audio-worklet-processor.ts", "../../node_modules/standardized-audio-context/src/factories/audio-worklet-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/base-audio-context-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/biquad-filter-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/biquad-filter-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/cache-test-result.ts", "../../node_modules/standardized-audio-context/src/factories/channel-merger-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/channel-merger-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/channel-splitter-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/channel-splitter-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/connect-audio-param.ts", "../../node_modules/standardized-audio-context/src/factories/connect-multiple-outputs.ts", "../../node_modules/standardized-audio-context/src/factories/connected-native-audio-buffer-source-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/constant-source-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/constant-source-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/convert-number-to-unsigned-long.ts", "../../node_modules/standardized-audio-context/src/factories/convolver-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/convolver-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/create-native-offline-audio-context.ts", "../../node_modules/standardized-audio-context/src/factories/data-clone-error.ts", "../../node_modules/standardized-audio-context/src/helpers/detach-array-buffer.ts", "../../node_modules/standardized-audio-context/src/factories/decode-audio-data.ts", "../../node_modules/standardized-audio-context/src/factories/decrement-cycle-counter.ts", "../../node_modules/standardized-audio-context/src/factories/delay-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/delay-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/delete-active-input-connection-to-audio-node.ts", "../../node_modules/standardized-audio-context/src/factories/delete-unrendered-audio-worklet-node.ts", "../../node_modules/standardized-audio-context/src/guards/delay-node.ts", "../../node_modules/standardized-audio-context/src/factories/detect-cycles.ts", "../../node_modules/standardized-audio-context/src/factories/disconnect-multiple-outputs.ts", "../../node_modules/standardized-audio-context/src/factories/dynamics-compressor-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/dynamics-compressor-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/encoding-error.ts", "../../node_modules/standardized-audio-context/src/factories/evaluate-source.ts", "../../node_modules/standardized-audio-context/src/factories/event-target-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/expose-current-frame-and-current-time.ts", "../../node_modules/standardized-audio-context/src/factories/fetch-source.ts", "../../node_modules/standardized-audio-context/src/factories/gain-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/gain-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/get-active-audio-worklet-node-inputs.ts", "../../node_modules/standardized-audio-context/src/factories/get-audio-node-renderer.ts", "../../node_modules/standardized-audio-context/src/factories/get-audio-node-tail-time.ts", "../../node_modules/standardized-audio-context/src/factories/get-audio-param-renderer.ts", "../../node_modules/standardized-audio-context/src/factories/get-backup-offline-audio-context.ts", "../../node_modules/standardized-audio-context/src/factories/invalid-state-error.ts", "../../node_modules/standardized-audio-context/src/factories/get-native-context.ts", "../../node_modules/standardized-audio-context/src/factories/get-or-create-backup-offline-audio-context.ts", "../../node_modules/standardized-audio-context/src/factories/get-unrendered-audio-worklet-nodes.ts", "../../node_modules/standardized-audio-context/src/factories/invalid-access-error.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-iir-filter-node-get-frequency-response-method.ts", "../../node_modules/standardized-audio-context/src/factories/iir-filter-node-constructor.ts", "../../node_modules/standardized-audio-context/src/helpers/filter-buffer.ts", "../../node_modules/standardized-audio-context/src/factories/iir-filter-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/increment-cycle-counter-factory.ts", "../../node_modules/standardized-audio-context/src/factories/is-any-audio-context.ts", "../../node_modules/standardized-audio-context/src/factories/is-any-audio-node.ts", "../../node_modules/standardized-audio-context/src/factories/is-any-audio-param.ts", "../../node_modules/standardized-audio-context/src/factories/is-any-offline-audio-context.ts", "../../node_modules/standardized-audio-context/src/factories/is-native-audio-context.ts", "../../node_modules/standardized-audio-context/src/factories/is-native-audio-node.ts", "../../node_modules/standardized-audio-context/src/factories/is-native-audio-param.ts", "../../node_modules/standardized-audio-context/src/factories/is-native-context.ts", "../../node_modules/standardized-audio-context/src/factories/is-native-offline-audio-context.ts", "../../node_modules/standardized-audio-context/src/factories/is-secure-context.ts", "../../node_modules/standardized-audio-context/src/factories/media-element-audio-source-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/media-stream-audio-destination-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/media-stream-audio-source-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/media-stream-track-audio-source-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/minimal-audio-context-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/minimal-base-audio-context-constructor.ts", "../../node_modules/standardized-audio-context/src/helpers/test-promise-support.ts", "../../node_modules/standardized-audio-context/src/factories/minimal-offline-audio-context-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/monitor-connections.ts", "../../node_modules/standardized-audio-context/src/helpers/assign-native-audio-node-option.ts", "../../node_modules/standardized-audio-context/src/helpers/assign-native-audio-node-options.ts", "../../node_modules/standardized-audio-context/src/helpers/test-analyser-node-get-float-time-domain-data-method-support.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-analyser-node-get-float-time-domain-data-method.ts", "../../node_modules/standardized-audio-context/src/factories/native-analyser-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-audio-buffer-constructor.ts", "../../node_modules/standardized-audio-context/src/helpers/assign-native-audio-node-audio-param-value.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-audio-buffer-source-node-start-method-consecutive-calls.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-audio-scheduled-source-node-start-method-negative-parameters.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-audio-scheduled-source-node-stop-method-negative-parameters.ts", "../../node_modules/standardized-audio-context/src/factories/native-audio-buffer-source-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-audio-context-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/native-audio-destination-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-audio-worklet-node-constructor.ts", "../../node_modules/standardized-audio-context/src/helpers/test-clonability-of-audio-worklet-node-options.ts", "../../node_modules/standardized-audio-context/src/factories/native-audio-worklet-node-factory.ts", "../../node_modules/standardized-audio-context/src/helpers/compute-buffer-size.ts", "../../node_modules/standardized-audio-context/src/helpers/clone-audio-worklet-node-options.ts", "../../node_modules/standardized-audio-context/src/helpers/create-audio-worklet-processor-promise.ts", "../../node_modules/standardized-audio-context/src/helpers/create-audio-worklet-processor.ts", "../../node_modules/standardized-audio-context/src/factories/native-audio-worklet-node-faker-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-biquad-filter-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-channel-merger-node-factory.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-channel-splitter-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-channel-splitter-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-constant-source-node-factory.ts", "../../node_modules/standardized-audio-context/src/helpers/intercept-connections.ts", "../../node_modules/standardized-audio-context/src/factories/native-constant-source-node-faker-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-convolver-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-delay-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-dynamics-compressor-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-gain-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-iir-filter-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-iir-filter-node-faker-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-media-element-audio-source-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-media-stream-audio-destination-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-media-stream-audio-source-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-media-stream-track-audio-source-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-offline-audio-context-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/native-oscillator-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-panner-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-panner-node-faker-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-periodic-wave-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-script-processor-node.ts", "../../node_modules/standardized-audio-context/src/factories/native-stereo-panner-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-stereo-panner-node-faker-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-wave-shaper-node-factory.ts", "../../node_modules/standardized-audio-context/src/factories/native-wave-shaper-node-faker-factory.ts", "../../node_modules/standardized-audio-context/src/factories/not-supported-error.ts", "../../node_modules/standardized-audio-context/src/factories/offline-audio-context-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/oscillator-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/oscillator-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/panner-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/panner-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/periodic-wave-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/render-automation.ts", "../../node_modules/standardized-audio-context/src/factories/render-inputs-of-audio-node.ts", "../../node_modules/standardized-audio-context/src/factories/render-inputs-of-audio-param.ts", "../../node_modules/standardized-audio-context/src/factories/render-native-offline-audio-context.ts", "../../node_modules/standardized-audio-context/src/factories/set-active-audio-worklet-node-inputs.ts", "../../node_modules/standardized-audio-context/src/factories/set-audio-node-tail-time.ts", "../../node_modules/standardized-audio-context/src/factories/start-rendering.ts", "../../node_modules/standardized-audio-context/src/factories/stereo-panner-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/stereo-panner-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/test-audio-buffer-constructor-support.ts", "../../node_modules/standardized-audio-context/src/factories/test-audio-worklet-processor-post-message-support.ts", "../../node_modules/standardized-audio-context/src/factories/test-offline-audio-context-current-time-support.ts", "../../node_modules/standardized-audio-context/src/factories/unknown-error.ts", "../../node_modules/standardized-audio-context/src/factories/wave-shaper-node-constructor.ts", "../../node_modules/standardized-audio-context/src/factories/wave-shaper-node-renderer-factory.ts", "../../node_modules/standardized-audio-context/src/factories/window.ts", "../../node_modules/standardized-audio-context/src/factories/wrap-audio-buffer-copy-channel-methods.ts", "../../node_modules/standardized-audio-context/src/factories/wrap-audio-buffer-copy-channel-methods-out-of-bounds.ts", "../../node_modules/standardized-audio-context/src/factories/wrap-audio-buffer-source-node-stop-method-nullified-buffer.ts", "../../node_modules/standardized-audio-context/src/factories/wrap-channel-merger-node.ts", "../../node_modules/standardized-audio-context/src/helpers/get-first-sample.ts", "../../node_modules/standardized-audio-context/src/helpers/is-dc-curve.ts", "../../node_modules/standardized-audio-context/src/helpers/overwrite-accessors.ts", "../../node_modules/standardized-audio-context/src/helpers/sanitize-audio-worklet-node-options.ts", "../../node_modules/standardized-audio-context/src/helpers/sanitize-channel-splitter-options.ts", "../../node_modules/standardized-audio-context/src/helpers/sanitize-periodic-wave-options.ts", "../../node_modules/standardized-audio-context/src/helpers/set-value-at-time-until-possible.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-buffer-source-node-start-method-consecutive-calls-support.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-buffer-source-node-start-method-offset-clamping-support.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-buffer-source-node-stop-method-nullified-buffer-support.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-scheduled-source-node-start-method-negative-parameters-support.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-scheduled-source-node-stop-method-consecutive-calls-support.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-scheduled-source-node-stop-method-negative-parameters-support.ts", "../../node_modules/standardized-audio-context/src/helpers/test-audio-worklet-node-options-clonability.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-audio-buffer-source-node-start-method-offset-clamping.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-audio-scheduled-source-node-stop-method-consecutive-calls.ts", "../../node_modules/standardized-audio-context/src/helpers/wrap-event-listener.ts", "../../node_modules/tone/Tone/core/util/Debug.ts", "../../node_modules/tone/Tone/core/util/TypeCheck.ts", "../../node_modules/tone/Tone/core/context/AudioContext.ts", "../../node_modules/tslib/tslib.es6.mjs", "../../node_modules/tone/Tone/core/clock/Ticker.ts", "../../node_modules/tone/Tone/core/util/AdvancedTypeCheck.ts", "../../node_modules/tone/Tone/core/util/Defaults.ts", "../../node_modules/tone/Tone/core/Tone.ts", "../../node_modules/tone/Tone/core/util/Math.ts", "../../node_modules/tone/Tone/core/util/Timeline.ts", "../../node_modules/tone/Tone/core/context/ContextInitialization.ts", "../../node_modules/tone/Tone/core/util/Emitter.ts", "../../node_modules/tone/Tone/core/context/BaseContext.ts", "../../node_modules/tone/Tone/core/context/Context.ts", "../../node_modules/tone/Tone/core/context/DummyContext.ts", "../../node_modules/tone/Tone/core/util/Interface.ts", "../../node_modules/tone/Tone/core/context/ToneAudioBuffer.ts", "../../node_modules/tone/Tone/core/context/OfflineContext.ts", "../../node_modules/tone/Tone/core/Global.ts", "../../node_modules/tone/Tone/core/type/Conversions.ts", "../../node_modules/tone/Tone/core/type/TimeBase.ts", "../../node_modules/tone/Tone/core/type/Time.ts", "../../node_modules/tone/Tone/core/type/Frequency.ts", "../../node_modules/tone/Tone/core/type/TransportTime.ts", "../../node_modules/tone/Tone/core/context/ToneWithContext.ts", "../../node_modules/tone/Tone/core/util/StateTimeline.ts", "../../node_modules/tone/Tone/core/context/Param.ts", "../../node_modules/tone/Tone/core/context/ToneAudioNode.ts", "../../node_modules/tone/Tone/core/context/Gain.ts", "../../node_modules/tone/Tone/source/OneShotSource.ts", "../../node_modules/tone/Tone/signal/ToneConstantSource.ts", "../../node_modules/tone/Tone/signal/Signal.ts", "../../node_modules/tone/Tone/core/clock/TickParam.ts", "../../node_modules/tone/Tone/core/clock/TickSignal.ts", "../../node_modules/tone/Tone/core/clock/TickSource.ts", "../../node_modules/tone/Tone/core/clock/Clock.ts", "../../node_modules/tone/Tone/core/context/ToneAudioBuffers.ts", "../../node_modules/tone/Tone/core/type/Midi.ts", "../../node_modules/tone/Tone/core/type/Ticks.ts", "../../node_modules/tone/Tone/core/util/Draw.ts", "../../node_modules/tone/Tone/core/util/IntervalTimeline.ts", "../../node_modules/tone/Tone/component/channel/Volume.ts", "../../node_modules/tone/Tone/core/context/Destination.ts", "../../node_modules/tone/Tone/core/util/TimelineValue.ts", "../../node_modules/tone/Tone/core/clock/TransportEvent.ts", "../../node_modules/tone/Tone/core/clock/TransportRepeatEvent.ts", "../../node_modules/tone/Tone/core/clock/Transport.ts", "../../node_modules/tone/Tone/source/Source.ts", "../../node_modules/tone/Tone/source/buffer/ToneBufferSource.ts", "../../node_modules/tone/Tone/source/Noise.ts", "../../node_modules/tone/Tone/source/oscillator/OscillatorInterface.ts", "../../node_modules/tone/Tone/source/oscillator/ToneOscillatorNode.ts", "../../node_modules/tone/Tone/source/oscillator/Oscillator.ts", "../../node_modules/tone/Tone/signal/SignalOperator.ts", "../../node_modules/tone/Tone/signal/WaveShaper.ts", "../../node_modules/tone/Tone/signal/AudioToGain.ts", "../../node_modules/tone/Tone/signal/Multiply.ts", "../../node_modules/tone/Tone/source/oscillator/AMOscillator.ts", "../../node_modules/tone/Tone/source/oscillator/FMOscillator.ts", "../../node_modules/tone/Tone/source/oscillator/PulseOscillator.ts", "../../node_modules/tone/Tone/source/oscillator/FatOscillator.ts", "../../node_modules/tone/Tone/source/oscillator/PWMOscillator.ts", "../../node_modules/tone/Tone/source/oscillator/OmniOscillator.ts", "../../node_modules/tone/Tone/core/util/Decorator.ts", "../../node_modules/tone/Tone/source/buffer/Player.ts", "../../node_modules/tone/Tone/component/envelope/Envelope.ts", "../../node_modules/tone/Tone/instrument/Instrument.ts", "../../node_modules/tone/Tone/instrument/Monophonic.ts", "../../node_modules/tone/Tone/component/envelope/AmplitudeEnvelope.ts", "../../node_modules/tone/Tone/instrument/Synth.ts", "../../node_modules/tone/Tone/instrument/MembraneSynth.ts", "../../node_modules/tone/Tone/core/worklet/WorkletGlobalScope.ts", "../../node_modules/tone/Tone/core/worklet/ToneAudioWorkletProcessor.worklet.ts", "../../node_modules/tone/Tone/core/worklet/SingleIOProcessor.worklet.ts", "../../node_modules/tone/Tone/core/worklet/DelayLine.worklet.ts", "../../node_modules/tone/Tone/component/filter/FeedbackCombFilter.worklet.ts", "../../node_modules/tone/Tone/instrument/PolySynth.ts", "../../node_modules/tone/Tone/instrument/Sampler.ts", "../../node_modules/tone/Tone/component/channel/Panner.ts", "../../node_modules/tone/Tone/effect/BitCrusher.worklet.ts", "../../node_modules/tone/Tone/effect/Freeverb.ts", "../../node_modules/tone/Tone/effect/JCReverb.ts", "../../node_modules/tone/Tone/component/channel/Solo.ts", "../../node_modules/tone/Tone/component/channel/PanVol.ts", "../../node_modules/tone/Tone/component/channel/Channel.ts", "../../node_modules/tone/Tone/core/context/Listener.ts", "../../node_modules/tone/Tone/index.ts", "event-emitter.ts", "tabs.ts", "pythonPrefixes.ts", "types.ts", "tutorials/utils.ts", "tutorials/intro.ts", "tutorials/teacher.ts", "tutorials/level1.ts", "tutorials/tutorial.ts", "editor.ts", "../../node_modules/@codemirror/state/dist/index.js", "../../node_modules/style-mod/src/style-mod.js", "../../node_modules/w3c-keyname/index.js", "../../node_modules/@codemirror/view/dist/index.js", "../../node_modules/@lezer/common/dist/index.js", "../../node_modules/@lezer/highlight/dist/index.js", "../../node_modules/@codemirror/language/dist/index.js", "../../node_modules/@codemirror/commands/dist/index.js", "../../node_modules/crelt/index.js", "../../node_modules/@codemirror/search/dist/index.js", "cm-decorations.ts", "../../node_modules/@lezer/lr/dist/index.js", "lezer-parsers/level1-parser.terms.ts", "lezer-parsers/level2-parser.terms.ts", "lezer-parsers/level3-parser.terms.ts", "lezer-parsers/level4-parser.terms.ts", "lezer-parsers/level5-parser.terms.ts", "lezer-parsers/level6-parser.terms.ts", "lezer-parsers/level7-parser.terms.ts", "lezer-parsers/level8-parser.terms.ts", "lezer-parsers/level10-parser.terms.ts", "lezer-parsers/level11-parser.terms.ts", "lezer-parsers/level12-parser.terms.ts", "lezer-parsers/level13-parser.terms.ts", "lezer-parsers/level14-parser.terms.ts", "lezer-parsers/level15-parser.terms.ts", "lezer-parsers/level16-parser.terms.ts", "lezer-parsers/level17-parser.terms.ts", "lezer-parsers/level18-parser.terms.ts", "utils.ts", "lezer-parsers/tokens.ts", "lezer-parsers/level1-parser.ts", "lezer-parsers/level2-parser.ts", "lezer-parsers/level3-parser.ts", "lezer-parsers/level4-parser.ts", "lezer-parsers/level5-parser.ts", "lezer-parsers/level6-parser.ts", "lezer-parsers/level7-parser.ts", "lezer-parsers/level8-parser.ts", "lezer-parsers/level9-parser.ts", "lezer-parsers/level10-parser.ts", "lezer-parsers/level11-parser.ts", "lezer-parsers/level12-parser.ts", "lezer-parsers/level13-parser.ts", "lezer-parsers/level14-parser.ts", "lezer-parsers/level15-parser.ts", "lezer-parsers/level16-parser.ts", "lezer-parsers/level17-parser.ts", "lezer-parsers/level18-parser.ts", "lezer-parsers/language-packages.ts", "cm-monokai-theme.ts", "cm-editor.ts", "../../node_modules/sortablejs/modular/sortable.esm.js", "parsons.ts", "browser-helpers/on-element-becomes-visible.ts", "debugging.ts", "local.ts", "teachers.ts", "adventure.ts", "autosave.ts", "../../node_modules/@kurkle/color/dist/color.esm.js", "../../node_modules/chart.js/src/helpers/helpers.core.ts", "../../node_modules/chart.js/src/helpers/helpers.math.ts", "../../node_modules/chart.js/src/helpers/helpers.collection.ts", "../../node_modules/chart.js/src/helpers/helpers.extras.ts", "../../node_modules/chart.js/src/helpers/helpers.easing.ts", "../../node_modules/chart.js/src/helpers/helpers.color.ts", "../../node_modules/chart.js/src/core/core.animations.defaults.js", "../../node_modules/chart.js/src/core/core.layouts.defaults.js", "../../node_modules/chart.js/src/helpers/helpers.intl.ts", "../../node_modules/chart.js/src/core/core.ticks.js", "../../node_modules/chart.js/src/core/core.scale.defaults.js", "../../node_modules/chart.js/src/core/core.defaults.js", "../../node_modules/chart.js/src/helpers/helpers.canvas.ts", "../../node_modules/chart.js/src/helpers/helpers.options.ts", "../../node_modules/chart.js/src/helpers/helpers.config.ts", "../../node_modules/chart.js/src/helpers/helpers.curve.ts", "../../node_modules/chart.js/src/helpers/helpers.dom.ts", "../../node_modules/chart.js/src/helpers/helpers.interpolation.ts", "../../node_modules/chart.js/src/helpers/helpers.rtl.ts", "../../node_modules/chart.js/src/helpers/helpers.segment.js", "../../node_modules/chart.js/src/core/core.animator.js", "../../node_modules/chart.js/src/core/core.animation.js", "../../node_modules/chart.js/src/core/core.animations.js", "../../node_modules/chart.js/src/core/core.datasetController.js", "../../node_modules/chart.js/src/controllers/controller.bar.js", "../../node_modules/chart.js/src/controllers/controller.bubble.js", "../../node_modules/chart.js/src/controllers/controller.doughnut.js", "../../node_modules/chart.js/src/controllers/controller.line.js", "../../node_modules/chart.js/src/controllers/controller.polarArea.js", "../../node_modules/chart.js/src/controllers/controller.pie.js", "../../node_modules/chart.js/src/controllers/controller.radar.js", "../../node_modules/chart.js/src/controllers/controller.scatter.js", "../../node_modules/chart.js/src/core/core.adapters.ts", "../../node_modules/chart.js/src/core/core.interaction.js", "../../node_modules/chart.js/src/core/core.layouts.js", "../../node_modules/chart.js/src/platform/platform.base.js", "../../node_modules/chart.js/src/platform/platform.basic.js", "../../node_modules/chart.js/src/platform/platform.dom.js", "../../node_modules/chart.js/src/platform/index.js", "../../node_modules/chart.js/src/core/core.element.ts", "../../node_modules/chart.js/src/core/core.scale.autoskip.js", "../../node_modules/chart.js/src/core/core.scale.js", "../../node_modules/chart.js/src/core/core.typedRegistry.js", "../../node_modules/chart.js/src/core/core.registry.js", "../../node_modules/chart.js/src/core/core.plugins.js", "../../node_modules/chart.js/src/core/core.config.js", "../../node_modules/chart.js/src/core/core.controller.js", "../../node_modules/chart.js/src/elements/element.arc.ts", "../../node_modules/chart.js/src/elements/element.line.js", "../../node_modules/chart.js/src/elements/element.point.ts", "../../node_modules/chart.js/src/elements/element.bar.js", "../../node_modules/chart.js/src/plugins/plugin.colors.ts", "../../node_modules/chart.js/src/plugins/plugin.decimation.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js", "../../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js", "../../node_modules/chart.js/src/plugins/plugin.filler/index.js", "../../node_modules/chart.js/src/plugins/plugin.legend.js", "../../node_modules/chart.js/src/plugins/plugin.title.js", "../../node_modules/chart.js/src/plugins/plugin.subtitle.js", "../../node_modules/chart.js/src/plugins/plugin.tooltip.js", "../../node_modules/chart.js/src/scales/scale.category.js", "../../node_modules/chart.js/src/scales/scale.linearbase.js", "../../node_modules/chart.js/src/scales/scale.linear.js", "../../node_modules/chart.js/src/scales/scale.logarithmic.js", "../../node_modules/chart.js/src/scales/scale.radialLinear.js", "../../node_modules/chart.js/src/scales/scale.time.js", "../../node_modules/chart.js/src/scales/scale.timeseries.js", "../../node_modules/chart.js/src/index.ts", "loading.ts", "comm.ts", "auth.ts", "local-save-warning.ts", "user-activity.ts", "index-tabs.ts", "htmx-integration.ts", "statistics.ts", "logs.ts", "admin.ts", "profile.ts", "initialize.ts", "../../node_modules/tw-elements/src/js/dom/data.js", "../../node_modules/tw-elements/src/js/util/index.js", "../../node_modules/tw-elements/src/js/dom/event-handler.js", "../../node_modules/tw-elements/src/js/base-component.js", "../../node_modules/tw-elements/src/js/components/button.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/enums.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/math.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/userAgent.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/within.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/getVariation.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/flip.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/hide.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/offset.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/debounce.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/format.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/validateModifiers.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/uniqueBy.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/createPopper.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/popper-lite.js", "../../node_modules/tw-elements/node_modules/@popperjs/core/lib/popper.js", "../../node_modules/tw-elements/src/js/dom/manipulator.js", "../../node_modules/tw-elements/src/js/dom/selector-engine.js", "../../node_modules/tw-elements/src/js/components/dropdown.js", "../../node_modules/tw-elements/src/js/components/collapse.js", "../../node_modules/tw-elements/src/js/util/scrollbar.js", "../../node_modules/tw-elements/src/js/util/backdrop.js", "../../node_modules/tw-elements/src/js/util/focusTrap.js", "../../node_modules/tw-elements/src/js/util/component-functions.js", "../../node_modules/tw-elements/src/js/components/offcanvas.js", "../../node_modules/tw-elements/src/js/components/alert.js", "../../node_modules/tw-elements/src/js/components/carousel.js", "../../node_modules/tw-elements/src/js/components/modal.js", "../../node_modules/tw-elements/src/js/util/sanitizer.js", "../../node_modules/tw-elements/src/js/components/tooltip.js", "../../node_modules/tw-elements/src/js/components/popover.js", "../../node_modules/tw-elements/src/js/navigation/scrollspy.js", "../../node_modules/tw-elements/src/js/navigation/tab.js", "../../node_modules/tw-elements/src/js/components/toast.js", "../../node_modules/tw-elements/node_modules/detect-autofill/dist/detect-autofill.js", "../../node_modules/tw-elements/src/js/forms/input.js", "../../node_modules/tw-elements/src/js/content-styles/animate.js", "../../node_modules/tw-elements/src/js/methods/ripple.js", "../../node_modules/tw-elements/src/js/forms/datepicker/date-utils.js", "../../node_modules/tw-elements/src/js/forms/datepicker/templates.js", "../../node_modules/tw-elements/src/js/util/keycodes.js", "../../node_modules/tw-elements/src/js/forms/datepicker/index.js", "../../node_modules/tw-elements/src/js/forms/timepicker/templates.js", "../../node_modules/tw-elements/src/js/forms/timepicker/utils.js", "../../node_modules/tw-elements/src/js/forms/timepicker/index.js", "../../node_modules/tw-elements/src/js/util/touch/swipe.js", "../../node_modules/tw-elements/src/js/util/touch/index.js", "../../node_modules/tw-elements/src/js/navigation/sidenav.js", "../../node_modules/tw-elements/src/js/components/stepper.js", "../../node_modules/tw-elements/src/js/forms/select/select-option.js", "../../node_modules/tw-elements/src/js/forms/select/selection-model.js", "../../node_modules/tw-elements/src/js/forms/select/util.js", "../../node_modules/tw-elements/src/js/forms/select/templates.js", "../../node_modules/tw-elements/src/js/forms/select/index.js", "../../node_modules/tw-elements/src/js/components/chips/templates.js", "../../node_modules/tw-elements/src/js/components/chips/chip.js", "../../node_modules/tw-elements/src/js/components/chips/index.js", "../../node_modules/tw-elements/src/js/data/chart/chartDefaults.js", "../../node_modules/tw-elements/node_modules/deepmerge/dist/cjs.js", "../../node_modules/tw-elements/src/js/data/chart/charts.js", "../../node_modules/tw-elements/node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js", "../../node_modules/tw-elements/src/js/methods/perfect-scrollbar.js", "../../node_modules/tw-elements/src/js/data/datatables/html/pagination.js", "../../node_modules/tw-elements/src/js/data/datatables/html/columns.js", "../../node_modules/tw-elements/src/js/data/datatables/html/rows.js", "../../node_modules/tw-elements/src/js/data/datatables/html/table.js", "../../node_modules/tw-elements/src/js/data/datatables/util.js", "../../node_modules/tw-elements/src/js/data/datatables/index.js", "../../node_modules/tw-elements/src/js/components/rating.js", "../../node_modules/tw-elements/src/js/components/popconfirm.js", "../../node_modules/tw-elements/src/js/components/lightbox.js", "../../node_modules/tw-elements/src/js/forms/validation/rules.js", "../../node_modules/tw-elements/src/js/forms/validation/validation.js", "../../node_modules/tw-elements/src/js/methods/touch/touchUtil.js", "../../node_modules/tw-elements/src/js/methods/touch/press.js", "../../node_modules/tw-elements/src/js/methods/touch/swipe.js", "../../node_modules/tw-elements/src/js/methods/touch/pan.js", "../../node_modules/tw-elements/src/js/methods/touch/pinch.js", "../../node_modules/tw-elements/src/js/methods/touch/tap.js", "../../node_modules/tw-elements/src/js/methods/touch/rotate.js", "../../node_modules/tw-elements/src/js/methods/touch/index.js", "../../node_modules/tw-elements/src/js/methods/smooth-scroll.js", "../../node_modules/tw-elements/src/js/methods/lazy-load.js", "../../node_modules/tw-elements/src/js/methods/clipboard.js", "../../node_modules/tw-elements/src/js/methods/infinite-scroll.js", "../../node_modules/tw-elements/src/js/methods/loading-management/templates.js", "../../node_modules/tw-elements/src/js/methods/loading-management/index.js", "../../node_modules/tw-elements/src/js/forms/dateTimepicker/utils.js", "../../node_modules/tw-elements/src/js/forms/dateTimepicker/templates.js", "../../node_modules/tw-elements/src/js/forms/dateTimepicker/index.js", "../../node_modules/tw-elements/src/js/methods/sticky.js", "../../node_modules/tw-elements/src/js/autoinit/jqueryInit.js", "../../node_modules/tw-elements/src/js/autoinit/autoinitCallbacks.js", "../../node_modules/tw-elements/src/js/autoinit/chartsInit.js", "../../node_modules/tw-elements/src/js/autoinit/Register.js", "../../node_modules/tw-elements/src/js/autoinit/index.js", "tailwind.ts", "public-adventures.ts", "microbit.ts", "custom-elements.ts"], - "sourcesContent": ["/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : String(i);\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;", "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@babel/runtime/helpers/slicedToArray'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass')) :\n typeof define === 'function' && define.amd ? define(['exports', '@babel/runtime/helpers/slicedToArray', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.automationEvents = {}, global._slicedToArray, global._classCallCheck, global._createClass));\n})(this, (function (exports, _slicedToArray, _classCallCheck, _createClass) { 'use strict';\n\n var createExtendedExponentialRampToValueAutomationEvent = function createExtendedExponentialRampToValueAutomationEvent(value, endTime, insertTime) {\n return {\n endTime: endTime,\n insertTime: insertTime,\n type: 'exponentialRampToValue',\n value: value\n };\n };\n\n var createExtendedLinearRampToValueAutomationEvent = function createExtendedLinearRampToValueAutomationEvent(value, endTime, insertTime) {\n return {\n endTime: endTime,\n insertTime: insertTime,\n type: 'linearRampToValue',\n value: value\n };\n };\n\n var createSetValueAutomationEvent = function createSetValueAutomationEvent(value, startTime) {\n return {\n startTime: startTime,\n type: 'setValue',\n value: value\n };\n };\n\n var createSetValueCurveAutomationEvent = function createSetValueCurveAutomationEvent(values, startTime, duration) {\n return {\n duration: duration,\n startTime: startTime,\n type: 'setValueCurve',\n values: values\n };\n };\n\n var getTargetValueAtTime = function getTargetValueAtTime(time, valueAtStartTime, _ref) {\n var startTime = _ref.startTime,\n target = _ref.target,\n timeConstant = _ref.timeConstant;\n return target + (valueAtStartTime - target) * Math.exp((startTime - time) / timeConstant);\n };\n\n var isExponentialRampToValueAutomationEvent = function isExponentialRampToValueAutomationEvent(automationEvent) {\n return automationEvent.type === 'exponentialRampToValue';\n };\n\n var isLinearRampToValueAutomationEvent = function isLinearRampToValueAutomationEvent(automationEvent) {\n return automationEvent.type === 'linearRampToValue';\n };\n\n var isAnyRampToValueAutomationEvent = function isAnyRampToValueAutomationEvent(automationEvent) {\n return isExponentialRampToValueAutomationEvent(automationEvent) || isLinearRampToValueAutomationEvent(automationEvent);\n };\n\n var isSetValueAutomationEvent = function isSetValueAutomationEvent(automationEvent) {\n return automationEvent.type === 'setValue';\n };\n\n var isSetValueCurveAutomationEvent = function isSetValueCurveAutomationEvent(automationEvent) {\n return automationEvent.type === 'setValueCurve';\n };\n\n var getValueOfAutomationEventAtIndexAtTime = function getValueOfAutomationEventAtIndexAtTime(automationEvents, index, time, defaultValue) {\n var automationEvent = automationEvents[index];\n return automationEvent === undefined ? defaultValue : isAnyRampToValueAutomationEvent(automationEvent) || isSetValueAutomationEvent(automationEvent) ? automationEvent.value : isSetValueCurveAutomationEvent(automationEvent) ? automationEvent.values[automationEvent.values.length - 1] : getTargetValueAtTime(time, getValueOfAutomationEventAtIndexAtTime(automationEvents, index - 1, automationEvent.startTime, defaultValue), automationEvent);\n };\n\n var getEndTimeAndValueOfPreviousAutomationEvent = function getEndTimeAndValueOfPreviousAutomationEvent(automationEvents, index, currentAutomationEvent, nextAutomationEvent, defaultValue) {\n return currentAutomationEvent === undefined ? [nextAutomationEvent.insertTime, defaultValue] : isAnyRampToValueAutomationEvent(currentAutomationEvent) ? [currentAutomationEvent.endTime, currentAutomationEvent.value] : isSetValueAutomationEvent(currentAutomationEvent) ? [currentAutomationEvent.startTime, currentAutomationEvent.value] : isSetValueCurveAutomationEvent(currentAutomationEvent) ? [currentAutomationEvent.startTime + currentAutomationEvent.duration, currentAutomationEvent.values[currentAutomationEvent.values.length - 1]] : [currentAutomationEvent.startTime, getValueOfAutomationEventAtIndexAtTime(automationEvents, index - 1, currentAutomationEvent.startTime, defaultValue)];\n };\n\n var isCancelAndHoldAutomationEvent = function isCancelAndHoldAutomationEvent(automationEvent) {\n return automationEvent.type === 'cancelAndHold';\n };\n\n var isCancelScheduledValuesAutomationEvent = function isCancelScheduledValuesAutomationEvent(automationEvent) {\n return automationEvent.type === 'cancelScheduledValues';\n };\n\n var getEventTime = function getEventTime(automationEvent) {\n if (isCancelAndHoldAutomationEvent(automationEvent) || isCancelScheduledValuesAutomationEvent(automationEvent)) {\n return automationEvent.cancelTime;\n }\n if (isExponentialRampToValueAutomationEvent(automationEvent) || isLinearRampToValueAutomationEvent(automationEvent)) {\n return automationEvent.endTime;\n }\n return automationEvent.startTime;\n };\n\n var getExponentialRampValueAtTime = function getExponentialRampValueAtTime(time, startTime, valueAtStartTime, _ref) {\n var endTime = _ref.endTime,\n value = _ref.value;\n if (valueAtStartTime === value) {\n return value;\n }\n if (0 < valueAtStartTime && 0 < value || valueAtStartTime < 0 && value < 0) {\n return valueAtStartTime * Math.pow(value / valueAtStartTime, (time - startTime) / (endTime - startTime));\n }\n return 0;\n };\n\n var getLinearRampValueAtTime = function getLinearRampValueAtTime(time, startTime, valueAtStartTime, _ref) {\n var endTime = _ref.endTime,\n value = _ref.value;\n return valueAtStartTime + (time - startTime) / (endTime - startTime) * (value - valueAtStartTime);\n };\n\n var interpolateValue = function interpolateValue(values, theoreticIndex) {\n var lowerIndex = Math.floor(theoreticIndex);\n var upperIndex = Math.ceil(theoreticIndex);\n if (lowerIndex === upperIndex) {\n return values[lowerIndex];\n }\n return (1 - (theoreticIndex - lowerIndex)) * values[lowerIndex] + (1 - (upperIndex - theoreticIndex)) * values[upperIndex];\n };\n\n var getValueCurveValueAtTime = function getValueCurveValueAtTime(time, _ref) {\n var duration = _ref.duration,\n startTime = _ref.startTime,\n values = _ref.values;\n var theoreticIndex = (time - startTime) / duration * (values.length - 1);\n return interpolateValue(values, theoreticIndex);\n };\n\n var isSetTargetAutomationEvent = function isSetTargetAutomationEvent(automationEvent) {\n return automationEvent.type === 'setTarget';\n };\n\n var AutomationEventList = /*#__PURE__*/function (_Symbol$iterator) {\n function AutomationEventList(defaultValue) {\n _classCallCheck(this, AutomationEventList);\n this._automationEvents = [];\n this._currenTime = 0;\n this._defaultValue = defaultValue;\n }\n _createClass(AutomationEventList, [{\n key: _Symbol$iterator,\n value: function value() {\n return this._automationEvents[Symbol.iterator]();\n }\n }, {\n key: \"add\",\n value: function add(automationEvent) {\n var eventTime = getEventTime(automationEvent);\n if (isCancelAndHoldAutomationEvent(automationEvent) || isCancelScheduledValuesAutomationEvent(automationEvent)) {\n var index = this._automationEvents.findIndex(function (currentAutomationEvent) {\n if (isCancelScheduledValuesAutomationEvent(automationEvent) && isSetValueCurveAutomationEvent(currentAutomationEvent)) {\n return currentAutomationEvent.startTime + currentAutomationEvent.duration >= eventTime;\n }\n return getEventTime(currentAutomationEvent) >= eventTime;\n });\n var removedAutomationEvent = this._automationEvents[index];\n if (index !== -1) {\n this._automationEvents = this._automationEvents.slice(0, index);\n }\n if (isCancelAndHoldAutomationEvent(automationEvent)) {\n var lastAutomationEvent = this._automationEvents[this._automationEvents.length - 1];\n if (removedAutomationEvent !== undefined && isAnyRampToValueAutomationEvent(removedAutomationEvent)) {\n if (lastAutomationEvent !== undefined && isSetTargetAutomationEvent(lastAutomationEvent)) {\n throw new Error('The internal list is malformed.');\n }\n var startTime = lastAutomationEvent === undefined ? removedAutomationEvent.insertTime : isSetValueCurveAutomationEvent(lastAutomationEvent) ? lastAutomationEvent.startTime + lastAutomationEvent.duration : getEventTime(lastAutomationEvent);\n var startValue = lastAutomationEvent === undefined ? this._defaultValue : isSetValueCurveAutomationEvent(lastAutomationEvent) ? lastAutomationEvent.values[lastAutomationEvent.values.length - 1] : lastAutomationEvent.value;\n var value = isExponentialRampToValueAutomationEvent(removedAutomationEvent) ? getExponentialRampValueAtTime(eventTime, startTime, startValue, removedAutomationEvent) : getLinearRampValueAtTime(eventTime, startTime, startValue, removedAutomationEvent);\n var truncatedAutomationEvent = isExponentialRampToValueAutomationEvent(removedAutomationEvent) ? createExtendedExponentialRampToValueAutomationEvent(value, eventTime, this._currenTime) : createExtendedLinearRampToValueAutomationEvent(value, eventTime, this._currenTime);\n this._automationEvents.push(truncatedAutomationEvent);\n }\n if (lastAutomationEvent !== undefined && isSetTargetAutomationEvent(lastAutomationEvent)) {\n this._automationEvents.push(createSetValueAutomationEvent(this.getValue(eventTime), eventTime));\n }\n if (lastAutomationEvent !== undefined && isSetValueCurveAutomationEvent(lastAutomationEvent) && lastAutomationEvent.startTime + lastAutomationEvent.duration > eventTime) {\n var duration = eventTime - lastAutomationEvent.startTime;\n var ratio = (lastAutomationEvent.values.length - 1) / lastAutomationEvent.duration;\n var length = Math.max(2, 1 + Math.ceil(duration * ratio));\n var fraction = duration / (length - 1) * ratio;\n var values = lastAutomationEvent.values.slice(0, length);\n if (fraction < 1) {\n for (var i = 1; i < length; i += 1) {\n var factor = fraction * i % 1;\n values[i] = lastAutomationEvent.values[i - 1] * (1 - factor) + lastAutomationEvent.values[i] * factor;\n }\n }\n this._automationEvents[this._automationEvents.length - 1] = createSetValueCurveAutomationEvent(values, lastAutomationEvent.startTime, duration);\n }\n }\n } else {\n var _index = this._automationEvents.findIndex(function (currentAutomationEvent) {\n return getEventTime(currentAutomationEvent) > eventTime;\n });\n var previousAutomationEvent = _index === -1 ? this._automationEvents[this._automationEvents.length - 1] : this._automationEvents[_index - 1];\n if (previousAutomationEvent !== undefined && isSetValueCurveAutomationEvent(previousAutomationEvent) && getEventTime(previousAutomationEvent) + previousAutomationEvent.duration > eventTime) {\n return false;\n }\n var persistentAutomationEvent = isExponentialRampToValueAutomationEvent(automationEvent) ? createExtendedExponentialRampToValueAutomationEvent(automationEvent.value, automationEvent.endTime, this._currenTime) : isLinearRampToValueAutomationEvent(automationEvent) ? createExtendedLinearRampToValueAutomationEvent(automationEvent.value, eventTime, this._currenTime) : automationEvent;\n if (_index === -1) {\n this._automationEvents.push(persistentAutomationEvent);\n } else {\n if (isSetValueCurveAutomationEvent(automationEvent) && eventTime + automationEvent.duration > getEventTime(this._automationEvents[_index])) {\n return false;\n }\n this._automationEvents.splice(_index, 0, persistentAutomationEvent);\n }\n }\n return true;\n }\n }, {\n key: \"flush\",\n value: function flush(time) {\n var index = this._automationEvents.findIndex(function (currentAutomationEvent) {\n return getEventTime(currentAutomationEvent) > time;\n });\n if (index > 1) {\n var remainingAutomationEvents = this._automationEvents.slice(index - 1);\n var firstRemainingAutomationEvent = remainingAutomationEvents[0];\n if (isSetTargetAutomationEvent(firstRemainingAutomationEvent)) {\n remainingAutomationEvents.unshift(createSetValueAutomationEvent(getValueOfAutomationEventAtIndexAtTime(this._automationEvents, index - 2, firstRemainingAutomationEvent.startTime, this._defaultValue), firstRemainingAutomationEvent.startTime));\n }\n this._automationEvents = remainingAutomationEvents;\n }\n }\n }, {\n key: \"getValue\",\n value: function getValue(time) {\n if (this._automationEvents.length === 0) {\n return this._defaultValue;\n }\n var indexOfNextEvent = this._automationEvents.findIndex(function (automationEvent) {\n return getEventTime(automationEvent) > time;\n });\n var nextAutomationEvent = this._automationEvents[indexOfNextEvent];\n var indexOfCurrentEvent = (indexOfNextEvent === -1 ? this._automationEvents.length : indexOfNextEvent) - 1;\n var currentAutomationEvent = this._automationEvents[indexOfCurrentEvent];\n if (currentAutomationEvent !== undefined && isSetTargetAutomationEvent(currentAutomationEvent) && (nextAutomationEvent === undefined || !isAnyRampToValueAutomationEvent(nextAutomationEvent) || nextAutomationEvent.insertTime > time)) {\n return getTargetValueAtTime(time, getValueOfAutomationEventAtIndexAtTime(this._automationEvents, indexOfCurrentEvent - 1, currentAutomationEvent.startTime, this._defaultValue), currentAutomationEvent);\n }\n if (currentAutomationEvent !== undefined && isSetValueAutomationEvent(currentAutomationEvent) && (nextAutomationEvent === undefined || !isAnyRampToValueAutomationEvent(nextAutomationEvent))) {\n return currentAutomationEvent.value;\n }\n if (currentAutomationEvent !== undefined && isSetValueCurveAutomationEvent(currentAutomationEvent) && (nextAutomationEvent === undefined || !isAnyRampToValueAutomationEvent(nextAutomationEvent) || currentAutomationEvent.startTime + currentAutomationEvent.duration > time)) {\n if (time < currentAutomationEvent.startTime + currentAutomationEvent.duration) {\n return getValueCurveValueAtTime(time, currentAutomationEvent);\n }\n return currentAutomationEvent.values[currentAutomationEvent.values.length - 1];\n }\n if (currentAutomationEvent !== undefined && isAnyRampToValueAutomationEvent(currentAutomationEvent) && (nextAutomationEvent === undefined || !isAnyRampToValueAutomationEvent(nextAutomationEvent))) {\n return currentAutomationEvent.value;\n }\n if (nextAutomationEvent !== undefined && isExponentialRampToValueAutomationEvent(nextAutomationEvent)) {\n var _getEndTimeAndValueOf = getEndTimeAndValueOfPreviousAutomationEvent(this._automationEvents, indexOfCurrentEvent, currentAutomationEvent, nextAutomationEvent, this._defaultValue),\n _getEndTimeAndValueOf2 = _slicedToArray(_getEndTimeAndValueOf, 2),\n startTime = _getEndTimeAndValueOf2[0],\n value = _getEndTimeAndValueOf2[1];\n return getExponentialRampValueAtTime(time, startTime, value, nextAutomationEvent);\n }\n if (nextAutomationEvent !== undefined && isLinearRampToValueAutomationEvent(nextAutomationEvent)) {\n var _getEndTimeAndValueOf3 = getEndTimeAndValueOfPreviousAutomationEvent(this._automationEvents, indexOfCurrentEvent, currentAutomationEvent, nextAutomationEvent, this._defaultValue),\n _getEndTimeAndValueOf4 = _slicedToArray(_getEndTimeAndValueOf3, 2),\n _startTime = _getEndTimeAndValueOf4[0],\n _value = _getEndTimeAndValueOf4[1];\n return getLinearRampValueAtTime(time, _startTime, _value, nextAutomationEvent);\n }\n return this._defaultValue;\n }\n }]);\n return AutomationEventList;\n }(Symbol.iterator);\n\n var createCancelAndHoldAutomationEvent = function createCancelAndHoldAutomationEvent(cancelTime) {\n return {\n cancelTime: cancelTime,\n type: 'cancelAndHold'\n };\n };\n\n var createCancelScheduledValuesAutomationEvent = function createCancelScheduledValuesAutomationEvent(cancelTime) {\n return {\n cancelTime: cancelTime,\n type: 'cancelScheduledValues'\n };\n };\n\n var createExponentialRampToValueAutomationEvent = function createExponentialRampToValueAutomationEvent(value, endTime) {\n return {\n endTime: endTime,\n type: 'exponentialRampToValue',\n value: value\n };\n };\n\n var createLinearRampToValueAutomationEvent = function createLinearRampToValueAutomationEvent(value, endTime) {\n return {\n endTime: endTime,\n type: 'linearRampToValue',\n value: value\n };\n };\n\n var createSetTargetAutomationEvent = function createSetTargetAutomationEvent(target, startTime, timeConstant) {\n return {\n startTime: startTime,\n target: target,\n timeConstant: timeConstant,\n type: 'setTarget'\n };\n };\n\n exports.AutomationEventList = AutomationEventList;\n exports.createCancelAndHoldAutomationEvent = createCancelAndHoldAutomationEvent;\n exports.createCancelScheduledValuesAutomationEvent = createCancelScheduledValuesAutomationEvent;\n exports.createExponentialRampToValueAutomationEvent = createExponentialRampToValueAutomationEvent;\n exports.createLinearRampToValueAutomationEvent = createLinearRampToValueAutomationEvent;\n exports.createSetTargetAutomationEvent = createSetTargetAutomationEvent;\n exports.createSetValueAutomationEvent = createSetValueAutomationEvent;\n exports.createSetValueCurveAutomationEvent = createSetValueCurveAutomationEvent;\n\n}));\n", "const {\n hasOwnProperty,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function numberIsNaN(x) {\n // eslint-disable-next-line unicorn/prefer-number-properties\n return typeof x === 'number' && isNaN(x);\n}\n\nexport function unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array, transformCaseFunc) {\n transformCaseFunc = transformCaseFunc ?? stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n let property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property]) === true) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n hasOwnProperty,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n]);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n]);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n]);\n\nexport const text = freeze(['#text']);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot',\n]);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n]);\n", "import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n", "import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n freeze,\n arrayForEach,\n arrayPop,\n arrayPush,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n numberIsNaN,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (\n document.currentScript &&\n document.currentScript.hasAttribute(ATTR_NAME)\n ) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n const DOMPurify = (root) => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = VERSION;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n const originalDocument = window.document;\n\n let { document } = window;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n const trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n originalDocument\n );\n const emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined &&\n documentMode !== 9;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (\u00A77.3.3)\n * - DOM Tree Accessors (\u00A73.1.5)\n * - Form Element Parent-Child Relations (\u00A74.10.3)\n * - Iframe srcdoc / Nested WindowProxies (\u00A74.8.5)\n * - HTMLCollection (\u00A74.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Specify the maximum element nesting depth to prevent mXSS */\n const MAX_NESTING_DEPTH = 255;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n 'ALLOWED_TAGS' in cfg\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n 'ALLOWED_ATTR' in cfg\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES =\n 'ALLOWED_NAMESPACES' in cfg\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES =\n 'ADD_URI_SAFE_ATTR' in cfg\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n 'ADD_DATA_URI_TAGS' in cfg\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS =\n 'FORBID_CONTENTS' in cfg\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS =\n 'FORBID_TAGS' in cfg\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : {};\n FORBID_ATTR =\n 'FORBID_ATTR' in cfg\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'annotation-xml',\n ]);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n ALLOWED_NAMESPACES[element.namespaceURI]\n ) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function (node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function (name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node,\n });\n }\n\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty) {\n /* Create a HTML document */\n let doc;\n let leadingWhitespace;\n\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n NAMESPACE === HTML_NAMESPACE\n ) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty =\n '' +\n dirty +\n '';\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT\n ? emptyHTML\n : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(\n doc,\n WHOLE_DOCUMENT ? 'html' : 'body'\n )[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n const _createIterator = function (root) {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT |\n NodeFilter.SHOW_COMMENT |\n NodeFilter.SHOW_TEXT |\n NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n NodeFilter.SHOW_CDATA_SECTION,\n null,\n false\n );\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function (elm) {\n return (\n elm instanceof HTMLFormElement &&\n ((typeof elm.__depth !== 'undefined' &&\n typeof elm.__depth !== 'number') ||\n (typeof elm.__removalCount !== 'undefined' &&\n typeof elm.__removalCount !== 'number') ||\n typeof elm.nodeName !== 'string' ||\n typeof elm.textContent !== 'string' ||\n typeof elm.removeChild !== 'function' ||\n !(elm.attributes instanceof NamedNodeMap) ||\n typeof elm.removeAttribute !== 'function' ||\n typeof elm.setAttribute !== 'function' ||\n typeof elm.namespaceURI !== 'string' ||\n typeof elm.insertBefore !== 'function' ||\n typeof elm.hasChildNodes !== 'function')\n );\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function (object) {\n return typeof Node === 'object'\n ? object instanceof Node\n : object &&\n typeof object === 'object' &&\n typeof object.nodeType === 'number' &&\n typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function (entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], (hook) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode) {\n let content;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check if tagname contains Unicode */\n if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n currentNode.hasChildNodes() &&\n !_isNode(currentNode.firstElementChild) &&\n (!_isNode(currentNode.content) ||\n !_isNode(currentNode.content.firstElementChild)) &&\n regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Mitigate a problem with templates inside select */\n if (\n tagName === 'select' &&\n regExpTest(/