Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
ed4ef59
New daisyUI commit
yell0wsuit Dec 8, 2024
85f4179
Update packages
yell0wsuit Dec 10, 2024
e289b28
Update index.jsx
yell0wsuit Dec 10, 2024
86bac24
Add footer
yell0wsuit Dec 10, 2024
c53e92e
Make the tab stick to top when scrolling
yell0wsuit Dec 10, 2024
8d25628
Prevent overflow when iframe is loading
yell0wsuit Dec 10, 2024
6ddaed4
Minor tweak to tabs for Sounds
yell0wsuit Dec 10, 2024
25a9653
Update back icon for Sounds
yell0wsuit Dec 10, 2024
fb3ea93
Update PracticeSound.jsx
yell0wsuit Dec 10, 2024
5de6cd5
Accent dropdown: add emojis
yell0wsuit Dec 10, 2024
14a9815
Update tailwind.config.js
yell0wsuit Dec 11, 2024
2cab232
Update en.json
yell0wsuit Dec 11, 2024
d095f0e
Update dictation quiz UI
yell0wsuit Dec 11, 2024
98f5792
Fix some components to make it more WAI-ARIA compliant
yell0wsuit Dec 12, 2024
7c550b4
Update en.json
yell0wsuit Dec 12, 2024
fc1199b
Update ExerciseDetailPage.jsx
yell0wsuit Dec 12, 2024
45803df
Update DictationQuiz.jsx
yell0wsuit Dec 12, 2024
bee7504
Update ExercisePage.jsx
yell0wsuit Dec 12, 2024
1cf0eb6
Update MatchUp.jsx
yell0wsuit Dec 12, 2024
71ecf4d
Update Reordering.jsx
yell0wsuit Dec 12, 2024
0221a49
Update SortableWord.jsx
yell0wsuit Dec 12, 2024
d6ae721
Update SoundAndSpelling.jsx
yell0wsuit Dec 12, 2024
fba8233
Update packages
yell0wsuit Dec 13, 2024
9be6771
Fix missing toast component to pass the build
yell0wsuit Dec 13, 2024
0e4c34e
test fix base url for netlify
yell0wsuit Dec 13, 2024
e36440f
Adjust dynamic class names
yell0wsuit Dec 13, 2024
461f1bc
Optimize Sound section code
yell0wsuit Dec 13, 2024
18f7d0d
Fix modal not closing
yell0wsuit Dec 13, 2024
ea6b42b
Fix grid performance on iOS and fix badge not showing
yell0wsuit Dec 13, 2024
1e01eb9
Update TopNavBar.jsx
yell0wsuit Dec 13, 2024
9f426d3
Revert "Update TopNavBar.jsx"
yell0wsuit Dec 13, 2024
71545ef
Update TopNavBar.jsx
yell0wsuit Dec 13, 2024
26e4000
use memo
yell0wsuit Dec 13, 2024
ef06ed8
Revert "use memo"
yell0wsuit Dec 13, 2024
1f2bf3b
Update SoundList.jsx
yell0wsuit Dec 13, 2024
90d846a
Update SoundList.jsx
yell0wsuit Dec 13, 2024
2452f06
Update SoundList.jsx
yell0wsuit Dec 13, 2024
813ff0b
Revert "Update SoundList.jsx"
yell0wsuit Dec 13, 2024
8816b9b
Reapply "Update SoundList.jsx"
yell0wsuit Dec 13, 2024
74876f1
Revert "Reapply "Update SoundList.jsx""
yell0wsuit Dec 14, 2024
3d3b098
Switch to SVG emoji in place of custom emoji font
yell0wsuit Dec 14, 2024
e9b44ac
Fix dialog position (it was slightly off center)
yell0wsuit Dec 14, 2024
cea5ed9
Button contrast color
yell0wsuit Dec 14, 2024
1144623
Fix overflow and card shadow
yell0wsuit Dec 14, 2024
6db9fec
Update TopNavBar.jsx
yell0wsuit Dec 14, 2024
a5a83ce
Update ExerciseDetailPage.jsx
yell0wsuit Dec 14, 2024
6cbc24b
Update theme & colors
yell0wsuit Dec 14, 2024
7c341aa
Reordering: Fix answer length on small screen
yell0wsuit Dec 14, 2024
d82ca01
Update SoundAndSpelling.jsx
yell0wsuit Dec 14, 2024
b928469
Update SortableWord.jsx
yell0wsuit Dec 14, 2024
d9b8f6c
Add prettier config + tailwindcss prettier
yell0wsuit Dec 15, 2024
be16dbe
Update .prettierrc
yell0wsuit Dec 15, 2024
04735e7
Update sorting exercise
yell0wsuit Dec 15, 2024
903a563
Update DictationQuiz.jsx
yell0wsuit Dec 15, 2024
75331ce
Update Odd One Out and Snap!
yell0wsuit Dec 15, 2024
5e5657a
Memory match
yell0wsuit Dec 16, 2024
96f7470
Update OddOneOut.jsx
yell0wsuit Dec 16, 2024
fb3b035
Code formatting
yell0wsuit Dec 16, 2024
842eeea
Code formatting
yell0wsuit Dec 16, 2024
7aeb0d1
UI updates
yell0wsuit Dec 16, 2024
d68039b
Update ExercisePage.jsx
yell0wsuit Dec 16, 2024
85976ba
Update PracticeSound.jsx
yell0wsuit Dec 16, 2024
e5eada7
Update ExercisePage.jsx
yell0wsuit Dec 16, 2024
7790534
Update to Sound page UI
yell0wsuit Dec 16, 2024
b3db8fd
Conversation UI updates
yell0wsuit Dec 16, 2024
7768644
Update ConversationDetailPage.jsx
yell0wsuit Dec 16, 2024
a3ccc10
Conversation minor UI updates
yell0wsuit Dec 17, 2024
e5b33a5
Exam UI updates
yell0wsuit Dec 17, 2024
0412816
Disable recording/playing button when playing/recording
yell0wsuit Dec 17, 2024
7271180
Fix image modal on small screens
yell0wsuit Dec 17, 2024
5f9a6b6
Make toast center
yell0wsuit Dec 17, 2024
b9881e0
Settings: Exercise timer, App info, Appearance UI updates
yell0wsuit Dec 17, 2024
7280312
Update tailwind.config.js
yell0wsuit Dec 18, 2024
cea3f57
Settings UI update
yell0wsuit Dec 18, 2024
06171a5
Remove bootstrap
yell0wsuit Dec 18, 2024
2a85e86
Remove bootstrap leftover imports
yell0wsuit Dec 18, 2024
6fb4803
Exercise: Fix performance issues
yell0wsuit Dec 18, 2024
ae31088
Fix image modal not loading; useRef instead of getElementById
yell0wsuit Dec 19, 2024
b598e4a
useRef instead of targeting id for modal <dialog>
yell0wsuit Dec 19, 2024
e429cf8
Fix video modal practice not showing after it's been loaded
yell0wsuit Dec 19, 2024
8d8c438
Add toast notification for review
yell0wsuit Dec 19, 2024
aced958
Fix IndexedDB deletion bug
yell0wsuit Dec 19, 2024
4cffaa8
Update caching mechanism
yell0wsuit Dec 19, 2024
66e3c0a
Minor UI changes
yell0wsuit Dec 20, 2024
9bb2229
manifest
yell0wsuit Dec 20, 2024
f431832
{Electron] Use custom video UI
yell0wsuit Dec 20, 2024
696d96a
Update packages
yell0wsuit Dec 20, 2024
ca78d3b
use force flag because Vidstack Player does not support React19 yet
yell0wsuit Dec 20, 2024
3b7ac80
Minor styling fixes
yell0wsuit Dec 20, 2024
666ae43
Properly reset theme when reset setting
yell0wsuit Dec 20, 2024
6119cdb
Update WatchAndStudyTab.jsx
yell0wsuit Dec 20, 2024
a735084
Fix exercise option bug
yell0wsuit Dec 20, 2024
c4dce15
Restore maxLength for input
yell0wsuit Dec 20, 2024
03de3bf
Update vite.config.js
yell0wsuit Dec 20, 2024
f2111a2
Update ExerciseTimer.jsx
yell0wsuit Dec 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/electron.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
node-version: "21"

- name: Install Dependencies
run: npm ci
run: npm ci --force

- name: Build Vite App
run: npm run vitebuildcli
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/static.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
node-version: 20
cache: 'npm'
- name: Install dependencies
run: npm ci
run: npm ci --force
- name: Build
run: npm run build && cp ./dist/index.html ./dist/404.html
- name: Setup Pages
Expand Down
9 changes: 9 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"trailingComma": "es5",
"tabWidth": 4,
"semi": true,
"singleQuote": false,
"useTabs": false,
"printWidth": 100,
"plugins": ["prettier-plugin-tailwindcss"]
}
3 changes: 1 addition & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#F8F5F0" />
<meta name="theme-color" content="#fcfcfc" />
<meta name="iSpeakerReact | yell0wsuit" content="" />
<link rel="apple-touch-icon" href="/images/icons/ios/192.png" />
<link rel="manifest" href="/manifest.json" />
<title>iSpeakerReact | yell0wsuit</title>
<link href="/styles/style.css" rel="stylesheet" />
<meta
Expand Down
4,016 changes: 3,530 additions & 486 deletions package-lock.json

Large diffs are not rendered by default.

53 changes: 30 additions & 23 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"author": "yell0wsuit",
"description": "An English-learning interactive tool written in React, designed to help learners practice speaking and listening",
"private": true,
"version": "2.4.1",
"version": "3.0.0",
"type": "module",
"main": "main.cjs",
"license": "Apache-2.0",
Expand All @@ -21,31 +21,30 @@
"appxarm": "vite build --mode electron && electron-forge package --arch=arm64 && cd ./out && electron-windows-store --input-directory ./iSpeakerReact-win32-arm64 --output-directory ./ispeakerreact-appx --package-version ${npm_package_version}.0 --package-name ispeakerreact --assets ../public/images/icons/windows11 -m ./appxmanifest.xml"
},
"dependencies": {
"@dnd-kit/core": "^6.2.0",
"@dnd-kit/sortable": "^9.0.0",
"@react-spring/web": "^9.7.5",
"bootstrap": "^5.3.3",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@vidstack/react": "^1.12.12",
"cors": "^2.8.5",
"dexie": "^4.0.10",
"electron-log": "^5.2.3",
"electron-log": "^5.2.4",
"electron-squirrel-startup": "^1.0.1",
"express": "^4.21.1",
"express": "^4.21.2",
"he": "^1.2.0",
"i18next": "^24.0.5",
"i18next-browser-languagedetector": "^8.0.0",
"i18next": "^24.2.0",
"i18next-browser-languagedetector": "^8.0.2",
"i18next-http-backend": "^3.0.1",
"lodash": "^4.17.21",
"masonry-layout": "^4.2.2",
"mime": "^4.0.4",
"mime": "^4.0.6",
"nprogress": "^0.2.0",
"react": "^18.3.1",
"react-bootstrap": "^2.10.6",
"react-bootstrap-icons": "^1.11.4",
"react-dom": "^18.3.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-flip-toolkit": "^7.2.4",
"react-i18next": "^15.1.3",
"react-i18next": "^15.2.0",
"react-icons": "^5.4.0",
"react-loading-skeleton": "^3.5.0",
"react-router-dom": "^7.0.2"
"react-router-dom": "^7.0.2",
"sonner": "^1.7.1"
},
"devDependencies": {
"@electron-forge/cli": "^7.6.0",
Expand All @@ -57,20 +56,28 @@
"@electron-forge/plugin-auto-unpack-natives": "^7.6.0",
"@electron-forge/plugin-fuses": "^7.6.0",
"@electron/fuses": "^1.8.0",
"@eslint/js": "^9.16.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@eslint/js": "^9.17.0",
"@tailwindcss/typography": "^0.5.15",
"@types/react": "^19.0.2",
"@types/react-dom": "^19.0.2",
"@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "^10.4.20",
"concurrently": "^9.1.0",
"cross-env": "^7.0.3",
"daisyui": "^4.12.22",
"electron": "^33.2.1",
"eslint": "^9.16.0",
"eslint": "^9.17.0",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-hooks": "^5.1.0",
"eslint-plugin-react-refresh": "^0.4.16",
"globals": "^15.13.0",
"globals": "^15.14.0",
"postcss": "^8.4.49",
"prettier": "^3.4.2",
"prettier-plugin-tailwindcss": "^0.6.9",
"rollup-plugin-visualizer": "^5.12.0",
"vite": "^6.0.2",
"tailwindcss": "^3.4.17",
"vite": "^6.0.4",
"vite-plugin-pwa": "^0.21.1",
"wait-on": "^8.0.1"
},
"optionalDependencies": {
Expand Down
6 changes: 6 additions & 0 deletions postcss.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
Binary file removed public/fonts/NotoColorEmoji-Regular.woff2
Binary file not shown.
2 changes: 1 addition & 1 deletion public/json/conversation_data.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/json/examspeaking_data.json

Large diffs are not rendered by default.

40 changes: 28 additions & 12 deletions public/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@
"textClearSuccess": "Text cleared successfully.",
"textClearFailed": "Error clearing text. Reason: ",
"audioPlayFailed": "Unable to play audio due to a network issue. Please check your connection and reload the page.",
"loadingError": "Error while loading the data. Please try refreshing the page."
"loadingError": "Error while loading the data. Please try refreshing the page.",
"reviewUpdated": "Review updated successfully."
},
"buttonConversationExam": {
"watchBtn": "Watch",
Expand All @@ -57,6 +58,7 @@
"taskCard": "Task",
"watchCard": "Watch the video",
"studyCard": "Study",
"studyExpandBtn": "Transcription and key languages",
"imageFullSizeModal": "Full size view",
"practiceConversationText": [
"Practice writing your own conversation.",
Expand Down Expand Up @@ -90,6 +92,7 @@
},
"exercise_page": {
"exerciseSubheading": "Select an exercise to get started.",
"modalInfoHeader": "Exercise info",
"dictationHeading": "Dictation",
"matchUpHeading": "Match-up",
"reorderingHeading": "Reordering",
Expand All @@ -111,7 +114,7 @@
"homophonesExercise": "Homophones",
"questionNo": "Question",
"timer": "Time:",
"dropLayer": "Drop here...",
"dropLayer": "Drop here",
"dragThisItem": "Drag this",
"snapCorrect": "Correct",
"snapIncorrect": "Incorrect",
Expand All @@ -121,8 +124,10 @@
"quitBtn": "Quit",
"restartBtn": "Restart quiz",
"backBtn": "Back to exercise list",
"instructionBtn": "Instructions",
"collapseBtn": "Collapse instructions",
"expandBtn": "View instructions"
"expandBtn": "See instructions",
"playAudioBtn": "Play audio"
},
"exerciseInfo": {
"dictationWord": "Test your listening and spelling with word dictations",
Expand Down Expand Up @@ -322,6 +327,8 @@
"conversationPage": {
"selectType": "Select a conversation type to get started",
"topicHeading": "Topic: ",
"conversationModalInfo": "Conversation info",
"expandInfoBtn": "See conversation info",
"discussionAndOpinion": {
"heading": "Discussion and opinion",
"agreeingTitle": "Agreeing",
Expand Down Expand Up @@ -531,6 +538,8 @@
"examPage": {
"selectType": "Select an exam task to get started.",
"taskInfo": "Task info",
"examModalInfo": "Exam info",
"expandInfoBtn": "See exam info",
"groupTask": {
"heading": "Group tasks",
"discussingOpinions": {
Expand Down Expand Up @@ -703,7 +712,9 @@
"listenHeading1": "Asking for personal information",
"listenHeading2": "Giving personal information",
"listenHeading3": "Talking about future plans",
"practiceQuestion": ["Answer the same questions from the video, giving information about yourself."],
"practiceQuestion": [
"Answer the same questions from the video, giving information about yourself."
],
"tipDos": [
"Use language you know is correct.",
"Think of a different way of expressing your idea if you’ve forgotten a word.",
Expand Down Expand Up @@ -866,7 +877,9 @@
"listenHeading3": "Talking about your skills and work experience",
"listenHeading4": "Talking about your hopes for the future",
"listenHeading5": "Questions to ask an employer",
"practiceQuestion": ["Role-play a job interview, talking about your own skills and experience."],
"practiceQuestion": [
"Role-play a job interview, talking about your own skills and experience."
],
"tipDos": [
"Maintain eye contact when possible.",
"Listen carefully to each question and ask for clarification if you aren’t sure what something means.",
Expand All @@ -892,6 +905,8 @@
"checkUpdateBtn": "Check for updates",
"checkUpdateMSBtn": "Check for updates in Microsoft Store",
"openGitHubAlertLink": "Open GitHub",
"changeSaved": "Changes saved",
"noDataToDelete": "No data to delete",
"exerciseSettings": {
"timerHeading": "Exercise timer",
"timerOption": "Enable timer",
Expand Down Expand Up @@ -919,19 +934,20 @@
},
"videoDownloadSettings": {
"videoDownloadHeading": "Video downloads",
"videoDownloadOption": "Download video files",
"videoDownloadOption": "Download video files",
"videoPageHeading": "Download video files for offline watching",
"backToSettingsBtn": "Back to settings",
"instructionCardHeading": "Instructions",
"steps": [
"<1>Step {{number}}</1>: Click on the “Download” link to download the video file you want to watch offline.",
"<1>Step {{number}}</1>: Click on the “Open download folder” button, and move the file(s) you have downloaded into there.",
"<1>Step {{number}}</1>: Click on the “Back to settings” button (or any page), and then go back to this page. This is to refresh the state of the file downloaded status.",
"<1>Step {{number}}</1>: Click on the “Refresh download status” to refresh the state of the file downloaded status.",
"<1>Step {{number}}</1>: Click on the “Verify” button, and wait until the verification process is finished."
],
"warningHeading": "Warning!",
"warningBody": "Do not manually extract, rename the file(s), or modify the zip file’s content. Doing so will make the verification process fail.",
"openDownloadBtn": "Open download folder",
"refreshDownloadStateBtn": "Refresh download status",
"downloadTable": {
"nameHeading": "Name",
"fileSizeTotalHeading": "Total file size",
Expand Down Expand Up @@ -969,11 +985,11 @@
},
"resetSettings": {
"resetHeading": "Reset settings",
"resetSettingsData": "Reset iSpeakerReact’s settings and review data",
"resetSettingsDataModalMessage": "Are you sure you want to reset iSpeakerReact’s settings and review data? This action cannot be undone.",
"deleteRecordingData": "Delete saved recordings",
"deleteRecordingDataModalMessage": "Are you sure you want to delete saved recordings? This action cannot be undone.",
"resetModalHeading": "Confirm...",
"resetSettingsData": "Reset settings and review data",
"resetSettingsDataModalMessage": "Are you sure you want to reset settings and review data? This action cannot be undone.",
"deleteRecordingData": "Delete saved texts and recordings",
"deleteRecordingDataModalMessage": "Are you sure you want to delete saved texts and recordings? This action cannot be undone.",
"resetModalHeading": "Confirm",
"resetConfirmBtn": "Confirm"
}
}
Expand Down
Loading