rails_admin 3.3.1 → 4.0.0.beta

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 (213) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -3
  3. data/README.md +11 -11
  4. data/Rakefile +3 -11
  5. data/app/assets/builds/rails_admin.css +10 -0
  6. data/app/assets/builds/rails_admin.js +34 -0
  7. data/app/controllers/rails_admin/main_controller.rb +3 -14
  8. data/app/helpers/rails_admin/application_helper.rb +3 -15
  9. data/app/helpers/rails_admin/form_builder.rb +6 -6
  10. data/app/views/layouts/rails_admin/_head.html.erb +10 -27
  11. data/app/views/layouts/rails_admin/_head_custom.html.erb +3 -0
  12. data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +1 -1
  13. data/app/views/rails_admin/main/_dashboard_history.html.erb +1 -1
  14. data/app/views/rails_admin/main/_delete_notice.html.erb +3 -3
  15. data/app/views/rails_admin/main/_form_boolean.html.erb +9 -13
  16. data/app/views/rails_admin/main/_submit_buttons.html.erb +4 -4
  17. data/app/views/rails_admin/main/bulk_delete.html.erb +2 -2
  18. data/app/views/rails_admin/main/dashboard.html.erb +3 -3
  19. data/app/views/rails_admin/main/delete.html.erb +2 -2
  20. data/app/views/rails_admin/main/export.html.erb +2 -2
  21. data/app/views/rails_admin/main/history.html.erb +2 -2
  22. data/app/views/rails_admin/main/index.html.erb +3 -3
  23. data/config/initializers/active_record_extensions.rb +1 -4
  24. data/lib/generators/rails_admin/install_generator.rb +37 -92
  25. data/lib/generators/rails_admin/templates/rails_admin.scss.erb +1 -1
  26. data/lib/rails_admin/abstract_model.rb +69 -191
  27. data/lib/rails_admin/adapters/active_record/property.rb +7 -0
  28. data/lib/rails_admin/adapters/active_record/reflection.rb +87 -0
  29. data/lib/rails_admin/adapters/active_record/repository.rb +216 -0
  30. data/lib/rails_admin/adapters/active_record/statement_builder.rb +148 -0
  31. data/lib/rails_admin/adapters/active_record/where_builder.rb +40 -0
  32. data/lib/rails_admin/adapters/active_record.rb +7 -360
  33. data/lib/rails_admin/adapters/mongoid/extension.rb +16 -6
  34. data/lib/rails_admin/adapters/mongoid/property.rb +7 -0
  35. data/lib/rails_admin/adapters/mongoid/reflection.rb +58 -0
  36. data/lib/rails_admin/adapters/mongoid/repository.rb +237 -0
  37. data/lib/rails_admin/adapters/mongoid/statement_builder.rb +93 -0
  38. data/lib/rails_admin/adapters/mongoid.rb +7 -305
  39. data/lib/rails_admin/adapters/reflection.rb +105 -0
  40. data/lib/rails_admin/adapters/repository.rb +169 -0
  41. data/lib/rails_admin/adapters/statement_builder.rb +109 -0
  42. data/lib/rails_admin/adapters.rb +94 -0
  43. data/lib/rails_admin/config/actions/base.rb +8 -0
  44. data/lib/rails_admin/config/actions/bulk_delete.rb +4 -4
  45. data/lib/rails_admin/config/actions/dashboard.rb +1 -1
  46. data/lib/rails_admin/config/actions/edit.rb +3 -2
  47. data/lib/rails_admin/config/actions/export.rb +1 -2
  48. data/lib/rails_admin/config/actions/index.rb +3 -3
  49. data/lib/rails_admin/config/actions/new.rb +3 -2
  50. data/lib/rails_admin/config/actions/show.rb +1 -1
  51. data/lib/rails_admin/config/configurable.rb +3 -2
  52. data/lib/rails_admin/config/fields/association.rb +9 -8
  53. data/lib/rails_admin/config/fields/base.rb +55 -37
  54. data/lib/rails_admin/config/fields/collection_association.rb +2 -2
  55. data/lib/rails_admin/config/fields/factories/carrierwave.rb +35 -20
  56. data/lib/rails_admin/config/fields/factories/dragonfly.rb +30 -18
  57. data/lib/rails_admin/config/fields/factories/enum.rb +14 -8
  58. data/lib/rails_admin/config/fields/factories/paperclip.rb +29 -19
  59. data/lib/rails_admin/config/fields/factories/shrine.rb +19 -8
  60. data/lib/rails_admin/config/fields/singular_association.rb +6 -1
  61. data/lib/rails_admin/config/fields/types/active_record_enum.rb +3 -7
  62. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +8 -4
  63. data/lib/rails_admin/config/fields/types/bson_object_id.rb +1 -1
  64. data/lib/rails_admin/config/fields/types/datetime.rb +0 -4
  65. data/lib/rails_admin/config/fields/types/dragonfly.rb +1 -1
  66. data/lib/rails_admin/config/fields/types/enum.rb +11 -2
  67. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +0 -2
  68. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +4 -4
  69. data/lib/rails_admin/config/fields/types/time.rb +1 -1
  70. data/lib/rails_admin/config/model.rb +27 -5
  71. data/lib/rails_admin/config/sections/list.rb +0 -8
  72. data/lib/rails_admin/config.rb +7 -21
  73. data/lib/rails_admin/criteria/path.rb +66 -0
  74. data/lib/rails_admin/criteria/period.rb +67 -0
  75. data/lib/rails_admin/engine.rb +11 -15
  76. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +2 -3
  77. data/lib/rails_admin/extensions/url_for_extension.rb +8 -0
  78. data/lib/rails_admin/support/asset_source.rb +42 -0
  79. data/lib/rails_admin/support/composite_keys_serializer.rb +28 -2
  80. data/lib/rails_admin/support/csv_converter.rb +3 -10
  81. data/lib/rails_admin/version.rb +8 -7
  82. data/lib/rails_admin.rb +7 -1
  83. data/lib/tasks/assets.rake +23 -0
  84. data/package.json +12 -7
  85. data/src/rails_admin/base.js +18 -15
  86. data/src/rails_admin/filter-box.js +7 -4
  87. data/src/rails_admin/filtering-multiselect.js +1 -1
  88. data/src/rails_admin/filtering-select.js +8 -8
  89. data/src/rails_admin/flatpickr.js +14 -0
  90. data/src/rails_admin/remote-form.js +74 -48
  91. data/src/rails_admin/styles/base/theming.scss +48 -25
  92. data/src/rails_admin/styles/base.scss +25 -1
  93. data/src/rails_admin/styles/filtering-select.scss +23 -62
  94. data/src/rails_admin/ui.js +1 -1
  95. data/src/rails_admin/vendor/jquery_nested_form.js +4 -4
  96. data/src/rails_admin/widgets.js +44 -11
  97. metadata +30 -124
  98. data/app/assets/javascripts/rails_admin/application.js.erb +0 -30
  99. data/app/assets/javascripts/rails_admin/custom/ui.js +0 -1
  100. data/app/assets/stylesheets/rails_admin/application.scss.erb +0 -35
  101. data/app/assets/stylesheets/rails_admin/custom/mixins.scss +0 -11
  102. data/app/assets/stylesheets/rails_admin/custom/theming.scss +0 -13
  103. data/app/assets/stylesheets/rails_admin/custom/variables.scss +0 -15
  104. data/lib/generators/rails_admin/importmap_formatter.rb +0 -29
  105. data/lib/generators/rails_admin/templates/rails_admin.vite.js +0 -2
  106. data/lib/generators/rails_admin/templates/rails_admin.webpacker.js +0 -2
  107. data/lib/rails_admin/adapters/active_record/object_extension.rb +0 -13
  108. data/lib/rails_admin/adapters/mongoid/object_extension.rb +0 -29
  109. data/lib/rails_admin/support/es_module_processor.rb +0 -23
  110. data/lib/rails_admin/support/serialization_schema.rb +0 -72
  111. data/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
  112. data/vendor/assets/javascripts/rails_admin/bootstrap.js +0 -5046
  113. data/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +0 -11246
  114. data/vendor/assets/javascripts/rails_admin/jquery-ui/data.js +0 -41
  115. data/vendor/assets/javascripts/rails_admin/jquery-ui/effect.js +0 -1637
  116. data/vendor/assets/javascripts/rails_admin/jquery-ui/ie.js +0 -17
  117. data/vendor/assets/javascripts/rails_admin/jquery-ui/keycode.js +0 -47
  118. data/vendor/assets/javascripts/rails_admin/jquery-ui/position.js +0 -500
  119. data/vendor/assets/javascripts/rails_admin/jquery-ui/safe-active-element.js +0 -42
  120. data/vendor/assets/javascripts/rails_admin/jquery-ui/scroll-parent.js +0 -47
  121. data/vendor/assets/javascripts/rails_admin/jquery-ui/unique-id.js +0 -51
  122. data/vendor/assets/javascripts/rails_admin/jquery-ui/version.js +0 -17
  123. data/vendor/assets/javascripts/rails_admin/jquery-ui/widget.js +0 -735
  124. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/autocomplete.js +0 -689
  125. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/menu.js +0 -680
  126. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/mouse.js +0 -230
  127. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/sortable.js +0 -1561
  128. data/vendor/assets/javascripts/rails_admin/jquery3.js +0 -10881
  129. data/vendor/assets/javascripts/rails_admin/popper.js +0 -1974
  130. data/vendor/assets/stylesheets/rails_admin/bootstrap/_accordion.scss +0 -118
  131. data/vendor/assets/stylesheets/rails_admin/bootstrap/_alert.scss +0 -57
  132. data/vendor/assets/stylesheets/rails_admin/bootstrap/_badge.scss +0 -29
  133. data/vendor/assets/stylesheets/rails_admin/bootstrap/_breadcrumb.scss +0 -28
  134. data/vendor/assets/stylesheets/rails_admin/bootstrap/_button-group.scss +0 -139
  135. data/vendor/assets/stylesheets/rails_admin/bootstrap/_buttons.scss +0 -111
  136. data/vendor/assets/stylesheets/rails_admin/bootstrap/_card.scss +0 -216
  137. data/vendor/assets/stylesheets/rails_admin/bootstrap/_carousel.scss +0 -229
  138. data/vendor/assets/stylesheets/rails_admin/bootstrap/_close.scss +0 -40
  139. data/vendor/assets/stylesheets/rails_admin/bootstrap/_containers.scss +0 -41
  140. data/vendor/assets/stylesheets/rails_admin/bootstrap/_dropdown.scss +0 -240
  141. data/vendor/assets/stylesheets/rails_admin/bootstrap/_forms.scss +0 -9
  142. data/vendor/assets/stylesheets/rails_admin/bootstrap/_functions.scss +0 -302
  143. data/vendor/assets/stylesheets/rails_admin/bootstrap/_grid.scss +0 -33
  144. data/vendor/assets/stylesheets/rails_admin/bootstrap/_helpers.scss +0 -9
  145. data/vendor/assets/stylesheets/rails_admin/bootstrap/_images.scss +0 -42
  146. data/vendor/assets/stylesheets/rails_admin/bootstrap/_list-group.scss +0 -174
  147. data/vendor/assets/stylesheets/rails_admin/bootstrap/_mixins.scss +0 -43
  148. data/vendor/assets/stylesheets/rails_admin/bootstrap/_modal.scss +0 -209
  149. data/vendor/assets/stylesheets/rails_admin/bootstrap/_nav.scss +0 -139
  150. data/vendor/assets/stylesheets/rails_admin/bootstrap/_navbar.scss +0 -335
  151. data/vendor/assets/stylesheets/rails_admin/bootstrap/_offcanvas.scss +0 -83
  152. data/vendor/assets/stylesheets/rails_admin/bootstrap/_pagination.scss +0 -64
  153. data/vendor/assets/stylesheets/rails_admin/bootstrap/_placeholders.scss +0 -51
  154. data/vendor/assets/stylesheets/rails_admin/bootstrap/_popover.scss +0 -158
  155. data/vendor/assets/stylesheets/rails_admin/bootstrap/_progress.scss +0 -48
  156. data/vendor/assets/stylesheets/rails_admin/bootstrap/_reboot.scss +0 -625
  157. data/vendor/assets/stylesheets/rails_admin/bootstrap/_root.scss +0 -54
  158. data/vendor/assets/stylesheets/rails_admin/bootstrap/_spinners.scss +0 -69
  159. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tables.scss +0 -155
  160. data/vendor/assets/stylesheets/rails_admin/bootstrap/_toasts.scss +0 -51
  161. data/vendor/assets/stylesheets/rails_admin/bootstrap/_tooltip.scss +0 -115
  162. data/vendor/assets/stylesheets/rails_admin/bootstrap/_transitions.scss +0 -27
  163. data/vendor/assets/stylesheets/rails_admin/bootstrap/_type.scss +0 -104
  164. data/vendor/assets/stylesheets/rails_admin/bootstrap/_utilities.scss +0 -630
  165. data/vendor/assets/stylesheets/rails_admin/bootstrap/_variables.scss +0 -1641
  166. data/vendor/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +0 -53
  167. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_floating-labels.scss +0 -63
  168. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-check.scss +0 -152
  169. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-control.scss +0 -219
  170. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-range.scss +0 -91
  171. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-select.scss +0 -72
  172. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_form-text.scss +0 -11
  173. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_input-group.scss +0 -121
  174. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_labels.scss +0 -36
  175. data/vendor/assets/stylesheets/rails_admin/bootstrap/forms/_validation.scss +0 -12
  176. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_clearfix.scss +0 -3
  177. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_colored-links.scss +0 -12
  178. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_position.scss +0 -30
  179. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_ratio.scss +0 -26
  180. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stacks.scss +0 -15
  181. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_stretched-link.scss +0 -15
  182. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_text-truncation.scss +0 -7
  183. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_visually-hidden.scss +0 -8
  184. data/vendor/assets/stylesheets/rails_admin/bootstrap/helpers/_vr.scss +0 -8
  185. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_alert.scss +0 -11
  186. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_backdrop.scss +0 -14
  187. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss +0 -78
  188. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_box-shadow.scss +0 -18
  189. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_breakpoints.scss +0 -127
  190. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss +0 -133
  191. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_caret.scss +0 -64
  192. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss +0 -9
  193. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_color-scheme.scss +0 -7
  194. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_container.scss +0 -9
  195. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_deprecate.scss +0 -10
  196. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss +0 -144
  197. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_gradients.scss +0 -47
  198. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_grid.scss +0 -151
  199. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_image.scss +0 -16
  200. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_list-group.scss +0 -24
  201. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_lists.scss +0 -7
  202. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_pagination.scss +0 -31
  203. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_reset-text.scss +0 -17
  204. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_resize.scss +0 -6
  205. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_table-variants.scss +0 -21
  206. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_text-truncate.scss +0 -8
  207. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_transition.scss +0 -26
  208. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_utilities.scss +0 -89
  209. data/vendor/assets/stylesheets/rails_admin/bootstrap/mixins/_visually-hidden.scss +0 -29
  210. data/vendor/assets/stylesheets/rails_admin/bootstrap/utilities/_api.scss +0 -47
  211. data/vendor/assets/stylesheets/rails_admin/bootstrap/vendor/_rfs.scss +0 -354
  212. data/vendor/assets/stylesheets/rails_admin/flatpickr.css +0 -791
  213. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +0 -6351
@@ -1,17 +0,0 @@
1
- //= require rails_admin/jquery-ui/version
2
-
3
- ( function( factory ) {
4
- if ( typeof define === "function" && define.amd ) {
5
-
6
- // AMD. Register as an anonymous module.
7
- define( [ "jquery", "./version" ], factory );
8
- } else {
9
-
10
- // Browser globals
11
- factory( jQuery );
12
- }
13
- } ( function( $ ) {
14
-
15
- // This file is deprecated
16
- return $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
17
- } ) );
@@ -1,47 +0,0 @@
1
- //= require rails_admin/jquery-ui/version
2
-
3
- /*!
4
- * jQuery UI Keycode 1.12.1
5
- * http://jqueryui.com
6
- *
7
- * Copyright jQuery Foundation and other contributors
8
- * Released under the MIT license.
9
- * http://jquery.org/license
10
- */
11
-
12
- //>>label: Keycode
13
- //>>group: Core
14
- //>>description: Provide keycodes as keynames
15
- //>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/
16
-
17
- ( function( factory ) {
18
- if ( typeof define === "function" && define.amd ) {
19
-
20
- // AMD. Register as an anonymous module.
21
- define( [ "jquery", "./version" ], factory );
22
- } else {
23
-
24
- // Browser globals
25
- factory( jQuery );
26
- }
27
- } ( function( $ ) {
28
- return $.ui.keyCode = {
29
- BACKSPACE: 8,
30
- COMMA: 188,
31
- DELETE: 46,
32
- DOWN: 40,
33
- END: 35,
34
- ENTER: 13,
35
- ESCAPE: 27,
36
- HOME: 36,
37
- LEFT: 37,
38
- PAGE_DOWN: 34,
39
- PAGE_UP: 33,
40
- PERIOD: 190,
41
- RIGHT: 39,
42
- SPACE: 32,
43
- TAB: 9,
44
- UP: 38
45
- };
46
-
47
- } ) );
@@ -1,500 +0,0 @@
1
- //= require rails_admin/jquery-ui/version
2
-
3
- /*!
4
- * jQuery UI Position 1.12.1
5
- * http://jqueryui.com
6
- *
7
- * Copyright jQuery Foundation and other contributors
8
- * Released under the MIT license.
9
- * http://jquery.org/license
10
- *
11
- * http://api.jqueryui.com/position/
12
- */
13
-
14
- //>>label: Position
15
- //>>group: Core
16
- //>>description: Positions elements relative to other elements.
17
- //>>docs: http://api.jqueryui.com/position/
18
- //>>demos: http://jqueryui.com/position/
19
-
20
- ( function( factory ) {
21
- if ( typeof define === "function" && define.amd ) {
22
-
23
- // AMD. Register as an anonymous module.
24
- define( [ "jquery", "./version" ], factory );
25
- } else {
26
-
27
- // Browser globals
28
- factory( jQuery );
29
- }
30
- }( function( $ ) {
31
- ( function() {
32
- var cachedScrollbarWidth,
33
- max = Math.max,
34
- abs = Math.abs,
35
- rhorizontal = /left|center|right/,
36
- rvertical = /top|center|bottom/,
37
- roffset = /[\+\-]\d+(\.[\d]+)?%?/,
38
- rposition = /^\w+/,
39
- rpercent = /%$/,
40
- _position = $.fn.position;
41
-
42
- function getOffsets( offsets, width, height ) {
43
- return [
44
- parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
45
- parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
46
- ];
47
- }
48
-
49
- function parseCss( element, property ) {
50
- return parseInt( $.css( element, property ), 10 ) || 0;
51
- }
52
-
53
- function getDimensions( elem ) {
54
- var raw = elem[ 0 ];
55
- if ( raw.nodeType === 9 ) {
56
- return {
57
- width: elem.width(),
58
- height: elem.height(),
59
- offset: { top: 0, left: 0 }
60
- };
61
- }
62
- if ( $.isWindow( raw ) ) {
63
- return {
64
- width: elem.width(),
65
- height: elem.height(),
66
- offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
67
- };
68
- }
69
- if ( raw.preventDefault ) {
70
- return {
71
- width: 0,
72
- height: 0,
73
- offset: { top: raw.pageY, left: raw.pageX }
74
- };
75
- }
76
- return {
77
- width: elem.outerWidth(),
78
- height: elem.outerHeight(),
79
- offset: elem.offset()
80
- };
81
- }
82
-
83
- $.position = {
84
- scrollbarWidth: function() {
85
- if ( cachedScrollbarWidth !== undefined ) {
86
- return cachedScrollbarWidth;
87
- }
88
- var w1, w2,
89
- div = $( "<div " +
90
- "style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +
91
- "<div style='height:100px;width:auto;'></div></div>" ),
92
- innerDiv = div.children()[ 0 ];
93
-
94
- $( "body" ).append( div );
95
- w1 = innerDiv.offsetWidth;
96
- div.css( "overflow", "scroll" );
97
-
98
- w2 = innerDiv.offsetWidth;
99
-
100
- if ( w1 === w2 ) {
101
- w2 = div[ 0 ].clientWidth;
102
- }
103
-
104
- div.remove();
105
-
106
- return ( cachedScrollbarWidth = w1 - w2 );
107
- },
108
- getScrollInfo: function( within ) {
109
- var overflowX = within.isWindow || within.isDocument ? "" :
110
- within.element.css( "overflow-x" ),
111
- overflowY = within.isWindow || within.isDocument ? "" :
112
- within.element.css( "overflow-y" ),
113
- hasOverflowX = overflowX === "scroll" ||
114
- ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
115
- hasOverflowY = overflowY === "scroll" ||
116
- ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
117
- return {
118
- width: hasOverflowY ? $.position.scrollbarWidth() : 0,
119
- height: hasOverflowX ? $.position.scrollbarWidth() : 0
120
- };
121
- },
122
- getWithinInfo: function( element ) {
123
- var withinElement = $( element || window ),
124
- isWindow = $.isWindow( withinElement[ 0 ] ),
125
- isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
126
- hasOffset = !isWindow && !isDocument;
127
- return {
128
- element: withinElement,
129
- isWindow: isWindow,
130
- isDocument: isDocument,
131
- offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
132
- scrollLeft: withinElement.scrollLeft(),
133
- scrollTop: withinElement.scrollTop(),
134
- width: withinElement.outerWidth(),
135
- height: withinElement.outerHeight()
136
- };
137
- }
138
- };
139
-
140
- $.fn.position = function( options ) {
141
- if ( !options || !options.of ) {
142
- return _position.apply( this, arguments );
143
- }
144
-
145
- // Make a copy, we don't want to modify arguments
146
- options = $.extend( {}, options );
147
-
148
- var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
149
- target = $( options.of ),
150
- within = $.position.getWithinInfo( options.within ),
151
- scrollInfo = $.position.getScrollInfo( within ),
152
- collision = ( options.collision || "flip" ).split( " " ),
153
- offsets = {};
154
-
155
- dimensions = getDimensions( target );
156
- if ( target[ 0 ].preventDefault ) {
157
-
158
- // Force left top to allow flipping
159
- options.at = "left top";
160
- }
161
- targetWidth = dimensions.width;
162
- targetHeight = dimensions.height;
163
- targetOffset = dimensions.offset;
164
-
165
- // Clone to reuse original targetOffset later
166
- basePosition = $.extend( {}, targetOffset );
167
-
168
- // Force my and at to have valid horizontal and vertical positions
169
- // if a value is missing or invalid, it will be converted to center
170
- $.each( [ "my", "at" ], function() {
171
- var pos = ( options[ this ] || "" ).split( " " ),
172
- horizontalOffset,
173
- verticalOffset;
174
-
175
- if ( pos.length === 1 ) {
176
- pos = rhorizontal.test( pos[ 0 ] ) ?
177
- pos.concat( [ "center" ] ) :
178
- rvertical.test( pos[ 0 ] ) ?
179
- [ "center" ].concat( pos ) :
180
- [ "center", "center" ];
181
- }
182
- pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
183
- pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
184
-
185
- // Calculate offsets
186
- horizontalOffset = roffset.exec( pos[ 0 ] );
187
- verticalOffset = roffset.exec( pos[ 1 ] );
188
- offsets[ this ] = [
189
- horizontalOffset ? horizontalOffset[ 0 ] : 0,
190
- verticalOffset ? verticalOffset[ 0 ] : 0
191
- ];
192
-
193
- // Reduce to just the positions without the offsets
194
- options[ this ] = [
195
- rposition.exec( pos[ 0 ] )[ 0 ],
196
- rposition.exec( pos[ 1 ] )[ 0 ]
197
- ];
198
- } );
199
-
200
- // Normalize collision option
201
- if ( collision.length === 1 ) {
202
- collision[ 1 ] = collision[ 0 ];
203
- }
204
-
205
- if ( options.at[ 0 ] === "right" ) {
206
- basePosition.left += targetWidth;
207
- } else if ( options.at[ 0 ] === "center" ) {
208
- basePosition.left += targetWidth / 2;
209
- }
210
-
211
- if ( options.at[ 1 ] === "bottom" ) {
212
- basePosition.top += targetHeight;
213
- } else if ( options.at[ 1 ] === "center" ) {
214
- basePosition.top += targetHeight / 2;
215
- }
216
-
217
- atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
218
- basePosition.left += atOffset[ 0 ];
219
- basePosition.top += atOffset[ 1 ];
220
-
221
- return this.each( function() {
222
- var collisionPosition, using,
223
- elem = $( this ),
224
- elemWidth = elem.outerWidth(),
225
- elemHeight = elem.outerHeight(),
226
- marginLeft = parseCss( this, "marginLeft" ),
227
- marginTop = parseCss( this, "marginTop" ),
228
- collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
229
- scrollInfo.width,
230
- collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
231
- scrollInfo.height,
232
- position = $.extend( {}, basePosition ),
233
- myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
234
-
235
- if ( options.my[ 0 ] === "right" ) {
236
- position.left -= elemWidth;
237
- } else if ( options.my[ 0 ] === "center" ) {
238
- position.left -= elemWidth / 2;
239
- }
240
-
241
- if ( options.my[ 1 ] === "bottom" ) {
242
- position.top -= elemHeight;
243
- } else if ( options.my[ 1 ] === "center" ) {
244
- position.top -= elemHeight / 2;
245
- }
246
-
247
- position.left += myOffset[ 0 ];
248
- position.top += myOffset[ 1 ];
249
-
250
- collisionPosition = {
251
- marginLeft: marginLeft,
252
- marginTop: marginTop
253
- };
254
-
255
- $.each( [ "left", "top" ], function( i, dir ) {
256
- if ( $.ui.position[ collision[ i ] ] ) {
257
- $.ui.position[ collision[ i ] ][ dir ]( position, {
258
- targetWidth: targetWidth,
259
- targetHeight: targetHeight,
260
- elemWidth: elemWidth,
261
- elemHeight: elemHeight,
262
- collisionPosition: collisionPosition,
263
- collisionWidth: collisionWidth,
264
- collisionHeight: collisionHeight,
265
- offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
266
- my: options.my,
267
- at: options.at,
268
- within: within,
269
- elem: elem
270
- } );
271
- }
272
- } );
273
-
274
- if ( options.using ) {
275
-
276
- // Adds feedback as second argument to using callback, if present
277
- using = function( props ) {
278
- var left = targetOffset.left - position.left,
279
- right = left + targetWidth - elemWidth,
280
- top = targetOffset.top - position.top,
281
- bottom = top + targetHeight - elemHeight,
282
- feedback = {
283
- target: {
284
- element: target,
285
- left: targetOffset.left,
286
- top: targetOffset.top,
287
- width: targetWidth,
288
- height: targetHeight
289
- },
290
- element: {
291
- element: elem,
292
- left: position.left,
293
- top: position.top,
294
- width: elemWidth,
295
- height: elemHeight
296
- },
297
- horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
298
- vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
299
- };
300
- if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
301
- feedback.horizontal = "center";
302
- }
303
- if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
304
- feedback.vertical = "middle";
305
- }
306
- if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
307
- feedback.important = "horizontal";
308
- } else {
309
- feedback.important = "vertical";
310
- }
311
- options.using.call( this, props, feedback );
312
- };
313
- }
314
-
315
- elem.offset( $.extend( position, { using: using } ) );
316
- } );
317
- };
318
-
319
- $.ui.position = {
320
- fit: {
321
- left: function( position, data ) {
322
- var within = data.within,
323
- withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
324
- outerWidth = within.width,
325
- collisionPosLeft = position.left - data.collisionPosition.marginLeft,
326
- overLeft = withinOffset - collisionPosLeft,
327
- overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
328
- newOverRight;
329
-
330
- // Element is wider than within
331
- if ( data.collisionWidth > outerWidth ) {
332
-
333
- // Element is initially over the left side of within
334
- if ( overLeft > 0 && overRight <= 0 ) {
335
- newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
336
- withinOffset;
337
- position.left += overLeft - newOverRight;
338
-
339
- // Element is initially over right side of within
340
- } else if ( overRight > 0 && overLeft <= 0 ) {
341
- position.left = withinOffset;
342
-
343
- // Element is initially over both left and right sides of within
344
- } else {
345
- if ( overLeft > overRight ) {
346
- position.left = withinOffset + outerWidth - data.collisionWidth;
347
- } else {
348
- position.left = withinOffset;
349
- }
350
- }
351
-
352
- // Too far left -> align with left edge
353
- } else if ( overLeft > 0 ) {
354
- position.left += overLeft;
355
-
356
- // Too far right -> align with right edge
357
- } else if ( overRight > 0 ) {
358
- position.left -= overRight;
359
-
360
- // Adjust based on position and margin
361
- } else {
362
- position.left = max( position.left - collisionPosLeft, position.left );
363
- }
364
- },
365
- top: function( position, data ) {
366
- var within = data.within,
367
- withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
368
- outerHeight = data.within.height,
369
- collisionPosTop = position.top - data.collisionPosition.marginTop,
370
- overTop = withinOffset - collisionPosTop,
371
- overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
372
- newOverBottom;
373
-
374
- // Element is taller than within
375
- if ( data.collisionHeight > outerHeight ) {
376
-
377
- // Element is initially over the top of within
378
- if ( overTop > 0 && overBottom <= 0 ) {
379
- newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
380
- withinOffset;
381
- position.top += overTop - newOverBottom;
382
-
383
- // Element is initially over bottom of within
384
- } else if ( overBottom > 0 && overTop <= 0 ) {
385
- position.top = withinOffset;
386
-
387
- // Element is initially over both top and bottom of within
388
- } else {
389
- if ( overTop > overBottom ) {
390
- position.top = withinOffset + outerHeight - data.collisionHeight;
391
- } else {
392
- position.top = withinOffset;
393
- }
394
- }
395
-
396
- // Too far up -> align with top
397
- } else if ( overTop > 0 ) {
398
- position.top += overTop;
399
-
400
- // Too far down -> align with bottom edge
401
- } else if ( overBottom > 0 ) {
402
- position.top -= overBottom;
403
-
404
- // Adjust based on position and margin
405
- } else {
406
- position.top = max( position.top - collisionPosTop, position.top );
407
- }
408
- }
409
- },
410
- flip: {
411
- left: function( position, data ) {
412
- var within = data.within,
413
- withinOffset = within.offset.left + within.scrollLeft,
414
- outerWidth = within.width,
415
- offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
416
- collisionPosLeft = position.left - data.collisionPosition.marginLeft,
417
- overLeft = collisionPosLeft - offsetLeft,
418
- overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
419
- myOffset = data.my[ 0 ] === "left" ?
420
- -data.elemWidth :
421
- data.my[ 0 ] === "right" ?
422
- data.elemWidth :
423
- 0,
424
- atOffset = data.at[ 0 ] === "left" ?
425
- data.targetWidth :
426
- data.at[ 0 ] === "right" ?
427
- -data.targetWidth :
428
- 0,
429
- offset = -2 * data.offset[ 0 ],
430
- newOverRight,
431
- newOverLeft;
432
-
433
- if ( overLeft < 0 ) {
434
- newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
435
- outerWidth - withinOffset;
436
- if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
437
- position.left += myOffset + atOffset + offset;
438
- }
439
- } else if ( overRight > 0 ) {
440
- newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
441
- atOffset + offset - offsetLeft;
442
- if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
443
- position.left += myOffset + atOffset + offset;
444
- }
445
- }
446
- },
447
- top: function( position, data ) {
448
- var within = data.within,
449
- withinOffset = within.offset.top + within.scrollTop,
450
- outerHeight = within.height,
451
- offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
452
- collisionPosTop = position.top - data.collisionPosition.marginTop,
453
- overTop = collisionPosTop - offsetTop,
454
- overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
455
- top = data.my[ 1 ] === "top",
456
- myOffset = top ?
457
- -data.elemHeight :
458
- data.my[ 1 ] === "bottom" ?
459
- data.elemHeight :
460
- 0,
461
- atOffset = data.at[ 1 ] === "top" ?
462
- data.targetHeight :
463
- data.at[ 1 ] === "bottom" ?
464
- -data.targetHeight :
465
- 0,
466
- offset = -2 * data.offset[ 1 ],
467
- newOverTop,
468
- newOverBottom;
469
- if ( overTop < 0 ) {
470
- newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
471
- outerHeight - withinOffset;
472
- if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
473
- position.top += myOffset + atOffset + offset;
474
- }
475
- } else if ( overBottom > 0 ) {
476
- newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
477
- offset - offsetTop;
478
- if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
479
- position.top += myOffset + atOffset + offset;
480
- }
481
- }
482
- }
483
- },
484
- flipfit: {
485
- left: function() {
486
- $.ui.position.flip.left.apply( this, arguments );
487
- $.ui.position.fit.left.apply( this, arguments );
488
- },
489
- top: function() {
490
- $.ui.position.flip.top.apply( this, arguments );
491
- $.ui.position.fit.top.apply( this, arguments );
492
- }
493
- }
494
- };
495
-
496
- } )();
497
-
498
- return $.ui.position;
499
-
500
- } ) );
@@ -1,42 +0,0 @@
1
- //= require rails_admin/jquery-ui/version
2
-
3
- ( function( factory ) {
4
- if ( typeof define === "function" && define.amd ) {
5
-
6
- // AMD. Register as an anonymous module.
7
- define( [ "jquery", "./version" ], factory );
8
- } else {
9
-
10
- // Browser globals
11
- factory( jQuery );
12
- }
13
- } ( function( $ ) {
14
- return $.ui.safeActiveElement = function( document ) {
15
- var activeElement;
16
-
17
- // Support: IE 9 only
18
- // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
19
- try {
20
- activeElement = document.activeElement;
21
- } catch ( error ) {
22
- activeElement = document.body;
23
- }
24
-
25
- // Support: IE 9 - 11 only
26
- // IE may return null instead of an element
27
- // Interestingly, this only seems to occur when NOT in an iframe
28
- if ( !activeElement ) {
29
- activeElement = document.body;
30
- }
31
-
32
- // Support: IE 11 only
33
- // IE11 returns a seemingly empty object in some cases when accessing
34
- // document.activeElement from an <iframe>
35
- if ( !activeElement.nodeName ) {
36
- activeElement = document.body;
37
- }
38
-
39
- return activeElement;
40
- };
41
-
42
- } ) );
@@ -1,47 +0,0 @@
1
- //= require rails_admin/jquery-ui/version
2
-
3
- /*!
4
- * jQuery UI Scroll Parent 1.12.1
5
- * http://jqueryui.com
6
- *
7
- * Copyright jQuery Foundation and other contributors
8
- * Released under the MIT license.
9
- * http://jquery.org/license
10
- */
11
-
12
- //>>label: scrollParent
13
- //>>group: Core
14
- //>>description: Get the closest ancestor element that is scrollable.
15
- //>>docs: http://api.jqueryui.com/scrollParent/
16
-
17
- ( function( factory ) {
18
- if ( typeof define === "function" && define.amd ) {
19
-
20
- // AMD. Register as an anonymous module.
21
- define( [ "jquery", "./version" ], factory );
22
- } else {
23
-
24
- // Browser globals
25
- factory( jQuery );
26
- }
27
- } ( function( $ ) {
28
-
29
- return $.fn.scrollParent = function( includeHidden ) {
30
- var position = this.css( "position" ),
31
- excludeStaticParent = position === "absolute",
32
- overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
33
- scrollParent = this.parents().filter( function() {
34
- var parent = $( this );
35
- if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
36
- return false;
37
- }
38
- return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
39
- parent.css( "overflow-x" ) );
40
- } ).eq( 0 );
41
-
42
- return position === "fixed" || !scrollParent.length ?
43
- $( this[ 0 ].ownerDocument || document ) :
44
- scrollParent;
45
- };
46
-
47
- } ) );
@@ -1,51 +0,0 @@
1
- //= require rails_admin/jquery-ui/version
2
-
3
- /*!
4
- * jQuery UI Unique ID 1.12.1
5
- * http://jqueryui.com
6
- *
7
- * Copyright jQuery Foundation and other contributors
8
- * Released under the MIT license.
9
- * http://jquery.org/license
10
- */
11
-
12
- //>>label: uniqueId
13
- //>>group: Core
14
- //>>description: Functions to generate and remove uniqueId's
15
- //>>docs: http://api.jqueryui.com/uniqueId/
16
-
17
- ( function( factory ) {
18
- if ( typeof define === "function" && define.amd ) {
19
-
20
- // AMD. Register as an anonymous module.
21
- define( [ "jquery", "./version" ], factory );
22
- } else {
23
-
24
- // Browser globals
25
- factory( jQuery );
26
- }
27
- } ( function( $ ) {
28
-
29
- return $.fn.extend( {
30
- uniqueId: ( function() {
31
- var uuid = 0;
32
-
33
- return function() {
34
- return this.each( function() {
35
- if ( !this.id ) {
36
- this.id = "ui-id-" + ( ++uuid );
37
- }
38
- } );
39
- };
40
- } )(),
41
-
42
- removeUniqueId: function() {
43
- return this.each( function() {
44
- if ( /^ui-id-\d+$/.test( this.id ) ) {
45
- $( this ).removeAttr( "id" );
46
- }
47
- } );
48
- }
49
- } );
50
-
51
- } ) );