middleman-core 3.0.0.beta.1 → 3.0.0.beta.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (358) hide show
  1. data/Rakefile +2 -44
  2. data/bin/middleman +12 -8
  3. data/features/3rd_party_cli.feature +12 -2
  4. data/features/builder.feature +1 -1
  5. data/features/clean_build.feature +24 -14
  6. data/features/cli.feature +9 -30
  7. data/features/custom_layouts.feature +6 -0
  8. data/features/directory_index.feature +2 -0
  9. data/features/dynamic_pages.feature +37 -0
  10. data/features/extensionless_text_files.feature +58 -0
  11. data/features/former_padrino_helpers.feature +5 -3
  12. data/features/frontmatter_page_settings.feature +27 -0
  13. data/features/helpers_external.feature +7 -1
  14. data/features/i18n_builder.feature +121 -0
  15. data/features/i18n_preview.feature +113 -0
  16. data/features/ignore.feature +198 -0
  17. data/features/implied_extensions.feature +52 -0
  18. data/features/instance_vars.feature +0 -2
  19. data/features/partials.feature +5 -0
  20. data/features/request_params.feature +6 -0
  21. data/features/{sitemap_traversal.features → sitemap_traversal.feature} +24 -24
  22. data/features/wildcard_page_helper.feature +1 -1
  23. data/fixtures/clean-dir-app/config.rb +2 -1
  24. data/fixtures/clean-nested-app/config.rb +3 -0
  25. data/fixtures/clean-nested-app/source/about.html +1 -0
  26. data/fixtures/dynamic-pages-app/config.rb +25 -5
  27. data/fixtures/dynamic-pages-app/source/real/index.html.erb +5 -1
  28. data/{lib/middleman-core/vendor/darwin/spec/fixtures/custom 'path/.gitignore → fixtures/extensionless-text-files-app/config.rb} +0 -0
  29. data/fixtures/extensionless-text-files-app/source/CNAME +1 -0
  30. data/fixtures/extensionless-text-files-app/source/LICENSE +1 -0
  31. data/fixtures/extensionless-text-files-app/source/README +1 -0
  32. data/fixtures/extensionless-text-files-app/source/index.html +1 -0
  33. data/fixtures/external-helpers/helpers/four_helper.rb +3 -0
  34. data/fixtures/external-helpers/helpers/one_helper.rb +3 -0
  35. data/fixtures/external-helpers/helpers/three_helper.rb +3 -0
  36. data/fixtures/external-helpers/helpers/two_helper.rb +3 -0
  37. data/fixtures/external-helpers/source/automatic.html.erb +1 -0
  38. data/fixtures/frontmatter-settings-app/config.rb +4 -0
  39. data/fixtures/frontmatter-settings-app/source/alternate_layout.html.erb +5 -0
  40. data/fixtures/frontmatter-settings-app/source/ignored.html.erb +5 -0
  41. data/fixtures/frontmatter-settings-app/source/layouts/alternate.erb +3 -0
  42. data/fixtures/frontmatter-settings-app/source/no_index.html.erb +5 -0
  43. data/fixtures/i18n-alt-root-app/locales/en.yml +4 -0
  44. data/fixtures/i18n-alt-root-app/locales/es.yml +7 -0
  45. data/fixtures/i18n-alt-root-app/source/lang_data/hello.html.erb +1 -0
  46. data/fixtures/i18n-alt-root-app/source/lang_data/index.html.erb +1 -0
  47. data/fixtures/i18n-alt-root-app/source/layout.erb +1 -0
  48. data/fixtures/i18n-test-app/locales/en.yml +4 -0
  49. data/fixtures/i18n-test-app/locales/es.yml +7 -0
  50. data/fixtures/i18n-test-app/source/layout.erb +1 -0
  51. data/fixtures/i18n-test-app/source/localizable/hello.html.erb +1 -0
  52. data/fixtures/i18n-test-app/source/localizable/index.html.erb +1 -0
  53. data/fixtures/ignore-app/source/about.html.erb +1 -0
  54. data/{lib/middleman-core/vendor/darwin/spec/fixtures/folder1/file1.txt → fixtures/ignore-app/source/images/icon/messages.png} +0 -0
  55. data/{lib/middleman-core/vendor/darwin/spec/fixtures/folder1/folder2/file2.txt → fixtures/ignore-app/source/images/pic.png} +0 -0
  56. data/fixtures/ignore-app/source/images/portrait.jpg +0 -0
  57. data/fixtures/ignore-app/source/index.html.erb +0 -0
  58. data/fixtures/ignore-app/source/plain.html +1 -0
  59. data/fixtures/ignore-app/source/reports/another.html +0 -0
  60. data/fixtures/ignore-app/source/reports/index.html +0 -0
  61. data/fixtures/implied-extensions-app/config.rb +0 -0
  62. data/fixtures/implied-extensions-app/source/index.erb +1 -0
  63. data/fixtures/indexable-app/config.rb +3 -1
  64. data/fixtures/indexable-app/source/wildcard_leave_me_alone.html +1 -0
  65. data/fixtures/large-build-app/source/feed.xml.builder +4 -0
  66. data/fixtures/lorem-app/config.rb +1 -0
  67. data/fixtures/padrino-helpers-app/source/former_padrino_test.html.erb +2 -1
  68. data/fixtures/partials-app/source/shared/_footer.erb +1 -1
  69. data/fixtures/partials-app/source/shared/snippet.erb +1 -0
  70. data/fixtures/partials-app/source/using_snippet.html.erb +1 -0
  71. data/fixtures/request-app/config.rb +0 -0
  72. data/fixtures/request-app/source/index.html.erb +3 -0
  73. data/fixtures/traversal-app/source/layout.erb +2 -0
  74. data/lib/middleman-core/application.rb +558 -0
  75. data/lib/middleman-core/cli/build.rb +67 -64
  76. data/lib/middleman-core/cli/init.rb +10 -4
  77. data/lib/middleman-core/cli/server.rb +7 -1
  78. data/lib/middleman-core/cli.rb +22 -2
  79. data/lib/middleman-core/core_extensions/assets.rb +12 -3
  80. data/lib/middleman-core/core_extensions/builder.rb +0 -37
  81. data/lib/middleman-core/core_extensions/data.rb +3 -3
  82. data/lib/middleman-core/core_extensions/default_helpers.rb +17 -26
  83. data/lib/middleman-core/core_extensions/extensions.rb +13 -10
  84. data/lib/middleman-core/core_extensions/external_helpers.rb +35 -0
  85. data/lib/middleman-core/core_extensions/file_watcher.rb +9 -5
  86. data/lib/middleman-core/core_extensions/front_matter.rb +85 -15
  87. data/lib/middleman-core/core_extensions/i18n.rb +137 -0
  88. data/lib/middleman-core/core_extensions/rendering.rb +134 -21
  89. data/lib/middleman-core/core_extensions/routing.rb +42 -23
  90. data/lib/middleman-core/core_extensions/show_exceptions.rb +13 -3
  91. data/lib/middleman-core/extensions/asset_host.rb +21 -3
  92. data/lib/middleman-core/extensions/automatic_image_sizes.rb +20 -1
  93. data/lib/middleman-core/extensions/directory_indexes.rb +42 -47
  94. data/lib/middleman-core/extensions/lorem.rb +54 -6
  95. data/lib/middleman-core/extensions.rb +179 -0
  96. data/lib/middleman-core/renderers/erb.rb +28 -21
  97. data/lib/middleman-core/sitemap/extensions/ignores.rb +86 -0
  98. data/lib/middleman-core/sitemap/extensions/on_disk.rb +77 -0
  99. data/lib/middleman-core/sitemap/extensions/proxies.rb +97 -0
  100. data/lib/middleman-core/sitemap/extensions/traversal.rb +77 -0
  101. data/lib/middleman-core/sitemap/resource.rb +126 -0
  102. data/lib/middleman-core/sitemap/store.rb +148 -97
  103. data/lib/middleman-core/sitemap.rb +78 -0
  104. data/lib/middleman-core/step_definitions/builder_steps.rb +15 -1
  105. data/lib/middleman-core/step_definitions/server_steps.rb +11 -4
  106. data/lib/middleman-core/templates/default.rb +10 -0
  107. data/lib/middleman-core/templates/html5/source/404.html +32 -27
  108. data/lib/middleman-core/templates/html5/source/README.md +34 -367
  109. data/lib/middleman-core/templates/html5/source/apple-touch-icon-114x114-precomposed.png +0 -0
  110. data/lib/middleman-core/templates/html5/source/apple-touch-icon-57x57-precomposed.png +0 -0
  111. data/lib/middleman-core/templates/html5/source/apple-touch-icon-72x72-precomposed.png +0 -0
  112. data/lib/middleman-core/templates/html5/source/apple-touch-icon-precomposed.png +0 -0
  113. data/lib/middleman-core/templates/html5/source/apple-touch-icon.png +0 -0
  114. data/lib/middleman-core/templates/html5/source/crossdomain.xml +0 -0
  115. data/lib/middleman-core/templates/html5/source/css/style.css +37 -37
  116. data/lib/middleman-core/templates/html5/source/favicon.ico +0 -0
  117. data/lib/middleman-core/templates/html5/source/humans.txt +0 -0
  118. data/lib/middleman-core/templates/html5/source/img/.gitignore +0 -2
  119. data/lib/middleman-core/templates/html5/source/index.html +31 -43
  120. data/lib/middleman-core/templates/html5/source/js/libs/{jquery-1.6.2.js → jquery-1.7.1.js} +1922 -1637
  121. data/lib/middleman-core/templates/html5/source/js/libs/jquery-1.7.1.min.js +4 -0
  122. data/lib/middleman-core/templates/html5/source/js/libs/modernizr-2.5.3.min.js +4 -0
  123. data/lib/middleman-core/templates/html5/source/js/plugins.js +3 -12
  124. data/lib/middleman-core/templates/html5/source/js/script.js +0 -0
  125. data/lib/middleman-core/templates/html5/source/robots.txt +1 -2
  126. data/lib/middleman-core/templates/html5.rb +10 -5
  127. data/lib/middleman-core/templates/local.rb +8 -1
  128. data/lib/middleman-core/templates/shared/config.tt +6 -6
  129. data/lib/middleman-core/templates.rb +10 -13
  130. data/lib/middleman-core/util.rb +90 -0
  131. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/.document +0 -0
  132. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/.gitignore +0 -0
  133. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/.yardopts +0 -0
  134. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/LICENSE.txt +0 -0
  135. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/README.rdoc +0 -0
  136. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/Rakefile +0 -0
  137. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/bin/padrino +0 -0
  138. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/application/rendering.rb +0 -0
  139. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/application/routing.rb +38 -29
  140. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/application/showexceptions.rb +0 -0
  141. data/lib/middleman-core/vendor/padrino-core-0.10.6/lib/padrino-core/application.rb +269 -0
  142. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/caller.rb +0 -0
  143. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/cli/adapter.rb +0 -0
  144. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/cli/base.rb +4 -5
  145. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/cli/console.rb +0 -0
  146. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/cli/rake.rb +0 -0
  147. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/cli/rake_tasks.rb +0 -0
  148. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/command.rb +0 -0
  149. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/images/404.png +0 -0
  150. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/images/500.png +0 -0
  151. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/loader.rb +1 -0
  152. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/cs.yml +0 -0
  153. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/da.yml +0 -0
  154. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/de.yml +0 -0
  155. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/en.yml +0 -0
  156. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/es.yml +0 -0
  157. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/fr.yml +0 -0
  158. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/hu.yml +0 -0
  159. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/it.yml +1 -1
  160. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/ja.yml +0 -0
  161. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/lv.yml +2 -2
  162. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/nl.yml +0 -0
  163. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/no.yml +0 -0
  164. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/pl.yml +0 -0
  165. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/pt_br.yml +0 -0
  166. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/ru.yml +0 -0
  167. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/tr.yml +0 -0
  168. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/uk.yml +0 -0
  169. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/zh_cn.yml +0 -0
  170. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/locale/zh_tw.yml +0 -0
  171. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/logger.rb +192 -109
  172. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/mounter.rb +0 -0
  173. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/reloader.rb +39 -39
  174. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/router.rb +0 -0
  175. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/server.rb +2 -2
  176. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/support_lite.rb +4 -5
  177. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/tasks.rb +0 -0
  178. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core/version.rb +1 -1
  179. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/lib/padrino-core.rb +0 -15
  180. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/padrino-core.gemspec +1 -1
  181. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/apps/.components +0 -0
  182. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/apps/.gitignore +0 -0
  183. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/apps/complex.rb +0 -0
  184. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/apps/simple.rb +0 -0
  185. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/dependencies/a.rb +0 -0
  186. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/dependencies/b.rb +0 -0
  187. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/dependencies/c.rb +0 -0
  188. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/dependencies/circular/e.rb +0 -0
  189. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/dependencies/circular/f.rb +0 -0
  190. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/dependencies/circular/g.rb +0 -0
  191. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/fixtures/dependencies/d.rb +0 -0
  192. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/helper.rb +2 -0
  193. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/mini_shoulda.rb +0 -0
  194. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_application.rb +0 -0
  195. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_core.rb +0 -2
  196. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_dependencies.rb +0 -0
  197. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_filters.rb +0 -0
  198. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_locale.rb +0 -0
  199. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_logger.rb +54 -0
  200. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_mounter.rb +0 -0
  201. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_reloader_complex.rb +0 -0
  202. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_reloader_simple.rb +0 -0
  203. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_rendering.rb +0 -0
  204. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_restful_routing.rb +0 -0
  205. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_router.rb +0 -0
  206. data/lib/middleman-core/vendor/{padrino-core-0.10.5 → padrino-core-0.10.6}/test/test_routing.rb +7 -0
  207. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/.document +0 -0
  208. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/.gitignore +0 -0
  209. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/.yardopts +0 -0
  210. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/LICENSE.txt +0 -0
  211. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/README.rdoc +0 -0
  212. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/Rakefile +0 -0
  213. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/asset_tag_helpers.rb +76 -79
  214. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/form_builder/abstract_form_builder.rb +31 -0
  215. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/form_builder/standard_form_builder.rb +0 -0
  216. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/form_helpers.rb +211 -26
  217. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/format_helpers.rb +2 -2
  218. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/cs.yml +0 -0
  219. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/da.yml +0 -0
  220. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/de.yml +0 -0
  221. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/en.yml +0 -0
  222. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/es.yml +0 -0
  223. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/fr.yml +0 -0
  224. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/hu.yml +0 -0
  225. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/it.yml +0 -0
  226. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/ja.yml +0 -0
  227. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/lv.yml +0 -0
  228. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/nl.yml +0 -0
  229. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/no.yml +0 -0
  230. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/pl.yml +0 -0
  231. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/pt_br.yml +0 -0
  232. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/ru.yml +0 -0
  233. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/tr.yml +0 -0
  234. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/uk.yml +0 -0
  235. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/zh_cn.yml +0 -0
  236. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/locale/zh_tw.yml +0 -0
  237. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/number_helpers.rb +0 -0
  238. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/output_helpers/abstract_handler.rb +0 -0
  239. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/output_helpers/erb_handler.rb +0 -0
  240. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/output_helpers/haml_handler.rb +0 -0
  241. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/output_helpers/slim_handler.rb +0 -0
  242. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/output_helpers.rb +0 -0
  243. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/render_helpers.rb +0 -0
  244. data/lib/middleman-core/vendor/padrino-helpers-0.10.6/lib/padrino-helpers/tag_helpers.rb +260 -0
  245. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers/translation_helpers.rb +0 -0
  246. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/lib/padrino-helpers.rb +4 -3
  247. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/padrino-helpers.gemspec +0 -0
  248. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/app.rb +0 -0
  249. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/capture_concat.erb +0 -0
  250. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/capture_concat.haml +0 -0
  251. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/capture_concat.slim +0 -0
  252. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/content_for.erb +0 -0
  253. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/content_for.haml +0 -0
  254. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/content_for.slim +0 -0
  255. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/content_tag.erb +0 -0
  256. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/content_tag.haml +0 -0
  257. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/content_tag.slim +0 -0
  258. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/current_engine.erb +0 -0
  259. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/current_engine.haml +0 -0
  260. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/current_engine.slim +0 -0
  261. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/fields_for.erb +0 -0
  262. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/fields_for.haml +0 -0
  263. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/fields_for.slim +0 -0
  264. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/form_for.erb +20 -4
  265. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/form_for.haml +15 -3
  266. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/form_for.slim +15 -3
  267. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/form_tag.erb +30 -0
  268. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/form_tag.haml +25 -0
  269. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/form_tag.slim +25 -0
  270. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/link_to.erb +0 -0
  271. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/link_to.haml +0 -0
  272. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/link_to.slim +0 -0
  273. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/mail_to.erb +0 -0
  274. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/mail_to.haml +0 -0
  275. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/mail_to.slim +0 -0
  276. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/meta_tag.erb +0 -0
  277. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/meta_tag.haml +0 -0
  278. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/meta_tag.slim +0 -0
  279. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/partials/_erb.erb +0 -0
  280. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/partials/_haml.haml +0 -0
  281. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/partials/_slim.slim +0 -0
  282. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/simple_partial.erb +0 -0
  283. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/simple_partial.haml +0 -0
  284. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/markup_app/views/simple_partial.slim +0 -0
  285. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/app.rb +0 -0
  286. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/current_engine.haml +0 -0
  287. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/current_engines/_erb.erb +0 -0
  288. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/current_engines/_haml.haml +0 -0
  289. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/current_engines/_slim.slim +0 -0
  290. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/erb/test.erb +0 -0
  291. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/explicit_engine.haml +0 -0
  292. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/haml/test.haml +0 -0
  293. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/template/_user.haml +0 -0
  294. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/template/haml_template.haml +0 -0
  295. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/fixtures/render_app/views/template/some_template.haml +0 -0
  296. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/helper.rb +0 -0
  297. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_asset_tag_helpers.rb +14 -6
  298. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_form_builder.rb +116 -6
  299. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_form_helpers.rb +134 -9
  300. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_format_helpers.rb +0 -0
  301. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_locale.rb +0 -0
  302. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_number_helpers.rb +3 -0
  303. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_output_helpers.rb +0 -0
  304. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_render_helpers.rb +0 -0
  305. data/lib/middleman-core/vendor/{padrino-helpers-0.10.5 → padrino-helpers-0.10.6}/test/test_tag_helpers.rb +7 -6
  306. data/lib/middleman-core/version.rb +2 -2
  307. data/lib/middleman-core/watcher.rb +75 -36
  308. data/lib/middleman-core.rb +7 -252
  309. data/middleman-core.gemspec +14 -11
  310. metadata +396 -348
  311. data/bin/fsevent_watch_guard +0 -0
  312. data/ext/extconf.rb +0 -61
  313. data/ext/fsevent/fsevent_watch.c +0 -226
  314. data/fixtures/3rd-party-command/config.rb +0 -10
  315. data/fixtures/ignore-app/config.rb +0 -2
  316. data/fixtures/ignore-app/source/articles/template.html.erb +0 -1
  317. data/fixtures/ignore-app/source/template.html.erb +0 -1
  318. data/lib/middleman-core/base.rb +0 -494
  319. data/lib/middleman-core/cache.rb +0 -57
  320. data/lib/middleman-core/core_extensions/sitemap.rb +0 -72
  321. data/lib/middleman-core/sitemap/page.rb +0 -186
  322. data/lib/middleman-core/sitemap/template.rb +0 -82
  323. data/lib/middleman-core/templates/html5/source/js/libs/jquery-1.6.2.min.js +0 -18
  324. data/lib/middleman-core/templates/html5/source/js/libs/modernizr-2.0.6.min.js +0 -4
  325. data/lib/middleman-core/templates/html5/source/js/mylibs/.gitignore +0 -2
  326. data/lib/middleman-core/templates/html5/source/test/index.html +0 -31
  327. data/lib/middleman-core/templates/html5/source/test/qunit/qunit.css +0 -148
  328. data/lib/middleman-core/templates/html5/source/test/qunit/qunit.js +0 -1265
  329. data/lib/middleman-core/templates/html5/source/test/tests.js +0 -24
  330. data/lib/middleman-core/vendor/darwin/.gitignore +0 -18
  331. data/lib/middleman-core/vendor/darwin/Gemfile +0 -6
  332. data/lib/middleman-core/vendor/darwin/Guardfile +0 -8
  333. data/lib/middleman-core/vendor/darwin/LICENSE +0 -20
  334. data/lib/middleman-core/vendor/darwin/README.rdoc +0 -254
  335. data/lib/middleman-core/vendor/darwin/Rakefile +0 -21
  336. data/lib/middleman-core/vendor/darwin/ext/extconf.rb +0 -61
  337. data/lib/middleman-core/vendor/darwin/ext/fsevent/fsevent_watch.c +0 -226
  338. data/lib/middleman-core/vendor/darwin/lib/rb-fsevent/fsevent.rb +0 -105
  339. data/lib/middleman-core/vendor/darwin/lib/rb-fsevent/version.rb +0 -3
  340. data/lib/middleman-core/vendor/darwin/lib/rb-fsevent.rb +0 -2
  341. data/lib/middleman-core/vendor/darwin/rb-fsevent.gemspec +0 -24
  342. data/lib/middleman-core/vendor/darwin/spec/rb-fsevent/fsevent_spec.rb +0 -75
  343. data/lib/middleman-core/vendor/darwin/spec/spec_helper.rb +0 -24
  344. data/lib/middleman-core/vendor/linux/.gitignore +0 -3
  345. data/lib/middleman-core/vendor/linux/.yardopts +0 -4
  346. data/lib/middleman-core/vendor/linux/MIT-LICENSE +0 -20
  347. data/lib/middleman-core/vendor/linux/README.md +0 -66
  348. data/lib/middleman-core/vendor/linux/Rakefile +0 -54
  349. data/lib/middleman-core/vendor/linux/VERSION +0 -1
  350. data/lib/middleman-core/vendor/linux/lib/rb-inotify/event.rb +0 -139
  351. data/lib/middleman-core/vendor/linux/lib/rb-inotify/native/flags.rb +0 -89
  352. data/lib/middleman-core/vendor/linux/lib/rb-inotify/native.rb +0 -31
  353. data/lib/middleman-core/vendor/linux/lib/rb-inotify/notifier.rb +0 -308
  354. data/lib/middleman-core/vendor/linux/lib/rb-inotify/watcher.rb +0 -83
  355. data/lib/middleman-core/vendor/linux/lib/rb-inotify.rb +0 -17
  356. data/lib/middleman-core/vendor/linux/rb-inotify.gemspec +0 -53
  357. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/application.rb +0 -270
  358. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/tag_helpers.rb +0 -103
@@ -1,18 +1,33 @@
1
+ # Parsing YAML frontmatter
1
2
  require "yaml"
3
+
4
+ # Looking up Tilt extensions
2
5
  require "tilt"
3
6
 
7
+ # Frontmatter namespace
4
8
  module Middleman::CoreExtensions::FrontMatter
9
+
10
+ # Setup extension
5
11
  class << self
12
+
13
+ # Once registered
6
14
  def registered(app)
7
15
  app.set :frontmatter_extensions, %w(.htm .html .php)
8
16
  app.extend ClassMethods
9
17
  app.send :include, InstanceMethods
10
18
  app.delegate :frontmatter_changed, :to => :"self.class"
19
+
20
+ ::Middleman::Sitemap::Resource.send :include, ResourceInstanceMethods
11
21
  end
12
22
  alias :included :registered
13
23
  end
14
24
 
25
+ # Frontmatter class methods
15
26
  module ClassMethods
27
+
28
+ # Register callback on frontmatter updates
29
+ # @param [Regexp] matcher
30
+ # @return [Array<Array<Proc, Regexp>>]
16
31
  def frontmatter_changed(matcher=nil, &block)
17
32
  @_frontmatter_changed ||= []
18
33
  @_frontmatter_changed << [block, matcher] if block_given?
@@ -20,29 +35,40 @@ module Middleman::CoreExtensions::FrontMatter
20
35
  end
21
36
  end
22
37
 
38
+ module ResourceInstanceMethods
39
+
40
+ # This page's frontmatter
41
+ # @return [Hash]
42
+ def data
43
+ app.frontmatter(relative_path).first
44
+ end
45
+
46
+ end
47
+
48
+ # Frontmatter instance methods
23
49
  module InstanceMethods
50
+
51
+ # Override init
24
52
  def initialize
25
- super
26
-
27
53
  exts = frontmatter_extensions.join("|").gsub(".", "\.")
28
54
 
29
- static_path = source_dir.sub(self.root, "").sub(/^\//, "").sub(/\/$/, "") + "/"
55
+ static_path = source_dir.sub(root, "").sub(/^\//, "").sub(/\/$/, "") + "/"
30
56
 
31
57
  matcher = %r{#{static_path}.*(#{exts})}
32
58
 
33
- self.files.changed matcher do |file|
34
- self.frontmatter_extension.touch_file(file)
59
+ files.changed matcher do |file|
60
+ frontmatter_extension.touch_file(file)
35
61
  end
36
62
 
37
- self.files.deleted matcher do |file|
38
- self.frontmatter_extension.remove_file(file)
63
+ files.deleted matcher do |file|
64
+ frontmatter_extension.remove_file(file)
39
65
  end
40
66
 
41
- provides_metadata matcher do |path|
42
- relative_path = path.sub(source_dir, "")
67
+ sitemap.provides_metadata matcher do |path|
68
+ relative_path = path.sub(self.source_dir, "")
43
69
 
44
- fmdata = if frontmatter_extension.has_data?(relative_path)
45
- frontmatter(relative_path)[0]
70
+ fmdata = if self.frontmatter_extension.has_data?(relative_path)
71
+ self.frontmatter(relative_path)[0]
46
72
  else
47
73
  {}
48
74
  end
@@ -54,8 +80,16 @@ module Middleman::CoreExtensions::FrontMatter
54
80
 
55
81
  { :options => data, :page => fmdata }
56
82
  end
83
+
84
+ # Initialize class
85
+ frontmatter_extension
86
+
87
+ super
57
88
  end
58
89
 
90
+ # Notify callbacks that the frontmatter changed
91
+ # @param [String] path
92
+ # @return [void]
59
93
  def frontmatter_did_change(path)
60
94
  frontmatter_changed.each do |callback, matcher|
61
95
  next if path.match(%r{^#{build_dir}/})
@@ -64,26 +98,50 @@ module Middleman::CoreExtensions::FrontMatter
64
98
  end
65
99
  end
66
100
 
101
+ # Get the frontmatter object
102
+ # @return [Middleman::CoreExtensions::FrontMatter::FrontMatter]
67
103
  def frontmatter_extension
68
104
  @_frontmatter_extension ||= FrontMatter.new(self)
69
105
  end
70
106
 
107
+ # Get the frontmatter for the given params
108
+ # @param [String] path
109
+ # @return [Hash, nil]
71
110
  def frontmatter(*args)
72
111
  frontmatter_extension.data(*args)
73
112
  end
74
113
  end
75
114
 
115
+ # Core Frontmatter class
76
116
  class FrontMatter
117
+
118
+ # Initialize frontmatter with current app
119
+ # @param [Middleman::Application] app
77
120
  def initialize(app)
78
121
  @app = app
79
122
  @source = File.expand_path(@app.source, @app.root)
80
123
  @local_data = {}
124
+
125
+ # Setup ignore callback
126
+ @app.ignore do |path|
127
+ if p = @app.sitemap.find_resource_by_path(path)
128
+ !p.proxy? && p.data && p.data["ignored"] == true
129
+ else
130
+ false
131
+ end
132
+ end
81
133
  end
82
134
 
135
+ # Whether the frontmatter knows about a path
136
+ # @param [String] path
137
+ # @return [Boolean]
83
138
  def has_data?(path)
84
139
  @local_data.has_key?(path.to_s)
85
140
  end
86
141
 
142
+ # Update frontmatter if a file changes
143
+ # @param [String] file
144
+ # @return [void]
87
145
  def touch_file(file)
88
146
  extension = File.extname(file).sub(/\./, "")
89
147
  return unless ::Tilt.mappings.has_key?(extension)
@@ -95,7 +153,8 @@ module Middleman::CoreExtensions::FrontMatter
95
153
 
96
154
  if result
97
155
  data, content = result
98
- data = ::Middleman.recursively_enhance(data)
156
+
157
+ data = ::Middleman::Util.recursively_enhance(data).freeze
99
158
  file = file.sub(@app.source_dir, "")
100
159
  @local_data[file] = [data, content]
101
160
  path = File.join(@app.source_dir, file)
@@ -104,28 +163,40 @@ module Middleman::CoreExtensions::FrontMatter
104
163
  end
105
164
  end
106
165
 
166
+ # Update frontmatter if a file is delted
167
+ # @param [String] file
168
+ # @return [void]
107
169
  def remove_file(file)
108
170
  file = File.expand_path(file, @app.root)
109
171
  file = file.sub(@app.source_dir, "")
110
- # @app.logger.debug :frontmatter_remove, Time.now, file if @app.logging?
111
172
 
112
173
  if @local_data.has_key?(file)
174
+ path = File.join(@app.source_dir, file)
175
+ @app.cache.remove(:raw_template, path)
113
176
  @local_data.delete(file)
114
177
  end
115
178
  end
116
179
 
180
+ # Get the frontmatter for a given path
181
+ # @param [String] path
182
+ # @return [Hash]
117
183
  def data(path)
118
184
  if @local_data.has_key?(path.to_s)
119
185
  @local_data[path.to_s]
120
186
  else
121
- nil
187
+ {}.freeze
122
188
  end
123
189
  end
124
190
 
125
191
  private
192
+ # Parse frontmatter out of a string
193
+ # @param [String] content
194
+ # @return [Array<Hash, String>]
126
195
  def parse_front_matter(content)
127
196
  yaml_regex = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
128
197
  if content =~ yaml_regex
198
+ content = content[($1.size + $2.size)..-1]
199
+
129
200
  begin
130
201
  data = YAML.load($1)
131
202
  rescue => e
@@ -133,7 +204,6 @@ module Middleman::CoreExtensions::FrontMatter
133
204
  return false
134
205
  end
135
206
 
136
- content = content.split(yaml_regex).last
137
207
  else
138
208
  return false
139
209
  end
@@ -0,0 +1,137 @@
1
+ # i18n Namespace
2
+ module Middleman::CoreExtensions::I18n
3
+
4
+ # Setup extension
5
+ class << self
6
+
7
+ # Once registerd
8
+ def registered(app)
9
+ app.set :locales_dir, "locales"
10
+
11
+ app.send :include, InstanceMethods
12
+
13
+ # Needed for helpers as well
14
+ app.after_configuration do
15
+ ::I18n.load_path = [Dir[File.join(root, locales_dir, "*.yml")]]
16
+ ::I18n.reload!
17
+ end
18
+ end
19
+ alias :included :registered
20
+ end
21
+
22
+ class Localizer
23
+ def initialize(app)
24
+ @app = app
25
+ @maps = {}
26
+ end
27
+
28
+ def setup(options)
29
+ @options = options
30
+
31
+ @lang_map = @options[:lang_map] || {}
32
+ @path = @options[:path] || "/:locale/"
33
+ @templates_dir = @options[:templates_dir] || "localizable"
34
+ @mount_at_root = @options.has_key?(:mount_at_root) ? @options[:mount_at_root] : langs.first
35
+
36
+ if !@app.build?
37
+ puts "== Locales: #{langs.join(", ")}"
38
+ end
39
+
40
+ # Don't output localizable files
41
+ @app.ignore File.join(@templates_dir, "**")
42
+
43
+ @app.sitemap.provides_metadata_for_path do |url|
44
+ if d = get_localization_data(url)
45
+ lang, page_id = d
46
+ instance_vars = Proc.new {
47
+ ::I18n.locale = lang
48
+ @lang = lang
49
+ @page_id = page_id
50
+ }
51
+ { :blocks => [instance_vars] }
52
+ else
53
+ {}
54
+ end
55
+ end
56
+
57
+ @app.sitemap.register_resource_list_manipulator(
58
+ :i18n,
59
+ @app.i18n
60
+ )
61
+ end
62
+
63
+ def langs
64
+ @options[:langs] || begin
65
+ Dir[File.join(@app.root, @app.locales_dir, "*.yml")].map { |file|
66
+ File.basename(file).gsub(".yml", "")
67
+ }.sort.map(&:to_sym)
68
+ end
69
+ end
70
+
71
+ def get_localization_data(path)
72
+ @_localization_data ||= {}
73
+ @_localization_data[path]
74
+ end
75
+
76
+ # Update the main sitemap resource list
77
+ # @return [void]
78
+ def manipulate_resource_list(resources)
79
+ @_localization_data = {}
80
+
81
+ new_resources = []
82
+
83
+ resources.each do |resource|
84
+ next unless File.fnmatch(File.join(@templates_dir, "**"), resource.path)
85
+
86
+ page_id = File.basename(resource.path, File.extname(resource.path))
87
+
88
+ langs.map do |lang|
89
+ ::I18n.locale = lang
90
+
91
+ localized_page_id = ::I18n.t("paths.#{page_id}", :default => page_id)
92
+ path = resource.path.sub(@templates_dir, "")
93
+
94
+ # Build lang path
95
+ if @mount_at_root == lang
96
+ prefix = "/"
97
+ else
98
+ replacement = @lang_map.has_key?(lang) ? @lang_map[lang] : lang
99
+ prefix = @path.sub(":locale", replacement.to_s)
100
+ end
101
+
102
+ path = ::Middleman::Util.normalize_path(
103
+ File.join(prefix, path.sub(page_id, localized_page_id))
104
+ )
105
+
106
+ @_localization_data[path] = [lang, path, localized_page_id]
107
+
108
+ p = ::Middleman::Sitemap::Resource.new(
109
+ @app.sitemap,
110
+ path
111
+ )
112
+ p.proxy_to(resource.path)
113
+
114
+ new_resources << p
115
+ end
116
+ end
117
+
118
+ resources + new_resources
119
+ end
120
+ end
121
+
122
+ # Frontmatter class methods
123
+ module InstanceMethods
124
+
125
+ # Initialize the i18n
126
+ def i18n
127
+ @_i18n ||= Localizer.new(self)
128
+ end
129
+
130
+ # Main i18n API
131
+ def localize(options={})
132
+ settings.after_configuration do
133
+ i18n.setup(options)
134
+ end
135
+ end
136
+ end
137
+ end
@@ -1,27 +1,44 @@
1
+ require "middleman-core/renderers/erb"
2
+
1
3
  # Shutup Tilt Warnings
4
+ # @private
2
5
  class Tilt::Template
3
6
  def warn(*args)
4
7
  # Kernel.warn(*args)
5
8
  end
6
9
  end
7
10
 
11
+ # Rendering extension
8
12
  module Middleman::CoreExtensions::Rendering
13
+
14
+ # Setup extension
9
15
  class << self
16
+
17
+ # Once registered
10
18
  def registered(app)
19
+ # Include methods
11
20
  app.send :include, InstanceMethods
12
21
 
13
22
  # Activate custom renderers
14
23
  app.register Middleman::Renderers::ERb
15
24
  end
25
+
16
26
  alias :included :registered
17
27
  end
18
28
 
29
+ # Custom error class for handling
19
30
  class TemplateNotFound < RuntimeError
20
31
  end
21
32
 
33
+ # Rendering instance methods
22
34
  module InstanceMethods
35
+
36
+ # Override init to clear cache on file removal
23
37
  def initialize
24
- super
38
+ # Default extension map
39
+ @_template_extensions = {
40
+
41
+ }
25
42
 
26
43
  static_path = source_dir.sub(self.root, "").sub(/^\//, "")
27
44
  render_regex = static_path.empty? ? // : (%r{^#{static_path + "/"}})
@@ -30,41 +47,73 @@ module Middleman::CoreExtensions::Rendering
30
47
  path = File.expand_path(file, self.root)
31
48
  self.cache.remove(:raw_template, path)
32
49
  end
50
+
51
+ super
52
+ end
53
+
54
+ # Add or overwrite a default template extension
55
+ #
56
+ # @param [Hash] extension_map
57
+ # @return [void]
58
+ def template_extensions(extension_map={})
59
+ @_template_extensions.merge!(extension_map)
33
60
  end
34
61
 
62
+ # Render a template, with layout, given a path
63
+ #
64
+ # @param [String] path
65
+ # @param [Hash] locs
66
+ # @param [Hash] opts
67
+ # @return [String]
35
68
  def render_template(path, locs={}, opts={})
69
+ # Detect the remdering engine from the extension
36
70
  extension = File.extname(path)
37
71
  engine = extension[1..-1].to_sym
38
72
 
73
+ # Store last engine for later (could be inside nested renders)
39
74
  @current_engine, engine_was = engine, @current_engine
40
75
 
41
76
  # Use a dup of self as a context so that instance variables set within
42
77
  # the template don't persist for other templates.
43
78
  context = self.dup
44
79
 
80
+ # Store current locs/opts for later
45
81
  @current_locs = locs, @current_opts = opts
46
82
 
83
+ # Keep rendering template until we've used up all extensions. This handles
84
+ # cases like `style.css.sass.erb`
47
85
  while ::Tilt[path]
48
86
  content = render_individual_file(path, locs, opts, context)
49
87
  path = File.basename(path, File.extname(path))
50
88
  cache.set([:raw_template, path], content)
51
89
  end
52
90
 
53
- needs_layout = !%w(.js .css .txt).include?(extension)
91
+ # Certain output file types don't use layouts
92
+ needs_layout = !%w(.js .json .css .txt).include?(extension)
54
93
 
94
+ # If we need a layout and have a layout, use it
55
95
  if needs_layout && layout_path = fetch_layout(engine, opts)
56
96
  content = render_individual_file(layout_path, locs, opts, context) { content }
57
97
  end
58
98
 
99
+ # Return result
59
100
  content
60
101
  ensure
102
+ # Pop all the saved variables from earlier as we may be returning to a
103
+ # previous render (layouts, partials, nested layouts).
61
104
  @current_engine = engine_was
62
105
  @content_blocks = nil
63
106
  @current_locs = nil
64
107
  @current_opts = nil
65
108
  end
66
109
 
67
- # Sinatra/Padrino render method signature.
110
+ # Sinatra/Padrino compatible render method signature referenced by some view
111
+ # helpers. Especially partials.
112
+ #
113
+ # @param [String, Symbol] engine
114
+ # @param [String, Symbol] data
115
+ # @param [Hash] options
116
+ # @return [String]
68
117
  def render(engine, data, options={}, &block)
69
118
  data = data.to_s
70
119
 
@@ -73,30 +122,36 @@ module Middleman::CoreExtensions::Rendering
73
122
  found_partial = false
74
123
  engine = nil
75
124
 
76
- if sitemap.exists?(current_path)
77
- page = sitemap.page(current_path)
78
- current_dir = File.dirname(page.source_file)
79
- engine = File.extname(page.source_file)[1..-1].to_sym
125
+ # If the path is known to the sitemap
126
+ if resource = sitemap.find_resource_by_path(current_path)
127
+ current_dir = File.dirname(resource.source_file)
128
+ engine = File.extname(resource.source_file)[1..-1].to_sym
80
129
 
130
+ # Look for partials relative to the current path
81
131
  if current_dir != self.source_dir
82
132
  relative_dir = File.join(current_dir.sub("#{self.source_dir}/", ""), data)
83
133
 
84
- found_partial, found_engine = resolve_template(relative_dir, :preferred_engine => engine)
134
+ # Try to use the current engine first
135
+ found_partial, found_engine = resolve_template(relative_dir, :preferred_engine => engine, :try_without_underscore => true)
85
136
 
137
+ # Fall back to any engine available
86
138
  if !found_partial
87
- found_partial, found_engine = resolve_template(relative_dir)
139
+ found_partial, found_engine = resolve_template(relative_dir, :try_without_underscore => true)
88
140
  end
89
141
  end
90
142
  end
91
-
143
+
144
+ # Look in the root for the partial with the current engine
92
145
  if !found_partial && !engine.nil?
93
- found_partial, found_engine = resolve_template(data, :preferred_engine => engine)
146
+ found_partial, found_engine = resolve_template(data, :preferred_engine => engine, :try_without_underscore => true)
94
147
  end
95
148
 
149
+ # Look in the root with any engine
96
150
  if !found_partial
97
- found_partial, found_engine = resolve_template(data)
151
+ found_partial, found_engine = resolve_template(data, :try_without_underscore => true)
98
152
  end
99
153
 
154
+ # Render the partial if found, otherwide throw exception
100
155
  if found_partial
101
156
  render_individual_file(found_partial, locals, options, self, &block)
102
157
  else
@@ -104,34 +159,53 @@ module Middleman::CoreExtensions::Rendering
104
159
  end
105
160
  end
106
161
 
107
- # @private
162
+ # Render an on-disk file. Used for everything, including layouts.
163
+ #
164
+ # @param [String, Symbol] path
165
+ # @param [Hash] locs
166
+ # @param [Hash] opts
167
+ # @param [Class] context
168
+ # @return [String]
108
169
  def render_individual_file(path, locs = {}, opts = {}, context = self, &block)
109
170
  path = path.to_s
110
171
 
172
+ # Save current buffere for later
111
173
  @_out_buf, _buf_was = "", @_out_buf
112
174
 
175
+ # Read from disk or cache the contents of the file
113
176
  body = cache.fetch(:raw_template, path) do
114
177
  File.read(path)
115
178
  end
116
179
 
180
+ # Merge per-extension options from config
117
181
  extension = File.extname(path)
118
182
  options = opts.merge(options_for_ext(extension))
119
183
  options[:outvar] ||= '@_out_buf'
120
184
 
185
+ # Read compiled template from disk or cache
121
186
  template = cache.fetch(:compiled_template, options, body) do
122
187
  ::Tilt.new(path, 1, options) { body }
123
188
  end
124
189
 
190
+ # Render using Tilt
125
191
  template.render(context, locs, &block)
126
- ensure
192
+ ensure
193
+ # Reset stored buffer
127
194
  @_out_buf = _buf_was
128
195
  end
129
196
 
130
- # @private
197
+ # Get a hash of configuration options for a given file extension, from
198
+ # config.rb
199
+ #
200
+ # @param [String] ext
201
+ # @return [Hash]
131
202
  def options_for_ext(ext)
203
+ # Read options for extension from config/Tilt or cache
132
204
  cache.fetch(:options_for_ext, ext) do
133
205
  options = {}
134
206
 
207
+ # Find all the engines which handle this extension in tilt. Look for
208
+ # config variables of that name and merge it
135
209
  extension_class = ::Tilt[ext]
136
210
  ::Tilt.mappings.each do |ext, engines|
137
211
  next unless engines.include? extension_class
@@ -143,13 +217,21 @@ module Middleman::CoreExtensions::Rendering
143
217
  end
144
218
  end
145
219
 
146
- # @private
220
+ # Find a layout for a given engine
221
+ #
222
+ # @param [Symbol] engine
223
+ # @param [Hash] opts
224
+ # @return [String]
147
225
  def fetch_layout(engine, opts)
226
+ # The layout name comes from either the system default or the options
148
227
  local_layout = opts.has_key?(:layout) ? opts[:layout] : layout
149
228
  return false unless local_layout
150
229
 
230
+ # Look for engine-specific options
151
231
  engine_options = respond_to?(engine) ? send(engine) : {}
152
232
 
233
+ # The engine for the layout can be set in options, engine_options or passed
234
+ # into this method
153
235
  layout_engine = if opts.has_key?(:layout_engine)
154
236
  opts[:layout_engine]
155
237
  elsif engine_options.has_key?(:layout_engine)
@@ -158,7 +240,7 @@ module Middleman::CoreExtensions::Rendering
158
240
  engine
159
241
  end
160
242
 
161
- # Automatic
243
+ # Automatic mode
162
244
  if local_layout == :_auto_layout
163
245
  # Look for :layout of any extension
164
246
  # If found, use it. If not, continue
@@ -174,10 +256,15 @@ module Middleman::CoreExtensions::Rendering
174
256
  end
175
257
  end
176
258
 
177
- # @private
259
+ # Find a layout on-disk, optionally using a specific engine
260
+ # @param [String] name
261
+ # @param [Symbol] preferred_engine
262
+ # @return [String]
178
263
  def locate_layout(name, preferred_engine=nil)
264
+ # Whether we've found the layout
179
265
  layout_path = false
180
266
 
267
+ # If we prefer a specific engine
181
268
  if !preferred_engine.nil?
182
269
  # Check root
183
270
  layout_path, layout_engine = resolve_template(name, :preferred_engine => preferred_engine)
@@ -198,38 +285,52 @@ module Middleman::CoreExtensions::Rendering
198
285
  layout_path, layout_engine = resolve_template(File.join("layouts", name.to_s))
199
286
  end
200
287
 
288
+ # Return the path
201
289
  layout_path
202
290
  end
203
291
 
292
+ # Allow layouts to be wrapped in the contents of other layouts
293
+ # @param [String, Symbol] layout_name
294
+ # @return [void]
204
295
  def wrap_layout(layout_name, &block)
205
296
  content = capture(&block) if block_given?
206
297
  layout_path = locate_layout(layout_name, current_engine)
207
298
  concat render_individual_file(layout_path, @current_locs || {}, @current_opts || {}, self) { content }
208
299
  end
209
-
300
+
301
+ # The currently rendering engine
302
+ # @return [Symbol, nil]
210
303
  def current_engine
211
304
  @current_engine ||= nil
212
305
  end
213
306
 
214
- # @private
307
+ # Find a template on disk given a output path
308
+ # @param [String] request_path
309
+ # @param [Hash] options
310
+ # @return [Array<String, Symbol>, Boolean]
215
311
  def resolve_template(request_path, options={})
312
+ # Find the path by searching or using the cache
216
313
  request_path = request_path.to_s
217
314
  cache.fetch(:resolve_template, request_path, options) do
218
315
  relative_path = request_path.sub(%r{^/}, "")
219
316
  on_disk_path = File.expand_path(relative_path, self.source_dir)
220
317
 
318
+ # By default, any engine will do
221
319
  preferred_engine = "*"
222
320
 
321
+ # Unless we're specifically looking for a preferred engine
223
322
  if options.has_key?(:preferred_engine)
224
323
  extension_class = ::Tilt[options[:preferred_engine]]
225
324
  matched_exts = []
226
325
 
326
+ # Get a list of extensions for a preferred engine
227
327
  # TODO: Cache this
228
328
  ::Tilt.mappings.each do |ext, engines|
229
329
  next unless engines.include? extension_class
230
330
  matched_exts << ext
231
331
  end
232
332
 
333
+ # Change the glob to only look for the matched extensions
233
334
  if matched_exts.length > 0
234
335
  preferred_engine = "{" + matched_exts.join(",") + "}"
235
336
  else
@@ -237,11 +338,23 @@ module Middleman::CoreExtensions::Rendering
237
338
  end
238
339
  end
239
340
 
341
+ # Look for files that match
240
342
  path_with_ext = on_disk_path + "." + preferred_engine
343
+
241
344
  found_path = Dir[path_with_ext].find do |path|
242
345
  ::Tilt[path]
243
346
  end
244
347
 
348
+ if !found_path && options[:try_without_underscore] &&
349
+ path_no_underscore = path_with_ext.
350
+ sub(relative_path, relative_path.sub(/^_/, "").
351
+ sub(/\/_/, "/"))
352
+ found_path = Dir[path_no_underscore].find do |path|
353
+ ::Tilt[path]
354
+ end
355
+ end
356
+
357
+ # If we found one, return it and the found engine
245
358
  if found_path || (File.exists?(on_disk_path) && !File.directory?(on_disk_path))
246
359
  engine = found_path ? File.extname(found_path)[1..-1].to_sym : nil
247
360
  [ found_path || on_disk_path, engine ]
@@ -251,4 +364,4 @@ module Middleman::CoreExtensions::Rendering
251
364
  end
252
365
  end
253
366
  end
254
- end
367
+ end