active_scaffold 4.2.3 → 4.3.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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +16 -1
  3. data/README.md +108 -7
  4. data/app/assets/javascripts/{jquery → active_scaffold}/active_scaffold.js +759 -762
  5. data/app/assets/javascripts/{jquery/date_picker_bridge.js.erb → active_scaffold/date_picker_bridge.js} +0 -3
  6. data/app/assets/javascripts/active_scaffold/load.js +102 -0
  7. data/app/assets/javascripts/active_scaffold.js.erb +3 -27
  8. data/app/assets/stylesheets/active_scaffold/_colours.scss +330 -0
  9. data/app/assets/stylesheets/active_scaffold/_images.scss +65 -0
  10. data/app/assets/stylesheets/{active_scaffold_layout.scss → active_scaffold/_layout.scss} +14 -0
  11. data/app/assets/stylesheets/active_scaffold/_variables.scss +194 -0
  12. data/app/assets/stylesheets/active_scaffold/core.scss +15 -0
  13. data/app/assets/stylesheets/active_scaffold.scss.erb +16 -0
  14. data/app/views/active_scaffold_overrides/_field_search_columns.html.erb +8 -0
  15. data/app/views/active_scaffold_overrides/_form.html.erb +8 -0
  16. data/app/views/active_scaffold_overrides/_form_association.html.erb +3 -1
  17. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +4 -2
  18. data/app/views/active_scaffold_overrides/_show_association.html.erb +2 -1
  19. data/app/views/active_scaffold_overrides/_show_association_horizontal.html.erb +2 -2
  20. data/app/views/active_scaffold_overrides/_show_association_vertical.html.erb +1 -1
  21. data/app/views/active_scaffold_overrides/edit_associated.js.erb +10 -8
  22. data/lib/active_scaffold/actions/core.rb +34 -3
  23. data/lib/active_scaffold/assets/css_deps_generator.rb +42 -0
  24. data/lib/active_scaffold/assets/jquery_ui_manifest.rb +77 -0
  25. data/lib/active_scaffold/assets/jquery_ui_theme_generator.rb +102 -0
  26. data/lib/active_scaffold/assets.rb +109 -0
  27. data/lib/active_scaffold/attribute_params.rb +11 -2
  28. data/lib/active_scaffold/bridges/active_storage/form_ui.rb +1 -1
  29. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +1 -1
  30. data/lib/active_scaffold/bridges/chosen.rb +1 -1
  31. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +1 -1
  32. data/lib/active_scaffold/bridges/file_column/form_ui.rb +1 -1
  33. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +1 -1
  34. data/lib/active_scaffold/bridges/record_select/helpers.rb +1 -1
  35. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +1 -0
  36. data/lib/active_scaffold/bridges/tiny_mce.rb +6 -1
  37. data/lib/active_scaffold/bridges.rb +7 -0
  38. data/lib/active_scaffold/config/core.rb +7 -3
  39. data/lib/active_scaffold/constraints.rb +1 -1
  40. data/lib/active_scaffold/data_structures/action_columns.rb +66 -0
  41. data/lib/active_scaffold/data_structures/bridge.rb +2 -0
  42. data/lib/active_scaffold/data_structures/column.rb +3 -0
  43. data/lib/active_scaffold/engine.rb +40 -0
  44. data/lib/active_scaffold/finder.rb +1 -1
  45. data/lib/active_scaffold/helpers/assets_helpers.rb +39 -0
  46. data/lib/active_scaffold/helpers/controller_helpers.rb +1 -1
  47. data/lib/active_scaffold/helpers/form_column_helpers.rb +57 -532
  48. data/lib/active_scaffold/helpers/form_ui_helpers.rb +530 -0
  49. data/lib/active_scaffold/helpers/human_condition_helpers.rb +1 -0
  50. data/lib/active_scaffold/helpers/list_column_helpers.rb +31 -11
  51. data/lib/active_scaffold/helpers/search_column_helpers.rb +5 -12
  52. data/lib/active_scaffold/helpers/show_column_helpers.rb +4 -2
  53. data/lib/active_scaffold/helpers/view_helpers.rb +12 -0
  54. data/lib/active_scaffold/railties/tasks.rake +10 -0
  55. data/lib/active_scaffold/testing/assert_embedded_load.rb +33 -0
  56. data/lib/active_scaffold/version.rb +2 -2
  57. data/lib/active_scaffold.rb +7 -2
  58. data/lib/tasks/active_scaffold/assets.rake +42 -0
  59. data/lib/tasks/bundle.rake +25 -0
  60. data/vendor/assets/stylesheets/{jquery-ui-theme.css.erb → jquery-ui-theme.css} +17 -17
  61. metadata +26 -28
  62. data/app/assets/stylesheets/active_scaffold.scss +0 -424
  63. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +0 -2
  64. data/app/assets/stylesheets/active_scaffold_images.scss +0 -65
  65. data/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb +0 -13
  66. /data/app/assets/javascripts/{jquery → active_scaffold}/active_scaffold_chosen.js +0 -0
  67. /data/app/assets/javascripts/{jquery → active_scaffold}/draggable_lists.js +0 -0
  68. /data/app/assets/javascripts/{jquery → active_scaffold}/jquery.editinplace.js +0 -0
  69. /data/app/assets/javascripts/{jquery → active_scaffold}/tiny_mce_bridge.js +0 -0
@@ -1,6 +1,3 @@
1
- <%# encoding: utf-8 %>
2
- <% I18n.available_locales.each { |locale| Rails.root.glob("config/locales/#{locale}.*").each { |path| depend_on path.to_s } } %>
3
- <%= ActiveScaffold::Bridges[:date_picker].localization %>
4
1
  Object.getPrototypeOf(jQuery.datepicker)._attachDatepicker_without_inlineSettings = Object.getPrototypeOf(jQuery.datepicker)._attachDatepicker;
5
2
  jQuery.extend(Object.getPrototypeOf(jQuery.datepicker), {
6
3
  _attachDatepicker: function(target, settings) {
@@ -0,0 +1,102 @@
1
+ // ActiveScaffold main entry point
2
+ (function() {
3
+ const config = window.ActiveScaffold?.config || {};
4
+
5
+ // Load dependencies based on configuration
6
+ const loadDependencies = async () => {
7
+ // Always load these
8
+ await loadScript(RAILS_ASSET_URL('/jquery.ba-throttle-debounce.js'));
9
+ await loadScript(RAILS_ASSET_URL('/jquery.visible.min.js'));
10
+
11
+ // Check if jQuery UI should be loaded
12
+ if (config.jqueryUiIncluded) {
13
+ await loadJQueryUI();
14
+ }
15
+
16
+ // Load core ActiveScaffold
17
+ await loadScript(RAILS_ASSET_URL('/active_scaffold/active_scaffold.js'));
18
+ await loadScript(RAILS_ASSET_URL('/active_scaffold/jquery.editinplace.js'));
19
+
20
+ // Load plugins
21
+ if (config.plugins) {
22
+ for (const plugin of config.plugins) {
23
+ await loadScript(plugin);
24
+ }
25
+ }
26
+
27
+ // Load bridges
28
+ if (config.bridges) {
29
+ for (const bridge of config.bridges) {
30
+ await loadScript(bridge);
31
+ }
32
+ }
33
+
34
+ // ALL DEPENDENCIES ARE LOADED NOW
35
+ // Initialize everything
36
+ initializeActiveScaffold();
37
+ };
38
+
39
+ const loadJQueryUI = async () => {
40
+ // Check if jQuery UI is already loaded via importmap or script tag
41
+ if (typeof window.jQuery?.ui === 'undefined') {
42
+ // If using jquery-ui-rails gem with Sprockets/Propshaft
43
+ // We need to load individual components
44
+ if (config.jqueryUi) {
45
+ for (const file of config.jqueryUi) {
46
+ await loadScript(file);
47
+ }
48
+ } else return;
49
+ }
50
+
51
+ // Load jQuery UI addons
52
+ await loadScript(RAILS_ASSET_URL('/jquery-ui-timepicker-addon.js'));
53
+ await loadScript(RAILS_ASSET_URL('/active_scaffold/date_picker_bridge.js'));
54
+ await loadScript(RAILS_ASSET_URL('/active_scaffold/draggable_lists.js'));
55
+
56
+ // Initialize jQuery UI components
57
+ initializeJQueryUI();
58
+ };
59
+
60
+ const loadScript = (path) => {
61
+ return new Promise((resolve, reject) => {
62
+ // Check if already loaded
63
+ if (document.querySelector(`script[src*="${path}"]`)) {
64
+ resolve();
65
+ return;
66
+ }
67
+
68
+ const script = document.createElement('script');
69
+ script.src = path;
70
+ script.async = false;
71
+ script.onload = resolve;
72
+ script.onerror = reject;
73
+ document.head.appendChild(script);
74
+ });
75
+ };
76
+
77
+ const initializeJQueryUI = function() {
78
+ if (config.jqueryUiIncluded && window.jQuery) {
79
+ // Check if datepicker exists
80
+ if (jQuery.datepicker) {
81
+ // Execute the datepicker localization
82
+ // This will be replaced by actual generated code
83
+ eval(config.datepickerLocalization);
84
+ }
85
+ }
86
+ };
87
+
88
+ // NEW: Initialize everything after all scripts are loaded
89
+ const initializeActiveScaffold = () => {
90
+ // Run any post-load initialization
91
+ if (window.jQuery) {
92
+ jQuery(document).trigger('active-scaffold:loaded');
93
+ }
94
+ };
95
+
96
+ // Start loading when DOM is ready
97
+ if (document.readyState === 'loading') {
98
+ document.addEventListener('DOMContentLoaded', loadDependencies);
99
+ } else {
100
+ loadDependencies();
101
+ }
102
+ })();
@@ -1,31 +1,7 @@
1
1
  <%
2
- require_asset 'jquery.ba-throttle-debounce'
3
- if Object.const_defined?(:Jquery)
4
- if Jquery.const_defined?(:Rails) && Jquery::Rails.const_defined?(:JQUERY_UI_VERSION)
5
- require_asset 'jquery-ui'
6
- elsif Jquery.const_defined? :Ui
7
- jquery_ui_prefix = Jquery::Ui::Rails::VERSION < '5.0.0' ? 'jquery.ui.' : 'jquery-ui/'
8
- jquery_ui_widgets_prefix = Jquery::Ui::Rails::VERSION >= '6.0.0' ? 'widgets/' : ''
9
- require_asset "#{jquery_ui_prefix}core" unless Jquery::Ui::Rails::VERSION >= '8.0.0'
10
- require_asset "#{jquery_ui_prefix}effect"
11
- require_asset "#{jquery_ui_prefix}effects/effect-highlight" if Jquery::Ui::Rails::VERSION >= '6.0.0'
12
- require_asset "#{jquery_ui_prefix}#{jquery_ui_widgets_prefix}sortable"
13
- require_asset "#{jquery_ui_prefix}#{jquery_ui_widgets_prefix}draggable"
14
- require_asset "#{jquery_ui_prefix}#{jquery_ui_widgets_prefix}droppable"
15
- require_asset "#{jquery_ui_prefix}#{jquery_ui_widgets_prefix}datepicker"
16
- end
17
- end
2
+ ActiveScaffold::Assets.active_scaffold_javascripts.each { |asset| require_asset asset }
18
3
  if ActiveScaffold.jquery_ui_included?
19
- require_asset 'jquery-ui-timepicker-addon'
20
- require_asset 'jquery/date_picker_bridge'
21
- require_asset 'jquery/draggable_lists'
4
+ I18n.available_locales.each { |locale| Rails.root.glob("config/locales/#{locale}.*").each { |path| depend_on path.to_s } }
22
5
  end
23
- require_asset 'jquery.visible.min'
24
- require_asset 'jquery/active_scaffold'
25
- require_asset 'jquery/jquery.editinplace'
26
- %>
27
- ActiveScaffold.config = <%= ActiveScaffold.js_config.to_json %>;
28
- <%
29
- ActiveScaffold.javascripts.each { |js| require_asset js }
30
- ActiveScaffold::Bridges.all_javascripts.each { |js| require_asset js }
31
6
  %>
7
+ <%= ActiveScaffold::Assets.active_scaffold_js_code %>
@@ -0,0 +1,330 @@
1
+ .active-scaffold a, .active-scaffold a:visited {
2
+ color: var(--as-link-color);
3
+ }
4
+
5
+ .active-scaffold a.disabled {
6
+ color: var(--as-disabled-color);
7
+ }
8
+
9
+ .active-scaffold a:hover, .active-scaffold div.hover, .active-scaffold td span.hover {
10
+ background-color: var(--as-hover-bg);
11
+ }
12
+
13
+ noscript.active-scaffold {
14
+ border-color: var(--as-msg-error-border-color);
15
+ background-color: var(--as-msg-error-bg);
16
+ color: var(--as-column-color);
17
+ }
18
+
19
+ /* Header
20
+ ======================== */
21
+
22
+ .active-scaffold-header h2 {
23
+ color: var(--as-header-color);
24
+ }
25
+
26
+ .active-scaffold div.actions a.separator {
27
+ border-color: var(--as-action-group-border-color);
28
+ }
29
+ .active-scaffold-header div.actions a.disabled {
30
+ color: var(--as-actions-disabled-color);
31
+ }
32
+ .active-scaffold .actions .filters .active {
33
+ color: var(--as-active-filter);
34
+ }
35
+
36
+ /* Table :: Column Headers
37
+ ============================= */
38
+
39
+ .active-scaffold th {
40
+ background-color: var(--as-column-header-bg);
41
+ }
42
+
43
+ .active-scaffold th a,
44
+ .active-scaffold th p {
45
+ background-color: var(--as-column-header-bg);
46
+ }
47
+
48
+ .active-scaffold th a, .active-scaffold th a:visited {
49
+ color: var(--as-column-header-link-color);
50
+ }
51
+
52
+ .active-scaffold th p,
53
+ .active-scaffold .show-view th {
54
+ color: var(--as-column-header-color);
55
+ }
56
+
57
+ .active-scaffold th a:hover {
58
+ background-color: var(--as-column-header-link-hover-bg);
59
+ color: var(--as-column-header-link-hover-color);
60
+ }
61
+
62
+ .active-scaffold th.sorted {
63
+ background-color: var(--as-column-header-sorted-bg);
64
+ }
65
+
66
+ .active-scaffold th.asc a,
67
+ .active-scaffold th.asc a:hover,
68
+ .active-scaffold th.desc a,
69
+ .active-scaffold th.desc a:hover,
70
+ .active-scaffold th.loading a,
71
+ .active-scaffold th.loading a:hover {
72
+ background-color: var(--as-column-header-sorted-bg);
73
+ }
74
+
75
+ /* Table :: Record Rows
76
+ ============================= */
77
+
78
+ .active-scaffold tr.record {
79
+ background-color: var(--as-column-bg);
80
+ }
81
+ .active-scaffold tr.record td {
82
+ color: var(--as-column-color);
83
+ border-color: var(--as-column-border-color);
84
+ }
85
+
86
+ .active-scaffold tr.even-record {
87
+ background-color: var(--as-column-even-bg);
88
+ }
89
+ .active-scaffold tr.even-record td {
90
+ border-left-color: var(--as-column-even-border-color);
91
+ }
92
+
93
+ .active-scaffold tr.record td.sorted {
94
+ background-color: var(--as-column-sorted-bg);
95
+ border-bottom-color: var(--as-column-sorted-border-color);
96
+ }
97
+
98
+ .active-scaffold tr.even-record td.sorted {
99
+ background-color: var(--as-column-even-sorted-bg);
100
+ border-bottom-color: var(--as-column-even-sorted-border-color);
101
+ }
102
+
103
+ .active-scaffold tbody.records td.empty {
104
+ color: var(--as-column-empty-color);
105
+ }
106
+
107
+ /* Table :: Actions (Edit, Delete)
108
+ ============================= */
109
+ .active-scaffold tr.record td.actions {
110
+ border-color: var(--as-column-actions-border-color);
111
+ }
112
+
113
+ .active-scaffold tr.record td.actions table td.separator {
114
+ border-color: var(--as-column-actions-border-color);
115
+ }
116
+
117
+ .active-scaffold tr.record td.actions a.disabled {
118
+ color: var(--as-actions-disabled-color);
119
+ }
120
+
121
+ .active-scaffold .actions .action_group div:hover {
122
+ background-color: var(--as-action-group-hover-bg);
123
+ }
124
+
125
+ .active-scaffold .actions .action_group {
126
+ color: var(--as-action-group-color);
127
+ }
128
+
129
+ .active-scaffold .actions .action_group ul {
130
+ border-color: var(--as-action-group-border-color);
131
+ }
132
+
133
+ .active-scaffold .actions .action_group ul li {
134
+ background-color: var(--as-action-group-items-bg);
135
+ border-color: var(--as-action-group-items-border-color);
136
+ }
137
+
138
+ .active-scaffold .actions .action_group ul li a {
139
+ color: var(--as-action-group-link-color);
140
+ }
141
+
142
+ /* Table :: Inline Adapter
143
+ ============================= */
144
+
145
+ .active-scaffold .view {
146
+ background-color: var(--as-nested-bg);
147
+ border-color: var(--as-nested-border-color);
148
+ }
149
+
150
+ /* Nested
151
+ ======================== */
152
+
153
+ .active-scaffold .active-scaffold .active-scaffold-footer {
154
+ color: var(--as-nested-footer-color);
155
+ }
156
+
157
+ .active-scaffold .active-scaffold tr.record {
158
+ background-color: var(--as-nested-column-bg);
159
+ border-color: var(--as-nested-column-border-color);
160
+ }
161
+ .active-scaffold .active-scaffold tr.even-record {
162
+ background-color: var(--as-nested-column-even-bg);
163
+ }
164
+
165
+ .active-scaffold .active-scaffold td.inline-adapter-cell {
166
+ background-color: var(--as-second-nested-bg);
167
+ border-color: var(--as-second-nested-border-color);
168
+ }
169
+
170
+ .active-scaffold .active-scaffold .active-scaffold td.inline-adapter-cell {
171
+ background-color: var(--as-third-nested-bg);
172
+ border-color: var(--as-third-nested-border-color);
173
+ }
174
+
175
+ /* Footer
176
+ ========================== */
177
+
178
+ .active-scaffold-calculations td {
179
+ background-color: var(--as-calculations-bg);
180
+ border-color: var(--as-calculations-border-color);
181
+ }
182
+
183
+ .active-scaffold-footer .next {
184
+ border-color: var(--as-pagination-border-color);
185
+ }
186
+
187
+ .active-scaffold-footer .previous {
188
+ border-color: var(--as-pagination-border-color);
189
+ }
190
+
191
+ /* Messages
192
+ ========================= */
193
+
194
+
195
+ .active-scaffold .empty-message, .active-scaffold .filtered-message {
196
+ background-color: var(--as-msg-filtered-bg);
197
+ color: var(--as-msg-filtered-color);
198
+ }
199
+
200
+ .active-scaffold .message {
201
+ color: var(--as-msg-color);
202
+ }
203
+
204
+ .active-scaffold .error-message, .active-scaffold-component .error-message {
205
+ border-color: var(--as-msg-error-border-color);
206
+ background-color: var(--as-msg-error-bg);
207
+ }
208
+
209
+ .active-scaffold .warning-message {
210
+ border-color: var(--as-msg-warning-border-color);
211
+ background-color: var(--as-msg-warning-bg);
212
+ }
213
+
214
+ .active-scaffold .info-message {
215
+ border-color: var(--as-msg-info-border-color);
216
+ background-color: var(--as-msg-info-bg);
217
+ }
218
+
219
+ /* Error Styling
220
+ ========================== */
221
+
222
+ .active-scaffold .errorExplanation {
223
+ background-color: var(--as-msg-error-bg);
224
+ border-color: var(--as-msg-error-border-color);
225
+ }
226
+
227
+ .active-scaffold .errorExplanation h2 {
228
+ color: var(--as-msg-color);
229
+ background-color: var(--as-msg-error-border-color);
230
+ }
231
+
232
+ /* Show
233
+ ============================= */
234
+
235
+ .active-scaffold .show-view dt {
236
+ color: var(--as-label-color);
237
+ }
238
+
239
+ /* Form
240
+ ============================== */
241
+
242
+ .active-scaffold h4,
243
+ .active-scaffold h5 {
244
+ color: var(--as-form-title-color);
245
+ }
246
+
247
+ /* Form :: Fields
248
+ ============================== */
249
+
250
+ .active-scaffold label {
251
+ color: var(--as-label-color);
252
+ }
253
+
254
+ .active-scaffold .description {
255
+ color: var(--as-description-color);
256
+ }
257
+
258
+ .active-scaffold label.example {
259
+ color: var(--as-placeholder-color);
260
+ }
261
+
262
+ .active-scaffold input.text-input,
263
+ .active-scaffold select {
264
+ border-color: var(--as-input-border-color);
265
+ }
266
+
267
+ .active-scaffold input:invalid,
268
+ .active-scaffold textarea:invalid,
269
+ .active-scaffold select:invalid,
270
+ .active-scaffold .fieldWithErrors input,
271
+ .active-scaffold .field_with_errors input,
272
+ .active-scaffold .fieldWithErrors textarea,
273
+ .active-scaffold .field_with_errors textarea,
274
+ .active-scaffold .fieldWithErrors select,
275
+ .active-scaffold .field_with_errors select {
276
+ border-color: var(--as-input-error-border-color);
277
+ }
278
+
279
+ .active-scaffold input.example {
280
+ color: var(--as-placeholder-color);
281
+ }
282
+
283
+ .active-scaffold select:focus,
284
+ .active-scaffold input.text-input:focus {
285
+ background-color: var(--as-input-focus-bg);
286
+ }
287
+
288
+ .active-scaffold textarea {
289
+ border-color: var(--as-input-border-color);
290
+ }
291
+
292
+ .active-scaffold form .checkbox-list.draggable-list {
293
+ background-color: var(--as-draggable-list-bg);
294
+ }
295
+
296
+ .active-scaffold form .checkbox-list.draggable-list.selected {
297
+ background-color: var(--as-draggable-list-selected-bg);
298
+ }
299
+ .active-scaffold .ui-droppable-disabled, .active-scaffold .ui-droppable-disabled.selected {
300
+ background-color: var(--as-draggable-list-disabled-bg);
301
+ }
302
+
303
+
304
+ /* Form :: Association Sub-Forms
305
+ ============================== */
306
+
307
+ .active-scaffold .sub-form table th {
308
+ color: var(--as-subform-header-color);
309
+ }
310
+
311
+ .active-scaffold .sub-form .checkbox-list {
312
+ background-color: var(--as-checkbox-list-bg);
313
+ border-color: var(--as-input-border-color);
314
+ }
315
+
316
+ .active-scaffold .vertical-sub-form .sub-form-record + .sub-form-record {
317
+ border-color: var(--as-vertical-sub-form-border-color);
318
+ }
319
+
320
+ .active-scaffold .sub-form table td {
321
+ color: var(--as-subform-color);
322
+ }
323
+
324
+ .active-scaffold .sub-form .footer {
325
+ color: var(--as-subform-footer-color);
326
+ }
327
+
328
+ .as_touch th a, .as_touch th a:visited {
329
+ color: var(--as-column-header-link-color);
330
+ }
@@ -0,0 +1,65 @@
1
+ .active-scaffold-header div.actions div.action_group div {
2
+ background-image: url("active_scaffold/gears.png"); /* default icon for actions or override with css */
3
+ }
4
+
5
+ .active-scaffold-header div.actions a.show_config_list {
6
+ background-image: url("active_scaffold/config.png");
7
+ }
8
+
9
+ .active-scaffold-header div.actions a.new,
10
+ .active-scaffold-header div.actions a.new_existing {
11
+ background-image: url("active_scaffold/add.png");
12
+ }
13
+
14
+ .active-scaffold-header div.actions a.show_search {
15
+ background-image: url("active_scaffold/magnifier.png");
16
+ }
17
+
18
+ .active-scaffold th.asc a {
19
+ background-image: url("active_scaffold/arrow_up.png");
20
+ }
21
+
22
+ .active-scaffold th.desc a {
23
+ background-image: url("active_scaffold/arrow_down.png");
24
+ }
25
+
26
+
27
+ .active-scaffold .draggable-lists-container .check-buttons {
28
+ .check-all, .uncheck-all {
29
+ background-image: url("active_scaffold/fast-arrow-right.svg");
30
+ background-repeat: no-repeat;
31
+ background-size: contain;
32
+ width: 16px;
33
+ text-indent: 20px;
34
+ overflow: hidden;
35
+ white-space: nowrap;
36
+ }
37
+ .uncheck-all {
38
+ background-image: url("active_scaffold/fast-arrow-left.svg");
39
+ }
40
+ }
41
+
42
+ .active-scaffold th.loading a {
43
+ background-image: url("active_scaffold/indicator-small.gif");
44
+ }
45
+
46
+ .active-scaffold a.inline-adapter-close {
47
+ background-image: url("active_scaffold/close.png");
48
+ }
49
+
50
+ .active-scaffold .sub-form .association-record a.destroy {
51
+ background-image: url("active_scaffold/cross.png");
52
+ }
53
+
54
+ .as_touch a.inline-adapter-close {
55
+ background-image: url("active_scaffold/close_touch.png");
56
+ }
57
+ .active-scaffold .refresh-link {
58
+ background-image: url("active_scaffold/refresh.png");
59
+ }
60
+
61
+ .ui-dialog .loading::after {
62
+ background: url("active_scaffold/indicator.gif") no-repeat;
63
+ content: 'Loading...';
64
+ padding-left: 20px;
65
+ }
@@ -380,6 +380,7 @@ text-indent: -4000px;
380
380
  width: 16px;
381
381
  height: 17px;
382
382
  background: 0 0 no-repeat;
383
+ overflow: hidden;
383
384
  }
384
385
 
385
386
  /* Nested
@@ -989,6 +990,19 @@ clear: left;
989
990
  padding: 5px 0;
990
991
  }
991
992
 
993
+ /* Form :: Multiple Columns Layout
994
+ ============================== */
995
+
996
+ .active-scaffold .form-columns {
997
+ display: flex;
998
+ gap: 10px;
999
+
1000
+ > ol.form {
1001
+ flex: 1;
1002
+ min-width: 0;
1003
+ }
1004
+ }
1005
+
992
1006
  /* Form :: Association Sub-Forms
993
1007
  ============================== */
994
1008