adminterface 0.0.0 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +1 -1
  3. data/README.md +69 -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__/checkbox_toggler.html +5 -0
  90. data/app/javascript/adminterface/lib/__tests__/checkbox_toggler.spec.js +110 -0
  91. data/app/javascript/adminterface/lib/__tests__/detached_dropdown.spec.js +69 -0
  92. data/app/javascript/adminterface/lib/__tests__/filters.spec.js +150 -0
  93. data/app/javascript/adminterface/lib/__tests__/has_many.html +14 -0
  94. data/app/javascript/adminterface/lib/__tests__/has_many.spec.js +224 -0
  95. data/app/javascript/adminterface/lib/__tests__/utils.spec.js +280 -0
  96. data/app/javascript/adminterface/lib/batch_actions.js +106 -0
  97. data/app/javascript/adminterface/lib/checkbox_toggler.js +55 -0
  98. data/app/javascript/adminterface/lib/confirm_dialog.js +113 -0
  99. data/app/javascript/adminterface/lib/detached_dropdown.js +34 -0
  100. data/app/javascript/adminterface/lib/filters.js +34 -0
  101. data/app/javascript/adminterface/lib/has_many.js +125 -0
  102. data/app/javascript/adminterface/lib/header_toggler.js +54 -0
  103. data/app/javascript/adminterface/lib/input.js +108 -0
  104. data/app/javascript/adminterface/lib/inputs/base/groupish.js +55 -0
  105. data/app/javascript/adminterface/lib/inputs/base/pluginish.js +63 -0
  106. data/app/javascript/adminterface/lib/inputs/base_input.js +87 -0
  107. data/app/javascript/adminterface/lib/inputs/boolean_input.js +30 -0
  108. data/app/javascript/adminterface/lib/inputs/check_boxes_input.js +14 -0
  109. data/app/javascript/adminterface/lib/inputs/choices_input.js +96 -0
  110. data/app/javascript/adminterface/lib/inputs/color_input.js +14 -0
  111. data/app/javascript/adminterface/lib/inputs/country_input.js +90 -0
  112. data/app/javascript/adminterface/lib/inputs/datalist_input.js +41 -0
  113. data/app/javascript/adminterface/lib/inputs/date_picker_input.js +11 -0
  114. data/app/javascript/adminterface/lib/inputs/datetime_picker_input.js +11 -0
  115. data/app/javascript/adminterface/lib/inputs/hidden_input.js +21 -0
  116. data/app/javascript/adminterface/lib/inputs/password_input.js +13 -0
  117. data/app/javascript/adminterface/lib/inputs/radio_input.js +13 -0
  118. data/app/javascript/adminterface/lib/inputs/select_input.js +68 -0
  119. data/app/javascript/adminterface/lib/inputs/string_input.js +13 -0
  120. data/app/javascript/adminterface/lib/inputs/switch_input.js +9 -0
  121. data/app/javascript/adminterface/lib/inputs/text_input.js +12 -0
  122. data/app/javascript/adminterface/lib/inputs/time_picker_input.js +13 -0
  123. data/app/javascript/adminterface/lib/inputs/time_zone_input.js +66 -0
  124. data/app/javascript/adminterface/lib/per_page.js +18 -0
  125. data/app/javascript/adminterface/lib/plugins/input_counter.js +94 -0
  126. data/app/javascript/adminterface/lib/plugins/password_visibility.js +70 -0
  127. data/app/javascript/adminterface/lib/table_checkbox_toggler.js +47 -0
  128. data/app/javascript/adminterface/lib/utils.js +148 -0
  129. data/app/views/active_admin/devise/confirmations/new.html.erb +19 -0
  130. data/app/views/active_admin/devise/passwords/edit.html.erb +21 -0
  131. data/app/views/active_admin/devise/passwords/new.html.erb +19 -0
  132. data/app/views/active_admin/devise/registrations/new.html.erb +24 -0
  133. data/app/views/active_admin/devise/sessions/new.html.erb +23 -0
  134. data/app/views/active_admin/devise/shared/_links.html.erb +25 -0
  135. data/app/views/active_admin/devise/shared/_omniauth.html.erb +10 -0
  136. data/app/views/active_admin/devise/unlocks/new.html.erb +19 -0
  137. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  138. data/app/views/kaminari/active_admin/_gap.html.erb +12 -0
  139. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  140. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  141. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  142. data/app/views/kaminari/active_admin/_paginator.html.erb +27 -0
  143. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  144. data/app/views/layouts/active_admin_logged_out.html.erb +56 -0
  145. data/config/locales/active_admin.en.yml +25 -0
  146. data/lib/adminterface/callable.rb +7 -0
  147. data/lib/adminterface/configs.rb +76 -0
  148. data/lib/adminterface/data/base.rb +11 -0
  149. data/lib/adminterface/data/countries.rb +44 -0
  150. data/lib/adminterface/data/time_zones.rb +31 -0
  151. data/lib/adminterface/data.rb +6 -0
  152. data/lib/adminterface/encryption/encryptor.rb +26 -0
  153. data/lib/adminterface/engine.rb +22 -0
  154. data/lib/adminterface/extensions/base_controller.rb +59 -0
  155. data/lib/adminterface/extensions/batch_actions/resource_extension.rb +64 -0
  156. data/lib/adminterface/extensions/batch_actions/views/batch_action_selector.rb +48 -0
  157. data/lib/adminterface/extensions/batch_actions/views/selection_cells.rb +39 -0
  158. data/lib/adminterface/extensions/dsl.rb +13 -0
  159. data/lib/adminterface/extensions/dynamic_settings_node.rb +26 -0
  160. data/lib/adminterface/extensions/filters/forms.rb +76 -0
  161. data/lib/adminterface/extensions/form_builder.rb +165 -0
  162. data/lib/adminterface/extensions/inputs/base/active_admin_config.rb +21 -0
  163. data/lib/adminterface/extensions/inputs/base/choices.rb +33 -0
  164. data/lib/adminterface/extensions/inputs/base/groupish.rb +50 -0
  165. data/lib/adminterface/extensions/inputs/base/html.rb +15 -0
  166. data/lib/adminterface/extensions/inputs/base/labelling.rb +15 -0
  167. data/lib/adminterface/extensions/inputs/base/pluginish.rb +56 -0
  168. data/lib/adminterface/extensions/inputs/base/stringish.rb +19 -0
  169. data/lib/adminterface/extensions/inputs/base/wrapping.rb +25 -0
  170. data/lib/adminterface/extensions/inputs/base.rb +19 -0
  171. data/lib/adminterface/extensions/inputs/boolean_input.rb +42 -0
  172. data/lib/adminterface/extensions/inputs/check_boxes_input.rb +34 -0
  173. data/lib/adminterface/extensions/inputs/color_input.rb +29 -0
  174. data/lib/adminterface/extensions/inputs/country_input.rb +33 -0
  175. data/lib/adminterface/extensions/inputs/datalist_input.rb +26 -0
  176. data/lib/adminterface/extensions/inputs/date_picker_input.rb +30 -0
  177. data/lib/adminterface/extensions/inputs/date_select_input.rb +7 -0
  178. data/lib/adminterface/extensions/inputs/datetime_picker_input.rb +19 -0
  179. data/lib/adminterface/extensions/inputs/datetime_select_input.rb +7 -0
  180. data/lib/adminterface/extensions/inputs/email_input.rb +23 -0
  181. data/lib/adminterface/extensions/inputs/file_input.rb +19 -0
  182. data/lib/adminterface/extensions/inputs/filters/base/search_method_select.rb +37 -0
  183. data/lib/adminterface/extensions/inputs/filters/base.rb +3 -0
  184. data/lib/adminterface/extensions/inputs/filters/boolean_input.rb +4 -0
  185. data/lib/adminterface/extensions/inputs/filters/check_boxes_input.rb +12 -0
  186. data/lib/adminterface/extensions/inputs/filters/date_picker_input.rb +4 -0
  187. data/lib/adminterface/extensions/inputs/filters/date_range_input.rb +50 -0
  188. data/lib/adminterface/extensions/inputs/filters/select_input.rb +4 -0
  189. data/lib/adminterface/extensions/inputs/number_input.rb +23 -0
  190. data/lib/adminterface/extensions/inputs/password_input.rb +23 -0
  191. data/lib/adminterface/extensions/inputs/phone_input.rb +23 -0
  192. data/lib/adminterface/extensions/inputs/radio_input.rb +41 -0
  193. data/lib/adminterface/extensions/inputs/range_input.rb +22 -0
  194. data/lib/adminterface/extensions/inputs/rich_text_area_input.rb +21 -0
  195. data/lib/adminterface/extensions/inputs/search_input.rb +23 -0
  196. data/lib/adminterface/extensions/inputs/select_input.rb +33 -0
  197. data/lib/adminterface/extensions/inputs/string_input.rb +19 -0
  198. data/lib/adminterface/extensions/inputs/switch_input.rb +11 -0
  199. data/lib/adminterface/extensions/inputs/text_input.rb +27 -0
  200. data/lib/adminterface/extensions/inputs/time_picker_input.rb +19 -0
  201. data/lib/adminterface/extensions/inputs/time_select_input.rb +7 -0
  202. data/lib/adminterface/extensions/inputs/time_zone_input.rb +33 -0
  203. data/lib/adminterface/extensions/inputs/url_input.rb +23 -0
  204. data/lib/adminterface/extensions/menu_item.rb +16 -0
  205. data/lib/adminterface/extensions/namespace_settings.rb +30 -0
  206. data/lib/adminterface/extensions/orm/active_record/comments/views/active_admin_comments.rb +122 -0
  207. data/lib/adminterface/extensions/resource/action_items.rb +117 -0
  208. data/lib/adminterface/extensions/sidebar_section.rb +35 -0
  209. data/lib/adminterface/extensions/view_helpers/alert_helper.rb +38 -0
  210. data/lib/adminterface/extensions/view_helpers/component_helper.rb +23 -0
  211. data/lib/adminterface/extensions/views/action_items.rb +39 -0
  212. data/lib/adminterface/extensions/views/columns.rb +59 -0
  213. data/lib/adminterface/extensions/views/components/active_admin_form.rb +47 -0
  214. data/lib/adminterface/extensions/views/components/attributes_table.rb +28 -0
  215. data/lib/adminterface/extensions/views/components/blank_slate.rb +19 -0
  216. data/lib/adminterface/extensions/views/components/dropdown_menu.rb +58 -0
  217. data/lib/adminterface/extensions/views/components/icon.rb +26 -0
  218. data/lib/adminterface/extensions/views/components/index_list.rb +43 -0
  219. data/lib/adminterface/extensions/views/components/menu.rb +18 -0
  220. data/lib/adminterface/extensions/views/components/menu_item.rb +69 -0
  221. data/lib/adminterface/extensions/views/components/paginated_collection.rb +52 -0
  222. data/lib/adminterface/extensions/views/components/panel.rb +71 -0
  223. data/lib/adminterface/extensions/views/components/scopes.rb +53 -0
  224. data/lib/adminterface/extensions/views/components/sidebar_section.rb +39 -0
  225. data/lib/adminterface/extensions/views/components/site_title.rb +36 -0
  226. data/lib/adminterface/extensions/views/components/status_tag.rb +26 -0
  227. data/lib/adminterface/extensions/views/components/table_for.rb +23 -0
  228. data/lib/adminterface/extensions/views/components/tabs.rb +101 -0
  229. data/lib/adminterface/extensions/views/footer.rb +27 -0
  230. data/lib/adminterface/extensions/views/header.rb +60 -0
  231. data/lib/adminterface/extensions/views/index_as_grid.rb +53 -0
  232. data/lib/adminterface/extensions/views/index_as_table.rb +77 -0
  233. data/lib/adminterface/extensions/views/pages/base.rb +165 -0
  234. data/lib/adminterface/extensions/views/pages/form.rb +27 -0
  235. data/lib/adminterface/extensions/views/pages/index.rb +136 -0
  236. data/lib/adminterface/extensions/views/pages/page.rb +18 -0
  237. data/lib/adminterface/extensions/views/title_bar.rb +74 -0
  238. data/lib/adminterface/fixtures/components.yml +73 -0
  239. data/lib/adminterface/fixtures/css_classes.yml +107 -0
  240. data/lib/adminterface/initializers/batch_actions.rb +15 -0
  241. data/lib/adminterface/initializers/comments.rb +13 -0
  242. data/lib/adminterface/initializers/configurations.rb +38 -0
  243. data/lib/adminterface/initializers/formtastic.rb +58 -0
  244. data/lib/adminterface/initializers/resource.rb +20 -0
  245. data/lib/adminterface/initializers/view_helpers.rb +14 -0
  246. data/lib/adminterface/initializers/views.rb +39 -0
  247. data/lib/adminterface/license.rb +18 -0
  248. data/lib/adminterface/licensing/base.rb +99 -0
  249. data/lib/adminterface/licensing/commercial.rb +7 -0
  250. data/lib/adminterface/licensing/notice.rb +54 -0
  251. data/lib/adminterface/licensing/personal.rb +13 -0
  252. data/lib/adminterface/public.pem +9 -0
  253. data/lib/adminterface/version.rb +3 -0
  254. data/lib/adminterface.rb +55 -0
  255. data/lib/generators/adminterface/comments/comments_generator.rb +33 -0
  256. data/lib/generators/adminterface/comments/templates/README +13 -0
  257. data/lib/generators/adminterface/comments/templates/active_admin_comment_action_text.rb +18 -0
  258. data/lib/generators/adminterface/comments/templates/migrations/drop_body_for_active_admin_comments.rb.erb +28 -0
  259. data/lib/generators/adminterface/configs/configs_generator.rb +19 -0
  260. data/lib/generators/adminterface/configs/templates/README +33 -0
  261. data/lib/generators/adminterface/install/install_generator.rb +39 -0
  262. data/lib/generators/adminterface/install/templates/dashboard.rb +32 -0
  263. data/lib/generators/adminterface/views/views_generator.rb +15 -0
  264. data/lib/generators/adminterface/webpacker/templates/README +27 -0
  265. data/lib/generators/adminterface/webpacker/templates/active_admin.js +12 -0
  266. data/lib/generators/adminterface/webpacker/templates/active_admin.scss +8 -0
  267. data/lib/generators/adminterface/webpacker/templates/print.scss +3 -0
  268. data/lib/generators/adminterface/webpacker/webpacker_generator.rb +69 -0
  269. data/lib/tasks/adminterface_tasks.rake +4 -0
  270. metadata +291 -10
  271. data/lib/name.rb +0 -1
@@ -0,0 +1,165 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Pages
5
+ module Base
6
+ def build(*args)
7
+ super
8
+ build_breakpoint_helpers
9
+ build_meta_tags_for_js
10
+ end
11
+
12
+ private
13
+
14
+ def build_meta_tags_for_js
15
+ div id: "meta-tags-for-js" do
16
+ meta name: "countries", content: ::Adminterface::Data::Countries.call(I18n.locale).to_json
17
+ meta name: "time_zones", content: ::Adminterface::Data::TimeZones.call(I18n.locale).to_json
18
+ meta name: "translations", content: I18n.t("active_admin").to_json
19
+ meta name: "components", content: {inputs: inputs_components}.to_json
20
+ meta name: "css_classes", content: {confirm_dialog: confirm_dialog_css_classes}.to_json
21
+ end
22
+ end
23
+
24
+ def build_breakpoint_helpers
25
+ div id: "breakpoint-helpers" do
26
+ span class: "breakpoint-up-helper"
27
+ span class: "breakpoint-down-helper"
28
+ end
29
+ end
30
+
31
+ def build_page
32
+ within body(class: body_classes) do
33
+ header(active_admin_namespace, current_menu)
34
+ title_bar(active_admin_namespace, title, action_items_for_action)
35
+
36
+ div id: "wrapper" do
37
+ build_flash_messages
38
+ build_unsupported_browser
39
+ build_page_content
40
+ end
41
+ end
42
+ end
43
+
44
+ def build_page_content
45
+ div id: "active_admin_content" do
46
+ build_left_sidebar_content
47
+ build_body_content
48
+ build_right_sidebar_content
49
+ end
50
+ end
51
+
52
+ def build_body_content
53
+ div main_html_options do
54
+ div class: content_wrapper_class do
55
+ build_main_content_wrapper
56
+ footer active_admin_namespace
57
+ end
58
+ end
59
+ end
60
+
61
+ def build_left_sidebar_content
62
+ return if skip_left_sidebar?
63
+
64
+ div sidebar(sidebar_sections_for_action_for_position("left"), class: "container"), id: "sidebar-left"
65
+ end
66
+
67
+ def build_right_sidebar_content
68
+ return if skip_right_sidebar?
69
+
70
+ div sidebar(sidebar_sections_for_action_for_position("right"), class: "container"), id: "sidebar-right"
71
+ end
72
+
73
+ def skip_left_sidebar?
74
+ skip_sidebar? || sidebar_sections_for_action_for_position("left").empty?
75
+ end
76
+
77
+ def skip_right_sidebar?
78
+ skip_sidebar? || sidebar_sections_for_action_for_position("right").empty?
79
+ end
80
+
81
+ def sidebar_sections_for_action_for_position(position)
82
+ sections = sidebar_sections_for_action.select { |x| x.position.eql?(position) }
83
+ sections += sidebar_sections_for_action.select { |x| x.position.blank? } if sidebar_position.eql?(position)
84
+ sections
85
+ end
86
+
87
+ def body_classes
88
+ super.add "#{html_css_classes[:body]} layout-navigation-#{header_position} #{sidebar_class}".squish
89
+ end
90
+
91
+ def sidebar_class
92
+ classes = []
93
+ classes.push "with-left-sidebar" unless skip_left_sidebar?
94
+ classes.push "with-right-sidebar" unless skip_right_sidebar?
95
+ classes.push "without-sidebar" if classes.empty?
96
+ classes.join(" ")
97
+ end
98
+
99
+ def build_flash_messages
100
+ return if flash_messages.blank?
101
+
102
+ div class: "flashes" do
103
+ flash_messages.each do |type, messages|
104
+ [*messages].each do |message|
105
+ div class: "flash flash_#{type} alert #{flash_css_classes[type.to_sym]} #{flash_dismissible_class}".squish,
106
+ role: "alert" do
107
+ text_node(message)
108
+ button(class: "btn-close", "data-bs-dismiss": "alert", "aria-label": "Close") if flash_dismissible?
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ def flash_dismissible?
116
+ flash_components[:dismissible].eql?(true)
117
+ end
118
+
119
+ def flash_dismissible_class
120
+ return unless flash_dismissible?
121
+ "alert-dismissible"
122
+ end
123
+
124
+ def main_html_options
125
+ options = config[:main] || {}
126
+ options[:class] = "#{sidebar_class} #{options[:class]}".squish
127
+ options[:id] = "main"
128
+ options
129
+ end
130
+
131
+ def content_wrapper_class
132
+ klass =
133
+ case self.class.to_s
134
+ when "ActiveAdmin::Views::Pages::Index"
135
+ html_css_classes.dig(:container, :index)
136
+ when "ActiveAdmin::Views::Pages::Form"
137
+ html_css_classes.dig(:container, :form)
138
+ when "ActiveAdmin::Views::Pages::Show"
139
+ html_css_classes.dig(:container, :show)
140
+ when "ActiveAdmin::Views::Pages::Page"
141
+ html_css_classes.dig(:container, :page)
142
+ end
143
+ klass || "container"
144
+ end
145
+
146
+ def sidebar_position
147
+ sidebar_components[:position]
148
+ end
149
+
150
+ def header_position
151
+ header_components[:position]
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
158
+
159
+ # Overwrite activeadmin/lib/active_admin/views/pages/base.rb
160
+ ActiveAdmin::Views::Pages::Base.class_eval do
161
+ include Adminterface::Configs::Finders
162
+ prepend Adminterface::Extensions::Views::Pages::Base
163
+ has_css_classes_for :html, :flash, :confirm_dialog
164
+ has_components_for :flash, :sidebar, :header, :inputs
165
+ end
@@ -0,0 +1,27 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Pages
5
+ module Form
6
+ def main_content
7
+ options = default_form_options.merge form_presenter.options
8
+
9
+ if options[:partial]
10
+ render options[:partial]
11
+ elsif options[:multiple]
12
+ instance_exec(&form_presenter.block)
13
+ else
14
+ active_admin_form_for resource, options, &form_presenter.block
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ # Overwrite activeadmin/lib/active_admin/views/pages/form.rb
24
+ ActiveAdmin::Views::Pages::Form.class_eval do
25
+ prepend Adminterface::Extensions::Views::Pages::Form
26
+ alias_method :form_section, :active_admin_form_for
27
+ end
@@ -0,0 +1,136 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Pages
5
+ module Index
6
+ FILTER_OPTS = %w[sidebar table_tools aside].freeze
7
+
8
+ def main_content
9
+ unless FILTER_OPTS.include?(filter_position)
10
+ raise "Invalid layouts -> filter. Available options are: #{FILTER_OPTS.join(", ")}"
11
+ end
12
+
13
+ build_table_tools
14
+ wrap_with_batch_action_form do
15
+ build_collection
16
+ end
17
+ end
18
+
19
+ def build_page
20
+ super.add_child(build_aside)
21
+ end
22
+
23
+ def build_table_tools
24
+ return unless any_table_tools?
25
+
26
+ div class: "table_tools" do
27
+ build_scopes
28
+ build_table_tools_filters
29
+ div class: "scope_ctrls" do
30
+ build_batch_actions_selector
31
+ build_index_list
32
+ build_table_tools_filter_toggler
33
+ end
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def action_items_for_action
40
+ if filter_position.eql?("aside")
41
+ items = super << aside_filter_action
42
+ items.sort_by { |x| [x.group, x.priority] }
43
+ else
44
+ super
45
+ end
46
+ end
47
+
48
+ def aside_filter_action
49
+ ActiveAdmin::ActionItem.new(:filter, only: :index, group: 90) do
50
+ localizer = ActiveAdmin::Localizers.resource(active_admin_config)
51
+ link_to localizer.t(:filter_model), "#",
52
+ id: "filters-toggler",
53
+ data: {"bs-toggle": "collapse", "bs-target": "#filters"},
54
+ title: I18n.t(:filters, scope: "active_admin.sidebars")
55
+ end
56
+ end
57
+
58
+ def build_aside
59
+ return if filter_sections.blank?
60
+ return unless filter_position.eql?("aside")
61
+
62
+ div id: "filters", class: "collapse aside" do
63
+ button "", type: "button", id: "filters-close", class: "btn-close", href: "#", "data-bs-toggle": "collapse", "data-bs-target": "#filters"
64
+ filter_sections.collect { |x| sidebar_section(x) }
65
+ end
66
+ end
67
+
68
+ def build_table_tools_filters
69
+ return if filter_sections.blank?
70
+ return unless filter_position.eql?("table_tools")
71
+
72
+ div id: "filters", class: "collapse table-tools" do
73
+ filter_sections.collect { |x| sidebar_section(x) }
74
+ end
75
+ end
76
+
77
+ def build_table_tools_filter_toggler
78
+ return if filter_sections.blank?
79
+ return unless filter_position.eql?("table_tools")
80
+
81
+ div id: "filters-toggler" do
82
+ a span(I18n.t("active_admin.sidebars.filters")),
83
+ href: "#", class: "filter_toggler #{table_tools_css_classes[:btn]}",
84
+ 'data-bs-toggle': "collapse", 'data-bs-target': "#filters"
85
+ end
86
+ end
87
+
88
+ def filter_section?(section)
89
+ section.name.to_sym == :filters
90
+ end
91
+
92
+ def filter_sections
93
+ sections = []
94
+ available_sidebar_sections.collect do |section|
95
+ next unless filter_section?(section)
96
+
97
+ sections.push section
98
+ end
99
+ sections
100
+ end
101
+
102
+ def skip_sidebar?
103
+ sidebar_sections_for_action.empty? || assigns[:skip_sidebar] == true
104
+ end
105
+
106
+ def available_sidebar_sections
107
+ if active_admin_config&.sidebar_sections?
108
+ active_admin_config.sidebar_sections_for(params[:action], self)
109
+ else
110
+ []
111
+ end
112
+ end
113
+
114
+ def sidebar_sections_for_action
115
+ if filter_position.eql?("sidebar")
116
+ available_sidebar_sections
117
+ else
118
+ available_sidebar_sections.reject { |x| x.name.to_sym == :filters }
119
+ end
120
+ end
121
+
122
+ def filter_position
123
+ filter_components[:position]
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ # Overwrite activeadmin/lib/active_admin/views/pages/index.rb
132
+ ActiveAdmin::Views::Pages::Index.class_eval do
133
+ prepend Adminterface::Extensions::Views::Pages::Index
134
+ has_css_classes_for :table_tools
135
+ has_components_for :filter
136
+ end
@@ -0,0 +1,18 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Pages
5
+ module Page
6
+ def body_classes
7
+ super.add "page"
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ # Overwrite activeadmin/lib/active_admin/views/pages/page.rb
16
+ ActiveAdmin::Views::Pages::Page.class_eval do
17
+ prepend Adminterface::Extensions::Views::Pages::Page
18
+ end
@@ -0,0 +1,74 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module TitleBar
5
+ def tag_name
6
+ :nav
7
+ end
8
+
9
+ private
10
+
11
+ def build_titlebar_left
12
+ div build_breadcrumb, id: "titlebar_left"
13
+ end
14
+
15
+ def build_header_toggler
16
+ button class: "navbar-toggler", "data-aa-header-toggler": {}.to_json do
17
+ span class: "navbar-toggler-icon"
18
+ end
19
+ end
20
+
21
+ def build_titlebar_right
22
+ return if @action_items.blank?
23
+
24
+ super
25
+ end
26
+
27
+ def links
28
+ breadcrumb_config = active_admin_config&.breadcrumb
29
+ if breadcrumb_config.is_a?(Proc)
30
+ instance_exec(controller, &active_admin_config.breadcrumb)
31
+ elsif breadcrumb_config.present?
32
+ breadcrumb_links
33
+ end
34
+ end
35
+
36
+ def build_breadcrumb(_separator = "/")
37
+ ol id: "breadcrumb", class: "breadcrumb" do
38
+ links.each do |link|
39
+ li(text_node(link), class: "breadcrumb-item")
40
+ end
41
+ li(text_node(@title), class: "breadcrumb-item active")
42
+ end
43
+ end
44
+
45
+ def build_action_items
46
+ @action_items.group_by(&:group).each do |_index, items|
47
+ insert_tag(view_factory.action_items, items)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ # Overwrite activeadmin/lib/active_admin/views/title_bar.rb
56
+ ActiveAdmin::Views::TitleBar.class_eval do
57
+ prepend Adminterface::Extensions::Views::TitleBar
58
+ has_css_classes_for :title_bar
59
+
60
+ def build(namespace, title, action_items)
61
+ super(id: "title_bar")
62
+ add_class "navbar #{title_bar_css_classes[:wrapper]}".squish
63
+ @title = title
64
+ @action_items = action_items
65
+ @namespace = namespace
66
+
67
+ div class: title_bar_css_classes[:container] do
68
+ build_header_toggler
69
+ site_title @namespace
70
+ build_titlebar_left
71
+ build_titlebar_right
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,73 @@
1
+ ---
2
+ action_items:
3
+ destroy:
4
+ css_class: null
5
+ icon_class: null
6
+ only:
7
+ - show
8
+ edit:
9
+ css_class: null
10
+ icon_class: null
11
+ only:
12
+ - show
13
+ new:
14
+ css_class: btn btn-primary
15
+ icon_class: null
16
+ only:
17
+ - index
18
+ columns:
19
+ breakpoint: md
20
+ filter:
21
+ position: sidebar
22
+ flash:
23
+ dismissible: true
24
+ header:
25
+ css_class:
26
+ aside: navbar-light bg-light
27
+ sidebar: navbar-dark bg-dark
28
+ top: navbar-dark bg-dark navbar-expand-lg
29
+ position: top
30
+ index_as_grid:
31
+ breakpoint: lg
32
+ inputs:
33
+ date_picker: &DATE_PICKER_CONFIGS
34
+ js:
35
+ - name: flatpickr
36
+ default: true
37
+ options:
38
+ altFormat: Y-m-d
39
+ altInput: true
40
+ enableTime: false
41
+ datepicker:
42
+ <<: *DATE_PICKER_CONFIGS
43
+ datetime_picker:
44
+ js:
45
+ - name: flatpickr
46
+ default: true
47
+ options:
48
+ altFormat: Y-m-d, h:i K
49
+ altInput: true
50
+ enableTime: true
51
+ select:
52
+ js:
53
+ - name: tom-select
54
+ default: false
55
+ options:
56
+ plugins:
57
+ - remove_button
58
+ persist: false
59
+ createOnBlur: false
60
+ create: false
61
+ text:
62
+ js:
63
+ - name: input-counter
64
+ default: false
65
+ options:
66
+ limit: 300
67
+ type: letter
68
+ password:
69
+ js:
70
+ - name: password-visibility
71
+ default: false
72
+ sidebar:
73
+ position: right
@@ -0,0 +1,107 @@
1
+ ---
2
+ action_items:
3
+ group: btn-group
4
+ item: btn btn-light
5
+ attributes_table:
6
+ table: table text-break
7
+ wrapper: table-responsive
8
+ blank_slate: alert alert-secondary text-center
9
+ columns: g-3
10
+ comments:
11
+ body: card-body
12
+ header:
13
+ title: h5 mb-0
14
+ wrapper: card-header
15
+ item:
16
+ actions: text-secondary caret-dots
17
+ body: py-2
18
+ group: list-group list-group-flush
19
+ header:
20
+ author: h6 mb-0
21
+ meta: small text-secondary
22
+ wrapper: null
23
+ wrapper: mb-3
24
+ pagination:
25
+ meta: mb-3 border-bottom
26
+ submit: btn btn-primary
27
+ wrapper: card
28
+ confirm_dialog:
29
+ cancel: btn btn-link
30
+ confirm: btn btn-primary
31
+ filters:
32
+ actions:
33
+ cancel: btn btn-link
34
+ submit: btn btn-primary
35
+ flash:
36
+ alert: alert-warning
37
+ error: alert-danger
38
+ notice: alert-success
39
+ footer:
40
+ body: small text-muted
41
+ wrapper: mt-3 text-center
42
+ form:
43
+ actions:
44
+ cancel: btn btn-link
45
+ submit: btn btn-primary
46
+ error: alert alert-danger
47
+ has_many:
48
+ destroy: text-danger
49
+ heading: h5
50
+ item: border rounded mb-3 p-3
51
+ new: null
52
+ header:
53
+ container: container-fluid
54
+ wrapper: null
55
+ html:
56
+ body: null
57
+ container:
58
+ form: container
59
+ index: container
60
+ page: container
61
+ show: container
62
+ icon: bi
63
+ index_as_grid:
64
+ group: row g-3
65
+ item: d-flex flex-column
66
+ index_as_table:
67
+ actions:
68
+ dropdown:
69
+ toggle: btn btn-sm btn-light
70
+ buttons:
71
+ group: btn-group
72
+ item: btn btn-sm btn-light
73
+ table: table
74
+ wrapper: table-responsive
75
+ panel:
76
+ body: card-body
77
+ header:
78
+ title: h5 mb-0
79
+ wrapper: card-header
80
+ wrapper: card
81
+ sidebar_section:
82
+ body: card-body
83
+ header:
84
+ title: h5 mb-0
85
+ wrapper: card-header
86
+ wrapper: card
87
+ status_tag:
88
+ 'no': badge bg-danger
89
+ unset: badge bg-danger
90
+ 'yes': badge bg-success
91
+ table_for: table
92
+ table_tools:
93
+ btn: btn btn-light
94
+ confirm_dialog:
95
+ cancel: btn btn-link
96
+ confirm: btn btn-primary
97
+ indexes:
98
+ tabs: nav-pills nav-sm
99
+ scopes:
100
+ counts:
101
+ positive: badge bg-primary
102
+ zero: d-none
103
+ tabs: nav-tabs
104
+ tabs: nav-tabs
105
+ title_bar:
106
+ container: container-fluid
107
+ wrapper: navbar-light bg-white border shadow-sm
@@ -0,0 +1,15 @@
1
+ module Adminterface
2
+ module Initializers
3
+ module BatchActions
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ ActiveAdmin.before_load do |_app|
8
+ require_relative("../extensions/batch_actions/resource_extension")
9
+ require_relative("../extensions/batch_actions/views/batch_action_selector")
10
+ require_relative("../extensions/batch_actions/views/selection_cells")
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module Adminterface
2
+ module Initializers
3
+ module Comments
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ config.before_configuration do |_app|
8
+ require_relative("../extensions/orm/active_record/comments/views/active_admin_comments")
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,38 @@
1
+ module Adminterface
2
+ module Initializers
3
+ module Configurations
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ config.before_configuration do |_app|
8
+ require_relative("../extensions/dynamic_settings_node")
9
+ require_relative("../extensions/namespace_settings")
10
+
11
+ # Include the configs finder for not registered class/module files
12
+ ActiveAdmin::Views::FormtasticProxy.send :include, Adminterface::Configs::Finders
13
+ ActiveAdmin::Component.send :include, Adminterface::Configs::Finders
14
+ ActiveAdmin::ViewHelpers.send :include, Adminterface::Configs::Finders
15
+ ActiveAdmin::Resource.send :include, Adminterface::Configs::Configurable
16
+ ActiveAdmin::Page.send :include, Adminterface::Configs::Configurable
17
+ end
18
+
19
+ # Override ActiveAdmin defaults
20
+ config.before_initialize do
21
+ ActiveAdmin.setup do |config|
22
+ config.current_filters = false
23
+ config.comments_menu = false
24
+ config.comments_order = "created_at DESC"
25
+
26
+ meta_tags = {
27
+ version: Adminterface::VERSION,
28
+ viewport: "width=device-width, height=device-height, initial-scale=1.0"
29
+ }
30
+
31
+ config.meta_tags_for_logged_out_pages = meta_tags
32
+ config.meta_tags = meta_tags
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end