checked if wifi is initialized
This commit is contained in:
		
							parent
							
								
									c00c0949e4
								
							
						
					
					
						commit
						1586e74cdc
					
				| @ -62,7 +62,7 @@ class Compile extends Component { | ||||
|     return ( | ||||
|       <div style={{display: 'inline'}}> | ||||
|         <Button style={{ float: 'right', color: 'white' }} variant="contained" color="primary" onClick={() => this.compile()}> | ||||
|           Compile | ||||
|           Kompilieren | ||||
|         </Button> | ||||
|         <Backdrop className={this.props.classes.backdrop} open={this.state.progress}> | ||||
|           <CircularProgress color="inherit" /> | ||||
| @ -70,7 +70,7 @@ class Compile extends Component { | ||||
|         <Dialog onClose={this.toggleDialog} open={this.state.open}> | ||||
|           <DialogTitle>Fehler</DialogTitle> | ||||
|           <DialogContent dividers> | ||||
|             Etwas ist beim Compilieren schief gelaufen. Versuche es nochmal. | ||||
|             Etwas ist beim Kompilieren schief gelaufen. Versuche es nochmal. | ||||
|           </DialogContent> | ||||
|           <DialogActions> | ||||
|             <Button onClick={this.toggleDialog} color="primary"> | ||||
|  | ||||
							
								
								
									
										98
									
								
								src/components/Tutorial/SolutionCheck.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								src/components/Tutorial/SolutionCheck.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | ||||
| import React, { Component } from 'react'; | ||||
| 
 | ||||
| import * as Blockly from 'blockly/core'; | ||||
| 
 | ||||
| import Compile from '../Compile'; | ||||
| 
 | ||||
| import { tutorials } from './tutorials'; | ||||
| 
 | ||||
| import { withRouter } from 'react-router-dom'; | ||||
| 
 | ||||
| import { withStyles } from '@material-ui/core/styles'; | ||||
| import IconButton from '@material-ui/core/IconButton'; | ||||
| import Tooltip from '@material-ui/core/Tooltip'; | ||||
| import Button from '@material-ui/core/Button'; | ||||
| import DialogTitle from '@material-ui/core/DialogTitle'; | ||||
| import DialogContent from '@material-ui/core/DialogContent'; | ||||
| import DialogActions from '@material-ui/core/DialogActions'; | ||||
| import Dialog from '@material-ui/core/Dialog'; | ||||
| import { faPlay } from "@fortawesome/free-solid-svg-icons"; | ||||
| import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; | ||||
| 
 | ||||
| const styles = (theme) => ({ | ||||
|   compile: { | ||||
|     backgroundColor: theme.palette.primary.main, | ||||
|     color: theme.palette.primary.contrastText, | ||||
|     '&:hover': { | ||||
|       backgroundColor: theme.palette.primary.main, | ||||
|       color: theme.palette.primary.contrastText, | ||||
|     } | ||||
|   } | ||||
| }); | ||||
| 
 | ||||
| class SolutionCheck extends Component { | ||||
| 
 | ||||
|   state={ | ||||
|     open: false, | ||||
|     msg: '' | ||||
|   } | ||||
| 
 | ||||
|   toggleDialog = () => { | ||||
|     if(this.state.open){ | ||||
|       this.setState({ open: false, msg: '' }); | ||||
|     } | ||||
|     else{ | ||||
|       this.setState({ open: !this.state }); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   check = () => { | ||||
|     const workspace = Blockly.getMainWorkspace(); | ||||
|     var msg = tutorials[this.props.tutorial].test(workspace); | ||||
|     this.setState({ msg, open: true }); | ||||
|   } | ||||
| 
 | ||||
|   render() { | ||||
|     return ( | ||||
|       tutorials[this.props.tutorial].test ? | ||||
|       <div> | ||||
|         <Tooltip title='Lösung kontrollieren'> | ||||
|           <IconButton | ||||
|             className={this.props.classes.compile} | ||||
|             style={{width: '40px', height: '40px', position: 'absolute', top: 8, right: 8, zIndex: 21 }} | ||||
|             onClick={() => this.check()} | ||||
|           > | ||||
|             <FontAwesomeIcon icon={faPlay} size="xs"/> | ||||
|           </IconButton> | ||||
|         </Tooltip> | ||||
|         <Dialog fullWidth maxWidth={'sm'} onClose={this.toggleDialog} open={this.state.open} style={{zIndex: 9999999}}> | ||||
|           <DialogTitle>{this.state.msg.type === 'error' ? 'Fehler' : 'Erfolg'}</DialogTitle> | ||||
|           <DialogContent dividers> | ||||
|             {this.state.msg.text} | ||||
|             {this.state.msg.type === 'success' ? | ||||
|             <div style={{marginTop: '20px', display: 'flex'}}> | ||||
|               <Compile /> | ||||
|               <Button | ||||
|                 style={{marginLeft: '10px'}} | ||||
|                 variant="contained" | ||||
|                 color="primary" | ||||
|                 onClick={() => {this.toggleDialog(); this.props.history.push(`/tutorial/${this.props.tutorial+2}`)}} | ||||
|               > | ||||
|                 nächstes Tutorial | ||||
|               </Button> | ||||
|               </div> | ||||
|             : null} | ||||
|           </DialogContent> | ||||
|           <DialogActions> | ||||
|             <Button onClick={this.toggleDialog} color="primary"> | ||||
|               Schließen | ||||
|             </Button> | ||||
|           </DialogActions> | ||||
|         </Dialog> | ||||
|       </div> | ||||
|       : null | ||||
|     ); | ||||
|   }; | ||||
| } | ||||
| 
 | ||||
| export default withRouter(withStyles(styles, {withTheme: true})(SolutionCheck)); | ||||
| @ -2,7 +2,7 @@ import React, { Component } from 'react'; | ||||
| 
 | ||||
| import { withRouter } from 'react-router-dom'; | ||||
| 
 | ||||
| import tutorials from './tutorials.json'; | ||||
| import { tutorials } from './tutorials'; | ||||
| 
 | ||||
| import { fade } from '@material-ui/core/styles/colorManipulator'; | ||||
| import { withStyles } from '@material-ui/core/styles'; | ||||
|  | ||||
| @ -4,7 +4,7 @@ import { withRouter, Link } from 'react-router-dom'; | ||||
| 
 | ||||
| import clsx from 'clsx'; | ||||
| 
 | ||||
| import tutorials from './tutorials.json'; | ||||
| import { tutorials } from './tutorials'; | ||||
| 
 | ||||
| import { fade } from '@material-ui/core/styles/colorManipulator'; | ||||
| import { withStyles } from '@material-ui/core/styles'; | ||||
| @ -123,7 +123,7 @@ class StepperVertical extends Component { | ||||
|           > | ||||
|             {'<'} | ||||
|           </Button> | ||||
|           <div style={{display: 'flex', height: 'calc(100% - 25px - 25px)', width: 'max-content'}}> | ||||
|           <div style={{display: 'flex', height: 'max-content', width: 'max-content'}}> | ||||
|             <div style={{position: 'relative'}}> | ||||
|               <div | ||||
|                 className={clsx(this.props.classes.progress, this.props.classes.progressForeground)} | ||||
|  | ||||
| @ -6,10 +6,11 @@ import Breadcrumbs from '../Breadcrumbs'; | ||||
| import StepperHorizontal from './StepperHorizontal'; | ||||
| import StepperVertical from './StepperVertical'; | ||||
| import BlocklyWindow from '../Blockly/BlocklyWindow'; | ||||
| import SolutionCheck from './SolutionCheck'; | ||||
| import CodeViewer from '../CodeViewer'; | ||||
| import NotFound from '../NotFound'; | ||||
| 
 | ||||
| import tutorials from './tutorials.json'; | ||||
| import { tutorials } from './tutorials'; | ||||
| import { initialXml } from '../Blockly/initialXml.js'; | ||||
| 
 | ||||
| import Tabs from '@material-ui/core/Tabs'; | ||||
| @ -74,7 +75,8 @@ class Tutorial extends Component { | ||||
|                   'Hier könnte eine Anleitung stehen.': null } | ||||
|                 {this.state.value === 'assessment' ? | ||||
|                   <Grid container spacing={2}> | ||||
|                     <Grid item xs={12} md={6} lg={8}> | ||||
|                     <Grid item xs={12} md={6} lg={8} style={{ position: 'relative' }}> | ||||
|                       <SolutionCheck tutorial={tutorialId-1}/> | ||||
|                       <BlocklyWindow /> | ||||
|                     </Grid> | ||||
|                     <Grid item xs={12} md={6} lg={4}> | ||||
|  | ||||
| @ -2,7 +2,7 @@ import React, { Component } from 'react'; | ||||
| 
 | ||||
| import Breadcrumbs from '../Breadcrumbs'; | ||||
| 
 | ||||
| import tutorials from './tutorials.json'; | ||||
| import { tutorials } from './tutorials'; | ||||
| 
 | ||||
| import { Link } from 'react-router-dom'; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										128
									
								
								src/components/Tutorial/tutorials.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								src/components/Tutorial/tutorials.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,128 @@ | ||||
| export const tutorials = [ | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "WLAN", | ||||
|     "test": function(workspace){ | ||||
|               var wifi = workspace.getBlocksByType('sensebox_wifi'); // result is an array with Blocks as objects
 | ||||
|               if(wifi.length > 0){ | ||||
|                 var wifiBlock = wifi[wifi.length-1] // first block is probably overwritten
 | ||||
|                 if(wifiBlock.getRootBlock().type === 'sensebox_wifi'){ | ||||
|                   return {text: 'Block, um eine WLAN-Verbindung herzustellen, ist nicht verbunden.', type: 'error'} | ||||
|                 } | ||||
|                 if(!wifiBlock.getFieldValue('SSID')){ | ||||
|                   return {text: 'Die SSID-Angabe fehlt.', type: 'error'} | ||||
|                 } | ||||
|                 if(!wifiBlock.getFieldValue('Password')){ | ||||
|                   return {text: 'Die Angabe des Passworts fehlt.', type: 'error'} | ||||
|                 } | ||||
|                 return {text: 'Super. Alles richtig!', type: 'success'} | ||||
|               } | ||||
|               else { | ||||
|                 return {text: 'Der Block, um eine WLAN-Verbindung herzustellen, fehlt.', type: 'error'} | ||||
|               } | ||||
|             } | ||||
|   }, | ||||
|   { | ||||
|     "title": "spezifisches WLAN", | ||||
|     "test": function(workspace){ | ||||
|               var wifi = workspace.getBlocksByType('sensebox_wifi'); // result is an array with Blocks as objects
 | ||||
|               if(wifi.length > 0){ | ||||
|                 var wifiBlock = wifi[wifi.length-1] // first block is probably overwritten
 | ||||
|                 if(wifiBlock.getRootBlock().type === 'sensebox_wifi'){ | ||||
|                   return {text: 'Block, um eine WLAN-Verbindung herzustellen, ist nicht verbunden.', type: 'error'} | ||||
|                 } | ||||
|                 var ssid = wifiBlock.getFieldValue('SSID'); | ||||
|                 if(ssid){ | ||||
|                   if(ssid !== 'SSID'){ | ||||
|                     return {text: 'SSID muss als Angabe "SSID" haben.', type: 'error'} | ||||
|                   } | ||||
|                 } | ||||
|                 else{ | ||||
|                   return {text: 'Die SSID-Angabe fehlt.', type: 'error'} | ||||
|                 } | ||||
|                 var password = wifiBlock.getFieldValue('Password') | ||||
|                 if(password !== 'Passwort'){ | ||||
|                   return {text: 'Password muss als Angabe "Passwort" haben.', type: 'error'} | ||||
|                 } | ||||
|                 else{ | ||||
|                   return {text: 'Die Angabe des Passworts fehlt.', type: 'error'} | ||||
|                 } | ||||
|                 return {text: 'Super. Alles richtig!', type: 'success'} | ||||
|               } | ||||
|               else { | ||||
|                 return {text: 'Der Block, um eine WLAN-Verbindung herzustellen, fehlt.', type: 'error'} | ||||
|               } | ||||
|             } | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   } | ||||
| ] | ||||
| @ -1,74 +0,0 @@ | ||||
| [ | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   }, | ||||
|   { | ||||
|     "title": "erste Schritte" | ||||
|   }, | ||||
|   { | ||||
|     "title": "if-Bedingung" | ||||
|   }, | ||||
|   { | ||||
|     "title": "for-Schleife" | ||||
|   } | ||||
| ] | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user