@windward/games 0.0.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 (68) hide show
  1. package/.editorconfig +13 -0
  2. package/.eslintrc.js +11 -0
  3. package/.prettierrc +4 -0
  4. package/README.md +43 -0
  5. package/babel.config.js +1 -0
  6. package/components/content/CrudTable.vue +295 -0
  7. package/components/content/DataTableRowHandler.vue +113 -0
  8. package/components/content/DatableEditor.vue +223 -0
  9. package/components/content/blocks/BaseContentBlock.vue +8 -0
  10. package/components/content/blocks/dragDrop/BucketGame.vue +520 -0
  11. package/components/content/blocks/dragDrop/SortingGame.vue +303 -0
  12. package/components/content/blocks/flashcards/CardFace.vue +112 -0
  13. package/components/content/blocks/flashcards/Flashcard.vue +150 -0
  14. package/components/content/blocks/flashcards/FlashcardSlides.vue +121 -0
  15. package/components/content/blocks/matchingGame/MatchingGame.vue +545 -0
  16. package/components/content/blocks/quizshowGame/AnswerPanel.vue +338 -0
  17. package/components/content/blocks/quizshowGame/Gridview.vue +260 -0
  18. package/components/content/blocks/quizshowGame/QuizShow.vue +516 -0
  19. package/components/content/blocks/quizshowGame/feedbackIcons.vue +41 -0
  20. package/components/content/blocks/slideshow/SlideShow.vue +175 -0
  21. package/components/settings/BucketGameSettingsManager.vue +683 -0
  22. package/components/settings/FlashCardSlidesManager.vue +489 -0
  23. package/components/settings/MatchingGameManager.vue +775 -0
  24. package/components/settings/QuizShowSettingsManager.vue +408 -0
  25. package/components/settings/SlideShowManager.vue +248 -0
  26. package/components/settings/SortingGameSettingsManager.vue +286 -0
  27. package/i18n/en-US/components/content/blocks/bucket_game.ts +39 -0
  28. package/i18n/en-US/components/content/blocks/flashcard.ts +5 -0
  29. package/i18n/en-US/components/content/blocks/index.ts +15 -0
  30. package/i18n/en-US/components/content/blocks/matching_game.ts +26 -0
  31. package/i18n/en-US/components/content/blocks/quizshow_game.ts +35 -0
  32. package/i18n/en-US/components/content/blocks/slideshow.ts +13 -0
  33. package/i18n/en-US/components/content/blocks/sorting_game.ts +5 -0
  34. package/i18n/en-US/components/content/crud_table.ts +6 -0
  35. package/i18n/en-US/components/content/index.ts +7 -0
  36. package/i18n/en-US/components/index.ts +9 -0
  37. package/i18n/en-US/components/navigation/index.ts +5 -0
  38. package/i18n/en-US/components/settings/bucket_game.ts +35 -0
  39. package/i18n/en-US/components/settings/flashcard.ts +26 -0
  40. package/i18n/en-US/components/settings/index.ts +13 -0
  41. package/i18n/en-US/components/settings/matching_game.ts +15 -0
  42. package/i18n/en-US/components/settings/quizshow_game.ts +14 -0
  43. package/i18n/en-US/components/settings/slideshow.ts +11 -0
  44. package/i18n/en-US/index.ts +15 -0
  45. package/i18n/en-US/modules/index.ts +5 -0
  46. package/i18n/en-US/pages/index.ts +5 -0
  47. package/i18n/en-US/shared/content_blocks.ts +14 -0
  48. package/i18n/en-US/shared/index.ts +7 -0
  49. package/i18n/en-US/shared/settings.ts +10 -0
  50. package/i18n/en-US.ts +5 -0
  51. package/jest.config.js +18 -0
  52. package/package.json +51 -0
  53. package/plugin.js +150 -0
  54. package/test/blocks/dragDrop/BucketGame.spec.js +26 -0
  55. package/test/blocks/dragDrop/SortingGame.spec.js +47 -0
  56. package/test/blocks/flashcards/CardFace.spec.js +21 -0
  57. package/test/blocks/flashcards/FlashCardSlides.spec.js +24 -0
  58. package/test/blocks/flashcards/Flashcard.spec.js +24 -0
  59. package/test/blocks/matchingGame/MatchingGame.spec.js +26 -0
  60. package/test/blocks/quizShow/quizShow.spec.js +31 -0
  61. package/test/blocks/slideshow/slideshow.spec.js +24 -0
  62. package/test/mocks.js +2 -0
  63. package/test/settings/BucketGameManager.spec.js +125 -0
  64. package/test/settings/FlashCardSlidesManager.spec.js +24 -0
  65. package/test/settings/MatchingGameManager.spec.js +30 -0
  66. package/test/settings/SlideShowManager.spec.js +30 -0
  67. package/test/settings/SortingGameManager.spec.js +71 -0
  68. package/tsconfig.json +20 -0
@@ -0,0 +1,223 @@
1
+ <template>
2
+ <div>
3
+ <!-- <v-switch v-model="allowDrag" label="Draggable"> </v-switch>-->
4
+ <v-data-table
5
+ ref="myTable"
6
+ v-model="selected"
7
+ :headers="item_headers"
8
+ :items="items"
9
+ :search="search"
10
+ item-key="text"
11
+ class="elevation-1"
12
+ >
13
+ <v-divider inset></v-divider>
14
+ <template #top>
15
+ <v-toolbar flat color="white">
16
+ <div class="d-flex w-100">
17
+ <!-- <v-text-field
18
+ v-model="search"
19
+ append-icon="mdi-magnify"
20
+ label="Search"
21
+ dense
22
+ outlined
23
+ single-line
24
+ hide-details
25
+ ></v-text-field>-->
26
+ <v-btn
27
+ color="primary"
28
+ class="col-md-12 white--text"
29
+ @click="addNew"
30
+ >
31
+ <v-icon dark>mdi-plus</v-icon>Add
32
+ </v-btn>
33
+ </div>
34
+ </v-toolbar>
35
+ </template>
36
+ <template #body="props">
37
+ <draggable
38
+ v-model="items"
39
+ tag="tbody"
40
+ :disabled="!allowDrag"
41
+ :move="onMoveCallback"
42
+ :clone="onCloneCallback"
43
+ @end="onDropCallback"
44
+ >
45
+ <data-table-row-handler
46
+ v-model="editedItem"
47
+ v-for="(item, index) in props.items"
48
+ :key="index"
49
+ :item="item"
50
+ :editedItemId="editedItem.id"
51
+ :headers="item_headers"
52
+ v-on:keyup.enter="addNew"
53
+ >
54
+ <!-- <template #item.lock="{ item }">
55
+ <v-icon
56
+ @click="
57
+ item.locked = item.locked ? false : true
58
+ "
59
+ >{{
60
+ item.locked
61
+ ? 'mdi-pin-outline'
62
+ : 'mdi-pin-off-outline'
63
+ }}</v-icon
64
+ >
65
+ </template>-->
66
+ <template v-slot:item.actions="{ item }">
67
+ <div v-if="item.id === editedItem.id">
68
+ <v-icon color="red" class="mr-3" @click="close">
69
+ mdi-window-close
70
+ </v-icon>
71
+ <v-icon color="green" @click="save">
72
+ mdi-content-save
73
+ </v-icon>
74
+ </div>
75
+ <div v-else>
76
+ <v-icon
77
+ color="green"
78
+ class="mr-3"
79
+ @click="editItem(item)"
80
+ >
81
+ mdi-pencil
82
+ </v-icon>
83
+ <v-icon color="red" @click="deleteItem(item)">
84
+ mdi-delete
85
+ </v-icon>
86
+ </div>
87
+ </template>
88
+ </data-table-row-handler>
89
+ </draggable>
90
+ </template>
91
+ </v-data-table>
92
+ </div>
93
+ </template>
94
+
95
+ <script>
96
+ import DataTableRowHandler from './DataTableRowHandler.vue'
97
+ import draggable from 'vuedraggable'
98
+ import _ from 'lodash'
99
+
100
+ export default {
101
+ name: 'DataTableEditor',
102
+ components: {
103
+ draggable,
104
+ DataTableRowHandler,
105
+ },
106
+ props: {
107
+ headers: { type: Array, required: true, default: [] },
108
+ data: { type: Array, required: true, default: [] },
109
+ },
110
+ data() {
111
+ return {
112
+ allowDrag: true,
113
+ search: '',
114
+ selected: [],
115
+ item_headers: [],
116
+ items: [],
117
+ editedIndex: -1,
118
+ editedItem: {
119
+ id: 0,
120
+ text: '',
121
+ },
122
+ defaultItem: {
123
+ id: 0,
124
+ text: 'New Item',
125
+ value: 'new value',
126
+ },
127
+ }
128
+ },
129
+ mounted() {
130
+ this.items = _.cloneDeep(this.data)
131
+ this.item_headers = _.cloneDeep(this.headers)
132
+ if (!this.hasActions()) {
133
+ this.item_headers.push({
134
+ text: 'Actions',
135
+ align: 'right',
136
+ value: 'actions',
137
+ sortable: false,
138
+ width: '100px',
139
+ })
140
+ }
141
+ },
142
+ computed: {
143
+ activeHeaders() {
144
+ return this.headers.filter((h) => {
145
+ if (!this.allowDrag && h.value === 'lock') {
146
+ return false
147
+ }
148
+ return true
149
+ })
150
+ },
151
+ },
152
+ methods: {
153
+ hasActions() {
154
+ let result = false
155
+ this.headers.forEach((element) => {
156
+ if (element.text === 'actions') {
157
+ result = true
158
+ }
159
+
160
+ return result
161
+ })
162
+ },
163
+ onCloneCallback(item) {
164
+ // Create a fresh copy of item
165
+ const cloneMe = JSON.parse(JSON.stringify(item))
166
+
167
+ return cloneMe
168
+ },
169
+ onMoveCallback(evt, originalEvent) {
170
+ const item = evt.draggedContext.element
171
+ const itemIdx = evt.draggedContext.futureIndex
172
+
173
+ console.log('onMoveCallback', evt)
174
+
175
+ if (item.locked) {
176
+ return false
177
+ }
178
+
179
+ return true
180
+ },
181
+ onDropCallback(evt, originalEvent) {
182
+ console.log('onDropCallback')
183
+ this.$emit('input', this.items)
184
+ },
185
+ editItem(item) {
186
+ this.editedIndex = this.items.indexOf(item)
187
+ this.editedItem = Object.assign({}, item)
188
+ },
189
+
190
+ deleteItem(item) {
191
+ const index = this.items.indexOf(item)
192
+ //confirm('Are you sure you want to delete this item?') &&
193
+ this.items.splice(index, 1)
194
+ },
195
+
196
+ close() {
197
+ setTimeout(() => {
198
+ this.editedItem = Object.assign({}, this.defaultItem)
199
+ this.editedIndex = -1
200
+ }, 300)
201
+ },
202
+ addNew() {
203
+ const addObj = Object.assign({}, this.defaultItem)
204
+ addObj.id = this.items.length + 1
205
+ this.items.unshift(addObj)
206
+ this.editItem(addObj)
207
+ },
208
+ save() {
209
+ if (this.editedIndex > -1) {
210
+ Object.assign(this.items[this.editedIndex], this.editedItem)
211
+ }
212
+ this.$emit('input', this.items)
213
+ this.close()
214
+ },
215
+ },
216
+ }
217
+ </script>
218
+
219
+ <style>
220
+ .w-100 {
221
+ width: 100%;
222
+ }
223
+ </style>
@@ -0,0 +1,8 @@
1
+ <template>
2
+ <div>Mock</div>
3
+ </template>
4
+ <script>
5
+ export default {
6
+ name: 'BaseContentBlock',
7
+ }
8
+ </script>