{"version":3,"sources":["components/api-authorization/ApiAuthorizationConstants.js","components/api-authorization/AuthorizeService.js","components/api-authorization/LoginMenu.js","components/NavMenu.js","components/Layout.js","components/CurrentCourceService.js","components/Home.js","components/FetchData.js","components/Counter.js","components/api-authorization/AuthorizeRoute.js","components/api-authorization/Login.js","components/api-authorization/Logout.js","components/api-authorization/ApiAuthorizationRoutes.js","components/ImageByVoice.js","components/SentenceСonstructor.js","components/StatementByVoice.js","components/JoinValues.js","components/CbxStatement.js","components/FillInTheGaps.js","components/Lesson.js","components/VocabularyWrite.js","components/VocabularyGuess.js","components/VocabularyGroup.js","components/Vocabulary.js","components/TestComponent1.js","components/CourceInfo.js","App.js","index.js"],"names":["QueryParameterNames","LogoutActions","LoginActions","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationClientConfigurationUrl","ApiAuthorizationPrefix","Login","LoginFailed","LoginCallback","Register","Profile","LogOut","LoggedOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","authService","_callbacks","_nextSubscriptionId","_user","_isAuthenticated","_popUpDisabled","this","getUser","user","profile","ensureUserManagerInitialized","userManager","access_token","state","signinSilent","createArguments","silentUser","updateState","success","console","log","Error","signinPopup","popUpUser","message","error","signinRedirect","redirect","url","signinCallback","signoutPopup","undefined","signoutRedirect","signoutCallback","response","data","notifySubscribers","callback","push","subscription","subscriptionId","subscriptionIndex","map","element","index","found","filter","length","splice","i","useReplaceToNavigate","status","AuthenticationResultStatus","Fail","Success","Redirect","fetch","ok","json","settings","automaticSilentRenew","includeIdTokenInSilentRenew","userStore","WebStorageStateStore","UserManager","events","addUserSignedOut","a","removeUser","LoginMenu","props","isAuthenticated","userName","cources","getAccessToken","token","headers","_subscription","subscribe","populateState","unsubscribe","Promise","all","readUserCources","setState","name","profilePath","logoutPath","pathname","local","authenticatedView","registerPath","loginPath","anonymousView","event","currentTarget","value","courceId","window","location","protocol","host","method","reload","NavItem","NavLink","tag","Link","className","to","onChange","onChangeCource","userCource","isCurrent","selected","id","cource","courceName","courceSelectComponent","Component","NavMenu","toggleNavbar","bind","collapsed","Navbar","light","Container","NavbarBrand","NavbarToggler","onClick","Collapse","isOpen","navbar","displayName","Layout","children","isAuth","Home","FetchData","forecasts","loading","populateWeatherData","contents","renderForecastsTable","aria-labelledby","forecast","key","date","temperatureC","temperatureF","summary","Counter","currentCount","incrementCounter","aria-live","AuthorizeRoute","ready","authenticated","authenticationChanged","populateAuthenticationState","link","document","createElement","href","path","returnUrl","search","hash","redirectUrl","encodeURI","component","rest","render","action","login","getReturnUrl","processLoginCallback","URLSearchParams","get","redirectToProfile","redirectToRegister","signIn","result","navigateToReturnUrl","completeSignIn","fromQuery","startsWith","origin","redirectToApiAuthorizationPath","apiAuthorizationPath","replace","Logout","isReady","history","logout","processLogoutCallback","signOut","completeSignOut","ApiAuthorizationRoutes","loginAction","logoutAction","ImageByVoice","nextOnClick","userAnswer","exercise","correctNumber","exercises","excerciseNmb","alert","parent","setExerciseComplete","exerciseId","setNextExercise","newNmb","shufleExercise","images","ruText","onImageClick","e","nmb","audioRef","React","createRef","parentComponent","arr","j","temp","Math","floor","random","correctImg","shuffle","indexOf","current","play","populateData","onPlay","ref","controls","src","audio","espText","img","alt","renderImages","forEach","Image","Brick","brick","exNumber","dragBrick","doubleClick","draggable","onDragStart","onDoubleClick","SentenceContructor","allowDrop","preventDefault","draggableBrickRef","target","draggableBricIsWord","dragWord","drop","isEmptyBreakStr","innerText","tagStr","getTag","outerHTML","dropAnalogForDbClick","wordDrop","textId","elemToShow","bricksDivRef","str","userTagToUnderline","n","f","slice","len","emptyLen","btnCheckClick","array","wordsDivRef","espSentence","btnNextClick","SetVisibleAll","style","display","componentDidUpdate","sentenceSetBrickDbClick","brickDbClick","firstEmptyWordDiv","words","wordDivRefs","showHelp","isHelpViewMode","hideHelp","maxWordCount","max","renderSentence","ruSentence","showcount","onDragOver","onDrop","bricks","renderHelp","word","type","onMouseDown","onMouseUp","onMouseLeave","wordsLst","split","getRefArrayWithMaxLenForTheExercise","StatementTagsFromString","statement","stmtNmb","taskNmb","regisrageMyRef","strParts","val","part","opts","options","optionIndex","curKey","StatementCombobox","idx","StatementByVoice","cbxMap","Map","set","getRightAnswersMap","resultsMap","badAnswersCbxArray","selectedIndex","text","msg","statements","answers","answer","onSelectChange","allText","stmnt","JoinValues","col1Click","col1RowSelectedNmb","col2RowSelectedNmb","userSelection","firstColumnRowIsSelected","col2Click","errorCount","secondColVals","secondColShuffledVals","firstColVals","column1","column2","correctSelection","GetCorrectSelection","colourAr","taskText","findIndex","item","renderComponentHelp","renderComponent","fValue","CbxStatement","getMaskForWord","unshift","answ","answIndex","translation","StatementFillInTheGaps","autoFocus","mask","StatementFillInTheGapsHelp","FillInTheGaps","Lesson","onUnitClick","onExerciseClick","exerciseNumber","getNextExerciseNumb","assign","queryParams","lessonId","isRedoMode","lesson","populateLesson","extendExercises","isCompleted","exerciseComponent","reactComponent","lessonName","xerciseName","renderExercise","completedCount","getFirstExerciseNumb","VocabularyWrite","failAttemptCount","buttons","btnCorrectClick","userInputRef","toLearn","shift","toRepeat","card","shorErrorInfo","showCorrectWordInfo","headerStr","cards","setHaederString","setNextLevel","playWord","audioWord","autoplay","playExample","audioExample","sampleAudio","btnIncorrectClick","onKeyUp","keyCode","Audio","exampleDiv","showExamples","sample","sampleTranslation","buttonsDiv","wordDiv","errorInfo","correctWordInfo","image","VocabularyGuess","VocabularyGroup","onShowExampleValueChange","checked","onModeChange","mode","groupId","modes","group","headerString","urlVocabularies","vocabularyComponent","class","for","wordCards","loadAllImages","Vocabulary","unit","unitNumber","units","groups","vocabularyGroups","onGroupClic","populateVocabulary","unitName","userNotify","userStudyLevel","buttonText","renderCourceInfo","vocabularyUnits","TestComponent1","testStr","CourceInfo","lessons","extendLessons","lessonNmb","onLessonClick","onStartBtnClick","populateCource","round","x","extendUnits","App","exact","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","basename"],"mappings":"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","file":"static/js/main.7477a3e4.chunk.js","sourcesContent":["export const ApplicationName = 'SiteTutor';\r\n\r\nexport const QueryParameterNames = {\r\n ReturnUrl: 'returnUrl',\r\n Message: 'message'\r\n};\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: 'logout-callback',\r\n Logout: 'logout',\r\n LoggedOut: 'logged-out'\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: 'login',\r\n LoginCallback: 'login-callback',\r\n LoginFailed: 'login-failed',\r\n Profile: 'profile',\r\n Register: 'register'\r\n};\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: '/',\r\n ApiAuthorizationClientConfigurationUrl: `/_configuration/${ApplicationName}`,\r\n ApiAuthorizationPrefix: prefix,\r\n Login: `${prefix}/${LoginActions.Login}`,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n Register: `${prefix}/${LoginActions.Register}`,\r\n Profile: `${prefix}/${LoginActions.Profile}`,\r\n LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n IdentityRegisterPath: '/Identity/Account/Register',\r\n IdentityManagePath: '/Identity/Account/Manage'\r\n};\r\n","import { UserManager, WebStorageStateStore } from 'oidc-client';\r\nimport { ApplicationPaths, ApplicationName } from './ApiAuthorizationConstants';\r\n\r\nexport class AuthorizeService {\r\n _callbacks = [];\r\n _nextSubscriptionId = 0;\r\n _user = null;\r\n _isAuthenticated = false;\r\n\r\n // By default pop ups are disabled because they don't work properly on Edge.\r\n // If you want to enable pop up authentication simply set this flag to false.\r\n _popUpDisabled = true;\r\n\r\n async isAuthenticated() {\r\n const user = await this.getUser();\r\n return !!user;\r\n }\r\n\r\n async getUser() {\r\n if (this._user && this._user.profile) {\r\n return this._user.profile;\r\n }\r\n\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.getUser();\r\n return user && user.profile;\r\n }\r\n\r\n async getAccessToken() {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.getUser();\r\n return user && user.access_token;\r\n }\r\n\r\n // We try to authenticate the user in three different ways:\r\n // 1) We try to see if we can authenticate the user silently. This happens\r\n // when the user is already logged in on the IdP and is done using a hidden iframe\r\n // on the client.\r\n // 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n // redirect flow.\r\n async signIn(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const silentUser = await this.userManager.signinSilent(this.createArguments());\r\n this.updateState(silentUser);\r\n return this.success(state);\r\n } catch (silentError) {\r\n // User might not be authenticated, fallback to popup authentication\r\n console.log(\"Silent authentication error: \", silentError);\r\n\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n }\r\n\r\n const popUpUser = await this.userManager.signinPopup(this.createArguments());\r\n this.updateState(popUpUser);\r\n return this.success(state);\r\n } catch (popUpError) {\r\n if (popUpError.message === \"Popup window closed\") {\r\n // The user explicitly cancelled the login action by closing an opened popup.\r\n return this.error(\"The user closed the window.\");\r\n } else if (!this._popUpDisabled) {\r\n console.log(\"Popup authentication error: \", popUpError);\r\n }\r\n\r\n // PopUps might be blocked by the user, fallback to redirect\r\n try {\r\n await this.userManager.signinRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectError) {\r\n console.log(\"Redirect authentication error: \", redirectError);\r\n return this.error(redirectError);\r\n }\r\n }\r\n }\r\n }\r\n\r\n async completeSignIn(url) {\r\n try {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.signinCallback(url);\r\n this.updateState(user);\r\n return this.success(user && user.state);\r\n } catch (error) {\r\n console.log('There was an error signing in: ', error);\r\n return this.error('There was an error signing in.');\r\n }\r\n }\r\n\r\n // We try to sign out the user in two different ways:\r\n // 1) We try to do a sign-out using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 2) If the method above fails, we redirect the browser to the IdP to perform a traditional\r\n // post logout redirect flow.\r\n async signOut(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n }\r\n\r\n await this.userManager.signoutPopup(this.createArguments());\r\n this.updateState(undefined);\r\n return this.success(state);\r\n } catch (popupSignOutError) {\r\n console.log(\"Popup signout error: \", popupSignOutError);\r\n try {\r\n await this.userManager.signoutRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectSignOutError) {\r\n console.log(\"Redirect signout error: \", redirectSignOutError);\r\n return this.error(redirectSignOutError);\r\n }\r\n }\r\n }\r\n\r\n async completeSignOut(url) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const response = await this.userManager.signoutCallback(url);\r\n this.updateState(null);\r\n return this.success(response && response.data);\r\n } catch (error) {\r\n console.log(`There was an error trying to log out '${error}'.`);\r\n return this.error(error);\r\n }\r\n }\r\n\r\n updateState(user) {\r\n this._user = user;\r\n this._isAuthenticated = !!this._user;\r\n this.notifySubscribers();\r\n }\r\n\r\n subscribe(callback) {\r\n this._callbacks.push({ callback, subscription: this._nextSubscriptionId++ });\r\n return this._nextSubscriptionId - 1;\r\n }\r\n\r\n unsubscribe(subscriptionId) {\r\n const subscriptionIndex = this._callbacks\r\n .map((element, index) => element.subscription === subscriptionId ? { found: true, index } : { found: false })\r\n .filter(element => element.found === true);\r\n if (subscriptionIndex.length !== 1) {\r\n throw new Error(`Found an invalid number of subscriptions ${subscriptionIndex.length}`);\r\n }\r\n\r\n this._callbacks.splice(subscriptionIndex[0].index, 1);\r\n }\r\n\r\n notifySubscribers() {\r\n for (let i = 0; i < this._callbacks.length; i++) {\r\n const callback = this._callbacks[i].callback;\r\n callback();\r\n }\r\n }\r\n\r\n createArguments(state) {\r\n return { useReplaceToNavigate: true, data: state };\r\n }\r\n\r\n error(message) {\r\n return { status: AuthenticationResultStatus.Fail, message };\r\n }\r\n\r\n success(state) {\r\n return { status: AuthenticationResultStatus.Success, state };\r\n }\r\n\r\n redirect() {\r\n return { status: AuthenticationResultStatus.Redirect };\r\n }\r\n\r\n async ensureUserManagerInitialized() {\r\n if (this.userManager !== undefined) {\r\n return;\r\n }\r\n\r\n let response = await fetch(ApplicationPaths.ApiAuthorizationClientConfigurationUrl);\r\n if (!response.ok) {\r\n throw new Error(`Could not load settings for '${ApplicationName}'`);\r\n }\r\n\r\n let settings = await response.json();\r\n settings.automaticSilentRenew = true;\r\n settings.includeIdTokenInSilentRenew = true;\r\n settings.userStore = new WebStorageStateStore({\r\n prefix: ApplicationName\r\n });\r\n\r\n this.userManager = new UserManager(settings);\r\n\r\n this.userManager.events.addUserSignedOut(async () => {\r\n await this.userManager.removeUser();\r\n this.updateState(undefined);\r\n });\r\n }\r\n\r\n static get instance() { return authService }\r\n}\r\n\r\nconst authService = new AuthorizeService();\r\n\r\nexport default authService;\r\n\r\nexport const AuthenticationResultStatus = {\r\n Redirect: 'redirect',\r\n Success: 'success',\r\n Fail: 'fail'\r\n};\r\n","\r\nimport React, { Component, Fragment } from 'react';\r\nimport { NavItem, NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport authService from './AuthorizeService';\r\nimport { ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\nexport class LoginMenu extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isAuthenticated: false,\r\n userName: null,\r\n cources: []//\r\n };\r\n }\r\n\r\n async readUserCources() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('/api/UserCources', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const cources = await response.json();\r\n\r\n return cources;\r\n }\r\n\r\n\r\n\r\n componentDidMount() {\r\n this._subscription = authService.subscribe(() => this.populateState());\r\n this.populateState();\r\n }\r\n\r\n componentWillUnmount() {\r\n authService.unsubscribe(this._subscription);\r\n }\r\n\r\n async populateState() {\r\n const [isAuthenticated, user] = await Promise.all([authService.isAuthenticated(), authService.getUser()])\r\n // this.setState({\r\n // isAuthenticated,\r\n // userName: user && user.name\r\n // });\r\n if (isAuthenticated) {\r\n const [cources] = await Promise.all([this.readUserCources()]);\r\n\r\n this.setState({\r\n isAuthenticated,\r\n userName: user && user.name,\r\n cources: cources\r\n });\r\n }\r\n else {\r\n this.setState({\r\n isAuthenticated,\r\n userName: user && user.name,\r\n cources: []\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const { isAuthenticated, userName } = this.state;\r\n if (!isAuthenticated) {\r\n const registerPath = `${ApplicationPaths.Register}`;\r\n const loginPath = `${ApplicationPaths.Login}`;\r\n return this.anonymousView(registerPath, loginPath);\r\n } else {\r\n const profilePath = `${ApplicationPaths.Profile}`;\r\n const logoutPath = { pathname: `${ApplicationPaths.LogOut}`, state: { local: true } };\r\n return this.authenticatedView(userName, profilePath, logoutPath);\r\n }\r\n }\r\n\r\n async onChangeCource(event) {\r\n console.log(event.currentTarget.value);\r\n\r\n let courceId = event.currentTarget.value;\r\n\r\n const token = await authService.getAccessToken();\r\n const url = `${window.location.protocol}//${window.location.host}/api/UserCources/${courceId}`;\r\n await fetch(url, {\r\n method: 'PUT',\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n window.location.reload();\r\n }\r\n\r\n courceSelectComponent() {\r\n if (this.state.cources.length < 2)\r\n return (\r\n <>\r\n \r\n Ejercicios\r\n \r\n \r\n Vocabulario\r\n \r\n \r\n )\r\n else\r\n return (\r\n <>\r\n \r\n Ejercicios\r\n \r\n \r\n Vocabulario\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n authenticatedView(userName, profilePath, logoutPath) {\r\n return (\r\n {this.courceSelectComponent()}\r\n \r\n {userName}\r\n \r\n \r\n Salir\r\n \r\n );\r\n }\r\n\r\n anonymousView(registerPath, loginPath) {\r\n return (\r\n \r\n Registro\r\n \r\n \r\n Entrar\r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { LoginMenu } from './api-authorization/LoginMenu';\r\nimport './NavMenu.css';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar() {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n Тutor de español\r\n \r\n \r\n
    \r\n \r\n Principal\r\n \r\n {/* {this.courceSelectComponent()} */}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n \r\n {this.props.children}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import authService from './api-authorization/AuthorizeService'\r\n\r\nexport class CurrentCourceService {\r\n\r\n\r\n async getCurrentUserCource() {\r\n let isAuth = await authService.isAuthenticated();\r\n if (isAuth === false)\r\n return null;\r\n\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('/api/cource', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n console.log(data);\r\n return data;\r\n }\r\n\r\n async getUserCources() {\r\n console.log(1);\r\n let isAuth = await authService.isAuthenticated();\r\n console.log(2);\r\n if (isAuth === false)\r\n return null;\r\n console.log(3);\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('/api/UserCources', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n console.log(4);\r\n console.log(response);\r\n console.log(5);\r\n const data = await response.json();\r\n console.log(6);\r\n console.log(data);\r\n return data;\r\n }\r\n\r\n async getCurrentCourceName() {\r\n console.log('getCurrentCourceName');\r\n let isAuth = await authService.isAuthenticated();\r\n if (isAuth === false)\r\n return '';\r\n\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('/api/cource', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n console.log(data);\r\n try {\r\n return data.courceName;\r\n }\r\n catch {\r\n return 'Ошибка'\r\n }\r\n }\r\n}\r\n\r\nconst currentCourceService = new CurrentCourceService();\r\n\r\nexport default currentCourceService;","import React, { Component } from 'react';\r\nimport currentCourceService from './CurrentCourceService';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n\r\n // constructor(props) {\r\n // super();\r\n // }\r\n\r\n render() {\r\n return (\r\n
\r\n

¡Hola a todos!

\r\n

Bienvenido al sitio de aprendizaje de español

\r\n
\r\n );\r\n }\r\n\r\n // componentDidMount() {\r\n // this.populateData();\r\n // }\r\n\r\n // async populateData() {\r\n // console.log(\"#!#!#! START\");\r\n // let cources = await currentCourceService.getUserCources();\r\n // console.log(\"#!#!#! FINISH\");\r\n // console.log(cources);\r\n // }\r\n\r\n}\r\n","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService'\r\n\r\nexport class FetchData extends Component {\r\n static displayName = FetchData.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { forecasts: [], loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateWeatherData();\r\n }\r\n\r\n static renderForecastsTable(forecasts) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {forecasts.map(forecast =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
DateTemp. (C)Temp. (F)Summary
{forecast.date}{forecast.temperatureC}{forecast.temperatureF}{forecast.summary}
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : FetchData.renderForecastsTable(this.state.forecasts);\r\n\r\n return (\r\n
\r\n

Weather forecast

\r\n

This component demonstrates fetching data from the server.

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateWeatherData() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('weatherforecast', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ forecasts: data, loading: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class Counter extends Component {\r\n static displayName = Counter.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { currentCount: 0 };\r\n this.incrementCounter = this.incrementCounter.bind(this);\r\n }\r\n\r\n incrementCounter() {\r\n this.setState({\r\n currentCount: this.state.currentCount + 1\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

Counter

\r\n\r\n

This is a simple example of a React component.

\r\n\r\n

Current count: {this.state.currentCount}

\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react'\r\nimport { Route, Redirect } from 'react-router-dom'\r\nimport { ApplicationPaths, QueryParameterNames } from './ApiAuthorizationConstants'\r\nimport authService from './AuthorizeService'\r\n\r\nexport default class AuthorizeRoute extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n ready: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._subscription = authService.subscribe(() => this.authenticationChanged());\r\n this.populateAuthenticationState();\r\n }\r\n\r\n componentWillUnmount() {\r\n authService.unsubscribe(this._subscription);\r\n }\r\n\r\n render() {\r\n const { ready, authenticated } = this.state;\r\n var link = document.createElement(\"a\");\r\n link.href = this.props.path;\r\n const returnUrl = `${link.protocol}//${link.host}${link.pathname}${link.search}${link.hash}`;\r\n const redirectUrl = `${ApplicationPaths.Login}?${QueryParameterNames.ReturnUrl}=${encodeURI(returnUrl)}`\r\n if (!ready) {\r\n return
;\r\n } else {\r\n const { component: Component, ...rest } = this.props;\r\n return {\r\n if (authenticated) {\r\n return \r\n } else {\r\n return \r\n }\r\n }} />\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ ready: true, authenticated });\r\n }\r\n\r\n async authenticationChanged() {\r\n this.setState({ ready: false, authenticated: false });\r\n await this.populateAuthenticationState();\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { LoginActions, QueryParameterNames, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's login process.\r\n// This is the starting point for the login process. Any component that needs to authenticate\r\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\r\n// let the component perform the login and return back to the return url.\r\nexport class Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LoginActions.Login:\r\n this.login(this.getReturnUrl());\r\n break;\r\n case LoginActions.LoginCallback:\r\n this.processLoginCallback();\r\n break;\r\n case LoginActions.LoginFailed:\r\n const params = new URLSearchParams(window.location.search);\r\n const error = params.get(QueryParameterNames.Message);\r\n this.setState({ message: error });\r\n break;\r\n case LoginActions.Profile:\r\n this.redirectToProfile();\r\n break;\r\n case LoginActions.Register:\r\n this.redirectToRegister();\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n\r\n render() {\r\n const action = this.props.action;\r\n const { message } = this.state;\r\n\r\n if (!!message) {\r\n return
{message}
\r\n } else {\r\n switch (action) {\r\n case LoginActions.Login:\r\n return (
Processing login
);\r\n case LoginActions.LoginCallback:\r\n return (
Processing login callback
);\r\n case LoginActions.Profile:\r\n case LoginActions.Register:\r\n return (
);\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async login(returnUrl) {\r\n const state = { returnUrl };\r\n const result = await authService.signIn(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid status result ${result.status}.`);\r\n }\r\n }\r\n\r\n async processLoginCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignIn(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeSignIn finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid authentication result status '${result.status}'.`);\r\n }\r\n }\r\n\r\n getReturnUrl(state) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) || fromQuery || `${window.location.origin}/`;\r\n }\r\n\r\n redirectToRegister() {\r\n this.redirectToApiAuthorizationPath(`${ApplicationPaths.IdentityRegisterPath}?${QueryParameterNames.ReturnUrl}=${encodeURI(ApplicationPaths.Login)}`);\r\n }\r\n\r\n redirectToProfile() {\r\n this.redirectToApiAuthorizationPath(ApplicationPaths.IdentityManagePath);\r\n }\r\n\r\n redirectToApiAuthorizationPath(apiAuthorizationPath) {\r\n const redirectUrl = `${window.location.origin}${apiAuthorizationPath}`;\r\n // It's important that we do a replace here so that when the user hits the back arrow on the\r\n // browser he gets sent back to where it was on the app instead of to an endpoint on this\r\n // component.\r\n window.location.replace(redirectUrl);\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n // It's important that we do a replace here so that we remove the callback uri with the\r\n // fragment containing the tokens from the browser history.\r\n window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { QueryParameterNames, LogoutActions, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's logout process.\r\n// This is the starting point for the logout process, which is usually initiated when a\r\n// user clicks on the logout button on the LoginMenu component.\r\nexport class Logout extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined,\r\n isReady: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n if (!!window.history.state.state.local) {\r\n this.logout(this.getReturnUrl());\r\n } else {\r\n // This prevents regular links to /authentication/logout from triggering a logout\r\n this.setState({ isReady: true, message: \"The logout was not initiated from within the page.\" });\r\n }\r\n break;\r\n case LogoutActions.LogoutCallback:\r\n this.processLogoutCallback();\r\n break;\r\n case LogoutActions.LoggedOut:\r\n this.setState({ isReady: true, message: \"You successfully logged out!\" });\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n\r\n this.populateAuthenticationState();\r\n }\r\n\r\n render() {\r\n const { isReady, message } = this.state;\r\n if (!isReady) {\r\n return
\r\n }\r\n if (!!message) {\r\n return (
{message}
);\r\n } else {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n return (
Processing logout
);\r\n case LogoutActions.LogoutCallback:\r\n return (
Processing logout callback
);\r\n case LogoutActions.LoggedOut:\r\n return (
{message}
);\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async logout(returnUrl) {\r\n const state = { returnUrl };\r\n const isauthenticated = await authService.isAuthenticated();\r\n if (isauthenticated) {\r\n const result = await authService.signOut(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n } else {\r\n this.setState({ message: \"You successfully logged out!\" });\r\n }\r\n }\r\n\r\n async processLogoutCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignOut(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeAuthentication finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ isReady: true, authenticated });\r\n }\r\n\r\n getReturnUrl(state) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) ||\r\n fromQuery ||\r\n `${window.location.origin}${ApplicationPaths.LoggedOut}`;\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n return window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Login } from './Login'\r\nimport { Logout } from './Logout'\r\nimport { ApplicationPaths, LoginActions, LogoutActions } from './ApiAuthorizationConstants';\r\n\r\nexport default class ApiAuthorizationRoutes extends Component {\r\n\r\n render () {\r\n return(\r\n \r\n loginAction(LoginActions.Login)} />\r\n loginAction(LoginActions.LoginFailed)} />\r\n loginAction(LoginActions.LoginCallback)} />\r\n loginAction(LoginActions.Profile)} />\r\n loginAction(LoginActions.Register)} />\r\n logoutAction(LogoutActions.Logout)} />\r\n logoutAction(LogoutActions.LogoutCallback)} />\r\n logoutAction(LogoutActions.LoggedOut)} />\r\n );\r\n }\r\n}\r\n\r\nfunction loginAction(name){\r\n return ();\r\n}\r\n\r\nfunction logoutAction(name) {\r\n return ();\r\n}\r\n","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService'\r\nimport './ImageByVoice.css';\r\n\r\n\r\nexport default class ImageByVoice extends Component {\r\n constructor(props) {\r\n //console.log(window.location.href)\r\n super();\r\n this.exerciseId = props.exerciseId;\r\n this.state = { loading: true, excerciseNmb: 0 };\r\n this.exercises = [];\r\n this.exercise = null;\r\n this.audioRef = React.createRef();\r\n this.userAnswer = -1;\r\n this.parent = props.parentComponent;\r\n }\r\n\r\n static displayName = \"BBBBBBBB\";\r\n\r\n nextOnClick = () => {\r\n if (this.userAnswer === this.exercise.correctNumber) {\r\n if (this.exercises.length === this.state.excerciseNmb + 1) {\r\n alert(\"Конец\");\r\n if (this.parent != null) {\r\n this.parent.setExerciseComplete(this.exerciseId);\r\n this.parent.setNextExercise();\r\n }\r\n return;\r\n }\r\n else {\r\n let newNmb = this.state.excerciseNmb + 1;\r\n this.exercise = this.shufleExercise(this.exercises[newNmb]);\r\n this.setState({ excerciseNmb: newNmb });\r\n }\r\n }\r\n else {\r\n alert(this.exercise.images[this.userAnswer].ruText + \" - неверный ответ!\");\r\n }\r\n }\r\n\r\n onImageClick = (e, nmb) => {\r\n this.userAnswer = nmb;\r\n this.nextOnClick();\r\n }\r\n\r\n shuffle(arr) {\r\n var j, temp;\r\n for (var i = arr.length - 1; i > 0; i--) {\r\n j = Math.floor(Math.random() * (i + 1));\r\n temp = arr[j];\r\n arr[j] = arr[i];\r\n arr[i] = temp;\r\n }\r\n return arr;\r\n }\r\n\r\n shufleExercise(exercise) {\r\n let correctImg = exercise.images[exercise.correctNumber];\r\n exercise.images = this.shuffle(exercise.images);\r\n exercise.correctNumber = exercise.images.indexOf(correctImg);\r\n return exercise;\r\n }\r\n\r\n // btnNextClick = (event) => {\r\n // if (this.parent != null)\r\n // this.parent.setNextExercise();\r\n // }\r\n\r\n onPlay(audioRef) {\r\n if (this.exercise == null)\r\n return;\r\n audioRef.current.play();\r\n }\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n this.onPlay(this.audioRef);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.onPlay(this.audioRef);\r\n }\r\n\r\n renderImages() {\r\n return (\r\n
\r\n {/*
*/}\r\n
\r\n \r\n {this.exercise.espText}\r\n
\r\n
{this.exercise.images[0].ruText} this.onImageClick(e, 0)} className=\"image6Lst\" />
{this.exercise.images[0].ruText}
\r\n
{this.exercise.images[1].ruText} this.onImageClick(e, 1)} className=\"image6Lst\" />
{this.exercise.images[1].ruText}
\r\n
{this.exercise.images[2].ruText} this.onImageClick(e, 2)} className=\"image6Lst\" />
{this.exercise.images[2].ruText}
\r\n
{this.exercise.images[3].ruText} this.onImageClick(e, 3)} className=\"image6Lst\" />
{this.exercise.images[3].ruText}
\r\n
{this.exercise.images[4].ruText} this.onImageClick(e, 4)} className=\"image6Lst\" />
{this.exercise.images[4].ruText}
\r\n
{this.exercise.images[5].ruText} this.onImageClick(e, 5)} className=\"image6Lst\" />
{this.exercise.images[5].ruText}
\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading exercise...

\r\n : this.renderImages();\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n loadAllImages(exercises) {\r\n console.log(\"image lading\")\r\n exercises.forEach((exercise) => {\r\n const img0 = new Image();\r\n img0.src = exercise.images[0];\r\n console.log(exercise.images[0]);\r\n\r\n const img1 = new Image();\r\n img1.src = exercise.images[1];\r\n console.log(exercise.images[1]);\r\n\r\n const img2 = new Image();\r\n img2.src = exercise.images[2];\r\n console.log(exercise.images[2]);\r\n\r\n\r\n const img3 = new Image();\r\n img3.src = exercise.images[3];\r\n console.log(exercise.images[3]);\r\n\r\n\r\n const img4 = new Image();\r\n img4.src = exercise.images[4];\r\n console.log(exercise.images[4]);\r\n\r\n const img5 = new Image();\r\n img5.src = exercise.images[5];\r\n console.log(exercise.images[5]);\r\n });\r\n }\r\n\r\n async populateData() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/exercise/' + this.exerciseId, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.exercises = this.shuffle(data);\r\n this.exercise = this.shufleExercise(this.exercises[0]);\r\n this.state = { excerciseNmb: 0 };\r\n this.setState({\r\n loading: false\r\n });\r\n }\r\n}\r\n\r\n\r\n","import React from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport \"./SentenceContructor.css\";\r\n\r\nconst Brick = ({ brick, index, exNumber, dragBrick, doubleClick, ...props }) => {\r\n return (\r\n \r\n {brick}\r\n \r\n );\r\n}\r\n\r\nexport default class SentenceContructor extends React.Component {\r\n constructor(props) {\r\n super();\r\n this.draggableBrickRef = React.createRef();\r\n this.draggableBricIsWord = undefined;\r\n this.bricksDivRef = React.createRef();\r\n this.wordsDivRef = React.createRef();\r\n this.parent = props.parentComponent;\r\n //this.firstEmpryWordDivRef = React.createRef();\r\n this.wordDivRefs = [];\r\n\r\n this.exercises = [];\r\n this.exerciseId = props.exerciseId;\r\n this.state = {\r\n loading: true,\r\n excerciseNmb: 0,\r\n exercise: null,\r\n isHelpViewMode: false\r\n };\r\n\r\n this.userTagToUnderline = false;\r\n //this.firstEmptyWordIsSetted = false;\r\n }\r\n\r\n getRefArrayWithMaxLenForTheExercise(exercises) {\r\n let maxWordCount = 0;\r\n for (let i = 0; i < exercises.length; i++) {\r\n maxWordCount = Math.max(maxWordCount, exercises[i].words.length);\r\n }\r\n\r\n let result = [];\r\n for (let i = 0; i < maxWordCount; i++) {\r\n result.push(React.createRef());\r\n }\r\n\r\n return result;\r\n }\r\n\r\n allowDrop = (event) => {\r\n event.preventDefault();\r\n };\r\n\r\n dragBrick = (event) => {\r\n this.draggableBrickRef.current = event.target;\r\n this.draggableBricIsWord = false;\r\n };\r\n\r\n dragWord = (event) => {\r\n this.draggableBrickRef.current = event.target;\r\n this.draggableBricIsWord = true;\r\n };\r\n\r\n drop = (event) => {\r\n if (this.draggableBrickRef.current === undefined) {\r\n this.draggableBricIsWord = undefined;\r\n return;\r\n }\r\n if (this.isEmptyBreakStr(event.target.innerText)) {\r\n event.target.innerText = this.draggableBrickRef.current.innerText;\r\n if (this.draggableBricIsWord) {\r\n let tagStr = this.getTag(this.draggableBrickRef.current.outerHTML);\r\n this.draggableBrickRef.current.innerText = tagStr;\r\n } else this.draggableBrickRef.current.className = \"brickWord-hidden\";\r\n }\r\n\r\n this.draggableBrickRef.current = undefined;\r\n this.draggableBricIsWord = undefined;\r\n };\r\n\r\n dropAnalogForDbClick = (target) => {\r\n if (this.draggableBrickRef.current === undefined) {\r\n this.draggableBricIsWord = undefined;\r\n return;\r\n }\r\n if (this.isEmptyBreakStr(target.innerText)) {\r\n target.innerText = this.draggableBrickRef.current.innerText;\r\n if (this.draggableBricIsWord) {\r\n let tagStr = this.getTag(this.draggableBrickRef.current.outerHTML);\r\n this.draggableBrickRef.current.innerText = tagStr;\r\n } else this.draggableBrickRef.current.className = \"brickWord-hidden\";\r\n }\r\n\r\n this.draggableBrickRef.current = undefined;\r\n this.draggableBricIsWord = undefined;\r\n };\r\n\r\n wordDrop = (event) => {\r\n if (this.draggableBrickRef.current === undefined) {\r\n this.draggableBrickRef.current = undefined;\r\n this.draggableBricIsWord = undefined;\r\n return;\r\n }\r\n\r\n if (this.isEmptyBreakStr(this.draggableBrickRef.current.innerText)) {\r\n this.draggableBrickRef.current = undefined;\r\n this.draggableBricIsWord = undefined;\r\n return;\r\n }\r\n\r\n if (this.draggableBricIsWord === true) {\r\n let textId = this.draggableBrickRef.current.innerText;\r\n\r\n let tagStr = this.getTag(this.draggableBrickRef.current.outerHTML);\r\n\r\n this.draggableBrickRef.current.innerText = tagStr;\r\n\r\n let elemToShow = undefined;\r\n for (let i = 0; i < this.bricksDivRef.current.children.length; i++) {\r\n if (this.bricksDivRef.current.children[i].innerText !== textId)\r\n continue;\r\n elemToShow = this.bricksDivRef.current.children[i];\r\n }\r\n\r\n //elemToShow.style.display = \"inline-block\";\r\n elemToShow.className = \"brickWord\";\r\n }\r\n\r\n this.draggableBrickRef.current = undefined;\r\n this.draggableBricIsWord = undefined;\r\n };\r\n\r\n getTag = (str) => {\r\n if (!this.userTagToUnderline) return \"________\";\r\n //console.log(str);\r\n let n = str.indexOf('tag=\"');\r\n //console.log(n);\r\n if (n === -1) return \"___\";\r\n let f = str.indexOf('\"', n + 5);\r\n //console.log(f);\r\n if (f === -1) return \"___\";\r\n\r\n return str.slice(n + 5, f);\r\n };\r\n\r\n isEmptyBreakStr = (str) => {\r\n //console.log(str);\r\n let len = str.length;\r\n let emptyLen = 0;\r\n for (let i = 0; i < len; i++) {\r\n if (str[i] === \"_\") emptyLen++;\r\n }\r\n if (len === emptyLen) {\r\n //console.log(\"empty\")\r\n return true;\r\n } else {\r\n //console.log(\"NOT EMPTY\");\r\n return false;\r\n }\r\n };\r\n\r\n btnCheckClick = (event) => {\r\n let array = this.wordsDivRef.current.children;\r\n let result = \"\";\r\n result = array[0].innerText;\r\n for (let i = 1; i < array.length; i++) {\r\n result = result + \" \" + array[i].innerText;\r\n }\r\n\r\n if (result === this.state.exercise.espSentence) {\r\n this.nextOnClick();\r\n } else {\r\n alert(\" - неверный ответ!\");\r\n }\r\n };\r\n\r\n btnNextClick = (event) => {\r\n\r\n // if (this.parent != null)\r\n // this.parent.setNextExercise();\r\n }\r\n\r\n SetVisibleAll = () => {\r\n for (let i = 0; i < this.bricksDivRef.current.children.length; i++) {\r\n let elemToShow = this.bricksDivRef.current.children[i];\r\n elemToShow.style.display = \"inline-block\";\r\n }\r\n };\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n }\r\n\r\n componentDidUpdate = () => {\r\n //this.SetVisibleAll();\r\n };\r\n\r\n nextOnClick = () => {\r\n if (this.exercises.length === this.state.excerciseNmb + 1) {\r\n //alert(\"Конец\");\r\n if (this.parent != null) {\r\n this.parent.setExerciseComplete(this.exerciseId);\r\n this.parent.setNextExercise();\r\n }\r\n return;\r\n } else {\r\n let newNmb = this.state.excerciseNmb + 1;\r\n //this.exercise = this.exercises[newNmb];\r\n this.setState({ excerciseNmb: newNmb });\r\n this.setState({ exercise: this.exercises[newNmb] });\r\n\r\n //console.log(newNmb);\r\n }\r\n };\r\n\r\n //двой клик по нижнему прямоугольнику\r\n sentenceSetBrickDbClick = (event) => {\r\n //alert(\"sentenceBrickDbClick\");\r\n this.dragWord(event);\r\n this.wordDrop(event);\r\n }\r\n\r\n //двойной клик по верхниму прямоугольнику\r\n brickDbClick = (event) => {\r\n\r\n //TODO: найти первый пустой нижний блок и присвоить его к firstEmptyWordDiv \r\n let firstEmptyWordDiv = null;\r\n for (let i = 0; i < this.state.exercise.words.length; i++) {\r\n\r\n if (this.isEmptyBreakStr(this.wordDivRefs[i].current.innerText) === true) {\r\n firstEmptyWordDiv = this.wordDivRefs[i].current;\r\n break;\r\n }\r\n }\r\n if (firstEmptyWordDiv == null) return;\r\n\r\n\r\n this.dragBrick(event);\r\n this.dropAnalogForDbClick(firstEmptyWordDiv);\r\n //111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading exercise (sentence contructor)...

\r\n : this.renderSentence();\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n renderSentence() {\r\n return (\r\n
\r\n
{this.state.exercise.ruSentence}
\r\n \r\n {this.state.exercise.bricks.map((brick, index) => (\r\n\r\n \r\n\r\n ))}\r\n
\r\n {this.state.isHelpViewMode === true ?\r\n this.renderHelp() : <>}\r\n\r\n\r\n
\r\n {this.state.exercise.words.map((word, index) =>\r\n this.isEmptyBreakStr(word) ? (\r\n \r\n {this.userTagToUnderline ? word : \"________\"}\r\n
\r\n ) : (\r\n
\r\n {word}\r\n
\r\n )\r\n )}\r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n showHelp = (event) => {\r\n if (this.state.isHelpViewMode === true) return;\r\n this.setState({ isHelpViewMode: true });\r\n console.log(\"showHelp\");\r\n }\r\n\r\n hideHelp = (event) => {\r\n if (this.state.isHelpViewMode === false) return;\r\n this.setState({ isHelpViewMode: false });\r\n console.log(\"hideHelp\");\r\n }\r\n\r\n renderHelp() {\r\n let wordsLst = this.state.exercise.espSentence.split(' ');\r\n //console.log(wordsLst);\r\n return (\r\n
\r\n {wordsLst.map((word, index) => (\r\n\r\n
\r\n {word}\r\n
\r\n ))}\r\n
\r\n );\r\n }\r\n\r\n async populateData() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/exercise/' + this.exerciseId, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.exercises = data;\r\n this.wordDivRefs = this.getRefArrayWithMaxLenForTheExercise(this.exercises);\r\n this.setState({ exercise: this.exercises[0] });\r\n this.setState({ excerciseNmb: 0 });\r\n this.setState({ loading: false });\r\n }\r\n}","import React from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport \"./StatementByVoice.css\";\r\n\r\nconst StatementTagsFromString = ({ statement, stmtNmb, taskNmb, regisrageMyRef, ...props }) => {\r\n var str = statement.statement;\r\n var strParts = str.split('*').filter((val) => val !== '');\r\n return (\r\n
\r\n {strParts.map((part, index) =>\r\n <>{part}\r\n \r\n \r\n )\r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst StatementCombobox = ({ opts, optionIndex, curKey, regisrageMyRef, ...props }) => {\r\n const ref = React.createRef();\r\n let contents = (opts.length <= optionIndex) ? <>\r\n :\r\n ();\r\n regisrageMyRef(curKey, ref);\r\n return (\r\n <>\r\n {contents}\r\n \r\n )\r\n}\r\n\r\nexport default class StatementByVoice extends React.Component {\r\n constructor(props) {\r\n super();\r\n this.parent = props.parentComponent;\r\n this.exerciseId = props.exerciseId;\r\n this.audioRef = React.createRef();\r\n this.exercises = null;\r\n this.state = {\r\n loading: true,\r\n excerciseNmb: 0,\r\n exercise: null\r\n };\r\n this.resultsMap = null;\r\n this.cbxMap = null;\r\n }\r\n\r\n regisrageMyRef = (curKey, ref) => {\r\n console.log(\"REGISRATE!!!!!\" + curKey)\r\n console.log(ref);\r\n if (this.cbxMap === null)\r\n this.cbxMap = new Map();\r\n this.cbxMap.set(curKey, ref);\r\n }\r\n\r\n\r\n btnCheckClick = (event) => {\r\n\r\n this.getRightAnswersMap(this.state.exercise);\r\n console.log(\"CHECK_START!!!!!!!!!!!!!!!!!!!!!\");\r\n console.log(this.resultsMap);\r\n console.log(this.cbxMap);\r\n\r\n if (this.resultsMap === null || this.cbxMap === null)\r\n alert(\"ERROR: Map is empty!\");\r\n let badAnswersCbxArray = [];\r\n this.resultsMap.forEach((value, key, map) => {\r\n //value===this.cbxMap.get(key).\r\n console.log(\"KEY: \" + key + \";VALUE:\" + value);\r\n console.log(this.cbxMap.get(key));\r\n let ref = this.cbxMap.get(key);\r\n let n = ref.current.options.selectedIndex;\r\n let text = ref.current.options[n].text;\r\n console.log(text);\r\n if (text !== value)\r\n badAnswersCbxArray.push(ref);\r\n });\r\n\r\n if (badAnswersCbxArray.length === 0) {\r\n this.cbxMap = new Map();\r\n this.resultsMap = new Map();\r\n this.btnNextClick();\r\n }\r\n else {\r\n let msg = \"\";\r\n badAnswersCbxArray.map((ref, index) => msg = msg + index + \". \" + ref.current.options[ref.current.options.selectedIndex].text + \"; \");\r\n alert(msg);\r\n }\r\n }\r\n\r\n getRightAnswersMap = (exercise) => {\r\n this.resultsMap = new Map();\r\n const taskNmb = this.state.excerciseNmb;\r\n // exercise.statements.map((statement, stmtNmb) => {\r\n // statement.answers.map((answer, optionIndex) => {\r\n // this.resultsMap.set(taskNmb + '_statement' + stmtNmb + '_option' + optionIndex, answer);\r\n // })\r\n // })\r\n\r\n exercise.statements.forEach((statement, stmtNmb) => {\r\n statement.answers.forEach((answer, optionIndex) => {\r\n this.resultsMap.set(taskNmb + '_statement' + stmtNmb + '_option' + optionIndex, answer);\r\n })\r\n })\r\n }\r\n\r\n onPlay(audioRef) {\r\n if (this.state.loading === true)\r\n return;\r\n audioRef.current.play();\r\n }\r\n\r\n btnNextClick = (event) => {\r\n if (this.exercises.length === this.state.excerciseNmb + 1) {\r\n //alert(\"Конец\");\r\n if (this.parent != null) {\r\n this.parent.setExerciseComplete(this.exerciseId);\r\n this.parent.setNextExercise();\r\n }\r\n return;\r\n } else {\r\n let newNmb = this.state.excerciseNmb + 1;\r\n //this.exercise = this.exercises[newNmb];\r\n this.setState({ excerciseNmb: newNmb });\r\n this.setState({ exercise: this.exercises[newNmb] });\r\n\r\n //console.log(newNmb);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n this.onPlay(this.audioRef);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.onPlay(this.audioRef);\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading exercise (StatementByVoice)...

\r\n : this.renderSentence();\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n onSelectChange = (e, curKey) => {\r\n console.log(\"EVENT \" + curKey);\r\n }\r\n\r\n renderSentence() {\r\n return (\r\n
\r\n
\r\n \r\n {this.state.exercise.allText}\r\n\r\n
\r\n {this.state.exercise.statements.map((stmnt, index) =>\r\n )}\r\n
\r\n \r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n );\r\n }\r\n\r\n async populateData() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/exercise/' + this.exerciseId, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.exercises = data;\r\n this.setState({ exercise: this.exercises[0] });\r\n this.setState({ excerciseNmb: 0 });\r\n this.setState({ loading: false });\r\n }\r\n}","import React from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport './JoinValues.css';\r\n\r\nexport default class JoinValues extends React.Component {\r\n\r\n constructor(props) {\r\n super();\r\n\r\n this.exercises = [];\r\n this.exerciseId = props.exerciseId;\r\n this.parent = props.parentComponent;\r\n this.firstColVals = [];\r\n this.secondColVals = [];\r\n this.secondColShuffledVals = [];\r\n this.userSelection = [];\r\n this.correctSelection = [];\r\n this.firstColumnRowIsSelected = [];\r\n\r\n this.colourAr = ['red', 'green',]\r\n this.state = {\r\n loading: true,\r\n excerciseNmb: 0,\r\n exercise: null,\r\n taskText: '',\r\n col1RowSelectedNmb: -1,\r\n col2RowSelectedNmb: -1,\r\n isHelpViewMode: false\r\n };\r\n }\r\n\r\n GetCorrectSelection() {\r\n let result = [];\r\n for (let i = 0; i < this.secondColVals.length; i++) {\r\n let val = this.secondColShuffledVals[i];\r\n let n = this.secondColVals.findIndex(item => item === val);\r\n result.push(n);\r\n }\r\n console.log(this.firstColVals);\r\n console.log(this.secondColVals);\r\n console.log(this.secondColShuffledVals);\r\n console.log(result);\r\n\r\n\r\n return result;\r\n }\r\n\r\n shuffle(arr) {\r\n var j, temp;\r\n for (var i = arr.length - 1; i > 0; i--) {\r\n j = Math.floor(Math.random() * (i + 1));\r\n temp = arr[j];\r\n arr[j] = arr[i];\r\n arr[i] = temp;\r\n }\r\n return arr;\r\n }\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n }\r\n\r\n\r\n render() {\r\n console.log(\"this.state.isHelpViewMode = \" + this.state.isHelpViewMode);\r\n let contents = this.state.loading\r\n ?

Loading exercise (sentence contructor)...

\r\n // : this.renderComponent();\r\n : (this.state.isHelpViewMode === true ? this.renderComponentHelp() : this.renderComponent());\r\n\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n col1Click = (e, index) => {\r\n //если эта же ячейка уже выбрана, то сбрасываем выделение \r\n if (this.state.col1RowSelectedNmb === index) {\r\n this.setState({ col1RowSelectedNmb: -1 });\r\n this.setState({ col2RowSelectedNmb: -1 });\r\n return;\r\n }\r\n if (this.state.col2RowSelectedNmb === -1)\r\n this.setState({ col1RowSelectedNmb: index });\r\n else {\r\n //сбрасываем во втотой колонке возможное совпадение\r\n for (let i = 0; i < this.userSelection.length; i++) {\r\n if (this.userSelection[i] === index)\r\n this.userSelection[i] = -1;\r\n }\r\n\r\n this.userSelection[this.state.col2RowSelectedNmb] = index;\r\n this.firstColumnRowIsSelected[index] = true;\r\n this.setState({ col1RowSelectedNmb: -1 });\r\n this.setState({ col2RowSelectedNmb: -1 });\r\n }\r\n return;\r\n }\r\n\r\n col2Click = (e, index) => {\r\n if (this.state.col2RowSelectedNmb === index) {\r\n this.setState({ col1RowSelectedNmb: -1 });\r\n this.setState({ col2RowSelectedNmb: -1 });\r\n return;\r\n }\r\n\r\n //если выбираемая ячейка во второй колнке уже выбрана (т.е. this.userSelection[index]!==-1),\r\n //то нужно в первой колонке связанное значение сделать невыбранным\r\n if (this.userSelection[index] !== -1) {\r\n let n = this.userSelection[index];\r\n this.firstColumnRowIsSelected[n] = false;\r\n }\r\n\r\n this.userSelection[index] = -1;\r\n\r\n if (this.state.col1RowSelectedNmb === -1) {\r\n this.setState({ col2RowSelectedNmb: index });\r\n }\r\n else {\r\n\r\n //сбрасываем во втотой колонке возможное совпадение\r\n for (let i = 0; i < this.userSelection.length; i++) {\r\n if (this.userSelection[i] === this.state.col1RowSelectedNmb)\r\n this.userSelection[i] = -1;\r\n }\r\n\r\n this.firstColumnRowIsSelected[this.state.col1RowSelectedNmb] = true;\r\n this.userSelection[index] = this.state.col1RowSelectedNmb;\r\n this.setState({ col1RowSelectedNmb: -1 });\r\n this.setState({ col2RowSelectedNmb: -1 });\r\n }\r\n }\r\n\r\n btnCheckClick = (event) => {\r\n let errorCount = 0;\r\n console.log(this.secondColVals);\r\n console.log(this.secondColShuffledVals);\r\n console.log(this.userSelection);\r\n for (let i = 0; i < this.firstColVals.length; i++) {\r\n let n = this.userSelection[i];\r\n if (this.secondColVals[n] === this.secondColShuffledVals[i])\r\n continue;\r\n else\r\n errorCount++;\r\n }\r\n if (errorCount > 0)\r\n alert(errorCount + \" ошибок\");\r\n else {\r\n //alert(\" всё верно!\");\r\n\r\n let n = this.state.excerciseNmb;\r\n n = n + 1;\r\n\r\n if (n >= this.exercises.length) {\r\n if (this.parent != null) {\r\n this.parent.setExerciseComplete(this.exerciseId);\r\n this.parent.setNextExercise();\r\n }\r\n return;\r\n }\r\n this.firstColVals = this.exercises[n].column1;\r\n this.secondColVals = this.exercises[n].column2;\r\n this.secondColShuffledVals = this.shuffle([...this.secondColVals]);\r\n\r\n this.userSelection = [];\r\n this.firstColumnRowIsSelected = [];\r\n\r\n for (let i = 0; i < this.secondColVals.length; i++) {\r\n this.userSelection.push(-1);\r\n this.firstColumnRowIsSelected.push(false);\r\n }\r\n\r\n this.correctSelection = this.GetCorrectSelection();\r\n this.setState({ exercise: this.exercises[n] });\r\n this.setState({ excerciseNmb: n });\r\n }\r\n // let array = this.wordsDivRef.current.children;\r\n // let result = \"\";\r\n // result = array[0].innerText;\r\n // for (let i = 1; i < array.length; i++) {\r\n // result = result + \" \" + array[i].innerText;\r\n // }\r\n\r\n // if (result === this.state.exercise.espSentence) {\r\n // this.nextOnClick();\r\n // } else {\r\n // alert(\" - неверный ответ!\");\r\n // }\r\n };\r\n renderComponent() {\r\n return (\r\n
\r\n
\r\n {this.state.taskText}\r\n
\r\n
\r\n \r\n \r\n {this.firstColVals.map((fValue, index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
this.col1Click(e, index)}>\r\n
\r\n \r\n {index + 1}\r\n \r\n
\r\n {fValue}\r\n
this.col2Click(e, index)}>\r\n
\r\n \r\n {this.userSelection[index] === -1 ? 'X' : (this.userSelection[index] + 1)}\r\n \r\n
\r\n {this.secondColShuffledVals[index]}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderComponentHelp() {\r\n return (\r\n
\r\n
\r\n {this.state.taskText}\r\n
\r\n
\r\n \r\n \r\n {this.firstColVals.map((fValue, index) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n \r\n {index + 1}\r\n \r\n
\r\n {fValue}\r\n
\r\n
\r\n \r\n {this.correctSelection[index] + 1}\r\n \r\n
\r\n {this.secondColShuffledVals[index]}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n showHelp = (event) => {\r\n console.log(\"showHelp\");\r\n if (this.state.isHelpViewMode === true) return;\r\n this.setState({ isHelpViewMode: true });\r\n }\r\n\r\n hideHelp = (event) => {\r\n console.log(\"hideHelp\");\r\n if (this.state.isHelpViewMode === false) return;\r\n this.setState({ isHelpViewMode: false });\r\n // let boolVal = this.state.isHelpViewMode;\r\n // boolVal = !boolVal;\r\n // this.setState({ isHelpViewMode: boolVal });\r\n // console.log(boolVal);\r\n\r\n }\r\n\r\n async populateData() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/exercise/' + this.exerciseId, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.exercises = data.exercises;\r\n this.firstColVals = data.exercises[0].column1;\r\n this.secondColVals = data.exercises[0].column2;\r\n this.secondColShuffledVals = this.shuffle([...this.secondColVals]);\r\n //this.userSelection \r\n for (let i = 0; i < this.secondColVals.length; i++) {\r\n this.userSelection.push(-1);\r\n this.firstColumnRowIsSelected.push(false);\r\n }\r\n this.correctSelection = this.GetCorrectSelection();\r\n\r\n this.setState({ taskText: data.taskText });\r\n this.setState({ exercise: this.exercises[0] });\r\n this.setState({ excerciseNmb: 0 });\r\n this.setState({ loading: false });\r\n }\r\n\r\n}","import React from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport \"./StatementByVoice.css\";\r\n\r\nconst StatementTagsFromString = ({ statement, stmtNmb, taskNmb, regisrageMyRef, ...props }) => {\r\n var str = statement.statement;\r\n var strParts = str.split('*').filter((val) => val !== '');\r\n return (\r\n
\r\n {strParts.map((part, index) =>\r\n <>{part}\r\n \r\n \r\n )\r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst StatementCombobox = ({ opts, optionIndex, curKey, regisrageMyRef, ...props }) => {\r\n const ref = React.createRef();\r\n let contents = (opts.length <= optionIndex) ? <>\r\n :\r\n ();\r\n regisrageMyRef(curKey, ref);\r\n return (\r\n <>\r\n {contents}\r\n \r\n )\r\n}\r\n\r\nexport default class CbxStatement extends React.Component {\r\n constructor(props) {\r\n super();\r\n this.parent = props.parentComponent;\r\n this.exerciseId = props.exerciseId;\r\n this.exercises = null;\r\n this.state = {\r\n loading: true,\r\n excerciseNmb: 0,\r\n exercise: null\r\n };\r\n this.resultsMap = null;\r\n this.cbxMap = null;\r\n }\r\n\r\n regisrageMyRef = (curKey, ref) => {\r\n console.log(\"REGISRATE!!!!!\" + curKey)\r\n console.log(ref);\r\n if (this.cbxMap === null)\r\n this.cbxMap = new Map();\r\n this.cbxMap.set(curKey, ref);\r\n }\r\n\r\n\r\n btnCheckClick = (event) => {\r\n\r\n this.getRightAnswersMap(this.state.exercise);\r\n console.log(\"CHECK_START!!!!!!!!!!!!!!!!!!!!!\");\r\n console.log(this.resultsMap);\r\n console.log(this.cbxMap);\r\n\r\n if (this.resultsMap === null || this.cbxMap === null)\r\n alert(\"ERROR: Map is empty!\");\r\n let badAnswersCbxArray = [];\r\n this.resultsMap.forEach((value, key, map) => {\r\n //value===this.cbxMap.get(key).\r\n console.log(\"KEY: \" + key + \";VALUE:\" + value);\r\n console.log(this.cbxMap.get(key));\r\n let ref = this.cbxMap.get(key);\r\n let n = ref.current.options.selectedIndex;\r\n let text = ref.current.options[n].text;\r\n console.log(text);\r\n if (text !== value)\r\n badAnswersCbxArray.push(ref);\r\n });\r\n\r\n if (badAnswersCbxArray.length === 0) {\r\n this.cbxMap = new Map();\r\n this.resultsMap = new Map();\r\n this.btnNextClick();\r\n }\r\n else {\r\n let msg = \"\";\r\n badAnswersCbxArray.map((ref, index) => msg = msg + index + \". \" + ref.current.options[ref.current.options.selectedIndex].text + \"; \");\r\n alert(msg);\r\n }\r\n }\r\n\r\n getRightAnswersMap = (exercise) => {\r\n this.resultsMap = new Map();\r\n const taskNmb = this.state.excerciseNmb;\r\n // exercise.statements.map((statement, stmtNmb) => {\r\n // statement.answers.map((answer, optionIndex) => {\r\n // this.resultsMap.set(taskNmb + '_statement' + stmtNmb + '_option' + optionIndex, answer);\r\n // })\r\n // })\r\n\r\n exercise.statements.forEach((statement, stmtNmb) => {\r\n statement.answers.forEach((answer, optionIndex) => {\r\n this.resultsMap.set(taskNmb + '_statement' + stmtNmb + '_option' + optionIndex, answer);\r\n })\r\n })\r\n }\r\n\r\n btnNextClick = (event) => {\r\n if (this.exercises.length === this.state.excerciseNmb + 1) {\r\n //alert(\"Конец\");\r\n if (this.parent != null) {\r\n this.parent.setExerciseComplete(this.exerciseId);\r\n this.parent.setNextExercise();\r\n }\r\n return;\r\n } else {\r\n let newNmb = this.state.excerciseNmb + 1;\r\n //this.exercise = this.exercises[newNmb];\r\n this.setState({ excerciseNmb: newNmb });\r\n this.setState({ exercise: this.exercises[newNmb] });\r\n\r\n //console.log(newNmb);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n\r\n }\r\n\r\n componentDidUpdate() {\r\n\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading exercise (StatementByVoice)...

\r\n : this.renderSentence();\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n onSelectChange = (e, curKey) => {\r\n console.log(\"EVENT \" + curKey);\r\n }\r\n\r\n renderSentence() {\r\n return (\r\n
\r\n
\r\n {this.state.exercise.allText}\r\n\r\n
\r\n {this.state.exercise.statements.map((stmnt, index) =>\r\n )}\r\n
\r\n \r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n );\r\n }\r\n\r\n async populateData() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/exercise/' + this.exerciseId, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.exercises = data;\r\n this.setState({ exercise: this.exercises[0] });\r\n this.setState({ excerciseNmb: 0 });\r\n this.setState({ loading: false });\r\n }\r\n}","import React from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport \"./StatementByVoice.css\";\r\nimport InputMask from \"react-input-mask\";\r\n\r\nconst StatementTagsFromString = ({ statement, stmtNmb, taskNmb, getMaskForWord, regisrageMyRef, showHelp, ...props }) => {\r\n var str = statement.statement;\r\n var strParts = str.split('*').filter((val) => val !== '');\r\n if (str[0] === '*') {\r\n strParts.unshift('');\r\n }\r\n\r\n\r\n return (\r\n
\r\n {strParts.map((part, index) =>\r\n <>{part}\r\n {(showHelp === false) ?\r\n \r\n :\r\n }\r\n {/*{statement.answers[index]}}*/}\r\n \r\n )\r\n }\r\n
\r\n
{statement.translation}
\r\n
\r\n\r\n )\r\n}\r\n\r\nconst StatementFillInTheGaps = ({ answ, answIndex, curKey, getMaskForWord, regisrageMyRef, ...props }) => {\r\n const ref = React.createRef();\r\n let contents = (answ.length <= answIndex) ? <>\r\n :\r\n ;\r\n regisrageMyRef(curKey, ref);\r\n return (\r\n <>\r\n {contents}\r\n \r\n )\r\n}\r\n\r\nconst StatementFillInTheGapsHelp = ({ answ, answIndex, curKey, getMaskForWord, regisrageMyRef, ...props }) => {\r\n const ref = React.createRef();\r\n let contents = (answ.length <= answIndex) ? <>\r\n :\r\n ;\r\n //regisrageMyRef(curKey, ref);\r\n\r\n return (\r\n <>\r\n {contents}\r\n \r\n )\r\n}\r\n\r\nexport default class FillInTheGaps extends React.Component {\r\n constructor(props) {\r\n super();\r\n this.parent = props.parentComponent;\r\n this.exerciseId = props.exerciseId;\r\n this.exercises = null;\r\n this.state = {\r\n loading: true,\r\n excerciseNmb: 0,\r\n exercise: null,\r\n isHelpViewMode: false\r\n };\r\n this.resultsMap = null;\r\n this.cbxMap = null;\r\n }\r\n\r\n getMaskForWord(word) {\r\n\r\n const n = word.length;\r\n let result = \"\";\r\n\r\n for (let i = 0; i < n; i++) {\r\n if (word[i] === ' ' || word[i] === '-' || word[i] === ',' || word[i] === '.' || word[i] === '!' || word[i] === '?' || word[i] === '¿' || word[i] === '¡' || word[i] === ':')\r\n result = result + word[i]\r\n else\r\n result = result + '*';\r\n }\r\n return result;\r\n }\r\n\r\n\r\n regisrageMyRef = (curKey, ref) => {\r\n console.log(\"REGISRATE!!!!!\" + curKey)\r\n console.log(ref);\r\n if (this.cbxMap === null)\r\n this.cbxMap = new Map();\r\n this.cbxMap.set(curKey, ref);\r\n }\r\n\r\n\r\n btnCheckClick = (event) => {\r\n\r\n this.getRightAnswersMap(this.state.exercise);\r\n // console.log(\"CHECK_START!!!!!!!!!!!!!!!!!!!!!\");\r\n // console.log(this.resultsMap);\r\n // console.log(this.cbxMap);\r\n\r\n if (this.resultsMap === null || this.cbxMap === null)\r\n alert(\"ERROR: Map is empty!\");\r\n let badAnswersCbxArray = [];\r\n this.resultsMap.forEach((value, key, map) => {\r\n //value===this.cbxMap.get(key).\r\n // console.log(\"KEY: \" + key + \";VALUE:\" + value);\r\n // console.log(this.cbxMap.get(key));\r\n let ref = this.cbxMap.get(key);\r\n //let n = ref.current.options.selectedIndex;\r\n //let text = ref.current.options[n].text;\r\n let text = ref.current.value;\r\n // console.log(text);\r\n if (text !== value)\r\n badAnswersCbxArray.push(ref);\r\n });\r\n\r\n if (badAnswersCbxArray.length === 0) {\r\n this.cbxMap = new Map();\r\n this.resultsMap = new Map();\r\n this.btnNextClick();\r\n }\r\n else {\r\n let msg = \"\";\r\n badAnswersCbxArray.map((ref, index) => msg = msg + index + \". \" + ref.current.value + \"; \");\r\n alert(msg);\r\n }\r\n }\r\n\r\n getRightAnswersMap = (exercise) => {\r\n this.resultsMap = new Map();\r\n const taskNmb = this.state.excerciseNmb;\r\n // exercise.statements.map((statement, stmtNmb) => {\r\n // statement.answers.map((answer, optionIndex) => {\r\n // this.resultsMap.set(taskNmb + '_statement' + stmtNmb + '_option' + optionIndex, answer);\r\n // })\r\n // })\r\n\r\n exercise.statements.forEach((statement, stmtNmb) => {\r\n statement.answers.forEach((answer, optionIndex) => {\r\n this.resultsMap.set(taskNmb + '_statement' + stmtNmb + '_answer' + optionIndex, answer);\r\n })\r\n })\r\n }\r\n\r\n btnNextClick = (event) => {\r\n if (this.exercises.length === this.state.excerciseNmb + 1) {\r\n //alert(\"Конец\");\r\n if (this.parent != null) {\r\n this.parent.setExerciseComplete(this.exerciseId);\r\n this.parent.setNextExercise();\r\n }\r\n return;\r\n } else {\r\n let newNmb = this.state.excerciseNmb + 1;\r\n //this.exercise = this.exercises[newNmb];\r\n this.setState({ excerciseNmb: newNmb });\r\n this.setState({ exercise: this.exercises[newNmb] });\r\n\r\n //console.log(newNmb);\r\n }\r\n }\r\n\r\n shuffle(arr) {\r\n var j, temp;\r\n for (var i = arr.length - 1; i > 0; i--) {\r\n j = Math.floor(Math.random() * (i + 1));\r\n temp = arr[j];\r\n arr[j] = arr[i];\r\n arr[i] = temp;\r\n }\r\n return arr;\r\n }\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n\r\n }\r\n\r\n componentDidUpdate() {\r\n\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading exercise (StatementByVoice)...

\r\n : this.renderSentence();\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n showHelp = (event) => {\r\n if (this.state.isHelpViewMode === true) return;\r\n this.setState({ isHelpViewMode: true });\r\n console.log(\"showHelp\");\r\n }\r\n\r\n hideHelp = (event) => {\r\n if (this.state.isHelpViewMode === false) return;\r\n this.setState({ isHelpViewMode: false });\r\n console.log(\"hideHelp\");\r\n }\r\n\r\n onSelectChange = (e, curKey) => {\r\n console.log(\"EVENT \" + curKey);\r\n }\r\n\r\n renderSentence() {\r\n return (\r\n
\r\n
\r\n {this.state.exercise.allText}\r\n\r\n
\r\n {this.state.exercise.statements.map((stmnt, index) =>\r\n )}\r\n
\r\n \r\n
\r\n
\r\n \r\n
{/**/}\r\n
\r\n );\r\n }\r\n\r\n async populateData() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/exercise/' + this.exerciseId, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.exercises = data;\r\n this.exercises = this.shuffle(this.exercises);\r\n this.setState({ exercise: this.exercises[0] });\r\n this.setState({ excerciseNmb: 0 });\r\n this.setState({ loading: false });\r\n }\r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService'\r\nimport './Lesson.css';\r\nimport ImageByVoice from './ImageByVoice';\r\nimport SentenceContructor from './SentenceСonstructor';\r\nimport StatementByVoice from './StatementByVoice';\r\nimport JoinValues from './JoinValues';\r\nimport currentCourceService from './CurrentCourceService';\r\nimport CbxStatement from './CbxStatement';\r\nimport FillInTheGaps from './FillInTheGaps';\r\n\r\nexport class Lesson extends Component {\r\n\r\n static displayName = \"Lesson\";\r\n\r\n constructor(props) {\r\n super(props);\r\n const queryParams = new URLSearchParams(window.location.search);\r\n this.lessonId = queryParams.get('id');\r\n this.courceId = queryParams.get('courceId');\r\n console.log(\"LESSON_ID = \" + this.lessonId);\r\n this.isRedoMode = false;\r\n this.state = {\r\n lesson: null,\r\n exercises: [],\r\n exercise: null,\r\n loading: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateLesson();\r\n }\r\n\r\n onUnitClick = (e, nmb) => {\r\n // if (this.state.unit.unitNumber === nmb) return;\r\n // this.setState({ unit: this.state.units[nmb] });\r\n // this.setState({ lessons: this.state.units[nmb].lessons });\r\n // this.setState({ lessonNmb: 0 });\r\n }\r\n\r\n onExerciseClick = (e, nmb) => {\r\n console.log(\"nmb=\" + nmb);\r\n if (this.state.exercise.exerciseNumber === nmb) return;\r\n console.log(\"exNmb=\" + this.state.exercise.exerciseNumber);\r\n this.setState({ exercise: this.state.exercises[nmb] });\r\n }\r\n\r\n setNextExercise = () => {\r\n // let n = this.state.exercise.exerciseNumber;\r\n // n = n + 1;\r\n let n = this.getNextExerciseNumb();\r\n\r\n if (n === this.state.exercises.length) {\r\n //alert(\"end of lesson!\");\r\n const url = `${window.location.protocol}//${window.location.host}/cources?id=${this.courceId}`;\r\n window.location.assign(url);\r\n }\r\n\r\n else\r\n this.setState({ exercise: this.state.exercises[n] });\r\n }\r\n\r\n getNextExerciseNumb() {\r\n let n = this.state.exercise.exerciseNumber;\r\n n = n + 1;\r\n if (this.isRedoMode === true) return n;\r\n\r\n while (n < this.state.exercises.length) {\r\n if (this.state.lesson.extendExercises[n].isCompleted === false)\r\n return n;\r\n n++;\r\n }\r\n return n;\r\n }\r\n\r\n getFirstExerciseNumb(lesson) {\r\n let n = 0;\r\n if (this.isRedoMode === true) return n;\r\n console.log(\"LESSON=\");\r\n console.log(lesson);\r\n console.log(lesson.exercises.length);\r\n\r\n while (n < lesson.exercises.length) {\r\n if (lesson.extendExercises[n].isCompleted === false)\r\n return n;\r\n n++;\r\n }\r\n return n;\r\n }\r\n\r\n\r\n\r\n async setExerciseComplete(exerciseId) {\r\n const token = await authService.getAccessToken();\r\n const url = `${window.location.protocol}//${window.location.host}/api/exercise/${exerciseId}`;\r\n await fetch(url, {\r\n method: 'PUT',\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n }\r\n\r\n renderExercise() {\r\n let exerciseComponent;\r\n switch (this.state.exercise.reactComponent) {\r\n case 'ImageByVoice':\r\n exerciseComponent = < ImageByVoice exerciseId={this.state.exercise.id} parentComponent={this} />;\r\n break;\r\n case 'StatementByVoice':\r\n exerciseComponent = \r\n break;\r\n case 'CbxStatement':\r\n exerciseComponent = \r\n break;\r\n case 'FillInTheGaps':\r\n exerciseComponent = \r\n break;\r\n case 'SentenceСonstructor':\r\n exerciseComponent = \r\n break;\r\n case 'JoinValues':\r\n exerciseComponent = \r\n break;\r\n default:\r\n exerciseComponent =
ERROR
\r\n break;\r\n }\r\n return (\r\n
\r\n
\r\n Урок {this.state.lesson.lessonName}\r\n
\r\n
\r\n {exerciseComponent}\r\n
\r\n\r\n
\r\n {/* Ejercicios de la lección */}\r\n {this.state.exercises.map((exercise, index) =>\r\n
this.onExerciseClick(e, index)}>\r\n {(exercise.exerciseNumber + 1)}\r\n
\r\n )}\r\n {/* номер упражнения {this.state.exerciseNmb}\r\n\r\n кол-во упраженений {this.state.exercises.length} */}\r\n
\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading lesson...

\r\n : this.renderExercise();\r\n\r\n return (\r\n
\r\n {/*

Weather forecast

\r\n

This component demonstrates fetching data from the server.

*/}\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateLesson() {\r\n const token = await authService.getAccessToken();\r\n const url = `${window.location.protocol}//${window.location.host}/api/lesson/${this.lessonId}`;\r\n //console.log(\"#####:\" + url);\r\n const response = await fetch(url, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n\r\n console.log(data);\r\n var completedCount = data.extendExercises.filter(a => a.isCompleted === true).length;\r\n console.log(\"completed count = \" + completedCount);\r\n console.log(\"allcount = \" + data.exercises.length);\r\n this.isRedoMode = completedCount === data.exercises.length ? true : false;\r\n console.log(\"this.isRedoMode = \" + this.isRedoMode);\r\n console.log(\"startFunc\");\r\n let n = this.getFirstExerciseNumb(data);\r\n console.log(\"endFunc\");\r\n\r\n this.setState({\r\n lesson: data,\r\n exercises: data.exercises,\r\n exercise: data.exercises[n]\r\n });\r\n\r\n this.setState({\r\n loading: false\r\n });\r\n\r\n // console.log(\"JastTestValue=\" + currentCourceService._testValue);\r\n // console.log(\"testValue=\" + currentCourceService.GetTestValeu());\r\n // console.log(\"testValue=\" + currentCourceService.GetTestValeu());\r\n // console.log(\"currentCourceId=\" + currentCourceService._currentCourceId);\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n//import authService from './api-authorization/AuthorizeService'\r\nimport './VocabularyGroup.css';\r\nimport InputMask from \"react-input-mask\";\r\n\r\nexport class VocabularyWrite extends Component {\r\n\r\n static displayName = \"VocabularyWrite\";\r\n\r\n constructor(props) {\r\n super(props);\r\n this.cards = props.cards;\r\n this.parent = props.parentComponent;\r\n this.audioWord = new Audio(); // Создаём новый элемент Audio\r\n this.audioExample = new Audio();\r\n this.toLearn = this.shuffle([...props.cards]);\r\n this.userInputRef = React.createRef();\r\n this.toRepeat = [];\r\n this.failAttemptCount = 0;\r\n this.state = {\r\n card: this.toLearn[0],\r\n buttons: 'one',\r\n shorErrorInfo: false,\r\n showCorrectWordInfo: false\r\n };\r\n this.n = 0;\r\n\r\n }\r\n\r\n getMaskForWord(word) {\r\n\r\n const n = word.length;\r\n let result = \"\";\r\n\r\n for (let i = 0; i < n; i++) {\r\n if (word[i] === ' ' || word[i] === '-' || word[i] === ',' || word[i] === '.' || word[i] === '!' || word[i] === '?' || word[i] === '¿' || word[i] === '¡' || word[i] === ':')\r\n result = result + word[i]\r\n else\r\n result = result + '*';\r\n }\r\n return result;\r\n }\r\n\r\n shuffle(arr) {\r\n var j, temp;\r\n for (var i = arr.length - 1; i > 0; i--) {\r\n j = Math.floor(Math.random() * (i + 1));\r\n temp = arr[j];\r\n arr[j] = arr[i];\r\n arr[i] = temp;\r\n }\r\n return arr;\r\n }\r\n btnCheckClick = (event) => {\r\n this.failAttemptCount = 3;\r\n this.setState({ buttons: 'two' });\r\n }\r\n\r\n btnCorrectClick = (event) => {\r\n this.failAttemptCount = 0;\r\n this.userInputRef.current.value = '';\r\n this.toLearn.shift();\r\n if (this.toLearn.length === 0) {\r\n this.toLearn = this.shuffle([...this.toRepeat]);\r\n this.toRepeat = [];\r\n }\r\n\r\n if (this.toLearn.length === 0) {\r\n //alert(\"END OF GROUP\");\r\n\r\n if (this.parent != null)\r\n this.parent.setNextLevel();\r\n //вызвать метод простановки новой даты повторения\r\n //вернуться к окну словаря\r\n return;\r\n }\r\n\r\n this.setState({\r\n card: this.toLearn[0],\r\n buttons: 'one',\r\n shorErrorInfo: false,\r\n showCorrectWordInfo: false\r\n });\r\n\r\n let headerStr = (this.cards.length - (this.toRepeat.length + this.toLearn.length)) + '/' + this.cards.length;\r\n this.parent.setHaederString(headerStr);\r\n }\r\n\r\n playWord = (event) => {\r\n this.audioWord.src = this.state.card.audio;// Указываем путь к звуку \"клика\" \r\n this.audioWord.autoplay = true; // Автоматически запускаем\r\n }\r\n\r\n\r\n playExample = (event) => {\r\n //var audio = new Audio(); // Создаём новый элемент Audio\r\n this.audioExample.src = this.state.card.sampleAudio; // Указываем путь к звуку \"клика\"\r\n this.audioExample.autoplay = true; // Автоматически запускаем\r\n }\r\n\r\n btnIncorrectClick = (event) => {\r\n this.failAttemptCount = 0;\r\n this.userInputRef.current.value = '';\r\n this.toRepeat.push(this.toLearn[0]);\r\n this.toLearn.shift();\r\n if (this.toLearn.length === 0) {\r\n this.toLearn = this.shuffle([...this.toRepeat]);\r\n this.toRepeat = [];\r\n }\r\n if (this.toLearn.length === 0) {\r\n //alert(\"END OF GROUP\");\r\n return;\r\n }\r\n\r\n let headerStr = (this.cards.length - (this.toRepeat.length + this.toLearn.length)) + '/' + this.cards.length;\r\n this.setState({\r\n card: this.toLearn[0],\r\n buttons: 'one',\r\n shorErrorInfo: false,\r\n showCorrectWordInfo: false\r\n });\r\n\r\n this.parent.setHaederString(headerStr);\r\n }\r\n\r\n onKeyUp = (event) => {\r\n if (event.keyCode === 13) {\r\n this.userInputRef.current.value = this.userInputRef.current.value.replace('E', 'é')\r\n .replace('I', 'í').replace('O', 'ó').replace('A', 'á').replace('N', 'ñ').replace('U', 'ú');\r\n if (this.userInputRef.current.value === this.state.card.word) {\r\n //alert(\"Верно!\");\r\n if (this.failAttemptCount > 2)\r\n this.btnIncorrectClick(event);\r\n else\r\n this.btnCorrectClick(event);\r\n }\r\n else {\r\n this.failAttemptCount = this.failAttemptCount + 1;\r\n if (this.failAttemptCount > 2) {\r\n //alert(this.state.card.word);\r\n this.setState({\r\n shorErrorInfo: false,\r\n showCorrectWordInfo: true\r\n });\r\n } else {\r\n this.setState({\r\n shorErrorInfo: true,\r\n showCorrectWordInfo: false\r\n });\r\n // shorErrorInfo:false,\r\n // showCorrectWordInfo:false\r\n }\r\n //alert(\"Ошибка\");\r\n //this.btnIncorrectClick(event);\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n // console.log(this.state.card);\r\n // console.log(this.state.showExamples ? \"SHOW\" : \"HIDE\");\r\n let exampleDiv = this.parent.state.showExamples && this.state.buttons === 'two' ?\r\n
\r\n
\r\n \r\n Пример:\r\n \r\n {this.state.card.sample}\r\n \r\n
\r\n
\r\n {this.state.card.sampleTranslation}\r\n
\r\n
\r\n :\r\n
\r\n\r\n let buttonsDiv = this.state.buttons === 'one' ?\r\n :\r\n
\r\n {/*
{this.state.card.word}
*/}\r\n {/* \r\n */}\r\n
;\r\n\r\n let wordDiv = this.state.buttons === 'one' ?\r\n <> :\r\n
{this.state.card.word}
\r\n\r\n let errorInfo = this.state.shorErrorInfo === true ?
Неверно
: <>\r\n let correctWordInfo = this.state.showCorrectWordInfo === true ?
Введите \"{this.state.card.word}\"
: <>\r\n\r\n return (\r\n
\r\n
\"IMG\"
\r\n
{this.state.card.translation}
\r\n {errorInfo}\r\n {correctWordInfo}\r\n
this.onKeyUp(e)} />
\r\n
\r\n {wordDiv}\r\n {exampleDiv}\r\n {buttonsDiv}\r\n
\r\n
\r\n )\r\n }\r\n}","import React, { Component } from 'react';\r\n//import authService from './api-authorization/AuthorizeService'\r\nimport './VocabularyGroup.css';\r\n\r\nexport class VocabularyGuess extends Component {\r\n\r\n static displayName = \"VocabularyGuess\";\r\n\r\n constructor(props) {\r\n super(props);\r\n this.cards = props.cards;\r\n this.parent = props.parentComponent;\r\n //this.showExamples = props.showExamples;\r\n this.audioWord = new Audio(); // Создаём новый элемент Audio\r\n this.audioExample = new Audio();\r\n this.toLearn = this.shuffle([...props.cards]);\r\n this.toRepeat = [];\r\n this.state = {\r\n card: this.toLearn[0],\r\n buttons: 'one',\r\n //showExamples: false\r\n };\r\n this.n = 0;\r\n }\r\n\r\n shuffle(arr) {\r\n var j, temp;\r\n for (var i = arr.length - 1; i > 0; i--) {\r\n j = Math.floor(Math.random() * (i + 1));\r\n temp = arr[j];\r\n arr[j] = arr[i];\r\n arr[i] = temp;\r\n }\r\n return arr;\r\n }\r\n\r\n\r\n\r\n btnCheckClick = (event) => {\r\n this.setState({ buttons: 'two' });\r\n }\r\n\r\n btnCorrectClick = (event) => {\r\n this.toLearn.shift();\r\n if (this.toLearn.length === 0) {\r\n this.toLearn = this.shuffle([...this.toRepeat]);\r\n this.toRepeat = [];\r\n }\r\n\r\n if (this.toLearn.length === 0) {\r\n //alert(\"END OF GROUP\");\r\n\r\n if (this.parent != null)\r\n this.parent.setNextLevel();\r\n //вызвать метод простановки новой даты повторения\r\n //вернуться к окну словаря\r\n return;\r\n }\r\n\r\n this.setState({ card: this.toLearn[0], buttons: 'one' });\r\n\r\n let headerStr = (this.cards.length - (this.toRepeat.length + this.toLearn.length)) + '/' + this.cards.length;\r\n this.parent.setHaederString(headerStr);\r\n }\r\n\r\n playWord = (event) => {\r\n this.audioWord.src = this.state.card.audio;// Указываем путь к звуку \"клика\" \r\n this.audioWord.autoplay = true; // Автоматически запускаем\r\n }\r\n\r\n\r\n playExample = (event) => {\r\n //var audio = new Audio(); // Создаём новый элемент Audio\r\n this.audioExample.src = this.state.card.sampleAudio; // Указываем путь к звуку \"клика\"\r\n this.audioExample.autoplay = true; // Автоматически запускаем\r\n }\r\n\r\n btnIncorrectClick = (event) => {\r\n this.toRepeat.push(this.toLearn[0]);\r\n this.toLearn.shift();\r\n if (this.toLearn.length === 0) {\r\n this.toLearn = this.shuffle([...this.toRepeat]);\r\n this.toRepeat = [];\r\n }\r\n if (this.toLearn.length === 0) {\r\n //alert(\"END OF GROUP\");\r\n return;\r\n }\r\n\r\n let headerStr = (this.cards.length - (this.toRepeat.length + this.toLearn.length)) + '/' + this.cards.length;\r\n this.setState({ card: this.toLearn[0], buttons: 'one' });\r\n this.parent.setHaederString(headerStr);\r\n }\r\n\r\n\r\n render() {\r\n console.log(this.state.card);\r\n console.log(this.state.showExamples ? \"SHOW\" : \"HIDE\");\r\n let exampleDiv = this.parent.state.showExamples && this.state.buttons === 'two' ?\r\n
\r\n
\r\n \r\n Пример:\r\n \r\n {this.state.card.sample}\r\n \r\n
\r\n
\r\n {this.state.card.sampleTranslation}\r\n
\r\n
\r\n :\r\n
\r\n\r\n let buttonsDiv = this.state.buttons === 'one' ?\r\n :\r\n
\r\n {/*
{this.state.card.word}
*/}\r\n \r\n \r\n
;\r\n\r\n let wordDiv = this.state.buttons === 'one' ?\r\n <> :\r\n
{this.state.card.word}
\r\n\r\n return (\r\n
\r\n
\"IMG\"
\r\n
{this.state.card.translation}
\r\n
\r\n {wordDiv}\r\n {exampleDiv}\r\n {buttonsDiv}\r\n
\r\n\r\n
\r\n )\r\n }\r\n\r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService'\r\nimport './VocabularyGroup.css';\r\nimport currentCourceService from './CurrentCourceService';\r\n\r\nimport { VocabularyWrite } from './VocabularyWrite';\r\nimport { VocabularyGuess } from './VocabularyGuess';\r\n\r\nexport class VocabularyGroup extends Component {\r\n\r\n constructor(props) {\r\n\r\n console.log(\"!!!!!!!!!!!!!!!\");\r\n super(props);\r\n const queryParams = new URLSearchParams(window.location.search);\r\n this.groupId = queryParams.get('id');\r\n //this.groupId = queryParams.get('groupId');\r\n //sthis.groupId = 2;\r\n // console.log(\"GROUP_ID = \" + this.groupId); \r\n this.modes = ['guess', 'write'];\r\n this.state = {\r\n mode: 0,\r\n group: null,\r\n cards: [],\r\n headerString: \"\",\r\n showExamples: false,\r\n loading: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateLesson();\r\n }\r\n\r\n loadAllImages(cards) {\r\n console.log(\"image lading\")\r\n cards.forEach((card) => {\r\n const img = new Image();\r\n img.src = card.image;\r\n console.log(card.image);\r\n });\r\n }\r\n\r\n onUnitClick = (e, nmb) => {\r\n\r\n }\r\n\r\n setHaederString(headerStr) {\r\n this.setState({ headerString: headerStr });\r\n }\r\n\r\n onShowExampleValueChange = (event) => {\r\n console.log(event.currentTarget.checked)\r\n this.setState({ showExamples: event.currentTarget.checked });\r\n //console.log(\"aaa\" + this.state.showExamples);\r\n }\r\n\r\n onModeChange = (event) => {\r\n //console.log(event.currentTarget.selectedIndex); \r\n this.setState({ mode: event.currentTarget.selectedIndex });\r\n // switch (event.currentTarget.value) {\r\n // case 'Самопроверка':\r\n // this.setState({ mode: 0 });\r\n // break;\r\n // case 'Написание слов':\r\n // this.setState({ mode: 1 });\r\n // break;\r\n // }\r\n }\r\n\r\n async setNextLevel() {\r\n //вызвать метод простановки новой даты повторения\r\n //вернуться к окну словаря\r\n\r\n const token = await authService.getAccessToken();\r\n const url = `${window.location.protocol}//${window.location.host}/api/vocabularyGroup/${this.groupId}`;\r\n console.log(\"#####:\" + url);\r\n const response = await fetch(url, {\r\n method: 'PUT',\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n //const data = await response.json();\r\n\r\n const urlVocabularies = `${window.location.protocol}//${window.location.host}/vocabularies`;\r\n window.location.assign(urlVocabularies);\r\n }\r\n\r\n\r\n renderExercise() {\r\n let vocabularyComponent;\r\n switch (this.modes[this.state.mode]) {\r\n case 'write':\r\n vocabularyComponent = ;\r\n break;\r\n case 'guess':\r\n vocabularyComponent = \r\n break;\r\n default:\r\n vocabularyComponent =
ERROR
\r\n break;\r\n }\r\n return (\r\n
\r\n
\r\n {this.state.headerString}\r\n \r\n
\r\n
\r\n {vocabularyComponent}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading lesson...

\r\n : this.renderExercise();\r\n return (\r\n
\r\n {/*

Weather forecast

\r\n

This component demonstrates fetching data from the server.

*/}\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateLesson() {\r\n const token = await authService.getAccessToken();\r\n const url = `${window.location.protocol}//${window.location.host}/api/vocabularyGroup/${this.groupId}`;\r\n const response = await fetch(url, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n\r\n this.setState({\r\n group: data,\r\n cards: data.wordCards,\r\n headerString: \"0/\" + data.wordCards.length\r\n });\r\n\r\n this.loadAllImages(data.wordCards);\r\n\r\n this.setState({\r\n loading: false\r\n });\r\n\r\n // console.log(\"JastTestValue=\" + currentCourceService._testValue);\r\n // console.log(\"testValue=\" + currentCourceService.GetTestValeu());\r\n // console.log(\"testValue=\" + currentCourceService.GetTestValeu());\r\n // console.log(\"currentCourceId=\" + currentCourceService._currentCourceId);\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService'\r\nimport './Vocabulary.css';\r\n\r\nexport class Vocabulary extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n units: [],\r\n unit: null,\r\n groups: [],\r\n loading: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateVocabulary();\r\n }\r\n\r\n onUnitClick = (e, nmb) => {\r\n if (this.state.unit.unitNumber === nmb) return;\r\n this.setState({ unit: this.state.units[nmb] });\r\n this.setState({ groups: this.state.units[nmb].vocabularyGroups })\r\n // this.setState({ lessons: this.state.units[nmb].lessons });\r\n // this.setState({ lessonNmb: 0 });\r\n }\r\n\r\n onGroupClic = (e, id) => {\r\n ///api/vocabularyGroup/\r\n const url = `${window.location.protocol}//${window.location.host}/vocabularyGroup?id=${id}`;\r\n // console.log(url);\r\n window.location.assign(url);\r\n }\r\n\r\n renderCourceInfo() {\r\n return (\r\n
\r\n

VOCABULARIO

\r\n\r\n
\r\n
UNIDADES
\r\n {this.state.units.map((unit, index) =>\r\n
this.onUnitClick(e, index)}>\r\n {(unit.name)}\r\n
\r\n )}\r\n
\r\n
\r\n\r\n
\r\n {this.state.groups.map((group, index) =>\r\n
\r\n {group.name}\r\n {group.userNotify} ({group.userStudyLevel}из7)\r\n \r\n
)}\r\n
\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading vocabulary...

\r\n : this.renderCourceInfo();\r\n\r\n return (\r\n
\r\n {/*

Weather forecast

\r\n

This component demonstrates fetching data from the server.

*/}\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateVocabulary() {\r\n const token = await authService.getAccessToken();\r\n console.log(\"populateVocabulary\");\r\n //const url = `${window.location.protocol}//${window.location.host}/api/vocabularyinfo/${1}`;\r\n const url = `${window.location.protocol}//${window.location.host}/api/vocabularyinfo`;\r\n console.log(url);\r\n const response = await fetch(url, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n\r\n console.log(\"DONE!\");\r\n const data = await response.json();\r\n //const data = await response.text();\r\n console.log(data);\r\n //return;\r\n this.setState({\r\n cource: data,\r\n units: data.vocabularyUnits,\r\n unit: data.vocabularyUnits[0],\r\n groups: data.vocabularyUnits[0].vocabularyGroups\r\n });\r\n this.setState({\r\n loading: false\r\n });\r\n\r\n }\r\n\r\n}","import React from 'react';\r\n\r\nexport class TestComponent1 extends React.Component {\r\n constructor(props) {\r\n super();\r\n //this.testStr = props.dataStr;\r\n this.testStr = \"!!!!!!!!!!!!!!!!!!!1\";\r\n console.log(props);\r\n };\r\n\r\n render() {\r\n console.log(this.testStr);\r\n return (\r\n
\r\n

TestComponent1

\r\n

{this.testStr}

\r\n
\r\n )\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService'\r\nimport './CourceInfo.css';\r\n\r\nexport class CourceInfo extends Component {\r\n\r\n static displayName = \"AAAAAAAA\";\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n cource: null,\r\n units: [],\r\n unit: null,\r\n lessons: [],\r\n lessonNmb: 0,\r\n loading: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateCource();\r\n }\r\n\r\n onUnitClick = (e, nmb) => {\r\n if (this.state.unit.unitNumber === nmb) return;\r\n this.setState({ unit: this.state.units[nmb] });\r\n this.setState({ lessons: this.state.units[nmb].extendLessons });\r\n this.setState({ lessonNmb: 0 });\r\n }\r\n\r\n onLessonClick = (e, nmb) => {\r\n this.setState({ lessonNmb: nmb });\r\n }\r\n\r\n onStartBtnClick = (e, lesson) => {\r\n // console.log(lesson);\r\n const url = `${window.location.protocol}//${window.location.host}/lesson?id=${lesson.id}&courceId=${this.state.cource.id}`;\r\n // console.log(url);\r\n window.location.assign(url);\r\n //window.location.assign(`${window.location.protocol}//` + `${window.location.host}/lesson`);\r\n //window.location.assign(\"https://localhost:5001/ImageByVoice\");\r\n\r\n }\r\n\r\n renderCourceInfo() {\r\n return (\r\n
\r\n {/*

Курс: {this.state.cource.courceName}

*/}\r\n

EJERCICIOS

\r\n {/*
Курс: {this.state.cource.courceName}
*/}\r\n
\r\n
UNIDADES
\r\n {this.state.units.map((unit, index) =>\r\n
this.onUnitClick(e, index)}>\r\n {(unit.unitNumber + 1)}\r\n
\r\n )}\r\n
\r\n {/*
\r\n\r\n
\r\n {this.state.lessons.map((lesson, index) =>\r\n
this.onLessonClick(e, index)}>\r\n Lección {lesson.lessonNumber + 1}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
La lección de {this.state.lessons[this.state.lessonNmb].extendExercises.length} tareas
\r\n
La lección completada en \r\n {Math.round((100 * this.state.lessons[this.state.lessonNmb].extendExercises.filter(x => x.isCompleted === true).length) / this.state.lessons[this.state.lessonNmb].extendExercises.length)}\r\n %
\r\n
\r\n \r\n
\r\n
\r\n
*/}\r\n
\r\n
\r\n {this.state.lessons.map((lesson, index) =>\r\n
this.onLessonClick(e, index)}\r\n >\r\n
Lección {index + 1}
\r\n
de {lesson.extendExercises.length} tareas
\r\n
completada en \r\n {Math.round((100 * lesson.extendExercises.filter(x => x.isCompleted === true).length) / lesson.extendExercises.length)}\r\n %
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n
\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderCourceInfo();\r\n\r\n return (\r\n
\r\n {/*

Weather forecast

\r\n

This component demonstrates fetching data from the server.

*/}\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateCource() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('/api/cource', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n console.log(data);\r\n this.setState({\r\n cource: data,\r\n units: data.extendUnits,\r\n unit: data.extendUnits[0],\r\n lessons: data.extendUnits[0].extendLessons,\r\n lessonNmb: 0\r\n });\r\n\r\n this.setState({\r\n loading: false\r\n });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport { FetchData } from './components/FetchData';\r\nimport { Counter } from './components/Counter';\r\nimport AuthorizeRoute from './components/api-authorization/AuthorizeRoute';\r\nimport ApiAuthorizationRoutes from './components/api-authorization/ApiAuthorizationRoutes';\r\nimport { ApplicationPaths } from './components/api-authorization/ApiAuthorizationConstants';\r\nimport { Lesson } from './components/Lesson';\r\nimport { VocabularyGroup } from './components/VocabularyGroup';\r\nimport { Vocabulary } from './components/Vocabulary';\r\nimport { TestComponent1 } from './components/TestComponent1';\r\n\r\nimport './custom.css'\r\n//import { CourcesList } from './components/CourcesList';\r\nimport { CourceInfo } from './components/CourceInfo';\r\n//import { ImageByVoice } from './components/ImageByVoice';\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render() {\r\n console.log(window.location);\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\n//import registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\n// Uncomment the line above that imports the registerServiceWorker function\r\n// and the line below to register the generated service worker.\r\n// By default create-react-app includes a service worker to improve the\r\n// performance of the application by caching static assets. This service\r\n// worker can interfere with the Identity UI, so it is\r\n// disabled by default when Identity is being used.\r\n//\r\n//registerServiceWorker();\r\n\r\n"],"sourceRoot":""}