active_scaffold 4.2.2 → 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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.rdoc +22 -0
  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} +21 -1
  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/logical_query_parser/keyword_query_parser.rb +23 -0
  34. data/lib/active_scaffold/bridges/logical_query_parser.rb +3 -2
  35. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +1 -1
  36. data/lib/active_scaffold/bridges/record_select/helpers.rb +1 -1
  37. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +1 -0
  38. data/lib/active_scaffold/bridges/tiny_mce.rb +6 -1
  39. data/lib/active_scaffold/bridges.rb +7 -0
  40. data/lib/active_scaffold/config/core.rb +7 -3
  41. data/lib/active_scaffold/constraints.rb +37 -32
  42. data/lib/active_scaffold/data_structures/action_columns.rb +66 -0
  43. data/lib/active_scaffold/data_structures/bridge.rb +2 -0
  44. data/lib/active_scaffold/data_structures/column.rb +4 -1
  45. data/lib/active_scaffold/engine.rb +40 -0
  46. data/lib/active_scaffold/finder.rb +10 -7
  47. data/lib/active_scaffold/helpers/assets_helpers.rb +39 -0
  48. data/lib/active_scaffold/helpers/controller_helpers.rb +1 -1
  49. data/lib/active_scaffold/helpers/form_column_helpers.rb +57 -532
  50. data/lib/active_scaffold/helpers/form_ui_helpers.rb +530 -0
  51. data/lib/active_scaffold/helpers/human_condition_helpers.rb +1 -0
  52. data/lib/active_scaffold/helpers/list_column_helpers.rb +31 -11
  53. data/lib/active_scaffold/helpers/search_column_helpers.rb +7 -14
  54. data/lib/active_scaffold/helpers/show_column_helpers.rb +4 -2
  55. data/lib/active_scaffold/helpers/view_helpers.rb +12 -0
  56. data/lib/active_scaffold/railties/tasks.rake +10 -0
  57. data/lib/active_scaffold/testing/assert_embedded_load.rb +33 -0
  58. data/lib/active_scaffold/version.rb +2 -2
  59. data/lib/active_scaffold.rb +7 -2
  60. data/lib/tasks/active_scaffold/assets.rake +42 -0
  61. data/lib/tasks/bundle.rake +25 -0
  62. data/vendor/assets/stylesheets/{jquery-ui-theme.css.erb → jquery-ui-theme.css} +17 -17
  63. metadata +33 -20
  64. data/app/assets/stylesheets/active_scaffold.scss +0 -424
  65. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +0 -2
  66. data/app/assets/stylesheets/active_scaffold_images.scss +0 -65
  67. data/app/assets/stylesheets/active_scaffold_jquery_ui.css.erb +0 -13
  68. /data/app/assets/javascripts/{jquery → active_scaffold}/active_scaffold_chosen.js +0 -0
  69. /data/app/assets/javascripts/{jquery → active_scaffold}/draggable_lists.js +0 -0
  70. /data/app/assets/javascripts/{jquery → active_scaffold}/jquery.editinplace.js +0 -0
  71. /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
@@ -750,6 +751,12 @@ float: left;
750
751
  .active-scaffold li.form-element dd input[type="checkbox"] {
751
752
  margin-top: 6px;
752
753
  }
754
+ .active-scaffold form input[type=radio] {
755
+ margin-right: 5px;
756
+ }
757
+ .active-scaffold form label:has(input[type=radio]) {
758
+ margin-right: 10px;
759
+ }
753
760
 
754
761
  .active-scaffold li.form-element dd .select-field:not(.draggable-lists-container) {
755
762
  display: inline-block;
@@ -983,6 +990,19 @@ clear: left;
983
990
  padding: 5px 0;
984
991
  }
985
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
+
986
1006
  /* Form :: Association Sub-Forms
987
1007
  ============================== */
988
1008
 
@@ -1039,7 +1059,7 @@ padding: 0 2px 2px 2px;
1039
1059
  border: solid 1px;
1040
1060
  }
1041
1061
 
1042
- .active-scaffold .sub-form .checkbox-list label {
1062
+ .active-scaffold .sub-form .checkbox-list li {
1043
1063
  display: block;
1044
1064
  }
1045
1065