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.
- checksums.yaml +4 -4
- data/LICENSE.md +1 -1
- data/README.md +61 -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__/detached_dropdown.spec.js +70 -0
- data/app/javascript/adminterface/lib/__tests__/filters.spec.js +151 -0
- data/app/javascript/adminterface/lib/__tests__/utils.spec.js +281 -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 +122 -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 +55 -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 +36 -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 +55 -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 +64 -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 +76 -0
- data/lib/adminterface/extensions/views/footer.rb +27 -0
- data/lib/adminterface/extensions/views/header.rb +59 -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 +164 -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 +29 -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 +41 -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 +55 -0
- data/lib/tasks/adminterface_tasks.rake +4 -0
- metadata +285 -9
- data/lib/name.rb +0 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/* global Turbolinks */
|
|
2
|
+
export function hasTurbolinks () {
|
|
3
|
+
return (typeof Turbolinks !== 'undefined' && Turbolinks.supported)
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function turbolinksVisit (params) {
|
|
7
|
+
const path = [window.location.pathname, '?', toQueryString(params)].join('')
|
|
8
|
+
Turbolinks.visit(path)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function queryString () {
|
|
12
|
+
return (window.location.search || '').replace(/^\?/, '')
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function queryStringToParams () {
|
|
16
|
+
const decode = (value) => decodeURIComponent((value || '').replace(/\+/g, '%20'))
|
|
17
|
+
|
|
18
|
+
return queryString()
|
|
19
|
+
.split('&')
|
|
20
|
+
.map(pair => pair.split('='))
|
|
21
|
+
.map(([key, value]) => {
|
|
22
|
+
return { name: decode(key), value: decode(value) }
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function toHTMLAttrString (obj) {
|
|
27
|
+
const object = obj || {}
|
|
28
|
+
const arr = []
|
|
29
|
+
Object.keys(object).forEach((key) => {
|
|
30
|
+
let value = object[key]
|
|
31
|
+
|
|
32
|
+
if (typeof (value) === 'object') {
|
|
33
|
+
value = JSON.stringify(value)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
arr.push(`${key}='${value}'`)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
return arr.join(' ')
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function toQueryString (params) {
|
|
43
|
+
const encode = (value) => encodeURIComponent(value || '')
|
|
44
|
+
|
|
45
|
+
return params
|
|
46
|
+
.map(({ name, value }) => [encode(name), encode(value)])
|
|
47
|
+
.map(pair => pair.join('='))
|
|
48
|
+
.join('&')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function serializeArray (form) {
|
|
52
|
+
const arr = []
|
|
53
|
+
|
|
54
|
+
Array.prototype.slice.call(form.elements).forEach((field) => {
|
|
55
|
+
if (!field.name || field.disabled || ['file', 'reset', 'submit', 'button'].indexOf(field.type) > -1) return
|
|
56
|
+
if (field.type === 'select-multiple') {
|
|
57
|
+
Array.prototype.slice.call(field.options).forEach((option) => {
|
|
58
|
+
if (!option.selected) return
|
|
59
|
+
arr.push({
|
|
60
|
+
name: field.name,
|
|
61
|
+
value: option.value
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
return
|
|
65
|
+
}
|
|
66
|
+
if (['checkbox', 'radio'].indexOf(field.type) > -1 && !field.checked) return
|
|
67
|
+
arr.push({
|
|
68
|
+
name: field.name,
|
|
69
|
+
value: field.value
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
return arr
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function serializeObject (form) {
|
|
77
|
+
return serializeArray(form).reduce((obj, item) => {
|
|
78
|
+
obj[item.name] = item.value
|
|
79
|
+
return obj
|
|
80
|
+
}, {})
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function cookieSet (name, value, expireInSec) {
|
|
84
|
+
const expireAt = new Date()
|
|
85
|
+
expireAt.setTime(expireAt.getTime() + expireInSec * 1000)
|
|
86
|
+
|
|
87
|
+
document.cookie = `${name}=${value};expires=${expireAt.toGMTString()};path=/`
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function cookieGet (name) {
|
|
91
|
+
const cookieName = `${name}=`
|
|
92
|
+
const ca = document.cookie.split(';')
|
|
93
|
+
for (let i = 0; i < ca.length; i++) {
|
|
94
|
+
let c = ca[i]
|
|
95
|
+
while (c.charAt(0) === ' ') c = c.substring(1, c.length)
|
|
96
|
+
if (c.indexOf(cookieName) === 0) return c.substring(cookieName.length, c.length)
|
|
97
|
+
}
|
|
98
|
+
return null
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function getObjectValue (data, path) {
|
|
102
|
+
const arr = path.split('.')
|
|
103
|
+
|
|
104
|
+
for (let i = 0; typeof data === 'object' && i < arr.length; i++) {
|
|
105
|
+
data = data[arr[i]]
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return data
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function deepMergeObject (target, source) {
|
|
112
|
+
for (const key of Object.keys(source)) {
|
|
113
|
+
if (source[key] instanceof Object) Object.assign(source[key], deepMergeObject(target[key], source[key]))
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
Object.assign(target || {}, source)
|
|
117
|
+
return target
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function toSnakeCase (string) {
|
|
121
|
+
return (
|
|
122
|
+
string
|
|
123
|
+
.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
|
|
124
|
+
.map(x => x.toLowerCase())
|
|
125
|
+
.join('_')
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function toHTMLCssString (string) {
|
|
130
|
+
return string.replace(/[.#]/, '')
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function setObjectValue (obj, path, value) {
|
|
134
|
+
const pList = path.split('.')
|
|
135
|
+
const len = pList.length
|
|
136
|
+
|
|
137
|
+
for (let i = 0; i < len - 1; i++) {
|
|
138
|
+
const elem = pList[i]
|
|
139
|
+
if (!obj[elem]) obj[elem] = {}
|
|
140
|
+
obj = obj[elem]
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
obj[pList[len - 1]] = value
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function camalize (str) {
|
|
147
|
+
return str.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => chr.toUpperCase())
|
|
148
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<% content_for :title do %>
|
|
2
|
+
<%= title t("active_admin.devise.resend_confirmation_instructions.title") %>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<%= devise_error_messages! %>
|
|
6
|
+
<%= active_admin_form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f|
|
|
7
|
+
f.inputs do
|
|
8
|
+
f.input :email
|
|
9
|
+
end
|
|
10
|
+
f.actions do
|
|
11
|
+
f.action :submit,
|
|
12
|
+
label: t("active_admin.devise.resend_confirmation_instructions.submit"),
|
|
13
|
+
wrapper_html: {class: "d-block w-100"},
|
|
14
|
+
button_html: {
|
|
15
|
+
value: t("active_admin.devise.resend_confirmation_instructions.submit"),
|
|
16
|
+
class: "btn btn-primary w-100"
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
end %>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<% content_for :title do %>
|
|
2
|
+
<%= title t("active_admin.devise.change_password.title") %>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<%= devise_error_messages! %>
|
|
6
|
+
<%= active_admin_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f|
|
|
7
|
+
f.inputs do
|
|
8
|
+
f.input :password, visibility: true
|
|
9
|
+
f.input :password_confirmation, visibility: true
|
|
10
|
+
f.input :reset_password_token, as: :hidden, input_html: { value: resource.reset_password_token }
|
|
11
|
+
end
|
|
12
|
+
f.actions do
|
|
13
|
+
f.action :submit,
|
|
14
|
+
label: t("active_admin.devise.change_password.submit"),
|
|
15
|
+
wrapper_html: {class: "d-block w-100"},
|
|
16
|
+
button_html: {
|
|
17
|
+
value: t("active_admin.devise.change_password.submit"),
|
|
18
|
+
class: "btn btn-primary w-100"
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
end %>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<% content_for :title do %>
|
|
2
|
+
<%= title t("active_admin.devise.reset_password.title") %>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<%= devise_error_messages! %>
|
|
6
|
+
<%= active_admin_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f|
|
|
7
|
+
f.inputs do
|
|
8
|
+
f.input :email
|
|
9
|
+
end
|
|
10
|
+
f.actions do
|
|
11
|
+
f.action :submit,
|
|
12
|
+
label: t("active_admin.devise.reset_password.submit"),
|
|
13
|
+
wrapper_html: {class: "d-block w-100"},
|
|
14
|
+
button_html: {
|
|
15
|
+
value: t("active_admin.devise.reset_password.submit"),
|
|
16
|
+
class: "btn btn-primary w-100"
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
end %>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<% content_for :title do %>
|
|
2
|
+
<%= title t("active_admin.devise.sign_up.title") %>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<% scope = Devise::Mapping.find_scope!(resource_name) %>
|
|
6
|
+
<%= devise_error_messages! %>
|
|
7
|
+
<%= active_admin_form_for(resource, as: resource_name, url: send(:"#{scope}_registration_path"), html: { id: "registration_new" }) do |f|
|
|
8
|
+
f.inputs do
|
|
9
|
+
resource.class.authentication_keys.each_with_index { |key, index|
|
|
10
|
+
f.input key, label: t("active_admin.devise."+key.to_s+".title"), input_html: { autofocus: index.zero? }
|
|
11
|
+
}
|
|
12
|
+
f.input :password, label: t("active_admin.devise.password.title")
|
|
13
|
+
f.input :password_confirmation, label: t("active_admin.devise.password_confirmation.title")
|
|
14
|
+
end
|
|
15
|
+
f.actions do
|
|
16
|
+
f.action :submit,
|
|
17
|
+
label: t("active_admin.devise.login.submit"),
|
|
18
|
+
wrapper_html: {class: "d-block w-100"},
|
|
19
|
+
button_html: {
|
|
20
|
+
value: t("active_admin.devise.sign_up.submit"),
|
|
21
|
+
class: "btn btn-primary w-100"
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
end %>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<% content_for :title do %>
|
|
2
|
+
<%= title t("active_admin.devise.login.title") %>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<% scope = Devise::Mapping.find_scope!(resource_name) %>
|
|
6
|
+
<%= active_admin_form_for(resource, as: resource_name, url: send(:"#{scope}_session_path"), html: { id: "session_new" }) do |f|
|
|
7
|
+
f.inputs do
|
|
8
|
+
resource.class.authentication_keys.each_with_index { |key, index|
|
|
9
|
+
f.input key, label: t("active_admin.devise.#{key}.title"), input_html: { autofocus: index.zero? }
|
|
10
|
+
}
|
|
11
|
+
f.input :password, label: t("active_admin.devise.password.title")
|
|
12
|
+
f.input :remember_me, label: t("active_admin.devise.login.remember_me"), as: :boolean if devise_mapping.rememberable?
|
|
13
|
+
end
|
|
14
|
+
f.actions do
|
|
15
|
+
f.action :submit,
|
|
16
|
+
label: t("active_admin.devise.login.submit"),
|
|
17
|
+
wrapper_html: {class: "d-block w-100"},
|
|
18
|
+
button_html: {
|
|
19
|
+
value: t("active_admin.devise.login.submit"),
|
|
20
|
+
class: "btn btn-primary w-100"
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
end %>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<%- if controller_name != 'sessions' %>
|
|
2
|
+
<% scope = Devise::Mapping.find_scope!(resource_name) %>
|
|
3
|
+
<%= link_to t('active_admin.devise.links.sign_in'), send(:"new_#{scope}_session_path") %>
|
|
4
|
+
<br>
|
|
5
|
+
<% end -%>
|
|
6
|
+
|
|
7
|
+
<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
|
|
8
|
+
<%= link_to t('active_admin.devise.links.sign_up'), new_registration_path(resource_name) %>
|
|
9
|
+
<br>
|
|
10
|
+
<% end -%>
|
|
11
|
+
|
|
12
|
+
<%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
|
|
13
|
+
<%= link_to t('active_admin.devise.links.forgot_your_password'), new_password_path(resource_name) %>
|
|
14
|
+
<br>
|
|
15
|
+
<% end -%>
|
|
16
|
+
|
|
17
|
+
<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
|
|
18
|
+
<%= link_to t('active_admin.devise.links.resend_confirmation_instructions'), new_confirmation_path(resource_name) %>
|
|
19
|
+
<br>
|
|
20
|
+
<% end -%>
|
|
21
|
+
|
|
22
|
+
<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
|
|
23
|
+
<%= link_to t('active_admin.devise.links.resend_unlock_instructions'), new_unlock_path(resource_name) %>
|
|
24
|
+
<br>
|
|
25
|
+
<% end -%>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%- if devise_mapping.omniauthable? %>
|
|
2
|
+
<div class="d-grid gap-2">
|
|
3
|
+
<%- resource_class.omniauth_providers.each do |provider| %>
|
|
4
|
+
<%= link_to t('active_admin.devise.links.sign_in_with_omniauth_provider', provider: provider.to_s.titleize),
|
|
5
|
+
omniauth_authorize_path(resource_name, provider), class: "btn btn-light" %>
|
|
6
|
+
<% end -%>
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<div class="divider my-4"><%= I18n.t(:divider, scope: "active_admin.devise.omniauth") %></div>
|
|
10
|
+
<% end -%>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<% content_for :title do %>
|
|
2
|
+
<%= title t("active_admin.devise.unlock.title") %>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<%= devise_error_messages! %>
|
|
6
|
+
<%= active_admin_form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f|
|
|
7
|
+
f.inputs do
|
|
8
|
+
f.input :email
|
|
9
|
+
end
|
|
10
|
+
f.actions do
|
|
11
|
+
f.action :submit,
|
|
12
|
+
label: t("active_admin.devise.unlock.submit"),
|
|
13
|
+
wrapper_html: {class: "d-block w-100"},
|
|
14
|
+
button_html: {
|
|
15
|
+
value: t("active_admin.devise.unlock.submit"),
|
|
16
|
+
class: "btn btn-primary w-100"
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
end %>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "First" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the first page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="first page-item">
|
|
10
|
+
<%= link_to_unless current_page.first?, t('views.pagination.first').html_safe, url, remote: remote, class: 'page-link' %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%# Non-link tag that stands for skipped pages...
|
|
2
|
+
- available local variables
|
|
3
|
+
current_page: a page object for the currently displayed page
|
|
4
|
+
total_pages: total number of pages
|
|
5
|
+
per_page: number of items to fetch per page
|
|
6
|
+
remote: data-remote
|
|
7
|
+
-%>
|
|
8
|
+
<li class="page gap page-item disabled">
|
|
9
|
+
<a href="#" onclick="return false;" class="page-link">
|
|
10
|
+
<%= t('views.pagination.truncate').html_safe %>
|
|
11
|
+
</a>
|
|
12
|
+
</li>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "Last" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the last page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="last page-item">
|
|
10
|
+
<%= link_to_unless current_page.last?, t('views.pagination.last').html_safe, url, remote: remote, class: 'page-link' %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "Next" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the next page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="next page-item">
|
|
10
|
+
<%= link_to_unless current_page.last?, t('views.pagination.next').html_safe, url, rel: 'next', remote: remote, class: 'page-link' %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%# Link showing page number
|
|
2
|
+
- available local variables
|
|
3
|
+
page: a page object for "this" page
|
|
4
|
+
url: url to this page
|
|
5
|
+
current_page: a page object for the currently displayed page
|
|
6
|
+
total_pages: total number of pages
|
|
7
|
+
per_page: number of items to fetch per page
|
|
8
|
+
remote: data-remote
|
|
9
|
+
-%>
|
|
10
|
+
<li class="page<%= ' current active' if page.current? %> page-item">
|
|
11
|
+
<%= link_to page, url, remote: remote, rel: page.rel, class: 'page-link' %>
|
|
12
|
+
</li>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<%# The container tag
|
|
2
|
+
- available local variables
|
|
3
|
+
current_page: a page object for the currently displayed page
|
|
4
|
+
total_pages: total number of pages
|
|
5
|
+
per_page: number of items to fetch per page
|
|
6
|
+
remote: data-remote
|
|
7
|
+
paginator: the paginator that renders the pagination tags inside
|
|
8
|
+
-%>
|
|
9
|
+
<%= paginator.render do -%>
|
|
10
|
+
<nav class='paginator'>
|
|
11
|
+
<ul class="pagination">
|
|
12
|
+
<%= first_page_tag unless current_page.first? %>
|
|
13
|
+
<%= prev_page_tag unless current_page.first? %>
|
|
14
|
+
<% each_page do |page| -%>
|
|
15
|
+
<% if page.display_tag? -%>
|
|
16
|
+
<%= page_tag page %>
|
|
17
|
+
<% elsif !page.was_truncated? -%>
|
|
18
|
+
<%= gap_tag %>
|
|
19
|
+
<% end -%>
|
|
20
|
+
<% end -%>
|
|
21
|
+
<% unless current_page.out_of_range? %>
|
|
22
|
+
<%= next_page_tag unless current_page.last? %>
|
|
23
|
+
<%= last_page_tag unless current_page.last? %>
|
|
24
|
+
<% end %>
|
|
25
|
+
</ul>
|
|
26
|
+
</nav>
|
|
27
|
+
<% end -%>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "Previous" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the previous page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="prev page-item">
|
|
10
|
+
<%= link_to_unless current_page.first?, t('views.pagination.previous').html_safe, url, rel: 'prev', remote: remote, class: 'page-link' %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="<%=I18n.locale%>">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
|
5
|
+
<title><%= [@page_title, ActiveAdmin.application.site_title(self)].compact.join(" | ") %></title>
|
|
6
|
+
|
|
7
|
+
<% ActiveAdmin.application.stylesheets.each do |style, options| %>
|
|
8
|
+
<% if ActiveAdmin.application.use_webpacker %>
|
|
9
|
+
<%= stylesheet_pack_tag style, **options %>
|
|
10
|
+
<% else %>
|
|
11
|
+
<%= stylesheet_link_tag style, **options %>
|
|
12
|
+
<% end %>
|
|
13
|
+
<% end %>
|
|
14
|
+
<% ActiveAdmin.application.javascripts.each do |path| %>
|
|
15
|
+
<% if ActiveAdmin.application.use_webpacker %>
|
|
16
|
+
<%= javascript_pack_tag path %>
|
|
17
|
+
<% else %>
|
|
18
|
+
<%= javascript_include_tag path %>
|
|
19
|
+
<% end %>
|
|
20
|
+
<% end %>
|
|
21
|
+
|
|
22
|
+
<%= favicon_link_tag ActiveAdmin.application.favicon if ActiveAdmin.application.favicon %>
|
|
23
|
+
|
|
24
|
+
<% ActiveAdmin.application.meta_tags_for_logged_out_pages.each do |name, content| %>
|
|
25
|
+
<%= tag(:meta, name: name, content: content) %>
|
|
26
|
+
<% end %>
|
|
27
|
+
|
|
28
|
+
<%= csrf_meta_tag %>
|
|
29
|
+
</head>
|
|
30
|
+
<body class="d-flex flex-column justify-content-center min-vh-100 py-4 active_admin logged_out <%= controller.action_name %>">
|
|
31
|
+
<div class="container-fluid">
|
|
32
|
+
<div class="row" id="content_wrapper">
|
|
33
|
+
<div class="col-md-6 col-lg-5 col-xl-4 mx-auto">
|
|
34
|
+
<div id="active_admin_content">
|
|
35
|
+
<div class="site-title-wrap mb-3">
|
|
36
|
+
<%= site_title ActiveAdmin.application %>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="card panel">
|
|
39
|
+
<h5 class="card-header"><%= yield :title %></h5>
|
|
40
|
+
<div class="card-body">
|
|
41
|
+
<%= flashes_html %>
|
|
42
|
+
<%= render "active_admin/devise/shared/omniauth" %>
|
|
43
|
+
<%= yield %>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="card-footer">
|
|
46
|
+
<%= render "active_admin/devise/shared/links" %>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<%= footer ActiveAdmin.application %>
|
|
54
|
+
</div>
|
|
55
|
+
</body>
|
|
56
|
+
</html>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
en:
|
|
3
|
+
active_admin:
|
|
4
|
+
batch_actions:
|
|
5
|
+
confirm_dialog:
|
|
6
|
+
cancel: Cancel
|
|
7
|
+
confirm: Confirm
|
|
8
|
+
confirm_dialog:
|
|
9
|
+
cancel: Cancel
|
|
10
|
+
confirm: Confirm
|
|
11
|
+
dashboard_welcome:
|
|
12
|
+
call_to_action: To add dashboard sections, checkout <code>app/admin/dashboard.rb</code>
|
|
13
|
+
footnote: |
|
|
14
|
+
Check our <a href="https://adminterface.io/" target="_blank" rel="noopener noreferrer">website</a>
|
|
15
|
+
to find in-depth documentation for everything that Adminterface offers.
|
|
16
|
+
welcome: Welcome to Adminterface. This is the default dashboard page.
|
|
17
|
+
devise:
|
|
18
|
+
omniauth:
|
|
19
|
+
divider: Or
|
|
20
|
+
filter_model: Find %{model}
|
|
21
|
+
inputs:
|
|
22
|
+
password:
|
|
23
|
+
visibility:
|
|
24
|
+
hide: Hide
|
|
25
|
+
show: Show
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module Adminterface
|
|
2
|
+
module Configs
|
|
3
|
+
DEFAULTS = lambda {
|
|
4
|
+
path = "lib/adminterface/fixtures"
|
|
5
|
+
|
|
6
|
+
HashWithIndifferentAccess.new(
|
|
7
|
+
components: YAML.load_file(Engine.root.join("#{path}/components.yml").to_s),
|
|
8
|
+
css_classes: YAML.load_file(Engine.root.join("#{path}/css_classes.yml").to_s)
|
|
9
|
+
)
|
|
10
|
+
}.call.freeze
|
|
11
|
+
|
|
12
|
+
module Configurable
|
|
13
|
+
attr_writer :components, :css_classes, :comments_pager, :comments_per_page, :pager, :comments_input
|
|
14
|
+
|
|
15
|
+
def components
|
|
16
|
+
namespace.components.deep_merge(@components || {})
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def css_classes
|
|
20
|
+
namespace.css_classes.deep_merge(@css_classes || {})
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def pager
|
|
24
|
+
@pager || namespace.pager
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def comments_pager
|
|
28
|
+
@comments_pager || namespace.comments_pager
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def comments_per_page
|
|
32
|
+
@comments_per_page || namespace.comments_per_page
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def comments_input
|
|
36
|
+
@comments_input || namespace.comments_input
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
module Finders
|
|
41
|
+
extend ActiveSupport::Concern
|
|
42
|
+
class FinderError < StandardError; end
|
|
43
|
+
|
|
44
|
+
class_methods do
|
|
45
|
+
def has_css_classes_for(*args)
|
|
46
|
+
args.each { |key| define_configs_getter(:css_classes, key) }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def has_components_for(*args)
|
|
50
|
+
args.each { |key| define_configs_getter(:components, key) }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def define_configs_getter(type, key)
|
|
54
|
+
name = "#{key}_#{type}"
|
|
55
|
+
define_method name do
|
|
56
|
+
return instance_variable_get("@#{name}") if instance_variable_defined?("@#{name}")
|
|
57
|
+
instance_variable_set "@#{name}", find_configs(type, key)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def find_configs(key, *args)
|
|
65
|
+
configs.try(key)&.dig(*args)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def configs
|
|
69
|
+
active_admin_config
|
|
70
|
+
rescue => e
|
|
71
|
+
Rails.logger.info "#{e.class}: active_admin_config is not available for #{self.class}"
|
|
72
|
+
ActiveAdmin.application
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require_relative "./base"
|
|
2
|
+
|
|
3
|
+
module Adminterface
|
|
4
|
+
module Data
|
|
5
|
+
class Countries < Base
|
|
6
|
+
PluginMissing = Class.new(StandardError)
|
|
7
|
+
|
|
8
|
+
attr_reader :locale, :options
|
|
9
|
+
|
|
10
|
+
def initialize(locale, options = {})
|
|
11
|
+
@locale = locale
|
|
12
|
+
@options = options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def call
|
|
16
|
+
raise_error if plugin_missing?
|
|
17
|
+
countries
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def countries
|
|
23
|
+
codes = ISO3166::Country.codes
|
|
24
|
+
codes.map do |code|
|
|
25
|
+
country = ISO3166::Country[code]
|
|
26
|
+
{
|
|
27
|
+
code: code,
|
|
28
|
+
name: country.name,
|
|
29
|
+
translated_name: country.translations[locale.downcase.to_s] || country.name
|
|
30
|
+
}
|
|
31
|
+
end.sort_by { |x| x[:name] }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def plugin_missing?
|
|
35
|
+
!Object.const_defined?("::CountrySelect")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def raise_error
|
|
39
|
+
raise PluginMissing,
|
|
40
|
+
"To use the :country input, please install a country_select plugin, like this one: https://github.com/stefanpenner/country_select"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|