adminterface 0.0.0 → 0.2.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 (267) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +1 -1
  3. data/README.md +61 -0
  4. data/Rakefile +43 -0
  5. data/app/assets/config/adminterface_manifest.js +1 -0
  6. data/app/assets/stylesheets/adminterface/_base.scss +20 -0
  7. data/app/assets/stylesheets/adminterface/_print.scss +56 -0
  8. data/app/assets/stylesheets/adminterface/components/_active_admin_comment.scss +19 -0
  9. data/app/assets/stylesheets/adminterface/components/_all.scss +24 -0
  10. data/app/assets/stylesheets/adminterface/components/_aside.scss +28 -0
  11. data/app/assets/stylesheets/adminterface/components/_attributes_table.scss +19 -0
  12. data/app/assets/stylesheets/adminterface/components/_comments.scss +7 -0
  13. data/app/assets/stylesheets/adminterface/components/_divider.scss +28 -0
  14. data/app/assets/stylesheets/adminterface/components/_filters.scss +27 -0
  15. data/app/assets/stylesheets/adminterface/components/_flash.scss +4 -0
  16. data/app/assets/stylesheets/adminterface/components/_footer.scss +4 -0
  17. data/app/assets/stylesheets/adminterface/components/_form.scss +219 -0
  18. data/app/assets/stylesheets/adminterface/components/_header.scss +30 -0
  19. data/app/assets/stylesheets/adminterface/components/_index.scss +1 -0
  20. data/app/assets/stylesheets/adminterface/components/_index_as_grid.scss +5 -0
  21. data/app/assets/stylesheets/adminterface/components/_index_as_table.scss +1 -0
  22. data/app/assets/stylesheets/adminterface/components/_index_footer.scss +19 -0
  23. data/app/assets/stylesheets/adminterface/components/_modal_dialog.scss +4 -0
  24. data/app/assets/stylesheets/adminterface/components/_pagination.scss +3 -0
  25. data/app/assets/stylesheets/adminterface/components/_panel.scss +21 -0
  26. data/app/assets/stylesheets/adminterface/components/_sidebar.scss +13 -0
  27. data/app/assets/stylesheets/adminterface/components/_site_title.scss +17 -0
  28. data/app/assets/stylesheets/adminterface/components/_table_for.scss +37 -0
  29. data/app/assets/stylesheets/adminterface/components/_table_tools.scss +19 -0
  30. data/app/assets/stylesheets/adminterface/components/_thumbnail.scss +29 -0
  31. data/app/assets/stylesheets/adminterface/components/_title_bar.scss +36 -0
  32. data/app/assets/stylesheets/adminterface/components/inputs/_all.scss +2 -0
  33. data/app/assets/stylesheets/adminterface/components/inputs/_password.scss +28 -0
  34. data/app/assets/stylesheets/adminterface/components/inputs/_text.scss +30 -0
  35. data/app/assets/stylesheets/adminterface/helpers/_aa_icon.scss +1 -0
  36. data/app/assets/stylesheets/adminterface/helpers/_all.scss +2 -0
  37. data/app/assets/stylesheets/adminterface/helpers/_pointer.scss +1 -0
  38. data/app/assets/stylesheets/adminterface/layouts/_all.scss +4 -0
  39. data/app/assets/stylesheets/adminterface/layouts/_base.scss +5 -0
  40. data/app/assets/stylesheets/adminterface/layouts/_logged_in.scss +30 -0
  41. data/app/assets/stylesheets/adminterface/layouts/_logged_out.scss +14 -0
  42. data/app/assets/stylesheets/adminterface/layouts/types/_all.scss +4 -0
  43. data/app/assets/stylesheets/adminterface/layouts/types/_mixins.scss +195 -0
  44. data/app/assets/stylesheets/adminterface/layouts/types/_navigation_aside.scss +33 -0
  45. data/app/assets/stylesheets/adminterface/layouts/types/_navigation_sidebar.scss +15 -0
  46. data/app/assets/stylesheets/adminterface/layouts/types/_navigation_top.scss +33 -0
  47. data/app/assets/stylesheets/adminterface/mixins/_all.scss +3 -0
  48. data/app/assets/stylesheets/adminterface/mixins/_layouts.scss +38 -0
  49. data/app/assets/stylesheets/adminterface/mixins/_utilities.scss +39 -0
  50. data/app/assets/stylesheets/adminterface/mixins/_variables.scss +100 -0
  51. data/app/assets/stylesheets/adminterface/placeholders/_aa_icon.scss +10 -0
  52. data/app/assets/stylesheets/adminterface/placeholders/_all.scss +3 -0
  53. data/app/assets/stylesheets/adminterface/placeholders/_background.scss +5 -0
  54. data/app/assets/stylesheets/adminterface/placeholders/_typography.scss +11 -0
  55. data/app/assets/stylesheets/adminterface/vendors/_all.scss +4 -0
  56. data/app/assets/stylesheets/adminterface/vendors/bootstrap/_all.scss +6 -0
  57. data/app/assets/stylesheets/adminterface/vendors/bootstrap/_variables.scss +51 -0
  58. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_buttons.scss +5 -0
  59. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_dropdowns.scss +28 -0
  60. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_navs.scss +25 -0
  61. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/form/_labels.scss +5 -0
  62. data/app/assets/stylesheets/adminterface/vendors/bootstrap/content/_tables.scss +2 -0
  63. data/app/assets/stylesheets/adminterface/vendors/bootstrap/content/_typography.scss +2 -0
  64. data/app/assets/stylesheets/adminterface/vendors/flatpickr/_all.scss +2 -0
  65. data/app/assets/stylesheets/adminterface/vendors/flatpickr/_variables.scss +7 -0
  66. data/app/assets/stylesheets/adminterface/vendors/flatpickr/main.scss +50 -0
  67. data/app/assets/stylesheets/adminterface/vendors/tom_select/_all.scss +1 -0
  68. data/app/assets/stylesheets/adminterface/vendors/tom_select/_main.scss +6 -0
  69. data/app/assets/stylesheets/adminterface/vendors/trix/_actiontext.scss +36 -0
  70. data/app/assets/stylesheets/adminterface/vendors/trix/_all.scss +3 -0
  71. data/app/assets/stylesheets/adminterface/vendors/trix/_trix_editor.scss +86 -0
  72. data/app/assets/stylesheets/adminterface/vendors/trix/_variables.scss +31 -0
  73. data/app/javascript/adminterface/base.js +14 -0
  74. data/app/javascript/adminterface/config.js +129 -0
  75. data/app/javascript/adminterface/initializers/batch_actions.js +9 -0
  76. data/app/javascript/adminterface/initializers/bootstrap.js +29 -0
  77. data/app/javascript/adminterface/initializers/confirm_dialog.js +23 -0
  78. data/app/javascript/adminterface/initializers/detached_dropdown.js +16 -0
  79. data/app/javascript/adminterface/initializers/drawer_menu_item_toggler.js +15 -0
  80. data/app/javascript/adminterface/initializers/filters.js +23 -0
  81. data/app/javascript/adminterface/initializers/has_many.js +7 -0
  82. data/app/javascript/adminterface/initializers/header_toggler.js +10 -0
  83. data/app/javascript/adminterface/initializers/index.js +2 -0
  84. data/app/javascript/adminterface/initializers/per_page.js +12 -0
  85. data/app/javascript/adminterface/initializers/plugins/flatpickr.js +24 -0
  86. data/app/javascript/adminterface/initializers/plugins/input_counter.js +21 -0
  87. data/app/javascript/adminterface/initializers/plugins/password_visibility.js +23 -0
  88. data/app/javascript/adminterface/initializers/plugins/tom_select.js +24 -0
  89. data/app/javascript/adminterface/lib/__tests__/detached_dropdown.spec.js +70 -0
  90. data/app/javascript/adminterface/lib/__tests__/filters.spec.js +151 -0
  91. data/app/javascript/adminterface/lib/__tests__/utils.spec.js +281 -0
  92. data/app/javascript/adminterface/lib/batch_actions.js +106 -0
  93. data/app/javascript/adminterface/lib/checkbox_toggler.js +55 -0
  94. data/app/javascript/adminterface/lib/confirm_dialog.js +113 -0
  95. data/app/javascript/adminterface/lib/detached_dropdown.js +34 -0
  96. data/app/javascript/adminterface/lib/filters.js +34 -0
  97. data/app/javascript/adminterface/lib/has_many.js +122 -0
  98. data/app/javascript/adminterface/lib/header_toggler.js +54 -0
  99. data/app/javascript/adminterface/lib/input.js +108 -0
  100. data/app/javascript/adminterface/lib/inputs/base/groupish.js +55 -0
  101. data/app/javascript/adminterface/lib/inputs/base/pluginish.js +63 -0
  102. data/app/javascript/adminterface/lib/inputs/base_input.js +87 -0
  103. data/app/javascript/adminterface/lib/inputs/boolean_input.js +30 -0
  104. data/app/javascript/adminterface/lib/inputs/check_boxes_input.js +14 -0
  105. data/app/javascript/adminterface/lib/inputs/choices_input.js +96 -0
  106. data/app/javascript/adminterface/lib/inputs/color_input.js +14 -0
  107. data/app/javascript/adminterface/lib/inputs/country_input.js +90 -0
  108. data/app/javascript/adminterface/lib/inputs/datalist_input.js +41 -0
  109. data/app/javascript/adminterface/lib/inputs/date_picker_input.js +11 -0
  110. data/app/javascript/adminterface/lib/inputs/datetime_picker_input.js +11 -0
  111. data/app/javascript/adminterface/lib/inputs/hidden_input.js +21 -0
  112. data/app/javascript/adminterface/lib/inputs/password_input.js +13 -0
  113. data/app/javascript/adminterface/lib/inputs/radio_input.js +13 -0
  114. data/app/javascript/adminterface/lib/inputs/select_input.js +68 -0
  115. data/app/javascript/adminterface/lib/inputs/string_input.js +13 -0
  116. data/app/javascript/adminterface/lib/inputs/switch_input.js +9 -0
  117. data/app/javascript/adminterface/lib/inputs/text_input.js +12 -0
  118. data/app/javascript/adminterface/lib/inputs/time_picker_input.js +13 -0
  119. data/app/javascript/adminterface/lib/inputs/time_zone_input.js +66 -0
  120. data/app/javascript/adminterface/lib/per_page.js +18 -0
  121. data/app/javascript/adminterface/lib/plugins/input_counter.js +94 -0
  122. data/app/javascript/adminterface/lib/plugins/password_visibility.js +70 -0
  123. data/app/javascript/adminterface/lib/table_checkbox_toggler.js +47 -0
  124. data/app/javascript/adminterface/lib/utils.js +148 -0
  125. data/app/views/active_admin/devise/confirmations/new.html.erb +19 -0
  126. data/app/views/active_admin/devise/passwords/edit.html.erb +21 -0
  127. data/app/views/active_admin/devise/passwords/new.html.erb +19 -0
  128. data/app/views/active_admin/devise/registrations/new.html.erb +24 -0
  129. data/app/views/active_admin/devise/sessions/new.html.erb +23 -0
  130. data/app/views/active_admin/devise/shared/_links.html.erb +25 -0
  131. data/app/views/active_admin/devise/shared/_omniauth.html.erb +10 -0
  132. data/app/views/active_admin/devise/unlocks/new.html.erb +19 -0
  133. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  134. data/app/views/kaminari/active_admin/_gap.html.erb +12 -0
  135. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  136. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  137. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  138. data/app/views/kaminari/active_admin/_paginator.html.erb +27 -0
  139. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  140. data/app/views/layouts/active_admin_logged_out.html.erb +56 -0
  141. data/config/locales/active_admin.en.yml +25 -0
  142. data/lib/adminterface/callable.rb +7 -0
  143. data/lib/adminterface/configs.rb +76 -0
  144. data/lib/adminterface/data/base.rb +11 -0
  145. data/lib/adminterface/data/countries.rb +44 -0
  146. data/lib/adminterface/data/time_zones.rb +31 -0
  147. data/lib/adminterface/data.rb +6 -0
  148. data/lib/adminterface/encryption/encryptor.rb +26 -0
  149. data/lib/adminterface/engine.rb +22 -0
  150. data/lib/adminterface/extensions/base_controller.rb +55 -0
  151. data/lib/adminterface/extensions/batch_actions/resource_extension.rb +64 -0
  152. data/lib/adminterface/extensions/batch_actions/views/batch_action_selector.rb +48 -0
  153. data/lib/adminterface/extensions/batch_actions/views/selection_cells.rb +39 -0
  154. data/lib/adminterface/extensions/dsl.rb +13 -0
  155. data/lib/adminterface/extensions/dynamic_settings_node.rb +26 -0
  156. data/lib/adminterface/extensions/filters/forms.rb +76 -0
  157. data/lib/adminterface/extensions/form_builder.rb +165 -0
  158. data/lib/adminterface/extensions/inputs/base/active_admin_config.rb +21 -0
  159. data/lib/adminterface/extensions/inputs/base/choices.rb +33 -0
  160. data/lib/adminterface/extensions/inputs/base/groupish.rb +50 -0
  161. data/lib/adminterface/extensions/inputs/base/html.rb +15 -0
  162. data/lib/adminterface/extensions/inputs/base/labelling.rb +15 -0
  163. data/lib/adminterface/extensions/inputs/base/pluginish.rb +56 -0
  164. data/lib/adminterface/extensions/inputs/base/stringish.rb +19 -0
  165. data/lib/adminterface/extensions/inputs/base/wrapping.rb +25 -0
  166. data/lib/adminterface/extensions/inputs/base.rb +19 -0
  167. data/lib/adminterface/extensions/inputs/boolean_input.rb +42 -0
  168. data/lib/adminterface/extensions/inputs/check_boxes_input.rb +34 -0
  169. data/lib/adminterface/extensions/inputs/color_input.rb +29 -0
  170. data/lib/adminterface/extensions/inputs/country_input.rb +33 -0
  171. data/lib/adminterface/extensions/inputs/datalist_input.rb +26 -0
  172. data/lib/adminterface/extensions/inputs/date_picker_input.rb +30 -0
  173. data/lib/adminterface/extensions/inputs/date_select_input.rb +7 -0
  174. data/lib/adminterface/extensions/inputs/datetime_picker_input.rb +19 -0
  175. data/lib/adminterface/extensions/inputs/datetime_select_input.rb +7 -0
  176. data/lib/adminterface/extensions/inputs/email_input.rb +23 -0
  177. data/lib/adminterface/extensions/inputs/file_input.rb +19 -0
  178. data/lib/adminterface/extensions/inputs/filters/base/search_method_select.rb +37 -0
  179. data/lib/adminterface/extensions/inputs/filters/base.rb +3 -0
  180. data/lib/adminterface/extensions/inputs/filters/boolean_input.rb +4 -0
  181. data/lib/adminterface/extensions/inputs/filters/check_boxes_input.rb +12 -0
  182. data/lib/adminterface/extensions/inputs/filters/date_picker_input.rb +4 -0
  183. data/lib/adminterface/extensions/inputs/filters/date_range_input.rb +50 -0
  184. data/lib/adminterface/extensions/inputs/filters/select_input.rb +4 -0
  185. data/lib/adminterface/extensions/inputs/number_input.rb +23 -0
  186. data/lib/adminterface/extensions/inputs/password_input.rb +23 -0
  187. data/lib/adminterface/extensions/inputs/phone_input.rb +23 -0
  188. data/lib/adminterface/extensions/inputs/radio_input.rb +41 -0
  189. data/lib/adminterface/extensions/inputs/range_input.rb +22 -0
  190. data/lib/adminterface/extensions/inputs/rich_text_area_input.rb +21 -0
  191. data/lib/adminterface/extensions/inputs/search_input.rb +23 -0
  192. data/lib/adminterface/extensions/inputs/select_input.rb +33 -0
  193. data/lib/adminterface/extensions/inputs/string_input.rb +19 -0
  194. data/lib/adminterface/extensions/inputs/switch_input.rb +11 -0
  195. data/lib/adminterface/extensions/inputs/text_input.rb +27 -0
  196. data/lib/adminterface/extensions/inputs/time_picker_input.rb +19 -0
  197. data/lib/adminterface/extensions/inputs/time_select_input.rb +7 -0
  198. data/lib/adminterface/extensions/inputs/time_zone_input.rb +33 -0
  199. data/lib/adminterface/extensions/inputs/url_input.rb +23 -0
  200. data/lib/adminterface/extensions/menu_item.rb +16 -0
  201. data/lib/adminterface/extensions/namespace_settings.rb +30 -0
  202. data/lib/adminterface/extensions/orm/active_record/comments/views/active_admin_comments.rb +122 -0
  203. data/lib/adminterface/extensions/resource/action_items.rb +117 -0
  204. data/lib/adminterface/extensions/sidebar_section.rb +35 -0
  205. data/lib/adminterface/extensions/view_helpers/alert_helper.rb +36 -0
  206. data/lib/adminterface/extensions/view_helpers/component_helper.rb +23 -0
  207. data/lib/adminterface/extensions/views/action_items.rb +39 -0
  208. data/lib/adminterface/extensions/views/columns.rb +59 -0
  209. data/lib/adminterface/extensions/views/components/active_admin_form.rb +47 -0
  210. data/lib/adminterface/extensions/views/components/attributes_table.rb +28 -0
  211. data/lib/adminterface/extensions/views/components/blank_slate.rb +19 -0
  212. data/lib/adminterface/extensions/views/components/dropdown_menu.rb +55 -0
  213. data/lib/adminterface/extensions/views/components/icon.rb +26 -0
  214. data/lib/adminterface/extensions/views/components/index_list.rb +43 -0
  215. data/lib/adminterface/extensions/views/components/menu.rb +18 -0
  216. data/lib/adminterface/extensions/views/components/menu_item.rb +64 -0
  217. data/lib/adminterface/extensions/views/components/paginated_collection.rb +52 -0
  218. data/lib/adminterface/extensions/views/components/panel.rb +71 -0
  219. data/lib/adminterface/extensions/views/components/scopes.rb +53 -0
  220. data/lib/adminterface/extensions/views/components/sidebar_section.rb +39 -0
  221. data/lib/adminterface/extensions/views/components/site_title.rb +36 -0
  222. data/lib/adminterface/extensions/views/components/status_tag.rb +26 -0
  223. data/lib/adminterface/extensions/views/components/table_for.rb +23 -0
  224. data/lib/adminterface/extensions/views/components/tabs.rb +76 -0
  225. data/lib/adminterface/extensions/views/footer.rb +27 -0
  226. data/lib/adminterface/extensions/views/header.rb +59 -0
  227. data/lib/adminterface/extensions/views/index_as_grid.rb +53 -0
  228. data/lib/adminterface/extensions/views/index_as_table.rb +77 -0
  229. data/lib/adminterface/extensions/views/pages/base.rb +164 -0
  230. data/lib/adminterface/extensions/views/pages/form.rb +27 -0
  231. data/lib/adminterface/extensions/views/pages/index.rb +136 -0
  232. data/lib/adminterface/extensions/views/pages/page.rb +18 -0
  233. data/lib/adminterface/extensions/views/title_bar.rb +74 -0
  234. data/lib/adminterface/fixtures/components.yml +73 -0
  235. data/lib/adminterface/fixtures/css_classes.yml +107 -0
  236. data/lib/adminterface/initializers/batch_actions.rb +15 -0
  237. data/lib/adminterface/initializers/comments.rb +13 -0
  238. data/lib/adminterface/initializers/configurations.rb +38 -0
  239. data/lib/adminterface/initializers/formtastic.rb +58 -0
  240. data/lib/adminterface/initializers/resource.rb +20 -0
  241. data/lib/adminterface/initializers/view_helpers.rb +14 -0
  242. data/lib/adminterface/initializers/views.rb +39 -0
  243. data/lib/adminterface/license.rb +18 -0
  244. data/lib/adminterface/licensing/base.rb +99 -0
  245. data/lib/adminterface/licensing/commercial.rb +7 -0
  246. data/lib/adminterface/licensing/notice.rb +54 -0
  247. data/lib/adminterface/licensing/personal.rb +13 -0
  248. data/lib/adminterface/public.pem +9 -0
  249. data/lib/adminterface/version.rb +3 -0
  250. data/lib/adminterface.rb +55 -0
  251. data/lib/generators/adminterface/comments/comments_generator.rb +29 -0
  252. data/lib/generators/adminterface/comments/templates/README +13 -0
  253. data/lib/generators/adminterface/comments/templates/active_admin_comment_action_text.rb +18 -0
  254. data/lib/generators/adminterface/comments/templates/migrations/drop_body_for_active_admin_comments.rb.erb +28 -0
  255. data/lib/generators/adminterface/configs/configs_generator.rb +19 -0
  256. data/lib/generators/adminterface/configs/templates/README +33 -0
  257. data/lib/generators/adminterface/install/install_generator.rb +41 -0
  258. data/lib/generators/adminterface/install/templates/dashboard.rb +32 -0
  259. data/lib/generators/adminterface/views/views_generator.rb +15 -0
  260. data/lib/generators/adminterface/webpacker/templates/README +27 -0
  261. data/lib/generators/adminterface/webpacker/templates/active_admin.js +12 -0
  262. data/lib/generators/adminterface/webpacker/templates/active_admin.scss +8 -0
  263. data/lib/generators/adminterface/webpacker/templates/print.scss +3 -0
  264. data/lib/generators/adminterface/webpacker/webpacker_generator.rb +55 -0
  265. data/lib/tasks/adminterface_tasks.rake +4 -0
  266. metadata +285 -9
  267. data/lib/name.rb +0 -1
@@ -0,0 +1,59 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Columns
5
+ def build(...)
6
+ super(...)
7
+ add_class "row"
8
+ end
9
+
10
+ def default_class_name
11
+ columns_css_classes
12
+ end
13
+
14
+ protected
15
+
16
+ def calculate_columns!
17
+ columns.each(&:assign_column_span)
18
+ end
19
+ end
20
+
21
+ module Column
22
+ def assign_column_span
23
+ set_attribute :class, "#{column_klass} #{css_class}".squish
24
+ end
25
+
26
+ def column_klass
27
+ ["col", size, span_size].delete_if(&:blank?).join("-")
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ # Overwrite activeadmin/lib/active_admin/views/columns.rb
35
+ ActiveAdmin::Views::Columns.class_eval do
36
+ prepend Adminterface::Extensions::Views::Columns
37
+ has_css_classes_for :columns
38
+
39
+ protected
40
+
41
+ def closing_tag
42
+ super
43
+ end
44
+ end
45
+
46
+ ActiveAdmin::Views::Column.class_eval do
47
+ prepend Adminterface::Extensions::Views::Column
48
+ has_components_for :columns
49
+
50
+ attr_reader :size, :span_size, :css_class
51
+
52
+ def build(options = {})
53
+ options = options.dup
54
+ @css_class = options.delete(:class)
55
+ @span_size = options.delete(:span)
56
+ @size = options.delete(:size) { columns_components[:breakpoint] }
57
+ super(options)
58
+ end
59
+ end
@@ -0,0 +1,47 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module ActiveAdminForm
5
+ def input(...)
6
+ default_field_error_proc = ::ActionView::Base.field_error_proc
7
+ ::ActionView::Base.field_error_proc = proc { |html_tag, _instance_tag| html_tag }
8
+ super
9
+ ensure
10
+ ::ActionView::Base.field_error_proc = default_field_error_proc
11
+ end
12
+
13
+ def action(method, options = {})
14
+ if method.eql?(:submit)
15
+ options.reverse_merge!(button_html: {class: form_css_classes.dig(:actions, :submit)})
16
+ end
17
+
18
+ super(method, options)
19
+ end
20
+
21
+ def cancel_link(url = {action: "index"}, html_options = {class: form_css_classes.dig(:actions, :cancel)}, li_attrs = {})
22
+ super(url, html_options, li_attrs)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ # Overwrite activeadmin/lib/active_admin/views/active_admin_form.rb
30
+ ActiveAdmin::Views::ActiveAdminForm.class_eval do
31
+ prepend Adminterface::Extensions::Views::ActiveAdminForm
32
+ has_css_classes_for :form
33
+ end
34
+
35
+ ActiveAdmin::Views::SemanticInputsProxy.class_eval do
36
+ def build(form_builder, *args, &block)
37
+ html_options = args.extract_options!
38
+ html_options[:class] ||= "inputs"
39
+ legend = args.shift if args.first.is_a?(::String)
40
+ legend = html_options.delete(:name) if html_options.key?(:name)
41
+ legend_tag = legend ? "<legend><span>#{legend}</span></legend>" : ""
42
+ fieldset_attrs = html_options.map { |k, v| %(#{k}="#{v}") }.join(" ")
43
+ @opening_tag = "<fieldset #{fieldset_attrs}>#{legend_tag}"
44
+ @closing_tag = "</fieldset>"
45
+ super(*(args << html_options), &block)
46
+ end
47
+ end
@@ -0,0 +1,28 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module AttributesTable
6
+ def table
7
+ super(class: attributes_table_css_classes[:table])
8
+ end
9
+
10
+ def default_class_name
11
+ "#{super} #{attributes_table_css_classes[:wrapper]}".squish
12
+ end
13
+
14
+ def tr(options = {})
15
+ options[:class] = options[:class].split.reject { |x| x.eql?("row") }.join(" ")
16
+ super(options)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ # Overwirte lib/active_admin/views/components/attributes_table.rb
25
+ ActiveAdmin::Views::AttributesTable.class_eval do
26
+ prepend Adminterface::Extensions::Views::Components::AttributesTable
27
+ has_css_classes_for :attributes_table
28
+ end
@@ -0,0 +1,19 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module BlankSlate
6
+ def default_class_name
7
+ "#{super} #{blank_slate_css_classes}".squish
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ # Overwrite activeadmin/lib/active_admin/views/components/blank_slate.rb
16
+ ActiveAdmin::Views::BlankSlate.class_eval do
17
+ prepend Adminterface::Extensions::Views::Components::BlankSlate
18
+ has_css_classes_for :blank_slate
19
+ end
@@ -0,0 +1,55 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module DropdownMenu
6
+ def item_divider
7
+ within @menu do
8
+ li class: "dropdown-divider"
9
+ end
10
+ end
11
+
12
+ def item_html
13
+ within @menu do
14
+ li { yield }
15
+ end
16
+ end
17
+
18
+ def link_to(*args, &block)
19
+ options = args.extract_options!
20
+ options[:class] = "dropdown-item #{options[:class]}".squish
21
+ super(*args, options, &block)
22
+ end
23
+
24
+ private
25
+
26
+ def build_menu(options)
27
+ options[:class] ||= ""
28
+ options[:class] = "#{options[:class]} dropdown_menu_list dropdown-menu".squish
29
+ ul(options)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ # Overwrite activeadmin/lib/active_admin/views/components/dropdown_menu.rb
38
+ ActiveAdmin::Views::DropdownMenu.class_eval do
39
+ prepend Adminterface::Extensions::Views::Components::DropdownMenu
40
+
41
+ def build(name, options = {})
42
+ options = options.dup
43
+
44
+ # Easily set options for the button or menu
45
+ button_options = options.delete(:button) || {}
46
+ menu_options = options.delete(:menu) || {}
47
+ button_options[:class] = "#{button_options[:class]} dropdown-toggle".squish
48
+ options[:class] = "#{options[:class]} dropdown".squish
49
+
50
+ @button = build_button(name, button_options.merge("data-bs-toggle": "dropdown"))
51
+ @menu = build_menu(menu_options)
52
+
53
+ super(options)
54
+ end
55
+ end
@@ -0,0 +1,26 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ # Custom component for icon
6
+ class Icon < ActiveAdmin::Component
7
+ builder_method :aa_icon
8
+ has_css_classes_for :icon
9
+
10
+ def build(icon, attributes = {})
11
+ super(attributes)
12
+ add_class icon
13
+ end
14
+
15
+ def tag_name
16
+ :i
17
+ end
18
+
19
+ def default_class_name
20
+ "aa-icon #{icon_css_classes}".squish
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,43 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module IndexList
6
+ def default_class_name
7
+ "#{super} nav #{table_tools_css_classes.dig(:indexes, :tabs)}".squish
8
+ end
9
+
10
+ def tag_name
11
+ :div
12
+ end
13
+
14
+ protected
15
+
16
+ def build_index_list(index_class)
17
+ params = request.query_parameters.except :page, :commit, :format
18
+ url_with_params = url_for(params.merge(as: index_class.index_name.to_sym))
19
+ name = index_class.index_name
20
+
21
+ a(href: url_with_params,
22
+ class: "index-mode-#{name} #{classes_for_link(index_class)}",
23
+ title: name) do
24
+ span I18n.t("active_admin.index_list.#{name}", default: name.to_s.titleize)
25
+ end
26
+ end
27
+
28
+ def classes_for_link(index_class)
29
+ klass = "nav-item nav-link"
30
+ klass += " active" if current_index?(index_class)
31
+ klass
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ # Overwrite activeadmin/lib/active_admin/views/components/index_list.rb
40
+ ActiveAdmin::Views::IndexList.class_eval do
41
+ prepend Adminterface::Extensions::Views::Components::IndexList
42
+ has_css_classes_for :table_tools
43
+ end
@@ -0,0 +1,18 @@
1
+ # Overwrite activeadmin/lib/active_admin/views/components/menu.rb
2
+ ActiveAdmin::Views::Menu.class_eval do
3
+ def build(menu, options = {})
4
+ dropdown = options.delete(:dropdown) { false }
5
+ menu_class = dropdown ? "dropdown-menu" : ""
6
+ item_class = dropdown ? "dropdown-item" : ""
7
+
8
+ @menu = menu
9
+ super(options.reverse_merge!(class: menu_class))
10
+
11
+ menu.items.each do |item|
12
+ next unless helpers.render_in_context self, item.should_display
13
+
14
+ menu_item(item, class: item_class, dropdown: dropdown)
15
+ end
16
+ children.sort!
17
+ end
18
+ end
@@ -0,0 +1,64 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module MenuItem
6
+ private
7
+
8
+ def menu_label
9
+ if icon.present?
10
+ Arbre::Context.new({}, self) do
11
+ aa_icon(icon)
12
+ end + helpers.content_tag(:span, label)
13
+ else
14
+ label
15
+ end
16
+ end
17
+
18
+ def item_class(item)
19
+ "#{item.html_options[:class]} #{item.current?(assigns[:current_tab]) ? "active" : nil}".squish
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ # Overwrite activeadmin/lib/active_admin/views/components/menu_item.rb
28
+ ActiveAdmin::Views::MenuItem.class_eval do
29
+ prepend Adminterface::Extensions::Views::Components::MenuItem
30
+ attr_reader :icon
31
+
32
+ def build(item, options = {})
33
+ dropdown = options.delete(:dropdown) { false }
34
+
35
+ super(options.merge(id: item.id))
36
+ @label = helpers.render_in_context self, item.label
37
+ @url = helpers.render_in_context self, item.url
38
+ @icon = helpers.render_in_context self, item.icon
39
+ @priority = item.priority
40
+ @submenu = nil
41
+
42
+ unless dropdown
43
+ add_class "nav-item"
44
+ item.html_options.reverse_merge!(class: "nav-link")
45
+ end
46
+
47
+ add_class "active" if item.current?(assigns[:current_tab])
48
+
49
+ if item.items.any?
50
+ item.html_options.merge!(class: "nav-link dropdown-toggle", "data-bs-toggle": "dropdown")
51
+ end
52
+
53
+ if url
54
+ item_options = item.html_options.merge(class: item_class(item)).delete_if { |_k, v| v.blank? }
55
+ text_node link_to(menu_label, url, **item_options)
56
+ else
57
+ span menu_label, item.html_options.merge(class: "navbar-text")
58
+ end
59
+
60
+ return unless item.items.any?
61
+ add_class "has_nested dropdown"
62
+ @submenu = menu(item, dropdown: true)
63
+ end
64
+ end
@@ -0,0 +1,52 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module PaginatedCollection
6
+ protected
7
+
8
+ def build_pagination
9
+ options = {theme: @display_total ? "active_admin" : "active_admin_countless"}
10
+ options[:params] = @params if @params
11
+ options[:param_name] = @param_name if @param_name
12
+
13
+ if !@display_total
14
+ # The #paginate method in kaminari will query the resource with a
15
+ # count(*) to determine how many pages there should be unless
16
+ # you pass in the :total_pages option. We issue a query to determine
17
+ # if there is another page or not, but the limit/offset make this
18
+ # query fast.
19
+ offset = collection.offset(collection.current_page * collection.limit_value).limit(1).count
20
+ options[:total_pages] = collection.current_page + offset
21
+ options[:right] = 0
22
+ end
23
+
24
+ options.merge!(configs.pager)
25
+ text_node paginate collection, **options
26
+ end
27
+
28
+ def build_per_page_select
29
+ div class: "pagination_per_page" do
30
+ div class: "input-group input-group-sm" do
31
+ span I18n.t("active_admin.pagination.per_page"), class: "input-group-text"
32
+
33
+ select(class: "form-select") do
34
+ @per_page.each do |per_page|
35
+ option(per_page,
36
+ value: per_page,
37
+ selected: collection.limit_value == per_page ? "selected" : nil)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ # Overwrite activeadmin/lib/active_admin/views/components/paginated_collection.rb
50
+ ActiveAdmin::Views::PaginatedCollection.class_eval do
51
+ prepend Adminterface::Extensions::Views::Components::PaginatedCollection
52
+ end
@@ -0,0 +1,71 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module Panel
6
+ def build_title(title)
7
+ return if title.blank?
8
+
9
+ div title.to_s, class: default_title_class
10
+ end
11
+
12
+ def default_title_class
13
+ "title #{panel_css_classes.dig(:header, :title)}".squish
14
+ end
15
+
16
+ def default_wrapper_class
17
+ "panel #{panel_css_classes[:wrapper]}".squish
18
+ end
19
+
20
+ def default_header_class
21
+ "panel-header #{panel_css_classes.dig(:header, :wrapper)}".squish
22
+ end
23
+
24
+ def default_body_class
25
+ "panel-body #{panel_css_classes[:body]}".squish
26
+ end
27
+
28
+ def header_action(*args)
29
+ action = args[0]
30
+
31
+ @title << div(class: "header_action") do
32
+ html = []
33
+ html << action
34
+ html << yield if block_given?
35
+ safe_join(html)
36
+ end
37
+ end
38
+
39
+ def header_html_options
40
+ header_html[:class] = "#{default_header_class} #{header_html[:class]}".squish
41
+ header_html
42
+ end
43
+
44
+ def body_html_options
45
+ body_html[:class] = "panel_contents #{default_body_class} #{body_html[:class]}".squish
46
+ body_html
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ # Overwrite activeadmin/lib/active_admin/views/components/panel.rb
55
+ ActiveAdmin::Views::Panel.class_eval do
56
+ prepend Adminterface::Extensions::Views::Components::Panel
57
+ has_css_classes_for :panel
58
+ attr_accessor :header_html, :body_html
59
+
60
+ def build(*args)
61
+ options = args.extract_options!
62
+ title = args.first
63
+ @header_html = options.delete(:header_html) || {}
64
+ @body_html = options.delete(:body_html) || {}
65
+ super(options)
66
+ add_class default_wrapper_class
67
+
68
+ @title = div(build_title(title), **header_html_options)
69
+ @contents = div(**body_html_options)
70
+ end
71
+ end
@@ -0,0 +1,53 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module Scopes
6
+ def group_class(group)
7
+ "#{super} nav #{table_tools_css_classes.dig(:scopes, :tabs)}".squish
8
+ end
9
+
10
+ protected
11
+
12
+ def build_scope(scope, options)
13
+ li class: classes_for_scope(scope) do
14
+ params = request.query_parameters.except :page, :scope, :commit, :format
15
+
16
+ a href: url_for(scope: scope.id, params: params), class: classes_for_link(scope) do
17
+ span scope_name(scope)
18
+ if options[:scope_count] && scope.show_count
19
+ span get_scope_count(scope),
20
+ class: "count #{count_class(scope)}".squish
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ def count_class(scope)
27
+ if get_scope_count(scope).positive?
28
+ table_tools_css_classes.dig(:scopes, :counts, :positive)
29
+ else
30
+ table_tools_css_classes.dig(:scopes, :counts, :zero)
31
+ end
32
+ end
33
+
34
+ def classes_for_scope(scope)
35
+ "#{super} nav-item".squish
36
+ end
37
+
38
+ def classes_for_link(scope)
39
+ classes = %w[nav-link]
40
+ classes << "active" if current_scope?(scope)
41
+ classes.join(" ")
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ # Overwrite activeadmin/lib/active_admin/views/components/scopes.rb
50
+ ActiveAdmin::Views::Scopes.class_eval do
51
+ prepend Adminterface::Extensions::Views::Components::Scopes
52
+ has_css_classes_for :table_tools
53
+ end
@@ -0,0 +1,39 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module SidebarSection
6
+ def default_title_class
7
+ "title #{sidebar_section_css_classes.dig(:header, :title)}".squish
8
+ end
9
+
10
+ def default_wrapper_class
11
+ "panel #{sidebar_section_css_classes[:wrapper]}".squish
12
+ end
13
+
14
+ def default_header_class
15
+ "panel-header #{sidebar_section_css_classes.dig(:header, :wrapper)}".squish
16
+ end
17
+
18
+ def default_body_class
19
+ "panel-body #{sidebar_section_css_classes[:body]}".squish
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ # Overwrite activeadmin/lib/active_admin/views/components/sidebar_section.rb
28
+ ActiveAdmin::Views::SidebarSection.class_eval do
29
+ prepend Adminterface::Extensions::Views::Components::SidebarSection
30
+ has_css_classes_for :sidebar_section
31
+
32
+ def build(section)
33
+ @section = section
34
+ super(@section.title, section.options)
35
+ add_class @section.custom_class if @section.custom_class
36
+ self.id = @section.id
37
+ build_sidebar_content
38
+ end
39
+ end
@@ -0,0 +1,36 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module SiteTitle
6
+ def tag_name
7
+ :div
8
+ end
9
+
10
+ private
11
+
12
+ def title_image
13
+ helpers.image_tag(site_title_image, class: "image", alt: title_text)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ # Overwrite activeadmin/lib/active_admin/views/components/site_title.rb
22
+ ActiveAdmin::Views::SiteTitle.class_eval do
23
+ prepend Adminterface::Extensions::Views::Components::SiteTitle
24
+ attr_reader :logged_in
25
+
26
+ def build(namespace, logged_in = true)
27
+ @logged_in = logged_in.eql?(true)
28
+ super(class: "site_title")
29
+ add_class "navbar-brand" if @logged_in
30
+ @namespace = namespace
31
+
32
+ div class: "title" do
33
+ site_title_link? ? site_title_with_link : site_title_content
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module StatusTag
6
+ protected
7
+
8
+ def status_to_class(status)
9
+ case status
10
+ when "Unset", nil then status_tag_css_classes[:unset]
11
+ when "Yes" then status_tag_css_classes[:yes]
12
+ when "No" then status_tag_css_classes[:no]
13
+ else status.to_s.titleize.gsub(/\s/, "").underscore
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ # Overwrite activeadmin/lib/active_admin/views/components/status_tag.rb
23
+ ActiveAdmin::Views::StatusTag.class_eval do
24
+ prepend Adminterface::Extensions::Views::Components::StatusTag
25
+ has_css_classes_for :status_tag
26
+ end
@@ -0,0 +1,23 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module TableFor
6
+ def build(obj, *attrs)
7
+ options = attrs.extract_options!
8
+ options[:class] = "table_for #{options[:class]} #{table_for_css_classes}".squish
9
+ attrs = attrs.push options
10
+ super(obj, *attrs)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ # Overwrite activeadmin/lib/active_admin/views/components/table_for.rb
19
+ ActiveAdmin::Views::TableFor.class_eval do
20
+ include Adminterface::Configs::Finders
21
+ prepend Adminterface::Extensions::Views::Components::TableFor
22
+ has_css_classes_for :table_for
23
+ end