@windward/games 0.0.9 → 0.1.0

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 (137) hide show
  1. package/components/content/CrudTable.vue +2 -2
  2. package/components/content/blocks/crosswordPuzzle/CrosswordClues.vue +4 -2
  3. package/components/content/blocks/crosswordPuzzle/CrosswordPuzzle.vue +14 -12
  4. package/components/content/blocks/dragDrop/BucketGame.vue +54 -101
  5. package/components/content/blocks/dragDrop/SortingGame.vue +47 -33
  6. package/components/content/blocks/flashcards/CardFace.vue +38 -39
  7. package/components/content/blocks/flashcards/Flashcard.vue +109 -28
  8. package/components/content/blocks/flashcards/FlashcardSlides.vue +3 -2
  9. package/components/content/blocks/matchingGame/MatchingGame.vue +105 -61
  10. package/components/content/blocks/multipleChoice/MultipleChoice.vue +186 -225
  11. package/components/content/blocks/multipleChoice/QuestionDialog.vue +7 -7
  12. package/components/content/blocks/quizshowGame/AnswerPanel.vue +31 -24
  13. package/components/content/blocks/quizshowGame/Gridview.vue +20 -24
  14. package/components/content/blocks/quizshowGame/QuizShow.vue +22 -9
  15. package/components/content/blocks/quizshowGame/feedbackIcons.vue +4 -2
  16. package/components/content/blocks/sevenStrikes/SevenStikes.vue +153 -108
  17. package/components/content/blocks/sevenStrikes/keyboard.vue +9 -2
  18. package/components/content/blocks/slideshow/SlideShow.vue +5 -3
  19. package/components/content/blocks/wordJumble/Jumble.vue +4 -4
  20. package/components/content/blocks/wordJumble/WordJumble.vue +128 -62
  21. package/components/settings/BucketGameSettingsManager.vue +185 -359
  22. package/components/settings/CrosswordPuzzleSettingsManager.vue +114 -181
  23. package/components/settings/FlashCardSlidesManager.vue +323 -419
  24. package/components/settings/MatchingGameManager.vue +357 -618
  25. package/components/settings/MultipleChoiceSettingsManager.vue +130 -140
  26. package/components/settings/QuizShowSettingsManager.vue +17 -17
  27. package/components/settings/SevenStrikesSettingsManager.vue +131 -193
  28. package/components/settings/SlideShowManager.vue +91 -129
  29. package/components/settings/SortingGameSettingsManager.vue +41 -153
  30. package/components/settings/WordJumbleSettingsManager.vue +84 -150
  31. package/i18n/en-US/components/content/blocks/bucket_game.ts +1 -0
  32. package/i18n/en-US/components/content/blocks/flashcard.ts +3 -0
  33. package/i18n/en-US/components/content/blocks/word_jumble.ts +2 -0
  34. package/i18n/en-US/components/settings/bucket_game.ts +3 -2
  35. package/i18n/en-US/components/settings/flashcard.ts +1 -0
  36. package/i18n/en-US/components/settings/matching_game.ts +1 -1
  37. package/i18n/en-US/components/settings/quizshow_game.ts +1 -1
  38. package/i18n/en-US/components/settings/seven_strikes.ts +1 -1
  39. package/i18n/en-US/components/settings/slideshow.ts +2 -0
  40. package/i18n/en-US/index.ts +2 -1
  41. package/i18n/es-ES/components/content/blocks/bucket_game.ts +40 -0
  42. package/i18n/es-ES/components/content/blocks/crossword.ts +25 -0
  43. package/i18n/es-ES/components/content/blocks/flashcard.ts +8 -0
  44. package/i18n/es-ES/components/content/blocks/index.ts +23 -0
  45. package/i18n/es-ES/components/content/blocks/matching_game.ts +26 -0
  46. package/i18n/es-ES/components/content/blocks/multiple_choice.ts +9 -0
  47. package/i18n/es-ES/components/content/blocks/quizshow_game.ts +35 -0
  48. package/i18n/es-ES/components/content/blocks/seven_strikes.ts +6 -0
  49. package/i18n/es-ES/components/content/blocks/slideshow.ts +13 -0
  50. package/i18n/es-ES/components/content/blocks/sorting_game.ts +5 -0
  51. package/i18n/es-ES/components/content/blocks/word_jumble.ts +11 -0
  52. package/i18n/es-ES/components/content/crud_table.ts +6 -0
  53. package/i18n/es-ES/components/content/index.ts +7 -0
  54. package/i18n/es-ES/components/index.ts +9 -0
  55. package/i18n/es-ES/components/navigation/index.ts +5 -0
  56. package/i18n/es-ES/components/settings/bucket_game.ts +39 -0
  57. package/i18n/es-ES/components/settings/crossword.ts +7 -0
  58. package/i18n/es-ES/components/settings/flashcard.ts +29 -0
  59. package/i18n/es-ES/components/settings/index.ts +23 -0
  60. package/i18n/es-ES/components/settings/matching_game.ts +15 -0
  61. package/i18n/es-ES/components/settings/multiple_choice.ts +17 -0
  62. package/i18n/es-ES/components/settings/quizshow_game.ts +20 -0
  63. package/i18n/es-ES/components/settings/seven_strikes.ts +8 -0
  64. package/i18n/es-ES/components/settings/slideshow.ts +13 -0
  65. package/i18n/es-ES/components/settings/sorting_game.ts +5 -0
  66. package/i18n/es-ES/components/settings/word_jumble.ts +11 -0
  67. package/i18n/es-ES/index.ts +16 -0
  68. package/i18n/es-ES/modules/index.ts +5 -0
  69. package/i18n/es-ES/pages/index.ts +5 -0
  70. package/i18n/es-ES/shared/content_blocks.ts +18 -0
  71. package/i18n/es-ES/shared/index.ts +7 -0
  72. package/i18n/es-ES/shared/settings.ts +14 -0
  73. package/i18n/index.ts +11 -0
  74. package/i18n/sv-SE/components/content/blocks/bucket_game.ts +40 -0
  75. package/i18n/sv-SE/components/content/blocks/crossword.ts +20 -0
  76. package/i18n/sv-SE/components/content/blocks/flashcard.ts +8 -0
  77. package/i18n/sv-SE/components/content/blocks/index.ts +23 -0
  78. package/i18n/sv-SE/components/content/blocks/matching_game.ts +25 -0
  79. package/i18n/sv-SE/components/content/blocks/multiple_choice.ts +9 -0
  80. package/i18n/sv-SE/components/content/blocks/quizshow_game.ts +35 -0
  81. package/i18n/sv-SE/components/content/blocks/seven_strikes.ts +6 -0
  82. package/i18n/sv-SE/components/content/blocks/slideshow.ts +13 -0
  83. package/i18n/sv-SE/components/content/blocks/sorting_game.ts +5 -0
  84. package/i18n/sv-SE/components/content/blocks/word_jumble.ts +11 -0
  85. package/i18n/sv-SE/components/content/crud_table.ts +6 -0
  86. package/i18n/sv-SE/components/content/index.ts +7 -0
  87. package/i18n/sv-SE/components/index.ts +9 -0
  88. package/i18n/sv-SE/components/navigation/index.ts +5 -0
  89. package/i18n/sv-SE/components/settings/bucket_game.ts +38 -0
  90. package/i18n/sv-SE/components/settings/crossword.ts +7 -0
  91. package/i18n/sv-SE/components/settings/flashcard.ts +29 -0
  92. package/i18n/sv-SE/components/settings/index.ts +23 -0
  93. package/i18n/sv-SE/components/settings/matching_game.ts +15 -0
  94. package/i18n/sv-SE/components/settings/multiple_choice.ts +16 -0
  95. package/i18n/sv-SE/components/settings/quizshow_game.ts +20 -0
  96. package/i18n/sv-SE/components/settings/seven_strikes.ts +8 -0
  97. package/i18n/sv-SE/components/settings/slideshow.ts +13 -0
  98. package/i18n/sv-SE/components/settings/sorting_game.ts +5 -0
  99. package/i18n/sv-SE/components/settings/word_jumble.ts +11 -0
  100. package/i18n/sv-SE/index.ts +16 -0
  101. package/i18n/sv-SE/modules/index.ts +5 -0
  102. package/i18n/sv-SE/pages/index.ts +5 -0
  103. package/i18n/sv-SE/shared/content_blocks.ts +18 -0
  104. package/i18n/sv-SE/shared/index.ts +7 -0
  105. package/i18n/sv-SE/shared/settings.ts +14 -0
  106. package/package.json +1 -1
  107. package/plugin.js +33 -34
  108. package/test/Feature/LocaleKeys.spec.js +11 -0
  109. package/test/__mocks__/componentsMock.js +12 -0
  110. package/test/__mocks__/fileMock.js +1 -0
  111. package/test/__mocks__/modelMock.js +88 -0
  112. package/test/__mocks__/styleMock.js +1 -0
  113. package/test/blocks/crossword/CrosswordPuzzle.spec.js +1 -1
  114. package/test/blocks/dragDrop/BucketGame.spec.js +1 -1
  115. package/test/blocks/dragDrop/SortingGame.spec.js +1 -1
  116. package/test/blocks/flashcards/CardFace.spec.js +1 -1
  117. package/test/blocks/flashcards/FlashCardSlides.spec.js +1 -1
  118. package/test/blocks/flashcards/Flashcard.spec.js +1 -1
  119. package/test/blocks/matchingGame/MatchingGame.spec.js +1 -1
  120. package/test/blocks/multipleChoice/MultipleChoice.spec.js +1 -1
  121. package/test/blocks/multipleChoice/QuestionDialog.spec.js +1 -1
  122. package/test/blocks/quizShow/quizShow.spec.js +1 -1
  123. package/test/blocks/sevenStrikes/sevenStrikes.spec.js +1 -1
  124. package/test/blocks/slideshow/slideshow.spec.js +1 -1
  125. package/test/blocks/wordJumble/Jumble.spec.js +1 -1
  126. package/test/blocks/wordJumble/WordJumble.spec.js +1 -1
  127. package/test/mocks.js +8 -2
  128. package/test/settings/BucketGameManager.spec.js +4 -4
  129. package/test/settings/CrosswordPuzzleManager.spec.js +6 -11
  130. package/test/settings/FlashCardSlidesManager.spec.js +1 -1
  131. package/test/settings/MatchingGameManager.spec.js +1 -1
  132. package/test/settings/MultipleChoiceGameManager.spec.js +1 -1
  133. package/test/settings/SevenStrikesManager.spec.js +1 -1
  134. package/test/settings/SlideShowManager.spec.js +1 -1
  135. package/test/settings/SortingGameManager.spec.js +1 -1
  136. package/test/settings/WordJumbleManager.spec.js +1 -4
  137. package/i18n/en-US.ts +0 -5
@@ -1,85 +1,127 @@
1
1
  <template>
2
2
  <v-container>
3
3
  <v-col class="pa-0">
4
- <h1>
4
+ <h3>
5
5
  {{
6
6
  block.metadata.config.title
7
7
  ? block.metadata.config.title
8
8
  : $t(
9
- 'plugin.games.components.content.blocks.word_jumble.title'
9
+ 'windward.games.components.content.blocks.word_jumble.title'
10
10
  )
11
11
  }}
12
- </h1>
12
+ </h3>
13
13
  <p>{{ block.metadata.config.instructions }}</p>
14
14
  </v-col>
15
15
  <v-col class="pa-0">
16
16
  <template>
17
- <v-carousel @change="onSlideChanged()">
17
+ <v-carousel
18
+ hide-delimiters
19
+ v-model="selectedPage"
20
+ @change="onSlideChanged()"
21
+ >
18
22
  <v-carousel-item
19
23
  v-for="(word, index) in block.metadata.config.words"
20
24
  :key="index"
21
25
  >
22
26
  <v-row class="d-flex justify-center ma-2">
23
- <p class="pa-3 mb-0 clueAndJumble">
24
- <span class="spanBold"
27
+ <p class="pa-3 mb-0 p-clue-jumble">
28
+ <span class="span-bold"
25
29
  >{{
26
30
  $t(
27
- 'plugin.games.components.content.blocks.word_jumble.clue'
31
+ 'windward.games.components.content.blocks.word_jumble.clue'
28
32
  )
29
33
  }}
30
34
  </span>
31
35
  {{ word.hint }}
32
36
  </p>
33
37
  </v-row>
34
- <v-row class="d-flex justify-center outline ma-2">
35
- <p class="pa-3 mb-0 clueAndJumble">
36
- {{ shuffle(word.value) }}
38
+ <v-row class="d-flex justify-center ma-2">
39
+ <p v-if="render" class="pa-3 mb-0 p-clue-jumble">
40
+ {{ word.shuffledWord }}
41
+ </p>
42
+ <p v-if="!render" class="pa-3 mb-0 p-clue-jumble">
43
+ {{ word.value }}
37
44
  </p>
38
45
  </v-row>
39
46
  <v-container
40
47
  v-if="showFeedback"
48
+ fluid
41
49
  :key="'feedback'"
42
50
  :class="feedbackStatus"
51
+ class="pa-0"
43
52
  >
44
- <v-row class="d-flex" align="center">
45
- <v-col cols="4"></v-col>
46
- <v-col cols="4" class="d-flex justify-center">
47
- <p class="">{{ feedback }}</p>
48
- </v-col>
49
- <v-col cols="4" class="d-flex justify-end">
50
- <v-icon @click="onHideFeedback">
51
- mdi-alpha-x-circle-outline</v-icon
52
- >
53
+ <br />
54
+ <v-row>
55
+ <v-col></v-col>
56
+ <v-col class="d-flex justify-center">{{
57
+ feedback
58
+ ? feedback
59
+ : $t(
60
+ 'windward.games.components.content.blocks.bucket_game.form.feedback.feedback_here'
61
+ )
62
+ }}</v-col>
63
+ <v-col class="d-flex justify-end pl-4">
64
+ <v-btn
65
+ v-if="
66
+ feedbackStatus ===
67
+ 'container-feedback-success'
68
+ "
69
+ class="mr-5"
70
+ color="success"
71
+ @click="onSlideChanged(true)"
72
+ >{{ $t('shared.forms.continue') }}
73
+ </v-btn>
74
+ <v-container
75
+ v-if="
76
+ feedbackStatus ===
77
+ 'container-feedback-error'
78
+ "
79
+ class="d-flex justify-end"
80
+ @click="onHideFeedback"
81
+ ><v-icon
82
+ class="icon--error"
83
+ color="error"
84
+ >mdi-close-circle</v-icon
85
+ >
86
+ </v-container>
53
87
  </v-col>
54
88
  </v-row>
89
+ <br />
55
90
  </v-container>
56
91
  <v-row class="justify-center mt-4">
57
92
  <Jumble
93
+ :key="updateJumble"
58
94
  :value="word"
59
95
  :reveal="showAnswer"
60
96
  :reset="resetValue"
61
97
  @input="getResponse($event)"
62
98
  ></Jumble>
63
99
  </v-row>
64
- <v-row class="justify-center mt-8">
65
- <v-btn
66
- color="primary mr-4"
67
- @click="onCheckAnswer(word)"
68
- >{{
69
- $t(
70
- 'plugin.games.components.content.blocks.word_jumble.check'
71
- )
72
- }}</v-btn
73
- >
74
- <v-btn
75
- color="primary ml-4"
76
- @click="onRevealAnswer"
77
- >{{
78
- $t(
79
- 'plugin.games.components.content.blocks.word_jumble.reveal'
80
- )
81
- }}</v-btn
82
- >
100
+ <v-row class="d-flex mt-8">
101
+ <v-col class="d-flex justify-end">
102
+ <v-btn
103
+ :disabled="disableButtons"
104
+ color="primary"
105
+ @click="onCheckAnswer(word)"
106
+ >{{
107
+ $t(
108
+ 'windward.games.components.content.blocks.word_jumble.check'
109
+ )
110
+ }}
111
+ </v-btn>
112
+ </v-col>
113
+ <v-col class="d-flex justify-start">
114
+ <v-btn
115
+ :disabled="disableButtons"
116
+ color="primary"
117
+ @click="onRevealAnswer"
118
+ >{{
119
+ $t(
120
+ 'windward.games.components.content.blocks.word_jumble.reveal'
121
+ )
122
+ }}
123
+ </v-btn>
124
+ </v-col>
83
125
  </v-row>
84
126
  </v-carousel-item>
85
127
  </v-carousel>
@@ -91,6 +133,7 @@
91
133
  import _ from 'lodash'
92
134
  import Jumble from './Jumble.vue'
93
135
  import BaseContentBlock from '~/components/Content/Blocks/BaseContentBlock'
136
+ import Crypto from '~/helpers/Crypto'
94
137
 
95
138
  export default {
96
139
  name: 'WordJumble',
@@ -110,20 +153,22 @@ export default {
110
153
  }
111
154
  if (_.isEmpty(this.block.metadata.config.title)) {
112
155
  this.block.metadata.config.title = this.$t(
113
- 'plugin.games.components.content.blocks.word_jumble.title'
156
+ 'windward.games.components.content.blocks.word_jumble.title'
114
157
  )
115
158
  }
116
159
  if (_.isEmpty(this.block.metadata.config.instructions)) {
117
- this.block.metadata.config.instructions = ''
160
+ this.block.metadata.config.instructions = this.$t(
161
+ 'windward.games.components.content.blocks.word_jumble.instructions'
162
+ )
118
163
  }
119
164
  if (_.isEmpty(this.block.metadata.config.feedback_correct)) {
120
165
  this.block.metadata.config.feedback_correct = this.$t(
121
- 'plugin.games.components.settings.bucket_game.form.feedback.correct_default'
166
+ 'windward.games.components.settings.bucket_game.form.feedback.correct_default'
122
167
  )
123
168
  }
124
169
  if (_.isEmpty(this.block.metadata.config.feedback_incorrect)) {
125
170
  this.block.metadata.config.feedback_incorrect = this.$t(
126
- 'plugin.games.components.settings.bucket_game.form.feedback.incorrect_default'
171
+ 'windward.games.components.settings.bucket_game.form.feedback.incorrect_default'
127
172
  )
128
173
  }
129
174
  if (_.isEmpty(this.block.metadata.config.words)) {
@@ -134,15 +179,24 @@ export default {
134
179
  return {
135
180
  saveState: false,
136
181
  feedback: this.$t(
137
- 'plugin.games.components.content.blocks.word_jumble.feedback'
182
+ 'windward.games.components.content.blocks.word_jumble.feedback'
138
183
  ),
139
184
  showAnswer: false,
140
185
  showFeedback: false,
141
186
  resetValue: false,
187
+ selectedPage: 0,
142
188
  studentResponse: '',
143
189
  feedbackStatus: '',
190
+ updateJumble: 0,
191
+ disableButtons: false,
192
+ shuffledWord: '',
144
193
  }
145
194
  },
195
+ watch: {
196
+ render(newValue) {
197
+ this.updateJumble = Crypto.id()
198
+ },
199
+ },
146
200
  mounted() {
147
201
  this.showAnswer = false
148
202
  },
@@ -179,17 +233,23 @@ export default {
179
233
  onRevealAnswer() {
180
234
  // reveal prop changed to true to show answer
181
235
  this.showAnswer = true
236
+ this.disableButtons = true
182
237
  },
183
238
  onHideFeedback() {
184
239
  this.showFeedback = false
240
+ this.disableButtons = false
185
241
  },
186
242
  onCheckAnswer(word) {
187
243
  this.studentResponse = this.studentResponse.toLowerCase()
188
244
  this.showFeedback = true
245
+ this.disableButtons = true
189
246
  const answer = word.value.toLowerCase()
190
- if (this.studentResponse === answer) {
247
+ if (
248
+ !_.isEmpty(this.studentResponse) &&
249
+ this.studentResponse === answer
250
+ ) {
191
251
  // updates class
192
- this.feedbackStatus = 'success'
252
+ this.feedbackStatus = 'container-feedback-success'
193
253
  // gets custom or standard feedback
194
254
  if (
195
255
  !_.isEmpty(this.block.metadata.config.feedback_correct) &&
@@ -198,12 +258,12 @@ export default {
198
258
  this.feedback = this.block.metadata.config.feedback_correct
199
259
  } else {
200
260
  this.feedback = this.$t(
201
- 'plugin.games.components.content.blocks.word_jumble.correct'
261
+ 'windward.games.components.content.blocks.word_jumble.correct'
202
262
  )
203
263
  }
204
264
  } else {
205
265
  // updates class
206
- this.feedbackStatus = 'error'
266
+ this.feedbackStatus = 'container-feedback-error'
207
267
  // gets custom or standard feedback
208
268
  if (
209
269
  !_.isEmpty(this.block.metadata.config.feedback_incorrect) &&
@@ -213,20 +273,30 @@ export default {
213
273
  this.block.metadata.config.feedback_incorrect
214
274
  } else {
215
275
  this.feedback = this.$t(
216
- 'plugin.games.components.content.blocks.word_jumble.incorrect'
276
+ 'windward.games.components.content.blocks.word_jumble.incorrect'
217
277
  )
218
278
  }
219
279
  }
220
280
  },
221
- onSlideChanged() {
281
+ onSlideChanged(changeSlide) {
222
282
  // this function is called when the slide is changed
223
283
  // reset the game each time this occurs via props due to fact
224
284
  // that components do not remount on slides each time the slide is revisited
285
+ this.block.metadata.config.words[this.selectedPage].shuffledWord =
286
+ this.shuffle(
287
+ this.block.metadata.config.words[this.selectedPage].value
288
+ )
289
+ if (changeSlide) {
290
+ this.selectedPage = this.selectedPage + 1
291
+ }
225
292
  // updates class
226
293
  this.feedbackStatus = ''
294
+ this.showFeedback = false
295
+ this.studentResponse = ''
227
296
  this.feedback = this.$t(
228
- 'plugin.games.components.content.blocks.word_jumble.feedback'
297
+ 'windward.games.components.content.blocks.word_jumble.feedback'
229
298
  )
299
+ this.disableButtons = false
230
300
  // ensure answer no longder revealed
231
301
  this.showAnswer = false
232
302
  // if student has entered a response the input values are reset to empty on slide change
@@ -236,22 +306,18 @@ export default {
236
306
  }
237
307
  </script>
238
308
  <style lang="scss" scoped>
239
- .outline {
240
- border: 2px solid black;
241
- border-radius: 10px;
242
- }
243
- .clueAndJumble {
309
+ .p-clue-jumble {
244
310
  font-size: 20px;
245
311
  }
246
- .spanBold {
312
+ .span-bold {
247
313
  font-weight: 900;
248
314
  }
249
- .error {
250
- border: dashed 2px #dc3d1a;
251
- background-color: #fff1f1;
315
+ .container-feedback-error {
316
+ border: solid 4px var(--v-error-base);
317
+ color: var(--v-error-base);
252
318
  }
253
- .success {
254
- border: dashed 2px #76b778;
255
- background-color: #f1fff3;
319
+ .container-feedback-success {
320
+ border: solid 4px var(--v-success-base);
321
+ color: var(--v-success-base);
256
322
  }
257
323
  </style>