ab_admin 0.3.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (419) hide show
  1. checksums.yaml +7 -0
  2. data/{LICENSE.txt → MIT-LICENSE} +2 -4
  3. data/README.md +3 -3
  4. data/Rakefile +21 -3
  5. data/app/assets/images/admin/flags/b_de.png +0 -0
  6. data/app/assets/images/admin/flags/b_es.png +0 -0
  7. data/app/assets/images/admin/flags/b_fr.png +0 -0
  8. data/app/assets/images/admin/flags/flag_de.gif +0 -0
  9. data/app/assets/images/admin/flags/flag_de_nonact.gif +0 -0
  10. data/app/assets/images/admin/flags/flag_es.gif +0 -0
  11. data/app/assets/images/admin/flags/flag_es_nonact.gif +0 -0
  12. data/app/assets/images/admin/flags/flag_fr.gif +0 -0
  13. data/app/assets/images/admin/flags/flag_fr_nonact.gif +0 -0
  14. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +50 -60
  15. data/app/assets/javascripts/ab_admin/components/base_assets.js.coffee +86 -0
  16. data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +4 -4
  17. data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +5 -0
  18. data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +0 -1
  19. data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +7 -3
  20. data/app/assets/javascripts/ab_admin/components/locator.js.coffee +1 -1
  21. data/app/assets/javascripts/ab_admin/components/select2_bridge.js.coffee +152 -0
  22. data/app/assets/javascripts/ab_admin/components/sortable_tree.js.coffee +1 -1
  23. data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +5 -4
  24. data/app/assets/javascripts/ab_admin/core/columns_hider.js.coffee +4 -11
  25. data/app/assets/javascripts/ab_admin/core/confirmation.js.coffee +4 -43
  26. data/app/assets/javascripts/ab_admin/core/deprecated_utils.js.coffee +44 -0
  27. data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -25
  28. data/app/assets/javascripts/ab_admin/core/pjax.js.coffee +18 -4
  29. data/app/assets/javascripts/ab_admin/core/search_form.js.coffee +5 -5
  30. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +15 -86
  31. data/app/assets/javascripts/ab_admin/core/utils.js.coffee +38 -51
  32. data/app/assets/javascripts/ab_admin/core/view_layout.js.coffee +1 -1
  33. data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +16 -18
  34. data/app/assets/javascripts/ab_admin/main.js +7 -7
  35. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +21 -8
  36. data/app/assets/stylesheets/ab_admin/components/_admin_comments.css.scss +17 -5
  37. data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -0
  38. data/app/assets/stylesheets/ab_admin/components/_colored_tabs.css.scss +1 -4
  39. data/app/assets/stylesheets/ab_admin/components/_columns_hider.css.scss +5 -0
  40. data/app/assets/stylesheets/ab_admin/components/_form.css.scss +45 -16
  41. data/app/assets/stylesheets/ab_admin/components/_grid_view.css.scss +11 -0
  42. data/app/assets/stylesheets/ab_admin/components/_locale_tabs.css.scss +1 -1
  43. data/app/assets/stylesheets/ab_admin/components/_navigation.css.scss +11 -9
  44. data/app/assets/stylesheets/ab_admin/components/_table_view.css.scss +1 -1
  45. data/app/assets/stylesheets/ab_admin/components/_translations.css.scss +1 -0
  46. data/app/assets/stylesheets/ab_admin/components/{_sortable_tree.css.scss → _tree_view.css.scss} +8 -3
  47. data/app/assets/stylesheets/ab_admin/fileupload.css.scss +51 -43
  48. data/app/assets/stylesheets/ab_admin/main.css.scss +1 -3
  49. data/app/controllers/admin/admin_comments_controller.rb +14 -4
  50. data/app/controllers/admin/assets_controller.rb +44 -35
  51. data/app/controllers/admin/base_controller.rb +93 -38
  52. data/app/controllers/admin/locators_controller.rb +3 -2
  53. data/app/controllers/admin/manager_controller.rb +20 -9
  54. data/app/controllers/admin/structures_controller.rb +9 -1
  55. data/app/controllers/admin/users_controller.rb +1 -2
  56. data/app/views/ab_admin/devise/sessions/new.html.slim +1 -1
  57. data/app/views/admin/admin_comments/_comment.html.slim +21 -7
  58. data/app/views/admin/admin_comments/_comments.html.slim +1 -1
  59. data/app/views/admin/admin_comments/_form.html.slim +8 -3
  60. data/app/views/admin/admin_comments/_list_block.html.slim +7 -0
  61. data/app/views/admin/admin_comments/create.js.erb +3 -2
  62. data/app/views/admin/admin_comments/destroy.js.erb +1 -1
  63. data/app/views/admin/admin_comments/index.js.erb +14 -0
  64. data/app/views/admin/assets/batch_edit.html.slim +14 -0
  65. data/app/views/admin/base/_modal_form_layout.html.slim +12 -0
  66. data/app/views/admin/base/_search_layout.html.slim +4 -3
  67. data/app/views/admin/base/_table.html.slim +2 -2
  68. data/app/views/admin/base/create.js.erb +13 -8
  69. data/app/views/admin/base/history.html.slim +18 -0
  70. data/app/views/admin/base/index.html.slim +3 -3
  71. data/app/views/admin/base/new.js.erb +14 -8
  72. data/app/views/admin/base/show.html.slim +1 -2
  73. data/app/views/admin/base/show.js.erb +7 -0
  74. data/app/views/admin/fileupload/_asset_templates.html.slim +29 -0
  75. data/app/views/admin/fileupload/_container.html.slim +13 -12
  76. data/app/views/admin/fileupload/_file.html.slim +2 -2
  77. data/app/views/admin/fileupload/_image.html.slim +8 -0
  78. data/app/views/admin/fileupload/_video.html.slim +2 -2
  79. data/app/views/admin/headers/_form.html.slim +2 -0
  80. data/app/views/admin/locators/edit.html.slim +1 -1
  81. data/app/views/admin/locators/show.html.slim +1 -2
  82. data/app/views/admin/manager/_form.html.slim +17 -3
  83. data/app/views/admin/manager/_modal_form.html.slim +19 -0
  84. data/app/views/admin/manager/_table.html.slim +3 -3
  85. data/app/views/admin/manager/show.html.slim +1 -0
  86. data/app/views/admin/shared/_content_actions.html.slim +39 -0
  87. data/app/views/admin/shared/_locale_tabs.html.slim +3 -3
  88. data/app/views/admin/shared/inputs/_checkbox_tree.html.slim +9 -3
  89. data/app/views/admin/structures/_form.html.slim +4 -7
  90. data/app/views/admin/users/_form.html.slim +2 -4
  91. data/app/views/admin/users/_search_form.html.slim +0 -1
  92. data/app/views/admin/users/_table.html.slim +8 -10
  93. data/app/views/layouts/admin/_footer.html.slim +3 -4
  94. data/app/views/layouts/admin/_navigation.html.slim +2 -2
  95. data/app/views/layouts/admin/application.html.slim +7 -9
  96. data/app/views/layouts/admin/devise.html.slim +3 -4
  97. data/config/locales/de.yml +319 -0
  98. data/config/locales/en.devise.yml +44 -31
  99. data/config/locales/en.yml +166 -143
  100. data/config/locales/it.devise.yml +54 -41
  101. data/config/locales/it.yml +178 -163
  102. data/config/locales/ru.devise.yml +70 -56
  103. data/config/locales/ru.yml +280 -264
  104. data/config/routes.rb +6 -3
  105. data/db/migrate/20130101000001_create_users.rb +7 -11
  106. data/db/migrate/20130101000003_create_assets.rb +5 -5
  107. data/db/migrate/20130101000004_create_headers.rb +2 -6
  108. data/db/migrate/20130101000005_create_static_pages.rb +1 -5
  109. data/db/migrate/20130101000006_create_structures.rb +5 -9
  110. data/db/migrate/20130101000007_base_translations.rb +3 -1
  111. data/db/migrate/20130101000008_create_admin_comments.rb +5 -5
  112. data/db/migrate/20130101000009_create_tracks.rb +20 -0
  113. data/lib/ab_admin.rb +36 -4
  114. data/lib/ab_admin/abstract_resource.rb +28 -7
  115. data/lib/ab_admin/carrierwave/base_uploader.rb +85 -5
  116. data/lib/ab_admin/carrierwave/glue.rb +6 -1
  117. data/lib/ab_admin/concerns/admin_addition.rb +26 -9
  118. data/lib/ab_admin/concerns/asset_human_names.rb +23 -0
  119. data/lib/ab_admin/concerns/fileuploads.rb +102 -0
  120. data/lib/ab_admin/concerns/has_tracking.rb +32 -0
  121. data/lib/ab_admin/concerns/nested_set.rb +9 -9
  122. data/lib/ab_admin/concerns/silencer.rb +5 -5
  123. data/lib/ab_admin/concerns/utilities.rb +28 -16
  124. data/lib/ab_admin/concerns/validations.rb +1 -1
  125. data/lib/ab_admin/config/base.rb +10 -2
  126. data/lib/ab_admin/controllers/callbacks.rb +2 -2
  127. data/lib/ab_admin/controllers/can_can_manager_resource.rb +3 -2
  128. data/lib/ab_admin/controllers/fv.rb +16 -0
  129. data/lib/ab_admin/controllers/head_options.rb +6 -4
  130. data/lib/ab_admin/core_ext/hash.rb +25 -70
  131. data/lib/ab_admin/core_ext/string.rb +17 -4
  132. data/lib/ab_admin/engine.rb +2 -8
  133. data/lib/ab_admin/hooks.rb +8 -3
  134. data/lib/ab_admin/hooks/active_model_hooks.rb +1 -1
  135. data/lib/ab_admin/hooks/globalize_hooks.rb +35 -0
  136. data/lib/ab_admin/hooks/paginate_hooks.rb +3 -1
  137. data/lib/ab_admin/i18n_tools/model_translator.rb +1 -1
  138. data/lib/ab_admin/menu/abstract_builder.rb +14 -0
  139. data/lib/ab_admin/menu/base_group.rb +26 -0
  140. data/lib/ab_admin/menu/builder.rb +16 -0
  141. data/lib/ab_admin/menu/group.rb +24 -0
  142. data/lib/ab_admin/menu/item.rb +23 -0
  143. data/lib/ab_admin/models/admin_comment.rb +68 -0
  144. data/lib/ab_admin/models/asset.rb +30 -19
  145. data/lib/ab_admin/models/attachment_file.rb +2 -1
  146. data/lib/ab_admin/models/header.rb +15 -0
  147. data/lib/ab_admin/models/locator.rb +1 -3
  148. data/lib/ab_admin/models/settings.rb +10 -10
  149. data/lib/ab_admin/models/structure.rb +20 -9
  150. data/lib/ab_admin/models/track.rb +61 -0
  151. data/lib/ab_admin/models/type_model.rb +30 -17
  152. data/lib/ab_admin/models/user.rb +18 -49
  153. data/lib/ab_admin/utils.rb +16 -7
  154. data/lib/ab_admin/utils/logger.rb +11 -7
  155. data/lib/ab_admin/utils/mysql.rb +10 -0
  156. data/lib/ab_admin/version.rb +1 -1
  157. data/lib/ab_admin/views/admin_helpers.rb +20 -9
  158. data/lib/ab_admin/views/admin_navigation_helpers.rb +44 -21
  159. data/lib/ab_admin/views/content_only_wrapper.rb +14 -0
  160. data/lib/ab_admin/views/form_builder.rb +27 -89
  161. data/lib/ab_admin/views/helpers.rb +1 -28
  162. data/lib/ab_admin/views/inputs/capture_block_input.rb +16 -0
  163. data/lib/ab_admin/views/inputs/date_time_picker_input.rb +45 -0
  164. data/lib/ab_admin/views/inputs/token_input.rb +2 -1
  165. data/lib/ab_admin/views/inputs/uploader_input.rb +101 -0
  166. data/lib/ab_admin/views/manager_helpers.rb +12 -0
  167. data/lib/ab_admin/views/search_form_builder.rb +36 -13
  168. data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +1 -1
  169. data/lib/generators/ab_admin/install/install_generator.rb +3 -2
  170. data/lib/generators/ab_admin/install/templates/config/ab_admin.rb.erb +1 -1
  171. data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +1 -1
  172. data/lib/generators/ab_admin/install/templates/config/i18n-js.yml +1 -1
  173. data/lib/generators/ab_admin/install/templates/config/nginx.conf +22 -9
  174. data/lib/generators/ab_admin/install/templates/config/robots.txt +7 -0
  175. data/lib/generators/ab_admin/install/templates/config/seeds.rb +2 -1
  176. data/lib/generators/ab_admin/install/templates/models/ability.rb +2 -7
  177. data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +3 -28
  178. data/lib/generators/ab_admin/install/templates/models/asset.rb +4 -2
  179. data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +1 -1
  180. data/lib/generators/ab_admin/install/templates/models/avatar.rb +2 -2
  181. data/lib/generators/ab_admin/install/templates/models/gender_type.rb +1 -1
  182. data/lib/generators/ab_admin/install/templates/models/header.rb +2 -2
  183. data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
  184. data/lib/generators/ab_admin/install/templates/models/picture.rb +1 -1
  185. data/lib/generators/ab_admin/install/templates/models/settings.rb +1 -1
  186. data/lib/generators/ab_admin/install/templates/models/structure.rb +6 -8
  187. data/lib/generators/ab_admin/install/templates/models/track.rb +5 -0
  188. data/lib/generators/ab_admin/install/templates/models/user.rb +2 -3
  189. data/lib/generators/ab_admin/install/templates/script/unicorn.sh +0 -2
  190. data/lib/generators/ab_admin/install/templates/spec/factories/user_factory.rb +1 -2
  191. data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
  192. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
  193. data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +1 -1
  194. data/lib/generators/ab_admin/model/templates/resource.erb +1 -1
  195. data/lib/generators/ab_admin/resource/templates/_form.slim.erb +49 -45
  196. data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -1
  197. data/lib/generators/template.rb +32 -56
  198. data/lib/tasks/assets.rake +1 -0
  199. metadata +197 -698
  200. data/.gitignore +0 -41
  201. data/Gemfile +0 -77
  202. data/Guardfile +0 -35
  203. data/TODO +0 -4
  204. data/ab_admin.gemspec +0 -59
  205. data/app/views/admin/fileupload/_asset.html.slim +0 -8
  206. data/app/views/admin/fileupload/_ftmpl.html.slim +0 -6
  207. data/app/views/admin/fileupload/_tmpl.html.slim +0 -9
  208. data/app/views/admin/fileupload/_vtmpl.html.slim +0 -10
  209. data/app/views/admin/shared/_batch_actions.html.slim +0 -27
  210. data/cucumber.yml +0 -10
  211. data/features/dsl/action_items.feature +0 -79
  212. data/features/dsl/admin_comments.feature +0 -30
  213. data/features/dsl/batch_actions.feature +0 -69
  214. data/features/dsl/config.feature +0 -44
  215. data/features/dsl/custom_actions.feature +0 -62
  216. data/features/dsl/export.feature +0 -42
  217. data/features/dsl/form.feature +0 -77
  218. data/features/dsl/in_place_edit.feature +0 -26
  219. data/features/dsl/list_edit.feature +0 -46
  220. data/features/dsl/parent_resource.feature +0 -18
  221. data/features/dsl/resource_action_items.feature +0 -40
  222. data/features/dsl/search.feature +0 -41
  223. data/features/dsl/show.feature +0 -37
  224. data/features/dsl/table.feature +0 -71
  225. data/features/dsl/tree.feature +0 -37
  226. data/features/index_views/table.feature +0 -20
  227. data/features/locators.feature +0 -40
  228. data/features/menu.feature +0 -35
  229. data/features/settings.feature +0 -36
  230. data/features/step_definitions/configuration_steps.rb +0 -94
  231. data/features/step_definitions/dsl/action_items_steps.rb +0 -13
  232. data/features/step_definitions/dsl/admin_comments_steps.rb +0 -12
  233. data/features/step_definitions/dsl/batch_actions_steps.rb +0 -27
  234. data/features/step_definitions/dsl/in_place_edit_steps.rb +0 -7
  235. data/features/step_definitions/dsl/parent_resource_steps.rb +0 -8
  236. data/features/step_definitions/dsl/resource_action_items_steps.rb +0 -14
  237. data/features/step_definitions/dsl/show_steps.rb +0 -8
  238. data/features/step_definitions/dsl/table_steps.rb +0 -38
  239. data/features/step_definitions/dsl/tree_steps.rb +0 -28
  240. data/features/step_definitions/menu_steps.rb +0 -20
  241. data/features/step_definitions/settings_steps.rb +0 -7
  242. data/features/step_definitions/structure_steps.rb +0 -7
  243. data/features/step_definitions/table_steps.rb +0 -23
  244. data/features/step_definitions/user_steps.rb +0 -72
  245. data/features/step_definitions/web_steps/browsing_steps.rb +0 -108
  246. data/features/step_definitions/web_steps/debug_steps.rb +0 -6
  247. data/features/step_definitions/web_steps/form_steps.rb +0 -190
  248. data/features/step_definitions/web_steps/i18n_steps.rb +0 -8
  249. data/features/step_definitions/web_steps/step_scoper.rb +0 -9
  250. data/features/step_definitions/web_steps/transforms_steps.rb +0 -3
  251. data/features/structure/tree.feature +0 -21
  252. data/features/support/capybara_helpers.rb +0 -15
  253. data/features/support/carrierwave.rb +0 -21
  254. data/features/support/env.rb +0 -40
  255. data/features/support/paths.rb +0 -55
  256. data/features/support/selector_helpers.rb +0 -9
  257. data/features/support/selectors.rb +0 -43
  258. data/features/support/tolerance_for_selenium_sync_issues.rb +0 -27
  259. data/features/user/sign_in.feature +0 -27
  260. data/features/user/sign_out.feature +0 -11
  261. data/features/user/user_edit.feature +0 -19
  262. data/features/user/user_show.feature +0 -9
  263. data/lib/ab_admin/hooks/quiet_scope_page.rb +0 -16
  264. data/lib/ab_admin/hooks/simple_form_hooks.rb +0 -31
  265. data/lib/ab_admin/menu_builder.rb +0 -89
  266. data/lib/ab_admin/views/inputs/date_time_input.rb +0 -65
  267. data/lib/generators/ab_admin/install/templates/models/user_state.rb +0 -6
  268. data/lib/generators/ab_admin/resource/templates/_form.haml.erb +0 -71
  269. data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +0 -35
  270. data/lib/generators/ab_admin/resource/templates/_table.haml.erb +0 -33
  271. data/spec/ab_admin_spec.rb +0 -23
  272. data/spec/dummy/Rakefile +0 -7
  273. data/spec/dummy/app/assets/images/rails.png +0 -0
  274. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  275. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  276. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  277. data/spec/dummy/app/controllers/products_controller.rb +0 -5
  278. data/spec/dummy/app/controllers/welcome_controller.rb +0 -5
  279. data/spec/dummy/app/mailers/.gitkeep +0 -0
  280. data/spec/dummy/app/models/ab_admin/ab_admin_catalogue.rb +0 -5
  281. data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +0 -35
  282. data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +0 -74
  283. data/spec/dummy/app/models/admin_menu.rb +0 -18
  284. data/spec/dummy/app/models/catalogue.rb +0 -10
  285. data/spec/dummy/app/models/ckeditor/asset.rb +0 -7
  286. data/spec/dummy/app/models/ckeditor/attachment_file.rb +0 -7
  287. data/spec/dummy/app/models/ckeditor/picture.rb +0 -7
  288. data/spec/dummy/app/models/collection.rb +0 -20
  289. data/spec/dummy/app/models/product.rb +0 -32
  290. data/spec/dummy/app/uploaders/ckeditor_attachment_file_uploader.rb +0 -42
  291. data/spec/dummy/app/uploaders/ckeditor_picture_uploader.rb +0 -53
  292. data/spec/dummy/app/views/admin/collections/_form.html.slim +0 -24
  293. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  294. data/spec/dummy/app/views/products/show.html.erb +0 -2
  295. data/spec/dummy/app/views/welcome/index.html.erb +0 -2
  296. data/spec/dummy/config.ru +0 -4
  297. data/spec/dummy/config/application.rb +0 -82
  298. data/spec/dummy/config/boot.rb +0 -10
  299. data/spec/dummy/config/database.yml +0 -26
  300. data/spec/dummy/config/environment.rb +0 -5
  301. data/spec/dummy/config/environments/development.rb +0 -37
  302. data/spec/dummy/config/environments/production.rb +0 -67
  303. data/spec/dummy/config/environments/test.rb +0 -37
  304. data/spec/dummy/config/i18n-js.yml +0 -21
  305. data/spec/dummy/config/initializers/ab_admin.rb +0 -15
  306. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  307. data/spec/dummy/config/initializers/ckeditor.rb +0 -18
  308. data/spec/dummy/config/initializers/devise.rb +0 -232
  309. data/spec/dummy/config/initializers/inflections.rb +0 -15
  310. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  311. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  312. data/spec/dummy/config/initializers/session_store.rb +0 -8
  313. data/spec/dummy/config/initializers/simple_form.rb +0 -142
  314. data/spec/dummy/config/initializers/simple_form_bootstrap.rb +0 -45
  315. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  316. data/spec/dummy/config/locales/devise.en.yml +0 -60
  317. data/spec/dummy/config/locales/en.yml +0 -5
  318. data/spec/dummy/config/locales/simple_form.en.yml +0 -26
  319. data/spec/dummy/config/routes.rb +0 -14
  320. data/spec/dummy/config/settings/development.local.yml +0 -9
  321. data/spec/dummy/config/settings/development.yml +0 -7
  322. data/spec/dummy/db/migrate/20130129151853_create_ckeditor_assets.rb +0 -26
  323. data/spec/dummy/db/migrate/20130130161853_create_collections.rb +0 -10
  324. data/spec/dummy/db/migrate/20130130162046_create_products.rb +0 -13
  325. data/spec/dummy/db/migrate/20130130175446_create_globalize_collection_product.rb +0 -11
  326. data/spec/dummy/db/migrate/20130207224516_create_catalogues.rb +0 -16
  327. data/spec/dummy/db/migrate/20130209223506_add_lat_lon_zoom_to_products.rb +0 -7
  328. data/spec/dummy/db/seeds.rb +0 -46
  329. data/spec/dummy/lib/assets/.gitkeep +0 -0
  330. data/spec/dummy/lib/capybara_irb.rb +0 -42
  331. data/spec/dummy/lib/tasks/.gitkeep +0 -0
  332. data/spec/dummy/lib/tasks/cucumber.rake +0 -65
  333. data/spec/dummy/lib/templates/slim/scaffold/_form.html.slim +0 -10
  334. data/spec/dummy/log/.gitkeep +0 -0
  335. data/spec/dummy/public/404.html +0 -26
  336. data/spec/dummy/public/422.html +0 -26
  337. data/spec/dummy/public/500.html +0 -25
  338. data/spec/dummy/public/favicon.ico +0 -0
  339. data/spec/dummy/script/cucumber +0 -10
  340. data/spec/dummy/script/rails +0 -6
  341. data/spec/factories/assets.rb +0 -52
  342. data/spec/factories/catalogues.rb +0 -7
  343. data/spec/factories/collections.rb +0 -8
  344. data/spec/factories/files/rails.png +0 -0
  345. data/spec/factories/products.rb +0 -17
  346. data/spec/factories/sequences.rb +0 -7
  347. data/spec/factories/structures.rb +0 -17
  348. data/spec/factories/users.rb +0 -30
  349. data/spec/generators/ckeditor_assets_generator_spec.rb +0 -19
  350. data/spec/generators/install_generator_spec.rb +0 -48
  351. data/spec/generators/model_generator_spec.rb +0 -31
  352. data/spec/generators/resource_generator_spec.rb +0 -36
  353. data/spec/models/ab_admin/abstract_resource_spec.rb +0 -5
  354. data/spec/models/avatar_spec.rb +0 -162
  355. data/spec/models/picture_uploader_spec.rb +0 -49
  356. data/spec/models/structure_spec.rb +0 -69
  357. data/spec/models/user_spec.rb +0 -159
  358. data/spec/shared_behaviors/concerns.rb +0 -20
  359. data/spec/spec_helper.rb +0 -96
  360. data/spec/support/controller_macros.rb +0 -52
  361. data/spec/support/custom_capybara_matchers.rb +0 -58
  362. data/spec/support/mailer_macros.rb +0 -17
  363. data/spec/support/shared_connection.rb +0 -11
  364. data/vendor/assets/images/ab_admin/clear.png +0 -0
  365. data/vendor/assets/images/ab_admin/loading.gif +0 -0
  366. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/core.js +0 -899
  367. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/index.js +0 -2
  368. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.bg.js +0 -14
  369. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.br.js +0 -13
  370. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.cs.js +0 -14
  371. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.da.js +0 -14
  372. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.de.js +0 -14
  373. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.es.js +0 -14
  374. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.fi.js +0 -14
  375. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.fr.js +0 -14
  376. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.id.js +0 -13
  377. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.is.js +0 -14
  378. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.it.js +0 -14
  379. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ja.js +0 -13
  380. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.kr.js +0 -13
  381. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.lt.js +0 -15
  382. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.lv.js +0 -16
  383. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ms.js +0 -14
  384. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.nb.js +0 -14
  385. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.nl.js +0 -14
  386. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pl.js +0 -14
  387. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.js +0 -14
  388. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pt.js +0 -14
  389. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ro.js +0 -15
  390. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ru.js +0 -14
  391. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sk.js +0 -14
  392. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sl.js +0 -14
  393. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sv.js +0 -14
  394. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.th.js +0 -14
  395. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.tr.js +0 -15
  396. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.js +0 -14
  397. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.js +0 -13
  398. data/vendor/assets/javascripts/ab_admin/bootstrap-editable-inline.js +0 -2895
  399. data/vendor/assets/javascripts/ab_admin/bootstrap-editable.js +0 -4523
  400. data/vendor/assets/javascripts/ab_admin/bootstrap-tab-multi.js +0 -135
  401. data/vendor/assets/javascripts/ab_admin/bootstrap-timepicker.js +0 -377
  402. data/vendor/assets/javascripts/ab_admin/fileupload/admin-fileuploader.js.coffee +0 -111
  403. data/vendor/assets/javascripts/ab_admin/fileupload/fileuploader.js +0 -1301
  404. data/vendor/assets/javascripts/ab_admin/jquery.Jcrop.js +0 -1083
  405. data/vendor/assets/javascripts/ab_admin/jquery_nested_form.js.coffee +0 -66
  406. data/vendor/assets/javascripts/bootstrap-wysihtml5/locales/ru.js +0 -48
  407. data/vendor/assets/javascripts/handlebars.min.js +0 -1
  408. data/vendor/assets/javascripts/jquery.cookie.js +0 -42
  409. data/vendor/assets/javascripts/jquery.hotkeys.js +0 -106
  410. data/vendor/assets/javascripts/jquery.pjax.js +0 -688
  411. data/vendor/assets/javascripts/jquery.tmpl.min.js +0 -10
  412. data/vendor/assets/javascripts/jquery.ui.nestedSortable.js +0 -356
  413. data/vendor/assets/javascripts/jquery/jquery-ui.min.js +0 -15
  414. data/vendor/assets/javascripts/jquery/jquery.min.js +0 -4
  415. data/vendor/assets/javascripts/underscore.min.js +0 -5
  416. data/vendor/assets/stylesheets/ab_admin/bootstrap-datepicker.css.scss +0 -274
  417. data/vendor/assets/stylesheets/ab_admin/bootstrap-editable.scss +0 -461
  418. data/vendor/assets/stylesheets/ab_admin/bootstrap-timepicker.css.scss +0 -88
  419. data/vendor/assets/stylesheets/ab_admin/jquery.Jcrop.min.css.scss +0 -28
@@ -6,9 +6,9 @@ module AbAdmin
6
6
  included do
7
7
  has_one :avatar, as: :assetable, dependent: :destroy, autosave: true
8
8
 
9
- scope :managers, where(user_role_id: [::UserRoleType.admin.id, ::UserRoleType.moderator.id])
10
- scope :active, where(trust_state: ::UserState.active.id)
11
- scope :admin, includes(:avatar)
9
+ scope :managers, -> { where(user_role_id: [::UserRoleType.admin.id, ::UserRoleType.moderator.id]) }
10
+ scope :active, -> { where(locked_at: nil) }
11
+ scope :admin, -> { includes(:avatar) }
12
12
 
13
13
  after_initialize :init
14
14
  before_validation :generate_login
@@ -17,18 +17,6 @@ module AbAdmin
17
17
  validate :check_role
18
18
 
19
19
  enumerated_attribute :user_role_type, id_attribute: :user_role_id, class: ::UserRoleType
20
- enumerated_attribute :trust_state_type, id_attribute: :trust_state, class: ::UserState
21
- end
22
-
23
- def set_default_role
24
- self.user_role_id ||= ::UserRoleType.default.id
25
- end
26
-
27
- def generate_password!
28
- raw_password = Rails.env.test? ? '654321' : ::Devise.friendly_token[0..7]
29
- self.password = self.password_confirmation = raw_password
30
- self.save(validate: false)
31
- raw_password
32
20
  end
33
21
 
34
22
  def name
@@ -39,37 +27,30 @@ module AbAdmin
39
27
  [first_name.presence, last_name.presence].compact.join(' ')
40
28
  end
41
29
 
42
- def activate
43
- self.trust_state = ::UserState.active.id
44
- self.locked_at = nil
45
- end
46
-
47
- def activate!
48
- confirm!
49
- activate
50
- save
51
- end
52
-
53
30
  def suspend!
54
- self.update_attribute(:trust_state, ::UserState.suspended.id)
55
- end
56
-
57
- def delete!
58
- self.update_attribute(:trust_state, ::UserState.deleted.id)
31
+ update_attribute(:locked_at, Time.now.utc)
59
32
  end
60
33
 
61
- def unsuspend!
62
- self.update_attribute(:trust_state, ::UserState.active.id)
34
+ def activate!
35
+ confirm! unless confirmed?
36
+ unlock_access! if access_locked?
63
37
  end
64
38
 
65
- def deleted?
66
- trust_state == ::UserState.deleted.id
39
+ def generate_password!
40
+ raw_password = AbAdmin.test_env? ? '654321' : AbAdmin.friendly_token
41
+ self.password = self.password_confirmation = raw_password
42
+ self.save(validate: false)
43
+ raw_password
67
44
  end
68
45
 
69
46
  def moderator?
70
47
  has_role?(:admin) || has_role?(:moderator)
71
48
  end
72
49
 
50
+ def admin_access?
51
+ moderator?
52
+ end
53
+
73
54
  def default?
74
55
  has_role?(:default)
75
56
  end
@@ -82,20 +63,8 @@ module AbAdmin
82
63
  user_role_type.code == role_name
83
64
  end
84
65
 
85
- def pending?
86
- trust_state == ::UserState.pending.id
87
- end
88
-
89
- def trusted?
90
- self.trust_state == ::UserState.active.id
91
- end
92
-
93
- def active_for_authentication?
94
- super && trusted?
95
- end
96
-
97
- def inactive_message
98
- trusted? ? super : :unconfirmed
66
+ def set_default_role
67
+ self.user_role_id ||= ::UserRoleType.default.id
99
68
  end
100
69
 
101
70
  protected
@@ -5,8 +5,8 @@ module AbAdmin
5
5
  autoload :Logger, 'ab_admin/utils/logger'
6
6
  autoload :Mysql, 'ab_admin/utils/mysql'
7
7
 
8
- def load_files!(path = 'lib/utils')
9
- Dir[Rails.root.join("#{path}/**/*.rb")].each do |path|
8
+ def load_files!(base_path = 'lib/utils')
9
+ Dir[Rails.root.join("#{base_path}/**/*.rb")].each do |path|
10
10
  require_dependency path
11
11
  end
12
12
  end
@@ -45,7 +45,7 @@ module AbAdmin
45
45
  end
46
46
 
47
47
  def l_path(locale=nil)
48
- return '' unless locale
48
+ locale ||= I18n.locale
49
49
  locale == I18n.default_locale ? '' : "/#{locale}"
50
50
  end
51
51
 
@@ -55,8 +55,8 @@ module AbAdmin
55
55
  Rack::Utils.escape_html(raw_html.no_html.squish)
56
56
  end
57
57
 
58
- #AbAdmin.normalize_html('<!--das asd as as as--><script>asd</script><div>dasd</div><p>asdasd</p>')
59
- #=> "<p>dasd</p><p>asdasd</p>"
58
+ # html like: '<!-- html comment --><script>script content</script><div>div content</div><p>p content</p>'
59
+ # normalized to: "<p>div content</p><p>p content</p>"
60
60
  def normalize_html(raw_html)
61
61
  @@sanitizer ||= Sanitizer.new
62
62
  @@sanitizer.normalize_html(raw_html)
@@ -67,7 +67,8 @@ module AbAdmin
67
67
  end
68
68
 
69
69
  def full_url(path)
70
- host = Rails.application.config.action_mailer.default_url_options[:host] || 'www.example.com'
70
+ return path if path =~ %r{^(http|//)}
71
+ host = AbAdmin.base_url || Rails.application.config.action_mailer.default_url_options[:host] || 'www.example.com'
71
72
  "http://#{host}#{path}"
72
73
  end
73
74
 
@@ -101,12 +102,13 @@ module AbAdmin
101
102
  end
102
103
 
103
104
  def display_name(resource)
105
+ return unless resource
104
106
  resource.send(display_name_method_for(resource))
105
107
  end
106
108
 
107
109
  def safe_display_name(resource)
108
110
  return unless display_name_method_for(resource)
109
- resource.send(display_name_method_for(resource))
111
+ display_name(resource)
110
112
  end
111
113
 
112
114
  def pretty_data(object)
@@ -126,5 +128,12 @@ module AbAdmin
126
128
  end
127
129
  end
128
130
 
131
+ def test_env?
132
+ Rails.env.test? || Rails.env.cucumber?
133
+ end
134
+
135
+ def friendly_token(n=10)
136
+ SecureRandom.base64(16).tr('+/=', 'xyz').first(n)
137
+ end
129
138
  end
130
139
  end
@@ -2,17 +2,21 @@ module AbAdmin
2
2
  module Utils
3
3
  module Logger
4
4
 
5
- class ShortFormatter < ::Logger::Formatter
6
- def call(severity, time, progname, msg)
7
- "[#{time.strftime('%Y-%m-%dT%H:%M:%S')}] #{msg}\n"
5
+ class ExtendedLogger < ::Logger
6
+ def exception(e, options={})
7
+ message = "#{e.message} #{"DATA:#{options[:data].inspect}" if options && options[:data]}"
8
+ backtrace = e.backtrace.map { |l| "#{' ' * 2}#{l}" }.join("\n")
9
+ error("#{message}\n#{backtrace}\n\n")
10
+ end
11
+
12
+ def reopen
13
+ @logdev = LogDevice.new(@logdev.filename)
8
14
  end
9
15
  end
10
16
 
11
17
  def self.for_file(filename)
12
- logfile = File.open(Rails.root.join('log', filename), 'a+')
13
- logfile.sync = true
14
- logger = ::Logger.new(logfile)
15
- logger.formatter = ShortFormatter.new
18
+ logger = ExtendedLogger.new(Rails.root.join('log', filename))
19
+ logger.formatter = ::Logger::Formatter.new
16
20
  logger
17
21
  end
18
22
 
@@ -12,6 +12,16 @@ module AbAdmin
12
12
  transaction { connection.execute("TRUNCATE TABLE #{quoted_table_name};") }
13
13
  end
14
14
 
15
+ # remove duplicate records by columns
16
+ def remove_duplicates(*cols)
17
+ conds = cols.map { |col| "#{table_name}.#{col} IS NOT NULL AND #{table_name}.#{col} = t.#{col}" }.join(' AND ')
18
+ query = <<-SQL
19
+ DELETE FROM #{table_name} USING #{table_name}, #{table_name} AS t WHERE #{table_name}.id < t.id AND #{conds}
20
+ SQL
21
+ connection.execute(query)
22
+ end
23
+
24
+
15
25
  # Disables key updates for model table
16
26
  def disable_keys
17
27
  connection.execute("ALTER TABLE #{quoted_table_name} DISABLE KEYS")
@@ -1,3 +1,3 @@
1
1
  module AbAdmin
2
- VERSION = '0.3.6'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -38,13 +38,13 @@ module AbAdmin
38
38
  data = {
39
39
  type: options[:type],
40
40
  source: options[:source].try(:to_json),
41
- model: resource_class.model_name.singular,
42
- url: resource_path(item),
41
+ model: item.class.model_name.singular,
42
+ url: options[:url] || "/admin/#{item.class.model_name.plural}/#{item.id}",
43
43
  name: attr,
44
44
  value: options[:value] || item[attr],
45
45
  title: options[:title] || item[attr]
46
46
  }
47
- link_to admin_pretty_data(data[:title].to_s).html_safe, '#', class: 'editable', data: data
47
+ link_to admin_pretty_data(data[:title].to_s).html_safe, '#', class: "editable #{options[:class]}", data: data.update(options[:data] || {})
48
48
  end
49
49
 
50
50
  def options_for_ckeditor(options = {})
@@ -60,14 +60,24 @@ module AbAdmin
60
60
  items.map { |item| admin_tree_item(item) }.join.html_safe
61
61
  end
62
62
 
63
- def layout_css
63
+ def admin_layout_css
64
64
  css = []
65
65
  css << 'content_with_sidebar' if settings[:sidebar] || content_for?(:sidebar)
66
- css << 'well' if settings[:well]
67
- css << "#{settings[:index_view]}_view"
66
+ css << 'well' if settings[:well] && current_index_view != 'tree'
67
+ css << "#{current_index_view}_view"
68
68
  css
69
69
  end
70
70
 
71
+ def admin_title
72
+ base = @breadcrumbs ? @breadcrumbs.map_val(:name).reverse : []
73
+ base << @page_title || 'Ab Admin'
74
+ base.join(' - ')
75
+ end
76
+
77
+ def include_fv
78
+ "<script type='text/javascript'>window.fv = #{fv.to_h.to_json}</script>".html_safe
79
+ end
80
+
71
81
  def admin_comments
72
82
  render 'admin/admin_comments/comments'
73
83
  end
@@ -107,7 +117,8 @@ module AbAdmin
107
117
  image = item.send(options[:assoc])
108
118
  return nil unless image
109
119
  version = options[:version] || image.class.thumb_size
110
- popover_data = {content: "<img class='image_link_popover popover_#{options[:assoc]}' src='#{image.url}'></img>", title: AbAdmin.display_name(item)}
120
+ popover_content = "<img class='image_link_popover popover_#{options[:assoc]}' src='#{image.url(options[:full_version])}'></img>"
121
+ popover_data = {content: popover_content, title: AbAdmin.display_name(item)}
111
122
 
112
123
  html_options = options.delete(:html_options) || {}
113
124
  html_options.reverse_merge!(rel: 'popover', remote: options[:remote], data: popover_data)
@@ -120,10 +131,10 @@ module AbAdmin
120
131
 
121
132
  # input_set 'title', legend_class: 'do_sort', label_class: 'label-info' do
122
133
  def input_set(title, options={}, &block)
123
- options.reverse_merge!(class: "inputs well well-small #{options.delete(:legend_class) || 'do_sort'}", id: options.delete(:legend_id))
134
+ options.reverse_merge!(class: "inputs well well-small clearfix #{options.delete(:legend_class) || 'do_sort'}", id: options.delete(:legend_id))
124
135
  html = content_tag(:label, title, class: "input_set label #{options.delete(:label_class)}")
125
136
  html.concat(capture(&block)) if block_given?
126
- content_tag(:fieldset, html, options)
137
+ content_tag(:div, html, options)
127
138
  end
128
139
 
129
140
  def ha(attr)
@@ -13,6 +13,15 @@ module AbAdmin
13
13
  form_for([:admin, object].flatten, *(args << options), &block)
14
14
  end
15
15
 
16
+ def list_sort_link(attribute, options={})
17
+ adapter = options[:adapter] || @search
18
+ if adapter && adapter.klass == resource_class
19
+ sort_link(adapter, attribute, options)
20
+ else
21
+ attribute.is_a?(Symbol) ? ha(attribute) : attribute
22
+ end
23
+ end
24
+
16
25
  def sort_link(search, attribute, *args)
17
26
  name = attribute.is_a?(Symbol) ? ha(attribute) : attribute
18
27
  return name unless search
@@ -20,24 +29,25 @@ module AbAdmin
20
29
  options = args.first.is_a?(Hash) ? args.shift.dup : {}
21
30
  search_params = params[:q] || {}.with_indifferent_access
22
31
  attr_name = (options.delete(:column) || attribute).to_s
32
+ default_order = options.delete :default_order
23
33
 
24
34
  if existing_sort = search.sorts.detect { |s| s.name == attr_name }
25
35
  prev_attr, prev_dir = existing_sort.name, existing_sort.dir
36
+ current_dir = prev_attr == attr_name ? prev_dir : nil
37
+ else
38
+ current_dir = nil
26
39
  end
27
40
 
28
- default_order = options.delete :default_order
29
- current_dir = prev_attr == attr_name ? prev_dir : nil
30
-
31
41
  if current_dir
32
42
  new_dir = current_dir == 'desc' ? 'asc' : 'desc'
33
43
  else
34
44
  new_dir = default_order || 'asc'
35
45
  end
36
46
 
37
- html_options = args.first.is_a?(Hash) ? args.shift.dup : {}
47
+ html_options = options.delete(:html_options) || {}
38
48
  html_options[:class] = ['sort_link', current_dir, html_options[:class]].compact.join(' ')
39
- options.merge!(q: search_params.merge(s: "#{attr_name} #{new_dir}"))
40
49
 
50
+ options.merge!(q: search_params.merge(s: "#{attr_name} #{new_dir}"))
41
51
  link_to [name, order_indicator_for(current_dir)].join(' ').html_safe, url_for(options), html_options
42
52
  end
43
53
 
@@ -47,7 +57,7 @@ module AbAdmin
47
57
  elsif order == 'desc'
48
58
  '&#9660;'
49
59
  else
50
- '<span class="order_indicator">&#9650;&#9660;</div></span>'
60
+ '<span class="order_indicator">&#9650;&#9660;</span>'
51
61
  end
52
62
  end
53
63
 
@@ -64,9 +74,13 @@ module AbAdmin
64
74
  item_link_to_can? :show, item, icon('info-sign', true), resource_path(item),
65
75
  class: 'btn btn-info', title: t('admin.actions.show.link')
66
76
  when :preview
67
- if path = preview_resource_path(item)
68
- link_to icon('eye-open', true), path, class: 'btn btn-small btn-inverse', title: t('admin.actions.preview.link'), target: '_blank'
77
+ preview_path = preview_resource_path(item)
78
+ if preview_path
79
+ link_to icon('eye-open', true), preview_path, class: 'btn btn-inverse', title: t('admin.actions.preview.link'), target: '_blank'
69
80
  end
81
+ when :history
82
+ item_link_to_can? :history, item, icon('book', true), history_resource_path(item),
83
+ class: 'btn btn-info', title: t('admin.actions.history.link')
70
84
  when AbAdmin::Config::ActionItem
71
85
  instance_exec(item, &action.data) if action.for_context?(self)
72
86
  else
@@ -90,6 +104,8 @@ module AbAdmin
90
104
  if path = preview_resource_path(resource)
91
105
  link_to t('admin.actions.preview.link'), path, class: 'btn btn-inverse', title: t('admin.actions.preview.link'), target: '_blank'
92
106
  end
107
+ when :history
108
+ link_to_can? :history, t('admin.actions.history.link'), history_resource_path, class: 'btn btn-info'
93
109
  when AbAdmin::Config::ActionItem
94
110
  instance_exec(&action.data) if action.for_context?(self)
95
111
  else
@@ -103,7 +119,7 @@ module AbAdmin
103
119
  end
104
120
 
105
121
  def item_link_to_can?(act, item, *args, &block)
106
- if can?(act, get_subject)
122
+ if can?(act, item)
107
123
  if block_given?
108
124
  link_to(*args, &block)
109
125
  else
@@ -115,7 +131,6 @@ module AbAdmin
115
131
  def model_admin_menu_link(model)
116
132
  content_tag :li, class: ('active' if controller_name.split('/').last == model.model_name.plural) do
117
133
  link_to model.model_name.human(count: 9), "/admin/#{model.model_name.plural}"
118
- #link_to model.model_name.human(count: 9), {action: :index, controller: "admin/#{model.model_name.plural}"}
119
134
  end
120
135
  end
121
136
 
@@ -143,9 +158,17 @@ module AbAdmin
143
158
  end
144
159
 
145
160
  def item_index_actions(item)
146
- resource_action_items.map do |act|
161
+ actions = resource_action_items.map do |act|
147
162
  short_action_link(act, item)
148
- end.join(' ').html_safe
163
+ end
164
+ actions << admin_comments_button(item) if settings[:comments] && settings[:comments][:list]
165
+ actions.join(' ').html_safe
166
+ end
167
+
168
+ def admin_comments_button(item)
169
+ title = [icon('comment', true), item.admin_comments_count_non_zero].compact.join(' ').html_safe
170
+ link_to title, admin_admin_comments_path(resource_type: item.class.name, resource_id: item.id), remote: true,
171
+ class: 'btn btn-info list_admin_comments_link'
149
172
  end
150
173
 
151
174
  def batch_action_toggle
@@ -159,7 +182,7 @@ module AbAdmin
159
182
  def batch_action_item(item)
160
183
  if settings[:batch]
161
184
  content_tag :td do
162
- check_box_tag 'ids[]', item.id, false, id: "batch_action_item_#{item.id}", class: 'batch_check'
185
+ check_box_tag 'by_ids[]', item.id, false, id: "batch_action_item_#{item.id}", class: 'batch_check'
163
186
  end
164
187
  end
165
188
  end
@@ -175,16 +198,16 @@ module AbAdmin
175
198
  end
176
199
  end
177
200
 
178
- def auto_edit_link(rec, opts = {})
179
- return opts[:missing] unless rec
180
- return if cannot?(:edit, rec)
181
- admin_edit_link(rec, opts)
201
+ def auto_edit_link(record, options = {})
202
+ return options[:missing] unless record
203
+ return options[:title] || AbAdmin.display_name(record) if cannot?(:edit, record)
204
+ admin_edit_link(record, options)
182
205
  end
183
206
 
184
- def auto_show_link(rec, opts = {})
185
- return opts[:missing] unless rec
186
- return if cannot?(:read, rec)
187
- admin_show_link(rec, opts)
207
+ def auto_show_link(record, options = {})
208
+ return options[:missing] unless record
209
+ return options[:title] || AbAdmin.display_name(record) if cannot?(:read, record)
210
+ admin_show_link(record, options)
188
211
  end
189
212
 
190
213
  def admin_edit_link(record, options = {})
@@ -0,0 +1,14 @@
1
+ module AbAdmin
2
+ module Views
3
+ class ContentOnlyWrapper < ::SimpleForm::Wrappers::Many
4
+ include Singleton
5
+
6
+ def initialize
7
+ end
8
+
9
+ def render(input)
10
+ input.input
11
+ end
12
+ end
13
+ end
14
+ end