headmin 0.3.2 → 0.4.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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +27 -0
  3. data/.gitignore +14 -0
  4. data/.nvmrc +1 -0
  5. data/.ruby-version +1 -1
  6. data/CHANGELOG.md +24 -0
  7. data/Gemfile +8 -5
  8. data/Gemfile.lock +197 -25
  9. data/README.md +9 -1
  10. data/Rakefile +1 -7
  11. data/app/assets/images/document.docx +0 -0
  12. data/app/assets/images/document.pdf +0 -0
  13. data/app/assets/images/image.jpg +0 -0
  14. data/app/assets/images/spreadsheet.xls +0 -0
  15. data/app/assets/images/video.mp4 +0 -0
  16. data/app/assets/javascripts/headmin/config/i18n.js +9 -9
  17. data/app/assets/javascripts/headmin/controllers/autocomplete_controller.js +255 -0
  18. data/app/assets/javascripts/headmin/controllers/blocks_controller.js +74 -79
  19. data/app/assets/javascripts/headmin/controllers/date_range_controller.js +24 -24
  20. data/app/assets/javascripts/headmin/controllers/dropzone_controller.js +23 -25
  21. data/app/assets/javascripts/headmin/controllers/file_preview_controller.js +237 -237
  22. data/app/assets/javascripts/headmin/controllers/filter_controller.js +44 -44
  23. data/app/assets/javascripts/headmin/controllers/filters_controller.js +57 -61
  24. data/app/assets/javascripts/headmin/controllers/flatpickr_controller.js +29 -29
  25. data/app/assets/javascripts/headmin/controllers/hello_controller.js +3 -3
  26. data/app/assets/javascripts/headmin/controllers/notification_controller.js +7 -6
  27. data/app/assets/javascripts/headmin/controllers/popup_controller.js +51 -52
  28. data/app/assets/javascripts/headmin/controllers/redactorx_controller.js +36 -9
  29. data/app/assets/javascripts/headmin/controllers/repeater_controller.js +122 -125
  30. data/app/assets/javascripts/headmin/controllers/select_controller.js +40 -39
  31. data/app/assets/javascripts/headmin/controllers/table_actions_controller.js +88 -77
  32. data/app/assets/javascripts/headmin/controllers/table_controller.js +103 -89
  33. data/app/assets/javascripts/headmin/index.js +38 -39
  34. data/app/assets/javascripts/headmin.js +287 -732
  35. data/app/assets/stylesheets/headmin/forms/autocomplete.scss +21 -0
  36. data/app/assets/stylesheets/headmin/forms/file.scss +46 -0
  37. data/app/assets/stylesheets/headmin/forms/repeater.scss +62 -0
  38. data/app/assets/stylesheets/headmin/forms/search.scss +12 -0
  39. data/app/assets/stylesheets/headmin/forms.scss +11 -0
  40. data/app/assets/stylesheets/headmin/general.scss +5 -0
  41. data/app/assets/stylesheets/headmin/overrides/bootstrap.scss +5 -3
  42. data/app/assets/stylesheets/headmin/overrides/redactorx.scss +74 -0
  43. data/app/assets/stylesheets/headmin/popup.scss +1 -0
  44. data/app/assets/stylesheets/headmin/syntax.scss +36 -349
  45. data/app/assets/stylesheets/headmin/table.scss +1 -1
  46. data/app/assets/stylesheets/headmin/utilities/buttons.scss +19 -0
  47. data/app/assets/stylesheets/headmin/utilities/dropzone.scss +72 -0
  48. data/app/assets/stylesheets/headmin/utilities.scss +2 -68
  49. data/app/assets/stylesheets/headmin/vendor/tom-select-bootstrap.css +1 -2
  50. data/app/assets/stylesheets/headmin.css +206 -206
  51. data/app/assets/stylesheets/headmin.scss +1 -1
  52. data/app/controllers/concerns/headmin/authentication.rb +1 -1
  53. data/app/controllers/concerns/headmin/searchable.rb +1 -1
  54. data/app/controllers/concerns/headmin/sortable.rb +7 -7
  55. data/app/helpers/headmin/admin_helper.rb +1 -2
  56. data/app/helpers/headmin/bootstrap_helper.rb +2 -24
  57. data/app/helpers/headmin/filter_helper.rb +1 -1
  58. data/app/helpers/headmin/form_helper.rb +5 -11
  59. data/app/helpers/headmin/notification_helper.rb +21 -21
  60. data/app/helpers/headmin/request_helper.rb +3 -3
  61. data/app/models/concerns/headmin/block.rb +1 -2
  62. data/app/models/concerns/headmin/blockable.rb +2 -2
  63. data/app/models/concerns/headmin/field.rb +2 -1
  64. data/app/models/concerns/headmin/fieldable.rb +8 -8
  65. data/app/models/concerns/headmin/form/autocompletable.rb +38 -0
  66. data/app/models/concerns/headmin/form/hintable.rb +19 -0
  67. data/app/models/concerns/headmin/form/input_groupable.rb +23 -0
  68. data/app/models/concerns/headmin/form/labelable.rb +33 -0
  69. data/app/models/concerns/headmin/form/listable.rb +28 -0
  70. data/app/models/concerns/headmin/form/placeholderable.rb +13 -0
  71. data/app/models/concerns/headmin/form/validatable.rb +40 -0
  72. data/app/models/concerns/headmin/form/wrappable.rb +21 -0
  73. data/app/models/headmin/.DS_Store +0 -0
  74. data/app/models/headmin/blocks_view.rb +15 -0
  75. data/app/models/headmin/form/blocks_view.rb +29 -0
  76. data/app/models/headmin/form/checkbox_view.rb +52 -0
  77. data/app/models/headmin/form/date_range_view.rb +25 -0
  78. data/app/models/headmin/form/date_view.rb +45 -0
  79. data/app/models/headmin/form/email_view.rb +48 -0
  80. data/app/models/headmin/form/file_view.rb +116 -0
  81. data/app/models/headmin/form/flatpickr_range_view.rb +102 -0
  82. data/app/models/headmin/form/flatpickr_view.rb +37 -0
  83. data/app/models/headmin/form/hidden_view.rb +10 -0
  84. data/app/models/headmin/form/hint_view.rb +6 -0
  85. data/app/models/headmin/form/input_group_view.rb +19 -0
  86. data/app/models/headmin/form/label_view.rb +24 -0
  87. data/app/models/headmin/form/number_view.rb +49 -0
  88. data/app/models/headmin/form/password_view.rb +44 -0
  89. data/app/models/headmin/form/redactorx_view.rb +59 -0
  90. data/app/models/headmin/form/search_view.rb +48 -0
  91. data/app/models/headmin/form/select_view.rb +62 -0
  92. data/app/models/headmin/form/switch_view.rb +23 -0
  93. data/app/models/headmin/form/text_view.rb +48 -0
  94. data/app/models/headmin/form/textarea_view.rb +44 -0
  95. data/app/models/headmin/form/url_view.rb +48 -0
  96. data/app/models/headmin/form/wrapper_view.rb +19 -0
  97. data/app/models/headmin/form/wysiwyg_view.rb +17 -0
  98. data/app/models/headmin/thumbnail_view.rb +66 -0
  99. data/app/models/view_model.rb +58 -0
  100. data/app/views/headmin/_blocks.html.erb +13 -9
  101. data/app/views/headmin/_heading.html.erb +7 -1
  102. data/app/views/headmin/_thumbnail.html.erb +5 -39
  103. data/app/views/headmin/dropdown/_item.html.erb +1 -1
  104. data/app/views/headmin/forms/_autocomplete.html.erb +11 -0
  105. data/app/views/headmin/forms/_blocks.html.erb +16 -17
  106. data/app/views/headmin/forms/_checkbox.html.erb +24 -29
  107. data/app/views/headmin/forms/_datalist.html.erb +3 -0
  108. data/app/views/headmin/forms/_date.html.erb +24 -24
  109. data/app/views/headmin/forms/_date_range.html.erb +19 -21
  110. data/app/views/headmin/forms/_email.html.erb +27 -32
  111. data/app/views/headmin/forms/_errors.html.erb +2 -3
  112. data/app/views/headmin/forms/_file.html.erb +84 -181
  113. data/app/views/headmin/forms/_flatpickr.html.erb +19 -20
  114. data/app/views/headmin/forms/_flatpickr_range.html.erb +28 -37
  115. data/app/views/headmin/forms/_hidden.html.erb +9 -10
  116. data/app/views/headmin/forms/_hint.html.erb +16 -0
  117. data/app/views/headmin/forms/_input_group.html.erb +21 -0
  118. data/app/views/headmin/forms/_label.html.erb +5 -13
  119. data/app/views/headmin/forms/_number.html.erb +23 -35
  120. data/app/views/headmin/forms/_password.html.erb +21 -30
  121. data/app/views/headmin/forms/_redactorx.html.erb +21 -40
  122. data/app/views/headmin/forms/_repeater.html.erb +55 -60
  123. data/app/views/headmin/forms/_search.html.erb +43 -0
  124. data/app/views/headmin/forms/_select.html.erb +24 -49
  125. data/app/views/headmin/forms/_switch.html.erb +29 -0
  126. data/app/views/headmin/forms/_text.html.erb +42 -96
  127. data/app/views/headmin/forms/_textarea.html.erb +21 -32
  128. data/app/views/headmin/forms/_url.html.erb +26 -31
  129. data/app/views/headmin/forms/_validation.html.erb +10 -13
  130. data/app/views/headmin/forms/_wrapper.html.erb +9 -0
  131. data/app/views/headmin/forms/_wysiwyg.html.erb +28 -0
  132. data/app/views/headmin/forms/autocomplete/_item.html.erb +3 -0
  133. data/app/views/headmin/forms/autocomplete/_list.html.erb +3 -0
  134. data/app/views/headmin/forms/fields/_group.html.erb +6 -4
  135. data/app/views/headmin/forms/repeater/_row.html.erb +4 -4
  136. data/app/views/headmin/nav/item/_devise.html.erb +1 -1
  137. data/app/views/headmin/table/_actions.html.erb +1 -1
  138. data/app/views/headmin/table/actions/_action.html.erb +2 -1
  139. data/app/views/headmin/table/actions/_delete.html.erb +1 -1
  140. data/app/views/headmin/views/devise/registrations/_edit.html.erb +2 -2
  141. data/bin/console +0 -1
  142. data/config/initializers/customize_input_error.rb +4 -4
  143. data/config/locales/headmin/forms/en.yml +0 -11
  144. data/config/locales/headmin/forms/nl.yml +0 -11
  145. data/esbuild-css.js +18 -18
  146. data/esbuild-js.js +8 -8
  147. data/headmin.gemspec +1 -3
  148. data/lib/generators/headmin/blocks_generator.rb +8 -8
  149. data/lib/generators/headmin/devise_generator.rb +4 -4
  150. data/lib/generators/headmin/fields_generator.rb +9 -9
  151. data/lib/generators/templates/controllers/auth/confirmations_controller.rb +1 -3
  152. data/lib/generators/templates/controllers/auth/omniauth_callbacks_controller.rb +1 -3
  153. data/lib/generators/templates/controllers/auth/passwords_controller.rb +1 -3
  154. data/lib/generators/templates/controllers/auth/registrations_controller.rb +1 -3
  155. data/lib/generators/templates/controllers/auth/sessions_controller.rb +1 -3
  156. data/lib/generators/templates/controllers/auth/unlocks_controller.rb +1 -3
  157. data/lib/generators/templates/models/block.rb +1 -1
  158. data/lib/headmin/engine.rb +6 -6
  159. data/lib/headmin/version.rb +1 -3
  160. data/lib/headmin.rb +0 -2
  161. data/package-lock.json +5359 -0
  162. data/package.json +13 -7
  163. data/view_model_benchmark.rb +74 -0
  164. data/yarn-error.log +367 -0
  165. data/yarn.lock +1448 -161
  166. metadata +69 -25
  167. data/.rubocop.yml +0 -13
  168. data/app/assets/stylesheets/headmin/form.scss +0 -132
  169. data/app/assets/stylesheets/headmin/overrides/redactorx.css +0 -3
  170. data/app/helpers/headmin/documentation_helper.rb +0 -35
  171. data/app/models/headmin/documentation_renderer.rb +0 -32
  172. data/app/models/headmin/form/base.rb +0 -79
  173. data/app/models/headmin/form/text.rb +0 -53
  174. data/app/services/block_service.rb +0 -72
  175. data/app/views/headmin/_card.html.erb +0 -52
  176. data/app/views/headmin/forms/_actions.html.erb +0 -28
  177. data/app/views/headmin/forms/_base.html.erb +0 -114
  178. data/app/views/headmin/forms/_image.html.erb +0 -21
  179. data/app/views/headmin/forms/_video.html.erb +0 -21
  180. data/app/views/headmin/forms/actions/_destroy.html.erb +0 -13
  181. data/app/views/headmin/forms/actions/_save.html.erb +0 -12
  182. data/app/views/headmin/forms/actions/_view.html.erb +0 -15
  183. data/docs/blocks-and-fields.md +0 -54
  184. data/docs/blocks.md +0 -48
  185. data/docs/devise.md +0 -41
  186. data/docs/fields.md +0 -79
@@ -1,48 +1,49 @@
1
- import {Controller} from "@hotwired/stimulus"
2
- import TomSelect from "tom-select";
3
- import I18n from "../config/i18n";
1
+ import { Controller } from '@hotwired/stimulus'
2
+ import TomSelect from 'tom-select'
3
+ import I18n from '../config/i18n'
4
4
 
5
5
  export default class extends Controller {
6
- connect() {
7
- if (this.element.hasAttribute('multiple')) {
8
- this.initTomSelect()
9
- }
6
+ connect () {
7
+ if (this.element.hasAttribute('multiple')) {
8
+ this.initTomSelect()
10
9
  }
10
+ }
11
11
 
12
- defaultOptions(locale) {
13
- const defaultOptions = {
14
- en: {
15
- render: {
16
- option_create: function (data, escape) {
17
- return '<div class="create">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>'
18
- },
19
- no_results: function (data, escape) {
20
- return '<div class="no-results">No results found</div>'
21
- }
22
- }
23
- },
24
- nl: {
25
- render: {
26
- option_create: function (data, escape) {
27
- return '<div class="create">Voeg <strong>' + escape(data.input) + '</strong> toe &hellip;</div>'
28
- },
29
- no_results: function (data, escape) {
30
- return '<div class="no-results">Geen resultaten gevonden</div>'
31
- }
32
- }
33
- }
12
+ defaultOptions (locale) {
13
+ const defaultOptions = {
14
+ en: {
15
+ render: {
16
+ option_create: function (data, escape) {
17
+ return '<div class="create">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>'
18
+ },
19
+ no_results: function (data, escape) {
20
+ return '<div class="no-results">No results found</div>'
21
+ }
22
+ }
23
+ },
24
+ nl: {
25
+ render: {
26
+ option_create: function (data, escape) {
27
+ return '<div class="create">Voeg <strong>' + escape(data.input) + '</strong> toe &hellip;</div>'
28
+ },
29
+ no_results: function (data, escape) {
30
+ return '<div class="no-results">Geen resultaten gevonden</div>'
31
+ }
34
32
  }
35
- return defaultOptions[locale]
33
+ }
36
34
  }
35
+ return defaultOptions[locale]
36
+ }
37
37
 
38
- hasTags() {
39
- return this.element.dataset['tags'] === "true"
40
- }
38
+ hasTags () {
39
+ return this.element.dataset.tags === 'true'
40
+ }
41
41
 
42
- initTomSelect() {
43
- const defaultOptions = this.defaultOptions(I18n.locale)
44
- const options = {create: this.hasTags()}
42
+ initTomSelect () {
43
+ const defaultOptions = this.defaultOptions(I18n.locale)
44
+ const options = { create: this.hasTags() }
45
45
 
46
- new TomSelect(this.element, {...defaultOptions, ...options})
47
- }
48
- }
46
+ /* eslint-disable no-new */
47
+ new TomSelect(this.element, { ...defaultOptions, ...options })
48
+ }
49
+ }
@@ -1,98 +1,109 @@
1
- import {Controller} from "@hotwired/stimulus"
1
+ import { Controller } from '@hotwired/stimulus'
2
2
 
3
3
  export default class extends Controller {
4
- static get targets() {
5
- return ["wrapper", "form", "select", "method", "button", "idInputTemplate", "id", "counter"]
6
- }
4
+ static get targets () {
5
+ return ['wrapper', 'form', 'select', 'method', 'button', 'idInputTemplate', 'id', 'counter']
6
+ }
7
7
 
8
- connect() {
9
- this.wrapperTarget.addEventListener('idSelectionChanged', (event) => {
10
- this.updateIdFields(event.detail.ids)
11
- this.updateCounter(event.detail.count)
12
- this.toggleCounter(event.detail.count)
13
- })
8
+ connect () {
9
+ this.wrapperTarget.addEventListener('idSelectionChanged', (event) => {
10
+ this.updateIdFields(event.detail.ids)
11
+ this.updateCounter(event.detail.count)
12
+ this.toggleCounter(event.detail.count)
13
+ })
14
+ }
14
15
 
15
- }
16
+ update (event) {
17
+ event.preventDefault()
18
+ this.updateFormAction()
19
+ this.updateFormMethod()
20
+ this.updateFormDataAttributes()
21
+ this.enableButton()
22
+ }
16
23
 
17
- update(event) {
18
- event.preventDefault()
19
- this.updateFormAction()
20
- this.updateFormMethod()
21
- this.updateButton()
24
+ updateIdFields (ids) {
25
+ this.removeIds()
26
+ if (ids instanceof Array) {
27
+ ids.forEach((id) => {
28
+ this.addId(id)
29
+ })
30
+ } else {
31
+ this.addId('')
22
32
  }
33
+ }
23
34
 
24
- updateIdFields(ids) {
25
- this.removeIds()
26
- if (ids instanceof Array) {
27
- ids.forEach((id) => {
28
- this.addId(id)
29
- })
30
- } else {
31
- this.addId('')
32
- }
35
+ updateCounter (count) {
36
+ let htmlString = ''
37
+ switch (count) {
38
+ case 0:
39
+ htmlString = this.counterTarget.getAttribute('data-items-zero')
40
+ break
41
+ case 1:
42
+ htmlString = this.counterTarget.getAttribute('data-items-one')
43
+ break
44
+ default:
45
+ htmlString = this.counterTarget.getAttribute('data-items-other')
46
+ htmlString = htmlString.replace(/<b>[\s\S]*?<\/b>/, `<b>${count}</b>`)
33
47
  }
48
+ this.counterTarget.innerHTML = htmlString
49
+ }
34
50
 
35
- updateCounter(count) {
36
- let htmlString = ''
37
- switch (count) {
38
- case 0:
39
- htmlString = this.counterTarget.getAttribute('data-items-zero')
40
- break;
41
- case 1:
42
- htmlString = this.counterTarget.getAttribute('data-items-one')
43
- break;
44
- default:
45
- htmlString = this.counterTarget.getAttribute('data-items-other')
46
- htmlString = htmlString.replace(/<b>[\s\S]*?<\/b>/, `<b>${count}<\/b>`);
47
- }
48
- this.counterTarget.innerHTML = htmlString;
51
+ toggleCounter (count) {
52
+ if (count > 0) {
53
+ this.wrapperTarget.classList.remove('d-none')
54
+ } else {
55
+ this.wrapperTarget.classList.add('d-none')
49
56
  }
57
+ }
50
58
 
51
- toggleCounter(count) {
52
- if (count > 0) {
53
- this.wrapperTarget.classList.remove('d-none')
54
- } else {
55
- this.wrapperTarget.classList.add('d-none')
56
- }
57
- }
59
+ updateFormAction () {
60
+ this.formTarget.action = this.selectTarget.value
61
+ }
58
62
 
59
- updateFormAction() {
60
- this.formTarget.action = this.selectTarget.value
61
- }
63
+ updateFormMethod () {
64
+ const option = this.selectedOption()
65
+ this.methodTarget.value = option.dataset.method
66
+ }
62
67
 
63
- updateFormMethod() {
64
- const option = this.selectedOption()
65
- this.methodTarget.value = option.dataset.method
66
- }
68
+ updateFormDataAttributes () {
69
+ const option = this.selectedOption()
70
+ this.updateFormDataConfirm(option.dataset.turboConfirm)
71
+ this.updateFormDataTurbo(option.dataset.turbo)
72
+ }
67
73
 
68
- updateButton() {
69
- const option = this.selectedOption()
70
- const confirm = option.dataset.confirm
71
- if (confirm) {
72
- this.buttonTarget.dataset.confirm = confirm
73
- } else {
74
- this.buttonTarget.removeAttribute('data-confirm')
75
- }
76
- this.enableButton()
74
+ updateFormDataConfirm (confirm) {
75
+ if (confirm) {
76
+ this.formTarget.dataset.turboConfirm = confirm
77
+ } else {
78
+ this.formTarget.removeAttribute('data-turbo-confirm')
77
79
  }
80
+ }
78
81
 
79
- selectedOption() {
80
- return this.selectTarget.options[this.selectTarget.selectedIndex]
82
+ updateFormDataTurbo (turbo) {
83
+ if (turbo) {
84
+ this.formTarget.dataset.turbo = turbo
85
+ } else {
86
+ this.formTarget.removeAttribute('data-turbo')
81
87
  }
88
+ }
82
89
 
83
- enableButton() {
84
- this.buttonTarget.removeAttribute('disabled')
85
- }
90
+ selectedOption () {
91
+ return this.selectTarget.options[this.selectTarget.selectedIndex]
92
+ }
86
93
 
87
- addId(id) {
88
- const template = this.idInputTemplateTarget
89
- const input = template.innerHTML.replace(/ID/g, id)
90
- this.formTarget.insertAdjacentHTML('afterbegin', input)
91
- }
94
+ enableButton () {
95
+ this.buttonTarget.removeAttribute('disabled')
96
+ }
92
97
 
93
- removeIds() {
94
- this.idTargets.forEach((input) => {
95
- this.formTarget.removeChild(input)
96
- });
97
- }
98
+ addId (id) {
99
+ const template = this.idInputTemplateTarget
100
+ const input = template.innerHTML.replace(/ID/g, id)
101
+ this.formTarget.insertAdjacentHTML('afterbegin', input)
102
+ }
103
+
104
+ removeIds () {
105
+ this.idTargets.forEach((input) => {
106
+ this.formTarget.removeChild(input)
107
+ })
108
+ }
98
109
  }
@@ -1,110 +1,124 @@
1
- import {Controller} from "@hotwired/stimulus"
2
- import Sortable from "sortablejs";
3
- import Rails from "@rails/ujs";
1
+ /* global CustomEvent, fetch, FormData */
2
+ import { Controller } from '@hotwired/stimulus'
3
+ import Sortable from 'sortablejs'
4
4
 
5
5
  export default class extends Controller {
6
- static get values() {
7
- return {
8
- url: String,
9
- count: Number
10
- }
6
+ static get values () {
7
+ return {
8
+ url: String,
9
+ count: Number
11
10
  }
11
+ }
12
12
 
13
- static get targets() {
14
- return ["table", "body", "actions", "idCheckbox", "idsCheckbox", "row"]
15
- }
13
+ static get targets () {
14
+ return ['table', 'body', 'actions', 'idCheckbox', 'idsCheckbox', 'row']
15
+ }
16
16
 
17
- connect() {
18
- new Sortable(this.bodyTarget, {
19
- handle: '.table-drag-sort-handle',
20
- onEnd: (event) => {
21
- Rails.ajax({
22
- url: this.urlValue,
23
- type: "PATCH",
24
- data: this.getIdsDataString(),
25
- });
26
- }
27
- })
28
- }
17
+ connect () {
18
+ Sortable.create(this.bodyTarget, {
19
+ handle: '.table-drag-sort-handle',
20
+ onEnd: (event) => {
21
+ this.submitPositions()
22
+ }
23
+ })
24
+ }
29
25
 
30
- getIdsDataString() {
31
- const table = this.tableTarget
32
- let data = ""
33
- const handles = [...table.querySelectorAll(".table-drag-sort-handle")]
34
- handles.map(handle => {
35
- data += `ids[]=${handle.dataset.id}&`
36
- })
37
- return data
38
- }
26
+ submitPositions () {
27
+ fetch(this.urlValue, {
28
+ method: 'PATCH',
29
+ body: this.idsFormData(),
30
+ headers: {
31
+ 'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content
32
+ }
33
+ }).then((response) => {
34
+ return response.text()
35
+ }).catch((err) => {
36
+ console.warn('Fetch went wrong', err)
37
+ })
38
+ }
39
39
 
40
- toggleIds(event) {
41
- const checkbox = event.target
42
- this.toggleIdsCheckboxes(checkbox.checked)
43
- this.toggleIdCheckboxes(checkbox.checked)
44
- this.updateActions()
45
- }
40
+ positions () {
41
+ const handles = [...this.tableTarget.querySelectorAll('.table-drag-sort-handle')]
42
+ return handles.map((handle) => {
43
+ return handle.dataset.id
44
+ })
45
+ }
46
46
 
47
- toggleId(event) {
48
- this.toggleIdsCheckboxes(false)
49
- this.updateActions()
50
- }
47
+ idsFormData () {
48
+ const formData = new FormData()
49
+ this.positions().forEach(id => {
50
+ formData.append('ids[]', id)
51
+ })
52
+ return formData
53
+ }
51
54
 
52
- updateActions() {
53
- this.actionsTarget.dispatchEvent(
54
- new CustomEvent(
55
- 'idSelectionChanged',
56
- {
57
- detail: {
58
- ids: this.ids(),
59
- count: this.selectedIdsCount()
60
- }
61
- }
62
- )
63
- )
64
- }
55
+ toggleIds (event) {
56
+ const checkbox = event.target
57
+ this.toggleIdsCheckboxes(checkbox.checked)
58
+ this.toggleIdCheckboxes(checkbox.checked)
59
+ this.updateActions()
60
+ }
65
61
 
66
- selectedIdsCount() {
67
- if (this.ids() instanceof Array) {
68
- return this.ids().length
69
- } else {
70
- return this.totalCount()
71
- }
72
- }
62
+ toggleId (event) {
63
+ this.toggleIdsCheckboxes(false)
64
+ this.updateActions()
65
+ }
73
66
 
74
- totalCount() {
75
- if (this.countValue === 0) {
76
- return this.rowTargets.length
77
- } else {
78
- return this.countValue
67
+ updateActions () {
68
+ this.actionsTarget.dispatchEvent(
69
+ new CustomEvent(
70
+ 'idSelectionChanged',
71
+ {
72
+ detail: {
73
+ ids: this.ids(),
74
+ count: this.selectedIdsCount()
75
+ }
79
76
  }
80
- }
77
+ )
78
+ )
79
+ }
81
80
 
82
- ids() {
83
- if (this.idsCheckboxTarget.checked) {
84
- return null
85
- } else {
86
- return this.selectedIdCheckboxes().map((checkbox) => {
87
- return checkbox.value
88
- })
89
- }
81
+ selectedIdsCount () {
82
+ if (this.ids() instanceof Array) {
83
+ return this.ids().length
84
+ } else {
85
+ return this.totalCount()
90
86
  }
87
+ }
91
88
 
92
- selectedIdCheckboxes() {
93
- return this.idCheckboxTargets.filter((checkbox) => {
94
- return checkbox.checked
95
- })
89
+ totalCount () {
90
+ if (this.countValue === 0) {
91
+ return this.rowTargets.length
92
+ } else {
93
+ return this.countValue
96
94
  }
95
+ }
97
96
 
98
- toggleIdsCheckboxes(checked) {
99
- this.idsCheckboxTargets.forEach((checkbox) => {
100
- checkbox.checked = checked
101
- });
97
+ ids () {
98
+ if (this.idsCheckboxTarget.checked) {
99
+ return null
100
+ } else {
101
+ return this.selectedIdCheckboxes().map((checkbox) => {
102
+ return checkbox.value
103
+ })
102
104
  }
105
+ }
103
106
 
104
- toggleIdCheckboxes(checked) {
105
- this.idCheckboxTargets.forEach((checkbox) => {
106
- checkbox.checked = checked
107
- });
108
- }
107
+ selectedIdCheckboxes () {
108
+ return this.idCheckboxTargets.filter((checkbox) => {
109
+ return checkbox.checked
110
+ })
111
+ }
112
+
113
+ toggleIdsCheckboxes (checked) {
114
+ this.idsCheckboxTargets.forEach((checkbox) => {
115
+ checkbox.checked = checked
116
+ })
117
+ }
109
118
 
119
+ toggleIdCheckboxes (checked) {
120
+ this.idCheckboxTargets.forEach((checkbox) => {
121
+ checkbox.checked = checked
122
+ })
123
+ }
110
124
  }
@@ -1,41 +1,40 @@
1
- import {Application} from "@hotwired/stimulus"
2
- import BlocksController from "./controllers/blocks_controller"
3
- import DateRangeController from "./controllers/date_range_controller"
4
- import DropzoneController from "./controllers/dropzone_controller"
5
- import FilePreviewController from "./controllers/file_preview_controller"
6
- import FilterController from "./controllers/filter_controller"
7
- import FiltersController from "./controllers/filters_controller"
8
- import FlatpickrController from "./controllers/flatpickr_controller"
9
- import HelloController from "./controllers/hello_controller"
10
- import NotificationController from "./controllers/notification_controller"
11
- import PopupController from "./controllers/popup_controller"
12
- import RedactorxController from "./controllers/redactorx_controller"
13
- import RepeaterController from "./controllers/repeater_controller"
14
- import SelectController from "./controllers/select_controller"
15
- import TableActionsController from "./controllers/table_actions_controller"
16
- import TableController from "./controllers/table_controller"
17
- import Rails from "@rails/ujs";
1
+ /* global Stimulus */
2
+ import { Application } from '@hotwired/stimulus'
3
+ import AutocompleteController from './controllers/autocomplete_controller'
4
+ import BlocksController from './controllers/blocks_controller'
5
+ import DateRangeController from './controllers/date_range_controller'
6
+ import DropzoneController from './controllers/dropzone_controller'
7
+ import FilePreviewController from './controllers/file_preview_controller'
8
+ import FilterController from './controllers/filter_controller'
9
+ import FiltersController from './controllers/filters_controller'
10
+ import FlatpickrController from './controllers/flatpickr_controller'
11
+ import HelloController from './controllers/hello_controller'
12
+ import NotificationController from './controllers/notification_controller'
13
+ import PopupController from './controllers/popup_controller'
14
+ import RedactorxController from './controllers/redactorx_controller'
15
+ import RepeaterController from './controllers/repeater_controller'
16
+ import SelectController from './controllers/select_controller'
17
+ import TableActionsController from './controllers/table_actions_controller'
18
+ import TableController from './controllers/table_controller'
18
19
 
19
20
  export class Headmin {
20
- static start() {
21
- window.Stimulus = window.Stimulus || Application.start()
22
- Stimulus.register("blocks", BlocksController)
23
- Stimulus.register("date_range", DateRangeController)
24
- Stimulus.register("dropzone", DropzoneController)
25
- Stimulus.register("file-preview", FilePreviewController)
26
- Stimulus.register("filter", FilterController)
27
- Stimulus.register("filters", FiltersController)
28
- Stimulus.register("flatpickr", FlatpickrController)
29
- Stimulus.register("hello", HelloController)
30
- Stimulus.register("notification", NotificationController)
31
- Stimulus.register("popup", PopupController)
32
- Stimulus.register("redactorx", RedactorxController)
33
- Stimulus.register("repeater", RepeaterController)
34
- Stimulus.register("select", SelectController)
35
- Stimulus.register("table", TableController)
36
- Stimulus.register("table-actions", TableActionsController)
37
-
38
- // Init Rails UJS
39
- Rails.start()
40
- }
41
- }
21
+ static start () {
22
+ window.Stimulus = window.Stimulus || Application.start()
23
+ Stimulus.register('autocomplete', AutocompleteController)
24
+ Stimulus.register('blocks', BlocksController)
25
+ Stimulus.register('date-range', DateRangeController)
26
+ Stimulus.register('dropzone', DropzoneController)
27
+ Stimulus.register('file-preview', FilePreviewController)
28
+ Stimulus.register('filter', FilterController)
29
+ Stimulus.register('filters', FiltersController)
30
+ Stimulus.register('flatpickr', FlatpickrController)
31
+ Stimulus.register('hello', HelloController)
32
+ Stimulus.register('notification', NotificationController)
33
+ Stimulus.register('popup', PopupController)
34
+ Stimulus.register('redactorx', RedactorxController)
35
+ Stimulus.register('repeater', RepeaterController)
36
+ Stimulus.register('select', SelectController)
37
+ Stimulus.register('table', TableController)
38
+ Stimulus.register('table-actions', TableActionsController)
39
+ }
40
+ }