@windward/core 0.1.3 → 0.2.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 (40) hide show
  1. package/components/Content/Blocks/Email.vue +62 -12
  2. package/components/Content/Blocks/HorizontalRule.vue +52 -0
  3. package/components/Content/Blocks/Image.vue +4 -4
  4. package/components/Content/Blocks/Tab.vue +2 -8
  5. package/components/Content/Blocks/UserUpload/ManageDataTableUserFiles.vue +4 -4
  6. package/components/Content/Blocks/UserUpload.vue +48 -12
  7. package/components/Navigation/Items/AskTheExpert.vue +2 -2
  8. package/components/Navigation/Items/CourseGlossaryToolNav.vue +2 -2
  9. package/components/Settings/HorizontalRuleSettings.vue +42 -0
  10. package/components/Settings/ImageSettings.vue +69 -9
  11. package/components/Settings/ScenarioChoiceSettings.vue +4 -4
  12. package/components/Settings/TabSettings.vue +0 -3
  13. package/components/Settings/TextEditorSettings.vue +2 -2
  14. package/components/utils/MathExpressionEditor.vue +1 -1
  15. package/components/utils/TinyMCEWrapper.vue +3 -1
  16. package/components/utils/assets/tinymce/css/content.scss +2 -2
  17. package/components/utils/glossary/CourseGlossary.vue +16 -3
  18. package/components/utils/glossary/CourseGlossaryForm.vue +1 -0
  19. package/components/utils/glossary/GlossaryToolTip.vue +2 -2
  20. package/helpers/MathHelper.ts +1 -1
  21. package/i18n/en-US/components/content/blocks/feedback.ts +2 -2
  22. package/i18n/en-US/components/settings/horizontal_rule.ts +3 -0
  23. package/i18n/en-US/components/settings/image.ts +8 -0
  24. package/i18n/en-US/components/settings/index.ts +2 -0
  25. package/i18n/en-US/shared/content_blocks.ts +1 -0
  26. package/i18n/en-US/shared/settings.ts +1 -0
  27. package/i18n/es-ES/components/settings/horizontal_rule.ts +3 -0
  28. package/i18n/es-ES/components/settings/image.ts +8 -0
  29. package/i18n/es-ES/components/settings/index.ts +2 -0
  30. package/i18n/es-ES/shared/content_blocks.ts +1 -0
  31. package/i18n/es-ES/shared/settings.ts +1 -0
  32. package/i18n/sv-SE/components/settings/horizontal_rule.ts +3 -0
  33. package/i18n/sv-SE/components/settings/image.ts +8 -0
  34. package/i18n/sv-SE/components/settings/index.ts +2 -0
  35. package/i18n/sv-SE/shared/content_blocks.ts +1 -0
  36. package/i18n/sv-SE/shared/settings.ts +1 -0
  37. package/package.json +7 -2
  38. package/plugin.js +34 -26
  39. package/test/__mocks__/componentsMock.js +2 -2
  40. package/.vscode/settings.json +0 -3
@@ -46,8 +46,15 @@
46
46
  elevation="0"
47
47
  >
48
48
  <v-expansion-panel-header>
49
- <v-row>
50
- <v-col class="pa-0 d-flex align-center">
49
+ <v-row class="container-header">
50
+ <v-col
51
+ xl="1"
52
+ lg="1"
53
+ md="1"
54
+ sm="2"
55
+ xs="2"
56
+ class="pa-0 d-flex align-center"
57
+ >
51
58
  <v-btn fab x-small class="primary" elevation="0"
52
59
  >{{ item.initials ? item.initials : '' }}
53
60
  </v-btn>
@@ -66,28 +73,54 @@
66
73
  color="secondary"
67
74
  >mdi-circle-medium</v-icon
68
75
  >
76
+ </v-col>
77
+ <v-col
78
+ xl="1"
79
+ lg="3"
80
+ md="11"
81
+ sm="10"
82
+ xs="10"
83
+ class="d-flex align-center"
84
+ >
69
85
  <span class="span-details"
70
86
  >{{ item.from ? item.from : 'From' }}
71
87
  </span>
72
88
  </v-col>
89
+ <v-col
90
+ v-if="selectedPanels !== index"
91
+ xl="10"
92
+ lg="8"
93
+ class="d-flex align-center container-body-preview"
94
+ >
95
+ <div class="div-preview">
96
+ {{ onRemoveTags(item.body) }}
97
+ </div>
98
+ </v-col>
73
99
  </v-row>
74
100
  </v-expansion-panel-header>
75
101
  <v-expansion-panel-content>
76
- <v-container class="pa-0 container-details">
102
+ <v-container class="pa-0">
77
103
  <v-row>
78
- <v-col cols="1"></v-col>
79
104
  <v-col
80
- class="pa-0 div-details"
105
+ cols="1"
106
+ xl="1"
107
+ lg="1"
108
+ md="1"
109
+ sm="2"
110
+ xs="2"
111
+ ></v-col>
112
+ <v-col
113
+ class="div-details"
81
114
  v-if="item.to || item.cc"
82
115
  >
83
- <div class="div-details-to pl-4">
116
+ <div class="div-details-to">
84
117
  {{
85
118
  $t(
86
119
  'windward.core.components.content.blocks.email.to'
87
120
  )
88
121
  }}: {{ item.to }}
89
122
  </div>
90
- <div class="div-details-cc pl-4">
123
+ <div class="div-details-cc">
91
124
  {{
92
125
  $t(
93
126
  'windward.core.components.content.blocks.email.cc'
@@ -220,7 +253,11 @@ export default {
220
253
  mounted() {
221
254
  this.selectedPanels = this.block.metadata.config.emails.length - 1
222
255
  },
223
- methods: {},
256
+ methods: {
257
+ onRemoveTags(body) {
258
+ return body.replace(/(<([^>]+)>)/gi, '')
259
+ },
260
+ },
224
261
  }
225
262
  </script>
226
263
  <style scoped>
@@ -230,12 +267,10 @@ export default {
230
267
  .column-simulation {
231
268
  font-size: 12px;
232
269
  }
233
- .container-details {
234
- font-size: 10px;
235
- margin-top: -26px;
236
- }
237
270
  .div-details {
238
271
  color: grey;
272
+ font-size: 10px;
273
+ margin-top: -25px;
239
274
  }
240
275
  .div-details-cc {
241
276
  margin-top: -9px;
@@ -247,4 +282,19 @@ export default {
247
282
  .v-expansion-panel {
248
283
  border: 1px solid var(--v-primary-base);
249
284
  }
285
+ @media only screen and (max-width: 1264px) {
286
+ .container-body-preview {
287
+ display: none !important;
288
+ }
289
+ }
290
+ .div-preview {
291
+ overflow: hidden;
292
+ text-overflow: ellipsis;
293
+ white-space: nowrap;
294
+ margin-top: auto;
295
+ margin-bottom: auto;
296
+ }
297
+ .container-header {
298
+ width: 100%;
299
+ }
250
300
  </style>
@@ -0,0 +1,52 @@
1
+ <template>
2
+ <div>
3
+ <hr :class="isDashed" />
4
+ </div>
5
+ </template>
6
+ <script>
7
+ import _ from 'lodash'
8
+ import BaseContentBlock from '~/components/Content/Blocks/BaseContentBlock'
9
+ export default {
10
+ name: 'HorizontalRule',
11
+ extends: BaseContentBlock,
12
+ beforeMount() {
13
+ if (_.isEmpty(this.block)) {
14
+ this.block = {}
15
+ }
16
+ if (_.isEmpty(this.block.metadata)) {
17
+ this.block.metadata = {}
18
+ }
19
+ if (_.isEmpty(this.block.metadata.config)) {
20
+ this.block.metadata.config = {}
21
+ }
22
+ if (_.isEmpty(this.block.metadata.config)) {
23
+ this.block.metadata.config = {}
24
+ }
25
+ if (_.isEmpty(this.block.metadata.config.dashed)) {
26
+ this.block.metadata.config.dashed = false
27
+ }
28
+ },
29
+ data() {
30
+ return {
31
+ isDashed: 'solid',
32
+ }
33
+ },
34
+ watch: {
35
+ value(newValue) {
36
+ if (newValue.metadata.config.dashed) {
37
+ this.isDashed = 'dashed'
38
+ } else if (newValue.metadata.config.dashed === false) {
39
+ this.isDashed = 'solid'
40
+ }
41
+ },
42
+ },
43
+ }
44
+ </script>
45
+ <style>
46
+ .solid {
47
+ border-bottom: solid 1px var(--v-primary-base);
48
+ }
49
+ .dashed {
50
+ border-bottom: dashed 1px var(--v-primary-base);
51
+ }
52
+ </style>
@@ -43,7 +43,7 @@
43
43
  class="sr-only"
44
44
  ></TextViewer>
45
45
  </v-container>
46
- <Dialog v-model="dialog" persistent :trigger="false">
46
+ <DialogBox v-model="dialog" persistent :trigger="false">
47
47
  <template #title></template>
48
48
  <template #form="{ on, attrs }">
49
49
  <v-responsive
@@ -72,13 +72,13 @@
72
72
  </v-img>
73
73
  </v-responsive>
74
74
  </template>
75
- </Dialog>
75
+ </DialogBox>
76
76
  </div>
77
77
  </template>
78
78
 
79
79
  <script>
80
80
  import _ from 'lodash'
81
- import Dialog from '~/components/Dialog'
81
+ import DialogBox from '~/components/DialogBox'
82
82
  import TextViewer from '~/components/Text/TextViewer'
83
83
  import Crypto from '~/helpers/Crypto'
84
84
  import BaseContentBlock from '~/components/Content/Blocks/BaseContentBlock'
@@ -87,7 +87,7 @@ export default {
87
87
  name: 'ContentBlockImage',
88
88
  extends: BaseContentBlock,
89
89
  components: {
90
- Dialog,
90
+ DialogBox,
91
91
  TextViewer,
92
92
  },
93
93
  data() {
@@ -1,10 +1,7 @@
1
1
  <template>
2
2
  <div>
3
- <v-container>
4
- <v-tabs
5
- background-color="primary"
6
- v-model="block.metadata.config.currentTab"
7
- >
3
+ <v-container class="pa-0">
4
+ <v-tabs dark v-model="block.metadata.config.currentTab" show-arrows>
8
5
  <v-tabs-slider></v-tabs-slider>
9
6
  <v-tab
10
7
  v-for="(tab, tabIndex) in block.metadata.config.items"
@@ -60,9 +57,6 @@ export default {
60
57
  content: '',
61
58
  }
62
59
  this.block.metadata.config.items = []
63
- if (_.isEmpty(this.block.metadata.config.tab)) {
64
- this.block.metadata.config.tab = 0
65
- }
66
60
  this.block.metadata.config.items.push(defaultObject)
67
61
  } else {
68
62
  this.block.metadata.config.items.forEach((element) => {
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="text-center">
3
- <Dialog
3
+ <DialogBox
4
4
  v-bind="$attrs"
5
5
  transition="dialog-bottom-transition"
6
6
  :color="color"
@@ -22,20 +22,20 @@
22
22
  :enrollment="enrollment"
23
23
  ></DisplayUserFilesTable>
24
24
  </template>
25
- </Dialog>
25
+ </DialogBox>
26
26
  <span v-else>---</span>
27
27
  </div>
28
28
  </template>
29
29
 
30
30
  <script>
31
31
  import _ from 'lodash'
32
- import Dialog from '~/components/Dialog'
32
+ import DialogBox from '~/components/DialogBox'
33
33
 
34
34
  import DisplayUserFilesTable from './DisplayUserFilesTable.vue'
35
35
 
36
36
  export default {
37
37
  name: 'ManageDataTableUserFiles',
38
- components: { Dialog, DisplayUserFilesTable },
38
+ components: { DialogBox, DisplayUserFilesTable },
39
39
  props: {
40
40
  value: { type: Object, required: true },
41
41
  enrollment: { type: Object, required: true },
@@ -38,7 +38,7 @@
38
38
  :enrollment="enrollment"
39
39
  ></DisplayUserFilesTable>
40
40
  </v-col>
41
- <v-col cols="12">
41
+ <v-col cols="12" v-if="showUpload">
42
42
  <div v-if="blockExists">
43
43
  <v-form
44
44
  ref="form"
@@ -149,6 +149,7 @@ export default {
149
149
  uploadFiles: [],
150
150
  userFileAsset: {},
151
151
  studentUpload: null,
152
+ maxFileLimit: 10,
152
153
  }
153
154
  },
154
155
  computed: {
@@ -160,17 +161,27 @@ export default {
160
161
  },
161
162
  canUpload() {
162
163
  if (this.valid) {
164
+ const currentFiles = _.get(
165
+ this.userFileAsset,
166
+ 'file_assets',
167
+ []
168
+ )
169
+
163
170
  // Multiple disabled, single file selected
164
171
  if (
165
172
  !Array.isArray(this.uploadFiles) &&
166
173
  !this.block.metadata.config.uploadSettings.multiple &&
167
- this.uploadFiles
174
+ this.uploadFiles &&
175
+ currentFiles.length === 0
168
176
  ) {
169
177
  return true
170
178
  } else if (
171
179
  // Multi enabled, one or more files selected
180
+ this.block.metadata.config.uploadSettings.multiple &&
172
181
  Array.isArray(this.uploadFiles) &&
173
- this.uploadFiles.length > 0
182
+ this.uploadFiles.length > 0 &&
183
+ this.uploadFiles.length + currentFiles.length <=
184
+ this.maxFileLimit
174
185
  ) {
175
186
  return true
176
187
  } else {
@@ -180,6 +191,26 @@ export default {
180
191
  }
181
192
  return false
182
193
  },
194
+ showUpload() {
195
+ const currentFiles = _.get(this.userFileAsset, 'file_assets', [])
196
+
197
+ // Multiple disabled, confirm there's no current files
198
+ if (
199
+ !this.block.metadata.config.uploadSettings.multiple &&
200
+ currentFiles.length === 0
201
+ ) {
202
+ return true
203
+ } else if (
204
+ // Multi enabled, make sure we're not over our max limit
205
+ this.block.metadata.config.uploadSettings.multiple &&
206
+ currentFiles.length < this.maxFileLimit
207
+ ) {
208
+ return true
209
+ } else {
210
+ // Hide the uploader
211
+ return false
212
+ }
213
+ },
183
214
  },
184
215
  mounted() {
185
216
  if (this.blockExists) {
@@ -202,19 +233,24 @@ export default {
202
233
  }
203
234
 
204
235
  // Create a new UserFileAsset if we don't have an instance yet
205
- if (!Uuid.test(this.userFileAsset.id)) {
206
- this.userFileAsset = new UserFileAsset({
207
- file: uploadFiles,
208
- }).for(
209
- new Enrollment(this.enrollment),
210
- new ContentBlock({ id: this.block.id })
211
- )
236
+ let userFileAssetRequest = new UserFileAsset({
237
+ file: uploadFiles,
238
+ }).for(
239
+ new Enrollment(this.enrollment),
240
+ new ContentBlock({ id: this.block.id })
241
+ )
242
+
243
+ // Apply the existing id if we already have an instance
244
+ if (Uuid.test(this.userFileAsset.id)) {
245
+ userFileAssetRequest.id = this.userFileAsset.id
212
246
  }
213
247
 
214
- this.userFileAsset.file = uploadFiles
248
+ // Add our files to upload
249
+ userFileAssetRequest.file = uploadFiles
215
250
 
216
251
  try {
217
- this.userFileAsset = await this.userFileAsset.save()
252
+ // Apply the response back to the reactive this.userFileAsset
253
+ this.userFileAsset = await userFileAssetRequest.save()
218
254
  } catch (e) {
219
255
  this.$toast.error(this.$t('shared.forms.errors.unknown'))
220
256
  console.log(e)
@@ -7,7 +7,7 @@
7
7
  <v-list-item-title>
8
8
  {{ $t(config.i18n) }}
9
9
  </v-list-item-title>
10
- <Dialog v-model="dialog" color="primary" text :trigger="false">
10
+ <DialogBox v-model="dialog" color="primary" text :trigger="false">
11
11
  <template #title>{{ $t(config.i18n) }}</template>
12
12
  <template #form="{ on, attrs }">
13
13
  <v-card flat v-bind="attrs" v-on="on">
@@ -104,7 +104,7 @@
104
104
  </v-container>
105
105
  </v-card>
106
106
  </template>
107
- </Dialog>
107
+ </DialogBox>
108
108
  </v-list-item-content>
109
109
  </v-list-item>
110
110
  </template>
@@ -5,14 +5,14 @@
5
5
  </v-list-item-action>
6
6
  <v-list-item-content>
7
7
  <v-list-item-title>{{ $t(config.i18n) }}</v-list-item-title>
8
- <Dialog v-model="dialog" color="primary" text :trigger="false">
8
+ <DialogBox v-model="dialog" color="primary" text :trigger="false">
9
9
  <template #title>{{ $t(config.i18n) }}</template>
10
10
  <template #form="{ on, attrs }">
11
11
  <div v-bind="attrs" v-on="on">
12
12
  <CourseGlossary />
13
13
  </div>
14
14
  </template>
15
- </Dialog>
15
+ </DialogBox>
16
16
  </v-list-item-content>
17
17
  </v-list-item>
18
18
  </template>
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <div>
3
+ <v-switch
4
+ v-model="block.metadata.config.dashed"
5
+ :label="
6
+ $t('windward.core.components.settings.horizontal_rule.dashed')
7
+ "
8
+ ></v-switch>
9
+ </div>
10
+ </template>
11
+
12
+ <script>
13
+ import _ from 'lodash'
14
+ import BaseContentSettings from '~/components/Content/Tool/BaseContentSettings.js'
15
+
16
+ export default {
17
+ name: 'HorizontalRuleSettings',
18
+ extends: BaseContentSettings,
19
+ components: {},
20
+ beforeMount() {
21
+ if (_.isEmpty(this.block)) {
22
+ this.block = {}
23
+ }
24
+ if (_.isEmpty(this.block.metadata)) {
25
+ this.block.metadata = {}
26
+ }
27
+ if (_.isEmpty(this.block.metadata.config)) {
28
+ this.block.metadata.config = {}
29
+ }
30
+ if (_.isEmpty(this.block.metadata.config)) {
31
+ this.block.metadata.config = {}
32
+ }
33
+ if (!_.isBoolean(this.block.metadata.config.dashed)) {
34
+ this.block.metadata.config.dashed = false
35
+ }
36
+ },
37
+ data() {
38
+ return {}
39
+ },
40
+ }
41
+ </script>
42
+ <style></style>
@@ -27,24 +27,68 @@
27
27
  v-model="block.metadata.config.modal"
28
28
  :label="$t('windward.core.components.settings.image.modal')"
29
29
  ></v-switch>
30
+ <v-tooltip top color="primary">
31
+ <template v-slot:activator="{ on, attrs }">
32
+ <div v-bind="attrs" v-on="on" class="d-flex justify-content">
33
+ <v-switch
34
+ v-model="block.metadata.config.decorative"
35
+ @change="onDecorativeToggled($event)"
36
+ :label="
37
+ $t(
38
+ 'windward.core.components.settings.image.decorative'
39
+ )
40
+ "
41
+ ></v-switch>
42
+ <div class="d-flex align-center pb-4">
43
+ <v-icon x-small>mdi-help</v-icon>
44
+ </div>
45
+ </div>
46
+ </template>
47
+ <span class="span-description">{{
48
+ $t('windward.core.components.settings.image.toggle_description')
49
+ }}</span>
50
+ </v-tooltip>
30
51
 
31
- <v-form>
52
+ <v-form v-if="!block.metadata.config.decorative">
32
53
  <v-text-field
33
54
  v-model="block.metadata.config.alt"
55
+ outlined
56
+ counter
57
+ maxlength="125"
34
58
  :label="
35
59
  $t('windward.core.components.navigation.image.default_alt')
36
60
  "
37
61
  :rules="validation.textRules"
38
- ></v-text-field>
39
- <h3 class="pb-2">
40
- {{
41
- $t(
42
- 'windward.core.components.navigation.image.default_aria_described'
43
- )
44
- }}
45
- </h3>
62
+ >
63
+ <template v-slot:append>
64
+ <v-tooltip top color="primary">
65
+ <template v-slot:activator="{ on }">
66
+ <v-icon v-on="on" small>mdi-help</v-icon>
67
+ </template>
68
+ <span class="span-description">{{
69
+ $t(
70
+ 'windward.core.components.settings.image.alt_description'
71
+ )
72
+ }}</span>
73
+ </v-tooltip>
74
+ </template>
75
+ </v-text-field>
76
+ <h5 class="pb-2">
77
+ {{ $t('windward.core.components.settings.image.screenreader') }}
78
+ <v-tooltip top color="primary">
79
+ <template v-slot:activator="{ on }">
80
+ <v-icon v-on="on" small class="pb-3">mdi-help</v-icon>
81
+ </template>
82
+ <span class="span-description">{{
83
+ $t(
84
+ 'windward.core.components.settings.image.screenreader_description'
85
+ )
86
+ }}</span>
87
+ </v-tooltip>
88
+ </h5>
46
89
  <TextEditor
47
90
  v-model="block.metadata.config.aria_describedby"
91
+ menubar="bullist numlist"
48
92
  ></TextEditor>
49
93
  </v-form>
50
94
  </v-container>
@@ -86,6 +130,9 @@ export default {
86
130
  if (!_.isBoolean(this.block.metadata.config.modal)) {
87
131
  this.block.metadata.config.modal = false
88
132
  }
133
+ if (!_.isBoolean(this.block.metadata.config.decorative)) {
134
+ this.block.metadata.config.decorative = false
135
+ }
89
136
  if (_.isEmpty(this.block.metadata.config.aria_describedby)) {
90
137
  this.block.metadata.config.aria_describedby = ''
91
138
  }
@@ -108,6 +155,12 @@ export default {
108
155
  watch: {},
109
156
  mounted() {},
110
157
  methods: {
158
+ onDecorativeToggled(evt) {
159
+ if (evt) {
160
+ this.block.metadata.config.aria_describedby = ''
161
+ this.block.metadata.config.alt = ''
162
+ }
163
+ },
111
164
  onFileSelect(file) {
112
165
  // file = null when you remove a file
113
166
  if (_.isEmpty(file)) {
@@ -139,3 +192,10 @@ export default {
139
192
  },
140
193
  }
141
194
  </script>
195
+ <style>
196
+ .span-description {
197
+ display: flex;
198
+ justify-content: center;
199
+ width: 200px;
200
+ }
201
+ </style>
@@ -117,7 +117,7 @@
117
117
  </v-col>
118
118
  </v-container>
119
119
 
120
- <Dialog
120
+ <DialogBox
121
121
  v-model="showLinkDialog"
122
122
  :trigger="false"
123
123
  action-save
@@ -171,7 +171,7 @@
171
171
  </v-treeview>
172
172
  </v-form>
173
173
  </template>
174
- </Dialog>
174
+ </DialogBox>
175
175
  </div>
176
176
  </template>
177
177
  <script>
@@ -180,14 +180,14 @@ import { mapGetters } from 'vuex'
180
180
  import BaseContentSettings from '~/components/Content/Tool/BaseContentSettings.js'
181
181
  import TextEditor from '~/components/Text/TextEditor'
182
182
  import SortableExpansionPanel from '~/components/SortableExpansionPanel.vue'
183
- import Dialog from '~/components/Dialog.vue'
183
+ import DialogBox from '~/components/DialogBox.vue'
184
184
 
185
185
  export default {
186
186
  name: 'ScenarioChoiceSettings',
187
187
  components: {
188
188
  SortableExpansionPanel,
189
189
  TextEditor,
190
- Dialog,
190
+ DialogBox,
191
191
  },
192
192
  extends: BaseContentSettings,
193
193
  computed: {
@@ -94,9 +94,6 @@ export default {
94
94
  if (_.isEmpty(this.block.metadata.config)) {
95
95
  this.block.metadata.config = {}
96
96
  }
97
- if (_.isEmpty(this.block.metadata.config.tab)) {
98
- this.block.metadata.config.tab = 0
99
- }
100
97
  if (_.isEmpty(this.block.metadata.config.currentTab)) {
101
98
  this.block.metadata.config.currentTab = 0
102
99
  }
@@ -108,7 +108,7 @@
108
108
  type=" table-row-divider, list-item, divider, list-item, divider, image,image"
109
109
  v-show="settingSelector.includes(1) && block.metadata.config.expand"
110
110
  ></v-skeleton-loader>
111
- <Dialog
111
+ <DialogBox
112
112
  v-model="dialog"
113
113
  color="primary"
114
114
  max-width="600px"
@@ -129,7 +129,7 @@
129
129
  v-on="on"
130
130
  />
131
131
  </template>
132
- </Dialog>
132
+ </DialogBox>
133
133
  </div>
134
134
  </template>
135
135
 
@@ -141,7 +141,7 @@ export default {
141
141
  spokenTextChanged: false,
142
142
  options: {
143
143
  smartFence: true,
144
- smartMode: true,
144
+ smartMode: false,
145
145
  virtualKeyboardMode: 'manual',
146
146
  keypressSound: 'none',
147
147
  plonkSound: 'none',
@@ -64,6 +64,8 @@ export default {
64
64
  visual: false,
65
65
  forced_root_block: this.root_block,
66
66
  menubar: this.menubar,
67
+ browser_spellcheck: true,
68
+ contextmenu: false,
67
69
  menu: {
68
70
  insert: {
69
71
  title: 'Insert',
@@ -82,7 +84,7 @@ export default {
82
84
  'advlist autolink lists link charmap',
83
85
  'searchreplace visualblocks code fullscreen',
84
86
  'anchor insertdatetime ',
85
- 'paste code wordcount table WindwardToolKit ',
87
+ 'paste code wordcount table WindwardToolKit',
86
88
  ],
87
89
  toolbar: this.toolbar,
88
90
  table_advtab: false,
@@ -1,11 +1,11 @@
1
1
 
2
2
  table {
3
3
  max-width: 100%;
4
- border: 1px solid black;
4
+ border: 1px solid var(--v-primary-base) !important;
5
5
  border-spacing: 0;
6
6
 
7
7
  th, td {
8
- border: 1px solid black;
8
+ border: 1px solid var(--v-primary-base) !important;
9
9
  padding: 3px;
10
10
  }
11
11
 
@@ -11,7 +11,7 @@
11
11
  >
12
12
  <template #top>
13
13
  <v-toolbar flat>
14
- <Dialog
14
+ <DialogBox
15
15
  v-model="dialog"
16
16
  color="primary"
17
17
  max-width="600px"
@@ -60,7 +60,7 @@
60
60
  v-on="on"
61
61
  />
62
62
  </template>
63
- </Dialog>
63
+ </DialogBox>
64
64
  <v-spacer></v-spacer>
65
65
  <v-text-field
66
66
  v-model="search"
@@ -77,7 +77,20 @@
77
77
  <tr>
78
78
  <td>{{ item.term }}</td>
79
79
  <td>{{ item.definition }}</td>
80
- <td>{{ item.alternate_forms }}</td>
80
+ <td>
81
+ <v-row>
82
+ <div
83
+ v-for="(
84
+ item, index
85
+ ) in item.alternate_forms"
86
+ :key="index"
87
+ >
88
+ <v-chip>
89
+ {{ item }}
90
+ </v-chip>
91
+ </div>
92
+ </v-row>
93
+ </td>
81
94
  <td>{{ item.related_term }}</td>
82
95
 
83
96
  <td>
@@ -6,6 +6,7 @@
6
6
  :label="$t('windward.core.pages.glossary.term')"
7
7
  required
8
8
  :rules="validation.termRules"
9
+ :disabled="editMode"
9
10
  ></v-text-field>
10
11
  <br />
11
12
  <v-textarea
@@ -18,14 +18,14 @@
18
18
  </template>
19
19
  <div>
20
20
  <div v-if="this.$slots['definition']">
21
- <h4 class="text-capitalize">
21
+ <h6 class="text-capitalize">
22
22
  {{
23
23
  $t(
24
24
  'windward.core.components.utils.tiny_mce_wrapper.definition'
25
25
  )
26
26
  }}
27
27
  :
28
- </h4>
28
+ </h6>
29
29
  <p>
30
30
  <slot name="definition"></slot>
31
31
  </p>
@@ -184,7 +184,7 @@ export default class MathHelper {
184
184
  MathHelper.convertContentLatexToHtml(
185
185
  MathHelper.convertContentMathMLtoLatex(content)
186
186
  )
187
- )
187
+ ).replace(/contenteditable="true"/g, '');
188
188
  }
189
189
 
190
190
  /**
@@ -22,10 +22,10 @@ export default {
22
22
  sent_feedback:
23
23
  'Thank you for submitting feedback. Your input is very important and valuable to us. If you suggested improvements in your comments, we will consider those suggestions seriously. Course quality and usability are our highest priorities.',
24
24
  scale: {
25
- strongly_agree: 'Stronly Agree',
25
+ strongly_agree: 'Strongly Agree',
26
26
  agree: 'Agree',
27
27
  neutral: 'Neutral',
28
28
  disagree: 'Disagree',
29
- strongly_disagree: 'Strong Disagree',
29
+ strongly_disagree: 'Strongly Disagree',
30
30
  },
31
31
  }
@@ -0,0 +1,3 @@
1
+ export default {
2
+ dashed: 'Make line dashed',
3
+ }
@@ -1,4 +1,12 @@
1
1
  export default {
2
2
  hide_background: 'Hide Background',
3
3
  modal: 'Click to open in modal',
4
+ decorative: 'Decorative Image',
5
+ toggle_description:
6
+ 'To meet accessibility standards, alt text is required for all images except for purely decorative images. This setting will add the proper alt text and screen reader text for learners.',
7
+ alt_description:
8
+ 'Alternative text is descriptive text that conveys the meaning and context of a visual item in a digital setting, intended for users who are visually impaired or otherwise unable to visually identify an image. This should be short and clear.',
9
+ screenreader: 'Screen Reader Text',
10
+ screenreader_description:
11
+ 'Screen reader text can be added to give a user using assistive technology more information about the elements on the page',
4
12
  }
@@ -10,6 +10,7 @@ import accordion from './accordion'
10
10
  import tab from './tab'
11
11
  import email from './email'
12
12
  import block_quote from './block_quote'
13
+ import horizontal_rule from './horizontal_rule'
13
14
 
14
15
  export default {
15
16
  accordion,
@@ -24,4 +25,5 @@ export default {
24
25
  scenario_choice: scenarioChoice,
25
26
  email,
26
27
  block_quote,
28
+ horizontal_rule,
27
29
  }
@@ -16,6 +16,7 @@ export default {
16
16
  feedback: 'Feedback',
17
17
  email: 'Email',
18
18
  block_quote: 'Block Quote',
19
+ horizontal_rule: 'Divider',
19
20
  },
20
21
  grouping: {
21
22
  basic: 'Basic Components',
@@ -14,6 +14,7 @@ export default {
14
14
  table: 'Table Settings',
15
15
  math: 'Math Settings',
16
16
  feedback: 'Feedback Settings',
17
+ horizontal_line: 'Divider Settings',
17
18
  email: 'Ajustes del correo electrónico',
18
19
  click_to_enter: 'Click here to enter text',
19
20
  block_quote: 'Block Quote Settings',
@@ -0,0 +1,3 @@
1
+ export default {
2
+ dashed: 'Hacer línea discontinua',
3
+ }
@@ -1,4 +1,12 @@
1
1
  export default {
2
2
  hide_background: 'Ocultar fondo',
3
3
  modal: 'Haga clic para abrir en modal',
4
+ decorative: 'Imagen decorativa',
5
+ toggle_description:
6
+ 'Para cumplir con los estándares de accesibilidad, se requiere texto alternativo para todas las imágenes, excepto para las imágenes puramente decorativas. Esta configuración agregará el texto alternativo y el texto del lector de pantalla adecuados para los estudiantes.',
7
+ alt_description:
8
+ 'El texto alternativo es un texto descriptivo que transmite el significado y el contexto de un elemento visual en un entorno digital, destinado a usuarios con discapacidad visual o que no pueden identificar visualmente una imagen. Esto debe ser breve y claro.',
9
+ screenreader: 'Texto del lector de pantalla',
10
+ screenreader_description:
11
+ 'Se puede agregar texto al lector de pantalla para brindarle al usuario que utiliza tecnología de asistencia más información sobre los elementos de la página',
4
12
  }
@@ -10,6 +10,7 @@ import accordion from './accordion'
10
10
  import tab from './tab'
11
11
  import block_quote from './block_quote'
12
12
  import email from './email'
13
+ import horizontal_rule from './horizontal_rule'
13
14
 
14
15
  export default {
15
16
  accordion,
@@ -24,4 +25,5 @@ export default {
24
25
  scenario_choice: scenarioChoice,
25
26
  block_quote,
26
27
  email,
28
+ horizontal_rule,
27
29
  }
@@ -16,6 +16,7 @@ export default {
16
16
  feedback: 'Comentarios',
17
17
  email: 'Correo Electrónico',
18
18
  block_quote: 'Cotización en bloque',
19
+ horizontal_rule: 'Divisor',
19
20
  },
20
21
  grouping: {
21
22
  basic: 'Componentes básicos',
@@ -16,6 +16,7 @@ export default {
16
16
  table: 'Configuración de la tabla',
17
17
  math: 'Configuración matemática',
18
18
  feedback: 'Configuración de comentarios',
19
+ horizontal_line: 'Configuración del divisor',
19
20
  email: 'Ajustes del correo electrónico',
20
21
  click_to_enter: 'Haga clic para ingresar texto',
21
22
  block_quote: 'Configuración de cotización en bloque',
@@ -0,0 +1,3 @@
1
+ export default {
2
+ dashed: 'Göra streckad linje',
3
+ }
@@ -1,4 +1,12 @@
1
1
  export default {
2
2
  hide_background: 'Dölj bakgrund',
3
3
  modal: 'Klicka för att öppna i modal',
4
+ decorative: 'Dekorativ bild',
5
+ toggle_description:
6
+ 'För att uppfylla tillgänglighetsstandarder krävs alt-text för alla bilder utom för rent dekorativa bilder. Den här inställningen kommer att lägga till rätt alt-text och skärmläsartext för eleverna.',
7
+ alt_description:
8
+ 'Alternativ text är beskrivande text som förmedlar innebörden och sammanhanget av ett visuellt föremål i en digital miljö, avsedd för användare som är synskadade eller på annat sätt oförmögna att visuellt identifiera en bild. Detta ska vara kort och tydligt.',
9
+ screenreader: 'Skärmläsartext',
10
+ screenreader_description:
11
+ 'Skärmläsartext kan läggas till för att ge en användare som använder hjälpmedel mer information om elementen på sidan',
4
12
  }
@@ -10,6 +10,7 @@ import accordion from './accordion'
10
10
  import tab from './tab'
11
11
  import block_quote from './block_quote'
12
12
  import email from './email'
13
+ import horizontal_rule from './horizontal_rule'
13
14
 
14
15
  export default {
15
16
  accordion,
@@ -24,4 +25,5 @@ export default {
24
25
  scenario_choice: scenarioChoice,
25
26
  block_quote,
26
27
  email,
28
+ horizontal_rule,
27
29
  }
@@ -16,6 +16,7 @@ export default {
16
16
  feedback: 'Feedback',
17
17
  email: 'E-Post',
18
18
  block_quote: 'Block citat',
19
+ horizontal_rule: 'Delare',
19
20
  },
20
21
  grouping: {
21
22
  basic: 'Basic Components',
@@ -14,6 +14,7 @@ export default {
14
14
  table: 'Tabellinställningar',
15
15
  math: 'Matematiska inställningar',
16
16
  feedback: 'Feedback-inställningar',
17
+ horizontal_line: 'Inställningar för avdelare',
17
18
  email: 'E-postinställningar',
18
19
  click_to_enter: 'Klicka för att skriva in text',
19
20
  block_quote: 'Blockera offertinställningar',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windward/core",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "Windward UI Core Plugins",
5
5
  "main": "plugin.js",
6
6
  "scripts": {
@@ -12,7 +12,12 @@
12
12
  "type": "git",
13
13
  "url": "git+ssh://git@bitbucket.org/mindedge/windward-ui-plugin-core.git"
14
14
  },
15
- "author": "Jacob Rogaishio",
15
+ "author": "Jacob Rogaishio <jrogaishio@mindedge.com>",
16
+ "contributors": [
17
+ "Jacob Rogaishio <jrogaishio@mindedge.com>",
18
+ "Ted Celestin <tcelestin@mindedge.com>",
19
+ "Christina Passafaro <cpassafaro@mindedge.com>"
20
+ ],
16
21
  "license": "MIT",
17
22
  "homepage": "https://bitbucket.org/mindedge/windward-ui-plugin-core#readme",
18
23
  "dependencies": {
package/plugin.js CHANGED
@@ -11,6 +11,7 @@ import ClickableIcons from './components/Content/Blocks/ClickableIcons'
11
11
  import ScenarioChoice from './components/Content/Blocks/ScenarioChoice'
12
12
  import Email from './components/Content/Blocks/Email'
13
13
  import BlockQuote from './components/Content/Blocks/BlockQuote.vue'
14
+ import HorizontalRule from './components/Content/Blocks/HorizontalRule.vue'
14
15
 
15
16
  import UserUploadNav from './components/Navigation/Items/UserUploadNav.vue'
16
17
 
@@ -37,6 +38,7 @@ import TabSettings from './components/Settings/TabSettings.vue'
37
38
  import FeedbackSettings from './components/Settings/FeedbackSettings.vue'
38
39
  import EmailSettings from './components/Settings/EmailSettings.vue'
39
40
  import BlockQuoteSettigns from './components/Settings/BlockQuoteSettings.vue'
41
+ import HorizontalRuleSettings from './components/Settings/HorizontalRuleSettings.vue'
40
42
 
41
43
  import UserUploadPage from './pages/userUpload.vue'
42
44
  import GlossaryToolTip from './components/utils/glossary/GlossaryToolTip.vue'
@@ -151,8 +153,7 @@ export default {
151
153
  metadata: {
152
154
  icon: 'mdi-video',
153
155
  name: 'windward.core.shared.content_blocks.title.video',
154
- grouping:
155
- 'windward.core.shared.content_blocks.grouping.multimedia',
156
+ grouping: 'components.content.blocks.group.multimedia',
156
157
  },
157
158
  },
158
159
  {
@@ -161,8 +162,7 @@ export default {
161
162
  metadata: {
162
163
  icon: 'mdi-tab',
163
164
  name: 'windward.core.shared.content_blocks.title.tab',
164
- grouping:
165
- 'windward.core.shared.content_blocks.grouping.basic',
165
+ grouping: 'components.content.blocks.group.basic',
166
166
  },
167
167
  },
168
168
  {
@@ -171,28 +171,25 @@ export default {
171
171
  metadata: {
172
172
  icon: 'mdi-view-list',
173
173
  name: 'windward.core.shared.content_blocks.title.accordion',
174
- grouping:
175
- 'windward.core.shared.content_blocks.grouping.basic',
174
+ grouping: 'components.content.blocks.group.basic',
176
175
  },
177
176
  },
178
177
  {
179
178
  tag: 'core-open-response',
180
179
  template: OpenResponse,
181
180
  metadata: {
182
- icon: 'mdi-typewriter',
181
+ icon: 'mdi-text-long',
183
182
  name: 'windward.core.shared.content_blocks.title.open_response',
184
- grouping:
185
- 'windward.core.shared.content_blocks.grouping.basic',
183
+ grouping: 'components.content.blocks.group.basic',
186
184
  },
187
185
  },
188
186
  {
189
187
  tag: 'core-open-response-collate',
190
188
  template: OpenResponseCollate,
191
189
  metadata: {
192
- icon: 'mdi-typewriter',
190
+ icon: 'mdi-text-long',
193
191
  name: 'windward.core.shared.content_blocks.title.open_response_collate',
194
- grouping:
195
- 'windward.core.shared.content_blocks.grouping.basic',
192
+ grouping: 'components.content.blocks.group.basic',
196
193
  },
197
194
  },
198
195
  {
@@ -201,8 +198,7 @@ export default {
201
198
  metadata: {
202
199
  icon: 'mdi-image',
203
200
  name: 'windward.core.shared.content_blocks.title.image',
204
- grouping:
205
- 'windward.core.shared.content_blocks.grouping.multimedia',
201
+ grouping: 'components.content.blocks.group.multimedia',
206
202
  },
207
203
  },
208
204
  {
@@ -211,8 +207,7 @@ export default {
211
207
  metadata: {
212
208
  icon: 'mdi-cloud-upload',
213
209
  name: 'windward.core.shared.content_blocks.title.user_upload',
214
- grouping:
215
- 'windward.core.shared.content_blocks.grouping.multimedia',
210
+ grouping: 'components.content.blocks.group.multimedia',
216
211
  },
217
212
  },
218
213
  {
@@ -221,8 +216,7 @@ export default {
221
216
  metadata: {
222
217
  icon: 'mdi-format-list-checks',
223
218
  name: 'windward.core.shared.content_blocks.title.clickable_icons',
224
- grouping:
225
- 'windward.core.shared.content_blocks.grouping.basic',
219
+ grouping: 'components.content.blocks.group.basic',
226
220
  },
227
221
  },
228
222
  {
@@ -231,8 +225,7 @@ export default {
231
225
  metadata: {
232
226
  icon: 'mdi-ab-testing',
233
227
  name: 'windward.core.shared.content_blocks.title.scenario_choice',
234
- grouping:
235
- 'windward.core.shared.content_blocks.grouping.basic',
228
+ grouping: 'components.content.blocks.group.basic',
236
229
  },
237
230
  },
238
231
  {
@@ -241,8 +234,7 @@ export default {
241
234
  metadata: {
242
235
  icon: 'mdi-message',
243
236
  name: 'windward.core.shared.content_blocks.title.feedback',
244
- grouping:
245
- 'windward.core.shared.content_blocks.grouping.basic',
237
+ grouping: 'components.content.blocks.group.basic',
246
238
  },
247
239
  },
248
240
  {
@@ -251,8 +243,7 @@ export default {
251
243
  metadata: {
252
244
  icon: 'mdi-email',
253
245
  name: 'windward.core.shared.content_blocks.title.email',
254
- grouping:
255
- 'windward.core.shared.content_blocks.grouping.basic',
246
+ grouping: 'components.content.blocks.group.basic',
256
247
  },
257
248
  },
258
249
  {
@@ -261,8 +252,16 @@ export default {
261
252
  metadata: {
262
253
  icon: 'mdi-format-quote-close',
263
254
  name: 'windward.core.shared.content_blocks.title.block_quote',
264
- grouping:
265
- 'windward.core.shared.content_blocks.grouping.basic',
255
+ grouping: 'components.content.blocks.group.basic',
256
+ },
257
+ },
258
+ {
259
+ tag: 'core-horizontal-rule',
260
+ template: HorizontalRule,
261
+ metadata: {
262
+ icon: 'mdi-minus',
263
+ name: 'windward.core.shared.content_blocks.title.horizontal_rule',
264
+ grouping: 'components.content.blocks.group.basic',
266
265
  },
267
266
  },
268
267
  ],
@@ -393,6 +392,15 @@ export default {
393
392
  name: 'windward.core.shared.settings.title.block_quote',
394
393
  },
395
394
  },
395
+ {
396
+ tag: 'core-horizontal-rule-settings',
397
+ template: HorizontalRuleSettings,
398
+ context: ['block.core-horizontal-rule'],
399
+ metadata: {
400
+ icon: 'mdi-cog',
401
+ name: 'windward.core.shared.settings.title.horizontal_line',
402
+ },
403
+ },
396
404
  ],
397
405
  },
398
406
  }
@@ -23,7 +23,7 @@ jest.mock(
23
23
  )
24
24
 
25
25
  jest.mock(
26
- '~/components/Dialog.vue',
26
+ '~/components/DialogBox.vue',
27
27
  () => {
28
28
  return {
29
29
  props: {},
@@ -35,7 +35,7 @@ jest.mock(
35
35
  )
36
36
 
37
37
  jest.mock(
38
- '~/components/Dialog',
38
+ '~/components/DialogBox.vue',
39
39
  () => {
40
40
  return {
41
41
  props: {},
@@ -1,3 +0,0 @@
1
- {
2
- "git-blame.gitWebUrl": ""
3
- }