activeadmin 2.9.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +284 -1
  3. data/CONTRIBUTING.md +4 -12
  4. data/README.md +2 -2
  5. data/app/assets/javascripts/active_admin/base.js +13 -9
  6. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  7. data/app/assets/stylesheets/active_admin/_forms.scss +1 -11
  8. data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
  9. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  10. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
  11. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +9 -0
  12. data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
  13. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  14. data/app/javascript/active_admin/initializers/has-many.js +4 -1
  15. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  16. data/app/views/active_admin/page/index.html.arb +1 -0
  17. data/app/views/active_admin/resource/edit.html.arb +1 -0
  18. data/app/views/active_admin/resource/index.html.arb +1 -0
  19. data/app/views/active_admin/resource/new.html.arb +1 -0
  20. data/app/views/active_admin/resource/show.html.arb +1 -0
  21. data/app/views/layouts/active_admin.html.arb +1 -0
  22. data/app/views/layouts/active_admin_logged_out.html.erb +5 -4
  23. data/config/locales/ar.yml +0 -7
  24. data/config/locales/az.yml +0 -7
  25. data/config/locales/bg.yml +0 -7
  26. data/config/locales/bs.yml +0 -7
  27. data/config/locales/ca.yml +0 -7
  28. data/config/locales/cs.yml +0 -7
  29. data/config/locales/da.yml +0 -7
  30. data/config/locales/de-CH.yml +0 -7
  31. data/config/locales/de.yml +0 -8
  32. data/config/locales/el.yml +0 -7
  33. data/config/locales/en-CA.yml +0 -7
  34. data/config/locales/en-GB.yml +0 -7
  35. data/config/locales/en.yml +0 -8
  36. data/config/locales/eo.yml +0 -8
  37. data/config/locales/es-MX.yml +0 -7
  38. data/config/locales/es.yml +0 -8
  39. data/config/locales/fa.yml +0 -7
  40. data/config/locales/fi.yml +0 -7
  41. data/config/locales/fr.yml +3 -11
  42. data/config/locales/he.yml +0 -9
  43. data/config/locales/hr.yml +0 -7
  44. data/config/locales/hu.yml +0 -8
  45. data/config/locales/id.yml +0 -7
  46. data/config/locales/it.yml +0 -8
  47. data/config/locales/ja.yml +0 -8
  48. data/config/locales/ko.yml +1 -8
  49. data/config/locales/lt.yml +0 -8
  50. data/config/locales/lv.yml +0 -7
  51. data/config/locales/mk.yml +0 -8
  52. data/config/locales/nb.yml +0 -8
  53. data/config/locales/nl.yml +1 -9
  54. data/config/locales/pl.yml +0 -8
  55. data/config/locales/pt-BR.yml +0 -8
  56. data/config/locales/pt-PT.yml +0 -7
  57. data/config/locales/ro.yml +3 -9
  58. data/config/locales/ru.yml +0 -6
  59. data/config/locales/sk.yml +0 -8
  60. data/config/locales/sv-SE.yml +58 -39
  61. data/config/locales/tr.yml +0 -11
  62. data/config/locales/uk.yml +0 -6
  63. data/config/locales/vi.yml +34 -15
  64. data/config/locales/zh-CN.yml +34 -23
  65. data/config/locales/zh-TW.yml +0 -7
  66. data/lib/active_admin/abstract_view_factory.rb +1 -0
  67. data/lib/active_admin/application.rb +10 -10
  68. data/lib/active_admin/application_settings.rb +1 -0
  69. data/lib/active_admin/asset_registration.rb +4 -3
  70. data/lib/active_admin/authorization_adapter.rb +3 -0
  71. data/lib/active_admin/base_controller/authorization.rb +4 -3
  72. data/lib/active_admin/base_controller/menu.rb +1 -0
  73. data/lib/active_admin/base_controller.rb +2 -1
  74. data/lib/active_admin/batch_actions/controller.rb +1 -0
  75. data/lib/active_admin/batch_actions/resource_extension.rb +1 -0
  76. data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -0
  77. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -0
  78. data/lib/active_admin/batch_actions/views/selection_cells.rb +1 -0
  79. data/lib/active_admin/batch_actions.rb +1 -0
  80. data/lib/active_admin/callbacks.rb +1 -0
  81. data/lib/active_admin/cancan_adapter.rb +1 -0
  82. data/lib/active_admin/collection_decorator.rb +1 -0
  83. data/lib/active_admin/component.rb +1 -0
  84. data/lib/active_admin/controller_action.rb +1 -0
  85. data/lib/active_admin/csv_builder.rb +24 -16
  86. data/lib/active_admin/dependency.rb +1 -4
  87. data/lib/active_admin/devise.rb +11 -0
  88. data/lib/active_admin/dsl.rb +1 -0
  89. data/lib/active_admin/dynamic_setting.rb +1 -0
  90. data/lib/active_admin/dynamic_settings_node.rb +1 -0
  91. data/lib/active_admin/engine.rb +8 -2
  92. data/lib/active_admin/error.rb +1 -0
  93. data/lib/active_admin/filters/active.rb +1 -0
  94. data/lib/active_admin/filters/active_filter.rb +2 -1
  95. data/lib/active_admin/filters/active_sidebar.rb +2 -28
  96. data/lib/active_admin/filters/dsl.rb +1 -0
  97. data/lib/active_admin/filters/forms.rb +3 -2
  98. data/lib/active_admin/filters/formtastic_addons.rb +2 -1
  99. data/lib/active_admin/filters/resource_extension.rb +5 -4
  100. data/lib/active_admin/filters.rb +1 -0
  101. data/lib/active_admin/form_builder.rb +1 -0
  102. data/lib/active_admin/generators/boilerplate.rb +1 -0
  103. data/lib/active_admin/helpers/collection.rb +2 -0
  104. data/lib/active_admin/helpers/i18n.rb +1 -0
  105. data/lib/active_admin/helpers/optional_display.rb +1 -0
  106. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  107. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  108. data/lib/active_admin/inputs/datepicker_input.rb +1 -0
  109. data/lib/active_admin/inputs/filters/base/search_method_select.rb +3 -2
  110. data/lib/active_admin/inputs/filters/base.rb +1 -0
  111. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -0
  112. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -0
  113. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  114. data/lib/active_admin/inputs/filters/date_range_input.rb +3 -2
  115. data/lib/active_admin/inputs/filters/numeric_input.rb +2 -1
  116. data/lib/active_admin/inputs/filters/select_input.rb +3 -0
  117. data/lib/active_admin/inputs/filters/string_input.rb +2 -1
  118. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  119. data/lib/active_admin/inputs.rb +1 -0
  120. data/lib/active_admin/localizers/resource_localizer.rb +1 -0
  121. data/lib/active_admin/localizers.rb +1 -0
  122. data/lib/active_admin/menu.rb +2 -0
  123. data/lib/active_admin/menu_collection.rb +1 -0
  124. data/lib/active_admin/menu_item.rb +1 -0
  125. data/lib/active_admin/namespace.rb +4 -3
  126. data/lib/active_admin/namespace_settings.rb +2 -1
  127. data/lib/active_admin/order_clause.rb +1 -0
  128. data/lib/active_admin/orm/active_record/comments/comment.rb +9 -0
  129. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  130. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  131. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  132. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +2 -1
  133. data/lib/active_admin/orm/active_record/comments/views.rb +1 -0
  134. data/lib/active_admin/orm/active_record/comments.rb +9 -8
  135. data/lib/active_admin/orm/active_record.rb +1 -0
  136. data/lib/active_admin/orm/mongoid.rb +1 -0
  137. data/lib/active_admin/page.rb +1 -0
  138. data/lib/active_admin/page_controller.rb +1 -0
  139. data/lib/active_admin/page_dsl.rb +1 -0
  140. data/lib/active_admin/page_presenter.rb +1 -0
  141. data/lib/active_admin/pundit_adapter.rb +55 -13
  142. data/lib/active_admin/resource/action_items.rb +3 -2
  143. data/lib/active_admin/resource/attributes.rb +1 -0
  144. data/lib/active_admin/resource/belongs_to.rb +1 -0
  145. data/lib/active_admin/resource/controllers.rb +1 -0
  146. data/lib/active_admin/resource/includes.rb +1 -0
  147. data/lib/active_admin/resource/menu.rb +1 -0
  148. data/lib/active_admin/resource/model.rb +1 -0
  149. data/lib/active_admin/resource/naming.rb +1 -0
  150. data/lib/active_admin/resource/ordering.rb +1 -0
  151. data/lib/active_admin/resource/page_presenters.rb +1 -0
  152. data/lib/active_admin/resource/pagination.rb +1 -0
  153. data/lib/active_admin/resource/routes.rb +1 -0
  154. data/lib/active_admin/resource/scope_to.rb +1 -0
  155. data/lib/active_admin/resource/scopes.rb +1 -0
  156. data/lib/active_admin/resource/sidebars.rb +1 -0
  157. data/lib/active_admin/resource.rb +3 -2
  158. data/lib/active_admin/resource_collection.rb +1 -0
  159. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  160. data/lib/active_admin/resource_controller/data_access.rb +30 -4
  161. data/lib/active_admin/resource_controller/decorators.rb +1 -0
  162. data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
  163. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  164. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  165. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  166. data/lib/active_admin/resource_controller/streaming.rb +3 -2
  167. data/lib/active_admin/resource_controller.rb +1 -0
  168. data/lib/active_admin/resource_dsl.rb +7 -21
  169. data/lib/active_admin/router.rb +1 -0
  170. data/lib/active_admin/scope.rb +1 -0
  171. data/lib/active_admin/settings_node.rb +1 -0
  172. data/lib/active_admin/sidebar_section.rb +1 -0
  173. data/lib/active_admin/version.rb +2 -1
  174. data/lib/active_admin/view_factory.rb +1 -0
  175. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  176. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  177. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +1 -0
  178. data/lib/active_admin/view_helpers/display_helper.rb +19 -4
  179. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  180. data/lib/active_admin/view_helpers/fields_for.rb +1 -0
  181. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  182. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  183. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  184. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  185. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  186. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  187. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  188. data/lib/active_admin/view_helpers.rb +1 -0
  189. data/lib/active_admin/views/action_items.rb +1 -0
  190. data/lib/active_admin/views/components/active_admin_form.rb +2 -5
  191. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  192. data/lib/active_admin/views/components/attributes_table.rb +1 -0
  193. data/lib/active_admin/views/components/blank_slate.rb +1 -0
  194. data/lib/active_admin/views/components/columns.rb +1 -0
  195. data/lib/active_admin/views/components/dropdown_menu.rb +3 -5
  196. data/lib/active_admin/views/components/index_list.rb +1 -0
  197. data/lib/active_admin/views/components/menu.rb +1 -0
  198. data/lib/active_admin/views/components/menu_item.rb +1 -0
  199. data/lib/active_admin/views/components/paginated_collection.rb +1 -0
  200. data/lib/active_admin/views/components/panel.rb +1 -0
  201. data/lib/active_admin/views/components/scopes.rb +1 -0
  202. data/lib/active_admin/views/components/sidebar.rb +1 -0
  203. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  204. data/lib/active_admin/views/components/site_title.rb +1 -0
  205. data/lib/active_admin/views/components/status_tag.rb +1 -0
  206. data/lib/active_admin/views/components/table_for.rb +1 -0
  207. data/lib/active_admin/views/components/tabs.rb +1 -0
  208. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  209. data/lib/active_admin/views/footer.rb +1 -0
  210. data/lib/active_admin/views/header.rb +1 -0
  211. data/lib/active_admin/views/index_as_block.rb +1 -0
  212. data/lib/active_admin/views/index_as_blog.rb +1 -0
  213. data/lib/active_admin/views/index_as_grid.rb +1 -0
  214. data/lib/active_admin/views/index_as_table.rb +2 -5
  215. data/lib/active_admin/views/pages/base.rb +8 -4
  216. data/lib/active_admin/views/pages/form.rb +1 -0
  217. data/lib/active_admin/views/pages/index.rb +2 -1
  218. data/lib/active_admin/views/pages/layout.rb +1 -0
  219. data/lib/active_admin/views/pages/page.rb +1 -0
  220. data/lib/active_admin/views/pages/show.rb +2 -7
  221. data/lib/active_admin/views/tabbed_navigation.rb +1 -0
  222. data/lib/active_admin/views/title_bar.rb +1 -0
  223. data/lib/active_admin/views.rb +1 -0
  224. data/lib/active_admin.rb +6 -3
  225. data/lib/activeadmin.rb +1 -0
  226. data/lib/generators/active_admin/assets/assets_generator.rb +1 -0
  227. data/lib/generators/active_admin/devise/devise_generator.rb +1 -0
  228. data/lib/generators/active_admin/install/install_generator.rb +1 -0
  229. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +18 -1
  230. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  231. data/lib/generators/active_admin/page/page_generator.rb +1 -0
  232. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  233. data/lib/generators/active_admin/resource/resource_generator.rb +1 -0
  234. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +1 -0
  235. metadata +26 -83
  236. data/docs/.gitignore +0 -1
  237. data/docs/0-installation.md +0 -142
  238. data/docs/1-general-configuration.md +0 -224
  239. data/docs/10-custom-pages.md +0 -150
  240. data/docs/11-decorators.md +0 -70
  241. data/docs/12-arbre-components.md +0 -214
  242. data/docs/13-authorization-adapter.md +0 -285
  243. data/docs/14-gotchas.md +0 -138
  244. data/docs/2-resource-customization.md +0 -475
  245. data/docs/3-index-pages/custom-index.md +0 -35
  246. data/docs/3-index-pages/index-as-block.md +0 -19
  247. data/docs/3-index-pages/index-as-blog.md +0 -69
  248. data/docs/3-index-pages/index-as-grid.md +0 -27
  249. data/docs/3-index-pages/index-as-table.md +0 -234
  250. data/docs/3-index-pages.md +0 -328
  251. data/docs/4-csv-format.md +0 -74
  252. data/docs/5-forms.md +0 -237
  253. data/docs/6-show-pages.md +0 -93
  254. data/docs/7-sidebars.md +0 -75
  255. data/docs/8-custom-actions.md +0 -177
  256. data/docs/9-batch-actions.md +0 -237
  257. data/docs/CNAME +0 -1
  258. data/docs/Gemfile +0 -3
  259. data/docs/Gemfile.lock +0 -259
  260. data/docs/README.md +0 -24
  261. data/docs/_config.yml +0 -4
  262. data/docs/_includes/footer.html +0 -8
  263. data/docs/_includes/google-analytics.html +0 -16
  264. data/docs/_includes/head.html +0 -7
  265. data/docs/_includes/toc.html +0 -98
  266. data/docs/_includes/top-menu.html +0 -17
  267. data/docs/_layouts/default.html +0 -21
  268. data/docs/documentation.md +0 -60
  269. data/docs/images/activeadmin.png +0 -0
  270. data/docs/images/code-header.png +0 -0
  271. data/docs/images/divider.png +0 -0
  272. data/docs/images/features.png +0 -0
  273. data/docs/images/tidelift.svg +0 -14
  274. data/docs/index.html +0 -226
  275. data/docs/stylesheets/main.css +0 -1205
  276. data/lib/active_admin/deprecation.rb +0 -10
  277. data/lib/ransack_ext.rb +0 -20
  278. /data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
@@ -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ộ lộc hiện tại:"
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: "Powered by %{active_admin} %{version}"
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: "Gởi lại hướng dẫn mở khoá"
121
- submit: "Gởi lại hướng dẫn mở khoá"
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: "Gởi lại hướng dẫn xác nhận"
124
- submit: "Gởi lại hướng dẫn xác nhận"
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:
@@ -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: "新建另一个%{model}"
12
- new_model: "新建%{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: "新建一个%{model}"
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: "Powered by %{active_admin} %{version}"
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: "登录"
@@ -24,13 +24,6 @@
24
24
  buttons:
25
25
  filter: "篩選"
26
26
  clear: "清除篩選條件"
27
- predicates:
28
- contains: "包含"
29
- equals: "等於"
30
- starts_with: "開頭為"
31
- ends_with: "結尾為"
32
- greater_than: "大於"
33
- less_than: "小於"
34
27
  search_status:
35
28
  headline: "搜尋條件:"
36
29
  current_scope: "子集:"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class AbstractViewFactory < SettingsNode
3
4
 
@@ -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.publish ActiveAdmin::Namespace::RegisterEvent, namespace
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.publish BeforeLoadEvent, self # before_load hook
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.publish AfterLoadEvent, self # after_load hook
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"] }.sort
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.before_filter :authenticate_admin!
148
+ # ActiveAdmin.before_action :authenticate_admin!
148
149
  #
149
150
  AbstractController::Callbacks::ClassMethods.public_instance_methods.
150
- select { |m| m.match(/(filter|action)/) }.each do |name|
151
+ select { |m| m.match(/_action\z/) }.each do |name|
151
152
  define_method name do |*args, &block|
152
- controllers_for_filters.each do |controller|
153
- controller.public_send name, *args, &block
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: "screen"
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
  require "active_admin/settings_node"
2
3
 
3
4
  module ActiveAdmin
@@ -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(name)
17
- javascripts.add name
17
+ def register_javascript(path, options = {})
18
+ javascripts[path] = options
18
19
  end
19
20
 
20
21
  def javascripts
21
- @javascripts ||= Set.new
22
+ @javascripts ||= {}
22
23
  end
23
24
 
24
25
  def clear_javascripts!
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  # Default Authorization permissions for Active Admin
4
5
  module Authorization
5
6
  READ = :read
7
+ NEW = :new
6
8
  CREATE = :create
9
+ EDIT = :edit
7
10
  UPDATE = :update
8
11
  DESTROY = :destroy
9
12
  end
@@ -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::CREATE,
10
+ new: ActiveAdmin::Authorization::NEW,
10
11
  create: ActiveAdmin::Authorization::CREATE,
11
- edit: ActiveAdmin::Authorization::UPDATE,
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
- ActiveSupport::Dependencies.constantize adapter
85
+ adapter.constantize
85
86
  else
86
87
  adapter
87
88
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class BaseController < ::InheritedResources::Base
3
4
  module Menu
@@ -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
  module BatchActions
3
4
  module Controller
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  module BatchActions
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/component"
2
3
 
3
4
  module ActiveAdmin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/component"
2
3
 
3
4
  module ActiveAdmin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/component"
2
3
 
3
4
  module ActiveAdmin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ActiveAdmin.before_load do |app|
2
3
  require "active_admin/batch_actions/resource_extension"
3
4
  require "active_admin/batch_actions/controller"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Callbacks
3
4
  extend ActiveSupport::Concern
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  unless ActiveAdmin::Dependency.cancan? || ActiveAdmin::Dependency.cancancan?
2
3
  ActiveAdmin::Dependency.cancan!
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # This class decorates a collection of objects delegating
3
4
  # mehods to behave like an Array. It's used to decouple ActiveAdmin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Component < Arbre::Component
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ControllerAction
3
4
  attr_reader :name
@@ -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.delete :byte_order_mark
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 c.name, options }, **csv_options)
54
+ csv << CSV.generate_line(columns.map { |c| sanitize(encode(c.name, options)) }, **csv_options)
55
55
  end
56
56
 
57
- ActiveRecord::Base.uncached do
58
- (1..paginated_collection.total_pages).each do |page|
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 call_method_or_proc_on(resource, column.data), options
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
- def paginated_collection(page_no = 1)
129
- @collection.public_send(Kaminari.config.page_method_name, page_no).per(batch_size)
137
+ value
130
138
  end
131
139
 
132
- def batch_size
133
- 1000
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
 
@@ -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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  # The Active Admin DSL. This class is where all the registration blocks
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  class DynamicSetting
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/dynamic_setting"
2
3
  require "active_admin/settings_node"
3
4
 
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Engine < ::Rails::Engine
3
- initializer "active_admin.load_app_path" do |app|
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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # Exception class to raise when there is an authorized access
3
4
  # exception thrown. The exception has a few goodies that may
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/filters/active_filter"
2
3
 
3
4
  module ActiveAdmin