rails_admin 1.4.3 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +12 -4
  3. data/README.md +4 -7
  4. data/app/assets/javascripts/rails_admin/custom/ui.js +1 -0
  5. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +1 -1
  6. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +9 -7
  7. data/app/assets/javascripts/rails_admin/ra.i18n.js +28 -0
  8. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +59 -0
  9. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  10. data/app/assets/javascripts/rails_admin/ra.widgets.js +379 -0
  11. data/app/assets/javascripts/rails_admin/rails_admin.js +1 -0
  12. data/app/assets/javascripts/rails_admin/ui.js +135 -0
  13. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +29 -0
  14. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +4 -0
  15. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +2 -1
  16. data/app/controllers/rails_admin/application_controller.rb +2 -0
  17. data/app/helpers/rails_admin/application_helper.rb +19 -4
  18. data/app/helpers/rails_admin/main_helper.rb +4 -4
  19. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  20. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
  21. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  22. data/app/views/layouts/rails_admin/application.html.haml +3 -11
  23. data/app/views/layouts/rails_admin/pjax.html.haml +1 -5
  24. data/app/views/rails_admin/main/_form_action_text.html.haml +7 -0
  25. data/app/views/rails_admin/main/_form_file_upload.html.haml +4 -4
  26. data/app/views/rails_admin/main/_form_filtering_select.html.haml +1 -1
  27. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +7 -5
  28. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +18 -3
  29. data/app/views/rails_admin/main/dashboard.html.haml +1 -2
  30. data/app/views/rails_admin/main/export.html.haml +2 -2
  31. data/app/views/rails_admin/main/index.html.haml +19 -15
  32. data/app/views/rails_admin/main/show.html.haml +6 -7
  33. data/config/locales/rails_admin.en.yml +3 -0
  34. data/lib/generators/rails_admin/templates/initializer.erb +2 -2
  35. data/lib/rails_admin/abstract_model.rb +3 -3
  36. data/lib/rails_admin/adapters/active_record/abstract_object.rb +2 -2
  37. data/lib/rails_admin/adapters/active_record/property.rb +1 -5
  38. data/lib/rails_admin/adapters/active_record.rb +23 -10
  39. data/lib/rails_admin/adapters/mongoid/association.rb +1 -1
  40. data/lib/rails_admin/adapters/mongoid.rb +30 -13
  41. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +1 -3
  42. data/lib/rails_admin/bootstrap-sass.rb +7 -3
  43. data/lib/rails_admin/config/actions/base.rb +17 -1
  44. data/lib/rails_admin/config/actions/edit.rb +1 -3
  45. data/lib/rails_admin/config/actions/index.rb +3 -3
  46. data/lib/rails_admin/config/actions/new.rb +1 -3
  47. data/lib/rails_admin/config/configurable.rb +6 -4
  48. data/lib/rails_admin/config/fields/association.rb +1 -1
  49. data/lib/rails_admin/config/fields/base.rb +2 -2
  50. data/lib/rails_admin/config/fields/factories/action_text.rb +12 -0
  51. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  52. data/lib/rails_admin/config/fields/factories/shrine.rb +27 -0
  53. data/lib/rails_admin/config/fields/types/action_text.rb +30 -0
  54. data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -19
  55. data/lib/rails_admin/config/fields/types/active_storage.rb +1 -0
  56. data/lib/rails_admin/config/fields/types/all.rb +2 -1
  57. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +4 -0
  58. data/lib/rails_admin/config/fields/types/ck_editor.rb +7 -7
  59. data/lib/rails_admin/config/fields/types/code_mirror.rb +10 -12
  60. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  61. data/lib/rails_admin/config/fields/types/file_upload.rb +6 -2
  62. data/lib/rails_admin/config/fields/types/froala.rb +9 -11
  63. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  64. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +1 -1
  65. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +15 -3
  66. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +17 -3
  67. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +7 -0
  68. data/lib/rails_admin/config/fields/types/shrine.rb +52 -0
  69. data/lib/rails_admin/config/fields/types/simple_mde.rb +8 -5
  70. data/lib/rails_admin/config/fields/types/string.rb +2 -2
  71. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  72. data/lib/rails_admin/config/fields/types/text.rb +2 -20
  73. data/lib/rails_admin/config/fields/types/wysihtml5.rb +14 -10
  74. data/lib/rails_admin/config/fields.rb +2 -1
  75. data/lib/rails_admin/config/has_groups.rb +1 -1
  76. data/lib/rails_admin/config/lazy_model.rb +4 -4
  77. data/lib/rails_admin/config/model.rb +5 -4
  78. data/lib/rails_admin/config/proxyable/proxy.rb +7 -9
  79. data/lib/rails_admin/config/proxyable.rb +13 -1
  80. data/lib/rails_admin/config/sections/list.rb +23 -0
  81. data/lib/rails_admin/config.rb +9 -7
  82. data/lib/rails_admin/engine.rb +1 -2
  83. data/lib/rails_admin/extension.rb +16 -4
  84. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +45 -21
  85. data/lib/rails_admin/extensions/controller_extension.rb +6 -0
  86. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +27 -10
  87. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +1 -3
  88. data/lib/rails_admin/support/csv_converter.rb +1 -1
  89. data/lib/rails_admin/version.rb +3 -3
  90. data/lib/rails_admin.rb +0 -1
  91. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  92. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  93. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +2671 -0
  94. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  95. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  96. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  97. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  98. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  99. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  100. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  101. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  102. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  103. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  104. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  105. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  106. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  107. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  108. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  109. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  110. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  111. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  112. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  113. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  114. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  115. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  116. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  117. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  118. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  119. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  120. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  121. data/{app → vendor}/assets/images/rails_admin/colorpicker/select.png +0 -0
  122. data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  123. data/{app → vendor}/assets/images/rails_admin/colorpicker/slider.png +0 -0
  124. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -0
  125. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -0
  126. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -0
  127. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -0
  128. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -0
  129. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -0
  130. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -0
  131. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -0
  132. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -0
  133. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -0
  134. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -0
  135. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -0
  136. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  137. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  138. data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  139. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +1 -3
  140. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +9451 -3263
  141. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  142. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  143. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  144. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  145. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  146. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  147. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  148. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  149. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  150. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  151. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  152. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  153. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  154. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  155. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  156. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  157. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  158. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  159. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  160. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  161. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  162. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  163. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  164. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  165. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  166. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  167. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  168. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  169. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  170. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  171. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  172. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  173. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  174. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  175. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  176. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  177. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  178. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  179. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  180. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  181. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  182. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  183. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  184. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  185. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  186. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  187. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  188. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  189. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  190. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  191. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  192. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  193. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  194. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  195. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  196. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  197. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  198. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  199. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  200. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  201. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  202. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  203. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  204. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  205. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  206. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  207. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  208. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  209. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  210. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  211. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +2342 -0
  212. data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
  213. metadata +163 -170
  214. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  215. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -10
  216. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -58
  217. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -359
  218. data/app/assets/javascripts/rails_admin/ui.coffee +0 -102
  219. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  220. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  221. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
  222. data/lib/rails_admin/extensions/cancan.rb +0 -3
@@ -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
@@ -1,3 +0,0 @@
1
- require 'rails_admin/extensions/cancan/authorization_adapter'
2
-
3
- RailsAdmin.add_extension(:cancan, RailsAdmin::Extensions::CanCan, authorization: true)