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,76 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Components
5
+ module Tabs
6
+ def build_menu_item(title, options, &_block)
7
+ fragment = options.fetch(:id, fragmentize(title))
8
+ html_options = options.fetch(:html_options, {})
9
+ li html_options.merge(class: "nav-item") do
10
+ if @http
11
+ params[:tab] ||= @default_tab || fragment
12
+ link_to title, url_for(tab: fragment, anchor: id, anchor_id: id), class: toggler_class(fragment)
13
+ else
14
+ link_to title, "##{fragment}", class: toggler_class(fragment), data: {"bs-toggle": "tab", "bs-target": "##{fragment}"}
15
+ end
16
+ end
17
+ end
18
+
19
+ def build_content_item(title, options, &block)
20
+ fragment = options.fetch(:id, fragmentize(title))
21
+ options = options.reverse_merge(id: fragmentize(title))
22
+ div(options.merge(class: tab_pane_class(fragment)), &block)
23
+ end
24
+
25
+ def default_css_class
26
+ tabs_css_classes
27
+ end
28
+
29
+ def nav_html_options
30
+ nav_html[:class] = "nav #{default_css_class} #{nav_html[:class]}".squish
31
+ nav_html[:role] = "tablist"
32
+ nav_html
33
+ end
34
+
35
+ def content_html_options
36
+ content_html[:class] = "tab-content #{content_html[:class]}".squish
37
+ content_html
38
+ end
39
+
40
+ private
41
+
42
+ def toggler_class(fragment)
43
+ "nav-link #{current_tab?(fragment) ? "active" : nil}".squish
44
+ end
45
+
46
+ def tab_pane_class(fragment)
47
+ "tab-pane #{current_tab?(fragment) ? "active" : nil}".squish
48
+ end
49
+
50
+ def current_tab?(fragment)
51
+ fragment.eql?(params[:tab]) || (!@http && @tabs_content&.children.blank?)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ # Overwrite activeadmin/lib/active_admin/views/components/tabs.rb
60
+ ActiveAdmin::Views::Tabs.class_eval do
61
+ prepend Adminterface::Extensions::Views::Components::Tabs
62
+ has_css_classes_for :tabs
63
+ attr_accessor :nav_html, :content_html, :id
64
+
65
+ def build(options = {}, &_block)
66
+ @nav_html = options.delete(:nav_html) || {}
67
+ @content_html = options.delete(:content_html) || {}
68
+ @http = options.delete(:http) { false }
69
+ @default_tab = options.delete(:default)
70
+ @id = options[:id]
71
+ super(options)
72
+
73
+ @menu = ul(**nav_html_options)
74
+ @tabs_content = div(**content_html_options)
75
+ end
76
+ end
@@ -0,0 +1,27 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Footer
5
+ def default_class_name
6
+ "#{super} #{footer_css_classes[:wrapper]}".squish
7
+ end
8
+
9
+ def para(message)
10
+ super(message, class: footer_css_classes[:body])
11
+ end
12
+
13
+ def powered_by_message
14
+ I18n.t("active_admin.powered_by",
15
+ active_admin: link_to("Adminterface", "https://github.com/CMDBrew/adminterface", target: "_blank", rel: "noopener"),
16
+ version: Adminterface::VERSION).html_safe
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ # Overwrite activeadmin/lib/active_admin/views/header.rb
24
+ ActiveAdmin::Views::Footer.class_eval do
25
+ prepend Adminterface::Extensions::Views::Footer
26
+ has_css_classes_for :footer
27
+ end
@@ -0,0 +1,59 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Header
5
+ ID = "header-nav".freeze
6
+
7
+ def tag_name
8
+ :nav
9
+ end
10
+
11
+ private
12
+
13
+ def build_navigations
14
+ add_class "navbar #{header_css_classes[:wrapper]}".squish
15
+ add_class header_position_class if header_position_class.present?
16
+ site_title @namespace
17
+ navbar_toggler
18
+ navbar_nav
19
+ end
20
+
21
+ def navbar_nav
22
+ div id: ID, class: "collapse navbar-collapse" do
23
+ global_navigation @menu, id: "main-nav", class: "navbar-nav"
24
+ utility_navigation @utility_menu, id: "utility-nav", class: "navbar-nav"
25
+ end
26
+ end
27
+
28
+ def navbar_toggler
29
+ button(class: "navbar-toggler", 'data-bs-target': "##{ID}", 'data-bs-toggle': "collapse") do
30
+ span class: "navbar-toggler-icon"
31
+ end
32
+ end
33
+
34
+ def header_position_class
35
+ header_components.dig(:css_class, header_components[:position]&.to_sym)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ # Overwrite activeadmin/lib/active_admin/views/header.rb
43
+ ActiveAdmin::Views::Header.class_eval do
44
+ prepend Adminterface::Extensions::Views::Header
45
+ has_css_classes_for :header
46
+ has_components_for :header
47
+
48
+ def build(namespace, menu)
49
+ super(id: "header")
50
+
51
+ @namespace = namespace
52
+ @menu = menu
53
+ @utility_menu = @namespace.fetch_menu(:utility_navigation)
54
+
55
+ div class: "header-container #{header_css_classes[:container]}".squish do
56
+ build_navigations
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,53 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module IndexAsGrid
5
+ def size
6
+ @page_presenter[:size] || index_as_grid_components[:breakpoint]
7
+ end
8
+
9
+ protected
10
+
11
+ def build_table
12
+ resource_selection_toggle_panel if active_admin_config.batch_actions.any?
13
+ div class: "index_grid" do
14
+ @collection.in_groups_of(number_of_columns).each do |group|
15
+ build_row(group)
16
+ end
17
+ end
18
+ end
19
+
20
+ def build_row(group)
21
+ div class: index_as_grid_css_classes[:group] do
22
+ group.each do |item|
23
+ next if item.blank?
24
+
25
+ build_item(item)
26
+ end
27
+ end
28
+ end
29
+
30
+ def build_item(item)
31
+ div class: "#{column_klass} #{index_as_grid_css_classes[:item]}".squish, for: item do
32
+ instance_exec(item, &@page_presenter.block)
33
+ end
34
+ end
35
+
36
+ def span_size
37
+ 12 / number_of_columns
38
+ end
39
+
40
+ def column_klass
41
+ ["col", size, span_size].delete_if(&:blank?).join("-")
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ # Overwrite activeadmin/lib/active_admin/views/index_as_grid.rb
49
+ ActiveAdmin::Views::IndexAsGrid.class_eval do
50
+ prepend Adminterface::Extensions::Views::IndexAsGrid
51
+ has_css_classes_for :index_as_grid
52
+ has_components_for :index_as_grid
53
+ end
@@ -0,0 +1,77 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module IndexAsTable
5
+ def table_for(*args, &block)
6
+ div class: index_as_table_css_classes[:wrapper] do
7
+ super(*args, &block)
8
+ end
9
+ end
10
+
11
+ def default_class_name
12
+ "#{super} index"
13
+ end
14
+ end
15
+
16
+ module IndexTableFor
17
+ def default_css_classes
18
+ "#{super} #{index_as_table_css_classes[:table]}".squish
19
+ end
20
+
21
+ def dropdown_menu(*args, &block)
22
+ options = args.extract_options!
23
+ super(*args, options.merge(button: {class: index_as_table_css_classes.dig(:actions, :dropdown, :toggle)}), &block)
24
+ end
25
+ end
26
+
27
+ module TableActions
28
+ def default_class_name
29
+ "#{super} #{index_as_table_css_classes.dig(:actions, :buttons, :group)}".squish
30
+ end
31
+
32
+ def item(*args)
33
+ options = args.extract_options!
34
+ options[:class] = "#{options[:class]} #{index_as_table_css_classes.dig(:actions, :buttons, :item)}".squish
35
+ options["data-aa-confirm-dialog"] = confirm_dialog_config.to_json if confirm?(options)
36
+ text_node link_to(*args, options)
37
+ end
38
+
39
+ def confirm?(options)
40
+ options.dig(:data, :confirm).present?
41
+ end
42
+
43
+ def confirm_dialog_config
44
+ {
45
+ buttons: {
46
+ confirm: {
47
+ text: I18n.t(:confirm, scope: "active_admin.confirm_dialog"),
48
+ class: confirm_dialog_css_classes[:confirm]
49
+ },
50
+ cancel: {
51
+ text: I18n.t(:cancel, scope: "active_admin.confirm_dialog"),
52
+ class: confirm_dialog_css_classes[:cancel]
53
+ }
54
+ }
55
+ }
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ # Overwrite activeadmin/lib/active_admin/views/index_as_table.rb
63
+ ActiveAdmin::Views::IndexAsTable.class_eval do
64
+ prepend Adminterface::Extensions::Views::IndexAsTable
65
+ has_css_classes_for :index_as_table
66
+ end
67
+
68
+ ActiveAdmin::Views::IndexAsTable::IndexTableFor.class_eval do
69
+ prepend Adminterface::Extensions::Views::IndexTableFor
70
+ has_css_classes_for :index_as_table
71
+ end
72
+
73
+ ActiveAdmin::Views::IndexAsTable::IndexTableFor::TableActions.class_eval do
74
+ prepend Adminterface::Extensions::Views::TableActions
75
+ has_css_classes_for :index_as_table
76
+ has_css_classes_for :confirm_dialog
77
+ end
@@ -0,0 +1,164 @@
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 do
106
+ text_node(message)
107
+ button(class: "btn-close", "data-bs-dismiss": "alert", "aria-label": "Close") if flash_dismissible?
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ def flash_dismissible?
115
+ flash_components[:dismissible].eql?(true)
116
+ end
117
+
118
+ def flash_dismissible_class
119
+ return unless flash_dismissible?
120
+ "alert-dismissible"
121
+ end
122
+
123
+ def main_html_options
124
+ options = config[:main] || {}
125
+ options[:class] = "#{sidebar_class} #{options[:class]}".squish
126
+ options[:id] = "main"
127
+ options
128
+ end
129
+
130
+ def content_wrapper_class
131
+ klass =
132
+ case self.class.to_s
133
+ when "ActiveAdmin::Views::Pages::Index"
134
+ html_css_classes.dig(:container, :index)
135
+ when "ActiveAdmin::Views::Pages::Form"
136
+ html_css_classes.dig(:container, :form)
137
+ when "ActiveAdmin::Views::Pages::Show"
138
+ html_css_classes.dig(:container, :show)
139
+ when "ActiveAdmin::Views::Pages::Page"
140
+ html_css_classes.dig(:container, :page)
141
+ end
142
+ klass || "container"
143
+ end
144
+
145
+ def sidebar_position
146
+ sidebar_components[:position]
147
+ end
148
+
149
+ def header_position
150
+ header_components[:position]
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+ # Overwrite activeadmin/lib/active_admin/views/pages/base.rb
159
+ ActiveAdmin::Views::Pages::Base.class_eval do
160
+ include Adminterface::Configs::Finders
161
+ prepend Adminterface::Extensions::Views::Pages::Base
162
+ has_css_classes_for :html, :flash, :confirm_dialog
163
+ has_components_for :flash, :sidebar, :header, :inputs
164
+ 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