middleman-core 3.0.0.alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. data/Rakefile +5 -0
  2. data/bin/middleman +52 -0
  3. data/features/3rd_party_cli.feature +5 -0
  4. data/features/asset_host.feature +7 -0
  5. data/features/auto_layout.feature +36 -0
  6. data/features/automatic_image_sizes.feature +16 -0
  7. data/features/builder.feature +50 -0
  8. data/features/chained_templates.feature +19 -0
  9. data/features/clean_build.feature +31 -0
  10. data/features/cli.feature +120 -0
  11. data/features/content_for.feature +6 -0
  12. data/features/current_page_request_path_backwards.feature +6 -0
  13. data/features/custom_layout_engines.feature +8 -0
  14. data/features/custom_layouts.feature +44 -0
  15. data/features/data.feature +22 -0
  16. data/features/directory_index.feature +36 -0
  17. data/features/dynamic_pages.feature +95 -0
  18. data/features/feature_params.feature +6 -0
  19. data/features/former_padrino_helpers.feature +10 -0
  20. data/features/front-matter.feature +35 -0
  21. data/features/helpers_auto_javascript_include_tag.feature +27 -0
  22. data/features/helpers_auto_stylesheet_link_tag.feature +27 -0
  23. data/features/helpers_external.feature +6 -0
  24. data/features/helpers_lorem.feature +6 -0
  25. data/features/helpers_page_classes.feature +17 -0
  26. data/features/instance_vars.feature +20 -0
  27. data/features/mount_rack.feature +8 -0
  28. data/features/nested_layouts.feature +24 -0
  29. data/features/partials.feature +41 -0
  30. data/features/preview_changes.feature +18 -0
  31. data/features/sitemap_traversal.features +73 -0
  32. data/features/static_server.feature +6 -0
  33. data/features/step_definitions/page_layout_steps.rb +15 -0
  34. data/features/support/env.rb +3 -0
  35. data/features/wildcard_page_helper.feature +19 -0
  36. data/fixtures/3rd-party-command/config.rb +10 -0
  37. data/fixtures/asset-host-app/config.rb +6 -0
  38. data/fixtures/asset-host-app/source/.htaccess +1 -0
  39. data/fixtures/asset-host-app/source/asset_host.html.erb +1 -0
  40. data/fixtures/asset-host-app/source/images/blank.gif +0 -0
  41. data/fixtures/auto-css-app/config.rb +11 -0
  42. data/fixtures/auto-css-app/source/auto-css.html.erb +1 -0
  43. data/fixtures/auto-css-app/source/auto-css/auto-css.html.erb +1 -0
  44. data/fixtures/auto-css-app/source/auto-css/index.html.erb +1 -0
  45. data/fixtures/auto-css-app/source/auto-css/sub/auto-css.html.erb +1 -0
  46. data/fixtures/auto-css-app/source/stylesheets/auto-css.css +3 -0
  47. data/fixtures/auto-css-app/source/stylesheets/auto-css/auto-css.css +3 -0
  48. data/fixtures/auto-css-app/source/stylesheets/auto-css/index.css +0 -0
  49. data/fixtures/auto-css-app/source/stylesheets/auto-css/sub/auto-css.css +3 -0
  50. data/fixtures/auto-js-app/config.rb +11 -0
  51. data/fixtures/auto-js-app/source/auto-js.html.erb +1 -0
  52. data/fixtures/auto-js-app/source/auto-js/auto-js.html.erb +1 -0
  53. data/fixtures/auto-js-app/source/auto-js/index.html.erb +1 -0
  54. data/fixtures/auto-js-app/source/auto-js/sub/auto-js.html.erb +1 -0
  55. data/fixtures/auto-js-app/source/javascripts/auto-js.js +1 -0
  56. data/fixtures/auto-js-app/source/javascripts/auto-js/auto-js.js +1 -0
  57. data/fixtures/auto-js-app/source/javascripts/auto-js/index.js +1 -0
  58. data/fixtures/auto-js-app/source/javascripts/auto-js/sub/auto-js.js +1 -0
  59. data/fixtures/automatic-image-size-app/config.rb +0 -0
  60. data/fixtures/automatic-image-size-app/source/auto-image-sizes.html.erb +1 -0
  61. data/fixtures/automatic-image-size-app/source/images/blank.gif +0 -0
  62. data/fixtures/basic-data-app/config.rb +4 -0
  63. data/fixtures/basic-data-app/data/test.yml +4 -0
  64. data/fixtures/basic-data-app/data/test2.json +4 -0
  65. data/fixtures/basic-data-app/source/data.html.erb +1 -0
  66. data/fixtures/basic-data-app/source/data3.html.erb +1 -0
  67. data/fixtures/build-with-errors-app/config.rb +1 -0
  68. data/fixtures/build-with-errors-app/source/index.html.erb +1 -0
  69. data/fixtures/chained-app/config.rb +0 -0
  70. data/fixtures/chained-app/data/article.yml +2 -0
  71. data/fixtures/chained-app/source/index.html.str.erb +8 -0
  72. data/fixtures/clean-app/config-complications.rb +11 -0
  73. data/fixtures/clean-app/config-empty.rb +0 -0
  74. data/fixtures/clean-app/config.rb +11 -0
  75. data/fixtures/clean-app/source/index.html.erb +1 -0
  76. data/fixtures/clean-app/source/layout.erb +9 -0
  77. data/fixtures/clean-app/source/layouts/custom.erb +8 -0
  78. data/fixtures/clean-app/source/real.html +1 -0
  79. data/fixtures/clean-app/source/real/index.html.erb +5 -0
  80. data/fixtures/clean-app/source/should_be_ignored.html +1 -0
  81. data/fixtures/clean-app/source/should_be_ignored2.html +1 -0
  82. data/fixtures/clean-app/source/should_be_ignored3.html +1 -0
  83. data/fixtures/clean-app/source/static.html +1 -0
  84. data/fixtures/clean-dir-app/config.rb +1 -0
  85. data/fixtures/clean-dir-app/source/about.html +1 -0
  86. data/fixtures/content-for-app/config.rb +3 -0
  87. data/fixtures/content-for-app/source/content_for_erb.html.erb +5 -0
  88. data/fixtures/content-for-app/source/layouts/content_for.erb +4 -0
  89. data/fixtures/current-page-app/config.rb +3 -0
  90. data/fixtures/current-page-app/source/request-path.html.erb +1 -0
  91. data/fixtures/custom-layout-app/config.rb +1 -0
  92. data/fixtures/custom-layout-app/source/index.html.erb +1 -0
  93. data/fixtures/custom-layout-app/source/layout.str +9 -0
  94. data/fixtures/custom-layout-app2/config.rb +0 -0
  95. data/fixtures/custom-layout-app2/source/custom-layout-dir/index.html.erb +1 -0
  96. data/fixtures/custom-layout-app2/source/custom-layout.html.erb +1 -0
  97. data/fixtures/custom-layout-app2/source/layouts/custom.erb +8 -0
  98. data/fixtures/data-app/config.rb +3 -0
  99. data/fixtures/data-app/data/pages.yml +6 -0
  100. data/fixtures/data-app/source/index.html.erb +1 -0
  101. data/fixtures/data-app/source/layout.erb +5 -0
  102. data/fixtures/different-engine-layout/config.rb +0 -0
  103. data/fixtures/different-engine-layout/source/index.html.str +1 -0
  104. data/fixtures/different-engine-layout/source/layout.erb +9 -0
  105. data/fixtures/different-engine-partial/config.rb +0 -0
  106. data/fixtures/different-engine-partial/source/index.html.erb +1 -0
  107. data/fixtures/different-engine-partial/source/layouts/layout.erb +7 -0
  108. data/fixtures/different-engine-partial/source/shared/_footer.str +1 -0
  109. data/fixtures/different-engine-partial/source/shared/_header.erb +1 -0
  110. data/fixtures/dynamic-pages-app/config.rb +29 -0
  111. data/fixtures/dynamic-pages-app/source/real.html +1 -0
  112. data/fixtures/dynamic-pages-app/source/real/index.html.erb +5 -0
  113. data/fixtures/dynamic-pages-app/source/should_be_ignored.html +1 -0
  114. data/fixtures/dynamic-pages-app/source/should_be_ignored2.html +1 -0
  115. data/fixtures/dynamic-pages-app/source/should_be_ignored3.html +1 -0
  116. data/fixtures/dynamic-pages-app/source/should_be_ignored4.html +1 -0
  117. data/fixtures/dynamic-pages-app/source/should_be_ignored5.html +1 -0
  118. data/fixtures/dynamic-pages-app/source/should_be_ignored6.html +1 -0
  119. data/fixtures/dynamic-pages-app/source/should_be_ignored7.html +1 -0
  120. data/fixtures/dynamic-pages-app/source/should_be_ignored8.html +1 -0
  121. data/fixtures/empty-app/not-config.rb +0 -0
  122. data/fixtures/engine-matching-layout/config.rb +0 -0
  123. data/fixtures/engine-matching-layout/source/index.html.erb +1 -0
  124. data/fixtures/engine-matching-layout/source/layout.erb +9 -0
  125. data/fixtures/external-helpers/config.rb +4 -0
  126. data/fixtures/external-helpers/lib/hello_helper.rb +5 -0
  127. data/fixtures/external-helpers/source/index.html.erb +1 -0
  128. data/fixtures/feature-params-app/config.rb +12 -0
  129. data/fixtures/feature-params-app/source/index.html.erb +3 -0
  130. data/fixtures/frontmatter-app/config.rb +0 -0
  131. data/fixtures/frontmatter-app/source/front-matter-2.php.erb +7 -0
  132. data/fixtures/frontmatter-app/source/front-matter-change.html.erb +5 -0
  133. data/fixtures/frontmatter-app/source/front-matter.html.erb +6 -0
  134. data/fixtures/generator-test/config.rb +80 -0
  135. data/fixtures/generator-test/source/index.html.erb +10 -0
  136. data/fixtures/glob-app/config.rb +1 -0
  137. data/fixtures/glob-app/source/index.html.erb +4 -0
  138. data/fixtures/glob-app/source/stylesheets/site.css.str +3 -0
  139. data/fixtures/ignore-app/config.rb +2 -0
  140. data/fixtures/ignore-app/source/articles/template.html.erb +1 -0
  141. data/fixtures/ignore-app/source/template.html.erb +1 -0
  142. data/fixtures/indexable-app/config.rb +2 -0
  143. data/fixtures/indexable-app/source/.htaccess +1 -0
  144. data/fixtures/indexable-app/source/a_folder/needs_index.html +1 -0
  145. data/fixtures/indexable-app/source/leave_me_alone.html +1 -0
  146. data/fixtures/indexable-app/source/needs_index.html +1 -0
  147. data/fixtures/indexable-app/source/regular/index.html +1 -0
  148. data/fixtures/instance-vars-app/config.rb +0 -0
  149. data/fixtures/instance-vars-app/source/_vartial.erb +5 -0
  150. data/fixtures/instance-vars-app/source/instance-var-set.html.erb +2 -0
  151. data/fixtures/instance-vars-app/source/layout.erb +3 -0
  152. data/fixtures/instance-vars-app/source/no-instance-var.html.erb +1 -0
  153. data/fixtures/large-build-app/config.rb +3 -0
  154. data/fixtures/large-build-app/source/.htaccess +1 -0
  155. data/fixtures/large-build-app/source/_partial.erb +1 -0
  156. data/fixtures/large-build-app/source/images/Child folder/regular_file(example).txt +1 -0
  157. data/fixtures/large-build-app/source/images/Read me (example).txt +1 -0
  158. data/fixtures/large-build-app/source/images/blank.gif +0 -0
  159. data/fixtures/large-build-app/source/index.html.erb +1 -0
  160. data/fixtures/large-build-app/source/layout.erb +9 -0
  161. data/fixtures/large-build-app/source/layouts/content_for.erb +4 -0
  162. data/fixtures/large-build-app/source/layouts/custom.erb +8 -0
  163. data/fixtures/large-build-app/source/other_layout.erb +1 -0
  164. data/fixtures/large-build-app/source/services/index.html.erb +1 -0
  165. data/fixtures/large-build-app/source/spaces in file.html.erb +1 -0
  166. data/fixtures/large-build-app/source/static.html +1 -0
  167. data/fixtures/large-build-app/source/stylesheets/static.css +2 -0
  168. data/fixtures/lorem-app/config.rb +0 -0
  169. data/fixtures/lorem-app/source/lorem.html.erb +13 -0
  170. data/fixtures/manual-layout-missing/config.rb +1 -0
  171. data/fixtures/manual-layout-missing/source/index.html.erb +1 -0
  172. data/fixtures/manual-layout-override/config.rb +3 -0
  173. data/fixtures/manual-layout-override/source/index.html.erb +1 -0
  174. data/fixtures/manual-layout-override/source/layouts/another.erb +9 -0
  175. data/fixtures/manual-layout-override/source/layouts/custom.erb +9 -0
  176. data/fixtures/manual-layout/config.rb +1 -0
  177. data/fixtures/manual-layout/source/index.html.erb +1 -0
  178. data/fixtures/manual-layout/source/layouts/custom.erb +9 -0
  179. data/fixtures/multiple-layouts/config.rb +0 -0
  180. data/fixtures/multiple-layouts/source/index.html.erb +1 -0
  181. data/fixtures/multiple-layouts/source/layout.erb +9 -0
  182. data/fixtures/multiple-layouts/source/layout.str +9 -0
  183. data/fixtures/nested-layout-app/config.rb +1 -0
  184. data/fixtures/nested-layout-app/source/data-one.html.erb +5 -0
  185. data/fixtures/nested-layout-app/source/data-two.html.erb +5 -0
  186. data/fixtures/nested-layout-app/source/index.html.erb +1 -0
  187. data/fixtures/nested-layout-app/source/layouts/inner.erb +4 -0
  188. data/fixtures/nested-layout-app/source/layouts/master.erb +3 -0
  189. data/fixtures/nested-layout-app/source/layouts/outer.erb +4 -0
  190. data/fixtures/no-layout/config.rb +0 -0
  191. data/fixtures/no-layout/source/index.html.erb +1 -0
  192. data/fixtures/padrino-helpers-app/config.rb +0 -0
  193. data/fixtures/padrino-helpers-app/source/former_padrino_test.html.erb +4 -0
  194. data/fixtures/page-classes-app/config.rb +4 -0
  195. data/fixtures/page-classes-app/source/page-classes.html.erb +1 -0
  196. data/fixtures/page-classes-app/source/sub1/page-classes.html.erb +1 -0
  197. data/fixtures/page-classes-app/source/sub1/sub2/page-classes.html.erb +1 -0
  198. data/fixtures/partials-app/config.rb +0 -0
  199. data/fixtures/partials-app/source/_locals.erb +1 -0
  200. data/fixtures/partials-app/source/_main.erb +1 -0
  201. data/fixtures/partials-app/source/_main.str +1 -0
  202. data/fixtures/partials-app/source/index.html.erb +3 -0
  203. data/fixtures/partials-app/source/locals.html.erb +1 -0
  204. data/fixtures/partials-app/source/second.html.str +3 -0
  205. data/fixtures/partials-app/source/shared/_footer.erb +1 -0
  206. data/fixtures/partials-app/source/shared/_header.erb +1 -0
  207. data/fixtures/partials-app/source/sub/_local.erb +1 -0
  208. data/fixtures/partials-app/source/sub/index.html.erb +3 -0
  209. data/fixtures/plain-app/index.html +1 -0
  210. data/fixtures/preview-app/config.rb +0 -0
  211. data/fixtures/preview-app/source/content.html.erb +1 -0
  212. data/fixtures/preview-app/source/layout.erb +1 -0
  213. data/fixtures/sinatra-app/config.rb +11 -0
  214. data/fixtures/sinatra-app/source/index.html.erb +5 -0
  215. data/fixtures/traversal-app/config.rb +7 -0
  216. data/fixtures/traversal-app/source/directory-indexed.html.erb +0 -0
  217. data/fixtures/traversal-app/source/directory-indexed/sibling.html.erb +3 -0
  218. data/fixtures/traversal-app/source/directory-indexed/sibling2.html.erb +3 -0
  219. data/fixtures/traversal-app/source/directory-indexed/sub2/index.html.erb +0 -0
  220. data/fixtures/traversal-app/source/directory-indexed/sub3/deep.html.erb +0 -0
  221. data/fixtures/traversal-app/source/index.html.erb +0 -0
  222. data/fixtures/traversal-app/source/layout.erb +19 -0
  223. data/fixtures/traversal-app/source/proxied.html.erb +0 -0
  224. data/fixtures/traversal-app/source/root.html.erb +0 -0
  225. data/fixtures/traversal-app/source/sub/index.html.erb +0 -0
  226. data/fixtures/traversal-app/source/sub/sibling.html.erb +0 -0
  227. data/fixtures/traversal-app/source/sub/sibling2.html.erb +0 -0
  228. data/fixtures/traversal-app/source/sub/sub2/index.html.erb +0 -0
  229. data/fixtures/traversal-app/source/sub/sub3/deep.html.erb +0 -0
  230. data/fixtures/wildcard-app/config.rb +1 -0
  231. data/fixtures/wildcard-app/source/admin/index.html.erb +1 -0
  232. data/fixtures/wildcard-app/source/admin/page.html.erb +1 -0
  233. data/fixtures/wildcard-app/source/index.html.erb +1 -0
  234. data/fixtures/wildcard-app/source/layouts/admin.erb +2 -0
  235. data/fixtures/wildcard-app/source/layouts/layout.erb +2 -0
  236. data/fixtures/wildcard-directory-index-app/config.rb +2 -0
  237. data/fixtures/wildcard-directory-index-app/source/admin/index.html.erb +1 -0
  238. data/fixtures/wildcard-directory-index-app/source/admin/page.html.erb +1 -0
  239. data/fixtures/wildcard-directory-index-app/source/index.html.erb +1 -0
  240. data/fixtures/wildcard-directory-index-app/source/layouts/admin.erb +2 -0
  241. data/fixtures/wildcard-directory-index-app/source/layouts/layout.erb +2 -0
  242. data/lib/middleman-core.rb +259 -0
  243. data/lib/middleman-core/base.rb +494 -0
  244. data/lib/middleman-core/cache.rb +57 -0
  245. data/lib/middleman-core/cli.rb +57 -0
  246. data/lib/middleman-core/cli/build.rb +229 -0
  247. data/lib/middleman-core/cli/init.rb +52 -0
  248. data/lib/middleman-core/cli/server.rb +52 -0
  249. data/lib/middleman-core/core_extensions/assets.rb +30 -0
  250. data/lib/middleman-core/core_extensions/builder.rb +49 -0
  251. data/lib/middleman-core/core_extensions/data.rb +193 -0
  252. data/lib/middleman-core/core_extensions/default_helpers.rb +119 -0
  253. data/lib/middleman-core/core_extensions/extensions.rb +148 -0
  254. data/lib/middleman-core/core_extensions/file_watcher.rb +83 -0
  255. data/lib/middleman-core/core_extensions/front_matter.rb +145 -0
  256. data/lib/middleman-core/core_extensions/rendering.rb +247 -0
  257. data/lib/middleman-core/core_extensions/routing.rb +69 -0
  258. data/lib/middleman-core/core_extensions/show_exceptions.rb +16 -0
  259. data/lib/middleman-core/core_extensions/sitemap.rb +72 -0
  260. data/lib/middleman-core/extensions/asset_host.rb +29 -0
  261. data/lib/middleman-core/extensions/automatic_image_sizes.rb +38 -0
  262. data/lib/middleman-core/extensions/automatic_image_sizes/fastimage.rb +287 -0
  263. data/lib/middleman-core/extensions/directory_indexes.rb +62 -0
  264. data/lib/middleman-core/extensions/lorem.rb +140 -0
  265. data/lib/middleman-core/guard.rb +148 -0
  266. data/lib/middleman-core/renderers/erb.rb +19 -0
  267. data/lib/middleman-core/sitemap/page.rb +186 -0
  268. data/lib/middleman-core/sitemap/store.rb +139 -0
  269. data/lib/middleman-core/sitemap/template.rb +82 -0
  270. data/lib/middleman-core/step_definitions.rb +12 -0
  271. data/lib/middleman-core/step_definitions/builder_steps.rb +42 -0
  272. data/lib/middleman-core/step_definitions/middleman_steps.rb +15 -0
  273. data/lib/middleman-core/step_definitions/server_steps.rb +73 -0
  274. data/lib/middleman-core/templates.rb +82 -0
  275. data/lib/middleman-core/templates/default.rb +29 -0
  276. data/lib/middleman-core/templates/default/source/images/background.png +0 -0
  277. data/lib/middleman-core/templates/default/source/images/middleman.png +0 -0
  278. data/lib/middleman-core/templates/default/source/index.html.erb +10 -0
  279. data/lib/middleman-core/templates/default/source/javascripts/all.js +1 -0
  280. data/lib/middleman-core/templates/default/source/layouts/layout.erb +19 -0
  281. data/lib/middleman-core/templates/default/source/stylesheets/_animate.scss +23 -0
  282. data/lib/middleman-core/templates/default/source/stylesheets/_normalize.scss +431 -0
  283. data/lib/middleman-core/templates/default/source/stylesheets/all.css.scss +40 -0
  284. data/lib/middleman-core/templates/html5.rb +25 -0
  285. data/lib/middleman-core/templates/html5/source/404.html +38 -0
  286. data/lib/middleman-core/templates/html5/source/README.md +388 -0
  287. data/lib/middleman-core/templates/html5/source/apple-touch-icon-114x114-precomposed.png +0 -0
  288. data/lib/middleman-core/templates/html5/source/apple-touch-icon-57x57-precomposed.png +0 -0
  289. data/lib/middleman-core/templates/html5/source/apple-touch-icon-72x72-precomposed.png +0 -0
  290. data/lib/middleman-core/templates/html5/source/apple-touch-icon-precomposed.png +0 -0
  291. data/lib/middleman-core/templates/html5/source/apple-touch-icon.png +0 -0
  292. data/lib/middleman-core/templates/html5/source/crossdomain.xml +25 -0
  293. data/lib/middleman-core/templates/html5/source/css/style.css +293 -0
  294. data/lib/middleman-core/templates/html5/source/favicon.ico +0 -0
  295. data/lib/middleman-core/templates/html5/source/humans.txt +43 -0
  296. data/lib/middleman-core/templates/html5/source/img/.gitignore +2 -0
  297. data/lib/middleman-core/templates/html5/source/index.html +79 -0
  298. data/lib/middleman-core/templates/html5/source/js/libs/jquery-1.6.2.js +8981 -0
  299. data/lib/middleman-core/templates/html5/source/js/libs/jquery-1.6.2.min.js +18 -0
  300. data/lib/middleman-core/templates/html5/source/js/libs/modernizr-2.0.6.min.js +4 -0
  301. data/lib/middleman-core/templates/html5/source/js/mylibs/.gitignore +2 -0
  302. data/lib/middleman-core/templates/html5/source/js/plugins.js +20 -0
  303. data/lib/middleman-core/templates/html5/source/js/script.js +8 -0
  304. data/lib/middleman-core/templates/html5/source/robots.txt +5 -0
  305. data/lib/middleman-core/templates/html5/source/test/index.html +31 -0
  306. data/lib/middleman-core/templates/html5/source/test/qunit/qunit.css +148 -0
  307. data/lib/middleman-core/templates/html5/source/test/qunit/qunit.js +1265 -0
  308. data/lib/middleman-core/templates/html5/source/test/tests.js +24 -0
  309. data/lib/middleman-core/templates/local.rb +21 -0
  310. data/lib/middleman-core/templates/mobile.rb +25 -0
  311. data/lib/middleman-core/templates/mobile/source/404.html +37 -0
  312. data/lib/middleman-core/templates/mobile/source/README.markdown +21 -0
  313. data/lib/middleman-core/templates/mobile/source/crossdomain.xml +25 -0
  314. data/lib/middleman-core/templates/mobile/source/css/style.css +315 -0
  315. data/lib/middleman-core/templates/mobile/source/humans.txt +43 -0
  316. data/lib/middleman-core/templates/mobile/source/img/h/apple-touch-icon.png +0 -0
  317. data/lib/middleman-core/templates/mobile/source/img/h/splash.png +0 -0
  318. data/lib/middleman-core/templates/mobile/source/img/l/apple-touch-icon-precomposed.png +0 -0
  319. data/lib/middleman-core/templates/mobile/source/img/l/apple-touch-icon.png +0 -0
  320. data/lib/middleman-core/templates/mobile/source/img/l/splash.png +0 -0
  321. data/lib/middleman-core/templates/mobile/source/img/m/apple-touch-icon.png +0 -0
  322. data/lib/middleman-core/templates/mobile/source/index.html +92 -0
  323. data/lib/middleman-core/templates/mobile/source/js/libs/modernizr-custom.js +14 -0
  324. data/lib/middleman-core/templates/mobile/source/js/libs/respond.min.js +7 -0
  325. data/lib/middleman-core/templates/mobile/source/js/mylibs/helper.js +171 -0
  326. data/lib/middleman-core/templates/mobile/source/js/plugins.js +20 -0
  327. data/lib/middleman-core/templates/mobile/source/js/script.js +0 -0
  328. data/lib/middleman-core/templates/mobile/source/robots.txt +4 -0
  329. data/lib/middleman-core/templates/mobile/source/sitemap.xml +9 -0
  330. data/lib/middleman-core/templates/mobile/source/test/index.html +31 -0
  331. data/lib/middleman-core/templates/mobile/source/test/qunit/qunit.css +148 -0
  332. data/lib/middleman-core/templates/mobile/source/test/qunit/qunit.js +1265 -0
  333. data/lib/middleman-core/templates/mobile/source/test/tests.js +21 -0
  334. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/Readme.PDF +0 -0
  335. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/aspx/aspx1.snippet +31 -0
  336. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/aspx/aspx2.snippet +2 -0
  337. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/aspx/ga.aspx +195 -0
  338. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/aspx/sample.aspx +44 -0
  339. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/jsp/ga.jsp +225 -0
  340. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/jsp/jsp1.snippet +35 -0
  341. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/jsp/jsp2.snippet +2 -0
  342. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/jsp/sample.jsp +51 -0
  343. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/php/ga.php +176 -0
  344. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/php/php1.snippet +30 -0
  345. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/php/php2.snippet +4 -0
  346. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/php/sample.php +44 -0
  347. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/pl/ga.pl +195 -0
  348. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/pl/perl1.snippet +27 -0
  349. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/pl/perl2.snippet +1 -0
  350. data/lib/middleman-core/templates/mobile/source/tools/googleanalyticsformobile/pl/sample.pl +38 -0
  351. data/lib/middleman-core/templates/mobile/source/tools/mobile-bookmark-bubble/COPYING +202 -0
  352. data/lib/middleman-core/templates/mobile/source/tools/mobile-bookmark-bubble/bookmark_bubble.js +559 -0
  353. data/lib/middleman-core/templates/mobile/source/tools/mobile-bookmark-bubble/example/example.html +43 -0
  354. data/lib/middleman-core/templates/mobile/source/tools/mobile-bookmark-bubble/example/example.js +57 -0
  355. data/lib/middleman-core/templates/mobile/source/tools/mobile-bookmark-bubble/images/arrow.png +0 -0
  356. data/lib/middleman-core/templates/mobile/source/tools/mobile-bookmark-bubble/images/close.png +0 -0
  357. data/lib/middleman-core/templates/mobile/source/tools/mobile-bookmark-bubble/images/generate_base64_images +33 -0
  358. data/lib/middleman-core/templates/mobile/source/tools/mobile-bookmark-bubble/images/icon_calendar.png +0 -0
  359. data/lib/middleman-core/templates/mobile/source/tools/wspl/README +27 -0
  360. data/lib/middleman-core/templates/mobile/source/tools/wspl/databasefactory.js +45 -0
  361. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbworker.js +324 -0
  362. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbworker_test.html +393 -0
  363. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbworkerstarter.js +32 -0
  364. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbwrapper_gears.js +595 -0
  365. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbwrapper_gears_test.html +404 -0
  366. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbwrapper_html5.js +203 -0
  367. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbwrapper_html5_test.html +468 -0
  368. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbwrapperapi.js +202 -0
  369. data/lib/middleman-core/templates/mobile/source/tools/wspl/dbwrapperapi_test.html +51 -0
  370. data/lib/middleman-core/templates/mobile/source/tools/wspl/gears_resultset.js +71 -0
  371. data/lib/middleman-core/templates/mobile/source/tools/wspl/gears_resultset_test.html +86 -0
  372. data/lib/middleman-core/templates/mobile/source/tools/wspl/gears_transaction.js +196 -0
  373. data/lib/middleman-core/templates/mobile/source/tools/wspl/gears_transaction_test.html +221 -0
  374. data/lib/middleman-core/templates/mobile/source/tools/wspl/gearsutils.js +94 -0
  375. data/lib/middleman-core/templates/mobile/source/tools/wspl/gearsutils_test.html +84 -0
  376. data/lib/middleman-core/templates/mobile/source/tools/wspl/global_functions.js +72 -0
  377. data/lib/middleman-core/templates/mobile/source/tools/wspl/simplenotes/index.html +347 -0
  378. data/lib/middleman-core/templates/mobile/source/tools/wspl/simplenotes/simplenotes.js +503 -0
  379. data/lib/middleman-core/templates/mobile/source/tools/wspl/simplenotes/styles.css +66 -0
  380. data/lib/middleman-core/templates/mobile/source/tools/wspl/simplenotes/template.js +75 -0
  381. data/lib/middleman-core/templates/shared/Gemfile.tt +3 -0
  382. data/lib/middleman-core/templates/shared/config.ru +4 -0
  383. data/lib/middleman-core/templates/shared/config.tt +92 -0
  384. data/lib/middleman-core/vendor/hooks-0.2.0/CHANGES.textile +9 -0
  385. data/lib/middleman-core/vendor/hooks-0.2.0/Gemfile +3 -0
  386. data/lib/middleman-core/vendor/hooks-0.2.0/README.rdoc +107 -0
  387. data/lib/middleman-core/vendor/hooks-0.2.0/Rakefile +12 -0
  388. data/lib/middleman-core/vendor/hooks-0.2.0/hooks.gemspec +22 -0
  389. data/lib/middleman-core/vendor/hooks-0.2.0/lib/hooks.rb +109 -0
  390. data/lib/middleman-core/vendor/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +33 -0
  391. data/lib/middleman-core/vendor/hooks-0.2.0/test/hooks_test.rb +141 -0
  392. data/lib/middleman-core/vendor/hooks-0.2.0/test/inheritable_attribute_test.rb +55 -0
  393. data/lib/middleman-core/vendor/hooks-0.2.0/test/test_helper.rb +10 -0
  394. data/lib/middleman-core/vendor/padrino-core-0.10.5/.document +5 -0
  395. data/lib/middleman-core/vendor/padrino-core-0.10.5/.gitignore +22 -0
  396. data/lib/middleman-core/vendor/padrino-core-0.10.5/.yardopts +1 -0
  397. data/lib/middleman-core/vendor/padrino-core-0.10.5/LICENSE.txt +20 -0
  398. data/lib/middleman-core/vendor/padrino-core-0.10.5/README.rdoc +294 -0
  399. data/lib/middleman-core/vendor/padrino-core-0.10.5/Rakefile +5 -0
  400. data/lib/middleman-core/vendor/padrino-core-0.10.5/bin/padrino +9 -0
  401. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core.rb +167 -0
  402. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/application.rb +270 -0
  403. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/application/rendering.rb +292 -0
  404. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/application/routing.rb +934 -0
  405. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/application/showexceptions.rb +20 -0
  406. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/caller.rb +53 -0
  407. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/cli/adapter.rb +24 -0
  408. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/cli/base.rb +151 -0
  409. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/cli/console.rb +20 -0
  410. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/cli/rake.rb +24 -0
  411. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/cli/rake_tasks.rb +59 -0
  412. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/command.rb +38 -0
  413. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/images/404.png +0 -0
  414. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/images/500.png +0 -0
  415. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/loader.rb +210 -0
  416. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/cs.yml +34 -0
  417. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/da.yml +34 -0
  418. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/de.yml +34 -0
  419. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/en.yml +34 -0
  420. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/es.yml +34 -0
  421. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/fr.yml +34 -0
  422. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/hu.yml +34 -0
  423. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/it.yml +40 -0
  424. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/ja.yml +34 -0
  425. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/lv.yml +34 -0
  426. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/nl.yml +34 -0
  427. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/no.yml +35 -0
  428. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/pl.yml +34 -0
  429. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/pt_br.yml +40 -0
  430. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/ru.yml +35 -0
  431. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/tr.yml +34 -0
  432. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/uk.yml +34 -0
  433. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/zh_cn.yml +34 -0
  434. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/locale/zh_tw.yml +34 -0
  435. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/logger.rb +345 -0
  436. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/mounter.rb +224 -0
  437. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/reloader.rb +254 -0
  438. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/router.rb +98 -0
  439. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/server.rb +79 -0
  440. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/support_lite.rb +200 -0
  441. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/tasks.rb +21 -0
  442. data/lib/middleman-core/vendor/padrino-core-0.10.5/lib/padrino-core/version.rb +20 -0
  443. data/lib/middleman-core/vendor/padrino-core-0.10.5/padrino-core.gemspec +38 -0
  444. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/apps/.components +6 -0
  445. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/apps/.gitignore +7 -0
  446. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/apps/complex.rb +32 -0
  447. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/apps/simple.rb +33 -0
  448. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/dependencies/a.rb +9 -0
  449. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/dependencies/b.rb +4 -0
  450. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/dependencies/c.rb +1 -0
  451. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/e.rb +13 -0
  452. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/f.rb +2 -0
  453. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/g.rb +2 -0
  454. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/fixtures/dependencies/d.rb +4 -0
  455. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/helper.rb +81 -0
  456. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/mini_shoulda.rb +45 -0
  457. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_application.rb +108 -0
  458. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_core.rb +79 -0
  459. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_dependencies.rb +44 -0
  460. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_filters.rb +278 -0
  461. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_locale.rb +21 -0
  462. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_logger.rb +100 -0
  463. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_mounter.rb +177 -0
  464. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_reloader_complex.rb +75 -0
  465. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_reloader_simple.rb +98 -0
  466. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_rendering.rb +461 -0
  467. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_restful_routing.rb +33 -0
  468. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_router.rb +146 -0
  469. data/lib/middleman-core/vendor/padrino-core-0.10.5/test/test_routing.rb +1673 -0
  470. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/.document +5 -0
  471. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/.gitignore +21 -0
  472. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/.yardopts +1 -0
  473. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/LICENSE.txt +20 -0
  474. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/README.rdoc +239 -0
  475. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/Rakefile +5 -0
  476. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers.rb +58 -0
  477. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/asset_tag_helpers.rb +420 -0
  478. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_builder/abstract_form_builder.rb +220 -0
  479. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_builder/standard_form_builder.rb +43 -0
  480. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_helpers.rb +602 -0
  481. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/format_helpers.rb +381 -0
  482. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/cs.yml +103 -0
  483. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/da.yml +91 -0
  484. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/de.yml +81 -0
  485. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/en.yml +103 -0
  486. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/es.yml +103 -0
  487. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/fr.yml +80 -0
  488. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/hu.yml +103 -0
  489. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/it.yml +89 -0
  490. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/ja.yml +103 -0
  491. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/lv.yml +103 -0
  492. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/nl.yml +82 -0
  493. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/no.yml +91 -0
  494. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/pl.yml +95 -0
  495. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/pt_br.yml +103 -0
  496. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/ru.yml +103 -0
  497. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/tr.yml +103 -0
  498. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/uk.yml +103 -0
  499. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/zh_cn.yml +104 -0
  500. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/zh_tw.yml +103 -0
  501. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/number_helpers.rb +288 -0
  502. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers.rb +175 -0
  503. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/abstract_handler.rb +98 -0
  504. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/erb_handler.rb +79 -0
  505. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/haml_handler.rb +63 -0
  506. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/slim_handler.rb +81 -0
  507. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/render_helpers.rb +60 -0
  508. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/tag_helpers.rb +103 -0
  509. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/translation_helpers.rb +38 -0
  510. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/padrino-helpers.gemspec +27 -0
  511. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/app.rb +73 -0
  512. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.erb +14 -0
  513. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.haml +12 -0
  514. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.slim +13 -0
  515. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.erb +14 -0
  516. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.haml +12 -0
  517. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.slim +12 -0
  518. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.erb +11 -0
  519. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.haml +9 -0
  520. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.slim +9 -0
  521. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.erb +5 -0
  522. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.haml +5 -0
  523. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.slim +5 -0
  524. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.erb +20 -0
  525. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.haml +15 -0
  526. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.slim +15 -0
  527. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.erb +56 -0
  528. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.haml +47 -0
  529. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.slim +47 -0
  530. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.erb +56 -0
  531. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.haml +45 -0
  532. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.slim +45 -0
  533. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.erb +5 -0
  534. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.haml +4 -0
  535. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.slim +4 -0
  536. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.erb +3 -0
  537. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.haml +3 -0
  538. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.slim +3 -0
  539. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.erb +3 -0
  540. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.haml +3 -0
  541. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.slim +3 -0
  542. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_erb.erb +1 -0
  543. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_haml.haml +1 -0
  544. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_slim.slim +1 -0
  545. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.erb +1 -0
  546. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.haml +1 -0
  547. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.slim +1 -0
  548. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/app.rb +50 -0
  549. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engine.haml +5 -0
  550. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_erb.erb +1 -0
  551. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_haml.haml +1 -0
  552. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_slim.slim +1 -0
  553. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/erb/test.erb +1 -0
  554. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/explicit_engine.haml +5 -0
  555. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/haml/test.haml +1 -0
  556. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/_user.haml +7 -0
  557. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/haml_template.haml +1 -0
  558. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/some_template.haml +2 -0
  559. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/helper.rb +66 -0
  560. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_asset_tag_helpers.rb +320 -0
  561. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_form_builder.rb +996 -0
  562. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_form_helpers.rb +645 -0
  563. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_format_helpers.rb +227 -0
  564. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_locale.rb +20 -0
  565. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_number_helpers.rb +136 -0
  566. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_output_helpers.rb +153 -0
  567. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_render_helpers.rb +76 -0
  568. data/lib/middleman-core/vendor/padrino-helpers-0.10.5/test/test_tag_helpers.rb +105 -0
  569. data/lib/middleman-core/version.rb +13 -0
  570. data/middleman-core.gemspec +41 -0
  571. metadata +974 -0
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ README.rdoc
5
+ LICENSE.txt
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
@@ -0,0 +1 @@
1
+ --title 'Padrino Helpers Documentation' --protected
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Padrino
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,239 @@
1
+ = Application Extensions and Helpers (padrino-helpers)
2
+
3
+ === Overview
4
+
5
+ This component provides a great deal of view helpers related to html markup generation.
6
+ There are helpers for generating tags, forms, links, images, and more. Most of the basic
7
+ methods should be very familiar to anyone who has used rails view helpers.
8
+
9
+ === Output Helpers
10
+
11
+ Output helpers are a collection of important methods for managing, capturing and displaying output
12
+ in various ways and is used frequently to support higher-level helper functions. There are
13
+ three output helpers worth mentioning: <tt>content_for</tt>, <tt>capture_html</tt>, and <tt>concat_content</tt>
14
+
15
+ The content_for functionality supports capturing content and then rendering this into a different place
16
+ such as within a layout. One such popular example is including assets onto the layout from a template:
17
+
18
+ # app/views/site/index.erb
19
+ ...
20
+ <% content_for :assets do %>
21
+ <%= stylesheet_link_tag 'index', 'custom' %>
22
+ <% end %>
23
+ ...
24
+
25
+ Added to a template, this will capture the includes from the block and allow them to be yielded into the layout:
26
+
27
+ # app/views/layout.erb
28
+ ...
29
+ <head>
30
+ <title>Example</title>
31
+ <%= stylesheet_link_tag 'style' %>
32
+ <%= yield_content :assets %>
33
+ </head>
34
+ ...
35
+
36
+ This will automatically insert the contents of the block (in this case a stylesheet include) into the
37
+ location the content is yielded within the layout. You can also check if content exists for a block using
38
+ <tt>content_for?(true)</tt> which returns true if content exists.
39
+
40
+ The capture_html and the concat_content methods allow content to be manipulated and stored for use in building
41
+ additional helpers accepting blocks or displaying information in a template. One example is the use of
42
+ these in constructing a simplified 'form_tag' helper which accepts a block.
43
+
44
+ # form_tag '/register' do ... end
45
+ def form_tag(url, options={}, &block)
46
+ # ... truncated ...
47
+ inner_form_html = capture_html(&block)
48
+ concat_content '<form>' + inner_form_html + '</form>'
49
+ end
50
+
51
+ This will capture the template body passed into the form_tag block and then append the content
52
+ to the template through the use of <tt>concat_content</tt>. Note have been built to work for both haml and erb
53
+ templates using the same syntax.
54
+
55
+ For more information on using output helpers, check out the guide for
56
+ {Padrino Helpers}[http://www.padrinorb.com/guides/application-helpers].
57
+
58
+ === Tag Helpers
59
+
60
+ Tag helpers are the basic building blocks used to construct html 'tags' within a view template. There
61
+ are three major functions for this category: <tt>tag</tt>, <tt>content_tag</tt> and <tt>input_tag</tt>.
62
+
63
+ The tag and content_tag are for building arbitrary html tags with a name and specified options. If
64
+ the tag contains 'content' within then <tt>content_tag</tt> is used. For example:
65
+
66
+ tag(:br, :style => 'clear:both') => <br style="clear:both" />
67
+ content_tag(:p, "demo", :class => 'light') => <p class="light">demo</p>
68
+
69
+ The input_tag is used to build tags that are related to accepting input from the user:
70
+
71
+ input_tag :text, :class => "demo" => <input type='text' class='demo' />
72
+ input_tag :password, :value => "secret", :class => "demo"
73
+
74
+ Note that all of these accept html options and result in returning a string containing html tags.
75
+
76
+ For more information on using tag helpers, check out the guide for
77
+ {Padrino Helpers}[http://www.padrinorb.com/guides/application-helpers].
78
+
79
+ === Asset Helpers
80
+
81
+ Asset helpers are intended to help insert useful html onto a view template such as 'flash' notices,
82
+ hyperlinks, mail_to links, images, stylesheets and javascript. An example of their uses would be on a
83
+ simple view template:
84
+
85
+ # app/views/example.haml
86
+ ...
87
+ %head
88
+ = stylesheet_link_tag 'layout'
89
+ = javascript_include_tag 'application'
90
+ %body
91
+ ...
92
+ = flash_tag :notice
93
+ %p= link_to 'Blog', '/blog', :class => 'example'
94
+ %p Mail me at #{mail_to 'fake@faker.com', "Fake Email Link", :cc => "test@demo.com"}
95
+ %p= image_tag 'padrino.png', :width => '35', :class => 'logo'
96
+
97
+ For more information on using asset helpers, check out the guide for
98
+ {Padrino Helpers}[http://www.padrinorb.com/guides/application-helpers].
99
+
100
+ === Form Helpers
101
+
102
+ Form helpers are the 'standard' form tag helpers you would come to expect when building forms. A simple
103
+ example of constructing a non-object form would be:
104
+
105
+ - form_tag '/destroy', :class => 'destroy-form', :method => 'delete' do
106
+ = flash_tag(:notice)
107
+ - field_set_tag do
108
+ %p
109
+ = label_tag :username, :class => 'first'
110
+ = text_field_tag :username, :value => params[:username]
111
+ %p
112
+ = label_tag :password, :class => 'first'
113
+ = password_field_tag :password, :value => params[:password]
114
+ %p
115
+ = label_tag :strategy
116
+ = select_tag :strategy, :options => ['delete', 'destroy'], :selected => 'delete'
117
+ %p
118
+ = check_box_tag :confirm_delete
119
+ - field_set_tag(:class => 'buttons') do
120
+ = submit_tag "Remove"
121
+
122
+ For more information on using form helpers, check out the guide for
123
+ {Padrino Helpers}[http://www.padrinorb.com/guides/application-helpers].
124
+
125
+ === FormBuilders
126
+
127
+ Form builders are full-featured objects allowing the construction of complex object-based forms
128
+ using a simple, intuitive syntax.
129
+
130
+ A form_for using these basic fields might look like:
131
+
132
+ - form_for @user, '/register', :id => 'register' do |f|
133
+ = f.error_messages
134
+ %p
135
+ = f.label :username, :caption => "Nickname"
136
+ = f.text_field :username
137
+ %p
138
+ = f.label :email
139
+ = f.text_field :email
140
+ %p
141
+ = f.label :password
142
+ = f.password_field :password
143
+ %p
144
+ = f.label :is_admin, :caption => "Admin User?"
145
+ = f.check_box :is_admin
146
+ %p
147
+ = f.label :color, :caption => "Favorite Color?"
148
+ = f.select :color, :options => ['red', 'black']
149
+ %p
150
+ - fields_for @user.location do |location|
151
+ = location.text_field :street
152
+ = location.text_field :city
153
+ %p
154
+ = f.submit "Create", :class => 'button'
155
+
156
+ Forms can also accept nested attributes using `fields_for` within the form builder in recent releases. Check out the guide for {Padrino Helpers}[http://www.padrinorb.com/guides/application-helpers] to learn more about nested forms.
157
+
158
+ There is also an additional StandardFormBuilder which builds on the abstract fields that can be used within a form_for.
159
+
160
+ A form_for using these standard fields might be:
161
+
162
+ - form_for @user, '/register', :id => 'register' do |f|
163
+ = f.error_messages
164
+ = f.text_field_block :name, :caption => "Full name"
165
+ = f.text_field_block :email
166
+ = f.check_box_block :remember_me
167
+ = f.select_block :fav_color, :options => ['red', 'blue']
168
+ = f.password_field_block :password
169
+ = f.submit_block "Create", :class => 'button'
170
+
171
+ and would generate this html (with each input contained in a paragraph and containing a label):
172
+
173
+ <form id="register" action="/register" method="post">
174
+ <p><label for="user_name">Full name: </label><input type="text" id="user_name" name="user[name]"></p>
175
+ ...omitted...
176
+ <p><input type="submit" value="Create" class="button"></p>
177
+ </form>
178
+
179
+ You can also easily build your own FormBuilder which allows for customized fields and behavior.
180
+
181
+ For more information on using the Padrino form builders, check out the guide for
182
+ {Padrino Helpers}[http://www.padrinorb.com/guides/application-helpers].
183
+
184
+ === Format Helpers
185
+
186
+ Format helpers are several useful utilities for manipulating the format of text to achieve a goal.
187
+ The four format helpers are <tt>escape_html</tt>, <tt>time_ago_in_words</tt>, and <tt>js_escape_html</tt>.
188
+
189
+ The escape_html and js_escape_html function are for taking an html string and escaping certain characters.
190
+ <tt>escape_html</tt> will escape ampersands, brackets and quotes to their HTML/XML entities. This is useful
191
+ to sanitize user content before displaying this on a template. <tt>js_escape_html</tt> is used for
192
+ passing javascript information from a js template to a javascript function.
193
+
194
+ escape_html('<hello>&<goodbye>') # => &lt;hello&gt;&amp;&lt;goodbye&gt;
195
+
196
+ There is also an alias for escape_html called <tt>h</tt> for even easier usage within templates.
197
+
198
+ Format helpers also includes a number of useful text manipulation functions such as <tt>simple_format</tt>,
199
+ <tt>pluralize</tt>, <tt>word_wrap</tt>, <tt>truncate</tt> and <tt>truncate_words</tt>.
200
+
201
+ simple_format("hello\nworld") # => "<p>hello<br/>world</p>"
202
+ pluralize(2, 'person') => '2 people'
203
+ word_wrap('Once upon a time', :line_width => 8) => "Once upon\na time"
204
+ truncate("Once upon a time in a world far far away", :length => 8) => "Once upon..."
205
+ truncate_words("Once upon a time in a world far far away", :length => 4) => "Once upon a time..."
206
+
207
+ These helpers can be invoked from any route or view within your application.
208
+
209
+ For more information on using the format helpers, check out the guide for
210
+ {Padrino Helpers}[http://www.padrinorb.com/guides/application-helpers].
211
+
212
+ === Render Helpers
213
+
214
+ This component provides a number of rendering helpers making the process of displaying templates a bit easier.
215
+ This plugin also has support for useful additions such as partials (with support for :collection) for the templating system.
216
+
217
+ Using render plugin helpers is extremely simple. If you want to render an erb template in your view path:
218
+
219
+ render :erb, 'path/to/erb/template'
220
+
221
+ or using haml templates works just as well:
222
+
223
+ render :haml, 'path/to/haml/template'
224
+
225
+ There is also a method which renders the first view matching the path and removes the need to define an engine:
226
+
227
+ render 'path/to/any/template'
228
+
229
+ Finally, we have the all-important partials support for rendering mini-templates onto a page:
230
+
231
+ partial 'photo/_item', :object => @photo, :locals => { :foo => 'bar' }
232
+ partial 'photo/_item', :collection => @photos
233
+
234
+ For more information on using the render and partial helpers, check out the guide for
235
+ {Padrino Helpers}[http://www.padrinorb.com/guides/application-helpers].
236
+
237
+ == Copyright
238
+
239
+ Copyright (c) 2011 Padrino. See LICENSE for details.
@@ -0,0 +1,5 @@
1
+ # coding:utf-8
2
+ RAKE_ROOT = __FILE__
3
+
4
+ require 'rubygems'
5
+ require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')
@@ -0,0 +1,58 @@
1
+ require 'padrino-core/support_lite' unless defined?(SupportLite)
2
+ require 'cgi'
3
+ # require 'i18n'
4
+ require 'enumerator'
5
+ require 'active_support/core_ext/string/conversions' # to_date
6
+ require 'active_support/core_ext/float/rounding' # round
7
+ require 'active_support/option_merger' # with_options
8
+ require 'active_support/core_ext/object/with_options' # with_options
9
+ require 'active_support/inflector' # humanize
10
+
11
+ FileSet.glob_require('padrino-helpers/**/*.rb', __FILE__)
12
+
13
+ # Load our locales
14
+ # I18n.load_path += Dir["#{File.dirname(__FILE__)}/padrino-helpers/locale/*.yml"]
15
+
16
+ module Padrino
17
+ ##
18
+ # This component provides a variety of view helpers related to html markup generation.
19
+ # There are helpers for generating tags, forms, links, images, and more.
20
+ # Most of the basic methods should be very familiar to anyone who has used rails view helpers.
21
+ #
22
+ module Helpers
23
+ class << self
24
+ ##
25
+ # Registers these helpers into your application:
26
+ #
27
+ # Padrino::Helpers::OutputHelpers
28
+ # Padrino::Helpers::TagHelpers
29
+ # Padrino::Helpers::AssetTagHelpers
30
+ # Padrino::Helpers::FormHelpers
31
+ # Padrino::Helpers::FormatHelpers
32
+ # Padrino::Helpers::RenderHelpers
33
+ # Padrino::Helpers::NumberHelpers
34
+ #
35
+ # @param [Sinatra::Application] app
36
+ # The specified padrino application
37
+ #
38
+ # @example Register the helper module
39
+ # require 'padrino-helpers'
40
+ # class Padrino::Appliocation
41
+ # register Padrino::Helpers
42
+ # end
43
+ #
44
+ def registered(app)
45
+ app.set :default_builder, 'StandardFormBuilder'
46
+ app.helpers Padrino::Helpers::OutputHelpers
47
+ app.helpers Padrino::Helpers::TagHelpers
48
+ app.helpers Padrino::Helpers::AssetTagHelpers
49
+ app.helpers Padrino::Helpers::FormHelpers
50
+ app.helpers Padrino::Helpers::FormatHelpers
51
+ app.helpers Padrino::Helpers::RenderHelpers
52
+ app.helpers Padrino::Helpers::NumberHelpers
53
+ app.helpers Padrino::Helpers::TranslationHelpers
54
+ end
55
+ alias :included :registered
56
+ end
57
+ end # Helpers
58
+ end # Padrino
@@ -0,0 +1,420 @@
1
+ module Padrino
2
+ module Helpers
3
+ ###
4
+ # Helpers related to producing assets (images,stylesheets,js,etc) within templates.
5
+ #
6
+ module AssetTagHelpers
7
+ ##
8
+ # Creates a div to display the flash of given type if it exists
9
+ #
10
+ # @param [Symbol] kind
11
+ # The type of flash to display in the tag.
12
+ # @param [Hash] options
13
+ # The html options for this section.
14
+ #
15
+ # @return [String] Flash tag html with specified +options+.
16
+ #
17
+ # @example
18
+ # flash_tag(:notice, :id => 'flash-notice')
19
+ # # Generates: <div class="notice">flash-notice</div>
20
+ #
21
+ # @api public
22
+ def flash_tag(kind, options={})
23
+ flash_text = flash[kind]
24
+ return '' if flash_text.blank?
25
+ options.reverse_merge!(:class => kind)
26
+ content_tag(:div, flash_text, options)
27
+ end
28
+
29
+ ##
30
+ # Creates a link element with given name, url and options
31
+ #
32
+ # @overload link_to(caption, url, options={})
33
+ # @param [String] caption The text caption.
34
+ # @param [String] url The url href.
35
+ # @param [Hash] options The html options.
36
+ # @overload link_to(url, options={}, &block)
37
+ # @param [String] url The url href.
38
+ # @param [Hash] options The html options.
39
+ # @param [Proc] block The link content.
40
+ #
41
+ # @option options [String] :anchor
42
+ # The anchor for the link (i.e #something)
43
+ # @option options [Boolean] :if
44
+ # If true, the link will appear, otherwise not;
45
+ # @option options [Boolean] :unless
46
+ # If false, the link will appear, otherwise not;
47
+ # @option options [Boolean] :remote
48
+ # If true, this link should be handled by a ajax ujs handler.
49
+ # @option options [String] :confirm
50
+ # Instructs ujs handler to alert confirm message.
51
+ # @option options [Symbol] :method
52
+ # Instructs ujs handler to use different http method (i.e :post, :delete).
53
+ #
54
+ # @return [String] Link tag html with specified +options+.
55
+ #
56
+ # @example
57
+ # link_to('click me', '/dashboard', :class => 'linky')
58
+ # link_to('click me', '/dashboard', :remote => true)
59
+ # link_to('click me', '/dashboard', :method => :delete)
60
+ # link_to('click me', :class => 'blocky') do; end
61
+ #
62
+ # Note that you can pass :+if+ or :+unless+ conditions, but if you provide :current as
63
+ # condition padrino return true/false if the request.path_info match the given url
64
+ #
65
+ # @api public
66
+ def link_to(*args, &block)
67
+ options = args.extract_options!
68
+ options = parse_js_attributes(options) # parses remote, method and confirm options
69
+ anchor = "##{CGI.escape options.delete(:anchor).to_s}" if options[:anchor]
70
+
71
+ if block_given?
72
+ url = args[0] ? args[0] + anchor.to_s : anchor || 'javascript:void(0);'
73
+ options.reverse_merge!(:href => url)
74
+ link_content = capture_html(&block)
75
+ return '' unless parse_conditions(url, options)
76
+ result_link = content_tag(:a, link_content, options)
77
+ block_is_template?(block) ? concat_content(result_link) : result_link
78
+ else
79
+ name, url = args[0], (args[1] ? args[1] + anchor.to_s : anchor || 'javascript:void(0);')
80
+ return name unless parse_conditions(url, options)
81
+ options.reverse_merge!(:href => url)
82
+ content_tag(:a, name, options)
83
+ end
84
+ end
85
+
86
+ ##
87
+ # Creates a form containing a single button that submits to the url.
88
+ #
89
+ # @overload button_to(name, url, options={})
90
+ # @param [String] caption The text caption.
91
+ # @param [String] url The url href.
92
+ # @param [Hash] options The html options.
93
+ # @overload button_to(name, options={}, &block)
94
+ # @param [String] url The url href.
95
+ # @param [Hash] options The html options.
96
+ # @param [Proc] block The button content.
97
+ #
98
+ # @option options [Boolean] :multipart
99
+ # If true, this form will support multipart encoding.
100
+ # @option options [String] :remote
101
+ # Instructs ujs handler to handle the submit as ajax.
102
+ # @option options [Symbol] :method
103
+ # Instructs ujs handler to use different http method (i.e :post, :delete).
104
+ #
105
+ # @return [String] Form and button html with specified +options+.
106
+ #
107
+ # @example
108
+ # button_to 'Delete', url(:accounts_destroy, :id => account), :method => :delete, :class => :form
109
+ # # Generates:
110
+ # # <form class="form" action="/admin/accounts/destroy/2" method="post">
111
+ # # <input type="hidden" value="delete" name="_method" />
112
+ # # <input type="submit" value="Delete" />
113
+ # # </form>
114
+ #
115
+ # @api public
116
+ def button_to(*args, &block)
117
+ name, url = args[0], args[1]
118
+ options = args.extract_options!
119
+ desired_method = options[:method]
120
+ options.delete(:method) if options[:method].to_s !~ /get|post/i
121
+ options.reverse_merge!(:method => 'post', :action => url)
122
+ options[:enctype] = "multipart/form-data" if options.delete(:multipart)
123
+ options["data-remote"] = "true" if options.delete(:remote)
124
+ inner_form_html = hidden_form_method_field(desired_method)
125
+ inner_form_html += block_given? ? capture_html(&block) : submit_tag(name)
126
+ content_tag('form', inner_form_html, options)
127
+ end
128
+
129
+ ##
130
+ # Creates a link tag that browsers and news readers can use to auto-detect an RSS or ATOM feed.
131
+ #
132
+ # @param [Symbol] mime
133
+ # The mime type of the feed (i.e :atom or :rss).
134
+ # @param [String] url
135
+ # The url for the feed tag to reference.
136
+ # @param[Hash] options
137
+ # The options for the feed tag.
138
+ # @option options [String] :rel ("alternate")
139
+ # Specify the relation of this link
140
+ # @option options [String] :type
141
+ # Override the auto-generated mime type
142
+ # @option options [String] :title
143
+ # Specify the title of the link, defaults to the type
144
+ #
145
+ # @return [String] Feed link html tag with specified +options+.
146
+ #
147
+ # @example
148
+ # feed_tag :atom, url(:blog, :posts, :format => :atom), :title => "ATOM"
149
+ # # Generates: <link type="application/atom+xml" rel="alternate" href="/blog/posts.atom" title="ATOM" />
150
+ # feed_tag :rss, url(:blog, :posts, :format => :rss)
151
+ # # Generates: <link type="application/rss+xml" rel="alternate" href="/blog/posts.rss" title="rss" />
152
+ #
153
+ # @api public
154
+ def feed_tag(mime, url, options={})
155
+ full_mime = (mime == :atom) ? 'application/atom+xml' : 'application/rss+xml'
156
+ content_tag(:link, options.reverse_merge(:rel => 'alternate', :type => full_mime, :title => mime, :href => url))
157
+ end
158
+
159
+ ##
160
+ # Creates a mail link element with given name and caption.
161
+ #
162
+ # @param [String] email
163
+ # The email address for the link.
164
+ # @param [String] caption
165
+ # The caption for the link.
166
+ # @param [Hash] mail_options
167
+ # The options for the mail link. Accepts html options.
168
+ # @option mail_options [String] cc The cc recipients.
169
+ # @option mail_options [String] bcc The bcc recipients.
170
+ # @option mail_options [String] subject The subject line.
171
+ # @option mail_options [String] body The email body.
172
+ #
173
+ # @return [String] Mail link html tag with specified +options+.
174
+ #
175
+ # @example
176
+ # # Generates: <a href="mailto:me@demo.com">me@demo.com</a>
177
+ # mail_to "me@demo.com"
178
+ # # Generates: <a href="mailto:me@demo.com">My Email</a>
179
+ # mail_to "me@demo.com", "My Email"
180
+ #
181
+ # @api public
182
+ def mail_to(email, caption=nil, mail_options={})
183
+ html_options = mail_options.slice!(:cc, :bcc, :subject, :body)
184
+ mail_query = Rack::Utils.build_query(mail_options).gsub(/\+/, '%20').gsub('%40', '@')
185
+ mail_href = "mailto:#{email}"; mail_href << "?#{mail_query}" if mail_query.present?
186
+ link_to((caption || email), mail_href, html_options)
187
+ end
188
+
189
+ ##
190
+ # Creates a meta element with the content and given options.
191
+ #
192
+ # @param [String] content
193
+ # The content for the meta tag.
194
+ # @param [Hash] options
195
+ # The html options for the meta tag.
196
+ #
197
+ # @return [String] Meta html tag with specified +options+.
198
+ #
199
+ # @example
200
+ # # Generates: <meta name="keywords" content="weblog,news">
201
+ # meta_tag "weblog,news", :name => "keywords"
202
+ #
203
+ # # Generates: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
204
+ # meta_tag "text/html; charset=UTF-8", 'http-equiv' => "Content-Type"
205
+ #
206
+ # @api public
207
+ def meta_tag(content, options={})
208
+ options.reverse_merge!("content" => content)
209
+ tag(:meta, options)
210
+ end
211
+
212
+ ##
213
+ # Generates a favicon link. looks inside images folder
214
+ #
215
+ # @param [String] source
216
+ # The source image path for the favicon link tag.
217
+ # @param [Hash] options
218
+ # The html options for the favicon link tag.
219
+ #
220
+ # @return [String] The favicon link html tag with specified +options+.
221
+ #
222
+ # @example
223
+ # favicon_tag 'favicon.png'
224
+ # favicon_tag 'icons/favicon.png'
225
+ # # or override some options
226
+ # favicon_tag 'favicon.png', :type => 'image/ico'
227
+ #
228
+ # @api public
229
+ def favicon_tag(source, options={})
230
+ type = File.extname(source).gsub('.','')
231
+ options = options.dup.reverse_merge!(:href => image_path(source), :rel => 'icon', :type => "image/#{type}")
232
+ tag(:link, options)
233
+ end
234
+
235
+ ##
236
+ # Creates an image element with given url and options
237
+ #
238
+ # @param [String] url
239
+ # The source path for the image tag.
240
+ # @param [Hash] options
241
+ # The html options for the image tag.
242
+ #
243
+ # @return [String] Image html tag with +url+ and specified +options+.
244
+ #
245
+ # @example
246
+ # image_tag('icons/avatar.png')
247
+ #
248
+ # @api public
249
+ def image_tag(url, options={})
250
+ options.reverse_merge!(:src => image_path(url))
251
+ tag(:img, options)
252
+ end
253
+
254
+ ##
255
+ # Returns an html script tag for each of the sources provided.
256
+ # You can pass in the filename without extension or a symbol and we search it in your +appname.public_folder+
257
+ # like app/public/stylesheets for inclusion. You can provide also a full path.
258
+ #
259
+ # @overload stylesheet_link_tag(*sources, options={})
260
+ # @param [Array<String>] sources Splat of css source paths
261
+ # @param [Hash] options The html options for the link tag
262
+ #
263
+ # @return [String] Stylesheet link html tag for +sources+ with specified +options+.
264
+ #
265
+ # @example
266
+ # stylesheet_link_tag 'style', 'application', 'layout'
267
+ #
268
+ # @api public
269
+ def stylesheet_link_tag(*sources)
270
+ options = sources.extract_options!.symbolize_keys
271
+ options.reverse_merge!(:media => 'screen', :rel => 'stylesheet', :type => 'text/css')
272
+ sources.flatten.map { |source|
273
+ tag(:link, options.reverse_merge(:href => asset_path(:css, source)))
274
+ }.join("\n")
275
+ end
276
+
277
+ ##
278
+ # Returns an html script tag for each of the sources provided.
279
+ # You can pass in the filename without extension or a symbol and we search it in your +appname.public_folder+
280
+ # like app/public/javascript for inclusion. You can provide also a full path.
281
+ #
282
+ # @overload javascript_include_tag(*sources, options={})
283
+ # @param [Array<String>] sources Splat of js source paths
284
+ # @param [Hash] options The html options for the script tag
285
+ #
286
+ # @return [String] Script tag for +sources+ with specified +options+.
287
+ #
288
+ # @example
289
+ # javascript_include_tag 'application', :extjs
290
+ #
291
+ # @api public
292
+ def javascript_include_tag(*sources)
293
+ options = sources.extract_options!.symbolize_keys
294
+ options.reverse_merge!(:type => 'text/javascript', :content => "")
295
+ sources.flatten.map { |source|
296
+ tag(:script, options.reverse_merge(:src => asset_path(:js, source)))
297
+ }.join("\n")
298
+ end
299
+
300
+ ##
301
+ # Returns the path to the image, either relative or absolute. We search it in your +appname.public_folder+
302
+ # like app/public/images for inclusion. You can provide also a full path.
303
+ #
304
+ # @param [String] src
305
+ # The path to the image file (relative or absolute)
306
+ #
307
+ # @return [String] Path to an image given the +kind+ and +source+.
308
+ #
309
+ # @example
310
+ # # Generates: /images/foo.jpg?1269008689
311
+ # image_path("foo.jpg")
312
+ #
313
+ # @api public
314
+ def image_path(src)
315
+ asset_path(:images, src)
316
+ end
317
+
318
+ ##
319
+ # Returns the path to the specified asset (css or javascript)
320
+ #
321
+ # @param [String] kind
322
+ # The kind of asset (i.e :images, :js, :css)
323
+ # @param [String] source
324
+ # The path to the asset (relative or absolute).
325
+ #
326
+ # @return [String] Path for the asset given the +kind+ and +source+.
327
+ #
328
+ # @example
329
+ # # Generates: /javascripts/application.js?1269008689
330
+ # asset_path :js, :application
331
+ #
332
+ # # Generates: /stylesheets/application.css?1269008689
333
+ # asset_path :css, :application
334
+ #
335
+ # # Generates: /images/example.jpg?1269008689
336
+ # asset_path :images, 'example.jpg'
337
+ #
338
+ # @api semipublic
339
+ def asset_path(kind, source)
340
+ return source if source =~ /^http/
341
+ asset_folder = case kind
342
+ when :css then 'stylesheets'
343
+ when :js then 'javascripts'
344
+ else kind.to_s
345
+ end
346
+ source = source.to_s.gsub(/\s/, '%20')
347
+ ignore_extension = (asset_folder.to_s == kind.to_s) # don't append extension
348
+ source << ".#{kind}" unless ignore_extension or source =~ /\.#{kind}/
349
+ result_path = source if source =~ %r{^/} # absolute path
350
+ result_path ||= uri_root_path(asset_folder, source)
351
+ timestamp = asset_timestamp(result_path)
352
+ "#{result_path}#{timestamp}"
353
+ end
354
+
355
+ private
356
+
357
+ ##
358
+ # Returns the uri root of the application.
359
+ #
360
+ # @example
361
+ # uri_root_path("/some/path") => "/base/some/path"
362
+ #
363
+ def uri_root_path(*paths)
364
+ root_uri = self.class.uri_root if self.class.respond_to?(:uri_root)
365
+ File.join(ENV['RACK_BASE_URI'].to_s, root_uri || '/', *paths)
366
+ end
367
+
368
+ ##
369
+ # Returns the timestamp mtime for an asset
370
+ #
371
+ # @example
372
+ # asset_timestamp("some/path/to/file.png") => "?154543678"
373
+ #
374
+ def asset_timestamp(file_path)
375
+ return nil if file_path =~ /\?/ || (self.class.respond_to?(:asset_stamp) && !self.class.asset_stamp)
376
+ public_path = Padrino.root("public", file_path) if Padrino.respond_to?(:root)
377
+ stamp = Time.now.to_i unless public_path && File.exist?(public_path)
378
+ stamp ||= File.mtime(public_path).to_i
379
+ "?#{stamp}"
380
+ end
381
+
382
+ ##
383
+ # Parses link_to options for given correct conditions
384
+ #
385
+ # @example
386
+ # parse_conditions("/some/url", :if => false) => true
387
+ #
388
+ def parse_conditions(url, options)
389
+ if options.has_key?(:if)
390
+ condition = options.delete(:if)
391
+ condition == :current ? url == request.path_info : condition
392
+ elsif condition = options.delete(:unless)
393
+ condition == :current ? url != request.path_info : !condition
394
+ else
395
+ true
396
+ end
397
+ end
398
+
399
+ ##
400
+ # Parses link_to options for given js declarations (remote, method, confirm)
401
+ # Not destructive on options; returns updated options
402
+ #
403
+ # parse_js_attributes(:remote => true, :confirm => "test", :method => :delete)
404
+ # => { "data-remote" => true, "data-method" => "delete", "data-confirm" => "test" }
405
+ #
406
+ def parse_js_attributes(options)
407
+ options = options.dup
408
+ options["data-remote"] = "true" if options.delete(:remote)
409
+ if link_confirm = options.delete(:confirm)
410
+ options["data-confirm"] = link_confirm
411
+ end
412
+ if link_method = options.delete(:method)
413
+ options["data-method"] = link_method
414
+ options["rel"] = "nofollow"
415
+ end
416
+ options
417
+ end
418
+ end # AssetTagHelpers
419
+ end # Helpers
420
+ end # Padrino