@windward/games 0.0.8 → 0.0.10

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 (88) hide show
  1. package/components/content/blocks/dragDrop/BucketGame.vue +41 -87
  2. package/components/content/blocks/dragDrop/SortingGame.vue +43 -29
  3. package/components/content/blocks/flashcards/FlashcardSlides.vue +3 -1
  4. package/components/content/blocks/matchingGame/MatchingGame.vue +94 -51
  5. package/components/content/blocks/quizshowGame/AnswerPanel.vue +93 -96
  6. package/components/content/blocks/quizshowGame/QuizShow.vue +54 -31
  7. package/components/content/blocks/slideshow/SlideShow.vue +3 -1
  8. package/components/content/blocks/wordJumble/Jumble.vue +4 -2
  9. package/components/content/blocks/wordJumble/WordJumble.vue +11 -2
  10. package/components/settings/BucketGameSettingsManager.vue +175 -349
  11. package/components/settings/FlashCardSlidesManager.vue +335 -414
  12. package/components/settings/MatchingGameManager.vue +357 -618
  13. package/components/settings/QuizShowSettingsManager.vue +228 -201
  14. package/components/settings/SlideShowManager.vue +89 -127
  15. package/components/settings/SortingGameSettingsManager.vue +32 -144
  16. package/components/settings/WordJumbleSettingsManager.vue +48 -142
  17. package/i18n/en-US/components/content/blocks/bucket_game.ts +1 -0
  18. package/i18n/en-US/components/content/blocks/flashcard.ts +2 -0
  19. package/i18n/en-US/components/content/blocks/quizshow_game.ts +1 -1
  20. package/i18n/en-US/components/settings/matching_game.ts +1 -1
  21. package/i18n/en-US/components/settings/quizshow_game.ts +8 -2
  22. package/i18n/en-US/components/settings/slideshow.ts +2 -0
  23. package/i18n/es-ES/components/content/blocks/bucket_game.ts +40 -0
  24. package/i18n/es-ES/components/content/blocks/crossword.ts +25 -0
  25. package/i18n/es-ES/components/content/blocks/flashcard.ts +7 -0
  26. package/i18n/es-ES/components/content/blocks/index.ts +23 -0
  27. package/i18n/es-ES/components/content/blocks/matching_game.ts +26 -0
  28. package/i18n/es-ES/components/content/blocks/multiple_choice.ts +9 -0
  29. package/i18n/es-ES/components/content/blocks/quizshow_game.ts +35 -0
  30. package/i18n/es-ES/components/content/blocks/seven_strikes.ts +6 -0
  31. package/i18n/es-ES/components/content/blocks/slideshow.ts +13 -0
  32. package/i18n/es-ES/components/content/blocks/sorting_game.ts +5 -0
  33. package/i18n/es-ES/components/content/blocks/word_jumble.ts +9 -0
  34. package/i18n/es-ES/components/content/crud_table.ts +6 -0
  35. package/i18n/es-ES/components/content/index.ts +7 -0
  36. package/i18n/es-ES/components/index.ts +9 -0
  37. package/i18n/es-ES/components/navigation/index.ts +5 -0
  38. package/i18n/es-ES/components/settings/bucket_game.ts +38 -0
  39. package/i18n/es-ES/components/settings/crossword.ts +7 -0
  40. package/i18n/es-ES/components/settings/flashcard.ts +28 -0
  41. package/i18n/es-ES/components/settings/index.ts +23 -0
  42. package/i18n/es-ES/components/settings/matching_game.ts +15 -0
  43. package/i18n/es-ES/components/settings/multiple_choice.ts +17 -0
  44. package/i18n/es-ES/components/settings/quizshow_game.ts +20 -0
  45. package/i18n/es-ES/components/settings/seven_strikes.ts +8 -0
  46. package/i18n/es-ES/components/settings/slideshow.ts +13 -0
  47. package/i18n/es-ES/components/settings/sorting_game.ts +5 -0
  48. package/i18n/es-ES/components/settings/word_jumble.ts +11 -0
  49. package/i18n/es-ES/index.ts +15 -0
  50. package/i18n/es-ES/modules/index.ts +5 -0
  51. package/i18n/es-ES/pages/index.ts +5 -0
  52. package/i18n/es-ES/shared/content_blocks.ts +18 -0
  53. package/i18n/es-ES/shared/index.ts +7 -0
  54. package/i18n/es-ES/shared/settings.ts +14 -0
  55. package/i18n/sv-SE/components/content/blocks/bucket_game.ts +40 -0
  56. package/i18n/sv-SE/components/content/blocks/crossword.ts +20 -0
  57. package/i18n/sv-SE/components/content/blocks/flashcard.ts +7 -0
  58. package/i18n/sv-SE/components/content/blocks/index.ts +23 -0
  59. package/i18n/sv-SE/components/content/blocks/matching_game.ts +25 -0
  60. package/i18n/sv-SE/components/content/blocks/multiple_choice.ts +9 -0
  61. package/i18n/sv-SE/components/content/blocks/quizshow_game.ts +35 -0
  62. package/i18n/sv-SE/components/content/blocks/seven_strikes.ts +6 -0
  63. package/i18n/sv-SE/components/content/blocks/slideshow.ts +13 -0
  64. package/i18n/sv-SE/components/content/blocks/sorting_game.ts +5 -0
  65. package/i18n/sv-SE/components/content/blocks/word_jumble.ts +9 -0
  66. package/i18n/sv-SE/components/content/crud_table.ts +6 -0
  67. package/i18n/sv-SE/components/content/index.ts +7 -0
  68. package/i18n/sv-SE/components/index.ts +9 -0
  69. package/i18n/sv-SE/components/navigation/index.ts +5 -0
  70. package/i18n/sv-SE/components/settings/bucket_game.ts +38 -0
  71. package/i18n/sv-SE/components/settings/crossword.ts +7 -0
  72. package/i18n/sv-SE/components/settings/flashcard.ts +28 -0
  73. package/i18n/sv-SE/components/settings/index.ts +23 -0
  74. package/i18n/sv-SE/components/settings/matching_game.ts +15 -0
  75. package/i18n/sv-SE/components/settings/multiple_choice.ts +16 -0
  76. package/i18n/sv-SE/components/settings/quizshow_game.ts +20 -0
  77. package/i18n/sv-SE/components/settings/seven_strikes.ts +8 -0
  78. package/i18n/sv-SE/components/settings/slideshow.ts +13 -0
  79. package/i18n/sv-SE/components/settings/sorting_game.ts +5 -0
  80. package/i18n/sv-SE/components/settings/word_jumble.ts +11 -0
  81. package/i18n/sv-SE/index.ts +15 -0
  82. package/i18n/sv-SE/modules/index.ts +5 -0
  83. package/i18n/sv-SE/pages/index.ts +5 -0
  84. package/i18n/sv-SE/shared/content_blocks.ts +18 -0
  85. package/i18n/sv-SE/shared/index.ts +7 -0
  86. package/i18n/sv-SE/shared/settings.ts +14 -0
  87. package/package.json +1 -1
  88. package/i18n/en-US.ts +0 -5
@@ -1,9 +1,10 @@
1
1
  <template>
2
2
  <div>
3
- <div>
4
- <v-form ref="form" v-model="valid" v-if="!loading">
3
+ <v-form ref="form" v-model="valid" v-if="!loading">
4
+ <v-container class="pa-0">
5
5
  <v-text-field
6
6
  v-model="block.metadata.config.title"
7
+ outlined
7
8
  :counter="50"
8
9
  maxlength="50"
9
10
  :label="
@@ -12,7 +13,6 @@
12
13
  )
13
14
  "
14
15
  ></v-text-field>
15
- <br />
16
16
  <v-textarea
17
17
  outlined
18
18
  auto-grow
@@ -25,146 +25,106 @@
25
25
  )
26
26
  "
27
27
  ></v-textarea>
28
- <br />
29
- </v-form>
30
- <div v-if="loading" class="text-center">
31
- <v-progress-circular
32
- :size="70"
33
- :width="7"
34
- color="primary"
35
- indeterminate
36
- ></v-progress-circular>
37
- </div>
38
- </div>
39
- <div>
40
- <v-layout class="d-flex">
41
- <v-toolbar flat class="toolbar">
42
- <v-text-field
43
- class="shrink pt-7 pr-2"
44
- :label="
45
- $t(
46
- 'plugin.games.components.content.blocks.slideshow.amount_of_slides'
47
- )
48
- "
49
- :placeholder="
50
- $t(
51
- 'plugin.games.components.content.blocks.slideshow.amount_of_slides'
52
- )
53
- "
54
- outlined
55
- dense
56
- type="number"
57
- :value="block.metadata.config.slides.length"
58
- :disabled="true"
59
- ></v-text-field>
60
- <v-btn @click="onAddSlide" color="primary">
28
+ </v-container>
29
+ <v-divider class="my-4 primary"></v-divider>
30
+ <v-container class="pa-0">
31
+ <p>
32
+ {{
33
+ $t(
34
+ 'plugin.games.components.settings.slideshow.form.items'
35
+ )
36
+ }}
37
+ </p>
38
+ <SortableExpansionPanel
39
+ v-model="block.metadata.config.slides"
40
+ @click:close="onDeleteSlide($event)"
41
+ >
42
+ <template #header="{ item, index }">
61
43
  {{
62
- $t(
63
- 'plugin.games.components.content.blocks.slideshow.add_slide'
64
- )
44
+ item.header
45
+ ? item.header
46
+ : $t(
47
+ 'plugin.games.components.content.blocks.slideshow.slides.slide',
48
+ [index + 1]
49
+ )
65
50
  }}
66
- </v-btn>
67
- </v-toolbar>
68
- </v-layout>
69
- <div>
51
+ </template>
52
+ <template #body="{ item, index }">
53
+ <v-text-field
54
+ v-model="block.metadata.config.slides[index].header"
55
+ :autofocus="true"
56
+ outlined
57
+ :label="
58
+ $t(
59
+ 'plugin.games.components.content.blocks.slideshow.slides.slide_header'
60
+ )
61
+ "
62
+ ></v-text-field>
63
+ <v-text-field
64
+ v-model="
65
+ block.metadata.config.slides[index].description
66
+ "
67
+ outlined
68
+ :label="
69
+ $t(
70
+ 'plugin.games.components.content.blocks.slideshow.slides.slide_description'
71
+ )
72
+ "
73
+ ></v-text-field>
74
+ <v-text-field
75
+ v-model="
76
+ block.metadata.config.slides[index].image_alt
77
+ "
78
+ outlined
79
+ :label="
80
+ $t(
81
+ 'plugin.games.components.content.blocks.slideshow.slides.image_alt'
82
+ )
83
+ "
84
+ ></v-text-field>
85
+ <ContentBlockAsset
86
+ id="content-block-asset"
87
+ v-model="block.metadata.config.slides[index].image"
88
+ mimes="image/png,image/jpeg"
89
+ ></ContentBlockAsset>
90
+ </template>
91
+ </SortableExpansionPanel>
70
92
  <v-container>
71
- <v-expansion-panels flat>
72
- <draggable
73
- :list="block.metadata.config.slides"
74
- :disabled="false"
75
- class="flex-fill"
76
- :group="{
77
- name: 'people',
78
- pull: 'clone',
79
- put: false,
80
- }"
81
- >
82
- <v-expansion-panel
83
- v-for="(slide, index) in block.metadata.config
84
- .slides"
85
- :key="index"
86
- >
87
- <v-expansion-panel-header>
88
- <v-container>
89
- <v-row
90
- align="center"
91
- justify="space-between"
92
- >
93
- <h3>
94
- {{
95
- $t(
96
- 'plugin.games.components.content.blocks.slideshow.slides.slide',
97
- [index + 1]
98
- )
99
- }}
100
- </h3>
101
- <v-btn
102
- @click="onDeleteSlide(index)"
103
- color="primary"
104
- >
105
- <v-icon> mdi-delete</v-icon>
106
- <span class="sr-only">{{
107
- $t('shared.forms.delete')
108
- }}</span>
109
- </v-btn>
110
- </v-row>
111
- </v-container>
112
- </v-expansion-panel-header>
113
- <v-expansion-panel-content>
114
- <v-text-field
115
- v-model="slide['header']"
116
- :autofocus="true"
117
- outlined
118
- :label="
119
- $t(
120
- 'plugin.games.components.content.blocks.slideshow.slides.slide_header'
121
- )
122
- "
123
- ></v-text-field>
124
- <v-text-field
125
- v-model="slide['description']"
126
- outlined
127
- :label="
128
- $t(
129
- 'plugin.games.components.content.blocks.slideshow.slides.slide_description'
130
- )
131
- "
132
- ></v-text-field>
133
- <v-text-field
134
- v-model="slide['image_alt']"
135
- outlined
136
- :label="
137
- $t(
138
- 'plugin.games.components.content.blocks.slideshow.slides.image_alt'
139
- )
140
- "
141
- ></v-text-field>
142
- <ContentBlockAsset
143
- id="content-block-asset"
144
- v-model="slide['image']"
145
- mimes="image/png,image/jpeg"
146
- ></ContentBlockAsset>
147
- </v-expansion-panel-content>
148
- </v-expansion-panel>
149
- </draggable>
150
- </v-expansion-panels>
93
+ <v-row justify="center" class="my-4">
94
+ <v-btn @click="onAddSlide" color="primary">
95
+ <v-icon>mdi-plus</v-icon>
96
+ {{
97
+ $t(
98
+ 'plugin.games.components.content.blocks.slideshow.add_slide'
99
+ )
100
+ }}
101
+ </v-btn>
102
+ </v-row>
151
103
  </v-container>
152
- </div>
104
+ </v-container>
105
+ </v-form>
106
+ <div v-if="loading" class="text-center">
107
+ <v-progress-circular
108
+ :size="70"
109
+ :width="7"
110
+ color="primary"
111
+ indeterminate
112
+ ></v-progress-circular>
153
113
  </div>
154
114
  </div>
155
115
  </template>
156
116
  <script>
157
117
  import BaseContentSettings from '~/components/Content/Tool/BaseContentSettings.js'
158
- import draggable from 'vuedraggable'
159
118
  import _ from 'lodash'
160
119
  import ContentBlockAsset from '~/components/Content/ContentBlockAsset.vue'
120
+ import SortableExpansionPanel from '~/components/SortableExpansionPanel.vue'
161
121
 
162
122
  export default {
163
123
  name: 'SlideShowManager',
164
124
  extends: BaseContentSettings,
165
125
  components: {
166
- draggable,
167
126
  ContentBlockAsset,
127
+ SortableExpansionPanel,
168
128
  },
169
129
  beforeMount() {
170
130
  if (_.isEmpty(this.block)) {
@@ -180,7 +140,9 @@ export default {
180
140
  this.block.metadata.config = {}
181
141
  }
182
142
  if (_.isEmpty(this.block.metadata.config.title)) {
183
- this.block.metadata.config.title = ''
143
+ this.block.metadata.config.title = this.$t(
144
+ 'plugin.games.components.settings.slideshow.form.slideshow_title'
145
+ )
184
146
  }
185
147
  if (_.isEmpty(this.block.metadata.config.instructions)) {
186
148
  this.block.metadata.config.instructions = ''
@@ -35,77 +35,38 @@
35
35
  )
36
36
  }}
37
37
  </p>
38
- <draggable
38
+ <SortableExpansionPanel
39
39
  v-model="block.metadata.config.answer"
40
- group="cards"
41
- @change="onDragged"
40
+ @click:close="onDelete($event)"
42
41
  >
43
- <v-container
44
- v-for="(item, index) in block.metadata.config.answer"
45
- :key="'bucket_' + index"
46
- class="container-card-outline"
47
- elevation="0"
48
- outlined
49
- tile
50
- >
51
- <v-layout row wrap outlined>
52
- <v-flex xs10 :class="bottomBorder(index)">
53
- <p
54
- class="text-truncate mb-0 p-header"
55
- @click="onOpenEditor(index)"
56
- v-on:keyup.enter="onOpenEditor(index)"
57
- @mouseover="onHover"
58
- @mouseleave="onHoverLeave"
59
- :class="cursor"
60
- tabindex="0"
61
- >
62
- <v-icon>mdi-drag-vertical</v-icon>
63
- <span class="span-text-ellipsis">
64
- {{
65
- item.value
66
- ? block.metadata.config.answer[
67
- index
68
- ].value
69
- : $t(
70
- 'plugin.games.components.settings.bucket_game.form.enter_text'
71
- )
72
- }}
73
- </span>
74
- </p>
75
- </v-flex>
76
- <v-flex
77
- xs2
78
- class="btn-header-delete d-flex justify-center"
79
- :class="bottomBorder(index)"
80
- >
81
- <v-icon
82
- class="btn-delete-icon"
83
- @click="onDelete(index)"
84
- >mdi-delete-outline</v-icon
85
- >
86
- </v-flex>
87
- <v-container v-if="item.expand">
88
- <v-flex xs12>
89
- <p class="p-label">
90
- {{
91
- $t(
92
- 'plugin.games.components.settings.sorting_game.word'
93
- )
94
- }}
95
- </p>
96
- <v-textarea
97
- outlined
98
- v-model="
99
- block.metadata.config.answer[index]
100
- .value
101
- "
102
- :autofocus="true"
103
- ></v-textarea>
104
- </v-flex>
105
- </v-container>
106
- </v-layout>
107
- </v-container>
108
- </draggable>
42
+ <template #header="{ item, index }">
43
+ {{
44
+ item.value
45
+ ? block.metadata.config.answer[index].value
46
+ : $t(
47
+ 'plugin.games.components.settings.bucket_game.form.enter_text'
48
+ )
49
+ }}
50
+ </template>
51
+ <template #body="{ item, index }">
52
+ <v-container>
53
+ <p class="p-label">
54
+ {{
55
+ $t(
56
+ 'plugin.games.components.settings.sorting_game.word'
57
+ )
58
+ }}
59
+ </p>
60
+ <v-textarea
61
+ outlined
62
+ v-model="
63
+ block.metadata.config.answer[index].value
64
+ "
65
+ :autofocus="true"
66
+ ></v-textarea>
67
+ </v-container>
68
+ </template>
69
+ </SortableExpansionPanel>
109
70
  </v-container>
110
71
  <v-container class="pa-0">
111
72
  <v-row justify="center" class="my-4">
@@ -155,13 +116,12 @@
155
116
 
156
117
  <script>
157
118
  import _ from 'lodash'
158
- import draggable from 'vuedraggable'
159
119
  import BaseContentSettings from '~/components/Content/Tool/BaseContentSettings.js'
160
- import CrudTable from '../content/CrudTable.vue'
120
+ import SortableExpansionPanel from '~/components/SortableExpansionPanel.vue'
161
121
  export default {
162
122
  name: 'SortingGameSettingsManager',
163
123
  extends: BaseContentSettings,
164
- components: { CrudTable, draggable },
124
+ components: { SortableExpansionPanel },
165
125
  beforeMount() {
166
126
  if (_.isEmpty(this.block)) {
167
127
  this.block = {}
@@ -214,13 +174,6 @@ export default {
214
174
  }
215
175
  },
216
176
  methods: {
217
- bottomBorder(index) {
218
- if (this.block.metadata.config.answer[index].expand === true) {
219
- return 'container-header-border'
220
- } else {
221
- return null
222
- }
223
- },
224
177
  onAddElement() {
225
178
  this.block.metadata.config.answer.forEach((element) => {
226
179
  element.expand = false
@@ -240,28 +193,6 @@ export default {
240
193
  return (element.id = startingIndex)
241
194
  })
242
195
  },
243
- onOpenEditor(index) {
244
- this.block.metadata.config.answer[index].expand =
245
- !this.block.metadata.config.answer[index].expand
246
- this.block.metadata.config.answer.forEach((element) => {
247
- if (index + 1 !== element.id) {
248
- element.expand = false
249
- }
250
- })
251
- },
252
- onHover(index) {
253
- this.cursor = 'change-pointer'
254
- },
255
- onHoverLeave() {
256
- this.cursor = ''
257
- },
258
- onDragged() {
259
- let counter = 1
260
- this.block.metadata.config.answer.forEach((element) => {
261
- element.id = counter
262
- counter = counter + 1
263
- })
264
- },
265
196
  },
266
197
  }
267
198
  </script>
@@ -270,49 +201,6 @@ export default {
270
201
  .v-progress-circular {
271
202
  margin: 1rem;
272
203
  }
273
- .container-card-outline {
274
- border: solid 1px var(--v-primary-base);
275
- border-radius: 3px !important;
276
- margin-bottom: 8px;
277
- }
278
- .container-header-border {
279
- border-bottom: 1px solid var(--v-primary-base);
280
- }
281
- .fullWidth {
282
- display: flex;
283
- justify-content: center;
284
- align-items: center;
285
- font-weight: bold;
286
- font-size: 16px;
287
- }
288
- .change-pointer {
289
- cursor: pointer !important;
290
- }
291
- .p-header {
292
- height: 45px;
293
- display: flex;
294
- align-items: center;
295
- }
296
- .p-header:hover {
297
- background-color: rgb(243, 243, 243);
298
- }
299
- .span-text-ellipsis {
300
- white-space: nowrap;
301
- overflow: hidden;
302
- text-overflow: ellipsis;
303
- }
304
- .btn-header-delete {
305
- border-left: 1px solid var(--v-primary-base);
306
- }
307
- .btn-header-delete:hover {
308
- background-color: rgb(243, 243, 243);
309
- }
310
- .btn-delete-icon {
311
- color: var(--v-primary-base);
312
- }
313
- .addIcon {
314
- margin-right: 5px;
315
- }
316
204
  .p-label {
317
205
  font-size: 16px;
318
206
  font-weight: 500;