j1-template 2023.2.7 → 2023.3.1

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 (452) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +2 -1
  3. data/_includes/themes/j1/layouts/content_generator_post.html +2 -2
  4. data/_includes/themes/j1/layouts/layout_metadata_generator.html +38 -38
  5. data/_includes/themes/j1/procedures/blocks/footer/boxes/about_box.proc +1 -1
  6. data/_includes/themes/j1/procedures/blocks/footer/boxes/contacts_box.proc +1 -1
  7. data/_includes/themes/j1/procedures/blocks/footer/boxes/issue.proc +1 -1
  8. data/_includes/themes/j1/procedures/blocks/footer/boxes/links_box.proc +1 -1
  9. data/_includes/themes/j1/procedures/blocks/footer/boxes/news_box.proc +1 -1
  10. data/_includes/themes/j1/procedures/layouts/default_writer.proc +1 -3
  11. data/_includes/themes/j1/procedures/layouts/module_writer.proc +7 -23
  12. data/_includes/themes/j1/procedures/layouts/resource_writer.proc +8 -8
  13. data/_includes/themes/j1/procedures/posts/create_series_header.proc +1 -1
  14. data/_layouts/compress.html +26 -21
  15. data/_layouts/default.html +36 -30
  16. data/assets/data/banner.html +5 -2
  17. data/assets/data/footer.html +15 -3
  18. data/assets/data/masonry.html +1 -1
  19. data/assets/data/masterslider.html +1 -0
  20. data/assets/data/menu.html +4 -4
  21. data/assets/data/panel.html +6 -3
  22. data/assets/data/quicklinks.html +138 -149
  23. data/assets/error_pages/HTTP204.html +3 -3
  24. data/assets/error_pages/HTTP400.html +3 -3
  25. data/assets/error_pages/HTTP401.html +3 -3
  26. data/assets/error_pages/HTTP403.html +3 -3
  27. data/assets/error_pages/HTTP404.html +3 -3
  28. data/assets/error_pages/HTTP444.html +3 -3
  29. data/assets/error_pages/HTTP445.html +3 -3
  30. data/assets/error_pages/HTTP446.html +5 -5
  31. data/assets/error_pages/HTTP447.html +7 -7
  32. data/assets/error_pages/HTTP448.html +7 -7
  33. data/assets/error_pages/HTTP500.html +3 -3
  34. data/assets/error_pages/HTTP501.html +3 -3
  35. data/assets/error_pages/HTTP502.html +3 -3
  36. data/assets/error_pages/HTTP503.html +3 -3
  37. data/assets/themes/j1/adapter/js/advertising.js +355 -156
  38. data/assets/themes/j1/adapter/js/analytics.js +1 -1
  39. data/assets/themes/j1/adapter/js/asciidoctor.js +1 -1
  40. data/assets/themes/j1/adapter/js/attic.js +22 -14
  41. data/assets/themes/j1/adapter/js/bmd.js +1 -1
  42. data/assets/themes/j1/adapter/js/carousel.js +5 -4
  43. data/assets/themes/j1/adapter/js/clipboard.js +1 -1
  44. data/assets/themes/j1/adapter/js/comments.js +5 -5
  45. data/assets/themes/j1/adapter/js/cookieConsent.js +1 -1
  46. data/assets/themes/j1/adapter/js/customFunctions.js +1 -1
  47. data/assets/themes/j1/adapter/js/customModule.js +1 -1
  48. data/assets/themes/j1/adapter/js/dropdowns.js +4 -2
  49. data/assets/themes/j1/adapter/js/fab.js +9 -6
  50. data/assets/themes/j1/adapter/js/framer.js +1 -1
  51. data/assets/themes/j1/adapter/js/iconPicker.js +227 -0
  52. data/assets/themes/j1/adapter/js/j1.js +402 -76
  53. data/assets/themes/j1/adapter/js/justifiedGallery.js +9 -3
  54. data/assets/themes/j1/adapter/js/justifiedGalleryCustomizer.js +2 -2
  55. data/assets/themes/j1/adapter/js/lightbox.js +4 -3
  56. data/assets/themes/j1/adapter/js/logger.js +1 -1
  57. data/assets/themes/j1/adapter/js/lunr.js +1 -1
  58. data/assets/themes/j1/adapter/js/masonry.js +4 -3
  59. data/assets/themes/j1/adapter/js/masterslider.js +30 -57
  60. data/assets/themes/j1/adapter/js/mmenu.js +2 -2
  61. data/assets/themes/j1/adapter/js/navigator.js +7 -5
  62. data/assets/themes/j1/adapter/js/nbinteract.js +9 -9
  63. data/assets/themes/j1/adapter/js/particles.js +2 -2
  64. data/assets/themes/j1/adapter/js/rangeSlider.js +2 -2
  65. data/assets/themes/j1/adapter/js/rouge.js +2 -2
  66. data/assets/themes/j1/adapter/js/rtable.js +1 -1
  67. data/assets/themes/j1/adapter/js/rtextResizer.js +1 -1
  68. data/assets/themes/j1/adapter/js/scroller.js +97 -109
  69. data/assets/themes/j1/adapter/js/slick.js +28 -18
  70. data/assets/themes/j1/adapter/js/themeToggler.js +259 -0
  71. data/assets/themes/j1/adapter/js/themer.js +63 -23
  72. data/assets/themes/j1/adapter/js/toccer.js +9 -6
  73. data/assets/themes/j1/adapter/js/translator.js +4 -2
  74. data/assets/themes/j1/adapter/js/waves.js +6 -4
  75. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.css +1322 -417
  76. data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.min.css +3 -3
  77. data/assets/themes/j1/core/css/themes/unodark/bootstrap.css +2064 -1273
  78. data/assets/themes/j1/core/css/themes/unodark/bootstrap.min.css +3 -3
  79. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +10280 -9399
  80. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +10 -10
  81. data/assets/themes/j1/core/css/vendor.css +0 -14
  82. data/assets/themes/j1/core/css/vendor.min.css +1 -1
  83. data/assets/themes/j1/modules/backstretch/js/backstretch.js +6 -4
  84. data/assets/themes/j1/modules/backstretch/js/backstretch.min.js +1 -1
  85. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.js +1 -1
  86. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.min.js +1 -1
  87. data/assets/themes/j1/modules/iconPicker/README.md +266 -0
  88. data/assets/themes/j1/modules/iconPicker/css/universal-icon-picker.css +419 -0
  89. data/assets/themes/j1/modules/iconPicker/css/universal-icon-picker.min.css +17 -0
  90. data/assets/themes/j1/modules/iconPicker/icons-libraries/font-awesome-brands.json +467 -0
  91. data/assets/themes/j1/modules/iconPicker/icons-libraries/font-awesome-brands.min.json +1 -0
  92. data/assets/themes/j1/modules/iconPicker/icons-libraries/font-awesome-regular.json +169 -0
  93. data/assets/themes/j1/modules/iconPicker/icons-libraries/font-awesome-regular.min.json +1 -0
  94. data/assets/themes/j1/modules/iconPicker/icons-libraries/font-awesome-solid.json +1136 -0
  95. data/assets/themes/j1/modules/iconPicker/icons-libraries/font-awesome-solid.min.json +1 -0
  96. data/assets/themes/j1/modules/iconPicker/icons-libraries/font-awesome.json +1772 -0
  97. data/assets/themes/j1/modules/iconPicker/icons-libraries/font-awesome.min.json +1 -0
  98. data/assets/themes/j1/modules/iconPicker/icons-libraries/mdi-icons-light.json +292 -0
  99. data/assets/themes/j1/modules/iconPicker/icons-libraries/mdi-icons-light.min.json +1 -0
  100. data/assets/themes/j1/modules/iconPicker/icons-libraries/mdi-icons-regular.json +7312 -0
  101. data/assets/themes/j1/modules/iconPicker/icons-libraries/mdi-icons-regular.min.json +1 -0
  102. data/assets/themes/j1/modules/iconPicker/images/magnifying-glass-solid.svg +1 -0
  103. data/assets/themes/j1/modules/iconPicker/images/star-of-life-solid.svg +3 -0
  104. data/assets/themes/j1/modules/iconPicker/images/xmark-solid.svg +3 -0
  105. data/assets/themes/j1/modules/iconPicker/js/universal-icon-picker.js +493 -0
  106. data/assets/themes/j1/modules/iconPicker/js/universal-icon-picker.min.js +17 -0
  107. data/assets/themes/j1/modules/jquery/AUTHORS.txt +372 -0
  108. data/assets/themes/j1/modules/jquery/LICENSE.txt +43 -0
  109. data/assets/themes/j1/modules/jquery/css/images/ui-icons_444444_256x240.png +0 -0
  110. data/assets/themes/j1/modules/jquery/css/images/ui-icons_555555_256x240.png +0 -0
  111. data/assets/themes/j1/modules/jquery/css/images/ui-icons_777620_256x240.png +0 -0
  112. data/assets/themes/j1/modules/jquery/css/images/ui-icons_777777_256x240.png +0 -0
  113. data/assets/themes/j1/modules/jquery/css/images/ui-icons_cc0000_256x240.png +0 -0
  114. data/assets/themes/j1/modules/jquery/css/images/ui-icons_ffffff_256x240.png +0 -0
  115. data/assets/themes/j1/modules/jquery/css/jquery-ui/jquery-ui.css +92 -92
  116. data/assets/themes/j1/modules/jquery/css/jquery-ui/jquery-ui.min.css +4 -4
  117. data/assets/themes/j1/modules/jquery/css/jquery-ui/jquery-ui.structure.css +88 -88
  118. data/assets/themes/j1/modules/jquery/css/jquery-ui/jquery-ui.structure.min.css +2 -2
  119. data/assets/themes/j1/modules/jquery/css/jquery-ui/jquery-ui.theme.css +4 -4
  120. data/assets/themes/j1/modules/jquery/css/jquery-ui/jquery-ui.theme.min.css +2 -2
  121. data/assets/themes/j1/modules/jquery/js/jquery-ui.js +13683 -13678
  122. data/assets/themes/j1/modules/jquery/js/jquery-ui.min.js +3 -3
  123. data/assets/themes/j1/modules/jquery/js/jquery.js +1029 -1203
  124. data/assets/themes/j1/modules/jquery/js/jquery.min.js +2 -2
  125. data/assets/themes/j1/modules/jquery/js/jquery.min.map +1 -1
  126. data/assets/themes/j1/modules/jquery-3.5.1/css/jquery-ui/jquery-ui.css +1315 -0
  127. data/assets/themes/j1/modules/jquery-3.5.1/css/jquery-ui/jquery-ui.min.css +7 -0
  128. data/assets/themes/j1/modules/jquery-3.5.1/css/jquery-ui/jquery-ui.structure.css +886 -0
  129. data/assets/themes/j1/modules/jquery-3.5.1/css/jquery-ui/jquery-ui.structure.min.css +5 -0
  130. data/assets/themes/j1/modules/jquery-3.5.1/css/jquery-ui/jquery-ui.theme.css +446 -0
  131. data/assets/themes/j1/modules/jquery-3.5.1/css/jquery-ui/jquery-ui.theme.min.css +5 -0
  132. data/assets/themes/j1/modules/jquery-3.5.1/js/extensions/hasClass.js +37 -0
  133. data/assets/themes/j1/modules/jquery-3.5.1/js/extensions/hasClass.min.js +17 -0
  134. data/assets/themes/j1/modules/jquery-3.5.1/js/extensions/removeClass.js +42 -0
  135. data/assets/themes/j1/modules/jquery-3.5.1/js/extensions/removeClass.min.js +17 -0
  136. data/assets/themes/j1/modules/jquery-3.5.1/js/jquery-ui.js +19057 -0
  137. data/assets/themes/j1/modules/jquery-3.5.1/js/jquery-ui.min.js +6 -0
  138. data/assets/themes/j1/modules/jquery-3.5.1/js/jquery.js +10872 -0
  139. data/assets/themes/j1/modules/jquery-3.5.1/js/jquery.min.js +2 -0
  140. data/assets/themes/j1/modules/jquery-3.5.1/js/jquery.min.map +1 -0
  141. data/assets/themes/j1/modules/jquery-3.5.1/js/require.js +2145 -0
  142. data/assets/themes/j1/modules/jquery-3.5.1/js/require.min.js +5 -0
  143. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-video.js +2 -2
  144. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-video.min.js +1 -1
  145. data/assets/themes/j1/modules/masterslider/css/theme/uno.css +9 -9
  146. data/assets/themes/j1/modules/masterslider/css/theme/uno.min.css +1 -1
  147. data/assets/themes/j1/modules/mmenuLight/css/theme/uno/mmenu.css +2 -2
  148. data/assets/themes/j1/modules/mmenuLight/css/theme/uno/mmenu.min.css +1 -1
  149. data/assets/themes/j1/modules/rouge/css/uno.dark/theme.css +136 -47
  150. data/assets/themes/j1/modules/rouge/css/uno.light/theme.css +9 -9
  151. data/assets/themes/j1/modules/scroller/js/scroller.js +76 -69
  152. data/assets/themes/j1/modules/scroller/js/scroller.min.js +1 -1
  153. data/assets/themes/j1/modules/translator/js/translator.js +1 -1
  154. data/assets/themes/j1/modules/translator/js/translator.min.js +1 -1
  155. data/lib/j1/version.rb +1 -1
  156. data/lib/starter_web/Gemfile +2 -2
  157. data/lib/starter_web/README.md +5 -5
  158. data/lib/starter_web/_config.yml +5 -2
  159. data/lib/starter_web/_data/blocks/banner.yml +8 -5
  160. data/lib/starter_web/_data/blocks/defaults/footer.yml +4 -4
  161. data/lib/starter_web/_data/blocks/footer.yml +12 -5
  162. data/lib/starter_web/_data/blocks/panel.yml +41 -38
  163. data/lib/starter_web/_data/j1_config.yml +68 -58
  164. data/lib/starter_web/_data/layouts/collection.yml +1 -0
  165. data/lib/starter_web/_data/layouts/default.yml +1 -1
  166. data/lib/starter_web/_data/layouts/home.yml +38 -9
  167. data/lib/starter_web/_data/layouts/news_panel_posts.yml +1 -0
  168. data/lib/starter_web/_data/layouts/page.yml +2 -1
  169. data/lib/starter_web/_data/layouts/post.yml +1 -0
  170. data/lib/starter_web/_data/layouts/raw.yml +1 -0
  171. data/lib/starter_web/_data/modules/advertising.yml +209 -58
  172. data/lib/starter_web/_data/modules/analytics.yml +2 -2
  173. data/lib/starter_web/_data/modules/attics.yml +4 -7
  174. data/lib/starter_web/_data/modules/defaults/advertising.yml +3 -2
  175. data/lib/starter_web/_data/modules/defaults/attics.yml +3 -3
  176. data/lib/starter_web/_data/modules/defaults/iconPicker.yml +42 -0
  177. data/lib/starter_web/_data/modules/defaults/navigator.yml +15 -13
  178. data/lib/starter_web/_data/modules/defaults/theme_toggler.yml +42 -0
  179. data/lib/starter_web/_data/modules/iconPicker.yml +64 -0
  180. data/lib/starter_web/_data/modules/masonry.yml +3 -3
  181. data/lib/starter_web/_data/modules/masterslider.yml +5 -5
  182. data/lib/starter_web/_data/modules/navigator_menu.yml +311 -160
  183. data/lib/starter_web/_data/modules/scroller.yml +8 -8
  184. data/lib/starter_web/_data/modules/slick.yml +47 -86
  185. data/lib/starter_web/_data/modules/theme_toggler.yml +29 -0
  186. data/lib/starter_web/_data/modules/themer.yml +0 -6
  187. data/lib/starter_web/_data/resources.yml +54 -53
  188. data/lib/starter_web/_data/templates/feed.xml +1 -1
  189. data/lib/starter_web/_includes/attributes.0.asciidoc +626 -0
  190. data/lib/starter_web/_includes/attributes.asciidoc +81 -72
  191. data/lib/starter_web/_includes/google/static/google_ad_5128488466.html +19 -0
  192. data/lib/starter_web/_includes/google/static/google_ad_7284712660.html +19 -0
  193. data/lib/starter_web/_includes/google/templates/google_ads.html +55 -0
  194. data/lib/starter_web/_plugins/asciidoctor/google-ad-block.rb +47 -0
  195. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  196. data/lib/starter_web/assets/images/badges/configBinder.jpg +0 -0
  197. data/lib/starter_web/assets/images/badges/docsBinder.jpg +0 -0
  198. data/lib/starter_web/assets/images/badges/notebookBinder.jpg +0 -0
  199. data/lib/starter_web/assets/images/badges/scaleable/configBinder.svg +1 -1
  200. data/lib/starter_web/assets/images/badges/scaleable/docsBinder.svg +1 -1
  201. data/lib/starter_web/assets/images/badges/scaleable/myBinder.svg +1 -1
  202. data/lib/starter_web/assets/images/badges/scaleable/notebookBinder.svg +1 -1
  203. data/lib/starter_web/assets/images/icons/hyvor-talk/jpg/hyvor-logo.512x512.jpg +0 -0
  204. data/lib/starter_web/assets/images/icons/hyvor-talk/png/hyvor-logo.24x24.jpg +0 -0
  205. data/lib/starter_web/assets/images/icons/hyvor-talk/scalable/hyvor-logo.svg +1 -1
  206. data/lib/starter_web/assets/images/icons/j1/jpg/j1-256x256.jpg +0 -0
  207. data/lib/starter_web/assets/images/icons/j1/jpg/j1-512x512.jpg +0 -0
  208. data/lib/starter_web/assets/images/icons/j1/jpg/j1-64x64.jpg +0 -0
  209. data/lib/starter_web/assets/images/icons/j1/png/j1-256x256.png +0 -0
  210. data/lib/starter_web/assets/images/icons/j1/png/j1-512x512.jpg +0 -0
  211. data/lib/starter_web/assets/images/icons/j1/png/j1-512x512.jpg.png +0 -0
  212. data/lib/starter_web/assets/images/icons/j1/png/j1-512x512.png +0 -0
  213. data/lib/starter_web/assets/images/icons/j1/png/j1-64x64.png +0 -0
  214. data/lib/starter_web/assets/images/icons/j1/scalable/j1.svg +1 -1
  215. data/lib/starter_web/assets/images/icons/mdi/mdi.svg +1 -0
  216. data/lib/starter_web/assets/images/icons/mdi/mdil.svg +1 -0
  217. data/lib/starter_web/assets/images/modules/attics/1920x1280/alexander-redl.jpg +0 -0
  218. data/lib/starter_web/assets/images/modules/attics/1920x1280/alina-grubnyak.jpg +0 -0
  219. data/lib/starter_web/assets/images/modules/attics/1920x1280/andrea-badino.jpg +0 -0
  220. data/lib/starter_web/assets/images/modules/attics/1920x1280/brad-neathery.jpg +0 -0
  221. data/lib/starter_web/assets/images/modules/attics/1920x1280/brigitta-schneiter.jpg +0 -0
  222. data/lib/starter_web/assets/images/modules/attics/1920x1280/bruno-figueiredo.jpg +0 -0
  223. data/lib/starter_web/assets/images/modules/attics/1920x1280/clem-onojeghuo.jpg +0 -0
  224. data/lib/starter_web/assets/images/modules/attics/1920x1280/core_web_vitals_best.png +0 -0
  225. data/lib/starter_web/assets/images/modules/attics/1920x1280/crawford-jolly.jpg +0 -0
  226. data/lib/starter_web/assets/images/modules/attics/1920x1280/eleni-afiontzi.jpg +0 -0
  227. data/lib/starter_web/assets/images/modules/attics/1920x1280/fly-d.jpg +0 -0
  228. data/lib/starter_web/assets/images/modules/attics/1920x1280/guillaume-bolduc.jpg +0 -0
  229. data/lib/starter_web/assets/images/modules/attics/1920x1280/harpal-singh.jpg +0 -0
  230. data/lib/starter_web/assets/images/modules/attics/1920x1280/hayden-mills-2.jpg +0 -0
  231. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-1.jpg +0 -0
  232. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-2.jpg +0 -0
  233. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-content-mockup-3.jpg +0 -0
  234. data/lib/starter_web/assets/images/modules/attics/1920x1280/j1-starter-mockup-1.jpg +0 -0
  235. data/lib/starter_web/assets/images/modules/attics/1920x1280/john-schnobrich-2.jpg +0 -0
  236. data/lib/starter_web/assets/images/modules/attics/1920x1280/josep-martins.jpg +0 -0
  237. data/lib/starter_web/assets/images/modules/attics/1920x1280/josh-liu.jpg +0 -0
  238. data/lib/starter_web/assets/images/modules/attics/1920x1280/kelly-sikkemal.jpg +0 -0
  239. data/lib/starter_web/assets/images/modules/attics/1920x1280/kira-auf-der-heide.jpg +0 -0
  240. data/lib/starter_web/assets/images/modules/attics/1920x1280/kristopher-roller.jpg +0 -0
  241. data/lib/starter_web/assets/images/modules/attics/1920x1280/kristopher-roller.webp +0 -0
  242. data/lib/starter_web/assets/images/modules/attics/1920x1280/matthaeus.jpg +0 -0
  243. data/lib/starter_web/assets/images/modules/attics/1920x1280/melanie-deziel.jpg +0 -0
  244. data/lib/starter_web/assets/images/modules/attics/1920x1280/milad-fakurian.jpg +0 -0
  245. data/lib/starter_web/assets/images/modules/attics/1920x1280/mohammad-rahmani.jpg +0 -0
  246. data/lib/starter_web/assets/images/modules/attics/1920x1280/nasa.jpg +0 -0
  247. data/lib/starter_web/assets/images/modules/attics/1920x1280/quino-al-2.jpg +0 -0
  248. data/lib/starter_web/assets/images/modules/attics/1920x1280/recha-oktaviani.jpg +0 -0
  249. data/lib/starter_web/assets/images/modules/attics/building-blocks-1920x1280.jpg +0 -0
  250. data/lib/starter_web/assets/images/modules/attics/christina-1920x1280.jpg +0 -0
  251. data/lib/starter_web/assets/images/modules/attics/cookies-1920x1200.jpg +0 -0
  252. data/lib/starter_web/assets/images/modules/attics/katie-moum-1920x1280.jpg +0 -0
  253. data/lib/starter_web/assets/images/modules/icons/j1/scalable/j1.svg +1 -1
  254. data/lib/starter_web/assets/images/pages/asciidoc_skeletons/example-pdf-screenshot.jpg +0 -0
  255. data/lib/starter_web/assets/images/pages/core_web_vitals/200-create-a-link-1.jpg +0 -0
  256. data/lib/starter_web/assets/images/pages/core_web_vitals/core_web_vitals_best.jpg +0 -0
  257. data/lib/starter_web/assets/images/pages/core_web_vitals/core_web_vitals_best_full.jpg +0 -0
  258. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.jpg +0 -0
  259. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.jpg +0 -0
  260. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.jpg +0 -0
  261. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.jpg +0 -0
  262. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.jpg +0 -0
  263. data/lib/starter_web/assets/images/pages/html_validator/appdevtools-html-validator.jpg +0 -0
  264. data/lib/starter_web/assets/images/pages/html_validator/freeformatter-html-validator.jpg +0 -0
  265. data/lib/starter_web/assets/images/pages/html_validator/w3c-nu-checker.jpg +0 -0
  266. data/lib/starter_web/assets/images/pages/html_validator/w3c-validator.jpg +0 -0
  267. data/lib/starter_web/assets/images/posts/featured/dynamic-web-access.jpg +0 -0
  268. data/lib/starter_web/assets/images/posts/featured/jamstack-generators.jpg +0 -0
  269. data/lib/starter_web/assets/images/posts/featured/jekyll.1200x400.jpg +0 -0
  270. data/lib/starter_web/assets/images/posts/featured/jekyll.jpg +0 -0
  271. data/lib/starter_web/assets/images/posts/featured/static-web-access.jpg +0 -0
  272. data/lib/starter_web/assets/images/promo/home/screenshot.jpg +0 -0
  273. data/lib/starter_web/assets/images/quotes/promo/home/screenshot.jpg +0 -0
  274. data/lib/starter_web/assets/images/quotes/promo/jekyll/jekyll-faq.jpg +0 -0
  275. data/lib/starter_web/assets/images/quotes/promo/jekyll/jekyll-generator.jpg +0 -0
  276. data/lib/starter_web/assets/images/quotes/promo/jekyll/jekyll-generator.png +0 -0
  277. data/lib/starter_web/assets/images/quotes/promo/jekyll/jekyll-og.png +0 -0
  278. data/lib/starter_web/assets/images/quotes/promo/jekyll/scalable/jekyll-faq.psd +0 -0
  279. data/lib/starter_web/collections/_biography/a-life-in-questions.adoc +8 -9
  280. data/lib/starter_web/collections/_biography/becoming.adoc +23 -10
  281. data/lib/starter_web/collections/_biography/born-to-run.adoc +28 -10
  282. data/lib/starter_web/collections/_biography/forty-autumns.adoc +20 -13
  283. data/lib/starter_web/collections/_biography/not-dead-yet.adoc +25 -15
  284. data/lib/starter_web/collections/_biography/princess-diarist-the.adoc +24 -15
  285. data/lib/starter_web/collections/_biography/when-breath-becomes-air.adoc +25 -12
  286. data/lib/starter_web/collections/_fantasy/harry-potter-deathly-hallows.adoc +14 -10
  287. data/lib/starter_web/collections/_fantasy/harry-potter-philosophers-stone.adoc +11 -8
  288. data/lib/starter_web/collections/_fantasy/mistborn-trilogy.adoc +32 -8
  289. data/lib/starter_web/collections/_fantasy/ready-player-one.adoc +17 -14
  290. data/lib/starter_web/collections/_fantasy/sword-of-destiny.adoc +27 -13
  291. data/lib/starter_web/collections/_fantasy/terry-pratchet-diary.adoc +38 -15
  292. data/lib/starter_web/collections/_people/diana-petersen.adoc +2 -0
  293. data/lib/starter_web/collections/_people/larry-parker.adoc +2 -0
  294. data/lib/starter_web/collections/_people/parveen-anand.adoc +2 -0
  295. data/lib/starter_web/collections/_portfolio/branding.adoc +5 -0
  296. data/lib/starter_web/collections/_portfolio/graphic_design.adoc +5 -0
  297. data/lib/starter_web/collections/_portfolio/identity.adoc +5 -0
  298. data/lib/starter_web/collections/_portfolio/illustration.adoc +5 -0
  299. data/lib/starter_web/collections/_portfolio/photography.adoc +5 -0
  300. data/lib/starter_web/collections/_portfolio/web_design.adoc +5 -0
  301. data/lib/starter_web/collections/_romance/{breath-of-snow-and-ashes-a.adoc → breath-of-snow-and-ashes.adoc} +20 -5
  302. data/lib/starter_web/collections/_romance/dressmaker-the.adoc +26 -14
  303. data/lib/starter_web/collections/_romance/fiery-cross-the.adoc +12 -9
  304. data/lib/starter_web/collections/_romance/it-ends-with-us.adoc +14 -11
  305. data/lib/starter_web/collections/_romance/outlander-novel.adoc +48 -25
  306. data/lib/starter_web/collections/_romance/virgins-outlander-short-story.adoc +30 -15
  307. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +4 -2
  308. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +4 -1
  309. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-static-site-generators.adoc +5 -3
  310. data/lib/starter_web/collections/posts/public/featured/_posts/2022-02-01-about-j1.adoc +4 -1
  311. data/lib/starter_web/collections/posts/public/featured/_posts/_includes/attributes.asciidoc +2 -2
  312. data/lib/starter_web/index.html +1 -18
  313. data/lib/starter_web/package.json +3 -3
  314. data/lib/starter_web/pages/public/about/features.adoc +1 -1
  315. data/lib/starter_web/pages/public/about/reporting_issues.adoc +1 -1
  316. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/attributes.asciidoc +1 -1
  317. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/documents/100_converter/112_getting_started.asciidoc +1 -1
  318. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/documents/200_themes/212_values.asciidoc +4 -4
  319. data/lib/starter_web/pages/public/blog/navigator/index.html +2 -2
  320. data/lib/starter_web/pages/public/learn/bookshelf/article_previewer/viewer_all_books.adoc +1 -1
  321. data/lib/starter_web/pages/public/learn/bookshelf/article_previewer/viewer_biography.adoc +1 -1
  322. data/lib/starter_web/pages/public/learn/bookshelf/article_previewer/viewer_fantasy.adoc +1 -1
  323. data/lib/starter_web/pages/public/learn/bookshelf/article_previewer/viewer_romance.adoc +1 -1
  324. data/lib/starter_web/pages/public/learn/bookshelf/jekyll_collections.adoc +75 -65
  325. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/attributes.asciidoc +58 -0
  326. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/accordion.asciidoc +34 -0
  327. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/alerts.asciidoc +15 -0
  328. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/badges.asciidoc +9 -0
  329. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/body.asciidoc +14 -0
  330. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/breadcrumbs.asciidoc +14 -0
  331. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/buttons.asciidoc +75 -0
  332. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/cards.asciidoc +22 -0
  333. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/carousel.asciidoc +37 -0
  334. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/close.asciidoc +15 -0
  335. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/code.asciidoc +14 -0
  336. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/color_system.asciidoc +353 -0
  337. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/components.asciidoc +69 -0
  338. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/dropdowns.asciidoc +53 -0
  339. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/figures.asciidoc +5 -0
  340. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/forms.asciidoc +270 -0
  341. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/grid.asciidoc +49 -0
  342. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/links.asciidoc +21 -0
  343. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/list_groups.asciidoc +28 -0
  344. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/modals.asciidoc +43 -0
  345. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/navbar.asciidoc +45 -0
  346. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/navs.asciidoc +28 -0
  347. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/offcanvas.asciidoc +16 -0
  348. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/options.asciidoc +30 -0
  349. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/pagination.asciidoc +40 -0
  350. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/paragraph.asciidoc +5 -0
  351. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/placeholders.asciidoc +5 -0
  352. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/popovers.asciidoc +28 -0
  353. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/position.asciidoc +8 -0
  354. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/progress_bars.asciidoc +12 -0
  355. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/spacing.asciidoc +14 -0
  356. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/spinners.asciidoc +12 -0
  357. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/tables.asciidoc +55 -0
  358. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/thumbnails.asciidoc +9 -0
  359. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/toasts.asciidoc +18 -0
  360. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/tooltips.asciidoc +28 -0
  361. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/typography.asciidoc +115 -0
  362. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/documents/z_index.asciidoc +26 -0
  363. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/tables/_table.asciidoc +9 -0
  364. data/lib/starter_web/pages/public/learn/bs_sass_variables/_includes/tables/accordion.asciidoc +87 -0
  365. data/lib/starter_web/pages/public/learn/bs_sass_variables/bs_sass_variables.adoc +262 -0
  366. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/attributes.asciidoc +59 -0
  367. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/documents/100_chapter.asciidoc +541 -0
  368. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/documents/200_chapter.asciidoc +33 -0
  369. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/tables/build_command_options.asciidoc +72 -0
  370. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/tables/files_and_folders.asciidoc +66 -0
  371. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/tables/global_configuration_options.asciidoc +63 -0
  372. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/tables/global_variables.asciidoc +26 -0
  373. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/tables/page_variables.asciidoc +54 -0
  374. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/tables/serve_command_options.asciidoc +45 -0
  375. data/lib/starter_web/pages/public/learn/core_web_vitals/_includes/tables/site_variables.asciidoc +59 -0
  376. data/lib/starter_web/pages/public/learn/core_web_vitals/core_web_vitals.adoc +442 -0
  377. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.0.asciidoc +112 -0
  378. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +2 -2
  379. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/100_gistblock.asciidoc +3 -4
  380. data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/themes_rouge.asciidoc +1 -1
  381. data/lib/starter_web/pages/public/learn/roundtrip/asciidoc_extensions.adoc +2 -2
  382. data/lib/starter_web/pages/public/learn/roundtrip/icon_fonts.adoc +10 -10
  383. data/lib/starter_web/pages/public/learn/roundtrip/present_images.adoc +35 -4
  384. data/lib/starter_web/pages/public/learn/roundtrip/responsive_tables.adoc +3 -3
  385. data/lib/starter_web/pages/public/learn/where_to_go.adoc +41 -49
  386. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +2 -2
  387. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +2 -2
  388. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +2 -2
  389. data/lib/starter_web/pages/public/tools/cheatsheet/gem.adoc +255 -0
  390. data/lib/starter_web/pages/public/tools/cheatsheet/git.adoc +1458 -0
  391. data/lib/starter_web/pages/public/tools/cheatsheet/j1.adoc +63 -0
  392. data/lib/starter_web/pages/public/tools/cheatsheet/yaml.adoc +514 -0
  393. data/lib/starter_web/pages/public/{previewer → tools/previewer}/preview_bootstrap_theme.adoc +94 -5
  394. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  395. data/lib/starter_web/utilsrv/package.json +1 -1
  396. metadata +169 -60
  397. data/_includes/themes/j1/modules/ads/google_ad_content_home.html +0 -11
  398. data/_includes/themes/j1/modules/ads/google_ad_top_home.html +0 -11
  399. data/assets/themes/j1/core/css/nbinteract-tutorial/styles.css +0 -1711
  400. data/assets/themes/j1/core/css/nbinteract-tutorial/styles.min.css +0 -1
  401. data/assets/themes/j1/modules/advertising/js/google/adInitializer.js +0 -127
  402. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.2.js +0 -460
  403. data/assets/themes/j1/modules/mdiPreviewer/css/previewer.css +0 -97
  404. data/assets/themes/j1/modules/mdiPreviewer/css/previewer.min.css +0 -15
  405. data/assets/themes/j1/modules/mdiPreviewer/js/previewer.js +0 -115
  406. data/assets/themes/j1/modules/mdiPreviewer/js/previewer.min.js +0 -15
  407. data/assets/themes/j1/modules/mdilPreviewer/css/previewer.css +0 -97
  408. data/assets/themes/j1/modules/mdilPreviewer/css/previewer.min.css +0 -15
  409. data/assets/themes/j1/modules/mdilPreviewer/js/previewer.js +0 -125
  410. data/assets/themes/j1/modules/mdilPreviewer/js/previewer.min.js +0 -15
  411. data/lib/starter_web/_includes/themes/j1/modules/ads/google_ad_content_home.html +0 -11
  412. data/lib/starter_web/_includes/themes/j1/modules/ads/google_ad_top_home.html +0 -11
  413. data/lib/starter_web/assets/images/icons/j1/j1-256x256.gif +0 -0
  414. data/lib/starter_web/assets/images/pages/asciidoc_skeletons/example-pdf-screenshot.png +0 -0
  415. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.png +0 -0
  416. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.png +0 -0
  417. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.png +0 -0
  418. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.png +0 -0
  419. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.png +0 -0
  420. data/lib/starter_web/assets/images/pages/nbinteract/binderhub-architecture.jpg +0 -0
  421. data/lib/starter_web/assets/images/pages/nbinteract/jupyterlab-architecture.jpg +0 -0
  422. data/lib/starter_web/assets/images/pages/nbinteract/mandelbrot-menge-1920x1200.jpg +0 -0
  423. data/lib/starter_web/assets/images/pages/nbinteract/mandelbrot-menge.png +0 -0
  424. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi-textbook-example.jpg +0 -0
  425. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_bar.jpg +0 -0
  426. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_hist.jpg +0 -0
  427. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_line.jpg +0 -0
  428. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_multiple_choice.jpg +0 -0
  429. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_scatter.jpg +0 -0
  430. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_scatter_drag.jpg +0 -0
  431. data/lib/starter_web/assets/images/pages/nbinteract/manual/nbi_short_answer.jpg +0 -0
  432. data/lib/starter_web/assets/images/pages/nbinteract/nbi-textbook-example.jpg +0 -0
  433. data/lib/starter_web/assets/images/posts/featured/dynamic-web-access.png +0 -0
  434. data/lib/starter_web/assets/images/posts/featured/jamstack-generators.png +0 -0
  435. data/lib/starter_web/assets/images/posts/featured/jekyll.1200x400.png +0 -0
  436. data/lib/starter_web/assets/images/posts/featured/jekyll.png +0 -0
  437. data/lib/starter_web/assets/images/posts/featured/post-1.jpg +0 -0
  438. data/lib/starter_web/assets/images/posts/featured/post-2.jpg +0 -0
  439. data/lib/starter_web/assets/images/posts/featured/post-3.jpg +0 -0
  440. data/lib/starter_web/assets/images/posts/featured/post-4.jpg +0 -0
  441. data/lib/starter_web/assets/images/posts/featured/post-5.jpg +0 -0
  442. data/lib/starter_web/assets/images/posts/featured/static-web-access.png +0 -0
  443. data/lib/starter_web/collections/posts/public/series/_posts/2022-08-01-organize-your-life.adoc +0 -118
  444. data/lib/starter_web/collections/posts/public/series/_posts/2022-08-02-organize-your-life.adoc +0 -118
  445. data/lib/starter_web/collections/posts/public/series/_posts/2022-08-03-organize-your-life.adoc +0 -118
  446. data/lib/starter_web/collections/posts/public/series/_posts/2022-09-01-organize-your-life.adoc +0 -117
  447. data/lib/starter_web/collections/posts/public/series/_posts/2022-09-02-organize-your-life.adoc +0 -117
  448. /data/lib/starter_web/assets/images/badges/{configBinder.png → png/configBinder.png} +0 -0
  449. /data/lib/starter_web/assets/images/badges/{docsBinder.png → png/docsBinder.png} +0 -0
  450. /data/lib/starter_web/assets/images/badges/{notebookBinder.png → png/notebookBinder.png} +0 -0
  451. /data/lib/starter_web/assets/images/icons/hyvor-talk/{hyvor-logo.24x24.png → png/hyvor-logo.24x24.png} +0 -0
  452. /data/lib/starter_web/assets/images/icons/hyvor-talk/{hyvor-logo.512x512.png → png/hyvor-logo.512x512.png} +0 -0
@@ -1,15 +1,12 @@
1
1
  /*!
2
- * jQuery JavaScript Library v3.5.1
2
+ * jQuery JavaScript Library v3.7.0
3
3
  * https://jquery.com/
4
4
  *
5
- * Includes Sizzle.js
6
- * https://sizzlejs.com/
7
- *
8
- * Copyright JS Foundation and other contributors
5
+ * Copyright OpenJS Foundation and other contributors
9
6
  * Released under the MIT license
10
7
  * https://jquery.org/license
11
8
  *
12
- * Date: 2020-05-04T22:49Z
9
+ * Date: 2023-05-11T18:29Z
13
10
  */
14
11
  ( function( global, factory ) {
15
12
 
@@ -23,7 +20,7 @@
23
20
  // (such as Node.js), expose a factory as module.exports.
24
21
  // This accentuates the need for the creation of a real `window`.
25
22
  // e.g. var jQuery = require("jquery")(window);
26
- // See ticket #14549 for more info.
23
+ // See ticket trac-14549 for more info.
27
24
  module.exports = global.document ?
28
25
  factory( global, true ) :
29
26
  function( w ) {
@@ -76,12 +73,16 @@ var support = {};
76
73
 
77
74
  var isFunction = function isFunction( obj ) {
78
75
 
79
- // Support: Chrome <=57, Firefox <=52
80
- // In some browsers, typeof returns "function" for HTML <object> elements
81
- // (i.e., `typeof document.createElement( "object" ) === "function"`).
82
- // We don't want to classify *any* DOM node as a function.
83
- return typeof obj === "function" && typeof obj.nodeType !== "number";
84
- };
76
+ // Support: Chrome <=57, Firefox <=52
77
+ // In some browsers, typeof returns "function" for HTML <object> elements
78
+ // (i.e., `typeof document.createElement( "object" ) === "function"`).
79
+ // We don't want to classify *any* DOM node as a function.
80
+ // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
81
+ // Plus for old WebKit, typeof returns "function" for HTML collections
82
+ // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
83
+ return typeof obj === "function" && typeof obj.nodeType !== "number" &&
84
+ typeof obj.item !== "function";
85
+ };
85
86
 
86
87
 
87
88
  var isWindow = function isWindow( obj ) {
@@ -146,8 +147,9 @@ function toType( obj ) {
146
147
 
147
148
 
148
149
 
149
- var
150
- version = "3.5.1",
150
+ var version = "3.7.0",
151
+
152
+ rhtmlSuffix = /HTML$/i,
151
153
 
152
154
  // Define a local copy of jQuery
153
155
  jQuery = function( selector, context ) {
@@ -393,6 +395,33 @@ jQuery.extend( {
393
395
  return obj;
394
396
  },
395
397
 
398
+
399
+ // Retrieve the text value of an array of DOM nodes
400
+ text: function( elem ) {
401
+ var node,
402
+ ret = "",
403
+ i = 0,
404
+ nodeType = elem.nodeType;
405
+
406
+ if ( !nodeType ) {
407
+
408
+ // If no nodeType, this is expected to be an array
409
+ while ( ( node = elem[ i++ ] ) ) {
410
+
411
+ // Do not traverse comment nodes
412
+ ret += jQuery.text( node );
413
+ }
414
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
415
+ return elem.textContent;
416
+ } else if ( nodeType === 3 || nodeType === 4 ) {
417
+ return elem.nodeValue;
418
+ }
419
+
420
+ // Do not include comment or processing instruction nodes
421
+
422
+ return ret;
423
+ },
424
+
396
425
  // results is for internal usage only
397
426
  makeArray: function( arr, results ) {
398
427
  var ret = results || [];
@@ -401,7 +430,7 @@ jQuery.extend( {
401
430
  if ( isArrayLike( Object( arr ) ) ) {
402
431
  jQuery.merge( ret,
403
432
  typeof arr === "string" ?
404
- [ arr ] : arr
433
+ [ arr ] : arr
405
434
  );
406
435
  } else {
407
436
  push.call( ret, arr );
@@ -415,6 +444,15 @@ jQuery.extend( {
415
444
  return arr == null ? -1 : indexOf.call( arr, elem, i );
416
445
  },
417
446
 
447
+ isXMLDoc: function( elem ) {
448
+ var namespace = elem && elem.namespaceURI,
449
+ docElem = elem && ( elem.ownerDocument || elem ).documentElement;
450
+
451
+ // Assume HTML when documentElement doesn't yet exist, such as inside
452
+ // document fragments.
453
+ return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
454
+ },
455
+
418
456
  // Support: Android <=4.0 only, PhantomJS 1 only
419
457
  // push.apply(_, arraylike) throws on ancient WebKit
420
458
  merge: function( first, second ) {
@@ -496,9 +534,9 @@ if ( typeof Symbol === "function" ) {
496
534
 
497
535
  // Populate the class2type map
498
536
  jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
499
- function( _i, name ) {
500
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
501
- } );
537
+ function( _i, name ) {
538
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
539
+ } );
502
540
 
503
541
  function isArrayLike( obj ) {
504
542
 
@@ -516,43 +554,98 @@ function isArrayLike( obj ) {
516
554
  return type === "array" || length === 0 ||
517
555
  typeof length === "number" && length > 0 && ( length - 1 ) in obj;
518
556
  }
519
- var Sizzle =
520
- /*!
521
- * Sizzle CSS Selector Engine v2.3.5
522
- * https://sizzlejs.com/
523
- *
524
- * Copyright JS Foundation and other contributors
525
- * Released under the MIT license
526
- * https://js.foundation/
527
- *
528
- * Date: 2020-03-14
529
- */
530
- ( function( window ) {
557
+
558
+
559
+ function nodeName( elem, name ) {
560
+
561
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
562
+
563
+ }
564
+ var pop = arr.pop;
565
+
566
+
567
+ var sort = arr.sort;
568
+
569
+
570
+ var splice = arr.splice;
571
+
572
+
573
+ var whitespace = "[\\x20\\t\\r\\n\\f]";
574
+
575
+
576
+ var rtrimCSS = new RegExp(
577
+ "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
578
+ "g"
579
+ );
580
+
581
+
582
+
583
+
584
+ // Note: an element does not contain itself
585
+ jQuery.contains = function( a, b ) {
586
+ var bup = b && b.parentNode;
587
+
588
+ return a === bup || !!( bup && bup.nodeType === 1 && (
589
+
590
+ // Support: IE 9 - 11+
591
+ // IE doesn't have `contains` on SVG.
592
+ a.contains ?
593
+ a.contains( bup ) :
594
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
595
+ ) );
596
+ };
597
+
598
+
599
+
600
+
601
+ // CSS string/identifier serialization
602
+ // https://drafts.csswg.org/cssom/#common-serializing-idioms
603
+ var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
604
+
605
+ function fcssescape( ch, asCodePoint ) {
606
+ if ( asCodePoint ) {
607
+
608
+ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
609
+ if ( ch === "\0" ) {
610
+ return "\uFFFD";
611
+ }
612
+
613
+ // Control characters and (dependent upon position) numbers get escaped as code points
614
+ return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
615
+ }
616
+
617
+ // Other potentially-special ASCII characters get backslash-escaped
618
+ return "\\" + ch;
619
+ }
620
+
621
+ jQuery.escapeSelector = function( sel ) {
622
+ return ( sel + "" ).replace( rcssescape, fcssescape );
623
+ };
624
+
625
+
626
+
627
+
628
+ var preferredDoc = document,
629
+ pushNative = push;
630
+
631
+ ( function() {
632
+
531
633
  var i,
532
- support,
533
634
  Expr,
534
- getText,
535
- isXML,
536
- tokenize,
537
- compile,
538
- select,
539
635
  outermostContext,
540
636
  sortInput,
541
637
  hasDuplicate,
638
+ push = pushNative,
542
639
 
543
640
  // Local document vars
544
- setDocument,
545
641
  document,
546
- docElem,
642
+ documentElement,
547
643
  documentIsHTML,
548
644
  rbuggyQSA,
549
- rbuggyMatches,
550
645
  matches,
551
- contains,
552
646
 
553
647
  // Instance-specific data
554
- expando = "sizzle" + 1 * new Date(),
555
- preferredDoc = window.document,
648
+ expando = jQuery.expando,
556
649
  dirruns = 0,
557
650
  done = 0,
558
651
  classCache = createCache(),
@@ -566,47 +659,22 @@ var i,
566
659
  return 0;
567
660
  },
568
661
 
569
- // Instance methods
570
- hasOwn = ( {} ).hasOwnProperty,
571
- arr = [],
572
- pop = arr.pop,
573
- pushNative = arr.push,
574
- push = arr.push,
575
- slice = arr.slice,
576
-
577
- // Use a stripped-down indexOf as it's faster than native
578
- // https://jsperf.com/thor-indexof-vs-for/5
579
- indexOf = function( list, elem ) {
580
- var i = 0,
581
- len = list.length;
582
- for ( ; i < len; i++ ) {
583
- if ( list[ i ] === elem ) {
584
- return i;
585
- }
586
- }
587
- return -1;
588
- },
589
-
590
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
591
- "ismap|loop|multiple|open|readonly|required|scoped",
662
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
663
+ "loop|multiple|open|readonly|required|scoped",
592
664
 
593
665
  // Regular expressions
594
666
 
595
- // http://www.w3.org/TR/css3-selectors/#whitespace
596
- whitespace = "[\\x20\\t\\r\\n\\f]",
597
-
598
667
  // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
599
668
  identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
600
669
  "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
601
670
 
602
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
671
+ // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
603
672
  attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
604
673
 
605
674
  // Operator (capture 2)
606
675
  "*([*^$|!~]?=)" + whitespace +
607
676
 
608
- // "Attribute values must be CSS identifiers [capture 5]
609
- // or strings [capture 3 or capture 4]"
677
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
610
678
  "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
611
679
  whitespace + "*\\]",
612
680
 
@@ -625,101 +693,88 @@ var i,
625
693
 
626
694
  // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
627
695
  rwhitespace = new RegExp( whitespace + "+", "g" ),
628
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
629
- whitespace + "+$", "g" ),
630
696
 
631
697
  rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
632
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
633
- "*" ),
698
+ rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
699
+ whitespace + "*" ),
634
700
  rdescend = new RegExp( whitespace + "|>" ),
635
701
 
636
702
  rpseudo = new RegExp( pseudos ),
637
703
  ridentifier = new RegExp( "^" + identifier + "$" ),
638
704
 
639
705
  matchExpr = {
640
- "ID": new RegExp( "^#(" + identifier + ")" ),
641
- "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
642
- "TAG": new RegExp( "^(" + identifier + "|[*])" ),
643
- "ATTR": new RegExp( "^" + attributes ),
644
- "PSEUDO": new RegExp( "^" + pseudos ),
645
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
646
- whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
647
- whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
648
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
706
+ ID: new RegExp( "^#(" + identifier + ")" ),
707
+ CLASS: new RegExp( "^\\.(" + identifier + ")" ),
708
+ TAG: new RegExp( "^(" + identifier + "|[*])" ),
709
+ ATTR: new RegExp( "^" + attributes ),
710
+ PSEUDO: new RegExp( "^" + pseudos ),
711
+ CHILD: new RegExp(
712
+ "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
713
+ whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
714
+ whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
715
+ bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
649
716
 
650
717
  // For use in libraries implementing .is()
651
718
  // We use this for POS matching in `select`
652
- "needsContext": new RegExp( "^" + whitespace +
719
+ needsContext: new RegExp( "^" + whitespace +
653
720
  "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
654
721
  "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
655
722
  },
656
723
 
657
- rhtml = /HTML$/i,
658
724
  rinputs = /^(?:input|select|textarea|button)$/i,
659
725
  rheader = /^h\d$/i,
660
726
 
661
- rnative = /^[^{]+\{\s*\[native \w/,
662
-
663
727
  // Easily-parseable/retrievable ID or TAG or CLASS selectors
664
728
  rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
665
729
 
666
730
  rsibling = /[+~]/,
667
731
 
668
732
  // CSS escapes
669
- // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
670
- runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
733
+ // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
734
+ runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
735
+ "?|\\\\([^\\r\\n\\f])", "g" ),
671
736
  funescape = function( escape, nonHex ) {
672
737
  var high = "0x" + escape.slice( 1 ) - 0x10000;
673
738
 
674
- return nonHex ?
739
+ if ( nonHex ) {
675
740
 
676
741
  // Strip the backslash prefix from a non-hex escape sequence
677
- nonHex :
678
-
679
- // Replace a hexadecimal escape sequence with the encoded Unicode code point
680
- // Support: IE <=11+
681
- // For values outside the Basic Multilingual Plane (BMP), manually construct a
682
- // surrogate pair
683
- high < 0 ?
684
- String.fromCharCode( high + 0x10000 ) :
685
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
686
- },
687
-
688
- // CSS string/identifier serialization
689
- // https://drafts.csswg.org/cssom/#common-serializing-idioms
690
- rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
691
- fcssescape = function( ch, asCodePoint ) {
692
- if ( asCodePoint ) {
693
-
694
- // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
695
- if ( ch === "\0" ) {
696
- return "\uFFFD";
697
- }
698
-
699
- // Control characters and (dependent upon position) numbers get escaped as code points
700
- return ch.slice( 0, -1 ) + "\\" +
701
- ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
742
+ return nonHex;
702
743
  }
703
744
 
704
- // Other potentially-special ASCII characters get backslash-escaped
705
- return "\\" + ch;
745
+ // Replace a hexadecimal escape sequence with the encoded Unicode code point
746
+ // Support: IE <=11+
747
+ // For values outside the Basic Multilingual Plane (BMP), manually construct a
748
+ // surrogate pair
749
+ return high < 0 ?
750
+ String.fromCharCode( high + 0x10000 ) :
751
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
706
752
  },
707
753
 
708
- // Used for iframes
709
- // See setDocument()
754
+ // Used for iframes; see `setDocument`.
755
+ // Support: IE 9 - 11+, Edge 12 - 18+
710
756
  // Removing the function wrapper causes a "Permission Denied"
711
- // error in IE
757
+ // error in IE/Edge.
712
758
  unloadHandler = function() {
713
759
  setDocument();
714
760
  },
715
761
 
716
762
  inDisabledFieldset = addCombinator(
717
763
  function( elem ) {
718
- return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
764
+ return elem.disabled === true && nodeName( elem, "fieldset" );
719
765
  },
720
766
  { dir: "parentNode", next: "legend" }
721
767
  );
722
768
 
769
+ // Support: IE <=9 only
770
+ // Accessing document.activeElement can throw unexpectedly
771
+ // https://bugs.jquery.com/ticket/13393
772
+ function safeActiveElement() {
773
+ try {
774
+ return document.activeElement;
775
+ } catch ( err ) { }
776
+ }
777
+
723
778
  // Optimize for push.apply( _, NodeList )
724
779
  try {
725
780
  push.apply(
@@ -727,32 +782,22 @@ try {
727
782
  preferredDoc.childNodes
728
783
  );
729
784
 
730
- // Support: Android<4.0
785
+ // Support: Android <=4.0
731
786
  // Detect silently failing push.apply
732
787
  // eslint-disable-next-line no-unused-expressions
733
788
  arr[ preferredDoc.childNodes.length ].nodeType;
734
789
  } catch ( e ) {
735
- push = { apply: arr.length ?
736
-
737
- // Leverage slice if possible
738
- function( target, els ) {
790
+ push = {
791
+ apply: function( target, els ) {
739
792
  pushNative.apply( target, slice.call( els ) );
740
- } :
741
-
742
- // Support: IE<9
743
- // Otherwise append directly
744
- function( target, els ) {
745
- var j = target.length,
746
- i = 0;
747
-
748
- // Can't trust NodeList.length
749
- while ( ( target[ j++ ] = els[ i++ ] ) ) {}
750
- target.length = j - 1;
793
+ },
794
+ call: function( target ) {
795
+ pushNative.apply( target, slice.call( arguments, 1 ) );
751
796
  }
752
797
  };
753
798
  }
754
799
 
755
- function Sizzle( selector, context, results, seed ) {
800
+ function find( selector, context, results, seed ) {
756
801
  var m, i, elem, nid, match, groups, newSelector,
757
802
  newContext = context && context.ownerDocument,
758
803
 
@@ -786,11 +831,10 @@ function Sizzle( selector, context, results, seed ) {
786
831
  if ( nodeType === 9 ) {
787
832
  if ( ( elem = context.getElementById( m ) ) ) {
788
833
 
789
- // Support: IE, Opera, Webkit
790
- // TODO: identify versions
834
+ // Support: IE 9 only
791
835
  // getElementById can match elements by name instead of ID
792
836
  if ( elem.id === m ) {
793
- results.push( elem );
837
+ push.call( results, elem );
794
838
  return results;
795
839
  }
796
840
  } else {
@@ -800,14 +844,13 @@ function Sizzle( selector, context, results, seed ) {
800
844
  // Element context
801
845
  } else {
802
846
 
803
- // Support: IE, Opera, Webkit
804
- // TODO: identify versions
847
+ // Support: IE 9 only
805
848
  // getElementById can match elements by name instead of ID
806
849
  if ( newContext && ( elem = newContext.getElementById( m ) ) &&
807
- contains( context, elem ) &&
850
+ find.contains( context, elem ) &&
808
851
  elem.id === m ) {
809
852
 
810
- results.push( elem );
853
+ push.call( results, elem );
811
854
  return results;
812
855
  }
813
856
  }
@@ -818,22 +861,15 @@ function Sizzle( selector, context, results, seed ) {
818
861
  return results;
819
862
 
820
863
  // Class selector
821
- } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
822
- context.getElementsByClassName ) {
823
-
864
+ } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
824
865
  push.apply( results, context.getElementsByClassName( m ) );
825
866
  return results;
826
867
  }
827
868
  }
828
869
 
829
870
  // Take advantage of querySelectorAll
830
- if ( support.qsa &&
831
- !nonnativeSelectorCache[ selector + " " ] &&
832
- ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
833
-
834
- // Support: IE 8 only
835
- // Exclude object elements
836
- ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
871
+ if ( !nonnativeSelectorCache[ selector + " " ] &&
872
+ ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
837
873
 
838
874
  newSelector = selector;
839
875
  newContext = context;
@@ -846,7 +882,7 @@ function Sizzle( selector, context, results, seed ) {
846
882
  // as such selectors are not recognized by querySelectorAll.
847
883
  // Thanks to Andrew Dupont for this technique.
848
884
  if ( nodeType === 1 &&
849
- ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
885
+ ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
850
886
 
851
887
  // Expand context for sibling selectors
852
888
  newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
@@ -854,11 +890,15 @@ function Sizzle( selector, context, results, seed ) {
854
890
 
855
891
  // We can use :scope instead of the ID hack if the browser
856
892
  // supports it & if we're not changing the context.
857
- if ( newContext !== context || !support.scope ) {
893
+ // Support: IE 11+, Edge 17 - 18+
894
+ // IE/Edge sometimes throw a "Permission denied" error when
895
+ // strict-comparing two documents; shallow comparisons work.
896
+ // eslint-disable-next-line eqeqeq
897
+ if ( newContext != context || !support.scope ) {
858
898
 
859
899
  // Capture the context ID, setting it first if necessary
860
900
  if ( ( nid = context.getAttribute( "id" ) ) ) {
861
- nid = nid.replace( rcssescape, fcssescape );
901
+ nid = jQuery.escapeSelector( nid );
862
902
  } else {
863
903
  context.setAttribute( "id", ( nid = expando ) );
864
904
  }
@@ -891,7 +931,7 @@ function Sizzle( selector, context, results, seed ) {
891
931
  }
892
932
 
893
933
  // All others
894
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
934
+ return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
895
935
  }
896
936
 
897
937
  /**
@@ -905,7 +945,8 @@ function createCache() {
905
945
 
906
946
  function cache( key, value ) {
907
947
 
908
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
948
+ // Use (key + " ") to avoid collision with native prototype properties
949
+ // (see https://github.com/jquery/sizzle/issues/157)
909
950
  if ( keys.push( key + " " ) > Expr.cacheLength ) {
910
951
 
911
952
  // Only keep the most recent entries
@@ -917,7 +958,7 @@ function createCache() {
917
958
  }
918
959
 
919
960
  /**
920
- * Mark a function for special use by Sizzle
961
+ * Mark a function for special use by jQuery selector module
921
962
  * @param {Function} fn The function to mark
922
963
  */
923
964
  function markFunction( fn ) {
@@ -948,56 +989,13 @@ function assert( fn ) {
948
989
  }
949
990
  }
950
991
 
951
- /**
952
- * Adds the same handler for all of the specified attrs
953
- * @param {String} attrs Pipe-separated list of attributes
954
- * @param {Function} handler The method that will be applied
955
- */
956
- function addHandle( attrs, handler ) {
957
- var arr = attrs.split( "|" ),
958
- i = arr.length;
959
-
960
- while ( i-- ) {
961
- Expr.attrHandle[ arr[ i ] ] = handler;
962
- }
963
- }
964
-
965
- /**
966
- * Checks document order of two siblings
967
- * @param {Element} a
968
- * @param {Element} b
969
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
970
- */
971
- function siblingCheck( a, b ) {
972
- var cur = b && a,
973
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
974
- a.sourceIndex - b.sourceIndex;
975
-
976
- // Use IE sourceIndex if available on both nodes
977
- if ( diff ) {
978
- return diff;
979
- }
980
-
981
- // Check if b follows a
982
- if ( cur ) {
983
- while ( ( cur = cur.nextSibling ) ) {
984
- if ( cur === b ) {
985
- return -1;
986
- }
987
- }
988
- }
989
-
990
- return a ? 1 : -1;
991
- }
992
-
993
992
  /**
994
993
  * Returns a function to use in pseudos for input types
995
994
  * @param {String} type
996
995
  */
997
996
  function createInputPseudo( type ) {
998
997
  return function( elem ) {
999
- var name = elem.nodeName.toLowerCase();
1000
- return name === "input" && elem.type === type;
998
+ return nodeName( elem, "input" ) && elem.type === type;
1001
999
  };
1002
1000
  }
1003
1001
 
@@ -1007,8 +1005,8 @@ function createInputPseudo( type ) {
1007
1005
  */
1008
1006
  function createButtonPseudo( type ) {
1009
1007
  return function( elem ) {
1010
- var name = elem.nodeName.toLowerCase();
1011
- return ( name === "input" || name === "button" ) && elem.type === type;
1008
+ return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
1009
+ elem.type === type;
1012
1010
  };
1013
1011
  }
1014
1012
 
@@ -1044,14 +1042,13 @@ function createDisabledPseudo( disabled ) {
1044
1042
  }
1045
1043
  }
1046
1044
 
1047
- // Support: IE 6 - 11
1045
+ // Support: IE 6 - 11+
1048
1046
  // Use the isDisabled shortcut property to check for disabled fieldset ancestors
1049
1047
  return elem.isDisabled === disabled ||
1050
1048
 
1051
1049
  // Where there is no isDisabled, check manually
1052
- /* jshint -W018 */
1053
1050
  elem.isDisabled !== !disabled &&
1054
- inDisabledFieldset( elem ) === disabled;
1051
+ inDisabledFieldset( elem ) === disabled;
1055
1052
  }
1056
1053
 
1057
1054
  return elem.disabled === disabled;
@@ -1091,7 +1088,7 @@ function createPositionalPseudo( fn ) {
1091
1088
  }
1092
1089
 
1093
1090
  /**
1094
- * Checks a node for validity as a Sizzle context
1091
+ * Checks a node for validity as a jQuery selector context
1095
1092
  * @param {Element|Object=} context
1096
1093
  * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
1097
1094
  */
@@ -1099,31 +1096,13 @@ function testContext( context ) {
1099
1096
  return context && typeof context.getElementsByTagName !== "undefined" && context;
1100
1097
  }
1101
1098
 
1102
- // Expose support vars for convenience
1103
- support = Sizzle.support = {};
1104
-
1105
- /**
1106
- * Detects XML nodes
1107
- * @param {Element|Object} elem An element or a document
1108
- * @returns {Boolean} True iff elem is a non-HTML XML node
1109
- */
1110
- isXML = Sizzle.isXML = function( elem ) {
1111
- var namespace = elem.namespaceURI,
1112
- docElem = ( elem.ownerDocument || elem ).documentElement;
1113
-
1114
- // Support: IE <=8
1115
- // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
1116
- // https://bugs.jquery.com/ticket/4833
1117
- return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
1118
- };
1119
-
1120
1099
  /**
1121
1100
  * Sets document-related variables once based on the current document
1122
- * @param {Element|Object} [doc] An element or document object to use to set the document
1101
+ * @param {Element|Object} [node] An element or document object to use to set the document
1123
1102
  * @returns {Object} Returns the current document
1124
1103
  */
1125
- setDocument = Sizzle.setDocument = function( node ) {
1126
- var hasCompare, subWindow,
1104
+ function setDocument( node ) {
1105
+ var subWindow,
1127
1106
  doc = node ? node.ownerDocument || node : preferredDoc;
1128
1107
 
1129
1108
  // Return early if doc is invalid or already selected
@@ -1137,11 +1116,17 @@ setDocument = Sizzle.setDocument = function( node ) {
1137
1116
 
1138
1117
  // Update global variables
1139
1118
  document = doc;
1140
- docElem = document.documentElement;
1141
- documentIsHTML = !isXML( document );
1119
+ documentElement = document.documentElement;
1120
+ documentIsHTML = !jQuery.isXMLDoc( document );
1121
+
1122
+ // Support: iOS 7 only, IE 9 - 11+
1123
+ // Older browsers didn't support unprefixed `matches`.
1124
+ matches = documentElement.matches ||
1125
+ documentElement.webkitMatchesSelector ||
1126
+ documentElement.msMatchesSelector;
1142
1127
 
1143
1128
  // Support: IE 9 - 11+, Edge 12 - 18+
1144
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
1129
+ // Accessing iframe documents after unload throws "permission denied" errors (see trac-13936)
1145
1130
  // Support: IE 11+, Edge 17 - 18+
1146
1131
  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1147
1132
  // two documents; shallow comparisons work.
@@ -1149,75 +1134,67 @@ setDocument = Sizzle.setDocument = function( node ) {
1149
1134
  if ( preferredDoc != document &&
1150
1135
  ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
1151
1136
 
1152
- // Support: IE 11, Edge
1153
- if ( subWindow.addEventListener ) {
1154
- subWindow.addEventListener( "unload", unloadHandler, false );
1155
-
1156
- // Support: IE 9 - 10 only
1157
- } else if ( subWindow.attachEvent ) {
1158
- subWindow.attachEvent( "onunload", unloadHandler );
1159
- }
1137
+ // Support: IE 9 - 11+, Edge 12 - 18+
1138
+ subWindow.addEventListener( "unload", unloadHandler );
1160
1139
  }
1161
1140
 
1162
- // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
1163
- // Safari 4 - 5 only, Opera <=11.6 - 12.x only
1164
- // IE/Edge & older browsers don't support the :scope pseudo-class.
1165
- // Support: Safari 6.0 only
1166
- // Safari 6.0 supports :scope but it's an alias of :root there.
1167
- support.scope = assert( function( el ) {
1168
- docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
1169
- return typeof el.querySelectorAll !== "undefined" &&
1170
- !el.querySelectorAll( ":scope fieldset div" ).length;
1141
+ // Support: IE <10
1142
+ // Check if getElementById returns elements by name
1143
+ // The broken getElementById methods don't pick up programmatically-set names,
1144
+ // so use a roundabout getElementsByName test
1145
+ support.getById = assert( function( el ) {
1146
+ documentElement.appendChild( el ).id = jQuery.expando;
1147
+ return !document.getElementsByName ||
1148
+ !document.getElementsByName( jQuery.expando ).length;
1171
1149
  } );
1172
1150
 
1173
- /* Attributes
1174
- ---------------------------------------------------------------------- */
1175
-
1176
- // Support: IE<8
1177
- // Verify that getAttribute really returns attributes and not properties
1178
- // (excepting IE8 booleans)
1179
- support.attributes = assert( function( el ) {
1180
- el.className = "i";
1181
- return !el.getAttribute( "className" );
1151
+ // Support: IE 9 only
1152
+ // Check to see if it's possible to do matchesSelector
1153
+ // on a disconnected node.
1154
+ support.disconnectedMatch = assert( function( el ) {
1155
+ return matches.call( el, "*" );
1182
1156
  } );
1183
1157
 
1184
- /* getElement(s)By*
1185
- ---------------------------------------------------------------------- */
1186
-
1187
- // Check if getElementsByTagName("*") returns only elements
1188
- support.getElementsByTagName = assert( function( el ) {
1189
- el.appendChild( document.createComment( "" ) );
1190
- return !el.getElementsByTagName( "*" ).length;
1158
+ // Support: IE 9 - 11+, Edge 12 - 18+
1159
+ // IE/Edge don't support the :scope pseudo-class.
1160
+ support.scope = assert( function() {
1161
+ return document.querySelectorAll( ":scope" );
1191
1162
  } );
1192
1163
 
1193
- // Support: IE<9
1194
- support.getElementsByClassName = rnative.test( document.getElementsByClassName );
1195
-
1196
- // Support: IE<10
1197
- // Check if getElementById returns elements by name
1198
- // The broken getElementById methods don't pick up programmatically-set names,
1199
- // so use a roundabout getElementsByName test
1200
- support.getById = assert( function( el ) {
1201
- docElem.appendChild( el ).id = expando;
1202
- return !document.getElementsByName || !document.getElementsByName( expando ).length;
1164
+ // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
1165
+ // Make sure the `:has()` argument is parsed unforgivingly.
1166
+ // We include `*` in the test to detect buggy implementations that are
1167
+ // _selectively_ forgiving (specifically when the list includes at least
1168
+ // one valid selector).
1169
+ // Note that we treat complete lack of support for `:has()` as if it were
1170
+ // spec-compliant support, which is fine because use of `:has()` in such
1171
+ // environments will fail in the qSA path and fall back to jQuery traversal
1172
+ // anyway.
1173
+ support.cssHas = assert( function() {
1174
+ try {
1175
+ document.querySelector( ":has(*,:jqfake)" );
1176
+ return false;
1177
+ } catch ( e ) {
1178
+ return true;
1179
+ }
1203
1180
  } );
1204
1181
 
1205
1182
  // ID filter and find
1206
1183
  if ( support.getById ) {
1207
- Expr.filter[ "ID" ] = function( id ) {
1184
+ Expr.filter.ID = function( id ) {
1208
1185
  var attrId = id.replace( runescape, funescape );
1209
1186
  return function( elem ) {
1210
1187
  return elem.getAttribute( "id" ) === attrId;
1211
1188
  };
1212
1189
  };
1213
- Expr.find[ "ID" ] = function( id, context ) {
1190
+ Expr.find.ID = function( id, context ) {
1214
1191
  if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1215
1192
  var elem = context.getElementById( id );
1216
1193
  return elem ? [ elem ] : [];
1217
1194
  }
1218
1195
  };
1219
1196
  } else {
1220
- Expr.filter[ "ID" ] = function( id ) {
1197
+ Expr.filter.ID = function( id ) {
1221
1198
  var attrId = id.replace( runescape, funescape );
1222
1199
  return function( elem ) {
1223
1200
  var node = typeof elem.getAttributeNode !== "undefined" &&
@@ -1228,7 +1205,7 @@ setDocument = Sizzle.setDocument = function( node ) {
1228
1205
 
1229
1206
  // Support: IE 6 - 7 only
1230
1207
  // getElementById is not reliable as a find shortcut
1231
- Expr.find[ "ID" ] = function( id, context ) {
1208
+ Expr.find.ID = function( id, context ) {
1232
1209
  if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1233
1210
  var node, i, elems,
1234
1211
  elem = context.getElementById( id );
@@ -1258,40 +1235,18 @@ setDocument = Sizzle.setDocument = function( node ) {
1258
1235
  }
1259
1236
 
1260
1237
  // Tag
1261
- Expr.find[ "TAG" ] = support.getElementsByTagName ?
1262
- function( tag, context ) {
1263
- if ( typeof context.getElementsByTagName !== "undefined" ) {
1264
- return context.getElementsByTagName( tag );
1265
-
1266
- // DocumentFragment nodes don't have gEBTN
1267
- } else if ( support.qsa ) {
1268
- return context.querySelectorAll( tag );
1269
- }
1270
- } :
1271
-
1272
- function( tag, context ) {
1273
- var elem,
1274
- tmp = [],
1275
- i = 0,
1276
-
1277
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
1278
- results = context.getElementsByTagName( tag );
1238
+ Expr.find.TAG = function( tag, context ) {
1239
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
1240
+ return context.getElementsByTagName( tag );
1279
1241
 
1280
- // Filter out possible comments
1281
- if ( tag === "*" ) {
1282
- while ( ( elem = results[ i++ ] ) ) {
1283
- if ( elem.nodeType === 1 ) {
1284
- tmp.push( elem );
1285
- }
1286
- }
1287
-
1288
- return tmp;
1289
- }
1290
- return results;
1291
- };
1242
+ // DocumentFragment nodes don't have gEBTN
1243
+ } else {
1244
+ return context.querySelectorAll( tag );
1245
+ }
1246
+ };
1292
1247
 
1293
1248
  // Class
1294
- Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
1249
+ Expr.find.CLASS = function( className, context ) {
1295
1250
  if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
1296
1251
  return context.getElementsByClassName( className );
1297
1252
  }
@@ -1302,177 +1257,94 @@ setDocument = Sizzle.setDocument = function( node ) {
1302
1257
 
1303
1258
  // QSA and matchesSelector support
1304
1259
 
1305
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
1306
- rbuggyMatches = [];
1307
-
1308
- // qSa(:focus) reports false when true (Chrome 21)
1309
- // We allow this because of a bug in IE8/9 that throws an error
1310
- // whenever `document.activeElement` is accessed on an iframe
1311
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
1312
- // See https://bugs.jquery.com/ticket/13378
1313
1260
  rbuggyQSA = [];
1314
1261
 
1315
- if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
1316
-
1317
- // Build QSA regex
1318
- // Regex strategy adopted from Diego Perini
1319
- assert( function( el ) {
1320
-
1321
- var input;
1262
+ // Build QSA regex
1263
+ // Regex strategy adopted from Diego Perini
1264
+ assert( function( el ) {
1322
1265
 
1323
- // Select is set to empty string on purpose
1324
- // This is to test IE's treatment of not explicitly
1325
- // setting a boolean content attribute,
1326
- // since its presence should be enough
1327
- // https://bugs.jquery.com/ticket/12359
1328
- docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
1329
- "<select id='" + expando + "-\r\\' msallowcapture=''>" +
1330
- "<option selected=''></option></select>";
1331
-
1332
- // Support: IE8, Opera 11-12.16
1333
- // Nothing should be selected when empty strings follow ^= or $= or *=
1334
- // The test attribute must be unknown in Opera but "safe" for WinRT
1335
- // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
1336
- if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
1337
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
1338
- }
1339
-
1340
- // Support: IE8
1341
- // Boolean attributes and "value" are not treated correctly
1342
- if ( !el.querySelectorAll( "[selected]" ).length ) {
1343
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
1344
- }
1345
-
1346
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
1347
- if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
1348
- rbuggyQSA.push( "~=" );
1349
- }
1350
-
1351
- // Support: IE 11+, Edge 15 - 18+
1352
- // IE 11/Edge don't find elements on a `[name='']` query in some cases.
1353
- // Adding a temporary attribute to the document before the selection works
1354
- // around the issue.
1355
- // Interestingly, IE 10 & older don't seem to have the issue.
1356
- input = document.createElement( "input" );
1357
- input.setAttribute( "name", "" );
1358
- el.appendChild( input );
1359
- if ( !el.querySelectorAll( "[name='']" ).length ) {
1360
- rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
1361
- whitespace + "*(?:''|\"\")" );
1362
- }
1363
-
1364
- // Webkit/Opera - :checked should return selected option elements
1365
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1366
- // IE8 throws error here and will not see later tests
1367
- if ( !el.querySelectorAll( ":checked" ).length ) {
1368
- rbuggyQSA.push( ":checked" );
1369
- }
1370
-
1371
- // Support: Safari 8+, iOS 8+
1372
- // https://bugs.webkit.org/show_bug.cgi?id=136851
1373
- // In-page `selector#id sibling-combinator selector` fails
1374
- if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
1375
- rbuggyQSA.push( ".#.+[+~]" );
1376
- }
1377
-
1378
- // Support: Firefox <=3.6 - 5 only
1379
- // Old Firefox doesn't throw on a badly-escaped identifier.
1380
- el.querySelectorAll( "\\\f" );
1381
- rbuggyQSA.push( "[\\r\\n\\f]" );
1382
- } );
1266
+ var input;
1383
1267
 
1384
- assert( function( el ) {
1385
- el.innerHTML = "<a href='' disabled='disabled'></a>" +
1386
- "<select disabled='disabled'><option/></select>";
1268
+ documentElement.appendChild( el ).innerHTML =
1269
+ "<a id='" + expando + "' href='' disabled='disabled'></a>" +
1270
+ "<select id='" + expando + "-\r\\' disabled='disabled'>" +
1271
+ "<option selected=''></option></select>";
1387
1272
 
1388
- // Support: Windows 8 Native Apps
1389
- // The type and name attributes are restricted during .innerHTML assignment
1390
- var input = document.createElement( "input" );
1391
- input.setAttribute( "type", "hidden" );
1392
- el.appendChild( input ).setAttribute( "name", "D" );
1393
-
1394
- // Support: IE8
1395
- // Enforce case-sensitivity of name attribute
1396
- if ( el.querySelectorAll( "[name=d]" ).length ) {
1397
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
1398
- }
1399
-
1400
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
1401
- // IE8 throws error here and will not see later tests
1402
- if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
1403
- rbuggyQSA.push( ":enabled", ":disabled" );
1404
- }
1273
+ // Support: iOS <=7 - 8 only
1274
+ // Boolean attributes and "value" are not treated correctly in some XML documents
1275
+ if ( !el.querySelectorAll( "[selected]" ).length ) {
1276
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
1277
+ }
1405
1278
 
1406
- // Support: IE9-11+
1407
- // IE's :disabled selector does not pick up the children of disabled fieldsets
1408
- docElem.appendChild( el ).disabled = true;
1409
- if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
1410
- rbuggyQSA.push( ":enabled", ":disabled" );
1411
- }
1279
+ // Support: iOS <=7 - 8 only
1280
+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
1281
+ rbuggyQSA.push( "~=" );
1282
+ }
1412
1283
 
1413
- // Support: Opera 10 - 11 only
1414
- // Opera 10-11 does not throw on post-comma invalid pseudos
1415
- el.querySelectorAll( "*,:x" );
1416
- rbuggyQSA.push( ",.*:" );
1417
- } );
1418
- }
1284
+ // Support: iOS 8 only
1285
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
1286
+ // In-page `selector#id sibling-combinator selector` fails
1287
+ if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
1288
+ rbuggyQSA.push( ".#.+[+~]" );
1289
+ }
1419
1290
 
1420
- if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
1421
- docElem.webkitMatchesSelector ||
1422
- docElem.mozMatchesSelector ||
1423
- docElem.oMatchesSelector ||
1424
- docElem.msMatchesSelector ) ) ) ) {
1291
+ // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
1292
+ // In some of the document kinds, these selectors wouldn't work natively.
1293
+ // This is probably OK but for backwards compatibility we want to maintain
1294
+ // handling them through jQuery traversal in jQuery 3.x.
1295
+ if ( !el.querySelectorAll( ":checked" ).length ) {
1296
+ rbuggyQSA.push( ":checked" );
1297
+ }
1425
1298
 
1426
- assert( function( el ) {
1299
+ // Support: Windows 8 Native Apps
1300
+ // The type and name attributes are restricted during .innerHTML assignment
1301
+ input = document.createElement( "input" );
1302
+ input.setAttribute( "type", "hidden" );
1303
+ el.appendChild( input ).setAttribute( "name", "D" );
1304
+
1305
+ // Support: IE 9 - 11+
1306
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
1307
+ // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
1308
+ // In some of the document kinds, these selectors wouldn't work natively.
1309
+ // This is probably OK but for backwards compatibility we want to maintain
1310
+ // handling them through jQuery traversal in jQuery 3.x.
1311
+ documentElement.appendChild( el ).disabled = true;
1312
+ if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
1313
+ rbuggyQSA.push( ":enabled", ":disabled" );
1314
+ }
1315
+
1316
+ // Support: IE 11+, Edge 15 - 18+
1317
+ // IE 11/Edge don't find elements on a `[name='']` query in some cases.
1318
+ // Adding a temporary attribute to the document before the selection works
1319
+ // around the issue.
1320
+ // Interestingly, IE 10 & older don't seem to have the issue.
1321
+ input = document.createElement( "input" );
1322
+ input.setAttribute( "name", "" );
1323
+ el.appendChild( input );
1324
+ if ( !el.querySelectorAll( "[name='']" ).length ) {
1325
+ rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
1326
+ whitespace + "*(?:''|\"\")" );
1327
+ }
1328
+ } );
1427
1329
 
1428
- // Check to see if it's possible to do matchesSelector
1429
- // on a disconnected node (IE 9)
1430
- support.disconnectedMatch = matches.call( el, "*" );
1330
+ if ( !support.cssHas ) {
1431
1331
 
1432
- // This should fail with an exception
1433
- // Gecko does not error, returns false instead
1434
- matches.call( el, "[s!='']:x" );
1435
- rbuggyMatches.push( "!=", pseudos );
1436
- } );
1332
+ // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
1333
+ // Our regular `try-catch` mechanism fails to detect natively-unsupported
1334
+ // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
1335
+ // in browsers that parse the `:has()` argument as a forgiving selector list.
1336
+ // https://drafts.csswg.org/selectors/#relational now requires the argument
1337
+ // to be parsed unforgivingly, but browsers have not yet fully adjusted.
1338
+ rbuggyQSA.push( ":has" );
1437
1339
  }
1438
1340
 
1439
1341
  rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
1440
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
1441
-
1442
- /* Contains
1443
- ---------------------------------------------------------------------- */
1444
- hasCompare = rnative.test( docElem.compareDocumentPosition );
1445
-
1446
- // Element contains another
1447
- // Purposefully self-exclusive
1448
- // As in, an element does not contain itself
1449
- contains = hasCompare || rnative.test( docElem.contains ) ?
1450
- function( a, b ) {
1451
- var adown = a.nodeType === 9 ? a.documentElement : a,
1452
- bup = b && b.parentNode;
1453
- return a === bup || !!( bup && bup.nodeType === 1 && (
1454
- adown.contains ?
1455
- adown.contains( bup ) :
1456
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
1457
- ) );
1458
- } :
1459
- function( a, b ) {
1460
- if ( b ) {
1461
- while ( ( b = b.parentNode ) ) {
1462
- if ( b === a ) {
1463
- return true;
1464
- }
1465
- }
1466
- }
1467
- return false;
1468
- };
1469
1342
 
1470
1343
  /* Sorting
1471
1344
  ---------------------------------------------------------------------- */
1472
1345
 
1473
1346
  // Document order sorting
1474
- sortOrder = hasCompare ?
1475
- function( a, b ) {
1347
+ sortOrder = function( a, b ) {
1476
1348
 
1477
1349
  // Flag for duplicate removal
1478
1350
  if ( a === b ) {
@@ -1506,8 +1378,8 @@ setDocument = Sizzle.setDocument = function( node ) {
1506
1378
  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1507
1379
  // two documents; shallow comparisons work.
1508
1380
  // eslint-disable-next-line eqeqeq
1509
- if ( a == document || a.ownerDocument == preferredDoc &&
1510
- contains( preferredDoc, a ) ) {
1381
+ if ( a === document || a.ownerDocument == preferredDoc &&
1382
+ find.contains( preferredDoc, a ) ) {
1511
1383
  return -1;
1512
1384
  }
1513
1385
 
@@ -1515,100 +1387,33 @@ setDocument = Sizzle.setDocument = function( node ) {
1515
1387
  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1516
1388
  // two documents; shallow comparisons work.
1517
1389
  // eslint-disable-next-line eqeqeq
1518
- if ( b == document || b.ownerDocument == preferredDoc &&
1519
- contains( preferredDoc, b ) ) {
1390
+ if ( b === document || b.ownerDocument == preferredDoc &&
1391
+ find.contains( preferredDoc, b ) ) {
1520
1392
  return 1;
1521
1393
  }
1522
1394
 
1523
1395
  // Maintain original order
1524
1396
  return sortInput ?
1525
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1397
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
1526
1398
  0;
1527
1399
  }
1528
1400
 
1529
1401
  return compare & 4 ? -1 : 1;
1530
- } :
1531
- function( a, b ) {
1532
-
1533
- // Exit early if the nodes are identical
1534
- if ( a === b ) {
1535
- hasDuplicate = true;
1536
- return 0;
1537
- }
1538
-
1539
- var cur,
1540
- i = 0,
1541
- aup = a.parentNode,
1542
- bup = b.parentNode,
1543
- ap = [ a ],
1544
- bp = [ b ];
1545
-
1546
- // Parentless nodes are either documents or disconnected
1547
- if ( !aup || !bup ) {
1548
-
1549
- // Support: IE 11+, Edge 17 - 18+
1550
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1551
- // two documents; shallow comparisons work.
1552
- /* eslint-disable eqeqeq */
1553
- return a == document ? -1 :
1554
- b == document ? 1 :
1555
- /* eslint-enable eqeqeq */
1556
- aup ? -1 :
1557
- bup ? 1 :
1558
- sortInput ?
1559
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1560
- 0;
1561
-
1562
- // If the nodes are siblings, we can do a quick check
1563
- } else if ( aup === bup ) {
1564
- return siblingCheck( a, b );
1565
- }
1566
-
1567
- // Otherwise we need full lists of their ancestors for comparison
1568
- cur = a;
1569
- while ( ( cur = cur.parentNode ) ) {
1570
- ap.unshift( cur );
1571
- }
1572
- cur = b;
1573
- while ( ( cur = cur.parentNode ) ) {
1574
- bp.unshift( cur );
1575
- }
1576
-
1577
- // Walk down the tree looking for a discrepancy
1578
- while ( ap[ i ] === bp[ i ] ) {
1579
- i++;
1580
- }
1581
-
1582
- return i ?
1583
-
1584
- // Do a sibling check if the nodes have a common ancestor
1585
- siblingCheck( ap[ i ], bp[ i ] ) :
1586
-
1587
- // Otherwise nodes in our document sort first
1588
- // Support: IE 11+, Edge 17 - 18+
1589
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1590
- // two documents; shallow comparisons work.
1591
- /* eslint-disable eqeqeq */
1592
- ap[ i ] == preferredDoc ? -1 :
1593
- bp[ i ] == preferredDoc ? 1 :
1594
- /* eslint-enable eqeqeq */
1595
- 0;
1596
1402
  };
1597
1403
 
1598
1404
  return document;
1599
- };
1405
+ }
1600
1406
 
1601
- Sizzle.matches = function( expr, elements ) {
1602
- return Sizzle( expr, null, null, elements );
1407
+ find.matches = function( expr, elements ) {
1408
+ return find( expr, null, null, elements );
1603
1409
  };
1604
1410
 
1605
- Sizzle.matchesSelector = function( elem, expr ) {
1411
+ find.matchesSelector = function( elem, expr ) {
1606
1412
  setDocument( elem );
1607
1413
 
1608
- if ( support.matchesSelector && documentIsHTML &&
1414
+ if ( documentIsHTML &&
1609
1415
  !nonnativeSelectorCache[ expr + " " ] &&
1610
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
1611
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
1416
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
1612
1417
 
1613
1418
  try {
1614
1419
  var ret = matches.call( elem, expr );
@@ -1616,9 +1421,9 @@ Sizzle.matchesSelector = function( elem, expr ) {
1616
1421
  // IE 9's matchesSelector returns false on disconnected nodes
1617
1422
  if ( ret || support.disconnectedMatch ||
1618
1423
 
1619
- // As well, disconnected nodes are said to be in a document
1620
- // fragment in IE 9
1621
- elem.document && elem.document.nodeType !== 11 ) {
1424
+ // As well, disconnected nodes are said to be in a document
1425
+ // fragment in IE 9
1426
+ elem.document && elem.document.nodeType !== 11 ) {
1622
1427
  return ret;
1623
1428
  }
1624
1429
  } catch ( e ) {
@@ -1626,10 +1431,10 @@ Sizzle.matchesSelector = function( elem, expr ) {
1626
1431
  }
1627
1432
  }
1628
1433
 
1629
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
1434
+ return find( expr, document, null, [ elem ] ).length > 0;
1630
1435
  };
1631
1436
 
1632
- Sizzle.contains = function( context, elem ) {
1437
+ find.contains = function( context, elem ) {
1633
1438
 
1634
1439
  // Set document vars if needed
1635
1440
  // Support: IE 11+, Edge 17 - 18+
@@ -1639,10 +1444,11 @@ Sizzle.contains = function( context, elem ) {
1639
1444
  if ( ( context.ownerDocument || context ) != document ) {
1640
1445
  setDocument( context );
1641
1446
  }
1642
- return contains( context, elem );
1447
+ return jQuery.contains( context, elem );
1643
1448
  };
1644
1449
 
1645
- Sizzle.attr = function( elem, name ) {
1450
+
1451
+ find.attr = function( elem, name ) {
1646
1452
 
1647
1453
  // Set document vars if needed
1648
1454
  // Support: IE 11+, Edge 17 - 18+
@@ -1655,25 +1461,19 @@ Sizzle.attr = function( elem, name ) {
1655
1461
 
1656
1462
  var fn = Expr.attrHandle[ name.toLowerCase() ],
1657
1463
 
1658
- // Don't get fooled by Object.prototype properties (jQuery #13807)
1464
+ // Don't get fooled by Object.prototype properties (see trac-13807)
1659
1465
  val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
1660
1466
  fn( elem, name, !documentIsHTML ) :
1661
1467
  undefined;
1662
1468
 
1663
- return val !== undefined ?
1664
- val :
1665
- support.attributes || !documentIsHTML ?
1666
- elem.getAttribute( name ) :
1667
- ( val = elem.getAttributeNode( name ) ) && val.specified ?
1668
- val.value :
1669
- null;
1670
- };
1469
+ if ( val !== undefined ) {
1470
+ return val;
1471
+ }
1671
1472
 
1672
- Sizzle.escape = function( sel ) {
1673
- return ( sel + "" ).replace( rcssescape, fcssescape );
1473
+ return elem.getAttribute( name );
1674
1474
  };
1675
1475
 
1676
- Sizzle.error = function( msg ) {
1476
+ find.error = function( msg ) {
1677
1477
  throw new Error( "Syntax error, unrecognized expression: " + msg );
1678
1478
  };
1679
1479
 
@@ -1681,16 +1481,20 @@ Sizzle.error = function( msg ) {
1681
1481
  * Document sorting and removing duplicates
1682
1482
  * @param {ArrayLike} results
1683
1483
  */
1684
- Sizzle.uniqueSort = function( results ) {
1484
+ jQuery.uniqueSort = function( results ) {
1685
1485
  var elem,
1686
1486
  duplicates = [],
1687
1487
  j = 0,
1688
1488
  i = 0;
1689
1489
 
1690
1490
  // Unless we *know* we can detect duplicates, assume their presence
1691
- hasDuplicate = !support.detectDuplicates;
1692
- sortInput = !support.sortStable && results.slice( 0 );
1693
- results.sort( sortOrder );
1491
+ //
1492
+ // Support: Android <=4.0+
1493
+ // Testing for detecting duplicates is unpredictable so instead assume we can't
1494
+ // depend on duplicate detection in all browsers without a stable sort.
1495
+ hasDuplicate = !support.sortStable;
1496
+ sortInput = !support.sortStable && slice.call( results, 0 );
1497
+ sort.call( results, sortOrder );
1694
1498
 
1695
1499
  if ( hasDuplicate ) {
1696
1500
  while ( ( elem = results[ i++ ] ) ) {
@@ -1699,7 +1503,7 @@ Sizzle.uniqueSort = function( results ) {
1699
1503
  }
1700
1504
  }
1701
1505
  while ( j-- ) {
1702
- results.splice( duplicates[ j ], 1 );
1506
+ splice.call( results, duplicates[ j ], 1 );
1703
1507
  }
1704
1508
  }
1705
1509
 
@@ -1707,50 +1511,14 @@ Sizzle.uniqueSort = function( results ) {
1707
1511
  // See https://github.com/jquery/sizzle/pull/225
1708
1512
  sortInput = null;
1709
1513
 
1710
- return results;
1711
- };
1712
-
1713
- /**
1714
- * Utility function for retrieving the text value of an array of DOM nodes
1715
- * @param {Array|Element} elem
1716
- */
1717
- getText = Sizzle.getText = function( elem ) {
1718
- var node,
1719
- ret = "",
1720
- i = 0,
1721
- nodeType = elem.nodeType;
1722
-
1723
- if ( !nodeType ) {
1724
-
1725
- // If no nodeType, this is expected to be an array
1726
- while ( ( node = elem[ i++ ] ) ) {
1727
-
1728
- // Do not traverse comment nodes
1729
- ret += getText( node );
1730
- }
1731
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
1732
-
1733
- // Use textContent for elements
1734
- // innerText usage removed for consistency of new lines (jQuery #11153)
1735
- if ( typeof elem.textContent === "string" ) {
1736
- return elem.textContent;
1737
- } else {
1738
-
1739
- // Traverse its children
1740
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1741
- ret += getText( elem );
1742
- }
1743
- }
1744
- } else if ( nodeType === 3 || nodeType === 4 ) {
1745
- return elem.nodeValue;
1746
- }
1747
-
1748
- // Do not include comment or processing instruction nodes
1514
+ return results;
1515
+ };
1749
1516
 
1750
- return ret;
1517
+ jQuery.fn.uniqueSort = function() {
1518
+ return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
1751
1519
  };
1752
1520
 
1753
- Expr = Sizzle.selectors = {
1521
+ Expr = jQuery.expr = {
1754
1522
 
1755
1523
  // Can be adjusted by the user
1756
1524
  cacheLength: 50,
@@ -1771,12 +1539,12 @@ Expr = Sizzle.selectors = {
1771
1539
  },
1772
1540
 
1773
1541
  preFilter: {
1774
- "ATTR": function( match ) {
1542
+ ATTR: function( match ) {
1775
1543
  match[ 1 ] = match[ 1 ].replace( runescape, funescape );
1776
1544
 
1777
1545
  // Move the given value to match[3] whether quoted or unquoted
1778
- match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
1779
- match[ 5 ] || "" ).replace( runescape, funescape );
1546
+ match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
1547
+ .replace( runescape, funescape );
1780
1548
 
1781
1549
  if ( match[ 2 ] === "~=" ) {
1782
1550
  match[ 3 ] = " " + match[ 3 ] + " ";
@@ -1785,7 +1553,7 @@ Expr = Sizzle.selectors = {
1785
1553
  return match.slice( 0, 4 );
1786
1554
  },
1787
1555
 
1788
- "CHILD": function( match ) {
1556
+ CHILD: function( match ) {
1789
1557
 
1790
1558
  /* matches from matchExpr["CHILD"]
1791
1559
  1 type (only|nth|...)
@@ -1803,29 +1571,30 @@ Expr = Sizzle.selectors = {
1803
1571
 
1804
1572
  // nth-* requires argument
1805
1573
  if ( !match[ 3 ] ) {
1806
- Sizzle.error( match[ 0 ] );
1574
+ find.error( match[ 0 ] );
1807
1575
  }
1808
1576
 
1809
1577
  // numeric x and y parameters for Expr.filter.CHILD
1810
1578
  // remember that false/true cast respectively to 0/1
1811
1579
  match[ 4 ] = +( match[ 4 ] ?
1812
1580
  match[ 5 ] + ( match[ 6 ] || 1 ) :
1813
- 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
1581
+ 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
1582
+ );
1814
1583
  match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
1815
1584
 
1816
- // other types prohibit arguments
1585
+ // other types prohibit arguments
1817
1586
  } else if ( match[ 3 ] ) {
1818
- Sizzle.error( match[ 0 ] );
1587
+ find.error( match[ 0 ] );
1819
1588
  }
1820
1589
 
1821
1590
  return match;
1822
1591
  },
1823
1592
 
1824
- "PSEUDO": function( match ) {
1593
+ PSEUDO: function( match ) {
1825
1594
  var excess,
1826
1595
  unquoted = !match[ 6 ] && match[ 2 ];
1827
1596
 
1828
- if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
1597
+ if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
1829
1598
  return null;
1830
1599
  }
1831
1600
 
@@ -1854,36 +1623,36 @@ Expr = Sizzle.selectors = {
1854
1623
 
1855
1624
  filter: {
1856
1625
 
1857
- "TAG": function( nodeNameSelector ) {
1858
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
1626
+ TAG: function( nodeNameSelector ) {
1627
+ var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
1859
1628
  return nodeNameSelector === "*" ?
1860
1629
  function() {
1861
1630
  return true;
1862
1631
  } :
1863
1632
  function( elem ) {
1864
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
1633
+ return nodeName( elem, expectedNodeName );
1865
1634
  };
1866
1635
  },
1867
1636
 
1868
- "CLASS": function( className ) {
1637
+ CLASS: function( className ) {
1869
1638
  var pattern = classCache[ className + " " ];
1870
1639
 
1871
1640
  return pattern ||
1872
- ( pattern = new RegExp( "(^|" + whitespace +
1873
- ")" + className + "(" + whitespace + "|$)" ) ) && classCache(
1874
- className, function( elem ) {
1875
- return pattern.test(
1876
- typeof elem.className === "string" && elem.className ||
1877
- typeof elem.getAttribute !== "undefined" &&
1878
- elem.getAttribute( "class" ) ||
1879
- ""
1880
- );
1641
+ ( pattern = new RegExp( "(^|" + whitespace + ")" + className +
1642
+ "(" + whitespace + "|$)" ) ) &&
1643
+ classCache( className, function( elem ) {
1644
+ return pattern.test(
1645
+ typeof elem.className === "string" && elem.className ||
1646
+ typeof elem.getAttribute !== "undefined" &&
1647
+ elem.getAttribute( "class" ) ||
1648
+ ""
1649
+ );
1881
1650
  } );
1882
1651
  },
1883
1652
 
1884
- "ATTR": function( name, operator, check ) {
1653
+ ATTR: function( name, operator, check ) {
1885
1654
  return function( elem ) {
1886
- var result = Sizzle.attr( elem, name );
1655
+ var result = find.attr( elem, name );
1887
1656
 
1888
1657
  if ( result == null ) {
1889
1658
  return operator === "!=";
@@ -1894,22 +1663,34 @@ Expr = Sizzle.selectors = {
1894
1663
 
1895
1664
  result += "";
1896
1665
 
1897
- /* eslint-disable max-len */
1898
-
1899
- return operator === "=" ? result === check :
1900
- operator === "!=" ? result !== check :
1901
- operator === "^=" ? check && result.indexOf( check ) === 0 :
1902
- operator === "*=" ? check && result.indexOf( check ) > -1 :
1903
- operator === "$=" ? check && result.slice( -check.length ) === check :
1904
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
1905
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
1906
- false;
1907
- /* eslint-enable max-len */
1666
+ if ( operator === "=" ) {
1667
+ return result === check;
1668
+ }
1669
+ if ( operator === "!=" ) {
1670
+ return result !== check;
1671
+ }
1672
+ if ( operator === "^=" ) {
1673
+ return check && result.indexOf( check ) === 0;
1674
+ }
1675
+ if ( operator === "*=" ) {
1676
+ return check && result.indexOf( check ) > -1;
1677
+ }
1678
+ if ( operator === "$=" ) {
1679
+ return check && result.slice( -check.length ) === check;
1680
+ }
1681
+ if ( operator === "~=" ) {
1682
+ return ( " " + result.replace( rwhitespace, " " ) + " " )
1683
+ .indexOf( check ) > -1;
1684
+ }
1685
+ if ( operator === "|=" ) {
1686
+ return result === check || result.slice( 0, check.length + 1 ) === check + "-";
1687
+ }
1908
1688
 
1689
+ return false;
1909
1690
  };
1910
1691
  },
1911
1692
 
1912
- "CHILD": function( type, what, _argument, first, last ) {
1693
+ CHILD: function( type, what, _argument, first, last ) {
1913
1694
  var simple = type.slice( 0, 3 ) !== "nth",
1914
1695
  forward = type.slice( -4 ) !== "last",
1915
1696
  ofType = what === "of-type";
@@ -1922,7 +1703,7 @@ Expr = Sizzle.selectors = {
1922
1703
  } :
1923
1704
 
1924
1705
  function( elem, _context, xml ) {
1925
- var cache, uniqueCache, outerCache, node, nodeIndex, start,
1706
+ var cache, outerCache, node, nodeIndex, start,
1926
1707
  dir = simple !== forward ? "nextSibling" : "previousSibling",
1927
1708
  parent = elem.parentNode,
1928
1709
  name = ofType && elem.nodeName.toLowerCase(),
@@ -1937,7 +1718,7 @@ Expr = Sizzle.selectors = {
1937
1718
  node = elem;
1938
1719
  while ( ( node = node[ dir ] ) ) {
1939
1720
  if ( ofType ?
1940
- node.nodeName.toLowerCase() === name :
1721
+ nodeName( node, name ) :
1941
1722
  node.nodeType === 1 ) {
1942
1723
 
1943
1724
  return false;
@@ -1956,17 +1737,8 @@ Expr = Sizzle.selectors = {
1956
1737
  if ( forward && useCache ) {
1957
1738
 
1958
1739
  // Seek `elem` from a previously-cached index
1959
-
1960
- // ...in a gzip-friendly way
1961
- node = parent;
1962
- outerCache = node[ expando ] || ( node[ expando ] = {} );
1963
-
1964
- // Support: IE <9 only
1965
- // Defend against cloned attroperties (jQuery gh-1709)
1966
- uniqueCache = outerCache[ node.uniqueID ] ||
1967
- ( outerCache[ node.uniqueID ] = {} );
1968
-
1969
- cache = uniqueCache[ type ] || [];
1740
+ outerCache = parent[ expando ] || ( parent[ expando ] = {} );
1741
+ cache = outerCache[ type ] || [];
1970
1742
  nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1971
1743
  diff = nodeIndex && cache[ 2 ];
1972
1744
  node = nodeIndex && parent.childNodes[ nodeIndex ];
@@ -1978,7 +1750,7 @@ Expr = Sizzle.selectors = {
1978
1750
 
1979
1751
  // When found, cache indexes on `parent` and break
1980
1752
  if ( node.nodeType === 1 && ++diff && node === elem ) {
1981
- uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
1753
+ outerCache[ type ] = [ dirruns, nodeIndex, diff ];
1982
1754
  break;
1983
1755
  }
1984
1756
  }
@@ -1987,17 +1759,8 @@ Expr = Sizzle.selectors = {
1987
1759
 
1988
1760
  // Use previously-cached element index if available
1989
1761
  if ( useCache ) {
1990
-
1991
- // ...in a gzip-friendly way
1992
- node = elem;
1993
- outerCache = node[ expando ] || ( node[ expando ] = {} );
1994
-
1995
- // Support: IE <9 only
1996
- // Defend against cloned attroperties (jQuery gh-1709)
1997
- uniqueCache = outerCache[ node.uniqueID ] ||
1998
- ( outerCache[ node.uniqueID ] = {} );
1999
-
2000
- cache = uniqueCache[ type ] || [];
1762
+ outerCache = elem[ expando ] || ( elem[ expando ] = {} );
1763
+ cache = outerCache[ type ] || [];
2001
1764
  nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
2002
1765
  diff = nodeIndex;
2003
1766
  }
@@ -2011,7 +1774,7 @@ Expr = Sizzle.selectors = {
2011
1774
  ( diff = nodeIndex = 0 ) || start.pop() ) ) {
2012
1775
 
2013
1776
  if ( ( ofType ?
2014
- node.nodeName.toLowerCase() === name :
1777
+ nodeName( node, name ) :
2015
1778
  node.nodeType === 1 ) &&
2016
1779
  ++diff ) {
2017
1780
 
@@ -2019,13 +1782,7 @@ Expr = Sizzle.selectors = {
2019
1782
  if ( useCache ) {
2020
1783
  outerCache = node[ expando ] ||
2021
1784
  ( node[ expando ] = {} );
2022
-
2023
- // Support: IE <9 only
2024
- // Defend against cloned attroperties (jQuery gh-1709)
2025
- uniqueCache = outerCache[ node.uniqueID ] ||
2026
- ( outerCache[ node.uniqueID ] = {} );
2027
-
2028
- uniqueCache[ type ] = [ dirruns, diff ];
1785
+ outerCache[ type ] = [ dirruns, diff ];
2029
1786
  }
2030
1787
 
2031
1788
  if ( node === elem ) {
@@ -2043,19 +1800,19 @@ Expr = Sizzle.selectors = {
2043
1800
  };
2044
1801
  },
2045
1802
 
2046
- "PSEUDO": function( pseudo, argument ) {
1803
+ PSEUDO: function( pseudo, argument ) {
2047
1804
 
2048
1805
  // pseudo-class names are case-insensitive
2049
- // http://www.w3.org/TR/selectors/#pseudo-classes
1806
+ // https://www.w3.org/TR/selectors/#pseudo-classes
2050
1807
  // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
2051
1808
  // Remember that setFilters inherits from pseudos
2052
1809
  var args,
2053
1810
  fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
2054
- Sizzle.error( "unsupported pseudo: " + pseudo );
1811
+ find.error( "unsupported pseudo: " + pseudo );
2055
1812
 
2056
1813
  // The user may use createPseudo to indicate that
2057
1814
  // arguments are needed to create the filter function
2058
- // just as Sizzle does
1815
+ // just as jQuery does
2059
1816
  if ( fn[ expando ] ) {
2060
1817
  return fn( argument );
2061
1818
  }
@@ -2069,7 +1826,7 @@ Expr = Sizzle.selectors = {
2069
1826
  matched = fn( seed, argument ),
2070
1827
  i = matched.length;
2071
1828
  while ( i-- ) {
2072
- idx = indexOf( seed, matched[ i ] );
1829
+ idx = indexOf.call( seed, matched[ i ] );
2073
1830
  seed[ idx ] = !( matches[ idx ] = matched[ i ] );
2074
1831
  }
2075
1832
  } ) :
@@ -2085,14 +1842,14 @@ Expr = Sizzle.selectors = {
2085
1842
  pseudos: {
2086
1843
 
2087
1844
  // Potentially complex pseudos
2088
- "not": markFunction( function( selector ) {
1845
+ not: markFunction( function( selector ) {
2089
1846
 
2090
1847
  // Trim the selector passed to compile
2091
1848
  // to avoid treating leading and trailing
2092
1849
  // spaces as combinators
2093
1850
  var input = [],
2094
1851
  results = [],
2095
- matcher = compile( selector.replace( rtrim, "$1" ) );
1852
+ matcher = compile( selector.replace( rtrimCSS, "$1" ) );
2096
1853
 
2097
1854
  return matcher[ expando ] ?
2098
1855
  markFunction( function( seed, matches, _context, xml ) {
@@ -2111,22 +1868,23 @@ Expr = Sizzle.selectors = {
2111
1868
  input[ 0 ] = elem;
2112
1869
  matcher( input, null, xml, results );
2113
1870
 
2114
- // Don't keep the element (issue #299)
1871
+ // Don't keep the element
1872
+ // (see https://github.com/jquery/sizzle/issues/299)
2115
1873
  input[ 0 ] = null;
2116
1874
  return !results.pop();
2117
1875
  };
2118
1876
  } ),
2119
1877
 
2120
- "has": markFunction( function( selector ) {
1878
+ has: markFunction( function( selector ) {
2121
1879
  return function( elem ) {
2122
- return Sizzle( selector, elem ).length > 0;
1880
+ return find( selector, elem ).length > 0;
2123
1881
  };
2124
1882
  } ),
2125
1883
 
2126
- "contains": markFunction( function( text ) {
1884
+ contains: markFunction( function( text ) {
2127
1885
  text = text.replace( runescape, funescape );
2128
1886
  return function( elem ) {
2129
- return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
1887
+ return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
2130
1888
  };
2131
1889
  } ),
2132
1890
 
@@ -2136,12 +1894,12 @@ Expr = Sizzle.selectors = {
2136
1894
  // or beginning with the identifier C immediately followed by "-".
2137
1895
  // The matching of C against the element's language value is performed case-insensitively.
2138
1896
  // The identifier C does not have to be a valid language name."
2139
- // http://www.w3.org/TR/selectors/#lang-pseudo
2140
- "lang": markFunction( function( lang ) {
1897
+ // https://www.w3.org/TR/selectors/#lang-pseudo
1898
+ lang: markFunction( function( lang ) {
2141
1899
 
2142
1900
  // lang value must be a valid identifier
2143
1901
  if ( !ridentifier.test( lang || "" ) ) {
2144
- Sizzle.error( "unsupported lang: " + lang );
1902
+ find.error( "unsupported lang: " + lang );
2145
1903
  }
2146
1904
  lang = lang.replace( runescape, funescape ).toLowerCase();
2147
1905
  return function( elem ) {
@@ -2160,38 +1918,39 @@ Expr = Sizzle.selectors = {
2160
1918
  } ),
2161
1919
 
2162
1920
  // Miscellaneous
2163
- "target": function( elem ) {
1921
+ target: function( elem ) {
2164
1922
  var hash = window.location && window.location.hash;
2165
1923
  return hash && hash.slice( 1 ) === elem.id;
2166
1924
  },
2167
1925
 
2168
- "root": function( elem ) {
2169
- return elem === docElem;
1926
+ root: function( elem ) {
1927
+ return elem === documentElement;
2170
1928
  },
2171
1929
 
2172
- "focus": function( elem ) {
2173
- return elem === document.activeElement &&
2174
- ( !document.hasFocus || document.hasFocus() ) &&
1930
+ focus: function( elem ) {
1931
+ return elem === safeActiveElement() &&
1932
+ document.hasFocus() &&
2175
1933
  !!( elem.type || elem.href || ~elem.tabIndex );
2176
1934
  },
2177
1935
 
2178
1936
  // Boolean properties
2179
- "enabled": createDisabledPseudo( false ),
2180
- "disabled": createDisabledPseudo( true ),
1937
+ enabled: createDisabledPseudo( false ),
1938
+ disabled: createDisabledPseudo( true ),
2181
1939
 
2182
- "checked": function( elem ) {
1940
+ checked: function( elem ) {
2183
1941
 
2184
1942
  // In CSS3, :checked should return both checked and selected elements
2185
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2186
- var nodeName = elem.nodeName.toLowerCase();
2187
- return ( nodeName === "input" && !!elem.checked ) ||
2188
- ( nodeName === "option" && !!elem.selected );
1943
+ // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1944
+ return ( nodeName( elem, "input" ) && !!elem.checked ) ||
1945
+ ( nodeName( elem, "option" ) && !!elem.selected );
2189
1946
  },
2190
1947
 
2191
- "selected": function( elem ) {
1948
+ selected: function( elem ) {
2192
1949
 
2193
- // Accessing this property makes selected-by-default
2194
- // options in Safari work properly
1950
+ // Support: IE <=11+
1951
+ // Accessing the selectedIndex property
1952
+ // forces the browser to treat the default option as
1953
+ // selected when in an optgroup.
2195
1954
  if ( elem.parentNode ) {
2196
1955
  // eslint-disable-next-line no-unused-expressions
2197
1956
  elem.parentNode.selectedIndex;
@@ -2201,9 +1960,9 @@ Expr = Sizzle.selectors = {
2201
1960
  },
2202
1961
 
2203
1962
  // Contents
2204
- "empty": function( elem ) {
1963
+ empty: function( elem ) {
2205
1964
 
2206
- // http://www.w3.org/TR/selectors/#empty-pseudo
1965
+ // https://www.w3.org/TR/selectors/#empty-pseudo
2207
1966
  // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
2208
1967
  // but not by others (comment: 8; processing instruction: 7; etc.)
2209
1968
  // nodeType < 6 works because attributes (2) do not appear as children
@@ -2215,49 +1974,49 @@ Expr = Sizzle.selectors = {
2215
1974
  return true;
2216
1975
  },
2217
1976
 
2218
- "parent": function( elem ) {
2219
- return !Expr.pseudos[ "empty" ]( elem );
1977
+ parent: function( elem ) {
1978
+ return !Expr.pseudos.empty( elem );
2220
1979
  },
2221
1980
 
2222
1981
  // Element/input types
2223
- "header": function( elem ) {
1982
+ header: function( elem ) {
2224
1983
  return rheader.test( elem.nodeName );
2225
1984
  },
2226
1985
 
2227
- "input": function( elem ) {
1986
+ input: function( elem ) {
2228
1987
  return rinputs.test( elem.nodeName );
2229
1988
  },
2230
1989
 
2231
- "button": function( elem ) {
2232
- var name = elem.nodeName.toLowerCase();
2233
- return name === "input" && elem.type === "button" || name === "button";
1990
+ button: function( elem ) {
1991
+ return nodeName( elem, "input" ) && elem.type === "button" ||
1992
+ nodeName( elem, "button" );
2234
1993
  },
2235
1994
 
2236
- "text": function( elem ) {
1995
+ text: function( elem ) {
2237
1996
  var attr;
2238
- return elem.nodeName.toLowerCase() === "input" &&
2239
- elem.type === "text" &&
1997
+ return nodeName( elem, "input" ) && elem.type === "text" &&
2240
1998
 
2241
- // Support: IE<8
2242
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
1999
+ // Support: IE <10 only
2000
+ // New HTML5 attribute values (e.g., "search") appear
2001
+ // with elem.type === "text"
2243
2002
  ( ( attr = elem.getAttribute( "type" ) ) == null ||
2244
2003
  attr.toLowerCase() === "text" );
2245
2004
  },
2246
2005
 
2247
2006
  // Position-in-collection
2248
- "first": createPositionalPseudo( function() {
2007
+ first: createPositionalPseudo( function() {
2249
2008
  return [ 0 ];
2250
2009
  } ),
2251
2010
 
2252
- "last": createPositionalPseudo( function( _matchIndexes, length ) {
2011
+ last: createPositionalPseudo( function( _matchIndexes, length ) {
2253
2012
  return [ length - 1 ];
2254
2013
  } ),
2255
2014
 
2256
- "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
2015
+ eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
2257
2016
  return [ argument < 0 ? argument + length : argument ];
2258
2017
  } ),
2259
2018
 
2260
- "even": createPositionalPseudo( function( matchIndexes, length ) {
2019
+ even: createPositionalPseudo( function( matchIndexes, length ) {
2261
2020
  var i = 0;
2262
2021
  for ( ; i < length; i += 2 ) {
2263
2022
  matchIndexes.push( i );
@@ -2265,7 +2024,7 @@ Expr = Sizzle.selectors = {
2265
2024
  return matchIndexes;
2266
2025
  } ),
2267
2026
 
2268
- "odd": createPositionalPseudo( function( matchIndexes, length ) {
2027
+ odd: createPositionalPseudo( function( matchIndexes, length ) {
2269
2028
  var i = 1;
2270
2029
  for ( ; i < length; i += 2 ) {
2271
2030
  matchIndexes.push( i );
@@ -2273,19 +2032,24 @@ Expr = Sizzle.selectors = {
2273
2032
  return matchIndexes;
2274
2033
  } ),
2275
2034
 
2276
- "lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
2277
- var i = argument < 0 ?
2278
- argument + length :
2279
- argument > length ?
2280
- length :
2281
- argument;
2035
+ lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
2036
+ var i;
2037
+
2038
+ if ( argument < 0 ) {
2039
+ i = argument + length;
2040
+ } else if ( argument > length ) {
2041
+ i = length;
2042
+ } else {
2043
+ i = argument;
2044
+ }
2045
+
2282
2046
  for ( ; --i >= 0; ) {
2283
2047
  matchIndexes.push( i );
2284
2048
  }
2285
2049
  return matchIndexes;
2286
2050
  } ),
2287
2051
 
2288
- "gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
2052
+ gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
2289
2053
  var i = argument < 0 ? argument + length : argument;
2290
2054
  for ( ; ++i < length; ) {
2291
2055
  matchIndexes.push( i );
@@ -2295,7 +2059,7 @@ Expr = Sizzle.selectors = {
2295
2059
  }
2296
2060
  };
2297
2061
 
2298
- Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
2062
+ Expr.pseudos.nth = Expr.pseudos.eq;
2299
2063
 
2300
2064
  // Add button/input type pseudos
2301
2065
  for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
@@ -2310,7 +2074,7 @@ function setFilters() {}
2310
2074
  setFilters.prototype = Expr.filters = Expr.pseudos;
2311
2075
  Expr.setFilters = new setFilters();
2312
2076
 
2313
- tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2077
+ function tokenize( selector, parseOnly ) {
2314
2078
  var matched, match, tokens, type,
2315
2079
  soFar, groups, preFilters,
2316
2080
  cached = tokenCache[ selector + " " ];
@@ -2338,13 +2102,13 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2338
2102
  matched = false;
2339
2103
 
2340
2104
  // Combinators
2341
- if ( ( match = rcombinators.exec( soFar ) ) ) {
2105
+ if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
2342
2106
  matched = match.shift();
2343
2107
  tokens.push( {
2344
2108
  value: matched,
2345
2109
 
2346
2110
  // Cast descendant combinators to space
2347
- type: match[ 0 ].replace( rtrim, " " )
2111
+ type: match[ 0 ].replace( rtrimCSS, " " )
2348
2112
  } );
2349
2113
  soFar = soFar.slice( matched.length );
2350
2114
  }
@@ -2371,14 +2135,16 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2371
2135
  // Return the length of the invalid excess
2372
2136
  // if we're just parsing
2373
2137
  // Otherwise, throw an error or return tokens
2374
- return parseOnly ?
2375
- soFar.length :
2376
- soFar ?
2377
- Sizzle.error( selector ) :
2138
+ if ( parseOnly ) {
2139
+ return soFar.length;
2140
+ }
2378
2141
 
2379
- // Cache the tokens
2380
- tokenCache( selector, groups ).slice( 0 );
2381
- };
2142
+ return soFar ?
2143
+ find.error( selector ) :
2144
+
2145
+ // Cache the tokens
2146
+ tokenCache( selector, groups ).slice( 0 );
2147
+ }
2382
2148
 
2383
2149
  function toSelector( tokens ) {
2384
2150
  var i = 0,
@@ -2411,7 +2177,7 @@ function addCombinator( matcher, combinator, base ) {
2411
2177
 
2412
2178
  // Check against all ancestor/preceding elements
2413
2179
  function( elem, context, xml ) {
2414
- var oldCache, uniqueCache, outerCache,
2180
+ var oldCache, outerCache,
2415
2181
  newCache = [ dirruns, doneName ];
2416
2182
 
2417
2183
  // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
@@ -2428,14 +2194,9 @@ function addCombinator( matcher, combinator, base ) {
2428
2194
  if ( elem.nodeType === 1 || checkNonElements ) {
2429
2195
  outerCache = elem[ expando ] || ( elem[ expando ] = {} );
2430
2196
 
2431
- // Support: IE <9 only
2432
- // Defend against cloned attroperties (jQuery gh-1709)
2433
- uniqueCache = outerCache[ elem.uniqueID ] ||
2434
- ( outerCache[ elem.uniqueID ] = {} );
2435
-
2436
- if ( skip && skip === elem.nodeName.toLowerCase() ) {
2197
+ if ( skip && nodeName( elem, skip ) ) {
2437
2198
  elem = elem[ dir ] || elem;
2438
- } else if ( ( oldCache = uniqueCache[ key ] ) &&
2199
+ } else if ( ( oldCache = outerCache[ key ] ) &&
2439
2200
  oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
2440
2201
 
2441
2202
  // Assign to newCache so results back-propagate to previous elements
@@ -2443,7 +2204,7 @@ function addCombinator( matcher, combinator, base ) {
2443
2204
  } else {
2444
2205
 
2445
2206
  // Reuse newcache so results back-propagate to previous elements
2446
- uniqueCache[ key ] = newCache;
2207
+ outerCache[ key ] = newCache;
2447
2208
 
2448
2209
  // A match means we're done; a fail means we have to keep checking
2449
2210
  if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
@@ -2475,7 +2236,7 @@ function multipleContexts( selector, contexts, results ) {
2475
2236
  var i = 0,
2476
2237
  len = contexts.length;
2477
2238
  for ( ; i < len; i++ ) {
2478
- Sizzle( selector, contexts[ i ], results );
2239
+ find( selector, contexts[ i ], results );
2479
2240
  }
2480
2241
  return results;
2481
2242
  }
@@ -2509,38 +2270,37 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
2509
2270
  postFinder = setMatcher( postFinder, postSelector );
2510
2271
  }
2511
2272
  return markFunction( function( seed, results, context, xml ) {
2512
- var temp, i, elem,
2273
+ var temp, i, elem, matcherOut,
2513
2274
  preMap = [],
2514
2275
  postMap = [],
2515
2276
  preexisting = results.length,
2516
2277
 
2517
2278
  // Get initial elements from seed or context
2518
- elems = seed || multipleContexts(
2519
- selector || "*",
2520
- context.nodeType ? [ context ] : context,
2521
- []
2522
- ),
2279
+ elems = seed ||
2280
+ multipleContexts( selector || "*",
2281
+ context.nodeType ? [ context ] : context, [] ),
2523
2282
 
2524
2283
  // Prefilter to get matcher input, preserving a map for seed-results synchronization
2525
2284
  matcherIn = preFilter && ( seed || !selector ) ?
2526
2285
  condense( elems, preMap, preFilter, context, xml ) :
2527
- elems,
2286
+ elems;
2528
2287
 
2529
- matcherOut = matcher ?
2288
+ if ( matcher ) {
2530
2289
 
2531
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
2532
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2290
+ // If we have a postFinder, or filtered seed, or non-seed postFilter
2291
+ // or preexisting results,
2292
+ matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2533
2293
 
2534
- // ...intermediate processing is necessary
2535
- [] :
2294
+ // ...intermediate processing is necessary
2295
+ [] :
2536
2296
 
2537
- // ...otherwise use results directly
2538
- results :
2539
- matcherIn;
2297
+ // ...otherwise use results directly
2298
+ results;
2540
2299
 
2541
- // Find primary matches
2542
- if ( matcher ) {
2300
+ // Find primary matches
2543
2301
  matcher( matcherIn, matcherOut, context, xml );
2302
+ } else {
2303
+ matcherOut = matcherIn;
2544
2304
  }
2545
2305
 
2546
2306
  // Apply postFilter
@@ -2578,7 +2338,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
2578
2338
  i = matcherOut.length;
2579
2339
  while ( i-- ) {
2580
2340
  if ( ( elem = matcherOut[ i ] ) &&
2581
- ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
2341
+ ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
2582
2342
 
2583
2343
  seed[ temp ] = !( results[ temp ] = elem );
2584
2344
  }
@@ -2613,15 +2373,21 @@ function matcherFromTokens( tokens ) {
2613
2373
  return elem === checkContext;
2614
2374
  }, implicitRelative, true ),
2615
2375
  matchAnyContext = addCombinator( function( elem ) {
2616
- return indexOf( checkContext, elem ) > -1;
2376
+ return indexOf.call( checkContext, elem ) > -1;
2617
2377
  }, implicitRelative, true ),
2618
2378
  matchers = [ function( elem, context, xml ) {
2619
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
2379
+
2380
+ // Support: IE 11+, Edge 17 - 18+
2381
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2382
+ // two documents; shallow comparisons work.
2383
+ // eslint-disable-next-line eqeqeq
2384
+ var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
2620
2385
  ( checkContext = context ).nodeType ?
2621
2386
  matchContext( elem, context, xml ) :
2622
2387
  matchAnyContext( elem, context, xml ) );
2623
2388
 
2624
- // Avoid hanging onto element (issue #299)
2389
+ // Avoid hanging onto element
2390
+ // (see https://github.com/jquery/sizzle/issues/299)
2625
2391
  checkContext = null;
2626
2392
  return ret;
2627
2393
  } ];
@@ -2646,11 +2412,10 @@ function matcherFromTokens( tokens ) {
2646
2412
  i > 1 && elementMatcher( matchers ),
2647
2413
  i > 1 && toSelector(
2648
2414
 
2649
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
2650
- tokens
2651
- .slice( 0, i - 1 )
2652
- .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
2653
- ).replace( rtrim, "$1" ),
2415
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
2416
+ tokens.slice( 0, i - 1 )
2417
+ .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
2418
+ ).replace( rtrimCSS, "$1" ),
2654
2419
  matcher,
2655
2420
  i < j && matcherFromTokens( tokens.slice( i, j ) ),
2656
2421
  j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
@@ -2676,7 +2441,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2676
2441
  contextBackup = outermostContext,
2677
2442
 
2678
2443
  // We must always have either seed elements or outermost context
2679
- elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
2444
+ elems = seed || byElement && Expr.find.TAG( "*", outermost ),
2680
2445
 
2681
2446
  // Use integer dirruns iff this is the outermost matcher
2682
2447
  dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
@@ -2692,8 +2457,9 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2692
2457
  }
2693
2458
 
2694
2459
  // Add elements passing elementMatchers directly to results
2695
- // Support: IE<9, Safari
2696
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
2460
+ // Support: iOS <=7 - 9 only
2461
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
2462
+ // elements by id. (see trac-14142)
2697
2463
  for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
2698
2464
  if ( byElement && elem ) {
2699
2465
  j = 0;
@@ -2708,7 +2474,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2708
2474
  }
2709
2475
  while ( ( matcher = elementMatchers[ j++ ] ) ) {
2710
2476
  if ( matcher( elem, context || document, xml ) ) {
2711
- results.push( elem );
2477
+ push.call( results, elem );
2712
2478
  break;
2713
2479
  }
2714
2480
  }
@@ -2771,7 +2537,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2771
2537
  if ( outermost && !seed && setMatched.length > 0 &&
2772
2538
  ( matchedCount + setMatchers.length ) > 1 ) {
2773
2539
 
2774
- Sizzle.uniqueSort( results );
2540
+ jQuery.uniqueSort( results );
2775
2541
  }
2776
2542
  }
2777
2543
 
@@ -2789,7 +2555,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2789
2555
  superMatcher;
2790
2556
  }
2791
2557
 
2792
- compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
2558
+ function compile( selector, match /* Internal Use Only */ ) {
2793
2559
  var i,
2794
2560
  setMatchers = [],
2795
2561
  elementMatchers = [],
@@ -2812,27 +2578,25 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
2812
2578
  }
2813
2579
 
2814
2580
  // Cache the compiled function
2815
- cached = compilerCache(
2816
- selector,
2817
- matcherFromGroupMatchers( elementMatchers, setMatchers )
2818
- );
2581
+ cached = compilerCache( selector,
2582
+ matcherFromGroupMatchers( elementMatchers, setMatchers ) );
2819
2583
 
2820
2584
  // Save selector and tokenization
2821
2585
  cached.selector = selector;
2822
2586
  }
2823
2587
  return cached;
2824
- };
2588
+ }
2825
2589
 
2826
2590
  /**
2827
- * A low-level selection function that works with Sizzle's compiled
2591
+ * A low-level selection function that works with jQuery's compiled
2828
2592
  * selector functions
2829
2593
  * @param {String|Function} selector A selector or a pre-compiled
2830
- * selector function built with Sizzle.compile
2594
+ * selector function built with jQuery selector compile
2831
2595
  * @param {Element} context
2832
2596
  * @param {Array} [results]
2833
2597
  * @param {Array} [seed] A set of elements to match against
2834
2598
  */
2835
- select = Sizzle.select = function( selector, context, results, seed ) {
2599
+ function select( selector, context, results, seed ) {
2836
2600
  var i, tokens, token, type, find,
2837
2601
  compiled = typeof selector === "function" && selector,
2838
2602
  match = !seed && tokenize( ( selector = compiled.selector || selector ) );
@@ -2846,10 +2610,12 @@ select = Sizzle.select = function( selector, context, results, seed ) {
2846
2610
  // Reduce context if the leading compound selector is an ID
2847
2611
  tokens = match[ 0 ] = match[ 0 ].slice( 0 );
2848
2612
  if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
2849
- context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
2613
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
2850
2614
 
2851
- context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
2852
- .replace( runescape, funescape ), context ) || [] )[ 0 ];
2615
+ context = ( Expr.find.ID(
2616
+ token.matches[ 0 ].replace( runescape, funescape ),
2617
+ context
2618
+ ) || [] )[ 0 ];
2853
2619
  if ( !context ) {
2854
2620
  return results;
2855
2621
 
@@ -2862,7 +2628,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
2862
2628
  }
2863
2629
 
2864
2630
  // Fetch a seed set for right-to-left matching
2865
- i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
2631
+ i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
2866
2632
  while ( i-- ) {
2867
2633
  token = tokens[ i ];
2868
2634
 
@@ -2875,8 +2641,8 @@ select = Sizzle.select = function( selector, context, results, seed ) {
2875
2641
  // Search, expanding context for leading sibling combinators
2876
2642
  if ( ( seed = find(
2877
2643
  token.matches[ 0 ].replace( runescape, funescape ),
2878
- rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
2879
- context
2644
+ rsibling.test( tokens[ 0 ].type ) &&
2645
+ testContext( context.parentNode ) || context
2880
2646
  ) ) ) {
2881
2647
 
2882
2648
  // If seed is empty or no tokens remain, we can return early
@@ -2903,21 +2669,18 @@ select = Sizzle.select = function( selector, context, results, seed ) {
2903
2669
  !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
2904
2670
  );
2905
2671
  return results;
2906
- };
2672
+ }
2907
2673
 
2908
2674
  // One-time assignments
2909
2675
 
2676
+ // Support: Android <=4.0 - 4.1+
2910
2677
  // Sort stability
2911
2678
  support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
2912
2679
 
2913
- // Support: Chrome 14-35+
2914
- // Always assume duplicates if they aren't passed to the comparison function
2915
- support.detectDuplicates = !!hasDuplicate;
2916
-
2917
2680
  // Initialize against the default document
2918
2681
  setDocument();
2919
2682
 
2920
- // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
2683
+ // Support: Android <=4.0 - 4.1+
2921
2684
  // Detached nodes confoundingly follow *each other*
2922
2685
  support.sortDetached = assert( function( el ) {
2923
2686
 
@@ -2925,68 +2688,29 @@ support.sortDetached = assert( function( el ) {
2925
2688
  return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
2926
2689
  } );
2927
2690
 
2928
- // Support: IE<8
2929
- // Prevent attribute/property "interpolation"
2930
- // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
2931
- if ( !assert( function( el ) {
2932
- el.innerHTML = "<a href='#'></a>";
2933
- return el.firstChild.getAttribute( "href" ) === "#";
2934
- } ) ) {
2935
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
2936
- if ( !isXML ) {
2937
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
2938
- }
2939
- } );
2940
- }
2941
-
2942
- // Support: IE<9
2943
- // Use defaultValue in place of getAttribute("value")
2944
- if ( !support.attributes || !assert( function( el ) {
2945
- el.innerHTML = "<input/>";
2946
- el.firstChild.setAttribute( "value", "" );
2947
- return el.firstChild.getAttribute( "value" ) === "";
2948
- } ) ) {
2949
- addHandle( "value", function( elem, _name, isXML ) {
2950
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
2951
- return elem.defaultValue;
2952
- }
2953
- } );
2954
- }
2955
-
2956
- // Support: IE<9
2957
- // Use getAttributeNode to fetch booleans when getAttribute lies
2958
- if ( !assert( function( el ) {
2959
- return el.getAttribute( "disabled" ) == null;
2960
- } ) ) {
2961
- addHandle( booleans, function( elem, name, isXML ) {
2962
- var val;
2963
- if ( !isXML ) {
2964
- return elem[ name ] === true ? name.toLowerCase() :
2965
- ( val = elem.getAttributeNode( name ) ) && val.specified ?
2966
- val.value :
2967
- null;
2968
- }
2969
- } );
2970
- }
2971
-
2972
- return Sizzle;
2973
-
2974
- } )( window );
2975
-
2976
-
2977
-
2978
- jQuery.find = Sizzle;
2979
- jQuery.expr = Sizzle.selectors;
2691
+ jQuery.find = find;
2980
2692
 
2981
2693
  // Deprecated
2982
2694
  jQuery.expr[ ":" ] = jQuery.expr.pseudos;
2983
- jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
2984
- jQuery.text = Sizzle.getText;
2985
- jQuery.isXMLDoc = Sizzle.isXML;
2986
- jQuery.contains = Sizzle.contains;
2987
- jQuery.escapeSelector = Sizzle.escape;
2695
+ jQuery.unique = jQuery.uniqueSort;
2696
+
2697
+ // These have always been private, but they used to be documented
2698
+ // as part of Sizzle so let's maintain them in the 3.x line
2699
+ // for backwards compatibility purposes.
2700
+ find.compile = compile;
2701
+ find.select = select;
2702
+ find.setDocument = setDocument;
2988
2703
 
2704
+ find.escape = jQuery.escapeSelector;
2705
+ find.getText = jQuery.text;
2706
+ find.isXML = jQuery.isXMLDoc;
2707
+ find.selectors = jQuery.expr;
2708
+ find.support = jQuery.support;
2709
+ find.uniqueSort = jQuery.uniqueSort;
2989
2710
 
2711
+ /* eslint-enable */
2712
+
2713
+ } )();
2990
2714
 
2991
2715
 
2992
2716
  var dir = function( elem, dir, until ) {
@@ -3020,13 +2744,6 @@ var siblings = function( n, elem ) {
3020
2744
 
3021
2745
  var rneedsContext = jQuery.expr.match.needsContext;
3022
2746
 
3023
-
3024
-
3025
- function nodeName( elem, name ) {
3026
-
3027
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
3028
-
3029
- };
3030
2747
  var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
3031
2748
 
3032
2749
 
@@ -3125,8 +2842,8 @@ jQuery.fn.extend( {
3125
2842
  var rootjQuery,
3126
2843
 
3127
2844
  // A simple way to check for HTML strings
3128
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
3129
- // Strict HTML recognition (#11290: must start with <)
2845
+ // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
2846
+ // Strict HTML recognition (trac-11290: must start with <)
3130
2847
  // Shortcut simple #id case for speed
3131
2848
  rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
3132
2849
 
@@ -3277,7 +2994,7 @@ jQuery.fn.extend( {
3277
2994
  if ( cur.nodeType < 11 && ( targets ?
3278
2995
  targets.index( cur ) > -1 :
3279
2996
 
3280
- // Don't pass non-elements to Sizzle
2997
+ // Don't pass non-elements to jQuery#find
3281
2998
  cur.nodeType === 1 &&
3282
2999
  jQuery.find.matchesSelector( cur, selectors ) ) ) {
3283
3000
 
@@ -3832,7 +3549,7 @@ jQuery.extend( {
3832
3549
 
3833
3550
  if ( jQuery.Deferred.exceptionHook ) {
3834
3551
  jQuery.Deferred.exceptionHook( e,
3835
- process.stackTrace );
3552
+ process.error );
3836
3553
  }
3837
3554
 
3838
3555
  // Support: Promises/A+ section 2.3.3.3.4.1
@@ -3860,10 +3577,17 @@ jQuery.extend( {
3860
3577
  process();
3861
3578
  } else {
3862
3579
 
3863
- // Call an optional hook to record the stack, in case of exception
3580
+ // Call an optional hook to record the error, in case of exception
3864
3581
  // since it's otherwise lost when execution goes async
3865
- if ( jQuery.Deferred.getStackHook ) {
3866
- process.stackTrace = jQuery.Deferred.getStackHook();
3582
+ if ( jQuery.Deferred.getErrorHook ) {
3583
+ process.error = jQuery.Deferred.getErrorHook();
3584
+
3585
+ // The deprecated alias of the above. While the name suggests
3586
+ // returning the stack, not an error instance, jQuery just passes
3587
+ // it directly to `console.warn` so both will work; an instance
3588
+ // just better cooperates with source maps.
3589
+ } else if ( jQuery.Deferred.getStackHook ) {
3590
+ process.error = jQuery.Deferred.getStackHook();
3867
3591
  }
3868
3592
  window.setTimeout( process );
3869
3593
  }
@@ -3997,8 +3721,8 @@ jQuery.extend( {
3997
3721
  resolveContexts = Array( i ),
3998
3722
  resolveValues = slice.call( arguments ),
3999
3723
 
4000
- // the master Deferred
4001
- master = jQuery.Deferred(),
3724
+ // the primary Deferred
3725
+ primary = jQuery.Deferred(),
4002
3726
 
4003
3727
  // subordinate callback factory
4004
3728
  updateFunc = function( i ) {
@@ -4006,30 +3730,30 @@ jQuery.extend( {
4006
3730
  resolveContexts[ i ] = this;
4007
3731
  resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
4008
3732
  if ( !( --remaining ) ) {
4009
- master.resolveWith( resolveContexts, resolveValues );
3733
+ primary.resolveWith( resolveContexts, resolveValues );
4010
3734
  }
4011
3735
  };
4012
3736
  };
4013
3737
 
4014
3738
  // Single- and empty arguments are adopted like Promise.resolve
4015
3739
  if ( remaining <= 1 ) {
4016
- adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
3740
+ adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
4017
3741
  !remaining );
4018
3742
 
4019
3743
  // Use .then() to unwrap secondary thenables (cf. gh-3000)
4020
- if ( master.state() === "pending" ||
3744
+ if ( primary.state() === "pending" ||
4021
3745
  isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
4022
3746
 
4023
- return master.then();
3747
+ return primary.then();
4024
3748
  }
4025
3749
  }
4026
3750
 
4027
3751
  // Multiple arguments are aggregated like Promise.all array elements
4028
3752
  while ( i-- ) {
4029
- adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
3753
+ adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
4030
3754
  }
4031
3755
 
4032
- return master.promise();
3756
+ return primary.promise();
4033
3757
  }
4034
3758
  } );
4035
3759
 
@@ -4038,12 +3762,16 @@ jQuery.extend( {
4038
3762
  // warn about them ASAP rather than swallowing them by default.
4039
3763
  var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
4040
3764
 
4041
- jQuery.Deferred.exceptionHook = function( error, stack ) {
3765
+ // If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
3766
+ // captured before the async barrier to get the original error cause
3767
+ // which may otherwise be hidden.
3768
+ jQuery.Deferred.exceptionHook = function( error, asyncError ) {
4042
3769
 
4043
3770
  // Support: IE 8 - 9 only
4044
3771
  // Console exists when dev tools are open, which can happen at any time
4045
3772
  if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
4046
- window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
3773
+ window.console.warn( "jQuery.Deferred exception: " + error.message,
3774
+ error.stack, asyncError );
4047
3775
  }
4048
3776
  };
4049
3777
 
@@ -4083,7 +3811,7 @@ jQuery.extend( {
4083
3811
  isReady: false,
4084
3812
 
4085
3813
  // A counter to track how many items to wait for before
4086
- // the ready event fires. See #6781
3814
+ // the ready event fires. See trac-6781
4087
3815
  readyWait: 1,
4088
3816
 
4089
3817
  // Handle when the DOM is ready
@@ -4180,8 +3908,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
4180
3908
  for ( ; i < len; i++ ) {
4181
3909
  fn(
4182
3910
  elems[ i ], key, raw ?
4183
- value :
4184
- value.call( elems[ i ], i, fn( elems[ i ], key ) )
3911
+ value :
3912
+ value.call( elems[ i ], i, fn( elems[ i ], key ) )
4185
3913
  );
4186
3914
  }
4187
3915
  }
@@ -4211,7 +3939,7 @@ function fcamelCase( _all, letter ) {
4211
3939
 
4212
3940
  // Convert dashed to camelCase; used by the css and data modules
4213
3941
  // Support: IE <=9 - 11, Edge 12 - 15
4214
- // Microsoft forgot to hump their vendor prefix (#9572)
3942
+ // Microsoft forgot to hump their vendor prefix (trac-9572)
4215
3943
  function camelCase( string ) {
4216
3944
  return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
4217
3945
  }
@@ -4247,7 +3975,7 @@ Data.prototype = {
4247
3975
  value = {};
4248
3976
 
4249
3977
  // We can accept data for non-element nodes in modern browsers,
4250
- // but we should not, see #8335.
3978
+ // but we should not, see trac-8335.
4251
3979
  // Always return an empty object.
4252
3980
  if ( acceptData( owner ) ) {
4253
3981
 
@@ -4486,7 +4214,7 @@ jQuery.fn.extend( {
4486
4214
  while ( i-- ) {
4487
4215
 
4488
4216
  // Support: IE 11 only
4489
- // The attrs elements can be null (#14894)
4217
+ // The attrs elements can be null (trac-14894)
4490
4218
  if ( attrs[ i ] ) {
4491
4219
  name = attrs[ i ].name;
4492
4220
  if ( name.indexOf( "data-" ) === 0 ) {
@@ -4909,9 +4637,9 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
4909
4637
  input = document.createElement( "input" );
4910
4638
 
4911
4639
  // Support: Android 4.0 - 4.3 only
4912
- // Check state lost if the name is set (#11217)
4640
+ // Check state lost if the name is set (trac-11217)
4913
4641
  // Support: Windows Web Apps (WWA)
4914
- // `name` and `type` must use .setAttribute for WWA (#14901)
4642
+ // `name` and `type` must use .setAttribute for WWA (trac-14901)
4915
4643
  input.setAttribute( "type", "radio" );
4916
4644
  input.setAttribute( "checked", "checked" );
4917
4645
  input.setAttribute( "name", "t" );
@@ -4935,7 +4663,7 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
4935
4663
  } )();
4936
4664
 
4937
4665
 
4938
- // We have to close these tags to support XHTML (#13200)
4666
+ // We have to close these tags to support XHTML (trac-13200)
4939
4667
  var wrapMap = {
4940
4668
 
4941
4669
  // XHTML parsers do not magically insert elements in the
@@ -4961,7 +4689,7 @@ if ( !support.option ) {
4961
4689
  function getAll( context, tag ) {
4962
4690
 
4963
4691
  // Support: IE <=9 - 11 only
4964
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
4692
+ // Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
4965
4693
  var ret;
4966
4694
 
4967
4695
  if ( typeof context.getElementsByTagName !== "undefined" ) {
@@ -5044,7 +4772,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
5044
4772
  // Remember the top-level container
5045
4773
  tmp = fragment.firstChild;
5046
4774
 
5047
- // Ensure the created nodes are orphaned (#12392)
4775
+ // Ensure the created nodes are orphaned (trac-12392)
5048
4776
  tmp.textContent = "";
5049
4777
  }
5050
4778
  }
@@ -5089,10 +4817,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
5089
4817
  }
5090
4818
 
5091
4819
 
5092
- var
5093
- rkeyEvent = /^key/,
5094
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
5095
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
4820
+ var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
5096
4821
 
5097
4822
  function returnTrue() {
5098
4823
  return true;
@@ -5102,25 +4827,6 @@ function returnFalse() {
5102
4827
  return false;
5103
4828
  }
5104
4829
 
5105
- // Support: IE <=9 - 11+
5106
- // focus() and blur() are asynchronous, except when they are no-op.
5107
- // So expect focus to be synchronous when the element is already active,
5108
- // and blur to be synchronous when the element is not already active.
5109
- // (focus and blur are always synchronous in other supported browsers,
5110
- // this just defines when we can count on it).
5111
- function expectSync( elem, type ) {
5112
- return ( elem === safeActiveElement() ) === ( type === "focus" );
5113
- }
5114
-
5115
- // Support: IE <=9 only
5116
- // Accessing document.activeElement can throw unexpectedly
5117
- // https://bugs.jquery.com/ticket/13393
5118
- function safeActiveElement() {
5119
- try {
5120
- return document.activeElement;
5121
- } catch ( err ) { }
5122
- }
5123
-
5124
4830
  function on( elem, types, selector, data, fn, one ) {
5125
4831
  var origFn, type;
5126
4832
 
@@ -5387,8 +5093,8 @@ jQuery.event = {
5387
5093
  event = jQuery.event.fix( nativeEvent ),
5388
5094
 
5389
5095
  handlers = (
5390
- dataPriv.get( this, "events" ) || Object.create( null )
5391
- )[ event.type ] || [],
5096
+ dataPriv.get( this, "events" ) || Object.create( null )
5097
+ )[ event.type ] || [],
5392
5098
  special = jQuery.event.special[ event.type ] || {};
5393
5099
 
5394
5100
  // Use the fix-ed jQuery.Event rather than the (read-only) native event
@@ -5468,15 +5174,15 @@ jQuery.event = {
5468
5174
 
5469
5175
  for ( ; cur !== this; cur = cur.parentNode || this ) {
5470
5176
 
5471
- // Don't check non-elements (#13208)
5472
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5177
+ // Don't check non-elements (trac-13208)
5178
+ // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
5473
5179
  if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
5474
5180
  matchedHandlers = [];
5475
5181
  matchedSelectors = {};
5476
5182
  for ( i = 0; i < delegateCount; i++ ) {
5477
5183
  handleObj = handlers[ i ];
5478
5184
 
5479
- // Don't conflict with Object.prototype properties (#13203)
5185
+ // Don't conflict with Object.prototype properties (trac-13203)
5480
5186
  sel = handleObj.selector + " ";
5481
5187
 
5482
5188
  if ( matchedSelectors[ sel ] === undefined ) {
@@ -5512,12 +5218,12 @@ jQuery.event = {
5512
5218
  get: isFunction( hook ) ?
5513
5219
  function() {
5514
5220
  if ( this.originalEvent ) {
5515
- return hook( this.originalEvent );
5221
+ return hook( this.originalEvent );
5516
5222
  }
5517
5223
  } :
5518
5224
  function() {
5519
5225
  if ( this.originalEvent ) {
5520
- return this.originalEvent[ name ];
5226
+ return this.originalEvent[ name ];
5521
5227
  }
5522
5228
  },
5523
5229
 
@@ -5558,7 +5264,7 @@ jQuery.event = {
5558
5264
  el.click && nodeName( el, "input" ) ) {
5559
5265
 
5560
5266
  // dataPriv.set( el, "click", ... )
5561
- leverageNative( el, "click", returnTrue );
5267
+ leverageNative( el, "click", true );
5562
5268
  }
5563
5269
 
5564
5270
  // Return false to allow normal processing in the caller
@@ -5609,10 +5315,10 @@ jQuery.event = {
5609
5315
  // synthetic events by interrupting progress until reinvoked in response to
5610
5316
  // *native* events that it fires directly, ensuring that state changes have
5611
5317
  // already occurred before other listeners are invoked.
5612
- function leverageNative( el, type, expectSync ) {
5318
+ function leverageNative( el, type, isSetup ) {
5613
5319
 
5614
- // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
5615
- if ( !expectSync ) {
5320
+ // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
5321
+ if ( !isSetup ) {
5616
5322
  if ( dataPriv.get( el, type ) === undefined ) {
5617
5323
  jQuery.event.add( el, type, returnTrue );
5618
5324
  }
@@ -5624,15 +5330,13 @@ function leverageNative( el, type, expectSync ) {
5624
5330
  jQuery.event.add( el, type, {
5625
5331
  namespace: false,
5626
5332
  handler: function( event ) {
5627
- var notAsync, result,
5333
+ var result,
5628
5334
  saved = dataPriv.get( this, type );
5629
5335
 
5630
5336
  if ( ( event.isTrigger & 1 ) && this[ type ] ) {
5631
5337
 
5632
5338
  // Interrupt processing of the outer synthetic .trigger()ed event
5633
- // Saved data should be false in such cases, but might be a leftover capture object
5634
- // from an async native handler (gh-4350)
5635
- if ( !saved.length ) {
5339
+ if ( !saved ) {
5636
5340
 
5637
5341
  // Store arguments for use when handling the inner native event
5638
5342
  // There will always be at least one argument (an event object), so this array
@@ -5641,27 +5345,22 @@ function leverageNative( el, type, expectSync ) {
5641
5345
  dataPriv.set( this, type, saved );
5642
5346
 
5643
5347
  // Trigger the native event and capture its result
5644
- // Support: IE <=9 - 11+
5645
- // focus() and blur() are asynchronous
5646
- notAsync = expectSync( this, type );
5647
5348
  this[ type ]();
5648
5349
  result = dataPriv.get( this, type );
5649
- if ( saved !== result || notAsync ) {
5650
- dataPriv.set( this, type, false );
5651
- } else {
5652
- result = {};
5653
- }
5350
+ dataPriv.set( this, type, false );
5351
+
5654
5352
  if ( saved !== result ) {
5655
5353
 
5656
5354
  // Cancel the outer synthetic event
5657
5355
  event.stopImmediatePropagation();
5658
5356
  event.preventDefault();
5659
- return result.value;
5357
+
5358
+ return result;
5660
5359
  }
5661
5360
 
5662
5361
  // If this is an inner synthetic event for an event with a bubbling surrogate
5663
- // (focus or blur), assume that the surrogate already propagated from triggering the
5664
- // native event and prevent that from happening again here.
5362
+ // (focus or blur), assume that the surrogate already propagated from triggering
5363
+ // the native event and prevent that from happening again here.
5665
5364
  // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
5666
5365
  // bubbling surrogate propagates *after* the non-bubbling base), but that seems
5667
5366
  // less bad than duplication.
@@ -5671,22 +5370,25 @@ function leverageNative( el, type, expectSync ) {
5671
5370
 
5672
5371
  // If this is a native event triggered above, everything is now in order
5673
5372
  // Fire an inner synthetic event with the original arguments
5674
- } else if ( saved.length ) {
5373
+ } else if ( saved ) {
5675
5374
 
5676
5375
  // ...and capture the result
5677
- dataPriv.set( this, type, {
5678
- value: jQuery.event.trigger(
5679
-
5680
- // Support: IE <=9 - 11+
5681
- // Extend with the prototype to reset the above stopImmediatePropagation()
5682
- jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
5683
- saved.slice( 1 ),
5684
- this
5685
- )
5686
- } );
5687
-
5688
- // Abort handling of the native event
5689
- event.stopImmediatePropagation();
5376
+ dataPriv.set( this, type, jQuery.event.trigger(
5377
+ saved[ 0 ],
5378
+ saved.slice( 1 ),
5379
+ this
5380
+ ) );
5381
+
5382
+ // Abort handling of the native event by all jQuery handlers while allowing
5383
+ // native handlers on the same element to run. On target, this is achieved
5384
+ // by stopping immediate propagation just on the jQuery event. However,
5385
+ // the native event is re-wrapped by a jQuery one on each level of the
5386
+ // propagation so the only way to stop it for jQuery is to stop it for
5387
+ // everyone via native `stopPropagation()`. This is not a problem for
5388
+ // focus/blur which don't bubble, but it does also stop click on checkboxes
5389
+ // and radios. We accept this limitation.
5390
+ event.stopPropagation();
5391
+ event.isImmediatePropagationStopped = returnTrue;
5690
5392
  }
5691
5393
  }
5692
5394
  } );
@@ -5724,7 +5426,7 @@ jQuery.Event = function( src, props ) {
5724
5426
 
5725
5427
  // Create target properties
5726
5428
  // Support: Safari <=6 - 7 only
5727
- // Target should not be a text node (#504, #13143)
5429
+ // Target should not be a text node (trac-504, trac-13143)
5728
5430
  this.target = ( src.target && src.target.nodeType === 3 ) ?
5729
5431
  src.target.parentNode :
5730
5432
  src.target;
@@ -5821,49 +5523,77 @@ jQuery.each( {
5821
5523
  targetTouches: true,
5822
5524
  toElement: true,
5823
5525
  touches: true,
5526
+ which: true
5527
+ }, jQuery.event.addProp );
5824
5528
 
5825
- which: function( event ) {
5826
- var button = event.button;
5827
-
5828
- // Add which for key events
5829
- if ( event.which == null && rkeyEvent.test( event.type ) ) {
5830
- return event.charCode != null ? event.charCode : event.keyCode;
5831
- }
5832
-
5833
- // Add which for click: 1 === left; 2 === middle; 3 === right
5834
- if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
5835
- if ( button & 1 ) {
5836
- return 1;
5837
- }
5529
+ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
5838
5530
 
5839
- if ( button & 2 ) {
5840
- return 3;
5841
- }
5531
+ function focusMappedHandler( nativeEvent ) {
5532
+ if ( document.documentMode ) {
5842
5533
 
5843
- if ( button & 4 ) {
5844
- return 2;
5534
+ // Support: IE 11+
5535
+ // Attach a single focusin/focusout handler on the document while someone wants
5536
+ // focus/blur. This is because the former are synchronous in IE while the latter
5537
+ // are async. In other browsers, all those handlers are invoked synchronously.
5538
+
5539
+ // `handle` from private data would already wrap the event, but we need
5540
+ // to change the `type` here.
5541
+ var handle = dataPriv.get( this, "handle" ),
5542
+ event = jQuery.event.fix( nativeEvent );
5543
+ event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
5544
+ event.isSimulated = true;
5545
+
5546
+ // First, handle focusin/focusout
5547
+ handle( nativeEvent );
5548
+
5549
+ // ...then, handle focus/blur
5550
+ //
5551
+ // focus/blur don't bubble while focusin/focusout do; simulate the former by only
5552
+ // invoking the handler at the lower level.
5553
+ if ( event.target === event.currentTarget ) {
5554
+
5555
+ // The setup part calls `leverageNative`, which, in turn, calls
5556
+ // `jQuery.event.add`, so event handle will already have been set
5557
+ // by this point.
5558
+ handle( event );
5845
5559
  }
5560
+ } else {
5846
5561
 
5847
- return 0;
5562
+ // For non-IE browsers, attach a single capturing handler on the document
5563
+ // while someone wants focusin/focusout.
5564
+ jQuery.event.simulate( delegateType, nativeEvent.target,
5565
+ jQuery.event.fix( nativeEvent ) );
5848
5566
  }
5849
-
5850
- return event.which;
5851
5567
  }
5852
- }, jQuery.event.addProp );
5853
5568
 
5854
- jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
5855
5569
  jQuery.event.special[ type ] = {
5856
5570
 
5857
5571
  // Utilize native event if possible so blur/focus sequence is correct
5858
5572
  setup: function() {
5859
5573
 
5574
+ var attaches;
5575
+
5860
5576
  // Claim the first handler
5861
5577
  // dataPriv.set( this, "focus", ... )
5862
5578
  // dataPriv.set( this, "blur", ... )
5863
- leverageNative( this, type, expectSync );
5579
+ leverageNative( this, type, true );
5864
5580
 
5865
- // Return false to allow normal processing in the caller
5866
- return false;
5581
+ if ( document.documentMode ) {
5582
+
5583
+ // Support: IE 9 - 11+
5584
+ // We use the same native handler for focusin & focus (and focusout & blur)
5585
+ // so we need to coordinate setup & teardown parts between those events.
5586
+ // Use `delegateType` as the key as `type` is already used by `leverageNative`.
5587
+ attaches = dataPriv.get( this, delegateType );
5588
+ if ( !attaches ) {
5589
+ this.addEventListener( delegateType, focusMappedHandler );
5590
+ }
5591
+ dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
5592
+ } else {
5593
+
5594
+ // Return false to allow normal processing in the caller
5595
+ return false;
5596
+ }
5867
5597
  },
5868
5598
  trigger: function() {
5869
5599
 
@@ -5874,8 +5604,84 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
5874
5604
  return true;
5875
5605
  },
5876
5606
 
5607
+ teardown: function() {
5608
+ var attaches;
5609
+
5610
+ if ( document.documentMode ) {
5611
+ attaches = dataPriv.get( this, delegateType ) - 1;
5612
+ if ( !attaches ) {
5613
+ this.removeEventListener( delegateType, focusMappedHandler );
5614
+ dataPriv.remove( this, delegateType );
5615
+ } else {
5616
+ dataPriv.set( this, delegateType, attaches );
5617
+ }
5618
+ } else {
5619
+
5620
+ // Return false to indicate standard teardown should be applied
5621
+ return false;
5622
+ }
5623
+ },
5624
+
5625
+ // Suppress native focus or blur if we're currently inside
5626
+ // a leveraged native-event stack
5627
+ _default: function( event ) {
5628
+ return dataPriv.get( event.target, type );
5629
+ },
5630
+
5877
5631
  delegateType: delegateType
5878
5632
  };
5633
+
5634
+ // Support: Firefox <=44
5635
+ // Firefox doesn't have focus(in | out) events
5636
+ // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
5637
+ //
5638
+ // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
5639
+ // focus(in | out) events fire after focus & blur events,
5640
+ // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
5641
+ // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
5642
+ //
5643
+ // Support: IE 9 - 11+
5644
+ // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
5645
+ // attach a single handler for both events in IE.
5646
+ jQuery.event.special[ delegateType ] = {
5647
+ setup: function() {
5648
+
5649
+ // Handle: regular nodes (via `this.ownerDocument`), window
5650
+ // (via `this.document`) & document (via `this`).
5651
+ var doc = this.ownerDocument || this.document || this,
5652
+ dataHolder = document.documentMode ? this : doc,
5653
+ attaches = dataPriv.get( dataHolder, delegateType );
5654
+
5655
+ // Support: IE 9 - 11+
5656
+ // We use the same native handler for focusin & focus (and focusout & blur)
5657
+ // so we need to coordinate setup & teardown parts between those events.
5658
+ // Use `delegateType` as the key as `type` is already used by `leverageNative`.
5659
+ if ( !attaches ) {
5660
+ if ( document.documentMode ) {
5661
+ this.addEventListener( delegateType, focusMappedHandler );
5662
+ } else {
5663
+ doc.addEventListener( type, focusMappedHandler, true );
5664
+ }
5665
+ }
5666
+ dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
5667
+ },
5668
+ teardown: function() {
5669
+ var doc = this.ownerDocument || this.document || this,
5670
+ dataHolder = document.documentMode ? this : doc,
5671
+ attaches = dataPriv.get( dataHolder, delegateType ) - 1;
5672
+
5673
+ if ( !attaches ) {
5674
+ if ( document.documentMode ) {
5675
+ this.removeEventListener( delegateType, focusMappedHandler );
5676
+ } else {
5677
+ doc.removeEventListener( type, focusMappedHandler, true );
5678
+ }
5679
+ dataPriv.remove( dataHolder, delegateType );
5680
+ } else {
5681
+ dataPriv.set( dataHolder, delegateType, attaches );
5682
+ }
5683
+ }
5684
+ };
5879
5685
  } );
5880
5686
 
5881
5687
  // Create mouseenter/leave events using mouseover/out and event-time checks
@@ -5970,7 +5776,8 @@ var
5970
5776
 
5971
5777
  // checked="checked" or checked
5972
5778
  rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5973
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
5779
+
5780
+ rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
5974
5781
 
5975
5782
  // Prefer a tbody over its parent table for containing new rows
5976
5783
  function manipulationTarget( elem, content ) {
@@ -6084,7 +5891,7 @@ function domManip( collection, args, callback, ignored ) {
6084
5891
 
6085
5892
  // Use the original fragment for the last item
6086
5893
  // instead of the first because it can end up
6087
- // being emptied incorrectly in certain situations (#8070).
5894
+ // being emptied incorrectly in certain situations (trac-8070).
6088
5895
  for ( ; i < l; i++ ) {
6089
5896
  node = fragment;
6090
5897
 
@@ -6125,6 +5932,12 @@ function domManip( collection, args, callback, ignored ) {
6125
5932
  }, doc );
6126
5933
  }
6127
5934
  } else {
5935
+
5936
+ // Unwrap a CDATA section containing script contents. This shouldn't be
5937
+ // needed as in XML documents they're already not visible when
5938
+ // inspecting element contents and in HTML documents they have no
5939
+ // meaning but we're preserving that logic for backwards compatibility.
5940
+ // This will be removed completely in 4.0. See gh-4904.
6128
5941
  DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
6129
5942
  }
6130
5943
  }
@@ -6171,7 +5984,8 @@ jQuery.extend( {
6171
5984
  if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
6172
5985
  !jQuery.isXMLDoc( elem ) ) {
6173
5986
 
6174
- // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
5987
+ // We eschew jQuery#find here for performance reasons:
5988
+ // https://jsperf.com/getall-vs-sizzle/2
6175
5989
  destElements = getAll( clone );
6176
5990
  srcElements = getAll( elem );
6177
5991
 
@@ -6407,9 +6221,12 @@ jQuery.each( {
6407
6221
  } );
6408
6222
  var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
6409
6223
 
6224
+ var rcustomProp = /^--/;
6225
+
6226
+
6410
6227
  var getStyles = function( elem ) {
6411
6228
 
6412
- // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
6229
+ // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
6413
6230
  // IE throws on elements created in popups
6414
6231
  // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6415
6232
  var view = elem.ownerDocument.defaultView;
@@ -6509,7 +6326,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6509
6326
  }
6510
6327
 
6511
6328
  // Support: IE <=9 - 11 only
6512
- // Style of cloned element affects source element cloned (#8908)
6329
+ // Style of cloned element affects source element cloned (trac-8908)
6513
6330
  div.style.backgroundClip = "content-box";
6514
6331
  div.cloneNode( true ).style.backgroundClip = "";
6515
6332
  support.clearCloneStyle = div.style.backgroundClip === "content-box";
@@ -6541,6 +6358,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6541
6358
  // set in CSS while `offset*` properties report correct values.
6542
6359
  // Behavior in IE 9 is more subtle than in newer versions & it passes
6543
6360
  // some versions of this test; make sure not to make it pass there!
6361
+ //
6362
+ // Support: Firefox 70+
6363
+ // Only Firefox includes border widths
6364
+ // in computed dimensions. (gh-4529)
6544
6365
  reliableTrDimensions: function() {
6545
6366
  var table, tr, trChild, trStyle;
6546
6367
  if ( reliableTrDimensionsVal == null ) {
@@ -6548,17 +6369,32 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6548
6369
  tr = document.createElement( "tr" );
6549
6370
  trChild = document.createElement( "div" );
6550
6371
 
6551
- table.style.cssText = "position:absolute;left:-11111px";
6372
+ table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
6373
+ tr.style.cssText = "border:1px solid";
6374
+
6375
+ // Support: Chrome 86+
6376
+ // Height set through cssText does not get applied.
6377
+ // Computed height then comes back as 0.
6552
6378
  tr.style.height = "1px";
6553
6379
  trChild.style.height = "9px";
6554
6380
 
6381
+ // Support: Android 8 Chrome 86+
6382
+ // In our bodyBackground.html iframe,
6383
+ // display for all div elements is set to "inline",
6384
+ // which causes a problem only in Android 8 Chrome 86.
6385
+ // Ensuring the div is display: block
6386
+ // gets around this issue.
6387
+ trChild.style.display = "block";
6388
+
6555
6389
  documentElement
6556
6390
  .appendChild( table )
6557
6391
  .appendChild( tr )
6558
6392
  .appendChild( trChild );
6559
6393
 
6560
6394
  trStyle = window.getComputedStyle( tr );
6561
- reliableTrDimensionsVal = parseInt( trStyle.height ) > 3;
6395
+ reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
6396
+ parseInt( trStyle.borderTopWidth, 10 ) +
6397
+ parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
6562
6398
 
6563
6399
  documentElement.removeChild( table );
6564
6400
  }
@@ -6570,6 +6406,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6570
6406
 
6571
6407
  function curCSS( elem, name, computed ) {
6572
6408
  var width, minWidth, maxWidth, ret,
6409
+ isCustomProp = rcustomProp.test( name ),
6573
6410
 
6574
6411
  // Support: Firefox 51+
6575
6412
  // Retrieving style before computed somehow
@@ -6580,11 +6417,42 @@ function curCSS( elem, name, computed ) {
6580
6417
  computed = computed || getStyles( elem );
6581
6418
 
6582
6419
  // getPropertyValue is needed for:
6583
- // .css('filter') (IE 9 only, #12537)
6584
- // .css('--customProperty) (#3144)
6420
+ // .css('filter') (IE 9 only, trac-12537)
6421
+ // .css('--customProperty) (gh-3144)
6585
6422
  if ( computed ) {
6423
+
6424
+ // Support: IE <=9 - 11+
6425
+ // IE only supports `"float"` in `getPropertyValue`; in computed styles
6426
+ // it's only available as `"cssFloat"`. We no longer modify properties
6427
+ // sent to `.css()` apart from camelCasing, so we need to check both.
6428
+ // Normally, this would create difference in behavior: if
6429
+ // `getPropertyValue` returns an empty string, the value returned
6430
+ // by `.css()` would be `undefined`. This is usually the case for
6431
+ // disconnected elements. However, in IE even disconnected elements
6432
+ // with no styles return `"none"` for `getPropertyValue( "float" )`
6586
6433
  ret = computed.getPropertyValue( name ) || computed[ name ];
6587
6434
 
6435
+ if ( isCustomProp && ret ) {
6436
+
6437
+ // Support: Firefox 105+, Chrome <=105+
6438
+ // Spec requires trimming whitespace for custom properties (gh-4926).
6439
+ // Firefox only trims leading whitespace. Chrome just collapses
6440
+ // both leading & trailing whitespace to a single space.
6441
+ //
6442
+ // Fall back to `undefined` if empty string returned.
6443
+ // This collapses a missing definition with property defined
6444
+ // and set to an empty string but there's no standard API
6445
+ // allowing us to differentiate them without a performance penalty
6446
+ // and returning `undefined` aligns with older jQuery.
6447
+ //
6448
+ // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
6449
+ // as whitespace while CSS does not, but this is not a problem
6450
+ // because CSS preprocessing replaces them with U+000A LINE FEED
6451
+ // (which *is* CSS whitespace)
6452
+ // https://www.w3.org/TR/css-syntax-3/#input-preprocessing
6453
+ ret = ret.replace( rtrimCSS, "$1" ) || undefined;
6454
+ }
6455
+
6588
6456
  if ( ret === "" && !isAttached( elem ) ) {
6589
6457
  ret = jQuery.style( elem, name );
6590
6458
  }
@@ -6680,7 +6548,6 @@ var
6680
6548
  // except "table", "table-cell", or "table-caption"
6681
6549
  // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
6682
6550
  rdisplayswap = /^(none|table(?!-c[ea]).+)/,
6683
- rcustomProp = /^--/,
6684
6551
  cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6685
6552
  cssNormalTransform = {
6686
6553
  letterSpacing: "0",
@@ -6702,7 +6569,8 @@ function setPositiveNumber( _elem, value, subtract ) {
6702
6569
  function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
6703
6570
  var i = dimension === "width" ? 1 : 0,
6704
6571
  extra = 0,
6705
- delta = 0;
6572
+ delta = 0,
6573
+ marginDelta = 0;
6706
6574
 
6707
6575
  // Adjustment may not be necessary
6708
6576
  if ( box === ( isBorderBox ? "border" : "content" ) ) {
@@ -6712,8 +6580,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
6712
6580
  for ( ; i < 4; i += 2 ) {
6713
6581
 
6714
6582
  // Both box models exclude margin
6583
+ // Count margin delta separately to only add it after scroll gutter adjustment.
6584
+ // This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
6715
6585
  if ( box === "margin" ) {
6716
- delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
6586
+ marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
6717
6587
  }
6718
6588
 
6719
6589
  // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
@@ -6764,7 +6634,7 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed
6764
6634
  ) ) || 0;
6765
6635
  }
6766
6636
 
6767
- return delta;
6637
+ return delta + marginDelta;
6768
6638
  }
6769
6639
 
6770
6640
  function getWidthOrHeight( elem, dimension, extra ) {
@@ -6862,26 +6732,35 @@ jQuery.extend( {
6862
6732
 
6863
6733
  // Don't automatically add "px" to these possibly-unitless properties
6864
6734
  cssNumber: {
6865
- "animationIterationCount": true,
6866
- "columnCount": true,
6867
- "fillOpacity": true,
6868
- "flexGrow": true,
6869
- "flexShrink": true,
6870
- "fontWeight": true,
6871
- "gridArea": true,
6872
- "gridColumn": true,
6873
- "gridColumnEnd": true,
6874
- "gridColumnStart": true,
6875
- "gridRow": true,
6876
- "gridRowEnd": true,
6877
- "gridRowStart": true,
6878
- "lineHeight": true,
6879
- "opacity": true,
6880
- "order": true,
6881
- "orphans": true,
6882
- "widows": true,
6883
- "zIndex": true,
6884
- "zoom": true
6735
+ animationIterationCount: true,
6736
+ aspectRatio: true,
6737
+ borderImageSlice: true,
6738
+ columnCount: true,
6739
+ flexGrow: true,
6740
+ flexShrink: true,
6741
+ fontWeight: true,
6742
+ gridArea: true,
6743
+ gridColumn: true,
6744
+ gridColumnEnd: true,
6745
+ gridColumnStart: true,
6746
+ gridRow: true,
6747
+ gridRowEnd: true,
6748
+ gridRowStart: true,
6749
+ lineHeight: true,
6750
+ opacity: true,
6751
+ order: true,
6752
+ orphans: true,
6753
+ scale: true,
6754
+ widows: true,
6755
+ zIndex: true,
6756
+ zoom: true,
6757
+
6758
+ // SVG-related
6759
+ fillOpacity: true,
6760
+ floodOpacity: true,
6761
+ stopOpacity: true,
6762
+ strokeMiterlimit: true,
6763
+ strokeOpacity: true
6885
6764
  },
6886
6765
 
6887
6766
  // Add in properties whose names you wish to fix before
@@ -6916,15 +6795,15 @@ jQuery.extend( {
6916
6795
  if ( value !== undefined ) {
6917
6796
  type = typeof value;
6918
6797
 
6919
- // Convert "+=" or "-=" to relative numbers (#7345)
6798
+ // Convert "+=" or "-=" to relative numbers (trac-7345)
6920
6799
  if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
6921
6800
  value = adjustCSS( elem, name, ret );
6922
6801
 
6923
- // Fixes bug #9237
6802
+ // Fixes bug trac-9237
6924
6803
  type = "number";
6925
6804
  }
6926
6805
 
6927
- // Make sure that null and NaN values aren't set (#7116)
6806
+ // Make sure that null and NaN values aren't set (trac-7116)
6928
6807
  if ( value == null || value !== value ) {
6929
6808
  return;
6930
6809
  }
@@ -7022,10 +6901,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) {
7022
6901
  // Running getBoundingClientRect on a disconnected node
7023
6902
  // in IE throws an error.
7024
6903
  ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
7025
- swap( elem, cssShow, function() {
7026
- return getWidthOrHeight( elem, dimension, extra );
7027
- } ) :
7028
- getWidthOrHeight( elem, dimension, extra );
6904
+ swap( elem, cssShow, function() {
6905
+ return getWidthOrHeight( elem, dimension, extra );
6906
+ } ) :
6907
+ getWidthOrHeight( elem, dimension, extra );
7029
6908
  }
7030
6909
  },
7031
6910
 
@@ -7084,7 +6963,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
7084
6963
  swap( elem, { marginLeft: 0 }, function() {
7085
6964
  return elem.getBoundingClientRect().left;
7086
6965
  } )
7087
- ) + "px";
6966
+ ) + "px";
7088
6967
  }
7089
6968
  }
7090
6969
  );
@@ -7223,7 +7102,7 @@ Tween.propHooks = {
7223
7102
  if ( jQuery.fx.step[ tween.prop ] ) {
7224
7103
  jQuery.fx.step[ tween.prop ]( tween );
7225
7104
  } else if ( tween.elem.nodeType === 1 && (
7226
- jQuery.cssHooks[ tween.prop ] ||
7105
+ jQuery.cssHooks[ tween.prop ] ||
7227
7106
  tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
7228
7107
  jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
7229
7108
  } else {
@@ -7468,7 +7347,7 @@ function defaultPrefilter( elem, props, opts ) {
7468
7347
 
7469
7348
  anim.done( function() {
7470
7349
 
7471
- /* eslint-enable no-loop-func */
7350
+ /* eslint-enable no-loop-func */
7472
7351
 
7473
7352
  // The final step of a "hide" animation is actually hiding the element
7474
7353
  if ( !hidden ) {
@@ -7548,7 +7427,7 @@ function Animation( elem, properties, options ) {
7548
7427
  remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
7549
7428
 
7550
7429
  // Support: Android 2.3 only
7551
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
7430
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
7552
7431
  temp = remaining / animation.duration || 0,
7553
7432
  percent = 1 - temp,
7554
7433
  index = 0,
@@ -7588,7 +7467,7 @@ function Animation( elem, properties, options ) {
7588
7467
  tweens: [],
7589
7468
  createTween: function( prop, end ) {
7590
7469
  var tween = jQuery.Tween( elem, animation.opts, prop, end,
7591
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
7470
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
7592
7471
  animation.tweens.push( tween );
7593
7472
  return tween;
7594
7473
  },
@@ -7761,7 +7640,8 @@ jQuery.fn.extend( {
7761
7640
  anim.stop( true );
7762
7641
  }
7763
7642
  };
7764
- doAnimation.finish = doAnimation;
7643
+
7644
+ doAnimation.finish = doAnimation;
7765
7645
 
7766
7646
  return empty || optall.queue === false ?
7767
7647
  this.each( doAnimation ) :
@@ -7937,7 +7817,6 @@ jQuery.fx.speeds = {
7937
7817
 
7938
7818
 
7939
7819
  // Based off of the plugin by Clint Helfers, with permission.
7940
- // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
7941
7820
  jQuery.fn.delay = function( time, type ) {
7942
7821
  time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
7943
7822
  type = type || "fx";
@@ -8162,8 +8041,7 @@ jQuery.extend( {
8162
8041
  // Support: IE <=9 - 11 only
8163
8042
  // elem.tabIndex doesn't always return the
8164
8043
  // correct value when it hasn't been explicitly set
8165
- // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
8166
- // Use proper attribute retrieval(#12072)
8044
+ // Use proper attribute retrieval (trac-12072)
8167
8045
  var tabindex = jQuery.find.attr( elem, "tabindex" );
8168
8046
 
8169
8047
  if ( tabindex ) {
@@ -8267,8 +8145,7 @@ function classesToArray( value ) {
8267
8145
 
8268
8146
  jQuery.fn.extend( {
8269
8147
  addClass: function( value ) {
8270
- var classes, elem, cur, curValue, clazz, j, finalValue,
8271
- i = 0;
8148
+ var classNames, cur, curValue, className, i, finalValue;
8272
8149
 
8273
8150
  if ( isFunction( value ) ) {
8274
8151
  return this.each( function( j ) {
@@ -8276,36 +8153,35 @@ jQuery.fn.extend( {
8276
8153
  } );
8277
8154
  }
8278
8155
 
8279
- classes = classesToArray( value );
8156
+ classNames = classesToArray( value );
8280
8157
 
8281
- if ( classes.length ) {
8282
- while ( ( elem = this[ i++ ] ) ) {
8283
- curValue = getClass( elem );
8284
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8158
+ if ( classNames.length ) {
8159
+ return this.each( function() {
8160
+ curValue = getClass( this );
8161
+ cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8285
8162
 
8286
8163
  if ( cur ) {
8287
- j = 0;
8288
- while ( ( clazz = classes[ j++ ] ) ) {
8289
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
8290
- cur += clazz + " ";
8164
+ for ( i = 0; i < classNames.length; i++ ) {
8165
+ className = classNames[ i ];
8166
+ if ( cur.indexOf( " " + className + " " ) < 0 ) {
8167
+ cur += className + " ";
8291
8168
  }
8292
8169
  }
8293
8170
 
8294
8171
  // Only assign if different to avoid unneeded rendering.
8295
8172
  finalValue = stripAndCollapse( cur );
8296
8173
  if ( curValue !== finalValue ) {
8297
- elem.setAttribute( "class", finalValue );
8174
+ this.setAttribute( "class", finalValue );
8298
8175
  }
8299
8176
  }
8300
- }
8177
+ } );
8301
8178
  }
8302
8179
 
8303
8180
  return this;
8304
8181
  },
8305
8182
 
8306
8183
  removeClass: function( value ) {
8307
- var classes, elem, cur, curValue, clazz, j, finalValue,
8308
- i = 0;
8184
+ var classNames, cur, curValue, className, i, finalValue;
8309
8185
 
8310
8186
  if ( isFunction( value ) ) {
8311
8187
  return this.each( function( j ) {
@@ -8317,45 +8193,42 @@ jQuery.fn.extend( {
8317
8193
  return this.attr( "class", "" );
8318
8194
  }
8319
8195
 
8320
- classes = classesToArray( value );
8196
+ classNames = classesToArray( value );
8321
8197
 
8322
- if ( classes.length ) {
8323
- while ( ( elem = this[ i++ ] ) ) {
8324
- curValue = getClass( elem );
8198
+ if ( classNames.length ) {
8199
+ return this.each( function() {
8200
+ curValue = getClass( this );
8325
8201
 
8326
8202
  // This expression is here for better compressibility (see addClass)
8327
- cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8203
+ cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8328
8204
 
8329
8205
  if ( cur ) {
8330
- j = 0;
8331
- while ( ( clazz = classes[ j++ ] ) ) {
8206
+ for ( i = 0; i < classNames.length; i++ ) {
8207
+ className = classNames[ i ];
8332
8208
 
8333
8209
  // Remove *all* instances
8334
- while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
8335
- cur = cur.replace( " " + clazz + " ", " " );
8210
+ while ( cur.indexOf( " " + className + " " ) > -1 ) {
8211
+ cur = cur.replace( " " + className + " ", " " );
8336
8212
  }
8337
8213
  }
8338
8214
 
8339
8215
  // Only assign if different to avoid unneeded rendering.
8340
8216
  finalValue = stripAndCollapse( cur );
8341
8217
  if ( curValue !== finalValue ) {
8342
- elem.setAttribute( "class", finalValue );
8218
+ this.setAttribute( "class", finalValue );
8343
8219
  }
8344
8220
  }
8345
- }
8221
+ } );
8346
8222
  }
8347
8223
 
8348
8224
  return this;
8349
8225
  },
8350
8226
 
8351
8227
  toggleClass: function( value, stateVal ) {
8352
- var type = typeof value,
8228
+ var classNames, className, i, self,
8229
+ type = typeof value,
8353
8230
  isValidValue = type === "string" || Array.isArray( value );
8354
8231
 
8355
- if ( typeof stateVal === "boolean" && isValidValue ) {
8356
- return stateVal ? this.addClass( value ) : this.removeClass( value );
8357
- }
8358
-
8359
8232
  if ( isFunction( value ) ) {
8360
8233
  return this.each( function( i ) {
8361
8234
  jQuery( this ).toggleClass(
@@ -8365,17 +8238,20 @@ jQuery.fn.extend( {
8365
8238
  } );
8366
8239
  }
8367
8240
 
8368
- return this.each( function() {
8369
- var className, i, self, classNames;
8241
+ if ( typeof stateVal === "boolean" && isValidValue ) {
8242
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
8243
+ }
8244
+
8245
+ classNames = classesToArray( value );
8370
8246
 
8247
+ return this.each( function() {
8371
8248
  if ( isValidValue ) {
8372
8249
 
8373
8250
  // Toggle individual class names
8374
- i = 0;
8375
8251
  self = jQuery( this );
8376
- classNames = classesToArray( value );
8377
8252
 
8378
- while ( ( className = classNames[ i++ ] ) ) {
8253
+ for ( i = 0; i < classNames.length; i++ ) {
8254
+ className = classNames[ i ];
8379
8255
 
8380
8256
  // Check each className given, space separated list
8381
8257
  if ( self.hasClass( className ) ) {
@@ -8401,8 +8277,8 @@ jQuery.fn.extend( {
8401
8277
  if ( this.setAttribute ) {
8402
8278
  this.setAttribute( "class",
8403
8279
  className || value === false ?
8404
- "" :
8405
- dataPriv.get( this, "__className__" ) || ""
8280
+ "" :
8281
+ dataPriv.get( this, "__className__" ) || ""
8406
8282
  );
8407
8283
  }
8408
8284
  }
@@ -8417,7 +8293,7 @@ jQuery.fn.extend( {
8417
8293
  while ( ( elem = this[ i++ ] ) ) {
8418
8294
  if ( elem.nodeType === 1 &&
8419
8295
  ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
8420
- return true;
8296
+ return true;
8421
8297
  }
8422
8298
  }
8423
8299
 
@@ -8509,7 +8385,7 @@ jQuery.extend( {
8509
8385
  val :
8510
8386
 
8511
8387
  // Support: IE <=10 - 11 only
8512
- // option.text throws exceptions (#14686, #14858)
8388
+ // option.text throws exceptions (trac-14686, trac-14858)
8513
8389
  // Strip and collapse whitespace
8514
8390
  // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
8515
8391
  stripAndCollapse( jQuery.text( elem ) );
@@ -8536,7 +8412,7 @@ jQuery.extend( {
8536
8412
  option = options[ i ];
8537
8413
 
8538
8414
  // Support: IE <=9 only
8539
- // IE8-9 doesn't update selected after form reset (#2551)
8415
+ // IE8-9 doesn't update selected after form reset (trac-2551)
8540
8416
  if ( ( option.selected || i === index ) &&
8541
8417
 
8542
8418
  // Don't return options that are disabled or in a disabled optgroup
@@ -8610,9 +8486,39 @@ jQuery.each( [ "radio", "checkbox" ], function() {
8610
8486
 
8611
8487
 
8612
8488
  // Return jQuery for attributes-only inclusion
8489
+ var location = window.location;
8490
+
8491
+ var nonce = { guid: Date.now() };
8492
+
8493
+ var rquery = ( /\?/ );
8494
+
8613
8495
 
8614
8496
 
8615
- support.focusin = "onfocusin" in window;
8497
+ // Cross-browser xml parsing
8498
+ jQuery.parseXML = function( data ) {
8499
+ var xml, parserErrorElem;
8500
+ if ( !data || typeof data !== "string" ) {
8501
+ return null;
8502
+ }
8503
+
8504
+ // Support: IE 9 - 11 only
8505
+ // IE throws on parseFromString with invalid input.
8506
+ try {
8507
+ xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
8508
+ } catch ( e ) {}
8509
+
8510
+ parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
8511
+ if ( !xml || parserErrorElem ) {
8512
+ jQuery.error( "Invalid XML: " + (
8513
+ parserErrorElem ?
8514
+ jQuery.map( parserErrorElem.childNodes, function( el ) {
8515
+ return el.textContent;
8516
+ } ).join( "\n" ) :
8517
+ data
8518
+ ) );
8519
+ }
8520
+ return xml;
8521
+ };
8616
8522
 
8617
8523
 
8618
8524
  var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
@@ -8679,8 +8585,8 @@ jQuery.extend( jQuery.event, {
8679
8585
  return;
8680
8586
  }
8681
8587
 
8682
- // Determine event propagation path in advance, per W3C events spec (#9951)
8683
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
8588
+ // Determine event propagation path in advance, per W3C events spec (trac-9951)
8589
+ // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
8684
8590
  if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
8685
8591
 
8686
8592
  bubbleType = special.delegateType || type;
@@ -8707,9 +8613,7 @@ jQuery.extend( jQuery.event, {
8707
8613
  special.bindType || type;
8708
8614
 
8709
8615
  // jQuery handler
8710
- handle = (
8711
- dataPriv.get( cur, "events" ) || Object.create( null )
8712
- )[ event.type ] &&
8616
+ handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
8713
8617
  dataPriv.get( cur, "handle" );
8714
8618
  if ( handle ) {
8715
8619
  handle.apply( cur, data );
@@ -8734,7 +8638,7 @@ jQuery.extend( jQuery.event, {
8734
8638
  acceptData( elem ) ) {
8735
8639
 
8736
8640
  // Call a native DOM method on the target with the same name as the event.
8737
- // Don't do default actions on window, that's where global variables be (#6170)
8641
+ // Don't do default actions on window, that's where global variables be (trac-6170)
8738
8642
  if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
8739
8643
 
8740
8644
  // Don't re-trigger an onFOO event when we call its FOO() method
@@ -8802,80 +8706,6 @@ jQuery.fn.extend( {
8802
8706
  } );
8803
8707
 
8804
8708
 
8805
- // Support: Firefox <=44
8806
- // Firefox doesn't have focus(in | out) events
8807
- // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
8808
- //
8809
- // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
8810
- // focus(in | out) events fire after focus & blur events,
8811
- // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
8812
- // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
8813
- if ( !support.focusin ) {
8814
- jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
8815
-
8816
- // Attach a single capturing handler on the document while someone wants focusin/focusout
8817
- var handler = function( event ) {
8818
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
8819
- };
8820
-
8821
- jQuery.event.special[ fix ] = {
8822
- setup: function() {
8823
-
8824
- // Handle: regular nodes (via `this.ownerDocument`), window
8825
- // (via `this.document`) & document (via `this`).
8826
- var doc = this.ownerDocument || this.document || this,
8827
- attaches = dataPriv.access( doc, fix );
8828
-
8829
- if ( !attaches ) {
8830
- doc.addEventListener( orig, handler, true );
8831
- }
8832
- dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
8833
- },
8834
- teardown: function() {
8835
- var doc = this.ownerDocument || this.document || this,
8836
- attaches = dataPriv.access( doc, fix ) - 1;
8837
-
8838
- if ( !attaches ) {
8839
- doc.removeEventListener( orig, handler, true );
8840
- dataPriv.remove( doc, fix );
8841
-
8842
- } else {
8843
- dataPriv.access( doc, fix, attaches );
8844
- }
8845
- }
8846
- };
8847
- } );
8848
- }
8849
- var location = window.location;
8850
-
8851
- var nonce = { guid: Date.now() };
8852
-
8853
- var rquery = ( /\?/ );
8854
-
8855
-
8856
-
8857
- // Cross-browser xml parsing
8858
- jQuery.parseXML = function( data ) {
8859
- var xml;
8860
- if ( !data || typeof data !== "string" ) {
8861
- return null;
8862
- }
8863
-
8864
- // Support: IE 9 - 11 only
8865
- // IE throws on parseFromString with invalid input.
8866
- try {
8867
- xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
8868
- } catch ( e ) {
8869
- xml = undefined;
8870
- }
8871
-
8872
- if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
8873
- jQuery.error( "Invalid XML: " + data );
8874
- }
8875
- return xml;
8876
- };
8877
-
8878
-
8879
8709
  var
8880
8710
  rbracket = /\[\]$/,
8881
8711
  rCRLF = /\r?\n/g,
@@ -8971,16 +8801,14 @@ jQuery.fn.extend( {
8971
8801
  // Can add propHook for "elements" to filter or add form elements
8972
8802
  var elements = jQuery.prop( this, "elements" );
8973
8803
  return elements ? jQuery.makeArray( elements ) : this;
8974
- } )
8975
- .filter( function() {
8804
+ } ).filter( function() {
8976
8805
  var type = this.type;
8977
8806
 
8978
8807
  // Use .is( ":disabled" ) so that fieldset[disabled] works
8979
8808
  return this.name && !jQuery( this ).is( ":disabled" ) &&
8980
8809
  rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
8981
8810
  ( this.checked || !rcheckableType.test( type ) );
8982
- } )
8983
- .map( function( _i, elem ) {
8811
+ } ).map( function( _i, elem ) {
8984
8812
  var val = jQuery( this ).val();
8985
8813
 
8986
8814
  if ( val == null ) {
@@ -9005,7 +8833,7 @@ var
9005
8833
  rantiCache = /([?&])_=[^&]*/,
9006
8834
  rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
9007
8835
 
9008
- // #7653, #8125, #8152: local protocol detection
8836
+ // trac-7653, trac-8125, trac-8152: local protocol detection
9009
8837
  rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
9010
8838
  rnoContent = /^(?:GET|HEAD)$/,
9011
8839
  rprotocol = /^\/\//,
@@ -9028,12 +8856,13 @@ var
9028
8856
  */
9029
8857
  transports = {},
9030
8858
 
9031
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
8859
+ // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
9032
8860
  allTypes = "*/".concat( "*" ),
9033
8861
 
9034
8862
  // Anchor tag for parsing the document origin
9035
8863
  originAnchor = document.createElement( "a" );
9036
- originAnchor.href = location.href;
8864
+
8865
+ originAnchor.href = location.href;
9037
8866
 
9038
8867
  // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
9039
8868
  function addToPrefiltersOrTransports( structure ) {
@@ -9098,7 +8927,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
9098
8927
 
9099
8928
  // A special extend for ajax options
9100
8929
  // that takes "flat" options (not to be deep extended)
9101
- // Fixes #9887
8930
+ // Fixes trac-9887
9102
8931
  function ajaxExtend( target, src ) {
9103
8932
  var key, deep,
9104
8933
  flatOptions = jQuery.ajaxSettings.flatOptions || {};
@@ -9414,8 +9243,8 @@ jQuery.extend( {
9414
9243
  // Context for global events is callbackContext if it is a DOM node or jQuery collection
9415
9244
  globalEventContext = s.context &&
9416
9245
  ( callbackContext.nodeType || callbackContext.jquery ) ?
9417
- jQuery( callbackContext ) :
9418
- jQuery.event,
9246
+ jQuery( callbackContext ) :
9247
+ jQuery.event,
9419
9248
 
9420
9249
  // Deferreds
9421
9250
  deferred = jQuery.Deferred(),
@@ -9509,12 +9338,12 @@ jQuery.extend( {
9509
9338
  deferred.promise( jqXHR );
9510
9339
 
9511
9340
  // Add protocol if not provided (prefilters might expect it)
9512
- // Handle falsy url in the settings object (#10093: consistency with old signature)
9341
+ // Handle falsy url in the settings object (trac-10093: consistency with old signature)
9513
9342
  // We also use the url parameter if available
9514
9343
  s.url = ( ( url || s.url || location.href ) + "" )
9515
9344
  .replace( rprotocol, location.protocol + "//" );
9516
9345
 
9517
- // Alias method option to type as per ticket #12004
9346
+ // Alias method option to type as per ticket trac-12004
9518
9347
  s.type = options.method || options.type || s.method || s.type;
9519
9348
 
9520
9349
  // Extract dataTypes list
@@ -9557,7 +9386,7 @@ jQuery.extend( {
9557
9386
  }
9558
9387
 
9559
9388
  // We can fire global events as of now if asked to
9560
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
9389
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
9561
9390
  fireGlobals = jQuery.event && s.global;
9562
9391
 
9563
9392
  // Watch for a new set of requests
@@ -9586,7 +9415,7 @@ jQuery.extend( {
9586
9415
  if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
9587
9416
  cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
9588
9417
 
9589
- // #9682: remove data so that it's not used in an eventual retry
9418
+ // trac-9682: remove data so that it's not used in an eventual retry
9590
9419
  delete s.data;
9591
9420
  }
9592
9421
 
@@ -9727,8 +9556,10 @@ jQuery.extend( {
9727
9556
  response = ajaxHandleResponses( s, jqXHR, responses );
9728
9557
  }
9729
9558
 
9730
- // Use a noop converter for missing script
9731
- if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) {
9559
+ // Use a noop converter for missing script but not if jsonp
9560
+ if ( !isSuccess &&
9561
+ jQuery.inArray( "script", s.dataTypes ) > -1 &&
9562
+ jQuery.inArray( "json", s.dataTypes ) < 0 ) {
9732
9563
  s.converters[ "text script" ] = function() {};
9733
9564
  }
9734
9565
 
@@ -9857,7 +9688,7 @@ jQuery._evalUrl = function( url, options, doc ) {
9857
9688
  return jQuery.ajax( {
9858
9689
  url: url,
9859
9690
 
9860
- // Make this explicit, since user can override this through ajaxSetup (#11264)
9691
+ // Make this explicit, since user can override this through ajaxSetup (trac-11264)
9861
9692
  type: "GET",
9862
9693
  dataType: "script",
9863
9694
  cache: true,
@@ -9966,7 +9797,7 @@ var xhrSuccessStatus = {
9966
9797
  0: 200,
9967
9798
 
9968
9799
  // Support: IE <=9 only
9969
- // #1450: sometimes IE returns 1223 when it should be 204
9800
+ // trac-1450: sometimes IE returns 1223 when it should be 204
9970
9801
  1223: 204
9971
9802
  },
9972
9803
  xhrSupported = jQuery.ajaxSettings.xhr();
@@ -10038,7 +9869,7 @@ jQuery.ajaxTransport( function( options ) {
10038
9869
  } else {
10039
9870
  complete(
10040
9871
 
10041
- // File: protocol always yields status 0; see #8605, #14207
9872
+ // File: protocol always yields status 0; see trac-8605, trac-14207
10042
9873
  xhr.status,
10043
9874
  xhr.statusText
10044
9875
  );
@@ -10099,7 +9930,7 @@ jQuery.ajaxTransport( function( options ) {
10099
9930
  xhr.send( options.hasContent && options.data || null );
10100
9931
  } catch ( e ) {
10101
9932
 
10102
- // #14683: Only rethrow if this hasn't been notified as an error yet
9933
+ // trac-14683: Only rethrow if this hasn't been notified as an error yet
10103
9934
  if ( callback ) {
10104
9935
  throw e;
10105
9936
  }
@@ -10466,12 +10297,6 @@ jQuery.offset = {
10466
10297
  options.using.call( elem, props );
10467
10298
 
10468
10299
  } else {
10469
- if ( typeof props.top === "number" ) {
10470
- props.top += "px";
10471
- }
10472
- if ( typeof props.left === "number" ) {
10473
- props.left += "px";
10474
- }
10475
10300
  curElem.css( props );
10476
10301
  }
10477
10302
  }
@@ -10640,8 +10465,11 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) {
10640
10465
 
10641
10466
  // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
10642
10467
  jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
10643
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
10644
- function( defaultExtra, funcName ) {
10468
+ jQuery.each( {
10469
+ padding: "inner" + name,
10470
+ content: type,
10471
+ "": "outer" + name
10472
+ }, function( defaultExtra, funcName ) {
10645
10473
 
10646
10474
  // Margin is only for outerHeight, outerWidth
10647
10475
  jQuery.fn[ funcName ] = function( margin, value ) {
@@ -10726,7 +10554,8 @@ jQuery.fn.extend( {
10726
10554
  }
10727
10555
  } );
10728
10556
 
10729
- jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
10557
+ jQuery.each(
10558
+ ( "blur focus focusin focusout resize scroll click dblclick " +
10730
10559
  "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
10731
10560
  "change select submit keydown keypress keyup contextmenu" ).split( " " ),
10732
10561
  function( _i, name ) {
@@ -10737,14 +10566,17 @@ jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
10737
10566
  this.on( name, null, data, fn ) :
10738
10567
  this.trigger( name );
10739
10568
  };
10740
- } );
10569
+ }
10570
+ );
10741
10571
 
10742
10572
 
10743
10573
 
10744
10574
 
10745
10575
  // Support: Android <=4.0 only
10746
10576
  // Make sure we trim BOM and NBSP
10747
- var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
10577
+ // Require that the "whitespace run" starts from a non-whitespace
10578
+ // to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
10579
+ var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
10748
10580
 
10749
10581
  // Bind a function to a context, optionally partially applying any
10750
10582
  // arguments.
@@ -10811,7 +10643,7 @@ jQuery.isNumeric = function( obj ) {
10811
10643
  jQuery.trim = function( text ) {
10812
10644
  return text == null ?
10813
10645
  "" :
10814
- ( text + "" ).replace( rtrim, "" );
10646
+ ( text + "" ).replace( rtrim, "$1" );
10815
10647
  };
10816
10648
 
10817
10649
 
@@ -10835,9 +10667,6 @@ if ( typeof define === "function" && define.amd ) {
10835
10667
  } );
10836
10668
  }
10837
10669
 
10838
-
10839
-
10840
-
10841
10670
  var
10842
10671
 
10843
10672
  // Map over jQuery in case of overwrite
@@ -10859,14 +10688,11 @@ jQuery.noConflict = function( deep ) {
10859
10688
  };
10860
10689
 
10861
10690
  // Expose jQuery and $ identifiers, even in AMD
10862
- // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
10863
- // and CommonJS for browser emulators (#13566)
10691
+ // (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
10692
+ // and CommonJS for browser emulators (trac-13566)
10864
10693
  if ( typeof noGlobal === "undefined" ) {
10865
10694
  window.jQuery = window.$ = jQuery;
10866
10695
  }
10867
10696
 
10868
-
10869
-
10870
-
10871
10697
  return jQuery;
10872
10698
  } );