bum 0.0.4 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (576) hide show
  1. data/README +0 -12
  2. data/bin/bum +16 -49
  3. data/bin/bum_master +20 -0
  4. data/lib/actor.rb +0 -0
  5. data/lib/app_role.rb +83 -0
  6. data/lib/client.rb +104 -0
  7. data/lib/db_crap.rb +85 -0
  8. data/lib/db_role.rb +107 -0
  9. data/lib/demo_socket.rb +51 -0
  10. data/lib/master.rb +109 -0
  11. data/lib/master_web.rb +81 -0
  12. data/lib/nice_socket.rb +77 -0
  13. data/lib/node.rb +96 -0
  14. data/lib/proxy_role.rb +132 -0
  15. data/lib/role.rb +99 -0
  16. data/lib/scenario.rb +186 -0
  17. data/lib/server.rb +30 -0
  18. data/lib/stats_role.rb +89 -0
  19. data/public/app.css +91 -0
  20. data/public/css/light.css +105 -0
  21. data/public/d3/LICENSE +26 -0
  22. data/public/d3/Makefile +247 -0
  23. data/public/d3/README.md +51 -0
  24. data/public/d3/d3.chart.js +984 -0
  25. data/public/d3/d3.chart.min.js +1 -0
  26. data/public/d3/d3.csv.js +92 -0
  27. data/public/d3/d3.csv.min.js +1 -0
  28. data/public/d3/d3.geo.js +692 -0
  29. data/public/d3/d3.geo.min.js +1 -0
  30. data/public/d3/d3.geom.js +825 -0
  31. data/public/d3/d3.geom.min.js +1 -0
  32. data/public/d3/d3.js +4013 -0
  33. data/public/d3/d3.layout.js +1865 -0
  34. data/public/d3/d3.layout.min.js +1 -0
  35. data/public/d3/d3.min.js +2 -0
  36. data/public/d3/d3.time.js +663 -0
  37. data/public/d3/d3.time.min.js +1 -0
  38. data/public/d3/examples/albers/albers.html +168 -0
  39. data/public/d3/examples/area/area-radial.html +48 -0
  40. data/public/d3/examples/area/area.html +113 -0
  41. data/public/d3/examples/axis/axis-alternating.html +50 -0
  42. data/public/d3/examples/axis/axis-ggplot2.html +68 -0
  43. data/public/d3/examples/axis/axis-multiples.html +117 -0
  44. data/public/d3/examples/axis/axis-orientations.html +63 -0
  45. data/public/d3/examples/axis/axis-transition.html +153 -0
  46. data/public/d3/examples/azimuthal/azimuthal.css +21 -0
  47. data/public/d3/examples/azimuthal/azimuthal.html +84 -0
  48. data/public/d3/examples/azimuthal/azimuthal.js +27 -0
  49. data/public/d3/examples/bar/bar.html +93 -0
  50. data/public/d3/examples/box/box.css +4 -0
  51. data/public/d3/examples/box/box.html +19 -0
  52. data/public/d3/examples/box/box.js +68 -0
  53. data/public/d3/examples/bubble/bubble.css +8 -0
  54. data/public/d3/examples/bubble/bubble.html +14 -0
  55. data/public/d3/examples/bubble/bubble.js +46 -0
  56. data/public/d3/examples/bullet/bullet.css +10 -0
  57. data/public/d3/examples/bullet/bullet.html +18 -0
  58. data/public/d3/examples/bullet/bullet.js +53 -0
  59. data/public/d3/examples/bullet/bullets.json +7 -0
  60. data/public/d3/examples/bundle/bundle-radial.css +9 -0
  61. data/public/d3/examples/bundle/bundle-radial.html +15 -0
  62. data/public/d3/examples/bundle/bundle-radial.js +50 -0
  63. data/public/d3/examples/bundle/bundle-treemap.css +14 -0
  64. data/public/d3/examples/bundle/bundle-treemap.html +16 -0
  65. data/public/d3/examples/bundle/bundle-treemap.js +53 -0
  66. data/public/d3/examples/bundle/packages.js +49 -0
  67. data/public/d3/examples/button.css +35 -0
  68. data/public/d3/examples/calendar/calendar.css +16 -0
  69. data/public/d3/examples/calendar/calendar.js +50 -0
  70. data/public/d3/examples/calendar/dji.csv +5233 -0
  71. data/public/d3/examples/calendar/dji.html +16 -0
  72. data/public/d3/examples/calendar/dji.js +61 -0
  73. data/public/d3/examples/calendar/vix.csv +5231 -0
  74. data/public/d3/examples/calendar/vix.html +16 -0
  75. data/public/d3/examples/calendar/vix.js +60 -0
  76. data/public/d3/examples/cartogram/cartogram.css +20 -0
  77. data/public/d3/examples/cartogram/cartogram.html +15 -0
  78. data/public/d3/examples/cartogram/cartogram.js +51 -0
  79. data/public/d3/examples/cartogram/demers.css +9 -0
  80. data/public/d3/examples/cartogram/demers.html +16 -0
  81. data/public/d3/examples/cartogram/demers.js +79 -0
  82. data/public/d3/examples/cartogram/dorling.css +9 -0
  83. data/public/d3/examples/cartogram/dorling.html +16 -0
  84. data/public/d3/examples/cartogram/dorling.js +80 -0
  85. data/public/d3/examples/chord/chord-flare.html +109 -0
  86. data/public/d3/examples/chord/chord.css +9 -0
  87. data/public/d3/examples/chord/chord.html +14 -0
  88. data/public/d3/examples/chord/chord.js +98 -0
  89. data/public/d3/examples/choropleth/choropleth-area.html +51 -0
  90. data/public/d3/examples/choropleth/choropleth-bounds.html +46 -0
  91. data/public/d3/examples/choropleth/choropleth.css +16 -0
  92. data/public/d3/examples/choropleth/choropleth.html +15 -0
  93. data/public/d3/examples/choropleth/choropleth.js +38 -0
  94. data/public/d3/examples/choropleth/unemployment.json +1 -0
  95. data/public/d3/examples/clock/clock.css +23 -0
  96. data/public/d3/examples/clock/clock.html +17 -0
  97. data/public/d3/examples/clock/clock.js +87 -0
  98. data/public/d3/examples/cluster/cluster-radial.html +14 -0
  99. data/public/d3/examples/cluster/cluster-radial.js +39 -0
  100. data/public/d3/examples/cluster/cluster.css +15 -0
  101. data/public/d3/examples/cluster/cluster.html +14 -0
  102. data/public/d3/examples/cluster/cluster.js +39 -0
  103. data/public/d3/examples/contour/contour.html +108 -0
  104. data/public/d3/examples/crimea/crimea-stacked-area.html +109 -0
  105. data/public/d3/examples/crimea/crimea-stacked-bar.html +98 -0
  106. data/public/d3/examples/crimea/crimea.csv +24 -0
  107. data/public/d3/examples/data/README +5 -0
  108. data/public/d3/examples/data/faithful.json +8 -0
  109. data/public/d3/examples/data/flare-imports.json +222 -0
  110. data/public/d3/examples/data/flare.json +380 -0
  111. data/public/d3/examples/data/morley.csv +101 -0
  112. data/public/d3/examples/data/sample.csv +2 -0
  113. data/public/d3/examples/data/sample.html +5 -0
  114. data/public/d3/examples/data/sample.json +1 -0
  115. data/public/d3/examples/data/sample.txt +1 -0
  116. data/public/d3/examples/data/sample.xml +4 -0
  117. data/public/d3/examples/data/stocks.csv +807 -0
  118. data/public/d3/examples/data/unemployment.csv +1709 -0
  119. data/public/d3/examples/data/us-borders.json +1 -0
  120. data/public/d3/examples/data/us-counties.json +3216 -0
  121. data/public/d3/examples/data/us-state-centroids.json +1 -0
  122. data/public/d3/examples/data/us-states.json +54 -0
  123. data/public/d3/examples/data/world-countries.json +246 -0
  124. data/public/d3/examples/delaunay/delaunay.html +44 -0
  125. data/public/d3/examples/donut/donut.html +124 -0
  126. data/public/d3/examples/dot/dot.html +103 -0
  127. data/public/d3/examples/force/README +10 -0
  128. data/public/d3/examples/force/force-bounds.html +70 -0
  129. data/public/d3/examples/force/force-cluster.html +251 -0
  130. data/public/d3/examples/force/force-dynamic.html +118 -0
  131. data/public/d3/examples/force/force-interactive.html +136 -0
  132. data/public/d3/examples/force/force-map.html +104 -0
  133. data/public/d3/examples/force/force-multi-foci.html +68 -0
  134. data/public/d3/examples/force/force.css +9 -0
  135. data/public/d3/examples/force/force.html +14 -0
  136. data/public/d3/examples/force/force.js +56 -0
  137. data/public/d3/examples/force/miserables.json +1 -0
  138. data/public/d3/examples/hello-world/hello-data-key.html +60 -0
  139. data/public/d3/examples/hello-world/hello-data-nested-key.html +75 -0
  140. data/public/d3/examples/hello-world/hello-data-nested.html +77 -0
  141. data/public/d3/examples/hello-world/hello-data.html +46 -0
  142. data/public/d3/examples/hello-world/hello-event.html +53 -0
  143. data/public/d3/examples/hello-world/hello-node-key.html +25 -0
  144. data/public/d3/examples/hello-world/hello-sort.html +75 -0
  145. data/public/d3/examples/hello-world/hello-transform.html +41 -0
  146. data/public/d3/examples/hello-world/hello-transition-undefined.html +43 -0
  147. data/public/d3/examples/hello-world/hello-transition.html +47 -0
  148. data/public/d3/examples/hello-world/hello-webkit-transition.html +64 -0
  149. data/public/d3/examples/hello-world/select-enter-add.html +29 -0
  150. data/public/d3/examples/hello-world/selectAll-enter-add.html +20 -0
  151. data/public/d3/examples/histogram/histogram.html +80 -0
  152. data/public/d3/examples/horizon/horizon.css +9 -0
  153. data/public/d3/examples/horizon/horizon.html +25 -0
  154. data/public/d3/examples/horizon/horizon.js +43 -0
  155. data/public/d3/examples/horizon/unemployment.json +1 -0
  156. data/public/d3/examples/hull/hull.html +75 -0
  157. data/public/d3/examples/kde/kde.css +9 -0
  158. data/public/d3/examples/kde/kde.html +14 -0
  159. data/public/d3/examples/kde/kde.js +40 -0
  160. data/public/d3/examples/line/line.css +22 -0
  161. data/public/d3/examples/line/line.html +11 -0
  162. data/public/d3/examples/line/line.js +63 -0
  163. data/public/d3/examples/marimekko/marimekko.html +116 -0
  164. data/public/d3/examples/marimekko/marimekko.json +18 -0
  165. data/public/d3/examples/marker/marker.html +169 -0
  166. data/public/d3/examples/mercator/mercator.html +133 -0
  167. data/public/d3/examples/moire/moire.html +53 -0
  168. data/public/d3/examples/pack/pack.css +15 -0
  169. data/public/d3/examples/pack/pack.html +14 -0
  170. data/public/d3/examples/pack/pack.js +33 -0
  171. data/public/d3/examples/partition/partition-icicle-zoom.html +59 -0
  172. data/public/d3/examples/partition/partition-icicle.html +45 -0
  173. data/public/d3/examples/partition/partition-sunburst-zoom.html +72 -0
  174. data/public/d3/examples/partition/partition-sunburst.html +21 -0
  175. data/public/d3/examples/partition/partition-sunburst.js +72 -0
  176. data/public/d3/examples/pie/pie-transition.html +70 -0
  177. data/public/d3/examples/pie/pie.html +51 -0
  178. data/public/d3/examples/population/population.css +28 -0
  179. data/public/d3/examples/population/population.csv +571 -0
  180. data/public/d3/examples/population/population.html +13 -0
  181. data/public/d3/examples/population/population.js +126 -0
  182. data/public/d3/examples/qq/qq.css +18 -0
  183. data/public/d3/examples/qq/qq.html +21 -0
  184. data/public/d3/examples/qq/qq.js +66 -0
  185. data/public/d3/examples/qq/stats.js +28 -0
  186. data/public/d3/examples/qq/turkers.json +1 -0
  187. data/public/d3/examples/quadtree/quadtree.html +114 -0
  188. data/public/d3/examples/sizzle/sizzle.html +27 -0
  189. data/public/d3/examples/sort/sort.css +4 -0
  190. data/public/d3/examples/sort/sort.html +12 -0
  191. data/public/d3/examples/sort/sort.js +112 -0
  192. data/public/d3/examples/spline/spline.css +30 -0
  193. data/public/d3/examples/spline/spline.html +14 -0
  194. data/public/d3/examples/spline/spline.js +113 -0
  195. data/public/d3/examples/splom/cross.js +7 -0
  196. data/public/d3/examples/splom/flowers.json +1 -0
  197. data/public/d3/examples/splom/splom.css +8 -0
  198. data/public/d3/examples/splom/splom.html +14 -0
  199. data/public/d3/examples/splom/splom.js +149 -0
  200. data/public/d3/examples/stream/stack.css +7 -0
  201. data/public/d3/examples/stream/stack.html +22 -0
  202. data/public/d3/examples/stream/stack.js +119 -0
  203. data/public/d3/examples/stream/stream.css +3 -0
  204. data/public/d3/examples/stream/stream.html +19 -0
  205. data/public/d3/examples/stream/stream.js +42 -0
  206. data/public/d3/examples/stream/stream_layers.js +33 -0
  207. data/public/d3/examples/superformula/dot.html +104 -0
  208. data/public/d3/examples/superformula/explorer.html +120 -0
  209. data/public/d3/examples/superformula/superformula.html +70 -0
  210. data/public/d3/examples/superformula/superformula.js +98 -0
  211. data/public/d3/examples/symbol-map/symbol-map.html +67 -0
  212. data/public/d3/examples/touch/touch.html +65 -0
  213. data/public/d3/examples/tree/tree-dynamic.html +111 -0
  214. data/public/d3/examples/tree/tree-interactive.html +139 -0
  215. data/public/d3/examples/tree/tree-radial.html +14 -0
  216. data/public/d3/examples/tree/tree-radial.js +40 -0
  217. data/public/d3/examples/tree/tree.css +15 -0
  218. data/public/d3/examples/tree/tree.html +14 -0
  219. data/public/d3/examples/tree/tree.js +39 -0
  220. data/public/d3/examples/treemap/treemap-svg.html +22 -0
  221. data/public/d3/examples/treemap/treemap-svg.js +34 -0
  222. data/public/d3/examples/treemap/treemap.css +8 -0
  223. data/public/d3/examples/treemap/treemap.html +22 -0
  224. data/public/d3/examples/treemap/treemap.js +53 -0
  225. data/public/d3/examples/voroboids/boid.js +235 -0
  226. data/public/d3/examples/voroboids/voroboids.css +15 -0
  227. data/public/d3/examples/voroboids/voroboids.html +14 -0
  228. data/public/d3/examples/voroboids/voroboids.js +65 -0
  229. data/public/d3/examples/voronoi/voronoi.css +16 -0
  230. data/public/d3/examples/voronoi/voronoi.html +15 -0
  231. data/public/d3/examples/voronoi/voronoi.js +34 -0
  232. data/public/d3/examples/zoom-pan/zoom-pan-transform.html +95 -0
  233. data/public/d3/examples/zoom-pan/zoom-pan.html +119 -0
  234. data/public/d3/examples/zoom/dji.csv +5233 -0
  235. data/public/d3/examples/zoom/zoom.html +162 -0
  236. data/public/d3/lib/colorbrewer/LICENSE +38 -0
  237. data/public/d3/lib/colorbrewer/colorbrewer.css +1327 -0
  238. data/public/d3/lib/colorbrewer/colorbrewer.js +32 -0
  239. data/public/d3/lib/jit/LICENSE +27 -0
  240. data/public/d3/lib/jquery-ui/LICENSE +25 -0
  241. data/public/d3/lib/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  242. data/public/d3/lib/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  243. data/public/d3/lib/jquery-ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
  244. data/public/d3/lib/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  245. data/public/d3/lib/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  246. data/public/d3/lib/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  247. data/public/d3/lib/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  248. data/public/d3/lib/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  249. data/public/d3/lib/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  250. data/public/d3/lib/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  251. data/public/d3/lib/jquery-ui/images/ui-icons_228ef1_256x240.png +0 -0
  252. data/public/d3/lib/jquery-ui/images/ui-icons_ef8c08_256x240.png +0 -0
  253. data/public/d3/lib/jquery-ui/images/ui-icons_ffd27a_256x240.png +0 -0
  254. data/public/d3/lib/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  255. data/public/d3/lib/jquery-ui/jquery-ui.css +318 -0
  256. data/public/d3/lib/jquery-ui/jquery-ui.min.js +83 -0
  257. data/public/d3/lib/jquery/LICENSE +20 -0
  258. data/public/d3/lib/jquery/jquery.js +6883 -0
  259. data/public/d3/lib/jquery/jquery.min.js +166 -0
  260. data/public/d3/lib/polymaps/LICENSE +28 -0
  261. data/public/d3/lib/protovis/LICENSE +27 -0
  262. data/public/d3/lib/science/LICENSE +26 -0
  263. data/public/d3/lib/science/science.js +5 -0
  264. data/public/d3/lib/science/science.min.js +1 -0
  265. data/public/d3/lib/science/science.stats.js +166 -0
  266. data/public/d3/lib/science/science.stats.min.js +1 -0
  267. data/public/d3/lib/sizzle/LICENSE +24 -0
  268. data/public/d3/lib/sizzle/sizzle.js +1376 -0
  269. data/public/d3/lib/sizzle/sizzle.min.js +28 -0
  270. data/public/d3/package.json +14 -0
  271. data/public/d3/src/behavior/behavior.js +1 -0
  272. data/public/d3/src/behavior/drag.js +106 -0
  273. data/public/d3/src/behavior/zoom.js +212 -0
  274. data/public/d3/src/chart/box.js +297 -0
  275. data/public/d3/src/chart/bullet.js +237 -0
  276. data/public/d3/src/chart/chart.js +1 -0
  277. data/public/d3/src/chart/horizon.js +203 -0
  278. data/public/d3/src/chart/qq.js +245 -0
  279. data/public/d3/src/compat/date.js +3 -0
  280. data/public/d3/src/compat/style.js +9 -0
  281. data/public/d3/src/core/array.js +11 -0
  282. data/public/d3/src/core/ascending.js +3 -0
  283. data/public/d3/src/core/bisect.js +38 -0
  284. data/public/d3/src/core/collapse.js +3 -0
  285. data/public/d3/src/core/core.js +1 -0
  286. data/public/d3/src/core/descending.js +3 -0
  287. data/public/d3/src/core/dispatch.js +45 -0
  288. data/public/d3/src/core/ease.js +128 -0
  289. data/public/d3/src/core/entries.js +5 -0
  290. data/public/d3/src/core/event.js +1 -0
  291. data/public/d3/src/core/first.js +13 -0
  292. data/public/d3/src/core/format.js +85 -0
  293. data/public/d3/src/core/functor.js +3 -0
  294. data/public/d3/src/core/hsl.js +62 -0
  295. data/public/d3/src/core/html.js +10 -0
  296. data/public/d3/src/core/interpolate.js +180 -0
  297. data/public/d3/src/core/json.js +5 -0
  298. data/public/d3/src/core/keys.js +5 -0
  299. data/public/d3/src/core/last.js +13 -0
  300. data/public/d3/src/core/max.js +14 -0
  301. data/public/d3/src/core/merge.js +3 -0
  302. data/public/d3/src/core/min.js +14 -0
  303. data/public/d3/src/core/nest.js +87 -0
  304. data/public/d3/src/core/noop.js +1 -0
  305. data/public/d3/src/core/ns.js +19 -0
  306. data/public/d3/src/core/permute.js +7 -0
  307. data/public/d3/src/core/quantile.js +8 -0
  308. data/public/d3/src/core/range.js +21 -0
  309. data/public/d3/src/core/rebind.js +7 -0
  310. data/public/d3/src/core/requote.js +5 -0
  311. data/public/d3/src/core/rgb.js +284 -0
  312. data/public/d3/src/core/round.js +5 -0
  313. data/public/d3/src/core/selection-append.js +15 -0
  314. data/public/d3/src/core/selection-attr.js +44 -0
  315. data/public/d3/src/core/selection-call.js +13 -0
  316. data/public/d3/src/core/selection-classed.js +46 -0
  317. data/public/d3/src/core/selection-data.js +110 -0
  318. data/public/d3/src/core/selection-each.js +9 -0
  319. data/public/d3/src/core/selection-empty.js +3 -0
  320. data/public/d3/src/core/selection-enter-select.js +24 -0
  321. data/public/d3/src/core/selection-enter.js +10 -0
  322. data/public/d3/src/core/selection-filter.js +19 -0
  323. data/public/d3/src/core/selection-html.js +6 -0
  324. data/public/d3/src/core/selection-insert.js +20 -0
  325. data/public/d3/src/core/selection-map.js +5 -0
  326. data/public/d3/src/core/selection-node.js +9 -0
  327. data/public/d3/src/core/selection-on.js +34 -0
  328. data/public/d3/src/core/selection-property.js +23 -0
  329. data/public/d3/src/core/selection-remove.js +9 -0
  330. data/public/d3/src/core/selection-root.js +16 -0
  331. data/public/d3/src/core/selection-select.js +30 -0
  332. data/public/d3/src/core/selection-selectAll.js +24 -0
  333. data/public/d3/src/core/selection-sort.js +20 -0
  334. data/public/d3/src/core/selection-style.js +26 -0
  335. data/public/d3/src/core/selection-text.js +6 -0
  336. data/public/d3/src/core/selection-transition.js +14 -0
  337. data/public/d3/src/core/selection.js +21 -0
  338. data/public/d3/src/core/split.js +21 -0
  339. data/public/d3/src/core/sum.js +14 -0
  340. data/public/d3/src/core/text.js +10 -0
  341. data/public/d3/src/core/this.js +3 -0
  342. data/public/d3/src/core/timer.js +104 -0
  343. data/public/d3/src/core/transition-attr.js +23 -0
  344. data/public/d3/src/core/transition-delay.js +6 -0
  345. data/public/d3/src/core/transition-duration.js +6 -0
  346. data/public/d3/src/core/transition-each.js +9 -0
  347. data/public/d3/src/core/transition-remove.js +6 -0
  348. data/public/d3/src/core/transition-select.js +22 -0
  349. data/public/d3/src/core/transition-selectAll.js +20 -0
  350. data/public/d3/src/core/transition-style.js +14 -0
  351. data/public/d3/src/core/transition-text.js +7 -0
  352. data/public/d3/src/core/transition-transition.js +3 -0
  353. data/public/d3/src/core/transition.js +105 -0
  354. data/public/d3/src/core/uninterpolate.js +9 -0
  355. data/public/d3/src/core/values.js +5 -0
  356. data/public/d3/src/core/xhr.js +10 -0
  357. data/public/d3/src/core/xml.js +10 -0
  358. data/public/d3/src/core/zip.js +13 -0
  359. data/public/d3/src/csv/csv.js +5 -0
  360. data/public/d3/src/csv/format.js +13 -0
  361. data/public/d3/src/csv/parse.js +73 -0
  362. data/public/d3/src/end.js +1 -0
  363. data/public/d3/src/externs.js +6 -0
  364. data/public/d3/src/geo/albers.js +128 -0
  365. data/public/d3/src/geo/azimuthal.js +70 -0
  366. data/public/d3/src/geo/bounds.js +76 -0
  367. data/public/d3/src/geo/geo.js +1 -0
  368. data/public/d3/src/geo/greatCircle.js +91 -0
  369. data/public/d3/src/geo/mercator.js +36 -0
  370. data/public/d3/src/geo/path.js +289 -0
  371. data/public/d3/src/geom/contour.js +78 -0
  372. data/public/d3/src/geom/delaunay.js +31 -0
  373. data/public/d3/src/geom/geom.js +1 -0
  374. data/public/d3/src/geom/hull.js +98 -0
  375. data/public/d3/src/geom/polygon.js +88 -0
  376. data/public/d3/src/geom/quadtree.js +129 -0
  377. data/public/d3/src/geom/voronoi.js +399 -0
  378. data/public/d3/src/layout/bundle.js +57 -0
  379. data/public/d3/src/layout/chord.js +148 -0
  380. data/public/d3/src/layout/cluster.js +77 -0
  381. data/public/d3/src/layout/force.js +332 -0
  382. data/public/d3/src/layout/hierarchy.js +120 -0
  383. data/public/d3/src/layout/histogram.js +102 -0
  384. data/public/d3/src/layout/layout.js +1 -0
  385. data/public/d3/src/layout/pack.js +200 -0
  386. data/public/d3/src/layout/partition.js +48 -0
  387. data/public/d3/src/layout/pie.js +95 -0
  388. data/public/d3/src/layout/stack.js +237 -0
  389. data/public/d3/src/layout/tree.js +234 -0
  390. data/public/d3/src/layout/treemap.js +213 -0
  391. data/public/d3/src/scale/bilinear.js +7 -0
  392. data/public/d3/src/scale/category.js +54 -0
  393. data/public/d3/src/scale/linear.js +115 -0
  394. data/public/d3/src/scale/log.js +80 -0
  395. data/public/d3/src/scale/nice.js +21 -0
  396. data/public/d3/src/scale/ordinal.js +74 -0
  397. data/public/d3/src/scale/polylinear.js +16 -0
  398. data/public/d3/src/scale/pow.js +54 -0
  399. data/public/d3/src/scale/quantile.js +43 -0
  400. data/public/d3/src/scale/quantize.js +36 -0
  401. data/public/d3/src/scale/scale.js +6 -0
  402. data/public/d3/src/scale/sqrt.js +3 -0
  403. data/public/d3/src/start.js +1 -0
  404. data/public/d3/src/svg/arc.js +95 -0
  405. data/public/d3/src/svg/area-radial.js +10 -0
  406. data/public/d3/src/svg/area.js +84 -0
  407. data/public/d3/src/svg/axis.js +182 -0
  408. data/public/d3/src/svg/chord.js +99 -0
  409. data/public/d3/src/svg/diagonal-radial.js +22 -0
  410. data/public/d3/src/svg/diagonal.js +38 -0
  411. data/public/d3/src/svg/line-radial.js +22 -0
  412. data/public/d3/src/svg/line.js +419 -0
  413. data/public/d3/src/svg/mouse.js +29 -0
  414. data/public/d3/src/svg/svg.js +1 -0
  415. data/public/d3/src/svg/symbol.js +98 -0
  416. data/public/d3/src/svg/touches.js +8 -0
  417. data/public/d3/src/time/day.js +7 -0
  418. data/public/d3/src/time/days.js +11 -0
  419. data/public/d3/src/time/format-iso.js +1 -0
  420. data/public/d3/src/time/format-utc.js +48 -0
  421. data/public/d3/src/time/format.js +315 -0
  422. data/public/d3/src/time/hour.js +8 -0
  423. data/public/d3/src/time/hours.js +11 -0
  424. data/public/d3/src/time/minute.js +5 -0
  425. data/public/d3/src/time/minutes.js +11 -0
  426. data/public/d3/src/time/month.js +7 -0
  427. data/public/d3/src/time/months.js +11 -0
  428. data/public/d3/src/time/range.js +16 -0
  429. data/public/d3/src/time/scale-utc.js +36 -0
  430. data/public/d3/src/time/scale.js +123 -0
  431. data/public/d3/src/time/second.js +5 -0
  432. data/public/d3/src/time/seconds.js +7 -0
  433. data/public/d3/src/time/time.js +3 -0
  434. data/public/d3/src/time/week.js +9 -0
  435. data/public/d3/src/time/weeks.js +11 -0
  436. data/public/d3/src/time/year.js +7 -0
  437. data/public/d3/src/time/years.js +11 -0
  438. data/public/d3/test/core/ascending-test.js +47 -0
  439. data/public/d3/test/core/bisect-test.js +103 -0
  440. data/public/d3/test/core/descending-test.js +47 -0
  441. data/public/d3/test/core/dispatch-test.js +116 -0
  442. data/public/d3/test/core/ease-test.js +129 -0
  443. data/public/d3/test/core/entries-test.js +43 -0
  444. data/public/d3/test/core/first-test.js +42 -0
  445. data/public/d3/test/core/format-test.js +204 -0
  446. data/public/d3/test/core/functor-test.js +29 -0
  447. data/public/d3/test/core/hsl-test.js +87 -0
  448. data/public/d3/test/core/html-test.js +37 -0
  449. data/public/d3/test/core/interpolate-test.js +203 -0
  450. data/public/d3/test/core/json-test.js +37 -0
  451. data/public/d3/test/core/keys-test.js +31 -0
  452. data/public/d3/test/core/last-test.js +42 -0
  453. data/public/d3/test/core/max-test.js +50 -0
  454. data/public/d3/test/core/merge-test.js +27 -0
  455. data/public/d3/test/core/min-test.js +50 -0
  456. data/public/d3/test/core/nest-test.js +236 -0
  457. data/public/d3/test/core/ns-test.js +53 -0
  458. data/public/d3/test/core/permute-test.js +53 -0
  459. data/public/d3/test/core/quantile-test.js +50 -0
  460. data/public/d3/test/core/range-test.js +93 -0
  461. data/public/d3/test/core/rebind-test.js +38 -0
  462. data/public/d3/test/core/requote-test.js +53 -0
  463. data/public/d3/test/core/rgb-test.js +89 -0
  464. data/public/d3/test/core/round-test.js +70 -0
  465. data/public/d3/test/core/select-test.js +42 -0
  466. data/public/d3/test/core/selectAll-test.js +42 -0
  467. data/public/d3/test/core/selection-append-test.js +119 -0
  468. data/public/d3/test/core/selection-attr-test.js +153 -0
  469. data/public/d3/test/core/selection-call-test.js +71 -0
  470. data/public/d3/test/core/selection-classed-test.js +200 -0
  471. data/public/d3/test/core/selection-data-test.js +165 -0
  472. data/public/d3/test/core/selection-each-test.js +83 -0
  473. data/public/d3/test/core/selection-empty-test.js +51 -0
  474. data/public/d3/test/core/selection-filter-test.js +63 -0
  475. data/public/d3/test/core/selection-html-test.js +121 -0
  476. data/public/d3/test/core/selection-insert-test.js +132 -0
  477. data/public/d3/test/core/selection-map-test.js +47 -0
  478. data/public/d3/test/core/selection-node-test.js +50 -0
  479. data/public/d3/test/core/selection-on-test.js +95 -0
  480. data/public/d3/test/core/selection-property-test.js +91 -0
  481. data/public/d3/test/core/selection-remove-test.js +39 -0
  482. data/public/d3/test/core/selection-select-test.js +125 -0
  483. data/public/d3/test/core/selection-selectAll-test.js +127 -0
  484. data/public/d3/test/core/selection-sort-test.js +59 -0
  485. data/public/d3/test/core/selection-style-test.js +100 -0
  486. data/public/d3/test/core/selection-test.js +35 -0
  487. data/public/d3/test/core/selection-text-test.js +109 -0
  488. data/public/d3/test/core/split-test.js +34 -0
  489. data/public/d3/test/core/sum-test.js +47 -0
  490. data/public/d3/test/core/text-test.js +48 -0
  491. data/public/d3/test/core/timer-test.js +62 -0
  492. data/public/d3/test/core/transition-test-attr.js +33 -0
  493. data/public/d3/test/core/transition-test-attrTween.js +67 -0
  494. data/public/d3/test/core/transition-test-call.js +33 -0
  495. data/public/d3/test/core/transition-test-delay.js +41 -0
  496. data/public/d3/test/core/transition-test-duration.js +41 -0
  497. data/public/d3/test/core/transition-test-each.js +166 -0
  498. data/public/d3/test/core/transition-test-id.js +20 -0
  499. data/public/d3/test/core/transition-test-remove.js +46 -0
  500. data/public/d3/test/core/transition-test-select.js +63 -0
  501. data/public/d3/test/core/transition-test-selectAll.js +55 -0
  502. data/public/d3/test/core/transition-test-style.js +38 -0
  503. data/public/d3/test/core/transition-test-styleTween.js +73 -0
  504. data/public/d3/test/core/transition-test-text.js +30 -0
  505. data/public/d3/test/core/transition-test-transition.js +60 -0
  506. data/public/d3/test/core/transition-test-tween.js +71 -0
  507. data/public/d3/test/core/transition-test.js +65 -0
  508. data/public/d3/test/core/values-test.js +35 -0
  509. data/public/d3/test/core/version-test.js +18 -0
  510. data/public/d3/test/core/xhr-test.js +56 -0
  511. data/public/d3/test/core/xml-test.js +48 -0
  512. data/public/d3/test/core/zip-test.js +32 -0
  513. data/public/d3/test/csv/csv-test.js +38 -0
  514. data/public/d3/test/csv/format-test.js +39 -0
  515. data/public/d3/test/csv/parse-test.js +101 -0
  516. data/public/d3/test/env-assert.js +96 -0
  517. data/public/d3/test/env-fragment.js +8 -0
  518. data/public/d3/test/env-xhr.js +56 -0
  519. data/public/d3/test/env.js +13 -0
  520. data/public/d3/test/geo/albers-test.js +57 -0
  521. data/public/d3/test/geo/azimuthal-test.js +89 -0
  522. data/public/d3/test/geo/greatCircle-test.js +42 -0
  523. data/public/d3/test/geo/mercator-test.js +57 -0
  524. data/public/d3/test/layout/histogram-test.js +91 -0
  525. data/public/d3/test/layout/partition-test.js +39 -0
  526. data/public/d3/test/layout/tree-test.js +21 -0
  527. data/public/d3/test/layout/treemap-test.js +180 -0
  528. data/public/d3/test/scale/category-test.js +74 -0
  529. data/public/d3/test/scale/linear-test.js +239 -0
  530. data/public/d3/test/scale/log-test.js +220 -0
  531. data/public/d3/test/scale/ordinal-test.js +193 -0
  532. data/public/d3/test/scale/pow-test.js +259 -0
  533. data/public/d3/test/scale/quantile-test.js +64 -0
  534. data/public/d3/test/scale/quantize-test.js +69 -0
  535. data/public/d3/test/scale/sqrt-test.js +256 -0
  536. data/public/d3/test/svg/arc-test.js +147 -0
  537. data/public/d3/test/svg/area-radial-test.js +200 -0
  538. data/public/d3/test/svg/area-test.js +191 -0
  539. data/public/d3/test/svg/axis-test.js +347 -0
  540. data/public/d3/test/svg/line-radial-test.js +125 -0
  541. data/public/d3/test/svg/line-test.js +189 -0
  542. data/public/d3/test/svg/symbol-test.js +96 -0
  543. data/public/d3/test/time/day-test.js +65 -0
  544. data/public/d3/test/time/days-test.js +105 -0
  545. data/public/d3/test/time/format-test.js +430 -0
  546. data/public/d3/test/time/hour-test.js +103 -0
  547. data/public/d3/test/time/hours-test.js +135 -0
  548. data/public/d3/test/time/minute-test.js +43 -0
  549. data/public/d3/test/time/minutes-test.js +101 -0
  550. data/public/d3/test/time/month-test.js +53 -0
  551. data/public/d3/test/time/months-test.js +105 -0
  552. data/public/d3/test/time/scale-test.js +525 -0
  553. data/public/d3/test/time/second-test.js +41 -0
  554. data/public/d3/test/time/seconds-test.js +101 -0
  555. data/public/d3/test/time/week-test.js +59 -0
  556. data/public/d3/test/time/weeks-test.js +105 -0
  557. data/public/d3/test/time/year-test.js +41 -0
  558. data/public/d3/test/time/years-test.js +73 -0
  559. data/public/graph.js +42 -0
  560. data/public/jquery.min.js +4 -0
  561. data/public/test.html +36 -0
  562. data/public/testdata/bigfucker.js +212 -0
  563. data/public/testdata/names_and_enabled.js +232 -0
  564. data/public/testdata/one.js +79 -0
  565. data/public/testdata/withnames.js +198 -0
  566. data/public/viz.js +289 -0
  567. data/views/graph.erb +15 -0
  568. data/views/one.erb +34 -0
  569. data/views/two.erb +44 -0
  570. data/views/vis.erb +47 -0
  571. metadata +594 -18
  572. data/lib/bum.rb +0 -385
  573. data/lib/client.rb.erb +0 -7
  574. data/lib/dhcpd.rb +0 -84
  575. data/lib/hosts.rb +0 -61
  576. data/lib/vmx.rb +0 -24
@@ -0,0 +1,1376 @@
1
+ /*!
2
+ * Sizzle CSS Selector Engine
3
+ * Copyright 2011, The Dojo Foundation
4
+ * Released under the MIT, BSD, and GPL Licenses.
5
+ * More information: http://sizzlejs.com/
6
+ */
7
+ (function(){
8
+
9
+ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
10
+ done = 0,
11
+ toString = Object.prototype.toString,
12
+ hasDuplicate = false,
13
+ baseHasDuplicate = true;
14
+
15
+ // Here we check if the JavaScript engine is using some sort of
16
+ // optimization where it does not always call our comparision
17
+ // function. If that is the case, discard the hasDuplicate value.
18
+ // Thus far that includes Google Chrome.
19
+ [0, 0].sort(function() {
20
+ baseHasDuplicate = false;
21
+ return 0;
22
+ });
23
+
24
+ var Sizzle = function( selector, context, results, seed ) {
25
+ results = results || [];
26
+ context = context || document;
27
+
28
+ var origContext = context;
29
+
30
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
31
+ return [];
32
+ }
33
+
34
+ if ( !selector || typeof selector !== "string" ) {
35
+ return results;
36
+ }
37
+
38
+ var m, set, checkSet, extra, ret, cur, pop, i,
39
+ prune = true,
40
+ contextXML = Sizzle.isXML( context ),
41
+ parts = [],
42
+ soFar = selector;
43
+
44
+ // Reset the position of the chunker regexp (start from head)
45
+ do {
46
+ chunker.exec( "" );
47
+ m = chunker.exec( soFar );
48
+
49
+ if ( m ) {
50
+ soFar = m[3];
51
+
52
+ parts.push( m[1] );
53
+
54
+ if ( m[2] ) {
55
+ extra = m[3];
56
+ break;
57
+ }
58
+ }
59
+ } while ( m );
60
+
61
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
62
+
63
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
64
+ set = posProcess( parts[0] + parts[1], context );
65
+
66
+ } else {
67
+ set = Expr.relative[ parts[0] ] ?
68
+ [ context ] :
69
+ Sizzle( parts.shift(), context );
70
+
71
+ while ( parts.length ) {
72
+ selector = parts.shift();
73
+
74
+ if ( Expr.relative[ selector ] ) {
75
+ selector += parts.shift();
76
+ }
77
+
78
+ set = posProcess( selector, set );
79
+ }
80
+ }
81
+
82
+ } else {
83
+ // Take a shortcut and set the context if the root selector is an ID
84
+ // (but not if it'll be faster if the inner selector is an ID)
85
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
86
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
87
+
88
+ ret = Sizzle.find( parts.shift(), context, contextXML );
89
+ context = ret.expr ?
90
+ Sizzle.filter( ret.expr, ret.set )[0] :
91
+ ret.set[0];
92
+ }
93
+
94
+ if ( context ) {
95
+ ret = seed ?
96
+ { expr: parts.pop(), set: makeArray(seed) } :
97
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
98
+
99
+ set = ret.expr ?
100
+ Sizzle.filter( ret.expr, ret.set ) :
101
+ ret.set;
102
+
103
+ if ( parts.length > 0 ) {
104
+ checkSet = makeArray( set );
105
+
106
+ } else {
107
+ prune = false;
108
+ }
109
+
110
+ while ( parts.length ) {
111
+ cur = parts.pop();
112
+ pop = cur;
113
+
114
+ if ( !Expr.relative[ cur ] ) {
115
+ cur = "";
116
+ } else {
117
+ pop = parts.pop();
118
+ }
119
+
120
+ if ( pop == null ) {
121
+ pop = context;
122
+ }
123
+
124
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
125
+ }
126
+
127
+ } else {
128
+ checkSet = parts = [];
129
+ }
130
+ }
131
+
132
+ if ( !checkSet ) {
133
+ checkSet = set;
134
+ }
135
+
136
+ if ( !checkSet ) {
137
+ Sizzle.error( cur || selector );
138
+ }
139
+
140
+ if ( toString.call(checkSet) === "[object Array]" ) {
141
+ if ( !prune ) {
142
+ results.push.apply( results, checkSet );
143
+
144
+ } else if ( context && context.nodeType === 1 ) {
145
+ for ( i = 0; checkSet[i] != null; i++ ) {
146
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
147
+ results.push( set[i] );
148
+ }
149
+ }
150
+
151
+ } else {
152
+ for ( i = 0; checkSet[i] != null; i++ ) {
153
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
154
+ results.push( set[i] );
155
+ }
156
+ }
157
+ }
158
+
159
+ } else {
160
+ makeArray( checkSet, results );
161
+ }
162
+
163
+ if ( extra ) {
164
+ Sizzle( extra, origContext, results, seed );
165
+ Sizzle.uniqueSort( results );
166
+ }
167
+
168
+ return results;
169
+ };
170
+
171
+ Sizzle.uniqueSort = function( results ) {
172
+ if ( sortOrder ) {
173
+ hasDuplicate = baseHasDuplicate;
174
+ results.sort( sortOrder );
175
+
176
+ if ( hasDuplicate ) {
177
+ for ( var i = 1; i < results.length; i++ ) {
178
+ if ( results[i] === results[ i - 1 ] ) {
179
+ results.splice( i--, 1 );
180
+ }
181
+ }
182
+ }
183
+ }
184
+
185
+ return results;
186
+ };
187
+
188
+ Sizzle.matches = function( expr, set ) {
189
+ return Sizzle( expr, null, null, set );
190
+ };
191
+
192
+ Sizzle.matchesSelector = function( node, expr ) {
193
+ return Sizzle( expr, null, null, [node] ).length > 0;
194
+ };
195
+
196
+ Sizzle.find = function( expr, context, isXML ) {
197
+ var set;
198
+
199
+ if ( !expr ) {
200
+ return [];
201
+ }
202
+
203
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
204
+ var match,
205
+ type = Expr.order[i];
206
+
207
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
208
+ var left = match[1];
209
+ match.splice( 1, 1 );
210
+
211
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
212
+ match[1] = (match[1] || "").replace(/\\/g, "");
213
+ set = Expr.find[ type ]( match, context, isXML );
214
+
215
+ if ( set != null ) {
216
+ expr = expr.replace( Expr.match[ type ], "" );
217
+ break;
218
+ }
219
+ }
220
+ }
221
+ }
222
+
223
+ if ( !set ) {
224
+ set = typeof context.getElementsByTagName !== "undefined" ?
225
+ context.getElementsByTagName( "*" ) :
226
+ [];
227
+ }
228
+
229
+ return { set: set, expr: expr };
230
+ };
231
+
232
+ Sizzle.filter = function( expr, set, inplace, not ) {
233
+ var match, anyFound,
234
+ old = expr,
235
+ result = [],
236
+ curLoop = set,
237
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
238
+
239
+ while ( expr && set.length ) {
240
+ for ( var type in Expr.filter ) {
241
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
242
+ var found, item,
243
+ filter = Expr.filter[ type ],
244
+ left = match[1];
245
+
246
+ anyFound = false;
247
+
248
+ match.splice(1,1);
249
+
250
+ if ( left.substr( left.length - 1 ) === "\\" ) {
251
+ continue;
252
+ }
253
+
254
+ if ( curLoop === result ) {
255
+ result = [];
256
+ }
257
+
258
+ if ( Expr.preFilter[ type ] ) {
259
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
260
+
261
+ if ( !match ) {
262
+ anyFound = found = true;
263
+
264
+ } else if ( match === true ) {
265
+ continue;
266
+ }
267
+ }
268
+
269
+ if ( match ) {
270
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
271
+ if ( item ) {
272
+ found = filter( item, match, i, curLoop );
273
+ var pass = not ^ !!found;
274
+
275
+ if ( inplace && found != null ) {
276
+ if ( pass ) {
277
+ anyFound = true;
278
+
279
+ } else {
280
+ curLoop[i] = false;
281
+ }
282
+
283
+ } else if ( pass ) {
284
+ result.push( item );
285
+ anyFound = true;
286
+ }
287
+ }
288
+ }
289
+ }
290
+
291
+ if ( found !== undefined ) {
292
+ if ( !inplace ) {
293
+ curLoop = result;
294
+ }
295
+
296
+ expr = expr.replace( Expr.match[ type ], "" );
297
+
298
+ if ( !anyFound ) {
299
+ return [];
300
+ }
301
+
302
+ break;
303
+ }
304
+ }
305
+ }
306
+
307
+ // Improper expression
308
+ if ( expr === old ) {
309
+ if ( anyFound == null ) {
310
+ Sizzle.error( expr );
311
+
312
+ } else {
313
+ break;
314
+ }
315
+ }
316
+
317
+ old = expr;
318
+ }
319
+
320
+ return curLoop;
321
+ };
322
+
323
+ Sizzle.error = function( msg ) {
324
+ throw "Syntax error, unrecognized expression: " + msg;
325
+ };
326
+
327
+ var Expr = Sizzle.selectors = {
328
+ order: [ "ID", "NAME", "TAG" ],
329
+
330
+ match: {
331
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
332
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
333
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
334
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
335
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
336
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
337
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
338
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
339
+ },
340
+
341
+ leftMatch: {},
342
+
343
+ attrMap: {
344
+ "class": "className",
345
+ "for": "htmlFor"
346
+ },
347
+
348
+ attrHandle: {
349
+ href: function( elem ) {
350
+ return elem.getAttribute( "href" );
351
+ }
352
+ },
353
+
354
+ relative: {
355
+ "+": function(checkSet, part){
356
+ var isPartStr = typeof part === "string",
357
+ isTag = isPartStr && !/\W/.test( part ),
358
+ isPartStrNotTag = isPartStr && !isTag;
359
+
360
+ if ( isTag ) {
361
+ part = part.toLowerCase();
362
+ }
363
+
364
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
365
+ if ( (elem = checkSet[i]) ) {
366
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
367
+
368
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
369
+ elem || false :
370
+ elem === part;
371
+ }
372
+ }
373
+
374
+ if ( isPartStrNotTag ) {
375
+ Sizzle.filter( part, checkSet, true );
376
+ }
377
+ },
378
+
379
+ ">": function( checkSet, part ) {
380
+ var elem,
381
+ isPartStr = typeof part === "string",
382
+ i = 0,
383
+ l = checkSet.length;
384
+
385
+ if ( isPartStr && !/\W/.test( part ) ) {
386
+ part = part.toLowerCase();
387
+
388
+ for ( ; i < l; i++ ) {
389
+ elem = checkSet[i];
390
+
391
+ if ( elem ) {
392
+ var parent = elem.parentNode;
393
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
394
+ }
395
+ }
396
+
397
+ } else {
398
+ for ( ; i < l; i++ ) {
399
+ elem = checkSet[i];
400
+
401
+ if ( elem ) {
402
+ checkSet[i] = isPartStr ?
403
+ elem.parentNode :
404
+ elem.parentNode === part;
405
+ }
406
+ }
407
+
408
+ if ( isPartStr ) {
409
+ Sizzle.filter( part, checkSet, true );
410
+ }
411
+ }
412
+ },
413
+
414
+ "": function(checkSet, part, isXML){
415
+ var nodeCheck,
416
+ doneName = done++,
417
+ checkFn = dirCheck;
418
+
419
+ if ( typeof part === "string" && !/\W/.test(part) ) {
420
+ part = part.toLowerCase();
421
+ nodeCheck = part;
422
+ checkFn = dirNodeCheck;
423
+ }
424
+
425
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
426
+ },
427
+
428
+ "~": function( checkSet, part, isXML ) {
429
+ var nodeCheck,
430
+ doneName = done++,
431
+ checkFn = dirCheck;
432
+
433
+ if ( typeof part === "string" && !/\W/.test( part ) ) {
434
+ part = part.toLowerCase();
435
+ nodeCheck = part;
436
+ checkFn = dirNodeCheck;
437
+ }
438
+
439
+ checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
440
+ }
441
+ },
442
+
443
+ find: {
444
+ ID: function( match, context, isXML ) {
445
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
446
+ var m = context.getElementById(match[1]);
447
+ // Check parentNode to catch when Blackberry 4.6 returns
448
+ // nodes that are no longer in the document #6963
449
+ return m && m.parentNode ? [m] : [];
450
+ }
451
+ },
452
+
453
+ NAME: function( match, context ) {
454
+ if ( typeof context.getElementsByName !== "undefined" ) {
455
+ var ret = [],
456
+ results = context.getElementsByName( match[1] );
457
+
458
+ for ( var i = 0, l = results.length; i < l; i++ ) {
459
+ if ( results[i].getAttribute("name") === match[1] ) {
460
+ ret.push( results[i] );
461
+ }
462
+ }
463
+
464
+ return ret.length === 0 ? null : ret;
465
+ }
466
+ },
467
+
468
+ TAG: function( match, context ) {
469
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
470
+ return context.getElementsByTagName( match[1] );
471
+ }
472
+ }
473
+ },
474
+ preFilter: {
475
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
476
+ match = " " + match[1].replace(/\\/g, "") + " ";
477
+
478
+ if ( isXML ) {
479
+ return match;
480
+ }
481
+
482
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
483
+ if ( elem ) {
484
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
485
+ if ( !inplace ) {
486
+ result.push( elem );
487
+ }
488
+
489
+ } else if ( inplace ) {
490
+ curLoop[i] = false;
491
+ }
492
+ }
493
+ }
494
+
495
+ return false;
496
+ },
497
+
498
+ ID: function( match ) {
499
+ return match[1].replace(/\\/g, "");
500
+ },
501
+
502
+ TAG: function( match, curLoop ) {
503
+ return match[1].toLowerCase();
504
+ },
505
+
506
+ CHILD: function( match ) {
507
+ if ( match[1] === "nth" ) {
508
+ if ( !match[2] ) {
509
+ Sizzle.error( match[0] );
510
+ }
511
+
512
+ match[2] = match[2].replace(/^\+|\s*/g, '');
513
+
514
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
515
+ var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
516
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
517
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
518
+
519
+ // calculate the numbers (first)n+(last) including if they are negative
520
+ match[2] = (test[1] + (test[2] || 1)) - 0;
521
+ match[3] = test[3] - 0;
522
+ }
523
+ else if ( match[2] ) {
524
+ Sizzle.error( match[0] );
525
+ }
526
+
527
+ // TODO: Move to normal caching system
528
+ match[0] = done++;
529
+
530
+ return match;
531
+ },
532
+
533
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
534
+ var name = match[1] = match[1].replace(/\\/g, "");
535
+
536
+ if ( !isXML && Expr.attrMap[name] ) {
537
+ match[1] = Expr.attrMap[name];
538
+ }
539
+
540
+ // Handle if an un-quoted value was used
541
+ match[4] = ( match[4] || match[5] || "" ).replace(/\\/g, "");
542
+
543
+ if ( match[2] === "~=" ) {
544
+ match[4] = " " + match[4] + " ";
545
+ }
546
+
547
+ return match;
548
+ },
549
+
550
+ PSEUDO: function( match, curLoop, inplace, result, not ) {
551
+ if ( match[1] === "not" ) {
552
+ // If we're dealing with a complex expression, or a simple one
553
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
554
+ match[3] = Sizzle(match[3], null, null, curLoop);
555
+
556
+ } else {
557
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
558
+
559
+ if ( !inplace ) {
560
+ result.push.apply( result, ret );
561
+ }
562
+
563
+ return false;
564
+ }
565
+
566
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
567
+ return true;
568
+ }
569
+
570
+ return match;
571
+ },
572
+
573
+ POS: function( match ) {
574
+ match.unshift( true );
575
+
576
+ return match;
577
+ }
578
+ },
579
+
580
+ filters: {
581
+ enabled: function( elem ) {
582
+ return elem.disabled === false && elem.type !== "hidden";
583
+ },
584
+
585
+ disabled: function( elem ) {
586
+ return elem.disabled === true;
587
+ },
588
+
589
+ checked: function( elem ) {
590
+ return elem.checked === true;
591
+ },
592
+
593
+ selected: function( elem ) {
594
+ // Accessing this property makes selected-by-default
595
+ // options in Safari work properly
596
+ elem.parentNode.selectedIndex;
597
+
598
+ return elem.selected === true;
599
+ },
600
+
601
+ parent: function( elem ) {
602
+ return !!elem.firstChild;
603
+ },
604
+
605
+ empty: function( elem ) {
606
+ return !elem.firstChild;
607
+ },
608
+
609
+ has: function( elem, i, match ) {
610
+ return !!Sizzle( match[3], elem ).length;
611
+ },
612
+
613
+ header: function( elem ) {
614
+ return (/h\d/i).test( elem.nodeName );
615
+ },
616
+
617
+ text: function( elem ) {
618
+ return "text" === elem.type;
619
+ },
620
+ radio: function( elem ) {
621
+ return "radio" === elem.type;
622
+ },
623
+
624
+ checkbox: function( elem ) {
625
+ return "checkbox" === elem.type;
626
+ },
627
+
628
+ file: function( elem ) {
629
+ return "file" === elem.type;
630
+ },
631
+ password: function( elem ) {
632
+ return "password" === elem.type;
633
+ },
634
+
635
+ submit: function( elem ) {
636
+ return "submit" === elem.type;
637
+ },
638
+
639
+ image: function( elem ) {
640
+ return "image" === elem.type;
641
+ },
642
+
643
+ reset: function( elem ) {
644
+ return "reset" === elem.type;
645
+ },
646
+
647
+ button: function( elem ) {
648
+ return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
649
+ },
650
+
651
+ input: function( elem ) {
652
+ return (/input|select|textarea|button/i).test( elem.nodeName );
653
+ }
654
+ },
655
+ setFilters: {
656
+ first: function( elem, i ) {
657
+ return i === 0;
658
+ },
659
+
660
+ last: function( elem, i, match, array ) {
661
+ return i === array.length - 1;
662
+ },
663
+
664
+ even: function( elem, i ) {
665
+ return i % 2 === 0;
666
+ },
667
+
668
+ odd: function( elem, i ) {
669
+ return i % 2 === 1;
670
+ },
671
+
672
+ lt: function( elem, i, match ) {
673
+ return i < match[3] - 0;
674
+ },
675
+
676
+ gt: function( elem, i, match ) {
677
+ return i > match[3] - 0;
678
+ },
679
+
680
+ nth: function( elem, i, match ) {
681
+ return match[3] - 0 === i;
682
+ },
683
+
684
+ eq: function( elem, i, match ) {
685
+ return match[3] - 0 === i;
686
+ }
687
+ },
688
+ filter: {
689
+ PSEUDO: function( elem, match, i, array ) {
690
+ var name = match[1],
691
+ filter = Expr.filters[ name ];
692
+
693
+ if ( filter ) {
694
+ return filter( elem, i, match, array );
695
+
696
+ } else if ( name === "contains" ) {
697
+ return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
698
+
699
+ } else if ( name === "not" ) {
700
+ var not = match[3];
701
+
702
+ for ( var j = 0, l = not.length; j < l; j++ ) {
703
+ if ( not[j] === elem ) {
704
+ return false;
705
+ }
706
+ }
707
+
708
+ return true;
709
+
710
+ } else {
711
+ Sizzle.error( name );
712
+ }
713
+ },
714
+
715
+ CHILD: function( elem, match ) {
716
+ var type = match[1],
717
+ node = elem;
718
+
719
+ switch ( type ) {
720
+ case "only":
721
+ case "first":
722
+ while ( (node = node.previousSibling) ) {
723
+ if ( node.nodeType === 1 ) {
724
+ return false;
725
+ }
726
+ }
727
+
728
+ if ( type === "first" ) {
729
+ return true;
730
+ }
731
+
732
+ node = elem;
733
+
734
+ case "last":
735
+ while ( (node = node.nextSibling) ) {
736
+ if ( node.nodeType === 1 ) {
737
+ return false;
738
+ }
739
+ }
740
+
741
+ return true;
742
+
743
+ case "nth":
744
+ var first = match[2],
745
+ last = match[3];
746
+
747
+ if ( first === 1 && last === 0 ) {
748
+ return true;
749
+ }
750
+
751
+ var doneName = match[0],
752
+ parent = elem.parentNode;
753
+
754
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
755
+ var count = 0;
756
+
757
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
758
+ if ( node.nodeType === 1 ) {
759
+ node.nodeIndex = ++count;
760
+ }
761
+ }
762
+
763
+ parent.sizcache = doneName;
764
+ }
765
+
766
+ var diff = elem.nodeIndex - last;
767
+
768
+ if ( first === 0 ) {
769
+ return diff === 0;
770
+
771
+ } else {
772
+ return ( diff % first === 0 && diff / first >= 0 );
773
+ }
774
+ }
775
+ },
776
+
777
+ ID: function( elem, match ) {
778
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
779
+ },
780
+
781
+ TAG: function( elem, match ) {
782
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
783
+ },
784
+
785
+ CLASS: function( elem, match ) {
786
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
787
+ .indexOf( match ) > -1;
788
+ },
789
+
790
+ ATTR: function( elem, match ) {
791
+ var name = match[1],
792
+ result = Expr.attrHandle[ name ] ?
793
+ Expr.attrHandle[ name ]( elem ) :
794
+ elem[ name ] != null ?
795
+ elem[ name ] :
796
+ elem.getAttribute( name ),
797
+ value = result + "",
798
+ type = match[2],
799
+ check = match[4];
800
+
801
+ return result == null ?
802
+ type === "!=" :
803
+ type === "=" ?
804
+ value === check :
805
+ type === "*=" ?
806
+ value.indexOf(check) >= 0 :
807
+ type === "~=" ?
808
+ (" " + value + " ").indexOf(check) >= 0 :
809
+ !check ?
810
+ value && result !== false :
811
+ type === "!=" ?
812
+ value !== check :
813
+ type === "^=" ?
814
+ value.indexOf(check) === 0 :
815
+ type === "$=" ?
816
+ value.substr(value.length - check.length) === check :
817
+ type === "|=" ?
818
+ value === check || value.substr(0, check.length + 1) === check + "-" :
819
+ false;
820
+ },
821
+
822
+ POS: function( elem, match, i, array ) {
823
+ var name = match[2],
824
+ filter = Expr.setFilters[ name ];
825
+
826
+ if ( filter ) {
827
+ return filter( elem, i, match, array );
828
+ }
829
+ }
830
+ }
831
+ };
832
+
833
+ var origPOS = Expr.match.POS,
834
+ fescape = function(all, num){
835
+ return "\\" + (num - 0 + 1);
836
+ };
837
+
838
+ for ( var type in Expr.match ) {
839
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
840
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
841
+ }
842
+
843
+ var makeArray = function( array, results ) {
844
+ array = Array.prototype.slice.call( array, 0 );
845
+
846
+ if ( results ) {
847
+ results.push.apply( results, array );
848
+ return results;
849
+ }
850
+
851
+ return array;
852
+ };
853
+
854
+ // Perform a simple check to determine if the browser is capable of
855
+ // converting a NodeList to an array using builtin methods.
856
+ // Also verifies that the returned array holds DOM nodes
857
+ // (which is not the case in the Blackberry browser)
858
+ try {
859
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
860
+
861
+ // Provide a fallback method if it does not work
862
+ } catch( e ) {
863
+ makeArray = function( array, results ) {
864
+ var i = 0,
865
+ ret = results || [];
866
+
867
+ if ( toString.call(array) === "[object Array]" ) {
868
+ Array.prototype.push.apply( ret, array );
869
+
870
+ } else {
871
+ if ( typeof array.length === "number" ) {
872
+ for ( var l = array.length; i < l; i++ ) {
873
+ ret.push( array[i] );
874
+ }
875
+
876
+ } else {
877
+ for ( ; array[i]; i++ ) {
878
+ ret.push( array[i] );
879
+ }
880
+ }
881
+ }
882
+
883
+ return ret;
884
+ };
885
+ }
886
+
887
+ var sortOrder, siblingCheck;
888
+
889
+ if ( document.documentElement.compareDocumentPosition ) {
890
+ sortOrder = function( a, b ) {
891
+ if ( a === b ) {
892
+ hasDuplicate = true;
893
+ return 0;
894
+ }
895
+
896
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
897
+ return a.compareDocumentPosition ? -1 : 1;
898
+ }
899
+
900
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1;
901
+ };
902
+
903
+ } else {
904
+ sortOrder = function( a, b ) {
905
+ var al, bl,
906
+ ap = [],
907
+ bp = [],
908
+ aup = a.parentNode,
909
+ bup = b.parentNode,
910
+ cur = aup;
911
+
912
+ // The nodes are identical, we can exit early
913
+ if ( a === b ) {
914
+ hasDuplicate = true;
915
+ return 0;
916
+
917
+ // If the nodes are siblings (or identical) we can do a quick check
918
+ } else if ( aup === bup ) {
919
+ return siblingCheck( a, b );
920
+
921
+ // If no parents were found then the nodes are disconnected
922
+ } else if ( !aup ) {
923
+ return -1;
924
+
925
+ } else if ( !bup ) {
926
+ return 1;
927
+ }
928
+
929
+ // Otherwise they're somewhere else in the tree so we need
930
+ // to build up a full list of the parentNodes for comparison
931
+ while ( cur ) {
932
+ ap.unshift( cur );
933
+ cur = cur.parentNode;
934
+ }
935
+
936
+ cur = bup;
937
+
938
+ while ( cur ) {
939
+ bp.unshift( cur );
940
+ cur = cur.parentNode;
941
+ }
942
+
943
+ al = ap.length;
944
+ bl = bp.length;
945
+
946
+ // Start walking down the tree looking for a discrepancy
947
+ for ( var i = 0; i < al && i < bl; i++ ) {
948
+ if ( ap[i] !== bp[i] ) {
949
+ return siblingCheck( ap[i], bp[i] );
950
+ }
951
+ }
952
+
953
+ // We ended someplace up the tree so do a sibling check
954
+ return i === al ?
955
+ siblingCheck( a, bp[i], -1 ) :
956
+ siblingCheck( ap[i], b, 1 );
957
+ };
958
+
959
+ siblingCheck = function( a, b, ret ) {
960
+ if ( a === b ) {
961
+ return ret;
962
+ }
963
+
964
+ var cur = a.nextSibling;
965
+
966
+ while ( cur ) {
967
+ if ( cur === b ) {
968
+ return -1;
969
+ }
970
+
971
+ cur = cur.nextSibling;
972
+ }
973
+
974
+ return 1;
975
+ };
976
+ }
977
+
978
+ // Utility function for retreiving the text value of an array of DOM nodes
979
+ Sizzle.getText = function( elems ) {
980
+ var ret = "", elem;
981
+
982
+ for ( var i = 0; elems[i]; i++ ) {
983
+ elem = elems[i];
984
+
985
+ // Get the text from text nodes and CDATA nodes
986
+ if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
987
+ ret += elem.nodeValue;
988
+
989
+ // Traverse everything else, except comment nodes
990
+ } else if ( elem.nodeType !== 8 ) {
991
+ ret += Sizzle.getText( elem.childNodes );
992
+ }
993
+ }
994
+
995
+ return ret;
996
+ };
997
+
998
+ // Check to see if the browser returns elements by name when
999
+ // querying by getElementById (and provide a workaround)
1000
+ (function(){
1001
+ // We're going to inject a fake input element with a specified name
1002
+ var form = document.createElement("div"),
1003
+ id = "script" + (new Date()).getTime(),
1004
+ root = document.documentElement;
1005
+
1006
+ form.innerHTML = "<a name='" + id + "'/>";
1007
+
1008
+ // Inject it into the root element, check its status, and remove it quickly
1009
+ root.insertBefore( form, root.firstChild );
1010
+
1011
+ // The workaround has to do additional checks after a getElementById
1012
+ // Which slows things down for other browsers (hence the branching)
1013
+ if ( document.getElementById( id ) ) {
1014
+ Expr.find.ID = function( match, context, isXML ) {
1015
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
1016
+ var m = context.getElementById(match[1]);
1017
+
1018
+ return m ?
1019
+ m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
1020
+ [m] :
1021
+ undefined :
1022
+ [];
1023
+ }
1024
+ };
1025
+
1026
+ Expr.filter.ID = function( elem, match ) {
1027
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
1028
+
1029
+ return elem.nodeType === 1 && node && node.nodeValue === match;
1030
+ };
1031
+ }
1032
+
1033
+ root.removeChild( form );
1034
+
1035
+ // release memory in IE
1036
+ root = form = null;
1037
+ })();
1038
+
1039
+ (function(){
1040
+ // Check to see if the browser returns only elements
1041
+ // when doing getElementsByTagName("*")
1042
+
1043
+ // Create a fake element
1044
+ var div = document.createElement("div");
1045
+ div.appendChild( document.createComment("") );
1046
+
1047
+ // Make sure no comments are found
1048
+ if ( div.getElementsByTagName("*").length > 0 ) {
1049
+ Expr.find.TAG = function( match, context ) {
1050
+ var results = context.getElementsByTagName( match[1] );
1051
+
1052
+ // Filter out possible comments
1053
+ if ( match[1] === "*" ) {
1054
+ var tmp = [];
1055
+
1056
+ for ( var i = 0; results[i]; i++ ) {
1057
+ if ( results[i].nodeType === 1 ) {
1058
+ tmp.push( results[i] );
1059
+ }
1060
+ }
1061
+
1062
+ results = tmp;
1063
+ }
1064
+
1065
+ return results;
1066
+ };
1067
+ }
1068
+
1069
+ // Check to see if an attribute returns normalized href attributes
1070
+ div.innerHTML = "<a href='#'></a>";
1071
+
1072
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
1073
+ div.firstChild.getAttribute("href") !== "#" ) {
1074
+
1075
+ Expr.attrHandle.href = function( elem ) {
1076
+ return elem.getAttribute( "href", 2 );
1077
+ };
1078
+ }
1079
+
1080
+ // release memory in IE
1081
+ div = null;
1082
+ })();
1083
+
1084
+ if ( document.querySelectorAll ) {
1085
+ (function(){
1086
+ var oldSizzle = Sizzle,
1087
+ div = document.createElement("div"),
1088
+ id = "__sizzle__";
1089
+
1090
+ div.innerHTML = "<p class='TEST'></p>";
1091
+
1092
+ // Safari can't handle uppercase or unicode characters when
1093
+ // in quirks mode.
1094
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
1095
+ return;
1096
+ }
1097
+
1098
+ Sizzle = function( query, context, extra, seed ) {
1099
+ context = context || document;
1100
+
1101
+ // Only use querySelectorAll on non-XML documents
1102
+ // (ID selectors don't work in non-HTML documents)
1103
+ if ( !seed && !Sizzle.isXML(context) ) {
1104
+ // See if we find a selector to speed up
1105
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
1106
+
1107
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
1108
+ // Speed-up: Sizzle("TAG")
1109
+ if ( match[1] ) {
1110
+ return makeArray( context.getElementsByTagName( query ), extra );
1111
+
1112
+ // Speed-up: Sizzle(".CLASS")
1113
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
1114
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
1115
+ }
1116
+ }
1117
+
1118
+ if ( context.nodeType === 9 ) {
1119
+ // Speed-up: Sizzle("body")
1120
+ // The body element only exists once, optimize finding it
1121
+ if ( query === "body" && context.body ) {
1122
+ return makeArray( [ context.body ], extra );
1123
+
1124
+ // Speed-up: Sizzle("#ID")
1125
+ } else if ( match && match[3] ) {
1126
+ var elem = context.getElementById( match[3] );
1127
+
1128
+ // Check parentNode to catch when Blackberry 4.6 returns
1129
+ // nodes that are no longer in the document #6963
1130
+ if ( elem && elem.parentNode ) {
1131
+ // Handle the case where IE and Opera return items
1132
+ // by name instead of ID
1133
+ if ( elem.id === match[3] ) {
1134
+ return makeArray( [ elem ], extra );
1135
+ }
1136
+
1137
+ } else {
1138
+ return makeArray( [], extra );
1139
+ }
1140
+ }
1141
+
1142
+ try {
1143
+ return makeArray( context.querySelectorAll(query), extra );
1144
+ } catch(qsaError) {}
1145
+
1146
+ // qSA works strangely on Element-rooted queries
1147
+ // We can work around this by specifying an extra ID on the root
1148
+ // and working up from there (Thanks to Andrew Dupont for the technique)
1149
+ // IE 8 doesn't work on object elements
1150
+ } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
1151
+ var old = context.getAttribute( "id" ),
1152
+ nid = old || id,
1153
+ hasParent = context.parentNode,
1154
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
1155
+
1156
+ if ( !old ) {
1157
+ context.setAttribute( "id", nid );
1158
+ } else {
1159
+ nid = nid.replace( /'/g, "\\$&" );
1160
+ }
1161
+ if ( relativeHierarchySelector && hasParent ) {
1162
+ context = context.parentNode;
1163
+ }
1164
+
1165
+ try {
1166
+ if ( !relativeHierarchySelector || hasParent ) {
1167
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
1168
+ }
1169
+
1170
+ } catch(pseudoError) {
1171
+ } finally {
1172
+ if ( !old ) {
1173
+ context.removeAttribute( "id" );
1174
+ }
1175
+ }
1176
+ }
1177
+ }
1178
+
1179
+ return oldSizzle(query, context, extra, seed);
1180
+ };
1181
+
1182
+ for ( var prop in oldSizzle ) {
1183
+ Sizzle[ prop ] = oldSizzle[ prop ];
1184
+ }
1185
+
1186
+ // release memory in IE
1187
+ div = null;
1188
+ })();
1189
+ }
1190
+
1191
+ (function(){
1192
+ var html = document.documentElement,
1193
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
1194
+ pseudoWorks = false;
1195
+
1196
+ try {
1197
+ // This should fail with an exception
1198
+ // Gecko does not error, returns false instead
1199
+ matches.call( document.documentElement, "[test!='']:sizzle" );
1200
+
1201
+ } catch( pseudoError ) {
1202
+ pseudoWorks = true;
1203
+ }
1204
+
1205
+ if ( matches ) {
1206
+ Sizzle.matchesSelector = function( node, expr ) {
1207
+ // Make sure that attribute selectors are quoted
1208
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
1209
+
1210
+ if ( !Sizzle.isXML( node ) ) {
1211
+ try {
1212
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
1213
+ return matches.call( node, expr );
1214
+ }
1215
+ } catch(e) {}
1216
+ }
1217
+
1218
+ return Sizzle(expr, null, null, [node]).length > 0;
1219
+ };
1220
+ }
1221
+ })();
1222
+
1223
+ (function(){
1224
+ var div = document.createElement("div");
1225
+
1226
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
1227
+
1228
+ // Opera can't find a second classname (in 9.6)
1229
+ // Also, make sure that getElementsByClassName actually exists
1230
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
1231
+ return;
1232
+ }
1233
+
1234
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
1235
+ div.lastChild.className = "e";
1236
+
1237
+ if ( div.getElementsByClassName("e").length === 1 ) {
1238
+ return;
1239
+ }
1240
+
1241
+ Expr.order.splice(1, 0, "CLASS");
1242
+ Expr.find.CLASS = function( match, context, isXML ) {
1243
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
1244
+ return context.getElementsByClassName(match[1]);
1245
+ }
1246
+ };
1247
+
1248
+ // release memory in IE
1249
+ div = null;
1250
+ })();
1251
+
1252
+ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
1253
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
1254
+ var elem = checkSet[i];
1255
+
1256
+ if ( elem ) {
1257
+ var match = false;
1258
+
1259
+ elem = elem[dir];
1260
+
1261
+ while ( elem ) {
1262
+ if ( elem.sizcache === doneName ) {
1263
+ match = checkSet[elem.sizset];
1264
+ break;
1265
+ }
1266
+
1267
+ if ( elem.nodeType === 1 && !isXML ){
1268
+ elem.sizcache = doneName;
1269
+ elem.sizset = i;
1270
+ }
1271
+
1272
+ if ( elem.nodeName.toLowerCase() === cur ) {
1273
+ match = elem;
1274
+ break;
1275
+ }
1276
+
1277
+ elem = elem[dir];
1278
+ }
1279
+
1280
+ checkSet[i] = match;
1281
+ }
1282
+ }
1283
+ }
1284
+
1285
+ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
1286
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
1287
+ var elem = checkSet[i];
1288
+
1289
+ if ( elem ) {
1290
+ var match = false;
1291
+
1292
+ elem = elem[dir];
1293
+
1294
+ while ( elem ) {
1295
+ if ( elem.sizcache === doneName ) {
1296
+ match = checkSet[elem.sizset];
1297
+ break;
1298
+ }
1299
+
1300
+ if ( elem.nodeType === 1 ) {
1301
+ if ( !isXML ) {
1302
+ elem.sizcache = doneName;
1303
+ elem.sizset = i;
1304
+ }
1305
+
1306
+ if ( typeof cur !== "string" ) {
1307
+ if ( elem === cur ) {
1308
+ match = true;
1309
+ break;
1310
+ }
1311
+
1312
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
1313
+ match = elem;
1314
+ break;
1315
+ }
1316
+ }
1317
+
1318
+ elem = elem[dir];
1319
+ }
1320
+
1321
+ checkSet[i] = match;
1322
+ }
1323
+ }
1324
+ }
1325
+
1326
+ if ( document.documentElement.contains ) {
1327
+ Sizzle.contains = function( a, b ) {
1328
+ return a !== b && (a.contains ? a.contains(b) : true);
1329
+ };
1330
+
1331
+ } else if ( document.documentElement.compareDocumentPosition ) {
1332
+ Sizzle.contains = function( a, b ) {
1333
+ return !!(a.compareDocumentPosition(b) & 16);
1334
+ };
1335
+
1336
+ } else {
1337
+ Sizzle.contains = function() {
1338
+ return false;
1339
+ };
1340
+ }
1341
+
1342
+ Sizzle.isXML = function( elem ) {
1343
+ // documentElement is verified for cases where it doesn't yet exist
1344
+ // (such as loading iframes in IE - #4833)
1345
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
1346
+
1347
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
1348
+ };
1349
+
1350
+ var posProcess = function( selector, context ) {
1351
+ var match,
1352
+ tmpSet = [],
1353
+ later = "",
1354
+ root = context.nodeType ? [context] : context;
1355
+
1356
+ // Position selectors must be done after the filter
1357
+ // And so must :not(positional) so we move all PSEUDOs to the end
1358
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
1359
+ later += match[0];
1360
+ selector = selector.replace( Expr.match.PSEUDO, "" );
1361
+ }
1362
+
1363
+ selector = Expr.relative[selector] ? selector + "*" : selector;
1364
+
1365
+ for ( var i = 0, l = root.length; i < l; i++ ) {
1366
+ Sizzle( selector, root[i], tmpSet );
1367
+ }
1368
+
1369
+ return Sizzle.filter( later, tmpSet );
1370
+ };
1371
+
1372
+ // EXPOSE
1373
+
1374
+ window.Sizzle = Sizzle;
1375
+
1376
+ })();