middleman-core 4.0.0.rc.1 → 4.0.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (415) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/Rakefile +0 -1
  4. data/cucumber.yml +2 -0
  5. data/features/asset_hash.feature +25 -16
  6. data/features/asset_host.feature +5 -1
  7. data/features/chained_templates.feature +8 -5
  8. data/features/clean_build.feature +18 -0
  9. data/features/cli/preview_server-hook.feature +17 -0
  10. data/features/cli/preview_server.feature +533 -0
  11. data/features/cli_init.feature +3 -3
  12. data/features/collections.feature +5 -3
  13. data/features/content_type.feature +3 -0
  14. data/features/default-layout.feature +90 -0
  15. data/features/extension_api_deprecations.feature +10 -0
  16. data/features/front-matter.feature +6 -1
  17. data/features/i18n_link_to.feature +209 -0
  18. data/features/import_files.feature +17 -0
  19. data/features/javascript-testing.feature +18 -0
  20. data/features/markdown_redcarpet.feature +0 -1
  21. data/features/markdown_redcarpet_in_haml.feature +0 -1
  22. data/features/minify_css.feature +87 -5
  23. data/features/minify_javascript.feature +55 -8
  24. data/features/move_files.feature +44 -0
  25. data/features/redirects.feature +1 -0
  26. data/features/relative_assets.feature +13 -2
  27. data/features/slim.feature +1 -1
  28. data/features/stylus.feature +0 -1
  29. data/features/support/env.rb +5 -1
  30. data/features/support/preserve_mime_types.rb +7 -0
  31. data/fixtures/asset-hash-app/source/fonts/fontawesome-webfont.woff +0 -0
  32. data/fixtures/asset-hash-app/source/fonts/fontawesome-webfont.woff2 +0 -0
  33. data/fixtures/asset-hash-app/source/stylesheets/site.css.scss +2 -2
  34. data/fixtures/asset-hash-app/source/stylesheets/uses_fonts.css +4 -0
  35. data/fixtures/asset-host-app/source/asset_host.html.erb +5 -1
  36. data/fixtures/chained-app/source/test.erb.combobreaker.str.erb +8 -0
  37. data/fixtures/clean-app/config-hidden-dir-after.rb +5 -0
  38. data/fixtures/clean-app/config-hidden-dir-before.rb +1 -0
  39. data/fixtures/content-type-app/source/index.php +1 -0
  40. data/fixtures/extension-api-deprecations-app/config.rb +11 -0
  41. data/fixtures/extension-api-deprecations-app/source/index.html.erb +1 -0
  42. data/fixtures/extension-api-deprecations-app/source/layouts/layout.erb +3 -0
  43. data/fixtures/frontmatter-app/config.rb +1 -0
  44. data/fixtures/frontmatter-app/source/front-matter-haml.html.haml +6 -0
  45. data/fixtures/frontmatter-neighbor-app/config.rb +1 -1
  46. data/fixtures/frontmatter-settings-neighbor-app/config.rb +1 -1
  47. data/fixtures/i18n-test-app/source/localizable/partials/index.html.erb +3 -1
  48. data/fixtures/import-app/bower.json +21 -0
  49. data/fixtures/import-app/bower_components/jquery/.bower.json +39 -0
  50. data/fixtures/import-app/bower_components/jquery/MIT-LICENSE.txt +21 -0
  51. data/fixtures/import-app/bower_components/jquery/bower.json +28 -0
  52. data/fixtures/import-app/bower_components/jquery/dist/jquery.js +9210 -0
  53. data/fixtures/import-app/bower_components/jquery/dist/jquery.min.js +5 -0
  54. data/fixtures/import-app/bower_components/jquery/dist/jquery.min.map +1 -0
  55. data/fixtures/import-app/bower_components/jquery/src/ajax.js +786 -0
  56. data/fixtures/import-app/bower_components/jquery/src/ajax/jsonp.js +89 -0
  57. data/fixtures/import-app/bower_components/jquery/src/ajax/load.js +75 -0
  58. data/fixtures/import-app/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  59. data/fixtures/import-app/bower_components/jquery/src/ajax/parseXML.js +28 -0
  60. data/fixtures/import-app/bower_components/jquery/src/ajax/script.js +64 -0
  61. data/fixtures/import-app/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  62. data/fixtures/import-app/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  63. data/fixtures/import-app/bower_components/jquery/src/ajax/xhr.js +136 -0
  64. data/fixtures/import-app/bower_components/jquery/src/attributes.js +11 -0
  65. data/fixtures/import-app/bower_components/jquery/src/attributes/attr.js +141 -0
  66. data/fixtures/import-app/bower_components/jquery/src/attributes/classes.js +158 -0
  67. data/fixtures/import-app/bower_components/jquery/src/attributes/prop.js +94 -0
  68. data/fixtures/import-app/bower_components/jquery/src/attributes/support.js +35 -0
  69. data/fixtures/import-app/bower_components/jquery/src/attributes/val.js +161 -0
  70. data/fixtures/import-app/bower_components/jquery/src/callbacks.js +205 -0
  71. data/fixtures/import-app/bower_components/jquery/src/core.js +502 -0
  72. data/fixtures/import-app/bower_components/jquery/src/core/access.js +60 -0
  73. data/fixtures/import-app/bower_components/jquery/src/core/init.js +123 -0
  74. data/fixtures/import-app/bower_components/jquery/src/core/parseHTML.js +39 -0
  75. data/fixtures/import-app/bower_components/jquery/src/core/ready.js +97 -0
  76. data/fixtures/import-app/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  77. data/fixtures/import-app/bower_components/jquery/src/css.js +450 -0
  78. data/fixtures/import-app/bower_components/jquery/src/css/addGetHookIf.js +22 -0
  79. data/fixtures/import-app/bower_components/jquery/src/css/curCSS.js +57 -0
  80. data/fixtures/import-app/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  81. data/fixtures/import-app/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  82. data/fixtures/import-app/bower_components/jquery/src/css/support.js +96 -0
  83. data/fixtures/import-app/bower_components/jquery/src/css/swap.js +28 -0
  84. data/fixtures/import-app/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  85. data/fixtures/import-app/bower_components/jquery/src/css/var/getStyles.js +12 -0
  86. data/fixtures/import-app/bower_components/jquery/src/css/var/isHidden.js +13 -0
  87. data/fixtures/import-app/bower_components/jquery/src/css/var/rmargin.js +3 -0
  88. data/fixtures/import-app/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  89. data/fixtures/import-app/bower_components/jquery/src/data.js +178 -0
  90. data/fixtures/import-app/bower_components/jquery/src/data/Data.js +181 -0
  91. data/fixtures/import-app/bower_components/jquery/src/data/accepts.js +20 -0
  92. data/fixtures/import-app/bower_components/jquery/src/data/var/data_priv.js +5 -0
  93. data/fixtures/import-app/bower_components/jquery/src/data/var/data_user.js +5 -0
  94. data/fixtures/import-app/bower_components/jquery/src/deferred.js +149 -0
  95. data/fixtures/import-app/bower_components/jquery/src/deprecated.js +13 -0
  96. data/fixtures/import-app/bower_components/jquery/src/dimensions.js +50 -0
  97. data/fixtures/import-app/bower_components/jquery/src/effects.js +648 -0
  98. data/fixtures/import-app/bower_components/jquery/src/effects/Tween.js +114 -0
  99. data/fixtures/import-app/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  100. data/fixtures/import-app/bower_components/jquery/src/event.js +868 -0
  101. data/fixtures/import-app/bower_components/jquery/src/event/ajax.js +13 -0
  102. data/fixtures/import-app/bower_components/jquery/src/event/alias.js +39 -0
  103. data/fixtures/import-app/bower_components/jquery/src/event/support.js +9 -0
  104. data/fixtures/import-app/bower_components/jquery/src/exports/amd.js +24 -0
  105. data/fixtures/import-app/bower_components/jquery/src/exports/global.js +32 -0
  106. data/fixtures/import-app/bower_components/jquery/src/intro.js +44 -0
  107. data/fixtures/import-app/bower_components/jquery/src/jquery.js +37 -0
  108. data/fixtures/import-app/bower_components/jquery/src/manipulation.js +580 -0
  109. data/fixtures/import-app/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  110. data/fixtures/import-app/bower_components/jquery/src/manipulation/support.js +32 -0
  111. data/fixtures/import-app/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  112. data/fixtures/import-app/bower_components/jquery/src/offset.js +207 -0
  113. data/fixtures/import-app/bower_components/jquery/src/outro.js +1 -0
  114. data/fixtures/import-app/bower_components/jquery/src/queue.js +142 -0
  115. data/fixtures/import-app/bower_components/jquery/src/queue/delay.js +22 -0
  116. data/fixtures/import-app/bower_components/jquery/src/selector-native.js +172 -0
  117. data/fixtures/import-app/bower_components/jquery/src/selector-sizzle.js +14 -0
  118. data/fixtures/import-app/bower_components/jquery/src/selector.js +1 -0
  119. data/fixtures/import-app/bower_components/jquery/src/serialize.js +111 -0
  120. data/fixtures/import-app/bower_components/jquery/src/sizzle/dist/sizzle.js +2067 -0
  121. data/fixtures/import-app/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  122. data/fixtures/import-app/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  123. data/fixtures/import-app/bower_components/jquery/src/traversing.js +199 -0
  124. data/fixtures/import-app/bower_components/jquery/src/traversing/findFilter.js +100 -0
  125. data/fixtures/import-app/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  126. data/fixtures/import-app/bower_components/jquery/src/var/arr.js +3 -0
  127. data/fixtures/import-app/bower_components/jquery/src/var/class2type.js +4 -0
  128. data/fixtures/import-app/bower_components/jquery/src/var/concat.js +5 -0
  129. data/fixtures/import-app/bower_components/jquery/src/var/hasOwn.js +5 -0
  130. data/fixtures/import-app/bower_components/jquery/src/var/indexOf.js +5 -0
  131. data/fixtures/import-app/bower_components/jquery/src/var/pnum.js +3 -0
  132. data/fixtures/import-app/bower_components/jquery/src/var/push.js +5 -0
  133. data/fixtures/import-app/bower_components/jquery/src/var/rnotwhite.js +3 -0
  134. data/fixtures/import-app/bower_components/jquery/src/var/slice.js +5 -0
  135. data/fixtures/import-app/bower_components/jquery/src/var/strundefined.js +3 -0
  136. data/fixtures/import-app/bower_components/jquery/src/var/support.js +4 -0
  137. data/fixtures/import-app/bower_components/jquery/src/var/toString.js +5 -0
  138. data/fixtures/import-app/bower_components/jquery/src/wrap.js +79 -0
  139. data/fixtures/import-app/config.rb +7 -0
  140. data/fixtures/{twitter-bootstrap-app/config.rb → import-app/source/test.html} +0 -0
  141. data/fixtures/import-app/static.html +1 -0
  142. data/fixtures/javascript-app/config.rb +0 -0
  143. data/fixtures/javascript-app/source/index.html +17 -0
  144. data/fixtures/minify-css-app/source/inline-css.php +8 -0
  145. data/fixtures/minify-css-app/source/stylesheets/base/_base.scss +15 -0
  146. data/fixtures/minify-css-app/source/stylesheets/base/_buttons.scss +35 -0
  147. data/fixtures/minify-css-app/source/stylesheets/base/_forms.scss +90 -0
  148. data/fixtures/minify-css-app/source/stylesheets/base/_grid-settings.scss +14 -0
  149. data/fixtures/minify-css-app/source/stylesheets/base/_lists.scss +31 -0
  150. data/fixtures/minify-css-app/source/stylesheets/base/_tables.scss +25 -0
  151. data/fixtures/minify-css-app/source/stylesheets/base/_typography.scss +49 -0
  152. data/fixtures/minify-css-app/source/stylesheets/base/_variables.scss +42 -0
  153. data/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon-deprecated-upcoming.scss +411 -0
  154. data/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon.scss +87 -0
  155. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-color.scss +26 -0
  156. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-radius.scss +48 -0
  157. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-style.scss +25 -0
  158. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-width.scss +25 -0
  159. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_buttons.scss +64 -0
  160. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_clearfix.scss +25 -0
  161. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_ellipsis.scss +30 -0
  162. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_font-stacks.scss +31 -0
  163. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_hide-text.scss +27 -0
  164. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_margin.scss +26 -0
  165. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_padding.scss +26 -0
  166. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_position.scss +48 -0
  167. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_prefixer.scss +66 -0
  168. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_retina-image.scss +25 -0
  169. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_size.scss +51 -0
  170. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_text-inputs.scss +113 -0
  171. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_timing-functions.scss +34 -0
  172. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_triangle.scss +63 -0
  173. data/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_word-wrap.scss +29 -0
  174. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_animation.scss +43 -0
  175. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_appearance.scss +3 -0
  176. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_backface-visibility.scss +3 -0
  177. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background-image.scss +42 -0
  178. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background.scss +55 -0
  179. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_border-image.scss +59 -0
  180. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_calc.scss +4 -0
  181. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_columns.scss +47 -0
  182. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_filter.scss +4 -0
  183. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_flex-box.scss +287 -0
  184. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_font-face.scss +24 -0
  185. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_font-feature-settings.scss +4 -0
  186. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_hidpi-media-query.scss +10 -0
  187. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_hyphens.scss +4 -0
  188. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_image-rendering.scss +14 -0
  189. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_keyframes.scss +36 -0
  190. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_linear-gradient.scss +38 -0
  191. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_perspective.scss +8 -0
  192. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_placeholder.scss +8 -0
  193. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_radial-gradient.scss +39 -0
  194. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_selection.scss +42 -0
  195. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_text-decoration.scss +19 -0
  196. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transform.scss +15 -0
  197. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transition.scss +71 -0
  198. data/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_user-select.scss +3 -0
  199. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_assign-inputs.scss +11 -0
  200. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains-falsy.scss +20 -0
  201. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains.scss +26 -0
  202. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-length.scss +11 -0
  203. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-light.scss +21 -0
  204. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-number.scss +11 -0
  205. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-size.scss +13 -0
  206. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_modular-scale.scss +69 -0
  207. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-em.scss +13 -0
  208. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-rem.scss +15 -0
  209. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_shade.scss +24 -0
  210. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_strip-units.scss +17 -0
  211. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_tint.scss +24 -0
  212. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_transition-property-name.scss +22 -0
  213. data/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_unpack.scss +27 -0
  214. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_convert-units.scss +21 -0
  215. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_directional-values.scss +96 -0
  216. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_font-source-declaration.scss +43 -0
  217. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_gradient-positions-parser.scss +13 -0
  218. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-angle-parser.scss +25 -0
  219. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-gradient-parser.scss +41 -0
  220. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-positions-parser.scss +61 -0
  221. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-side-corner-parser.scss +31 -0
  222. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-arg-parser.scss +69 -0
  223. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-gradient-parser.scss +50 -0
  224. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-positions-parser.scss +18 -0
  225. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_render-gradients.scss +26 -0
  226. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_shape-size-stripper.scss +10 -0
  227. data/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_str-to-num.scss +50 -0
  228. data/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_asset-pipeline.scss +7 -0
  229. data/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_prefixer.scss +9 -0
  230. data/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_px-to-em.scss +1 -0
  231. data/fixtures/minify-css-app/source/stylesheets/site.xcss.sass +6 -0
  232. data/fixtures/minify-js-app/source/inline-js.php +22 -0
  233. data/fixtures/minify-js-app/source/javascripts/js_test.xjs +8 -0
  234. data/fixtures/partials-app/source/locals.html.erb +1 -1
  235. data/fixtures/preview-server-app/bin/dns_server.rb +33 -0
  236. data/fixtures/preview-server-app/config.rb +0 -0
  237. data/fixtures/preview-server-app/source/index.html.erb +1 -0
  238. data/fixtures/preview-server-app/source/layout.erb +9 -0
  239. data/fixtures/preview-server-app/source/layouts/custom.erb +8 -0
  240. data/fixtures/preview-server-app/source/real.html +1 -0
  241. data/fixtures/preview-server-app/source/real/index.html.erb +5 -0
  242. data/fixtures/preview-server-app/source/should_be_ignored.html +1 -0
  243. data/fixtures/preview-server-app/source/should_be_ignored2.html +1 -0
  244. data/fixtures/preview-server-app/source/should_be_ignored3.html +1 -0
  245. data/fixtures/preview-server-app/source/static.html +1 -0
  246. data/fixtures/preview-server-hook-app/config.rb +19 -0
  247. data/fixtures/preview-server-hook-app/source/index.html.erb +9 -0
  248. data/fixtures/related-files-app/config.rb +0 -0
  249. data/fixtures/related-files-app/source/index.html.erb +0 -0
  250. data/fixtures/related-files-app/source/partials/_test.erb +0 -0
  251. data/fixtures/related-files-app/source/partials/_test2.haml +0 -0
  252. data/fixtures/related-files-app/source/stylesheets/_include3.sass +0 -0
  253. data/fixtures/related-files-app/source/stylesheets/_include4.scss +0 -0
  254. data/fixtures/related-files-app/source/stylesheets/include1.css +0 -0
  255. data/fixtures/related-files-app/source/stylesheets/include2.css.scss +0 -0
  256. data/fixtures/related-files-app/source/stylesheets/site.css.scss +0 -0
  257. data/fixtures/relative-assets-app/source/absolute_image_relative_css.html.erb +9 -0
  258. data/fixtures/relative-assets-app/source/javascripts/app.js +3 -0
  259. data/fixtures/relative-assets-app/source/relative_image.html.erb +1 -0
  260. data/fixtures/relative-assets-app/source/relative_image_absolute_css.html.erb +9 -0
  261. data/lib/middleman-core/application.rb +44 -18
  262. data/lib/middleman-core/builder.rb +1 -27
  263. data/lib/middleman-core/callback_manager.rb +3 -3
  264. data/lib/middleman-core/configuration.rb +1 -1
  265. data/lib/middleman-core/core_extensions/collections/step_context.rb +1 -1
  266. data/lib/middleman-core/core_extensions/data.rb +2 -2
  267. data/lib/middleman-core/core_extensions/default_helpers.rb +37 -3
  268. data/lib/middleman-core/core_extensions/external_helpers.rb +2 -1
  269. data/lib/middleman-core/core_extensions/front_matter.rb +5 -2
  270. data/lib/middleman-core/core_extensions/i18n.rb +95 -29
  271. data/lib/middleman-core/core_extensions/routing.rb +2 -2
  272. data/lib/middleman-core/dns_resolver.rb +73 -0
  273. data/lib/middleman-core/dns_resolver/basic_network_resolver.rb +52 -0
  274. data/lib/middleman-core/dns_resolver/hosts_resolver.rb +63 -0
  275. data/lib/middleman-core/dns_resolver/local_link_resolver.rb +44 -0
  276. data/lib/middleman-core/dns_resolver/network_resolver.rb +42 -0
  277. data/lib/middleman-core/extension.rb +1 -1
  278. data/lib/middleman-core/extensions/asset_hash.rb +3 -3
  279. data/lib/middleman-core/extensions/automatic_image_sizes.rb +9 -1
  280. data/lib/middleman-core/extensions/minify_css.rb +49 -17
  281. data/lib/middleman-core/extensions/minify_javascript.rb +60 -30
  282. data/lib/middleman-core/extensions/relative_assets.rb +13 -0
  283. data/lib/middleman-core/file_renderer.rb +2 -2
  284. data/lib/middleman-core/meta_pages.rb +1 -1
  285. data/lib/middleman-core/preview_server.rb +109 -47
  286. data/lib/middleman-core/preview_server/checks.rb +81 -0
  287. data/lib/middleman-core/preview_server/information.rb +273 -0
  288. data/lib/middleman-core/preview_server/network_interface_inventory.rb +65 -0
  289. data/lib/middleman-core/preview_server/server_hostname.rb +39 -0
  290. data/lib/middleman-core/preview_server/server_information.rb +153 -0
  291. data/lib/middleman-core/preview_server/server_information_callback_proxy.rb +35 -0
  292. data/lib/middleman-core/preview_server/server_information_validator.rb +18 -0
  293. data/lib/middleman-core/preview_server/server_ip_address.rb +55 -0
  294. data/lib/middleman-core/preview_server/server_url.rb +63 -0
  295. data/lib/middleman-core/preview_server/tcp_port_prober.rb +29 -0
  296. data/lib/middleman-core/rack.rb +7 -1
  297. data/lib/middleman-core/renderers/haml.rb +1 -2
  298. data/lib/middleman-core/renderers/liquid.rb +1 -1
  299. data/lib/middleman-core/renderers/sass.rb +23 -36
  300. data/lib/middleman-core/renderers/sass_functions.rb +20 -22
  301. data/lib/middleman-core/sitemap/extensions/ignores.rb +5 -1
  302. data/lib/middleman-core/sitemap/extensions/import.rb +108 -0
  303. data/lib/middleman-core/sitemap/extensions/move_file.rb +68 -0
  304. data/lib/middleman-core/sitemap/extensions/proxies.rb +7 -2
  305. data/lib/middleman-core/sitemap/extensions/redirects.rb +1 -0
  306. data/lib/middleman-core/sitemap/resource.rb +3 -7
  307. data/lib/middleman-core/sitemap/store.rb +22 -19
  308. data/lib/middleman-core/sources.rb +2 -3
  309. data/lib/middleman-core/sources/source_watcher.rb +21 -37
  310. data/lib/middleman-core/step_definitions.rb +1 -0
  311. data/lib/middleman-core/step_definitions/builder_steps.rb +0 -47
  312. data/lib/middleman-core/step_definitions/commandline_steps.rb +88 -0
  313. data/lib/middleman-core/step_definitions/middleman_steps.rb +51 -6
  314. data/lib/middleman-core/step_definitions/server_steps.rb +21 -53
  315. data/lib/middleman-core/template_context.rb +14 -13
  316. data/lib/middleman-core/util.rb +127 -4
  317. data/lib/middleman-core/util/data.rb +87 -138
  318. data/lib/middleman-core/version.rb +1 -1
  319. data/middleman-core.gemspec +11 -11
  320. data/spec/middleman-core/dns_resolver_spec.rb +118 -0
  321. data/spec/middleman-core/preview_server/server_hostname_spec.rb +39 -0
  322. data/spec/middleman-core/preview_server/server_ip_address_spec.rb +43 -0
  323. data/spec/middleman-core/util_spec.rb +111 -3
  324. data/spec/spec_helper.rb +29 -1
  325. data/spec/support/given.rb +42 -0
  326. metadata +528 -221
  327. data/features/twitter-bootstrap-compile.feature +0 -6
  328. data/features/working_directory.feature +0 -33
  329. data/fixtures/collections-app/config.rb +0 -16
  330. data/fixtures/collections-app/source/index.html.erb +0 -26
  331. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/.gitignore +0 -36
  332. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/.travis.yml +0 -3
  333. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/LICENSE +0 -176
  334. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/README.md +0 -137
  335. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/img/glyphicons-halflings-white.png +0 -0
  336. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/img/glyphicons-halflings.png +0 -0
  337. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/.jshintrc +0 -10
  338. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/README.md +0 -112
  339. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-alert.js +0 -90
  340. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-button.js +0 -96
  341. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-carousel.js +0 -169
  342. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-collapse.js +0 -157
  343. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-dropdown.js +0 -100
  344. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-modal.js +0 -218
  345. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-popover.js +0 -98
  346. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-scrollspy.js +0 -151
  347. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-tab.js +0 -135
  348. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-tooltip.js +0 -275
  349. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-transition.js +0 -61
  350. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/bootstrap-typeahead.js +0 -285
  351. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/index.html +0 -54
  352. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/phantom.js +0 -63
  353. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/server.js +0 -14
  354. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-alert.js +0 -56
  355. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-button.js +0 -77
  356. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-carousel.js +0 -28
  357. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-collapse.js +0 -54
  358. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-dropdown.js +0 -87
  359. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-modal.js +0 -114
  360. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-phantom.js +0 -21
  361. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-popover.js +0 -93
  362. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-scrollspy.js +0 -31
  363. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-tab.js +0 -61
  364. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-tooltip.js +0 -155
  365. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-transition.js +0 -13
  366. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/unit/bootstrap-typeahead.js +0 -148
  367. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/vendor/jquery.js +0 -9252
  368. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/vendor/qunit.css +0 -232
  369. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/js/tests/vendor/qunit.js +0 -1510
  370. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_accordion.less +0 -33
  371. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_alerts.less +0 -58
  372. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_breadcrumbs.less +0 -24
  373. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_button-groups.less +0 -191
  374. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_buttons.less +0 -191
  375. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_carousel.less +0 -121
  376. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_close.less +0 -29
  377. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_code.less +0 -57
  378. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_component-animations.less +0 -20
  379. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_dropdowns.less +0 -143
  380. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_forms.less +0 -583
  381. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_grid.less +0 -5
  382. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_hero-unit.less +0 -22
  383. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_labels-badges.less +0 -55
  384. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_layouts.less +0 -17
  385. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_mixins.less +0 -646
  386. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_modals.less +0 -90
  387. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_navbar.less +0 -358
  388. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_navs.less +0 -363
  389. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_pager.less +0 -36
  390. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_pagination.less +0 -56
  391. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_popovers.less +0 -49
  392. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_progress-bars.less +0 -117
  393. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_reset.less +0 -131
  394. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-1200px-min.less +0 -26
  395. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-767px-max.less +0 -149
  396. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-768px-979px.less +0 -17
  397. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-navbar.less +0 -153
  398. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_responsive-utilities.less +0 -41
  399. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_scaffolding.less +0 -29
  400. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_sprites.less +0 -191
  401. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_tables.less +0 -176
  402. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_thumbnails.less +0 -47
  403. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_tooltip.less +0 -35
  404. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_type.less +0 -232
  405. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_utilities.less +0 -23
  406. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_variables.less +0 -206
  407. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/_wells.less +0 -27
  408. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/bootstrap.less +0 -62
  409. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/responsive.less +0 -48
  410. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/tests/css-tests.css +0 -52
  411. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/tests/css-tests.html +0 -917
  412. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/tests/forms.html +0 -179
  413. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/less/tests/navbar.html +0 -108
  414. data/fixtures/twitter-bootstrap-app/source/twitter-bootstrap-ebc6935/package.json +0 -25
  415. data/lib/middleman-core/cli/server.rb +0 -96
@@ -0,0 +1,205 @@
1
+ define([
2
+ "./core",
3
+ "./var/rnotwhite"
4
+ ], function( jQuery, rnotwhite ) {
5
+
6
+ // String to Object options format cache
7
+ var optionsCache = {};
8
+
9
+ // Convert String-formatted options into Object-formatted ones and store in cache
10
+ function createOptions( options ) {
11
+ var object = optionsCache[ options ] = {};
12
+ jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
13
+ object[ flag ] = true;
14
+ });
15
+ return object;
16
+ }
17
+
18
+ /*
19
+ * Create a callback list using the following parameters:
20
+ *
21
+ * options: an optional list of space-separated options that will change how
22
+ * the callback list behaves or a more traditional option object
23
+ *
24
+ * By default a callback list will act like an event callback list and can be
25
+ * "fired" multiple times.
26
+ *
27
+ * Possible options:
28
+ *
29
+ * once: will ensure the callback list can only be fired once (like a Deferred)
30
+ *
31
+ * memory: will keep track of previous values and will call any callback added
32
+ * after the list has been fired right away with the latest "memorized"
33
+ * values (like a Deferred)
34
+ *
35
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
36
+ *
37
+ * stopOnFalse: interrupt callings when a callback returns false
38
+ *
39
+ */
40
+ jQuery.Callbacks = function( options ) {
41
+
42
+ // Convert options from String-formatted to Object-formatted if needed
43
+ // (we check in cache first)
44
+ options = typeof options === "string" ?
45
+ ( optionsCache[ options ] || createOptions( options ) ) :
46
+ jQuery.extend( {}, options );
47
+
48
+ var // Last fire value (for non-forgettable lists)
49
+ memory,
50
+ // Flag to know if list was already fired
51
+ fired,
52
+ // Flag to know if list is currently firing
53
+ firing,
54
+ // First callback to fire (used internally by add and fireWith)
55
+ firingStart,
56
+ // End of the loop when firing
57
+ firingLength,
58
+ // Index of currently firing callback (modified by remove if needed)
59
+ firingIndex,
60
+ // Actual callback list
61
+ list = [],
62
+ // Stack of fire calls for repeatable lists
63
+ stack = !options.once && [],
64
+ // Fire callbacks
65
+ fire = function( data ) {
66
+ memory = options.memory && data;
67
+ fired = true;
68
+ firingIndex = firingStart || 0;
69
+ firingStart = 0;
70
+ firingLength = list.length;
71
+ firing = true;
72
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
73
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
74
+ memory = false; // To prevent further calls using add
75
+ break;
76
+ }
77
+ }
78
+ firing = false;
79
+ if ( list ) {
80
+ if ( stack ) {
81
+ if ( stack.length ) {
82
+ fire( stack.shift() );
83
+ }
84
+ } else if ( memory ) {
85
+ list = [];
86
+ } else {
87
+ self.disable();
88
+ }
89
+ }
90
+ },
91
+ // Actual Callbacks object
92
+ self = {
93
+ // Add a callback or a collection of callbacks to the list
94
+ add: function() {
95
+ if ( list ) {
96
+ // First, we save the current length
97
+ var start = list.length;
98
+ (function add( args ) {
99
+ jQuery.each( args, function( _, arg ) {
100
+ var type = jQuery.type( arg );
101
+ if ( type === "function" ) {
102
+ if ( !options.unique || !self.has( arg ) ) {
103
+ list.push( arg );
104
+ }
105
+ } else if ( arg && arg.length && type !== "string" ) {
106
+ // Inspect recursively
107
+ add( arg );
108
+ }
109
+ });
110
+ })( arguments );
111
+ // Do we need to add the callbacks to the
112
+ // current firing batch?
113
+ if ( firing ) {
114
+ firingLength = list.length;
115
+ // With memory, if we're not firing then
116
+ // we should call right away
117
+ } else if ( memory ) {
118
+ firingStart = start;
119
+ fire( memory );
120
+ }
121
+ }
122
+ return this;
123
+ },
124
+ // Remove a callback from the list
125
+ remove: function() {
126
+ if ( list ) {
127
+ jQuery.each( arguments, function( _, arg ) {
128
+ var index;
129
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
130
+ list.splice( index, 1 );
131
+ // Handle firing indexes
132
+ if ( firing ) {
133
+ if ( index <= firingLength ) {
134
+ firingLength--;
135
+ }
136
+ if ( index <= firingIndex ) {
137
+ firingIndex--;
138
+ }
139
+ }
140
+ }
141
+ });
142
+ }
143
+ return this;
144
+ },
145
+ // Check if a given callback is in the list.
146
+ // If no argument is given, return whether or not list has callbacks attached.
147
+ has: function( fn ) {
148
+ return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
149
+ },
150
+ // Remove all callbacks from the list
151
+ empty: function() {
152
+ list = [];
153
+ firingLength = 0;
154
+ return this;
155
+ },
156
+ // Have the list do nothing anymore
157
+ disable: function() {
158
+ list = stack = memory = undefined;
159
+ return this;
160
+ },
161
+ // Is it disabled?
162
+ disabled: function() {
163
+ return !list;
164
+ },
165
+ // Lock the list in its current state
166
+ lock: function() {
167
+ stack = undefined;
168
+ if ( !memory ) {
169
+ self.disable();
170
+ }
171
+ return this;
172
+ },
173
+ // Is it locked?
174
+ locked: function() {
175
+ return !stack;
176
+ },
177
+ // Call all callbacks with the given context and arguments
178
+ fireWith: function( context, args ) {
179
+ if ( list && ( !fired || stack ) ) {
180
+ args = args || [];
181
+ args = [ context, args.slice ? args.slice() : args ];
182
+ if ( firing ) {
183
+ stack.push( args );
184
+ } else {
185
+ fire( args );
186
+ }
187
+ }
188
+ return this;
189
+ },
190
+ // Call all the callbacks with the given arguments
191
+ fire: function() {
192
+ self.fireWith( this, arguments );
193
+ return this;
194
+ },
195
+ // To know if the callbacks have already been called at least once
196
+ fired: function() {
197
+ return !!fired;
198
+ }
199
+ };
200
+
201
+ return self;
202
+ };
203
+
204
+ return jQuery;
205
+ });
@@ -0,0 +1,502 @@
1
+ define([
2
+ "./var/arr",
3
+ "./var/slice",
4
+ "./var/concat",
5
+ "./var/push",
6
+ "./var/indexOf",
7
+ "./var/class2type",
8
+ "./var/toString",
9
+ "./var/hasOwn",
10
+ "./var/support"
11
+ ], function( arr, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) {
12
+
13
+ var
14
+ // Use the correct document accordingly with window argument (sandbox)
15
+ document = window.document,
16
+
17
+ version = "@VERSION",
18
+
19
+ // Define a local copy of jQuery
20
+ jQuery = function( selector, context ) {
21
+ // The jQuery object is actually just the init constructor 'enhanced'
22
+ // Need init if jQuery is called (just allow error to be thrown if not included)
23
+ return new jQuery.fn.init( selector, context );
24
+ },
25
+
26
+ // Support: Android<4.1
27
+ // Make sure we trim BOM and NBSP
28
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
29
+
30
+ // Matches dashed string for camelizing
31
+ rmsPrefix = /^-ms-/,
32
+ rdashAlpha = /-([\da-z])/gi,
33
+
34
+ // Used by jQuery.camelCase as callback to replace()
35
+ fcamelCase = function( all, letter ) {
36
+ return letter.toUpperCase();
37
+ };
38
+
39
+ jQuery.fn = jQuery.prototype = {
40
+ // The current version of jQuery being used
41
+ jquery: version,
42
+
43
+ constructor: jQuery,
44
+
45
+ // Start with an empty selector
46
+ selector: "",
47
+
48
+ // The default length of a jQuery object is 0
49
+ length: 0,
50
+
51
+ toArray: function() {
52
+ return slice.call( this );
53
+ },
54
+
55
+ // Get the Nth element in the matched element set OR
56
+ // Get the whole matched element set as a clean array
57
+ get: function( num ) {
58
+ return num != null ?
59
+
60
+ // Return just the one element from the set
61
+ ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
62
+
63
+ // Return all the elements in a clean array
64
+ slice.call( this );
65
+ },
66
+
67
+ // Take an array of elements and push it onto the stack
68
+ // (returning the new matched element set)
69
+ pushStack: function( elems ) {
70
+
71
+ // Build a new jQuery matched element set
72
+ var ret = jQuery.merge( this.constructor(), elems );
73
+
74
+ // Add the old object onto the stack (as a reference)
75
+ ret.prevObject = this;
76
+ ret.context = this.context;
77
+
78
+ // Return the newly-formed element set
79
+ return ret;
80
+ },
81
+
82
+ // Execute a callback for every element in the matched set.
83
+ // (You can seed the arguments with an array of args, but this is
84
+ // only used internally.)
85
+ each: function( callback, args ) {
86
+ return jQuery.each( this, callback, args );
87
+ },
88
+
89
+ map: function( callback ) {
90
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
91
+ return callback.call( elem, i, elem );
92
+ }));
93
+ },
94
+
95
+ slice: function() {
96
+ return this.pushStack( slice.apply( this, arguments ) );
97
+ },
98
+
99
+ first: function() {
100
+ return this.eq( 0 );
101
+ },
102
+
103
+ last: function() {
104
+ return this.eq( -1 );
105
+ },
106
+
107
+ eq: function( i ) {
108
+ var len = this.length,
109
+ j = +i + ( i < 0 ? len : 0 );
110
+ return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
111
+ },
112
+
113
+ end: function() {
114
+ return this.prevObject || this.constructor(null);
115
+ },
116
+
117
+ // For internal use only.
118
+ // Behaves like an Array's method, not like a jQuery method.
119
+ push: push,
120
+ sort: arr.sort,
121
+ splice: arr.splice
122
+ };
123
+
124
+ jQuery.extend = jQuery.fn.extend = function() {
125
+ var options, name, src, copy, copyIsArray, clone,
126
+ target = arguments[0] || {},
127
+ i = 1,
128
+ length = arguments.length,
129
+ deep = false;
130
+
131
+ // Handle a deep copy situation
132
+ if ( typeof target === "boolean" ) {
133
+ deep = target;
134
+
135
+ // Skip the boolean and the target
136
+ target = arguments[ i ] || {};
137
+ i++;
138
+ }
139
+
140
+ // Handle case when target is a string or something (possible in deep copy)
141
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
142
+ target = {};
143
+ }
144
+
145
+ // Extend jQuery itself if only one argument is passed
146
+ if ( i === length ) {
147
+ target = this;
148
+ i--;
149
+ }
150
+
151
+ for ( ; i < length; i++ ) {
152
+ // Only deal with non-null/undefined values
153
+ if ( (options = arguments[ i ]) != null ) {
154
+ // Extend the base object
155
+ for ( name in options ) {
156
+ src = target[ name ];
157
+ copy = options[ name ];
158
+
159
+ // Prevent never-ending loop
160
+ if ( target === copy ) {
161
+ continue;
162
+ }
163
+
164
+ // Recurse if we're merging plain objects or arrays
165
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
166
+ if ( copyIsArray ) {
167
+ copyIsArray = false;
168
+ clone = src && jQuery.isArray(src) ? src : [];
169
+
170
+ } else {
171
+ clone = src && jQuery.isPlainObject(src) ? src : {};
172
+ }
173
+
174
+ // Never move original objects, clone them
175
+ target[ name ] = jQuery.extend( deep, clone, copy );
176
+
177
+ // Don't bring in undefined values
178
+ } else if ( copy !== undefined ) {
179
+ target[ name ] = copy;
180
+ }
181
+ }
182
+ }
183
+ }
184
+
185
+ // Return the modified object
186
+ return target;
187
+ };
188
+
189
+ jQuery.extend({
190
+ // Unique for each copy of jQuery on the page
191
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
192
+
193
+ // Assume jQuery is ready without the ready module
194
+ isReady: true,
195
+
196
+ error: function( msg ) {
197
+ throw new Error( msg );
198
+ },
199
+
200
+ noop: function() {},
201
+
202
+ isFunction: function( obj ) {
203
+ return jQuery.type(obj) === "function";
204
+ },
205
+
206
+ isArray: Array.isArray,
207
+
208
+ isWindow: function( obj ) {
209
+ return obj != null && obj === obj.window;
210
+ },
211
+
212
+ isNumeric: function( obj ) {
213
+ // parseFloat NaNs numeric-cast false positives (null|true|false|"")
214
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
215
+ // subtraction forces infinities to NaN
216
+ // adding 1 corrects loss of precision from parseFloat (#15100)
217
+ return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
218
+ },
219
+
220
+ isPlainObject: function( obj ) {
221
+ // Not plain objects:
222
+ // - Any object or value whose internal [[Class]] property is not "[object Object]"
223
+ // - DOM nodes
224
+ // - window
225
+ if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
226
+ return false;
227
+ }
228
+
229
+ if ( obj.constructor &&
230
+ !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
231
+ return false;
232
+ }
233
+
234
+ // If the function hasn't returned already, we're confident that
235
+ // |obj| is a plain object, created by {} or constructed with new Object
236
+ return true;
237
+ },
238
+
239
+ isEmptyObject: function( obj ) {
240
+ var name;
241
+ for ( name in obj ) {
242
+ return false;
243
+ }
244
+ return true;
245
+ },
246
+
247
+ type: function( obj ) {
248
+ if ( obj == null ) {
249
+ return obj + "";
250
+ }
251
+ // Support: Android<4.0, iOS<6 (functionish RegExp)
252
+ return typeof obj === "object" || typeof obj === "function" ?
253
+ class2type[ toString.call(obj) ] || "object" :
254
+ typeof obj;
255
+ },
256
+
257
+ // Evaluates a script in a global context
258
+ globalEval: function( code ) {
259
+ var script,
260
+ indirect = eval;
261
+
262
+ code = jQuery.trim( code );
263
+
264
+ if ( code ) {
265
+ // If the code includes a valid, prologue position
266
+ // strict mode pragma, execute code by injecting a
267
+ // script tag into the document.
268
+ if ( code.indexOf("use strict") === 1 ) {
269
+ script = document.createElement("script");
270
+ script.text = code;
271
+ document.head.appendChild( script ).parentNode.removeChild( script );
272
+ } else {
273
+ // Otherwise, avoid the DOM node creation, insertion
274
+ // and removal by using an indirect global eval
275
+ indirect( code );
276
+ }
277
+ }
278
+ },
279
+
280
+ // Convert dashed to camelCase; used by the css and data modules
281
+ // Support: IE9-11+
282
+ // Microsoft forgot to hump their vendor prefix (#9572)
283
+ camelCase: function( string ) {
284
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
285
+ },
286
+
287
+ nodeName: function( elem, name ) {
288
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
289
+ },
290
+
291
+ // args is for internal usage only
292
+ each: function( obj, callback, args ) {
293
+ var value,
294
+ i = 0,
295
+ length = obj.length,
296
+ isArray = isArraylike( obj );
297
+
298
+ if ( args ) {
299
+ if ( isArray ) {
300
+ for ( ; i < length; i++ ) {
301
+ value = callback.apply( obj[ i ], args );
302
+
303
+ if ( value === false ) {
304
+ break;
305
+ }
306
+ }
307
+ } else {
308
+ for ( i in obj ) {
309
+ value = callback.apply( obj[ i ], args );
310
+
311
+ if ( value === false ) {
312
+ break;
313
+ }
314
+ }
315
+ }
316
+
317
+ // A special, fast, case for the most common use of each
318
+ } else {
319
+ if ( isArray ) {
320
+ for ( ; i < length; i++ ) {
321
+ value = callback.call( obj[ i ], i, obj[ i ] );
322
+
323
+ if ( value === false ) {
324
+ break;
325
+ }
326
+ }
327
+ } else {
328
+ for ( i in obj ) {
329
+ value = callback.call( obj[ i ], i, obj[ i ] );
330
+
331
+ if ( value === false ) {
332
+ break;
333
+ }
334
+ }
335
+ }
336
+ }
337
+
338
+ return obj;
339
+ },
340
+
341
+ // Support: Android<4.1
342
+ trim: function( text ) {
343
+ return text == null ?
344
+ "" :
345
+ ( text + "" ).replace( rtrim, "" );
346
+ },
347
+
348
+ // results is for internal usage only
349
+ makeArray: function( arr, results ) {
350
+ var ret = results || [];
351
+
352
+ if ( arr != null ) {
353
+ if ( isArraylike( Object(arr) ) ) {
354
+ jQuery.merge( ret,
355
+ typeof arr === "string" ?
356
+ [ arr ] : arr
357
+ );
358
+ } else {
359
+ push.call( ret, arr );
360
+ }
361
+ }
362
+
363
+ return ret;
364
+ },
365
+
366
+ inArray: function( elem, arr, i ) {
367
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
368
+ },
369
+
370
+ merge: function( first, second ) {
371
+ var len = +second.length,
372
+ j = 0,
373
+ i = first.length;
374
+
375
+ for ( ; j < len; j++ ) {
376
+ first[ i++ ] = second[ j ];
377
+ }
378
+
379
+ first.length = i;
380
+
381
+ return first;
382
+ },
383
+
384
+ grep: function( elems, callback, invert ) {
385
+ var callbackInverse,
386
+ matches = [],
387
+ i = 0,
388
+ length = elems.length,
389
+ callbackExpect = !invert;
390
+
391
+ // Go through the array, only saving the items
392
+ // that pass the validator function
393
+ for ( ; i < length; i++ ) {
394
+ callbackInverse = !callback( elems[ i ], i );
395
+ if ( callbackInverse !== callbackExpect ) {
396
+ matches.push( elems[ i ] );
397
+ }
398
+ }
399
+
400
+ return matches;
401
+ },
402
+
403
+ // arg is for internal usage only
404
+ map: function( elems, callback, arg ) {
405
+ var value,
406
+ i = 0,
407
+ length = elems.length,
408
+ isArray = isArraylike( elems ),
409
+ ret = [];
410
+
411
+ // Go through the array, translating each of the items to their new values
412
+ if ( isArray ) {
413
+ for ( ; i < length; i++ ) {
414
+ value = callback( elems[ i ], i, arg );
415
+
416
+ if ( value != null ) {
417
+ ret.push( value );
418
+ }
419
+ }
420
+
421
+ // Go through every key on the object,
422
+ } else {
423
+ for ( i in elems ) {
424
+ value = callback( elems[ i ], i, arg );
425
+
426
+ if ( value != null ) {
427
+ ret.push( value );
428
+ }
429
+ }
430
+ }
431
+
432
+ // Flatten any nested arrays
433
+ return concat.apply( [], ret );
434
+ },
435
+
436
+ // A global GUID counter for objects
437
+ guid: 1,
438
+
439
+ // Bind a function to a context, optionally partially applying any
440
+ // arguments.
441
+ proxy: function( fn, context ) {
442
+ var tmp, args, proxy;
443
+
444
+ if ( typeof context === "string" ) {
445
+ tmp = fn[ context ];
446
+ context = fn;
447
+ fn = tmp;
448
+ }
449
+
450
+ // Quick check to determine if target is callable, in the spec
451
+ // this throws a TypeError, but we will just return undefined.
452
+ if ( !jQuery.isFunction( fn ) ) {
453
+ return undefined;
454
+ }
455
+
456
+ // Simulated bind
457
+ args = slice.call( arguments, 2 );
458
+ proxy = function() {
459
+ return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
460
+ };
461
+
462
+ // Set the guid of unique handler to the same of original handler, so it can be removed
463
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
464
+
465
+ return proxy;
466
+ },
467
+
468
+ now: Date.now,
469
+
470
+ // jQuery.support is not used in Core but other projects attach their
471
+ // properties to it so it needs to exist.
472
+ support: support
473
+ });
474
+
475
+ // Populate the class2type map
476
+ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
477
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
478
+ });
479
+
480
+ function isArraylike( obj ) {
481
+
482
+ // Support: iOS 8.2 (not reproducible in simulator)
483
+ // `in` check used to prevent JIT error (gh-2145)
484
+ // hasOwn isn't used here due to false negatives
485
+ // regarding Nodelist length in IE
486
+ var length = "length" in obj && obj.length,
487
+ type = jQuery.type( obj );
488
+
489
+ if ( type === "function" || jQuery.isWindow( obj ) ) {
490
+ return false;
491
+ }
492
+
493
+ if ( obj.nodeType === 1 && length ) {
494
+ return true;
495
+ }
496
+
497
+ return type === "array" || length === 0 ||
498
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
499
+ }
500
+
501
+ return jQuery;
502
+ });