adminterface 0.0.0 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +1 -1
  3. data/README.md +69 -0
  4. data/Rakefile +43 -0
  5. data/app/assets/config/adminterface_manifest.js +1 -0
  6. data/app/assets/stylesheets/adminterface/_base.scss +20 -0
  7. data/app/assets/stylesheets/adminterface/_print.scss +56 -0
  8. data/app/assets/stylesheets/adminterface/components/_active_admin_comment.scss +19 -0
  9. data/app/assets/stylesheets/adminterface/components/_all.scss +24 -0
  10. data/app/assets/stylesheets/adminterface/components/_aside.scss +28 -0
  11. data/app/assets/stylesheets/adminterface/components/_attributes_table.scss +19 -0
  12. data/app/assets/stylesheets/adminterface/components/_comments.scss +7 -0
  13. data/app/assets/stylesheets/adminterface/components/_divider.scss +28 -0
  14. data/app/assets/stylesheets/adminterface/components/_filters.scss +27 -0
  15. data/app/assets/stylesheets/adminterface/components/_flash.scss +4 -0
  16. data/app/assets/stylesheets/adminterface/components/_footer.scss +4 -0
  17. data/app/assets/stylesheets/adminterface/components/_form.scss +219 -0
  18. data/app/assets/stylesheets/adminterface/components/_header.scss +30 -0
  19. data/app/assets/stylesheets/adminterface/components/_index.scss +1 -0
  20. data/app/assets/stylesheets/adminterface/components/_index_as_grid.scss +5 -0
  21. data/app/assets/stylesheets/adminterface/components/_index_as_table.scss +1 -0
  22. data/app/assets/stylesheets/adminterface/components/_index_footer.scss +19 -0
  23. data/app/assets/stylesheets/adminterface/components/_modal_dialog.scss +4 -0
  24. data/app/assets/stylesheets/adminterface/components/_pagination.scss +3 -0
  25. data/app/assets/stylesheets/adminterface/components/_panel.scss +21 -0
  26. data/app/assets/stylesheets/adminterface/components/_sidebar.scss +13 -0
  27. data/app/assets/stylesheets/adminterface/components/_site_title.scss +17 -0
  28. data/app/assets/stylesheets/adminterface/components/_table_for.scss +37 -0
  29. data/app/assets/stylesheets/adminterface/components/_table_tools.scss +19 -0
  30. data/app/assets/stylesheets/adminterface/components/_thumbnail.scss +29 -0
  31. data/app/assets/stylesheets/adminterface/components/_title_bar.scss +36 -0
  32. data/app/assets/stylesheets/adminterface/components/inputs/_all.scss +2 -0
  33. data/app/assets/stylesheets/adminterface/components/inputs/_password.scss +28 -0
  34. data/app/assets/stylesheets/adminterface/components/inputs/_text.scss +30 -0
  35. data/app/assets/stylesheets/adminterface/helpers/_aa_icon.scss +1 -0
  36. data/app/assets/stylesheets/adminterface/helpers/_all.scss +2 -0
  37. data/app/assets/stylesheets/adminterface/helpers/_pointer.scss +1 -0
  38. data/app/assets/stylesheets/adminterface/layouts/_all.scss +4 -0
  39. data/app/assets/stylesheets/adminterface/layouts/_base.scss +5 -0
  40. data/app/assets/stylesheets/adminterface/layouts/_logged_in.scss +30 -0
  41. data/app/assets/stylesheets/adminterface/layouts/_logged_out.scss +14 -0
  42. data/app/assets/stylesheets/adminterface/layouts/types/_all.scss +4 -0
  43. data/app/assets/stylesheets/adminterface/layouts/types/_mixins.scss +195 -0
  44. data/app/assets/stylesheets/adminterface/layouts/types/_navigation_aside.scss +33 -0
  45. data/app/assets/stylesheets/adminterface/layouts/types/_navigation_sidebar.scss +15 -0
  46. data/app/assets/stylesheets/adminterface/layouts/types/_navigation_top.scss +33 -0
  47. data/app/assets/stylesheets/adminterface/mixins/_all.scss +3 -0
  48. data/app/assets/stylesheets/adminterface/mixins/_layouts.scss +38 -0
  49. data/app/assets/stylesheets/adminterface/mixins/_utilities.scss +39 -0
  50. data/app/assets/stylesheets/adminterface/mixins/_variables.scss +100 -0
  51. data/app/assets/stylesheets/adminterface/placeholders/_aa_icon.scss +10 -0
  52. data/app/assets/stylesheets/adminterface/placeholders/_all.scss +3 -0
  53. data/app/assets/stylesheets/adminterface/placeholders/_background.scss +5 -0
  54. data/app/assets/stylesheets/adminterface/placeholders/_typography.scss +11 -0
  55. data/app/assets/stylesheets/adminterface/vendors/_all.scss +4 -0
  56. data/app/assets/stylesheets/adminterface/vendors/bootstrap/_all.scss +6 -0
  57. data/app/assets/stylesheets/adminterface/vendors/bootstrap/_variables.scss +51 -0
  58. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_buttons.scss +5 -0
  59. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_dropdowns.scss +28 -0
  60. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_navs.scss +25 -0
  61. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/form/_labels.scss +5 -0
  62. data/app/assets/stylesheets/adminterface/vendors/bootstrap/content/_tables.scss +2 -0
  63. data/app/assets/stylesheets/adminterface/vendors/bootstrap/content/_typography.scss +2 -0
  64. data/app/assets/stylesheets/adminterface/vendors/flatpickr/_all.scss +2 -0
  65. data/app/assets/stylesheets/adminterface/vendors/flatpickr/_variables.scss +7 -0
  66. data/app/assets/stylesheets/adminterface/vendors/flatpickr/main.scss +50 -0
  67. data/app/assets/stylesheets/adminterface/vendors/tom_select/_all.scss +1 -0
  68. data/app/assets/stylesheets/adminterface/vendors/tom_select/_main.scss +6 -0
  69. data/app/assets/stylesheets/adminterface/vendors/trix/_actiontext.scss +36 -0
  70. data/app/assets/stylesheets/adminterface/vendors/trix/_all.scss +3 -0
  71. data/app/assets/stylesheets/adminterface/vendors/trix/_trix_editor.scss +86 -0
  72. data/app/assets/stylesheets/adminterface/vendors/trix/_variables.scss +31 -0
  73. data/app/javascript/adminterface/base.js +14 -0
  74. data/app/javascript/adminterface/config.js +129 -0
  75. data/app/javascript/adminterface/initializers/batch_actions.js +9 -0
  76. data/app/javascript/adminterface/initializers/bootstrap.js +29 -0
  77. data/app/javascript/adminterface/initializers/confirm_dialog.js +23 -0
  78. data/app/javascript/adminterface/initializers/detached_dropdown.js +16 -0
  79. data/app/javascript/adminterface/initializers/drawer_menu_item_toggler.js +15 -0
  80. data/app/javascript/adminterface/initializers/filters.js +23 -0
  81. data/app/javascript/adminterface/initializers/has_many.js +7 -0
  82. data/app/javascript/adminterface/initializers/header_toggler.js +10 -0
  83. data/app/javascript/adminterface/initializers/index.js +2 -0
  84. data/app/javascript/adminterface/initializers/per_page.js +12 -0
  85. data/app/javascript/adminterface/initializers/plugins/flatpickr.js +24 -0
  86. data/app/javascript/adminterface/initializers/plugins/input_counter.js +21 -0
  87. data/app/javascript/adminterface/initializers/plugins/password_visibility.js +23 -0
  88. data/app/javascript/adminterface/initializers/plugins/tom_select.js +24 -0
  89. data/app/javascript/adminterface/lib/__tests__/checkbox_toggler.html +5 -0
  90. data/app/javascript/adminterface/lib/__tests__/checkbox_toggler.spec.js +110 -0
  91. data/app/javascript/adminterface/lib/__tests__/detached_dropdown.spec.js +69 -0
  92. data/app/javascript/adminterface/lib/__tests__/filters.spec.js +150 -0
  93. data/app/javascript/adminterface/lib/__tests__/has_many.html +14 -0
  94. data/app/javascript/adminterface/lib/__tests__/has_many.spec.js +224 -0
  95. data/app/javascript/adminterface/lib/__tests__/utils.spec.js +280 -0
  96. data/app/javascript/adminterface/lib/batch_actions.js +106 -0
  97. data/app/javascript/adminterface/lib/checkbox_toggler.js +55 -0
  98. data/app/javascript/adminterface/lib/confirm_dialog.js +113 -0
  99. data/app/javascript/adminterface/lib/detached_dropdown.js +34 -0
  100. data/app/javascript/adminterface/lib/filters.js +34 -0
  101. data/app/javascript/adminterface/lib/has_many.js +125 -0
  102. data/app/javascript/adminterface/lib/header_toggler.js +54 -0
  103. data/app/javascript/adminterface/lib/input.js +108 -0
  104. data/app/javascript/adminterface/lib/inputs/base/groupish.js +55 -0
  105. data/app/javascript/adminterface/lib/inputs/base/pluginish.js +63 -0
  106. data/app/javascript/adminterface/lib/inputs/base_input.js +87 -0
  107. data/app/javascript/adminterface/lib/inputs/boolean_input.js +30 -0
  108. data/app/javascript/adminterface/lib/inputs/check_boxes_input.js +14 -0
  109. data/app/javascript/adminterface/lib/inputs/choices_input.js +96 -0
  110. data/app/javascript/adminterface/lib/inputs/color_input.js +14 -0
  111. data/app/javascript/adminterface/lib/inputs/country_input.js +90 -0
  112. data/app/javascript/adminterface/lib/inputs/datalist_input.js +41 -0
  113. data/app/javascript/adminterface/lib/inputs/date_picker_input.js +11 -0
  114. data/app/javascript/adminterface/lib/inputs/datetime_picker_input.js +11 -0
  115. data/app/javascript/adminterface/lib/inputs/hidden_input.js +21 -0
  116. data/app/javascript/adminterface/lib/inputs/password_input.js +13 -0
  117. data/app/javascript/adminterface/lib/inputs/radio_input.js +13 -0
  118. data/app/javascript/adminterface/lib/inputs/select_input.js +68 -0
  119. data/app/javascript/adminterface/lib/inputs/string_input.js +13 -0
  120. data/app/javascript/adminterface/lib/inputs/switch_input.js +9 -0
  121. data/app/javascript/adminterface/lib/inputs/text_input.js +12 -0
  122. data/app/javascript/adminterface/lib/inputs/time_picker_input.js +13 -0
  123. data/app/javascript/adminterface/lib/inputs/time_zone_input.js +66 -0
  124. data/app/javascript/adminterface/lib/per_page.js +18 -0
  125. data/app/javascript/adminterface/lib/plugins/input_counter.js +94 -0
  126. data/app/javascript/adminterface/lib/plugins/password_visibility.js +70 -0
  127. data/app/javascript/adminterface/lib/table_checkbox_toggler.js +47 -0
  128. data/app/javascript/adminterface/lib/utils.js +148 -0
  129. data/app/views/active_admin/devise/confirmations/new.html.erb +19 -0
  130. data/app/views/active_admin/devise/passwords/edit.html.erb +21 -0
  131. data/app/views/active_admin/devise/passwords/new.html.erb +19 -0
  132. data/app/views/active_admin/devise/registrations/new.html.erb +24 -0
  133. data/app/views/active_admin/devise/sessions/new.html.erb +23 -0
  134. data/app/views/active_admin/devise/shared/_links.html.erb +25 -0
  135. data/app/views/active_admin/devise/shared/_omniauth.html.erb +10 -0
  136. data/app/views/active_admin/devise/unlocks/new.html.erb +19 -0
  137. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  138. data/app/views/kaminari/active_admin/_gap.html.erb +12 -0
  139. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  140. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  141. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  142. data/app/views/kaminari/active_admin/_paginator.html.erb +27 -0
  143. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  144. data/app/views/layouts/active_admin_logged_out.html.erb +56 -0
  145. data/config/locales/active_admin.en.yml +25 -0
  146. data/lib/adminterface/callable.rb +7 -0
  147. data/lib/adminterface/configs.rb +76 -0
  148. data/lib/adminterface/data/base.rb +11 -0
  149. data/lib/adminterface/data/countries.rb +44 -0
  150. data/lib/adminterface/data/time_zones.rb +31 -0
  151. data/lib/adminterface/data.rb +6 -0
  152. data/lib/adminterface/encryption/encryptor.rb +26 -0
  153. data/lib/adminterface/engine.rb +22 -0
  154. data/lib/adminterface/extensions/base_controller.rb +59 -0
  155. data/lib/adminterface/extensions/batch_actions/resource_extension.rb +64 -0
  156. data/lib/adminterface/extensions/batch_actions/views/batch_action_selector.rb +48 -0
  157. data/lib/adminterface/extensions/batch_actions/views/selection_cells.rb +39 -0
  158. data/lib/adminterface/extensions/dsl.rb +13 -0
  159. data/lib/adminterface/extensions/dynamic_settings_node.rb +26 -0
  160. data/lib/adminterface/extensions/filters/forms.rb +76 -0
  161. data/lib/adminterface/extensions/form_builder.rb +165 -0
  162. data/lib/adminterface/extensions/inputs/base/active_admin_config.rb +21 -0
  163. data/lib/adminterface/extensions/inputs/base/choices.rb +33 -0
  164. data/lib/adminterface/extensions/inputs/base/groupish.rb +50 -0
  165. data/lib/adminterface/extensions/inputs/base/html.rb +15 -0
  166. data/lib/adminterface/extensions/inputs/base/labelling.rb +15 -0
  167. data/lib/adminterface/extensions/inputs/base/pluginish.rb +56 -0
  168. data/lib/adminterface/extensions/inputs/base/stringish.rb +19 -0
  169. data/lib/adminterface/extensions/inputs/base/wrapping.rb +25 -0
  170. data/lib/adminterface/extensions/inputs/base.rb +19 -0
  171. data/lib/adminterface/extensions/inputs/boolean_input.rb +42 -0
  172. data/lib/adminterface/extensions/inputs/check_boxes_input.rb +34 -0
  173. data/lib/adminterface/extensions/inputs/color_input.rb +29 -0
  174. data/lib/adminterface/extensions/inputs/country_input.rb +33 -0
  175. data/lib/adminterface/extensions/inputs/datalist_input.rb +26 -0
  176. data/lib/adminterface/extensions/inputs/date_picker_input.rb +30 -0
  177. data/lib/adminterface/extensions/inputs/date_select_input.rb +7 -0
  178. data/lib/adminterface/extensions/inputs/datetime_picker_input.rb +19 -0
  179. data/lib/adminterface/extensions/inputs/datetime_select_input.rb +7 -0
  180. data/lib/adminterface/extensions/inputs/email_input.rb +23 -0
  181. data/lib/adminterface/extensions/inputs/file_input.rb +19 -0
  182. data/lib/adminterface/extensions/inputs/filters/base/search_method_select.rb +37 -0
  183. data/lib/adminterface/extensions/inputs/filters/base.rb +3 -0
  184. data/lib/adminterface/extensions/inputs/filters/boolean_input.rb +4 -0
  185. data/lib/adminterface/extensions/inputs/filters/check_boxes_input.rb +12 -0
  186. data/lib/adminterface/extensions/inputs/filters/date_picker_input.rb +4 -0
  187. data/lib/adminterface/extensions/inputs/filters/date_range_input.rb +50 -0
  188. data/lib/adminterface/extensions/inputs/filters/select_input.rb +4 -0
  189. data/lib/adminterface/extensions/inputs/number_input.rb +23 -0
  190. data/lib/adminterface/extensions/inputs/password_input.rb +23 -0
  191. data/lib/adminterface/extensions/inputs/phone_input.rb +23 -0
  192. data/lib/adminterface/extensions/inputs/radio_input.rb +41 -0
  193. data/lib/adminterface/extensions/inputs/range_input.rb +22 -0
  194. data/lib/adminterface/extensions/inputs/rich_text_area_input.rb +21 -0
  195. data/lib/adminterface/extensions/inputs/search_input.rb +23 -0
  196. data/lib/adminterface/extensions/inputs/select_input.rb +33 -0
  197. data/lib/adminterface/extensions/inputs/string_input.rb +19 -0
  198. data/lib/adminterface/extensions/inputs/switch_input.rb +11 -0
  199. data/lib/adminterface/extensions/inputs/text_input.rb +27 -0
  200. data/lib/adminterface/extensions/inputs/time_picker_input.rb +19 -0
  201. data/lib/adminterface/extensions/inputs/time_select_input.rb +7 -0
  202. data/lib/adminterface/extensions/inputs/time_zone_input.rb +33 -0
  203. data/lib/adminterface/extensions/inputs/url_input.rb +23 -0
  204. data/lib/adminterface/extensions/menu_item.rb +16 -0
  205. data/lib/adminterface/extensions/namespace_settings.rb +30 -0
  206. data/lib/adminterface/extensions/orm/active_record/comments/views/active_admin_comments.rb +122 -0
  207. data/lib/adminterface/extensions/resource/action_items.rb +117 -0
  208. data/lib/adminterface/extensions/sidebar_section.rb +35 -0
  209. data/lib/adminterface/extensions/view_helpers/alert_helper.rb +38 -0
  210. data/lib/adminterface/extensions/view_helpers/component_helper.rb +23 -0
  211. data/lib/adminterface/extensions/views/action_items.rb +39 -0
  212. data/lib/adminterface/extensions/views/columns.rb +59 -0
  213. data/lib/adminterface/extensions/views/components/active_admin_form.rb +47 -0
  214. data/lib/adminterface/extensions/views/components/attributes_table.rb +28 -0
  215. data/lib/adminterface/extensions/views/components/blank_slate.rb +19 -0
  216. data/lib/adminterface/extensions/views/components/dropdown_menu.rb +58 -0
  217. data/lib/adminterface/extensions/views/components/icon.rb +26 -0
  218. data/lib/adminterface/extensions/views/components/index_list.rb +43 -0
  219. data/lib/adminterface/extensions/views/components/menu.rb +18 -0
  220. data/lib/adminterface/extensions/views/components/menu_item.rb +69 -0
  221. data/lib/adminterface/extensions/views/components/paginated_collection.rb +52 -0
  222. data/lib/adminterface/extensions/views/components/panel.rb +71 -0
  223. data/lib/adminterface/extensions/views/components/scopes.rb +53 -0
  224. data/lib/adminterface/extensions/views/components/sidebar_section.rb +39 -0
  225. data/lib/adminterface/extensions/views/components/site_title.rb +36 -0
  226. data/lib/adminterface/extensions/views/components/status_tag.rb +26 -0
  227. data/lib/adminterface/extensions/views/components/table_for.rb +23 -0
  228. data/lib/adminterface/extensions/views/components/tabs.rb +101 -0
  229. data/lib/adminterface/extensions/views/footer.rb +27 -0
  230. data/lib/adminterface/extensions/views/header.rb +60 -0
  231. data/lib/adminterface/extensions/views/index_as_grid.rb +53 -0
  232. data/lib/adminterface/extensions/views/index_as_table.rb +77 -0
  233. data/lib/adminterface/extensions/views/pages/base.rb +165 -0
  234. data/lib/adminterface/extensions/views/pages/form.rb +27 -0
  235. data/lib/adminterface/extensions/views/pages/index.rb +136 -0
  236. data/lib/adminterface/extensions/views/pages/page.rb +18 -0
  237. data/lib/adminterface/extensions/views/title_bar.rb +74 -0
  238. data/lib/adminterface/fixtures/components.yml +73 -0
  239. data/lib/adminterface/fixtures/css_classes.yml +107 -0
  240. data/lib/adminterface/initializers/batch_actions.rb +15 -0
  241. data/lib/adminterface/initializers/comments.rb +13 -0
  242. data/lib/adminterface/initializers/configurations.rb +38 -0
  243. data/lib/adminterface/initializers/formtastic.rb +58 -0
  244. data/lib/adminterface/initializers/resource.rb +20 -0
  245. data/lib/adminterface/initializers/view_helpers.rb +14 -0
  246. data/lib/adminterface/initializers/views.rb +39 -0
  247. data/lib/adminterface/license.rb +18 -0
  248. data/lib/adminterface/licensing/base.rb +99 -0
  249. data/lib/adminterface/licensing/commercial.rb +7 -0
  250. data/lib/adminterface/licensing/notice.rb +54 -0
  251. data/lib/adminterface/licensing/personal.rb +13 -0
  252. data/lib/adminterface/public.pem +9 -0
  253. data/lib/adminterface/version.rb +3 -0
  254. data/lib/adminterface.rb +55 -0
  255. data/lib/generators/adminterface/comments/comments_generator.rb +33 -0
  256. data/lib/generators/adminterface/comments/templates/README +13 -0
  257. data/lib/generators/adminterface/comments/templates/active_admin_comment_action_text.rb +18 -0
  258. data/lib/generators/adminterface/comments/templates/migrations/drop_body_for_active_admin_comments.rb.erb +28 -0
  259. data/lib/generators/adminterface/configs/configs_generator.rb +19 -0
  260. data/lib/generators/adminterface/configs/templates/README +33 -0
  261. data/lib/generators/adminterface/install/install_generator.rb +39 -0
  262. data/lib/generators/adminterface/install/templates/dashboard.rb +32 -0
  263. data/lib/generators/adminterface/views/views_generator.rb +15 -0
  264. data/lib/generators/adminterface/webpacker/templates/README +27 -0
  265. data/lib/generators/adminterface/webpacker/templates/active_admin.js +12 -0
  266. data/lib/generators/adminterface/webpacker/templates/active_admin.scss +8 -0
  267. data/lib/generators/adminterface/webpacker/templates/print.scss +3 -0
  268. data/lib/generators/adminterface/webpacker/webpacker_generator.rb +69 -0
  269. data/lib/tasks/adminterface_tasks.rake +4 -0
  270. metadata +291 -10
  271. data/lib/name.rb +0 -1
@@ -0,0 +1,165 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module 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
@@ -0,0 +1,15 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module Base
5
+ module Html
6
+ def input_html_options
7
+ options = super
8
+ options[:class] = "#{options[:class]} form-control".squish
9
+ options.merge(plugins_options)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module Base
5
+ module Labelling
6
+ def label_html_options
7
+ opts = super
8
+ opts[:class].push "form-label"
9
+ opts
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,56 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module Base
5
+ module Pluginish
6
+ class Config
7
+ attr_reader :name, :configs, :options
8
+
9
+ def initialize(configs, options)
10
+ @name = configs[:name]
11
+ @configs = configs
12
+ @options = options[@name.underscore.to_sym]
13
+ end
14
+
15
+ def attributes
16
+ return {} unless enabled?
17
+
18
+ {"aa-#{name}": options.is_a?(Hash) ? options : defaults}
19
+ end
20
+
21
+ def defaults
22
+ @defaults ||= configs[:options] || {}
23
+ end
24
+
25
+ def enabled?
26
+ (!options.eql?(false) && configs[:default].eql?(true)) ||
27
+ (options.present? || options.eql?(true))
28
+ end
29
+ end
30
+
31
+ def plugins_configs
32
+ plugins&.map { |plugin| Config.new(plugin, options).attributes } || []
33
+ end
34
+
35
+ def plugins_options
36
+ {data: plugins_configs.inject(&:merge)}
37
+ end
38
+
39
+ def plugin?(name)
40
+ !!plugins_options.dig(:data, "aa-#{name}".to_sym)
41
+ end
42
+
43
+ private
44
+
45
+ def plugins
46
+ inputs_config.dig(plugins_configs_key, :js)
47
+ end
48
+
49
+ def plugins_configs_key
50
+ self.class.name.underscore.split("/").last.gsub("_input", "").to_sym
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,19 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module Base
5
+ module Stringish
6
+ def to_html
7
+ input_wrapping do
8
+ label_html << input_html
9
+ end
10
+ end
11
+
12
+ def input_html
13
+ builder.text_field(method, input_html_options)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module Base
5
+ module Wrapping
6
+ def input_wrapping(&block)
7
+ html = input_wrapping_html(&block)
8
+ template.concat(html) if template.output_buffer && template.assigns[:has_many_block]
9
+ html
10
+ end
11
+
12
+ def input_wrapping_html(&block)
13
+ template.content_tag(:div,
14
+ [template.capture(&block), error_html, hint_html].join("\n").html_safe,
15
+ wrapper_html_options)
16
+ end
17
+
18
+ def wrapper_classes
19
+ "#{super} mb-3"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ require_relative("./base/active_admin_config")
2
+ require_relative("./base/html")
3
+ require_relative("./base/labelling")
4
+ require_relative("./base/wrapping")
5
+ require_relative("./base/pluginish")
6
+
7
+ module Adminterface
8
+ module Extensions
9
+ module Inputs
10
+ module Base
11
+ include Html
12
+ include Labelling
13
+ include Wrapping
14
+ include Pluginish
15
+ include ActiveAdminConfig
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,42 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module BooleanInput
5
+ include Base
6
+
7
+ def to_html
8
+ input_wrapping do
9
+ template.content_tag :div, class: boolean_wrapper_class do
10
+ hidden_field_html +
11
+ check_box_html +
12
+ label_html
13
+ end
14
+ end
15
+ end
16
+
17
+ def input_html_options
18
+ opts = options[:input_html] || {}
19
+ super.merge(class: "form-check-input #{opts[:class]}".squish)
20
+ end
21
+
22
+ def label_html_options
23
+ super.merge(class: "form-check-label")
24
+ end
25
+
26
+ private
27
+
28
+ def boolean_wrapper_class
29
+ "form-check"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ module ActiveAdmin
37
+ module Inputs
38
+ class BooleanInput < ::Formtastic::Inputs::BooleanInput
39
+ include Adminterface::Extensions::Inputs::BooleanInput
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,34 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module CheckBoxesInput
5
+ include Base
6
+ include Base::Choices
7
+
8
+ def choice_html(choice)
9
+ checkbox_input(choice) +
10
+ template.content_tag(
11
+ :label, choice_label(choice),
12
+ label_html_options.merge(for: choice_input_dom_id(choice))
13
+ )
14
+ end
15
+
16
+ def input_html_options
17
+ super.merge(class: "form-check-input")
18
+ end
19
+
20
+ def label_html_options
21
+ super.merge(class: "form-check-label")
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ module ActiveAdmin
29
+ module Inputs
30
+ class CheckBoxesInput < ::Formtastic::Inputs::CheckBoxesInput
31
+ include ::Adminterface::Extensions::Inputs::CheckBoxesInput
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,29 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module ColorInput
5
+ include Base
6
+ include Base::Stringish
7
+ prepend Base::Groupish
8
+
9
+ def input_html
10
+ builder.color_field(method, input_html_options)
11
+ end
12
+
13
+ def input_html_options
14
+ opts = super
15
+ opts[:class] = "#{opts[:class]} form-control-color".squish
16
+ opts
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ module ActiveAdmin
24
+ module Inputs
25
+ class ColorInput < ::Formtastic::Inputs::ColorInput
26
+ include ::Adminterface::Extensions::Inputs::ColorInput
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,33 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module CountryInput
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.country_select(method, priority_countries, 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 CountryInput < ::Formtastic::Inputs::CountryInput
30
+ include ::Adminterface::Extensions::Inputs::CountryInput
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module DatalistInput
5
+ include Base
6
+ include Base::Stringish
7
+ prepend Base::Groupish
8
+
9
+ def to_html
10
+ @name = input_html_options[:id].gsub(/_id$/, "")
11
+ input_wrapping do
12
+ label_html << input_html << data_list_html
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ module ActiveAdmin
21
+ module Inputs
22
+ class DatalistInput < ::Formtastic::Inputs::DatalistInput
23
+ include ::Adminterface::Extensions::Inputs::DatalistInput
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module DatePickerInput
5
+ include Base
6
+ include Base::Stringish
7
+ prepend Base::Groupish
8
+
9
+ def input_html_options
10
+ opts = super
11
+ opts[:class] = "#{opts[:class]} form-control".squish
12
+ opts
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ module ActiveAdmin
20
+ module Inputs
21
+ class DatePickerInput < ::Formtastic::Inputs::DatePickerInput
22
+ include ::Adminterface::Extensions::Inputs::DatePickerInput
23
+ end
24
+ end
25
+ end
26
+
27
+ # Overwrite activeadmin/lib/active_admin/inputs/datepicker_input.rb
28
+ ActiveAdmin::Inputs::DatepickerInput.class_eval do
29
+ prepend ::Adminterface::Extensions::Inputs::DatePickerInput
30
+ end
@@ -0,0 +1,7 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ class DateSelectInput < ::Formtastic::Inputs::DateSelectInput
4
+ include ::Adminterface::Extensions::Inputs::Base
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module DatetimePickerInput
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 DatetimePickerInput < ::Formtastic::Inputs::DatetimePickerInput
16
+ include ::Adminterface::Extensions::Inputs::DatetimePickerInput
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ module ActiveAdmin
2
+ module Inputs
3
+ class DatetimeSelectInput < ::Formtastic::Inputs::DatetimeSelectInput
4
+ include ::Adminterface::Extensions::Inputs::Base
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ module Adminterface
2
+ module Extensions
3
+ module Inputs
4
+ module EmailInput
5
+ include Base
6
+ include Base::Stringish
7
+ prepend Base::Groupish
8
+
9
+ def input_html
10
+ builder.email_field(method, input_html_options)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ module ActiveAdmin
18
+ module Inputs
19
+ class EmailInput < ::Formtastic::Inputs::EmailInput
20
+ include ::Adminterface::Extensions::Inputs::EmailInput
21
+ end
22
+ end
23
+ end