@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
@@ -12,7 +12,7 @@
12
12
  <button type="button"
13
13
  :class="{'btn': true, 'btn-outline-secondary': true, 'ccm-create-new-directory-button': true, 'disabled': disabled === true}"
14
14
  @click="toggleDirectoryInput" :disabled="disabled">
15
- Create New Folder
15
+ {{ i18n.createNewFolder }}
16
16
  </button>
17
17
  </div>
18
18
  <select v-else :id="directorySelectInputId" :name="inputName" class="ccm-directory-selector form-select" v-model="selectedDirectoryID" ref="directoryInput" :disabled="disabled">
@@ -24,16 +24,16 @@
24
24
  </div>
25
25
  <div v-if="showAddDirectoryButton" v-show="showAddDirectoryInput" class="ccm-new-directory-name-container">
26
26
  <div class="form-group">
27
- <label class="form-label" :for="directoryInputId">Name</label>
27
+ <label class="form-label" :for="directoryInputId">{{ i18n.name }}</label>
28
28
  <div class="input-group">
29
29
  <input type="text"
30
30
  :id="directoryInputId"
31
- placeholder="Please enter a name..." class="ccm-new-directory-name form-control"
31
+ :placeholder="i18n.specifyName" class="ccm-new-directory-name form-control"
32
32
  v-model="newDirectoryName" @keyup.enter.stop.prevent="createDirectory" :disabled="disabled">
33
33
  <button type="button"
34
34
  :class="{'btn': true, 'btn-outline-secondary': true, 'disabled': disabled === true}"
35
35
  @click.stop.prevent="createDirectory" :disabled="disabled">
36
- Add
36
+ {{ i18n.add }}
37
37
  </button>
38
38
  </div>
39
39
  </div>
@@ -46,6 +46,12 @@
46
46
  /* global CCM_DISPATCHER_FILENAME, CCM_SECURITY_TOKEN, ConcreteAjaxRequest, _ */
47
47
  export default {
48
48
  data: () => ({
49
+ i18n: {
50
+ createNewFolder: 'Create New Folder',
51
+ name: 'Name',
52
+ specifyName: 'Please enter a name...',
53
+ add: 'Add'
54
+ },
49
55
  showAddDirectoryInput: false,
50
56
  selectedDirectoryID: 0,
51
57
  directorySelectInputId: _.uniqueId('input-'),
@@ -109,6 +115,13 @@ export default {
109
115
  this.fetchDirectories()
110
116
  },
111
117
  mounted() {
118
+ if (window.ccmi18n_filemanager) {
119
+ for (const key in this.i18n) {
120
+ if (window.ccmi18n_filemanager[key]) {
121
+ this.i18n[key] = window.ccmi18n_filemanager[key]
122
+ }
123
+ }
124
+ }
112
125
  $(this.$refs.directoryInput).selectpicker()
113
126
 
114
127
  if (this.directoryId) {
@@ -6,14 +6,14 @@
6
6
  <a class="nav-link"
7
7
  :class="activeTab === 'image' ? 'active' : ''"
8
8
  @click="openTab('image')">
9
- Images
9
+ {{ i18n.images }}
10
10
  </a>
11
11
  </li>
12
12
  <li class="nav-item">
13
13
  <a class="nav-link"
14
14
  @click="openTab('settings')"
15
15
  :class="activeTab === 'settings' ? 'active' : ''">
16
- Settings
16
+ {{ i18n.settings }}
17
17
  </a>
18
18
  </li>
19
19
  </ul>
@@ -22,7 +22,7 @@
22
22
  <div v-show="activeTab === 'image'" id="galleryImages">
23
23
  <div class="text-end mt-4">
24
24
  <icon-button icon="plus" icon-type="fas" type="outline" class="btn btn-secondary" @click="addImage()">
25
- Add Images
25
+ {{ i18n.addImages }}
26
26
  </icon-button>
27
27
  </div>
28
28
  <div class="image-container mt-4"
@@ -51,13 +51,13 @@
51
51
  </div>
52
52
  <div v-show="activeTab === 'settings'" id="gallerySettings">
53
53
  <h3>
54
- Settings
54
+ {{ i18n.settings }}
55
55
  </h3>
56
56
 
57
57
  <div class="form-check">
58
58
  <input class="form-check-input" type="checkbox" id="includeDownloadLink" :value="1" :checked="$root.includeDownloadLink" name="includeDownloadLink">
59
59
  <label class="form-check-label" for="includeDownloadLink">
60
- Include link to download original
60
+ {{ i18n.includeOriginalDownloadLink }}
61
61
  </label>
62
62
  </div>
63
63
  </div>
@@ -143,6 +143,12 @@ export default {
143
143
  ...ImageDetail.components
144
144
  },
145
145
  data: () => ({
146
+ i18n: {
147
+ images: 'Images',
148
+ settings: 'Settings',
149
+ addImages: 'Add Images',
150
+ includeOriginalDownloadLink: 'Include link to download original'
151
+ },
146
152
  activeTab: 'image',
147
153
  activeImage: null
148
154
  }),
@@ -200,6 +206,15 @@ export default {
200
206
  })
201
207
  }
202
208
  },
209
+ mounted() {
210
+ if (window.ccmi18n_gallery) {
211
+ for (const key in this.i18n) {
212
+ if (window.ccmi18n_gallery[key]) {
213
+ this.i18n[key] = window.ccmi18n_gallery[key]
214
+ }
215
+ }
216
+ }
217
+ },
203
218
  props: {
204
219
  gallery: {
205
220
  type: Array,
@@ -10,13 +10,13 @@
10
10
  @click="$emit('delete')"
11
11
  type="outline"
12
12
  >
13
- Remove from Gallery
13
+ {{ i18n.removeFromGallery }}
14
14
  </IconButton>
15
- <!-- <button type="button" class="btn btn-secondary" @click="$emit('delete')">Remove from Gallery</button> -->
15
+ <!-- <button type="button" class="btn btn-secondary" @click="$emit('delete')">{{ i18n.removeFromGallery }}</button> -->
16
16
  </div>
17
17
  <div class="image-details">
18
18
  <section>
19
- <strong>Custom Attributes</strong>
19
+ <strong>{{ i18n.customAttributes }}</strong>
20
20
 
21
21
  <p class="image-title">{{this.$props.image.title}}</p>
22
22
  <p class="image-description">{{this.$props.image.description}}</p>
@@ -32,14 +32,14 @@
32
32
  type="outline"
33
33
  v-if="$props.image.detailUrl"
34
34
  >
35
- Edit Attributes
35
+ {{ i18n.editAttributes }}
36
36
  </IconButton>
37
37
  </div>
38
38
  </section>
39
39
 
40
40
  <section v-if="!this.$props.image.displayChoices.length">
41
41
  <div class="mb-2">
42
- <strong>Display Options</strong>
42
+ <strong>{{ i18n.displayOptions }}</strong>
43
43
  </div>
44
44
  <div v-for="(choice, index) in this.$props.image.displayChoices" :key="index">
45
45
  <input v-if="choice.type === 'text'"
@@ -123,6 +123,23 @@ export default {
123
123
  IconButton,
124
124
  ...IconButton.components
125
125
  },
126
+ data: () => ({
127
+ i18n: {
128
+ removeFromGallery: 'Remove from Gallery',
129
+ customAttributes: 'Custom Attributes',
130
+ editAttributes: 'Edit Attributes',
131
+ displayOptions: 'Display Options'
132
+ }
133
+ }),
134
+ mounted() {
135
+ if (window.ccmi18n_gallery) {
136
+ for (const key in this.i18n) {
137
+ if (window.ccmi18n_gallery[key]) {
138
+ this.i18n[key] = window.ccmi18n_gallery[key]
139
+ }
140
+ }
141
+ }
142
+ },
126
143
  props: {
127
144
  image: {
128
145
  type: Object,
@@ -3,7 +3,7 @@
3
3
  <div class="mb-3 ccm-header-search-form">
4
4
  <form method="get" @submit="performSearch">
5
5
  <div class="input-group">
6
- <input type="search" v-model="searchKeywords" placeholder="Search" class="form-control border-end-0" autocomplete="off">
6
+ <input type="search" v-model="searchKeywords" :placeholder="i18n.search" class="form-control border-end-0" autocomplete="off">
7
7
  <button type="submit" class="input-group-icon">
8
8
  <svg width="16" height="16">
9
9
  <use xlink:href="#icon-search"/>
@@ -18,8 +18,8 @@
18
18
  <table class="border-top ccm-search-results-table">
19
19
  <thead>
20
20
  <tr>
21
- <th>ID</th>
22
- <th class="w-100">Name</th>
21
+ <th>{{ i18n.id }}</th>
22
+ <th class="w-100">{{ i18n.name }}</th>
23
23
  </tr>
24
24
  </thead>
25
25
  <tbody>
@@ -31,7 +31,7 @@
31
31
  </table>
32
32
  </div>
33
33
  <div v-else>
34
- No results found.
34
+ {{ i18n.noResults }}
35
35
  </div>
36
36
  </div>
37
37
  <div v-show="searchSubmitted === 'searching'">
@@ -65,6 +65,12 @@ export default {
65
65
  },
66
66
  data() {
67
67
  return {
68
+ i18n: {
69
+ search: 'Search',
70
+ id: 'ID',
71
+ name: 'Name',
72
+ noResults: 'No results found.'
73
+ },
68
74
  searchKeywords: '',
69
75
  searchResults: [],
70
76
  searchSubmitted: false,
@@ -91,6 +97,13 @@ export default {
91
97
  }
92
98
  },
93
99
  mounted() {
100
+ if (window.ccmi18n_groups) {
101
+ for (const key in this.i18n) {
102
+ if (window.ccmi18n_groups[key]) {
103
+ this.i18n[key] = window.ccmi18n_groups[key]
104
+ }
105
+ }
106
+ }
94
107
  var my = this
95
108
  new ConcreteAjaxRequest({
96
109
  method: 'POST',
@@ -4,7 +4,7 @@
4
4
  <div class="col-md-4 ms-auto">
5
5
  <form @submit.prevent="search">
6
6
  <div class="ccm-header-search-form-input input-group">
7
- <input type="text" class="form-control border-end-0" placeholder="Search" autocomplete="false" v-model="searchText">
7
+ <input type="text" class="form-control border-end-0" :placeholder="i18n.search" autocomplete="false" v-model="searchText">
8
8
  <button type="submit" class="input-group-icon">
9
9
  <svg width="16" height="16">
10
10
  <use xlink:href="#icon-search"/>
@@ -18,7 +18,7 @@
18
18
  <span class="search-icon my-4">
19
19
  <Icon icon="search" type="fas" color="#f4f4f4"/>
20
20
  </span>
21
- <p><b>Let's get some info on what you're looking for.</b></p>
21
+ <p><b>{{ i18n.initialPageSearchChooserTip }}</b></p>
22
22
  </div>
23
23
  <div v-if="keywords">
24
24
  <PageList
@@ -37,6 +37,10 @@ import PageList from './../PageList'
37
37
  export default {
38
38
  components: { Icon, PageList },
39
39
  data: () => ({
40
+ i18n: {
41
+ search: 'Search',
42
+ initialPageSearchChooserTip: "Let's get some info on what you're looking for."
43
+ },
40
44
  searchText: '',
41
45
  keywords: '',
42
46
  routePath: '/ccm/system/page/chooser/search/'
@@ -52,6 +56,15 @@ export default {
52
56
  title: page.name
53
57
  })
54
58
  }
59
+ },
60
+ mounted() {
61
+ if (window.ccmi18n_sitemap) {
62
+ for (const key in this.i18n) {
63
+ if (window.ccmi18n_sitemap[key]) {
64
+ this.i18n[key] = window.ccmi18n_sitemap[key]
65
+ }
66
+ }
67
+ }
55
68
  }
56
69
  }
57
70
  </script>
@@ -8,9 +8,9 @@
8
8
  <thead>
9
9
  <tr>
10
10
  <th><span>Type</span></th>
11
- <th :class="orderBy === 'cv.cvName' ? 'ccm-results-list-active-sort-' + orderByDirection : ''"><a href="#" @click="sortResults('cv.cvName', 'asc', $event)">Name</a></th>
12
- <th :class="orderBy === 'cv.cvDatePublic' ? 'ccm-results-list-active-sort-' + orderByDirection : ''"><a href="#" @click="sortResults('cv.cvDatePublic', 'asc', $event)">Date</a></th>
13
- <th :class="orderBy === 'c.cDateModified' ? 'ccm-results-list-active-sort-' + orderByDirection : ''"><a href="#" @click="sortResults('c.cDateModified', 'desc', $event)">Last Modified</a></th>
11
+ <th :class="orderBy === 'cv.cvName' ? 'ccm-results-list-active-sort-' + orderByDirection : ''"><a href="#" @click="sortResults('cv.cvName', 'asc', $event)">{{ i118n.name }}</a></th>
12
+ <th :class="orderBy === 'cv.cvDatePublic' ? 'ccm-results-list-active-sort-' + orderByDirection : ''"><a href="#" @click="sortResults('cv.cvDatePublic', 'asc', $event)">{{ i18n.date }}</a></th>
13
+ <th :class="orderBy === 'c.cDateModified' ? 'ccm-results-list-active-sort-' + orderByDirection : ''"><a href="#" @click="sortResults('c.cDateModified', 'desc', $event)">{{ i18n.lastModified }}</a></th>
14
14
  <th><span>Author</span></th>
15
15
  </tr>
16
16
  </thead>
@@ -58,6 +58,11 @@ import Pagination from '../Pagination'
58
58
  export default {
59
59
  components: { Pagination },
60
60
  data: () => ({
61
+ i18n: {
62
+ name: 'Name',
63
+ date: 'Date',
64
+ lastModified: 'Last Modified'
65
+ },
61
66
  currentPage: -1,
62
67
  latestSearchID: null,
63
68
  mouseOver: 0,
@@ -190,6 +195,13 @@ export default {
190
195
  }
191
196
  },
192
197
  mounted () {
198
+ if (window.ccmi18n_sitemap) {
199
+ for (const key in this.i18n) {
200
+ if (window.ccmi18n_sitemap[key]) {
201
+ this.i18n[key] = window.ccmi18n_sitemap[key]
202
+ }
203
+ }
204
+ }
193
205
  this.fetchPages()
194
206
  }
195
207
  }
@@ -4,7 +4,7 @@
4
4
  <div class="col-md-6 ms-auto">
5
5
  <form @submit.prevent="search">
6
6
  <div class="ccm-header-search-form-input input-group">
7
- <input type="text" class="form-control border-end-0" placeholder="Search" autocomplete="false" v-model="searchText">
7
+ <input type="text" class="form-control border-end-0" :placeholder="i18n.search" autocomplete="false" v-model="searchText">
8
8
  <button type="submit" class="input-group-icon">
9
9
  <svg width="16" height="16">
10
10
  <use xlink:href="#icon-search"/>
@@ -18,7 +18,7 @@
18
18
  <span class="search-icon my-4">
19
19
  <Icon icon="search" type="fas" color="#f4f4f4"/>
20
20
  </span>
21
- <p><b>Let's get some info on what you're looking for.</b></p>
21
+ <p><b>{{ i18n.initialUserSearchChooserTip }}</b></p>
22
22
  </div>
23
23
  <div>
24
24
  <users v-if="keywords"
@@ -39,6 +39,10 @@ export default {
39
39
  Users
40
40
  },
41
41
  data: () => ({
42
+ i18n: {
43
+ search: 'Search',
44
+ initialUserSearchChooserTip: "Let's get some info on what you're looking for."
45
+ },
42
46
  keywords: '',
43
47
  searchText: '',
44
48
  selectedUsers: [],
@@ -59,6 +63,15 @@ export default {
59
63
  selectedUsers: function(value) {
60
64
  this.$emit('update:selectedUsers', value)
61
65
  }
66
+ },
67
+ mounted() {
68
+ if (window.ccmi18n_users) {
69
+ for (const key in this.i18n) {
70
+ if (window.ccmi18n_users[key]) {
71
+ this.i18n[key] = window.ccmi18n_users[key]
72
+ }
73
+ }
74
+ }
62
75
  }
63
76
  }
64
77
  </script>
@@ -6,11 +6,11 @@
6
6
  <thead>
7
7
  <tr>
8
8
  <th></th>
9
- <th @click="sortBy('name')" :class="getSortColumnClassName('name')"><a href="javascript:void(0)">Username</a></th>
10
- <th @click="sortBy('email')" :class="getSortColumnClassName('email')"><a href="javascript:void(0)">Email</a></th>
11
- <th @click="sortBy('dateAdded')" :class="getSortColumnClassName('dateAdded')"><a href="javascript:void(0)">Date</a></th>
12
- <th>Status</th>
13
- <th @click="sortBy('totalLogins')" :class="getSortColumnClassName('totalLogins')"><a href="javascript:void(0)"># Logins</a></th>
9
+ <th @click="sortBy('name')" :class="getSortColumnClassName('name')"><a href="javascript:void(0)">{{ i18n.username }}</a></th>
10
+ <th @click="sortBy('email')" :class="getSortColumnClassName('email')"><a href="javascript:void(0)">{{ i18n.email }}</a></th>
11
+ <th @click="sortBy('dateAdded')" :class="getSortColumnClassName('dateAdded')"><a href="javascript:void(0)">{{ i18n.date }}</a></th>
12
+ <th>{{ i18n.status }}</th>
13
+ <th @click="sortBy('totalLogins')" :class="getSortColumnClassName('totalLogins')"><a href="javascript:void(0)">{{ i18n.numLogins }}</a></th>
14
14
  </tr>
15
15
  </thead>
16
16
  <tbody>
@@ -36,6 +36,13 @@
36
36
  export default {
37
37
  data() {
38
38
  return {
39
+ i18n: {
40
+ username: 'Username',
41
+ email: 'Email',
42
+ date: 'Date',
43
+ status: 'Status',
44
+ numLogins: '# Logins'
45
+ },
39
46
  isLoading: true,
40
47
  userList: [],
41
48
  selectedUsers: [],
@@ -111,6 +118,13 @@ export default {
111
118
  }
112
119
  },
113
120
  mounted() {
121
+ if (window.ccmi18n_users) {
122
+ for (const key in this.i18n) {
123
+ if (window.ccmi18n_users[key]) {
124
+ this.i18n[key] = window.ccmi18n_users[key]
125
+ }
126
+ }
127
+ }
114
128
  this.getUsers()
115
129
  }
116
130
  }
@@ -2,8 +2,8 @@
2
2
  <div>
3
3
  <search :selectedUsers.sync="selectedUsers" :multiple-selection="multipleSelection"/>
4
4
  <div class="dialog-buttons">
5
- <button class="btn btn-secondary" data-dialog-action="cancel">Cancel</button>
6
- <button type="button" @click="chooseUsers" :disabled="selectedUsers.length === 0" class="btn btn-primary">Choose</button>
5
+ <button class="btn btn-secondary" data-dialog-action="cancel">{{ i18n.cancel }}</button>
6
+ <button type="button" @click="chooseUsers" :disabled="selectedUsers.length === 0" class="btn btn-primary">{{ i18n.choose }}</button>
7
7
  </div>
8
8
  </div>
9
9
  </template>
@@ -25,6 +25,10 @@ export default {
25
25
  },
26
26
  data() {
27
27
  return {
28
+ i18n: {
29
+ cancel: 'Cancel',
30
+ choose: 'Choose'
31
+ },
28
32
  selectedUsers: []
29
33
  }
30
34
  },
@@ -32,6 +36,15 @@ export default {
32
36
  chooseUsers() {
33
37
  window.ConcreteEvent.publish('UserSearchDialogSelectUser.core', { users: this.selectedUsers })
34
38
  }
39
+ },
40
+ mounted() {
41
+ if (window.ccmi18n_users) {
42
+ for (const key in this.i18n) {
43
+ if (window.ccmi18n_users[key]) {
44
+ this.i18n[key] = window.ccmi18n_users[key]
45
+ }
46
+ }
47
+ }
35
48
  }
36
49
  }
37
50
  </script>
@@ -3,12 +3,16 @@
3
3
  function ConcreteStyleCustomizerColorPicker($element, options) {
4
4
  var my = this
5
5
  my.$element = $element
6
+ const defaulti18n = window.ccmi18n_styleCustomizer || null
6
7
  my.options = $.extend(true, {
7
8
  initialColor: '',
8
9
  i18n: {
9
- cancel: 'Cancel',
10
- choose: 'Choose',
11
- clear: 'Clean'
10
+ cancel: defaulti18n && defaulti18n.cancel ? defaulti18n.cancel : 'Cancel',
11
+ choose: defaulti18n && defaulti18n.choose ? defaulti18n.choose : 'Choose',
12
+ clear: defaulti18n && defaulti18n.clearColorSelection ? defaulti18n.clearColorSelection : 'Clear Color Selection',
13
+ noColorSelected: defaulti18n && defaulti18n.noColorSelected ? defaulti18n.noColorSelected : 'No Color Selected',
14
+ togglePaletteMore: defaulti18n && defaulti18n.togglePaletteMore ? defaulti18n.togglePaletteMore : 'More',
15
+ togglePaletteLess: defaulti18n && defaulti18n.togglePaletteLess ? defaulti18n.togglePaletteLess : 'Less'
12
16
  }
13
17
  }, options || {})
14
18
  $element.spectrum({
@@ -22,6 +26,9 @@ function ConcreteStyleCustomizerColorPicker($element, options) {
22
26
  cancelText: my.options.i18n.cancel,
23
27
  chooseText: my.options.i18n.choose,
24
28
  clearText: my.options.i18n.clear,
29
+ noColorSelectedText: my.options.i18n.noColorSelected,
30
+ togglePaletteMoreText: my.options.i18n.togglePaletteMore,
31
+ togglePaletteLessText: my.options.i18n.togglePaletteLess,
25
32
  change: function() {
26
33
  ConcreteEvent.publish('StyleCustomizerControlUpdate')
27
34
  }
@@ -16,7 +16,7 @@ function ConcreteStyleCustomizerCustomCss($element, options) {
16
16
  url: ''
17
17
  },
18
18
  i18n: {
19
- editTitle: 'Custom CSS'
19
+ editTitle: window.ccmi18n_styleCustomizer && window.ccmi18n_styleCustomizer.customCSS ? window.ccmi18n_styleCustomizer.customCSS : 'Custom CSS'
20
20
  }
21
21
  }, options || {})
22
22
  $element
@@ -1,9 +1,9 @@
1
1
  /* eslint-disable no-new, no-unused-vars, camelcase, no-irregular-whitespace, new-cap */
2
+
2
3
  /* global bootstrap */
3
4
  function ConcreteInlineStyleCustomizer($element, options) {
4
5
  var my = this
5
- options = $.extend({
6
- }, options)
6
+ options = $.extend({}, options)
7
7
 
8
8
  my.options = options
9
9
  my.$element = $element
@@ -19,7 +19,7 @@ function ConcreteInlineStyleCustomizer($element, options) {
19
19
 
20
20
  ConcreteInlineStyleCustomizer.prototype = {
21
21
 
22
- refreshStyles: function(resp) {
22
+ refreshStyles: function (resp) {
23
23
  if (resp.oldIssID) {
24
24
  $('head').find('style[data-style-set=' + resp.oldIssID + ']').remove()
25
25
  }
@@ -28,41 +28,41 @@ ConcreteInlineStyleCustomizer.prototype = {
28
28
  }
29
29
  },
30
30
 
31
- setupForm: function() {
31
+ setupForm: function () {
32
32
  var my = this
33
33
  const tooltipTriggerList = [].slice.call(my.$element.find('.launch-tooltip'))
34
34
  const tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
35
35
  return new bootstrap.Tooltip(tooltipTriggerEl)
36
36
  })
37
37
  my.$element.concreteAjaxForm({
38
- success: function(resp) {
38
+ success: function (resp) {
39
39
  my.handleResponse(resp)
40
40
  },
41
- error: function(r) {
41
+ error: function (r) {
42
42
  my.$toolbar.prependTo('#ccm-inline-toolbar-container').show()
43
43
  }
44
44
  })
45
45
  },
46
46
 
47
- setupButtons: function() {
47
+ setupButtons: function () {
48
48
  var my = this
49
- my.$toolbar.on('click.inlineStyleCustomizer', 'input[data-action=cancel-design]', function() {
49
+ my.$toolbar.on('click.inlineStyleCustomizer', 'input[data-action=cancel-design]', function () {
50
50
  my.$element.hide()
51
51
  ConcreteEvent.fire('EditModeExitInline')
52
52
  return false
53
53
  })
54
54
 
55
- my.$toolbar.on('click.inlineStyleCustomizer', 'input[data-action=reset-design]', function() {
55
+ my.$toolbar.on('click.inlineStyleCustomizer', 'input[data-action=reset-design]', function () {
56
56
  $.concreteAjax({
57
57
  url: $(this).attr('data-reset-action'),
58
- success: function(resp) {
58
+ success: function (resp) {
59
59
  my.handleResponse(resp)
60
60
  }
61
61
  })
62
62
  return false
63
63
  })
64
64
 
65
- my.$toolbar.on('click.inlineStyleCustomizer', 'input[data-action=save-design]', function() {
65
+ my.$toolbar.on('click.inlineStyleCustomizer', 'input[data-action=save-design]', function () {
66
66
  // move the toolbar back into the form so it submits. so great.
67
67
  my.$toolbar.hide().prependTo(my.$element)
68
68
  my.$element.submit()
@@ -71,7 +71,7 @@ ConcreteInlineStyleCustomizer.prototype = {
71
71
  })
72
72
  },
73
73
 
74
- setupDropdowns: function() {
74
+ setupDropdowns: function () {
75
75
  var my = this
76
76
  my.$toolbar.find('.ccm-inline-toolbar-icon-cell > a').on('click', function () {
77
77
  const $dropdown = $(this).parent().find('.ccm-dropdown-menu')
@@ -87,7 +87,7 @@ ConcreteInlineStyleCustomizer.prototype = {
87
87
  })
88
88
  },
89
89
 
90
- setupDeviceVisibilityComponent: function() {
90
+ setupDeviceVisibilityComponent: function () {
91
91
  var my = this
92
92
  my.$toolbar.find('button[data-hide-on-device]').on('click', function (e) {
93
93
  e.stopPropagation()
@@ -104,7 +104,7 @@ ConcreteInlineStyleCustomizer.prototype = {
104
104
  })
105
105
  },
106
106
 
107
- setupSelectBoxes: function() {
107
+ setupSelectBoxes: function () {
108
108
  var my = this
109
109
 
110
110
  my.$toolbar.find('.selectpicker').selectpicker()
@@ -117,9 +117,9 @@ ConcreteInlineStyleCustomizer.prototype = {
117
117
  })
118
118
  },
119
119
 
120
- setupSliders: function() {
120
+ setupSliders: function () {
121
121
  var my = this
122
- my.$toolbar.find('.ccm-inline-style-sliders').each(function() {
122
+ my.$toolbar.find('.ccm-inline-style-sliders').each(function () {
123
123
  var targetInput = $(this).next().children('.ccm-inline-style-slider-value')
124
124
  var targetInputFormat = targetInput.attr('data-value-format')
125
125
  var sliderElement = $(this)
@@ -139,7 +139,7 @@ ConcreteInlineStyleCustomizer.prototype = {
139
139
  min: min,
140
140
  max: max,
141
141
  value: currentValue(),
142
- slide: function(event, ui) {
142
+ slide: function (event, ui) {
143
143
  targetInput.prop('disabled', false)
144
144
  targetInput.val(ui.value + targetInputFormat)
145
145
  disableCheck()
@@ -181,7 +181,7 @@ function ConcreteBlockInlineStyleCustomizer($element, options) {
181
181
 
182
182
  ConcreteBlockInlineStyleCustomizer.prototype = Object.create(ConcreteInlineStyleCustomizer.prototype)
183
183
 
184
- ConcreteBlockInlineStyleCustomizer.prototype.handleResponse = function(resp) {
184
+ ConcreteBlockInlineStyleCustomizer.prototype.handleResponse = function (resp) {
185
185
  var my = this
186
186
  var editor = new Concrete.getEditMode()
187
187
  var area = editor.getAreaByID(resp.aID)
@@ -222,7 +222,7 @@ function ConcreteAreaInlineStyleCustomizer($element, options) {
222
222
 
223
223
  ConcreteAreaInlineStyleCustomizer.prototype = Object.create(ConcreteInlineStyleCustomizer.prototype)
224
224
 
225
- ConcreteAreaInlineStyleCustomizer.prototype.handleResponse = function(resp) {
225
+ ConcreteAreaInlineStyleCustomizer.prototype.handleResponse = function (resp) {
226
226
  var my = this
227
227
  var editor = new Concrete.getEditMode()
228
228
  var area = editor.getAreaByID(resp.aID)
@@ -257,21 +257,21 @@ $.fn.concreteInlineStyleCustomizer = function (options) {
257
257
  })
258
258
  }
259
259
 
260
- $.fn.removeClassExcept = function (val) {
261
- return this.each(function (index, el) {
262
- var keep = val.split(' ')  // list we'd like to keep
263
- var reAdd = [] // ones that should be re-added if found
264
- var $el = $(el) // element we're working on
260
+ $.fn.removeClassExcept = function (val) {
261
+ return this.each(function (index, el) {
262
+ var keep = val.split(' ')
263
+ var reAdd = [] // ones that should be re-added if found
264
+ var $el = $(el) // element we're working on
265
265
 
266
266
  // look for which we re-add (based on them already existing)
267
- for (var i = 0; i < keep.length; i++) {
268
- if ($el.hasClass(keep[i])) reAdd.push(keep[i])
267
+ for (var i = 0; i < keep.length; i++) {
268
+ if ($el.hasClass(keep[i])) reAdd.push(keep[i])
269
269
  }
270
270
 
271
271
  // drop all, and only add those confirmed as existing
272
272
  $el
273
273
  .removeClass() // remove existing classes
274
- .addClass(reAdd.join(' '))  // re-add the confirmed ones
274
+ .addClass(reAdd.join(' '))
275
275
  })
276
276
  }
277
277