From 4cfd433e62af33ec69b4097b6ef3cafb5be742cd Mon Sep 17 00:00:00 2001 From: Roman Yangarber Date: Sun, 22 Dec 2024 01:03:22 +0200 Subject: [PATCH 01/16] change rus flag --- .../images/flags/flag_russian-tricolor.png | Bin 0 -> 223 bytes client/assets/images/flags/flag_russian.png | Bin 223 -> 529 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 client/assets/images/flags/flag_russian-tricolor.png diff --git a/client/assets/images/flags/flag_russian-tricolor.png b/client/assets/images/flags/flag_russian-tricolor.png new file mode 100644 index 0000000000000000000000000000000000000000..500f56da2284e08bc7524bc34cbf490539bad610 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^*MPW>gBeIxJz#4CQv3lvA+G;{0LW(eUsd(Lis5v+ zRJk&c*X`-z7*a9k?RiJR1_vI7jdBm-KSw^;J@<%X8b~o1H2l9e^;x9nY8RqmO7`pM e%yV8*s-!^i;`l1wctiV2kfolkelF{r5}E*CSW3nK literal 0 HcmV?d00001 diff --git a/client/assets/images/flags/flag_russian.png b/client/assets/images/flags/flag_russian.png index 500f56da2284e08bc7524bc34cbf490539bad610..12098af70e6f9aea55164ccb04ee1250772f4591 100644 GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0y~yV5|pX1{P+Z$V$0v2O!0g?&#~tz_78O`%fY(kgt&J z5#-CjP^HGe(9pub@Czu^@PdJ%)PRBERRRNp)eHs(@q#(K0&Rd2`~f~8uK&S6dcrM+ z=4;0uf4i&~)d!SfED7=p4vl_ZD+}TzdAqwXbg;^L06FX>p1!W^FWAJm4CE(k6x0BP zK6$!0hE&{od&iNNK~aF^;8X^_6PgMK8TkKXJ00Yd2ztAKr{wFKC`O=C^1&XiADg7N zZkkQL2_T*I4U_MFn@W)x6=D)e_f;l9a@fRIB8oR3OD*WME{X zYhb2pWE5g(U}a)qWo)QzU|?ln(9tqg2t`9~eoAIqC2kErZ|bfCxz*Fv&t;ucLK6UN C?`V4f literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^*MPW>gBeIxJz#4CQv3lvA+G;{0LW(eUsd(Lis5v+ zRJk&c*X`-z7*a9k?RiJR1_vI7jdBm-KSw^;J@<%X8b~o1H2l9e^;x9nY8RqmO7`pM e%yV8*s-!^i;`l1wctiV2kfolkelF{r5}E*CSW3nK From 303feac6e3f6fc12119fc5d835755a0247707d57 Mon Sep 17 00:00:00 2001 From: Roman Yangarber Date: Mon, 23 Dec 2024 00:33:29 +0200 Subject: [PATCH 02/16] (minor UI adjust) --- .../Lessons/LessonLibrary/LessonListItem.js | 9 +++++---- client/components/LibraryView/StoryListItem.js | 16 ++++++++-------- client/components/StoryView/StoryTopics.js | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/client/components/Lessons/LessonLibrary/LessonListItem.js b/client/components/Lessons/LessonLibrary/LessonListItem.js index 70c0c3a88..4fac7d3f9 100644 --- a/client/components/Lessons/LessonLibrary/LessonListItem.js +++ b/client/components/Lessons/LessonLibrary/LessonListItem.js @@ -65,8 +65,8 @@ const LessonTitle = ({ lesson, selected, disabled, toggleTopic, includeLesson, e >
- +
{
} - trigger={} + trigger={} /> ) @@ -413,7 +413,7 @@ const StoryListItem = ({ story, libraryShown, selectedGroup }) => { isTeacher={isTeacher} />
- {story.flashcardsOnly && ()} + {story.flashcardsOnly && ()} {showGroupNames && } @@ -424,7 +424,7 @@ const StoryListItem = ({ story, libraryShown, selectedGroup }) => { content={} trigger={
- +
} /> @@ -438,7 +438,7 @@ const StoryListItem = ({ story, libraryShown, selectedGroup }) => { content={} trigger={
- +
} /> @@ -451,7 +451,7 @@ const StoryListItem = ({ story, libraryShown, selectedGroup }) => { content={} trigger={
- +
} /> @@ -462,7 +462,7 @@ const StoryListItem = ({ story, libraryShown, selectedGroup }) => { content={} trigger={
- +
} /> @@ -475,7 +475,7 @@ const StoryListItem = ({ story, libraryShown, selectedGroup }) => { content={} trigger={
- +
} /> @@ -488,7 +488,7 @@ const StoryListItem = ({ story, libraryShown, selectedGroup }) => { content={} trigger={
- +
} /> diff --git a/client/components/StoryView/StoryTopics.js b/client/components/StoryView/StoryTopics.js index f813b9914..d650d84fe 100644 --- a/client/components/StoryView/StoryTopics.js +++ b/client/components/StoryView/StoryTopics.js @@ -154,7 +154,7 @@ const StoryTopics = ({ conceptCount, focusedConcept, setFocusedConcept, isContro />} {topic[0]} - + {topic[1].freq} From f7b83074e806a187252a8012832b87f9b78d6f7f Mon Sep 17 00:00:00 2001 From: Roman Yangarber Date: Thu, 26 Dec 2024 17:35:46 +0200 Subject: [PATCH 03/16] increase font-size in practice modes --- client/util/common.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/util/common.js b/client/util/common.js index aed822fea..c91d083bc 100644 --- a/client/util/common.js +++ b/client/util/common.js @@ -569,6 +569,9 @@ export const tooltipFontSizes = { Syriac: '1rem' } export const getTextStyle = (language, type) => { let style = {} + + if (type !== 'title') {style = { fontSize: '1.15rem' }} + if (rightAlignedLanguages.includes(language)) style = { textAlign: 'right', direction: 'rtl' } if (specialFonts[language]) style = { ...style, ...specialFonts[language] } if (type === 'title' && titleFontSizes[language]) { From 98ee727b67736f051195e0e32ce8fe002b59c85e Mon Sep 17 00:00:00 2001 From: Roman Yangarber Date: Thu, 26 Dec 2024 17:42:27 +0200 Subject: [PATCH 04/16] allow HTML in topics, fix headers in practice mode, localizations --- .../AnnotationBox/AnnotationsHiddenView.js | 8 +++---- client/components/AnnotationBox/ListView.js | 8 +++---- .../AnnotationBox/NoAnnotationsView.js | 12 +++++----- .../Word/PreviousExerciseWord.js | 2 +- .../ControlledStoryWord.js | 2 +- client/components/DictionaryHelp/index.js | 14 +++++++++--- .../LessonPracticeTopicsHelp.js | 2 +- client/components/StoryView/StoryTopics.js | 22 +++++++++++++++---- .../revita/en/LC_MESSAGES/messages.json | 13 +++++++---- .../revita/fi/LC_MESSAGES/messages.json | 11 +++++++--- .../revita/it/LC_MESSAGES/messages.json | 11 +++++++--- .../revita/ru/LC_MESSAGES/messages.json | 13 +++++++---- .../revita/zh/LC_MESSAGES/messages.json | 9 ++++++-- 13 files changed, 87 insertions(+), 40 deletions(-) diff --git a/client/components/AnnotationBox/AnnotationsHiddenView.js b/client/components/AnnotationBox/AnnotationsHiddenView.js index 21bb2d8c4..9a4acabb7 100644 --- a/client/components/AnnotationBox/AnnotationsHiddenView.js +++ b/client/components/AnnotationBox/AnnotationsHiddenView.js @@ -1,7 +1,7 @@ import React from 'react' import { useDispatch } from 'react-redux' import { Icon, Popup } from 'semantic-ui-react' -import { FormattedMessage, useIntl } from 'react-intl' +import { FormattedHTMLMessage, FormattedMessage, useIntl } from 'react-intl' import { setAnnotationsVisibility } from 'Utilities/redux/annotationsReducer' const AnnotationsHiddenView = () => { @@ -16,13 +16,13 @@ const AnnotationsHiddenView = () => { tabIndex={0} data-cy="annotations-visibility-button" > -
+
} trigger={} />{' '} - +
diff --git a/client/components/AnnotationBox/ListView.js b/client/components/AnnotationBox/ListView.js index f7024bfe9..095fcb266 100644 --- a/client/components/AnnotationBox/ListView.js +++ b/client/components/AnnotationBox/ListView.js @@ -2,7 +2,7 @@ import React from 'react' import { useDispatch, useSelector } from 'react-redux' import { Icon, Popup } from 'semantic-ui-react' import { Button } from 'react-bootstrap' -import { FormattedMessage, useIntl } from 'react-intl' +import { FormattedHTMLMessage, FormattedMessage, useIntl } from 'react-intl' import { setFocusedSpan, setHighlightRange } from 'Utilities/redux/annotationsReducer' const ListView = ({ handleAnnotationBoxCollapse }) => { @@ -25,13 +25,13 @@ const ListView = ({ handleAnnotationBoxCollapse }) => { tabIndex={0} >
-
+
} trigger={} />{' '} - +
diff --git a/client/components/AnnotationBox/NoAnnotationsView.js b/client/components/AnnotationBox/NoAnnotationsView.js index f78eae7c3..cccf637dc 100644 --- a/client/components/AnnotationBox/NoAnnotationsView.js +++ b/client/components/AnnotationBox/NoAnnotationsView.js @@ -1,7 +1,7 @@ import React from 'react' import { Icon, Popup } from 'semantic-ui-react' import { useHistory } from 'react-router-dom' -import { FormattedMessage, useIntl } from 'react-intl' +import { FormattedHTMLMessage, FormattedMessage, useIntl } from 'react-intl' const NoAnnotationsView = ({ handleAnnotationBoxCollapse }) => { const intl = useIntl() @@ -19,13 +19,13 @@ const NoAnnotationsView = ({ handleAnnotationBoxCollapse }) => { tabIndex={0} >
-
+
} + position="top center" + content={} + trigger={} />{' '} - +
diff --git a/client/components/CommonStoryTextComponents/PreviousSnippets/Word/PreviousExerciseWord.js b/client/components/CommonStoryTextComponents/PreviousSnippets/Word/PreviousExerciseWord.js index 14bd8f4cb..1df1915fe 100644 --- a/client/components/CommonStoryTextComponents/PreviousSnippets/Word/PreviousExerciseWord.js +++ b/client/components/CommonStoryTextComponents/PreviousSnippets/Word/PreviousExerciseWord.js @@ -215,7 +215,7 @@ const PreviousExerciseWord = ({ word, answer, tiedAnswer, focusedConcept, snippe {isPreviewMode && word.concepts?.length > 0 && (
- : + :
    {word.concepts.map(concept => (
  • {concept.concept}
  • diff --git a/client/components/ControlledStoryEditView/ControlledStoryWord.js b/client/components/ControlledStoryEditView/ControlledStoryWord.js index 2fa22a1cf..1f8a25215 100644 --- a/client/components/ControlledStoryEditView/ControlledStoryWord.js +++ b/client/components/ControlledStoryEditView/ControlledStoryWord.js @@ -276,7 +276,7 @@ const ControlledStoryWord = ({ word, snippet, focusedConcept }) => { {word.concepts?.length > 0 && (
    - : + :
      {word.concepts.map(concept => (
    • {concept.concept}
    • diff --git a/client/components/DictionaryHelp/index.js b/client/components/DictionaryHelp/index.js index 8f5bab0dd..ea6bbb03d 100644 --- a/client/components/DictionaryHelp/index.js +++ b/client/components/DictionaryHelp/index.js @@ -304,7 +304,15 @@ const DictionaryHelp = ({ minimized, inWordNestModal }) => {
      - + } + trigger={} + />{' '} +
      { ) : (
      - +
      - )} + ) /* ??? WHAT IS THIS? why NOTES ??? */} {smallWindow && !inWordNestModal ? (
      diff --git a/client/components/Lessons/LessonPracticeView/LessonPracticeTopicsHelp.js b/client/components/Lessons/LessonPracticeView/LessonPracticeTopicsHelp.js index 96ccfa72a..51b0a2d90 100644 --- a/client/components/Lessons/LessonPracticeView/LessonPracticeTopicsHelp.js +++ b/client/components/Lessons/LessonPracticeView/LessonPracticeTopicsHelp.js @@ -115,7 +115,7 @@ const LessonPracticeTopicsHelp = ({selectedTopics, always_show=false, }) => { alignItems: 'center', }} > - + { const dispatch = useDispatch() + const intl = useIntl() const [topTopics, setTopTopics] = useState([]) const { width } = useWindowDimensions() const showTopicsBox = useSelector((state) => state.topicsBox.showTopicsBox) @@ -87,7 +88,17 @@ const StoryTopics = ({ conceptCount, focusedConcept, setFocusedConcept, isContro
      - : +
      + } + trigger={} + />{' '} + +
      { @@ -152,7 +163,10 @@ const StoryTopics = ({ conceptCount, focusedConcept, setFocusedConcept, isContro }} onChange={() => toggleExerciseTopic(topic[0], topic[1].freq)} />} - {topic[0]} + { /* topic[0] */ + + } {topic[1].freq} diff --git a/client/util/translations/revita/en/LC_MESSAGES/messages.json b/client/util/translations/revita/en/LC_MESSAGES/messages.json index a9e10b008..39735270f 100755 --- a/client/util/translations/revita/en/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/en/LC_MESSAGES/messages.json @@ -697,7 +697,7 @@ "currently-anyone-can-share-stories-with-you-automatically-you-can-modify-this-in-your-profile-prefer": "", "PROFILE": "Profile", "unfamiliar-word": "Unfamiliar word?", - "click-on-words-near-the-exercises-to-explore-their-meaning": "Click any unfamiliar word to see its translations.\n

      \nRevita will assume you are learning these words —\nthey will appear as RED in your Vocabulary Progress View.\n

      \nPractice your words with Flashcards!\n
      \nOnce you have learned them, words turn from RED to GREEN.", + "click-on-words-near-the-exercises-to-explore-their-meaning": "Click any unfamiliar word to see its translations.\n

      \nRevita will display the words you are learning —\nas RED \nin your Vocabulary Progress View.\n

      \nPractice your words with Flashcards!\n
      \nOnce you have learned them, words turn from RED to GREEN.", "translate-to": "Translate to", "translation-temporarily-unavailable-please-try-again-later": "", "not-accessible": "", @@ -1064,7 +1064,7 @@ "note-delete-failure": "Deleting note failed. Please try again.", "log-in-to-create-own-notes": "Log in to create your own notes", "notes-popup-info-text": "You can add notes to any word — something important or interesting about how the language works.", - "annotations-popup-info-text": "Click any word to add your own notes. \nYou can add notes to any word or phrase in the story — something important or something interesting about how the language works.", + "annotations-popup-info-text": "Click any word to add your own notes!\n
      \n
      \nYou can add notes to any word or phrase in the story — something important or something interesting about how the language works.", "notes-added-to-history-appear-here": "Notes added to words in completed snippets will appear here.", "click-any-word-in-history-to-create-note": "Click any word before the exercise snippet to add a note.", "click-any-word-in-history-to-add-new": "", @@ -1076,7 +1076,7 @@ "show-feedback": "Show feedback", "upload-from-web-instructions": "Revita will try to find the story from the URL. If it fails, or if the result contains unwanted text, please use the \"Paste a text\" box below to enter the story manually.", "word-not-in-note-yet": "No notes yet for this word.", - "click-arrow-buttons-to-expand-shrink": "Click the arrow buttons « » to expand/shrink the selection.", + "click-arrow-buttons-to-expand-shrink": "Click the arrow buttons « and » to expand/shrink the selection.", "words-not-in-note-yet": "No notes yet for these words.", "exercise-density": "Exercise density", "custom": "Customize learning settings", @@ -1706,5 +1706,10 @@ "correct-first-attempts-CONTROL": "Number of correct answers on first attempt", "first-attempt-correct-rate-CONTROL": "Correct rate on first attempt", "overall-correct-rate-CONTROL": "Rate of correct answers of all answers", - "story-top-dict": "Dictionary" + "story-top-dict": "Dictionary", + "topics-header": "Topics", + "notes-header": "Notes", + "story-top-topics-explain": "Working with this story helps you master especially these topics.\n
      \n
      \nNB: When you practice, only topics suitable for your level will be selected for exercises.", + "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Click any unfamiliar word to see its translations!", + "dictionary-header": "Dictionary" } \ No newline at end of file diff --git a/client/util/translations/revita/fi/LC_MESSAGES/messages.json b/client/util/translations/revita/fi/LC_MESSAGES/messages.json index e58f9c8b0..208a80d98 100755 --- a/client/util/translations/revita/fi/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/fi/LC_MESSAGES/messages.json @@ -1063,7 +1063,7 @@ "note-delete-failure": "Poistaminen epäonnistui. Yritä uudestaan.", "log-in-to-create-own-notes": "Kirjaudu sisään luodaksesi muistiinpanoja", "notes-popup-info-text": "Voit lisätä muistiinpanoja mille vain sanalle — mitä tahansa tärkeää tai mielenkiintoista kielen toimintaan liittyvää.", - "annotations-popup-info-text": "Klikkaa mitä tahansa sanaa tekstissä luodaksesi uuden muistiinpanon.\nVoit lisätä muistiinpanoja haluamaasi osaan tekstiä — mitä tahansa tärkeää tai mielenkiintoista kielen toimintaan liittyvää.", + "annotations-popup-info-text": "Klikkaa mitä tahansa sanaa tekstissä luodaksesi uuden muistiinpanon!\n
      \n
      \nVoit lisätä muistiinpanoja haluamaasi osaan tekstiä — mitä tahansa tärkeää tai mielenkiintoista kielen toimintaan liittyvää.", "notes-added-to-history-appear-here": "Muistiinpanot, jotka on lisätty tekstiin ennen tehtäväosaa, näkyvät tässä.", "click-any-word-in-history-to-create-note": "Click any word before the exercise snippet to add a note.", "click-any-word-in-history-to-add-new": "", @@ -1075,7 +1075,7 @@ "show-feedback": "Näytä palaute", "upload-from-web-instructions": "Syötä alla olevaan kenttään esimerkiksi jonkin uutisen tai lyhyen kertomuksen URL-osoite. Revita yrittää noutaa tekstin. Jos noutaminen ei kuitenkaan onnistu, voit käyttää myös alla olevaa \"Liitä teksti\"-vaihtoehtoa, ja kopioida itse tekstin. (Varmista, että tekstin kieli on sama kuin valitsemasi opiskelukieli.)", "word-not-in-note-yet": "Valittu sana ei kuulu vielä yhteenkään muistiinpanoon.", - "click-arrow-buttons-to-expand-shrink": "Käytä nuolipainikkeita « » laajentaaksesi/pienentääksesi valintaa.", + "click-arrow-buttons-to-expand-shrink": "Käytä nuolipainikkeita « ja » laajentaaksesi/pienentääksesi valintaa.", "words-not-in-note-yet": "Valitut sanat eivät kuulu vielä yhteenkään muistiinpanoon.", "exercise-density": "Tehtävien tiheystaso", "custom": "Mukauta oppimisasetuksia", @@ -1705,5 +1705,10 @@ "correct-first-attempts-CONTROL": "Oikeiden vastausten määrä ensimmäisellä yrityksellä (ilman vinkkejä)", "first-attempt-correct-rate-CONTROL": "Oikeiden vastausten osuus ensimmäisellä yrityksellä (ilman vinkkejä)", "overall-correct-rate-CONTROL": "Oikeiden vastausten osuus kaikista vastauksista (ml. vinkkien avulla)", - "story-top-dict": "Dictionary" + "story-top-dict": "Dictionary", + "topics-header": "Aiheet", + "notes-header": "Muistiinpanot", + "story-top-topics-explain": "Tämän tarinan avulla harjoittelet erityisesti näitä kielioppiasioita.\n
      \n
      \nHUOM: Kun harjoittelet, vain tasosi sopivat aiheet valitaan harjoituksiin.", + "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Klikkaa niitä tarinan sanoja, joita et tunne — saat niihin käännökset!", + "dictionary-header": "Sanasto" } \ No newline at end of file diff --git a/client/util/translations/revita/it/LC_MESSAGES/messages.json b/client/util/translations/revita/it/LC_MESSAGES/messages.json index 8ca3a7646..aafe1844a 100755 --- a/client/util/translations/revita/it/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/it/LC_MESSAGES/messages.json @@ -1064,7 +1064,7 @@ "note-delete-failure": "Eliminazione degli appunti fallita. Ritenta.", "log-in-to-create-own-notes": "Fai il Log in per creare i tuoi appunti", "notes-popup-info-text": "Puoi aggiungere degli appunti su ogni parola — qualcosa importante o interessante su come funziona questa lingua.", - "annotations-popup-info-text": "Clicca su qualsiasi parola per aggiungerla agli appunti. \nPuoi aggiungere degli appunti su qualsiasi parola o frase — qualcosa di importante o di interessante su come funziona questa lingua.", + "annotations-popup-info-text": "Clicca su qualsiasi parola per aggiungerla agli appunti! \n
      \n
      \nPuoi aggiungere degli appunti su qualsiasi parola o frase — qualcosa di importante o di interessante su come funziona questa lingua.", "notes-added-to-history-appear-here": "Gli appunti aggiunti alle parole appartenenti agli snippet completati appaiono qui.", "click-any-word-in-history-to-create-note": "Click any word before the exercise snippet to add a note.", "click-any-word-in-history-to-add-new": "", @@ -1076,7 +1076,7 @@ "show-feedback": "Mostra il feedback", "upload-from-web-instructions": "Revita tenterà di estrarre il testo dalla tua pagina web. Se il risultato non sarà ben riuscito, copialo manualmente e incollalo nella casella per il caricamento dei file (opzione \"Copia un testo\").", "word-not-in-note-yet": "La parola selezionata non ha nessuna appunto al momento.", - "click-arrow-buttons-to-expand-shrink": "Clicca sul pulsante freccia « » per estendere/rimpicciolire la selezione.", + "click-arrow-buttons-to-expand-shrink": "Clicca sul pulsante freccia « e » per estendere/rimpicciolire la selezione.", "words-not-in-note-yet": "Le parole selezionate non sono collegate a nessun appunto al momento.", "exercise-density": "Densità degli esercizi", "custom": "Personalizza le impostazioni di apprendimento", @@ -1704,5 +1704,10 @@ "correct-first-attempts-CONTROL": "Number of correct answers on first attempt", "first-attempt-correct-rate-CONTROL": "Correct rate on first attempt", "overall-correct-rate-CONTROL": "Rate of correct answers of all answers", - "story-top-dict": "Dictionary" + "story-top-dict": "Dictionary", + "topics-header": "Argomenti", + "notes-header": "Appunti", + "story-top-topics-explain": "Praticare con questa storia ti aiuta ad apprendere questi argomenti.\n
      \n
      \nNB: Durante la pratica verranno selezionati per gli esercizi solo gli argomenti adatti al tuo livello.", + "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Clicca sulle parole sconosciute per ottenerne la traduzione!", + "dictionary-header": "Dizionario" } \ No newline at end of file diff --git a/client/util/translations/revita/ru/LC_MESSAGES/messages.json b/client/util/translations/revita/ru/LC_MESSAGES/messages.json index c3cf0ae45..800037254 100755 --- a/client/util/translations/revita/ru/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/ru/LC_MESSAGES/messages.json @@ -696,7 +696,7 @@ "currently-anyone-can-share-stories-with-you-automatically-you-can-modify-this-in-your-profile-prefer": "На данный момент любой пользователь может поделиться с тобой текстами. Это можно изменить в настройках на страничке \"Профиль\". Можно получать истории только от друзей, добавить %(stranger)s в список друзей, или заблокировать %(stranger)s, используя следующие ссылки:", "PROFILE": "Профиль", "unfamiliar-word": "Незнакомое слово?", - "click-on-words-near-the-exercises-to-explore-their-meaning": "Кликни на незнакомое слово, чтобы получить его перевод ⇒ слово сохранится в набор флеш-карт!", + "click-on-words-near-the-exercises-to-explore-their-meaning": "Нажми на любое незнакомое слово, чтобы увидеть его перевод.\n

      \nRevita отобразит слова, которые ты изучаешь —\nкрасным в твоем \nСловарном Графике.\n

      \nВсе слова сохраняются в твой набор флеш-карт —\nтренируй словарный запас с помощью флеш-карт!\n
      \nКогда слова выучены, они меняют цвет с красного на зеленый.", "translate-to": "Перевод на", "translation-temporarily-unavailable-please-try-again-later": "Перевод временно недоступен, пожалуйста, попробуй позже...", "not-accessible": "Недоступно", @@ -1066,7 +1066,7 @@ "note-delete-failure": "Не удалось удалить заметку. Попробуй еще раз.", "log-in-to-create-own-notes": "Зарегистрируйся в систему, чтобы добавить свои заметки", "notes-popup-info-text": "Добавь заметки о важных или интересных особенностях слов в тексте.", - "annotations-popup-info-text": "Кликни на любое слово, чтобы добавить заметку!\nК любому слову или выражению можно прикрепить заметки — о свойствах языка, которые тебе кажутся важными или интересными !", + "annotations-popup-info-text": "Кликни на любое слово, чтобы добавить заметку!\n
      \n
      \nК любому слову или выражению можно прикрепить заметки — о свойствах языка, которые тебе важны и интересны!", "notes-added-to-history-appear-here": "Заметки, прикрепленные к словам в тексте.", "click-any-word-in-history-to-create-note": "Click any word before the exercise snippet to add a note.", "click-any-word-in-history-to-add-new": "", @@ -1078,7 +1078,7 @@ "show-feedback": "Ответы и обратную связь", "upload-from-web-instructions": "Ревита попытается извлечь текст из данной веб-страницы. Если результат будет неудачным, пожалуйста, скопируй текст вручную и введи в поле для загрузки текста (ниже)", "word-not-in-note-yet": "У этого слова eще нет заметок.", - "click-arrow-buttons-to-expand-shrink": "Нажми на стрелочки « » — чтобы удлинить или укоротить текст под заметкой.", + "click-arrow-buttons-to-expand-shrink": "Нажми на стрелочки « и » — чтобы удлинить или укоротить текст под заметкой.", "words-not-in-note-yet": "У этих слов eще нет заметок.", "exercise-density": "Количество упражнений", "custom": "Персонализировать настройки обучения", @@ -1707,5 +1707,10 @@ "correct-first-attempts-CONTROL": "Number of correct answers on first attempt", "first-attempt-correct-rate-CONTROL": "Correct rate on first attempt", "overall-correct-rate-CONTROL": "Rate of correct answers of all answers", - "story-top-dict": "Dictionary" + "story-top-dict": "Dictionary", + "topics-header": "Темы", + "notes-header": "Заметки", + "story-top-topics-explain": "Работа с этой историей поможет тебе освоить эти темы.\n
      \n
      \nNB: Во время практики в упражнения будут попадать только те темы, которые подходят для твоего уровня.", + "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Нажми на любое незнакомое слово, чтобы увидеть его перевод!", + "dictionary-header": "Словарь" } \ No newline at end of file diff --git a/client/util/translations/revita/zh/LC_MESSAGES/messages.json b/client/util/translations/revita/zh/LC_MESSAGES/messages.json index d48892b7c..2ebbd4f41 100644 --- a/client/util/translations/revita/zh/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/zh/LC_MESSAGES/messages.json @@ -31,7 +31,7 @@ "write-your-note-here": "添加注释", "(you)wrote": "已写", "(he/she)wrote": "已写", - "annotations-popup-info-text": "单机任意单词添加注释! 对任意单词或文本——你认为有趣或者重要的语言性质——添加注释", + "annotations-popup-info-text": "单机任意单词添加注释!\n
      \n
      \n 对任意单词或文本——你认为有趣或者重要的语言性质——添加注释", "click-arrow-buttons-to-expand-shrink": "单击书名号按钮展开或收缩文本注释", "better-luck-next-time": "祝你下次更上一层楼!", "competition-mode": "竞赛模式", @@ -1079,5 +1079,10 @@ "correct-first-attempts-CONTROL": "Number of correct answers on first attempt", "first-attempt-correct-rate-CONTROL": "Correct rate on first attempt", "overall-correct-rate-CONTROL": "Rate of correct answers of all answers", - "story-top-dict": "词典" + "story-top-dict": "词典", + "topics-header": "主题", + "notes-header": "注释", + "story-top-topics-explain": "通过练习这篇文章,你将掌握这些概念", + "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "单击任意生词以获取翻译⇒ 该单词将保存至你的卡片中!", + "dictionary-header": "词典" } \ No newline at end of file From ee227941a2d59ccfc98c08587f281aeb3787f0ad Mon Sep 17 00:00:00 2001 From: Roman Yangarber Date: Thu, 2 Jan 2025 21:21:16 +0200 Subject: [PATCH 05/16] minor changes (hexmap), pull from google sheets --- client/components/GridHexagon/App.css | 5 +++-- client/components/GridHexagon/index.js | 5 +++-- client/util/translations/revita/en/LC_MESSAGES/messages.json | 3 ++- client/util/translations/revita/fi/LC_MESSAGES/messages.json | 3 ++- client/util/translations/revita/it/LC_MESSAGES/messages.json | 3 ++- client/util/translations/revita/ru/LC_MESSAGES/messages.json | 3 ++- client/util/translations/revita/zh/LC_MESSAGES/messages.json | 3 ++- 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/client/components/GridHexagon/App.css b/client/components/GridHexagon/App.css index 2c1b23409..aae2bffb0 100644 --- a/client/components/GridHexagon/App.css +++ b/client/components/GridHexagon/App.css @@ -22,7 +22,8 @@ svg g.hexagon { } svg g.hexagon-general g.hexagon { - fill: #add8e6; + /* fill: #add8e6; */ + fill: cyan; } svg g.hexagon-root g.hexagon { @@ -158,4 +159,4 @@ g.score96 g { fill: #98ef96 } g.score97 g { fill: #96ef94 } g.score98 g { fill: #94ef93 } g.score99 g { fill: #92ef91 } -g.score100 g { fill: #90ef90 } \ No newline at end of file +g.score100 g { fill: #90ef90 } diff --git a/client/components/GridHexagon/index.js b/client/components/GridHexagon/index.js index 25fbd183d..72e987b23 100644 --- a/client/components/GridHexagon/index.js +++ b/client/components/GridHexagon/index.js @@ -43,8 +43,9 @@ const ConstructionHexagon = ({ name, position, statistics, overallTotal, general
      {name}
      {stat_total > 0 && (
      - {stat_correct}/{stat_total} {intl.formatMessage({ id: 'correct' })}:{' '} - {percentageCorrect}% +
      {intl.formatMessage({ id: 'correct-performance' })}:{' '} + {percentageCorrect}% +
      {stat_correct}/{stat_total}
      )}
      diff --git a/client/util/translations/revita/en/LC_MESSAGES/messages.json b/client/util/translations/revita/en/LC_MESSAGES/messages.json index 39735270f..d06be7c07 100755 --- a/client/util/translations/revita/en/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/en/LC_MESSAGES/messages.json @@ -1711,5 +1711,6 @@ "notes-header": "Notes", "story-top-topics-explain": "Working with this story helps you master especially these topics.\n
      \n
      \nNB: When you practice, only topics suitable for your level will be selected for exercises.", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Click any unfamiliar word to see its translations!", - "dictionary-header": "Dictionary" + "dictionary-header": "Dictionary", + "correct-performance": "correct" } \ No newline at end of file diff --git a/client/util/translations/revita/fi/LC_MESSAGES/messages.json b/client/util/translations/revita/fi/LC_MESSAGES/messages.json index 208a80d98..5eeeb719f 100755 --- a/client/util/translations/revita/fi/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/fi/LC_MESSAGES/messages.json @@ -1710,5 +1710,6 @@ "notes-header": "Muistiinpanot", "story-top-topics-explain": "Tämän tarinan avulla harjoittelet erityisesti näitä kielioppiasioita.\n
      \n
      \nHUOM: Kun harjoittelet, vain tasosi sopivat aiheet valitaan harjoituksiin.", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Klikkaa niitä tarinan sanoja, joita et tunne — saat niihin käännökset!", - "dictionary-header": "Sanasto" + "dictionary-header": "Sanasto", + "correct-performance": "oikein" } \ No newline at end of file diff --git a/client/util/translations/revita/it/LC_MESSAGES/messages.json b/client/util/translations/revita/it/LC_MESSAGES/messages.json index aafe1844a..cec114c91 100755 --- a/client/util/translations/revita/it/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/it/LC_MESSAGES/messages.json @@ -1709,5 +1709,6 @@ "notes-header": "Appunti", "story-top-topics-explain": "Praticare con questa storia ti aiuta ad apprendere questi argomenti.\n
      \n
      \nNB: Durante la pratica verranno selezionati per gli esercizi solo gli argomenti adatti al tuo livello.", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Clicca sulle parole sconosciute per ottenerne la traduzione!", - "dictionary-header": "Dizionario" + "dictionary-header": "Dizionario", + "correct-performance": "corretto" } \ No newline at end of file diff --git a/client/util/translations/revita/ru/LC_MESSAGES/messages.json b/client/util/translations/revita/ru/LC_MESSAGES/messages.json index 800037254..fd96ea41f 100755 --- a/client/util/translations/revita/ru/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/ru/LC_MESSAGES/messages.json @@ -1712,5 +1712,6 @@ "notes-header": "Заметки", "story-top-topics-explain": "Работа с этой историей поможет тебе освоить эти темы.\n
      \n
      \nNB: Во время практики в упражнения будут попадать только те темы, которые подходят для твоего уровня.", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Нажми на любое незнакомое слово, чтобы увидеть его перевод!", - "dictionary-header": "Словарь" + "dictionary-header": "Словарь", + "correct-performance": "правильно" } \ No newline at end of file diff --git a/client/util/translations/revita/zh/LC_MESSAGES/messages.json b/client/util/translations/revita/zh/LC_MESSAGES/messages.json index 2ebbd4f41..bb7540db2 100644 --- a/client/util/translations/revita/zh/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/zh/LC_MESSAGES/messages.json @@ -1084,5 +1084,6 @@ "notes-header": "注释", "story-top-topics-explain": "通过练习这篇文章,你将掌握这些概念", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "单击任意生词以获取翻译⇒ 该单词将保存至你的卡片中!", - "dictionary-header": "词典" + "dictionary-header": "词典", + "correct-performance": "正确" } \ No newline at end of file From 7220be1a60cda3b1907006c9601e9121e7fae3c0 Mon Sep 17 00:00:00 2001 From: Roman Yangarber Date: Tue, 7 Jan 2025 18:05:50 +0200 Subject: [PATCH 06/16] fix localizations --- client/util/translations/revita/en/LC_MESSAGES/messages.json | 4 ++-- client/util/translations/revita/fi/LC_MESSAGES/messages.json | 4 ++-- client/util/translations/revita/it/LC_MESSAGES/messages.json | 4 ++-- client/util/translations/revita/ru/LC_MESSAGES/messages.json | 4 ++-- client/util/translations/revita/zh/LC_MESSAGES/messages.json | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/client/util/translations/revita/en/LC_MESSAGES/messages.json b/client/util/translations/revita/en/LC_MESSAGES/messages.json index d06be7c07..3b05719ec 100755 --- a/client/util/translations/revita/en/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/en/LC_MESSAGES/messages.json @@ -1650,8 +1650,8 @@ "test-completed": "Report: Your performance on reading comprehension exercises", "ddlang-total-questions": "Questions in total", "go-to-home": "Back to Home Page", - "***this is subtracted***": "Use", - "***this is added***": "You used", + "***this is subtracted***": "true-feature-use", + "***this is added***": "user-feature-used", "Search lessons / topics ...": "Search lessons and topics ...", "customize-learning-settings": "Customize learning settings", "level-low": "Level: Easy", diff --git a/client/util/translations/revita/fi/LC_MESSAGES/messages.json b/client/util/translations/revita/fi/LC_MESSAGES/messages.json index 5eeeb719f..404c69511 100755 --- a/client/util/translations/revita/fi/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/fi/LC_MESSAGES/messages.json @@ -1649,8 +1649,8 @@ "test-completed": "Tuloksesi lukemisen harjoitustehtävissä", "ddlang-total-questions": "Kysymyksiä yhteensä", "go-to-home": "Takaisin kotisivulle", - "***this is subtracted***": "Käytä", - "***this is added***": "Sinä käytit", + "***this is subtracted***": "Use", + "***this is added***": "You used", "Search lessons / topics ...": "Hae:", "customize-learning-settings": "Mukauta oppimisasetuksia", "level-low": "Taso: Helpot", diff --git a/client/util/translations/revita/it/LC_MESSAGES/messages.json b/client/util/translations/revita/it/LC_MESSAGES/messages.json index cec114c91..d45dbfa53 100755 --- a/client/util/translations/revita/it/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/it/LC_MESSAGES/messages.json @@ -1648,8 +1648,8 @@ "test-completed": "Report: Your performance on reading comprehension exercises", "ddlang-total-questions": "Questions in total", "go-to-home": "Back to Home Page", - "***this is subtracted***": "Usa", - "***this is added***": "Hai usato", + "***this is subtracted***": "Käytä", + "***this is added***": "Sinä käytit", "Search lessons / topics ...": "Cerca:", "customize-learning-settings": "Personalizza le impostazioni di apprendimento", "level-low": "Livello: Facile", diff --git a/client/util/translations/revita/ru/LC_MESSAGES/messages.json b/client/util/translations/revita/ru/LC_MESSAGES/messages.json index fd96ea41f..d7446f193 100755 --- a/client/util/translations/revita/ru/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/ru/LC_MESSAGES/messages.json @@ -1651,8 +1651,8 @@ "test-completed": "Report: Your performance on reading comprehension exercises", "ddlang-total-questions": "Questions in total", "go-to-home": "Back to Home Page", - "***this is subtracted***": "Введи", - "***this is added***": "Ты использовал(а)", + "***this is subtracted***": "Usa", + "***this is added***": "Hai usato", "Search lessons / topics ...": "Поиск:", "customize-learning-settings": "Персонализировать настройки обучения", "level-low": "Уровень: Легкий", diff --git a/client/util/translations/revita/zh/LC_MESSAGES/messages.json b/client/util/translations/revita/zh/LC_MESSAGES/messages.json index bb7540db2..7f36fe9d4 100644 --- a/client/util/translations/revita/zh/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/zh/LC_MESSAGES/messages.json @@ -1023,8 +1023,8 @@ "test-completed": "Report: Your performance on reading comprehension exercises", "ddlang-total-questions": "Questions in total", "go-to-home": "Back to Home Page", - "***this is subtracted***": "请使用", - "***this is added***": "您使用了", + "***this is subtracted***": "Введи", + "***this is added***": "Ты использовал(а)", "Search lessons / topics ...": "搜索:", "customize-learning-settings": "自定义", "level-low": "简单难度", From 97ccbdf24319cac23236ca939f7c7d7f98b38316 Mon Sep 17 00:00:00 2001 From: "jue.hou" Date: Wed, 8 Jan 2025 11:54:51 +0200 Subject: [PATCH 07/16] server status --- client/assets/images/heartbeat.png | Bin 0 -> 15504 bytes client/components/LandingPage/index.js | 25 ++++++++++++++++-- client/components/NavBar.js | 23 ++++++++++++++++ client/util/common.js | 2 ++ .../revita/en/LC_MESSAGES/messages.json | 3 ++- .../revita/fi/LC_MESSAGES/messages.json | 3 ++- .../revita/it/LC_MESSAGES/messages.json | 3 ++- .../revita/ru/LC_MESSAGES/messages.json | 3 ++- .../revita/zh/LC_MESSAGES/messages.json | 3 ++- 9 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 client/assets/images/heartbeat.png diff --git a/client/assets/images/heartbeat.png b/client/assets/images/heartbeat.png new file mode 100644 index 0000000000000000000000000000000000000000..66686323f79c08dc84db235e31590db4fa0fbb00 GIT binary patch literal 15504 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 V!%FTO!0llWLf2HM_O{ED{{vBhy { scrolling={false} direction="left" floating - style={{ marginRight: '3em', alignSelf: 'center' }} + style={{ alignSelf: 'center' }} icon={ { /> + + heartbeat icon + + } + content={ + + } + on="hover" + position="bottom right" + />
      )}
      diff --git a/client/components/NavBar.js b/client/components/NavBar.js index 34e2c1d49..3ecc57255 100644 --- a/client/components/NavBar.js +++ b/client/components/NavBar.js @@ -474,6 +474,29 @@ export default function NavBar() { />
      + {/******************************* END *******************************/} diff --git a/client/util/common.js b/client/util/common.js index c91d083bc..d54612204 100644 --- a/client/util/common.js +++ b/client/util/common.js @@ -86,6 +86,7 @@ import flameIcon from 'Assets/images/flame_icon.png' import flame from 'Assets/images/flame.png' import flameColorless from 'Assets/images/flame_colorless.png' import greenArrow from 'Assets/images/green_arrow.png' +import heartbeat from 'Assets/images/heartbeat.png' import { useSelector, useDispatch } from 'react-redux' import { useHistory } from 'react-router-dom' @@ -177,6 +178,7 @@ export const images = { flameColorless, flameIcon, greenArrow, + heartbeat, } export const backgroundColors = [ diff --git a/client/util/translations/revita/en/LC_MESSAGES/messages.json b/client/util/translations/revita/en/LC_MESSAGES/messages.json index 3b05719ec..80a8aa19b 100755 --- a/client/util/translations/revita/en/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/en/LC_MESSAGES/messages.json @@ -1712,5 +1712,6 @@ "story-top-topics-explain": "Working with this story helps you master especially these topics.\n
      \n
      \nNB: When you practice, only topics suitable for your level will be selected for exercises.", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Click any unfamiliar word to see its translations!", "dictionary-header": "Dictionary", - "correct-performance": "correct" + "correct-performance": "correct", + "server-status": "Server status" } \ No newline at end of file diff --git a/client/util/translations/revita/fi/LC_MESSAGES/messages.json b/client/util/translations/revita/fi/LC_MESSAGES/messages.json index 404c69511..2698dc6a2 100755 --- a/client/util/translations/revita/fi/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/fi/LC_MESSAGES/messages.json @@ -1711,5 +1711,6 @@ "story-top-topics-explain": "Tämän tarinan avulla harjoittelet erityisesti näitä kielioppiasioita.\n
      \n
      \nHUOM: Kun harjoittelet, vain tasosi sopivat aiheet valitaan harjoituksiin.", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Klikkaa niitä tarinan sanoja, joita et tunne — saat niihin käännökset!", "dictionary-header": "Sanasto", - "correct-performance": "oikein" + "correct-performance": "oikein", + "server-status": "Server status" } \ No newline at end of file diff --git a/client/util/translations/revita/it/LC_MESSAGES/messages.json b/client/util/translations/revita/it/LC_MESSAGES/messages.json index d45dbfa53..1d27dfdec 100755 --- a/client/util/translations/revita/it/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/it/LC_MESSAGES/messages.json @@ -1710,5 +1710,6 @@ "story-top-topics-explain": "Praticare con questa storia ti aiuta ad apprendere questi argomenti.\n
      \n
      \nNB: Durante la pratica verranno selezionati per gli esercizi solo gli argomenti adatti al tuo livello.", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Clicca sulle parole sconosciute per ottenerne la traduzione!", "dictionary-header": "Dizionario", - "correct-performance": "corretto" + "correct-performance": "corretto", + "server-status": "Server status" } \ No newline at end of file diff --git a/client/util/translations/revita/ru/LC_MESSAGES/messages.json b/client/util/translations/revita/ru/LC_MESSAGES/messages.json index d7446f193..7948efd69 100755 --- a/client/util/translations/revita/ru/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/ru/LC_MESSAGES/messages.json @@ -1713,5 +1713,6 @@ "story-top-topics-explain": "Работа с этой историей поможет тебе освоить эти темы.\n
      \n
      \nNB: Во время практики в упражнения будут попадать только те темы, которые подходят для твоего уровня.", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Нажми на любое незнакомое слово, чтобы увидеть его перевод!", "dictionary-header": "Словарь", - "correct-performance": "правильно" + "correct-performance": "правильно", + "server-status": "Server status" } \ No newline at end of file diff --git a/client/util/translations/revita/zh/LC_MESSAGES/messages.json b/client/util/translations/revita/zh/LC_MESSAGES/messages.json index 7f36fe9d4..b78f4e541 100644 --- a/client/util/translations/revita/zh/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/zh/LC_MESSAGES/messages.json @@ -1085,5 +1085,6 @@ "story-top-topics-explain": "通过练习这篇文章,你将掌握这些概念", "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "单击任意生词以获取翻译⇒ 该单词将保存至你的卡片中!", "dictionary-header": "词典", - "correct-performance": "正确" + "correct-performance": "正确", + "server-status": "Server status" } \ No newline at end of file From 97bd7e0aa496cdde509c12839140487937398a0a Mon Sep 17 00:00:00 2001 From: Roman Yangarber Date: Thu, 9 Jan 2025 14:27:00 +0200 Subject: [PATCH 08/16] fix copyright --- client/components/Footer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/components/Footer.js b/client/components/Footer.js index baef8e513..9a3b832ad 100644 --- a/client/components/Footer.js +++ b/client/components/Footer.js @@ -27,7 +27,7 @@ const Footer = () => {
      )} -
      © University of Helsinki 2020–2024
      +
      © University of Helsinki 2020–2025
      {showResonsiveVoiceMention && (
      From 0d0374dbbf18971baa6901e88bde40cbe1d3eb43 Mon Sep 17 00:00:00 2001 From: Roman Yangarber Date: Thu, 9 Jan 2025 19:56:27 +0200 Subject: [PATCH 09/16] add a few localizations --- client/util/translations/revita/fi/LC_MESSAGES/messages.json | 4 ++-- client/util/translations/revita/it/LC_MESSAGES/messages.json | 4 ++-- client/util/translations/revita/ru/LC_MESSAGES/messages.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/util/translations/revita/fi/LC_MESSAGES/messages.json b/client/util/translations/revita/fi/LC_MESSAGES/messages.json index 2698dc6a2..714388574 100755 --- a/client/util/translations/revita/fi/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/fi/LC_MESSAGES/messages.json @@ -1701,7 +1701,7 @@ "import-failure-flashcards": "Korttien periminen epäonnistui", "flashcards-visibility-success": "Korttien näkyvyys päivitetty", "flashcards-visibility-failure": "Korttien näkyvyyden päivittäminen epäonnistui", - "sharing": "Sharing...", + "sharing": "Jaetaan...", "correct-first-attempts-CONTROL": "Oikeiden vastausten määrä ensimmäisellä yrityksellä (ilman vinkkejä)", "first-attempt-correct-rate-CONTROL": "Oikeiden vastausten osuus ensimmäisellä yrityksellä (ilman vinkkejä)", "overall-correct-rate-CONTROL": "Oikeiden vastausten osuus kaikista vastauksista (ml. vinkkien avulla)", @@ -1712,5 +1712,5 @@ "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Klikkaa niitä tarinan sanoja, joita et tunne — saat niihin käännökset!", "dictionary-header": "Sanasto", "correct-performance": "oikein", - "server-status": "Server status" + "server-status": "Nykyinen palvelimen tila" } \ No newline at end of file diff --git a/client/util/translations/revita/it/LC_MESSAGES/messages.json b/client/util/translations/revita/it/LC_MESSAGES/messages.json index 1d27dfdec..8f5eda96c 100755 --- a/client/util/translations/revita/it/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/it/LC_MESSAGES/messages.json @@ -1700,7 +1700,7 @@ "import-failure-flashcards": "Importazione non riuscita", "flashcards-visibility-success": "Visibilità delle flashcard aggiornata", "flashcards-visibility-failure": "Visibilità delle flashcard non era aggiornata", - "sharing": "Sharing...", + "sharing": "Inviando...", "correct-first-attempts-CONTROL": "Number of correct answers on first attempt", "first-attempt-correct-rate-CONTROL": "Correct rate on first attempt", "overall-correct-rate-CONTROL": "Rate of correct answers of all answers", @@ -1711,5 +1711,5 @@ "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Clicca sulle parole sconosciute per ottenerne la traduzione!", "dictionary-header": "Dizionario", "correct-performance": "corretto", - "server-status": "Server status" + "server-status": "Stato del server" } \ No newline at end of file diff --git a/client/util/translations/revita/ru/LC_MESSAGES/messages.json b/client/util/translations/revita/ru/LC_MESSAGES/messages.json index 7948efd69..b578f7567 100755 --- a/client/util/translations/revita/ru/LC_MESSAGES/messages.json +++ b/client/util/translations/revita/ru/LC_MESSAGES/messages.json @@ -1703,7 +1703,7 @@ "import-failure-flashcards": "Не удалось импортировать карточки", "flashcards-visibility-success": "Видимость карточек обновлена", "flashcards-visibility-failure": "Не удалось обновить видимость карточек", - "sharing": "Sharing...", + "sharing": "Файл отправляется...", "correct-first-attempts-CONTROL": "Number of correct answers on first attempt", "first-attempt-correct-rate-CONTROL": "Correct rate on first attempt", "overall-correct-rate-CONTROL": "Rate of correct answers of all answers", @@ -1714,5 +1714,5 @@ "click-on-words-near-the-exercises-to-explore-their-meaning-SHORT": "Нажми на любое незнакомое слово, чтобы увидеть его перевод!", "dictionary-header": "Словарь", "correct-performance": "правильно", - "server-status": "Server status" + "server-status": "Текущее состояние сервера" } \ No newline at end of file From 59fe96bae3190868249e9fedea1ff9d55ec8bd6e Mon Sep 17 00:00:00 2001 From: "jue.hou" Date: Thu, 9 Jan 2025 21:34:20 +0200 Subject: [PATCH 10/16] update CI --- .github/actions/run_test/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/run_test/action.yml b/.github/actions/run_test/action.yml index e7af48d7b..8baa2e7fb 100644 --- a/.github/actions/run_test/action.yml +++ b/.github/actions/run_test/action.yml @@ -30,7 +30,7 @@ runs: # CYPRESS_baseUrl: http://localhost:8000 - name: 'Upload screenshots if tests fail' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: cypress-screenshots @@ -38,7 +38,7 @@ runs: # Test run video was always captured, so this action uses "always()" condition - name: 'Upload Cypress videos' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: cypress-videos From a38b64fb600625c604867c9880bad5938527f5c6 Mon Sep 17 00:00:00 2001 From: "jue.hou" Date: Thu, 9 Jan 2025 22:46:33 +0200 Subject: [PATCH 11/16] fix CI --- .github/actions/run_test/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/run_test/action.yml b/.github/actions/run_test/action.yml index 8baa2e7fb..ebbe5fc69 100644 --- a/.github/actions/run_test/action.yml +++ b/.github/actions/run_test/action.yml @@ -33,7 +33,7 @@ runs: uses: actions/upload-artifact@v4 if: failure() with: - name: cypress-screenshots + name: cypress-screenshots-${{ strategy.job-index }} path: /home/runner/work/mobvita/mobvita/cypress/screenshots/ # Test run video was always captured, so this action uses "always()" condition @@ -41,5 +41,5 @@ runs: uses: actions/upload-artifact@v4 if: always() with: - name: cypress-videos + name: cypress-videos-${{ strategy.job-index }} path: /home/runner/work/mobvita/mobvita/cypress/videos/ \ No newline at end of file From bac8aa03c79da59606daa45cd91ceefbfb72483e Mon Sep 17 00:00:00 2001 From: "jue.hou" Date: Thu, 9 Jan 2025 22:55:26 +0200 Subject: [PATCH 12/16] fix CI --- .github/actions/run_test/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/run_test/action.yml b/.github/actions/run_test/action.yml index ebbe5fc69..cee427105 100644 --- a/.github/actions/run_test/action.yml +++ b/.github/actions/run_test/action.yml @@ -33,7 +33,7 @@ runs: uses: actions/upload-artifact@v4 if: failure() with: - name: cypress-screenshots-${{ strategy.job-index }} + name: cypress-screenshots-${{inputs.context}}-${{inputs.job-index}} path: /home/runner/work/mobvita/mobvita/cypress/screenshots/ # Test run video was always captured, so this action uses "always()" condition @@ -41,5 +41,5 @@ runs: uses: actions/upload-artifact@v4 if: always() with: - name: cypress-videos-${{ strategy.job-index }} + name: cypress-videos-${{inputs.context}}-${{inputs.job-index}} path: /home/runner/work/mobvita/mobvita/cypress/videos/ \ No newline at end of file From df2b5c5e9a1b5358e3ad44adbeb9b94a2d3eba5a Mon Sep 17 00:00:00 2001 From: "jue.hou" Date: Thu, 9 Jan 2025 23:13:41 +0200 Subject: [PATCH 13/16] fix CI --- .github/actions/run_test/action.yml | 4 ++-- .github/workflows/staging.yml | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/actions/run_test/action.yml b/.github/actions/run_test/action.yml index cee427105..802e07e92 100644 --- a/.github/actions/run_test/action.yml +++ b/.github/actions/run_test/action.yml @@ -33,7 +33,7 @@ runs: uses: actions/upload-artifact@v4 if: failure() with: - name: cypress-screenshots-${{inputs.context}}-${{inputs.job-index}} + name: cypress-screenshots-${{inputs.context}} path: /home/runner/work/mobvita/mobvita/cypress/screenshots/ # Test run video was always captured, so this action uses "always()" condition @@ -41,5 +41,5 @@ runs: uses: actions/upload-artifact@v4 if: always() with: - name: cypress-videos-${{inputs.context}}-${{inputs.job-index}} + name: cypress-videos-${{inputs.context}} path: /home/runner/work/mobvita/mobvita/cypress/videos/ \ No newline at end of file diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 000cacc31..6c2488052 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -15,6 +15,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/competition_spec.js + context: competition test_dictionary: name: "Test dictionary" @@ -25,6 +26,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/dictionary_spec.js + context: dictionary test_flashcards: name: "Test flashcards" @@ -35,6 +37,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/flashcards_spec.js + context: flashcards test_follow_and_block: name: "Test follow and block" @@ -45,6 +48,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/follow_and_block_spec.js + context: follow_and_block test_groups: name: "Test groups" @@ -55,6 +59,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/groups_spec.js + context: groups test_mobvita: name: "Test mobvita" @@ -65,6 +70,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/mobvita_spec.js + context: mobvita test_practice: name: "Test practice" @@ -75,6 +81,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/practice_spec.js + context: practice test_tests: name: "Test tests" @@ -85,6 +92,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/tests_spec.js + context: tests test_wordnest: name: "Test wordnest" @@ -95,6 +103,7 @@ jobs: uses: ./.github/actions/run_test with: spec: cypress/e2e/wordnest_spec.js + context: wordnest build: name: 'Publish to dockerhub' From 36e1c0390b8daf533127dc585163e4600a3c8fa7 Mon Sep 17 00:00:00 2001 From: "jue.hou" Date: Thu, 9 Jan 2025 23:14:45 +0200 Subject: [PATCH 14/16] fix CI --- .github/actions/run_test/action.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/actions/run_test/action.yml b/.github/actions/run_test/action.yml index 802e07e92..6c3623c38 100644 --- a/.github/actions/run_test/action.yml +++ b/.github/actions/run_test/action.yml @@ -5,6 +5,9 @@ inputs: spec: required: true description: 'Path to Cypress file' + context: + required: true + description: 'Artifact identifier' runs: using: composite From c453fbcc1f77870a5868be472f31c65be6128f10 Mon Sep 17 00:00:00 2001 From: "jue.hou" Date: Mon, 13 Jan 2025 13:16:58 +0200 Subject: [PATCH 15/16] skip simultaneous duplicated call --- client/util/apiConnection.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/client/util/apiConnection.js b/client/util/apiConnection.js index 2a5711b0b..3ce908a83 100644 --- a/client/util/apiConnection.js +++ b/client/util/apiConnection.js @@ -5,7 +5,7 @@ import { Howl } from 'howler' /** * ApiConnection simplifies redux usage */ - +const locks = {} const getAxios = axios.create({ baseURL: `${basePath}api` }) export const callApi = async (url, method = 'get', data, query) => { @@ -22,17 +22,25 @@ export const callApi = async (url, method = 'get', data, query) => { }) } -export default (route, prefix, method = 'get', data, query, cache) => ({ - type: `${prefix}_ATTEMPT`, - requestSettings: { - route, - method, - data, - prefix, - query, - cache, - }, -}) +export default (route, prefix, method = 'get', data, query, cache) => { + if (method==='get' && locks[route]) { + return { + type: `${prefix}_LOCKED`, + } + } + locks[route] = true + return { + type: `${prefix}_ATTEMPT`, + requestSettings: { + route, + method, + data, + prefix, + query, + cache, + }, + } +} const SERVER_UNRESPONSIVE_STATUSES = [502, 503, 504] const SERVER_INTERNAL_ERROR_STATUS = 500 @@ -172,6 +180,7 @@ export const handleRequest = store => next => async action => { handleError(store, err, prefix, query) } } + locks[route] = false } } From 545d1ab99c78e4eed8bd0f6a9b0edcd26a79dfb9 Mon Sep 17 00:00:00 2001 From: "jue.hou" Date: Mon, 13 Jan 2025 13:52:23 +0200 Subject: [PATCH 16/16] Revert "skip simultaneous duplicated call" This reverts commit c453fbcc1f77870a5868be472f31c65be6128f10. --- client/util/apiConnection.js | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/client/util/apiConnection.js b/client/util/apiConnection.js index 3ce908a83..2a5711b0b 100644 --- a/client/util/apiConnection.js +++ b/client/util/apiConnection.js @@ -5,7 +5,7 @@ import { Howl } from 'howler' /** * ApiConnection simplifies redux usage */ -const locks = {} + const getAxios = axios.create({ baseURL: `${basePath}api` }) export const callApi = async (url, method = 'get', data, query) => { @@ -22,25 +22,17 @@ export const callApi = async (url, method = 'get', data, query) => { }) } -export default (route, prefix, method = 'get', data, query, cache) => { - if (method==='get' && locks[route]) { - return { - type: `${prefix}_LOCKED`, - } - } - locks[route] = true - return { - type: `${prefix}_ATTEMPT`, - requestSettings: { - route, - method, - data, - prefix, - query, - cache, - }, - } -} +export default (route, prefix, method = 'get', data, query, cache) => ({ + type: `${prefix}_ATTEMPT`, + requestSettings: { + route, + method, + data, + prefix, + query, + cache, + }, +}) const SERVER_UNRESPONSIVE_STATUSES = [502, 503, 504] const SERVER_INTERNAL_ERROR_STATUS = 500 @@ -180,7 +172,6 @@ export const handleRequest = store => next => async action => { handleError(store, err, prefix, query) } } - locks[route] = false } }