add ide output fixes #71

This commit is contained in:
Mario Pesch 2021-03-25 10:38:32 +01:00
parent 6a6b2e2f58
commit 687ac32166
5 changed files with 748 additions and 539 deletions

View File

@ -1,232 +1,255 @@
export const UI = { export const UI = {
/** /**
* Toolbox * Toolbox
*/ */
toolbox_sensors: "Sensoren", toolbox_sensors: "Sensoren",
toolbox_logic: "Logik", toolbox_logic: "Logik",
toolbox_loops: "Schleifen", toolbox_loops: "Schleifen",
toolbox_math: "Mathematik", toolbox_math: "Mathematik",
toolbox_io: "Eingang/Ausgang", toolbox_io: "Eingang/Ausgang",
toolbox_time: "Zeit", toolbox_time: "Zeit",
toolbox_functions: "Funktionen", toolbox_functions: "Funktionen",
toolbox_variables: "Variablen", toolbox_variables: "Variablen",
/** /**
* Tooltips * Tooltips
* *
*/ */
tooltip_compile_code: "Code kompilieren", tooltip_compile_code: "Code kompilieren",
tooltip_save_blocks: "Blöcke speichern", tooltip_save_blocks: "Blöcke speichern",
tooltip_open_blocks: "Blöcke öffnen", tooltip_open_blocks: "Blöcke öffnen",
tooltip_screenshot: "Screenshot erstellen", tooltip_screenshot: "Screenshot erstellen",
tooltip_clear_workspace: "Workspace zurücksetzen", tooltip_clear_workspace: "Workspace zurücksetzen",
tooltip_share_blocks: "Blöcke teilen", tooltip_share_blocks: "Blöcke teilen",
tooltip_show_code: "Code anzeigen", tooltip_show_code: "Code anzeigen",
tooltip_hide_code: "Code ausblenden", tooltip_hide_code: "Code ausblenden",
tooltip_delete_project: "Projekt löschen", tooltip_delete_project: "Projekt löschen",
tooltip_project_name: "Name des Projektes", tooltip_project_name: "Name des Projektes",
tooltip_download_project: "Projekt herunterladen", tooltip_download_project: "Projekt herunterladen",
tooltip_open_project: "Projekt öffnen", tooltip_open_project: "Projekt öffnen",
tooltip_update_project: "Projekt aktualisieren", tooltip_update_project: "Projekt aktualisieren",
tooltip_save_project: "Projekt speichern", tooltip_save_project: "Projekt speichern",
tooltip_create_project: "Projekt erstellen", tooltip_create_project: "Projekt erstellen",
tooltip_share_project: "Projekt teilen", tooltip_share_project: "Projekt teilen",
tooltip_reset_workspace: "Workspace zurücksetzen", tooltip_reset_workspace: "Workspace zurücksetzen",
tooltip_copy_link: "Link kopieren", tooltip_copy_link: "Link kopieren",
tooltip_trashcan_hide: 'gelöschte Blöcke ausblenden', tooltip_trashcan_hide: "gelöschte Blöcke ausblenden",
tooltip_trashcan_delete: 'Blöcke endgültig löschen', tooltip_trashcan_delete: "Blöcke endgültig löschen",
tooltip_project_title: "Titel des Projektes", tooltip_project_title: "Titel des Projektes",
tooltip_check_solution: "Lösung kontrollieren", tooltip_check_solution: "Lösung kontrollieren",
tooltip_copy_code: "Code in die Zwischenablage kopieren", tooltip_copy_code: "Code in die Zwischenablage kopieren",
/** /**
* Messages * Messages
* *
*/ */
messages_delete_project_failed: "Fehler beim Löschen des Projektes. Versuche es noch einmal.", messages_delete_project_failed:
messages_reset_workspace_success: "Das Projekt wurde erfolgreich zurückgesetzt", "Fehler beim Löschen des Projektes. Versuche es noch einmal.",
messages_PROJECT_UPDATE_SUCCESS: "Das Projekt wurde erfolgreich aktualisiert.", messages_reset_workspace_success:
messages_GALLERY_UPDATE_SUCCESS: "Das Galerie-Projekt wurde erfolgreich aktualisiert.", "Das Projekt wurde erfolgreich zurückgesetzt",
messages_PROJECT_UPDATE_FAIL: "Fehler beim Aktualisieren des Projektes. Versuche es noch einmal.", messages_PROJECT_UPDATE_SUCCESS:
messages_GALLERY_UPDATE_FAIL: "Fehler beim Aktualisieren des Galerie-Projektes. Versuche es noch einmal.", "Das Projekt wurde erfolgreich aktualisiert.",
messages_gallery_save_fail_1: "Fehler beim Speichern des ", messages_GALLERY_UPDATE_SUCCESS:
messages_gallery_save_fail_2: "Projektes. Versuche es noch einmal.", "Das Galerie-Projekt wurde erfolgreich aktualisiert.",
messages_SHARE_SUCCESS: 'Programm teilen', messages_PROJECT_UPDATE_FAIL:
messages_SHARE_FAIL: "Fehler beim Erstellen eines Links zum Teilen deines Programmes. Versuche es noch einmal.", "Fehler beim Aktualisieren des Projektes. Versuche es noch einmal.",
messages_copylink_success: 'Link erfolgreich in Zwischenablage gespeichert.', messages_GALLERY_UPDATE_FAIL:
messages_rename_success_01: 'Das Projekt wurde erfolgreich in ', "Fehler beim Aktualisieren des Galerie-Projektes. Versuche es noch einmal.",
messages_rename_success_02: 'umbenannt.', messages_gallery_save_fail_1: "Fehler beim Speichern des ",
messages_newblockly_head: "Willkommen zur neuen Version Blockly für die senseBox", messages_gallery_save_fail_2: "Projektes. Versuche es noch einmal.",
messages_newblockly_text: "Die neue Blockly-Version befindet sich derzeit in der Testphase. Wenn Sie einen Fehler finden, melden Sie diesen bitte in unserem [Forum](https://forum.sensebox.de/t/neue-blockly-version-beta-test-und-feedback/1176). Eine Übersicht über alle neuen Funktionen finden Sie [hier](/news)", messages_SHARE_SUCCESS: "Programm teilen",
messages_GET_TUTORIAL_FAIL: 'Zurück zur Tutorials-Übersicht', messages_SHARE_FAIL:
messages_LOGIN_FAIL: 'Der Benutzername oder das Passwort ist nicht korrekt.', "Fehler beim Erstellen eines Links zum Teilen deines Programmes. Versuche es noch einmal.",
messages_copy_code: "Code wurde in die Zwischenablage kopiert", messages_copylink_success: "Link erfolgreich in Zwischenablage gespeichert.",
messages_rename_success_01: "Das Projekt wurde erfolgreich in ",
/** messages_rename_success_02: "umbenannt.",
* Reset Dialog messages_newblockly_head:
*/ "Willkommen zur neuen Version Blockly für die senseBox",
messages_newblockly_text:
resetDialog_headline: "Workspace zurücksetzen?", "Die neue Blockly-Version befindet sich derzeit in der Testphase. Wenn Sie einen Fehler finden, melden Sie diesen bitte in unserem [Forum](https://forum.sensebox.de/t/neue-blockly-version-beta-test-und-feedback/1176). Eine Übersicht über alle neuen Funktionen finden Sie [hier](/news)",
resetDialog_text: "Möchtest du wirklich die Workspace zurücksetzen? Hierbei werden alle Blöcke gelöscht!", messages_GET_TUTORIAL_FAIL: "Zurück zur Tutorials-Übersicht",
messages_LOGIN_FAIL: "Der Benutzername oder das Passwort ist nicht korrekt.",
/** messages_copy_code: "Code wurde in die Zwischenablage kopiert",
* Share Dialog
*/
sharedialog_headline: "Dein Link wurde erstellt.", /**
sharedialog_text: "Über den folgenden Link kannst du dein Programm teilen.", * Reset Dialog
*/
/** resetDialog_headline: "Workspace zurücksetzen?",
* Project rename Dialog resetDialog_text:
*/ "Möchtest du wirklich die Workspace zurücksetzen? Hierbei werden alle Blöcke gelöscht!",
renamedialog_headline: "Projekt benennen", /**
renamedialog_text: "Bitte gib einen Namen für das Projekt ein und bestätige diesen mit einem Klick auf 'Bestätigen'.", * Share Dialog
*/
/** sharedialog_headline: "Dein Link wurde erstellt.",
* Compile Dialog sharedialog_text: "Über den folgenden Link kannst du dein Programm teilen.",
*
*/
compiledialog_headline: "Fehler", /**
compiledialog_text: "Beim kompilieren ist ein Fehler aufgetreten. Überprüfe deine Blöcke und versuche es erneut", * Project rename Dialog
*/
/** renamedialog_headline: "Projekt benennen",
* Buttons renamedialog_text:
* "Bitte gib einen Namen für das Projekt ein und bestätige diesen mit einem Klick auf 'Bestätigen'.",
*/
button_cancel: "Abbrechen", /**
button_close: "Schließen", * Compile Dialog
button_accept: "Bestätigen", *
button_compile: "Kompilieren", */
button_create_variableCreate: "Erstelle Variable",
button_back: "Zurück",
button_next: "nächster Schritt",
button_tutorial_overview: "Tutorial Übersicht",
button_login: "Anmelden",
/** compiledialog_headline: "Fehler",
* compiledialog_text:
*/ "Beim kompilieren ist ein Fehler aufgetreten. Überprüfe deine Blöcke und versuche es erneut",
filename: "Dateiname", /**
projectname: "Projektname", * Buttons
*
*/
/** button_cancel: "Abbrechen",
* Settings button_close: "Schließen",
*/ button_accept: "Bestätigen",
settings_head: "Einstellungen", button_compile: "Kompilieren",
settings_language: "Sprache", button_create_variableCreate: "Erstelle Variable",
settings_language_text: "Auswahl der Sprache gilt für die gesamte Anwendung. Es kann zwischen Deutsch und Englisch unterschieden werden.", button_back: "Zurück",
settings_language_de: "Deutsch", button_next: "nächster Schritt",
settings_language_en: "Englisch", button_tutorial_overview: "Tutorial Übersicht",
settings_renderer: "Renderer", button_login: "Anmelden",
settings_renderer_text: "Der eingestellte Renderer bestimmt das Aussehen der Blöcke. Es kann zwischen 'Geras' und 'Zelos' unterschieden werden, wobei 'Zelos' insbesondere für eine Touch-Anwendung geeignet ist.",
settings_statistics: "Statistiken",
settings_statistics_text: "Die Anzeige von Statistiken zur Nutzung der Blöcke oberhalb der Arbeitsfläche kann ein- oder ausgeblendet werden.",
settings_statistics_on: "An",
settings_statistics_off: "Aus",
/** /**
* 404 *
*/ */
notfound_head: "Die von Ihnen angeforderte Seite kann nicht gefunden werden.", filename: "Dateiname",
notfound_text: "Die gesuchte Seite wurde möglicherweise entfernt, ihr Name wurde geändert oder sie ist vorübergehend nicht verfügbar.", projectname: "Projektname",
/**
* Settings
*/
settings_head: "Einstellungen",
settings_language: "Sprache",
settings_language_text:
"Auswahl der Sprache gilt für die gesamte Anwendung. Es kann zwischen Deutsch und Englisch unterschieden werden.",
settings_language_de: "Deutsch",
settings_language_en: "Englisch",
settings_renderer: "Renderer",
settings_renderer_text:
"Der eingestellte Renderer bestimmt das Aussehen der Blöcke. Es kann zwischen 'Geras' und 'Zelos' unterschieden werden, wobei 'Zelos' insbesondere für eine Touch-Anwendung geeignet ist.",
settings_statistics: "Statistiken",
settings_statistics_text:
"Die Anzeige von Statistiken zur Nutzung der Blöcke oberhalb der Arbeitsfläche kann ein- oder ausgeblendet werden.",
settings_statistics_on: "An",
settings_statistics_off: "Aus",
/** /**
* Labels * 404
*/ */
labels_donotshowagain: 'Dialog nicht mehr anzeigen', notfound_head: "Die von Ihnen angeforderte Seite kann nicht gefunden werden.",
labels_here: "hier", notfound_text:
labels_username: 'E-Mail oder Nutzername', "Die gesuchte Seite wurde möglicherweise entfernt, ihr Name wurde geändert oder sie ist vorübergehend nicht verfügbar.",
labels_password: "Passwort",
/** /**
* Badges * Labels
*/ */
badges_explaination: "Eine Übersicht über alle erhaltenen Badges im Kontext Blockly for senseBox findest du ", labels_donotshowagain: "Dialog nicht mehr anzeigen",
badges_ASSIGNE_BADGE_SUCCESS_01: "Herzlichen Glückwunsch! Du hast den Badge ", labels_here: "hier",
badges_ASSIGNE_BADGE_SUCCESS_02: " erhalten.", labels_username: "E-Mail oder Nutzername",
/** labels_password: "Passwort",
* Tutorials
*/
tutorials_assessment_task: "Aufgabe", /**
tutorials_hardware_head: "Für die Umsetzung benötigst du folgende Hardware:", * Badges
tutorials_hardware_moreInformation: "Weitere Informationen zur Hardware-Komponente findest du", */
tutorials_hardware_here: "hier",
tutorials_requirements: "Bevor du mit diesem Tutorial fortfährst solltest du folgende Tutorials erfolgreich abgeschlossen haben:",
badges_explaination:
"Eine Übersicht über alle erhaltenen Badges im Kontext Blockly for senseBox findest du ",
badges_ASSIGNE_BADGE_SUCCESS_01: "Herzlichen Glückwunsch! Du hast den Badge ",
badges_ASSIGNE_BADGE_SUCCESS_02: " erhalten.",
/**
* Tutorials
*/
/** tutorials_assessment_task: "Aufgabe",
* Tutorial Builder tutorials_hardware_head: "Für die Umsetzung benötigst du folgende Hardware:",
*/ tutorials_hardware_moreInformation:
"Weitere Informationen zur Hardware-Komponente findest du",
tutorials_hardware_here: "hier",
tutorials_requirements:
"Bevor du mit diesem Tutorial fortfährst solltest du folgende Tutorials erfolgreich abgeschlossen haben:",
builder_solution: "Lösung", /**
builder_solution_submit: "Lösung einreichen", * Tutorial Builder
builder_example_submit: "Beispiel einreichen", */
builder_comment: "Anmerkung: Man kann den initialen Setup()- bzw. Endlosschleifen()-Block löschen. Zusätzlich ist es möglich u.a. nur einen beliebigen Block auszuwählen, ohne dass dieser als deaktiviert dargestellt wird.",
builder_hardware_order: "Beachte, dass die Reihenfolge des Auswählens maßgebend ist.",
builder_hardware_helper: "Wähle mindestens eine Hardware-Komponente aus.",
builder_requirements_head: "Voraussetzungen",
builder_requirements_order: "Beachte, dass die Reihenfolge des Anhakens maßgebend ist.",
/** builder_solution: "Lösung",
* Login builder_solution_submit: "Lösung einreichen",
*/ builder_example_submit: "Beispiel einreichen",
builder_comment:
"Anmerkung: Man kann den initialen Setup()- bzw. Endlosschleifen()-Block löschen. Zusätzlich ist es möglich u.a. nur einen beliebigen Block auszuwählen, ohne dass dieser als deaktiviert dargestellt wird.",
builder_hardware_order:
"Beachte, dass die Reihenfolge des Auswählens maßgebend ist.",
builder_hardware_helper: "Wähle mindestens eine Hardware-Komponente aus.",
builder_requirements_head: "Voraussetzungen",
builder_requirements_order:
"Beachte, dass die Reihenfolge des Anhakens maßgebend ist.",
/**
* Login
*/
login_head: "Anmelden", login_head: "Anmelden",
login_osem_account_01: "Du benötigst einen ", login_osem_account_01: "Du benötigst einen ",
login_osem_account_02: "Account um dich einzuloggen", login_osem_account_02: "Account um dich einzuloggen",
login_lostpassword: "Du hast dein Passwort vergessen?", login_lostpassword: "Du hast dein Passwort vergessen?",
login_createaccount: "Falls du noch keinen Account hast erstellen einen auf ", login_createaccount: "Falls du noch keinen Account hast erstellen einen auf ",
/** /**
* Navbar * Navbar
*/ */
navbar_tutorials: "Tutorials", navbar_tutorials: "Tutorials",
navbar_tutorialbuilder: "Tutorial erstellen", navbar_tutorialbuilder: "Tutorial erstellen",
navbar_gallery: "Gallerie", navbar_gallery: "Gallerie",
navbar_projects: "Projekte", navbar_projects: "Projekte",
navbar_menu: "Menü", navbar_menu: "Menü",
navbar_login: "Einloggen", navbar_login: "Einloggen",
navbar_mybadges: "myBadges", navbar_mybadges: "myBadges",
navbar_account: "Konto", navbar_account: "Konto",
navbar_logout: "Abmelden", navbar_logout: "Abmelden",
navbar_settings: "Einstellungen", navbar_settings: "Einstellungen",
/** /**
* Codeviewer * Codeviewer
*/ */
codeviewer_arduino: "Arduino Quellcode", codeviewer_arduino: "Arduino Quellcode",
codeviewer_xml: "XML Blöcke", codeviewer_xml: "XML Blöcke",
/**
* Overlay
*/
compile_overlay_head: "Dein Programm wird nun kompiliert und heruntergeladen",
compile_overlay_text: "Kopiere es anschließend auf deine senseBox MCU",
compile_overlay_help: "Benötigst du mehr Hilfe? Dann schaue hier: ",
/** /**
* Overlay * Tooltip Viewer
*/ */
compile_overlay_head: "Dein Programm wird nun kompiliert und heruntergeladen", tooltip_viewer: "Hilfe",
compile_overlay_text: "Kopiere es anschließend auf deine senseBox MCU", tooltip_moreInformation: "Mehr Informationen findest du ",
compile_overlay_help: "Benötigst du mehr Hilfe? Dann schaue hier: ", tooltip_hint: "Wähle einen Block aus um dir die Hilfe anzeigen zu lassen",
/** /**
* Tooltip Viewer * IDEDrawer
*/ */
drawer_ideerror_head: "Hoppla da ist was schief gegangen.",
tooltip_viewer: "Hilfe", drawer_ideerror_text:
tooltip_moreInformation: "Mehr Informationen findest du ", "Beim kompilieren ist ein Fehler aufgetreten, überprüfe deine Blöcke.",
tooltip_hint: "Wähle einen Block aus um dir die Hilfe anzeigen zu lassen", };
}

View File

@ -1,244 +1,251 @@
export const UI = { export const UI = {
/**
* Toolbox
*/
toolbox_sensors: "Sensors",
toolbox_logic: "Logic",
toolbox_loops: "Loops",
toolbox_math: "Math",
toolbox_io: "Input/Output",
toolbox_time: "Time",
toolbox_functions: "Functions",
toolbox_variables: "Variables",
/**
* Tooltips
*
*/
tooltip_compile_code: "Compile code",
tooltip_save_blocks: "Save blocks",
tooltip_open_blocks: "Open blocks",
tooltip_screenshot: "Download screenshot",
tooltip_clear_workspace: "Reset workspace",
tooltip_share_blocks: "Share blocks",
tooltip_show_code: "Show code",
tooltip_hide_code: "Hide code",
tooltip_delete_project: "Delete project",
tooltip_project_name: "Project name",
tooltip_download_project: "Download project",
tooltip_open_project: "Open project",
tooltip_update_project: "Update project",
tooltip_save_project: "Save project",
tooltip_create_project: "Create project",
tooltip_share_project: "Share project",
tooltip_reset_workspace: "Reset workspace",
tooltip_copy_link: "Cooy link",
tooltip_trashcan_hide: "hide deleted blocks",
tooltip_trashcan_delete: "empty trashcan",
tooltip_project_title: "Project title",
tooltip_check_solution: "Check solution",
tooltip_copy_code: "Copy Code to clipboard",
/** /**
* Toolbox * Messages
*/ *
toolbox_sensors: "Sensors", */
toolbox_logic: "Logic",
toolbox_loops: "Loops",
toolbox_math: "Math",
toolbox_io: "Input/Output",
toolbox_time: "Time",
toolbox_functions: "Functions",
toolbox_variables: "Variables",
/** messages_delete_project_failed: "Error deleting the project. Try again.",
* Tooltips messages_reset_workspace_success: "The project has been successfully reset.",
* messages_PROJECT_UPDATE_SUCCESS: "The project was successfully updated.",
*/ messages_GALLERY_UPDATE_SUCCESS:
"The gallery project was successfully updated.",
messages_PROJECT_UPDATE_FAIL: "Error updating the project. Try again.",
messages_GALLERY_UPDATE_FAIL:
"Error updating the gallery project. Try again.",
messages_gallery_save_fail_1: "Error saving the ",
messages_gallery_save_fail_2: "Project. Try again.",
messages_SHARE_SUCCESS: "Share program",
messages_SHARE_FAIL:
"Error creating a link to share your program. Try again.",
messages_copylink_success: "Link successfully saved to clipboard.",
messages_rename_success_01: "The project was successfully saved to ",
messages_rename_success_02: "renamed.",
messages_newblockly_head:
"Welcome to the new version Blockly for the senseBox",
messages_newblockly_text:
"The new Blockly version is currently in testing. If you find any errors please report them in our [forum](https://forum.sensebox.de/t/neue-blockly-version-beta-test-und-feedback/1176). You can find an overview of all new features [here](/news)",
messages_GET_TUTORIAL_FAIL: "Back to tutorials overview",
messages_LOGIN_FAIL: "The username or password is incorrect.",
messages_login_error: "Enter both a username and a password.",
messages_copy_code: "Copy code to clipboard succesfull",
tooltip_compile_code: "Compile code", /**
tooltip_save_blocks: "Save blocks", * Reset Dialog
tooltip_open_blocks: "Open blocks", */
tooltip_screenshot: "Download screenshot",
tooltip_clear_workspace: "Reset workspace",
tooltip_share_blocks: "Share blocks",
tooltip_show_code: "Show code",
tooltip_hide_code: "Hide code",
tooltip_delete_project: "Delete project",
tooltip_project_name: "Project name",
tooltip_download_project: "Download project",
tooltip_open_project: "Open project",
tooltip_update_project: "Update project",
tooltip_save_project: "Save project",
tooltip_create_project: "Create project",
tooltip_share_project: "Share project",
tooltip_reset_workspace: "Reset workspace",
tooltip_copy_link: "Cooy link",
tooltip_trashcan_hide: "hide deleted blocks",
tooltip_trashcan_delete: "empty trashcan",
tooltip_project_title: "Project title",
tooltip_check_solution: "Check solution",
tooltip_copy_code: "Copy Code to clipboard",
/** resetDialog_headline: "Reset workspace?",
* Messages resetDialog_text:
* "Do you really want to reset the workspace? All blocks will be deleted!",
*/
messages_delete_project_failed: "Error deleting the project. Try again.", /**
messages_reset_workspace_success: "The project has been successfully reset.", * Share Dialog
messages_PROJECT_UPDATE_SUCCESS: "The project was successfully updated.", */
messages_GALLERY_UPDATE_SUCCESS: "The gallery project was successfully updated.",
messages_PROJECT_UPDATE_FAIL: "Error updating the project. Try again.",
messages_GALLERY_UPDATE_FAIL: "Error updating the gallery project. Try again.",
messages_gallery_save_fail_1: "Error saving the ",
messages_gallery_save_fail_2: "Project. Try again.",
messages_SHARE_SUCCESS: 'Share program',
messages_SHARE_FAIL: "Error creating a link to share your program. Try again.",
messages_copylink_success: 'Link successfully saved to clipboard.',
messages_rename_success_01: 'The project was successfully saved to ',
messages_rename_success_02: 'renamed.',
messages_newblockly_head: 'Welcome to the new version Blockly for the senseBox',
messages_newblockly_text: "The new Blockly version is currently in testing. If you find any errors please report them in our [forum](https://forum.sensebox.de/t/neue-blockly-version-beta-test-und-feedback/1176). You can find an overview of all new features [here](/news)",
messages_GET_TUTORIAL_FAIL: 'Back to tutorials overview',
messages_LOGIN_FAIL: 'The username or password is incorrect.',
messages_login_error: "Enter both a username and a password.",
messages_copy_code: "Copy code to clipboard succesfull",
sharedialog_headline: "Your link has been created.",
/** sharedialog_text: "You can share your program using the following link.",
* Reset Dialog
*/
resetDialog_headline: "Reset workspace?",
resetDialog_text: "Do you really want to reset the workspace? All blocks will be deleted!",
/** /**
* Share Dialog * Project rename Dialog
*/ */
sharedialog_headline: "Your link has been created.", renamedialog_headline: "Rename project",
sharedialog_text: "You can share your program using the following link.", renamedialog_text:
"Please enter a name for the project and confirm it by clicking 'Confirm'.",
/**
* Compile Dialog
*
*/
/** compiledialog_headline: "Error",
* Project rename Dialog compiledialog_text:
*/ "While compiling an error occured. Please check your blocks and try again",
renamedialog_headline: "Rename project", /**
renamedialog_text: "Please enter a name for the project and confirm it by clicking 'Confirm'.", * Buttons
/** *
* Compile Dialog */
*
*/
compiledialog_headline: "Error", button_cancel: "Cancel",
compiledialog_text: "While compiling an error occured. Please check your blocks and try again", button_close: "Close",
button_accept: "Ok",
button_compile: "Compile",
button_create_variableCreate: "Create Variable",
button_back: "Back",
button_next: "Next step",
button_tutorial_overview: "Tutorial overview",
button_login: "Login",
/**
*
*/
filename: "Filename",
projectname: "Projectname",
/**
* Settings
*/
settings_head: "Settings",
settings_language: "Language",
settings_language_text:
"Selection of the language applies to the entire application. A distinction can be made between German and English.",
settings_language_de: "German",
settings_language_en: "English",
settings_renderer: "Renderer",
settings_renderer_text:
"The selected renderer determines the appearance of the blocks. A distinction can be made between 'Geras' and 'Zelos', whereby 'Zelos' is particularly suitable for a touch application.",
settings_statistics: "Statistics",
settings_statistics_text:
"The display of statistics on the usage of the blocks above the workspace can be shown or hidden.",
settings_statistics_on: "On",
settings_statistics_off: "Off",
/** /**
* Buttons * 404
* */
*/
button_cancel: "Cancel", notfound_head: "The page you requested cannot be found.",
button_close: "Close", notfound_text:
button_accept: "Ok", "The page you are looking for may have been removed, its name changed, or it may be temporarily unavailable.",
button_compile: "Compile",
button_create_variableCreate: "Create Variable",
button_back: "Back",
button_next: "Next step",
button_tutorial_overview: "Tutorial overview",
button_login: "Login",
/**
* Labels
*/
labels_donotshowagain: "Do not show dialog again",
labels_here: "here",
labels_username: "Email or username",
labels_password: "Password",
/**
* Badges
*/
badges_explaination:
"An overview of all badges received in the Blockly for senseBox context can be found ",
badges_ASSIGNE_BADGE_SUCCESS_01:
"Congratulations! You have received the badge ",
badges_ASSIGNE_BADGE_SUCCESS_02: ".",
/** /**
* * Tutorials
*/ */
filename: "Filename", tutorials_assessment_task: "Task",
projectname: "Projectname", tutorials_hardware_head:
/** "For the implementation you need the following hardware:",
* Settings tutorials_hardware_moreInformation:
*/ "You can find more information about the hardware component.",
settings_head: "Settings", tutorials_hardware_here: "here",
settings_language: "Language", tutorials_requirements:
settings_language_text: "Selection of the language applies to the entire application. A distinction can be made between German and English.", "Before continuing with this tutorial, you should have successfully completed the following tutorials:",
settings_language_de: "German",
settings_language_en: "English",
settings_renderer: "Renderer",
settings_renderer_text: "The selected renderer determines the appearance of the blocks. A distinction can be made between 'Geras' and 'Zelos', whereby 'Zelos' is particularly suitable for a touch application.",
settings_statistics: "Statistics",
settings_statistics_text: "The display of statistics on the usage of the blocks above the workspace can be shown or hidden.",
settings_statistics_on: "On",
settings_statistics_off: "Off",
/**
* Tutorial Builder
*/
/** builder_solution: "Solution",
* 404 builder_solution_submit: "Submit Solution",
*/ builder_example_submit: "Submit example",
builder_comment:
"Note: You can delete the initial setup() or infinite loop() block. Additionally, it is possible to select only any block, among others, without displaying it as disabled.",
builder_hardware_order: "Note that the order of selection is authoritative.",
builder_hardware_helper: "Select at least one hardware component.",
builder_requirements_head: "Requirements.",
builder_requirements_order:
"Note that the order of ticking is authoritative.",
notfound_head: "The page you requested cannot be found.", /**
notfound_text: "The page you are looking for may have been removed, its name changed, or it may be temporarily unavailable.", * Login
*/
/** login_head: "Login",
* Labels login_osem_account_01: "You need to have an ",
*/ login_osem_account_02: "Account to login",
labels_donotshowagain: 'Do not show dialog again', login_lostpassword: "Lost your password?",
labels_here: 'here', login_createaccount:
labels_username: 'Email or username', "If you don't have an openSenseMap account please register on ",
labels_password: "Password",
/**
* Badges
*/
badges_explaination: "An overview of all badges received in the Blockly for senseBox context can be found ", /**
badges_ASSIGNE_BADGE_SUCCESS_01: "Congratulations! You have received the badge ", * Navbar
badges_ASSIGNE_BADGE_SUCCESS_02: ".", */
navbar_tutorials: "Tutorials",
navbar_tutorialbuilder: "Create tutorial",
navbar_gallery: "Gallery",
navbar_projects: "Projects",
/** navbar_menu: "Menu",
* Tutorials navbar_login: "Login",
*/ navbar_mybadges: "myBadges",
navbar_account: "Account",
navbar_logout: "Logout",
navbar_settings: "Settings",
tutorials_assessment_task: "Task", /**
tutorials_hardware_head: "For the implementation you need the following hardware:", * Codeviewer
tutorials_hardware_moreInformation: "You can find more information about the hardware component.", */
tutorials_hardware_here: "here",
tutorials_requirements: "Before continuing with this tutorial, you should have successfully completed the following tutorials:",
codeviewer_arduino: "Arduino Source Code",
codeviewer_xml: "XML Blocks",
/** /**
* Tutorial Builder * Overlay
*/ */
builder_solution: "Solution", compile_overlay_head: "Your program is now compiled and downloaded",
builder_solution_submit: "Submit Solution", compile_overlay_text: "Then copy it to your senseBox MCU",
builder_example_submit: "Submit example", compile_overlay_help: "You need help? Have a look here: ",
builder_comment: "Note: You can delete the initial setup() or infinite loop() block. Additionally, it is possible to select only any block, among others, without displaying it as disabled.",
builder_hardware_order: "Note that the order of selection is authoritative.",
builder_hardware_helper: "Select at least one hardware component.",
builder_requirements_head: "Requirements.",
builder_requirements_order: "Note that the order of ticking is authoritative.",
/**
* Tooltip Viewer
*/
/** tooltip_viewer: "Help",
* Login tooltip_moreInformation: "More informations can be found ",
*/ tooltip_hint: "Select a Block to show the hint",
/**
login_head: "Login", * IDEDrawer
login_osem_account_01: "You need to have an ", */
login_osem_account_02: "Account to login", drawer_ideerror_head: "Oops something went wrong",
login_lostpassword: "Lost your password?", drawer_ideerror_text: "An error occurred while compiling, check your blocks",
login_createaccount: "If you don't have an openSenseMap account please register on ", };
/**
* Navbar
*/
navbar_tutorials: "Tutorials",
navbar_tutorialbuilder: "Create tutorial",
navbar_gallery: "Gallery",
navbar_projects: "Projects",
navbar_menu: "Menu",
navbar_login: "Login",
navbar_mybadges: "myBadges",
navbar_account: "Account",
navbar_logout: "Logout",
navbar_settings: "Settings",
/**
* Codeviewer
*/
codeviewer_arduino: "Arduino Source Code",
codeviewer_xml: "XML Blocks",
/**
* Overlay
*/
compile_overlay_head: "Your program is now compiled and downloaded",
compile_overlay_text: "Then copy it to your senseBox MCU",
compile_overlay_help: "You need help? Have a look here: ",
/**
* Tooltip Viewer
*/
tooltip_viewer: "Help",
tooltip_moreInformation: "More informations can be found ",
tooltip_hint: "Select a Block to show the hint",
}

View File

@ -1,57 +1,70 @@
import React, { Component } from 'react'; import React, { Component } from "react";
import PropTypes from 'prop-types'; import PropTypes from "prop-types";
import { connect } from 'react-redux'; import { connect } from "react-redux";
import { getProjects, resetProject } from '../../actions/projectActions'; import { getProjects, resetProject } from "../../actions/projectActions";
import { clearMessages } from '../../actions/messageActions'; import { clearMessages } from "../../actions/messageActions";
import { Link, withRouter } from 'react-router-dom'; import { Link, withRouter } from "react-router-dom";
import Breadcrumbs from '../Breadcrumbs'; import Breadcrumbs from "../Breadcrumbs";
import BlocklyWindow from '../Blockly/BlocklyWindow'; import BlocklyWindow from "../Blockly/BlocklyWindow";
import Snackbar from '../Snackbar'; import Snackbar from "../Snackbar";
import WorkspaceFunc from '../Workspace/WorkspaceFunc'; import WorkspaceFunc from "../Workspace/WorkspaceFunc";
import { withStyles } from '@material-ui/core/styles'; import { withStyles } from "@material-ui/core/styles";
import Grid from '@material-ui/core/Grid'; import Grid from "@material-ui/core/Grid";
import Paper from '@material-ui/core/Paper'; import Paper from "@material-ui/core/Paper";
import Divider from '@material-ui/core/Divider'; import Divider from "@material-ui/core/Divider";
import Typography from '@material-ui/core/Typography'; import Typography from "@material-ui/core/Typography";
import Backdrop from '@material-ui/core/Backdrop'; import Backdrop from "@material-ui/core/Backdrop";
import CircularProgress from '@material-ui/core/CircularProgress'; import CircularProgress from "@material-ui/core/CircularProgress";
const styles = (theme) => ({ const styles = (theme) => ({
link: { link: {
color: theme.palette.primary.main, color: theme.palette.primary.main,
textDecoration: 'none', textDecoration: "none",
'&:hover': { "&:hover": {
color: theme.palette.primary.main, color: theme.palette.primary.main,
textDecoration: 'underline' textDecoration: "underline",
} },
} },
}); });
class ProjectHome extends Component { class ProjectHome extends Component {
state = { state = {
snackbar: false, snackbar: false,
type: '', type: "",
key: '', key: "",
message: '' message: "",
} };
componentDidMount() { componentDidMount() {
var type = this.props.location.pathname.replace('/', ''); var type = this.props.location.pathname.replace("/", "");
this.props.getProjects(type); this.props.getProjects(type);
if (this.props.message) { if (this.props.message) {
if (this.props.message.id === 'PROJECT_DELETE_SUCCESS') { if (this.props.message.id === "PROJECT_DELETE_SUCCESS") {
this.setState({ snackbar: true, key: Date.now(), message: `Dein Projekt wurde erfolgreich gelöscht.`, type: 'success' }); this.setState({
} snackbar: true,
else if (this.props.message.id === 'GALLERY_DELETE_SUCCESS') { key: Date.now(),
this.setState({ snackbar: true, key: Date.now(), message: `Dein Galerie-Projekt wurde erfolgreich gelöscht.`, type: 'success' }); message: `Dein Projekt wurde erfolgreich gelöscht.`,
} type: "success",
else if (this.props.message.id === 'GET_PROJECT_FAIL') { });
this.setState({ snackbar: true, key: Date.now(), message: `Dein angefragtes ${type === 'gallery' ? 'Galerie-' : ''}Projekt konnte nicht gefunden werden.`, type: 'error' }); } else if (this.props.message.id === "GALLERY_DELETE_SUCCESS") {
this.setState({
snackbar: true,
key: Date.now(),
message: `Dein Galerie-Projekt wurde erfolgreich gelöscht.`,
type: "success",
});
} else if (this.props.message.id === "GET_PROJECT_FAIL") {
this.setState({
snackbar: true,
key: Date.now(),
message: `Dein angefragtes ${
type === "gallery" ? "Galerie-" : ""
}Projekt konnte nicht gefunden werden.`,
type: "error",
});
} }
} }
} }
@ -59,14 +72,23 @@ class ProjectHome extends Component {
componentDidUpdate(props) { componentDidUpdate(props) {
if (props.location.pathname !== this.props.location.pathname) { if (props.location.pathname !== this.props.location.pathname) {
this.setState({ snackbar: false }); this.setState({ snackbar: false });
this.props.getProjects(this.props.location.pathname.replace('/', '')); this.props.getProjects(this.props.location.pathname.replace("/", ""));
} }
if (props.message !== this.props.message) { if (props.message !== this.props.message) {
if (this.props.message.id === 'PROJECT_DELETE_SUCCESS') { if (this.props.message.id === "PROJECT_DELETE_SUCCESS") {
this.setState({ snackbar: true, key: Date.now(), message: `Dein Projekt wurde erfolgreich gelöscht.`, type: 'success' }); this.setState({
} snackbar: true,
else if (this.props.message.id === 'GALLERY_DELETE_SUCCESS') { key: Date.now(),
this.setState({ snackbar: true, key: Date.now(), message: `Dein Galerie-Projekt wurde erfolgreich gelöscht.`, type: 'success' }); message: `Dein Projekt wurde erfolgreich gelöscht.`,
type: "success",
});
} else if (this.props.message.id === "GALLERY_DELETE_SUCCESS") {
this.setState({
snackbar: true,
key: Date.now(),
message: `Dein Galerie-Projekt wurde erfolgreich gelöscht.`,
type: "success",
});
} }
} }
} }
@ -77,60 +99,107 @@ class ProjectHome extends Component {
} }
render() { render() {
var data = this.props.location.pathname === '/project' ? 'Projekte' : 'Galerie'; var data =
this.props.location.pathname === "/project" ? "Projekte" : "Galerie";
return ( return (
<div> <div>
<Breadcrumbs content={[{ link: this.props.location.pathname, title: data }]} /> <Breadcrumbs
content={[{ link: this.props.location.pathname, title: data }]}
/>
<h1>{data}</h1> <h1>{data}</h1>
{this.props.progress ? {this.props.progress ? (
<Backdrop open invisible> <Backdrop open invisible>
<CircularProgress color="primary" /> <CircularProgress color="primary" />
</Backdrop> </Backdrop>
: ) : (
<div> <div>
{this.props.projects.length > 0 ? {this.props.projects.length > 0 ? (
<Grid container spacing={2}> <Grid container spacing={2}>
{this.props.projects.map((project, i) => { {this.props.projects.map((project, i) => {
return ( return (
<Grid item xs={12} sm={6} md={4} xl={3} key={i}> <Grid item xs={12} sm={6} md={4} xl={3} key={i}>
<Paper style={{ padding: '1rem', position: 'relative', overflow: 'hidden' }}> <Paper
<Link to={`/${data === 'Projekte' ? 'project' : 'gallery'}/${project._id}`} style={{ textDecoration: 'none', color: 'inherit' }}> style={{
padding: "1rem",
position: "relative",
overflow: "hidden",
}}
>
<Link
to={`/${
data === "Projekte" ? "project" : "gallery"
}/${project._id}`}
style={{ textDecoration: "none", color: "inherit" }}
>
<h3 style={{ marginTop: 0 }}>{project.title}</h3> <h3 style={{ marginTop: 0 }}>{project.title}</h3>
<Divider style={{ marginTop: '1rem', marginBottom: '10px' }} /> <Divider
style={{ marginTop: "1rem", marginBottom: "10px" }}
/>
<BlocklyWindow <BlocklyWindow
svg svg
blockDisabled blockDisabled
initialXml={project.xml} initialXml={project.xml}
/> />
<Typography variant='body2' style={{ fontStyle: 'italic', margin: 0, marginTop: '-10px' }}>{project.description}</Typography> <Typography
variant="body2"
style={{
fontStyle: "italic",
margin: 0,
marginTop: "-10px",
}}
>
{project.description}
</Typography>
</Link> </Link>
{this.props.user && this.props.user.email === project.creator ? {this.props.user &&
this.props.user.email === project.creator ? (
<div> <div>
<Divider style={{ marginTop: '10px', marginBottom: '10px' }} /> <Divider
<div style={{ float: 'right' }}> style={{
marginTop: "10px",
marginBottom: "10px",
}}
/>
<div style={{ float: "right" }}>
<WorkspaceFunc <WorkspaceFunc
multiple multiple
project={project} project={project}
projectType={this.props.location.pathname.replace('/', '')} projectType={this.props.location.pathname.replace(
"/",
""
)}
/> />
</div> </div>
</div> </div>
: null} ) : null}
</Paper> </Paper>
</Grid> </Grid>
) );
})} })}
</Grid> </Grid>
: <div> ) : (
<Typography style={{ marginBottom: '10px' }}>Es sind aktuell keine Projekte vorhanden.</Typography> <div>
{this.props.location.pathname.replace('/', '') === 'project' ? <Typography style={{ marginBottom: "10px" }}>
<Typography>Erstelle jetzt dein <Link to={'/'} className={this.props.classes.link}>eigenes Projekt</Link> oder lasse dich von Projektbeispielen in der <Link to={'/gallery'} className={this.props.classes.link}>Galerie</Link> inspirieren.</Typography> Es sind aktuell keine Projekte vorhanden.
: null} </Typography>
{this.props.location.pathname.replace("/", "") === "project" ? (
<Typography>
Erstelle jetzt dein{" "}
<Link to={"/"} className={this.props.classes.link}>
eigenes Projekt
</Link>{" "}
oder lasse dich von Projektbeispielen in der{" "}
<Link to={"/gallery"} className={this.props.classes.link}>
Galerie
</Link>{" "}
inspirieren.
</Typography>
) : null}
</div> </div>
} )}
</div> </div>
} )}
<Snackbar <Snackbar
open={this.state.snackbar} open={this.state.snackbar}
message={this.state.message} message={this.state.message}
@ -139,7 +208,7 @@ class ProjectHome extends Component {
/> />
</div> </div>
); );
}; }
} }
ProjectHome.propTypes = { ProjectHome.propTypes = {
@ -149,15 +218,18 @@ ProjectHome.propTypes = {
projects: PropTypes.array.isRequired, projects: PropTypes.array.isRequired,
progress: PropTypes.bool.isRequired, progress: PropTypes.bool.isRequired,
user: PropTypes.object, user: PropTypes.object,
message: PropTypes.object.isRequired message: PropTypes.object.isRequired,
}; };
const mapStateToProps = state => ({ const mapStateToProps = (state) => ({
projects: state.project.projects, projects: state.project.projects,
progress: state.project.progress, progress: state.project.progress,
user: state.auth.user, user: state.auth.user,
message: state.message message: state.message,
}); });
export default connect(mapStateToProps, {
export default connect(mapStateToProps, { getProjects, resetProject, clearMessages })(withStyles(styles, { withTheme: true })(withRouter(ProjectHome))); getProjects,
resetProject,
clearMessages,
})(withStyles(styles, { withTheme: true })(withRouter(ProjectHome)));

View File

@ -85,7 +85,7 @@ class StepperVertical extends Component {
return ( return (
<Step key={i}> <Step key={i}>
<Tooltip title={step.headline} placement='right' arrow > <Tooltip title={step.headline} placement='right' arrow >
<div style={i === activeStep ? {padding: '5px 0'} : {padding: '5px 0', cursor: 'pointer'}} onClick={i === activeStep ? null : () => {console.log(i); this.props.tutorialStep(i)}}> <div style={i === activeStep ? {padding: '5px 0'} : {padding: '5px 0', cursor: 'pointer'}} onClick={i === activeStep ? null : () => { this.props.tutorialStep(i)}}>
<StepLabel <StepLabel
StepIconComponent={'div'} StepIconComponent={'div'}
classes={{ classes={{

View File

@ -1,126 +1,172 @@
import React, { Component } from 'react'; import React, { Component } from "react";
import PropTypes from 'prop-types'; import PropTypes from "prop-types";
import { connect } from 'react-redux'; import { connect } from "react-redux";
import { workspaceName } from '../../actions/workspaceActions'; import { workspaceName } from "../../actions/workspaceActions";
import { detectWhitespacesAndReturnReadableResult } from '../../helpers/whitespace'; import { detectWhitespacesAndReturnReadableResult } from "../../helpers/whitespace";
import Dialog from '../Dialog';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
import Backdrop from '@material-ui/core/Backdrop';
import CircularProgress from '@material-ui/core/CircularProgress';
import IconButton from '@material-ui/core/IconButton';
import Tooltip from '@material-ui/core/Tooltip';
import TextField from '@material-ui/core/TextField';
import { withStyles } from "@material-ui/core/styles";
import Button from "@material-ui/core/Button";
import Backdrop from "@material-ui/core/Backdrop";
import CircularProgress from "@material-ui/core/CircularProgress";
import IconButton from "@material-ui/core/IconButton";
import Tooltip from "@material-ui/core/Tooltip";
import Divider from "@material-ui/core/Divider";
import { faClipboardCheck } from "@fortawesome/free-solid-svg-icons"; import { faClipboardCheck } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import * as Blockly from 'blockly/core'; import * as Blockly from "blockly/core";
import Copy from '../copy.svg'; import Copy from "../copy.svg";
import Prism from "prismjs";
import "prismjs/themes/prism.css";
import "prismjs/plugins/line-numbers/prism-line-numbers";
import "prismjs/plugins/line-numbers/prism-line-numbers.css";
import MuiDrawer from "@material-ui/core/Drawer";
const styles = (theme) => ({ const styles = (theme) => ({
backdrop: { backdrop: {
zIndex: theme.zIndex.drawer + 1, zIndex: theme.zIndex.drawer + 1,
color: '#fff', color: "#fff",
}, },
iconButton: { iconButton: {
backgroundColor: theme.palette.button.compile, backgroundColor: theme.palette.button.compile,
color: theme.palette.primary.contrastText, color: theme.palette.primary.contrastText,
width: '40px', width: "40px",
height: '40px', height: "40px",
'&:hover': { "&:hover": {
backgroundColor: theme.palette.button.compile, backgroundColor: theme.palette.button.compile,
color: theme.palette.primary.contrastText, color: theme.palette.primary.contrastText,
} },
}, },
button: { button: {
backgroundColor: theme.palette.button.compile, backgroundColor: theme.palette.button.compile,
color: theme.palette.primary.contrastText, color: theme.palette.primary.contrastText,
'&:hover': { "&:hover": {
backgroundColor: theme.palette.button.compile, backgroundColor: theme.palette.button.compile,
color: theme.palette.primary.contrastText, color: theme.palette.primary.contrastText,
} },
} },
}); });
const Drawer = withStyles((theme) => ({
paperAnchorBottom: {
backgroundColor: "black",
height: "20vH",
},
}))(MuiDrawer);
class Compile extends Component { class Compile extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
progress: false, progress: false,
open: false, open: false,
file: false, file: false,
title: '', title: "",
content: '', content: "",
name: props.name name: props.name,
error: "",
}; };
} }
componentDidMount() {
Prism.highlightAll();
}
componentDidUpdate(props) { componentDidUpdate(props) {
if (props.name !== this.props.name) { if (props.name !== this.props.name) {
this.setState({ name: this.props.name }); this.setState({ name: this.props.name });
} }
Prism.highlightAll();
} }
compile = () => { compile = () => {
this.setState({ progress: true }); this.setState({ progress: true });
const data = { const data = {
"board": process.env.REACT_APP_BOARD, board: process.env.REACT_APP_BOARD,
"sketch": this.props.arduino sketch: this.props.arduino,
}; };
fetch(`${process.env.REACT_APP_COMPILER_URL}/compile`, { fetch(`${process.env.REACT_APP_COMPILER_URL}/compile`, {
method: "POST", method: "POST",
headers: { 'Content-Type': 'application/json' }, headers: { "Content-Type": "application/json" },
body: JSON.stringify(data) body: JSON.stringify(data),
}) })
.then(response => response.json()) .then((response) => response.json())
.then(data => { .then((data) => {
console.log(data);
if (data.code === "Internal Server Error") {
this.setState({
progress: false,
file: false,
open: true,
title: Blockly.Msg.compiledialog_headline,
content: Blockly.Msg.compiledialog_text,
error: data.message,
});
}
this.setState({ id: data.data.id }, () => { this.setState({ id: data.data.id }, () => {
this.createFileName(); this.createFileName();
}); });
}) })
.catch(err => { .catch((err) => {
console.log(err); console.log(err);
this.setState({ progress: false, file: false, open: true, title: Blockly.Msg.compiledialog_headline, content: Blockly.Msg.compiledialog_text }); //this.setState({ progress: false, file: false, open: true, title: Blockly.Msg.compiledialog_headline, content: Blockly.Msg.compiledialog_text });
}); });
} };
download = () => { download = () => {
const id = this.state.id; const id = this.state.id;
const filename = detectWhitespacesAndReturnReadableResult(this.state.name); const filename = detectWhitespacesAndReturnReadableResult(this.state.name);
this.toggleDialog(); this.toggleDialog();
this.props.workspaceName(this.state.name); this.props.workspaceName(this.state.name);
window.open(`${process.env.REACT_APP_COMPILER_URL}/download?id=${id}&board=${process.env.REACT_APP_BOARD}&filename=${filename}`, '_self'); window.open(
`${process.env.REACT_APP_COMPILER_URL}/download?id=${id}&board=${process.env.REACT_APP_BOARD}&filename=${filename}`,
"_self"
);
this.setState({ progress: false }); this.setState({ progress: false });
} };
toggleDialog = () => { toggleDialog = () => {
this.setState({ open: !this.state, progress: false }); this.setState({ open: !this.state, progress: false });
} };
createFileName = () => { createFileName = () => {
if (this.state.name) { if (this.state.name) {
this.download(); this.download();
} else {
this.setState({
file: true,
open: true,
title: "Projekt kompilieren",
content:
"Bitte gib einen Namen für die Bennenung des zu kompilierenden Programms ein und bestätige diesen mit einem Klick auf 'Eingabe'.",
});
} }
else { };
this.setState({ file: true, open: true, title: 'Projekt kompilieren', content: 'Bitte gib einen Namen für die Bennenung des zu kompilierenden Programms ein und bestätige diesen mit einem Klick auf \'Eingabe\'.' });
}
}
setFileName = (e) => { setFileName = (e) => {
this.setState({ name: e.target.value }); this.setState({ name: e.target.value });
} };
toggleDrawer = (anchor, open) => (event) => {
if (
event.type === "keydown" &&
(event.key === "Tab" || event.key === "Shift")
) {
return;
}
this.setState({ open: false });
};
render() { render() {
return ( return (
<div style={{}}> <div style={{}}>
{this.props.iconButton ? {this.props.iconButton ? (
<Tooltip title={Blockly.Msg.tooltip_compile_code} arrow style={{ marginRight: '5px' }}> <Tooltip
title={Blockly.Msg.tooltip_compile_code}
arrow
style={{ marginRight: "5px" }}
>
<IconButton <IconButton
className={`compileBlocks ${this.props.classes.iconButton}`} className={`compileBlocks ${this.props.classes.iconButton}`}
onClick={() => this.compile()} onClick={() => this.compile()}
@ -128,21 +174,73 @@ class Compile extends Component {
<FontAwesomeIcon icon={faClipboardCheck} size="l" /> <FontAwesomeIcon icon={faClipboardCheck} size="l" />
</IconButton> </IconButton>
</Tooltip> </Tooltip>
: ) : (
<Button style={{ float: 'right', color: 'white' }} variant="contained" className={this.props.classes.button} onClick={() => this.compile()}> <Button
<FontAwesomeIcon icon={faClipboardCheck} style={{ marginRight: '5px' }} /> Kompilieren style={{ float: "right", color: "white" }}
variant="contained"
className={this.props.classes.button}
onClick={() => this.compile()}
>
<FontAwesomeIcon
icon={faClipboardCheck}
style={{ marginRight: "5px" }}
/>{" "}
Kompilieren
</Button> </Button>
} )}
<Backdrop className={this.props.classes.backdrop} open={this.state.progress}> <Backdrop
<div className='overlay'> className={this.props.classes.backdrop}
open={this.state.progress}
>
<div className="overlay">
<img src={Copy} width="400" alt="copyimage"></img> <img src={Copy} width="400" alt="copyimage"></img>
<h2>{Blockly.Msg.compile_overlay_head}</h2> <h2>{Blockly.Msg.compile_overlay_head}</h2>
<p>{Blockly.Msg.compile_overlay_text}</p> <p>{Blockly.Msg.compile_overlay_text}</p>
<p>{Blockly.Msg.compile_overlay_help}<a href="/faq" target="_blank">FAQ</a></p> <p>
{Blockly.Msg.compile_overlay_help}
<a href="/faq" target="_blank">
FAQ
</a>
</p>
<CircularProgress color="inherit" /> <CircularProgress color="inherit" />
</div> </div>
</Backdrop> </Backdrop>
<Dialog <Drawer
anchor={"bottom"}
open={this.state.open}
onClose={this.toggleDrawer("bottom", false)}
>
<h2
style={{
color: "#4EAF47",
paddingLeft: "1rem",
paddingRight: "1rem",
}}
>
{Blockly.Msg.drawer_ideerror_head}
</h2>
<p
style={{
color: "#4EAF47",
paddingLeft: "1rem",
paddingRight: "1rem",
}}
>
{Blockly.Msg.drawer_ideerror_text}
</p>
<Divider style={{ backgroundColor: "white" }} />
<p
style={{
backgroundColor: "black",
color: "#E47128",
padding: "1rem",
}}
>
{" "}
{`${this.state.error}`}{" "}
</p>
</Drawer>
{/* <Dialog
open={this.state.open} open={this.state.open}
title={this.state.title} title={this.state.title}
content={this.state.content} content={this.state.content}
@ -155,23 +253,32 @@ class Compile extends Component {
<TextField autoFocus placeholder='Dateiname' value={this.state.name} onChange={this.setFileName} style={{ marginRight: '10px' }} /> <TextField autoFocus placeholder='Dateiname' value={this.state.name} onChange={this.setFileName} style={{ marginRight: '10px' }} />
<Button disabled={!this.state.name} variant='contained' color='primary' onClick={() => this.download()}>Eingabe</Button> <Button disabled={!this.state.name} variant='contained' color='primary' onClick={() => this.download()}>Eingabe</Button>
</div> </div>
: null} :
</Dialog>
<pre className="line-numbers" style={{ paddingBottom: 0, width: '100%', overflow: 'auto', scrollbarWidth: 'thin', height: '100%', margin: '15px 0', paddingTop: 0, whiteSpace: 'pre-wrap', backgroundColor: 'white' }}><code className="language-json">
{`${this.state.error}`}
</code></pre>
</AccordionDetails>
</Accordion>
}
</Dialog> */}
</div> </div>
); );
}; }
} }
Compile.propTypes = { Compile.propTypes = {
arduino: PropTypes.string.isRequired, arduino: PropTypes.string.isRequired,
name: PropTypes.string, name: PropTypes.string,
workspaceName: PropTypes.func.isRequired workspaceName: PropTypes.func.isRequired,
}; };
const mapStateToProps = state => ({ const mapStateToProps = (state) => ({
arduino: state.workspace.code.arduino, arduino: state.workspace.code.arduino,
name: state.workspace.name name: state.workspace.name,
}); });
export default connect(mapStateToProps, { workspaceName })(
export default connect(mapStateToProps, { workspaceName })(withStyles(styles, { withTheme: true })(Compile)); withStyles(styles, { withTheme: true })(Compile)
);