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.
- data/Gemfile +6 -6
- data/Guardfile +6 -6
- data/README.md +5 -5
- data/app/assets/images/admin/Jcrop.gif +0 -0
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +20 -19
- data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +22 -38
- data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +2 -2
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +6 -2
- data/app/assets/stylesheets/ab_admin/components/_base.css.scss +17 -1
- data/app/assets/stylesheets/ab_admin/components/_form.css.scss +1 -1
- data/app/assets/stylesheets/ab_admin/main.css.scss +1 -0
- data/app/controllers/admin/assets_controller.rb +10 -10
- data/app/controllers/admin/base_controller.rb +39 -37
- data/app/controllers/admin/locators_controller.rb +5 -4
- data/app/controllers/admin/manager_controller.rb +11 -10
- data/app/controllers/admin/settings_controller.rb +4 -3
- data/app/controllers/admin/static_pages_controller.rb +1 -1
- data/app/controllers/admin/structures_controller.rb +2 -2
- data/app/views/ab_admin/devise/passwords/edit.html.slim +5 -5
- data/app/views/ab_admin/devise/passwords/new.html.slim +3 -3
- data/app/views/ab_admin/devise/sessions/new.html.slim +5 -5
- data/app/views/admin/admin_comments/_comment.html.slim +3 -3
- data/app/views/admin/admin_comments/_comments.html.slim +2 -2
- data/app/views/admin/admin_comments/_form.html.slim +5 -5
- data/app/views/admin/admin_comments/create.js.erb +1 -1
- data/app/views/admin/base/_form.html.slim +1 -1
- data/app/views/admin/base/_search_layout.html.slim +4 -4
- data/app/views/admin/base/_tree.html.slim +1 -1
- data/app/views/admin/base/create.js.erb +1 -1
- data/app/views/admin/base/index.html.slim +3 -3
- data/app/views/admin/base/update.js.erb +1 -1
- data/app/views/admin/dashboards/index.html.slim +15 -1
- data/app/views/admin/fileupload/_asset.html.slim +1 -1
- data/app/views/admin/fileupload/_container.html.slim +2 -2
- data/app/views/admin/fileupload/_file.html.slim +1 -1
- data/app/views/admin/fileupload/_tmpl.html.slim +1 -1
- data/app/views/admin/headers/_form.html.slim +3 -3
- data/app/views/admin/locators/edit.html.slim +4 -4
- data/app/views/admin/locators/show.html.slim +3 -3
- data/app/views/admin/manager/_form.html.slim +2 -1
- data/app/views/admin/manager/_table.html.slim +6 -3
- data/app/views/admin/settings/_form.html.slim +8 -8
- data/app/views/admin/shared/_batch_actions.html.slim +1 -1
- data/app/views/admin/static_pages/_form.html.slim +3 -3
- data/app/views/admin/structures/_form.html.slim +7 -7
- data/app/views/admin/users/_form.html.slim +9 -9
- data/app/views/admin/users/_search_form.html.slim +4 -4
- data/app/views/admin/users/_table.html.slim +3 -3
- data/app/views/layouts/admin/_footer.html.slim +4 -0
- data/app/views/layouts/admin/_navigation.html.slim +2 -2
- data/app/views/layouts/admin/application.html.slim +3 -3
- data/app/views/layouts/admin/devise.html.slim +2 -2
- data/config/locales/ru.yml +1 -0
- data/config/routes.rb +23 -23
- data/db/migrate/20130101000001_create_users.rb +11 -11
- data/db/migrate/20130101000003_create_assets.rb +8 -8
- data/db/migrate/20130101000004_create_headers.rb +3 -3
- data/db/migrate/20130101000005_create_static_pages.rb +2 -2
- data/db/migrate/20130101000006_create_structures.rb +8 -8
- data/db/migrate/20130101000007_base_translations.rb +3 -3
- data/db/migrate/20130101000008_create_admin_comments.rb +3 -3
- data/features/dsl/action_items.feature +1 -1
- data/features/dsl/admin_comments.feature +2 -2
- data/features/dsl/batch_actions.feature +1 -1
- data/features/dsl/config.feature +2 -2
- data/features/dsl/custom_actions.feature +5 -5
- data/features/dsl/form.feature +4 -4
- data/features/dsl/in_place_edit.feature +1 -1
- data/features/dsl/list_edit.feature +1 -1
- data/features/dsl/resource_action_items.feature +1 -1
- data/features/dsl/table.feature +3 -3
- data/features/dsl/tree.feature +3 -3
- data/features/locators.feature +1 -1
- data/features/menu.feature +3 -3
- data/features/step_definitions/dsl/action_items_steps.rb +3 -3
- data/features/step_definitions/dsl/admin_comments_steps.rb +1 -1
- data/features/step_definitions/dsl/batch_actions_steps.rb +1 -1
- data/features/step_definitions/dsl/parent_resource_steps.rb +2 -2
- data/features/step_definitions/dsl/table_steps.rb +3 -3
- data/features/step_definitions/dsl/tree_steps.rb +3 -3
- data/features/step_definitions/menu_steps.rb +3 -3
- data/features/step_definitions/structure_steps.rb +1 -1
- data/features/step_definitions/user_steps.rb +7 -7
- data/features/step_definitions/web_steps/browsing_steps.rb +2 -2
- data/features/step_definitions/web_steps/form_steps.rb +7 -7
- data/features/support/selectors.rb +5 -5
- data/features/support/tolerance_for_selenium_sync_issues.rb +1 -1
- data/lib/ab_admin/abstract_resource.rb +3 -3
- data/lib/ab_admin/carrierwave/base_uploader.rb +7 -7
- data/lib/ab_admin/carrierwave/file_size_validator.rb +4 -4
- data/lib/ab_admin/carrierwave/glue.rb +1 -1
- data/lib/ab_admin/concerns/admin_addition.rb +17 -13
- data/lib/ab_admin/concerns/headerable.rb +2 -2
- data/lib/ab_admin/concerns/nested_set.rb +23 -1
- data/lib/ab_admin/concerns/reloadable.rb +56 -0
- data/lib/ab_admin/concerns/utilities.rb +3 -3
- data/lib/ab_admin/concerns/validations.rb +2 -2
- data/lib/ab_admin/config/base.rb +5 -5
- data/lib/ab_admin/config/optional_display.rb +4 -4
- data/lib/ab_admin/controllers/callbacks.rb +1 -1
- data/lib/ab_admin/controllers/can_can_manager_resource.rb +1 -1
- data/lib/ab_admin/controllers/head_options.rb +5 -9
- data/lib/ab_admin/controllers/tree.rb +2 -2
- data/lib/ab_admin/core_ext/other.rb +2 -2
- data/lib/ab_admin/core_ext/string.rb +2 -2
- data/lib/ab_admin/devise.rb +3 -3
- data/lib/ab_admin/engine.rb +1 -1
- data/lib/ab_admin/hooks/paginate_hooks.rb +2 -2
- data/lib/ab_admin/hooks/simple_form_hooks.rb +2 -2
- data/lib/ab_admin/i18n_tools/google_translate.rb +5 -5
- data/lib/ab_admin/i18n_tools/model_translator.rb +7 -7
- data/lib/ab_admin/i18n_tools/translate_app.rb +1 -1
- data/lib/ab_admin/menu_builder.rb +3 -3
- data/lib/ab_admin/models/asset.rb +14 -6
- data/lib/ab_admin/models/attachment_file.rb +2 -2
- data/lib/ab_admin/models/header.rb +1 -1
- data/lib/ab_admin/models/locator.rb +3 -3
- data/lib/ab_admin/models/structure.rb +8 -8
- data/lib/ab_admin/models/type_model.rb +3 -3
- data/lib/ab_admin/models/user.rb +7 -7
- data/lib/ab_admin/utils/csv_document.rb +2 -2
- data/lib/ab_admin/utils/logger.rb +1 -1
- data/lib/ab_admin/utils/xls_document.rb +4 -4
- data/lib/ab_admin/utils.rb +11 -11
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +13 -13
- data/lib/ab_admin/views/admin_navigation_helpers.rb +26 -26
- data/lib/ab_admin/views/form_builder.rb +36 -22
- data/lib/ab_admin/views/helpers.rb +6 -6
- data/lib/ab_admin/views/inputs/ckeditor_input.rb +1 -1
- data/lib/ab_admin/views/inputs/color_input.rb +1 -1
- data/lib/ab_admin/views/inputs/date_time_input.rb +7 -7
- data/lib/ab_admin/views/manager_helpers.rb +3 -3
- data/lib/ab_admin/views/search_form_builder.rb +18 -18
- data/lib/ab_admin/views/url_for_routes.rb +4 -4
- data/lib/ab_admin.rb +1 -2
- data/lib/generators/ab_admin/glob/glob_generator.rb +1 -1
- data/lib/generators/ab_admin/install/install_generator.rb +2 -2
- data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -0
- data/lib/generators/ab_admin/install/templates/config/seeds.rb +1 -1
- data/lib/generators/ab_admin/install/templates/config/unicorn_config.rb +3 -3
- data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +2 -2
- data/lib/generators/ab_admin/install/templates/models/ability.rb +4 -4
- data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +4 -4
- data/lib/generators/ab_admin/install/templates/models/asset.rb +2 -1
- data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +1 -1
- data/lib/generators/ab_admin/install/templates/models/avatar.rb +2 -2
- data/lib/generators/ab_admin/install/templates/models/locator.rb +3 -0
- data/lib/generators/ab_admin/install/templates/models/picture.rb +2 -2
- data/lib/generators/ab_admin/install/templates/models/settings.rb +3 -0
- data/lib/generators/ab_admin/install/templates/models/static_page.rb +3 -3
- data/lib/generators/ab_admin/install/templates/models/structure.rb +2 -2
- data/lib/generators/ab_admin/install/templates/models/user.rb +2 -2
- data/lib/generators/ab_admin/install/templates/spec/spec_helper.rb +2 -2
- data/lib/generators/ab_admin/install/templates/spec/support/shared_connection.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +2 -2
- data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +4 -3
- data/lib/generators/ab_admin/model/model_generator.rb +4 -2
- data/lib/generators/ab_admin/model/templates/resource.erb +6 -6
- data/lib/generators/ab_admin/resource/resource_generator.rb +9 -9
- data/lib/generators/ab_admin/resource/templates/_form.haml.erb +10 -14
- data/lib/generators/ab_admin/resource/templates/_form.slim.erb +11 -11
- data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/controller.erb +1 -1
- data/lib/generators/template.rb +8 -8
- data/lib/tasks/assets.rake +5 -5
- data/lib/tasks/cache.rake +1 -1
- data/lib/tasks/i18n.rake +1 -1
- data/spec/ab_admin_spec.rb +3 -3
- data/spec/dummy/app/models/ab_admin/ab_admin_catalogue.rb +1 -1
- data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +6 -6
- data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +14 -14
- data/spec/dummy/app/models/admin_menu.rb +2 -2
- data/spec/dummy/app/models/ckeditor/asset.rb +1 -1
- data/spec/dummy/app/models/ckeditor/attachment_file.rb +1 -1
- data/spec/dummy/app/models/ckeditor/picture.rb +1 -1
- data/spec/dummy/app/models/collection.rb +5 -5
- data/spec/dummy/app/models/product.rb +5 -5
- data/spec/dummy/app/uploaders/ckeditor_attachment_file_uploader.rb +1 -1
- data/spec/dummy/app/uploaders/ckeditor_picture_uploader.rb +3 -3
- data/spec/dummy/app/views/layouts/application.html.erb +2 -2
- data/spec/dummy/config/application.rb +2 -2
- data/spec/dummy/config/environments/test.rb +1 -1
- data/spec/dummy/config/initializers/ckeditor.rb +2 -2
- data/spec/dummy/config/initializers/devise.rb +5 -5
- data/spec/dummy/config/initializers/session_store.rb +1 -1
- data/spec/dummy/config/initializers/simple_form.rb +8 -8
- data/spec/dummy/config/initializers/simple_form_bootstrap.rb +14 -14
- data/spec/dummy/config/initializers/wrap_parameters.rb +1 -1
- data/spec/dummy/config/routes.rb +2 -2
- data/spec/dummy/db/migrate/20130129151853_create_ckeditor_assets.rb +5 -5
- data/spec/dummy/db/migrate/20130130161853_create_collections.rb +2 -2
- data/spec/dummy/db/migrate/20130130162046_create_products.rb +2 -2
- data/spec/dummy/db/migrate/20130130175446_create_globalize_collection_product.rb +2 -2
- data/spec/dummy/db/migrate/20130207224516_create_catalogues.rb +3 -3
- data/spec/dummy/db/migrate/20130209223506_add_lat_lon_zoom_to_products.rb +1 -1
- data/spec/dummy/db/seeds.rb +5 -5
- data/spec/dummy/lib/capybara_irb.rb +10 -10
- data/spec/dummy/lib/tasks/cucumber.rake +10 -10
- data/spec/dummy/lib/templates/slim/scaffold/_form.html.slim +2 -2
- data/spec/factories/assets.rb +9 -9
- data/spec/factories/catalogues.rb +1 -1
- data/spec/factories/collections.rb +1 -1
- data/spec/factories/products.rb +2 -2
- data/spec/factories/structures.rb +2 -2
- data/spec/generators/ckeditor_assets_generator_spec.rb +1 -1
- data/spec/generators/install_generator_spec.rb +1 -1
- data/spec/generators/model_generator_spec.rb +2 -2
- data/spec/generators/resource_generator_spec.rb +1 -1
- data/spec/models/avatar_spec.rb +1 -1
- data/spec/models/picture_uploader_spec.rb +1 -1
- data/spec/models/structure_spec.rb +2 -2
- data/spec/models/user_spec.rb +1 -1
- data/spec/spec_helper.rb +3 -3
- data/spec/support/shared_connection.rb +1 -1
- data/vendor/assets/javascripts/ab_admin/jquery.Jcrop.js +1083 -0
- data/vendor/assets/stylesheets/ab_admin/jquery.Jcrop.min.css.scss +28 -0
- metadata +8 -6
- data/lib/ab_admin/views/inputs/association_input.rb +0 -13
- 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', :
|
19
|
+
gem 'galetahub-enum_field', require: 'enum_field'
|
20
20
|
gem 'awesome_nested_set'
|
21
|
-
gem 'sunrise-file-upload', :
|
22
|
-
gem 'globalize3', :
|
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', :
|
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', :
|
69
|
-
gem 'growl', :
|
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', :
|
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') {
|
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$}) {
|
15
|
-
watch('config/routes.rb') {
|
16
|
-
watch('app/controllers/application_controller.rb') {
|
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', :
|
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 :
|
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, :
|
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, :
|
69
|
+
field :collection, as: :association
|
70
70
|
locale_tabs do
|
71
71
|
field :name
|
72
72
|
field :description
|
73
73
|
end
|
74
|
-
field :picture, :
|
75
|
-
field :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(
|
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 $(
|
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
|
-
|
3
|
-
|
4
|
-
|
5
|
-
@uploader_el.bind 'fileupload:onComplete', @refreshHandlers
|
2
|
+
@crop_defaults =
|
3
|
+
aspectRatio: 760 / 350
|
4
|
+
setSelect: [0, 0, 760, 350]
|
6
5
|
|
7
|
-
|
8
|
-
@
|
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
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
31
|
-
|
14
|
+
$('.fancybox-image:first').Jcrop @options
|
15
|
+
$('.fancybox-nav').hide()
|
32
16
|
|
33
|
-
|
34
|
-
$
|
35
|
-
|
36
|
-
@
|
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
|
-
|
39
|
-
|
40
|
-
@initHandelers()
|
22
|
+
setCropData: (coords) =>
|
23
|
+
@cropData = coords
|
41
24
|
|
42
25
|
cropHandler: (e) =>
|
43
26
|
e.preventDefault()
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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()
|
@@ -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({
|
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('
|
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
|
-
|
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
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Admin::AssetsController < ApplicationController
|
2
|
-
before_filter :find_klass, :
|
3
|
-
before_filter :find_asset, :
|
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 :
|
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 :
|
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 :
|
45
|
+
render json: @asset.rotate!
|
46
46
|
end
|
47
47
|
|
48
48
|
def main
|
49
|
-
render :
|
49
|
+
render json: @asset.main!
|
50
50
|
end
|
51
51
|
|
52
52
|
def crop
|
53
|
-
render :
|
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(:
|
60
|
+
scope = assoc.klass.where(assetable_type: params[:assetable_type], is_main: !assoc.collection?)
|
61
61
|
if params[:assetable_id].present?
|
62
|
-
scope.where(:
|
62
|
+
scope.where(assetable_id: params[:assetable_id])
|
63
63
|
elsif params[:guid].present?
|
64
|
-
scope.where(:
|
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, :
|
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, :
|
10
|
+
before_filter :add_breadcrumbs, :set_title, :set_user_vars, unless: :xhr?
|
11
11
|
|
12
|
-
class_attribute :export_builder, :batch_action_list, :
|
13
|
-
self.batch_action_list = [AbAdmin::Config::BatchAction.new(:destroy, :
|
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, :
|
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, :
|
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, :
|
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, :
|
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 :
|
46
|
-
failure.js { render :new, :
|
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 :
|
55
|
-
failure.js { render :edit, :
|
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 :
|
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 :
|
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', :
|
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
|
-
{:
|
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
|
-
|
127
|
-
|
128
|
-
:"admin.actions.#{
|
129
|
-
:"admin.actions.#{
|
130
|
-
|
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
|
-
{:
|
139
|
-
:
|
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 << {:
|
175
|
-
@breadcrumbs << {:
|
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 << {:
|
178
|
-
if params[:id]
|
179
|
-
@breadcrumbs << {:
|
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
|
-
{:
|
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), :
|
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(:
|
197
|
+
@search.result(distinct: true)
|
196
198
|
end
|
197
199
|
|
198
200
|
def collection
|
199
|
-
@collection ||= search_collection.paginate(:
|
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(:
|
227
|
+
new_resource_path(return_to: params[:return_to])
|
226
228
|
elsif params[:_add_edit]
|
227
|
-
edit_resource_path(resource, :
|
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, :
|
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
|
-
{:
|
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), :
|
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, :
|
5
|
-
before_filter :find_file, :
|
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[:
|
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(:
|
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
|