active_element 0.0.1 → 0.0.3

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 (113) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -0
  3. data/.strong_versions.yml +2 -0
  4. data/Gemfile +10 -2
  5. data/Gemfile.lock +229 -4
  6. data/Rakefile +1 -0
  7. data/active_element.gemspec +7 -0
  8. data/app/assets/config/active_element/manifest.js +2 -0
  9. data/app/assets/javascripts/active_element/application.js +10 -0
  10. data/app/assets/javascripts/active_element/confirm.js +67 -0
  11. data/app/assets/javascripts/active_element/form.js +61 -0
  12. data/app/assets/javascripts/active_element/json_field.js +316 -0
  13. data/app/assets/javascripts/active_element/pagination.js +18 -0
  14. data/app/assets/javascripts/active_element/search_field.js +127 -0
  15. data/app/assets/javascripts/active_element/secret.js +40 -0
  16. data/app/assets/javascripts/active_element/setup.js +36 -0
  17. data/app/assets/javascripts/active_element/theme.js +42 -0
  18. data/app/assets/stylesheets/active_element/_variables.scss +142 -0
  19. data/app/assets/stylesheets/active_element/application.scss +77 -0
  20. data/app/controllers/active_element/application_controller.rb +41 -0
  21. data/app/controllers/active_element/text_searches_controller.rb +189 -0
  22. data/app/views/active_element/components/_horizontal_tabs.html.erb +32 -0
  23. data/app/views/active_element/components/_vertical_tabs.html.erb +38 -0
  24. data/app/views/active_element/components/button.html.erb +27 -0
  25. data/app/views/active_element/components/fields/_boolean.html.erb +11 -0
  26. data/app/views/active_element/components/form/_check_box.html.erb +3 -0
  27. data/app/views/active_element/components/form/_check_boxes.html.erb +33 -0
  28. data/app/views/active_element/components/form/_field.html.erb +28 -0
  29. data/app/views/active_element/components/form/_generic_field.html.erb +3 -0
  30. data/app/views/active_element/components/form/_json.html.erb +12 -0
  31. data/app/views/active_element/components/form/_label.html.erb +17 -0
  32. data/app/views/active_element/components/form/_option_groups_summary.html.erb +17 -0
  33. data/app/views/active_element/components/form/_select.html.erb +4 -0
  34. data/app/views/active_element/components/form/_summary.html.erb +40 -0
  35. data/app/views/active_element/components/form/_templates.html.erb +85 -0
  36. data/app/views/active_element/components/form/_text_area.html.erb +4 -0
  37. data/app/views/active_element/components/form/_text_search.html.erb +16 -0
  38. data/app/views/active_element/components/form.html.erb +78 -0
  39. data/app/views/active_element/components/json.html.erb +8 -0
  40. data/app/views/active_element/components/page_description.html.erb +3 -0
  41. data/app/views/active_element/components/secret/_field.html.erb +1 -0
  42. data/app/views/active_element/components/secret/_templates.html.erb +11 -0
  43. data/app/views/active_element/components/table/_collection_row.html.erb +30 -0
  44. data/app/views/active_element/components/table/_grouped_collection.html.erb +88 -0
  45. data/app/views/active_element/components/table/_pagination.html.erb +17 -0
  46. data/app/views/active_element/components/table/_ungrouped_collection.html.erb +49 -0
  47. data/app/views/active_element/components/table/collection.html.erb +39 -0
  48. data/app/views/active_element/components/table/item.html.erb +39 -0
  49. data/app/views/active_element/components/tabs.html.erb +7 -0
  50. data/app/views/active_element/decorators/_boolean.html.erb +5 -0
  51. data/app/views/active_element/decorators/_date.html.erb +3 -0
  52. data/app/views/active_element/decorators/_datetime.html.erb +3 -0
  53. data/app/views/active_element/decorators/_time.html.erb +3 -0
  54. data/app/views/active_element/forbidden.html.erb +33 -0
  55. data/app/views/active_element/main_menu/_item.html.erb +9 -0
  56. data/app/views/active_element/navbar/_menu.html.erb +30 -0
  57. data/app/views/active_element/theme/_select.html.erb +1 -0
  58. data/app/views/active_element/theme/_templates.html.erb +6 -0
  59. data/app/views/kaminari/_first_page.html.erb +3 -0
  60. data/app/views/kaminari/_gap.html.erb +3 -0
  61. data/app/views/kaminari/_last_page.html.erb +3 -0
  62. data/app/views/kaminari/_next_page.html.erb +3 -0
  63. data/app/views/kaminari/_page.html.erb +9 -0
  64. data/app/views/kaminari/_paginator.html.erb +17 -0
  65. data/app/views/kaminari/_prev_page.html.erb +3 -0
  66. data/app/views/layouts/active_element.html.erb +65 -0
  67. data/app/views/layouts/active_element_error.html.erb +40 -0
  68. data/config/routes.rb +5 -0
  69. data/lib/active_element/active_menu_link.rb +80 -0
  70. data/lib/active_element/active_record_text_search_authorization.rb +12 -0
  71. data/lib/active_element/colorized_string.rb +33 -0
  72. data/lib/active_element/component.rb +122 -0
  73. data/lib/active_element/components/button.rb +156 -0
  74. data/lib/active_element/components/collection_table.rb +118 -0
  75. data/lib/active_element/components/form.rb +210 -0
  76. data/lib/active_element/components/item_table.rb +57 -0
  77. data/lib/active_element/components/json.rb +31 -0
  78. data/lib/active_element/components/link_helpers.rb +9 -0
  79. data/lib/active_element/components/page_description.rb +28 -0
  80. data/lib/active_element/components/secret_fields.rb +15 -0
  81. data/lib/active_element/components/tab.rb +37 -0
  82. data/lib/active_element/components/tabs.rb +35 -0
  83. data/lib/active_element/components/translations.rb +18 -0
  84. data/lib/active_element/components/util/association_mapping.rb +80 -0
  85. data/lib/active_element/components/util/decorator.rb +107 -0
  86. data/lib/active_element/components/util/display_value_mapping.rb +48 -0
  87. data/lib/active_element/components/util/field_mapping.rb +144 -0
  88. data/lib/active_element/components/util/form_field_mapping.rb +104 -0
  89. data/lib/active_element/components/util/form_value_mapping.rb +49 -0
  90. data/lib/active_element/components/util/i18n.rb +66 -0
  91. data/lib/active_element/components/util/record_mapping.rb +111 -0
  92. data/lib/active_element/components/util.rb +43 -0
  93. data/lib/active_element/components.rb +20 -0
  94. data/lib/active_element/controller_action.rb +91 -0
  95. data/lib/active_element/engine.rb +26 -0
  96. data/lib/active_element/permissions_check.rb +101 -0
  97. data/lib/active_element/rails_component.rb +40 -0
  98. data/lib/active_element/route.rb +112 -0
  99. data/lib/active_element/routes.rb +62 -0
  100. data/lib/active_element/version.rb +1 -1
  101. data/lib/active_element.rb +91 -1
  102. data/lib/tasks/active_element.rake +23 -0
  103. data/rspec-documentation/dummy +1 -0
  104. data/rspec-documentation/pages/Components/Forms.md +1 -0
  105. data/rspec-documentation/pages/Components/Tables.md +47 -0
  106. data/rspec-documentation/pages/Components/Tabs.md +1 -0
  107. data/rspec-documentation/pages/Components.md +1 -0
  108. data/rspec-documentation/pages/Decorators/Inline Decorators.md +1 -0
  109. data/rspec-documentation/pages/Decorators/View Decorators.md +1 -0
  110. data/rspec-documentation/pages/Index.md +3 -0
  111. data/rspec-documentation/pages/Util/I18n.md +1 -0
  112. data/rspec-documentation/spec_helper.rb +35 -0
  113. metadata +191 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: afb96a2b7a2ca7ac8768510fbb0c528d64be469548ea93c992fa219115a8d0d1
4
- data.tar.gz: 212b8c645330e6c77da4a42eeb4040ad4d86a6c4c87bd3b555cebab4e26ee087
3
+ metadata.gz: 655d08db8eadabaadb33cb07a264edaa864eda4173c11bc3f2cf5655eb3a6227
4
+ data.tar.gz: a194ffc1b2e3b0debe6f6bbc8173ed0ba8ae7125dfaf63b4e8794c01fc66f04a
5
5
  SHA512:
6
- metadata.gz: ce1ced7c4762bcde8c4d23bd0a57f41502ee72a2bb23bbd9b5f5cbceba9b855550185af044e424eabf4cd4875563df8989295b9a7360a0b79ce4af1f337e447f
7
- data.tar.gz: 7529e884ff689f4b9bd301d05335e7fa2f0d898eb53e6af0d5a4cfe4c5ad79f536585392a5d03bcdbbf8bd7d15f28d6cb836957edc8761aab8a11dcbcb5db8d3
6
+ metadata.gz: 2f0fc5677bfb2c341aedab2b4bf5f0c1150731bea95331f71bc0a1102a0bd8d9d89aba94c427e603328225feac7273ed5f6ca55616eb11f88852b8eeeae06a19
7
+ data.tar.gz: 17e0e9b4dbc007e6ad6c7aabd941100a24188c461bfe6a35b781b7a4538b7b7b02b59c2733e5326f9946ac2097975be6205482a0f4fa04e35e34bf093c433baf
data/.rubocop.yml CHANGED
@@ -5,3 +5,15 @@ require:
5
5
 
6
6
  AllCops:
7
7
  NewCops: enable
8
+ Exclude:
9
+ - 'bin/**/*'
10
+ - 'spec/dummy/bin/**/*'
11
+ - 'rspec-documentation/**/*'
12
+
13
+ RSpec/MultipleMemoizedHelpers:
14
+ Max: 8
15
+
16
+ Metrics/ParameterLists:
17
+ Exclude:
18
+ - 'lib/active_element/components/**/*.rb'
19
+ - 'lib/active_element/active_element_component.rb'
@@ -0,0 +1,2 @@
1
+ ignore:
2
+ - bootstrap
data/Gemfile CHANGED
@@ -5,11 +5,19 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in active_element.gemspec
6
6
  gemspec
7
7
 
8
+ gem 'devise', '~> 4.9'
9
+ gem 'devpack', '~> 0.4.1'
10
+ gem 'factory_bot_rails', '~> 5.2'
8
11
  gem 'rake', '~> 13.0'
9
-
10
- gem 'rspec', '~> 3.0'
12
+ gem 'rspec', '~> 3.12'
13
+ gem 'rspec-file_fixtures', '~> 0.1.6'
14
+ gem 'rspec-html', '~> 0.3.2'
15
+ gem 'rspec-its', '~> 1.3'
16
+ gem 'rspec-rails', '~> 6.0'
11
17
  gem 'rubocop', '~> 1.51'
12
18
  gem 'rubocop-rails', '~> 2.19'
13
19
  gem 'rubocop-rake', '~> 0.6.0'
14
20
  gem 'rubocop-rspec', '~> 2.22'
21
+ gem 'sqlite3', '~> 1.6'
15
22
  gem 'strong_versions', '~> 0.4.5'
23
+ gem 'webmock', '~> 3.18'
data/Gemfile.lock CHANGED
@@ -1,32 +1,201 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_element (0.0.1)
4
+ active_element (0.0.3)
5
+ bootstrap (~> 5.3.0alpha3)
6
+ faraday (~> 2.7)
7
+ kaminari (~> 1.2)
8
+ rails (~> 6.1)
9
+ rouge (~> 4.1)
10
+ sassc (~> 2.4)
5
11
 
6
12
  GEM
7
13
  remote: https://rubygems.org/
8
14
  specs:
9
- activesupport (7.0.4.3)
15
+ actioncable (6.1.7.3)
16
+ actionpack (= 6.1.7.3)
17
+ activesupport (= 6.1.7.3)
18
+ nio4r (~> 2.0)
19
+ websocket-driver (>= 0.6.1)
20
+ actionmailbox (6.1.7.3)
21
+ actionpack (= 6.1.7.3)
22
+ activejob (= 6.1.7.3)
23
+ activerecord (= 6.1.7.3)
24
+ activestorage (= 6.1.7.3)
25
+ activesupport (= 6.1.7.3)
26
+ mail (>= 2.7.1)
27
+ actionmailer (6.1.7.3)
28
+ actionpack (= 6.1.7.3)
29
+ actionview (= 6.1.7.3)
30
+ activejob (= 6.1.7.3)
31
+ activesupport (= 6.1.7.3)
32
+ mail (~> 2.5, >= 2.5.4)
33
+ rails-dom-testing (~> 2.0)
34
+ actionpack (6.1.7.3)
35
+ actionview (= 6.1.7.3)
36
+ activesupport (= 6.1.7.3)
37
+ rack (~> 2.0, >= 2.0.9)
38
+ rack-test (>= 0.6.3)
39
+ rails-dom-testing (~> 2.0)
40
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
41
+ actiontext (6.1.7.3)
42
+ actionpack (= 6.1.7.3)
43
+ activerecord (= 6.1.7.3)
44
+ activestorage (= 6.1.7.3)
45
+ activesupport (= 6.1.7.3)
46
+ nokogiri (>= 1.8.5)
47
+ actionview (6.1.7.3)
48
+ activesupport (= 6.1.7.3)
49
+ builder (~> 3.1)
50
+ erubi (~> 1.4)
51
+ rails-dom-testing (~> 2.0)
52
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
53
+ activejob (6.1.7.3)
54
+ activesupport (= 6.1.7.3)
55
+ globalid (>= 0.3.6)
56
+ activemodel (6.1.7.3)
57
+ activesupport (= 6.1.7.3)
58
+ activerecord (6.1.7.3)
59
+ activemodel (= 6.1.7.3)
60
+ activesupport (= 6.1.7.3)
61
+ activestorage (6.1.7.3)
62
+ actionpack (= 6.1.7.3)
63
+ activejob (= 6.1.7.3)
64
+ activerecord (= 6.1.7.3)
65
+ activesupport (= 6.1.7.3)
66
+ marcel (~> 1.0)
67
+ mini_mime (>= 1.1.0)
68
+ activesupport (6.1.7.3)
10
69
  concurrent-ruby (~> 1.0, >= 1.0.2)
11
70
  i18n (>= 1.6, < 2)
12
71
  minitest (>= 5.1)
13
72
  tzinfo (~> 2.0)
73
+ zeitwerk (~> 2.3)
74
+ addressable (2.8.4)
75
+ public_suffix (>= 2.0.2, < 6.0)
14
76
  ast (2.4.2)
77
+ autoprefixer-rails (10.4.13.0)
78
+ execjs (~> 2)
79
+ bcrypt (3.1.18)
80
+ bootstrap (5.3.0.alpha3)
81
+ autoprefixer-rails (>= 9.1.0)
82
+ popper_js (>= 2.11.7, < 3)
83
+ sassc-rails (>= 2.0.0)
84
+ builder (3.2.4)
15
85
  concurrent-ruby (1.2.2)
86
+ crack (0.4.5)
87
+ rexml
88
+ crass (1.0.6)
89
+ date (3.3.3)
90
+ devise (4.9.2)
91
+ bcrypt (~> 3.0)
92
+ orm_adapter (~> 0.1)
93
+ railties (>= 4.1.0)
94
+ responders
95
+ warden (~> 1.2.3)
96
+ devpack (0.4.1)
16
97
  diff-lcs (1.5.0)
98
+ erubi (1.12.0)
99
+ execjs (2.8.1)
100
+ factory_bot (5.2.0)
101
+ activesupport (>= 4.2.0)
102
+ factory_bot_rails (5.2.0)
103
+ factory_bot (~> 5.2.0)
104
+ railties (>= 4.2.0)
105
+ faraday (2.7.5)
106
+ faraday-net_http (>= 2.0, < 3.1)
107
+ ruby2_keywords (>= 0.0.4)
108
+ faraday-net_http (3.0.2)
109
+ ffi (1.15.5)
110
+ globalid (1.1.0)
111
+ activesupport (>= 5.0)
112
+ hashdiff (1.0.1)
17
113
  i18n (1.13.0)
18
114
  concurrent-ruby (~> 1.0)
19
115
  json (2.6.3)
116
+ kaminari (1.2.2)
117
+ activesupport (>= 4.1.0)
118
+ kaminari-actionview (= 1.2.2)
119
+ kaminari-activerecord (= 1.2.2)
120
+ kaminari-core (= 1.2.2)
121
+ kaminari-actionview (1.2.2)
122
+ actionview
123
+ kaminari-core (= 1.2.2)
124
+ kaminari-activerecord (1.2.2)
125
+ activerecord
126
+ kaminari-core (= 1.2.2)
127
+ kaminari-core (1.2.2)
128
+ loofah (2.21.3)
129
+ crass (~> 1.0.2)
130
+ nokogiri (>= 1.12.0)
131
+ mail (2.8.1)
132
+ mini_mime (>= 0.1.1)
133
+ net-imap
134
+ net-pop
135
+ net-smtp
136
+ marcel (1.0.2)
137
+ method_source (1.0.0)
138
+ mini_mime (1.1.2)
139
+ mini_portile2 (2.8.2)
20
140
  minitest (5.18.0)
141
+ net-imap (0.3.4)
142
+ date
143
+ net-protocol
144
+ net-pop (0.1.2)
145
+ net-protocol
146
+ net-protocol (0.2.1)
147
+ timeout
148
+ net-smtp (0.3.3)
149
+ net-protocol
150
+ nio4r (2.5.9)
151
+ nokogiri (1.15.1)
152
+ mini_portile2 (~> 2.8.2)
153
+ racc (~> 1.4)
154
+ orm_adapter (0.5.0)
21
155
  paint (2.3.0)
22
156
  parallel (1.23.0)
23
157
  parser (3.2.2.1)
24
158
  ast (~> 2.4.1)
25
- rack (3.0.7)
159
+ popper_js (2.11.7)
160
+ public_suffix (5.0.1)
161
+ racc (1.6.2)
162
+ rack (2.2.7)
163
+ rack-test (2.1.0)
164
+ rack (>= 1.3)
165
+ rails (6.1.7.3)
166
+ actioncable (= 6.1.7.3)
167
+ actionmailbox (= 6.1.7.3)
168
+ actionmailer (= 6.1.7.3)
169
+ actionpack (= 6.1.7.3)
170
+ actiontext (= 6.1.7.3)
171
+ actionview (= 6.1.7.3)
172
+ activejob (= 6.1.7.3)
173
+ activemodel (= 6.1.7.3)
174
+ activerecord (= 6.1.7.3)
175
+ activestorage (= 6.1.7.3)
176
+ activesupport (= 6.1.7.3)
177
+ bundler (>= 1.15.0)
178
+ railties (= 6.1.7.3)
179
+ sprockets-rails (>= 2.0.0)
180
+ rails-dom-testing (2.0.3)
181
+ activesupport (>= 4.2.0)
182
+ nokogiri (>= 1.6)
183
+ rails-html-sanitizer (1.5.0)
184
+ loofah (~> 2.19, >= 2.19.1)
185
+ railties (6.1.7.3)
186
+ actionpack (= 6.1.7.3)
187
+ activesupport (= 6.1.7.3)
188
+ method_source
189
+ rake (>= 12.2)
190
+ thor (~> 1.0)
26
191
  rainbow (3.1.1)
27
192
  rake (13.0.6)
28
193
  regexp_parser (2.8.0)
194
+ responders (3.1.0)
195
+ actionpack (>= 5.2)
196
+ railties (>= 5.2)
29
197
  rexml (3.2.5)
198
+ rouge (4.1.1)
30
199
  rspec (3.12.0)
31
200
  rspec-core (~> 3.12.0)
32
201
  rspec-expectations (~> 3.12.0)
@@ -36,9 +205,25 @@ GEM
36
205
  rspec-expectations (3.12.3)
37
206
  diff-lcs (>= 1.2.0, < 2.0)
38
207
  rspec-support (~> 3.12.0)
208
+ rspec-file_fixtures (0.1.6)
209
+ rspec (~> 3.0)
210
+ rspec-html (0.3.2)
211
+ nokogiri (~> 1.10)
212
+ rspec (~> 3.0)
213
+ rspec-its (1.3.0)
214
+ rspec-core (>= 3.0.0)
215
+ rspec-expectations (>= 3.0.0)
39
216
  rspec-mocks (3.12.5)
40
217
  diff-lcs (>= 1.2.0, < 2.0)
41
218
  rspec-support (~> 3.12.0)
219
+ rspec-rails (6.0.2)
220
+ actionpack (>= 6.1)
221
+ activesupport (>= 6.1)
222
+ railties (>= 6.1)
223
+ rspec-core (~> 3.12)
224
+ rspec-expectations (~> 3.12)
225
+ rspec-mocks (~> 3.12)
226
+ rspec-support (~> 3.12)
42
227
  rspec-support (3.12.0)
43
228
  rubocop (1.51.0)
44
229
  json (~> 2.3)
@@ -67,25 +252,65 @@ GEM
67
252
  rubocop-capybara (~> 2.17)
68
253
  rubocop-factory_bot (~> 2.22)
69
254
  ruby-progressbar (1.13.0)
255
+ ruby2_keywords (0.0.5)
256
+ sassc (2.4.0)
257
+ ffi (~> 1.9)
258
+ sassc-rails (2.1.2)
259
+ railties (>= 4.0.0)
260
+ sassc (>= 2.0)
261
+ sprockets (> 3.0)
262
+ sprockets-rails
263
+ tilt
264
+ sprockets (4.2.0)
265
+ concurrent-ruby (~> 1.0)
266
+ rack (>= 2.2.4, < 4)
267
+ sprockets-rails (3.4.2)
268
+ actionpack (>= 5.2)
269
+ activesupport (>= 5.2)
270
+ sprockets (>= 3.0.0)
271
+ sqlite3 (1.6.3)
272
+ mini_portile2 (~> 2.8.0)
70
273
  strong_versions (0.4.5)
71
274
  i18n (>= 0.5)
72
275
  paint (~> 2.0)
276
+ thor (1.2.2)
277
+ tilt (2.1.0)
278
+ timeout (0.3.2)
73
279
  tzinfo (2.0.6)
74
280
  concurrent-ruby (~> 1.0)
75
281
  unicode-display_width (2.4.2)
282
+ warden (1.2.9)
283
+ rack (>= 2.0.9)
284
+ webmock (3.18.1)
285
+ addressable (>= 2.8.0)
286
+ crack (>= 0.3.2)
287
+ hashdiff (>= 0.4.0, < 2.0.0)
288
+ websocket-driver (0.7.5)
289
+ websocket-extensions (>= 0.1.0)
290
+ websocket-extensions (0.1.5)
291
+ zeitwerk (2.6.8)
76
292
 
77
293
  PLATFORMS
78
294
  ruby
79
295
 
80
296
  DEPENDENCIES
81
297
  active_element!
298
+ devise (~> 4.9)
299
+ devpack (~> 0.4.1)
300
+ factory_bot_rails (~> 5.2)
82
301
  rake (~> 13.0)
83
- rspec (~> 3.0)
302
+ rspec (~> 3.12)
303
+ rspec-file_fixtures (~> 0.1.6)
304
+ rspec-html (~> 0.3.2)
305
+ rspec-its (~> 1.3)
306
+ rspec-rails (~> 6.0)
84
307
  rubocop (~> 1.51)
85
308
  rubocop-rails (~> 2.19)
86
309
  rubocop-rake (~> 0.6.0)
87
310
  rubocop-rspec (~> 2.22)
311
+ sqlite3 (~> 1.6)
88
312
  strong_versions (~> 0.4.5)
313
+ webmock (~> 3.18)
89
314
 
90
315
  BUNDLED WITH
91
316
  2.1.4
data/Rakefile CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
+ require 'active_element'
5
6
 
6
7
  RSpec::Core::RakeTask.new(:spec)
7
8
 
@@ -29,4 +29,11 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ['lib']
31
31
  spec.metadata['rubygems_mfa_required'] = 'true'
32
+
33
+ spec.add_runtime_dependency 'bootstrap', '~> 5.3.0alpha3'
34
+ spec.add_runtime_dependency 'faraday', '~> 2.7'
35
+ spec.add_runtime_dependency 'kaminari', '~> 1.2'
36
+ spec.add_runtime_dependency 'rails', '~> 6.1'
37
+ spec.add_runtime_dependency 'rouge', '~> 4.1'
38
+ spec.add_runtime_dependency 'sassc', '~> 2.4'
32
39
  end
@@ -0,0 +1,2 @@
1
+ //= link active_element/application.js
2
+ //= link active_element/application.css
@@ -0,0 +1,10 @@
1
+ //= require rails-ujs
2
+ //= require bootstrap
3
+ //= require active_element/setup
4
+ //= require active_element/theme
5
+ //= require active_element/secret
6
+ //= require active_element/json_field
7
+ //= require active_element/search_field
8
+ //= require active_element/form
9
+ //= require active_element/confirm
10
+ //= require active_element/pagination
@@ -0,0 +1,67 @@
1
+ (() => {
2
+ const cloneElement = (id) => ActiveElement.cloneElement('form', id);
3
+
4
+ window.addEventListener('DOMContentLoaded', () => {
5
+ const confirmLinks = document.querySelectorAll('[data-confirm-action="true"]');
6
+
7
+ confirmLinks.forEach((element) => {
8
+ const modal = cloneElement('modal');
9
+ const modalDialog = modal.querySelector('.modal-dialog');
10
+ const modalBody = modal.querySelector('[data-field-type="modal-body"]');
11
+ const modalFooter = modal.querySelector('[data-field-type="modal-footer"]');
12
+ const bootstrapModal = new bootstrap.Modal(modal);
13
+ const title = 'Confirm';
14
+ const titleElement = modal.querySelector('[data-field-type="modal-title"]');
15
+ const confirmButton = cloneElement('confirm-button');
16
+ const confirmButtonLink = confirmButton.querySelector('a');
17
+ const cancelButton = cloneElement('cancel-button');
18
+ const cancelButtonLink = confirmButton.querySelector('a');
19
+
20
+ element.dataset.actionConfirmed = 'false';
21
+ titleElement.append(title);
22
+ modalDialog.classList.remove('modal-xl');
23
+ modalBody.append('Are you sure you want to perform this action?');
24
+ modalFooter.append(cancelButton);
25
+ modalFooter.append(confirmButton);
26
+
27
+
28
+ if (element.dataset.method === 'delete') {
29
+ confirmButtonLink.classList.remove('btn-primary');
30
+ confirmButtonLink.classList.add('btn-danger');
31
+ }
32
+
33
+ cancelButton.addEventListener('click', (ev) => {
34
+ ev.stopPropagation();
35
+ ev.preventDefault();
36
+
37
+ bootstrapModal.hide();
38
+
39
+ return false;
40
+ });
41
+
42
+ confirmButtonLink.addEventListener('click', (ev) => {
43
+ ev.stopPropagation();
44
+ ev.preventDefault();
45
+
46
+ element.dataset.actionConfirmed = 'true';
47
+ element.click();
48
+
49
+ return false;
50
+ });
51
+
52
+ element.addEventListener('click', (ev) => {
53
+ if (element.dataset.actionConfirmed === 'true') {
54
+ element.dataset.actionConfirmed = 'false';
55
+
56
+ return true;
57
+ }
58
+
59
+ ev.stopPropagation();
60
+ ev.preventDefault();
61
+ bootstrapModal.show();
62
+
63
+ return false;
64
+ });
65
+ });
66
+ });
67
+ })();
@@ -0,0 +1,61 @@
1
+ (() => {
2
+ const cloneElement = (id) => ActiveElement.cloneElement('form', id);
3
+
4
+ const initExpandButtons = () => {
5
+ document.querySelectorAll('[data-field-type="form-expand"]').forEach((element) => {
6
+ const formId = element.dataset.formId;
7
+ const form = document.querySelector(`#${formId}`);
8
+ const wrapper = document.querySelector(`#form-wrapper-${formId}`);
9
+ const expandButton = cloneElement('expand-button');
10
+ const collapseButton = cloneElement('collapse-button');
11
+
12
+ collapseButton.classList.add('d-none');
13
+ wrapper.classList.add('collapsed');
14
+
15
+ const toggle = ({ show, ev }) => {
16
+ ev.stopPropagation();
17
+ form.classList.remove('d-none');
18
+ collapseButton.classList.toggle('d-none');
19
+ expandButton.classList.toggle('d-none');
20
+ wrapper.classList.toggle('collapsed');
21
+
22
+ return false;
23
+ };
24
+
25
+ expandButton.addEventListener('click', (ev) => toggle({ show: true, ev }));
26
+ collapseButton.addEventListener('click', (ev) => toggle({ show: false, ev }));
27
+
28
+ element.append(expandButton);
29
+ element.append(collapseButton);
30
+ });
31
+ };
32
+
33
+ const initPopupButtons = () => {
34
+ document.querySelectorAll('[data-field-type="form-modal"]').forEach((element) => {
35
+ const formId = element.dataset.formId;
36
+ const form = document.querySelector(`#${formId}`);
37
+ const wrapper = document.querySelector(`#form-wrapper-${formId}`);
38
+ const modal = cloneElement('modal');
39
+ const modalBody = modal.querySelector('[data-field-type="modal-body"]');
40
+ const bootstrapModal = new bootstrap.Modal(modal);
41
+ const title = element.dataset.formTitle;
42
+ const titleElement = modal.querySelector('[data-field-type="modal-title"]');
43
+ titleElement.append(title);
44
+
45
+ modalBody.append(form);
46
+
47
+ document.body.append(modal);
48
+
49
+ element.addEventListener('click', () => {
50
+ wrapper.classList.remove('d-none');
51
+ bootstrapModal.toggle();
52
+ return false;
53
+ });
54
+ });
55
+ };
56
+
57
+ window.addEventListener('DOMContentLoaded', () => {
58
+ initExpandButtons();
59
+ initPopupButtons();
60
+ });
61
+ })();