udt-itf-theme 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (639) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +124 -0
  3. data/_data/apis.yml +66 -0
  4. data/_data/calls.yml +6 -0
  5. data/_data/demos.yml +10 -0
  6. data/_data/features.yml +9 -0
  7. data/_data/institutions.yml +61 -0
  8. data/_data/pastevents.yml +146 -0
  9. data/_includes/api/acronyms.md +3 -0
  10. data/_includes/api/anchor_headings.html +152 -0
  11. data/_includes/api/beta.md +7 -0
  12. data/_includes/api/code_header.html +4 -0
  13. data/_includes/api/copyright.md +4 -0
  14. data/_includes/api/copyright2015.md +4 -0
  15. data/_includes/api/copyright2017.md +4 -0
  16. data/_includes/api/editors.md +3 -0
  17. data/_includes/api/links.md +235 -0
  18. data/_includes/api/sub-page_header.html +5 -0
  19. data/_includes/api/toc.html +182 -0
  20. data/_includes/blocks/api-cards.html +27 -0
  21. data/_includes/blocks/cards.html +21 -0
  22. data/_includes/blocks/carousel.html +14 -0
  23. data/_includes/blocks/demos.html +10 -0
  24. data/_includes/blocks/event-cards.html +26 -0
  25. data/_includes/blocks/features.html +9 -0
  26. data/_includes/blocks/hero.html +61 -0
  27. data/_includes/blocks/image-and-text.html +30 -0
  28. data/_includes/blocks/join-newsletter.html +0 -0
  29. data/_includes/blocks/logo-grid.html +14 -0
  30. data/_includes/blocks/news-cards.html +32 -0
  31. data/_includes/blocks/pullquote.html +22 -0
  32. data/_includes/blocks/related-cards.html +0 -0
  33. data/_includes/blocks/steps.html +0 -0
  34. data/_includes/blocks/tabs.html +21 -0
  35. data/_includes/blocks/text-and-text.html +14 -0
  36. data/_includes/content/full-width-image.html +10 -0
  37. data/_includes/content/inline-image.html +13 -0
  38. data/_includes/footer.html +28 -0
  39. data/_includes/head.html +36 -0
  40. data/_includes/misc/button.html +2 -0
  41. data/_includes/misc/community_calendar.html +4 -0
  42. data/_includes/misc/feedback.html +79 -0
  43. data/_includes/misc/google-analytics.html +9 -0
  44. data/_includes/misc/image.html +7 -0
  45. data/_includes/misc/notification.html +15 -0
  46. data/_includes/navbar.html +36 -0
  47. data/_layouts/default.html +35 -0
  48. data/_layouts/event.html +7 -0
  49. data/_layouts/page.html +8 -0
  50. data/_layouts/post.html +7 -0
  51. data/_layouts/spec.html +35 -0
  52. data/_sass/iiifc-theme/api-spec.scss +180 -0
  53. data/_sass/iiifc-theme/base.scss +317 -0
  54. data/_sass/iiifc-theme/bulma-base.scss +15 -0
  55. data/_sass/iiifc-theme/carousel.scss +47 -0
  56. data/_sass/iiifc-theme/fonts.scss +6 -0
  57. data/_sass/iiifc-theme/helpers.scss +43 -0
  58. data/_sass/iiifc-theme/syntax.scss +65 -0
  59. data/_sass/iiifc-theme/typography.scss +41 -0
  60. data/_sass/iiifc-theme/vars.scss +47 -0
  61. data/_sass/node_modules/.yarn-integrity +19 -0
  62. data/_sass/node_modules/bulma/CHANGELOG.md +1539 -0
  63. data/_sass/node_modules/bulma/LICENSE +21 -0
  64. data/_sass/node_modules/bulma/README.md +133 -0
  65. data/_sass/node_modules/bulma/bulma.sass +10 -0
  66. data/_sass/node_modules/bulma/css/bulma-rtl.css +11705 -0
  67. data/_sass/node_modules/bulma/css/bulma-rtl.css.map +1 -0
  68. data/_sass/node_modules/bulma/css/bulma-rtl.min.css +1 -0
  69. data/_sass/node_modules/bulma/css/bulma.css +11705 -0
  70. data/_sass/node_modules/bulma/css/bulma.css.map +1 -0
  71. data/_sass/node_modules/bulma/css/bulma.min.css +1 -0
  72. data/_sass/node_modules/bulma/package.json +56 -0
  73. data/_sass/node_modules/bulma/sass/base/_all.sass +6 -0
  74. data/_sass/node_modules/bulma/sass/base/animations.sass +5 -0
  75. data/_sass/node_modules/bulma/sass/base/generic.sass +145 -0
  76. data/_sass/node_modules/bulma/sass/base/helpers.sass +1 -0
  77. data/_sass/node_modules/bulma/sass/base/minireset.sass +79 -0
  78. data/_sass/node_modules/bulma/sass/components/_all.sass +15 -0
  79. data/_sass/node_modules/bulma/sass/components/breadcrumb.sass +77 -0
  80. data/_sass/node_modules/bulma/sass/components/card.sass +102 -0
  81. data/_sass/node_modules/bulma/sass/components/dropdown.sass +83 -0
  82. data/_sass/node_modules/bulma/sass/components/level.sass +79 -0
  83. data/_sass/node_modules/bulma/sass/components/media.sass +59 -0
  84. data/_sass/node_modules/bulma/sass/components/menu.sass +59 -0
  85. data/_sass/node_modules/bulma/sass/components/message.sass +101 -0
  86. data/_sass/node_modules/bulma/sass/components/modal.sass +117 -0
  87. data/_sass/node_modules/bulma/sass/components/navbar.sass +445 -0
  88. data/_sass/node_modules/bulma/sass/components/pagination.sass +158 -0
  89. data/_sass/node_modules/bulma/sass/components/panel.sass +121 -0
  90. data/_sass/node_modules/bulma/sass/components/tabs.sass +176 -0
  91. data/_sass/node_modules/bulma/sass/elements/_all.sass +16 -0
  92. data/_sass/node_modules/bulma/sass/elements/box.sass +26 -0
  93. data/_sass/node_modules/bulma/sass/elements/button.sass +345 -0
  94. data/_sass/node_modules/bulma/sass/elements/container.sass +29 -0
  95. data/_sass/node_modules/bulma/sass/elements/content.sass +157 -0
  96. data/_sass/node_modules/bulma/sass/elements/form.sass +1 -0
  97. data/_sass/node_modules/bulma/sass/elements/icon.sass +40 -0
  98. data/_sass/node_modules/bulma/sass/elements/image.sass +73 -0
  99. data/_sass/node_modules/bulma/sass/elements/notification.sass +52 -0
  100. data/_sass/node_modules/bulma/sass/elements/other.sass +41 -0
  101. data/_sass/node_modules/bulma/sass/elements/progress.sass +73 -0
  102. data/_sass/node_modules/bulma/sass/elements/table.sass +133 -0
  103. data/_sass/node_modules/bulma/sass/elements/tag.sass +140 -0
  104. data/_sass/node_modules/bulma/sass/elements/title.sass +72 -0
  105. data/_sass/node_modules/bulma/sass/form/_all.sass +9 -0
  106. data/_sass/node_modules/bulma/sass/form/checkbox-radio.sass +22 -0
  107. data/_sass/node_modules/bulma/sass/form/file.sass +182 -0
  108. data/_sass/node_modules/bulma/sass/form/input-textarea.sass +66 -0
  109. data/_sass/node_modules/bulma/sass/form/select.sass +87 -0
  110. data/_sass/node_modules/bulma/sass/form/shared.sass +60 -0
  111. data/_sass/node_modules/bulma/sass/form/tools.sass +215 -0
  112. data/_sass/node_modules/bulma/sass/grid/_all.sass +5 -0
  113. data/_sass/node_modules/bulma/sass/grid/columns.sass +513 -0
  114. data/_sass/node_modules/bulma/sass/grid/tiles.sass +36 -0
  115. data/_sass/node_modules/bulma/sass/helpers/_all.sass +12 -0
  116. data/_sass/node_modules/bulma/sass/helpers/color.sass +39 -0
  117. data/_sass/node_modules/bulma/sass/helpers/flexbox.sass +35 -0
  118. data/_sass/node_modules/bulma/sass/helpers/float.sass +10 -0
  119. data/_sass/node_modules/bulma/sass/helpers/other.sass +14 -0
  120. data/_sass/node_modules/bulma/sass/helpers/overflow.sass +2 -0
  121. data/_sass/node_modules/bulma/sass/helpers/position.sass +7 -0
  122. data/_sass/node_modules/bulma/sass/helpers/spacing.sass +31 -0
  123. data/_sass/node_modules/bulma/sass/helpers/typography.sass +100 -0
  124. data/_sass/node_modules/bulma/sass/helpers/visibility.sass +122 -0
  125. data/_sass/node_modules/bulma/sass/layout/_all.sass +6 -0
  126. data/_sass/node_modules/bulma/sass/layout/footer.sass +11 -0
  127. data/_sass/node_modules/bulma/sass/layout/hero.sass +149 -0
  128. data/_sass/node_modules/bulma/sass/layout/section.sass +15 -0
  129. data/_sass/node_modules/bulma/sass/utilities/_all.sass +9 -0
  130. data/_sass/node_modules/bulma/sass/utilities/animations.sass +1 -0
  131. data/_sass/node_modules/bulma/sass/utilities/controls.sass +49 -0
  132. data/_sass/node_modules/bulma/sass/utilities/derived-variables.sass +110 -0
  133. data/_sass/node_modules/bulma/sass/utilities/extends.sass +22 -0
  134. data/_sass/node_modules/bulma/sass/utilities/functions.sass +115 -0
  135. data/_sass/node_modules/bulma/sass/utilities/initial-variables.sass +78 -0
  136. data/_sass/node_modules/bulma/sass/utilities/mixins.sass +268 -0
  137. data/_sass/node_modules/jquery/AUTHORS.txt +331 -0
  138. data/_sass/node_modules/jquery/LICENSE.txt +20 -0
  139. data/_sass/node_modules/jquery/README.md +62 -0
  140. data/_sass/node_modules/jquery/bower.json +14 -0
  141. data/_sass/node_modules/jquery/dist/jquery.js +10881 -0
  142. data/_sass/node_modules/jquery/dist/jquery.min.js +2 -0
  143. data/_sass/node_modules/jquery/dist/jquery.min.map +1 -0
  144. data/_sass/node_modules/jquery/dist/jquery.slim.js +8782 -0
  145. data/_sass/node_modules/jquery/dist/jquery.slim.min.js +2 -0
  146. data/_sass/node_modules/jquery/dist/jquery.slim.min.map +1 -0
  147. data/_sass/node_modules/jquery/external/sizzle/LICENSE.txt +36 -0
  148. data/_sass/node_modules/jquery/external/sizzle/dist/sizzle.js +2478 -0
  149. data/_sass/node_modules/jquery/external/sizzle/dist/sizzle.min.js +3 -0
  150. data/_sass/node_modules/jquery/external/sizzle/dist/sizzle.min.map +1 -0
  151. data/_sass/node_modules/jquery/package.json +116 -0
  152. data/_sass/node_modules/jquery/src/ajax/jsonp.js +103 -0
  153. data/_sass/node_modules/jquery/src/ajax/load.js +77 -0
  154. data/_sass/node_modules/jquery/src/ajax/script.js +74 -0
  155. data/_sass/node_modules/jquery/src/ajax/var/location.js +5 -0
  156. data/_sass/node_modules/jquery/src/ajax/var/nonce.js +5 -0
  157. data/_sass/node_modules/jquery/src/ajax/var/rquery.js +5 -0
  158. data/_sass/node_modules/jquery/src/ajax/xhr.js +170 -0
  159. data/_sass/node_modules/jquery/src/ajax.js +876 -0
  160. data/_sass/node_modules/jquery/src/attributes/attr.js +141 -0
  161. data/_sass/node_modules/jquery/src/attributes/classes.js +186 -0
  162. data/_sass/node_modules/jquery/src/attributes/prop.js +143 -0
  163. data/_sass/node_modules/jquery/src/attributes/support.js +33 -0
  164. data/_sass/node_modules/jquery/src/attributes/val.js +191 -0
  165. data/_sass/node_modules/jquery/src/attributes.js +13 -0
  166. data/_sass/node_modules/jquery/src/callbacks.js +236 -0
  167. data/_sass/node_modules/jquery/src/core/DOMEval.js +43 -0
  168. data/_sass/node_modules/jquery/src/core/access.js +72 -0
  169. data/_sass/node_modules/jquery/src/core/camelCase.js +23 -0
  170. data/_sass/node_modules/jquery/src/core/init.js +129 -0
  171. data/_sass/node_modules/jquery/src/core/isAttached.js +26 -0
  172. data/_sass/node_modules/jquery/src/core/nodeName.js +13 -0
  173. data/_sass/node_modules/jquery/src/core/parseHTML.js +65 -0
  174. data/_sass/node_modules/jquery/src/core/parseXML.js +35 -0
  175. data/_sass/node_modules/jquery/src/core/ready-no-deferred.js +97 -0
  176. data/_sass/node_modules/jquery/src/core/ready.js +86 -0
  177. data/_sass/node_modules/jquery/src/core/readyException.js +13 -0
  178. data/_sass/node_modules/jquery/src/core/stripAndCollapse.js +14 -0
  179. data/_sass/node_modules/jquery/src/core/support.js +20 -0
  180. data/_sass/node_modules/jquery/src/core/toType.js +20 -0
  181. data/_sass/node_modules/jquery/src/core/var/rsingleTag.js +7 -0
  182. data/_sass/node_modules/jquery/src/core.js +400 -0
  183. data/_sass/node_modules/jquery/src/css/addGetHookIf.js +26 -0
  184. data/_sass/node_modules/jquery/src/css/adjustCSS.js +74 -0
  185. data/_sass/node_modules/jquery/src/css/curCSS.js +65 -0
  186. data/_sass/node_modules/jquery/src/css/finalPropName.js +42 -0
  187. data/_sass/node_modules/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  188. data/_sass/node_modules/jquery/src/css/showHide.js +105 -0
  189. data/_sass/node_modules/jquery/src/css/support.js +152 -0
  190. data/_sass/node_modules/jquery/src/css/var/cssExpand.js +5 -0
  191. data/_sass/node_modules/jquery/src/css/var/getStyles.js +17 -0
  192. data/_sass/node_modules/jquery/src/css/var/isHiddenWithinTree.js +34 -0
  193. data/_sass/node_modules/jquery/src/css/var/rboxStyle.js +7 -0
  194. data/_sass/node_modules/jquery/src/css/var/rnumnonpx.js +7 -0
  195. data/_sass/node_modules/jquery/src/css/var/swap.js +26 -0
  196. data/_sass/node_modules/jquery/src/css.js +494 -0
  197. data/_sass/node_modules/jquery/src/data/Data.js +162 -0
  198. data/_sass/node_modules/jquery/src/data/var/acceptData.js +19 -0
  199. data/_sass/node_modules/jquery/src/data/var/dataPriv.js +7 -0
  200. data/_sass/node_modules/jquery/src/data/var/dataUser.js +7 -0
  201. data/_sass/node_modules/jquery/src/data.js +180 -0
  202. data/_sass/node_modules/jquery/src/deferred/exceptionHook.js +21 -0
  203. data/_sass/node_modules/jquery/src/deferred.js +399 -0
  204. data/_sass/node_modules/jquery/src/deprecated/ajax-event-alias.js +22 -0
  205. data/_sass/node_modules/jquery/src/deprecated/event.js +50 -0
  206. data/_sass/node_modules/jquery/src/deprecated.js +87 -0
  207. data/_sass/node_modules/jquery/src/dimensions.js +60 -0
  208. data/_sass/node_modules/jquery/src/effects/Tween.js +125 -0
  209. data/_sass/node_modules/jquery/src/effects/animatedSelector.js +15 -0
  210. data/_sass/node_modules/jquery/src/effects.js +702 -0
  211. data/_sass/node_modules/jquery/src/event/focusin.js +58 -0
  212. data/_sass/node_modules/jquery/src/event/support.js +11 -0
  213. data/_sass/node_modules/jquery/src/event/trigger.js +199 -0
  214. data/_sass/node_modules/jquery/src/event.js +874 -0
  215. data/_sass/node_modules/jquery/src/exports/amd.js +26 -0
  216. data/_sass/node_modules/jquery/src/exports/global.js +34 -0
  217. data/_sass/node_modules/jquery/src/jquery.js +41 -0
  218. data/_sass/node_modules/jquery/src/manipulation/_evalUrl.js +32 -0
  219. data/_sass/node_modules/jquery/src/manipulation/buildFragment.js +106 -0
  220. data/_sass/node_modules/jquery/src/manipulation/getAll.js +32 -0
  221. data/_sass/node_modules/jquery/src/manipulation/setGlobalEval.js +22 -0
  222. data/_sass/node_modules/jquery/src/manipulation/support.js +41 -0
  223. data/_sass/node_modules/jquery/src/manipulation/var/rscriptType.js +5 -0
  224. data/_sass/node_modules/jquery/src/manipulation/var/rtagName.js +8 -0
  225. data/_sass/node_modules/jquery/src/manipulation/wrapMap.js +30 -0
  226. data/_sass/node_modules/jquery/src/manipulation.js +480 -0
  227. data/_sass/node_modules/jquery/src/offset.js +232 -0
  228. data/_sass/node_modules/jquery/src/queue/delay.js +24 -0
  229. data/_sass/node_modules/jquery/src/queue.js +145 -0
  230. data/_sass/node_modules/jquery/src/selector-native.js +241 -0
  231. data/_sass/node_modules/jquery/src/selector-sizzle.js +19 -0
  232. data/_sass/node_modules/jquery/src/selector.js +3 -0
  233. data/_sass/node_modules/jquery/src/serialize.js +134 -0
  234. data/_sass/node_modules/jquery/src/traversing/findFilter.js +97 -0
  235. data/_sass/node_modules/jquery/src/traversing/var/dir.js +22 -0
  236. data/_sass/node_modules/jquery/src/traversing/var/rneedsContext.js +8 -0
  237. data/_sass/node_modules/jquery/src/traversing/var/siblings.js +17 -0
  238. data/_sass/node_modules/jquery/src/traversing.js +198 -0
  239. data/_sass/node_modules/jquery/src/var/ObjectFunctionString.js +7 -0
  240. data/_sass/node_modules/jquery/src/var/arr.js +5 -0
  241. data/_sass/node_modules/jquery/src/var/class2type.js +6 -0
  242. data/_sass/node_modules/jquery/src/var/document.js +5 -0
  243. data/_sass/node_modules/jquery/src/var/documentElement.js +7 -0
  244. data/_sass/node_modules/jquery/src/var/flat.js +16 -0
  245. data/_sass/node_modules/jquery/src/var/fnToString.js +7 -0
  246. data/_sass/node_modules/jquery/src/var/getProto.js +5 -0
  247. data/_sass/node_modules/jquery/src/var/hasOwn.js +7 -0
  248. data/_sass/node_modules/jquery/src/var/indexOf.js +7 -0
  249. data/_sass/node_modules/jquery/src/var/isFunction.js +17 -0
  250. data/_sass/node_modules/jquery/src/var/isWindow.js +8 -0
  251. data/_sass/node_modules/jquery/src/var/pnum.js +5 -0
  252. data/_sass/node_modules/jquery/src/var/push.js +7 -0
  253. data/_sass/node_modules/jquery/src/var/rcheckableType.js +5 -0
  254. data/_sass/node_modules/jquery/src/var/rcssNum.js +9 -0
  255. data/_sass/node_modules/jquery/src/var/rnothtmlwhite.js +8 -0
  256. data/_sass/node_modules/jquery/src/var/slice.js +7 -0
  257. data/_sass/node_modules/jquery/src/var/support.js +6 -0
  258. data/_sass/node_modules/jquery/src/var/toString.js +7 -0
  259. data/_sass/node_modules/jquery/src/wrap.js +78 -0
  260. data/_sass/node_modules/slick-carousel-no-fonts/.npmignore +2 -0
  261. data/_sass/node_modules/slick-carousel-no-fonts/CONTRIBUTING.markdown +35 -0
  262. data/_sass/node_modules/slick-carousel-no-fonts/ISSUE_TEMPLATE.md +50 -0
  263. data/_sass/node_modules/slick-carousel-no-fonts/LICENSE +20 -0
  264. data/_sass/node_modules/slick-carousel-no-fonts/Makefile +8 -0
  265. data/_sass/node_modules/slick-carousel-no-fonts/README.markdown +287 -0
  266. data/_sass/node_modules/slick-carousel-no-fonts/bower.json +32 -0
  267. data/_sass/node_modules/slick-carousel-no-fonts/component.json +18 -0
  268. data/_sass/node_modules/slick-carousel-no-fonts/index.html +163 -0
  269. data/_sass/node_modules/slick-carousel-no-fonts/package.json +50 -0
  270. data/_sass/node_modules/slick-carousel-no-fonts/slick/ajax-loader.gif +0 -0
  271. data/_sass/node_modules/slick-carousel-no-fonts/slick/config.rb +10 -0
  272. data/_sass/node_modules/slick-carousel-no-fonts/slick/fonts/slick.eot +0 -0
  273. data/_sass/node_modules/slick-carousel-no-fonts/slick/fonts/slick.svg +14 -0
  274. data/_sass/node_modules/slick-carousel-no-fonts/slick/fonts/slick.ttf +0 -0
  275. data/_sass/node_modules/slick-carousel-no-fonts/slick/fonts/slick.woff +0 -0
  276. data/_sass/node_modules/slick-carousel-no-fonts/slick/slick-theme.css +194 -0
  277. data/_sass/node_modules/slick-carousel-no-fonts/slick/slick-theme.less +158 -0
  278. data/_sass/node_modules/slick-carousel-no-fonts/slick/slick-theme.scss +186 -0
  279. data/_sass/node_modules/slick-carousel-no-fonts/slick/slick.css +117 -0
  280. data/_sass/node_modules/slick-carousel-no-fonts/slick/slick.js +2936 -0
  281. data/_sass/node_modules/slick-carousel-no-fonts/slick/slick.less +98 -0
  282. data/_sass/node_modules/slick-carousel-no-fonts/slick/slick.min.js +18 -0
  283. data/_sass/node_modules/slick-carousel-no-fonts/slick/slick.scss +98 -0
  284. data/_sass/node_modules/slick-carousel-no-fonts/slick.jquery.json +34 -0
  285. data/assets/android-chrome-192x192.png +0 -0
  286. data/assets/android-chrome-512x512.png +0 -0
  287. data/assets/apple-touch-icon.png +0 -0
  288. data/assets/browserconfig.xml +9 -0
  289. data/assets/css/ajax-loader.gif +0 -0
  290. data/assets/css/style.scss +4 -0
  291. data/assets/favicon-16x16.png +0 -0
  292. data/assets/favicon-32x32.png +0 -0
  293. data/assets/favicon.ico +0 -0
  294. data/assets/images/defaults/blank-image.png +0 -0
  295. data/assets/images/defaults/just-a-square.png +0 -0
  296. data/assets/images/heroes/event.png +0 -0
  297. data/assets/images/heroes/event.webp +0 -0
  298. data/assets/images/heroes/event@2x.png +0 -0
  299. data/assets/images/heroes/event@2x.webp +0 -0
  300. data/assets/images/heroes/event@3x.png +0 -0
  301. data/assets/images/heroes/event@3x.webp +0 -0
  302. data/assets/images/heroes/event_2.png +0 -0
  303. data/assets/images/heroes/event_2.webp +0 -0
  304. data/assets/images/heroes/event_2@2x.png +0 -0
  305. data/assets/images/heroes/event_2@2x.webp +0 -0
  306. data/assets/images/heroes/hero-1.png +0 -0
  307. data/assets/images/heroes/hero-1.webp +0 -0
  308. data/assets/images/heroes/hero-1@2x.png +0 -0
  309. data/assets/images/heroes/hero-1@2x.webp +0 -0
  310. data/assets/images/heroes/hero-2.png +0 -0
  311. data/assets/images/heroes/hero-2.webp +0 -0
  312. data/assets/images/heroes/hero-2@2x.png +0 -0
  313. data/assets/images/heroes/hero-2@2x.webp +0 -0
  314. data/assets/images/heroes/hero-2@3x.png +0 -0
  315. data/assets/images/heroes/hero-2@3x.webp +0 -0
  316. data/assets/images/heroes/hero-3.png +0 -0
  317. data/assets/images/heroes/hero-3.webp +0 -0
  318. data/assets/images/heroes/hero-3@2x.png +0 -0
  319. data/assets/images/heroes/hero-3@2x.webp +0 -0
  320. data/assets/images/heroes/hero-3@3x.png +0 -0
  321. data/assets/images/heroes/hero-3@3x.webp +0 -0
  322. data/assets/images/heroes/smithsonian_cookbook.jpg +0 -0
  323. data/assets/images/heroes/smithsonian_cookbook.webp +0 -0
  324. data/assets/images/icons/auth-group.png +0 -0
  325. data/assets/images/icons/auth-group.webp +0 -0
  326. data/assets/images/icons/auth-group@2x.png +0 -0
  327. data/assets/images/icons/auth-group@2x.webp +0 -0
  328. data/assets/images/icons/auth-group@3x.png +0 -0
  329. data/assets/images/icons/auth-group@3x.webp +0 -0
  330. data/assets/images/icons/calendar.png +0 -0
  331. data/assets/images/icons/calendar.webp +0 -0
  332. data/assets/images/icons/calendar@2x.png +0 -0
  333. data/assets/images/icons/calendar@2x.webp +0 -0
  334. data/assets/images/icons/calendar@3x.png +0 -0
  335. data/assets/images/icons/calendar@3x.webp +0 -0
  336. data/assets/images/icons/developer.png +0 -0
  337. data/assets/images/icons/developer.webp +0 -0
  338. data/assets/images/icons/developer@2x.png +0 -0
  339. data/assets/images/icons/developer@2x.webp +0 -0
  340. data/assets/images/icons/developer@3x.png +0 -0
  341. data/assets/images/icons/developer@3x.webp +0 -0
  342. data/assets/images/icons/image.png +0 -0
  343. data/assets/images/icons/image.webp +0 -0
  344. data/assets/images/icons/image@2x.png +0 -0
  345. data/assets/images/icons/image@2x.webp +0 -0
  346. data/assets/images/icons/image@3x.png +0 -0
  347. data/assets/images/icons/image@3x.webp +0 -0
  348. data/assets/images/icons/info.png +0 -0
  349. data/assets/images/icons/info.webp +0 -0
  350. data/assets/images/icons/info@2x.png +0 -0
  351. data/assets/images/icons/info@2x.webp +0 -0
  352. data/assets/images/icons/info@3x.png +0 -0
  353. data/assets/images/icons/info@3x.webp +0 -0
  354. data/assets/images/icons/leader.png +0 -0
  355. data/assets/images/icons/leader.webp +0 -0
  356. data/assets/images/icons/leader@2x.png +0 -0
  357. data/assets/images/icons/leader@2x.webp +0 -0
  358. data/assets/images/icons/leader@3x.png +0 -0
  359. data/assets/images/icons/leader@3x.webp +0 -0
  360. data/assets/images/icons/left-arrow.png +0 -0
  361. data/assets/images/icons/left-arrow.webp +0 -0
  362. data/assets/images/icons/left-arrow@2x.png +0 -0
  363. data/assets/images/icons/left-arrow@2x.webp +0 -0
  364. data/assets/images/icons/left-arrow@3x.png +0 -0
  365. data/assets/images/icons/left-arrow@3x.webp +0 -0
  366. data/assets/images/icons/link-group.png +0 -0
  367. data/assets/images/icons/link-group.webp +0 -0
  368. data/assets/images/icons/link-group@2x.png +0 -0
  369. data/assets/images/icons/link-group@2x.webp +0 -0
  370. data/assets/images/icons/link-group@3x.png +0 -0
  371. data/assets/images/icons/link-group@3x.webp +0 -0
  372. data/assets/images/icons/link.png +0 -0
  373. data/assets/images/icons/link.webp +0 -0
  374. data/assets/images/icons/location-info.png +0 -0
  375. data/assets/images/icons/location-info.webp +0 -0
  376. data/assets/images/icons/location-info@2x.png +0 -0
  377. data/assets/images/icons/location-info@2x.webp +0 -0
  378. data/assets/images/icons/location-info@3x.png +0 -0
  379. data/assets/images/icons/location-info@3x.webp +0 -0
  380. data/assets/images/icons/map-pin.png +0 -0
  381. data/assets/images/icons/map-pin.webp +0 -0
  382. data/assets/images/icons/map-pin@2x.png +0 -0
  383. data/assets/images/icons/map-pin@2x.webp +0 -0
  384. data/assets/images/icons/map-pin@3x.png +0 -0
  385. data/assets/images/icons/map-pin@3x.webp +0 -0
  386. data/assets/images/icons/pagination-dots.png +0 -0
  387. data/assets/images/icons/pagination-dots.webp +0 -0
  388. data/assets/images/icons/pagination-dots@2x.png +0 -0
  389. data/assets/images/icons/pagination-dots@2x.webp +0 -0
  390. data/assets/images/icons/pagination-dots@3x.png +0 -0
  391. data/assets/images/icons/pagination-dots@3x.webp +0 -0
  392. data/assets/images/icons/quote.png +0 -0
  393. data/assets/images/icons/quote.webp +0 -0
  394. data/assets/images/icons/quote@2x.png +0 -0
  395. data/assets/images/icons/quote@2x.webp +0 -0
  396. data/assets/images/icons/quote@3x.png +0 -0
  397. data/assets/images/icons/quote@3x.webp +0 -0
  398. data/assets/images/icons/research.png +0 -0
  399. data/assets/images/icons/research.webp +0 -0
  400. data/assets/images/icons/research@2x.png +0 -0
  401. data/assets/images/icons/research@2x.webp +0 -0
  402. data/assets/images/icons/research@3x.png +0 -0
  403. data/assets/images/icons/research@3x.webp +0 -0
  404. data/assets/images/icons/right-arrow.png +0 -0
  405. data/assets/images/icons/right-arrow.webp +0 -0
  406. data/assets/images/icons/right-arrow@2x.png +0 -0
  407. data/assets/images/icons/right-arrow@2x.webp +0 -0
  408. data/assets/images/icons/right-arrow@3x.png +0 -0
  409. data/assets/images/icons/right-arrow@3x.webp +0 -0
  410. data/assets/images/icons/search-group.png +0 -0
  411. data/assets/images/icons/search-group.webp +0 -0
  412. data/assets/images/icons/search-group@2x.png +0 -0
  413. data/assets/images/icons/search-group@2x.webp +0 -0
  414. data/assets/images/icons/search-group@3x.png +0 -0
  415. data/assets/images/icons/search-group@3x.webp +0 -0
  416. data/assets/images/icons/shape.png +0 -0
  417. data/assets/images/icons/shape.webp +0 -0
  418. data/assets/images/icons/shape@2x.png +0 -0
  419. data/assets/images/icons/shape@2x.webp +0 -0
  420. data/assets/images/icons/shape@3x.png +0 -0
  421. data/assets/images/icons/shape@3x.webp +0 -0
  422. data/assets/images/logos/logo-blue.webp +0 -0
  423. data/assets/images/logos/logo-blue@2x.webp +0 -0
  424. data/assets/images/logos/logo-blue@3x.webp +0 -0
  425. data/assets/images/logos/logo-sm.png +0 -0
  426. data/assets/images/logos/logo-white.webp +0 -0
  427. data/assets/images/logos/logo-white@2x.webp +0 -0
  428. data/assets/images/logos/logo-white@3x.webp +0 -0
  429. data/assets/images/zeplin/delivery@3x.jpg +0 -0
  430. data/assets/images/zeplin/delivery@3x.png +0 -0
  431. data/assets/images/zeplin/delivery@3x.webp +0 -0
  432. data/assets/images/zeplin/jpg/delivery.jpg +0 -0
  433. data/assets/images/zeplin/jpg/delivery@2x.jpg +0 -0
  434. data/assets/images/zeplin/jpg/event.jpg +0 -0
  435. data/assets/images/zeplin/jpg/event@2x.jpg +0 -0
  436. data/assets/images/zeplin/jpg/event@3x.jpg +0 -0
  437. data/assets/images/zeplin/jpg/hero-1.jpg +0 -0
  438. data/assets/images/zeplin/jpg/hero-1@2x.jpg +0 -0
  439. data/assets/images/zeplin/jpg/hero-1@3x.jpg +0 -0
  440. data/assets/images/zeplin/jpg/hero-2.jpg +0 -0
  441. data/assets/images/zeplin/jpg/hero-2@2x.jpg +0 -0
  442. data/assets/images/zeplin/jpg/hero-2@3x.jpg +0 -0
  443. data/assets/images/zeplin/jpg/hero-3.jpg +0 -0
  444. data/assets/images/zeplin/jpg/hero-3@2x.jpg +0 -0
  445. data/assets/images/zeplin/jpg/hero-3@3x.jpg +0 -0
  446. data/assets/images/zeplin/jpg/logo-blue.jpg +0 -0
  447. data/assets/images/zeplin/jpg/logo-blue@2x.jpg +0 -0
  448. data/assets/images/zeplin/jpg/logo-blue@3x.jpg +0 -0
  449. data/assets/images/zeplin/jpg/logo-white.jpg +0 -0
  450. data/assets/images/zeplin/jpg/logo-white@2x.jpg +0 -0
  451. data/assets/images/zeplin/jpg/logo-white@3x.jpg +0 -0
  452. data/assets/images/zeplin/jpg/silos-1.jpg +0 -0
  453. data/assets/images/zeplin/jpg/silos-1@2x.jpg +0 -0
  454. data/assets/images/zeplin/jpg/silos-1@3x.jpg +0 -0
  455. data/assets/images/zeplin/jpg/silos-2.jpg +0 -0
  456. data/assets/images/zeplin/jpg/silos-2@2x.jpg +0 -0
  457. data/assets/images/zeplin/jpg/silos-2@3x.jpg +0 -0
  458. data/assets/images/zeplin/jpg/silos-3.jpg +0 -0
  459. data/assets/images/zeplin/jpg/silos-3@2x.jpg +0 -0
  460. data/assets/images/zeplin/jpg/silos-3@3x.jpg +0 -0
  461. data/assets/images/zeplin/png/delivery.png +0 -0
  462. data/assets/images/zeplin/png/delivery@2x.png +0 -0
  463. data/assets/images/zeplin/png/event.png +0 -0
  464. data/assets/images/zeplin/png/event@2x.png +0 -0
  465. data/assets/images/zeplin/png/event@3x.png +0 -0
  466. data/assets/images/zeplin/png/group-11-copy.png +0 -0
  467. data/assets/images/zeplin/png/group-11-copy@2x.png +0 -0
  468. data/assets/images/zeplin/png/group-11-copy@3x.png +0 -0
  469. data/assets/images/zeplin/png/group-19.png +0 -0
  470. data/assets/images/zeplin/png/group-19@2x.png +0 -0
  471. data/assets/images/zeplin/png/group-19@3x.png +0 -0
  472. data/assets/images/zeplin/png/group-24.png +0 -0
  473. data/assets/images/zeplin/png/group-24@2x.png +0 -0
  474. data/assets/images/zeplin/png/group-24@3x.png +0 -0
  475. data/assets/images/zeplin/png/hero-1.png +0 -0
  476. data/assets/images/zeplin/png/hero-1@2x.png +0 -0
  477. data/assets/images/zeplin/png/hero-2.png +0 -0
  478. data/assets/images/zeplin/png/hero-2@2x.png +0 -0
  479. data/assets/images/zeplin/png/hero-2@3x.png +0 -0
  480. data/assets/images/zeplin/png/hero-3.png +0 -0
  481. data/assets/images/zeplin/png/hero-3@2x.png +0 -0
  482. data/assets/images/zeplin/png/hero-3@3x.png +0 -0
  483. data/assets/images/zeplin/png/invalid-name.png +0 -0
  484. data/assets/images/zeplin/png/invalid-name@2x.png +0 -0
  485. data/assets/images/zeplin/png/invalid-name@3x.png +0 -0
  486. data/assets/images/zeplin/png/left-arrow.png +0 -0
  487. data/assets/images/zeplin/png/left-arrow@2x.png +0 -0
  488. data/assets/images/zeplin/png/left-arrow@3x.png +0 -0
  489. data/assets/images/zeplin/png/logo-blue.png +0 -0
  490. data/assets/images/zeplin/png/logo-blue@2x.png +0 -0
  491. data/assets/images/zeplin/png/logo-blue@3x.png +0 -0
  492. data/assets/images/zeplin/png/logo-white.png +0 -0
  493. data/assets/images/zeplin/png/logo-white@2x.png +0 -0
  494. data/assets/images/zeplin/png/logo-white@3x.png +0 -0
  495. data/assets/images/zeplin/png/noun-calendar-3896118.png +0 -0
  496. data/assets/images/zeplin/png/noun-calendar-3896118@2x.png +0 -0
  497. data/assets/images/zeplin/png/noun-calendar-3896118@3x.png +0 -0
  498. data/assets/images/zeplin/png/noun-developer-2549191.png +0 -0
  499. data/assets/images/zeplin/png/noun-developer-2549191@2x.png +0 -0
  500. data/assets/images/zeplin/png/noun-developer-2549191@3x.png +0 -0
  501. data/assets/images/zeplin/png/noun-image-3888103.png +0 -0
  502. data/assets/images/zeplin/png/noun-image-3888103@2x.png +0 -0
  503. data/assets/images/zeplin/png/noun-image-3888103@3x.png +0 -0
  504. data/assets/images/zeplin/png/noun-info-1585217.png +0 -0
  505. data/assets/images/zeplin/png/noun-info-1585217@2x.png +0 -0
  506. data/assets/images/zeplin/png/noun-info-1585217@3x.png +0 -0
  507. data/assets/images/zeplin/png/noun-leader-1478173.png +0 -0
  508. data/assets/images/zeplin/png/noun-leader-1478173@2x.png +0 -0
  509. data/assets/images/zeplin/png/noun-leader-1478173@3x.png +0 -0
  510. data/assets/images/zeplin/png/noun-location-info-261887.png +0 -0
  511. data/assets/images/zeplin/png/noun-location-info-261887@2x.png +0 -0
  512. data/assets/images/zeplin/png/noun-location-info-261887@3x.png +0 -0
  513. data/assets/images/zeplin/png/noun-map-pin-800374.png +0 -0
  514. data/assets/images/zeplin/png/noun-map-pin-800374@2x.png +0 -0
  515. data/assets/images/zeplin/png/noun-map-pin-800374@3x.png +0 -0
  516. data/assets/images/zeplin/png/noun-research-1796671.png +0 -0
  517. data/assets/images/zeplin/png/noun-research-1796671@2x.png +0 -0
  518. data/assets/images/zeplin/png/noun-research-1796671@3x.png +0 -0
  519. data/assets/images/zeplin/png/pagination-dots.png +0 -0
  520. data/assets/images/zeplin/png/pagination-dots@2x.png +0 -0
  521. data/assets/images/zeplin/png/pagination-dots@3x.png +0 -0
  522. data/assets/images/zeplin/png/right-arrow.png +0 -0
  523. data/assets/images/zeplin/png/right-arrow@2x.png +0 -0
  524. data/assets/images/zeplin/png/right-arrow@3x.png +0 -0
  525. data/assets/images/zeplin/png/shape.png +0 -0
  526. data/assets/images/zeplin/png/shape@2x.png +0 -0
  527. data/assets/images/zeplin/png/shape@3x.png +0 -0
  528. data/assets/images/zeplin/png/silos-1.png +0 -0
  529. data/assets/images/zeplin/png/silos-1@2x.png +0 -0
  530. data/assets/images/zeplin/png/silos-1@3x.png +0 -0
  531. data/assets/images/zeplin/png/silos-2.png +0 -0
  532. data/assets/images/zeplin/png/silos-2@2x.png +0 -0
  533. data/assets/images/zeplin/png/silos-2@3x.png +0 -0
  534. data/assets/images/zeplin/png/silos-3.png +0 -0
  535. data/assets/images/zeplin/png/silos-3@2x.png +0 -0
  536. data/assets/images/zeplin/png/silos-3@3x.png +0 -0
  537. data/assets/images/zeplin/svg/group-11-copy.svg +20 -0
  538. data/assets/images/zeplin/svg/group-19.svg +10 -0
  539. data/assets/images/zeplin/svg/group-24.svg +12 -0
  540. data/assets/images/zeplin/svg/invalid-name.svg +7 -0
  541. data/assets/images/zeplin/svg/left-arrow.svg +9 -0
  542. data/assets/images/zeplin/svg/noun-calendar-3896118.svg +9 -0
  543. data/assets/images/zeplin/svg/noun-developer-2549191.svg +11 -0
  544. data/assets/images/zeplin/svg/noun-image-3888103.svg +10 -0
  545. data/assets/images/zeplin/svg/noun-info-1585217.svg +9 -0
  546. data/assets/images/zeplin/svg/noun-leader-1478173.svg +12 -0
  547. data/assets/images/zeplin/svg/noun-location-info-261887.svg +12 -0
  548. data/assets/images/zeplin/svg/noun-map-pin-800374.svg +9 -0
  549. data/assets/images/zeplin/svg/noun-research-1796671.svg +13 -0
  550. data/assets/images/zeplin/svg/pagination-dots.svg +11 -0
  551. data/assets/images/zeplin/svg/right-arrow.svg +9 -0
  552. data/assets/images/zeplin/svg/shape.svg +7 -0
  553. data/assets/images/zeplin/webp/delivery.webp +0 -0
  554. data/assets/images/zeplin/webp/delivery@2x.webp +0 -0
  555. data/assets/images/zeplin/webp/event.webp +0 -0
  556. data/assets/images/zeplin/webp/event@2x.webp +0 -0
  557. data/assets/images/zeplin/webp/event@3x.webp +0 -0
  558. data/assets/images/zeplin/webp/group-11-copy.webp +0 -0
  559. data/assets/images/zeplin/webp/group-11-copy@2x.webp +0 -0
  560. data/assets/images/zeplin/webp/group-11-copy@3x.webp +0 -0
  561. data/assets/images/zeplin/webp/group-19.webp +0 -0
  562. data/assets/images/zeplin/webp/group-19@2x.webp +0 -0
  563. data/assets/images/zeplin/webp/group-19@3x.webp +0 -0
  564. data/assets/images/zeplin/webp/group-24.webp +0 -0
  565. data/assets/images/zeplin/webp/group-24@2x.webp +0 -0
  566. data/assets/images/zeplin/webp/group-24@3x.webp +0 -0
  567. data/assets/images/zeplin/webp/hero-1.webp +0 -0
  568. data/assets/images/zeplin/webp/hero-1@2x.webp +0 -0
  569. data/assets/images/zeplin/webp/hero-2.webp +0 -0
  570. data/assets/images/zeplin/webp/hero-2@2x.webp +0 -0
  571. data/assets/images/zeplin/webp/hero-2@3x.webp +0 -0
  572. data/assets/images/zeplin/webp/hero-3.webp +0 -0
  573. data/assets/images/zeplin/webp/hero-3@2x.webp +0 -0
  574. data/assets/images/zeplin/webp/hero-3@3x.webp +0 -0
  575. data/assets/images/zeplin/webp/invalid-name.webp +0 -0
  576. data/assets/images/zeplin/webp/invalid-name@2x.webp +0 -0
  577. data/assets/images/zeplin/webp/invalid-name@3x.webp +0 -0
  578. data/assets/images/zeplin/webp/left-arrow.webp +0 -0
  579. data/assets/images/zeplin/webp/left-arrow@2x.webp +0 -0
  580. data/assets/images/zeplin/webp/left-arrow@3x.webp +0 -0
  581. data/assets/images/zeplin/webp/logo-blue.webp +0 -0
  582. data/assets/images/zeplin/webp/logo-blue@2x.webp +0 -0
  583. data/assets/images/zeplin/webp/logo-blue@3x.webp +0 -0
  584. data/assets/images/zeplin/webp/logo-white.webp +0 -0
  585. data/assets/images/zeplin/webp/logo-white@2x.webp +0 -0
  586. data/assets/images/zeplin/webp/logo-white@3x.webp +0 -0
  587. data/assets/images/zeplin/webp/noun-calendar-3896118.webp +0 -0
  588. data/assets/images/zeplin/webp/noun-calendar-3896118@2x.webp +0 -0
  589. data/assets/images/zeplin/webp/noun-calendar-3896118@3x.webp +0 -0
  590. data/assets/images/zeplin/webp/noun-developer-2549191.webp +0 -0
  591. data/assets/images/zeplin/webp/noun-developer-2549191@2x.webp +0 -0
  592. data/assets/images/zeplin/webp/noun-developer-2549191@3x.webp +0 -0
  593. data/assets/images/zeplin/webp/noun-image-3888103.webp +0 -0
  594. data/assets/images/zeplin/webp/noun-image-3888103@2x.webp +0 -0
  595. data/assets/images/zeplin/webp/noun-image-3888103@3x.webp +0 -0
  596. data/assets/images/zeplin/webp/noun-info-1585217.webp +0 -0
  597. data/assets/images/zeplin/webp/noun-info-1585217@2x.webp +0 -0
  598. data/assets/images/zeplin/webp/noun-info-1585217@3x.webp +0 -0
  599. data/assets/images/zeplin/webp/noun-leader-1478173.webp +0 -0
  600. data/assets/images/zeplin/webp/noun-leader-1478173@2x.webp +0 -0
  601. data/assets/images/zeplin/webp/noun-leader-1478173@3x.webp +0 -0
  602. data/assets/images/zeplin/webp/noun-location-info-261887.webp +0 -0
  603. data/assets/images/zeplin/webp/noun-location-info-261887@2x.webp +0 -0
  604. data/assets/images/zeplin/webp/noun-location-info-261887@3x.webp +0 -0
  605. data/assets/images/zeplin/webp/noun-map-pin-800374.webp +0 -0
  606. data/assets/images/zeplin/webp/noun-map-pin-800374@2x.webp +0 -0
  607. data/assets/images/zeplin/webp/noun-map-pin-800374@3x.webp +0 -0
  608. data/assets/images/zeplin/webp/noun-research-1796671.webp +0 -0
  609. data/assets/images/zeplin/webp/noun-research-1796671@2x.webp +0 -0
  610. data/assets/images/zeplin/webp/noun-research-1796671@3x.webp +0 -0
  611. data/assets/images/zeplin/webp/pagination-dots.webp +0 -0
  612. data/assets/images/zeplin/webp/pagination-dots@2x.webp +0 -0
  613. data/assets/images/zeplin/webp/pagination-dots@3x.webp +0 -0
  614. data/assets/images/zeplin/webp/right-arrow.webp +0 -0
  615. data/assets/images/zeplin/webp/right-arrow@2x.webp +0 -0
  616. data/assets/images/zeplin/webp/right-arrow@3x.webp +0 -0
  617. data/assets/images/zeplin/webp/shape.webp +0 -0
  618. data/assets/images/zeplin/webp/shape@2x.webp +0 -0
  619. data/assets/images/zeplin/webp/shape@3x.webp +0 -0
  620. data/assets/images/zeplin/webp/silos-1.webp +0 -0
  621. data/assets/images/zeplin/webp/silos-1@2x.webp +0 -0
  622. data/assets/images/zeplin/webp/silos-1@3x.webp +0 -0
  623. data/assets/images/zeplin/webp/silos-2.webp +0 -0
  624. data/assets/images/zeplin/webp/silos-2@2x.webp +0 -0
  625. data/assets/images/zeplin/webp/silos-2@3x.webp +0 -0
  626. data/assets/images/zeplin/webp/silos-3.webp +0 -0
  627. data/assets/images/zeplin/webp/silos-3@2x.webp +0 -0
  628. data/assets/images/zeplin/webp/silos-3@3x.webp +0 -0
  629. data/assets/js/carouselInit.js +8 -0
  630. data/assets/js/copyCodeBlock.js +15 -0
  631. data/assets/js/deleteButton.js +9 -0
  632. data/assets/js/tabSwitch.js +24 -0
  633. data/assets/mstile-150x150.png +0 -0
  634. data/assets/safari-pinned-tab.svg +61 -0
  635. data/assets/site.webmanifest +19 -0
  636. data/lib/iiifc.rb +10 -0
  637. data/lib/tasks/build.rake +41 -0
  638. data/lib/tasks/test.rake +59 -0
  639. metadata +786 -0
@@ -0,0 +1,2478 @@
1
+ /*!
2
+ * Sizzle CSS Selector Engine v2.3.6
3
+ * https://sizzlejs.com/
4
+ *
5
+ * Copyright JS Foundation and other contributors
6
+ * Released under the MIT license
7
+ * https://js.foundation/
8
+ *
9
+ * Date: 2021-02-16
10
+ */
11
+ ( function( window ) {
12
+ var i,
13
+ support,
14
+ Expr,
15
+ getText,
16
+ isXML,
17
+ tokenize,
18
+ compile,
19
+ select,
20
+ outermostContext,
21
+ sortInput,
22
+ hasDuplicate,
23
+
24
+ // Local document vars
25
+ setDocument,
26
+ document,
27
+ docElem,
28
+ documentIsHTML,
29
+ rbuggyQSA,
30
+ rbuggyMatches,
31
+ matches,
32
+ contains,
33
+
34
+ // Instance-specific data
35
+ expando = "sizzle" + 1 * new Date(),
36
+ preferredDoc = window.document,
37
+ dirruns = 0,
38
+ done = 0,
39
+ classCache = createCache(),
40
+ tokenCache = createCache(),
41
+ compilerCache = createCache(),
42
+ nonnativeSelectorCache = createCache(),
43
+ sortOrder = function( a, b ) {
44
+ if ( a === b ) {
45
+ hasDuplicate = true;
46
+ }
47
+ return 0;
48
+ },
49
+
50
+ // Instance methods
51
+ hasOwn = ( {} ).hasOwnProperty,
52
+ arr = [],
53
+ pop = arr.pop,
54
+ pushNative = arr.push,
55
+ push = arr.push,
56
+ slice = arr.slice,
57
+
58
+ // Use a stripped-down indexOf as it's faster than native
59
+ // https://jsperf.com/thor-indexof-vs-for/5
60
+ indexOf = function( list, elem ) {
61
+ var i = 0,
62
+ len = list.length;
63
+ for ( ; i < len; i++ ) {
64
+ if ( list[ i ] === elem ) {
65
+ return i;
66
+ }
67
+ }
68
+ return -1;
69
+ },
70
+
71
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
72
+ "ismap|loop|multiple|open|readonly|required|scoped",
73
+
74
+ // Regular expressions
75
+
76
+ // http://www.w3.org/TR/css3-selectors/#whitespace
77
+ whitespace = "[\\x20\\t\\r\\n\\f]",
78
+
79
+ // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
80
+ identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
81
+ "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
82
+
83
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
84
+ attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
85
+
86
+ // Operator (capture 2)
87
+ "*([*^$|!~]?=)" + whitespace +
88
+
89
+ // "Attribute values must be CSS identifiers [capture 5]
90
+ // or strings [capture 3 or capture 4]"
91
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
92
+ whitespace + "*\\]",
93
+
94
+ pseudos = ":(" + identifier + ")(?:\\((" +
95
+
96
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
97
+ // 1. quoted (capture 3; capture 4 or capture 5)
98
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
99
+
100
+ // 2. simple (capture 6)
101
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
102
+
103
+ // 3. anything else (capture 2)
104
+ ".*" +
105
+ ")\\)|)",
106
+
107
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
108
+ rwhitespace = new RegExp( whitespace + "+", "g" ),
109
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
110
+ whitespace + "+$", "g" ),
111
+
112
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
113
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
114
+ "*" ),
115
+ rdescend = new RegExp( whitespace + "|>" ),
116
+
117
+ rpseudo = new RegExp( pseudos ),
118
+ ridentifier = new RegExp( "^" + identifier + "$" ),
119
+
120
+ matchExpr = {
121
+ "ID": new RegExp( "^#(" + identifier + ")" ),
122
+ "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
123
+ "TAG": new RegExp( "^(" + identifier + "|[*])" ),
124
+ "ATTR": new RegExp( "^" + attributes ),
125
+ "PSEUDO": new RegExp( "^" + pseudos ),
126
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
127
+ whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
128
+ whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
129
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
130
+
131
+ // For use in libraries implementing .is()
132
+ // We use this for POS matching in `select`
133
+ "needsContext": new RegExp( "^" + whitespace +
134
+ "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
135
+ "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
136
+ },
137
+
138
+ rhtml = /HTML$/i,
139
+ rinputs = /^(?:input|select|textarea|button)$/i,
140
+ rheader = /^h\d$/i,
141
+
142
+ rnative = /^[^{]+\{\s*\[native \w/,
143
+
144
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
145
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
146
+
147
+ rsibling = /[+~]/,
148
+
149
+ // CSS escapes
150
+ // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
151
+ runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
152
+ funescape = function( escape, nonHex ) {
153
+ var high = "0x" + escape.slice( 1 ) - 0x10000;
154
+
155
+ return nonHex ?
156
+
157
+ // Strip the backslash prefix from a non-hex escape sequence
158
+ nonHex :
159
+
160
+ // Replace a hexadecimal escape sequence with the encoded Unicode code point
161
+ // Support: IE <=11+
162
+ // For values outside the Basic Multilingual Plane (BMP), manually construct a
163
+ // surrogate pair
164
+ high < 0 ?
165
+ String.fromCharCode( high + 0x10000 ) :
166
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
167
+ },
168
+
169
+ // CSS string/identifier serialization
170
+ // https://drafts.csswg.org/cssom/#common-serializing-idioms
171
+ rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
172
+ fcssescape = function( ch, asCodePoint ) {
173
+ if ( asCodePoint ) {
174
+
175
+ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
176
+ if ( ch === "\0" ) {
177
+ return "\uFFFD";
178
+ }
179
+
180
+ // Control characters and (dependent upon position) numbers get escaped as code points
181
+ return ch.slice( 0, -1 ) + "\\" +
182
+ ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
183
+ }
184
+
185
+ // Other potentially-special ASCII characters get backslash-escaped
186
+ return "\\" + ch;
187
+ },
188
+
189
+ // Used for iframes
190
+ // See setDocument()
191
+ // Removing the function wrapper causes a "Permission Denied"
192
+ // error in IE
193
+ unloadHandler = function() {
194
+ setDocument();
195
+ },
196
+
197
+ inDisabledFieldset = addCombinator(
198
+ function( elem ) {
199
+ return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
200
+ },
201
+ { dir: "parentNode", next: "legend" }
202
+ );
203
+
204
+ // Optimize for push.apply( _, NodeList )
205
+ try {
206
+ push.apply(
207
+ ( arr = slice.call( preferredDoc.childNodes ) ),
208
+ preferredDoc.childNodes
209
+ );
210
+
211
+ // Support: Android<4.0
212
+ // Detect silently failing push.apply
213
+ // eslint-disable-next-line no-unused-expressions
214
+ arr[ preferredDoc.childNodes.length ].nodeType;
215
+ } catch ( e ) {
216
+ push = { apply: arr.length ?
217
+
218
+ // Leverage slice if possible
219
+ function( target, els ) {
220
+ pushNative.apply( target, slice.call( els ) );
221
+ } :
222
+
223
+ // Support: IE<9
224
+ // Otherwise append directly
225
+ function( target, els ) {
226
+ var j = target.length,
227
+ i = 0;
228
+
229
+ // Can't trust NodeList.length
230
+ while ( ( target[ j++ ] = els[ i++ ] ) ) {}
231
+ target.length = j - 1;
232
+ }
233
+ };
234
+ }
235
+
236
+ function Sizzle( selector, context, results, seed ) {
237
+ var m, i, elem, nid, match, groups, newSelector,
238
+ newContext = context && context.ownerDocument,
239
+
240
+ // nodeType defaults to 9, since context defaults to document
241
+ nodeType = context ? context.nodeType : 9;
242
+
243
+ results = results || [];
244
+
245
+ // Return early from calls with invalid selector or context
246
+ if ( typeof selector !== "string" || !selector ||
247
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
248
+
249
+ return results;
250
+ }
251
+
252
+ // Try to shortcut find operations (as opposed to filters) in HTML documents
253
+ if ( !seed ) {
254
+ setDocument( context );
255
+ context = context || document;
256
+
257
+ if ( documentIsHTML ) {
258
+
259
+ // If the selector is sufficiently simple, try using a "get*By*" DOM method
260
+ // (excepting DocumentFragment context, where the methods don't exist)
261
+ if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
262
+
263
+ // ID selector
264
+ if ( ( m = match[ 1 ] ) ) {
265
+
266
+ // Document context
267
+ if ( nodeType === 9 ) {
268
+ if ( ( elem = context.getElementById( m ) ) ) {
269
+
270
+ // Support: IE, Opera, Webkit
271
+ // TODO: identify versions
272
+ // getElementById can match elements by name instead of ID
273
+ if ( elem.id === m ) {
274
+ results.push( elem );
275
+ return results;
276
+ }
277
+ } else {
278
+ return results;
279
+ }
280
+
281
+ // Element context
282
+ } else {
283
+
284
+ // Support: IE, Opera, Webkit
285
+ // TODO: identify versions
286
+ // getElementById can match elements by name instead of ID
287
+ if ( newContext && ( elem = newContext.getElementById( m ) ) &&
288
+ contains( context, elem ) &&
289
+ elem.id === m ) {
290
+
291
+ results.push( elem );
292
+ return results;
293
+ }
294
+ }
295
+
296
+ // Type selector
297
+ } else if ( match[ 2 ] ) {
298
+ push.apply( results, context.getElementsByTagName( selector ) );
299
+ return results;
300
+
301
+ // Class selector
302
+ } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
303
+ context.getElementsByClassName ) {
304
+
305
+ push.apply( results, context.getElementsByClassName( m ) );
306
+ return results;
307
+ }
308
+ }
309
+
310
+ // Take advantage of querySelectorAll
311
+ if ( support.qsa &&
312
+ !nonnativeSelectorCache[ selector + " " ] &&
313
+ ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
314
+
315
+ // Support: IE 8 only
316
+ // Exclude object elements
317
+ ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
318
+
319
+ newSelector = selector;
320
+ newContext = context;
321
+
322
+ // qSA considers elements outside a scoping root when evaluating child or
323
+ // descendant combinators, which is not what we want.
324
+ // In such cases, we work around the behavior by prefixing every selector in the
325
+ // list with an ID selector referencing the scope context.
326
+ // The technique has to be used as well when a leading combinator is used
327
+ // as such selectors are not recognized by querySelectorAll.
328
+ // Thanks to Andrew Dupont for this technique.
329
+ if ( nodeType === 1 &&
330
+ ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
331
+
332
+ // Expand context for sibling selectors
333
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
334
+ context;
335
+
336
+ // We can use :scope instead of the ID hack if the browser
337
+ // supports it & if we're not changing the context.
338
+ if ( newContext !== context || !support.scope ) {
339
+
340
+ // Capture the context ID, setting it first if necessary
341
+ if ( ( nid = context.getAttribute( "id" ) ) ) {
342
+ nid = nid.replace( rcssescape, fcssescape );
343
+ } else {
344
+ context.setAttribute( "id", ( nid = expando ) );
345
+ }
346
+ }
347
+
348
+ // Prefix every selector in the list
349
+ groups = tokenize( selector );
350
+ i = groups.length;
351
+ while ( i-- ) {
352
+ groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
353
+ toSelector( groups[ i ] );
354
+ }
355
+ newSelector = groups.join( "," );
356
+ }
357
+
358
+ try {
359
+ push.apply( results,
360
+ newContext.querySelectorAll( newSelector )
361
+ );
362
+ return results;
363
+ } catch ( qsaError ) {
364
+ nonnativeSelectorCache( selector, true );
365
+ } finally {
366
+ if ( nid === expando ) {
367
+ context.removeAttribute( "id" );
368
+ }
369
+ }
370
+ }
371
+ }
372
+ }
373
+
374
+ // All others
375
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
376
+ }
377
+
378
+ /**
379
+ * Create key-value caches of limited size
380
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
381
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
382
+ * deleting the oldest entry
383
+ */
384
+ function createCache() {
385
+ var keys = [];
386
+
387
+ function cache( key, value ) {
388
+
389
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
390
+ if ( keys.push( key + " " ) > Expr.cacheLength ) {
391
+
392
+ // Only keep the most recent entries
393
+ delete cache[ keys.shift() ];
394
+ }
395
+ return ( cache[ key + " " ] = value );
396
+ }
397
+ return cache;
398
+ }
399
+
400
+ /**
401
+ * Mark a function for special use by Sizzle
402
+ * @param {Function} fn The function to mark
403
+ */
404
+ function markFunction( fn ) {
405
+ fn[ expando ] = true;
406
+ return fn;
407
+ }
408
+
409
+ /**
410
+ * Support testing using an element
411
+ * @param {Function} fn Passed the created element and returns a boolean result
412
+ */
413
+ function assert( fn ) {
414
+ var el = document.createElement( "fieldset" );
415
+
416
+ try {
417
+ return !!fn( el );
418
+ } catch ( e ) {
419
+ return false;
420
+ } finally {
421
+
422
+ // Remove from its parent by default
423
+ if ( el.parentNode ) {
424
+ el.parentNode.removeChild( el );
425
+ }
426
+
427
+ // release memory in IE
428
+ el = null;
429
+ }
430
+ }
431
+
432
+ /**
433
+ * Adds the same handler for all of the specified attrs
434
+ * @param {String} attrs Pipe-separated list of attributes
435
+ * @param {Function} handler The method that will be applied
436
+ */
437
+ function addHandle( attrs, handler ) {
438
+ var arr = attrs.split( "|" ),
439
+ i = arr.length;
440
+
441
+ while ( i-- ) {
442
+ Expr.attrHandle[ arr[ i ] ] = handler;
443
+ }
444
+ }
445
+
446
+ /**
447
+ * Checks document order of two siblings
448
+ * @param {Element} a
449
+ * @param {Element} b
450
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
451
+ */
452
+ function siblingCheck( a, b ) {
453
+ var cur = b && a,
454
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
455
+ a.sourceIndex - b.sourceIndex;
456
+
457
+ // Use IE sourceIndex if available on both nodes
458
+ if ( diff ) {
459
+ return diff;
460
+ }
461
+
462
+ // Check if b follows a
463
+ if ( cur ) {
464
+ while ( ( cur = cur.nextSibling ) ) {
465
+ if ( cur === b ) {
466
+ return -1;
467
+ }
468
+ }
469
+ }
470
+
471
+ return a ? 1 : -1;
472
+ }
473
+
474
+ /**
475
+ * Returns a function to use in pseudos for input types
476
+ * @param {String} type
477
+ */
478
+ function createInputPseudo( type ) {
479
+ return function( elem ) {
480
+ var name = elem.nodeName.toLowerCase();
481
+ return name === "input" && elem.type === type;
482
+ };
483
+ }
484
+
485
+ /**
486
+ * Returns a function to use in pseudos for buttons
487
+ * @param {String} type
488
+ */
489
+ function createButtonPseudo( type ) {
490
+ return function( elem ) {
491
+ var name = elem.nodeName.toLowerCase();
492
+ return ( name === "input" || name === "button" ) && elem.type === type;
493
+ };
494
+ }
495
+
496
+ /**
497
+ * Returns a function to use in pseudos for :enabled/:disabled
498
+ * @param {Boolean} disabled true for :disabled; false for :enabled
499
+ */
500
+ function createDisabledPseudo( disabled ) {
501
+
502
+ // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
503
+ return function( elem ) {
504
+
505
+ // Only certain elements can match :enabled or :disabled
506
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
507
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
508
+ if ( "form" in elem ) {
509
+
510
+ // Check for inherited disabledness on relevant non-disabled elements:
511
+ // * listed form-associated elements in a disabled fieldset
512
+ // https://html.spec.whatwg.org/multipage/forms.html#category-listed
513
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
514
+ // * option elements in a disabled optgroup
515
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
516
+ // All such elements have a "form" property.
517
+ if ( elem.parentNode && elem.disabled === false ) {
518
+
519
+ // Option elements defer to a parent optgroup if present
520
+ if ( "label" in elem ) {
521
+ if ( "label" in elem.parentNode ) {
522
+ return elem.parentNode.disabled === disabled;
523
+ } else {
524
+ return elem.disabled === disabled;
525
+ }
526
+ }
527
+
528
+ // Support: IE 6 - 11
529
+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors
530
+ return elem.isDisabled === disabled ||
531
+
532
+ // Where there is no isDisabled, check manually
533
+ /* jshint -W018 */
534
+ elem.isDisabled !== !disabled &&
535
+ inDisabledFieldset( elem ) === disabled;
536
+ }
537
+
538
+ return elem.disabled === disabled;
539
+
540
+ // Try to winnow out elements that can't be disabled before trusting the disabled property.
541
+ // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
542
+ // even exist on them, let alone have a boolean value.
543
+ } else if ( "label" in elem ) {
544
+ return elem.disabled === disabled;
545
+ }
546
+
547
+ // Remaining elements are neither :enabled nor :disabled
548
+ return false;
549
+ };
550
+ }
551
+
552
+ /**
553
+ * Returns a function to use in pseudos for positionals
554
+ * @param {Function} fn
555
+ */
556
+ function createPositionalPseudo( fn ) {
557
+ return markFunction( function( argument ) {
558
+ argument = +argument;
559
+ return markFunction( function( seed, matches ) {
560
+ var j,
561
+ matchIndexes = fn( [], seed.length, argument ),
562
+ i = matchIndexes.length;
563
+
564
+ // Match elements found at the specified indexes
565
+ while ( i-- ) {
566
+ if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
567
+ seed[ j ] = !( matches[ j ] = seed[ j ] );
568
+ }
569
+ }
570
+ } );
571
+ } );
572
+ }
573
+
574
+ /**
575
+ * Checks a node for validity as a Sizzle context
576
+ * @param {Element|Object=} context
577
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
578
+ */
579
+ function testContext( context ) {
580
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
581
+ }
582
+
583
+ // Expose support vars for convenience
584
+ support = Sizzle.support = {};
585
+
586
+ /**
587
+ * Detects XML nodes
588
+ * @param {Element|Object} elem An element or a document
589
+ * @returns {Boolean} True iff elem is a non-HTML XML node
590
+ */
591
+ isXML = Sizzle.isXML = function( elem ) {
592
+ var namespace = elem && elem.namespaceURI,
593
+ docElem = elem && ( elem.ownerDocument || elem ).documentElement;
594
+
595
+ // Support: IE <=8
596
+ // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
597
+ // https://bugs.jquery.com/ticket/4833
598
+ return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
599
+ };
600
+
601
+ /**
602
+ * Sets document-related variables once based on the current document
603
+ * @param {Element|Object} [doc] An element or document object to use to set the document
604
+ * @returns {Object} Returns the current document
605
+ */
606
+ setDocument = Sizzle.setDocument = function( node ) {
607
+ var hasCompare, subWindow,
608
+ doc = node ? node.ownerDocument || node : preferredDoc;
609
+
610
+ // Return early if doc is invalid or already selected
611
+ // Support: IE 11+, Edge 17 - 18+
612
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
613
+ // two documents; shallow comparisons work.
614
+ // eslint-disable-next-line eqeqeq
615
+ if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
616
+ return document;
617
+ }
618
+
619
+ // Update global variables
620
+ document = doc;
621
+ docElem = document.documentElement;
622
+ documentIsHTML = !isXML( document );
623
+
624
+ // Support: IE 9 - 11+, Edge 12 - 18+
625
+ // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
626
+ // Support: IE 11+, Edge 17 - 18+
627
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
628
+ // two documents; shallow comparisons work.
629
+ // eslint-disable-next-line eqeqeq
630
+ if ( preferredDoc != document &&
631
+ ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
632
+
633
+ // Support: IE 11, Edge
634
+ if ( subWindow.addEventListener ) {
635
+ subWindow.addEventListener( "unload", unloadHandler, false );
636
+
637
+ // Support: IE 9 - 10 only
638
+ } else if ( subWindow.attachEvent ) {
639
+ subWindow.attachEvent( "onunload", unloadHandler );
640
+ }
641
+ }
642
+
643
+ // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
644
+ // Safari 4 - 5 only, Opera <=11.6 - 12.x only
645
+ // IE/Edge & older browsers don't support the :scope pseudo-class.
646
+ // Support: Safari 6.0 only
647
+ // Safari 6.0 supports :scope but it's an alias of :root there.
648
+ support.scope = assert( function( el ) {
649
+ docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
650
+ return typeof el.querySelectorAll !== "undefined" &&
651
+ !el.querySelectorAll( ":scope fieldset div" ).length;
652
+ } );
653
+
654
+ /* Attributes
655
+ ---------------------------------------------------------------------- */
656
+
657
+ // Support: IE<8
658
+ // Verify that getAttribute really returns attributes and not properties
659
+ // (excepting IE8 booleans)
660
+ support.attributes = assert( function( el ) {
661
+ el.className = "i";
662
+ return !el.getAttribute( "className" );
663
+ } );
664
+
665
+ /* getElement(s)By*
666
+ ---------------------------------------------------------------------- */
667
+
668
+ // Check if getElementsByTagName("*") returns only elements
669
+ support.getElementsByTagName = assert( function( el ) {
670
+ el.appendChild( document.createComment( "" ) );
671
+ return !el.getElementsByTagName( "*" ).length;
672
+ } );
673
+
674
+ // Support: IE<9
675
+ support.getElementsByClassName = rnative.test( document.getElementsByClassName );
676
+
677
+ // Support: IE<10
678
+ // Check if getElementById returns elements by name
679
+ // The broken getElementById methods don't pick up programmatically-set names,
680
+ // so use a roundabout getElementsByName test
681
+ support.getById = assert( function( el ) {
682
+ docElem.appendChild( el ).id = expando;
683
+ return !document.getElementsByName || !document.getElementsByName( expando ).length;
684
+ } );
685
+
686
+ // ID filter and find
687
+ if ( support.getById ) {
688
+ Expr.filter[ "ID" ] = function( id ) {
689
+ var attrId = id.replace( runescape, funescape );
690
+ return function( elem ) {
691
+ return elem.getAttribute( "id" ) === attrId;
692
+ };
693
+ };
694
+ Expr.find[ "ID" ] = function( id, context ) {
695
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
696
+ var elem = context.getElementById( id );
697
+ return elem ? [ elem ] : [];
698
+ }
699
+ };
700
+ } else {
701
+ Expr.filter[ "ID" ] = function( id ) {
702
+ var attrId = id.replace( runescape, funescape );
703
+ return function( elem ) {
704
+ var node = typeof elem.getAttributeNode !== "undefined" &&
705
+ elem.getAttributeNode( "id" );
706
+ return node && node.value === attrId;
707
+ };
708
+ };
709
+
710
+ // Support: IE 6 - 7 only
711
+ // getElementById is not reliable as a find shortcut
712
+ Expr.find[ "ID" ] = function( id, context ) {
713
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
714
+ var node, i, elems,
715
+ elem = context.getElementById( id );
716
+
717
+ if ( elem ) {
718
+
719
+ // Verify the id attribute
720
+ node = elem.getAttributeNode( "id" );
721
+ if ( node && node.value === id ) {
722
+ return [ elem ];
723
+ }
724
+
725
+ // Fall back on getElementsByName
726
+ elems = context.getElementsByName( id );
727
+ i = 0;
728
+ while ( ( elem = elems[ i++ ] ) ) {
729
+ node = elem.getAttributeNode( "id" );
730
+ if ( node && node.value === id ) {
731
+ return [ elem ];
732
+ }
733
+ }
734
+ }
735
+
736
+ return [];
737
+ }
738
+ };
739
+ }
740
+
741
+ // Tag
742
+ Expr.find[ "TAG" ] = support.getElementsByTagName ?
743
+ function( tag, context ) {
744
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
745
+ return context.getElementsByTagName( tag );
746
+
747
+ // DocumentFragment nodes don't have gEBTN
748
+ } else if ( support.qsa ) {
749
+ return context.querySelectorAll( tag );
750
+ }
751
+ } :
752
+
753
+ function( tag, context ) {
754
+ var elem,
755
+ tmp = [],
756
+ i = 0,
757
+
758
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
759
+ results = context.getElementsByTagName( tag );
760
+
761
+ // Filter out possible comments
762
+ if ( tag === "*" ) {
763
+ while ( ( elem = results[ i++ ] ) ) {
764
+ if ( elem.nodeType === 1 ) {
765
+ tmp.push( elem );
766
+ }
767
+ }
768
+
769
+ return tmp;
770
+ }
771
+ return results;
772
+ };
773
+
774
+ // Class
775
+ Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
776
+ if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
777
+ return context.getElementsByClassName( className );
778
+ }
779
+ };
780
+
781
+ /* QSA/matchesSelector
782
+ ---------------------------------------------------------------------- */
783
+
784
+ // QSA and matchesSelector support
785
+
786
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
787
+ rbuggyMatches = [];
788
+
789
+ // qSa(:focus) reports false when true (Chrome 21)
790
+ // We allow this because of a bug in IE8/9 that throws an error
791
+ // whenever `document.activeElement` is accessed on an iframe
792
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
793
+ // See https://bugs.jquery.com/ticket/13378
794
+ rbuggyQSA = [];
795
+
796
+ if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
797
+
798
+ // Build QSA regex
799
+ // Regex strategy adopted from Diego Perini
800
+ assert( function( el ) {
801
+
802
+ var input;
803
+
804
+ // Select is set to empty string on purpose
805
+ // This is to test IE's treatment of not explicitly
806
+ // setting a boolean content attribute,
807
+ // since its presence should be enough
808
+ // https://bugs.jquery.com/ticket/12359
809
+ docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
810
+ "<select id='" + expando + "-\r\\' msallowcapture=''>" +
811
+ "<option selected=''></option></select>";
812
+
813
+ // Support: IE8, Opera 11-12.16
814
+ // Nothing should be selected when empty strings follow ^= or $= or *=
815
+ // The test attribute must be unknown in Opera but "safe" for WinRT
816
+ // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
817
+ if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
818
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
819
+ }
820
+
821
+ // Support: IE8
822
+ // Boolean attributes and "value" are not treated correctly
823
+ if ( !el.querySelectorAll( "[selected]" ).length ) {
824
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
825
+ }
826
+
827
+ // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
828
+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
829
+ rbuggyQSA.push( "~=" );
830
+ }
831
+
832
+ // Support: IE 11+, Edge 15 - 18+
833
+ // IE 11/Edge don't find elements on a `[name='']` query in some cases.
834
+ // Adding a temporary attribute to the document before the selection works
835
+ // around the issue.
836
+ // Interestingly, IE 10 & older don't seem to have the issue.
837
+ input = document.createElement( "input" );
838
+ input.setAttribute( "name", "" );
839
+ el.appendChild( input );
840
+ if ( !el.querySelectorAll( "[name='']" ).length ) {
841
+ rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
842
+ whitespace + "*(?:''|\"\")" );
843
+ }
844
+
845
+ // Webkit/Opera - :checked should return selected option elements
846
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
847
+ // IE8 throws error here and will not see later tests
848
+ if ( !el.querySelectorAll( ":checked" ).length ) {
849
+ rbuggyQSA.push( ":checked" );
850
+ }
851
+
852
+ // Support: Safari 8+, iOS 8+
853
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
854
+ // In-page `selector#id sibling-combinator selector` fails
855
+ if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
856
+ rbuggyQSA.push( ".#.+[+~]" );
857
+ }
858
+
859
+ // Support: Firefox <=3.6 - 5 only
860
+ // Old Firefox doesn't throw on a badly-escaped identifier.
861
+ el.querySelectorAll( "\\\f" );
862
+ rbuggyQSA.push( "[\\r\\n\\f]" );
863
+ } );
864
+
865
+ assert( function( el ) {
866
+ el.innerHTML = "<a href='' disabled='disabled'></a>" +
867
+ "<select disabled='disabled'><option/></select>";
868
+
869
+ // Support: Windows 8 Native Apps
870
+ // The type and name attributes are restricted during .innerHTML assignment
871
+ var input = document.createElement( "input" );
872
+ input.setAttribute( "type", "hidden" );
873
+ el.appendChild( input ).setAttribute( "name", "D" );
874
+
875
+ // Support: IE8
876
+ // Enforce case-sensitivity of name attribute
877
+ if ( el.querySelectorAll( "[name=d]" ).length ) {
878
+ rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
879
+ }
880
+
881
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
882
+ // IE8 throws error here and will not see later tests
883
+ if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
884
+ rbuggyQSA.push( ":enabled", ":disabled" );
885
+ }
886
+
887
+ // Support: IE9-11+
888
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
889
+ docElem.appendChild( el ).disabled = true;
890
+ if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
891
+ rbuggyQSA.push( ":enabled", ":disabled" );
892
+ }
893
+
894
+ // Support: Opera 10 - 11 only
895
+ // Opera 10-11 does not throw on post-comma invalid pseudos
896
+ el.querySelectorAll( "*,:x" );
897
+ rbuggyQSA.push( ",.*:" );
898
+ } );
899
+ }
900
+
901
+ if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
902
+ docElem.webkitMatchesSelector ||
903
+ docElem.mozMatchesSelector ||
904
+ docElem.oMatchesSelector ||
905
+ docElem.msMatchesSelector ) ) ) ) {
906
+
907
+ assert( function( el ) {
908
+
909
+ // Check to see if it's possible to do matchesSelector
910
+ // on a disconnected node (IE 9)
911
+ support.disconnectedMatch = matches.call( el, "*" );
912
+
913
+ // This should fail with an exception
914
+ // Gecko does not error, returns false instead
915
+ matches.call( el, "[s!='']:x" );
916
+ rbuggyMatches.push( "!=", pseudos );
917
+ } );
918
+ }
919
+
920
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
921
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
922
+
923
+ /* Contains
924
+ ---------------------------------------------------------------------- */
925
+ hasCompare = rnative.test( docElem.compareDocumentPosition );
926
+
927
+ // Element contains another
928
+ // Purposefully self-exclusive
929
+ // As in, an element does not contain itself
930
+ contains = hasCompare || rnative.test( docElem.contains ) ?
931
+ function( a, b ) {
932
+ var adown = a.nodeType === 9 ? a.documentElement : a,
933
+ bup = b && b.parentNode;
934
+ return a === bup || !!( bup && bup.nodeType === 1 && (
935
+ adown.contains ?
936
+ adown.contains( bup ) :
937
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
938
+ ) );
939
+ } :
940
+ function( a, b ) {
941
+ if ( b ) {
942
+ while ( ( b = b.parentNode ) ) {
943
+ if ( b === a ) {
944
+ return true;
945
+ }
946
+ }
947
+ }
948
+ return false;
949
+ };
950
+
951
+ /* Sorting
952
+ ---------------------------------------------------------------------- */
953
+
954
+ // Document order sorting
955
+ sortOrder = hasCompare ?
956
+ function( a, b ) {
957
+
958
+ // Flag for duplicate removal
959
+ if ( a === b ) {
960
+ hasDuplicate = true;
961
+ return 0;
962
+ }
963
+
964
+ // Sort on method existence if only one input has compareDocumentPosition
965
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
966
+ if ( compare ) {
967
+ return compare;
968
+ }
969
+
970
+ // Calculate position if both inputs belong to the same document
971
+ // Support: IE 11+, Edge 17 - 18+
972
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
973
+ // two documents; shallow comparisons work.
974
+ // eslint-disable-next-line eqeqeq
975
+ compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
976
+ a.compareDocumentPosition( b ) :
977
+
978
+ // Otherwise we know they are disconnected
979
+ 1;
980
+
981
+ // Disconnected nodes
982
+ if ( compare & 1 ||
983
+ ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
984
+
985
+ // Choose the first element that is related to our preferred document
986
+ // Support: IE 11+, Edge 17 - 18+
987
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
988
+ // two documents; shallow comparisons work.
989
+ // eslint-disable-next-line eqeqeq
990
+ if ( a == document || a.ownerDocument == preferredDoc &&
991
+ contains( preferredDoc, a ) ) {
992
+ return -1;
993
+ }
994
+
995
+ // Support: IE 11+, Edge 17 - 18+
996
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
997
+ // two documents; shallow comparisons work.
998
+ // eslint-disable-next-line eqeqeq
999
+ if ( b == document || b.ownerDocument == preferredDoc &&
1000
+ contains( preferredDoc, b ) ) {
1001
+ return 1;
1002
+ }
1003
+
1004
+ // Maintain original order
1005
+ return sortInput ?
1006
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1007
+ 0;
1008
+ }
1009
+
1010
+ return compare & 4 ? -1 : 1;
1011
+ } :
1012
+ function( a, b ) {
1013
+
1014
+ // Exit early if the nodes are identical
1015
+ if ( a === b ) {
1016
+ hasDuplicate = true;
1017
+ return 0;
1018
+ }
1019
+
1020
+ var cur,
1021
+ i = 0,
1022
+ aup = a.parentNode,
1023
+ bup = b.parentNode,
1024
+ ap = [ a ],
1025
+ bp = [ b ];
1026
+
1027
+ // Parentless nodes are either documents or disconnected
1028
+ if ( !aup || !bup ) {
1029
+
1030
+ // Support: IE 11+, Edge 17 - 18+
1031
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1032
+ // two documents; shallow comparisons work.
1033
+ /* eslint-disable eqeqeq */
1034
+ return a == document ? -1 :
1035
+ b == document ? 1 :
1036
+ /* eslint-enable eqeqeq */
1037
+ aup ? -1 :
1038
+ bup ? 1 :
1039
+ sortInput ?
1040
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1041
+ 0;
1042
+
1043
+ // If the nodes are siblings, we can do a quick check
1044
+ } else if ( aup === bup ) {
1045
+ return siblingCheck( a, b );
1046
+ }
1047
+
1048
+ // Otherwise we need full lists of their ancestors for comparison
1049
+ cur = a;
1050
+ while ( ( cur = cur.parentNode ) ) {
1051
+ ap.unshift( cur );
1052
+ }
1053
+ cur = b;
1054
+ while ( ( cur = cur.parentNode ) ) {
1055
+ bp.unshift( cur );
1056
+ }
1057
+
1058
+ // Walk down the tree looking for a discrepancy
1059
+ while ( ap[ i ] === bp[ i ] ) {
1060
+ i++;
1061
+ }
1062
+
1063
+ return i ?
1064
+
1065
+ // Do a sibling check if the nodes have a common ancestor
1066
+ siblingCheck( ap[ i ], bp[ i ] ) :
1067
+
1068
+ // Otherwise nodes in our document sort first
1069
+ // Support: IE 11+, Edge 17 - 18+
1070
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1071
+ // two documents; shallow comparisons work.
1072
+ /* eslint-disable eqeqeq */
1073
+ ap[ i ] == preferredDoc ? -1 :
1074
+ bp[ i ] == preferredDoc ? 1 :
1075
+ /* eslint-enable eqeqeq */
1076
+ 0;
1077
+ };
1078
+
1079
+ return document;
1080
+ };
1081
+
1082
+ Sizzle.matches = function( expr, elements ) {
1083
+ return Sizzle( expr, null, null, elements );
1084
+ };
1085
+
1086
+ Sizzle.matchesSelector = function( elem, expr ) {
1087
+ setDocument( elem );
1088
+
1089
+ if ( support.matchesSelector && documentIsHTML &&
1090
+ !nonnativeSelectorCache[ expr + " " ] &&
1091
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
1092
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
1093
+
1094
+ try {
1095
+ var ret = matches.call( elem, expr );
1096
+
1097
+ // IE 9's matchesSelector returns false on disconnected nodes
1098
+ if ( ret || support.disconnectedMatch ||
1099
+
1100
+ // As well, disconnected nodes are said to be in a document
1101
+ // fragment in IE 9
1102
+ elem.document && elem.document.nodeType !== 11 ) {
1103
+ return ret;
1104
+ }
1105
+ } catch ( e ) {
1106
+ nonnativeSelectorCache( expr, true );
1107
+ }
1108
+ }
1109
+
1110
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
1111
+ };
1112
+
1113
+ Sizzle.contains = function( context, elem ) {
1114
+
1115
+ // Set document vars if needed
1116
+ // Support: IE 11+, Edge 17 - 18+
1117
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1118
+ // two documents; shallow comparisons work.
1119
+ // eslint-disable-next-line eqeqeq
1120
+ if ( ( context.ownerDocument || context ) != document ) {
1121
+ setDocument( context );
1122
+ }
1123
+ return contains( context, elem );
1124
+ };
1125
+
1126
+ Sizzle.attr = function( elem, name ) {
1127
+
1128
+ // Set document vars if needed
1129
+ // Support: IE 11+, Edge 17 - 18+
1130
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1131
+ // two documents; shallow comparisons work.
1132
+ // eslint-disable-next-line eqeqeq
1133
+ if ( ( elem.ownerDocument || elem ) != document ) {
1134
+ setDocument( elem );
1135
+ }
1136
+
1137
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
1138
+
1139
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
1140
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
1141
+ fn( elem, name, !documentIsHTML ) :
1142
+ undefined;
1143
+
1144
+ return val !== undefined ?
1145
+ val :
1146
+ support.attributes || !documentIsHTML ?
1147
+ elem.getAttribute( name ) :
1148
+ ( val = elem.getAttributeNode( name ) ) && val.specified ?
1149
+ val.value :
1150
+ null;
1151
+ };
1152
+
1153
+ Sizzle.escape = function( sel ) {
1154
+ return ( sel + "" ).replace( rcssescape, fcssescape );
1155
+ };
1156
+
1157
+ Sizzle.error = function( msg ) {
1158
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
1159
+ };
1160
+
1161
+ /**
1162
+ * Document sorting and removing duplicates
1163
+ * @param {ArrayLike} results
1164
+ */
1165
+ Sizzle.uniqueSort = function( results ) {
1166
+ var elem,
1167
+ duplicates = [],
1168
+ j = 0,
1169
+ i = 0;
1170
+
1171
+ // Unless we *know* we can detect duplicates, assume their presence
1172
+ hasDuplicate = !support.detectDuplicates;
1173
+ sortInput = !support.sortStable && results.slice( 0 );
1174
+ results.sort( sortOrder );
1175
+
1176
+ if ( hasDuplicate ) {
1177
+ while ( ( elem = results[ i++ ] ) ) {
1178
+ if ( elem === results[ i ] ) {
1179
+ j = duplicates.push( i );
1180
+ }
1181
+ }
1182
+ while ( j-- ) {
1183
+ results.splice( duplicates[ j ], 1 );
1184
+ }
1185
+ }
1186
+
1187
+ // Clear input after sorting to release objects
1188
+ // See https://github.com/jquery/sizzle/pull/225
1189
+ sortInput = null;
1190
+
1191
+ return results;
1192
+ };
1193
+
1194
+ /**
1195
+ * Utility function for retrieving the text value of an array of DOM nodes
1196
+ * @param {Array|Element} elem
1197
+ */
1198
+ getText = Sizzle.getText = function( elem ) {
1199
+ var node,
1200
+ ret = "",
1201
+ i = 0,
1202
+ nodeType = elem.nodeType;
1203
+
1204
+ if ( !nodeType ) {
1205
+
1206
+ // If no nodeType, this is expected to be an array
1207
+ while ( ( node = elem[ i++ ] ) ) {
1208
+
1209
+ // Do not traverse comment nodes
1210
+ ret += getText( node );
1211
+ }
1212
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
1213
+
1214
+ // Use textContent for elements
1215
+ // innerText usage removed for consistency of new lines (jQuery #11153)
1216
+ if ( typeof elem.textContent === "string" ) {
1217
+ return elem.textContent;
1218
+ } else {
1219
+
1220
+ // Traverse its children
1221
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1222
+ ret += getText( elem );
1223
+ }
1224
+ }
1225
+ } else if ( nodeType === 3 || nodeType === 4 ) {
1226
+ return elem.nodeValue;
1227
+ }
1228
+
1229
+ // Do not include comment or processing instruction nodes
1230
+
1231
+ return ret;
1232
+ };
1233
+
1234
+ Expr = Sizzle.selectors = {
1235
+
1236
+ // Can be adjusted by the user
1237
+ cacheLength: 50,
1238
+
1239
+ createPseudo: markFunction,
1240
+
1241
+ match: matchExpr,
1242
+
1243
+ attrHandle: {},
1244
+
1245
+ find: {},
1246
+
1247
+ relative: {
1248
+ ">": { dir: "parentNode", first: true },
1249
+ " ": { dir: "parentNode" },
1250
+ "+": { dir: "previousSibling", first: true },
1251
+ "~": { dir: "previousSibling" }
1252
+ },
1253
+
1254
+ preFilter: {
1255
+ "ATTR": function( match ) {
1256
+ match[ 1 ] = match[ 1 ].replace( runescape, funescape );
1257
+
1258
+ // Move the given value to match[3] whether quoted or unquoted
1259
+ match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
1260
+ match[ 5 ] || "" ).replace( runescape, funescape );
1261
+
1262
+ if ( match[ 2 ] === "~=" ) {
1263
+ match[ 3 ] = " " + match[ 3 ] + " ";
1264
+ }
1265
+
1266
+ return match.slice( 0, 4 );
1267
+ },
1268
+
1269
+ "CHILD": function( match ) {
1270
+
1271
+ /* matches from matchExpr["CHILD"]
1272
+ 1 type (only|nth|...)
1273
+ 2 what (child|of-type)
1274
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
1275
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
1276
+ 5 sign of xn-component
1277
+ 6 x of xn-component
1278
+ 7 sign of y-component
1279
+ 8 y of y-component
1280
+ */
1281
+ match[ 1 ] = match[ 1 ].toLowerCase();
1282
+
1283
+ if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
1284
+
1285
+ // nth-* requires argument
1286
+ if ( !match[ 3 ] ) {
1287
+ Sizzle.error( match[ 0 ] );
1288
+ }
1289
+
1290
+ // numeric x and y parameters for Expr.filter.CHILD
1291
+ // remember that false/true cast respectively to 0/1
1292
+ match[ 4 ] = +( match[ 4 ] ?
1293
+ match[ 5 ] + ( match[ 6 ] || 1 ) :
1294
+ 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
1295
+ match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
1296
+
1297
+ // other types prohibit arguments
1298
+ } else if ( match[ 3 ] ) {
1299
+ Sizzle.error( match[ 0 ] );
1300
+ }
1301
+
1302
+ return match;
1303
+ },
1304
+
1305
+ "PSEUDO": function( match ) {
1306
+ var excess,
1307
+ unquoted = !match[ 6 ] && match[ 2 ];
1308
+
1309
+ if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
1310
+ return null;
1311
+ }
1312
+
1313
+ // Accept quoted arguments as-is
1314
+ if ( match[ 3 ] ) {
1315
+ match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
1316
+
1317
+ // Strip excess characters from unquoted arguments
1318
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
1319
+
1320
+ // Get excess from tokenize (recursively)
1321
+ ( excess = tokenize( unquoted, true ) ) &&
1322
+
1323
+ // advance to the next closing parenthesis
1324
+ ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
1325
+
1326
+ // excess is a negative index
1327
+ match[ 0 ] = match[ 0 ].slice( 0, excess );
1328
+ match[ 2 ] = unquoted.slice( 0, excess );
1329
+ }
1330
+
1331
+ // Return only captures needed by the pseudo filter method (type and argument)
1332
+ return match.slice( 0, 3 );
1333
+ }
1334
+ },
1335
+
1336
+ filter: {
1337
+
1338
+ "TAG": function( nodeNameSelector ) {
1339
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
1340
+ return nodeNameSelector === "*" ?
1341
+ function() {
1342
+ return true;
1343
+ } :
1344
+ function( elem ) {
1345
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
1346
+ };
1347
+ },
1348
+
1349
+ "CLASS": function( className ) {
1350
+ var pattern = classCache[ className + " " ];
1351
+
1352
+ return pattern ||
1353
+ ( pattern = new RegExp( "(^|" + whitespace +
1354
+ ")" + className + "(" + whitespace + "|$)" ) ) && classCache(
1355
+ className, function( elem ) {
1356
+ return pattern.test(
1357
+ typeof elem.className === "string" && elem.className ||
1358
+ typeof elem.getAttribute !== "undefined" &&
1359
+ elem.getAttribute( "class" ) ||
1360
+ ""
1361
+ );
1362
+ } );
1363
+ },
1364
+
1365
+ "ATTR": function( name, operator, check ) {
1366
+ return function( elem ) {
1367
+ var result = Sizzle.attr( elem, name );
1368
+
1369
+ if ( result == null ) {
1370
+ return operator === "!=";
1371
+ }
1372
+ if ( !operator ) {
1373
+ return true;
1374
+ }
1375
+
1376
+ result += "";
1377
+
1378
+ /* eslint-disable max-len */
1379
+
1380
+ return operator === "=" ? result === check :
1381
+ operator === "!=" ? result !== check :
1382
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
1383
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
1384
+ operator === "$=" ? check && result.slice( -check.length ) === check :
1385
+ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
1386
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
1387
+ false;
1388
+ /* eslint-enable max-len */
1389
+
1390
+ };
1391
+ },
1392
+
1393
+ "CHILD": function( type, what, _argument, first, last ) {
1394
+ var simple = type.slice( 0, 3 ) !== "nth",
1395
+ forward = type.slice( -4 ) !== "last",
1396
+ ofType = what === "of-type";
1397
+
1398
+ return first === 1 && last === 0 ?
1399
+
1400
+ // Shortcut for :nth-*(n)
1401
+ function( elem ) {
1402
+ return !!elem.parentNode;
1403
+ } :
1404
+
1405
+ function( elem, _context, xml ) {
1406
+ var cache, uniqueCache, outerCache, node, nodeIndex, start,
1407
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
1408
+ parent = elem.parentNode,
1409
+ name = ofType && elem.nodeName.toLowerCase(),
1410
+ useCache = !xml && !ofType,
1411
+ diff = false;
1412
+
1413
+ if ( parent ) {
1414
+
1415
+ // :(first|last|only)-(child|of-type)
1416
+ if ( simple ) {
1417
+ while ( dir ) {
1418
+ node = elem;
1419
+ while ( ( node = node[ dir ] ) ) {
1420
+ if ( ofType ?
1421
+ node.nodeName.toLowerCase() === name :
1422
+ node.nodeType === 1 ) {
1423
+
1424
+ return false;
1425
+ }
1426
+ }
1427
+
1428
+ // Reverse direction for :only-* (if we haven't yet done so)
1429
+ start = dir = type === "only" && !start && "nextSibling";
1430
+ }
1431
+ return true;
1432
+ }
1433
+
1434
+ start = [ forward ? parent.firstChild : parent.lastChild ];
1435
+
1436
+ // non-xml :nth-child(...) stores cache data on `parent`
1437
+ if ( forward && useCache ) {
1438
+
1439
+ // Seek `elem` from a previously-cached index
1440
+
1441
+ // ...in a gzip-friendly way
1442
+ node = parent;
1443
+ outerCache = node[ expando ] || ( node[ expando ] = {} );
1444
+
1445
+ // Support: IE <9 only
1446
+ // Defend against cloned attroperties (jQuery gh-1709)
1447
+ uniqueCache = outerCache[ node.uniqueID ] ||
1448
+ ( outerCache[ node.uniqueID ] = {} );
1449
+
1450
+ cache = uniqueCache[ type ] || [];
1451
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1452
+ diff = nodeIndex && cache[ 2 ];
1453
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
1454
+
1455
+ while ( ( node = ++nodeIndex && node && node[ dir ] ||
1456
+
1457
+ // Fallback to seeking `elem` from the start
1458
+ ( diff = nodeIndex = 0 ) || start.pop() ) ) {
1459
+
1460
+ // When found, cache indexes on `parent` and break
1461
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
1462
+ uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
1463
+ break;
1464
+ }
1465
+ }
1466
+
1467
+ } else {
1468
+
1469
+ // Use previously-cached element index if available
1470
+ if ( useCache ) {
1471
+
1472
+ // ...in a gzip-friendly way
1473
+ node = elem;
1474
+ outerCache = node[ expando ] || ( node[ expando ] = {} );
1475
+
1476
+ // Support: IE <9 only
1477
+ // Defend against cloned attroperties (jQuery gh-1709)
1478
+ uniqueCache = outerCache[ node.uniqueID ] ||
1479
+ ( outerCache[ node.uniqueID ] = {} );
1480
+
1481
+ cache = uniqueCache[ type ] || [];
1482
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1483
+ diff = nodeIndex;
1484
+ }
1485
+
1486
+ // xml :nth-child(...)
1487
+ // or :nth-last-child(...) or :nth(-last)?-of-type(...)
1488
+ if ( diff === false ) {
1489
+
1490
+ // Use the same loop as above to seek `elem` from the start
1491
+ while ( ( node = ++nodeIndex && node && node[ dir ] ||
1492
+ ( diff = nodeIndex = 0 ) || start.pop() ) ) {
1493
+
1494
+ if ( ( ofType ?
1495
+ node.nodeName.toLowerCase() === name :
1496
+ node.nodeType === 1 ) &&
1497
+ ++diff ) {
1498
+
1499
+ // Cache the index of each encountered element
1500
+ if ( useCache ) {
1501
+ outerCache = node[ expando ] ||
1502
+ ( node[ expando ] = {} );
1503
+
1504
+ // Support: IE <9 only
1505
+ // Defend against cloned attroperties (jQuery gh-1709)
1506
+ uniqueCache = outerCache[ node.uniqueID ] ||
1507
+ ( outerCache[ node.uniqueID ] = {} );
1508
+
1509
+ uniqueCache[ type ] = [ dirruns, diff ];
1510
+ }
1511
+
1512
+ if ( node === elem ) {
1513
+ break;
1514
+ }
1515
+ }
1516
+ }
1517
+ }
1518
+ }
1519
+
1520
+ // Incorporate the offset, then check against cycle size
1521
+ diff -= last;
1522
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
1523
+ }
1524
+ };
1525
+ },
1526
+
1527
+ "PSEUDO": function( pseudo, argument ) {
1528
+
1529
+ // pseudo-class names are case-insensitive
1530
+ // http://www.w3.org/TR/selectors/#pseudo-classes
1531
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
1532
+ // Remember that setFilters inherits from pseudos
1533
+ var args,
1534
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
1535
+ Sizzle.error( "unsupported pseudo: " + pseudo );
1536
+
1537
+ // The user may use createPseudo to indicate that
1538
+ // arguments are needed to create the filter function
1539
+ // just as Sizzle does
1540
+ if ( fn[ expando ] ) {
1541
+ return fn( argument );
1542
+ }
1543
+
1544
+ // But maintain support for old signatures
1545
+ if ( fn.length > 1 ) {
1546
+ args = [ pseudo, pseudo, "", argument ];
1547
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
1548
+ markFunction( function( seed, matches ) {
1549
+ var idx,
1550
+ matched = fn( seed, argument ),
1551
+ i = matched.length;
1552
+ while ( i-- ) {
1553
+ idx = indexOf( seed, matched[ i ] );
1554
+ seed[ idx ] = !( matches[ idx ] = matched[ i ] );
1555
+ }
1556
+ } ) :
1557
+ function( elem ) {
1558
+ return fn( elem, 0, args );
1559
+ };
1560
+ }
1561
+
1562
+ return fn;
1563
+ }
1564
+ },
1565
+
1566
+ pseudos: {
1567
+
1568
+ // Potentially complex pseudos
1569
+ "not": markFunction( function( selector ) {
1570
+
1571
+ // Trim the selector passed to compile
1572
+ // to avoid treating leading and trailing
1573
+ // spaces as combinators
1574
+ var input = [],
1575
+ results = [],
1576
+ matcher = compile( selector.replace( rtrim, "$1" ) );
1577
+
1578
+ return matcher[ expando ] ?
1579
+ markFunction( function( seed, matches, _context, xml ) {
1580
+ var elem,
1581
+ unmatched = matcher( seed, null, xml, [] ),
1582
+ i = seed.length;
1583
+
1584
+ // Match elements unmatched by `matcher`
1585
+ while ( i-- ) {
1586
+ if ( ( elem = unmatched[ i ] ) ) {
1587
+ seed[ i ] = !( matches[ i ] = elem );
1588
+ }
1589
+ }
1590
+ } ) :
1591
+ function( elem, _context, xml ) {
1592
+ input[ 0 ] = elem;
1593
+ matcher( input, null, xml, results );
1594
+
1595
+ // Don't keep the element (issue #299)
1596
+ input[ 0 ] = null;
1597
+ return !results.pop();
1598
+ };
1599
+ } ),
1600
+
1601
+ "has": markFunction( function( selector ) {
1602
+ return function( elem ) {
1603
+ return Sizzle( selector, elem ).length > 0;
1604
+ };
1605
+ } ),
1606
+
1607
+ "contains": markFunction( function( text ) {
1608
+ text = text.replace( runescape, funescape );
1609
+ return function( elem ) {
1610
+ return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
1611
+ };
1612
+ } ),
1613
+
1614
+ // "Whether an element is represented by a :lang() selector
1615
+ // is based solely on the element's language value
1616
+ // being equal to the identifier C,
1617
+ // or beginning with the identifier C immediately followed by "-".
1618
+ // The matching of C against the element's language value is performed case-insensitively.
1619
+ // The identifier C does not have to be a valid language name."
1620
+ // http://www.w3.org/TR/selectors/#lang-pseudo
1621
+ "lang": markFunction( function( lang ) {
1622
+
1623
+ // lang value must be a valid identifier
1624
+ if ( !ridentifier.test( lang || "" ) ) {
1625
+ Sizzle.error( "unsupported lang: " + lang );
1626
+ }
1627
+ lang = lang.replace( runescape, funescape ).toLowerCase();
1628
+ return function( elem ) {
1629
+ var elemLang;
1630
+ do {
1631
+ if ( ( elemLang = documentIsHTML ?
1632
+ elem.lang :
1633
+ elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
1634
+
1635
+ elemLang = elemLang.toLowerCase();
1636
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
1637
+ }
1638
+ } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
1639
+ return false;
1640
+ };
1641
+ } ),
1642
+
1643
+ // Miscellaneous
1644
+ "target": function( elem ) {
1645
+ var hash = window.location && window.location.hash;
1646
+ return hash && hash.slice( 1 ) === elem.id;
1647
+ },
1648
+
1649
+ "root": function( elem ) {
1650
+ return elem === docElem;
1651
+ },
1652
+
1653
+ "focus": function( elem ) {
1654
+ return elem === document.activeElement &&
1655
+ ( !document.hasFocus || document.hasFocus() ) &&
1656
+ !!( elem.type || elem.href || ~elem.tabIndex );
1657
+ },
1658
+
1659
+ // Boolean properties
1660
+ "enabled": createDisabledPseudo( false ),
1661
+ "disabled": createDisabledPseudo( true ),
1662
+
1663
+ "checked": function( elem ) {
1664
+
1665
+ // In CSS3, :checked should return both checked and selected elements
1666
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1667
+ var nodeName = elem.nodeName.toLowerCase();
1668
+ return ( nodeName === "input" && !!elem.checked ) ||
1669
+ ( nodeName === "option" && !!elem.selected );
1670
+ },
1671
+
1672
+ "selected": function( elem ) {
1673
+
1674
+ // Accessing this property makes selected-by-default
1675
+ // options in Safari work properly
1676
+ if ( elem.parentNode ) {
1677
+ // eslint-disable-next-line no-unused-expressions
1678
+ elem.parentNode.selectedIndex;
1679
+ }
1680
+
1681
+ return elem.selected === true;
1682
+ },
1683
+
1684
+ // Contents
1685
+ "empty": function( elem ) {
1686
+
1687
+ // http://www.w3.org/TR/selectors/#empty-pseudo
1688
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
1689
+ // but not by others (comment: 8; processing instruction: 7; etc.)
1690
+ // nodeType < 6 works because attributes (2) do not appear as children
1691
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1692
+ if ( elem.nodeType < 6 ) {
1693
+ return false;
1694
+ }
1695
+ }
1696
+ return true;
1697
+ },
1698
+
1699
+ "parent": function( elem ) {
1700
+ return !Expr.pseudos[ "empty" ]( elem );
1701
+ },
1702
+
1703
+ // Element/input types
1704
+ "header": function( elem ) {
1705
+ return rheader.test( elem.nodeName );
1706
+ },
1707
+
1708
+ "input": function( elem ) {
1709
+ return rinputs.test( elem.nodeName );
1710
+ },
1711
+
1712
+ "button": function( elem ) {
1713
+ var name = elem.nodeName.toLowerCase();
1714
+ return name === "input" && elem.type === "button" || name === "button";
1715
+ },
1716
+
1717
+ "text": function( elem ) {
1718
+ var attr;
1719
+ return elem.nodeName.toLowerCase() === "input" &&
1720
+ elem.type === "text" &&
1721
+
1722
+ // Support: IE<8
1723
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
1724
+ ( ( attr = elem.getAttribute( "type" ) ) == null ||
1725
+ attr.toLowerCase() === "text" );
1726
+ },
1727
+
1728
+ // Position-in-collection
1729
+ "first": createPositionalPseudo( function() {
1730
+ return [ 0 ];
1731
+ } ),
1732
+
1733
+ "last": createPositionalPseudo( function( _matchIndexes, length ) {
1734
+ return [ length - 1 ];
1735
+ } ),
1736
+
1737
+ "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
1738
+ return [ argument < 0 ? argument + length : argument ];
1739
+ } ),
1740
+
1741
+ "even": createPositionalPseudo( function( matchIndexes, length ) {
1742
+ var i = 0;
1743
+ for ( ; i < length; i += 2 ) {
1744
+ matchIndexes.push( i );
1745
+ }
1746
+ return matchIndexes;
1747
+ } ),
1748
+
1749
+ "odd": createPositionalPseudo( function( matchIndexes, length ) {
1750
+ var i = 1;
1751
+ for ( ; i < length; i += 2 ) {
1752
+ matchIndexes.push( i );
1753
+ }
1754
+ return matchIndexes;
1755
+ } ),
1756
+
1757
+ "lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
1758
+ var i = argument < 0 ?
1759
+ argument + length :
1760
+ argument > length ?
1761
+ length :
1762
+ argument;
1763
+ for ( ; --i >= 0; ) {
1764
+ matchIndexes.push( i );
1765
+ }
1766
+ return matchIndexes;
1767
+ } ),
1768
+
1769
+ "gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
1770
+ var i = argument < 0 ? argument + length : argument;
1771
+ for ( ; ++i < length; ) {
1772
+ matchIndexes.push( i );
1773
+ }
1774
+ return matchIndexes;
1775
+ } )
1776
+ }
1777
+ };
1778
+
1779
+ Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
1780
+
1781
+ // Add button/input type pseudos
1782
+ for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
1783
+ Expr.pseudos[ i ] = createInputPseudo( i );
1784
+ }
1785
+ for ( i in { submit: true, reset: true } ) {
1786
+ Expr.pseudos[ i ] = createButtonPseudo( i );
1787
+ }
1788
+
1789
+ // Easy API for creating new setFilters
1790
+ function setFilters() {}
1791
+ setFilters.prototype = Expr.filters = Expr.pseudos;
1792
+ Expr.setFilters = new setFilters();
1793
+
1794
+ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
1795
+ var matched, match, tokens, type,
1796
+ soFar, groups, preFilters,
1797
+ cached = tokenCache[ selector + " " ];
1798
+
1799
+ if ( cached ) {
1800
+ return parseOnly ? 0 : cached.slice( 0 );
1801
+ }
1802
+
1803
+ soFar = selector;
1804
+ groups = [];
1805
+ preFilters = Expr.preFilter;
1806
+
1807
+ while ( soFar ) {
1808
+
1809
+ // Comma and first run
1810
+ if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
1811
+ if ( match ) {
1812
+
1813
+ // Don't consume trailing commas as valid
1814
+ soFar = soFar.slice( match[ 0 ].length ) || soFar;
1815
+ }
1816
+ groups.push( ( tokens = [] ) );
1817
+ }
1818
+
1819
+ matched = false;
1820
+
1821
+ // Combinators
1822
+ if ( ( match = rcombinators.exec( soFar ) ) ) {
1823
+ matched = match.shift();
1824
+ tokens.push( {
1825
+ value: matched,
1826
+
1827
+ // Cast descendant combinators to space
1828
+ type: match[ 0 ].replace( rtrim, " " )
1829
+ } );
1830
+ soFar = soFar.slice( matched.length );
1831
+ }
1832
+
1833
+ // Filters
1834
+ for ( type in Expr.filter ) {
1835
+ if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
1836
+ ( match = preFilters[ type ]( match ) ) ) ) {
1837
+ matched = match.shift();
1838
+ tokens.push( {
1839
+ value: matched,
1840
+ type: type,
1841
+ matches: match
1842
+ } );
1843
+ soFar = soFar.slice( matched.length );
1844
+ }
1845
+ }
1846
+
1847
+ if ( !matched ) {
1848
+ break;
1849
+ }
1850
+ }
1851
+
1852
+ // Return the length of the invalid excess
1853
+ // if we're just parsing
1854
+ // Otherwise, throw an error or return tokens
1855
+ return parseOnly ?
1856
+ soFar.length :
1857
+ soFar ?
1858
+ Sizzle.error( selector ) :
1859
+
1860
+ // Cache the tokens
1861
+ tokenCache( selector, groups ).slice( 0 );
1862
+ };
1863
+
1864
+ function toSelector( tokens ) {
1865
+ var i = 0,
1866
+ len = tokens.length,
1867
+ selector = "";
1868
+ for ( ; i < len; i++ ) {
1869
+ selector += tokens[ i ].value;
1870
+ }
1871
+ return selector;
1872
+ }
1873
+
1874
+ function addCombinator( matcher, combinator, base ) {
1875
+ var dir = combinator.dir,
1876
+ skip = combinator.next,
1877
+ key = skip || dir,
1878
+ checkNonElements = base && key === "parentNode",
1879
+ doneName = done++;
1880
+
1881
+ return combinator.first ?
1882
+
1883
+ // Check against closest ancestor/preceding element
1884
+ function( elem, context, xml ) {
1885
+ while ( ( elem = elem[ dir ] ) ) {
1886
+ if ( elem.nodeType === 1 || checkNonElements ) {
1887
+ return matcher( elem, context, xml );
1888
+ }
1889
+ }
1890
+ return false;
1891
+ } :
1892
+
1893
+ // Check against all ancestor/preceding elements
1894
+ function( elem, context, xml ) {
1895
+ var oldCache, uniqueCache, outerCache,
1896
+ newCache = [ dirruns, doneName ];
1897
+
1898
+ // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
1899
+ if ( xml ) {
1900
+ while ( ( elem = elem[ dir ] ) ) {
1901
+ if ( elem.nodeType === 1 || checkNonElements ) {
1902
+ if ( matcher( elem, context, xml ) ) {
1903
+ return true;
1904
+ }
1905
+ }
1906
+ }
1907
+ } else {
1908
+ while ( ( elem = elem[ dir ] ) ) {
1909
+ if ( elem.nodeType === 1 || checkNonElements ) {
1910
+ outerCache = elem[ expando ] || ( elem[ expando ] = {} );
1911
+
1912
+ // Support: IE <9 only
1913
+ // Defend against cloned attroperties (jQuery gh-1709)
1914
+ uniqueCache = outerCache[ elem.uniqueID ] ||
1915
+ ( outerCache[ elem.uniqueID ] = {} );
1916
+
1917
+ if ( skip && skip === elem.nodeName.toLowerCase() ) {
1918
+ elem = elem[ dir ] || elem;
1919
+ } else if ( ( oldCache = uniqueCache[ key ] ) &&
1920
+ oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
1921
+
1922
+ // Assign to newCache so results back-propagate to previous elements
1923
+ return ( newCache[ 2 ] = oldCache[ 2 ] );
1924
+ } else {
1925
+
1926
+ // Reuse newcache so results back-propagate to previous elements
1927
+ uniqueCache[ key ] = newCache;
1928
+
1929
+ // A match means we're done; a fail means we have to keep checking
1930
+ if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
1931
+ return true;
1932
+ }
1933
+ }
1934
+ }
1935
+ }
1936
+ }
1937
+ return false;
1938
+ };
1939
+ }
1940
+
1941
+ function elementMatcher( matchers ) {
1942
+ return matchers.length > 1 ?
1943
+ function( elem, context, xml ) {
1944
+ var i = matchers.length;
1945
+ while ( i-- ) {
1946
+ if ( !matchers[ i ]( elem, context, xml ) ) {
1947
+ return false;
1948
+ }
1949
+ }
1950
+ return true;
1951
+ } :
1952
+ matchers[ 0 ];
1953
+ }
1954
+
1955
+ function multipleContexts( selector, contexts, results ) {
1956
+ var i = 0,
1957
+ len = contexts.length;
1958
+ for ( ; i < len; i++ ) {
1959
+ Sizzle( selector, contexts[ i ], results );
1960
+ }
1961
+ return results;
1962
+ }
1963
+
1964
+ function condense( unmatched, map, filter, context, xml ) {
1965
+ var elem,
1966
+ newUnmatched = [],
1967
+ i = 0,
1968
+ len = unmatched.length,
1969
+ mapped = map != null;
1970
+
1971
+ for ( ; i < len; i++ ) {
1972
+ if ( ( elem = unmatched[ i ] ) ) {
1973
+ if ( !filter || filter( elem, context, xml ) ) {
1974
+ newUnmatched.push( elem );
1975
+ if ( mapped ) {
1976
+ map.push( i );
1977
+ }
1978
+ }
1979
+ }
1980
+ }
1981
+
1982
+ return newUnmatched;
1983
+ }
1984
+
1985
+ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
1986
+ if ( postFilter && !postFilter[ expando ] ) {
1987
+ postFilter = setMatcher( postFilter );
1988
+ }
1989
+ if ( postFinder && !postFinder[ expando ] ) {
1990
+ postFinder = setMatcher( postFinder, postSelector );
1991
+ }
1992
+ return markFunction( function( seed, results, context, xml ) {
1993
+ var temp, i, elem,
1994
+ preMap = [],
1995
+ postMap = [],
1996
+ preexisting = results.length,
1997
+
1998
+ // Get initial elements from seed or context
1999
+ elems = seed || multipleContexts(
2000
+ selector || "*",
2001
+ context.nodeType ? [ context ] : context,
2002
+ []
2003
+ ),
2004
+
2005
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
2006
+ matcherIn = preFilter && ( seed || !selector ) ?
2007
+ condense( elems, preMap, preFilter, context, xml ) :
2008
+ elems,
2009
+
2010
+ matcherOut = matcher ?
2011
+
2012
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
2013
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2014
+
2015
+ // ...intermediate processing is necessary
2016
+ [] :
2017
+
2018
+ // ...otherwise use results directly
2019
+ results :
2020
+ matcherIn;
2021
+
2022
+ // Find primary matches
2023
+ if ( matcher ) {
2024
+ matcher( matcherIn, matcherOut, context, xml );
2025
+ }
2026
+
2027
+ // Apply postFilter
2028
+ if ( postFilter ) {
2029
+ temp = condense( matcherOut, postMap );
2030
+ postFilter( temp, [], context, xml );
2031
+
2032
+ // Un-match failing elements by moving them back to matcherIn
2033
+ i = temp.length;
2034
+ while ( i-- ) {
2035
+ if ( ( elem = temp[ i ] ) ) {
2036
+ matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
2037
+ }
2038
+ }
2039
+ }
2040
+
2041
+ if ( seed ) {
2042
+ if ( postFinder || preFilter ) {
2043
+ if ( postFinder ) {
2044
+
2045
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
2046
+ temp = [];
2047
+ i = matcherOut.length;
2048
+ while ( i-- ) {
2049
+ if ( ( elem = matcherOut[ i ] ) ) {
2050
+
2051
+ // Restore matcherIn since elem is not yet a final match
2052
+ temp.push( ( matcherIn[ i ] = elem ) );
2053
+ }
2054
+ }
2055
+ postFinder( null, ( matcherOut = [] ), temp, xml );
2056
+ }
2057
+
2058
+ // Move matched elements from seed to results to keep them synchronized
2059
+ i = matcherOut.length;
2060
+ while ( i-- ) {
2061
+ if ( ( elem = matcherOut[ i ] ) &&
2062
+ ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
2063
+
2064
+ seed[ temp ] = !( results[ temp ] = elem );
2065
+ }
2066
+ }
2067
+ }
2068
+
2069
+ // Add elements to results, through postFinder if defined
2070
+ } else {
2071
+ matcherOut = condense(
2072
+ matcherOut === results ?
2073
+ matcherOut.splice( preexisting, matcherOut.length ) :
2074
+ matcherOut
2075
+ );
2076
+ if ( postFinder ) {
2077
+ postFinder( null, results, matcherOut, xml );
2078
+ } else {
2079
+ push.apply( results, matcherOut );
2080
+ }
2081
+ }
2082
+ } );
2083
+ }
2084
+
2085
+ function matcherFromTokens( tokens ) {
2086
+ var checkContext, matcher, j,
2087
+ len = tokens.length,
2088
+ leadingRelative = Expr.relative[ tokens[ 0 ].type ],
2089
+ implicitRelative = leadingRelative || Expr.relative[ " " ],
2090
+ i = leadingRelative ? 1 : 0,
2091
+
2092
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
2093
+ matchContext = addCombinator( function( elem ) {
2094
+ return elem === checkContext;
2095
+ }, implicitRelative, true ),
2096
+ matchAnyContext = addCombinator( function( elem ) {
2097
+ return indexOf( checkContext, elem ) > -1;
2098
+ }, implicitRelative, true ),
2099
+ matchers = [ function( elem, context, xml ) {
2100
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
2101
+ ( checkContext = context ).nodeType ?
2102
+ matchContext( elem, context, xml ) :
2103
+ matchAnyContext( elem, context, xml ) );
2104
+
2105
+ // Avoid hanging onto element (issue #299)
2106
+ checkContext = null;
2107
+ return ret;
2108
+ } ];
2109
+
2110
+ for ( ; i < len; i++ ) {
2111
+ if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
2112
+ matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
2113
+ } else {
2114
+ matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
2115
+
2116
+ // Return special upon seeing a positional matcher
2117
+ if ( matcher[ expando ] ) {
2118
+
2119
+ // Find the next relative operator (if any) for proper handling
2120
+ j = ++i;
2121
+ for ( ; j < len; j++ ) {
2122
+ if ( Expr.relative[ tokens[ j ].type ] ) {
2123
+ break;
2124
+ }
2125
+ }
2126
+ return setMatcher(
2127
+ i > 1 && elementMatcher( matchers ),
2128
+ i > 1 && toSelector(
2129
+
2130
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
2131
+ tokens
2132
+ .slice( 0, i - 1 )
2133
+ .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
2134
+ ).replace( rtrim, "$1" ),
2135
+ matcher,
2136
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
2137
+ j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
2138
+ j < len && toSelector( tokens )
2139
+ );
2140
+ }
2141
+ matchers.push( matcher );
2142
+ }
2143
+ }
2144
+
2145
+ return elementMatcher( matchers );
2146
+ }
2147
+
2148
+ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2149
+ var bySet = setMatchers.length > 0,
2150
+ byElement = elementMatchers.length > 0,
2151
+ superMatcher = function( seed, context, xml, results, outermost ) {
2152
+ var elem, j, matcher,
2153
+ matchedCount = 0,
2154
+ i = "0",
2155
+ unmatched = seed && [],
2156
+ setMatched = [],
2157
+ contextBackup = outermostContext,
2158
+
2159
+ // We must always have either seed elements or outermost context
2160
+ elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
2161
+
2162
+ // Use integer dirruns iff this is the outermost matcher
2163
+ dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
2164
+ len = elems.length;
2165
+
2166
+ if ( outermost ) {
2167
+
2168
+ // Support: IE 11+, Edge 17 - 18+
2169
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2170
+ // two documents; shallow comparisons work.
2171
+ // eslint-disable-next-line eqeqeq
2172
+ outermostContext = context == document || context || outermost;
2173
+ }
2174
+
2175
+ // Add elements passing elementMatchers directly to results
2176
+ // Support: IE<9, Safari
2177
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
2178
+ for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
2179
+ if ( byElement && elem ) {
2180
+ j = 0;
2181
+
2182
+ // Support: IE 11+, Edge 17 - 18+
2183
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2184
+ // two documents; shallow comparisons work.
2185
+ // eslint-disable-next-line eqeqeq
2186
+ if ( !context && elem.ownerDocument != document ) {
2187
+ setDocument( elem );
2188
+ xml = !documentIsHTML;
2189
+ }
2190
+ while ( ( matcher = elementMatchers[ j++ ] ) ) {
2191
+ if ( matcher( elem, context || document, xml ) ) {
2192
+ results.push( elem );
2193
+ break;
2194
+ }
2195
+ }
2196
+ if ( outermost ) {
2197
+ dirruns = dirrunsUnique;
2198
+ }
2199
+ }
2200
+
2201
+ // Track unmatched elements for set filters
2202
+ if ( bySet ) {
2203
+
2204
+ // They will have gone through all possible matchers
2205
+ if ( ( elem = !matcher && elem ) ) {
2206
+ matchedCount--;
2207
+ }
2208
+
2209
+ // Lengthen the array for every element, matched or not
2210
+ if ( seed ) {
2211
+ unmatched.push( elem );
2212
+ }
2213
+ }
2214
+ }
2215
+
2216
+ // `i` is now the count of elements visited above, and adding it to `matchedCount`
2217
+ // makes the latter nonnegative.
2218
+ matchedCount += i;
2219
+
2220
+ // Apply set filters to unmatched elements
2221
+ // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
2222
+ // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
2223
+ // no element matchers and no seed.
2224
+ // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
2225
+ // case, which will result in a "00" `matchedCount` that differs from `i` but is also
2226
+ // numerically zero.
2227
+ if ( bySet && i !== matchedCount ) {
2228
+ j = 0;
2229
+ while ( ( matcher = setMatchers[ j++ ] ) ) {
2230
+ matcher( unmatched, setMatched, context, xml );
2231
+ }
2232
+
2233
+ if ( seed ) {
2234
+
2235
+ // Reintegrate element matches to eliminate the need for sorting
2236
+ if ( matchedCount > 0 ) {
2237
+ while ( i-- ) {
2238
+ if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
2239
+ setMatched[ i ] = pop.call( results );
2240
+ }
2241
+ }
2242
+ }
2243
+
2244
+ // Discard index placeholder values to get only actual matches
2245
+ setMatched = condense( setMatched );
2246
+ }
2247
+
2248
+ // Add matches to results
2249
+ push.apply( results, setMatched );
2250
+
2251
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
2252
+ if ( outermost && !seed && setMatched.length > 0 &&
2253
+ ( matchedCount + setMatchers.length ) > 1 ) {
2254
+
2255
+ Sizzle.uniqueSort( results );
2256
+ }
2257
+ }
2258
+
2259
+ // Override manipulation of globals by nested matchers
2260
+ if ( outermost ) {
2261
+ dirruns = dirrunsUnique;
2262
+ outermostContext = contextBackup;
2263
+ }
2264
+
2265
+ return unmatched;
2266
+ };
2267
+
2268
+ return bySet ?
2269
+ markFunction( superMatcher ) :
2270
+ superMatcher;
2271
+ }
2272
+
2273
+ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
2274
+ var i,
2275
+ setMatchers = [],
2276
+ elementMatchers = [],
2277
+ cached = compilerCache[ selector + " " ];
2278
+
2279
+ if ( !cached ) {
2280
+
2281
+ // Generate a function of recursive functions that can be used to check each element
2282
+ if ( !match ) {
2283
+ match = tokenize( selector );
2284
+ }
2285
+ i = match.length;
2286
+ while ( i-- ) {
2287
+ cached = matcherFromTokens( match[ i ] );
2288
+ if ( cached[ expando ] ) {
2289
+ setMatchers.push( cached );
2290
+ } else {
2291
+ elementMatchers.push( cached );
2292
+ }
2293
+ }
2294
+
2295
+ // Cache the compiled function
2296
+ cached = compilerCache(
2297
+ selector,
2298
+ matcherFromGroupMatchers( elementMatchers, setMatchers )
2299
+ );
2300
+
2301
+ // Save selector and tokenization
2302
+ cached.selector = selector;
2303
+ }
2304
+ return cached;
2305
+ };
2306
+
2307
+ /**
2308
+ * A low-level selection function that works with Sizzle's compiled
2309
+ * selector functions
2310
+ * @param {String|Function} selector A selector or a pre-compiled
2311
+ * selector function built with Sizzle.compile
2312
+ * @param {Element} context
2313
+ * @param {Array} [results]
2314
+ * @param {Array} [seed] A set of elements to match against
2315
+ */
2316
+ select = Sizzle.select = function( selector, context, results, seed ) {
2317
+ var i, tokens, token, type, find,
2318
+ compiled = typeof selector === "function" && selector,
2319
+ match = !seed && tokenize( ( selector = compiled.selector || selector ) );
2320
+
2321
+ results = results || [];
2322
+
2323
+ // Try to minimize operations if there is only one selector in the list and no seed
2324
+ // (the latter of which guarantees us context)
2325
+ if ( match.length === 1 ) {
2326
+
2327
+ // Reduce context if the leading compound selector is an ID
2328
+ tokens = match[ 0 ] = match[ 0 ].slice( 0 );
2329
+ if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
2330
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
2331
+
2332
+ context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
2333
+ .replace( runescape, funescape ), context ) || [] )[ 0 ];
2334
+ if ( !context ) {
2335
+ return results;
2336
+
2337
+ // Precompiled matchers will still verify ancestry, so step up a level
2338
+ } else if ( compiled ) {
2339
+ context = context.parentNode;
2340
+ }
2341
+
2342
+ selector = selector.slice( tokens.shift().value.length );
2343
+ }
2344
+
2345
+ // Fetch a seed set for right-to-left matching
2346
+ i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
2347
+ while ( i-- ) {
2348
+ token = tokens[ i ];
2349
+
2350
+ // Abort if we hit a combinator
2351
+ if ( Expr.relative[ ( type = token.type ) ] ) {
2352
+ break;
2353
+ }
2354
+ if ( ( find = Expr.find[ type ] ) ) {
2355
+
2356
+ // Search, expanding context for leading sibling combinators
2357
+ if ( ( seed = find(
2358
+ token.matches[ 0 ].replace( runescape, funescape ),
2359
+ rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
2360
+ context
2361
+ ) ) ) {
2362
+
2363
+ // If seed is empty or no tokens remain, we can return early
2364
+ tokens.splice( i, 1 );
2365
+ selector = seed.length && toSelector( tokens );
2366
+ if ( !selector ) {
2367
+ push.apply( results, seed );
2368
+ return results;
2369
+ }
2370
+
2371
+ break;
2372
+ }
2373
+ }
2374
+ }
2375
+ }
2376
+
2377
+ // Compile and execute a filtering function if one is not provided
2378
+ // Provide `match` to avoid retokenization if we modified the selector above
2379
+ ( compiled || compile( selector, match ) )(
2380
+ seed,
2381
+ context,
2382
+ !documentIsHTML,
2383
+ results,
2384
+ !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
2385
+ );
2386
+ return results;
2387
+ };
2388
+
2389
+ // One-time assignments
2390
+
2391
+ // Sort stability
2392
+ support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
2393
+
2394
+ // Support: Chrome 14-35+
2395
+ // Always assume duplicates if they aren't passed to the comparison function
2396
+ support.detectDuplicates = !!hasDuplicate;
2397
+
2398
+ // Initialize against the default document
2399
+ setDocument();
2400
+
2401
+ // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
2402
+ // Detached nodes confoundingly follow *each other*
2403
+ support.sortDetached = assert( function( el ) {
2404
+
2405
+ // Should return 1, but returns 4 (following)
2406
+ return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
2407
+ } );
2408
+
2409
+ // Support: IE<8
2410
+ // Prevent attribute/property "interpolation"
2411
+ // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
2412
+ if ( !assert( function( el ) {
2413
+ el.innerHTML = "<a href='#'></a>";
2414
+ return el.firstChild.getAttribute( "href" ) === "#";
2415
+ } ) ) {
2416
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
2417
+ if ( !isXML ) {
2418
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
2419
+ }
2420
+ } );
2421
+ }
2422
+
2423
+ // Support: IE<9
2424
+ // Use defaultValue in place of getAttribute("value")
2425
+ if ( !support.attributes || !assert( function( el ) {
2426
+ el.innerHTML = "<input/>";
2427
+ el.firstChild.setAttribute( "value", "" );
2428
+ return el.firstChild.getAttribute( "value" ) === "";
2429
+ } ) ) {
2430
+ addHandle( "value", function( elem, _name, isXML ) {
2431
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
2432
+ return elem.defaultValue;
2433
+ }
2434
+ } );
2435
+ }
2436
+
2437
+ // Support: IE<9
2438
+ // Use getAttributeNode to fetch booleans when getAttribute lies
2439
+ if ( !assert( function( el ) {
2440
+ return el.getAttribute( "disabled" ) == null;
2441
+ } ) ) {
2442
+ addHandle( booleans, function( elem, name, isXML ) {
2443
+ var val;
2444
+ if ( !isXML ) {
2445
+ return elem[ name ] === true ? name.toLowerCase() :
2446
+ ( val = elem.getAttributeNode( name ) ) && val.specified ?
2447
+ val.value :
2448
+ null;
2449
+ }
2450
+ } );
2451
+ }
2452
+
2453
+ // EXPOSE
2454
+ var _sizzle = window.Sizzle;
2455
+
2456
+ Sizzle.noConflict = function() {
2457
+ if ( window.Sizzle === Sizzle ) {
2458
+ window.Sizzle = _sizzle;
2459
+ }
2460
+
2461
+ return Sizzle;
2462
+ };
2463
+
2464
+ if ( typeof define === "function" && define.amd ) {
2465
+ define( function() {
2466
+ return Sizzle;
2467
+ } );
2468
+
2469
+ // Sizzle requires that there be a global window in Common-JS like environments
2470
+ } else if ( typeof module !== "undefined" && module.exports ) {
2471
+ module.exports = Sizzle;
2472
+ } else {
2473
+ window.Sizzle = Sizzle;
2474
+ }
2475
+
2476
+ // EXPOSE
2477
+
2478
+ } )( window );