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,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,55 @@
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_name,
13
+ action: action_name
14
+ }
15
+ end
16
+
17
+ def reset_tab
18
+ params.delete(:tab)
19
+ params.delete(:anchor_id)
20
+ end
21
+
22
+ def should_reset_tab?
23
+ !(same_controller? && same_action?)
24
+ end
25
+
26
+ def same_controller?
27
+ return true if resource_scope[:controller].blank?
28
+
29
+ resource_scope[:controller] == controller_name
30
+ end
31
+
32
+ def same_action?
33
+ return true if resource_scope[:action].blank?
34
+
35
+ case resource_scope[:action]
36
+ when "edit", "update" then %w[edit update].include? action_name
37
+ else action_name == resource_scope[:action]
38
+ end
39
+ end
40
+
41
+ def resource_scope
42
+ session.fetch(:resource_scope, {})
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ # Overwrite activeadmin/lib/active_admin/base_controller.rb
49
+ ActiveSupport.on_load(:active_admin) do
50
+ ActiveAdmin::BaseController.class_eval do
51
+ prepend Adminterface::Extensions::BaseController
52
+ before_action :reset_tab, if: :should_reset_tab?
53
+ after_action :set_resource_scope
54
+ end
55
+ 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
@@ -0,0 +1,165 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module FormBuilder
4
+ def semantic_errors(*args)
5
+ msgs = super(*args)
6
+ return if @object.errors.blank? || msgs.blank?
7
+
8
+ template.content_tag :div, msgs, class: form_css_classes[:error]
9
+ end
10
+
11
+ def field_set_and_list_wrapping(*args, &block)
12
+ # workaround to replace the ol inside the fieldset tag in f.has_many
13
+ fieldset = super
14
+ fieldset.gsub("<ol><div", "<div").gsub("</div></ol>", "</div>").html_safe
15
+ end
16
+
17
+ private
18
+
19
+ def active_admin_config
20
+ @active_admin_config ||= template.active_admin_config
21
+ end
22
+ end
23
+
24
+ module HasManyBuilder
25
+ def initialize(*_args)
26
+ super
27
+ @options[:class] = "#{@options[:class]} #{item_class}".squish
28
+ end
29
+
30
+ def render(&block)
31
+ html = "".html_safe
32
+ html << render_heading
33
+ html << template.capture { content_has_many(&block) }
34
+ html = wrap_div_or_li(html)
35
+ template.concat(html) if template.output_buffer
36
+ html
37
+ end
38
+
39
+ def render_heading
40
+ return if heading.blank?
41
+
42
+ template.content_tag(:div, heading, class: "has-many-heading #{heading_class}")
43
+ end
44
+
45
+ def render_has_many_form(form_builder, parent, &block)
46
+ template.concat sortable_action(form_builder)
47
+ template.concat form_fields(form_builder, parent, &block)
48
+ end
49
+
50
+ def content_has_many(&block)
51
+ form_block = proc do |form_builder|
52
+ render_has_many_form(form_builder, options[:parent], &block)
53
+ end
54
+
55
+ template.assigns[:has_many_block] = true
56
+ contents =
57
+ template.content_tag :div, class: "has-many-list" do
58
+ without_wrapper { inputs(options, &form_block) }
59
+ end.html_safe
60
+
61
+ js = new_record ? js_for_has_many(options[:class], &form_block) : ""
62
+ contents << js
63
+ end
64
+
65
+ def form_fields(form_builder, parent)
66
+ index = parent && form_builder.send(:parent_child_index, parent)
67
+ template.content_tag :li, class: "has-many-inputs" do
68
+ template.concat(
69
+ template.content_tag(:ol) do
70
+ template.capture { yield(form_builder, index) }
71
+ end
72
+ )
73
+ template.concat form_actions(form_builder)
74
+ end
75
+ end
76
+
77
+ def form_actions(form_builder)
78
+ template.content_tag :ol, class: "has-many-actions" do
79
+ template.capture { has_many_actions(form_builder, "".html_safe) }
80
+ end
81
+ end
82
+
83
+ def sortable_action(form_builder)
84
+ return unless sortable_column
85
+
86
+ form_builder.input sortable_column, as: :hidden
87
+ template.content_tag(:li, "", class: "handle")
88
+ end
89
+
90
+ def has_many_actions(form_builder, contents)
91
+ if form_builder.object.new_record?
92
+ contents << template.content_tag(:li) do
93
+ template.link_to I18n.t("active_admin.has_many_remove"), "#",
94
+ class: "button has_many_remove #{destroy_class}".squish
95
+ end
96
+ elsif allow_destroy?(form_builder.object)
97
+ form_builder.input(:_destroy,
98
+ as: :boolean,
99
+ wrapper_html: {class: "button has_many_delete #{destroy_class}".squish},
100
+ label: I18n.t("active_admin.has_many_delete"))
101
+ end
102
+
103
+ contents
104
+ end
105
+
106
+ def js_for_has_many(class_string, &form_block)
107
+ assoc_name = assoc_klass.model_name
108
+ placeholder = "NEW_#{assoc_name.to_s.underscore.upcase.tr("/", "_")}_RECORD"
109
+ opts = {
110
+ for: [assoc, assoc_klass.new],
111
+ class: class_string,
112
+ for_options: {child_index: placeholder}
113
+ }
114
+ html = template.capture { __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
115
+ text = new_record.is_a?(String) ? new_record : I18n.t("active_admin.has_many_new", model: assoc_name.human)
116
+
117
+ template.link_to text, "#", class: "button has_many_add #{new_class}", data: {
118
+ html: CGI.escapeHTML(html).html_safe, placeholder: placeholder
119
+ }
120
+ end
121
+
122
+ # Force rendering div for the container
123
+ def already_in_an_inputs_block
124
+ false
125
+ end
126
+
127
+ private
128
+
129
+ def heading_class
130
+ @heading_class ||= form_css_classes.dig(:has_many, :heading)
131
+ end
132
+
133
+ def new_class
134
+ @new_class ||= form_css_classes.dig(:has_many, :new)
135
+ end
136
+
137
+ def item_class
138
+ @item_class ||= form_css_classes.dig(:has_many, :item)
139
+ end
140
+
141
+ def destroy_class
142
+ @destroy_class ||= form_css_classes.dig(:has_many, :destroy)
143
+ end
144
+
145
+ def active_admin_config
146
+ @active_admin_config ||= template.active_admin_config
147
+ end
148
+ end
149
+ end
150
+ end
151
+
152
+ # Overwrite activeadmin/lib/active_admin/form_builder.rb
153
+ ActiveAdmin::FormBuilder.class_eval do
154
+ include Adminterface::Configs::Finders
155
+ prepend Adminterface::Extensions::FormBuilder
156
+ has_css_classes_for :form
157
+ configure :default_text_area_height, 3
158
+ configure :default_inline_error_class, "inline-errors invalid-feedback"
159
+ end
160
+
161
+ ActiveAdmin::HasManyBuilder.class_eval do
162
+ include Adminterface::Configs::Finders
163
+ prepend Adminterface::Extensions::HasManyBuilder
164
+ has_css_classes_for :form
165
+ end
@@ -0,0 +1,21 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module Base
5
+ module ActiveAdminConfig
6
+ include Adminterface::Configs::Finders
7
+
8
+ def active_admin_config
9
+ template.active_admin_config
10
+ rescue => _e
11
+ ::ActiveAdmin.application
12
+ end
13
+
14
+ def inputs_config
15
+ active_admin_config.components.dig(:inputs)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module Base
5
+ module Choices
6
+ def choice_wrapping_html_options(choice)
7
+ choice_options = super(choice)
8
+ choice_options[:class] = "#{choice_options[:class]} #{choice_wrapping_class}".squish
9
+ choice_options
10
+ end
11
+
12
+ def legend_html
13
+ if render_label?
14
+ template.content_tag(:label, label_text, label_html_options.merge(class: "form-label"))
15
+ else
16
+ "".html_safe
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def choice_wrapping_class
23
+ "form-check #{inline? ? "form-check-inline" : nil}".squish
24
+ end
25
+
26
+ def inline?
27
+ options[:inline].eql?(true)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,50 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module Base
5
+ module Groupish
6
+ def input_html
7
+ return super unless grouping?
8
+
9
+ template.content_tag :div, class: "input-group" do
10
+ html = []
11
+ html.push prepend_html if prepend_html?
12
+ html.push super
13
+ html.push append_html if append_html?
14
+ html.join.html_safe
15
+ end
16
+ end
17
+
18
+ def wrapper_html_options
19
+ return super unless grouping?
20
+
21
+ new_class = [super[:class], "input-group"].compact.join(" ")
22
+ super.merge(class: new_class)
23
+ end
24
+
25
+ private
26
+
27
+ def prepend_html
28
+ options[:prepend]
29
+ end
30
+
31
+ def append_html
32
+ options[:append]
33
+ end
34
+
35
+ def grouping?
36
+ append_html? || prepend_html?
37
+ end
38
+
39
+ def prepend_html?
40
+ prepend_html.present?
41
+ end
42
+
43
+ def append_html?
44
+ append_html.present?
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end