fcad-core-dragon 2.1.1 → 2.2.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/.editorconfig +7 -7
  2. package/.gitlab-ci.yml +106 -0
  3. package/.prettierrc +11 -11
  4. package/.vscode/extensions.json +8 -8
  5. package/.vscode/settings.json +16 -16
  6. package/CHANGELOG +529 -520
  7. package/README.md +57 -57
  8. package/artifacts/playwright-report/index.html +85 -0
  9. package/documentation/.vitepress/config.js +114 -114
  10. package/documentation/api-examples.md +49 -49
  11. package/documentation/composants/app-base-button.md +58 -58
  12. package/documentation/composants/app-base-error-display.md +59 -59
  13. package/documentation/composants/app-base-popover.md +68 -68
  14. package/documentation/composants/app-comp-audio.md +75 -75
  15. package/documentation/composants/app-comp-branch-buttons.md +111 -111
  16. package/documentation/composants/app-comp-button-progress.md +53 -53
  17. package/documentation/composants/app-comp-carousel.md +53 -53
  18. package/documentation/composants/app-comp-container.md +53 -53
  19. package/documentation/composants/app-comp-input-checkbox-next.md +42 -42
  20. package/documentation/composants/app-comp-input-dropdown-next.md +34 -34
  21. package/documentation/composants/app-comp-input-radio-next.md +39 -39
  22. package/documentation/composants/app-comp-input-text-next.md +35 -35
  23. package/documentation/composants/app-comp-input-text-table-next.md +34 -34
  24. package/documentation/composants/app-comp-input-text-to-fill-dropdown-next.md +53 -53
  25. package/documentation/composants/app-comp-input-text-to-fill-next.md +31 -31
  26. package/documentation/composants/app-comp-jauge.md +31 -31
  27. package/documentation/composants/app-comp-menu-item.md +55 -55
  28. package/documentation/composants/app-comp-menu.md +29 -29
  29. package/documentation/composants/app-comp-navigation.md +41 -41
  30. package/documentation/composants/app-comp-note-call.md +53 -53
  31. package/documentation/composants/app-comp-note-credit.md +53 -53
  32. package/documentation/composants/app-comp-play-bar-next.md +53 -53
  33. package/documentation/composants/app-comp-pop-up-next.md +93 -93
  34. package/documentation/composants/app-comp-quiz-next.md +235 -235
  35. package/documentation/composants/app-comp-quiz-recall.md +53 -53
  36. package/documentation/composants/app-comp-svg-next.md +53 -53
  37. package/documentation/composants/app-comp-table-of-content.md +50 -50
  38. package/documentation/composants/app-comp-video-player.md +82 -82
  39. package/documentation/composants.md +46 -46
  40. package/documentation/composants_critiques/ModelPageComposant.md +53 -53
  41. package/documentation/composants_critiques/app-base-module.md +43 -43
  42. package/documentation/composants_critiques/app-base-page.md +48 -48
  43. package/documentation/composants_critiques/app-base.md +311 -311
  44. package/documentation/composants_critiques/main.md +15 -15
  45. package/documentation/demarrage.md +50 -50
  46. package/documentation/deploiement.md +57 -57
  47. package/documentation/index.md +33 -33
  48. package/documentation/markdown-examples.md +85 -85
  49. package/documentation/public/vite.svg +14 -14
  50. package/documentation/public/vuejs.svg +1 -1
  51. package/documentation/public/vuetify.svg +5 -5
  52. package/eslint.config.js +60 -60
  53. package/package.json +69 -59
  54. package/playwright/index.html +12 -0
  55. package/playwright/index.js +21 -0
  56. package/playwright-ct.config.js +95 -0
  57. package/src/$locales/en.json +157 -157
  58. package/src/$locales/fr.json +120 -120
  59. package/src/assets/data/onboardingMessages.json +47 -47
  60. package/src/components/AppBase.vue +1171 -1169
  61. package/src/components/AppBaseButton.vue +90 -95
  62. package/src/components/AppBaseErrorDisplay.vue +438 -438
  63. package/src/components/AppBaseFlipCard.vue +84 -84
  64. package/src/components/AppBaseModule.vue +1639 -1634
  65. package/src/components/AppBasePage.vue +862 -866
  66. package/src/components/AppBasePopover.vue +41 -41
  67. package/src/components/AppBaseSkeleton.vue +66 -66
  68. package/src/components/AppCompAudio.vue +261 -256
  69. package/src/components/AppCompBranchButtons.vue +508 -508
  70. package/src/components/AppCompButtonProgress.vue +137 -132
  71. package/src/components/AppCompCarousel.vue +342 -336
  72. package/src/components/AppCompContainer.vue +29 -29
  73. package/src/components/AppCompInputCheckBoxNx.vue +326 -323
  74. package/src/components/AppCompInputDropdownNx.vue +302 -299
  75. package/src/components/AppCompInputRadioNx.vue +288 -284
  76. package/src/components/AppCompInputTextNx.vue +154 -153
  77. package/src/components/AppCompInputTextTableNx.vue +205 -202
  78. package/src/components/AppCompInputTextToFillDropdownNx.vue +341 -340
  79. package/src/components/AppCompInputTextToFillNx.vue +293 -313
  80. package/src/components/AppCompJauge.vue +81 -81
  81. package/src/components/AppCompMenu.vue +6 -1
  82. package/src/components/AppCompMenuItem.vue +246 -240
  83. package/src/components/AppCompNavigation.vue +977 -972
  84. package/src/components/AppCompNoteCall.vue +167 -161
  85. package/src/components/AppCompNoteCredit.vue +496 -491
  86. package/src/components/AppCompPlayBarNext.vue +2288 -2288
  87. package/src/components/AppCompPopUpNext.vue +508 -504
  88. package/src/components/AppCompQuizNext.vue +515 -510
  89. package/src/components/AppCompQuizRecall.vue +365 -350
  90. package/src/components/AppCompSVGNext.vue +346 -346
  91. package/src/components/AppCompSettingsMenu.vue +177 -172
  92. package/src/components/AppCompTableOfContent.vue +433 -427
  93. package/src/components/AppCompVideoPlayer.vue +378 -377
  94. package/src/components/AppCompViewDisplay.vue +6 -6
  95. package/src/components/BaseModule.vue +55 -55
  96. package/src/composables/useIdleDetector.js +56 -56
  97. package/src/composables/useQuiz.js +89 -89
  98. package/src/composables/useTimer.js +172 -172
  99. package/src/directives/nvdaFix.js +53 -53
  100. package/src/externalComps/ModuleView.vue +22 -22
  101. package/src/externalComps/SummaryView.vue +91 -91
  102. package/src/main.js +506 -476
  103. package/src/module/stores/appStore.js +960 -947
  104. package/src/module/xapi/ADL.js +520 -520
  105. package/src/module/xapi/Crypto/Hasher.js +241 -241
  106. package/src/module/xapi/Crypto/WordArray.js +278 -278
  107. package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
  108. package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
  109. package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
  110. package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
  111. package/src/module/xapi/Crypto/encoders/Base.js +105 -105
  112. package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
  113. package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
  114. package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
  115. package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
  116. package/src/module/xapi/Crypto/index.js +53 -53
  117. package/src/module/xapi/Statement/activity.js +47 -47
  118. package/src/module/xapi/Statement/agent.js +55 -55
  119. package/src/module/xapi/Statement/group.js +26 -26
  120. package/src/module/xapi/Statement/index.js +259 -259
  121. package/src/module/xapi/Statement/statement.js +253 -253
  122. package/src/module/xapi/Statement/statementRef.js +23 -23
  123. package/src/module/xapi/Statement/substatement.js +22 -22
  124. package/src/module/xapi/Statement/verb.js +36 -36
  125. package/src/module/xapi/activitytypes.js +17 -17
  126. package/src/module/xapi/launch.js +157 -157
  127. package/src/module/xapi/utils.js +167 -167
  128. package/src/module/xapi/verbs.js +294 -294
  129. package/src/module/xapi/wrapper.js +1895 -1895
  130. package/src/module/xapi/xapiStatement.js +444 -444
  131. package/src/plugins/analytics.js +34 -34
  132. package/src/plugins/bus.js +12 -8
  133. package/src/plugins/gsap.js +17 -17
  134. package/src/plugins/helper.js +355 -358
  135. package/src/plugins/i18n.js +29 -26
  136. package/src/plugins/idb.js +227 -227
  137. package/src/plugins/save.js +37 -37
  138. package/src/plugins/scorm.js +287 -287
  139. package/src/plugins/xapi.js +11 -11
  140. package/src/public/index.html +33 -33
  141. package/src/router/index.js +57 -57
  142. package/src/router/routes.js +312 -312
  143. package/src/shared/generalfuncs.js +344 -344
  144. package/src/shared/validators.js +1018 -1018
  145. package/tests/component/AppBaseButton.spec.js +53 -0
  146. package/tests/component/pinia.spec.js +24 -0
  147. package/{src/components/tests__ → tests/unit}/AppBaseButton.spec.js +53 -53
  148. package/tests/unit/AppCompAudio.spec.js +134 -0
  149. package/tests/unit/AppCompCarousel.spec.js +54 -0
  150. package/tests/unit/AppCompInputCheckBoxNx.spec.js +59 -0
  151. package/tests/unit/AppCompInputDropdownNx.spec.js +51 -0
  152. package/tests/unit/AppCompInputRadioNx.spec.js +59 -0
  153. package/tests/unit/AppCompInputTextNx.spec.js +44 -0
  154. package/tests/unit/AppCompInputTextTableNx.spec.js +77 -0
  155. package/tests/unit/AppCompInputTextToFillDropdownNx.spec.js +60 -0
  156. package/tests/unit/AppCompInputTextToFillNx.spec.js +45 -0
  157. package/tests/unit/AppCompNoteCredit.spec.js +58 -0
  158. package/tests/unit/AppCompQuizNext.spec.js +112 -0
  159. package/tests/unit/AppCompVideoPlayer.spec.js +169 -0
  160. package/tests/unit/useQuiz.spec.js +72 -0
  161. package/{src/components/tests__ → tests/unit}/useTimer.spec.js +91 -91
  162. package/vitest.config.js +42 -19
  163. package/vitest.setup.js +96 -0
  164. package/src/components/AppBaseButton.test.js +0 -21
package/package.json CHANGED
@@ -1,59 +1,69 @@
1
- {
2
- "name": "fcad-core-dragon",
3
- "version": "2.1.1",
4
- "private": false,
5
- "type": "module",
6
- "main": "./src/main.js",
7
- "scripts": {
8
- "build": "vite build",
9
- "dev": "vite",
10
- "docs:build": "vitepress build documentation",
11
- "docs:dev": "vitepress dev documentation",
12
- "docs:preview": "vitepress preview documentation",
13
- "lintfix": "eslint --fix src",
14
- "lintreport": "eslint ./src",
15
- "preview": "vite preview",
16
- "reset": "rm -rf ./node_modules package-lock.json .cache dist && npm i && npm run watch",
17
- "test:unit": "vitest",
18
- "vue": "vue",
19
- "watch": "nodemon -e js,vue,html,json -x yalc publish --push",
20
- "format": "prettier --write src/"
21
- },
22
- "config": {
23
- "projname": ""
24
- },
25
- "browserslist": [
26
- "> 1%",
27
- "last 2 versions",
28
- "not dead"
29
- ],
30
- "dependencies": {
31
- "axios": "^1.6.8",
32
- "gsap": "^3.12.5",
33
- "idb": "^8.0.0",
34
- "mobile-detect": "^1.4.5",
35
- "pinia": "^3.0.3",
36
- "tiny-emitter": "^2.1.0",
37
- "vue-safe-teleport": "^0.1.2"
38
- },
39
- "devDependencies": {
40
- "@eslint/js": "^9.38.0",
41
- "@vitejs/plugin-vue": "^6.0.1",
42
- "@vue/eslint-config-prettier": "^10.2.0",
43
- "@vue/test-utils": "^2.4.6",
44
- "eslint": "^9.38.0",
45
- "eslint-plugin-cypress": "^5.1.0",
46
- "eslint-plugin-vue": "~10.3.0",
47
- "globals": "^16.4.0",
48
- "jsdom": "^25.0.1",
49
- "nodemon": "^3.1.0",
50
- "prettier": "^3.6.2",
51
- "sass-embedded": "^1.91.0",
52
- "vitepress": "^1.6.3",
53
- "vitest": "^3.2.4",
54
- "vue-router": "^4.4.5"
55
- },
56
- "engines": {
57
- "node": ">0.11.9"
58
- }
59
- }
1
+ {
2
+ "browserslist": [
3
+ "> 1%",
4
+ "last 2 versions",
5
+ "not dead"
6
+ ],
7
+ "config": {
8
+ "projname": ""
9
+ },
10
+ "dependencies": {
11
+ "axios": "^1.6.8",
12
+ "gsap": "^3.12.5",
13
+ "idb": "^8.0.0",
14
+ "mobile-detect": "^1.4.5",
15
+ "pinia": "^3.0.3",
16
+ "tiny-emitter": "^2.1.0",
17
+ "vue-safe-teleport": "^0.1.2"
18
+ },
19
+ "devDependencies": {
20
+ "@eslint/js": "^9.38.0",
21
+ "@pinia/testing": "^1.0.3",
22
+ "@playwright/experimental-ct-vue": "^1.56.1",
23
+ "@playwright/test": "^1.56.1",
24
+ "@types/node": "^24.10.0",
25
+ "@vitejs/plugin-vue": "^6.0.1",
26
+ "@vitest/coverage-v8": "^4.0.15",
27
+ "@vue/eslint-config-prettier": "^10.2.0",
28
+ "@vue/test-utils": "^2.4.6",
29
+ "eslint": "^9.38.0",
30
+ "eslint-plugin-cypress": "^5.1.0",
31
+ "eslint-plugin-vue": "~10.3.0",
32
+ "globals": "^16.4.0",
33
+ "happy-dom": "^20.0.10",
34
+ "jsdom": "^25.0.1",
35
+ "nodemon": "^3.1.0",
36
+ "prettier": "^3.6.2",
37
+ "sass-embedded": "^1.91.0",
38
+ "vitepress": "^1.6.3",
39
+ "vitest": "^4.0.15",
40
+ "vue-i18n": "^11.1.12",
41
+ "vue-router": "^4.4.5",
42
+ "vuetify": "^3.10.10"
43
+ },
44
+ "engines": {
45
+ "node": ">0.11.9"
46
+ },
47
+ "main": "./src/main.js",
48
+ "name": "fcad-core-dragon",
49
+ "private": false,
50
+ "scripts": {
51
+ "build": "vite build",
52
+ "dev": "vite",
53
+ "docs:build": "vitepress build documentation",
54
+ "docs:dev": "vitepress dev documentation",
55
+ "docs:preview": "vitepress preview documentation",
56
+ "format": "prettier --write src/",
57
+ "lintfix": "eslint --fix src",
58
+ "lintreport": "eslint ./src",
59
+ "preview": "vite preview",
60
+ "reset": "rm -rf ./node_modules package-lock.json .cache dist && npm i && npm run watch",
61
+ "test-ct": "playwright test -c playwright-ct.config.js",
62
+ "test:unit": "vitest",
63
+ "test:unit:coverage": "vitest --coverage",
64
+ "vue": "vue",
65
+ "watch": "nodemon -e js,vue,html,json -x yalc publish --push"
66
+ },
67
+ "type": "module",
68
+ "version": "2.2.0-beta.1"
69
+ }
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Testing Page</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="./index.js"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,21 @@
1
+ // Import styles, initialize component theme here.
2
+ //import '../src/sass/main.scss'
3
+ import { beforeMount } from '@playwright/experimental-ct-vue/hooks'
4
+ import { createTestingPinia } from '@pinia/testing'
5
+ // import { StoreState } from 'pinia'
6
+ // import { useAppStore } from '../src/module/stores/appStore.js'
7
+
8
+ beforeMount(async ({ hooksConfig }) => {
9
+ createTestingPinia({
10
+ initialState: hooksConfig?.store,
11
+ /**
12
+ * Use HTTP intercepting to mock API calls instead:
13
+ * https://playwright.dev/docs/mock#mock-api-requests
14
+ */
15
+ stubActions: false,
16
+ createSpy(args) {
17
+ console.log('spy', args)
18
+ return () => console.log('spy-returns')
19
+ }
20
+ })
21
+ })
@@ -0,0 +1,95 @@
1
+ // @ts-check
2
+ import { defineConfig, devices } from '@playwright/experimental-ct-vue'
3
+ import { mergeConfig } from 'vite'
4
+ import vue from '@vitejs/plugin-vue'
5
+ import path from 'path'
6
+ import fs from 'fs'
7
+ import { pathToFileURL } from 'url'
8
+ import { fileURLToPath } from 'url'
9
+
10
+ const __filename = fileURLToPath(import.meta.url)
11
+ const __dirname = path.dirname(__filename)
12
+
13
+ //===================================================
14
+ // Load base Vite config
15
+ const viteConfigPath = process.env.VITE_CONFIG_PATH
16
+ ? path.resolve(process.env.VITE_CONFIG_PATH)
17
+ : path.resolve(
18
+ path.dirname(import.meta.url.replace('file:///', '')),
19
+ 'vite.config.js'
20
+ )
21
+
22
+ // if (!fs.existsSync(viteConfigPath)) {
23
+ // throw new Error(`vite.config.js introuvable à ${viteConfigPath}`)
24
+ // }
25
+
26
+ const viteConfig = !fs.existsSync(viteConfigPath)
27
+ ? {}
28
+ : (await import(pathToFileURL(viteConfigPath).href)).default
29
+ //===================================================
30
+
31
+ /**
32
+ * @see https://playwright.dev/docs/test-configuration
33
+ */
34
+ export default defineConfig({
35
+ testDir: './tests/component',
36
+ testMatch: ['**/*.spec.js'],
37
+ /* The base directory, relative to the config file, for snapshot files created with toMatchSnapshot and toHaveScreenshot. */
38
+ snapshotDir: './__snapshots__',
39
+ /* Maximum time one test can run for. */
40
+ timeout: 30 * 1000,
41
+ /* Run tests in files in parallel */
42
+ fullyParallel: true,
43
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
44
+ forbidOnly: !!process.env.CI,
45
+ /* Retry on CI only */
46
+ retries: process.env.CI ? 2 : 0,
47
+ /* Opt out of parallel tests on CI. */
48
+ workers: process.env.CI ? 1 : undefined,
49
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
50
+ reporter: [
51
+ ['line'],
52
+ ['junit', { outputFile: 'results.xml' }],
53
+ ['html', { outputFolder: 'playwright-report', open: 'never' }]
54
+ ],
55
+ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
56
+ use: {
57
+ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
58
+ trace: 'on-first-retry',
59
+
60
+ /* Port to use for Playwright component endpoint. */
61
+ ctPort: 3100,
62
+ headless: true
63
+ },
64
+ ctViteConfig: {
65
+ plugins: [vue()],
66
+ optimizeDeps: { include: ['vue', 'pinia', 'vue-router'] },
67
+ resolve: {
68
+ alias: {
69
+ '@': path.resolve(__dirname, './src')
70
+ }
71
+ }
72
+ },
73
+ expect: {
74
+ /**
75
+ * Maximum time expect() should wait for the condition to be met.
76
+ * For example in `await expect(locator).toHaveText();`
77
+ */
78
+ timeout: 10000
79
+ },
80
+ /* Configure projects for major browsers */
81
+ projects: [
82
+ {
83
+ name: 'chromium',
84
+ use: { ...devices['Desktop Chrome'] }
85
+ },
86
+ {
87
+ name: 'firefox',
88
+ use: { ...devices['Desktop Firefox'] }
89
+ },
90
+ {
91
+ name: 'webkit',
92
+ use: { ...devices['Desktop Safari'] }
93
+ }
94
+ ]
95
+ })
@@ -1,157 +1,157 @@
1
- {
2
- "button": {
3
- "carousel_next": "Next",
4
- "carousel_prev": "Previous",
5
- "full_screen_on": "Full-screen",
6
- "full_screen_off": "Exit full-screen",
7
- "go_to_next_page": "Go to the next page",
8
- "go_to_previous_page": "Go to the previous page",
9
- "go_to_first_page": "Go to the first page",
10
- "go_to_lesson": "Go to the next lesson",
11
- "go_to_menu": "Go to the lesson contents page",
12
- "info": "Info",
13
- "menu": "Start",
14
- "menu_item": {
15
- "end": "Pick up where I left off",
16
- "start": "Start the lesson"
17
- },
18
- "mute": "Mute",
19
- "next": "Next",
20
- "next_activity": "Go to the next activity",
21
- "pause": "Pause",
22
- "play": "Play",
23
- "previous": "Previous",
24
- "quiz_verify": "Check",
25
- "replay": "Replay",
26
- "save": "Save",
27
- "subtitle_off": "Hide subtitles",
28
- "subtitle_on": "Display subtitles",
29
- "submit": "Check",
30
- "toc": "Progression",
31
- "toc_title": "Show activity contents",
32
- "transcript_off": "Hide transcript",
33
- "transcript_on": "Show transcript",
34
- "unmute": "Unmute",
35
- "volume": "Volume",
36
- "closePopUp": "Close"
37
- },
38
- "instruction": {
39
- "branch": "Click on the item to find additional information.",
40
- "bif": "Select the path you wish to discover.",
41
- "choix_mult": "Select one or more options, then check your answer.",
42
- "choix_mult_no_validation": "Select one or more options, then confirm your answer.",
43
- "choix_unique": "Select your answer, then check it.",
44
- "choix_unique_no_validation": "Select an option, then confirm your answer.",
45
- "click_show": "Click on the item to find additional information.",
46
- "dropdown": "Match the correct answers to the corresponding statements, then check your answers.",
47
- "dropdown_no_validation": "Match an answer to each statement, then confirm your answers.",
48
- "pop_over": "Hover over the item to display the information.",
49
- "reponse_ouverte": "Write your answer and save it.",
50
- "reponse_ouverte_no_validation": "Write your answer and save it.",
51
- "texte_tableau": {
52
- "multi": "Write your answers, then check them.",
53
- "single": "Write your answer, then check it."
54
- },
55
- "texte_tableau_no_validation": {
56
- "multi": "Write your answers, then save them.",
57
- "single": "Write your answer and save it."
58
- },
59
- "texte_troue": {
60
- "multi": "Write your answers, then check them.",
61
- "single": "Write your answer, then check it."
62
- },
63
- "texte_troue_no_validation": {
64
- "multi": "Write your answers, then save them.",
65
- "single": "Write your answer and save it."
66
- },
67
- "texte_troue_select": {
68
- "multi": "Select some options, then check your answers.",
69
- "single": "Select an option, then check your answer."
70
- },
71
- "texte_troue_select_no_validation": {
72
- "multi": "Select some options, then save them.",
73
- "single": "Select an option, and save it."
74
- }
75
- },
76
- "label": {
77
- "side_panel": "side panel",
78
- "timer": "estimated time",
79
- "info_long": "Display notes and references",
80
- "note_reference": "???"
81
- },
82
- "message": {
83
- "err_download_file": "The file download has failed.",
84
- "dropdown_list": "Dropdown list",
85
- "first_option_dropdown": "Choose an option",
86
- "no_attempts": "You have no more attempts.",
87
- "loading_state_msg": "Loading. Please wait...",
88
- "progress_card": "Progress status:",
89
- "recall_done": "You have answered the question :",
90
- "recall_undone": "You have not answered the question.",
91
- "skip_content": "Skip to the main content."
92
- },
93
- "popup": {
94
- "text_what_to_do": "What do you wish to do?"
95
- },
96
- "text": {
97
- "activity": "Activity",
98
- "activity_title": "My activities",
99
- "activity_progress": "Progress status:",
100
- "carousel": "Carousel",
101
- "conclusion": "Conclusion to the Lesson",
102
- "complete": "Completed",
103
- "error": "error",
104
- "introduction": "Introduction to the Lesson",
105
- "lesson": "Lesson",
106
- "quiz": "Words to complete the sentence",
107
- "place_holder": {
108
- "for_lesson_title": "Title of this lesson",
109
- "for_textarea": "Write here.",
110
- "for_title_btn_progress": "Click to discover the content"
111
- },
112
- "of": "of",
113
- "slide": "Slide",
114
- "title_note": "Note(s)",
115
- "title_credit": "Credit(s)",
116
- "err_credit": "Le texte de la page ne comporte pas d’appel de note correspondant à cette note-ci. Un appel de note doit être ajouté.",
117
- "title_link_bas": "Go back to the text",
118
- "title_link_call": "Go to the footnote",
119
- "toc": "Show activity contents",
120
- "title_content_view": "Contents",
121
- "transcript": "Transcript"
122
- },
123
- "user_settings": {
124
- "autoplay": "Automatic playback of multimedia content",
125
- "close": "Close this window",
126
- "onboarding": "Turn on the guided tour",
127
- "subtitles": "Always show subtitles when playing multimedia content",
128
- "title": "Settings"
129
- },
130
- "quizState": {
131
- "goodAnswer": "Good answer",
132
- "badAnswer": "Wrong answer",
133
- "neutralAnswer": "Neutral answer",
134
- "answers": "Answer choices",
135
- "radioFieldset": "Select one answer from the following",
136
- "checkboxFieldset": "Select one or more answers from the following",
137
- "options": "options",
138
- "textTableFieldset1": "Fill the",
139
- "textTableFieldset2": "following text fields",
140
- "dropdownFieldsetSingle": "Select an answer in the following dropdown list",
141
- "dropdownFieldsetMulti1": "Select an answer in the",
142
- "dropdownFieldsetMulti2": "following dropdown lists",
143
- "textToFillFieldset1": "In the following text, fill the",
144
- "textToFillFieldset2": "text fields",
145
- "textToFillDropdownFieldset1": "In the following text, Select an answer in the",
146
- "textToFillDropdownFieldset2": "text fields"
147
- },
148
- "a11y_sr": {
149
- "time": {
150
- "hours": "hour | hours",
151
- "minute": "minute | minutes",
152
- "second": "second |seconds"
153
- },
154
- "seek_slider": "Seek slider",
155
- "range_expression": "at %x of %y."
156
- }
157
- }
1
+ {
2
+ "button": {
3
+ "carousel_next": "Next",
4
+ "carousel_prev": "Previous",
5
+ "full_screen_on": "Full-screen",
6
+ "full_screen_off": "Exit full-screen",
7
+ "go_to_next_page": "Go to the next page",
8
+ "go_to_previous_page": "Go to the previous page",
9
+ "go_to_first_page": "Go to the first page",
10
+ "go_to_lesson": "Go to the next lesson",
11
+ "go_to_menu": "Go to the lesson contents page",
12
+ "info": "Info",
13
+ "menu": "Start",
14
+ "menu_item": {
15
+ "end": "Pick up where I left off",
16
+ "start": "Start the lesson"
17
+ },
18
+ "mute": "Mute",
19
+ "next": "Next",
20
+ "next_activity": "Go to the next activity",
21
+ "pause": "Pause",
22
+ "play": "Play",
23
+ "previous": "Previous",
24
+ "quiz_verify": "Check",
25
+ "replay": "Replay",
26
+ "save": "Save",
27
+ "subtitle_off": "Hide subtitles",
28
+ "subtitle_on": "Display subtitles",
29
+ "submit": "Check",
30
+ "toc": "Progression",
31
+ "toc_title": "Show activity contents",
32
+ "transcript_off": "Hide transcript",
33
+ "transcript_on": "Show transcript",
34
+ "unmute": "Unmute",
35
+ "volume": "Volume",
36
+ "closePopUp": "Close"
37
+ },
38
+ "instruction": {
39
+ "branch": "Click on the item to find additional information.",
40
+ "bif": "Select the path you wish to discover.",
41
+ "choix_mult": "Select one or more options, then check your answer.",
42
+ "choix_mult_no_validation": "Select one or more options, then confirm your answer.",
43
+ "choix_unique": "Select your answer, then check it.",
44
+ "choix_unique_no_validation": "Select an option, then confirm your answer.",
45
+ "click_show": "Click on the item to find additional information.",
46
+ "dropdown": "Match the correct answers to the corresponding statements, then check your answers.",
47
+ "dropdown_no_validation": "Match an answer to each statement, then confirm your answers.",
48
+ "pop_over": "Hover over the item to display the information.",
49
+ "reponse_ouverte": "Write your answer and save it.",
50
+ "reponse_ouverte_no_validation": "Write your answer and save it.",
51
+ "texte_tableau": {
52
+ "multi": "Write your answers, then check them.",
53
+ "single": "Write your answer, then check it."
54
+ },
55
+ "texte_tableau_no_validation": {
56
+ "multi": "Write your answers, then save them.",
57
+ "single": "Write your answer and save it."
58
+ },
59
+ "texte_troue": {
60
+ "multi": "Write your answers, then check them.",
61
+ "single": "Write your answer, then check it."
62
+ },
63
+ "texte_troue_no_validation": {
64
+ "multi": "Write your answers, then save them.",
65
+ "single": "Write your answer and save it."
66
+ },
67
+ "texte_troue_select": {
68
+ "multi": "Select some options, then check your answers.",
69
+ "single": "Select an option, then check your answer."
70
+ },
71
+ "texte_troue_select_no_validation": {
72
+ "multi": "Select some options, then save them.",
73
+ "single": "Select an option, and save it."
74
+ }
75
+ },
76
+ "label": {
77
+ "side_panel": "side panel",
78
+ "timer": "estimated time",
79
+ "info_long": "Display notes and references",
80
+ "note_reference": "???"
81
+ },
82
+ "message": {
83
+ "err_download_file": "The file download has failed.",
84
+ "dropdown_list": "Dropdown list",
85
+ "first_option_dropdown": "Choose an option",
86
+ "no_attempts": "You have no more attempts.",
87
+ "loading_state_msg": "Loading. Please wait...",
88
+ "progress_card": "Progress status:",
89
+ "recall_done": "You have answered the question :",
90
+ "recall_undone": "You have not answered the question.",
91
+ "skip_content": "Skip to the main content."
92
+ },
93
+ "popup": {
94
+ "text_what_to_do": "What do you wish to do?"
95
+ },
96
+ "text": {
97
+ "activity": "Activity",
98
+ "activity_title": "My activities",
99
+ "activity_progress": "Progress status:",
100
+ "carousel": "Carousel",
101
+ "conclusion": "Conclusion to the Lesson",
102
+ "complete": "Completed",
103
+ "error": "error",
104
+ "introduction": "Introduction to the Lesson",
105
+ "lesson": "Lesson",
106
+ "quiz": "Words to complete the sentence",
107
+ "place_holder": {
108
+ "for_lesson_title": "Title of this lesson",
109
+ "for_textarea": "Write here.",
110
+ "for_title_btn_progress": "Click to discover the content"
111
+ },
112
+ "of": "of",
113
+ "slide": "Slide",
114
+ "title_note": "Note(s)",
115
+ "title_credit": "Credit(s)",
116
+ "err_credit": "Le texte de la page ne comporte pas d’appel de note correspondant à cette note-ci. Un appel de note doit être ajouté.",
117
+ "title_link_bas": "Go back to the text",
118
+ "title_link_call": "Go to the footnote",
119
+ "toc": "Show activity contents",
120
+ "title_content_view": "Contents",
121
+ "transcript": "Transcript"
122
+ },
123
+ "user_settings": {
124
+ "autoplay": "Automatic playback of multimedia content",
125
+ "close": "Close this window",
126
+ "onboarding": "Turn on the guided tour",
127
+ "subtitles": "Always show subtitles when playing multimedia content",
128
+ "title": "Settings"
129
+ },
130
+ "quizState": {
131
+ "goodAnswer": "Good answer",
132
+ "badAnswer": "Wrong answer",
133
+ "neutralAnswer": "Neutral answer",
134
+ "answers": "Answer choices",
135
+ "radioFieldset": "Select one answer from the following",
136
+ "checkboxFieldset": "Select one or more answers from the following",
137
+ "options": "options",
138
+ "textTableFieldset1": "Fill the",
139
+ "textTableFieldset2": "following text fields",
140
+ "dropdownFieldsetSingle": "Select an answer in the following dropdown list",
141
+ "dropdownFieldsetMulti1": "Select an answer in the",
142
+ "dropdownFieldsetMulti2": "following dropdown lists",
143
+ "textToFillFieldset1": "In the following text, fill the",
144
+ "textToFillFieldset2": "text fields",
145
+ "textToFillDropdownFieldset1": "In the following text, Select an answer in the",
146
+ "textToFillDropdownFieldset2": "text fields"
147
+ },
148
+ "a11y_sr": {
149
+ "time": {
150
+ "hours": "hour | hours",
151
+ "minute": "minute | minutes",
152
+ "second": "second |seconds"
153
+ },
154
+ "seek_slider": "Seek slider",
155
+ "range_expression": "at %x of %y."
156
+ }
157
+ }