@windward/games 0.5.1 → 0.7.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 (56) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/bitbucket-pipelines.yml +14 -0
  3. package/components/content/blocks/dragDrop/BucketGame.vue +24 -8
  4. package/components/content/blocks/flashcards/CardFace.vue +3 -3
  5. package/components/content/blocks/matchingGame/MatchingGame.vue +30 -38
  6. package/components/content/blocks/sevenStrikes/SevenStikes.vue +2 -6
  7. package/components/content/blocks/wordJumble/WordJumble.vue +9 -8
  8. package/components/settings/BucketGameSettingsManager.vue +253 -243
  9. package/components/settings/CrosswordPuzzleSettingsManager.vue +164 -111
  10. package/components/settings/FlashCardSlidesManager.vue +337 -336
  11. package/components/settings/MatchingGameManager.vue +347 -323
  12. package/components/settings/MultipleChoiceSettingsManager.vue +100 -69
  13. package/components/settings/QuizShowSettingsManager.vue +223 -203
  14. package/components/settings/SevenStrikesSettingsManager.vue +173 -133
  15. package/components/settings/SlideShowManager.vue +174 -134
  16. package/components/settings/SortingGameSettingsManager.vue +157 -108
  17. package/components/settings/WordJumbleSettingsManager.vue +171 -135
  18. package/i18n/en-US/components/content/blocks/bucket_game.ts +1 -0
  19. package/i18n/en-US/components/content/blocks/flashcard.ts +2 -2
  20. package/i18n/en-US/components/content/blocks/quizshow_game.ts +1 -1
  21. package/i18n/en-US/components/settings/bucket_game.ts +2 -1
  22. package/i18n/en-US/components/settings/crossword.ts +1 -0
  23. package/i18n/en-US/components/settings/flashcard.ts +2 -1
  24. package/i18n/en-US/components/settings/matching_game.ts +1 -0
  25. package/i18n/en-US/components/settings/multiple_choice.ts +1 -0
  26. package/i18n/en-US/components/settings/quizshow_game.ts +1 -1
  27. package/i18n/en-US/components/settings/seven_strikes.ts +1 -1
  28. package/i18n/en-US/components/settings/slideshow.ts +3 -2
  29. package/i18n/en-US/components/settings/sorting_game.ts +1 -0
  30. package/i18n/en-US/components/settings/word_jumble.ts +1 -0
  31. package/i18n/en-US/shared/settings.ts +3 -0
  32. package/i18n/es-ES/components/content/blocks/bucket_game.ts +1 -0
  33. package/i18n/es-ES/components/settings/bucket_game.ts +3 -1
  34. package/i18n/es-ES/components/settings/crossword.ts +2 -0
  35. package/i18n/es-ES/components/settings/flashcard.ts +1 -0
  36. package/i18n/es-ES/components/settings/matching_game.ts +1 -0
  37. package/i18n/es-ES/components/settings/multiple_choice.ts +2 -0
  38. package/i18n/es-ES/components/settings/quizshow_game.ts +1 -1
  39. package/i18n/es-ES/components/settings/slideshow.ts +1 -0
  40. package/i18n/es-ES/components/settings/sorting_game.ts +1 -0
  41. package/i18n/es-ES/components/settings/word_jumble.ts +1 -0
  42. package/i18n/es-ES/shared/settings.ts +3 -0
  43. package/i18n/sv-SE/components/content/blocks/bucket_game.ts +1 -0
  44. package/i18n/sv-SE/components/content/blocks/quizshow_game.ts +1 -1
  45. package/i18n/sv-SE/components/settings/bucket_game.ts +2 -0
  46. package/i18n/sv-SE/components/settings/crossword.ts +1 -0
  47. package/i18n/sv-SE/components/settings/flashcard.ts +1 -0
  48. package/i18n/sv-SE/components/settings/matching_game.ts +1 -0
  49. package/i18n/sv-SE/components/settings/multiple_choice.ts +1 -0
  50. package/i18n/sv-SE/components/settings/quizshow_game.ts +1 -1
  51. package/i18n/sv-SE/components/settings/slideshow.ts +1 -0
  52. package/i18n/sv-SE/components/settings/sorting_game.ts +1 -0
  53. package/i18n/sv-SE/components/settings/word_jumble.ts +2 -1
  54. package/i18n/sv-SE/shared/content_blocks.ts +5 -5
  55. package/i18n/sv-SE/shared/settings.ts +8 -5
  56. package/package.json +1 -1
@@ -1,146 +1,141 @@
1
1
  <template>
2
2
  <div>
3
- <v-form ref="form" v-model="valid" v-if="!loading">
4
- <v-container class="pa-0">
5
- <v-text-field
6
- v-model="block.metadata.config.title"
7
- outlined
8
- :counter="50"
9
- maxlength="50"
10
- :label="
11
- $t(
12
- 'windward.games.components.settings.slideshow.form.title'
13
- )
14
- "
15
- :disabled="render"
16
- ></v-text-field>
17
- <v-textarea
18
- v-model="block.metadata.config.instructions"
19
- outlined
20
- auto-grow
21
- :counter="255"
22
- maxlength="255"
23
- :label="
24
- $t(
25
- 'windward.games.components.settings.slideshow.form.instructions'
26
- )
27
- "
28
- :disabled="render"
29
- ></v-textarea>
30
- </v-container>
31
- <v-divider class="my-4 primary"></v-divider>
32
- <v-container class="pa-0">
33
- <p>
3
+ <v-container class="pa-0">
4
+ <v-text-field
5
+ v-model="block.metadata.config.title"
6
+ outlined
7
+ :rules="validation.shortInputRules"
8
+ :counter="50"
9
+ :label="
10
+ $t(
11
+ 'windward.games.components.settings.slideshow.form.title'
12
+ )
13
+ "
14
+ :disabled="render"
15
+ ></v-text-field>
16
+ <v-textarea
17
+ v-model="block.metadata.config.instructions"
18
+ outlined
19
+ auto-grow
20
+ :rules="validation.instructionRule"
21
+ :counter="255"
22
+ :label="
23
+ $t(
24
+ 'windward.games.components.settings.slideshow.form.instructions'
25
+ )
26
+ "
27
+ :disabled="render"
28
+ ></v-textarea>
29
+ </v-container>
30
+ <v-divider class="my-4 primary"></v-divider>
31
+ <v-container class="pa-0">
32
+ <p>
33
+ {{
34
+ $t(
35
+ 'windward.games.components.settings.slideshow.form.items'
36
+ )
37
+ }}
38
+ </p>
39
+ <SortableExpansionPanel
40
+ v-model="block.metadata.config.slides"
41
+ v-bind:currentPanel.sync="block.metadata.config.currentSlide"
42
+ :disabled="render"
43
+ @click:close="onDeleteSlide($event)"
44
+ >
45
+ <template #header="{ item, index }">
34
46
  {{
35
- $t(
36
- 'windward.games.components.settings.slideshow.form.items'
37
- )
47
+ item.header
48
+ ? item.header
49
+ : $t(
50
+ 'windward.games.components.content.blocks.slideshow.slides.slide',
51
+ [index + 1]
52
+ )
38
53
  }}
39
- </p>
40
- <SortableExpansionPanel
41
- v-model="block.metadata.config.slides"
42
- v-bind:currentPanel.sync="
43
- block.metadata.config.currentSlide
44
- "
45
- :disabled="render"
46
- @click:close="onDeleteSlide($event)"
47
- >
48
- <template #header="{ item, index }">
49
- {{
50
- item.header
51
- ? item.header
52
- : $t(
53
- 'windward.games.components.content.blocks.slideshow.slides.slide',
54
- [index + 1]
55
- )
56
- }}
57
- </template>
58
- <template #body="{ item, index }">
59
- <v-container>
60
- <v-text-field
61
- v-model="
62
- block.metadata.config.slides[index].header
63
- "
64
- :autofocus="true"
65
- outlined
66
- :label="
67
- $t(
68
- 'windward.games.components.content.blocks.slideshow.slides.slide_header'
69
- )
70
- "
71
- :disabled="render"
72
- ></v-text-field>
73
- <v-text-field
74
- v-model="
75
- block.metadata.config.slides[index]
76
- .description
77
- "
78
- outlined
79
- :label="
80
- $t(
81
- 'windward.games.components.content.blocks.slideshow.slides.slide_description'
82
- )
83
- "
84
- :disabled="render"
85
- ></v-text-field>
54
+ </template>
55
+ <template #body="{ item, index }">
56
+ <v-container>
57
+ <v-text-field
58
+ v-model="block.metadata.config.slides[index].header"
59
+ :rules="validation.shortInputRules"
60
+ :counter="50"
61
+ :autofocus="true"
62
+ outlined
63
+ :label="
64
+ $t(
65
+ 'windward.games.components.content.blocks.slideshow.slides.slide_header'
66
+ )
67
+ "
68
+ :disabled="render"
69
+ ></v-text-field>
70
+ <v-textarea
71
+ v-model="
72
+ block.metadata.config.slides[index].description
73
+ "
74
+ :rules="validation.clueRule"
75
+ :counter="155"
76
+ outlined
77
+ :label="
78
+ $t(
79
+ 'windward.games.components.content.blocks.slideshow.slides.slide_description'
80
+ )
81
+ "
82
+ :disabled="render"
83
+ ></v-textarea>
86
84
 
87
- <ContentBlockAsset
88
- id="content-block-asset"
89
- v-model="
90
- block.metadata.config.slides[index]
91
- .imageAsset
92
- "
93
- :assets.sync="block.assets"
94
- mimes="image/png,image/jpeg"
95
- :disabled="render"
96
- ></ContentBlockAsset>
85
+ <ContentBlockAsset
86
+ id="content-block-asset"
87
+ v-model="
88
+ block.metadata.config.slides[index].imageAsset
89
+ "
90
+ :assets.sync="block.assets"
91
+ mimes="image/png,image/jpeg"
92
+ :disabled="render"
93
+ ></ContentBlockAsset>
97
94
 
98
- <v-text-field
99
- v-if="
95
+ <v-text-field
96
+ v-if="
97
+ block.metadata.config.slides[index].imageAsset
98
+ "
99
+ v-model="
100
+ block.metadata.config.slides[index].imageAlt
101
+ "
102
+ class="mt-4"
103
+ outlined
104
+ :placeholder="
105
+ getImageAlt(
100
106
  block.metadata.config.slides[index]
101
107
  .imageAsset
102
- "
103
- v-model="
104
- block.metadata.config.slides[index].imageAlt
105
- "
106
- class="mt-4"
107
- outlined
108
- :placeholder="
109
- getImageAlt(
110
- block.metadata.config.slides[index]
111
- .imageAsset
112
- )
113
- "
114
- persistent-placeholder
115
- :label="
116
- $t(
117
- 'windward.games.components.content.blocks.slideshow.slides.image_alt'
118
- )
119
- "
120
- :disabled="render"
121
- ></v-text-field>
122
- </v-container>
123
- </template>
124
- </SortableExpansionPanel>
125
- <v-container>
126
- <v-row justify="center" class="my-4">
127
- <v-btn
128
- color="primary"
129
- elevation="0"
130
- :disabled="render"
131
- @click="onAddSlide"
132
- >
133
- <v-icon>mdi-plus</v-icon>
134
- {{
108
+ )
109
+ "
110
+ persistent-placeholder
111
+ :label="
135
112
  $t(
136
- 'windward.games.components.content.blocks.slideshow.add_slide'
113
+ 'windward.games.components.content.blocks.slideshow.slides.image_alt'
137
114
  )
138
- }}
139
- </v-btn>
140
- </v-row>
141
- </v-container>
115
+ "
116
+ :disabled="render"
117
+ ></v-text-field>
118
+ </v-container>
119
+ </template>
120
+ </SortableExpansionPanel>
121
+ <v-container>
122
+ <v-row justify="center" class="my-4">
123
+ <v-btn
124
+ color="primary"
125
+ elevation="0"
126
+ :disabled="render"
127
+ @click="onAddSlide"
128
+ >
129
+ <v-icon>mdi-plus</v-icon>
130
+ {{
131
+ $t(
132
+ 'windward.games.components.content.blocks.slideshow.add_slide'
133
+ )
134
+ }}
135
+ </v-btn>
136
+ </v-row>
142
137
  </v-container>
143
- </v-form>
138
+ </v-container>
144
139
  <div v-if="loading" class="text-center">
145
140
  <v-progress-circular
146
141
  :size="70"
@@ -156,6 +151,7 @@ import BaseContentSettings from '~/components/Content/Settings/BaseContentSettin
156
151
  import _ from 'lodash'
157
152
  import ContentBlockAsset from '~/components/Content/ContentBlockAsset.vue'
158
153
  import SortableExpansionPanel from '~/components/Core/SortableExpansionPanel.vue'
154
+ import Uuid from '~/helpers/Uuid'
159
155
 
160
156
  export default {
161
157
  name: 'SlideShowManager',
@@ -185,8 +181,14 @@ export default {
185
181
  'windward.games.components.settings.slideshow.form.slideshow_title'
186
182
  )
187
183
  }
188
- if (_.isEmpty(this.block.metadata.config.instructions)) {
189
- this.block.metadata.config.instructions = ''
184
+ if (
185
+ _.isEmpty(this.block.metadata.config.instructions) &&
186
+ this.block.id &&
187
+ !Uuid.test(this.block.id)
188
+ ) {
189
+ this.block.metadata.config.instructions = this.$t(
190
+ 'windward.games.components.settings.slideshow.form.default_instructions'
191
+ )
190
192
  }
191
193
 
192
194
  if (_.isEmpty(this.block.metadata.config.slides)) {
@@ -203,6 +205,44 @@ export default {
203
205
  valid: true,
204
206
  debounce: null,
205
207
  loading: false,
208
+ validation: {
209
+ shortInputRules: [
210
+ (v) => {
211
+ if (v && v.length >= 50) {
212
+ return this.$t(
213
+ 'windward.games.shared.settings.errors.input_limitations',
214
+ [50]
215
+ )
216
+ } else {
217
+ return true
218
+ }
219
+ },
220
+ ],
221
+ instructionRule: [
222
+ (v) => {
223
+ if (v && v.length >= 255) {
224
+ return this.$t(
225
+ 'windward.games.shared.settings.errors.input_limitations',
226
+ [255]
227
+ )
228
+ } else {
229
+ return true
230
+ }
231
+ },
232
+ ],
233
+ clueRule: [
234
+ (v) => {
235
+ if (v && v.length >= 155) {
236
+ return this.$t(
237
+ 'windward.games.shared.settings.errors.input_limitations',
238
+ [155]
239
+ )
240
+ } else {
241
+ return true
242
+ }
243
+ },
244
+ ],
245
+ },
206
246
  }
207
247
  },
208
248
  methods: {
@@ -1,119 +1,119 @@
1
1
  <template>
2
2
  <div>
3
- <v-form ref="form" v-model="valid" v-if="!loading">
4
- <v-container class="pa-0">
5
- <v-text-field
6
- ref="title"
7
- v-model="block.metadata.config.title"
8
- outlined
9
- :autofocus="true"
10
- :counter="50"
11
- :label="
12
- $t(
13
- 'windward.games.components.settings.bucket_game.form.title'
14
- )
15
- "
16
- :disabled="render"
17
- ></v-text-field>
18
- <v-textarea
19
- v-model="block.metadata.config.instructions"
20
- outlined
21
- auto-grow
22
- :counter="255"
23
- :label="
24
- $t(
25
- 'windward.games.components.settings.bucket_game.form.instructions'
26
- )
27
- "
28
- :disabled="render"
29
- ></v-textarea>
30
- </v-container>
31
- <v-divider class="my-4 primary"></v-divider>
32
- <v-container class="pa-0">
33
- <p>
3
+ <v-container class="pa-0">
4
+ <v-text-field
5
+ ref="title"
6
+ v-model="block.metadata.config.title"
7
+ outlined
8
+ :autofocus="true"
9
+ :rules="validation.shortInputRules"
10
+ :counter="50"
11
+ :label="
12
+ $t(
13
+ 'windward.games.components.settings.bucket_game.form.title'
14
+ )
15
+ "
16
+ :disabled="render"
17
+ ></v-text-field>
18
+ <v-textarea
19
+ v-model="block.metadata.config.instructions"
20
+ outlined
21
+ auto-grow
22
+ :rules="validation.instructionRule"
23
+ :counter="255"
24
+ :label="
25
+ $t(
26
+ 'windward.games.components.settings.bucket_game.form.instructions'
27
+ )
28
+ "
29
+ :disabled="render"
30
+ ></v-textarea>
31
+ </v-container>
32
+ <v-divider class="my-4 primary"></v-divider>
33
+ <v-container class="pa-0">
34
+ <p>
35
+ {{
36
+ $t(
37
+ 'windward.games.components.settings.sorting_game.sortable_items'
38
+ )
39
+ }}
40
+ </p>
41
+ <SortableExpansionPanel
42
+ v-model="block.metadata.config.answer"
43
+ :disabled="render"
44
+ @click:close="onDelete($event)"
45
+ >
46
+ <template #header="{ item, index }">
34
47
  {{
35
- $t(
36
- 'windward.games.components.settings.sorting_game.sortable_items'
37
- )
48
+ item.value
49
+ ? block.metadata.config.answer[index].value
50
+ : $t(
51
+ 'windward.games.components.settings.bucket_game.form.enter_text'
52
+ )
38
53
  }}
39
- </p>
40
- <SortableExpansionPanel
41
- v-model="block.metadata.config.answer"
54
+ </template>
55
+ <template #body="{ item, index }">
56
+ <v-container>
57
+ <p class="p-label">
58
+ {{
59
+ $t(
60
+ 'windward.games.components.settings.sorting_game.word'
61
+ )
62
+ }}
63
+ </p>
64
+ <v-textarea
65
+ v-model="block.metadata.config.answer[index].value"
66
+ :rules="validation.sortableWordRule"
67
+ :counter="155"
68
+ outlined
69
+ :autofocus="true"
70
+ :disabled="render"
71
+ ></v-textarea>
72
+ </v-container>
73
+ </template>
74
+ </SortableExpansionPanel>
75
+ </v-container>
76
+ <v-container class="pa-0">
77
+ <v-row justify="center" class="my-4">
78
+ <v-btn
79
+ color="primary"
80
+ elevation="0"
42
81
  :disabled="render"
43
- @click:close="onDelete($event)"
82
+ @click="onAddElement"
44
83
  >
45
- <template #header="{ item, index }">
46
- {{
47
- item.value
48
- ? block.metadata.config.answer[index].value
49
- : $t(
50
- 'windward.games.components.settings.bucket_game.form.enter_text'
51
- )
52
- }}
53
- </template>
54
- <template #body="{ item, index }">
55
- <v-container>
56
- <p class="p-label">
57
- {{
58
- $t(
59
- 'windward.games.components.settings.sorting_game.word'
60
- )
61
- }}
62
- </p>
63
- <v-textarea
64
- v-model="
65
- block.metadata.config.answer[index].value
66
- "
67
- outlined
68
- :autofocus="true"
69
- :disabled="render"
70
- ></v-textarea>
71
- </v-container>
72
- </template>
73
- </SortableExpansionPanel>
74
- </v-container>
75
- <v-container class="pa-0">
76
- <v-row justify="center" class="my-4">
77
- <v-btn
78
- color="primary"
79
- elevation="0"
80
- :disabled="render"
81
- @click="onAddElement"
82
- >
83
- <v-icon>mdi-plus</v-icon>
84
- {{
85
- $t(
86
- 'windward.games.components.settings.bucket_game.form.add_answer'
87
- )
88
- }}
89
- </v-btn>
90
- </v-row>
91
- <v-textarea
92
- v-model="block.metadata.config.feedback_correct"
93
- outlined
94
- auto-grow
95
- :counter="255"
96
- :label="
97
- $t(
98
- 'windward.games.components.settings.bucket_game.form.feedback.correct'
99
- )
100
- "
101
- :disabled="render"
102
- ></v-textarea>
103
- <v-textarea
104
- v-model="block.metadata.config.feedback_incorrect"
105
- outlined
106
- auto-grow
107
- :counter="255"
108
- :label="
84
+ <v-icon>mdi-plus</v-icon>
85
+ {{
109
86
  $t(
110
- 'windward.games.components.settings.bucket_game.form.feedback.incorrect'
87
+ 'windward.games.components.settings.bucket_game.form.add_answer'
111
88
  )
112
- "
113
- :disabled="render"
114
- ></v-textarea>
115
- </v-container>
116
- </v-form>
89
+ }}
90
+ </v-btn>
91
+ </v-row>
92
+ <v-textarea
93
+ v-model="block.metadata.config.feedback_correct"
94
+ outlined
95
+ auto-grow
96
+ :counter="255"
97
+ :label="
98
+ $t(
99
+ 'windward.games.components.settings.bucket_game.form.feedback.correct'
100
+ )
101
+ "
102
+ :disabled="render"
103
+ ></v-textarea>
104
+ <v-textarea
105
+ v-model="block.metadata.config.feedback_incorrect"
106
+ outlined
107
+ auto-grow
108
+ :counter="255"
109
+ :label="
110
+ $t(
111
+ 'windward.games.components.settings.bucket_game.form.feedback.incorrect'
112
+ )
113
+ "
114
+ :disabled="render"
115
+ ></v-textarea>
116
+ </v-container>
117
117
  <div v-if="loading" class="text-center">
118
118
  <v-progress-circular
119
119
  :size="70"
@@ -129,6 +129,8 @@
129
129
  import _ from 'lodash'
130
130
  import BaseContentSettings from '~/components/Content/Settings/BaseContentSettings.js'
131
131
  import SortableExpansionPanel from '~/components/Core/SortableExpansionPanel.vue'
132
+ import Uuid from '~/helpers/Uuid'
133
+
132
134
  export default {
133
135
  name: 'SortingGameSettingsManager',
134
136
  extends: BaseContentSettings,
@@ -148,6 +150,15 @@ export default {
148
150
  'windward.games.components.settings.sorting_game.sortable_game'
149
151
  )
150
152
  }
153
+ if (
154
+ _.isEmpty(this.block.metadata.config.instructions) &&
155
+ this.block.id &&
156
+ !Uuid.test(this.block.id)
157
+ ) {
158
+ this.block.metadata.config.instructions = this.$t(
159
+ 'windward.games.components.settings.sorting_game.instructions'
160
+ )
161
+ }
151
162
  if (_.isEmpty(this.block.metadata.config.feedback_correct)) {
152
163
  this.block.metadata.config.feedback_correct = this.$t(
153
164
  'windward.games.components.settings.bucket_game.form.feedback.correct_default'
@@ -182,6 +193,44 @@ export default {
182
193
  },
183
194
  ],
184
195
  cursor: null,
196
+ validation: {
197
+ shortInputRules: [
198
+ (v) => {
199
+ if (v && v.length >= 50) {
200
+ return this.$t(
201
+ 'windward.games.shared.settings.errors.input_limitations',
202
+ [50]
203
+ )
204
+ } else {
205
+ return true
206
+ }
207
+ },
208
+ ],
209
+ instructionRule: [
210
+ (v) => {
211
+ if (v && v.length >= 255) {
212
+ return this.$t(
213
+ 'windward.games.shared.settings.errors.input_limitations',
214
+ [255]
215
+ )
216
+ } else {
217
+ return true
218
+ }
219
+ },
220
+ ],
221
+ sortableWordRule: [
222
+ (v) => {
223
+ if (v && v.length >= 155) {
224
+ return this.$t(
225
+ 'windward.games.shared.settings.errors.input_limitations',
226
+ [155]
227
+ )
228
+ } else {
229
+ return true
230
+ }
231
+ },
232
+ ],
233
+ },
185
234
  }
186
235
  },
187
236
  methods: {