ab_admin 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Guardfile +1 -1
- data/app/assets/images/admin/flags/b_uk.png +0 -0
- data/app/assets/images/admin/preloader.gif +0 -0
- data/app/assets/javascripts/ab_admin/application.js +1 -28
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +29 -6
- data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +120 -91
- data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -2
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +4 -7
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -10
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +53 -24
- data/app/assets/javascripts/ab_admin/core/utils.js.coffee +7 -0
- data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -2
- data/app/assets/javascripts/ab_admin/main.js +28 -0
- data/app/assets/stylesheets/ab_admin/application.css.scss +1 -10
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -1
- data/app/assets/stylesheets/ab_admin/components/_form.css.scss +10 -13
- data/app/assets/stylesheets/ab_admin/components/_geo_input.css.scss +5 -9
- data/app/assets/stylesheets/ab_admin/fileupload.css.scss +68 -102
- data/app/assets/stylesheets/ab_admin/main.css.scss +8 -0
- data/app/controllers/admin/base_controller.rb +18 -14
- data/app/controllers/admin/manager_controller.rb +51 -6
- data/app/controllers/admin/users_controller.rb +23 -0
- data/app/views/admin/fileupload/_asset.html.slim +8 -0
- data/app/views/admin/fileupload/_container.html.slim +10 -0
- data/app/views/admin/fileupload/_file.html.slim +5 -0
- data/app/views/admin/fileupload/_ftmpl.html.slim +6 -0
- data/app/views/admin/fileupload/_tmpl.html.slim +9 -0
- data/app/views/admin/users/_form.html.slim +1 -0
- data/config/locales/en.yml +5 -60
- data/config/locales/ru.yml +14 -63
- data/config/routes.rb +7 -4
- data/features/dsl/custom_actions.feature +62 -0
- data/features/dsl/parent_resource.feature +18 -0
- data/features/step_definitions/configuration_steps.rb +6 -0
- data/features/step_definitions/dsl/parent_resource_steps.rb +8 -0
- data/features/step_definitions/settings_steps.rb +1 -1
- data/features/step_definitions/web_steps/transforms_steps.rb +3 -0
- data/features/support/paths.rb +3 -0
- data/lib/ab_admin.rb +5 -0
- data/lib/ab_admin/abstract_resource.rb +28 -4
- data/lib/ab_admin/carrierwave/base_uploader.rb +22 -22
- data/lib/ab_admin/concerns/admin_addition.rb +2 -2
- data/lib/ab_admin/concerns/utilities.rb +4 -4
- data/lib/ab_admin/config/base.rb +18 -0
- data/lib/ab_admin/controllers/head_options.rb +1 -1
- data/lib/ab_admin/core_ext/array.rb +4 -0
- data/lib/ab_admin/core_ext/string.rb +9 -10
- data/lib/ab_admin/hooks/quiet_scope_page.rb +16 -16
- data/lib/ab_admin/hooks/simple_form_hooks.rb +13 -13
- data/lib/ab_admin/i18n_tools/model_translator.rb +67 -0
- data/lib/ab_admin/models/asset.rb +32 -1
- data/lib/ab_admin/models/attachment_file.rb +1 -1
- data/lib/ab_admin/models/locator.rb +7 -0
- data/lib/ab_admin/models/settings.rb +7 -0
- data/lib/ab_admin/models/structure.rb +4 -0
- data/lib/ab_admin/utils.rb +2 -2
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +3 -3
- data/lib/ab_admin/views/admin_navigation_helpers.rb +1 -1
- data/lib/ab_admin/views/form_builder.rb +42 -39
- data/lib/ab_admin/views/helpers.rb +5 -0
- data/lib/ab_admin/views/manager_helpers.rb +10 -0
- data/lib/ab_admin/views/search_form_builder.rb +12 -5
- data/lib/generators/ab_admin/install/install_generator.rb +1 -1
- data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -2
- data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -1
- data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +2 -0
- data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/settings.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -0
- data/lib/generators/ab_admin/install/templates/{scripts → script}/unicorn.sh +0 -0
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +4 -0
- 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/_table.haml.erb +1 -2
- data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -2
- data/lib/generators/template.rb +1 -0
- data/lib/tasks/i18n.rake +7 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +35 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +2 -0
- data/spec/dummy/app/models/admin_menu.rb +4 -2
- data/spec/dummy/app/models/collection.rb +3 -1
- data/spec/generators/install_generator_spec.rb +1 -1
- data/spec/generators/resource_generator_spec.rb +1 -1
- data/spec/models/avatar_spec.rb +29 -2
- metadata +25 -12
- data/app/views/admin/fileupload/_asset.html.erb +0 -5
- data/app/views/admin/fileupload/_container.html.erb +0 -28
- data/app/views/admin/fileupload/_fcontainer.html.erb +0 -25
- data/app/views/admin/fileupload/_file.html.erb +0 -5
- data/app/views/admin/fileupload/_ftmpl.html.erb +0 -7
- data/app/views/admin/fileupload/_tmpl.html.erb +0 -9
- data/lib/ab_admin/utils/csv_builder.rb +0 -52
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -2,7 +2,7 @@ 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 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
8
|
watch('spec/spec_helper.rb') { "spec" }
|
Binary file
|
Binary file
|
@@ -1,28 +1 @@
|
|
1
|
-
//= require
|
2
|
-
//= require i18n/translations
|
3
|
-
//= require jquery_ujs
|
4
|
-
//= require jquery.cookie
|
5
|
-
//= require jquery.pjax
|
6
|
-
//= require jquery.ui.nestedSortable
|
7
|
-
//= require jquery_nested_form
|
8
|
-
//= require jquery.hotkeys
|
9
|
-
//= require bootstrap
|
10
|
-
//= require ab_admin/bootstrap-tab-multi
|
11
|
-
//= require ab_admin/bootstrap-datepicker/core
|
12
|
-
//= require ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ru.js
|
13
|
-
//= require ab_admin/bootstrap-timepicker
|
14
|
-
//= require bootstrap-wysihtml5
|
15
|
-
//= require bootstrap-wysihtml5/locales/ru
|
16
|
-
//= require bootstrap-editable-inline
|
17
|
-
//= require select2
|
18
|
-
//= require jquery.ui.nestedSortable
|
19
|
-
//= require ab_admin/components/sortable_tree
|
20
|
-
//= require ab_admin/components/google_translate
|
21
|
-
//= require ab_admin/components/locator
|
22
|
-
//= require ab_admin/components/admin_assets
|
23
|
-
//= require ab_admin/components/gmaps
|
24
|
-
//= require ab_admin/components/in_place_edit
|
25
|
-
|
26
|
-
//= require ab_admin/core/init
|
27
|
-
//= require ab_admin/inputs/datetime_input
|
28
|
-
|
1
|
+
//= require ab_admin/main
|
@@ -8,7 +8,7 @@ class window.AdminAssets
|
|
8
8
|
|
9
9
|
initHandlers: ->
|
10
10
|
self = this
|
11
|
-
query = "
|
11
|
+
query = "##{@element_id} .fileupload-list"
|
12
12
|
if @sortable
|
13
13
|
$(".do_sort " + query).sortable
|
14
14
|
revert: true
|
@@ -26,6 +26,34 @@ class window.AdminAssets
|
|
26
26
|
if $.fn.fancybox
|
27
27
|
@initFancybox(query)
|
28
28
|
|
29
|
+
unless window.admin_assets_first
|
30
|
+
window.admin_assets_first = true
|
31
|
+
@initMainImage()
|
32
|
+
@initRemove()
|
33
|
+
@initRotate()
|
34
|
+
|
35
|
+
initRemove: ->
|
36
|
+
$(document).on "ajax:complete", ".fileupload .del_asset", ->
|
37
|
+
$(this).closest("div.asset").remove()
|
38
|
+
|
39
|
+
initMainImage: ->
|
40
|
+
$(document).on 'click', '.fileupload.many_assets .main_image', ->
|
41
|
+
$asset = $(this).closest('.asset')
|
42
|
+
$curr_cont = $asset.closest('.fileupload')
|
43
|
+
$curr_list = $curr_cont.find('.fileupload-list')
|
44
|
+
asset_klass = $curr_cont.data('asset')
|
45
|
+
$main_list = $(".fileupload.one_asset[data-asset='#{asset_klass}'] .fileupload-list")
|
46
|
+
|
47
|
+
$.post "/admin/assets/#{$asset.data('id')}/main", ->
|
48
|
+
$main_list.find('.asset').appendTo($curr_list)
|
49
|
+
$asset.appendTo($main_list)
|
50
|
+
|
51
|
+
initRotate: ->
|
52
|
+
$(document).on 'click', '.fileupload .rotate_image', ->
|
53
|
+
$asset = $(this).closest('.asset')
|
54
|
+
$.post "/admin/assets/#{$asset.data('id')}/rotate", (data) ->
|
55
|
+
$asset.replaceWith $('#fileupload_tmpl').tmpl(data.asset)
|
56
|
+
|
29
57
|
initFancybox: (query) ->
|
30
58
|
$(query + " a.fancybox").fancybox
|
31
59
|
titleShow: false
|
@@ -38,11 +66,6 @@ class window.AdminAssets
|
|
38
66
|
obj.removeClass "drag_sort"
|
39
67
|
false
|
40
68
|
|
41
|
-
$ ->
|
42
|
-
$(".fileupload .asset a.del").live "ajax:complete", ->
|
43
|
-
$(this).closest("div.asset").remove()
|
44
|
-
|
45
|
-
|
46
69
|
#class window.AssetDescription
|
47
70
|
# constructor: (@assoc, @assetable_type, @assetable_id, @guid) ->
|
48
71
|
# @cont = $("[id^='#{@assoc}_']")
|
@@ -1,120 +1,116 @@
|
|
1
1
|
class window.GeoInput
|
2
|
-
|
2
|
+
@default_lat = 55.7427928
|
3
|
+
@default_lon = 55.7427928
|
4
|
+
|
5
|
+
constructor: (@cont, @options={}) ->
|
6
|
+
@prefix = @cont.attr('id').replace(/_geo_input$/, '')
|
3
7
|
defaults =
|
4
|
-
lat:
|
5
|
-
lon:
|
6
|
-
|
7
|
-
|
8
|
-
types: ['geocode']
|
9
|
-
map_options: {}
|
8
|
+
lat: GeoInput.default_lat
|
9
|
+
lon: GeoInput.default_lon
|
10
|
+
autocomplete: true
|
11
|
+
|
10
12
|
_.defaults(@options, defaults)
|
11
|
-
@callback = window[@options.callback] if _.isFunction(window[@options.callback])
|
12
|
-
@marker_callback = window[@options.marker_callback] if _.isFunction(window[@options.marker_callback])
|
13
|
-
@lat_el = $('#' + @dom_lat)
|
14
|
-
@lon_el = $('#' + @dom_lon);
|
15
|
-
@zoom_el = $('#' + @dom_zoom);
|
16
13
|
|
17
|
-
@
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@lat_lon = new google.maps.LatLng(@lat, @lon)
|
21
|
-
@initGMap()
|
14
|
+
@initElements()
|
15
|
+
@initPoint()
|
16
|
+
@initMap()
|
22
17
|
@initMarker()
|
18
|
+
@initHandlers()
|
19
|
+
@initAutocomplete() if @options.autocomplete
|
23
20
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
mapTypeId: google.maps.MapTypeId.ROADMAP
|
29
|
-
# scrollwheel: false
|
30
|
-
_.defaults(@options.map_options, map_options)
|
31
|
-
@map = new google.maps.Map(document.getElementById(@options.doom_map), @options.map_options)
|
32
|
-
|
33
|
-
google.maps.event.addListener @map, 'zoom_changed', =>
|
34
|
-
@zoom_el.val(@map.getZoom())
|
35
|
-
|
36
|
-
setInputs: (pos) ->
|
37
|
-
@lat_el.val(pos.lat())
|
38
|
-
@lon_el.val(pos.lng())
|
39
|
-
@zoom_el.val(@map.getZoom())
|
21
|
+
initElements: ->
|
22
|
+
for el in ['lat', 'lon', 'map', 'zoom', 'geo_ac']
|
23
|
+
@options["#{el}_id"] ||= "#{@prefix}_#{el}"
|
24
|
+
this["#{el}_el"] = $("##{@options["#{el}_id"]}")
|
40
25
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
26
|
+
initPoint: ->
|
27
|
+
@lat = parseFloat(@lat_el.val()) or @options.lat
|
28
|
+
@lon = parseFloat(@lon_el.val()) or @options.lon
|
29
|
+
@zoom = parseInt(@zoom_el.val(), 10) or 12
|
30
|
+
@point = new google.maps.LatLng(@lat, @lon)
|
46
31
|
|
47
|
-
|
48
|
-
@
|
32
|
+
initHandlers: ->
|
33
|
+
@cont.bind 'geo_input:zoom_changed', (e) =>
|
34
|
+
@zoom_el.val(e.zoom)
|
49
35
|
|
50
|
-
|
51
|
-
@
|
52
|
-
@
|
53
|
-
pos = @marker.getPosition()
|
54
|
-
@setInputs(pos)
|
36
|
+
@cont.bind 'geo_input:dragend', (e) =>
|
37
|
+
@map.setCenter(e.point)
|
38
|
+
@setInputs(e.point)
|
55
39
|
|
56
|
-
|
57
|
-
|
58
|
-
opts =
|
59
|
-
types: @options.types
|
60
|
-
language: I18n.locale
|
61
|
-
# componentRestrictions: {country: 'ru'}
|
62
|
-
opts.types = @typesByPrefix() if @options.prefix
|
63
|
-
# log opts
|
64
|
-
autocomplete = new google.maps.places.Autocomplete(input, opts)
|
65
|
-
autocomplete.bindTo('bounds', @map)
|
66
|
-
google.maps.event.addListener autocomplete, 'place_changed', =>
|
67
|
-
place = autocomplete.getPlace()
|
68
|
-
@callback.call(this, place) if @callback
|
69
|
-
@setPlace(place)
|
40
|
+
@cont.bind 'geo_input:place_changed', (e) =>
|
41
|
+
@setPlace(e.place)
|
70
42
|
|
71
|
-
|
43
|
+
@geo_ac_el.keypress (e) ->
|
72
44
|
e.preventDefault() if e.keyCode == 13
|
73
45
|
|
74
46
|
setPlace: (place) =>
|
75
47
|
return unless place.geometry
|
76
|
-
|
48
|
+
point = place.geometry.location
|
77
49
|
if place.geometry.viewport
|
78
50
|
@map.fitBounds(place.geometry.viewport)
|
79
51
|
else
|
80
|
-
@map.setCenter(
|
52
|
+
@map.setCenter(point)
|
81
53
|
@map.setZoom(17)
|
82
54
|
|
83
|
-
@marker.setPosition(
|
84
|
-
@setInputs(
|
55
|
+
@marker.setPosition(point)
|
56
|
+
@setInputs(point)
|
57
|
+
|
58
|
+
setInputs: (point) ->
|
59
|
+
@lat_el.val(point.lat())
|
60
|
+
@lon_el.val(point.lng())
|
61
|
+
@zoom_el.val(@map.getZoom())
|
62
|
+
|
63
|
+
initMap: ->
|
64
|
+
map_defaults =
|
65
|
+
zoom: @zoom,
|
66
|
+
center: @point,
|
67
|
+
mapTypeId: google.maps.MapTypeId.ROADMAP
|
68
|
+
scrollwheel: false
|
85
69
|
|
70
|
+
@options.map_options ||= {}
|
71
|
+
_.defaults(@options.map_options, map_defaults)
|
72
|
+
@map = new google.maps.Map(@map_el[0], @options.map_options)
|
86
73
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
74
|
+
google.maps.event.addListener @map, 'zoom_changed', =>
|
75
|
+
@cont.trigger
|
76
|
+
type: 'geo_input:zoom_changed'
|
77
|
+
zoom: @map.getZoom()
|
78
|
+
|
79
|
+
initMarker: ->
|
80
|
+
marker_defaults =
|
81
|
+
position: @point,
|
82
|
+
map: @map,
|
83
|
+
draggable: true
|
84
|
+
|
85
|
+
@options.marker_options ||= {}
|
86
|
+
_.defaults(@options.marker_options, marker_defaults)
|
94
87
|
|
95
|
-
|
96
|
-
|
97
|
-
|
88
|
+
@marker = new google.maps.Marker(@options.marker_options)
|
89
|
+
@infowindow = new google.maps.InfoWindow()
|
90
|
+
|
91
|
+
google.maps.event.addListener @marker, 'dragend', (e) =>
|
92
|
+
@cont.trigger
|
93
|
+
type: 'geo_input:dragend'
|
94
|
+
point: e.latLng
|
95
|
+
|
96
|
+
initAutocomplete: ->
|
97
|
+
geo_ac_defaults =
|
98
|
+
language: I18n.locale
|
98
99
|
types: ['geocode']
|
99
|
-
|
100
|
-
|
100
|
+
|
101
|
+
@options.geo_ac_options ||= {}
|
102
|
+
_.defaults(@options.geo_ac_options, geo_ac_defaults)
|
103
|
+
autocomplete = new google.maps.places.Autocomplete(@geo_ac_el[0], @options.geo_ac_options)
|
101
104
|
autocomplete.bindTo('bounds', @map)
|
102
105
|
google.maps.event.addListener autocomplete, 'place_changed', =>
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
@map.setZoom(17)
|
112
|
-
|
113
|
-
@marker.setPosition(pos)
|
114
|
-
@setInputs(pos)
|
115
|
-
|
116
|
-
$('#'+ dom_input).live "keypress", (e) ->
|
117
|
-
e.preventDefault() if e.keyCode == 13
|
106
|
+
@cont.trigger
|
107
|
+
type: 'geo_input:place_changed'
|
108
|
+
place: autocomplete.getPlace()
|
109
|
+
|
110
|
+
$.fn.geoInput = (options) ->
|
111
|
+
$el = $(this)
|
112
|
+
$el.data('geoInput') or $el.data('geoInput', new GeoInput($el, options))
|
113
|
+
|
118
114
|
|
119
115
|
window.codeLatLng = (lat, lng, callback = null) ->
|
120
116
|
window.geocoder ||= new google.maps.Geocoder()
|
@@ -145,3 +141,36 @@ window.getPlaceComponent = (place, component) ->
|
|
145
141
|
res[0]
|
146
142
|
|
147
143
|
|
144
|
+
|
145
|
+
# typesByPrefix: ->
|
146
|
+
# if _.include(['region', 'district', 'sub_district'], @options.prefix)
|
147
|
+
# ['(regions)']
|
148
|
+
# else if _.include(['location'], @options.prefix)
|
149
|
+
# ['(cities)']
|
150
|
+
# else
|
151
|
+
# ['geocode']
|
152
|
+
|
153
|
+
# initAutocompleteCustom: (dom_input='geo_autocomplete') ->
|
154
|
+
# input = document.getElementById(dom_input)
|
155
|
+
# opts =
|
156
|
+
# types: ['geocode']
|
157
|
+
## componentRestrictions: {country: 'ru'}
|
158
|
+
# autocomplete = new google.maps.places.Autocomplete(input, opts)
|
159
|
+
# autocomplete.bindTo('bounds', @map)
|
160
|
+
# google.maps.event.addListener autocomplete, 'place_changed', =>
|
161
|
+
# place = autocomplete.getPlace()
|
162
|
+
# @callback.call(this, place) if @callback
|
163
|
+
# return unless place.geometry
|
164
|
+
# pos = place.geometry.location
|
165
|
+
# if place.geometry.viewport
|
166
|
+
# @map.fitBounds(place.geometry.viewport)
|
167
|
+
# else
|
168
|
+
# @map.setCenter(pos)
|
169
|
+
# @map.setZoom(17)
|
170
|
+
#
|
171
|
+
# @marker.setPosition(pos)
|
172
|
+
# @setInputs(pos)
|
173
|
+
#
|
174
|
+
# $('#'+ dom_input).live "keypress", (e) ->
|
175
|
+
# e.preventDefault() if e.keyCode == 13
|
176
|
+
|
@@ -39,9 +39,10 @@ $.fn.ck_val = (v = null) ->
|
|
39
39
|
else
|
40
40
|
$el.val()
|
41
41
|
|
42
|
-
class GoogleLocaleTabs
|
42
|
+
class window.GoogleLocaleTabs
|
43
|
+
@locales = ['ru', 'en', 'it']
|
43
44
|
constructor: ->
|
44
|
-
@locales =
|
45
|
+
@locales = GoogleLocaleTabs.locales
|
45
46
|
@limit = 1000
|
46
47
|
html = '<div class="t_locales">'
|
47
48
|
for l in @locales
|
@@ -18,7 +18,7 @@ $ ->
|
|
18
18
|
$form.append("<input type='checkbox' name='ids[]' checked='1' value='#{id}'/>") for id in ids
|
19
19
|
$form.submit()
|
20
20
|
|
21
|
-
$('#list tbody tr'
|
21
|
+
$(document).on 'click', '#list tbody tr', (e) ->
|
22
22
|
return true unless _.include(['TR', 'TD'], e.target.tagName)
|
23
23
|
e.preventDefault()
|
24
24
|
e.stopPropagation()
|
@@ -26,9 +26,6 @@ $ ->
|
|
26
26
|
$el.closest('tr').toggleClass('active_row')
|
27
27
|
$el.find('td:first input').attr 'checked', (i, v) -> !v
|
28
28
|
|
29
|
-
$('.batch_action_link')
|
30
|
-
|
31
|
-
|
32
|
-
submitBatch(this)
|
33
|
-
'confirm:success': ->
|
34
|
-
submitBatch(this)
|
29
|
+
$(document).on 'click confirm:success', '.batch_action_link', (e) ->
|
30
|
+
e.preventDefault()
|
31
|
+
submitBatch(this)
|
@@ -26,27 +26,25 @@ $ ->
|
|
26
26
|
e.preventDefault()
|
27
27
|
$(this).closest('tr').remove()
|
28
28
|
|
29
|
-
|
30
|
-
$(document).on 'admin:init', (e) ->
|
31
|
-
return unless window.viewType == 'form'
|
32
|
-
window.resource_id = $('form.simple_form').data('id')
|
33
|
-
$(document).trigger('admin:form_init')
|
34
|
-
|
35
|
-
|
36
29
|
$(document).on 'admin:form_init', 'form', (e) ->
|
37
30
|
focusInput($(this))
|
38
31
|
initEditor()
|
39
32
|
initFancySelect()
|
40
33
|
inputSetToggle()
|
41
34
|
|
35
|
+
$(document).on 'admin:init', (e) ->
|
36
|
+
return unless window.viewType == 'form'
|
37
|
+
$form = $('form.simple_form')
|
38
|
+
window.resource_id = $form.data('id')
|
39
|
+
$form.trigger('admin:form_init')
|
40
|
+
|
42
41
|
$(document).on 'pjax:end', ->
|
43
42
|
$(document).trigger({type: 'admin:init', pjax: true})
|
44
43
|
$(document).trigger({type: 'admin:init'})
|
45
44
|
|
46
45
|
$(document).on 'dblclick', '#list tbody tr', (e) ->
|
47
46
|
e.preventDefault()
|
48
|
-
$
|
49
|
-
$el.find('td a.resource_id_link').click()
|
47
|
+
$(this).find('td a.resource_id_link').toHref()
|
50
48
|
|
51
49
|
|
52
50
|
initFancySelect()
|
@@ -55,7 +53,7 @@ $ ->
|
|
55
53
|
$('body').css('background-color', "##{window.gon.bg_color.replace(/^#/, '')}")
|
56
54
|
|
57
55
|
if window.gon?.hotkeys
|
58
|
-
$(document).bind 'keydown.alt_n', -> $('a.new_resource:first').
|
56
|
+
$(document).bind 'keydown.alt_n', -> $('a.new_resource:first').toHref()
|
59
57
|
$(document).bind 'keydown.alt_left', -> $('a[rel^="prev"]:first').click()
|
60
58
|
$(document).bind 'keydown.alt_right', -> $('a[rel="next"]:first').click()
|
61
59
|
$(document).bind 'keydown.alt_s', -> $('#search_form').submit()
|
@@ -1,13 +1,3 @@
|
|
1
|
-
window.initGeoInput = (prefix, autocomplete = true) ->
|
2
|
-
opts =
|
3
|
-
prefix: prefix
|
4
|
-
doom_map: "#{prefix}_map"
|
5
|
-
callback: "#{prefix}_geo_callback"
|
6
|
-
map_options:
|
7
|
-
{scrollwheel: false}
|
8
|
-
gmaps = new GeoInput("#{prefix}_lat", "#{prefix}_lon", "#{prefix}_zoom", opts)
|
9
|
-
gmaps.initAutocomplete("#{prefix}_geo_autocomplete") if autocomplete
|
10
|
-
|
11
1
|
window.clonePagination = ->
|
12
2
|
$('.pagination:first').clone().appendTo($('.batch_actions'))
|
13
3
|
|
@@ -15,20 +5,6 @@ window.initPopover = ->
|
|
15
5
|
$('.popover').hide()
|
16
6
|
$('a[rel=popover]').popover({trigger: 'hover'})
|
17
7
|
|
18
|
-
window.initFancySelect = ->
|
19
|
-
return if gon.test
|
20
|
-
options =
|
21
|
-
formatNoMatches: -> I18n.t('admin_js.no_results')
|
22
|
-
placeholder: ' '
|
23
|
-
width: 'resolve'
|
24
|
-
$('form .fancy_select, .without_form.fancy_select, form .fancy_select_multi').select2(options)
|
25
|
-
# chosen_options =
|
26
|
-
# allow_single_deselect: true
|
27
|
-
# no_results_text: I18n.t('admin_js.no_results')
|
28
|
-
# placeholder_text_single: ' '
|
29
|
-
# placeholder_text_multiple: ' '
|
30
|
-
# $('form .do_chosen, .without_form.do_chosen, form .do_chosen_multi').chosen(chosen_options)
|
31
|
-
|
32
8
|
window.initAcFileds = ->
|
33
9
|
for el in $('.ac_field')
|
34
10
|
$el = $(el)
|
@@ -68,3 +44,56 @@ window.flash = (type, message) ->
|
|
68
44
|
|
69
45
|
window.focusInput = (scope=null) ->
|
70
46
|
$('input[type="text"],input[type="string"],select:visible,textarea:visible', scope || $('form.simple_form:first')).get(0)?.focus()
|
47
|
+
|
48
|
+
window.initFancySelect = ->
|
49
|
+
return if gon.test
|
50
|
+
defaults =
|
51
|
+
formatNoMatches: ->
|
52
|
+
I18n.t('admin_js.no_results')
|
53
|
+
placeholder: ' '
|
54
|
+
allowClear: true
|
55
|
+
|
56
|
+
$('form .fancy_select, form input.token, .without_form.fancy_select').each ->
|
57
|
+
$el = $(this)
|
58
|
+
return if $el.data('select2')
|
59
|
+
options = _.defaults({multiple: $el.data('multi')}, defaults)
|
60
|
+
options.width = $el[0].style.width || 'resolve'
|
61
|
+
if $el.data('class')
|
62
|
+
options.initSelection = (el, callback) ->
|
63
|
+
data = $el.data('pre')
|
64
|
+
if $el.data('multi')
|
65
|
+
data = $el.data('pre')
|
66
|
+
else
|
67
|
+
data = $el.data('pre')[0]
|
68
|
+
callback(data)
|
69
|
+
options.ajax =
|
70
|
+
url: "/admin/autocomplete",
|
71
|
+
data: (term, page) ->
|
72
|
+
cond = {}
|
73
|
+
if $el.data('c')
|
74
|
+
for kind in ['with', 'without']
|
75
|
+
if $el.data('c')[kind]
|
76
|
+
cond[kind] ||= {}
|
77
|
+
for attr, id of $el.data('c')[kind]
|
78
|
+
cond[kind][attr] = $('#' + id).val()
|
79
|
+
|
80
|
+
for kind in ['with_term', 'without_term']
|
81
|
+
if $el.data('c')[kind]
|
82
|
+
cond[kind] ||= {}
|
83
|
+
for attr, value of $el.data('c')[kind]
|
84
|
+
cond[kind][attr] = value
|
85
|
+
|
86
|
+
data = {q: term, class: $el.data('class'), token: true}
|
87
|
+
_.extend(data, cond)
|
88
|
+
|
89
|
+
results: (data, page) ->
|
90
|
+
results: data
|
91
|
+
|
92
|
+
$el.select2(options)
|
93
|
+
|
94
|
+
# $('#district_location_id').select2("data", {id: 123, text: '123'})
|
95
|
+
# $el.change (data) ->
|
96
|
+
# log data.val
|
97
|
+
# createSearchChoice: (term) ->
|
98
|
+
# log term
|
99
|
+
# {id: 3, text: '123'}
|