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.
- checksums.yaml +4 -4
- data/LICENSE.md +1 -1
- data/README.md +69 -0
- data/Rakefile +43 -0
- data/app/assets/config/adminterface_manifest.js +1 -0
- data/app/assets/stylesheets/adminterface/_base.scss +20 -0
- data/app/assets/stylesheets/adminterface/_print.scss +56 -0
- data/app/assets/stylesheets/adminterface/components/_active_admin_comment.scss +19 -0
- data/app/assets/stylesheets/adminterface/components/_all.scss +24 -0
- data/app/assets/stylesheets/adminterface/components/_aside.scss +28 -0
- data/app/assets/stylesheets/adminterface/components/_attributes_table.scss +19 -0
- data/app/assets/stylesheets/adminterface/components/_comments.scss +7 -0
- data/app/assets/stylesheets/adminterface/components/_divider.scss +28 -0
- data/app/assets/stylesheets/adminterface/components/_filters.scss +27 -0
- data/app/assets/stylesheets/adminterface/components/_flash.scss +4 -0
- data/app/assets/stylesheets/adminterface/components/_footer.scss +4 -0
- data/app/assets/stylesheets/adminterface/components/_form.scss +219 -0
- data/app/assets/stylesheets/adminterface/components/_header.scss +30 -0
- data/app/assets/stylesheets/adminterface/components/_index.scss +1 -0
- data/app/assets/stylesheets/adminterface/components/_index_as_grid.scss +5 -0
- data/app/assets/stylesheets/adminterface/components/_index_as_table.scss +1 -0
- data/app/assets/stylesheets/adminterface/components/_index_footer.scss +19 -0
- data/app/assets/stylesheets/adminterface/components/_modal_dialog.scss +4 -0
- data/app/assets/stylesheets/adminterface/components/_pagination.scss +3 -0
- data/app/assets/stylesheets/adminterface/components/_panel.scss +21 -0
- data/app/assets/stylesheets/adminterface/components/_sidebar.scss +13 -0
- data/app/assets/stylesheets/adminterface/components/_site_title.scss +17 -0
- data/app/assets/stylesheets/adminterface/components/_table_for.scss +37 -0
- data/app/assets/stylesheets/adminterface/components/_table_tools.scss +19 -0
- data/app/assets/stylesheets/adminterface/components/_thumbnail.scss +29 -0
- data/app/assets/stylesheets/adminterface/components/_title_bar.scss +36 -0
- data/app/assets/stylesheets/adminterface/components/inputs/_all.scss +2 -0
- data/app/assets/stylesheets/adminterface/components/inputs/_password.scss +28 -0
- data/app/assets/stylesheets/adminterface/components/inputs/_text.scss +30 -0
- data/app/assets/stylesheets/adminterface/helpers/_aa_icon.scss +1 -0
- data/app/assets/stylesheets/adminterface/helpers/_all.scss +2 -0
- data/app/assets/stylesheets/adminterface/helpers/_pointer.scss +1 -0
- data/app/assets/stylesheets/adminterface/layouts/_all.scss +4 -0
- data/app/assets/stylesheets/adminterface/layouts/_base.scss +5 -0
- data/app/assets/stylesheets/adminterface/layouts/_logged_in.scss +30 -0
- data/app/assets/stylesheets/adminterface/layouts/_logged_out.scss +14 -0
- data/app/assets/stylesheets/adminterface/layouts/types/_all.scss +4 -0
- data/app/assets/stylesheets/adminterface/layouts/types/_mixins.scss +195 -0
- data/app/assets/stylesheets/adminterface/layouts/types/_navigation_aside.scss +33 -0
- data/app/assets/stylesheets/adminterface/layouts/types/_navigation_sidebar.scss +15 -0
- data/app/assets/stylesheets/adminterface/layouts/types/_navigation_top.scss +33 -0
- data/app/assets/stylesheets/adminterface/mixins/_all.scss +3 -0
- data/app/assets/stylesheets/adminterface/mixins/_layouts.scss +38 -0
- data/app/assets/stylesheets/adminterface/mixins/_utilities.scss +39 -0
- data/app/assets/stylesheets/adminterface/mixins/_variables.scss +100 -0
- data/app/assets/stylesheets/adminterface/placeholders/_aa_icon.scss +10 -0
- data/app/assets/stylesheets/adminterface/placeholders/_all.scss +3 -0
- data/app/assets/stylesheets/adminterface/placeholders/_background.scss +5 -0
- data/app/assets/stylesheets/adminterface/placeholders/_typography.scss +11 -0
- data/app/assets/stylesheets/adminterface/vendors/_all.scss +4 -0
- data/app/assets/stylesheets/adminterface/vendors/bootstrap/_all.scss +6 -0
- data/app/assets/stylesheets/adminterface/vendors/bootstrap/_variables.scss +51 -0
- data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_buttons.scss +5 -0
- data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_dropdowns.scss +28 -0
- data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_navs.scss +25 -0
- data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/form/_labels.scss +5 -0
- data/app/assets/stylesheets/adminterface/vendors/bootstrap/content/_tables.scss +2 -0
- data/app/assets/stylesheets/adminterface/vendors/bootstrap/content/_typography.scss +2 -0
- data/app/assets/stylesheets/adminterface/vendors/flatpickr/_all.scss +2 -0
- data/app/assets/stylesheets/adminterface/vendors/flatpickr/_variables.scss +7 -0
- data/app/assets/stylesheets/adminterface/vendors/flatpickr/main.scss +50 -0
- data/app/assets/stylesheets/adminterface/vendors/tom_select/_all.scss +1 -0
- data/app/assets/stylesheets/adminterface/vendors/tom_select/_main.scss +6 -0
- data/app/assets/stylesheets/adminterface/vendors/trix/_actiontext.scss +36 -0
- data/app/assets/stylesheets/adminterface/vendors/trix/_all.scss +3 -0
- data/app/assets/stylesheets/adminterface/vendors/trix/_trix_editor.scss +86 -0
- data/app/assets/stylesheets/adminterface/vendors/trix/_variables.scss +31 -0
- data/app/javascript/adminterface/base.js +14 -0
- data/app/javascript/adminterface/config.js +129 -0
- data/app/javascript/adminterface/initializers/batch_actions.js +9 -0
- data/app/javascript/adminterface/initializers/bootstrap.js +29 -0
- data/app/javascript/adminterface/initializers/confirm_dialog.js +23 -0
- data/app/javascript/adminterface/initializers/detached_dropdown.js +16 -0
- data/app/javascript/adminterface/initializers/drawer_menu_item_toggler.js +15 -0
- data/app/javascript/adminterface/initializers/filters.js +23 -0
- data/app/javascript/adminterface/initializers/has_many.js +7 -0
- data/app/javascript/adminterface/initializers/header_toggler.js +10 -0
- data/app/javascript/adminterface/initializers/index.js +2 -0
- data/app/javascript/adminterface/initializers/per_page.js +12 -0
- data/app/javascript/adminterface/initializers/plugins/flatpickr.js +24 -0
- data/app/javascript/adminterface/initializers/plugins/input_counter.js +21 -0
- data/app/javascript/adminterface/initializers/plugins/password_visibility.js +23 -0
- data/app/javascript/adminterface/initializers/plugins/tom_select.js +24 -0
- data/app/javascript/adminterface/lib/__tests__/checkbox_toggler.html +5 -0
- data/app/javascript/adminterface/lib/__tests__/checkbox_toggler.spec.js +110 -0
- data/app/javascript/adminterface/lib/__tests__/detached_dropdown.spec.js +69 -0
- data/app/javascript/adminterface/lib/__tests__/filters.spec.js +150 -0
- data/app/javascript/adminterface/lib/__tests__/has_many.html +14 -0
- data/app/javascript/adminterface/lib/__tests__/has_many.spec.js +224 -0
- data/app/javascript/adminterface/lib/__tests__/utils.spec.js +280 -0
- data/app/javascript/adminterface/lib/batch_actions.js +106 -0
- data/app/javascript/adminterface/lib/checkbox_toggler.js +55 -0
- data/app/javascript/adminterface/lib/confirm_dialog.js +113 -0
- data/app/javascript/adminterface/lib/detached_dropdown.js +34 -0
- data/app/javascript/adminterface/lib/filters.js +34 -0
- data/app/javascript/adminterface/lib/has_many.js +125 -0
- data/app/javascript/adminterface/lib/header_toggler.js +54 -0
- data/app/javascript/adminterface/lib/input.js +108 -0
- data/app/javascript/adminterface/lib/inputs/base/groupish.js +55 -0
- data/app/javascript/adminterface/lib/inputs/base/pluginish.js +63 -0
- data/app/javascript/adminterface/lib/inputs/base_input.js +87 -0
- data/app/javascript/adminterface/lib/inputs/boolean_input.js +30 -0
- data/app/javascript/adminterface/lib/inputs/check_boxes_input.js +14 -0
- data/app/javascript/adminterface/lib/inputs/choices_input.js +96 -0
- data/app/javascript/adminterface/lib/inputs/color_input.js +14 -0
- data/app/javascript/adminterface/lib/inputs/country_input.js +90 -0
- data/app/javascript/adminterface/lib/inputs/datalist_input.js +41 -0
- data/app/javascript/adminterface/lib/inputs/date_picker_input.js +11 -0
- data/app/javascript/adminterface/lib/inputs/datetime_picker_input.js +11 -0
- data/app/javascript/adminterface/lib/inputs/hidden_input.js +21 -0
- data/app/javascript/adminterface/lib/inputs/password_input.js +13 -0
- data/app/javascript/adminterface/lib/inputs/radio_input.js +13 -0
- data/app/javascript/adminterface/lib/inputs/select_input.js +68 -0
- data/app/javascript/adminterface/lib/inputs/string_input.js +13 -0
- data/app/javascript/adminterface/lib/inputs/switch_input.js +9 -0
- data/app/javascript/adminterface/lib/inputs/text_input.js +12 -0
- data/app/javascript/adminterface/lib/inputs/time_picker_input.js +13 -0
- data/app/javascript/adminterface/lib/inputs/time_zone_input.js +66 -0
- data/app/javascript/adminterface/lib/per_page.js +18 -0
- data/app/javascript/adminterface/lib/plugins/input_counter.js +94 -0
- data/app/javascript/adminterface/lib/plugins/password_visibility.js +70 -0
- data/app/javascript/adminterface/lib/table_checkbox_toggler.js +47 -0
- data/app/javascript/adminterface/lib/utils.js +148 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +19 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +21 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +19 -0
- data/app/views/active_admin/devise/registrations/new.html.erb +24 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +23 -0
- data/app/views/active_admin/devise/shared/_links.html.erb +25 -0
- data/app/views/active_admin/devise/shared/_omniauth.html.erb +10 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +19 -0
- data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_gap.html.erb +12 -0
- data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin/_paginator.html.erb +27 -0
- data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +56 -0
- data/config/locales/active_admin.en.yml +25 -0
- data/lib/adminterface/callable.rb +7 -0
- data/lib/adminterface/configs.rb +76 -0
- data/lib/adminterface/data/base.rb +11 -0
- data/lib/adminterface/data/countries.rb +44 -0
- data/lib/adminterface/data/time_zones.rb +31 -0
- data/lib/adminterface/data.rb +6 -0
- data/lib/adminterface/encryption/encryptor.rb +26 -0
- data/lib/adminterface/engine.rb +22 -0
- data/lib/adminterface/extensions/base_controller.rb +59 -0
- data/lib/adminterface/extensions/batch_actions/resource_extension.rb +64 -0
- data/lib/adminterface/extensions/batch_actions/views/batch_action_selector.rb +48 -0
- data/lib/adminterface/extensions/batch_actions/views/selection_cells.rb +39 -0
- data/lib/adminterface/extensions/dsl.rb +13 -0
- data/lib/adminterface/extensions/dynamic_settings_node.rb +26 -0
- data/lib/adminterface/extensions/filters/forms.rb +76 -0
- data/lib/adminterface/extensions/form_builder.rb +165 -0
- data/lib/adminterface/extensions/inputs/base/active_admin_config.rb +21 -0
- data/lib/adminterface/extensions/inputs/base/choices.rb +33 -0
- data/lib/adminterface/extensions/inputs/base/groupish.rb +50 -0
- data/lib/adminterface/extensions/inputs/base/html.rb +15 -0
- data/lib/adminterface/extensions/inputs/base/labelling.rb +15 -0
- data/lib/adminterface/extensions/inputs/base/pluginish.rb +56 -0
- data/lib/adminterface/extensions/inputs/base/stringish.rb +19 -0
- data/lib/adminterface/extensions/inputs/base/wrapping.rb +25 -0
- data/lib/adminterface/extensions/inputs/base.rb +19 -0
- data/lib/adminterface/extensions/inputs/boolean_input.rb +42 -0
- data/lib/adminterface/extensions/inputs/check_boxes_input.rb +34 -0
- data/lib/adminterface/extensions/inputs/color_input.rb +29 -0
- data/lib/adminterface/extensions/inputs/country_input.rb +33 -0
- data/lib/adminterface/extensions/inputs/datalist_input.rb +26 -0
- data/lib/adminterface/extensions/inputs/date_picker_input.rb +30 -0
- data/lib/adminterface/extensions/inputs/date_select_input.rb +7 -0
- data/lib/adminterface/extensions/inputs/datetime_picker_input.rb +19 -0
- data/lib/adminterface/extensions/inputs/datetime_select_input.rb +7 -0
- data/lib/adminterface/extensions/inputs/email_input.rb +23 -0
- data/lib/adminterface/extensions/inputs/file_input.rb +19 -0
- data/lib/adminterface/extensions/inputs/filters/base/search_method_select.rb +37 -0
- data/lib/adminterface/extensions/inputs/filters/base.rb +3 -0
- data/lib/adminterface/extensions/inputs/filters/boolean_input.rb +4 -0
- data/lib/adminterface/extensions/inputs/filters/check_boxes_input.rb +12 -0
- data/lib/adminterface/extensions/inputs/filters/date_picker_input.rb +4 -0
- data/lib/adminterface/extensions/inputs/filters/date_range_input.rb +50 -0
- data/lib/adminterface/extensions/inputs/filters/select_input.rb +4 -0
- data/lib/adminterface/extensions/inputs/number_input.rb +23 -0
- data/lib/adminterface/extensions/inputs/password_input.rb +23 -0
- data/lib/adminterface/extensions/inputs/phone_input.rb +23 -0
- data/lib/adminterface/extensions/inputs/radio_input.rb +41 -0
- data/lib/adminterface/extensions/inputs/range_input.rb +22 -0
- data/lib/adminterface/extensions/inputs/rich_text_area_input.rb +21 -0
- data/lib/adminterface/extensions/inputs/search_input.rb +23 -0
- data/lib/adminterface/extensions/inputs/select_input.rb +33 -0
- data/lib/adminterface/extensions/inputs/string_input.rb +19 -0
- data/lib/adminterface/extensions/inputs/switch_input.rb +11 -0
- data/lib/adminterface/extensions/inputs/text_input.rb +27 -0
- data/lib/adminterface/extensions/inputs/time_picker_input.rb +19 -0
- data/lib/adminterface/extensions/inputs/time_select_input.rb +7 -0
- data/lib/adminterface/extensions/inputs/time_zone_input.rb +33 -0
- data/lib/adminterface/extensions/inputs/url_input.rb +23 -0
- data/lib/adminterface/extensions/menu_item.rb +16 -0
- data/lib/adminterface/extensions/namespace_settings.rb +30 -0
- data/lib/adminterface/extensions/orm/active_record/comments/views/active_admin_comments.rb +122 -0
- data/lib/adminterface/extensions/resource/action_items.rb +117 -0
- data/lib/adminterface/extensions/sidebar_section.rb +35 -0
- data/lib/adminterface/extensions/view_helpers/alert_helper.rb +38 -0
- data/lib/adminterface/extensions/view_helpers/component_helper.rb +23 -0
- data/lib/adminterface/extensions/views/action_items.rb +39 -0
- data/lib/adminterface/extensions/views/columns.rb +59 -0
- data/lib/adminterface/extensions/views/components/active_admin_form.rb +47 -0
- data/lib/adminterface/extensions/views/components/attributes_table.rb +28 -0
- data/lib/adminterface/extensions/views/components/blank_slate.rb +19 -0
- data/lib/adminterface/extensions/views/components/dropdown_menu.rb +58 -0
- data/lib/adminterface/extensions/views/components/icon.rb +26 -0
- data/lib/adminterface/extensions/views/components/index_list.rb +43 -0
- data/lib/adminterface/extensions/views/components/menu.rb +18 -0
- data/lib/adminterface/extensions/views/components/menu_item.rb +69 -0
- data/lib/adminterface/extensions/views/components/paginated_collection.rb +52 -0
- data/lib/adminterface/extensions/views/components/panel.rb +71 -0
- data/lib/adminterface/extensions/views/components/scopes.rb +53 -0
- data/lib/adminterface/extensions/views/components/sidebar_section.rb +39 -0
- data/lib/adminterface/extensions/views/components/site_title.rb +36 -0
- data/lib/adminterface/extensions/views/components/status_tag.rb +26 -0
- data/lib/adminterface/extensions/views/components/table_for.rb +23 -0
- data/lib/adminterface/extensions/views/components/tabs.rb +101 -0
- data/lib/adminterface/extensions/views/footer.rb +27 -0
- data/lib/adminterface/extensions/views/header.rb +60 -0
- data/lib/adminterface/extensions/views/index_as_grid.rb +53 -0
- data/lib/adminterface/extensions/views/index_as_table.rb +77 -0
- data/lib/adminterface/extensions/views/pages/base.rb +165 -0
- data/lib/adminterface/extensions/views/pages/form.rb +27 -0
- data/lib/adminterface/extensions/views/pages/index.rb +136 -0
- data/lib/adminterface/extensions/views/pages/page.rb +18 -0
- data/lib/adminterface/extensions/views/title_bar.rb +74 -0
- data/lib/adminterface/fixtures/components.yml +73 -0
- data/lib/adminterface/fixtures/css_classes.yml +107 -0
- data/lib/adminterface/initializers/batch_actions.rb +15 -0
- data/lib/adminterface/initializers/comments.rb +13 -0
- data/lib/adminterface/initializers/configurations.rb +38 -0
- data/lib/adminterface/initializers/formtastic.rb +58 -0
- data/lib/adminterface/initializers/resource.rb +20 -0
- data/lib/adminterface/initializers/view_helpers.rb +14 -0
- data/lib/adminterface/initializers/views.rb +39 -0
- data/lib/adminterface/license.rb +18 -0
- data/lib/adminterface/licensing/base.rb +99 -0
- data/lib/adminterface/licensing/commercial.rb +7 -0
- data/lib/adminterface/licensing/notice.rb +54 -0
- data/lib/adminterface/licensing/personal.rb +13 -0
- data/lib/adminterface/public.pem +9 -0
- data/lib/adminterface/version.rb +3 -0
- data/lib/adminterface.rb +55 -0
- data/lib/generators/adminterface/comments/comments_generator.rb +33 -0
- data/lib/generators/adminterface/comments/templates/README +13 -0
- data/lib/generators/adminterface/comments/templates/active_admin_comment_action_text.rb +18 -0
- data/lib/generators/adminterface/comments/templates/migrations/drop_body_for_active_admin_comments.rb.erb +28 -0
- data/lib/generators/adminterface/configs/configs_generator.rb +19 -0
- data/lib/generators/adminterface/configs/templates/README +33 -0
- data/lib/generators/adminterface/install/install_generator.rb +39 -0
- data/lib/generators/adminterface/install/templates/dashboard.rb +32 -0
- data/lib/generators/adminterface/views/views_generator.rb +15 -0
- data/lib/generators/adminterface/webpacker/templates/README +27 -0
- data/lib/generators/adminterface/webpacker/templates/active_admin.js +12 -0
- data/lib/generators/adminterface/webpacker/templates/active_admin.scss +8 -0
- data/lib/generators/adminterface/webpacker/templates/print.scss +3 -0
- data/lib/generators/adminterface/webpacker/webpacker_generator.rb +69 -0
- data/lib/tasks/adminterface_tasks.rake +4 -0
- metadata +291 -10
- 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,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,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,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
|