rails_admin 2.0.0.beta → 2.0.0.rc

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 (178) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +1 -1
  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.i18n.js +28 -0
  7. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +57 -0
  8. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +31 -0
  9. data/app/assets/javascripts/rails_admin/ra.widgets.js +371 -0
  10. data/app/assets/javascripts/rails_admin/ui.js +135 -0
  11. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +4 -0
  12. data/app/helpers/rails_admin/application_helper.rb +17 -2
  13. data/app/views/layouts/rails_admin/_head.html.haml +7 -0
  14. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +1 -1
  15. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +2 -1
  16. data/app/views/layouts/rails_admin/application.html.haml +3 -8
  17. data/app/views/rails_admin/main/_form_file_upload.html.haml +3 -3
  18. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +6 -4
  19. data/config/locales/rails_admin.en.yml +1 -0
  20. data/lib/generators/rails_admin/templates/initializer.erb +2 -2
  21. data/lib/rails_admin.rb +0 -1
  22. data/lib/rails_admin/abstract_model.rb +1 -1
  23. data/lib/rails_admin/adapters/active_record.rb +12 -3
  24. data/lib/rails_admin/adapters/mongoid.rb +14 -0
  25. data/lib/rails_admin/bootstrap-sass.rb +1 -1
  26. data/lib/rails_admin/config.rb +4 -6
  27. data/lib/rails_admin/config/actions/base.rb +17 -1
  28. data/lib/rails_admin/config/actions/edit.rb +1 -3
  29. data/lib/rails_admin/config/actions/index.rb +1 -1
  30. data/lib/rails_admin/config/actions/new.rb +1 -3
  31. data/lib/rails_admin/config/fields.rb +0 -1
  32. data/lib/rails_admin/config/fields/association.rb +1 -1
  33. data/lib/rails_admin/config/fields/types/action_text.rb +1 -2
  34. data/lib/rails_admin/config/fields/types/all.rb +0 -1
  35. data/lib/rails_admin/config/fields/types/ck_editor.rb +2 -2
  36. data/lib/rails_admin/config/fields/types/code_mirror.rb +2 -2
  37. data/lib/rails_admin/config/fields/types/color.rb +2 -2
  38. data/lib/rails_admin/config/fields/types/file_upload.rb +6 -2
  39. data/lib/rails_admin/config/fields/types/froala.rb +2 -2
  40. data/lib/rails_admin/config/fields/types/hidden.rb +2 -2
  41. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +1 -1
  42. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +15 -3
  43. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +17 -3
  44. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +7 -0
  45. data/lib/rails_admin/config/fields/types/shrine.rb +5 -1
  46. data/lib/rails_admin/config/fields/types/simple_mde.rb +2 -2
  47. data/lib/rails_admin/config/fields/types/string.rb +2 -2
  48. data/lib/rails_admin/config/fields/types/string_like.rb +19 -0
  49. data/lib/rails_admin/config/fields/types/text.rb +2 -2
  50. data/lib/rails_admin/config/fields/types/wysihtml5.rb +2 -2
  51. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +45 -21
  52. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +4 -1
  53. data/lib/rails_admin/version.rb +1 -1
  54. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings-white.png +0 -0
  55. data/{app → vendor}/assets/images/rails_admin/bootstrap/glyphicons-halflings.png +0 -0
  56. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  57. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  58. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  59. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  60. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  61. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  62. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  63. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  64. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  65. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  66. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  67. data/{app → vendor}/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  68. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  69. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  70. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  71. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  72. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  73. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  74. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  75. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  76. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  77. data/{app → vendor}/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  78. data/{app → vendor}/assets/images/rails_admin/colorpicker/select.png +0 -0
  79. data/{app → vendor}/assets/images/rails_admin/colorpicker/select2.png +0 -0
  80. data/{app → vendor}/assets/images/rails_admin/colorpicker/slider.png +0 -0
  81. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-affix.js +0 -0
  82. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-alert.js +0 -0
  83. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-button.js +0 -0
  84. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-carousel.js +0 -0
  85. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-collapse.js +0 -0
  86. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-dropdown.js +0 -0
  87. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-modal.js +0 -0
  88. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-popover.js +0 -0
  89. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-scrollspy.js +0 -0
  90. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tab.js +0 -0
  91. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-tooltip.js +0 -0
  92. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-transition.js +0 -0
  93. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap-typeahead.js +0 -0
  94. data/{app → vendor}/assets/javascripts/rails_admin/bootstrap/bootstrap.js +0 -0
  95. data/{app → vendor}/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -0
  96. data/{app → vendor}/assets/javascripts/rails_admin/jquery.pjax.js +0 -0
  97. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_alerts.scss +0 -0
  98. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_badges.scss +0 -0
  99. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_breadcrumbs.scss +0 -0
  100. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_button-groups.scss +0 -0
  101. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -0
  102. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -0
  103. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -0
  104. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_code.scss +0 -0
  105. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_component-animations.scss +0 -0
  106. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_dropdowns.scss +0 -0
  107. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -0
  108. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_glyphicons.scss +0 -0
  109. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -0
  110. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_input-groups.scss +0 -0
  111. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_jumbotron.scss +0 -0
  112. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_labels.scss +0 -0
  113. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -0
  114. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_media.scss +0 -0
  115. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -0
  116. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_modals.scss +0 -0
  117. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -0
  118. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_navs.scss +0 -0
  119. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_normalize.scss +0 -0
  120. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pager.scss +0 -0
  121. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -0
  122. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_panels.scss +0 -0
  123. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_popovers.scss +0 -0
  124. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_print.scss +0 -0
  125. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_progress-bars.scss +0 -0
  126. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-embed.scss +0 -0
  127. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_responsive-utilities.scss +0 -0
  128. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_scaffolding.scss +0 -0
  129. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -0
  130. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_theme.scss +0 -0
  131. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_thumbnails.scss +0 -0
  132. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -0
  133. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -0
  134. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -0
  135. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -0
  136. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/_wells.scss +0 -0
  137. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -0
  138. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss +0 -0
  139. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss +0 -0
  140. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -0
  141. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -0
  142. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss +0 -0
  143. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -0
  144. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -0
  145. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -0
  146. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid-framework.scss +0 -0
  147. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -0
  148. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_hide-text.scss +0 -0
  149. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -0
  150. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_labels.scss +0 -0
  151. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -0
  152. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-divider.scss +0 -0
  153. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  154. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_opacity.scss +0 -0
  155. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -0
  156. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_panels.scss +0 -0
  157. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_progress-bar.scss +0 -0
  158. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-filter.scss +0 -0
  159. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -0
  160. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_responsive-visibility.scss +0 -0
  161. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_size.scss +0 -0
  162. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_tab-focus.scss +0 -0
  163. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_table-row.scss +0 -0
  164. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-emphasis.scss +0 -0
  165. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_text-overflow.scss +0 -0
  166. data/{app → vendor}/assets/stylesheets/rails_admin/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  167. data/{app → vendor}/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -0
  168. metadata +130 -153
  169. data/app/assets/javascripts/rails_admin/custom/ui.coffee +0 -1
  170. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +0 -10
  171. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.coffee +0 -55
  172. data/app/assets/javascripts/rails_admin/ra.sidescroll.coffee +0 -19
  173. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +0 -359
  174. data/app/assets/javascripts/rails_admin/ui.coffee +0 -107
  175. data/lib/rails_admin/config/fields/factories/refile.rb +0 -25
  176. data/lib/rails_admin/config/fields/types/refile.rb +0 -27
  177. data/lib/rails_admin/extensions/cancan.rb +0 -3
  178. data/lib/rails_admin/extensions/cancan/authorization_adapter.rb +0 -57
@@ -1 +0,0 @@
1
- #= override this file in your application to add custom behaviour
@@ -1,10 +0,0 @@
1
- @RailsAdmin ||= {}
2
- @RailsAdmin.I18n = class Locale
3
- @init: (@locale, @translations)->
4
- moment.locale(@locale)
5
- if typeof(@translations) == "string"
6
- @translations = JSON.parse(@translations)
7
-
8
- @t:(key) ->
9
- humanize = key.charAt(0).toUpperCase() + key.replace(/_/g, " ").slice(1)
10
- @translations[key] || humanize
@@ -1,55 +0,0 @@
1
- $ = jQuery
2
-
3
- $(document).ready ->
4
- window.nestedFormEvents.insertFields = (content, assoc, link) ->
5
- tab_content = $(link).closest(".controls").siblings(".tab-content")
6
- tab_content.append content
7
- tab_content.children().last()
8
-
9
- $(document).on 'nested:fieldAdded', 'form', (content) ->
10
- field = content.field.addClass('tab-pane').attr('id', 'unique-id-' + (new Date().getTime()))
11
- new_tab = $('<li><a data-toggle="tab" href="#' + field.attr('id') + '">' + field.children('.object-infos').data('object-label') + '</a></li>')
12
- parent_group = field.closest('.control-group')
13
- controls = parent_group.children('.controls')
14
- one_to_one = controls.data('nestedone') != undefined
15
- nav = controls.children('.nav')
16
- content = parent_group.children('.tab-content')
17
- toggler = controls.find('.toggler')
18
- nav.append(new_tab)
19
- $(window.document).trigger('rails_admin.dom_ready', [field, parent_group]) # fire dom_ready for new player in town
20
- new_tab.children('a').tab('show') # activate added tab
21
- nav.select(':hidden').show('slow') unless one_to_one # show nav if hidden
22
- content.select(':hidden').show('slow') # show tabs content if hidden
23
- # toggler 'on' if inactive
24
- toggler.addClass('active').removeClass('disabled').children('i').addClass('icon-chevron-down').removeClass('icon-chevron-right')
25
-
26
- # Convert the "add nested field" button to just showing the title of the new model
27
- controls.find('.add_nested_fields').removeClass('add_nested_fields').html(field.children('.object-infos').data('object-label')) if one_to_one
28
-
29
- $(document).on 'nested:fieldRemoved', 'form', (content) ->
30
- field = content.field
31
- nav = field.closest(".control-group").children('.controls').children('.nav')
32
- current_li = nav.children('li').has('a[href="#' + field.attr('id') + '"]')
33
- parent_group = field.closest(".control-group")
34
- controls = parent_group.children('.controls')
35
- one_to_one = controls.data('nestedone') != undefined
36
- toggler = controls.find('.toggler')
37
-
38
- # try to activate another tab
39
- (if current_li.next().length then current_li.next() else current_li.prev()).children('a:first').tab('show')
40
-
41
- current_li.remove()
42
-
43
- if nav.children().length == 0 # removed last tab
44
- nav.select(':visible').hide('slow') # hide nav. No use anymore.
45
- # toggler 'off' if active
46
- toggler.removeClass('active').addClass('disabled').children('i').removeClass('icon-chevron-down').addClass('icon-chevron-right')
47
-
48
- if one_to_one
49
- # Converts the title button to an "add nested field" button
50
- add_button = toggler.next()
51
- add_button.addClass('add_nested_fields').html(add_button.data('add-label'))
52
-
53
- # Removing all required attributes from deleted child form to bypass browser validations.
54
- field.find('[required]').each ->
55
- $(this).removeAttr('required')
@@ -1,19 +0,0 @@
1
- (->
2
- $ = jQuery
3
-
4
- setFrozenColPositions = ->
5
- $listForm = $('#bulk_form')
6
- return unless $listForm.is('.ra-sidescroll')
7
- frozenColumns = $listForm.data('ra-sidescroll')
8
- $listForm.find('table tr').each (index, tr) ->
9
- firstPosition = 0
10
- $(tr).children().slice(0, frozenColumns).each (idx, td) ->
11
- $(td).addClass('ra-sidescroll-frozen')
12
- $(td).addClass('last-of-frozen') if idx == frozenColumns - 1
13
- tdLeft = $(td).position().left
14
- firstPosition = tdLeft if idx == 0
15
- td.style.left = "#{tdLeft - firstPosition}px"
16
-
17
- $(window).on('load', setFrozenColPositions) # Update after link icons load.
18
- $(document).on('rails_admin.dom_ready', setFrozenColPositions)
19
- )()
@@ -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
- parent = $(this).closest('.controls')
52
- parent.find('.btn-remove-image').on 'click', ->
53
- $(this).siblings('[type=checkbox]').click()
54
- parent.find('.toggle').toggle('slow')
55
- $(this).toggleClass('btn-danger btn-info')
56
- false
57
-
58
- # fileupload-preview
59
-
60
- content.find('[data-fileupload]').change ->
61
- input = this
62
- image_container = $("#" + input.id).parent().children(".preview")
63
- unless image_container.length
64
- image_container = $("#" + input.id).parent().prepend($('<img />').addClass('preview').addClass('img-thumbnail')).find('img.preview')
65
- image_container.parent().find('img:not(.preview)').hide()
66
- ext = $("#" + input.id).val().split('.').pop().toLowerCase()
67
- if input.files and input.files[0] and $.inArray(ext, ['gif','png','jpg','jpeg','bmp']) != -1
68
- reader = new FileReader()
69
- reader.onload = (e) ->
70
- image_container.attr "src", e.target.result
71
- reader.readAsDataURL input.files[0]
72
- image_container.show()
73
- else
74
- image_container.hide()
75
-
76
- # multiple-fileupload
77
-
78
- content.find('[data-multiple-fileupload]').each ->
79
- $(this).closest('.controls').find('.btn-remove-image').on 'click', ->
80
- $(this).siblings('[type=checkbox]').click()
81
- $(this).parent('.toggle').toggle('slow')
82
- $(this).toggleClass('btn-danger btn-info')
83
- false
84
-
85
- # multiple-fileupload-preview
86
-
87
- content.find('[data-multiple-fileupload]').change ->
88
- input = this
89
- $("#" + input.id).parent().children(".preview").remove()
90
- for file in input.files
91
- ext = file.name.split('.').pop().toLowerCase()
92
- if $.inArray(ext, ['gif','png','jpg','jpeg','bmp']) == -1
93
- continue
94
- image_container = $('<img />').addClass('preview').addClass('img-thumbnail')
95
- do (image_container) ->
96
- reader = new FileReader()
97
- reader.onload = (e) ->
98
- image_container.attr "src", e.target.result
99
- reader.readAsDataURL file
100
- $("#" + input.id).parent().append($('<div></div>').addClass('preview').append(image_container))
101
-
102
- # filtering-multiselect
103
-
104
- content.find('[data-filteringmultiselect]').each ->
105
- $(this).filteringMultiselect $(this).data('options')
106
- if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
107
- $(this).siblings('.btn').remove()
108
- else
109
- $(this).parents('.control-group').first().remoteForm()
110
-
111
- # filtering-select
112
-
113
- content.find('[data-filteringselect]').each ->
114
- $(this).filteringSelect $(this).data('options')
115
- if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
116
- $(this).siblings('.btn').remove()
117
- else
118
- $(this).parents('.control-group').first().remoteForm()
119
-
120
- # nested-many
121
-
122
- content.find('[data-nestedmany]').each ->
123
- field = $(this).parents('.control-group').first()
124
- nav = field.find('> .controls > .nav')
125
- tab_content = field.find('> .tab-content')
126
- toggler = field.find('> .controls > .btn-group > .toggler')
127
- # add each nested field to a tab-pane and reference it in the nav
128
- tab_content.children('.fields:not(.tab-pane)').addClass('tab-pane').each ->
129
- $(this).attr('id', 'unique-id-' + (new Date().getTime()) + Math.floor(Math.random()*100000)) # some elements are created on the same ms
130
- nav.append('<li><a data-toggle="tab" href="#' + this.id + '">' + $(this).children('.object-infos').data('object-label') + '</a></li>')
131
- # only if no tab is set to active
132
- if nav.find("> li.active").length == 0
133
- # init first tab, toggler and tab_content/tabs visibility
134
- nav.find("> li > a[data-toggle='tab']:first").tab('show')
135
- if nav.children().length == 0
136
- nav.hide()
137
- tab_content.hide()
138
- toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
139
- else
140
- if toggler.hasClass('active')
141
- nav.show()
142
- tab_content.show()
143
- toggler.children('i').addClass('icon-chevron-down')
144
- else
145
- nav.hide()
146
- tab_content.hide()
147
- toggler.children('i').addClass('icon-chevron-right')
148
-
149
- # nested-one
150
-
151
- content.find('[data-nestedone]').each ->
152
- field = $(this).parents('.control-group').first()
153
- nav = field.find("> .controls > .nav")
154
- tab_content = field.find("> .tab-content")
155
- toggler = field.find('> .controls > .btn-group > .toggler')
156
- tab_content.children(".fields:not(.tab-pane)").addClass('tab-pane active').each ->
157
- # Convert the "add nested field" button to just showing the title of the new model
158
- field.find('> .controls .add_nested_fields').removeClass('add_nested_fields').html( $(this).children('.object-infos').data('object-label') )
159
- nav.append('<li><a data-toggle="tab" href="#' + this.id + '">' + $(this).children('.object-infos').data('object-label') + '</a></li>')
160
- first_tab = nav.find("> li > a[data-toggle='tab']:first")
161
- first_tab.tab('show')
162
- field.find("> .controls > [data-target]:first").html('<i class="icon-white"></i> ' + first_tab.html())
163
- nav.hide()
164
- if nav.children().length == 0
165
- nav.hide()
166
- tab_content.hide()
167
- toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
168
- else
169
- if toggler.hasClass('active')
170
- toggler.children('i').addClass('icon-chevron-down')
171
- tab_content.show()
172
- else
173
- toggler.children('i').addClass('icon-chevron-right')
174
- tab_content.hide()
175
-
176
- # polymorphic-association
177
-
178
- content.find('[data-polymorphic]').each ->
179
- type_select = $(this)
180
- field = type_select.parents('.control-group').first()
181
- object_select = field.find('select').last()
182
- urls = type_select.data('urls')
183
-
184
- type_select.on 'change', (e) ->
185
- selected_type = type_select.val().toLowerCase()
186
- selected_data = $("##{selected_type}-js-options").data('options')
187
- object_select.data('options', selected_data)
188
- object_select.filteringSelect("destroy")
189
- object_select.filteringSelect selected_data
190
-
191
-
192
- # simplemde
193
-
194
- goSimpleMDEs = ->
195
- content.find('[data-richtext=simplemde]').not('.simplemded').each (index, domEle) ->
196
- options = $(this).data('options')
197
- instance_config = options.instance_config
198
- new window.SimpleMDE($.extend(true, {
199
- element: document.getElementById(this.id),
200
- autosave: {
201
- uniqueId: this.id
202
- }
203
- }, instance_config))
204
- $(this).addClass('simplemded')
205
-
206
- $editors = content.find('[data-richtext=simplemde]').not('.simplemded')
207
- if $editors.length
208
- if not window.SimpleMDE
209
- options = $editors.first().data('options')
210
- $('head').append('<link href="' + options['css_location'] + '" rel="stylesheet" media="all" type="text\/css">')
211
- $.getScript options['js_location'], (script, textStatus, jqXHR) ->
212
- goSimpleMDEs()
213
- else
214
- goSimpleMDEs()
215
-
216
- # ckeditor
217
-
218
- goCkeditors = ->
219
- content.find('[data-richtext=ckeditor]').not('.ckeditored').each (index, domEle) ->
220
- try
221
- if instance = window.CKEDITOR.instances[this.id]
222
- instance.destroy(true)
223
- window.CKEDITOR.replace(this, $(this).data('options'))
224
- $(this).addClass('ckeditored')
225
-
226
- $editors = content.find('[data-richtext=ckeditor]').not('.ckeditored')
227
- if $editors.length
228
- if not window.CKEDITOR
229
- options = $editors.first().data('options')
230
- window.CKEDITOR_BASEPATH = options['base_location']
231
- $.getScript options['jspath'], (script, textStatus, jqXHR) =>
232
- goCkeditors()
233
- else
234
- goCkeditors()
235
-
236
- #codemirror
237
-
238
- goCodeMirrors = (array) =>
239
- array.each (index, domEle) ->
240
- options = $(this).data('options')
241
- textarea = this
242
- $.getScript options['locations']['mode'], (script, textStatus, jqXHR) ->
243
- options = $(domEle).data('options')
244
- $('head').append('<link href="' + options['locations']['theme'] + '" rel="stylesheet" media="all" type="text\/css">')
245
- CodeMirror.fromTextArea(textarea,options['options'])
246
- $(textarea).addClass('codemirrored')
247
-
248
- array = content.find('[data-richtext=codemirror]').not('.codemirrored')
249
- if array.length
250
- @array = array
251
- if not window.CodeMirror
252
- options = $(array[0]).data('options')
253
- $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
254
- $.getScript options['jspath'], (script, textStatus, jqXHR) =>
255
- goCodeMirrors(@array)
256
- else
257
- goCodeMirrors(@array)
258
-
259
- # bootstrap_wysihtml5
260
-
261
- goBootstrapWysihtml5s = (array, config_options) =>
262
- array.each ->
263
- $(@).addClass('bootstrap-wysihtml5ed')
264
- $(@).closest('.controls').addClass('well')
265
- $(@).wysihtml5(config_options)
266
-
267
- array = content.find('[data-richtext=bootstrap-wysihtml5]').not('.bootstrap-wysihtml5ed')
268
- if array.length
269
- @array = array
270
- options = $(array[0]).data('options')
271
- config_options = $.parseJSON(options['config_options'])
272
- if not window.wysihtml5
273
- $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
274
- $.getScript options['jspath'], (script, textStatus, jqXHR) =>
275
- goBootstrapWysihtml5s(@array, config_options)
276
- else
277
- goBootstrapWysihtml5s(@array, config_options)
278
-
279
- # froala_wysiwyg
280
-
281
- goFroalaWysiwygs = (array) =>
282
- array.each ->
283
- options = $(@).data('options')
284
- config_options = $.parseJSON(options['config_options'])
285
- if config_options
286
- if !config_options['inlineMode']
287
- config_options['inlineMode'] = false
288
- else
289
- config_options = { inlineMode: false }
290
-
291
- uploadEnabled =
292
- if config_options['imageUploadURL']
293
- config_options['imageUploadParams'] =
294
- authenticity_token: $('meta[name=csrf-token]').attr('content')
295
-
296
- $(@).addClass('froala-wysiwyged')
297
- $(@).froalaEditor(config_options)
298
- if uploadEnabled
299
- $(@).on 'froalaEditor.image.error', (e, editor, error) ->
300
- alert("error uploading image: " + error.message);
301
- # Custom error message returned from the server.
302
- if error.code == 0
303
-
304
- # Bad link.
305
- else if error.code == 1
306
-
307
- # No link in upload response.
308
- else if error.code == 2
309
-
310
- # Error during image upload.
311
- else if error.code == 3
312
-
313
- # Parsing response failed.
314
- else if error.code == 4
315
-
316
- # Image too large.
317
- else if error.code == 5
318
-
319
- # Invalid image type.
320
- else if error.code == 6
321
-
322
- # Image can be uploaded only to same domain in IE 8 and IE 9.
323
- else if error.code == 7
324
-
325
- else
326
-
327
- return
328
-
329
- .on('froalaEditor.image.removed', (e, editor, $img) ->
330
- # Set the image source to the image delete params.
331
- editor.options.imageDeleteParams =
332
- src: $img.attr('src')
333
- authenticity_token: $('meta[name=csrf-token]').attr('content')
334
- # Make the delete request.
335
- editor.deleteImage $img
336
- return
337
- ).on('editable.imageDeleteSuccess', (e, editor, data) ->
338
- # handle success
339
- ).on 'editable.imageDeleteError', (e, editor, error) ->
340
- # handle error
341
- alert("error deleting image: " + error.message);
342
-
343
- array = content.find('[data-richtext=froala-wysiwyg]').not('.froala-wysiwyged')
344
- if array.length
345
- options = $(array[0]).data('options')
346
- if not $.isFunction($.fn.editable)
347
- $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
348
- $.getScript options['jspath'], (script, textStatus, jqXHR) =>
349
- goFroalaWysiwygs(array)
350
- else
351
- goFroalaWysiwygs(array)
352
-
353
- # action_text
354
-
355
- content.find('trix-editor').each ->
356
- if !window.Trix
357
- options = $(this).data('options')
358
- $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
359
- $.getScript options['jspath']
@@ -1,107 +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
- RailsAdmin.I18n.init $('html').attr('lang'), $("#admin-js").data('i18nOptions')
57
- $(document).trigger('rails_admin.dom_ready')
58
-
59
- $(document).on 'pjax:end', ->
60
- $(document).trigger('rails_admin.dom_ready')
61
-
62
- $(document).on 'rails_admin.dom_ready', ->
63
- $('.nav.nav-pills li.active').removeClass('active')
64
- $(".nav.nav-pills li[data-model=\"#{$('.page-header').data('model')}\"]").addClass('active')
65
-
66
- $('.animate-width-to').each ->
67
- length = $(this).data("animate-length")
68
- width = $(this).data("animate-width-to")
69
- $(this).animate(width: width, length, 'easeOutQuad')
70
-
71
- $('.form-horizontal legend').has('i.icon-chevron-right').each ->
72
- $(this).siblings('.control-group').hide()
73
-
74
- $(".table").tooltip selector: "th[rel=tooltip]"
75
-
76
- # Workaround for jquery-ujs formnovalidate issue:
77
- # https://github.com/rails/jquery-ujs/issues/316
78
- $('[formnovalidate]').on 'click', ->
79
- $(this).closest('form').attr('novalidate', true)
80
-
81
- $.each $('#filters_box').data('options'), ->
82
- $.filters.append(this)
83
-
84
- # Interactions for index action
85
- $(document).on 'click', ".bulk-link", (event) ->
86
- event.preventDefault()
87
- $('#bulk_action').val($(this).data('action'))
88
- $('#bulk_form').submit()
89
-
90
- $(document).on 'click', "#remove_filter", (event) ->
91
- event.preventDefault()
92
- $("#filters_box").html("")
93
- $("hr.filters_box").hide()
94
- $(this).parent().siblings("input[type='search']").val("")
95
- $(this).parents("form").submit()
96
-
97
- # Interactions for export action
98
- $(document).on 'click', '#fields_to_export label input#check_all', () ->
99
- elems = $('#fields_to_export label input')
100
- if $('#fields_to_export label input#check_all').is ':checked'
101
- $(elems).prop('checked', true)
102
- else
103
- $(elems).prop('checked',false)
104
-
105
- $(document).on 'click', '#fields_to_export .reverse-selection', () ->
106
- $(this).closest(".control-group").find(".controls").find("input").click()
107
-