rails_admin 2.2.1 → 3.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (328) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -11
  3. data/README.md +37 -31
  4. data/Rakefile +2 -2
  5. data/app/assets/javascripts/rails_admin.js +21 -0
  6. data/app/assets/stylesheets/rails_admin/custom/mixins.scss +1 -1
  7. data/app/assets/stylesheets/rails_admin/custom/variables.scss +1 -1
  8. data/app/assets/stylesheets/rails_admin.scss.erb +76 -0
  9. data/app/controllers/rails_admin/application_controller.rb +4 -3
  10. data/app/controllers/rails_admin/main_controller.rb +43 -24
  11. data/app/helpers/rails_admin/application_helper.rb +69 -52
  12. data/app/helpers/rails_admin/form_builder.rb +5 -4
  13. data/app/helpers/rails_admin/main_helper.rb +27 -43
  14. data/app/views/kaminari/ra-twitter-bootstrap/_gap.html.erb +5 -0
  15. data/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.erb +9 -0
  16. data/app/views/kaminari/ra-twitter-bootstrap/_page.html.erb +9 -0
  17. data/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.erb +13 -0
  18. data/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.erb +9 -0
  19. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.erb +9 -0
  20. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.erb +6 -0
  21. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.erb +9 -0
  22. data/app/views/layouts/rails_admin/_head.html.erb +17 -0
  23. data/app/views/layouts/rails_admin/_navigation.html.erb +21 -0
  24. data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +24 -0
  25. data/app/views/layouts/rails_admin/_sidebar_navigation.html.erb +9 -0
  26. data/app/views/layouts/rails_admin/application.html.erb +27 -0
  27. data/app/views/layouts/rails_admin/modal.js.erb +7 -0
  28. data/app/views/layouts/rails_admin/pjax.html.erb +20 -0
  29. data/app/views/rails_admin/main/_dashboard_history.html.erb +45 -0
  30. data/app/views/rails_admin/main/_delete_notice.html.erb +35 -0
  31. data/app/views/rails_admin/main/_form_action_text.html.erb +7 -0
  32. data/app/views/rails_admin/main/_form_boolean.html.erb +16 -0
  33. data/app/views/rails_admin/main/{_form_ck_editor.html.haml → _form_ck_editor.html.erb} +3 -3
  34. data/app/views/rails_admin/main/_form_code_mirror.html.erb +9 -0
  35. data/app/views/rails_admin/main/_form_colorpicker.html.erb +1 -0
  36. data/app/views/rails_admin/main/_form_datetime.html.erb +9 -0
  37. data/app/views/rails_admin/main/_form_enumeration.html.erb +21 -0
  38. data/app/views/rails_admin/main/_form_field.html.erb +1 -0
  39. data/app/views/rails_admin/main/_form_file_upload.html.erb +17 -0
  40. data/app/views/rails_admin/main/{_form_filtering_multiselect.html.haml → _form_filtering_multiselect.html.erb} +11 -11
  41. data/app/views/rails_admin/main/{_form_filtering_select.html.haml → _form_filtering_select.html.erb} +13 -12
  42. data/app/views/rails_admin/main/_form_froala.html.erb +8 -0
  43. data/app/views/rails_admin/main/_form_multiple_file_upload.html.erb +20 -0
  44. data/app/views/rails_admin/main/_form_nested_many.html.erb +21 -0
  45. data/app/views/rails_admin/main/_form_nested_one.html.erb +21 -0
  46. data/app/views/rails_admin/main/_form_polymorphic_association.html.erb +27 -0
  47. data/app/views/rails_admin/main/_form_simple_mde.html.erb +8 -0
  48. data/app/views/rails_admin/main/_form_text.html.erb +1 -0
  49. data/app/views/rails_admin/main/_form_wysihtml5.html.erb +8 -0
  50. data/app/views/rails_admin/main/_submit_buttons.html.erb +25 -0
  51. data/app/views/rails_admin/main/bulk_delete.html.erb +19 -0
  52. data/app/views/rails_admin/main/dashboard.html.erb +64 -0
  53. data/app/views/rails_admin/main/delete.html.erb +21 -0
  54. data/app/views/rails_admin/main/edit.html.erb +3 -0
  55. data/app/views/rails_admin/main/export.html.erb +146 -0
  56. data/app/views/rails_admin/main/history.html.erb +78 -0
  57. data/app/views/rails_admin/main/index.html.erb +193 -0
  58. data/app/views/rails_admin/main/new.html.erb +3 -0
  59. data/app/views/rails_admin/main/show.html.erb +28 -0
  60. data/config/initializers/active_record_extensions.rb +3 -1
  61. data/config/initializers/mongoid_extensions.rb +1 -1
  62. data/config/locales/rails_admin.en.yml +6 -1
  63. data/lib/generators/rails_admin/install_generator.rb +51 -3
  64. data/lib/generators/rails_admin/templates/environment.js +6 -0
  65. data/lib/generators/rails_admin/templates/initializer.erb +2 -1
  66. data/lib/generators/rails_admin/templates/rails_admin.js.erb +2 -0
  67. data/lib/generators/rails_admin/templates/rails_admin.scss +1 -0
  68. data/lib/generators/rails_admin/templates/webpack.config.js +32 -0
  69. data/lib/rails_admin/abstract_model.rb +24 -10
  70. data/lib/rails_admin/adapters/active_record/association.rb +20 -1
  71. data/lib/rails_admin/adapters/active_record/object_extension.rb +29 -0
  72. data/lib/rails_admin/adapters/active_record/property.rb +1 -1
  73. data/lib/rails_admin/adapters/active_record.rb +27 -23
  74. data/lib/rails_admin/adapters/mongoid/association.rb +38 -9
  75. data/lib/rails_admin/adapters/mongoid/bson.rb +4 -5
  76. data/lib/rails_admin/adapters/mongoid/extension.rb +3 -1
  77. data/lib/rails_admin/adapters/mongoid/object_extension.rb +32 -0
  78. data/lib/rails_admin/adapters/mongoid/property.rb +2 -2
  79. data/lib/rails_admin/adapters/mongoid.rb +27 -19
  80. data/lib/rails_admin/config/actions/base.rb +7 -2
  81. data/lib/rails_admin/config/actions/bulk_delete.rb +2 -2
  82. data/lib/rails_admin/config/actions/dashboard.rb +4 -3
  83. data/lib/rails_admin/config/actions/delete.rb +5 -9
  84. data/lib/rails_admin/config/actions/edit.rb +7 -7
  85. data/lib/rails_admin/config/actions/export.rb +2 -2
  86. data/lib/rails_admin/config/actions/history_index.rb +2 -2
  87. data/lib/rails_admin/config/actions/history_show.rb +2 -2
  88. data/lib/rails_admin/config/actions/index.rb +5 -7
  89. data/lib/rails_admin/config/actions/new.rb +9 -9
  90. data/lib/rails_admin/config/actions/show.rb +1 -1
  91. data/lib/rails_admin/config/actions/show_in_app.rb +6 -2
  92. data/lib/rails_admin/config/actions.rb +4 -4
  93. data/lib/rails_admin/config/configurable.rb +2 -2
  94. data/lib/rails_admin/config/fields/association.rb +15 -12
  95. data/lib/rails_admin/config/fields/base.rb +44 -24
  96. data/lib/rails_admin/config/fields/factories/active_storage.rb +1 -0
  97. data/lib/rails_admin/config/fields/factories/association.rb +6 -8
  98. data/lib/rails_admin/config/fields/factories/carrierwave.rb +2 -1
  99. data/lib/rails_admin/config/fields/factories/devise.rb +2 -1
  100. data/lib/rails_admin/config/fields/factories/dragonfly.rb +2 -1
  101. data/lib/rails_admin/config/fields/factories/paperclip.rb +2 -1
  102. data/lib/rails_admin/config/fields/factories/shrine.rb +1 -1
  103. data/lib/rails_admin/config/fields/group.rb +1 -2
  104. data/lib/rails_admin/config/fields/types/active_record_enum.rb +2 -0
  105. data/lib/rails_admin/config/fields/types/active_storage.rb +9 -7
  106. data/lib/rails_admin/config/fields/types/all.rb +1 -0
  107. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +4 -12
  108. data/lib/rails_admin/config/fields/types/boolean.rb +32 -8
  109. data/lib/rails_admin/config/fields/types/carrierwave.rb +1 -0
  110. data/lib/rails_admin/config/fields/types/citext.rb +13 -0
  111. data/lib/rails_admin/config/fields/types/color.rb +6 -2
  112. data/lib/rails_admin/config/fields/types/date.rb +5 -8
  113. data/lib/rails_admin/config/fields/types/datetime.rb +18 -21
  114. data/lib/rails_admin/config/fields/types/decimal.rb +9 -2
  115. data/lib/rails_admin/config/fields/types/dragonfly.rb +3 -1
  116. data/lib/rails_admin/config/fields/types/enum.rb +1 -1
  117. data/lib/rails_admin/config/fields/types/file_upload.rb +4 -3
  118. data/lib/rails_admin/config/fields/types/float.rb +9 -2
  119. data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -5
  120. data/lib/rails_admin/config/fields/types/has_one_association.rb +1 -13
  121. data/lib/rails_admin/config/fields/types/integer.rb +2 -6
  122. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +8 -6
  123. data/lib/rails_admin/config/fields/types/multiple_carrierwave.rb +1 -0
  124. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +4 -3
  125. data/lib/rails_admin/config/fields/types/numeric.rb +18 -0
  126. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +3 -2
  127. data/lib/rails_admin/config/fields/types/string.rb +1 -1
  128. data/lib/rails_admin/config/fields/types/time.rb +1 -4
  129. data/lib/rails_admin/config/fields/types/timestamp.rb +0 -4
  130. data/lib/rails_admin/config/fields/types.rb +1 -1
  131. data/lib/rails_admin/config/fields.rb +3 -1
  132. data/lib/rails_admin/config/has_fields.rb +5 -6
  133. data/lib/rails_admin/config/hideable.rb +1 -1
  134. data/lib/rails_admin/config/inspectable.rb +1 -3
  135. data/lib/rails_admin/config/model.rb +10 -10
  136. data/lib/rails_admin/config/sections/base.rb +2 -3
  137. data/lib/rails_admin/config/sections/list.rb +4 -15
  138. data/lib/rails_admin/config/sections.rb +1 -1
  139. data/lib/rails_admin/config.rb +73 -38
  140. data/lib/rails_admin/engine.rb +36 -23
  141. data/lib/rails_admin/extension.rb +6 -14
  142. data/lib/rails_admin/extensions/cancancan/authorization_adapter.rb +4 -2
  143. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +12 -7
  144. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +6 -7
  145. data/lib/rails_admin/support/csv_converter.rb +12 -13
  146. data/lib/rails_admin/support/datetime.rb +40 -74
  147. data/lib/rails_admin/support/esmodule_preprocessor.rb +32 -0
  148. data/lib/rails_admin/support/hash_helper.rb +6 -5
  149. data/lib/rails_admin/version.rb +8 -4
  150. data/lib/rails_admin.rb +1 -4
  151. data/lib/tasks/rails_admin.rake +3 -3
  152. data/package.json +28 -0
  153. data/src/rails_admin/base.js +21 -0
  154. data/src/rails_admin/filter-box.js +405 -0
  155. data/src/rails_admin/filtering-multiselect.js +394 -0
  156. data/src/rails_admin/filtering-select.js +302 -0
  157. data/src/rails_admin/i18n.js +19 -0
  158. data/src/rails_admin/nested-form-hooks.js +100 -0
  159. data/src/rails_admin/remote-form.js +190 -0
  160. data/src/rails_admin/sidescroll.js +20 -0
  161. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/base/README.txt +0 -0
  162. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/base/mixins.scss +0 -0
  163. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/base/theming.scss +93 -34
  164. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/base/variables.scss +0 -0
  165. data/src/rails_admin/styles/base.scss +64 -0
  166. data/src/rails_admin/styles/filtering-multiselect.scss +53 -0
  167. data/src/rails_admin/styles/filtering-select.scss +70 -0
  168. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/themes/cerulean/mixins.scss +0 -0
  169. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/themes/cerulean/theming.scss +23 -21
  170. data/src/rails_admin/styles/themes/cerulean/variables.scss +830 -0
  171. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/themes/default/mixins.scss +1 -1
  172. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/themes/default/theming.scss +0 -0
  173. data/{app/assets/stylesheets/rails_admin → src/rails_admin/styles}/themes/default/variables.scss +1 -1
  174. data/src/rails_admin/styles/widgets.scss +35 -0
  175. data/src/rails_admin/ui.js +172 -0
  176. data/src/rails_admin/vendor/jquery.pjax.js +899 -0
  177. data/src/rails_admin/vendor/jquery_nested_form.js +122 -0
  178. data/src/rails_admin/widgets.js +512 -0
  179. data/vendor/assets/fonts/rails_admin/fa-solid-900.eot +0 -0
  180. data/vendor/assets/fonts/rails_admin/fa-solid-900.svg +5034 -0
  181. data/vendor/assets/fonts/rails_admin/fa-solid-900.ttf +0 -0
  182. data/vendor/assets/fonts/rails_admin/fa-solid-900.woff +0 -0
  183. data/vendor/assets/fonts/rails_admin/fa-solid-900.woff2 +0 -0
  184. data/vendor/assets/javascripts/rails_admin/jquery-ui/data.js +41 -0
  185. data/vendor/assets/javascripts/rails_admin/jquery-ui/effect.js +1637 -0
  186. data/vendor/assets/javascripts/rails_admin/jquery-ui/ie.js +17 -0
  187. data/vendor/assets/javascripts/rails_admin/jquery-ui/keycode.js +47 -0
  188. data/vendor/assets/javascripts/rails_admin/jquery-ui/position.js +500 -0
  189. data/vendor/assets/javascripts/rails_admin/jquery-ui/safe-active-element.js +42 -0
  190. data/vendor/assets/javascripts/rails_admin/jquery-ui/scroll-parent.js +47 -0
  191. data/vendor/assets/javascripts/rails_admin/jquery-ui/unique-id.js +51 -0
  192. data/vendor/assets/javascripts/rails_admin/jquery-ui/version.js +17 -0
  193. data/vendor/assets/javascripts/rails_admin/jquery-ui/widget.js +735 -0
  194. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/autocomplete.js +689 -0
  195. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/menu.js +680 -0
  196. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/mouse.js +230 -0
  197. data/vendor/assets/javascripts/rails_admin/jquery-ui/widgets/sortable.js +1561 -0
  198. data/vendor/assets/javascripts/rails_admin/jquery3.js +10872 -0
  199. data/vendor/assets/stylesheets/rails_admin/font-awesome.scss +4476 -2216
  200. metadata +118 -262
  201. data/app/assets/images/rails_admin/aristo/images/bg_fallback.png +0 -0
  202. data/app/assets/images/rails_admin/aristo/images/icon_sprite.png +0 -0
  203. data/app/assets/images/rails_admin/aristo/images/progress_bar.gif +0 -0
  204. data/app/assets/images/rails_admin/aristo/images/slider_handles.png +0 -0
  205. data/app/assets/images/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  206. data/app/assets/images/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  207. data/app/assets/images/rails_admin/bullet_black.png +0 -0
  208. data/app/assets/images/rails_admin/bullet_white.png +0 -0
  209. data/app/assets/images/rails_admin/calendar.png +0 -0
  210. data/app/assets/images/rails_admin/clock.png +0 -0
  211. data/app/assets/images/rails_admin/logo.png +0 -0
  212. data/app/assets/images/rails_admin/magnifier.png +0 -0
  213. data/app/assets/images/rails_admin/multiselect/icon_sprite.png +0 -0
  214. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-dark.png +0 -0
  215. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-n-light.png +0 -0
  216. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-dark.png +0 -0
  217. data/app/assets/images/rails_admin/multiselect/ui-icon-circle-triangle-s-light.png +0 -0
  218. data/app/assets/javascripts/rails_admin/jquery-ui.js.erb +0 -8
  219. data/app/assets/javascripts/rails_admin/jquery.migrate.js +0 -3
  220. data/app/assets/javascripts/rails_admin/ra.filter-box.js +0 -246
  221. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +0 -331
  222. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +0 -294
  223. data/app/assets/javascripts/rails_admin/ra.i18n.js +0 -28
  224. data/app/assets/javascripts/rails_admin/ra.nested-form-hooks.js +0 -59
  225. data/app/assets/javascripts/rails_admin/ra.remote-form.js +0 -155
  226. data/app/assets/javascripts/rails_admin/ra.sidescroll.js +0 -31
  227. data/app/assets/javascripts/rails_admin/ra.widgets.js +0 -379
  228. data/app/assets/javascripts/rails_admin/rails_admin.js +0 -21
  229. data/app/assets/javascripts/rails_admin/ui.js +0 -135
  230. data/app/assets/stylesheets/rails_admin/aristo/images/bg_fallback.png +0 -0
  231. data/app/assets/stylesheets/rails_admin/aristo/images/icon_sprite.png +0 -0
  232. data/app/assets/stylesheets/rails_admin/aristo/images/progress_bar.gif +0 -0
  233. data/app/assets/stylesheets/rails_admin/aristo/images/slider_handles.png +0 -0
  234. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_222222_256x240.png +0 -0
  235. data/app/assets/stylesheets/rails_admin/aristo/images/ui-icons_454545_256x240.png +0 -0
  236. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss +0 -733
  237. data/app/assets/stylesheets/rails_admin/base/font-awesome-4-compability.scss +0 -153
  238. data/app/assets/stylesheets/rails_admin/ra.filtering-multiselect.scss +0 -88
  239. data/app/assets/stylesheets/rails_admin/ra.sidescroll.scss +0 -29
  240. data/app/assets/stylesheets/rails_admin/ra.widgets.scss +0 -17
  241. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +0 -110
  242. data/app/assets/stylesheets/rails_admin/themes/cerulean/variables.scss +0 -857
  243. data/app/views/kaminari/ra-twitter-bootstrap/_gap.html.haml +0 -2
  244. data/app/views/kaminari/ra-twitter-bootstrap/_next_page.html.haml +0 -4
  245. data/app/views/kaminari/ra-twitter-bootstrap/_page.html.haml +0 -4
  246. data/app/views/kaminari/ra-twitter-bootstrap/_paginator.html.haml +0 -9
  247. data/app/views/kaminari/ra-twitter-bootstrap/_prev_page.html.haml +0 -4
  248. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_next_page.html.haml +0 -4
  249. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_paginator.html.haml +0 -4
  250. data/app/views/kaminari/ra-twitter-bootstrap/without_count/_prev_page.html.haml +0 -4
  251. data/app/views/layouts/rails_admin/_head.html.haml +0 -7
  252. data/app/views/layouts/rails_admin/_navigation.html.haml +0 -12
  253. data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +0 -10
  254. data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +0 -3
  255. data/app/views/layouts/rails_admin/application.html.haml +0 -16
  256. data/app/views/layouts/rails_admin/pjax.html.haml +0 -12
  257. data/app/views/rails_admin/main/_dashboard_history.html.haml +0 -21
  258. data/app/views/rails_admin/main/_delete_notice.html.haml +0 -24
  259. data/app/views/rails_admin/main/_form_action_text.html.haml +0 -7
  260. data/app/views/rails_admin/main/_form_boolean.html.haml +0 -3
  261. data/app/views/rails_admin/main/_form_code_mirror.html.haml +0 -9
  262. data/app/views/rails_admin/main/_form_colorpicker.html.haml +0 -1
  263. data/app/views/rails_admin/main/_form_datetime.html.haml +0 -5
  264. data/app/views/rails_admin/main/_form_enumeration.html.haml +0 -19
  265. data/app/views/rails_admin/main/_form_field.html.haml +0 -1
  266. data/app/views/rails_admin/main/_form_file_upload.html.haml +0 -17
  267. data/app/views/rails_admin/main/_form_froala.html.haml +0 -8
  268. data/app/views/rails_admin/main/_form_multiple_file_upload.html.haml +0 -16
  269. data/app/views/rails_admin/main/_form_nested_many.html.haml +0 -15
  270. data/app/views/rails_admin/main/_form_nested_one.html.haml +0 -17
  271. data/app/views/rails_admin/main/_form_polymorphic_association.html.haml +0 -26
  272. data/app/views/rails_admin/main/_form_simple_mde.haml +0 -8
  273. data/app/views/rails_admin/main/_form_text.html.haml +0 -1
  274. data/app/views/rails_admin/main/_form_wysihtml5.html.haml +0 -8
  275. data/app/views/rails_admin/main/_submit_buttons.html.haml +0 -16
  276. data/app/views/rails_admin/main/bulk_delete.html.haml +0 -11
  277. data/app/views/rails_admin/main/dashboard.html.haml +0 -34
  278. data/app/views/rails_admin/main/delete.html.haml +0 -18
  279. data/app/views/rails_admin/main/edit.html.haml +0 -2
  280. data/app/views/rails_admin/main/export.html.haml +0 -92
  281. data/app/views/rails_admin/main/history.html.haml +0 -51
  282. data/app/views/rails_admin/main/index.html.haml +0 -126
  283. data/app/views/rails_admin/main/new.html.haml +0 -2
  284. data/app/views/rails_admin/main/show.html.haml +0 -15
  285. data/config/initializers/haml.rb +0 -5
  286. data/lib/rails_admin/adapters/active_record/abstract_object.rb +0 -38
  287. data/lib/rails_admin/adapters/mongoid/abstract_object.rb +0 -42
  288. data/lib/rails_admin/bootstrap-sass/compass_functions.rb +0 -28
  289. data/lib/rails_admin/bootstrap-sass/sass_functions.rb +0 -16
  290. data/lib/rails_admin/bootstrap-sass.rb +0 -49
  291. data/lib/rails_admin/config/lazy_model.rb +0 -68
  292. data/lib/rails_admin/extensions/history/auditing_adapter.rb +0 -37
  293. data/lib/rails_admin/extensions/history/history.rb +0 -44
  294. data/lib/rails_admin/extensions/history.rb +0 -3
  295. data/lib/rails_admin/support/i18n.rb +0 -43
  296. data/vendor/assets/fonts/rails_admin/FontAwesome.otf +0 -0
  297. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.eot +0 -0
  298. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.svg +0 -2671
  299. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.ttf +0 -0
  300. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff +0 -0
  301. data/vendor/assets/fonts/rails_admin/fontawesome-webfont.woff2 +0 -0
  302. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_background.png +0 -0
  303. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hex.png +0 -0
  304. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_b.png +0 -0
  305. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_h.png +0 -0
  306. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_hsb_s.png +0 -0
  307. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_indic.gif +0 -0
  308. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_overlay.png +0 -0
  309. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_b.png +0 -0
  310. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_g.png +0 -0
  311. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_rgb_r.png +0 -0
  312. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_select.gif +0 -0
  313. data/vendor/assets/images/rails_admin/colorpicker/colorpicker_submit.png +0 -0
  314. data/vendor/assets/images/rails_admin/colorpicker/custom_background.png +0 -0
  315. data/vendor/assets/images/rails_admin/colorpicker/custom_hex.png +0 -0
  316. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_b.png +0 -0
  317. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_h.png +0 -0
  318. data/vendor/assets/images/rails_admin/colorpicker/custom_hsb_s.png +0 -0
  319. data/vendor/assets/images/rails_admin/colorpicker/custom_indic.gif +0 -0
  320. data/vendor/assets/images/rails_admin/colorpicker/custom_rgb_b.png +0 -0
  321. data/vendor/assets/images/rails_admin/colorpicker/custom_rgb_g.png +0 -0
  322. data/vendor/assets/images/rails_admin/colorpicker/custom_rgb_r.png +0 -0
  323. data/vendor/assets/images/rails_admin/colorpicker/custom_submit.png +0 -0
  324. data/vendor/assets/images/rails_admin/colorpicker/select.png +0 -0
  325. data/vendor/assets/images/rails_admin/colorpicker/select2.png +0 -0
  326. data/vendor/assets/images/rails_admin/colorpicker/slider.png +0 -0
  327. data/vendor/assets/javascripts/rails_admin/jquery.colorpicker.js +0 -484
  328. data/vendor/assets/stylesheets/rails_admin/jquery.colorpicker.scss +0 -182
@@ -0,0 +1,680 @@
1
+ //= require rails_admin/jquery-ui/keycode
2
+ //= require rails_admin/jquery-ui/position
3
+ //= require rails_admin/jquery-ui/safe-active-element
4
+ //= require rails_admin/jquery-ui/unique-id
5
+ //= require rails_admin/jquery-ui/version
6
+ //= require rails_admin/jquery-ui/widget
7
+
8
+ /*!
9
+ * jQuery UI Menu 1.12.1
10
+ * http://jqueryui.com
11
+ *
12
+ * Copyright jQuery Foundation and other contributors
13
+ * Released under the MIT license.
14
+ * http://jquery.org/license
15
+ */
16
+
17
+ //>>label: Menu
18
+ //>>group: Widgets
19
+ //>>description: Creates nestable menus.
20
+ //>>docs: http://api.jqueryui.com/menu/
21
+ //>>demos: http://jqueryui.com/menu/
22
+ //>>css.structure: ../../themes/base/core.css
23
+ //>>css.structure: ../../themes/base/menu.css
24
+ //>>css.theme: ../../themes/base/theme.css
25
+
26
+ ( function( factory ) {
27
+ if ( typeof define === "function" && define.amd ) {
28
+
29
+ // AMD. Register as an anonymous module.
30
+ define( [
31
+ "jquery",
32
+ "../keycode",
33
+ "../position",
34
+ "../safe-active-element",
35
+ "../unique-id",
36
+ "../version",
37
+ "../widget"
38
+ ], factory );
39
+ } else {
40
+
41
+ // Browser globals
42
+ factory( jQuery );
43
+ }
44
+ }( function( $ ) {
45
+
46
+ return $.widget( "ui.menu", {
47
+ version: "1.12.1",
48
+ defaultElement: "<ul>",
49
+ delay: 300,
50
+ options: {
51
+ icons: {
52
+ submenu: "ui-icon-caret-1-e"
53
+ },
54
+ items: "> *",
55
+ menus: "ul",
56
+ position: {
57
+ my: "left top",
58
+ at: "right top"
59
+ },
60
+ role: "menu",
61
+
62
+ // Callbacks
63
+ blur: null,
64
+ focus: null,
65
+ select: null
66
+ },
67
+
68
+ _create: function() {
69
+ this.activeMenu = this.element;
70
+
71
+ // Flag used to prevent firing of the click handler
72
+ // as the event bubbles up through nested menus
73
+ this.mouseHandled = false;
74
+ this.element
75
+ .uniqueId()
76
+ .attr( {
77
+ role: this.options.role,
78
+ tabIndex: 0
79
+ } );
80
+
81
+ this._addClass( "ui-menu", "ui-widget ui-widget-content" );
82
+ this._on( {
83
+
84
+ // Prevent focus from sticking to links inside menu after clicking
85
+ // them (focus should always stay on UL during navigation).
86
+ "mousedown .ui-menu-item": function( event ) {
87
+ event.preventDefault();
88
+ },
89
+ "click .ui-menu-item": function( event ) {
90
+ var target = $( event.target );
91
+ var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
92
+ if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
93
+ this.select( event );
94
+
95
+ // Only set the mouseHandled flag if the event will bubble, see #9469.
96
+ if ( !event.isPropagationStopped() ) {
97
+ this.mouseHandled = true;
98
+ }
99
+
100
+ // Open submenu on click
101
+ if ( target.has( ".ui-menu" ).length ) {
102
+ this.expand( event );
103
+ } else if ( !this.element.is( ":focus" ) &&
104
+ active.closest( ".ui-menu" ).length ) {
105
+
106
+ // Redirect focus to the menu
107
+ this.element.trigger( "focus", [ true ] );
108
+
109
+ // If the active item is on the top level, let it stay active.
110
+ // Otherwise, blur the active item since it is no longer visible.
111
+ if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
112
+ clearTimeout( this.timer );
113
+ }
114
+ }
115
+ }
116
+ },
117
+ "mouseenter .ui-menu-item": function( event ) {
118
+
119
+ // Ignore mouse events while typeahead is active, see #10458.
120
+ // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
121
+ // is over an item in the menu
122
+ if ( this.previousFilter ) {
123
+ return;
124
+ }
125
+
126
+ var actualTarget = $( event.target ).closest( ".ui-menu-item" ),
127
+ target = $( event.currentTarget );
128
+
129
+ // Ignore bubbled events on parent items, see #11641
130
+ if ( actualTarget[ 0 ] !== target[ 0 ] ) {
131
+ return;
132
+ }
133
+
134
+ // Remove ui-state-active class from siblings of the newly focused menu item
135
+ // to avoid a jump caused by adjacent elements both having a class with a border
136
+ this._removeClass( target.siblings().children( ".ui-state-active" ),
137
+ null, "ui-state-active" );
138
+ this.focus( event, target );
139
+ },
140
+ mouseleave: "collapseAll",
141
+ "mouseleave .ui-menu": "collapseAll",
142
+ focus: function( event, keepActiveItem ) {
143
+
144
+ // If there's already an active item, keep it active
145
+ // If not, activate the first item
146
+ var item = this.active || this.element.find( this.options.items ).eq( 0 );
147
+
148
+ if ( !keepActiveItem ) {
149
+ this.focus( event, item );
150
+ }
151
+ },
152
+ blur: function( event ) {
153
+ this._delay( function() {
154
+ var notContained = !$.contains(
155
+ this.element[ 0 ],
156
+ $.ui.safeActiveElement( this.document[ 0 ] )
157
+ );
158
+ if ( notContained ) {
159
+ this.collapseAll( event );
160
+ }
161
+ } );
162
+ },
163
+ keydown: "_keydown"
164
+ } );
165
+
166
+ this.refresh();
167
+
168
+ // Clicks outside of a menu collapse any open menus
169
+ this._on( this.document, {
170
+ click: function( event ) {
171
+ if ( this._closeOnDocumentClick( event ) ) {
172
+ this.collapseAll( event );
173
+ }
174
+
175
+ // Reset the mouseHandled flag
176
+ this.mouseHandled = false;
177
+ }
178
+ } );
179
+ },
180
+
181
+ _destroy: function() {
182
+ var items = this.element.find( ".ui-menu-item" )
183
+ .removeAttr( "role aria-disabled" ),
184
+ submenus = items.children( ".ui-menu-item-wrapper" )
185
+ .removeUniqueId()
186
+ .removeAttr( "tabIndex role aria-haspopup" );
187
+
188
+ // Destroy (sub)menus
189
+ this.element
190
+ .removeAttr( "aria-activedescendant" )
191
+ .find( ".ui-menu" ).addBack()
192
+ .removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " +
193
+ "tabIndex" )
194
+ .removeUniqueId()
195
+ .show();
196
+
197
+ submenus.children().each( function() {
198
+ var elem = $( this );
199
+ if ( elem.data( "ui-menu-submenu-caret" ) ) {
200
+ elem.remove();
201
+ }
202
+ } );
203
+ },
204
+
205
+ _keydown: function( event ) {
206
+ var match, prev, character, skip,
207
+ preventDefault = true;
208
+
209
+ switch ( event.keyCode ) {
210
+ case $.ui.keyCode.PAGE_UP:
211
+ this.previousPage( event );
212
+ break;
213
+ case $.ui.keyCode.PAGE_DOWN:
214
+ this.nextPage( event );
215
+ break;
216
+ case $.ui.keyCode.HOME:
217
+ this._move( "first", "first", event );
218
+ break;
219
+ case $.ui.keyCode.END:
220
+ this._move( "last", "last", event );
221
+ break;
222
+ case $.ui.keyCode.UP:
223
+ this.previous( event );
224
+ break;
225
+ case $.ui.keyCode.DOWN:
226
+ this.next( event );
227
+ break;
228
+ case $.ui.keyCode.LEFT:
229
+ this.collapse( event );
230
+ break;
231
+ case $.ui.keyCode.RIGHT:
232
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
233
+ this.expand( event );
234
+ }
235
+ break;
236
+ case $.ui.keyCode.ENTER:
237
+ case $.ui.keyCode.SPACE:
238
+ this._activate( event );
239
+ break;
240
+ case $.ui.keyCode.ESCAPE:
241
+ this.collapse( event );
242
+ break;
243
+ default:
244
+ preventDefault = false;
245
+ prev = this.previousFilter || "";
246
+ skip = false;
247
+
248
+ // Support number pad values
249
+ character = event.keyCode >= 96 && event.keyCode <= 105 ?
250
+ ( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );
251
+
252
+ clearTimeout( this.filterTimer );
253
+
254
+ if ( character === prev ) {
255
+ skip = true;
256
+ } else {
257
+ character = prev + character;
258
+ }
259
+
260
+ match = this._filterMenuItems( character );
261
+ match = skip && match.index( this.active.next() ) !== -1 ?
262
+ this.active.nextAll( ".ui-menu-item" ) :
263
+ match;
264
+
265
+ // If no matches on the current filter, reset to the last character pressed
266
+ // to move down the menu to the first item that starts with that character
267
+ if ( !match.length ) {
268
+ character = String.fromCharCode( event.keyCode );
269
+ match = this._filterMenuItems( character );
270
+ }
271
+
272
+ if ( match.length ) {
273
+ this.focus( event, match );
274
+ this.previousFilter = character;
275
+ this.filterTimer = this._delay( function() {
276
+ delete this.previousFilter;
277
+ }, 1000 );
278
+ } else {
279
+ delete this.previousFilter;
280
+ }
281
+ }
282
+
283
+ if ( preventDefault ) {
284
+ event.preventDefault();
285
+ }
286
+ },
287
+
288
+ _activate: function( event ) {
289
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
290
+ if ( this.active.children( "[aria-haspopup='true']" ).length ) {
291
+ this.expand( event );
292
+ } else {
293
+ this.select( event );
294
+ }
295
+ }
296
+ },
297
+
298
+ refresh: function() {
299
+ var menus, items, newSubmenus, newItems, newWrappers,
300
+ that = this,
301
+ icon = this.options.icons.submenu,
302
+ submenus = this.element.find( this.options.menus );
303
+
304
+ this._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length );
305
+
306
+ // Initialize nested menus
307
+ newSubmenus = submenus.filter( ":not(.ui-menu)" )
308
+ .hide()
309
+ .attr( {
310
+ role: this.options.role,
311
+ "aria-hidden": "true",
312
+ "aria-expanded": "false"
313
+ } )
314
+ .each( function() {
315
+ var menu = $( this ),
316
+ item = menu.prev(),
317
+ submenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true );
318
+
319
+ that._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon );
320
+ item
321
+ .attr( "aria-haspopup", "true" )
322
+ .prepend( submenuCaret );
323
+ menu.attr( "aria-labelledby", item.attr( "id" ) );
324
+ } );
325
+
326
+ this._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" );
327
+
328
+ menus = submenus.add( this.element );
329
+ items = menus.find( this.options.items );
330
+
331
+ // Initialize menu-items containing spaces and/or dashes only as dividers
332
+ items.not( ".ui-menu-item" ).each( function() {
333
+ var item = $( this );
334
+ if ( that._isDivider( item ) ) {
335
+ that._addClass( item, "ui-menu-divider", "ui-widget-content" );
336
+ }
337
+ } );
338
+
339
+ // Don't refresh list items that are already adapted
340
+ newItems = items.not( ".ui-menu-item, .ui-menu-divider" );
341
+ newWrappers = newItems.children()
342
+ .not( ".ui-menu" )
343
+ .uniqueId()
344
+ .attr( {
345
+ tabIndex: -1,
346
+ role: this._itemRole()
347
+ } );
348
+ this._addClass( newItems, "ui-menu-item" )
349
+ ._addClass( newWrappers, "ui-menu-item-wrapper" );
350
+
351
+ // Add aria-disabled attribute to any disabled menu item
352
+ items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
353
+
354
+ // If the active item has been removed, blur the menu
355
+ if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
356
+ this.blur();
357
+ }
358
+ },
359
+
360
+ _itemRole: function() {
361
+ return {
362
+ menu: "menuitem",
363
+ listbox: "option"
364
+ }[ this.options.role ];
365
+ },
366
+
367
+ _setOption: function( key, value ) {
368
+ if ( key === "icons" ) {
369
+ var icons = this.element.find( ".ui-menu-icon" );
370
+ this._removeClass( icons, null, this.options.icons.submenu )
371
+ ._addClass( icons, null, value.submenu );
372
+ }
373
+ this._super( key, value );
374
+ },
375
+
376
+ _setOptionDisabled: function( value ) {
377
+ this._super( value );
378
+
379
+ this.element.attr( "aria-disabled", String( value ) );
380
+ this._toggleClass( null, "ui-state-disabled", !!value );
381
+ },
382
+
383
+ focus: function( event, item ) {
384
+ var nested, focused, activeParent;
385
+ this.blur( event, event && event.type === "focus" );
386
+
387
+ this._scrollIntoView( item );
388
+
389
+ this.active = item.first();
390
+
391
+ focused = this.active.children( ".ui-menu-item-wrapper" );
392
+ this._addClass( focused, null, "ui-state-active" );
393
+
394
+ // Only update aria-activedescendant if there's a role
395
+ // otherwise we assume focus is managed elsewhere
396
+ if ( this.options.role ) {
397
+ this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
398
+ }
399
+
400
+ // Highlight active parent menu item, if any
401
+ activeParent = this.active
402
+ .parent()
403
+ .closest( ".ui-menu-item" )
404
+ .children( ".ui-menu-item-wrapper" );
405
+ this._addClass( activeParent, null, "ui-state-active" );
406
+
407
+ if ( event && event.type === "keydown" ) {
408
+ this._close();
409
+ } else {
410
+ this.timer = this._delay( function() {
411
+ this._close();
412
+ }, this.delay );
413
+ }
414
+
415
+ nested = item.children( ".ui-menu" );
416
+ if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
417
+ this._startOpening( nested );
418
+ }
419
+ this.activeMenu = item.parent();
420
+
421
+ this._trigger( "focus", event, { item: item } );
422
+ },
423
+
424
+ _scrollIntoView: function( item ) {
425
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
426
+ if ( this._hasScroll() ) {
427
+ borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0;
428
+ paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0;
429
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
430
+ scroll = this.activeMenu.scrollTop();
431
+ elementHeight = this.activeMenu.height();
432
+ itemHeight = item.outerHeight();
433
+
434
+ if ( offset < 0 ) {
435
+ this.activeMenu.scrollTop( scroll + offset );
436
+ } else if ( offset + itemHeight > elementHeight ) {
437
+ this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
438
+ }
439
+ }
440
+ },
441
+
442
+ blur: function( event, fromFocus ) {
443
+ if ( !fromFocus ) {
444
+ clearTimeout( this.timer );
445
+ }
446
+
447
+ if ( !this.active ) {
448
+ return;
449
+ }
450
+
451
+ this._removeClass( this.active.children( ".ui-menu-item-wrapper" ),
452
+ null, "ui-state-active" );
453
+
454
+ this._trigger( "blur", event, { item: this.active } );
455
+ this.active = null;
456
+ },
457
+
458
+ _startOpening: function( submenu ) {
459
+ clearTimeout( this.timer );
460
+
461
+ // Don't open if already open fixes a Firefox bug that caused a .5 pixel
462
+ // shift in the submenu position when mousing over the caret icon
463
+ if ( submenu.attr( "aria-hidden" ) !== "true" ) {
464
+ return;
465
+ }
466
+
467
+ this.timer = this._delay( function() {
468
+ this._close();
469
+ this._open( submenu );
470
+ }, this.delay );
471
+ },
472
+
473
+ _open: function( submenu ) {
474
+ var position = $.extend( {
475
+ of: this.active
476
+ }, this.options.position );
477
+
478
+ clearTimeout( this.timer );
479
+ this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
480
+ .hide()
481
+ .attr( "aria-hidden", "true" );
482
+
483
+ submenu
484
+ .show()
485
+ .removeAttr( "aria-hidden" )
486
+ .attr( "aria-expanded", "true" )
487
+ .position( position );
488
+ },
489
+
490
+ collapseAll: function( event, all ) {
491
+ clearTimeout( this.timer );
492
+ this.timer = this._delay( function() {
493
+
494
+ // If we were passed an event, look for the submenu that contains the event
495
+ var currentMenu = all ? this.element :
496
+ $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
497
+
498
+ // If we found no valid submenu ancestor, use the main menu to close all
499
+ // sub menus anyway
500
+ if ( !currentMenu.length ) {
501
+ currentMenu = this.element;
502
+ }
503
+
504
+ this._close( currentMenu );
505
+
506
+ this.blur( event );
507
+
508
+ // Work around active item staying active after menu is blurred
509
+ this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" );
510
+
511
+ this.activeMenu = currentMenu;
512
+ }, this.delay );
513
+ },
514
+
515
+ // With no arguments, closes the currently active menu - if nothing is active
516
+ // it closes all menus. If passed an argument, it will search for menus BELOW
517
+ _close: function( startMenu ) {
518
+ if ( !startMenu ) {
519
+ startMenu = this.active ? this.active.parent() : this.element;
520
+ }
521
+
522
+ startMenu.find( ".ui-menu" )
523
+ .hide()
524
+ .attr( "aria-hidden", "true" )
525
+ .attr( "aria-expanded", "false" );
526
+ },
527
+
528
+ _closeOnDocumentClick: function( event ) {
529
+ return !$( event.target ).closest( ".ui-menu" ).length;
530
+ },
531
+
532
+ _isDivider: function( item ) {
533
+
534
+ // Match hyphen, em dash, en dash
535
+ return !/[^\-\u2014\u2013\s]/.test( item.text() );
536
+ },
537
+
538
+ collapse: function( event ) {
539
+ var newItem = this.active &&
540
+ this.active.parent().closest( ".ui-menu-item", this.element );
541
+ if ( newItem && newItem.length ) {
542
+ this._close();
543
+ this.focus( event, newItem );
544
+ }
545
+ },
546
+
547
+ expand: function( event ) {
548
+ var newItem = this.active &&
549
+ this.active
550
+ .children( ".ui-menu " )
551
+ .find( this.options.items )
552
+ .first();
553
+
554
+ if ( newItem && newItem.length ) {
555
+ this._open( newItem.parent() );
556
+
557
+ // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
558
+ this._delay( function() {
559
+ this.focus( event, newItem );
560
+ } );
561
+ }
562
+ },
563
+
564
+ next: function( event ) {
565
+ this._move( "next", "first", event );
566
+ },
567
+
568
+ previous: function( event ) {
569
+ this._move( "prev", "last", event );
570
+ },
571
+
572
+ isFirstItem: function() {
573
+ return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
574
+ },
575
+
576
+ isLastItem: function() {
577
+ return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
578
+ },
579
+
580
+ _move: function( direction, filter, event ) {
581
+ var next;
582
+ if ( this.active ) {
583
+ if ( direction === "first" || direction === "last" ) {
584
+ next = this.active
585
+ [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
586
+ .eq( -1 );
587
+ } else {
588
+ next = this.active
589
+ [ direction + "All" ]( ".ui-menu-item" )
590
+ .eq( 0 );
591
+ }
592
+ }
593
+ if ( !next || !next.length || !this.active ) {
594
+ next = this.activeMenu.find( this.options.items )[ filter ]();
595
+ }
596
+
597
+ this.focus( event, next );
598
+ },
599
+
600
+ nextPage: function( event ) {
601
+ var item, base, height;
602
+
603
+ if ( !this.active ) {
604
+ this.next( event );
605
+ return;
606
+ }
607
+ if ( this.isLastItem() ) {
608
+ return;
609
+ }
610
+ if ( this._hasScroll() ) {
611
+ base = this.active.offset().top;
612
+ height = this.element.height();
613
+ this.active.nextAll( ".ui-menu-item" ).each( function() {
614
+ item = $( this );
615
+ return item.offset().top - base - height < 0;
616
+ } );
617
+
618
+ this.focus( event, item );
619
+ } else {
620
+ this.focus( event, this.activeMenu.find( this.options.items )
621
+ [ !this.active ? "first" : "last" ]() );
622
+ }
623
+ },
624
+
625
+ previousPage: function( event ) {
626
+ var item, base, height;
627
+ if ( !this.active ) {
628
+ this.next( event );
629
+ return;
630
+ }
631
+ if ( this.isFirstItem() ) {
632
+ return;
633
+ }
634
+ if ( this._hasScroll() ) {
635
+ base = this.active.offset().top;
636
+ height = this.element.height();
637
+ this.active.prevAll( ".ui-menu-item" ).each( function() {
638
+ item = $( this );
639
+ return item.offset().top - base + height > 0;
640
+ } );
641
+
642
+ this.focus( event, item );
643
+ } else {
644
+ this.focus( event, this.activeMenu.find( this.options.items ).first() );
645
+ }
646
+ },
647
+
648
+ _hasScroll: function() {
649
+ return this.element.outerHeight() < this.element.prop( "scrollHeight" );
650
+ },
651
+
652
+ select: function( event ) {
653
+
654
+ // TODO: It should never be possible to not have an active item at this
655
+ // point, but the tests don't trigger mouseenter before click.
656
+ this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
657
+ var ui = { item: this.active };
658
+ if ( !this.active.has( ".ui-menu" ).length ) {
659
+ this.collapseAll( event, true );
660
+ }
661
+ this._trigger( "select", event, ui );
662
+ },
663
+
664
+ _filterMenuItems: function( character ) {
665
+ var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
666
+ regex = new RegExp( "^" + escapedCharacter, "i" );
667
+
668
+ return this.activeMenu
669
+ .find( this.options.items )
670
+
671
+ // Only match on items, not dividers or other content (#10571)
672
+ .filter( ".ui-menu-item" )
673
+ .filter( function() {
674
+ return regex.test(
675
+ $.trim( $( this ).children( ".ui-menu-item-wrapper" ).text() ) );
676
+ } );
677
+ }
678
+ } );
679
+
680
+ } ) );