@concretecms/bedrock 1.0.0 → 1.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 (48) hide show
  1. package/assets/account/js/frontend/components/Avatar/Cropper.js +12 -4
  2. package/assets/calendar/js/backend/duration.js +1 -1
  3. package/assets/ckeditor/js/concrete/link.js +5 -4
  4. package/assets/ckeditor/js/concrete/styles.js +2 -2
  5. package/assets/cms/components/BoardInstanceRule.vue +16 -3
  6. package/assets/cms/components/BoardInstanceRuleList.vue +24 -7
  7. package/assets/cms/components/CompletedProcessList.vue +28 -9
  8. package/assets/cms/components/Icon.vue +16 -1
  9. package/assets/cms/components/Pagination.vue +45 -8
  10. package/assets/cms/components/customizer/ColorPageCustomizerWidget.vue +7 -0
  11. package/assets/cms/components/customizer/FontWeightPageCustomizerWidget.vue +7 -1
  12. package/assets/cms/components/customizer/ImagePageCustomizerWidget.vue +13 -3
  13. package/assets/cms/components/customizer/TextTransformPageCustomizerWidget.vue +7 -1
  14. package/assets/cms/components/customizer/ThemeCustomizer.vue +36 -15
  15. package/assets/cms/components/customizer/ThemeCustomizerPreview.vue +11 -1
  16. package/assets/cms/components/customizer/TypePageCustomizerWidget.vue +21 -6
  17. package/assets/cms/components/express/Selector.vue +21 -6
  18. package/assets/cms/components/file-manager/Chooser/ExternalFileProvider.vue +13 -2
  19. package/assets/cms/components/file-manager/Chooser/FileSets.vue +13 -2
  20. package/assets/cms/components/file-manager/Chooser/Files.vue +19 -5
  21. package/assets/cms/components/file-manager/Chooser/SavedSearch.vue +13 -2
  22. package/assets/cms/components/file-manager/Chooser/Search.vue +13 -2
  23. package/assets/cms/components/file-manager/Chooser.vue +64 -8
  24. package/assets/cms/components/form/ConcreteFileDirectoryInput.vue +17 -4
  25. package/assets/cms/components/gallery/GalleryEdit.vue +20 -5
  26. package/assets/cms/components/gallery/ImageDetail.vue +22 -5
  27. package/assets/cms/components/groups/Chooser.vue +17 -4
  28. package/assets/cms/components/page/Chooser/ChooserSearch.vue +15 -2
  29. package/assets/cms/components/page/PageList.vue +15 -3
  30. package/assets/cms/components/user/Chooser/Search.vue +15 -2
  31. package/assets/cms/components/user/Chooser/Users.vue +19 -5
  32. package/assets/cms/components/user/Chooser.vue +15 -2
  33. package/assets/cms/js/edit-mode/style-customizer/color.js +10 -3
  34. package/assets/cms/js/edit-mode/style-customizer/custom.js +1 -1
  35. package/assets/cms/js/edit-mode/style-customizer/inline-toolbar.js +27 -27
  36. package/assets/cms/js/edit-mode/style-customizer/typography.js +8 -1
  37. package/assets/cms/scss/_inline-toolbar.scss +9 -180
  38. package/assets/cms/scss/panels/_shared.scss +1 -1
  39. package/assets/desktop/js/frontend/draft-list.js +0 -17
  40. package/package.json +2 -2
  41. package/.idea/bedrock.iml +0 -8
  42. package/.idea/codeStyles/Project.xml +0 -15
  43. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  44. package/.idea/dataSources.local.xml +0 -4
  45. package/.idea/misc.xml +0 -6
  46. package/.idea/modules.xml +0 -8
  47. package/.idea/vcs.xml +0 -6
  48. package/.idea/workspace.xml +0 -313
@@ -11,7 +11,15 @@ export default {
11
11
  width: Number,
12
12
  height: Number,
13
13
  uploadurl: String,
14
- src: String
14
+ src: String,
15
+ cancelConfirmText: {
16
+ type: String,
17
+ default: 'Are you sure you want to quit?'
18
+ },
19
+ canceledText: {
20
+ type: String,
21
+ default: 'Upload canceled.'
22
+ }
15
23
  },
16
24
 
17
25
  // Our internal state
@@ -92,7 +100,7 @@ export default {
92
100
  })
93
101
 
94
102
  this.on('error', function (event, data) {
95
- component.setError(data.message)
103
+ component.setError(typeof data === 'string' ? data : data.message)
96
104
  component.currentimage = component.src
97
105
  })
98
106
 
@@ -177,8 +185,8 @@ export default {
177
185
  * Handle x mark click
178
186
  */
179
187
  handleCancel() {
180
- if (window.confirm('Are you sure you want to quit?')) {
181
- this.done.call(this.dropzone, 'Cancelled upload.')
188
+ if (window.confirm(this.cancelConfirmText)) {
189
+ this.done.call(this.dropzone, this.canceledText)
182
190
  this.img = null
183
191
  this.saving = false
184
192
  this.dropzone.destroy()
@@ -322,7 +322,7 @@
322
322
  var endDate = my.getSelectedEndDate()
323
323
 
324
324
  if (!endDate) {
325
- return;
325
+ return
326
326
  }
327
327
 
328
328
  var difference = ((endDate.getTime() / 1000) - (startDate.getTime() / 1000))
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable no-new, no-unused-vars, camelcase, no-useless-call, eqeqeq */
2
+ /* global ccmi18n_editor */
2
3
  (function() {
3
4
  CKEDITOR.plugins.add('concretelink', {
4
5
  requires: 'link',
@@ -39,8 +40,8 @@
39
40
  infoTab.add({
40
41
  type: 'button',
41
42
  id: 'sitemapBrowse',
42
- label: 'Sitemap',
43
- title: 'Sitemap',
43
+ label: ccmi18n_editor.sitemap,
44
+ title: ccmi18n_editor.sitemap,
44
45
  onClick: function() {
45
46
  jQuery.fn.dialog.open({
46
47
  width: '90%',
@@ -82,13 +83,13 @@
82
83
  id: 'lightboxFeatures',
83
84
  children: [{
84
85
  type: 'fieldset',
85
- label: 'Lightbox Features',
86
+ label: ccmi18n_editor.lightboxFeatures,
86
87
  children: [{
87
88
  type: 'hbox',
88
89
  children: [{
89
90
  type: 'checkbox',
90
91
  id: 'imageLightbox',
91
- label: 'Linking to an image',
92
+ label: ccmi18n_editor.imageLink,
92
93
  setup: function(data) {
93
94
  var link = getSelectedLink()
94
95
  if (link !== null && typeof data.target !== 'undefined') {
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable no-new, no-unused-vars, camelcase, new-cap, eqeqeq */
2
-
2
+ /* global ccmi18n_editor */
3
3
  (function() {
4
4
  CKEDITOR.plugins.add('concretestyles', {
5
5
 
@@ -102,7 +102,7 @@
102
102
  var buttons = {
103
103
  name: 'snippets',
104
104
  icon: 'snippet.png',
105
- title: 'Snippets',
105
+ title: ccmi18n_editor.snippets,
106
106
  items: []
107
107
  }
108
108
  if (editor.config.snippets) {
@@ -5,7 +5,7 @@
5
5
  {{startDate}}
6
6
  </span>
7
7
  <span v-else class="text-muted">
8
- No Start Date
8
+ {{ i18n.noStartDate }}
9
9
  </span>
10
10
  <span v-if="hasStartDate && hasEndDate">
11
11
 
@@ -14,7 +14,7 @@
14
14
  </td>
15
15
  <td>{{rule.slot}}</td>
16
16
  <td>
17
- <div>{{rule.name}} (<a data-dialog="preview" href="javascript:void(0)" @click="showPreview">preview</a>)</div>
17
+ <div>{{rule.name}} (<a data-dialog="preview" href="javascript:void(0)" @click="showPreview">{{ i18n.preview }}</a>)</div>
18
18
  <div class="fw-light font-italic">{{rule.actionDescription}}</div>
19
19
  </td>
20
20
  <td class="align-middle">
@@ -48,6 +48,10 @@ export default {
48
48
  }
49
49
  },
50
50
  data: () => ({
51
+ i18n: {
52
+ noStartDate: 'No Start Date',
53
+ preview: 'Preview'
54
+ },
51
55
  previewLoaded: false
52
56
  }),
53
57
  methods: {
@@ -61,7 +65,7 @@ export default {
61
65
  $.fn.dialog.open({
62
66
  width: '90%',
63
67
  height: '70%',
64
- title: 'Preview',
68
+ title: this.i18n.preview,
65
69
  element: '#preview-container-' + my.rule.id
66
70
  })
67
71
  }
@@ -88,6 +92,15 @@ export default {
88
92
  return momentDate.format('MMMM D, YYYY h:mm a')
89
93
  }
90
94
  }
95
+ },
96
+ mounted() {
97
+ if (window.ccmi18n_boards) {
98
+ for (const key in this.i18n) {
99
+ if (window.ccmi18n_boards[key]) {
100
+ this.i18n[key] = window.ccmi18n_boards[key]
101
+ }
102
+ }
103
+ }
91
104
  }
92
105
  }
93
106
  </script>
@@ -3,9 +3,9 @@
3
3
  <table class="table">
4
4
  <thead>
5
5
  <tr>
6
- <th style="width: 30%;">Date & Time</th>
7
- <th style="width: 10%;">Slot</th>
8
- <th style="width: 60%;">Name</th>
6
+ <th style="width: 30%;">{{ i18n.dateAndTime }}</th>
7
+ <th style="width: 10%;">{{ i18n.slot }}</th>
8
+ <th style="width: 60%;">{{ i18n.name }}</th>
9
9
  <th></th>
10
10
  </tr>
11
11
  </thead>
@@ -17,14 +17,14 @@
17
17
  </table>
18
18
 
19
19
  <div v-if="draftRules.length" class="mt-4">
20
- <h5>Unpublished Rules</h5>
20
+ <h5>{{ i18n.unpublishedRules }}</h5>
21
21
 
22
22
  <table class="table">
23
23
  <thead>
24
24
  <tr>
25
- <th style="width: 30%;">Date & Time</th>
26
- <th style="width: 10%;">Slot</th>
27
- <th style="width: 60%;">Name</th>
25
+ <th style="width: 30%;">{{ i18n.dateAndTime }}</th>
26
+ <th style="width: 10%;">{{ i18n.slot }}</th>
27
+ <th style="width: 60%;">{{ i18n.name }}</th>
28
28
  <th></th>
29
29
  </tr>
30
30
  </thead>
@@ -49,6 +49,14 @@ export default {
49
49
  props: {
50
50
  rules: Array
51
51
  },
52
+ data: () => ({
53
+ i18n: {
54
+ dateAndTime: 'Date & Time',
55
+ slot: 'Slot',
56
+ name: 'Name',
57
+ unpublishedRules: 'Unpublished Rules'
58
+ }
59
+ }),
52
60
  computed: {
53
61
  publishedRules: function() {
54
62
  var publishedRules = []
@@ -91,6 +99,15 @@ export default {
91
99
  })
92
100
  }
93
101
  }
102
+ },
103
+ mounted() {
104
+ if (window.ccmi18n_boards) {
105
+ for (const key in this.i18n) {
106
+ if (window.ccmi18n_boards[key]) {
107
+ this.i18n[key] = window.ccmi18n_boards[key]
108
+ }
109
+ }
110
+ }
94
111
  }
95
112
  }
96
113
  </script>
@@ -3,13 +3,13 @@
3
3
  <div class="p-2">
4
4
  <div class="row">
5
5
  <div class="col-md-4">
6
- <h5>Name</h5>
6
+ <h5>{{ i18n.name }}</h5>
7
7
  </div>
8
8
  <div class="col-md-3">
9
- <h5>Date Started</h5>
9
+ <h5>{{ i18n.dateStarted }}</h5>
10
10
  </div>
11
11
  <div class="col-md-5">
12
- <h5>Date Completed</h5>
12
+ <h5>{{ i18n.dateCompleted }}</h5>
13
13
  </div>
14
14
  </div>
15
15
  </div>
@@ -48,7 +48,7 @@
48
48
  {{detail}}
49
49
  </div>
50
50
  </div>
51
- <span v-else class="text-muted">Loading...</span>
51
+ <span v-else class="text-muted">{{ i18n.loading }}</span>
52
52
  </div>
53
53
  </div>
54
54
  </div>
@@ -59,15 +59,15 @@
59
59
  <div class="modal-content">
60
60
  <form method="post" @submit.prevent="deleteProcessSubmit(process.id)">
61
61
  <div class="modal-header">
62
- <h5 class="modal-title">Delete Process</h5>
63
- <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
62
+ <h5 class="modal-title">{{ i18n.deleteProcess }}</h5>
63
+ <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" :aria-label="i18n.close"></button>
64
64
  </div>
65
65
  <div class="modal-body">
66
- Delete this process log entry? The record of the process along with any logs will be removed.
66
+ {{ i18n.confirmDeletion }}
67
67
  </div>
68
68
  <div class="modal-footer">
69
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
70
- <button type="submit" class="btn btn-danger">Delete</button>
69
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ i18n.close }}</button>
70
+ <button type="submit" class="btn btn-danger">{{ i18n.delete }}</button>
71
71
  </div>
72
72
  </form>
73
73
  </div>
@@ -102,6 +102,16 @@ export default {
102
102
  }
103
103
  },
104
104
  data: () => ({
105
+ i18n: {
106
+ name: 'Name',
107
+ dateStarted: 'Date Started',
108
+ dateCompleted: 'Date Completed',
109
+ loading: 'Loading...',
110
+ deleteProcess: 'Delete Process',
111
+ confirmDeletion: 'Delete this process log entry? The record of the process along with any logs will be removed.',
112
+ close: 'Close',
113
+ delete: 'Delete'
114
+ },
105
115
  openProcesses: []
106
116
  }),
107
117
  methods: {
@@ -150,6 +160,15 @@ export default {
150
160
  }
151
161
  })
152
162
  }
163
+ },
164
+ mounted() {
165
+ if (window.ccmi18n_processes) {
166
+ for (const key in this.i18n) {
167
+ if (window.ccmi18n_processes[key]) {
168
+ this.i18n[key] = window.ccmi18n_processes[key]
169
+ }
170
+ }
171
+ }
153
172
  }
154
173
  }
155
174
  </script>
@@ -10,7 +10,7 @@
10
10
  <svg v-else-if='$options.methods.isSvg(props.type)' viewport='0 0 20 20' width='20px' height='20px'>
11
11
  <use :xlink:href='`${props.spritePath}#icon-${props.icon}`' :style='`fill: ${props.color}`'></use>
12
12
  </svg>
13
- <span v-else>Invalid icon type.</span>
13
+ <span v-else>{{ i18n.invalidIconType }}</span>
14
14
  </template>
15
15
 
16
16
  <script>
@@ -22,6 +22,11 @@ export { icons, types }
22
22
 
23
23
  // Export our component definition
24
24
  export default {
25
+ data: () => ({
26
+ i18n: {
27
+ invalidIconType: 'Invalid icon type.'
28
+ }
29
+ }),
25
30
  props: {
26
31
  spritePath: {
27
32
  type: String,
@@ -53,6 +58,16 @@ export default {
53
58
  */
54
59
  isFontAwesome: type => [types.fas, types.far, types.fab].indexOf(type) >= 0,
55
60
  isSvg: type => type === types.svg
61
+ },
62
+ mounted() {
63
+ if (window.ccmi18n) {
64
+ for (const key in this.i18n) {
65
+ if (window.ccmi18n[key]) {
66
+ this.i18n[key] = window.ccmi18n[key]
67
+ }
68
+ }
69
+ }
56
70
  }
71
+
57
72
  }
58
73
  </script>
@@ -3,14 +3,14 @@
3
3
  <nav :aria-label="ariaLabel">
4
4
  <ul class="pagination">
5
5
  <li :class="{'page-item': true, 'disabled': prevDisabled}">
6
- <a class="page-link" href="#" :aria-label="labelPrevPage" @click.prevent="onClick('prev', $event)">
7
- <span aria-hidden="true">{{prevText}}</span>
6
+ <a class="page-link" href="#" :aria-label="finalLabelPrevPage" @click.prevent="onClick('prev', $event)">
7
+ <span aria-hidden="true">{{finalPrevText}}</span>
8
8
  </a>
9
9
  </li>
10
10
  <li v-for="page in pageList" :key="page.number" :class="{'page-item': true, 'active': page.number === currentPage}"><a class="page-link" href="#" @click.prevent="onClick(page.number)">{{page.text || page.number}}</a></li>
11
11
  <li :class="{'page-item': true, 'disabled': nextDisabled}">
12
- <a class="page-link" href="#" :aria-label="labelNextPage" @click.prevent="onClick('next', $event)">
13
- <span aria-hidden="true">{{nextText}}</span>
12
+ <a class="page-link" href="#" :aria-label="finalLabelNextPage" @click.prevent="onClick('next', $event)">
13
+ <span aria-hidden="true">{{finalNextText}}</span>
14
14
  </a>
15
15
  </li>
16
16
  </ul>
@@ -55,11 +55,11 @@ export default {
55
55
  },
56
56
  nextText: {
57
57
  type: String,
58
- default: 'Next →'
58
+ required: false
59
59
  },
60
60
  labelNextPage: {
61
61
  type: String,
62
- default: 'Next'
62
+ required: false
63
63
  },
64
64
  prevCursor: {
65
65
  type: [Number, String, null],
@@ -70,11 +70,11 @@ export default {
70
70
  },
71
71
  labelPrevPage: {
72
72
  type: String,
73
- default: 'Previous'
73
+ required: false
74
74
  },
75
75
  prevText: {
76
76
  type: String,
77
- default: '← Previous'
77
+ required: false
78
78
  },
79
79
  perPage: {
80
80
  type: [Number, String],
@@ -102,6 +102,10 @@ export default {
102
102
  }
103
103
 
104
104
  return {
105
+ i18n: {
106
+ next: 'Next',
107
+ previous: 'Previous'
108
+ },
105
109
  targetNumberOfLinks: 7,
106
110
  currentPage,
107
111
  localNumberOfPages: 1
@@ -181,6 +185,30 @@ export default {
181
185
  }
182
186
 
183
187
  return pages
188
+ },
189
+ finalNextText () {
190
+ if (typeof this.nextText === 'string') {
191
+ return this.nextText
192
+ }
193
+ return `${this.i18n.next} →`
194
+ },
195
+ finalLabelNextPage () {
196
+ if (typeof this.labelNextPage === 'string') {
197
+ return this.labelNextPage
198
+ }
199
+ return this.i18n.next
200
+ },
201
+ finalPrevText () {
202
+ if (typeof this.prevText === 'string') {
203
+ return this.prevText
204
+ }
205
+ return `← ${this.i18n.previous}`
206
+ },
207
+ finalLabelPrevPage () {
208
+ if (typeof this.labelPrevPage === 'string') {
209
+ return this.labelPrevPage
210
+ }
211
+ return this.i18n.previous
184
212
  }
185
213
  },
186
214
  watch: {
@@ -228,6 +256,15 @@ export default {
228
256
  // Emit event triggered by user interaction
229
257
  this.$emit('change', this.currentPage)
230
258
  }
259
+ },
260
+ mounted() {
261
+ if (window.ccmi18n) {
262
+ for (const key in this.i18n) {
263
+ if (window.ccmi18n[key]) {
264
+ this.i18n[key] = window.ccmi18n[key]
265
+ }
266
+ }
267
+ }
231
268
  }
232
269
  }
233
270
  </script>
@@ -14,6 +14,7 @@ export default {
14
14
  },
15
15
  mounted() {
16
16
  var my = this
17
+ const i18n = window.ccmi18n_styleCustomizer || null
17
18
  $('#color-picker-' + this.styleValue.style.variable).spectrum({
18
19
  showAlpha: true,
19
20
  preferredFormat: 'rgb',
@@ -21,6 +22,12 @@ export default {
21
22
  color: this.color,
22
23
  showInitial: true,
23
24
  showInput: true,
25
+ cancelText: i18n && i18n.cancel ? i18n.cancel : 'Cancel',
26
+ chooseText: i18n && i18n.choose ? i18n.choose : 'Choose',
27
+ clearText: i18n && i18n.clearColorSelection ? i18n.clearColorSelection : 'Clear Color Selection',
28
+ noColorSelectedText: i18n && i18n.noColorSelected ? i18n.noColorSelected : 'No Color Selected',
29
+ togglePaletteMoreText: i18n && i18n.togglePaletteMore ? i18n.togglePaletteMore : 'More',
30
+ togglePaletteLessText: i18n && i18n.togglePaletteLess ? i18n.togglePaletteLess : 'Less',
24
31
  change: function (r) {
25
32
  var color = r.toRgb()
26
33
  my.$emit('update', {
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <select @change="componentUpdated" class="form-select form-select-sm" v-model="fontWeight"
3
3
  :style="{'font-weight': fontWeight}">
4
- <option v-for="fontWeightValue in fontWeightValues" :value="fontWeightValue">{{ fontWeightValue }}</option>
4
+ <option v-for="fontWeightValue in fontWeightValues" :value="fontWeightValue">{{ getWeightValueDisplayName(fontWeightValue) }}</option>
5
5
  </select>
6
6
  </template>
7
7
 
@@ -22,6 +22,12 @@ export default {
22
22
  fontWeight: this.fontWeight
23
23
  }
24
24
  })
25
+ },
26
+ getWeightValueDisplayName: function (id) {
27
+ if (window.ccmi18n_styleCustomizer && window.ccmi18n_styleCustomizer.fontWeights && window.ccmi18n_styleCustomizer.fontWeights[id]) {
28
+ return window.ccmi18n_styleCustomizer.fontWeights[id]
29
+ }
30
+ return id
25
31
  }
26
32
  },
27
33
  computed: {
@@ -4,10 +4,10 @@
4
4
  <i :class="{'fas': true, 'fa-image': true, 'text-black-50': !imageURL && !imageFileID, 'text-primary': imageFileID > 0}"></i>
5
5
  </template>
6
6
  <template v-slot:content>
7
- <concrete-file-input :file-id="imageFileID" @change="value => imageFileID = value" choose-text="Choose Image"
7
+ <concrete-file-input :file-id="imageFileID" @change="value => imageFileID = value" :choose-text="i18n.chooseImageText"
8
8
  input-name="imageFileID"></concrete-file-input>
9
9
  <div class="mt-2" v-if="imageURL">
10
- <small class="text-muted">Currently using {{ imageURL }}</small>
10
+ <small class="text-muted">{{ i18n.currentlyUsingText.replace(/%s/g, imageURL) }}</small>
11
11
  </div>
12
12
  </template>
13
13
  </flyout-menu>
@@ -29,6 +29,10 @@ export default {
29
29
  },
30
30
  data() {
31
31
  return {
32
+ i18n: {
33
+ chooseImageText: 'Choose Image',
34
+ currentlyUsingText: 'Currently using %s'
35
+ },
32
36
  imageURL: this.styleValue.value.imageURL, // this is the default one passed in,
33
37
  imageFileID: this.styleValue.value.imageFileID
34
38
  }
@@ -45,7 +49,13 @@ export default {
45
49
  }
46
50
  },
47
51
  mounted() {
48
-
52
+ if (window.ccmi18n_styleCustomizer) {
53
+ for (const key in this.i18n) {
54
+ if (window.ccmi18n_styleCustomizer[key]) {
55
+ this.i18n[key] = window.ccmi18n_styleCustomizer[key]
56
+ }
57
+ }
58
+ }
49
59
  },
50
60
  props: {
51
61
  styleValue: {
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <select @change="componentUpdated" class="form-select form-select-sm" v-model="textTransform"
3
3
  :style="{'text-transform': textTransform}">
4
- <option v-for="transformValue in transformValues" :value="transformValue">{{ transformValue }}</option>
4
+ <option v-for="transformValue in transformValues" :value="transformValue">{{ getTransformValueDisplayName(transformValue) }}</option>
5
5
  </select>
6
6
  </template>
7
7
 
@@ -22,6 +22,12 @@ export default {
22
22
  textTransform: this.textTransform
23
23
  }
24
24
  })
25
+ },
26
+ getTransformValueDisplayName: function (id) {
27
+ if (window.ccmi18n_styleCustomizer && window.ccmi18n_styleCustomizer.textTransforms && window.ccmi18n_styleCustomizer.textTransforms[id]) {
28
+ return window.ccmi18n_styleCustomizer.textTransforms[id]
29
+ }
30
+ return id
25
31
  }
26
32
  },
27
33
  computed: {