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
@@ -1,8 +1,9 @@
1
1
  class AbAdmin::Controllers::CanCanManagerResource < CanCan::InheritedResource
2
- delegate :resource_class, to: :@controller
3
-
4
2
  def instance_name
5
3
  @controller.send(:resource_instance_name)
6
4
  end
7
5
 
6
+ def resource_class
7
+ @controller.send(:resource_class)
8
+ end
8
9
  end
@@ -0,0 +1,16 @@
1
+ module AbAdmin
2
+ module Controllers
3
+ module Fv
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ attr_writer :fv
8
+ helper_method :fv
9
+ end
10
+
11
+ def fv
12
+ @fv ||= OpenStruct.new
13
+ end
14
+ end
15
+ end
16
+ end
@@ -6,7 +6,7 @@ module AbAdmin
6
6
  def head_options(record, options = {})
7
7
  return if record.nil?
8
8
 
9
- options = { splitter: AbAdmin.title_splitter, append_title: true }.merge(options)
9
+ options = { splitter: AbAdmin.title_splitter, append_title: true, desc_prefix: true }.merge(options)
10
10
 
11
11
  header = options[:header] || (record.respond_to?(:header) ? record.header : nil)
12
12
 
@@ -22,12 +22,14 @@ module AbAdmin
22
22
  page_title = []
23
23
  page_title << options[:title] if options.key?(:title)
24
24
  page_title << view_title
25
- page_title << I18n.t('page.title') if options[:append_title]
25
+ page_title << I18n.t('seo.title') if options[:append_title]
26
26
 
27
27
  page_title.flatten.compact.uniq.join(options[:splitter])
28
28
  end
29
- @page_title = [I18n.t('page.page_title', page: options[:page]), @page_title].join(options[:splitter]) if options[:page]
30
- @page_description = [I18n.t('page.prefix'), @page_description].compact.join(' - ')
29
+ @page_title = "#{I18n.t('seo.page', page: options[:page])} #{@page_title}" if options[:page]
30
+ description_parts = [@page_description, options[:desc_suffix]]
31
+ description_parts.unshift(I18n.t('seo.prefix')) if options[:desc_prefix]
32
+ @page_description = description_parts.compact.join(' - ')
31
33
  end
32
34
 
33
35
  end
@@ -1,4 +1,5 @@
1
1
  class Hash
2
+
2
3
  def reverse_deep_merge!(other_hash)
3
4
  other_hash.each_pair do |k, v|
4
5
  tv = self[k]
@@ -7,20 +8,6 @@ class Hash
7
8
  self
8
9
  end
9
10
 
10
- def self.convert_hash_to_ordered_hash(object)
11
- if object.is_a?(Hash)
12
- array = object.to_a
13
- array.sort! { |a, b| a[0].to_s <=> b[0].to_s }
14
- array.each_with_object(ActiveSupport::OrderedHash.new) { |v, h| h[v[0]] = convert_hash_to_ordered_hash(v[1]) }
15
- # elsif object.is_a?(Array)
16
- # array = Array.new
17
- # object.each_with_index { |v, i| array[i] = convert_hash_to_ordered_hash(v) }
18
- # return array
19
- else
20
- object
21
- end
22
- end
23
-
24
11
  def deep_clear_values
25
12
  self.each_key do |key|
26
13
  if self[key].is_a?(Hash)
@@ -40,17 +27,18 @@ class Hash
40
27
  result
41
28
  end
42
29
 
43
- def deep_diff(other_hash)
44
- other_hash.each_pair do |k, v|
45
- if self[k].is_a?(Hash) && v.is_a?(Hash)
46
- self[k] = self[k].deep_diff(v)
47
- self.delete(k) if self[k].empty?
48
- self[k]
49
- else
50
- self.delete(k)
30
+ def deep_diff(b)
31
+ a = self
32
+ (a.keys | b.keys).inject({}) do |diff, k|
33
+ if a[k] != b[k]
34
+ if a[k].respond_to?(:deep_diff) && b[k].respond_to?(:deep_diff)
35
+ diff[k] = a[k].deep_diff(b[k])
36
+ else
37
+ diff[k] = [a[k], b[k]]
38
+ end
51
39
  end
40
+ diff
52
41
  end
53
- self
54
42
  end
55
43
 
56
44
  def deep_add(other_hash)
@@ -105,55 +93,22 @@ class Hash
105
93
  end
106
94
 
107
95
  def no_blank
108
- reject { |k, v| v.blank? }
96
+ reject { |_, v| v.blank? }
109
97
  end
110
98
 
111
- #def deep_set_key_values
112
- # self.each_key do |key|
113
- # if self[key].is_a?(Hash)
114
- # self[key] = self[key].deep_set_key_values
115
- # else
116
- # self[key] = key.to_s
117
- # end
118
- # end
119
- # self
120
- #end
121
-
122
- # invert
123
- #def hash_revert
124
- # r = Hash.new { |h, k| h[k] = [] }
125
- # each { |k, v| r[v] << k }
126
- # r
127
- #end
128
-
129
- #def set_keys_eval(value, *hash_keys)
130
- # self.instance_eval("self['#{hash_keys.join("']['")}']=%q[#{Hash.convert_hash_to_ordered_hash(value)}]")
131
- # self
132
- #end
133
-
134
- #def rewrite mapping
135
- # inject({}) do |rewritten_hash, (original_key, value)|
136
- # rewritten_hash[mapping.fetch(original_key, original_key)] = value
137
- # rewritten_hash
138
- # end
139
- #end
99
+ def try_keys(*try_keys)
100
+ try_keys.each do |k|
101
+ return self[k] if self.has_key?(k)
102
+ end
103
+ default
104
+ end
140
105
 
141
- #def try_keys *keys
142
- # option = last_option keys
143
- # keys.flatten.each do |key|
144
- # return self[key] if self[key]
145
- # end
146
- # return option[:default] if option[:default]
147
- # nil
148
- #end
106
+ def deep_stringify_keys
107
+ inject({}) { |result, (key, value)|
108
+ value = value.deep_stringify_keys if value.is_a?(Hash)
109
+ result[(key.to_s rescue key) || key] = value
110
+ result
111
+ }
112
+ end unless Hash.method_defined?(:deep_stringify_keys)
149
113
 
150
- #def fetch_keys(*hash_keys)
151
- # hash_keys.each_with_index do |k, i|
152
- # if hash_keys[i+1]
153
- # return self[k].fetch_keys(*hash_keys[1..-1])
154
- # else
155
- # return self[k]
156
- # end
157
- # end
158
- #end
159
114
  end
@@ -1,15 +1,20 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  class String
3
3
  # http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html
4
- LUCENE_ESCAPE_REGEX = /(\+|-|&&|\|\||!|\(|\)|{|}|\[|\]|`|"|~|\?|:|\\)/
4
+ #LUCENE_ESCAPE_REGEX = /(\+|-|&&|\|\||!|\(|\)|{|}|\[|\]|`|"|~|\?|:|\\|\/)/
5
5
  #LUCENE_ESCAPE_REGEX = /(\+|-|&&|\|\||!|\(|\)|{|}|\[|\]|`|"|~|\?|:|\\|\s)/
6
+
6
7
  KEYBOARDS = {
7
8
  en: 'qwertyuiop[]asdfghjkl;\'zxcvbnm,./',
8
9
  ru: 'йцукенгшщзхъфывапролджэячсмитьбю/'
9
10
  }
10
11
 
11
- def lucene_escape
12
- self.gsub(LUCENE_ESCAPE_REGEX, "\\\\\\1")
12
+ unless defined? LUCENE_ESCAPE_REGEX
13
+ LUCENE_ESCAPE_REGEX = /(\+|-|&&|\|\||!|\(|\)|{|}|\[|\]|\^|"|~|\*|\?|:|\\|\/)/
14
+
15
+ def lucene_escape
16
+ self.gsub(LUCENE_ESCAPE_REGEX, "\\\\\\1")
17
+ end
13
18
  end
14
19
 
15
20
  def capitalize_first
@@ -21,7 +26,7 @@ class String
21
26
  end
22
27
 
23
28
  def is_number?
24
- true if Float(self) rescue false
29
+ self =~ /^[-+]?[0-9]+(\.[0-9]+)?$/
25
30
  end
26
31
 
27
32
  def to_utc
@@ -34,6 +39,7 @@ class String
34
39
 
35
40
  def no_html
36
41
  str = self.dup
42
+ str.gsub!(/<br\/?>/, ' ')
37
43
  str.gsub!(/<\/?[^>]*>/, '')
38
44
  str.strip!
39
45
  str.gsub!('&nbsp;', ' ')
@@ -75,6 +81,13 @@ class String
75
81
  coder.decode(self.no_html)
76
82
  end
77
83
 
84
+ def mb_upcase
85
+ mb_chars.upcase.to_s
86
+ end
87
+
88
+ def mb_downcase
89
+ mb_chars.downcase.to_s
90
+ end
78
91
  end
79
92
 
80
93
  unless ''.respond_to?(:each)
@@ -1,6 +1,3 @@
1
- require 'rails'
2
- require 'ab_admin'
3
-
4
1
  module AbAdmin
5
2
  class Engine < ::Rails::Engine
6
3
  engine_name 'ab_admin'
@@ -18,18 +15,15 @@ module AbAdmin
18
15
  ActiveRecord::Base.send :include, AbAdmin::Concerns::DeepCloneable
19
16
  ActiveRecord::Base.send :include, AbAdmin::Concerns::Utilities
20
17
  ActiveRecord::Base.send :include, AbAdmin::Concerns::Silencer
21
- ActiveRecord::Base.send :extend, AbAdmin::Concerns::Silencer
18
+ ActiveRecord::Base.send :extend, AbAdmin::Concerns::Silencer
22
19
  ActiveRecord::Base.send :include, AbAdmin::Concerns::Validations
20
+ ActiveRecord::Base.send :include, AbAdmin::Concerns::Fileuploads
23
21
  end
24
22
 
25
23
  ActiveSupport.on_load :action_mailer do
26
24
  ActionMailer::Base.send :include, AbAdmin::Mailers::Helpers
27
25
  end
28
26
 
29
- ActiveSupport.on_load :action_controller do
30
- ActionController::Base.send :include, AbAdmin::Controllers::HeadOptions
31
- end
32
-
33
27
  ActiveSupport.on_load :action_view do
34
28
  ActionController::Base.helper AbAdmin::Views::Helpers
35
29
  ActionController::Base.helper AbAdmin::Views::AdminHelpers
@@ -5,18 +5,23 @@ end
5
5
  require 'i18n/core_ext/kernel/surpress_warnings'
6
6
 
7
7
  ActiveSupport::XmlMini.backend = 'Nokogiri'
8
+
8
9
  InheritedResources.flash_keys = Responders::FlashResponder.flash_keys = AbAdmin.flash_keys
9
10
  Responders::FlashResponder.namespace_lookup = true
10
- YAML::ENGINE.yamler = 'psych'
11
+
12
+ ::SimpleForm.wrapper_mappings ||= {}
13
+ ::SimpleForm.wrapper_mappings[:capture_block] = ::SimpleForm.wrapper_mappings[:uploader] = AbAdmin::Views::ContentOnlyWrapper.instance
14
+
15
+ CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
11
16
 
12
17
  Time::DATE_FORMATS[:api] = '%d.%m.%Y'
18
+ Time::DATE_FORMATS[:path] = '%Y_%m_%d_%H_%M_%S'
13
19
  Time::DATE_FORMATS[:compare] = '%Y%m%d%H%M'
14
20
  Time::DATE_FORMATS[:compare_date] = Date::DATE_FORMATS[:compare_date] = '%Y%m%d'
15
21
 
16
22
  Kernel.suppress_warnings do
17
- ActionView::Base::InstanceTag::DEFAULT_TEXT_AREA_OPTIONS = {'cols' => 93, 'rows' => 5}
23
+ # fixed in master branch
18
24
  Russian::LOCALIZE_MONTH_NAMES_MATCH = /(%d|%e|%-d)(.*)(%B)/ if defined? Russian
19
- Ya2YAML::REX_BOOL = /y|Y|Yes|YES|n|N|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF/ if defined? Ya2YAML
20
25
  end
21
26
 
22
27
  if defined?(Sunrise::FileUpload)
@@ -22,7 +22,7 @@ module ActiveModel
22
22
  class Sanitizer
23
23
  def sanitize(attributes, authorizers)
24
24
  sanitized_attributes = attributes.reject { |key, value| authorizers.all? { |auth| auth.deny?(key) } }
25
- debug_protected_attribute_removal(attributes, sanitized_attributes)
25
+ #debug_protected_attribute_removal(attributes, sanitized_attributes)
26
26
  sanitized_attributes
27
27
  end
28
28
  end
@@ -0,0 +1,35 @@
1
+ module Globalize
2
+ mattr_accessor :available_locales
3
+
4
+ def self.valid_locale?(loc)
5
+ return false unless loc
6
+ available_locales.include?(loc.to_sym)
7
+ end
8
+ end
9
+
10
+ Globalize::ActiveRecord::ClassMethods.module_eval do
11
+ def define_translations_reader_with_locale_suffix(name)
12
+ define_translations_reader_without_locale_suffix(name)
13
+
14
+ Globalize.available_locales.each do |locale|
15
+ define_method :"#{name}_#{locale}" do
16
+ read_attribute(name, {locale: locale})
17
+ end
18
+ end
19
+ end
20
+ alias_method_chain :define_translations_reader, :locale_suffix
21
+
22
+ def define_translations_writer_with_locale_suffix(name)
23
+ define_translations_writer_without_locale_suffix(name)
24
+
25
+ Globalize.available_locales.each do |locale|
26
+ define_method :"#{name}_#{locale}=" do |value|
27
+ changed_attributes[:"#{name}_#{locale}"] = value unless value == read_attribute(name, {locale: locale})
28
+ write_attribute(name, value, {locale: locale})
29
+ end
30
+ end
31
+ end
32
+ alias_method_chain :define_translations_writer, :locale_suffix
33
+ end
34
+
35
+ Globalize::ActiveRecord::Translation.attr_accessible :locale
@@ -38,7 +38,8 @@ module WillPaginate
38
38
  rel.total_entries = total.to_i unless total.blank?
39
39
 
40
40
  if large
41
- new_rel = rel.except(:limit, :offset, :where).where(id: rel.pluck("#{quoted_table_name}.id"))
41
+ ids = rel.except(:includes).pluck("#{quoted_table_name}.id")
42
+ new_rel = rel.except(:limit, :offset, :where).where(id: ids)
42
43
  new_rel.paginate_limit = rel.limit_value.to_i
43
44
  new_rel.paginate_offset = rel.offset_value.to_i
44
45
  new_rel.total_entries = rel.total_entries
@@ -62,6 +63,7 @@ WillPaginate::ActionView::LinkRenderer.class_exec do
62
63
 
63
64
  url_params = @base_url_params.dup
64
65
  add_current_page_param(url_params, page)
66
+ url_params[param_name.to_sym] = nil if url_params[param_name.to_sym].to_i < 2
65
67
 
66
68
  link = @template.url_for(url_params)
67
69
  @options[:no_uri] ? link.split('?').first : link
@@ -28,7 +28,7 @@ module AbAdmin
28
28
  attributes = model.columns.map(&:name)
29
29
  attributes.concat(model.translated_attribute_names.map(&:to_s)) if model.translates?
30
30
  attributes.reject! { |el| IGNORE_COLUMNS.include?(el) }
31
- h[model.model_name.underscore] = attributes.each_with_object({}) do |attr, o|
31
+ h[model.model_name.i18n_key.to_s] = attributes.each_with_object({}) do |attr, o|
32
32
  o[attr] = ha(model, attr, locale).presence || attr
33
33
  model.reflect_on_all_associations.map(&:name).map(&:to_s).reject { |a| a =~ /^translation/ }.each do |assoc|
34
34
  o[assoc] = ha(model, assoc, locale)
@@ -0,0 +1,14 @@
1
+ module AbAdmin
2
+ module Menu
3
+ class AbstractBuilder < BaseGroup
4
+ def initialize
5
+ @menu_tree = []
6
+ end
7
+
8
+ def render(template, options={})
9
+ inner = render_nested(template)
10
+ options[:skip_wrap] ? inner.html_safe : %[<ul class="nav">#{inner}</ul>].html_safe
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,26 @@
1
+ module AbAdmin
2
+ module Menu
3
+ class BaseGroup
4
+ include ::Rails.application.routes.url_helpers
5
+ include ::AbAdmin::Utils::EvalHelpers
6
+
7
+ def link(title, path, options={})
8
+ @menu_tree << Item.new(title, path, options)
9
+ end
10
+
11
+ def model(model, options={})
12
+ title = model.model_name.human(count: 9)
13
+ path = options[:url] || "/admin/#{model.model_name.plural}"
14
+ @menu_tree << Item.new(title, path, options)
15
+ end
16
+
17
+ def group(title, options={}, &block)
18
+ @menu_tree << Group.new(title, options, &block)
19
+ end
20
+
21
+ def render_nested(template)
22
+ @menu_tree.map { |item| item.render(template) }.compact.join.html_safe
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ module AbAdmin
2
+ module Menu
3
+ class Builder < AbstractBuilder
4
+ include ::Singleton
5
+
6
+ def self.draw(&block)
7
+ I18n.locale = AbAdmin.locale if AbAdmin.locale
8
+ instance.instance_eval &block if block_given?
9
+ end
10
+
11
+ def self.render(*args)
12
+ instance.render(*args)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ module AbAdmin
2
+ module Menu
3
+ class Group < BaseGroup
4
+ def initialize(title, options, &block)
5
+ @menu_tree = []
6
+ @title = title.is_a?(Symbol) ? I18n.t(title, scope: [:admin, :navigation]) : title
7
+ @options = options
8
+ instance_eval &block if block_given?
9
+ end
10
+
11
+ def render(template)
12
+ return if @options[:if] && !call_method_or_proc_on(template, @options[:if])
13
+ return if @options[:unless] && call_method_or_proc_on(template, @options[:unless])
14
+
15
+ <<-HTML.html_safe
16
+ <li class="dropdown">
17
+ <a class="dropdown-toggle" href="#{@options[:url] || '#'}" >#{@title}<b class="caret"></b></a>
18
+ <ul class="dropdown-menu">#{render_nested(template)}</ul>
19
+ <li>
20
+ HTML
21
+ end
22
+ end
23
+ end
24
+ end