ab_admin 0.3.6 → 0.4.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 (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