ab_admin 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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