active_element 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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 +11 -2
  5. data/Gemfile.lock +230 -3
  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: 26b1ee53510a64cb3215d2fc26b93bea88eb02e6dc9da9ceed48c64af7bdd4eb
4
+ data.tar.gz: e942cc5ce6c22b456c40aa999304681970bb760a437bafd9a7f65a6365f8a487
5
5
  SHA512:
6
- metadata.gz: ce1ced7c4762bcde8c4d23bd0a57f41502ee72a2bb23bbd9b5f5cbceba9b855550185af044e424eabf4cd4875563df8989295b9a7360a0b79ce4af1f337e447f
7
- data.tar.gz: 7529e884ff689f4b9bd301d05335e7fa2f0d898eb53e6af0d5a4cfe4c5ad79f536585392a5d03bcdbbf8bd7d15f28d6cb836957edc8761aab8a11dcbcb5db8d3
6
+ metadata.gz: e3d5d2b2882d1e3ddcbe4c3d3c3aadd39bac2762148812d463d6e6df81972f54108f3ac43b195525550ea8cf6e19b30cb8e59431033b161b771e2a863f5269f9
7
+ data.tar.gz: d6d4a623ff93445d973ab43ac94c74eb617f6ab73f3ab49bffee3f9a018bda34acc2e9a020c38f537ca8e49c5d3bb4386ef62102cf7b2e4ce2ba0bb1220cc7b6
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,20 @@ 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-documentation'
14
+ gem 'rspec-file_fixtures', '~> 0.1.6'
15
+ gem 'rspec-html', '~> 0.3.2'
16
+ gem 'rspec-its', '~> 1.3'
17
+ gem 'rspec-rails', '~> 6.0'
11
18
  gem 'rubocop', '~> 1.51'
12
19
  gem 'rubocop-rails', '~> 2.19'
13
20
  gem 'rubocop-rake', '~> 0.6.0'
14
21
  gem 'rubocop-rspec', '~> 2.22'
22
+ gem 'sqlite3', '~> 1.6'
15
23
  gem 'strong_versions', '~> 0.4.5'
24
+ gem 'webmock', '~> 3.18'
data/Gemfile.lock CHANGED
@@ -2,43 +2,229 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  active_element (0.0.1)
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.4)
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)
33
202
  rspec-mocks (~> 3.12.0)
34
203
  rspec-core (3.12.2)
35
204
  rspec-support (~> 3.12.0)
205
+ rspec-documentation (0.0.1)
36
206
  rspec-expectations (3.12.3)
37
207
  diff-lcs (>= 1.2.0, < 2.0)
38
208
  rspec-support (~> 3.12.0)
209
+ rspec-file_fixtures (0.1.6)
210
+ rspec (~> 3.0)
211
+ rspec-html (0.3.2)
212
+ nokogiri (~> 1.10)
213
+ rspec (~> 3.0)
214
+ rspec-its (1.3.0)
215
+ rspec-core (>= 3.0.0)
216
+ rspec-expectations (>= 3.0.0)
39
217
  rspec-mocks (3.12.5)
40
218
  diff-lcs (>= 1.2.0, < 2.0)
41
219
  rspec-support (~> 3.12.0)
220
+ rspec-rails (6.0.2)
221
+ actionpack (>= 6.1)
222
+ activesupport (>= 6.1)
223
+ railties (>= 6.1)
224
+ rspec-core (~> 3.12)
225
+ rspec-expectations (~> 3.12)
226
+ rspec-mocks (~> 3.12)
227
+ rspec-support (~> 3.12)
42
228
  rspec-support (3.12.0)
43
229
  rubocop (1.51.0)
44
230
  json (~> 2.3)
@@ -67,25 +253,66 @@ GEM
67
253
  rubocop-capybara (~> 2.17)
68
254
  rubocop-factory_bot (~> 2.22)
69
255
  ruby-progressbar (1.13.0)
256
+ ruby2_keywords (0.0.5)
257
+ sassc (2.4.0)
258
+ ffi (~> 1.9)
259
+ sassc-rails (2.1.2)
260
+ railties (>= 4.0.0)
261
+ sassc (>= 2.0)
262
+ sprockets (> 3.0)
263
+ sprockets-rails
264
+ tilt
265
+ sprockets (4.2.0)
266
+ concurrent-ruby (~> 1.0)
267
+ rack (>= 2.2.4, < 4)
268
+ sprockets-rails (3.4.2)
269
+ actionpack (>= 5.2)
270
+ activesupport (>= 5.2)
271
+ sprockets (>= 3.0.0)
272
+ sqlite3 (1.6.3)
273
+ mini_portile2 (~> 2.8.0)
70
274
  strong_versions (0.4.5)
71
275
  i18n (>= 0.5)
72
276
  paint (~> 2.0)
277
+ thor (1.2.2)
278
+ tilt (2.1.0)
279
+ timeout (0.3.2)
73
280
  tzinfo (2.0.6)
74
281
  concurrent-ruby (~> 1.0)
75
282
  unicode-display_width (2.4.2)
283
+ warden (1.2.9)
284
+ rack (>= 2.0.9)
285
+ webmock (3.18.1)
286
+ addressable (>= 2.8.0)
287
+ crack (>= 0.3.2)
288
+ hashdiff (>= 0.4.0, < 2.0.0)
289
+ websocket-driver (0.7.5)
290
+ websocket-extensions (>= 0.1.0)
291
+ websocket-extensions (0.1.5)
292
+ zeitwerk (2.6.8)
76
293
 
77
294
  PLATFORMS
78
295
  ruby
79
296
 
80
297
  DEPENDENCIES
81
298
  active_element!
299
+ devise (~> 4.9)
300
+ devpack (~> 0.4.1)
301
+ factory_bot_rails (~> 5.2)
82
302
  rake (~> 13.0)
83
- rspec (~> 3.0)
303
+ rspec (~> 3.12)
304
+ rspec-documentation
305
+ rspec-file_fixtures (~> 0.1.6)
306
+ rspec-html (~> 0.3.2)
307
+ rspec-its (~> 1.3)
308
+ rspec-rails (~> 6.0)
84
309
  rubocop (~> 1.51)
85
310
  rubocop-rails (~> 2.19)
86
311
  rubocop-rake (~> 0.6.0)
87
312
  rubocop-rspec (~> 2.22)
313
+ sqlite3 (~> 1.6)
88
314
  strong_versions (~> 0.4.5)
315
+ webmock (~> 3.18)
89
316
 
90
317
  BUNDLED WITH
91
318
  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
+ })();