rails_admin 1.4.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +5 -2
- data/README.md +2 -12
- data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
- data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +1 -1
- data/app/assets/javascripts/rails_admin/ra.filtering-select.js +9 -7
- data/app/assets/javascripts/rails_admin/ra.i18n.js +28 -0
- data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +57 -0
- data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
- data/app/assets/javascripts/rails_admin/ra.widgets.js +371 -0
- data/app/assets/javascripts/rails_admin/rails_admin.js +1 -0
- data/app/assets/javascripts/rails_admin/ui.js +135 -0
- data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +29 -0
- data/app/assets/stylesheets/rails_admin/ra.widgets.scss +4 -0
- data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +2 -1
- data/app/helpers/rails_admin/application_helper.rb +18 -3
- data/app/helpers/rails_admin/main_helper.rb +4 -4
- data/app/views/layouts/rails_admin/_head.html.haml +7 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
- data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
- data/app/views/layouts/rails_admin/application.html.haml +3 -11
- data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
- data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
- data/app/views/rails_admin/main/_form_file_upload.html.haml +4 -4
- data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
- data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +7 -5
- data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
- data/app/views/rails_admin/main/dashboard.html.haml +1 -2
- data/app/views/rails_admin/main/export.html.haml +2 -2
- data/app/views/rails_admin/main/index.html.haml +18 -14
- data/app/views/rails_admin/main/show.html.haml +6 -7
- data/config/locales/rails_admin.en.yml +2 -0
- data/lib/generators/rails_admin/templates/initializer.erb +2 -2
- data/lib/rails_admin/abstract_model.rb +1 -1
- data/lib/rails_admin/adapters/active_record/property.rb +1 -5
- data/lib/rails_admin/adapters/active_record.rb +22 -9
- data/lib/rails_admin/adapters/mongoid/association.rb +1 -1
- data/lib/rails_admin/adapters/mongoid.rb +30 -13
- data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
- data/lib/rails_admin/bootstrap-sass.rb +5 -3
- data/lib/rails_admin/config/actions/base.rb +17 -1
- data/lib/rails_admin/config/actions/edit.rb +1 -3
- data/lib/rails_admin/config/actions/index.rb +3 -3
- data/lib/rails_admin/config/actions/new.rb +1 -3
- data/lib/rails_admin/config/configurable.rb +5 -3
- data/lib/rails_admin/config/fields/association.rb +1 -1
- data/lib/rails_admin/config/fields/base.rb +1 -1
- data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
- data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
- data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
- data/lib/rails_admin/config/fields/types/action_text.rb +30 -0
- data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -19
- data/lib/rails_admin/config/fields/types/active_storage.rb +1 -0
- data/lib/rails_admin/config/fields/types/all.rb +2 -1
- data/lib/rails_admin/config/fields/types/belongs_to_association.rb +4 -0
- data/lib/rails_admin/config/fields/types/ck_editor.rb +7 -7
- data/lib/rails_admin/config/fields/types/code_mirror.rb +10 -12
- data/lib/rails_admin/config/fields/types/color.rb +2 -2
- data/lib/rails_admin/config/fields/types/file_upload.rb +6 -2
- data/lib/rails_admin/config/fields/types/froala.rb +9 -11
- data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
- data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +1 -1
- data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +15 -3
- data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +17 -3
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +7 -0
- data/lib/rails_admin/config/fields/types/shrine.rb +52 -0
- data/lib/rails_admin/config/fields/types/simple_mde.rb +8 -5
- data/lib/rails_admin/config/fields/types/string.rb +2 -2
- data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
- data/lib/rails_admin/config/fields/types/text.rb +2 -20
- data/lib/rails_admin/config/fields/types/wysihtml5.rb +14 -10
- data/lib/rails_admin/config/fields.rb +2 -1
- data/lib/rails_admin/config/model.rb +3 -2
- data/lib/rails_admin/config/proxyable/proxy.rb +3 -5
- data/lib/rails_admin/config/proxyable.rb +13 -1
- data/lib/rails_admin/config/sections/list.rb +23 -0
- data/lib/rails_admin/config.rb +8 -6
- data/lib/rails_admin/engine.rb +1 -2
- data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +45 -21
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +19 -4
- data/lib/rails_admin/version.rb +3 -3
- data/lib/rails_admin.rb +0 -1
- data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
- data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
- data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
- data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
- data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
- data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +1 -3
- data/vendor/assets/stylesheets/rails_admin/font-awesome.css.erb +2342 -0
- metadata +163 -171
- data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
- data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -10
- data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -58
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -359
- data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
- data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
- data/lib/rails_admin/config/fields/types/refile.rb +0 -27
- data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
- data/lib/rails_admin/extensions/cancan.rb +0 -3
- /data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/select.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
- /data/{app → vendor}/assets/images/rails_admin/colorpicker/slider.png +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
- /data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
- /data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
|
@@ -1,359 +0,0 @@
|
|
|
1
|
-
$(document).on 'rails_admin.dom_ready', (e, content) ->
|
|
2
|
-
|
|
3
|
-
content = if content then content else $('form')
|
|
4
|
-
|
|
5
|
-
if content.length # don't waste time otherwise
|
|
6
|
-
|
|
7
|
-
# colorpicker
|
|
8
|
-
|
|
9
|
-
content.find('[data-color]').each ->
|
|
10
|
-
that = this
|
|
11
|
-
$(this).ColorPicker
|
|
12
|
-
color: $(that).val()
|
|
13
|
-
onShow: (el) ->
|
|
14
|
-
$(el).fadeIn(500)
|
|
15
|
-
false
|
|
16
|
-
onHide: (el) ->
|
|
17
|
-
$(el).fadeOut(500)
|
|
18
|
-
false
|
|
19
|
-
onChange: (hsb, hex, rgb) ->
|
|
20
|
-
$(that).val(hex)
|
|
21
|
-
$(that).css('backgroundColor', '#' + hex)
|
|
22
|
-
|
|
23
|
-
# datetime picker
|
|
24
|
-
$.fn.datetimepicker.defaults.icons =
|
|
25
|
-
time: 'fa fa-clock-o'
|
|
26
|
-
date: 'fa fa-calendar'
|
|
27
|
-
up: 'fa fa-chevron-up'
|
|
28
|
-
down: 'fa fa-chevron-down'
|
|
29
|
-
previous: 'fa fa-angle-double-left'
|
|
30
|
-
next: 'fa fa-angle-double-right'
|
|
31
|
-
today: 'fa fa-dot-circle-o'
|
|
32
|
-
clear: 'fa fa-trash'
|
|
33
|
-
close: 'fa fa-times'
|
|
34
|
-
|
|
35
|
-
content.find('[data-datetimepicker]').each ->
|
|
36
|
-
options = $(this).data('options')
|
|
37
|
-
$.extend(options, {locale: RailsAdmin.I18n.locale})
|
|
38
|
-
$(this).datetimepicker options
|
|
39
|
-
|
|
40
|
-
# enumeration
|
|
41
|
-
|
|
42
|
-
content.find('[data-enumeration]').each ->
|
|
43
|
-
if $(this).is('[multiple]')
|
|
44
|
-
$(this).filteringMultiselect $(this).data('options')
|
|
45
|
-
else
|
|
46
|
-
$(this).filteringSelect $(this).data('options')
|
|
47
|
-
|
|
48
|
-
# fileupload
|
|
49
|
-
|
|
50
|
-
content.find('[data-fileupload]').each ->
|
|
51
|
-
input = this
|
|
52
|
-
$(this).on 'click', ".delete input[type='checkbox']", ->
|
|
53
|
-
$(input).children('.toggle').toggle('slow')
|
|
54
|
-
|
|
55
|
-
# fileupload-preview
|
|
56
|
-
|
|
57
|
-
content.find('[data-fileupload]').change ->
|
|
58
|
-
input = this
|
|
59
|
-
image_container = $("#" + input.id).parent().children(".preview")
|
|
60
|
-
unless image_container.length
|
|
61
|
-
image_container = $("#" + input.id).parent().prepend($('<img />').addClass('preview').addClass('img-thumbnail')).find('img.preview')
|
|
62
|
-
image_container.parent().find('img:not(.preview)').hide()
|
|
63
|
-
ext = $("#" + input.id).val().split('.').pop().toLowerCase()
|
|
64
|
-
if input.files and input.files[0] and $.inArray(ext, ['gif','png','jpg','jpeg','bmp']) != -1
|
|
65
|
-
reader = new FileReader()
|
|
66
|
-
reader.onload = (e) ->
|
|
67
|
-
image_container.attr "src", e.target.result
|
|
68
|
-
reader.readAsDataURL input.files[0]
|
|
69
|
-
image_container.show()
|
|
70
|
-
else
|
|
71
|
-
image_container.hide()
|
|
72
|
-
|
|
73
|
-
# multiple-fileupload-preview
|
|
74
|
-
|
|
75
|
-
content.find('[data-multiple-fileupload]').change ->
|
|
76
|
-
input = this
|
|
77
|
-
$("#" + input.id).parent().children(".preview").remove()
|
|
78
|
-
for file in input.files
|
|
79
|
-
ext = file.name.split('.').pop().toLowerCase()
|
|
80
|
-
if $.inArray(ext, ['gif','png','jpg','jpeg','bmp']) == -1
|
|
81
|
-
continue
|
|
82
|
-
image_container = $('<img />').addClass('preview').addClass('img-thumbnail')
|
|
83
|
-
do (image_container) ->
|
|
84
|
-
reader = new FileReader()
|
|
85
|
-
reader.onload = (e) ->
|
|
86
|
-
image_container.attr "src", e.target.result
|
|
87
|
-
reader.readAsDataURL file
|
|
88
|
-
$("#" + input.id).parent().append($('<div></div>').addClass('preview').append(image_container))
|
|
89
|
-
|
|
90
|
-
# filtering-multiselect
|
|
91
|
-
|
|
92
|
-
content.find('[data-filteringmultiselect]').each ->
|
|
93
|
-
$(this).filteringMultiselect $(this).data('options')
|
|
94
|
-
if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
|
|
95
|
-
$(this).siblings('.btn').remove()
|
|
96
|
-
else
|
|
97
|
-
$(this).parents('.control-group').first().remoteForm()
|
|
98
|
-
|
|
99
|
-
# filtering-select
|
|
100
|
-
|
|
101
|
-
content.find('[data-filteringselect]').each ->
|
|
102
|
-
$(this).filteringSelect $(this).data('options')
|
|
103
|
-
if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
|
|
104
|
-
$(this).siblings('.btn').remove()
|
|
105
|
-
else
|
|
106
|
-
$(this).parents('.control-group').first().remoteForm()
|
|
107
|
-
|
|
108
|
-
# nested-many
|
|
109
|
-
|
|
110
|
-
content.find('[data-nestedmany]').each ->
|
|
111
|
-
field = $(this).parents('.control-group').first()
|
|
112
|
-
nav = field.find('> .controls > .nav')
|
|
113
|
-
tab_content = field.find('> .tab-content')
|
|
114
|
-
toggler = field.find('> .controls > .btn-group > .toggler')
|
|
115
|
-
# add each nested field to a tab-pane and reference it in the nav
|
|
116
|
-
tab_content.children('.fields:not(.tab-pane)').addClass('tab-pane').each ->
|
|
117
|
-
$(this).attr('id', 'unique-id-' + (new Date().getTime()) + Math.floor(Math.random()*100000)) # some elements are created on the same ms
|
|
118
|
-
nav.append(
|
|
119
|
-
$('<li></li>').append(
|
|
120
|
-
$('<a></a>').attr('data-toggle', 'tab').attr('href', '#' + this.id).text($(this).children('.object-infos').data('object-label'))
|
|
121
|
-
)
|
|
122
|
-
)
|
|
123
|
-
# only if no tab is set to active
|
|
124
|
-
if nav.find("> li.active").length == 0
|
|
125
|
-
# init first tab, toggler and tab_content/tabs visibility
|
|
126
|
-
nav.find("> li > a[data-toggle='tab']:first").tab('show')
|
|
127
|
-
if nav.children().length == 0
|
|
128
|
-
nav.hide()
|
|
129
|
-
tab_content.hide()
|
|
130
|
-
toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
|
|
131
|
-
else
|
|
132
|
-
if toggler.hasClass('active')
|
|
133
|
-
nav.show()
|
|
134
|
-
tab_content.show()
|
|
135
|
-
toggler.children('i').addClass('icon-chevron-down')
|
|
136
|
-
else
|
|
137
|
-
nav.hide()
|
|
138
|
-
tab_content.hide()
|
|
139
|
-
toggler.children('i').addClass('icon-chevron-right')
|
|
140
|
-
|
|
141
|
-
# nested-one
|
|
142
|
-
|
|
143
|
-
content.find('[data-nestedone]').each ->
|
|
144
|
-
field = $(this).parents('.control-group').first()
|
|
145
|
-
nav = field.find("> .controls > .nav")
|
|
146
|
-
tab_content = field.find("> .tab-content")
|
|
147
|
-
toggler = field.find('> .controls > .btn-group > .toggler')
|
|
148
|
-
tab_content.children(".fields:not(.tab-pane)").addClass('tab-pane active').each ->
|
|
149
|
-
# Convert the "add nested field" button to just showing the title of the new model
|
|
150
|
-
field.find('> .controls .add_nested_fields').removeClass('add_nested_fields').text( $(this).children('.object-infos').data('object-label') )
|
|
151
|
-
nav.append(
|
|
152
|
-
$('<li></li>').append(
|
|
153
|
-
$('<a></a>').attr('data-toggle', 'tab').attr('href', '#' + this.id).text($(this).children('.object-infos').data('object-label'))
|
|
154
|
-
)
|
|
155
|
-
)
|
|
156
|
-
first_tab = nav.find("> li > a[data-toggle='tab']:first")
|
|
157
|
-
first_tab.tab('show')
|
|
158
|
-
field.find("> .controls > [data-target]:first").html('<i class="icon-white"></i> ' + first_tab.html())
|
|
159
|
-
nav.hide()
|
|
160
|
-
if nav.children().length == 0
|
|
161
|
-
nav.hide()
|
|
162
|
-
tab_content.hide()
|
|
163
|
-
toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
|
|
164
|
-
else
|
|
165
|
-
if toggler.hasClass('active')
|
|
166
|
-
toggler.children('i').addClass('icon-chevron-down')
|
|
167
|
-
tab_content.show()
|
|
168
|
-
else
|
|
169
|
-
toggler.children('i').addClass('icon-chevron-right')
|
|
170
|
-
tab_content.hide()
|
|
171
|
-
|
|
172
|
-
# polymorphic-association
|
|
173
|
-
|
|
174
|
-
content.find('[data-polymorphic]').each ->
|
|
175
|
-
type_select = $(this)
|
|
176
|
-
field = type_select.parents('.control-group').first()
|
|
177
|
-
object_select = field.find('select').last()
|
|
178
|
-
urls = type_select.data('urls')
|
|
179
|
-
type_select.on 'change', (e) ->
|
|
180
|
-
if $(this).val() is ''
|
|
181
|
-
object_select.html('<option value=""></option>')
|
|
182
|
-
else
|
|
183
|
-
$.ajax
|
|
184
|
-
url: urls[type_select.val()]
|
|
185
|
-
data:
|
|
186
|
-
compact: true
|
|
187
|
-
all: true
|
|
188
|
-
beforeSend: (xhr) ->
|
|
189
|
-
xhr.setRequestHeader("Accept", "application/json")
|
|
190
|
-
success: (data, status, xhr) ->
|
|
191
|
-
html = $('<option></option>')
|
|
192
|
-
$(data).each (i, el) ->
|
|
193
|
-
option = $('<option></option>')
|
|
194
|
-
option.attr('value', el.id)
|
|
195
|
-
option.text(el.label)
|
|
196
|
-
html = html.add(option)
|
|
197
|
-
object_select.html(html)
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
# simplemde
|
|
201
|
-
|
|
202
|
-
goSimpleMDEs = ->
|
|
203
|
-
content.find('[data-richtext=simplemde]').not('.simplemded').each (index, domEle) ->
|
|
204
|
-
options = $(this).data('options')
|
|
205
|
-
instance_config = options.instance_config
|
|
206
|
-
new window.SimpleMDE($.extend(true, {
|
|
207
|
-
element: document.getElementById(this.id),
|
|
208
|
-
autosave: {
|
|
209
|
-
uniqueId: this.id
|
|
210
|
-
}
|
|
211
|
-
}, instance_config))
|
|
212
|
-
$(this).addClass('simplemded')
|
|
213
|
-
|
|
214
|
-
$editors = content.find('[data-richtext=simplemde]').not('.simplemded')
|
|
215
|
-
if $editors.length
|
|
216
|
-
if not window.SimpleMDE
|
|
217
|
-
options = $editors.first().data('options')
|
|
218
|
-
$('head').append('<link href="' + options['css_location'] + '" rel="stylesheet" media="all" type="text\/css">')
|
|
219
|
-
$.getScript options['js_location'], (script, textStatus, jqXHR) ->
|
|
220
|
-
goSimpleMDEs()
|
|
221
|
-
else
|
|
222
|
-
goSimpleMDEs()
|
|
223
|
-
|
|
224
|
-
# ckeditor
|
|
225
|
-
|
|
226
|
-
goCkeditors = ->
|
|
227
|
-
content.find('[data-richtext=ckeditor]').not('.ckeditored').each (index, domEle) ->
|
|
228
|
-
try
|
|
229
|
-
if instance = window.CKEDITOR.instances[this.id]
|
|
230
|
-
instance.destroy(true)
|
|
231
|
-
window.CKEDITOR.replace(this, $(this).data('options'))
|
|
232
|
-
$(this).addClass('ckeditored')
|
|
233
|
-
|
|
234
|
-
$editors = content.find('[data-richtext=ckeditor]').not('.ckeditored')
|
|
235
|
-
if $editors.length
|
|
236
|
-
if not window.CKEDITOR
|
|
237
|
-
options = $editors.first().data('options')
|
|
238
|
-
window.CKEDITOR_BASEPATH = options['base_location']
|
|
239
|
-
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
|
240
|
-
goCkeditors()
|
|
241
|
-
else
|
|
242
|
-
goCkeditors()
|
|
243
|
-
|
|
244
|
-
#codemirror
|
|
245
|
-
|
|
246
|
-
goCodeMirrors = (array) =>
|
|
247
|
-
array.each (index, domEle) ->
|
|
248
|
-
options = $(this).data('options')
|
|
249
|
-
textarea = this
|
|
250
|
-
$.getScript options['locations']['mode'], (script, textStatus, jqXHR) ->
|
|
251
|
-
options = $(domEle).data('options')
|
|
252
|
-
$('head').append('<link href="' + options['locations']['theme'] + '" rel="stylesheet" media="all" type="text\/css">')
|
|
253
|
-
CodeMirror.fromTextArea(textarea,options['options'])
|
|
254
|
-
$(textarea).addClass('codemirrored')
|
|
255
|
-
|
|
256
|
-
array = content.find('[data-richtext=codemirror]').not('.codemirrored')
|
|
257
|
-
if array.length
|
|
258
|
-
@array = array
|
|
259
|
-
if not window.CodeMirror
|
|
260
|
-
options = $(array[0]).data('options')
|
|
261
|
-
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
|
|
262
|
-
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
|
263
|
-
goCodeMirrors(@array)
|
|
264
|
-
else
|
|
265
|
-
goCodeMirrors(@array)
|
|
266
|
-
|
|
267
|
-
# bootstrap_wysihtml5
|
|
268
|
-
|
|
269
|
-
goBootstrapWysihtml5s = (array, config_options) =>
|
|
270
|
-
array.each ->
|
|
271
|
-
$(@).addClass('bootstrap-wysihtml5ed')
|
|
272
|
-
$(@).closest('.controls').addClass('well')
|
|
273
|
-
$(@).wysihtml5(config_options)
|
|
274
|
-
|
|
275
|
-
array = content.find('[data-richtext=bootstrap-wysihtml5]').not('.bootstrap-wysihtml5ed')
|
|
276
|
-
if array.length
|
|
277
|
-
@array = array
|
|
278
|
-
options = $(array[0]).data('options')
|
|
279
|
-
config_options = $.parseJSON(options['config_options'])
|
|
280
|
-
if not window.wysihtml5
|
|
281
|
-
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
|
|
282
|
-
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
|
283
|
-
goBootstrapWysihtml5s(@array, config_options)
|
|
284
|
-
else
|
|
285
|
-
goBootstrapWysihtml5s(@array, config_options)
|
|
286
|
-
|
|
287
|
-
# froala_wysiwyg
|
|
288
|
-
|
|
289
|
-
goFroalaWysiwygs = (array) =>
|
|
290
|
-
array.each ->
|
|
291
|
-
options = $(@).data('options')
|
|
292
|
-
config_options = $.parseJSON(options['config_options'])
|
|
293
|
-
if config_options
|
|
294
|
-
if !config_options['inlineMode']
|
|
295
|
-
config_options['inlineMode'] = false
|
|
296
|
-
else
|
|
297
|
-
config_options = { inlineMode: false }
|
|
298
|
-
|
|
299
|
-
uploadEnabled =
|
|
300
|
-
if config_options['imageUploadURL']
|
|
301
|
-
config_options['imageUploadParams'] =
|
|
302
|
-
authenticity_token: $('meta[name=csrf-token]').attr('content')
|
|
303
|
-
|
|
304
|
-
$(@).addClass('froala-wysiwyged')
|
|
305
|
-
$(@).editable(config_options)
|
|
306
|
-
if uploadEnabled
|
|
307
|
-
$(@).on 'editable.imageError', (e, editor, error) ->
|
|
308
|
-
alert("error uploading image: " + error.message);
|
|
309
|
-
# Custom error message returned from the server.
|
|
310
|
-
if error.code == 0
|
|
311
|
-
|
|
312
|
-
# Bad link.
|
|
313
|
-
else if error.code == 1
|
|
314
|
-
|
|
315
|
-
# No link in upload response.
|
|
316
|
-
else if error.code == 2
|
|
317
|
-
|
|
318
|
-
# Error during image upload.
|
|
319
|
-
else if error.code == 3
|
|
320
|
-
|
|
321
|
-
# Parsing response failed.
|
|
322
|
-
else if error.code == 4
|
|
323
|
-
|
|
324
|
-
# Image too large.
|
|
325
|
-
else if error.code == 5
|
|
326
|
-
|
|
327
|
-
# Invalid image type.
|
|
328
|
-
else if error.code == 6
|
|
329
|
-
|
|
330
|
-
# Image can be uploaded only to same domain in IE 8 and IE 9.
|
|
331
|
-
else if error.code == 7
|
|
332
|
-
|
|
333
|
-
else
|
|
334
|
-
|
|
335
|
-
return
|
|
336
|
-
|
|
337
|
-
.on('editable.afterRemoveImage', (e, editor, $img) ->
|
|
338
|
-
# Set the image source to the image delete params.
|
|
339
|
-
editor.options.imageDeleteParams =
|
|
340
|
-
src: $img.attr('src')
|
|
341
|
-
authenticity_token: $('meta[name=csrf-token]').attr('content')
|
|
342
|
-
# Make the delete request.
|
|
343
|
-
editor.deleteImage $img
|
|
344
|
-
return
|
|
345
|
-
).on('editable.imageDeleteSuccess', (e, editor, data) ->
|
|
346
|
-
# handle success
|
|
347
|
-
).on 'editable.imageDeleteError', (e, editor, error) ->
|
|
348
|
-
# handle error
|
|
349
|
-
alert("error deleting image: " + error.message);
|
|
350
|
-
|
|
351
|
-
array = content.find('[data-richtext=froala-wysiwyg]').not('.froala-wysiwyged')
|
|
352
|
-
if array.length
|
|
353
|
-
options = $(array[0]).data('options')
|
|
354
|
-
if not $.isFunction($.fn.editable)
|
|
355
|
-
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
|
|
356
|
-
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
|
357
|
-
goFroalaWysiwygs(array)
|
|
358
|
-
else
|
|
359
|
-
goFroalaWysiwygs(array)
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
$ = jQuery
|
|
2
|
-
|
|
3
|
-
$(document).on "click", "#list input.toggle", ->
|
|
4
|
-
$("#list [name='bulk_ids[]']").prop "checked", $(this).is(":checked")
|
|
5
|
-
|
|
6
|
-
$(document).on 'click', '.pjax', (event) ->
|
|
7
|
-
if event.which > 1 || event.metaKey || event.ctrlKey
|
|
8
|
-
return
|
|
9
|
-
else if $.support.pjax
|
|
10
|
-
event.preventDefault()
|
|
11
|
-
$.pjax
|
|
12
|
-
container: $(this).data('pjax-container') || '[data-pjax-container]'
|
|
13
|
-
url: $(this).data('href') || $(this).attr('href')
|
|
14
|
-
timeout: 2000
|
|
15
|
-
else if $(this).data('href') # not a native #href, need some help
|
|
16
|
-
window.location = $(this).data('href')
|
|
17
|
-
|
|
18
|
-
$(document).on 'submit', '.pjax-form', (event) ->
|
|
19
|
-
if $.support.pjax
|
|
20
|
-
event.preventDefault()
|
|
21
|
-
$.pjax
|
|
22
|
-
container: $(this).data('pjax-container') || '[data-pjax-container]'
|
|
23
|
-
url: this.action + (if (this.action.indexOf('?') != -1) then '&' else '?') + $(this).serialize()
|
|
24
|
-
timeout: 2000
|
|
25
|
-
|
|
26
|
-
$(document)
|
|
27
|
-
.on 'pjax:start', ->
|
|
28
|
-
$('#loading').show()
|
|
29
|
-
.on 'pjax:end', ->
|
|
30
|
-
$('#loading').hide()
|
|
31
|
-
|
|
32
|
-
$(document).on 'click', '[data-target]', ->
|
|
33
|
-
if !$(this).hasClass('disabled')
|
|
34
|
-
if $(this).has('i.icon-chevron-down').length
|
|
35
|
-
$(this).removeClass('active').children('i').toggleClass('icon-chevron-down icon-chevron-right')
|
|
36
|
-
$($(this).data('target')).select(':visible').hide('slow')
|
|
37
|
-
else
|
|
38
|
-
if $(this).has('i.icon-chevron-right').length
|
|
39
|
-
$(this).addClass('active').children('i').toggleClass('icon-chevron-down icon-chevron-right')
|
|
40
|
-
$($(this).data('target')).select(':hidden').show('slow')
|
|
41
|
-
|
|
42
|
-
$(document).on 'click', '.form-horizontal legend', ->
|
|
43
|
-
if $(this).has('i.icon-chevron-down').length
|
|
44
|
-
$(this).siblings('.control-group:visible').hide('slow')
|
|
45
|
-
$(this).children('i').toggleClass('icon-chevron-down icon-chevron-right')
|
|
46
|
-
else
|
|
47
|
-
if $(this).has('i.icon-chevron-right').length
|
|
48
|
-
$(this).siblings('.control-group:hidden').show('slow')
|
|
49
|
-
$(this).children('i').toggleClass('icon-chevron-down icon-chevron-right')
|
|
50
|
-
|
|
51
|
-
$(document).on 'click', 'form .tab-content .tab-pane a.remove_nested_one_fields', ->
|
|
52
|
-
$(this).children('input[type="hidden"]').val($(this).hasClass('active')).
|
|
53
|
-
siblings('i').toggleClass('icon-check icon-trash')
|
|
54
|
-
|
|
55
|
-
$(document).ready ->
|
|
56
|
-
$(document).trigger('rails_admin.dom_ready')
|
|
57
|
-
|
|
58
|
-
$(document).on 'pjax:end', ->
|
|
59
|
-
$(document).trigger('rails_admin.dom_ready')
|
|
60
|
-
|
|
61
|
-
$(document).on 'rails_admin.dom_ready', ->
|
|
62
|
-
$('.animate-width-to').each ->
|
|
63
|
-
length = $(this).data("animate-length")
|
|
64
|
-
width = $(this).data("animate-width-to")
|
|
65
|
-
$(this).animate(width: width, length, 'easeOutQuad')
|
|
66
|
-
|
|
67
|
-
$('.form-horizontal legend').has('i.icon-chevron-right').each ->
|
|
68
|
-
$(this).siblings('.control-group').hide()
|
|
69
|
-
|
|
70
|
-
$(".table").tooltip selector: "th[rel=tooltip]"
|
|
71
|
-
|
|
72
|
-
# Workaround for jquery-ujs formnovalidate issue:
|
|
73
|
-
# https://github.com/rails/jquery-ujs/issues/316
|
|
74
|
-
$('[formnovalidate]').on 'click', ->
|
|
75
|
-
$(this).closest('form').attr('novalidate', true)
|
|
76
|
-
|
|
77
|
-
$(document).on 'click', '#fields_to_export label input#check_all', () ->
|
|
78
|
-
elems = $('#fields_to_export label input')
|
|
79
|
-
if $('#fields_to_export label input#check_all').is ':checked'
|
|
80
|
-
$(elems).prop('checked', true)
|
|
81
|
-
else
|
|
82
|
-
$(elems).prop('checked',false)
|
|
83
|
-
|
|
84
|
-
# when the user hits the back button, the inline JS <script> that
|
|
85
|
-
# highlights the current model in the left menu doesn't get run by
|
|
86
|
-
# pjax, so this code runs it:
|
|
87
|
-
# https://github.com/defunkt/jquery-pjax/issues/241#issuecomment-13251065
|
|
88
|
-
$(document).on 'pjax:popstate', () ->
|
|
89
|
-
$(document).one 'pjax:end', (event) ->
|
|
90
|
-
$(event.target).find('script').each () ->
|
|
91
|
-
$.globalEval(this.text || this.textContent || this.innerHTML || '')
|
|
92
|
-
return
|
|
93
|
-
return
|
|
94
|
-
return
|
|
95
|
-
|
|
96
|
-
#Remove all filter and then refresh
|
|
97
|
-
$(document).on 'click', "#remove_filter",(event) ->
|
|
98
|
-
event.preventDefault()
|
|
99
|
-
$("#filters_box").html("")
|
|
100
|
-
$("hr.filters_box").hide()
|
|
101
|
-
$(this).parent().siblings("input[type='search']").val("")
|
|
102
|
-
$(this).parents("form").submit()
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require 'rails_admin/config/fields'
|
|
2
|
-
require 'rails_admin/config/fields/types'
|
|
3
|
-
require 'rails_admin/config/fields/types/file_upload'
|
|
4
|
-
|
|
5
|
-
RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
|
|
6
|
-
extensions = [:id, :filename, :size, :content_type]
|
|
7
|
-
model = parent.abstract_model.model
|
|
8
|
-
if (properties.name.to_s =~ /^(.+)_id$/) && defined?(::Refile) && model.ancestors.map(&:to_s).include?("Refile::Attachment(#{attachment_name = Regexp.last_match[1].to_sym})")
|
|
9
|
-
field = RailsAdmin::Config::Fields::Types.load(:refile).new(parent, attachment_name, properties)
|
|
10
|
-
children_fields = []
|
|
11
|
-
extensions.each do |ext|
|
|
12
|
-
children_column_name = "#{attachment_name}_#{ext}".to_sym
|
|
13
|
-
next unless child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
|
|
14
|
-
children_field = fields.detect { |f| f.name == children_column_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
|
|
15
|
-
children_field.hide
|
|
16
|
-
children_field.filterable(false)
|
|
17
|
-
children_fields << children_field.name
|
|
18
|
-
end
|
|
19
|
-
field.children_fields(children_fields)
|
|
20
|
-
fields << field
|
|
21
|
-
true
|
|
22
|
-
else
|
|
23
|
-
false
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require 'rails_admin/config/fields/base'
|
|
2
|
-
require 'rails_admin/config/fields/types/file_upload'
|
|
3
|
-
|
|
4
|
-
module RailsAdmin
|
|
5
|
-
module Config
|
|
6
|
-
module Fields
|
|
7
|
-
module Types
|
|
8
|
-
class Refile < RailsAdmin::Config::Fields::Types::FileUpload
|
|
9
|
-
RailsAdmin::Config::Fields::Types.register(self)
|
|
10
|
-
|
|
11
|
-
register_instance_option :thumb_method do
|
|
12
|
-
[:limit, 100, 100]
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
register_instance_option :delete_method do
|
|
16
|
-
"remove_#{name}"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def resource_url(thumb = [])
|
|
20
|
-
return nil unless value
|
|
21
|
-
Object.const_get(:Refile).attachment_url(bindings[:object], name, *thumb)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
module RailsAdmin
|
|
2
|
-
module Extensions
|
|
3
|
-
module CanCan
|
|
4
|
-
# This adapter is for the CanCan[https://github.com/ryanb/cancan] authorization library.
|
|
5
|
-
# You can create another adapter for different authorization behavior, just be certain it
|
|
6
|
-
# responds to each of the public methods here.
|
|
7
|
-
class AuthorizationAdapter
|
|
8
|
-
# See the +authorize_with+ config method for where the initialization happens.
|
|
9
|
-
def initialize(controller, ability = ::Ability)
|
|
10
|
-
@controller = controller
|
|
11
|
-
@controller.instance_variable_set '@ability', ability
|
|
12
|
-
@controller.extend ControllerExtension
|
|
13
|
-
@controller.current_ability.authorize! :access, :rails_admin
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# This method is called in every controller action and should raise an exception
|
|
17
|
-
# when the authorization fails. The first argument is the name of the controller
|
|
18
|
-
# action as a symbol (:create, :bulk_delete, etc.). The second argument is the
|
|
19
|
-
# AbstractModel instance that applies. The third argument is the actual model
|
|
20
|
-
# instance if it is available.
|
|
21
|
-
def authorize(action, abstract_model = nil, model_object = nil)
|
|
22
|
-
@controller.current_ability.authorize!(action, model_object || abstract_model && abstract_model.model) if action
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# This method is called primarily from the view to determine whether the given user
|
|
26
|
-
# has access to perform the action on a given model. It should return true when authorized.
|
|
27
|
-
# This takes the same arguments as +authorize+. The difference is that this will
|
|
28
|
-
# return a boolean whereas +authorize+ will raise an exception when not authorized.
|
|
29
|
-
def authorized?(action, abstract_model = nil, model_object = nil)
|
|
30
|
-
@controller.current_ability.can?(action, model_object || abstract_model && abstract_model.model) if action
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# This is called when needing to scope a database query. It is called within the list
|
|
34
|
-
# and bulk_delete/destroy actions and should return a scope which limits the records
|
|
35
|
-
# to those which the user can perform the given action on.
|
|
36
|
-
def query(action, abstract_model)
|
|
37
|
-
abstract_model.model.accessible_by(@controller.current_ability, action)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# This is called in the new/create actions to determine the initial attributes for new
|
|
41
|
-
# records. It should return a hash of attributes which match what the user
|
|
42
|
-
# is authorized to create.
|
|
43
|
-
def attributes_for(action, abstract_model)
|
|
44
|
-
@controller.current_ability.attributes_for(action, abstract_model && abstract_model.model)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
module ControllerExtension
|
|
48
|
-
def current_ability
|
|
49
|
-
# use _current_user instead of default current_user so it works with
|
|
50
|
-
# whatever current user method is defined with RailsAdmin
|
|
51
|
-
@current_ability ||= @ability.new(_current_user)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|