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,22 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module RangeInput
5
+ include Base
6
+
7
+ def input_html_options
8
+ opts = options[:input_html] || {}
9
+ super.merge(class: "form-range #{opts[:class]}".squish)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ module ActiveAdmin
17
+ module Inputs
18
+ class RangeInput < ::Formtastic::Inputs::RangeInput
19
+ include ::Adminterface::Extensions::Inputs::RangeInput
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ require_relative("./text_input")
2
+
3
+ module ActiveAdmin
4
+ module Inputs
5
+ class RichTextAreaInput < TextInput
6
+ include ::Adminterface::Extensions::Inputs::Base
7
+
8
+ def input_html_options
9
+ opts = super
10
+ opts.merge(class: "trix-content #{opts[:class]}".squish)
11
+ end
12
+
13
+ def to_html
14
+ input_wrapping do
15
+ label_html <<
16
+ builder.rich_text_area(method, input_html_options)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module SearchInput
5
+ include Base
6
+ include Base::Stringish
7
+ prepend Base::Groupish
8
+
9
+ def input_html
10
+ builder.search_field(method, input_html_options)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ module ActiveAdmin
18
+ module Inputs
19
+ class SearchInput < ::Formtastic::Inputs::SearchInput
20
+ include ::Adminterface::Extensions::Inputs::SearchInput
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,33 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module SelectInput
5
+ include Base
6
+ prepend Base::Groupish
7
+
8
+ def to_html
9
+ input_wrapping do
10
+ label_html << input_html
11
+ end
12
+ end
13
+
14
+ def input_html
15
+ select_html
16
+ end
17
+
18
+ def input_html_options
19
+ opts = options[:input_html] || {}
20
+ super.merge(class: "form-select #{opts[:class]}".squish)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ module ActiveAdmin
28
+ module Inputs
29
+ class SelectInput < ::Formtastic::Inputs::SelectInput
30
+ include ::Adminterface::Extensions::Inputs::SelectInput
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module StringInput
5
+ include Base
6
+ include Base::Stringish
7
+ prepend Base::Groupish
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ module ActiveAdmin
14
+ module Inputs
15
+ class StringInput < ::Formtastic::Inputs::StringInput
16
+ include ::Adminterface::Extensions::Inputs::StringInput
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ class SwitchInput < BooleanInput
4
+ include ::Adminterface::Extensions::Inputs::Base
5
+
6
+ def boolean_wrapper_class
7
+ "#{super} form-switch".squish
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module TextInput
5
+ include Base
6
+
7
+ def to_html
8
+ input_wrapping do
9
+ label_html << input_html
10
+ end
11
+ end
12
+
13
+ def input_html
14
+ builder.text_area(method, input_html_options)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ module ActiveAdmin
22
+ module Inputs
23
+ class TextInput < ::Formtastic::Inputs::TextInput
24
+ include ::Adminterface::Extensions::Inputs::TextInput
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module TimePickerInput
5
+ include Base
6
+ include Base::Stringish
7
+ prepend Base::Groupish
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ module ActiveAdmin
14
+ module Inputs
15
+ class TimePickerInput < ::Formtastic::Inputs::TimePickerInput
16
+ include ::Adminterface::Extensions::Inputs::TimePickerInput
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ class TimeSelectInput < ::Formtastic::Inputs::TimeSelectInput
4
+ include ::Adminterface::Extensions::Inputs::Base
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,33 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module TimeZoneInput
5
+ include Base
6
+ prepend Base::Groupish
7
+
8
+ def to_html
9
+ input_wrapping do
10
+ label_html << input_html
11
+ end
12
+ end
13
+
14
+ def input_html
15
+ builder.time_zone_select(method, priority_zones, input_options, input_html_options)
16
+ end
17
+
18
+ def input_html_options
19
+ opts = options[:input_html] || {}
20
+ super.merge(class: "form-select #{opts[:class]}".squish)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ module ActiveAdmin
28
+ module Inputs
29
+ class TimeZoneInput < ::Formtastic::Inputs::TimeZoneInput
30
+ include ::Adminterface::Extensions::Inputs::TimeZoneInput
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,23 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module UrlInput
5
+ include Base
6
+ include Base::Stringish
7
+ prepend Base::Groupish
8
+
9
+ def input_html
10
+ builder.url_field(method, input_html_options)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ module ActiveAdmin
18
+ module Inputs
19
+ class UrlInput < ::Formtastic::Inputs::UrlInput
20
+ include ::Adminterface::Extensions::Inputs::UrlInput
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module MenuItem
4
+ def initialize(options = {})
5
+ @icon = options[:icon]
6
+ super
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ # Overwrite activeadmin/lib/active_admin/menu_item.rb
13
+ ActiveAdmin::MenuItem.class_eval do
14
+ prepend Adminterface::Extensions::MenuItem
15
+ attr_reader :icon
16
+ end
@@ -0,0 +1,30 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module NamespaceSettings
4
+ extend ActiveSupport::Concern
5
+
6
+ CONFIGS = Adminterface::Configs::DEFAULTS
7
+
8
+ included do
9
+ # The default component configs
10
+ register :components, CONFIGS[:components]
11
+
12
+ # The default css_classes
13
+ register :css_classes, CONFIGS[:css_classes]
14
+
15
+ # Comments
16
+ register :comments_pager, {window: 2}
17
+ register :comments_per_page, 30
18
+ register :comments_input, :text
19
+
20
+ # Resource
21
+ register :pager, {window: 2}
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ # Overwrite activeadmin/lib/active_admin/namespace_settings.rb
28
+ ActiveAdmin::NamespaceSettings.class_eval do
29
+ include Adminterface::Extensions::NamespaceSettings
30
+ end
@@ -0,0 +1,122 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module Comments
5
+ def default_title_class
6
+ "title #{comments_css_classes.dig(:header, :title)}".squish
7
+ end
8
+
9
+ def default_wrapper_class
10
+ "panel #{comments_css_classes[:wrapper]}".squish
11
+ end
12
+
13
+ def default_header_class
14
+ "panel-header #{comments_css_classes.dig(:header, :wrapper)}".squish
15
+ end
16
+
17
+ def default_body_class
18
+ "panel-body #{comments_css_classes[:body]}".squish
19
+ end
20
+
21
+ def item_class
22
+ @item_class ||= comments_css_classes.dig(:item)
23
+ end
24
+
25
+ protected
26
+
27
+ def build_comments
28
+ build_comment_form
29
+
30
+ div id: "active_admin_comments_wrap", class: "active_admin_comments" do
31
+ if @comments.any?
32
+ div class: "active_admin_comments_collection #{item_class[:group]}".squish do
33
+ @comments.each(&method(:build_comment))
34
+ end
35
+
36
+ div class: "paginating-footer" do
37
+ defaults = {theme: "active_admin", params: {anchor: "active_admin_comments_wrap"}}
38
+ text_node paginate @comments, **defaults.merge(configs.comments_pager)
39
+ div page_entries_info(@comments).html_safe, class: "pagination_information"
40
+ end
41
+ else
42
+ build_empty_message
43
+ end
44
+ end
45
+ end
46
+
47
+ def build_comment(comment)
48
+ div for: comment, class: "active_admin_comment #{item_class[:wrapper]}".squish do
49
+ div class: "active_admin_comment_header #{item_class.dig(:header, :wrapper)}".squish do
50
+ div class: "active_admin_comment_meta #{item_class.dig(:header, :meta)}".squish do
51
+ div class: "active_admin_comment_author #{item_class.dig(:header, :author)}".squish do
52
+ comment.author ? auto_link(comment.author) : I18n.t("active_admin.comments.author_missing")
53
+ end
54
+
55
+ div pretty_format(comment.created_at), class: "timestamp"
56
+ end
57
+
58
+ comments_actions(comment)
59
+ end
60
+
61
+ div class: "active_admin_comment_body #{item_class[:body]}".squish do
62
+ if comment.body.is_a?(ActionText::RichText)
63
+ text_node comment.body
64
+ else
65
+ simple_format comment.body
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ def comments_actions(comment)
72
+ return unless authorized?(ActiveAdmin::Auth::DESTROY, comment)
73
+
74
+ div class: "actions" do
75
+ dropdown_menu "",
76
+ button: {class: item_class[:actions]},
77
+ menu: {class: "dropdown-menu-right"} do
78
+ item(I18n.t("active_admin.comments.delete"), comments_url(comment.id),
79
+ method: :delete, data: {confirm: I18n.t("active_admin.comments.delete_confirmation")})
80
+ end
81
+ end
82
+ end
83
+
84
+ def build_comment_form
85
+ return unless authorized?(ActiveAdmin::Auth::CREATE, ActiveAdmin::Comment)
86
+
87
+ input_type = configs.comments_input
88
+ css_classes = comments_css_classes
89
+
90
+ active_admin_form_for(ActiveAdmin::Comment.new, url: comment_form_url) do |f|
91
+ f.inputs do
92
+ f.input :resource_type, as: :hidden, input_html: {value: ActiveAdmin::Comment.resource_type(parent.resource)}
93
+ f.input :resource_id, as: :hidden, input_html: {value: parent.resource.id}
94
+ f.input :body, as: input_type, label: false, input_html: {rows: "3"}
95
+ end
96
+ f.actions do
97
+ f.action :submit, label: I18n.t("active_admin.comments.add"), button_html: {class: css_classes["submit"]}
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ # Overwrite activeadmin/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb
107
+ ActiveAdmin::Comments::Views::Comments.class_eval do
108
+ prepend Adminterface::Extensions::Views::Comments
109
+ has_css_classes_for :comments
110
+
111
+ def build(resource)
112
+ if authorized?(ActiveAdmin::Auth::READ, ActiveAdmin::Comment)
113
+ @resource = resource
114
+ @comments =
115
+ active_admin_authorization
116
+ .scope_collection(ActiveAdmin::Comment.find_for_resource_in_namespace(resource, active_admin_namespace.name)
117
+ .includes(:author).public_send(Kaminari.config.page_method_name, params[:page])).per(configs.comments_per_page)
118
+ super(title, for: resource)
119
+ build_comments
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,117 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Resource
4
+ module ActionItems
5
+ def action_items_for(action, render_context = nil)
6
+ super.sort_by { |x| [x.group, x.priority] }
7
+ end
8
+
9
+ def add_default_action_items
10
+ add_default_new_action_item
11
+ add_default_edit_action_item
12
+ add_default_destroy_action_item
13
+ end
14
+
15
+ # Adds the default New link on index
16
+ def add_default_new_action_item
17
+ add_action_item :new, only: proc { components.dig(:action_items, :new, :only)&.map(&:to_sym) } do
18
+ if controller.action_methods.include?("new") && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
19
+ localizer = ActiveAdmin::Localizers.resource(active_admin_config)
20
+ icon_class = active_admin_config.components.dig(:action_items, :new, :icon_class)
21
+
22
+ link_to(
23
+ safe_join([icon_html(icon_class), content_tag(:span, localizer.t(:new_model))]),
24
+ new_resource_path,
25
+ title: localizer.t(:new_model),
26
+ class: active_admin_config.components.dig(:action_items, :new, :css_class)
27
+ )
28
+ end
29
+ end
30
+ end
31
+
32
+ # Adds the default Edit link on show
33
+ def add_default_edit_action_item
34
+ add_action_item :edit, only: proc { components.dig(:action_items, :edit, :only)&.map(&:to_sym) } do
35
+ if controller.action_methods.include?("edit") && authorized?(ActiveAdmin::Auth::UPDATE, resource)
36
+ localizer = ActiveAdmin::Localizers.resource(active_admin_config)
37
+ icon_class = active_admin_config.components.dig(:action_items, :edit, :icon_class)
38
+
39
+ link_to(
40
+ safe_join([icon_html(icon_class), content_tag(:span, localizer.t(:edit_model))]),
41
+ edit_resource_path(resource),
42
+ title: localizer.t(:edit_model),
43
+ class: active_admin_config.components.dig(:action_items, :edit, :css_class)
44
+ )
45
+ end
46
+ end
47
+ end
48
+
49
+ # Adds the default Destroy link on show
50
+ def add_default_destroy_action_item
51
+ add_action_item :destroy, only: proc { components.dig(:action_items, :destroy, :only)&.map(&:to_sym) } do
52
+ if controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, resource)
53
+ localizer = ActiveAdmin::Localizers.resource(active_admin_config)
54
+ icon_class = active_admin_config.components.dig(:action_items, :destroy, :icon_class)
55
+ confirm_dialog_config = {
56
+ buttons: {
57
+ confirm: {
58
+ text: I18n.t(:confirm, scope: "active_admin.confirm_dialog"),
59
+ class: active_admin_config.css_classes.dig(:confirm_dialog, :confirm)
60
+ },
61
+ cancel: {
62
+ text: I18n.t(:cancel, scope: "active_admin.confirm_dialog"),
63
+ class: active_admin_config.css_classes.dig(:confirm_dialog, :cancel)
64
+ }
65
+ }
66
+ }
67
+
68
+ link_to(
69
+ safe_join([icon_html(icon_class), content_tag(:span, localizer.t(:delete_model))]),
70
+ resource_path(resource),
71
+ title: localizer.t(:delete_model),
72
+ class: active_admin_config.components.dig(:action_items, :destroy, :css_class),
73
+ method: :delete, data: {confirm: localizer.t(:delete_confirmation), "aa-confirm-dialog": confirm_dialog_config}
74
+ )
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ module ActionItem
81
+ def display_on?(action, render_context = self)
82
+ @options[:only] = Array(return_or_proc_exec(@options[:only])) if @options[:only]
83
+ @options[:except] = Array(return_or_proc_exec(@options[:except])) if @options[:except]
84
+ super
85
+ end
86
+
87
+ def group
88
+ @options[:group] || 99
89
+ end
90
+
91
+ def priority
92
+ @options[:priority] || 99
93
+ end
94
+
95
+ private
96
+
97
+ def return_or_proc_exec(option)
98
+ option.is_a?(Proc) ? option.call : option
99
+ end
100
+
101
+ def normalize_display_options!
102
+ @options[:only] = @options[:only] if @options[:only]
103
+ @options[:except] = @options[:except] if @options[:except]
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ # Overwrite activeadmin/lib/active_admin/resource/action_items.rb
111
+ ActiveAdmin::Resource::ActionItems.module_eval do
112
+ prepend Adminterface::Extensions::Resource::ActionItems
113
+ end
114
+
115
+ ActiveAdmin::ActionItem.class_eval do
116
+ prepend Adminterface::Extensions::Resource::ActionItem
117
+ end
@@ -0,0 +1,35 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module SidebarSection
4
+ def initialize(*args, &block)
5
+ options = args.extract_options!
6
+ name = args.first
7
+ @position = options[:position]&.to_s
8
+ super(name, options, &block)
9
+ end
10
+
11
+ def id
12
+ return if name.blank?
13
+
14
+ super
15
+ end
16
+
17
+ def title
18
+ return if name.blank?
19
+
20
+ super
21
+ end
22
+
23
+ def partial_name
24
+ return options[:partial] if name.blank?
25
+
26
+ super
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ ActiveAdmin::SidebarSection.class_eval do
33
+ prepend Adminterface::Extensions::SidebarSection
34
+ attr_accessor :position
35
+ end
@@ -0,0 +1,36 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module ViewHelpers
4
+ module AlertHelper
5
+ def flashes_html
6
+ flash.each do |type, msg|
7
+ concat(content_tag(:div, msg, class: "flash flash_#{type} alert #{flash_css_classes[type.to_sym]}".squish))
8
+ end
9
+ nil
10
+ end
11
+
12
+ def devise_error_messages!
13
+ return "" unless devise_error_messages?
14
+
15
+ safe_join [devise_error_html]
16
+ end
17
+
18
+ def devise_error_messages?
19
+ !resource.errors.empty?
20
+ end
21
+
22
+ private
23
+
24
+ def devise_error_html
25
+ messages = resource.errors.full_messages.join(", ")
26
+ content_tag :div, messages, class: "alert #{flash_css_classes[:error]}"
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ ActiveAdmin::ViewHelpers.module_eval do
34
+ prepend Adminterface::Extensions::ViewHelpers::AlertHelper
35
+ has_css_classes_for :flash
36
+ end
@@ -0,0 +1,23 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module ViewHelpers
4
+ module ComponentHelper
5
+ def site_title(namespace)
6
+ Arbre::Context.new({}, self) do
7
+ site_title namespace, false
8
+ end.content
9
+ end
10
+
11
+ def footer(namespace)
12
+ Arbre::Context.new({}, self) do
13
+ footer namespace
14
+ end.content
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ ActiveAdmin::ViewHelpers.module_eval do
22
+ prepend Adminterface::Extensions::ViewHelpers::ComponentHelper
23
+ end
@@ -0,0 +1,39 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Views
4
+ module ActionItems
5
+ private
6
+
7
+ def link_to(*args, &block)
8
+ options = args.extract_options!
9
+ options[:class] ||= action_items_css_classes[:item]
10
+ text_node super(*args, options, &block)
11
+ end
12
+
13
+ def icon_html(icon)
14
+ return if icon.blank?
15
+
16
+ Arbre::Context.new({}, self) do
17
+ aa_icon(icon)
18
+ end
19
+ end
20
+
21
+ def default_class_name
22
+ "#{super} #{action_items_css_classes[:group]}".squish
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ # Overwrite activeadmin/lib/active_admin/views/action_items.rb
30
+ ActiveAdmin::Views::ActionItems.class_eval do
31
+ prepend Adminterface::Extensions::Views::ActionItems
32
+ has_css_classes_for :action_items
33
+
34
+ def build(action_items)
35
+ action_items.each do |action_item|
36
+ instance_exec(&action_item.block)
37
+ end
38
+ end
39
+ end