ab_admin 0.2.3 → 0.3.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 (221) hide show
  1. data/Gemfile +6 -6
  2. data/Guardfile +6 -6
  3. data/README.md +5 -5
  4. data/app/assets/images/admin/Jcrop.gif +0 -0
  5. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +20 -19
  6. data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +22 -38
  7. data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +2 -2
  8. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +6 -2
  9. data/app/assets/stylesheets/ab_admin/components/_base.css.scss +17 -1
  10. data/app/assets/stylesheets/ab_admin/components/_form.css.scss +1 -1
  11. data/app/assets/stylesheets/ab_admin/main.css.scss +1 -0
  12. data/app/controllers/admin/assets_controller.rb +10 -10
  13. data/app/controllers/admin/base_controller.rb +39 -37
  14. data/app/controllers/admin/locators_controller.rb +5 -4
  15. data/app/controllers/admin/manager_controller.rb +11 -10
  16. data/app/controllers/admin/settings_controller.rb +4 -3
  17. data/app/controllers/admin/static_pages_controller.rb +1 -1
  18. data/app/controllers/admin/structures_controller.rb +2 -2
  19. data/app/views/ab_admin/devise/passwords/edit.html.slim +5 -5
  20. data/app/views/ab_admin/devise/passwords/new.html.slim +3 -3
  21. data/app/views/ab_admin/devise/sessions/new.html.slim +5 -5
  22. data/app/views/admin/admin_comments/_comment.html.slim +3 -3
  23. data/app/views/admin/admin_comments/_comments.html.slim +2 -2
  24. data/app/views/admin/admin_comments/_form.html.slim +5 -5
  25. data/app/views/admin/admin_comments/create.js.erb +1 -1
  26. data/app/views/admin/base/_form.html.slim +1 -1
  27. data/app/views/admin/base/_search_layout.html.slim +4 -4
  28. data/app/views/admin/base/_tree.html.slim +1 -1
  29. data/app/views/admin/base/create.js.erb +1 -1
  30. data/app/views/admin/base/index.html.slim +3 -3
  31. data/app/views/admin/base/update.js.erb +1 -1
  32. data/app/views/admin/dashboards/index.html.slim +15 -1
  33. data/app/views/admin/fileupload/_asset.html.slim +1 -1
  34. data/app/views/admin/fileupload/_container.html.slim +2 -2
  35. data/app/views/admin/fileupload/_file.html.slim +1 -1
  36. data/app/views/admin/fileupload/_tmpl.html.slim +1 -1
  37. data/app/views/admin/headers/_form.html.slim +3 -3
  38. data/app/views/admin/locators/edit.html.slim +4 -4
  39. data/app/views/admin/locators/show.html.slim +3 -3
  40. data/app/views/admin/manager/_form.html.slim +2 -1
  41. data/app/views/admin/manager/_table.html.slim +6 -3
  42. data/app/views/admin/settings/_form.html.slim +8 -8
  43. data/app/views/admin/shared/_batch_actions.html.slim +1 -1
  44. data/app/views/admin/static_pages/_form.html.slim +3 -3
  45. data/app/views/admin/structures/_form.html.slim +7 -7
  46. data/app/views/admin/users/_form.html.slim +9 -9
  47. data/app/views/admin/users/_search_form.html.slim +4 -4
  48. data/app/views/admin/users/_table.html.slim +3 -3
  49. data/app/views/layouts/admin/_footer.html.slim +4 -0
  50. data/app/views/layouts/admin/_navigation.html.slim +2 -2
  51. data/app/views/layouts/admin/application.html.slim +3 -3
  52. data/app/views/layouts/admin/devise.html.slim +2 -2
  53. data/config/locales/ru.yml +1 -0
  54. data/config/routes.rb +23 -23
  55. data/db/migrate/20130101000001_create_users.rb +11 -11
  56. data/db/migrate/20130101000003_create_assets.rb +8 -8
  57. data/db/migrate/20130101000004_create_headers.rb +3 -3
  58. data/db/migrate/20130101000005_create_static_pages.rb +2 -2
  59. data/db/migrate/20130101000006_create_structures.rb +8 -8
  60. data/db/migrate/20130101000007_base_translations.rb +3 -3
  61. data/db/migrate/20130101000008_create_admin_comments.rb +3 -3
  62. data/features/dsl/action_items.feature +1 -1
  63. data/features/dsl/admin_comments.feature +2 -2
  64. data/features/dsl/batch_actions.feature +1 -1
  65. data/features/dsl/config.feature +2 -2
  66. data/features/dsl/custom_actions.feature +5 -5
  67. data/features/dsl/form.feature +4 -4
  68. data/features/dsl/in_place_edit.feature +1 -1
  69. data/features/dsl/list_edit.feature +1 -1
  70. data/features/dsl/resource_action_items.feature +1 -1
  71. data/features/dsl/table.feature +3 -3
  72. data/features/dsl/tree.feature +3 -3
  73. data/features/locators.feature +1 -1
  74. data/features/menu.feature +3 -3
  75. data/features/step_definitions/dsl/action_items_steps.rb +3 -3
  76. data/features/step_definitions/dsl/admin_comments_steps.rb +1 -1
  77. data/features/step_definitions/dsl/batch_actions_steps.rb +1 -1
  78. data/features/step_definitions/dsl/parent_resource_steps.rb +2 -2
  79. data/features/step_definitions/dsl/table_steps.rb +3 -3
  80. data/features/step_definitions/dsl/tree_steps.rb +3 -3
  81. data/features/step_definitions/menu_steps.rb +3 -3
  82. data/features/step_definitions/structure_steps.rb +1 -1
  83. data/features/step_definitions/user_steps.rb +7 -7
  84. data/features/step_definitions/web_steps/browsing_steps.rb +2 -2
  85. data/features/step_definitions/web_steps/form_steps.rb +7 -7
  86. data/features/support/selectors.rb +5 -5
  87. data/features/support/tolerance_for_selenium_sync_issues.rb +1 -1
  88. data/lib/ab_admin/abstract_resource.rb +3 -3
  89. data/lib/ab_admin/carrierwave/base_uploader.rb +7 -7
  90. data/lib/ab_admin/carrierwave/file_size_validator.rb +4 -4
  91. data/lib/ab_admin/carrierwave/glue.rb +1 -1
  92. data/lib/ab_admin/concerns/admin_addition.rb +17 -13
  93. data/lib/ab_admin/concerns/headerable.rb +2 -2
  94. data/lib/ab_admin/concerns/nested_set.rb +23 -1
  95. data/lib/ab_admin/concerns/reloadable.rb +56 -0
  96. data/lib/ab_admin/concerns/utilities.rb +3 -3
  97. data/lib/ab_admin/concerns/validations.rb +2 -2
  98. data/lib/ab_admin/config/base.rb +5 -5
  99. data/lib/ab_admin/config/optional_display.rb +4 -4
  100. data/lib/ab_admin/controllers/callbacks.rb +1 -1
  101. data/lib/ab_admin/controllers/can_can_manager_resource.rb +1 -1
  102. data/lib/ab_admin/controllers/head_options.rb +5 -9
  103. data/lib/ab_admin/controllers/tree.rb +2 -2
  104. data/lib/ab_admin/core_ext/other.rb +2 -2
  105. data/lib/ab_admin/core_ext/string.rb +2 -2
  106. data/lib/ab_admin/devise.rb +3 -3
  107. data/lib/ab_admin/engine.rb +1 -1
  108. data/lib/ab_admin/hooks/paginate_hooks.rb +2 -2
  109. data/lib/ab_admin/hooks/simple_form_hooks.rb +2 -2
  110. data/lib/ab_admin/i18n_tools/google_translate.rb +5 -5
  111. data/lib/ab_admin/i18n_tools/model_translator.rb +7 -7
  112. data/lib/ab_admin/i18n_tools/translate_app.rb +1 -1
  113. data/lib/ab_admin/menu_builder.rb +3 -3
  114. data/lib/ab_admin/models/asset.rb +14 -6
  115. data/lib/ab_admin/models/attachment_file.rb +2 -2
  116. data/lib/ab_admin/models/header.rb +1 -1
  117. data/lib/ab_admin/models/locator.rb +3 -3
  118. data/lib/ab_admin/models/structure.rb +8 -8
  119. data/lib/ab_admin/models/type_model.rb +3 -3
  120. data/lib/ab_admin/models/user.rb +7 -7
  121. data/lib/ab_admin/utils/csv_document.rb +2 -2
  122. data/lib/ab_admin/utils/logger.rb +1 -1
  123. data/lib/ab_admin/utils/xls_document.rb +4 -4
  124. data/lib/ab_admin/utils.rb +11 -11
  125. data/lib/ab_admin/version.rb +1 -1
  126. data/lib/ab_admin/views/admin_helpers.rb +13 -13
  127. data/lib/ab_admin/views/admin_navigation_helpers.rb +26 -26
  128. data/lib/ab_admin/views/form_builder.rb +36 -22
  129. data/lib/ab_admin/views/helpers.rb +6 -6
  130. data/lib/ab_admin/views/inputs/ckeditor_input.rb +1 -1
  131. data/lib/ab_admin/views/inputs/color_input.rb +1 -1
  132. data/lib/ab_admin/views/inputs/date_time_input.rb +7 -7
  133. data/lib/ab_admin/views/manager_helpers.rb +3 -3
  134. data/lib/ab_admin/views/search_form_builder.rb +18 -18
  135. data/lib/ab_admin/views/url_for_routes.rb +4 -4
  136. data/lib/ab_admin.rb +1 -2
  137. data/lib/generators/ab_admin/glob/glob_generator.rb +1 -1
  138. data/lib/generators/ab_admin/install/install_generator.rb +2 -2
  139. data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -0
  140. data/lib/generators/ab_admin/install/templates/config/seeds.rb +1 -1
  141. data/lib/generators/ab_admin/install/templates/config/unicorn_config.rb +3 -3
  142. data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +2 -2
  143. data/lib/generators/ab_admin/install/templates/models/ability.rb +4 -4
  144. data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +4 -4
  145. data/lib/generators/ab_admin/install/templates/models/asset.rb +2 -1
  146. data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +1 -1
  147. data/lib/generators/ab_admin/install/templates/models/avatar.rb +2 -2
  148. data/lib/generators/ab_admin/install/templates/models/locator.rb +3 -0
  149. data/lib/generators/ab_admin/install/templates/models/picture.rb +2 -2
  150. data/lib/generators/ab_admin/install/templates/models/settings.rb +3 -0
  151. data/lib/generators/ab_admin/install/templates/models/static_page.rb +3 -3
  152. data/lib/generators/ab_admin/install/templates/models/structure.rb +2 -2
  153. data/lib/generators/ab_admin/install/templates/models/user.rb +2 -2
  154. data/lib/generators/ab_admin/install/templates/spec/spec_helper.rb +2 -2
  155. data/lib/generators/ab_admin/install/templates/spec/support/shared_connection.rb +1 -1
  156. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +2 -2
  157. data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +4 -3
  158. data/lib/generators/ab_admin/model/model_generator.rb +4 -2
  159. data/lib/generators/ab_admin/model/templates/resource.erb +6 -6
  160. data/lib/generators/ab_admin/resource/resource_generator.rb +9 -9
  161. data/lib/generators/ab_admin/resource/templates/_form.haml.erb +10 -14
  162. data/lib/generators/ab_admin/resource/templates/_form.slim.erb +11 -11
  163. data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
  164. data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
  165. data/lib/generators/ab_admin/resource/templates/controller.erb +1 -1
  166. data/lib/generators/template.rb +8 -8
  167. data/lib/tasks/assets.rake +5 -5
  168. data/lib/tasks/cache.rake +1 -1
  169. data/lib/tasks/i18n.rake +1 -1
  170. data/spec/ab_admin_spec.rb +3 -3
  171. data/spec/dummy/app/models/ab_admin/ab_admin_catalogue.rb +1 -1
  172. data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +6 -6
  173. data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +14 -14
  174. data/spec/dummy/app/models/admin_menu.rb +2 -2
  175. data/spec/dummy/app/models/ckeditor/asset.rb +1 -1
  176. data/spec/dummy/app/models/ckeditor/attachment_file.rb +1 -1
  177. data/spec/dummy/app/models/ckeditor/picture.rb +1 -1
  178. data/spec/dummy/app/models/collection.rb +5 -5
  179. data/spec/dummy/app/models/product.rb +5 -5
  180. data/spec/dummy/app/uploaders/ckeditor_attachment_file_uploader.rb +1 -1
  181. data/spec/dummy/app/uploaders/ckeditor_picture_uploader.rb +3 -3
  182. data/spec/dummy/app/views/layouts/application.html.erb +2 -2
  183. data/spec/dummy/config/application.rb +2 -2
  184. data/spec/dummy/config/environments/test.rb +1 -1
  185. data/spec/dummy/config/initializers/ckeditor.rb +2 -2
  186. data/spec/dummy/config/initializers/devise.rb +5 -5
  187. data/spec/dummy/config/initializers/session_store.rb +1 -1
  188. data/spec/dummy/config/initializers/simple_form.rb +8 -8
  189. data/spec/dummy/config/initializers/simple_form_bootstrap.rb +14 -14
  190. data/spec/dummy/config/initializers/wrap_parameters.rb +1 -1
  191. data/spec/dummy/config/routes.rb +2 -2
  192. data/spec/dummy/db/migrate/20130129151853_create_ckeditor_assets.rb +5 -5
  193. data/spec/dummy/db/migrate/20130130161853_create_collections.rb +2 -2
  194. data/spec/dummy/db/migrate/20130130162046_create_products.rb +2 -2
  195. data/spec/dummy/db/migrate/20130130175446_create_globalize_collection_product.rb +2 -2
  196. data/spec/dummy/db/migrate/20130207224516_create_catalogues.rb +3 -3
  197. data/spec/dummy/db/migrate/20130209223506_add_lat_lon_zoom_to_products.rb +1 -1
  198. data/spec/dummy/db/seeds.rb +5 -5
  199. data/spec/dummy/lib/capybara_irb.rb +10 -10
  200. data/spec/dummy/lib/tasks/cucumber.rake +10 -10
  201. data/spec/dummy/lib/templates/slim/scaffold/_form.html.slim +2 -2
  202. data/spec/factories/assets.rb +9 -9
  203. data/spec/factories/catalogues.rb +1 -1
  204. data/spec/factories/collections.rb +1 -1
  205. data/spec/factories/products.rb +2 -2
  206. data/spec/factories/structures.rb +2 -2
  207. data/spec/generators/ckeditor_assets_generator_spec.rb +1 -1
  208. data/spec/generators/install_generator_spec.rb +1 -1
  209. data/spec/generators/model_generator_spec.rb +2 -2
  210. data/spec/generators/resource_generator_spec.rb +1 -1
  211. data/spec/models/avatar_spec.rb +1 -1
  212. data/spec/models/picture_uploader_spec.rb +1 -1
  213. data/spec/models/structure_spec.rb +2 -2
  214. data/spec/models/user_spec.rb +1 -1
  215. data/spec/spec_helper.rb +3 -3
  216. data/spec/support/shared_connection.rb +1 -1
  217. data/vendor/assets/javascripts/ab_admin/jquery.Jcrop.js +1083 -0
  218. data/vendor/assets/stylesheets/ab_admin/jquery.Jcrop.min.css.scss +28 -0
  219. metadata +8 -6
  220. data/lib/ab_admin/views/inputs/association_input.rb +0 -13
  221. data/lib/ab_admin/views/inputs/tree_select_input.rb +0 -16
data/Gemfile CHANGED
@@ -16,10 +16,10 @@ gem 'configatron'
16
16
  gem 'ransack'
17
17
  gem 'has_scope'
18
18
  gem 'friendly_id'
19
- gem 'galetahub-enum_field', :require => 'enum_field'
19
+ gem 'galetahub-enum_field', require: 'enum_field'
20
20
  gem 'awesome_nested_set'
21
- gem 'sunrise-file-upload', :git => 'git://github.com/leschenko/sunrise-file-upload.git', :ref => '53da968'
22
- gem 'globalize3', :git => 'git://github.com/leschenko/globalize3.git', :ref => '586ccbd'
21
+ gem 'sunrise-file-upload', git: 'git://github.com/leschenko/sunrise-file-upload.git', ref: '53da968'
22
+ gem 'globalize3', git: 'git://github.com/leschenko/globalize3.git', ref: '586ccbd'
23
23
 
24
24
  gem 'carrierwave'
25
25
  gem 'mini_magick'
@@ -57,7 +57,7 @@ group :development, :test do
57
57
  end
58
58
 
59
59
  group :test do
60
- gem 'cucumber-rails', :require => false
60
+ gem 'cucumber-rails', require: false
61
61
  gem 'capybara'
62
62
  gem 'shoulda-matchers'
63
63
  gem 'database_cleaner'
@@ -65,8 +65,8 @@ group :test do
65
65
  gem 'fuubar'
66
66
  gem 'guard-rspec'
67
67
  gem 'guard-cucumber'
68
- gem 'rb-fsevent', :require => false
69
- gem 'growl', :require => false
68
+ gem 'rb-fsevent', require: false
69
+ gem 'growl', require: false
70
70
  end
71
71
 
72
72
  group :development do
data/Guardfile CHANGED
@@ -2,18 +2,18 @@ notification :growl
2
2
  ignore /vendor/, /public/, /etc/
3
3
 
4
4
  group :rspec do
5
- guard 'rspec', :all_on_start => false, :all_after_pass => false, :cli => '--tag @focus' do
5
+ guard 'rspec', all_on_start: false, all_after_pass: false, cli: '--tag @focus' do
6
6
  watch(%r{^spec/.+_spec\.rb$})
7
7
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
8
- watch('spec/spec_helper.rb') { "spec" }
8
+ watch('spec/spec_helper.rb') { 'spec' }
9
9
 
10
10
  # Rails example
11
11
  watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
12
12
  watch(%r{^app/(.*)(\.slim|\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
13
13
  watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/features/#{m[1]}_spec.rb"] }
14
- watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
15
- watch('config/routes.rb') { "spec/routing" }
16
- watch('app/controllers/application_controller.rb') { "spec/controllers" }
14
+ watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
15
+ watch('config/routes.rb') { 'spec/routing' }
16
+ watch('app/controllers/application_controller.rb') { 'spec/controllers' }
17
17
  watch(%r{lib/generators/ab_admin/.+/(.+)\.rb}) { |m| "spec/generators/#{m[1]}_spec.rb" }
18
18
 
19
19
  # Capybara request specs
@@ -26,7 +26,7 @@ group :rspec do
26
26
  end
27
27
 
28
28
  group :cucumber do
29
- guard 'cucumber', :cli => '--profile wip', :all_after_pass => false, :all_on_start => false do
29
+ guard 'cucumber', cli: '--profile wip', all_after_pass: false, all_on_start: false do
30
30
  watch(%r{^features/.+\.feature$})
31
31
  watch(%r{^features/support/.+$}) { 'features' }
32
32
  watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
data/README.md CHANGED
@@ -32,12 +32,12 @@ Admin resource is just a class in `app/models/ab_admin` directory like this:
32
32
  class AbAdminProduct < AbAdmin::AbstractResource
33
33
  preview_path :product_path
34
34
 
35
- settings :comments => true
35
+ settings comments: true
36
36
 
37
37
  table do
38
38
  field :sku
39
39
  field(:picture) { |item| item_image_link(item) }
40
- field :name, :sortable => {:column => :id, :default_order => 'desc'}
40
+ field :name, sortable: {column: :id, default_order: 'desc'}
41
41
  field :is_visible
42
42
  field :collection
43
43
  field :created_at
@@ -66,13 +66,13 @@ class AbAdminProduct < AbAdmin::AbstractResource
66
66
  field :price
67
67
  end
68
68
  field :is_visible
69
- field :collection, :as => :association
69
+ field :collection, as: :association
70
70
  locale_tabs do
71
71
  field :name
72
72
  field :description
73
73
  end
74
- field :picture, :as => :uploader
75
- field :map, :as => :map
74
+ field :picture, as: :uploader
75
+ field :map, as: :map
76
76
  end
77
77
  end
78
78
  ```
Binary file
@@ -1,22 +1,24 @@
1
1
  #= require ab_admin/fileupload/fileuploader.js
2
2
  #= require ab_admin/fileupload/admin-fileuploader.js
3
3
  #= require jquery.tmpl.min
4
+ #q= require ab_admin/jquery.Jcrop
5
+ #q= require ab_admin/components/croppable_image
4
6
 
5
7
  class window.AdminAssets
6
8
  constructor: (@element_id, @url, @sortable) ->
9
+ @uploader_api = qq.FileUploader.instances[@element_id]
10
+ @uploader_el = $("##{@element_id}")
7
11
  @initHandlers()
12
+ @uploader_el.data('AdminAssets', this)
8
13
 
9
14
  initHandlers: ->
10
15
  self = this
11
- query = "##{@element_id} .fileupload-list"
16
+ @query = "##{@element_id} .fileupload-list"
12
17
  if @sortable
13
- $(".do_sort " + query).sortable
18
+ $(".do_sort " + @query).sortable
14
19
  revert: true
15
- start: (e, ui) ->
16
- ui.item.addClass "drag_sort"
17
-
18
20
  update: (event, ui) ->
19
- data = $(query).sortable("serialize")
21
+ data = $(self.query).sortable("serialize")
20
22
  $.ajax
21
23
  url: self.url
22
24
  data: data
@@ -24,13 +26,14 @@ class window.AdminAssets
24
26
  type: "POST"
25
27
 
26
28
  if $.fn.fancybox
27
- @initFancybox(query)
29
+ @initFancybox()
28
30
 
29
31
  unless window.admin_assets_first
30
32
  window.admin_assets_first = true
31
33
  @initMainImage()
32
34
  @initRemove()
33
35
  @initRotate()
36
+ @initCrop()
34
37
 
35
38
  initRemove: ->
36
39
  $(document).on "ajax:complete", ".fileupload .del_asset", ->
@@ -51,20 +54,18 @@ class window.AdminAssets
51
54
  initRotate: ->
52
55
  $(document).on 'click', '.fileupload .rotate_image', ->
53
56
  $asset = $(this).closest('.asset')
57
+ $uploader = qq.FileUploader.instances[$asset.closest('.fileupload').attr('id')]
54
58
  $.post "/admin/assets/#{$asset.data('id')}/rotate", (data) ->
55
- $asset.replaceWith $('#fileupload_tmpl').tmpl(data.asset)
59
+ $asset.replaceWith $($uploader._options.template_id).tmpl(data.asset)
60
+
61
+ initCrop: ->
62
+ if @uploader_el.data('crop') && $.fn.Jcrop
63
+ @crop = new CroppableImage(@element_id)
64
+
65
+ initFancybox: =>
66
+ $(@query + " a.fancybox").fancybox
67
+ afterShow: => @crop?.fancyboxHandler()
56
68
 
57
- initFancybox: (query) ->
58
- $(query + " a.fancybox").fancybox
59
- titleShow: false
60
- transitionIn: "none"
61
- transitionOut: "none"
62
- autoScale: false
63
- onStart: (items, index, opts) ->
64
- obj = $(items[index]).parent()
65
- if obj.hasClass("drag_sort")
66
- obj.removeClass "drag_sort"
67
- false
68
69
 
69
70
  #class window.AssetDescription
70
71
  # constructor: (@assoc, @assetable_type, @assetable_id, @guid) ->
@@ -1,48 +1,32 @@
1
1
  class window.CroppableImage
2
- constructor: (@uploader_el) ->
3
- @uploader_api = qq.FileUploader.instances[@uploader_el.attr('id')]
4
- @initHandelers()
5
- @uploader_el.bind 'fileupload:onComplete', @refreshHandlers
2
+ @crop_defaults =
3
+ aspectRatio: 760 / 350
4
+ setSelect: [0, 0, 760, 350]
6
5
 
7
- initHandelers: =>
8
- @el = $('.fileupload-file.fancybox', @uploader_el)
9
- @fancybox_api = @el.data('fancybox')
10
- @fancybox_api?.onComplete = @fancyboxHandler
11
- @fancybox_api?.onClosed = -> $('#fancybox-content').css({'z-index': 1102})
6
+ constructor: (@element_id, @options = {}) ->
7
+ @uploader_api = qq.FileUploader.instances[@element_id]
12
8
 
13
9
  fancyboxHandler: =>
14
- $img = $('#fancybox-img')
15
- $img.Jcrop
16
- aspectRatio: 760 / 350
17
- setSelect: [0, 0, 760, 350]
18
- onSelect: @setCropData
19
- onChange: @setCropData
20
- $cont = $('#fancybox-content')
21
- $cont.css({'z-index': 1103})
22
- $img.load =>
23
- setTimeout((=>
24
- $cont.height (i, v) -> v + 35
25
- $btn = $("<a href='#' class='btn btn-primary' id='crop_button'>Обрезать</a>")
26
- $cont.append($btn)
27
- $btn.click @cropHandler
28
- ), 300)
10
+ _.defaults(@options, CroppableImage.crop_defaults)
11
+ @options.onSelect = @setCropData
12
+ @options.onChange = @setCropData
29
13
 
30
- setCropData: (coords) =>
31
- @cropData = coords
14
+ $('.fancybox-image:first').Jcrop @options
15
+ $('.fancybox-nav').hide()
32
16
 
33
- render: (data) =>
34
- $(@uploader_api._listElement).html $(@uploader_api._options.template_id).tmpl(data.asset)
35
- $.fancybox.close()
36
- @refreshHandlers()
17
+ $cont = $('.fancybox-outer:first')
18
+ $btn = $("<a href='#' class='btn btn-primary' id='crop_button'>Обрезать</a>")
19
+ $cont.append($btn)
20
+ $btn.click @cropHandler
37
21
 
38
- refreshHandlers: =>
39
- Manage.initFancybox('#' + @uploader_el.attr('id'))
40
- @initHandelers()
22
+ setCropData: (coords) =>
23
+ @cropData = coords
41
24
 
42
25
  cropHandler: (e) =>
43
26
  e.preventDefault()
44
- action = @uploader_api._options.action
45
- data =
46
- img_url: @el.attr('href')
47
- crop_attrs: @cropData
48
- $.post action, data, @render, 'json'
27
+ asset_id = $('.fancybox-image:first').attr('src').match(/\d+/)
28
+ $asset = $("#asset_#{asset_id}")
29
+ geometry = [@cropData['w'], @cropData['h'], @cropData['x'], @cropData['y']].join(',')
30
+ $.post "/admin/assets/#{$asset.data('id')}/crop", {geometry: geometry}, (data) =>
31
+ $asset.replaceWith $(@uploader_api._options.template_id).tmpl(data.asset)
32
+ $.fancybox.close()
@@ -1,6 +1,6 @@
1
1
  class window.GeoInput
2
- @default_lat = 55.7427928
3
- @default_lon = 55.7427928
2
+ @default_lat = 55.7541934
3
+ @default_lon = 37.6184907
4
4
 
5
5
  constructor: (@cont, @options={}) ->
6
6
  @prefix = @cont.attr('id').replace(/_geo_input$/, '')
@@ -56,9 +56,13 @@ window.initFancySelect = ->
56
56
  $('form .fancy_select, form input.token, .without_form.fancy_select').each ->
57
57
  $el = $(this)
58
58
  return if $el.data('select2')
59
- options = _.defaults({multiple: $el.data('multi')}, defaults)
59
+ options = _.defaults({}, defaults)
60
+ options.multiple = $el.data('multi') unless _.isUndefined($el.data('multi'))
60
61
  options.width = $el[0].style.width || 'resolve'
61
- if $el.data('class')
62
+ if $el.data('tags')
63
+ options.tokenSeparators = [","]
64
+ options.tags = $el.data('tags')
65
+ else if $el.data('class')
62
66
  options.initSelection = (el, callback) ->
63
67
  data = $el.data('pre')
64
68
  if $el.data('multi')
@@ -1,7 +1,14 @@
1
+ html, body {
2
+ height: 100%;
3
+ }
4
+
1
5
  #main {
2
6
  position: relative;
3
7
  clear: both;
4
- margin-bottom: 50px;
8
+ min-height: 100%;
9
+ height: auto !important;
10
+ height: 100%;
11
+ margin: 0 auto -20px;
5
12
  .wrap_content {
6
13
  width: 100%;
7
14
  float: left;
@@ -29,6 +36,13 @@
29
36
  }
30
37
  }
31
38
 
39
+ #footer {
40
+ height: 20px;
41
+ padding: 10px 50px;
42
+ margin-top: 20px;
43
+ text-align: right;
44
+ }
45
+
32
46
  .tree_view {
33
47
  #columns_hider_show {
34
48
  display: none;
@@ -42,3 +56,5 @@
42
56
  bottom: 20px;
43
57
  z-index: 100000;
44
58
  }
59
+
60
+
@@ -102,6 +102,6 @@ textarea {
102
102
 
103
103
  .simple_form {
104
104
  .fancy_select, input.token {
105
- min-width: 400px;
105
+ width: 500px;
106
106
  }
107
107
  }
@@ -6,3 +6,4 @@
6
6
  //= require fancybox
7
7
  //= require ab_admin/bootstrap_and_overrides
8
8
  //= require ab_admin/fileupload
9
+ //q= require ab_admin/jquery.Jcrop.min
@@ -1,6 +1,6 @@
1
1
  class Admin::AssetsController < ApplicationController
2
- before_filter :find_klass, :only => [:create, :sort]
3
- before_filter :find_asset, :only => [:destroy, :main, :rotate, :crop]
2
+ before_filter :find_klass, only: [:create, :sort]
3
+ before_filter :find_asset, only: [:destroy, :main, :rotate, :crop]
4
4
 
5
5
  respond_to :html, :xml
6
6
 
@@ -18,7 +18,7 @@ class Admin::AssetsController < ApplicationController
18
18
 
19
19
  respond_with(@asset) do |format|
20
20
  format.html { head :ok }
21
- format.xml { render :xml => @asset.to_xml }
21
+ format.xml { render xml: @asset.to_xml }
22
22
  end
23
23
  end
24
24
 
@@ -27,7 +27,7 @@ class Admin::AssetsController < ApplicationController
27
27
 
28
28
  respond_with(@asset) do |format|
29
29
  format.html { head :ok }
30
- format.xml { render :xml => @asset.to_xml }
30
+ format.xml { render xml: @asset.to_xml }
31
31
  end
32
32
  end
33
33
 
@@ -42,26 +42,26 @@ class Admin::AssetsController < ApplicationController
42
42
  end
43
43
 
44
44
  def rotate
45
- render :json => @asset.rotate!
45
+ render json: @asset.rotate!
46
46
  end
47
47
 
48
48
  def main
49
- render :json => @asset.main!
49
+ render json: @asset.main!
50
50
  end
51
51
 
52
52
  def crop
53
- render :json => @asset.crop!(params[:crop_attrs])
53
+ render json: @asset.crop!(params[:geometry])
54
54
  end
55
55
 
56
56
  protected
57
57
 
58
58
  def find_assets
59
59
  assoc = params[:assetable_type].constantize.reflect_on_association(params[:assoc].to_sym)
60
- scope = assoc.klass.where(:assetable_type => params[:assetable_type], :is_main => !assoc.collection?)
60
+ scope = assoc.klass.where(assetable_type: params[:assetable_type], is_main: !assoc.collection?)
61
61
  if params[:assetable_id].present?
62
- scope.where(:assetable_id => params[:assetable_id])
62
+ scope.where(assetable_id: params[:assetable_id])
63
63
  elsif params[:guid].present?
64
- scope.where(:guid => params[:guid])
64
+ scope.where(guid: params[:guid])
65
65
  else
66
66
  []
67
67
  end
@@ -1,5 +1,5 @@
1
1
  class Admin::BaseController < ::InheritedResources::Base
2
- use Rack::Pjax, :only => :index
2
+ use Rack::Pjax, only: :index
3
3
 
4
4
  layout :set_layout
5
5
 
@@ -7,12 +7,12 @@ class Admin::BaseController < ::InheritedResources::Base
7
7
  define_admin_callbacks :save, :create
8
8
 
9
9
  before_filter :authenticate_user!, :require_moderator
10
- before_filter :add_breadcrumbs, :set_title, :set_user_vars, :unless => :xhr?
10
+ before_filter :add_breadcrumbs, :set_title, :set_user_vars, unless: :xhr?
11
11
 
12
- class_attribute :export_builder, :batch_action_list, :instance_reader => false, :instance_writer => false
13
- self.batch_action_list = [AbAdmin::Config::BatchAction.new(:destroy, :confirm => I18n.t('admin.delete_confirmation'))]
12
+ class_attribute :export_builder, :batch_action_list, instance_reader: false, instance_writer: false
13
+ self.batch_action_list = [AbAdmin::Config::BatchAction.new(:destroy, confirm: I18n.t('admin.delete_confirmation'))]
14
14
 
15
- has_scope :ids, :type => :array
15
+ has_scope :ids, type: :array
16
16
 
17
17
  helper_method :admin?, :moderator?
18
18
 
@@ -21,19 +21,19 @@ class Admin::BaseController < ::InheritedResources::Base
21
21
 
22
22
  respond_to :json
23
23
 
24
- rescue_from ::CanCan::AccessDenied, :with => :render_unauthorized
24
+ rescue_from ::CanCan::AccessDenied, with: :render_unauthorized
25
25
 
26
26
  def index
27
27
  super do |format|
28
28
  format.js { render collection }
29
29
  format.csv do
30
30
  doc = AbAdmin::Utils::CsvDocument.new(collection, export_options)
31
- send_data(doc.render, :filename => doc.filename, :type => Mime::CSV, :disposition => 'attachment')
31
+ send_data(doc.render, filename: doc.filename, type: Mime::CSV, disposition: 'attachment')
32
32
  end
33
33
  if defined?(Mime::XLSX)
34
34
  format.xls do
35
35
  doc = AbAdmin::Utils::XlsDocument.new(collection, export_options)
36
- send_data(doc.render, :filename => doc.filename, :type => Mime::XLSX, :disposition => 'attachment')
36
+ send_data(doc.render, filename: doc.filename, type: Mime::XLSX, disposition: 'attachment')
37
37
  end
38
38
  end
39
39
  end
@@ -42,8 +42,8 @@ class Admin::BaseController < ::InheritedResources::Base
42
42
  def create
43
43
  create! do |success, failure|
44
44
  success.html { redirect_to redirect_to_on_success }
45
- success.js { render :layout => false }
46
- failure.js { render :new, :layout => false }
45
+ success.js { render layout: false }
46
+ failure.js { render :new, layout: false }
47
47
  end
48
48
  end
49
49
 
@@ -51,8 +51,8 @@ class Admin::BaseController < ::InheritedResources::Base
51
51
  update! do |success, failure|
52
52
  success.html { redirect_to redirect_to_on_success }
53
53
  failure.html { render :edit }
54
- success.js { render :layout => false }
55
- failure.js { render :edit, :layout => false }
54
+ success.js { render layout: false }
55
+ failure.js { render :edit, layout: false }
56
56
  end
57
57
  end
58
58
 
@@ -62,13 +62,13 @@ class Admin::BaseController < ::InheritedResources::Base
62
62
 
63
63
  def edit
64
64
  edit! do |format|
65
- format.js { render :layout => false }
65
+ format.js { render layout: false }
66
66
  end
67
67
  end
68
68
 
69
69
  def new
70
70
  new! do |format|
71
- format.js { render :layout => false }
71
+ format.js { render layout: false }
72
72
  end
73
73
  end
74
74
 
@@ -77,7 +77,7 @@ class Admin::BaseController < ::InheritedResources::Base
77
77
  batch_action = params[:batch_action].to_sym
78
78
  if allow_batch_action?(batch_action) && collection.all?{|item| can?(batch_action, item) }
79
79
  count = collection.inject(0) { |c, item| apply_batch_action(item, batch_action) ? c + 1 : c }
80
- flash[:success] = I18n.t('admin.batch_actions.status', :count => count, :action => I18n.t("admin.actions.batch_#{batch_action}.title"))
80
+ flash[:success] = I18n.t('admin.batch_actions.status', count: count, action: I18n.t("admin.actions.batch_#{batch_action}.title"))
81
81
  else
82
82
  raise CanCan::AccessDenied
83
83
  end
@@ -107,7 +107,7 @@ class Admin::BaseController < ::InheritedResources::Base
107
107
 
108
108
  def interpolation_options
109
109
  return {} if collection_action? || resource.errors.empty?
110
- {:errors => resource.errors.full_messages.map { |m| "<br/> - #{m}" }.join.html_safe}
110
+ {errors: resource.errors.full_messages.map { |m| "<br/> - #{m}" }.join.html_safe}
111
111
  end
112
112
 
113
113
  def self.export(options={}, &block)
@@ -123,11 +123,13 @@ class Admin::BaseController < ::InheritedResources::Base
123
123
  end
124
124
 
125
125
  def set_title
126
- lookups = [:"admin.#{controller_name}.actions.#{action_name}.title",
127
- :"admin.#{controller_name}.actions.#{action_name}",
128
- :"admin.actions.#{action_name}.title",
129
- :"admin.actions.#{action_name}"]
130
- @page_title ||= [resource_class.model_name.human(:count => 1), t(lookups.shift, :default => lookups)].join(' - ')
126
+ name_for_lookup = params[:custom_action] || action_name
127
+ lookups = [:"admin.#{controller_name}.actions.#{name_for_lookup}.title",
128
+ :"admin.#{controller_name}.actions.#{name_for_lookup}",
129
+ :"admin.actions.#{name_for_lookup}.title",
130
+ :"admin.actions.#{name_for_lookup}",
131
+ name_for_lookup]
132
+ @page_title ||= [resource_class.model_name.human(count: 1), t(lookups.shift, default: lookups)].join(' - ')
131
133
  end
132
134
 
133
135
  def preview_resource_path(item)
@@ -135,8 +137,8 @@ class Admin::BaseController < ::InheritedResources::Base
135
137
  end
136
138
 
137
139
  def settings
138
- {:index_view => 'table', :sidebar => collection_action?, :well => (collection_action? || action_name == 'show'),
139
- :search => true, :batch => true, :hotkeys => true}
140
+ {index_view: 'table', sidebar: collection_action?, well: (collection_action? || action_name == 'show'),
141
+ search: true, batch: true, hotkeys: true}
140
142
  end
141
143
 
142
144
  def action_items
@@ -171,32 +173,32 @@ class Admin::BaseController < ::InheritedResources::Base
171
173
  def add_breadcrumbs
172
174
  @breadcrumbs = []
173
175
  if parent?
174
- @breadcrumbs << {:name => parent_class.model_name.human(:count => 9), :url => parent_collection_path}
175
- @breadcrumbs << {:name => AbAdmin.display_name(parent), :url => parent_path}
176
+ @breadcrumbs << {name: parent_class.model_name.human(count: 9), url: parent_collection_path}
177
+ @breadcrumbs << {name: AbAdmin.display_name(parent), url: parent_path}
176
178
  end
177
- @breadcrumbs << {:name => resource_class.model_name.human(:count => 9), :url => collection_path}
178
- if params[:id]
179
- @breadcrumbs << {:name => AbAdmin.display_name(resource), :url => resource_path}
179
+ @breadcrumbs << {name: resource_class.model_name.human(count: 9), url: collection_path}
180
+ if params[:id] && resource.persisted?
181
+ @breadcrumbs << {name: AbAdmin.display_name(resource), url: resource_path}
180
182
  end
181
183
  end
182
184
 
183
185
  def parent_collection_path
184
- {:action => :index, :controller => "admin/#{parent_class.model_name.plural}"}
186
+ {action: :index, controller: "admin/#{parent_class.model_name.plural}"}
185
187
  end
186
188
 
187
189
  def tree_node_renderer
188
- @tree_node_renderer ||= lambda { |r| link_to AbAdmin.display_name(r), resource_path(r), :class => 'tree-item_link' }
190
+ @tree_node_renderer ||= lambda { |r| link_to AbAdmin.display_name(r), resource_path(r), class: 'tree-item_link' }
189
191
  end
190
192
 
191
193
  def search_collection
192
194
  params[:q] ||= {}
193
195
  params[:q][:s] ||= 'id desc'
194
196
  @search = end_of_association_chain.accessible_by(current_ability).admin.ransack(params[:q].no_blank)
195
- @search.result(:distinct => true)
197
+ @search.result(distinct: true)
196
198
  end
197
199
 
198
200
  def collection
199
- @collection ||= search_collection.paginate(:page => params[:page], :per_page => per_page, :large => true)
201
+ @collection ||= search_collection.paginate(page: params[:page], per_page: per_page, large: true)
200
202
  end
201
203
 
202
204
  def per_page
@@ -222,13 +224,13 @@ class Admin::BaseController < ::InheritedResources::Base
222
224
 
223
225
  def redirect_to_on_success
224
226
  if params[:_add_another]
225
- new_resource_path(:return_to => params[:return_to])
227
+ new_resource_path(return_to: params[:return_to])
226
228
  elsif params[:_add_edit]
227
- edit_resource_path(resource, :return_to => params[:return_to])
229
+ edit_resource_path(resource, return_to: params[:return_to])
228
230
  elsif params[:_add_edit_next] || params[:_add_edit_prev]
229
231
  rec = resource.next_prev_by_url(end_of_association_chain.accessible_by(current_ability).unscoped.base, params[:return_to], !!params[:_add_edit_prev])
230
232
  if rec
231
- edit_resource_path(rec, :return_to => params[:return_to])
233
+ edit_resource_path(rec, return_to: params[:return_to])
232
234
  else
233
235
  back_or_collection
234
236
  end
@@ -276,7 +278,7 @@ class Admin::BaseController < ::InheritedResources::Base
276
278
  end
277
279
 
278
280
  def as_role
279
- {:as => fetch_role}
281
+ {as: fetch_role}
280
282
  end
281
283
 
282
284
  def get_role
@@ -298,7 +300,7 @@ class Admin::BaseController < ::InheritedResources::Base
298
300
  Rails.logger.debug "Access denied on #{exception.action} #{exception.subject.inspect}, user: #{current_user.try(:id)}"
299
301
 
300
302
  respond_to do |format|
301
- format.html { redirect_to (moderator? ? admin_root_path : root_path), :alert => exception.message }
303
+ format.html { redirect_to (moderator? ? admin_root_path : root_path), alert: exception.message }
302
304
  format.any { head :unauthorized }
303
305
  end
304
306
  end
@@ -1,20 +1,20 @@
1
1
  class ::Admin::LocatorsController < ::Admin::BaseController
2
2
  authorize_resource
3
3
 
4
- before_filter :find_files, :only => [:show, :edit, :update]
5
- before_filter :find_file, :only => [:edit, :update]
4
+ before_filter :find_files, only: [:show, :edit, :update]
5
+ before_filter :find_file, only: [:edit, :update]
6
6
 
7
7
  def edit
8
8
  @locale_hash = YAML.load_file(@file)
9
9
  end
10
10
 
11
11
  def update
12
- if Locator.save(@file, {params[:edit_locale_name] => params[:locale]})
12
+ if Locator.save(@file, {params[:edit_locale_name] => params[:locale_hash]})
13
13
  flash[:notice] = I18n.t('flash.admin.locators.updated')
14
14
  redirect_to admin_locators_path
15
15
  else
16
16
  flash[:error] = I18n.t('flash.admin.locators.update_error')
17
- redirect_to edit_admin_locators_path(:filename => params[:filename])
17
+ redirect_to edit_admin_locators_path(filename: params[:filename])
18
18
  end
19
19
  end
20
20
 
@@ -32,6 +32,7 @@ class ::Admin::LocatorsController < ::Admin::BaseController
32
32
 
33
33
  def reload
34
34
  I18n.reload!
35
+ Locator.reload_checker.expire
35
36
  flash[:notice] = I18n.t('flash.admin.locators.restart')
36
37
  redirect_to admin_locators_path
37
38
  end