activeadmin 2.9.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +284 -1
- data/CONTRIBUTING.md +4 -12
- data/README.md +2 -2
- data/app/assets/javascripts/active_admin/base.js +13 -9
- data/app/assets/stylesheets/active_admin/_base.scss +53 -37
- data/app/assets/stylesheets/active_admin/_forms.scss +1 -11
- data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +9 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
- data/app/javascript/active_admin/initializers/has-many.js +4 -1
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +5 -4
- data/config/locales/ar.yml +0 -7
- data/config/locales/az.yml +0 -7
- data/config/locales/bg.yml +0 -7
- data/config/locales/bs.yml +0 -7
- data/config/locales/ca.yml +0 -7
- data/config/locales/cs.yml +0 -7
- data/config/locales/da.yml +0 -7
- data/config/locales/de-CH.yml +0 -7
- data/config/locales/de.yml +0 -8
- data/config/locales/el.yml +0 -7
- data/config/locales/en-CA.yml +0 -7
- data/config/locales/en-GB.yml +0 -7
- data/config/locales/en.yml +0 -8
- data/config/locales/eo.yml +0 -8
- data/config/locales/es-MX.yml +0 -7
- data/config/locales/es.yml +0 -8
- data/config/locales/fa.yml +0 -7
- data/config/locales/fi.yml +0 -7
- data/config/locales/fr.yml +3 -11
- data/config/locales/he.yml +0 -9
- data/config/locales/hr.yml +0 -7
- data/config/locales/hu.yml +0 -8
- data/config/locales/id.yml +0 -7
- data/config/locales/it.yml +0 -8
- data/config/locales/ja.yml +0 -8
- data/config/locales/ko.yml +1 -8
- data/config/locales/lt.yml +0 -8
- data/config/locales/lv.yml +0 -7
- data/config/locales/mk.yml +0 -8
- data/config/locales/nb.yml +0 -8
- data/config/locales/nl.yml +1 -9
- data/config/locales/pl.yml +0 -8
- data/config/locales/pt-BR.yml +0 -8
- data/config/locales/pt-PT.yml +0 -7
- data/config/locales/ro.yml +3 -9
- data/config/locales/ru.yml +0 -6
- data/config/locales/sk.yml +0 -8
- data/config/locales/sv-SE.yml +58 -39
- data/config/locales/tr.yml +0 -11
- data/config/locales/uk.yml +0 -6
- data/config/locales/vi.yml +34 -15
- data/config/locales/zh-CN.yml +34 -23
- data/config/locales/zh-TW.yml +0 -7
- data/lib/active_admin/abstract_view_factory.rb +1 -0
- data/lib/active_admin/application.rb +10 -10
- data/lib/active_admin/application_settings.rb +1 -0
- data/lib/active_admin/asset_registration.rb +4 -3
- data/lib/active_admin/authorization_adapter.rb +3 -0
- data/lib/active_admin/base_controller/authorization.rb +4 -3
- data/lib/active_admin/base_controller/menu.rb +1 -0
- data/lib/active_admin/base_controller.rb +2 -1
- data/lib/active_admin/batch_actions/controller.rb +1 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +1 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +1 -0
- data/lib/active_admin/batch_actions.rb +1 -0
- data/lib/active_admin/callbacks.rb +1 -0
- data/lib/active_admin/cancan_adapter.rb +1 -0
- data/lib/active_admin/collection_decorator.rb +1 -0
- data/lib/active_admin/component.rb +1 -0
- data/lib/active_admin/controller_action.rb +1 -0
- data/lib/active_admin/csv_builder.rb +24 -16
- data/lib/active_admin/dependency.rb +1 -4
- data/lib/active_admin/devise.rb +11 -0
- data/lib/active_admin/dsl.rb +1 -0
- data/lib/active_admin/dynamic_setting.rb +1 -0
- data/lib/active_admin/dynamic_settings_node.rb +1 -0
- data/lib/active_admin/engine.rb +8 -2
- data/lib/active_admin/error.rb +1 -0
- data/lib/active_admin/filters/active.rb +1 -0
- data/lib/active_admin/filters/active_filter.rb +2 -1
- data/lib/active_admin/filters/active_sidebar.rb +2 -28
- data/lib/active_admin/filters/dsl.rb +1 -0
- data/lib/active_admin/filters/forms.rb +3 -2
- data/lib/active_admin/filters/formtastic_addons.rb +2 -1
- data/lib/active_admin/filters/resource_extension.rb +5 -4
- data/lib/active_admin/filters.rb +1 -0
- data/lib/active_admin/form_builder.rb +1 -0
- data/lib/active_admin/generators/boilerplate.rb +1 -0
- data/lib/active_admin/helpers/collection.rb +2 -0
- data/lib/active_admin/helpers/i18n.rb +1 -0
- data/lib/active_admin/helpers/optional_display.rb +1 -0
- data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +1 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +3 -2
- data/lib/active_admin/inputs/filters/base.rb +1 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +1 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -0
- data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +3 -2
- data/lib/active_admin/inputs/filters/numeric_input.rb +2 -1
- data/lib/active_admin/inputs/filters/select_input.rb +3 -0
- data/lib/active_admin/inputs/filters/string_input.rb +2 -1
- data/lib/active_admin/inputs/filters/text_input.rb +1 -0
- data/lib/active_admin/inputs.rb +1 -0
- data/lib/active_admin/localizers/resource_localizer.rb +1 -0
- data/lib/active_admin/localizers.rb +1 -0
- data/lib/active_admin/menu.rb +2 -0
- data/lib/active_admin/menu_collection.rb +1 -0
- data/lib/active_admin/menu_item.rb +1 -0
- data/lib/active_admin/namespace.rb +4 -3
- data/lib/active_admin/namespace_settings.rb +2 -1
- data/lib/active_admin/order_clause.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +9 -0
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +2 -1
- data/lib/active_admin/orm/active_record/comments/views.rb +1 -0
- data/lib/active_admin/orm/active_record/comments.rb +9 -8
- data/lib/active_admin/orm/active_record.rb +1 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +1 -0
- data/lib/active_admin/page_controller.rb +1 -0
- data/lib/active_admin/page_dsl.rb +1 -0
- data/lib/active_admin/page_presenter.rb +1 -0
- data/lib/active_admin/pundit_adapter.rb +55 -13
- data/lib/active_admin/resource/action_items.rb +3 -2
- data/lib/active_admin/resource/attributes.rb +1 -0
- data/lib/active_admin/resource/belongs_to.rb +1 -0
- data/lib/active_admin/resource/controllers.rb +1 -0
- data/lib/active_admin/resource/includes.rb +1 -0
- data/lib/active_admin/resource/menu.rb +1 -0
- data/lib/active_admin/resource/model.rb +1 -0
- data/lib/active_admin/resource/naming.rb +1 -0
- data/lib/active_admin/resource/ordering.rb +1 -0
- data/lib/active_admin/resource/page_presenters.rb +1 -0
- data/lib/active_admin/resource/pagination.rb +1 -0
- data/lib/active_admin/resource/routes.rb +1 -0
- data/lib/active_admin/resource/scope_to.rb +1 -0
- data/lib/active_admin/resource/scopes.rb +1 -0
- data/lib/active_admin/resource/sidebars.rb +1 -0
- data/lib/active_admin/resource.rb +3 -2
- data/lib/active_admin/resource_collection.rb +1 -0
- data/lib/active_admin/resource_controller/action_builder.rb +1 -0
- data/lib/active_admin/resource_controller/data_access.rb +30 -4
- data/lib/active_admin/resource_controller/decorators.rb +1 -0
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -0
- data/lib/active_admin/resource_controller/sidebars.rb +1 -0
- data/lib/active_admin/resource_controller/streaming.rb +3 -2
- data/lib/active_admin/resource_controller.rb +1 -0
- data/lib/active_admin/resource_dsl.rb +7 -21
- data/lib/active_admin/router.rb +1 -0
- data/lib/active_admin/scope.rb +1 -0
- data/lib/active_admin/settings_node.rb +1 -0
- data/lib/active_admin/sidebar_section.rb +1 -0
- data/lib/active_admin/version.rb +2 -1
- data/lib/active_admin/view_factory.rb +1 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +1 -0
- data/lib/active_admin/view_helpers/display_helper.rb +19 -4
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
- data/lib/active_admin/view_helpers/fields_for.rb +1 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
- data/lib/active_admin/view_helpers/form_helper.rb +1 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
- data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
- data/lib/active_admin/view_helpers/title_helper.rb +1 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
- data/lib/active_admin/view_helpers.rb +1 -0
- data/lib/active_admin/views/action_items.rb +1 -0
- data/lib/active_admin/views/components/active_admin_form.rb +2 -5
- data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
- data/lib/active_admin/views/components/attributes_table.rb +1 -0
- data/lib/active_admin/views/components/blank_slate.rb +1 -0
- data/lib/active_admin/views/components/columns.rb +1 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +3 -5
- data/lib/active_admin/views/components/index_list.rb +1 -0
- data/lib/active_admin/views/components/menu.rb +1 -0
- data/lib/active_admin/views/components/menu_item.rb +1 -0
- data/lib/active_admin/views/components/paginated_collection.rb +1 -0
- data/lib/active_admin/views/components/panel.rb +1 -0
- data/lib/active_admin/views/components/scopes.rb +1 -0
- data/lib/active_admin/views/components/sidebar.rb +1 -0
- data/lib/active_admin/views/components/sidebar_section.rb +1 -0
- data/lib/active_admin/views/components/site_title.rb +1 -0
- data/lib/active_admin/views/components/status_tag.rb +1 -0
- data/lib/active_admin/views/components/table_for.rb +1 -0
- data/lib/active_admin/views/components/tabs.rb +1 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
- data/lib/active_admin/views/footer.rb +1 -0
- data/lib/active_admin/views/header.rb +1 -0
- data/lib/active_admin/views/index_as_block.rb +1 -0
- data/lib/active_admin/views/index_as_blog.rb +1 -0
- data/lib/active_admin/views/index_as_grid.rb +1 -0
- data/lib/active_admin/views/index_as_table.rb +2 -5
- data/lib/active_admin/views/pages/base.rb +8 -4
- data/lib/active_admin/views/pages/form.rb +1 -0
- data/lib/active_admin/views/pages/index.rb +2 -1
- data/lib/active_admin/views/pages/layout.rb +1 -0
- data/lib/active_admin/views/pages/page.rb +1 -0
- data/lib/active_admin/views/pages/show.rb +2 -7
- data/lib/active_admin/views/tabbed_navigation.rb +1 -0
- data/lib/active_admin/views/title_bar.rb +1 -0
- data/lib/active_admin/views.rb +1 -0
- data/lib/active_admin.rb +6 -3
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +1 -0
- data/lib/generators/active_admin/install/install_generator.rb +1 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +18 -1
- data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
- data/lib/generators/active_admin/page/page_generator.rb +1 -0
- data/lib/generators/active_admin/page/templates/page.rb +1 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +1 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +1 -0
- metadata +26 -83
- data/docs/.gitignore +0 -1
- data/docs/0-installation.md +0 -142
- data/docs/1-general-configuration.md +0 -224
- data/docs/10-custom-pages.md +0 -150
- data/docs/11-decorators.md +0 -70
- data/docs/12-arbre-components.md +0 -214
- data/docs/13-authorization-adapter.md +0 -285
- data/docs/14-gotchas.md +0 -138
- data/docs/2-resource-customization.md +0 -475
- data/docs/3-index-pages/custom-index.md +0 -35
- data/docs/3-index-pages/index-as-block.md +0 -19
- data/docs/3-index-pages/index-as-blog.md +0 -69
- data/docs/3-index-pages/index-as-grid.md +0 -27
- data/docs/3-index-pages/index-as-table.md +0 -234
- data/docs/3-index-pages.md +0 -328
- data/docs/4-csv-format.md +0 -74
- data/docs/5-forms.md +0 -237
- data/docs/6-show-pages.md +0 -93
- data/docs/7-sidebars.md +0 -75
- data/docs/8-custom-actions.md +0 -177
- data/docs/9-batch-actions.md +0 -237
- data/docs/CNAME +0 -1
- data/docs/Gemfile +0 -3
- data/docs/Gemfile.lock +0 -259
- data/docs/README.md +0 -24
- data/docs/_config.yml +0 -4
- data/docs/_includes/footer.html +0 -8
- data/docs/_includes/google-analytics.html +0 -16
- data/docs/_includes/head.html +0 -7
- data/docs/_includes/toc.html +0 -98
- data/docs/_includes/top-menu.html +0 -17
- data/docs/_layouts/default.html +0 -21
- data/docs/documentation.md +0 -60
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/code-header.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/images/tidelift.svg +0 -14
- data/docs/index.html +0 -226
- data/docs/stylesheets/main.css +0 -1205
- data/lib/active_admin/deprecation.rb +0 -10
- data/lib/ransack_ext.rb +0 -20
- /data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
data/config/locales/vi.yml
CHANGED
@@ -1,4 +1,20 @@
|
|
1
1
|
vi:
|
2
|
+
activerecord:
|
3
|
+
models:
|
4
|
+
comment:
|
5
|
+
one: "Bình luận"
|
6
|
+
other: "Các bình luận"
|
7
|
+
active_admin/comment:
|
8
|
+
one: "Bình luận"
|
9
|
+
other: "Các bình luận"
|
10
|
+
attributes:
|
11
|
+
active_admin/comment:
|
12
|
+
author_type: "Loại tác giả"
|
13
|
+
body: "Nội dung"
|
14
|
+
created_at: "Đã tạo"
|
15
|
+
namespace: "Namespace"
|
16
|
+
resource_type: "Resource type"
|
17
|
+
updated_at: "Đã cập nhật"
|
2
18
|
active_admin:
|
3
19
|
dashboard: Bảng điều khiển
|
4
20
|
dashboard_welcome:
|
@@ -21,25 +37,20 @@ vi:
|
|
21
37
|
has_many_new: "Thêm mới %{model}"
|
22
38
|
has_many_delete: "Xóa"
|
23
39
|
has_many_remove: "Hủy bỏ"
|
40
|
+
move: "Di chuyển"
|
24
41
|
filters:
|
25
42
|
buttons:
|
26
43
|
filter: "Lọc"
|
27
44
|
clear: "Xóa dữ liệu lọc"
|
28
45
|
predicates:
|
29
|
-
contains: "Có chứa"
|
30
|
-
equals: "Bằng"
|
31
|
-
starts_with: "Bắt đầu với"
|
32
|
-
ends_with: "Kết thúc bởi"
|
33
|
-
greater_than: "Lớn hơn"
|
34
|
-
less_than: "Nhỏ hơn"
|
35
|
-
gteq_datetime: "Lớn hơn hoặc bằng"
|
36
|
-
lteq_datetime: "Nhỏ hơn hoặc bằng"
|
37
46
|
from: "Từ"
|
38
47
|
to: "Đến"
|
48
|
+
scopes:
|
49
|
+
all: "Tất cả"
|
39
50
|
search_status:
|
40
51
|
headline: "Danh sách tìm kiếm:"
|
41
52
|
current_scope: "Phạm vi:"
|
42
|
-
current_filters: "Bộ
|
53
|
+
current_filters: "Bộ lọc hiện tại:"
|
43
54
|
no_current_filters: "Không có"
|
44
55
|
status_tag:
|
45
56
|
"yes": "Có"
|
@@ -47,7 +58,7 @@ vi:
|
|
47
58
|
"unset": "Không Có"
|
48
59
|
main_content: "Xin bổ sung %{model}#main_content để hiển thị nội dung."
|
49
60
|
logout: "Đăng xuất"
|
50
|
-
powered_by: "
|
61
|
+
powered_by: "Bản quyền bởi %{active_admin} %{version}"
|
51
62
|
sidebars:
|
52
63
|
filters: "Bộ Lọc"
|
53
64
|
search_status: "Trạng thái tìm kiếm"
|
@@ -75,12 +86,13 @@ vi:
|
|
75
86
|
one: "Đã xóa thành công 1 %{model}"
|
76
87
|
other: "Đã xóa thành công %{count} %{plural_model}"
|
77
88
|
selection_toggle_explanation: "(Thay đổi lựa chọn)"
|
78
|
-
action_label: "%{title} được chọn"
|
89
|
+
action_label: "%{title} đã được chọn"
|
79
90
|
labels:
|
80
91
|
destroy: "Xóa"
|
81
92
|
comments:
|
82
93
|
created_at: "Đã tạo"
|
83
94
|
resource_type: "Resource Type"
|
95
|
+
author_type: "Loại tác giả"
|
84
96
|
body: "Nội dung"
|
85
97
|
author: "Tác giả"
|
86
98
|
add: "Thêm bình luận"
|
@@ -117,15 +129,22 @@ vi:
|
|
117
129
|
title: "Thay đổi mật khẩu của bạn"
|
118
130
|
submit: "Thay đổi mật khẩu của tôi"
|
119
131
|
unlock:
|
120
|
-
title: "
|
121
|
-
submit: "
|
132
|
+
title: "Gửi lại hướng dẫn mở khoá"
|
133
|
+
submit: "Gửi lại hướng dẫn mở khoá"
|
122
134
|
resend_confirmation_instructions:
|
123
|
-
title: "
|
124
|
-
submit: "
|
135
|
+
title: "Gửi lại hướng dẫn xác nhận"
|
136
|
+
submit: "Gửi lại hướng dẫn xác nhận"
|
125
137
|
links:
|
138
|
+
sign_up: "Đăng ký"
|
126
139
|
sign_in: "Đăng nhập"
|
127
140
|
forgot_your_password: "Quên mật khẩu của bạn?"
|
128
141
|
sign_in_with_omniauth_provider: "Đăng nhập với %{provider}"
|
142
|
+
resend_unlock_instructions: "Gửi lại hướng dẫn mở khoá"
|
143
|
+
resend_confirmation_instructions: "Gửi lại hướng dẫn xác nhận"
|
144
|
+
unsupported_browser:
|
145
|
+
headline: "Vui lòng lưu ý rằng ActiveAdmin không còn hỗ trợ trên Internet Explorer các phiên bản 8 và thấp hơn."
|
146
|
+
recommendation: "Chúng tôi khuyên bạn hãy vào <a href=\"http://browsehappy.com/\">nâng cấp trình duyệt của bạn </a> để cải thiện trải nghiệm của bạn."
|
147
|
+
turn_off_compatibility_view: "Nếu bạn đang sử dụng IE 9 hoặc mới hơn, hãy chắc chắn bạn <a href=\"https://support.microsoft.com/en-us/help/17471\">tắt \"Compatibility View\"</a>."
|
129
148
|
access_denied:
|
130
149
|
message: "Bạn không có quyền thực hiện tính năng này"
|
131
150
|
index_list:
|
data/config/locales/zh-CN.yml
CHANGED
@@ -1,4 +1,20 @@
|
|
1
1
|
"zh-CN":
|
2
|
+
activerecord:
|
3
|
+
models:
|
4
|
+
comment:
|
5
|
+
one: "评论"
|
6
|
+
other: "评论"
|
7
|
+
active_admin/comment:
|
8
|
+
one: "评论"
|
9
|
+
other: "评论"
|
10
|
+
attributes:
|
11
|
+
active_admin/comment:
|
12
|
+
author_type: "作者类型"
|
13
|
+
body: "内容"
|
14
|
+
created_at: "创建"
|
15
|
+
namespace: "Namespace"
|
16
|
+
resource_type: "Resource 类型"
|
17
|
+
updated_at: "更新"
|
2
18
|
active_admin:
|
3
19
|
dashboard: "控制面板"
|
4
20
|
dashboard_welcome:
|
@@ -8,8 +24,8 @@
|
|
8
24
|
edit: "编辑"
|
9
25
|
delete: "删除"
|
10
26
|
delete_confirmation: "确定删除?"
|
11
|
-
create_another: "
|
12
|
-
new_model: "
|
27
|
+
create_another: "新增另一个%{model}"
|
28
|
+
new_model: "新增%{model}"
|
13
29
|
edit_model: "编辑%{model}"
|
14
30
|
delete_model: "删除%{model}"
|
15
31
|
details: "%{model}详情"
|
@@ -17,37 +33,32 @@
|
|
17
33
|
empty: "未定义"
|
18
34
|
previous: "上一个"
|
19
35
|
next: "下一个"
|
20
|
-
download: "
|
21
|
-
has_many_new: "
|
36
|
+
download: "下载:"
|
37
|
+
has_many_new: "新增一个%{model}"
|
22
38
|
has_many_delete: "删除"
|
23
39
|
has_many_remove: "清除"
|
40
|
+
move: "移动"
|
24
41
|
filters:
|
25
42
|
buttons:
|
26
43
|
filter: "过滤"
|
27
44
|
clear: "清除条件"
|
28
45
|
predicates:
|
29
|
-
contains: "包含"
|
30
|
-
equals: "等于"
|
31
|
-
starts_with: "开头"
|
32
|
-
ends_with: "完与"
|
33
|
-
greater_than: "大于"
|
34
|
-
less_than: "小于"
|
35
|
-
gteq_datetime: "大于等于"
|
36
|
-
lteq_datetime: "小于等于"
|
37
46
|
from: "起"
|
38
47
|
to: "止"
|
48
|
+
scopes:
|
49
|
+
all: "所有"
|
39
50
|
search_status:
|
40
51
|
headline: "搜索条件:"
|
41
|
-
current_scope: "
|
52
|
+
current_scope: "范围:"
|
42
53
|
current_filters: "过滤条件:"
|
43
54
|
no_current_filters: "无"
|
44
55
|
status_tag:
|
45
56
|
"yes": "是"
|
46
57
|
"no": "否"
|
47
58
|
"unset": "否"
|
48
|
-
main_content: "请执行 %{model}#main_content
|
59
|
+
main_content: "请执行 %{model}#main_content 来显示内容。"
|
49
60
|
logout: "退出"
|
50
|
-
powered_by: "
|
61
|
+
powered_by: "构建程序为 %{active_admin} %{version}"
|
51
62
|
sidebars:
|
52
63
|
filters: "所有条件"
|
53
64
|
search_status: "搜索条件"
|
@@ -63,14 +74,14 @@
|
|
63
74
|
other: "条目"
|
64
75
|
any: "任何"
|
65
76
|
blank_slate:
|
66
|
-
content: "暂时还没有%{resource_name}
|
67
|
-
link: "
|
77
|
+
content: "暂时还没有%{resource_name}。"
|
78
|
+
link: "新增一个"
|
68
79
|
dropdown_actions:
|
69
|
-
button_label: "
|
80
|
+
button_label: "操作"
|
70
81
|
batch_actions:
|
71
82
|
button_label: "批处理"
|
72
|
-
default_confirmation: "
|
73
|
-
delete_confirmation: "你确定要删除这些%{plural_model}
|
83
|
+
default_confirmation: "你确定要这样做?"
|
84
|
+
delete_confirmation: "你确定要删除这些%{plural_model}?"
|
74
85
|
succesfully_destroyed:
|
75
86
|
one: "成功删除 1 %{model}"
|
76
87
|
other: "成功删除 %{count} %{plural_model}"
|
@@ -92,7 +103,7 @@
|
|
92
103
|
author_missing: "匿名"
|
93
104
|
title_content: "(%{count})条评论"
|
94
105
|
errors:
|
95
|
-
empty_text: "
|
106
|
+
empty_text: "评论保存失败,内空不能为空。"
|
96
107
|
devise:
|
97
108
|
username:
|
98
109
|
title: "用户名"
|
@@ -121,8 +132,8 @@
|
|
121
132
|
title: "重新发送送解锁命令"
|
122
133
|
submit: "重新发送送解锁命令"
|
123
134
|
resend_confirmation_instructions:
|
124
|
-
title: "
|
125
|
-
submit: "
|
135
|
+
title: " 重新发送确认说明"
|
136
|
+
submit: " 重新发送确认说明"
|
126
137
|
links:
|
127
138
|
sign_up: "注册"
|
128
139
|
sign_in: "登录"
|
data/config/locales/zh-TW.yml
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require "active_admin/router"
|
2
3
|
require "active_admin/application_settings"
|
3
4
|
require "active_admin/namespace_settings"
|
@@ -75,7 +76,7 @@ module ActiveAdmin
|
|
75
76
|
|
76
77
|
namespace = namespaces[name.to_sym] ||= begin
|
77
78
|
namespace = Namespace.new(self, name)
|
78
|
-
ActiveSupport::Notifications.
|
79
|
+
ActiveSupport::Notifications.instrument ActiveAdmin::Namespace::RegisterEvent, { active_admin_namespace: namespace }
|
79
80
|
namespace
|
80
81
|
end
|
81
82
|
|
@@ -111,10 +112,10 @@ module ActiveAdmin
|
|
111
112
|
# To reload everything simply call `ActiveAdmin.unload!`
|
112
113
|
def load!
|
113
114
|
unless loaded?
|
114
|
-
ActiveSupport::Notifications.
|
115
|
+
ActiveSupport::Notifications.instrument BeforeLoadEvent, { active_admin_application: self } # before_load hook
|
115
116
|
files.each { |file| load file } # load files
|
116
117
|
namespace(default_namespace) # init AA resources
|
117
|
-
ActiveSupport::Notifications.
|
118
|
+
ActiveSupport::Notifications.instrument AfterLoadEvent, { active_admin_application: self } # after_load hook
|
118
119
|
@@loaded = true
|
119
120
|
end
|
120
121
|
end
|
@@ -125,7 +126,7 @@ module ActiveAdmin
|
|
125
126
|
|
126
127
|
# Returns ALL the files to be loaded
|
127
128
|
def files
|
128
|
-
load_paths.flatten.compact.uniq.flat_map { |path| Dir["#{path}/**/*.rb"] }
|
129
|
+
load_paths.flatten.compact.uniq.flat_map { |path| Dir["#{path}/**/*.rb"].sort }
|
129
130
|
end
|
130
131
|
|
131
132
|
# Creates all the necessary routes for the ActiveAdmin configurations
|
@@ -144,13 +145,13 @@ module ActiveAdmin
|
|
144
145
|
|
145
146
|
# Adds before, around and after filters to all controllers.
|
146
147
|
# Example usage:
|
147
|
-
# ActiveAdmin.
|
148
|
+
# ActiveAdmin.before_action :authenticate_admin!
|
148
149
|
#
|
149
150
|
AbstractController::Callbacks::ClassMethods.public_instance_methods.
|
150
|
-
select { |m| m.match(/
|
151
|
+
select { |m| m.match(/_action\z/) }.each do |name|
|
151
152
|
define_method name do |*args, &block|
|
152
|
-
|
153
|
-
|
153
|
+
ActiveSupport.on_load(:active_admin_controller) do
|
154
|
+
public_send name, *args, &block
|
154
155
|
end
|
155
156
|
end
|
156
157
|
end
|
@@ -164,8 +165,7 @@ module ActiveAdmin
|
|
164
165
|
private
|
165
166
|
|
166
167
|
def register_default_assets
|
167
|
-
register_stylesheet "active_admin.css", media: "
|
168
|
-
register_stylesheet "active_admin/print.css", media: "print"
|
168
|
+
register_stylesheet "active_admin.css", media: "all"
|
169
169
|
register_javascript "active_admin.js"
|
170
170
|
end
|
171
171
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveAdmin
|
2
3
|
module AssetRegistration
|
3
4
|
|
@@ -13,12 +14,12 @@ module ActiveAdmin
|
|
13
14
|
stylesheets.clear
|
14
15
|
end
|
15
16
|
|
16
|
-
def register_javascript(
|
17
|
-
javascripts
|
17
|
+
def register_javascript(path, options = {})
|
18
|
+
javascripts[path] = options
|
18
19
|
end
|
19
20
|
|
20
21
|
def javascripts
|
21
|
-
@javascripts ||=
|
22
|
+
@javascripts ||= {}
|
22
23
|
end
|
23
24
|
|
24
25
|
def clear_javascripts!
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveAdmin
|
2
3
|
class BaseController < ::InheritedResources::Base
|
3
4
|
module Authorization
|
@@ -6,9 +7,9 @@ module ActiveAdmin
|
|
6
7
|
ACTIONS_DICTIONARY = {
|
7
8
|
index: ActiveAdmin::Authorization::READ,
|
8
9
|
show: ActiveAdmin::Authorization::READ,
|
9
|
-
new: ActiveAdmin::Authorization::
|
10
|
+
new: ActiveAdmin::Authorization::NEW,
|
10
11
|
create: ActiveAdmin::Authorization::CREATE,
|
11
|
-
edit: ActiveAdmin::Authorization::
|
12
|
+
edit: ActiveAdmin::Authorization::EDIT,
|
12
13
|
update: ActiveAdmin::Authorization::UPDATE,
|
13
14
|
destroy: ActiveAdmin::Authorization::DESTROY
|
14
15
|
}
|
@@ -81,7 +82,7 @@ module ActiveAdmin
|
|
81
82
|
def active_admin_authorization_adapter
|
82
83
|
adapter = active_admin_namespace.authorization_adapter
|
83
84
|
if adapter.is_a? String
|
84
|
-
|
85
|
+
adapter.constantize
|
85
86
|
else
|
86
87
|
adapter
|
87
88
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require "active_admin/base_controller/authorization"
|
2
3
|
require "active_admin/base_controller/menu"
|
3
4
|
|
@@ -6,7 +7,6 @@ module ActiveAdmin
|
|
6
7
|
# It implements ActiveAdmin controllers core features.
|
7
8
|
class BaseController < ::InheritedResources::Base
|
8
9
|
helper ::ActiveAdmin::ViewHelpers
|
9
|
-
helper_method :env
|
10
10
|
|
11
11
|
layout :determine_active_admin_layout
|
12
12
|
|
@@ -77,5 +77,6 @@ module ActiveAdmin
|
|
77
77
|
{ controller: controller, action: action }
|
78
78
|
end
|
79
79
|
|
80
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
80
81
|
end
|
81
82
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveAdmin
|
2
3
|
# CSVBuilder stores CSV configuration
|
3
4
|
#
|
@@ -42,25 +43,19 @@ module ActiveAdmin
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def build(controller, csv)
|
45
|
-
@collection = controller.send :find_collection, except: :pagination
|
46
46
|
columns = exec_columns controller.view_context
|
47
|
-
bom = options
|
47
|
+
bom = options[:byte_order_mark]
|
48
48
|
column_names = options.delete(:column_names) { true }
|
49
|
-
csv_options = options.except :encoding_options, :humanize_name
|
49
|
+
csv_options = options.except :encoding_options, :humanize_name, :byte_order_mark
|
50
50
|
|
51
51
|
csv << bom if bom
|
52
52
|
|
53
53
|
if column_names
|
54
|
-
csv << CSV.generate_line(columns.map { |c| encode
|
54
|
+
csv << CSV.generate_line(columns.map { |c| sanitize(encode(c.name, options)) }, **csv_options)
|
55
55
|
end
|
56
56
|
|
57
|
-
|
58
|
-
(
|
59
|
-
paginated_collection(page).each do |resource|
|
60
|
-
resource = controller.send :apply_decorator, resource
|
61
|
-
csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
|
62
|
-
end
|
63
|
-
end
|
57
|
+
controller.send(:in_paginated_batches) do |resource|
|
58
|
+
csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
|
64
59
|
end
|
65
60
|
|
66
61
|
csv
|
@@ -75,7 +70,7 @@ module ActiveAdmin
|
|
75
70
|
|
76
71
|
def build_row(resource, columns, options)
|
77
72
|
columns.map do |column|
|
78
|
-
encode
|
73
|
+
sanitize(encode(call_method_or_proc_on(resource, column.data), options))
|
79
74
|
end
|
80
75
|
end
|
81
76
|
|
@@ -91,6 +86,10 @@ module ActiveAdmin
|
|
91
86
|
end
|
92
87
|
end
|
93
88
|
|
89
|
+
def sanitize(content)
|
90
|
+
Sanitizer.sanitize(content)
|
91
|
+
end
|
92
|
+
|
94
93
|
def method_missing(method, *args, &block)
|
95
94
|
if @view_context.respond_to? method
|
96
95
|
@view_context.public_send method, *args, &block
|
@@ -124,13 +123,22 @@ module ActiveAdmin
|
|
124
123
|
def column_transitive_options
|
125
124
|
@column_transitive_options ||= @options.slice(*COLUMN_TRANSITIVE_OPTIONS)
|
126
125
|
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Prevents CSV Injection according to https://owasp.org/www-community/attacks/CSV_Injection
|
129
|
+
module Sanitizer
|
130
|
+
extend self
|
131
|
+
|
132
|
+
ATTACK_CHARACTERS = ["=", "+", "-", "@", "\t", "\r"].freeze
|
133
|
+
|
134
|
+
def sanitize(value)
|
135
|
+
return "'#{value}" if require_sanitization?(value)
|
127
136
|
|
128
|
-
|
129
|
-
@collection.public_send(Kaminari.config.page_method_name, page_no).per(batch_size)
|
137
|
+
value
|
130
138
|
end
|
131
139
|
|
132
|
-
def
|
133
|
-
|
140
|
+
def require_sanitization?(value)
|
141
|
+
value.is_a?(String) && value.starts_with?(*ATTACK_CHARACTERS)
|
134
142
|
end
|
135
143
|
end
|
136
144
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveAdmin
|
2
3
|
module Dependency
|
3
4
|
module Requirements
|
@@ -55,10 +56,6 @@ module ActiveAdmin
|
|
55
56
|
Matcher.new name.to_s
|
56
57
|
end
|
57
58
|
|
58
|
-
def self.supports_zeitwerk?
|
59
|
-
rails >= "6.0.0.beta3" && RUBY_ENGINE != "jruby"
|
60
|
-
end
|
61
|
-
|
62
59
|
class Matcher
|
63
60
|
attr_reader :name
|
64
61
|
|
data/lib/active_admin/devise.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
ActiveAdmin::Dependency.devise! ActiveAdmin::Dependency::Requirements::DEVISE
|
2
3
|
|
3
4
|
require "devise"
|
@@ -52,22 +53,32 @@ module ActiveAdmin
|
|
52
53
|
|
53
54
|
class SessionsController < ::Devise::SessionsController
|
54
55
|
include ::ActiveAdmin::Devise::Controller
|
56
|
+
|
57
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
55
58
|
end
|
56
59
|
|
57
60
|
class PasswordsController < ::Devise::PasswordsController
|
58
61
|
include ::ActiveAdmin::Devise::Controller
|
62
|
+
|
63
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
59
64
|
end
|
60
65
|
|
61
66
|
class UnlocksController < ::Devise::UnlocksController
|
62
67
|
include ::ActiveAdmin::Devise::Controller
|
68
|
+
|
69
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
63
70
|
end
|
64
71
|
|
65
72
|
class RegistrationsController < ::Devise::RegistrationsController
|
66
73
|
include ::ActiveAdmin::Devise::Controller
|
74
|
+
|
75
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
67
76
|
end
|
68
77
|
|
69
78
|
class ConfirmationsController < ::Devise::ConfirmationsController
|
70
79
|
include ::ActiveAdmin::Devise::Controller
|
80
|
+
|
81
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
71
82
|
end
|
72
83
|
|
73
84
|
def self.controllers_for_filters
|
data/lib/active_admin/dsl.rb
CHANGED
data/lib/active_admin/engine.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveAdmin
|
2
3
|
class Engine < ::Rails::Engine
|
3
|
-
|
4
|
+
# Set default values for app_path and load_paths before running initializers
|
5
|
+
initializer "active_admin.load_app_path", before: :load_config_initializers do |app|
|
4
6
|
ActiveAdmin::Application.setting :app_path, app.root
|
5
7
|
ActiveAdmin::Application.setting :load_paths, [File.expand_path("app/admin", app.root)]
|
6
8
|
end
|
@@ -10,7 +12,7 @@ module ActiveAdmin
|
|
10
12
|
ActiveAdmin.application.stylesheets.each do |path, _|
|
11
13
|
app.config.assets.precompile << path
|
12
14
|
end
|
13
|
-
ActiveAdmin.application.javascripts.each do |path|
|
15
|
+
ActiveAdmin.application.javascripts.each do |path, _|
|
14
16
|
app.config.assets.precompile << path
|
15
17
|
end
|
16
18
|
end
|
@@ -19,5 +21,9 @@ module ActiveAdmin
|
|
19
21
|
initializer "active_admin.routes" do
|
20
22
|
require "active_admin/helpers/routes/url_helpers"
|
21
23
|
end
|
24
|
+
|
25
|
+
initializer "active_admin.deprecator" do |app|
|
26
|
+
app.deprecators[:activeadmin] = ActiveAdmin.deprecator if app.respond_to?(:deprecators)
|
27
|
+
end
|
22
28
|
end
|
23
29
|
end
|
data/lib/active_admin/error.rb
CHANGED