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,76 @@
1
+ module Adminterface
2
+ module Configs
3
+ DEFAULTS = lambda {
4
+ path = "lib/adminterface/fixtures"
5
+
6
+ HashWithIndifferentAccess.new(
7
+ components: YAML.load_file(Engine.root.join("#{path}/components.yml").to_s),
8
+ css_classes: YAML.load_file(Engine.root.join("#{path}/css_classes.yml").to_s)
9
+ )
10
+ }.call.freeze
11
+
12
+ module Configurable
13
+ attr_writer :components, :css_classes, :comments_pager, :comments_per_page, :pager, :comments_input
14
+
15
+ def components
16
+ namespace.components.deep_merge(@components || {})
17
+ end
18
+
19
+ def css_classes
20
+ namespace.css_classes.deep_merge(@css_classes || {})
21
+ end
22
+
23
+ def pager
24
+ @pager || namespace.pager
25
+ end
26
+
27
+ def comments_pager
28
+ @comments_pager || namespace.comments_pager
29
+ end
30
+
31
+ def comments_per_page
32
+ @comments_per_page || namespace.comments_per_page
33
+ end
34
+
35
+ def comments_input
36
+ @comments_input || namespace.comments_input
37
+ end
38
+ end
39
+
40
+ module Finders
41
+ extend ActiveSupport::Concern
42
+ class FinderError < StandardError; end
43
+
44
+ class_methods do
45
+ def has_css_classes_for(*args)
46
+ args.each { |key| define_configs_getter(:css_classes, key) }
47
+ end
48
+
49
+ def has_components_for(*args)
50
+ args.each { |key| define_configs_getter(:components, key) }
51
+ end
52
+
53
+ def define_configs_getter(type, key)
54
+ name = "#{key}_#{type}"
55
+ define_method name do
56
+ return instance_variable_get("@#{name}") if instance_variable_defined?("@#{name}")
57
+ instance_variable_set "@#{name}", find_configs(type, key)
58
+ end
59
+ end
60
+ end
61
+
62
+ private
63
+
64
+ def find_configs(key, *args)
65
+ configs.try(key)&.dig(*args)
66
+ end
67
+
68
+ def configs
69
+ active_admin_config
70
+ rescue => e
71
+ Rails.logger.info "#{e.class}: active_admin_config is not available for #{self.class}"
72
+ ActiveAdmin.application
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,11 @@
1
+ module Adminterface
2
+ module Data
3
+ class Base
4
+ def self.call(*args)
5
+ new(*args).call
6
+ rescue => e
7
+ {error: e.class.to_s, message: e.message}
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,44 @@
1
+ require_relative "./base"
2
+
3
+ module Adminterface
4
+ module Data
5
+ class Countries < Base
6
+ PluginMissing = Class.new(StandardError)
7
+
8
+ attr_reader :locale, :options
9
+
10
+ def initialize(locale, options = {})
11
+ @locale = locale
12
+ @options = options
13
+ end
14
+
15
+ def call
16
+ raise_error if plugin_missing?
17
+ countries
18
+ end
19
+
20
+ private
21
+
22
+ def countries
23
+ codes = ISO3166::Country.codes
24
+ codes.map do |code|
25
+ country = ISO3166::Country[code]
26
+ {
27
+ code: code,
28
+ name: country.name,
29
+ translated_name: country.translations[locale.downcase.to_s] || country.name
30
+ }
31
+ end.sort_by { |x| x[:name] }
32
+ end
33
+
34
+ def plugin_missing?
35
+ !Object.const_defined?("::CountrySelect")
36
+ end
37
+
38
+ def raise_error
39
+ raise PluginMissing,
40
+ "To use the :country input, please install a country_select plugin, like this one: https://github.com/stefanpenner/country_select"
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,31 @@
1
+ require_relative "./base"
2
+
3
+ module Adminterface
4
+ module Data
5
+ class TimeZones < Base
6
+ attr_reader :locale, :options
7
+
8
+ def initialize(locale, options = {})
9
+ @locale = locale
10
+ @options = options
11
+ end
12
+
13
+ def call
14
+ I18n.with_locale(locale) { time_zones }
15
+ end
16
+
17
+ private
18
+
19
+ def time_zones
20
+ zones = ActiveSupport::TimeZone.all
21
+ zones.map do |zone|
22
+ {
23
+ identifier: zone.tzinfo.identifier,
24
+ name: zone.name,
25
+ translated_name: I18n.t(zone.name, scope: :timezones, default: zone.to_s)
26
+ }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,6 @@
1
+ module Adminterface
2
+ module Data
3
+ autoload :Countries, "adminterface/data/countries"
4
+ autoload :TimeZones, "adminterface/data/time_zones"
5
+ end
6
+ end
@@ -0,0 +1,26 @@
1
+ module Adminterface
2
+ module Encryption
3
+ class Encryptor
4
+ extend Callable
5
+ attr_reader :message
6
+
7
+ def initialize(message)
8
+ @message = message
9
+ end
10
+
11
+ def call
12
+ Base64.encode64(public_key.public_encrypt(message))
13
+ end
14
+
15
+ private
16
+
17
+ def public_key_file
18
+ @public_key_file ||= File.read(Engine.root.join("lib/adminterface/public.pem"))
19
+ end
20
+
21
+ def public_key
22
+ @public_key ||= OpenSSL::PKey::RSA.new(public_key_file)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ module Adminterface
2
+ # Initialize Engine
3
+ class Engine < ::Rails::Engine
4
+ isolate_namespace Adminterface
5
+
6
+ # Initializers: The load order matters
7
+ include ::Adminterface::Initializers::BatchActions
8
+ include ::Adminterface::Initializers::Configurations
9
+ include ::Adminterface::Initializers::Formtastic
10
+ include ::Adminterface::Initializers::Resource
11
+ include ::Adminterface::Initializers::ViewHelpers
12
+ include ::Adminterface::Initializers::Views
13
+ include ::Adminterface::Initializers::Comments
14
+
15
+ config.after_initialize do
16
+ unless defined?(::Rails::Generators) || defined?(::Rails::Console) ||
17
+ File.basename($0).eql?("rake")
18
+ ::Adminterface::License.verify!
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,59 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module BaseController
4
+ def default_url_options
5
+ super.merge(tab: params[:tab], anchor: params[:anchor_id])
6
+ end
7
+
8
+ private
9
+
10
+ def set_resource_scope
11
+ session[:resource_scope] = {
12
+ controller: controller_path,
13
+ action: action_name_pairing(action_name)
14
+ }
15
+ end
16
+
17
+ def action_name_pairing(name)
18
+ case name
19
+ when "create" then "new"
20
+ when "update" then "edit"
21
+ else name
22
+ end
23
+ end
24
+
25
+ def reset_tab
26
+ params.delete(:tab)
27
+ params.delete(:anchor_id)
28
+ end
29
+
30
+ def should_reset_tab?
31
+ !(same_controller? && same_action?)
32
+ end
33
+
34
+ def same_controller?
35
+ return true if resource_scope[:controller].blank?
36
+
37
+ resource_scope[:controller] == controller_path
38
+ end
39
+
40
+ def same_action?
41
+ resource_scope[:action].presence &&
42
+ action_name_pairing(action_name).eql?(resource_scope[:action])
43
+ end
44
+
45
+ def resource_scope
46
+ session.fetch(:resource_scope, {}).with_indifferent_access
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ # Overwrite activeadmin/lib/active_admin/base_controller.rb
53
+ ActiveAdmin.after_load do
54
+ ActiveAdmin::BaseController.class_eval do
55
+ prepend Adminterface::Extensions::BaseController
56
+ before_action :reset_tab, if: :should_reset_tab?
57
+ before_action :set_resource_scope
58
+ end
59
+ end
@@ -0,0 +1,64 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module BatchActions
4
+ module ResourceExtension
5
+ def add_default_batch_action
6
+ destroy_options = {
7
+ priority: 100,
8
+ confirm: proc { I18n.t("active_admin.batch_actions.delete_confirmation", plural_model: active_admin_config.plural_resource_label.downcase) },
9
+ message: proc { I18n.t("active_admin.batch_actions.delete_message") },
10
+ if: proc { controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
11
+ }
12
+
13
+ add_batch_action :destroy, proc { I18n.t("active_admin.delete") }, destroy_options do |selected_ids|
14
+ batch_action_collection.find(selected_ids).each do |record|
15
+ authorize! ActiveAdmin::Auth::DESTROY, record
16
+ destroy_resource(record)
17
+ end
18
+
19
+ redirect_to active_admin_config.route_collection_path(params),
20
+ notice: I18n.t("active_admin.batch_actions.succesfully_destroyed",
21
+ count: selected_ids.count,
22
+ model: active_admin_config.resource_label.downcase,
23
+ plural_model: active_admin_config.plural_resource_label(count: selected_ids.count).downcase)
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ module BatchAction
30
+ def confirm_dialog
31
+ @confirm_dialog ||= find_confirm_dialog
32
+ end
33
+
34
+ private
35
+
36
+ def find_confirm_dialog
37
+ options = @options[:confirm_dialog] || {}
38
+ {
39
+ buttons: {
40
+ confirm: {
41
+ text: I18n.t(:confirm, scope: "active_admin.batch_actions.confirm_dialog"),
42
+ class: table_tools_css_classes.dig(:confirm_dialog, :confirm)
43
+ },
44
+ cancel: {
45
+ text: I18n.t(:cancel, scope: "active_admin.batch_actions.confirm_dialog"),
46
+ class: table_tools_css_classes.dig(:confirm_dialog, :cancel)
47
+ }
48
+ }
49
+ }.deep_merge(options)
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ # Overwrite activeadmin/lib/active_admin/batch_actions/resource_extension.rb
56
+ ActiveAdmin::BatchActions::ResourceExtension.module_eval do
57
+ prepend Adminterface::Extensions::BatchActions::ResourceExtension
58
+ end
59
+
60
+ ActiveAdmin::BatchAction.class_eval do
61
+ include Adminterface::Configs::Finders
62
+ prepend Adminterface::Extensions::BatchAction
63
+ has_css_classes_for :table_tools
64
+ end
@@ -0,0 +1,48 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module BatchActions
4
+ module BatchActionSelector
5
+ def dropdown_menu(name, options = {})
6
+ options[:button] ||= {}
7
+ options[:button] = {class: "#{options.dig(:button, :class)} #{table_tools_css_classes[:btn]}".squish}
8
+ super(name, options)
9
+ end
10
+
11
+ private
12
+
13
+ def build_drop_down
14
+ return if batch_actions_to_display.empty?
15
+
16
+ dropdown_menu I18n.t("active_admin.batch_actions.button_label"),
17
+ class: "batch_actions_selector dropdown_menu",
18
+ button: {class: "disabled"} do
19
+ batch_actions_to_display.each do |batch_action|
20
+ confirmation_text = render_or_call_method_or_proc_on(self, batch_action.confirm)
21
+
22
+ options = {
23
+ id: "batch-action-#{batch_action.sym}",
24
+ class: "batch_action",
25
+ "data-action": batch_action.sym,
26
+ "data-confirm": confirmation_text,
27
+ "data-inputs": render_in_context(self, batch_action.inputs).to_json,
28
+ "data-aa-confirm-dialog": render_in_context(self, batch_action.confirm_dialog).to_json
29
+ }
30
+
31
+ default_title = render_or_call_method_or_proc_on(self, batch_action.title)
32
+ title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", default: default_title)
33
+ label = I18n.t("active_admin.batch_actions.action_label", title: title)
34
+
35
+ item label, "#", **options
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ # Overwrite activeadmin/lib/active_admin/batch_actions/views/batch_action_selector.rb
45
+ ActiveAdmin::BatchActions::BatchActionSelector.class_eval do
46
+ prepend Adminterface::Extensions::BatchActions::BatchActionSelector
47
+ has_css_classes_for :table_tools
48
+ end
@@ -0,0 +1,39 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module BatchActions
4
+ module ResourceSelectionToggleCell
5
+ def build(label_text = "")
6
+ if label_text.present?
7
+ div class: "form-check" do
8
+ input_html
9
+ label label_text, class: "form-check-label"
10
+ end
11
+ else
12
+ input_html
13
+ end
14
+ end
15
+
16
+ def input_html
17
+ input type: "checkbox", id: "collection_selection_toggle_all",
18
+ name: "collection_selection_toggle_all", class: "toggle_all form-check-input"
19
+ end
20
+ end
21
+
22
+ module ResourceSelectionCell
23
+ def build(resource)
24
+ input type: "checkbox", id: "batch_action_item_#{resource.id}", value: resource.id,
25
+ class: "collection_selection form-check-input", name: "collection_selection[]"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ # Overwrite activeadmin/lib/active_admin/batch_actions/views/selection_cells.rb
33
+ ActiveAdmin::BatchActions::ResourceSelectionToggleCell.class_eval do
34
+ prepend Adminterface::Extensions::BatchActions::ResourceSelectionToggleCell
35
+ end
36
+
37
+ ActiveAdmin::BatchActions::ResourceSelectionCell.class_eval do
38
+ prepend Adminterface::Extensions::BatchActions::ResourceSelectionCell
39
+ end
@@ -0,0 +1,13 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module DSL
4
+ def sidebar(...)
5
+ config.sidebar_sections << ActiveAdmin::SidebarSection.new(...)
6
+ end
7
+ end
8
+ end
9
+ end
10
+
11
+ ActiveAdmin::DSL.class_eval do
12
+ prepend Adminterface::Extensions::DSL
13
+ end
@@ -0,0 +1,26 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module DynamicSettingsNode
4
+ def add_writer(name, type)
5
+ define_singleton_method("#{name}=") do |value|
6
+ send("#{name}_setting=", ActiveAdmin::DynamicSetting.build(merge_defaults(value, name), type))
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def merge_defaults(value, name)
13
+ return value unless Adminterface::Configs::DEFAULTS.key?(name)
14
+
15
+ Adminterface::Configs::DEFAULTS[name].deep_merge(value)
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ # Overwrite activeadmin/lib/active_admin/dynamic_settings_node.rb
22
+ ActiveAdmin::DynamicSettingsNode.class_eval do
23
+ class << self
24
+ prepend Adminterface::Extensions::DynamicSettingsNode
25
+ end
26
+ end
@@ -0,0 +1,76 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Filters
4
+ module ViewHelper
5
+ def active_admin_filters_form_for(search, filters, options = {})
6
+ options = defaults.deep_merge(options).deep_merge(required)
7
+
8
+ form_for search, options do |f|
9
+ filters.each do |attribute, opts|
10
+ next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
11
+ next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
12
+
13
+ opts[:input_html] = instance_exec(&opts[:input_html]) if opts[:input_html].is_a?(Proc)
14
+ f.filter attribute, opts.except(:if, :unless)
15
+ end
16
+
17
+ f.template.concat buttons(f)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def defaults
24
+ {
25
+ builder: ActiveAdmin::Filters::FormBuilder,
26
+ url: collection_path,
27
+ html: {class: "filter_form formtastic"}
28
+ }
29
+ end
30
+
31
+ def required
32
+ {
33
+ html: {method: :get},
34
+ as: :q
35
+ }
36
+ end
37
+
38
+ def buttons(form)
39
+ content_tag :fieldset, class: "actions" do
40
+ content_tag :ol do
41
+ wrap_button { submit_button(form) } +
42
+ wrap_button { cancel_button } +
43
+ hidden_field_tags_for(params, except: except_hidden_fields)
44
+ end
45
+ end
46
+ end
47
+
48
+ def wrap_button(&block)
49
+ content_tag :li, &block
50
+ end
51
+
52
+ def submit_button(form)
53
+ form.submit(I18n.t("active_admin.filters.buttons.filter"), class: submit_class)
54
+ end
55
+
56
+ def cancel_button
57
+ link_to(I18n.t("active_admin.filters.buttons.clear"), "#",
58
+ class: "#{cancel_class} clear_filters_btn")
59
+ end
60
+
61
+ def submit_class
62
+ @submit_class ||= find_configs(:css_classes, :filters, :actions, :submit)
63
+ end
64
+
65
+ def cancel_class
66
+ @cancel_class ||= find_configs(:css_classes, :filters, :actions, :cancel)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ # Overwirte lib/active_admin/filters/forms.rb
74
+ ActiveAdmin::Filters::ViewHelper.module_eval do
75
+ prepend Adminterface::Extensions::Filters::ViewHelper
76
+ end