runeblog 0.2.9 → 0.2.15

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 (517) hide show
  1. checksums.yaml +4 -4
  2. data/empty_view.tgz +0 -0
  3. data/lib/helpers-blog.rb +46 -10
  4. data/lib/liveblog.rb +64 -38
  5. data/lib/pathmagic.rb +14 -0
  6. data/lib/runeblog.rb +167 -104
  7. data/lib/runeblog_version.rb +1 -1
  8. data/runeblog.gemspec +2 -3
  9. data/test/make_blog.rb +3 -5
  10. metadata +5 -511
  11. data/lib/BAD.liveblog.rb +0 -724
  12. data/lib/KEEP.liveblog +0 -646
  13. data/lib/NEW-liveblog.rb +0 -757
  14. data/lib/OLD-liveblog.rb +0 -661
  15. data/test/.blogs/VERSION +0 -2
  16. data/test/.blogs/config +0 -3
  17. data/test/.blogs/drafts/0001-whats-at-stubbs.lt3 +0 -16
  18. data/test/.blogs/drafts/0002-the-new-amphitheatre-is-overrated.lt3 +0 -16
  19. data/test/.blogs/drafts/0003-elixir-conf-coming-up.lt3 +0 -17
  20. data/test/.blogs/drafts/0004-does-indie-still-matter.lt3 +0 -16
  21. data/test/.blogs/drafts/0005-the-genius-of-scenic.lt3 +0 -16
  22. data/test/.blogs/drafts/0006-the-future-of-coding.lt3 +0 -16
  23. data/test/.blogs/drafts/0007-the-graffiti-wall.lt3 +0 -17
  24. data/test/.blogs/drafts/0008-the-waller-creek-project.lt3 +0 -16
  25. data/test/.blogs/drafts/0009-life-on-sabine-street.lt3 +0 -16
  26. data/test/.blogs/drafts/0010-remember-modest-mouse.lt3 +0 -17
  27. data/test/.blogs/sequence +0 -1
  28. data/test/.blogs/views/around_austin/last_published +0 -1
  29. data/test/.blogs/views/around_austin/posts/0001-whats-at-stubbs/0001-whats-at-stubbs.lt3 +0 -16
  30. data/test/.blogs/views/around_austin/posts/0001-whats-at-stubbs/metadata.txt +0 -6
  31. data/test/.blogs/views/around_austin/posts/0001-whats-at-stubbs/teaser.txt +0 -1
  32. data/test/.blogs/views/around_austin/posts/0001-whats-at-stubbs/whats-at-stubbs.html +0 -11
  33. data/test/.blogs/views/around_austin/posts/0002-the-new-amphitheatre-is-overrated/0002-the-new-amphitheatre-is-overrated.lt3 +0 -16
  34. data/test/.blogs/views/around_austin/posts/0002-the-new-amphitheatre-is-overrated/metadata.txt +0 -6
  35. data/test/.blogs/views/around_austin/posts/0002-the-new-amphitheatre-is-overrated/teaser.txt +0 -1
  36. data/test/.blogs/views/around_austin/posts/0002-the-new-amphitheatre-is-overrated/the-new-amphitheatre-is-overrated.html +0 -11
  37. data/test/.blogs/views/around_austin/posts/0007-the-graffiti-wall/0007-the-graffiti-wall.lt3 +0 -17
  38. data/test/.blogs/views/around_austin/posts/0007-the-graffiti-wall/metadata.txt +0 -6
  39. data/test/.blogs/views/around_austin/posts/0007-the-graffiti-wall/teaser.txt +0 -1
  40. data/test/.blogs/views/around_austin/posts/0007-the-graffiti-wall/the-graffiti-wall.html +0 -12
  41. data/test/.blogs/views/around_austin/posts/0008-the-waller-creek-project/0008-the-waller-creek-project.lt3 +0 -16
  42. data/test/.blogs/views/around_austin/posts/0008-the-waller-creek-project/metadata.txt +0 -6
  43. data/test/.blogs/views/around_austin/posts/0008-the-waller-creek-project/teaser.txt +0 -1
  44. data/test/.blogs/views/around_austin/posts/0008-the-waller-creek-project/the-waller-creek-project.html +0 -11
  45. data/test/.blogs/views/around_austin/posts/0009-life-on-sabine-street/0009-life-on-sabine-street.lt3 +0 -16
  46. data/test/.blogs/views/around_austin/posts/0009-life-on-sabine-street/life-on-sabine-street.html +0 -11
  47. data/test/.blogs/views/around_austin/posts/0009-life-on-sabine-street/metadata.txt +0 -6
  48. data/test/.blogs/views/around_austin/posts/0009-life-on-sabine-street/teaser.txt +0 -1
  49. data/test/.blogs/views/around_austin/publish +0 -5
  50. data/test/.blogs/views/around_austin/remote/etc/blog.css +0 -34
  51. data/test/.blogs/views/around_austin/remote/etc/blog.css.lt3 +0 -36
  52. data/test/.blogs/views/around_austin/remote/etc/externals.lt3 +0 -19
  53. data/test/.blogs/views/around_austin/remote/etc/favicon.ico +0 -0
  54. data/test/.blogs/views/around_austin/remote/etc/misc.js +0 -6
  55. data/test/.blogs/views/around_austin/remote/life-on-sabine-street.html +0 -10
  56. data/test/.blogs/views/around_austin/remote/permalink/life-on-sabine-street.html +0 -10
  57. data/test/.blogs/views/around_austin/remote/permalink/the-graffiti-wall.html +0 -10
  58. data/test/.blogs/views/around_austin/remote/permalink/the-new-amphitheatre-is-overrated.html +0 -50
  59. data/test/.blogs/views/around_austin/remote/permalink/the-waller-creek-project.html +0 -50
  60. data/test/.blogs/views/around_austin/remote/permalink/whats-at-stubbs.html +0 -50
  61. data/test/.blogs/views/around_austin/remote/recent.html +0 -104
  62. data/test/.blogs/views/around_austin/remote/the-graffiti-wall.html +0 -10
  63. data/test/.blogs/views/around_austin/remote/the-new-amphitheatre-is-overrated.html +0 -50
  64. data/test/.blogs/views/around_austin/remote/the-waller-creek-project.html +0 -50
  65. data/test/.blogs/views/around_austin/remote/whats-at-stubbs.html +0 -50
  66. data/test/.blogs/views/around_austin/remote/widgets/README +0 -4
  67. data/test/.blogs/views/around_austin/remote/widgets/ad/ad.lt3 +0 -12
  68. data/test/.blogs/views/around_austin/remote/widgets/calendar/calendar.lt3 +0 -6
  69. data/test/.blogs/views/around_austin/remote/widgets/news/list.data +0 -4
  70. data/test/.blogs/views/around_austin/remote/widgets/news/news.lt3 +0 -3
  71. data/test/.blogs/views/around_austin/remote/widgets/pages/README +0 -2
  72. data/test/.blogs/views/around_austin/remote/widgets/pages/disclaim.lt3 +0 -6
  73. data/test/.blogs/views/around_austin/remote/widgets/pages/faq.lt3 +0 -6
  74. data/test/.blogs/views/around_austin/remote/widgets/pages/generated.lt3 +0 -4
  75. data/test/.blogs/views/around_austin/remote/widgets/pages/lifestory.lt3 +0 -6
  76. data/test/.blogs/views/around_austin/remote/widgets/pages/like-dislike.lt3 +0 -6
  77. data/test/.blogs/views/around_austin/remote/widgets/pages/list.data +0 -4
  78. data/test/.blogs/views/around_austin/remote/widgets/pages/main.html +0 -9
  79. data/test/.blogs/views/around_austin/remote/widgets/pages/main.lt3 +0 -18
  80. data/test/.blogs/views/around_austin/remote/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  81. data/test/.blogs/views/around_austin/staging/0001-whats-at-stubbs.lt3 +0 -16
  82. data/test/.blogs/views/around_austin/staging/0002-the-new-amphitheatre-is-overrated.lt3 +0 -16
  83. data/test/.blogs/views/around_austin/staging/0007-the-graffiti-wall.lt3 +0 -17
  84. data/test/.blogs/views/around_austin/staging/0008-the-waller-creek-project.lt3 +0 -16
  85. data/test/.blogs/views/around_austin/staging/0009-life-on-sabine-street.lt3 +0 -16
  86. data/test/.blogs/views/around_austin/staging/README +0 -59
  87. data/test/.blogs/views/around_austin/staging/blog/generate.lt3 +0 -17
  88. data/test/.blogs/views/around_austin/staging/blog/head.lt3 +0 -9
  89. data/test/.blogs/views/around_austin/staging/blog/index.lt3 +0 -6
  90. data/test/.blogs/views/around_austin/staging/blog/post_entry.lt3 +0 -19
  91. data/test/.blogs/views/around_austin/staging/etc/blog.css +0 -34
  92. data/test/.blogs/views/around_austin/staging/etc/blog.css.lt3 +0 -36
  93. data/test/.blogs/views/around_austin/staging/etc/externals.lt3 +0 -19
  94. data/test/.blogs/views/around_austin/staging/etc/favicon.ico +0 -0
  95. data/test/.blogs/views/around_austin/staging/etc/misc.js +0 -6
  96. data/test/.blogs/views/around_austin/staging/global.lt3 +0 -22
  97. data/test/.blogs/views/around_austin/staging/life-on-sabine-street.html +0 -10
  98. data/test/.blogs/views/around_austin/staging/navbar/about.html +0 -6
  99. data/test/.blogs/views/around_austin/staging/navbar/contact.html +0 -6
  100. data/test/.blogs/views/around_austin/staging/navbar/navbar.lt3 +0 -6
  101. data/test/.blogs/views/around_austin/staging/post/generate.lt3 +0 -26
  102. data/test/.blogs/views/around_austin/staging/post/head.lt3 +0 -4
  103. data/test/.blogs/views/around_austin/staging/post/index.html +0 -16
  104. data/test/.blogs/views/around_austin/staging/post/index.lt3 +0 -16
  105. data/test/.blogs/views/around_austin/staging/post/permalink.lt3 +0 -26
  106. data/test/.blogs/views/around_austin/staging/recent.html +0 -104
  107. data/test/.blogs/views/around_austin/staging/sidebar/README +0 -3
  108. data/test/.blogs/views/around_austin/staging/the-graffiti-wall.html +0 -10
  109. data/test/.blogs/views/around_austin/staging/the-new-amphitheatre-is-overrated.html +0 -50
  110. data/test/.blogs/views/around_austin/staging/the-waller-creek-project.html +0 -50
  111. data/test/.blogs/views/around_austin/staging/vars.lt3 +0 -2
  112. data/test/.blogs/views/around_austin/staging/whats-at-stubbs.html +0 -50
  113. data/test/.blogs/views/around_austin/staging/widgets/README +0 -4
  114. data/test/.blogs/views/around_austin/staging/widgets/ad/ad.lt3 +0 -12
  115. data/test/.blogs/views/around_austin/staging/widgets/calendar/calendar.lt3 +0 -6
  116. data/test/.blogs/views/around_austin/staging/widgets/news/list.data +0 -4
  117. data/test/.blogs/views/around_austin/staging/widgets/news/news.lt3 +0 -3
  118. data/test/.blogs/views/around_austin/staging/widgets/pages/README +0 -2
  119. data/test/.blogs/views/around_austin/staging/widgets/pages/disclaim.lt3 +0 -6
  120. data/test/.blogs/views/around_austin/staging/widgets/pages/faq.lt3 +0 -6
  121. data/test/.blogs/views/around_austin/staging/widgets/pages/generated.lt3 +0 -4
  122. data/test/.blogs/views/around_austin/staging/widgets/pages/lifestory.lt3 +0 -6
  123. data/test/.blogs/views/around_austin/staging/widgets/pages/like-dislike.lt3 +0 -6
  124. data/test/.blogs/views/around_austin/staging/widgets/pages/list.data +0 -4
  125. data/test/.blogs/views/around_austin/staging/widgets/pages/main.html +0 -9
  126. data/test/.blogs/views/around_austin/staging/widgets/pages/main.lt3 +0 -18
  127. data/test/.blogs/views/around_austin/staging/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  128. data/test/.blogs/views/around_austin/themes/standard/README +0 -59
  129. data/test/.blogs/views/around_austin/themes/standard/blog/generate.lt3 +0 -17
  130. data/test/.blogs/views/around_austin/themes/standard/blog/head.lt3 +0 -9
  131. data/test/.blogs/views/around_austin/themes/standard/blog/index.lt3 +0 -6
  132. data/test/.blogs/views/around_austin/themes/standard/blog/post_entry.lt3 +0 -19
  133. data/test/.blogs/views/around_austin/themes/standard/etc/blog.css +0 -34
  134. data/test/.blogs/views/around_austin/themes/standard/etc/blog.css.lt3 +0 -36
  135. data/test/.blogs/views/around_austin/themes/standard/etc/externals.lt3 +0 -19
  136. data/test/.blogs/views/around_austin/themes/standard/etc/favicon.ico +0 -0
  137. data/test/.blogs/views/around_austin/themes/standard/etc/misc.js +0 -6
  138. data/test/.blogs/views/around_austin/themes/standard/global.lt3 +0 -22
  139. data/test/.blogs/views/around_austin/themes/standard/navbar/about.html +0 -6
  140. data/test/.blogs/views/around_austin/themes/standard/navbar/contact.html +0 -6
  141. data/test/.blogs/views/around_austin/themes/standard/navbar/navbar.lt3 +0 -6
  142. data/test/.blogs/views/around_austin/themes/standard/post/generate.lt3 +0 -26
  143. data/test/.blogs/views/around_austin/themes/standard/post/head.lt3 +0 -4
  144. data/test/.blogs/views/around_austin/themes/standard/post/index.lt3 +0 -16
  145. data/test/.blogs/views/around_austin/themes/standard/post/permalink.lt3 +0 -26
  146. data/test/.blogs/views/around_austin/themes/standard/sidebar/README +0 -3
  147. data/test/.blogs/views/around_austin/themes/standard/widgets/README +0 -4
  148. data/test/.blogs/views/around_austin/themes/standard/widgets/ad/ad.lt3 +0 -12
  149. data/test/.blogs/views/around_austin/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  150. data/test/.blogs/views/around_austin/themes/standard/widgets/news/list.data +0 -4
  151. data/test/.blogs/views/around_austin/themes/standard/widgets/news/news.lt3 +0 -3
  152. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/README +0 -2
  153. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/disclaim.lt3 +0 -6
  154. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/faq.lt3 +0 -6
  155. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/generated.lt3 +0 -4
  156. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  157. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  158. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/list.data +0 -4
  159. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/main.html +0 -9
  160. data/test/.blogs/views/around_austin/themes/standard/widgets/pages/main.lt3 +0 -18
  161. data/test/.blogs/views/around_austin/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  162. data/test/.blogs/views/computing/last_published +0 -1
  163. data/test/.blogs/views/computing/posts/0003-elixir-conf-coming-up/0003-elixir-conf-coming-up.lt3 +0 -17
  164. data/test/.blogs/views/computing/posts/0003-elixir-conf-coming-up/elixir-conf-coming-up.html +0 -12
  165. data/test/.blogs/views/computing/posts/0003-elixir-conf-coming-up/metadata.txt +0 -6
  166. data/test/.blogs/views/computing/posts/0003-elixir-conf-coming-up/teaser.txt +0 -1
  167. data/test/.blogs/views/computing/posts/0005-the-genius-of-scenic/0005-the-genius-of-scenic.lt3 +0 -16
  168. data/test/.blogs/views/computing/posts/0005-the-genius-of-scenic/metadata.txt +0 -6
  169. data/test/.blogs/views/computing/posts/0005-the-genius-of-scenic/teaser.txt +0 -1
  170. data/test/.blogs/views/computing/posts/0005-the-genius-of-scenic/the-genius-of-scenic.html +0 -11
  171. data/test/.blogs/views/computing/posts/0006-the-future-of-coding/0006-the-future-of-coding.lt3 +0 -16
  172. data/test/.blogs/views/computing/posts/0006-the-future-of-coding/metadata.txt +0 -6
  173. data/test/.blogs/views/computing/posts/0006-the-future-of-coding/teaser.txt +0 -1
  174. data/test/.blogs/views/computing/posts/0006-the-future-of-coding/the-future-of-coding.html +0 -11
  175. data/test/.blogs/views/computing/publish +0 -5
  176. data/test/.blogs/views/computing/remote/elixir-conf-coming-up.html +0 -51
  177. data/test/.blogs/views/computing/remote/etc/blog.css +0 -34
  178. data/test/.blogs/views/computing/remote/etc/blog.css.lt3 +0 -36
  179. data/test/.blogs/views/computing/remote/etc/externals.lt3 +0 -19
  180. data/test/.blogs/views/computing/remote/etc/favicon.ico +0 -0
  181. data/test/.blogs/views/computing/remote/etc/misc.js +0 -6
  182. data/test/.blogs/views/computing/remote/permalink/elixir-conf-coming-up.html +0 -51
  183. data/test/.blogs/views/computing/remote/permalink/the-future-of-coding.html +0 -50
  184. data/test/.blogs/views/computing/remote/permalink/the-genius-of-scenic.html +0 -50
  185. data/test/.blogs/views/computing/remote/recent.html +0 -64
  186. data/test/.blogs/views/computing/remote/the-future-of-coding.html +0 -50
  187. data/test/.blogs/views/computing/remote/the-genius-of-scenic.html +0 -50
  188. data/test/.blogs/views/computing/remote/widgets/README +0 -4
  189. data/test/.blogs/views/computing/remote/widgets/ad/ad.lt3 +0 -12
  190. data/test/.blogs/views/computing/remote/widgets/calendar/calendar.lt3 +0 -6
  191. data/test/.blogs/views/computing/remote/widgets/news/list.data +0 -4
  192. data/test/.blogs/views/computing/remote/widgets/news/news.lt3 +0 -3
  193. data/test/.blogs/views/computing/remote/widgets/pages/README +0 -2
  194. data/test/.blogs/views/computing/remote/widgets/pages/disclaim.lt3 +0 -6
  195. data/test/.blogs/views/computing/remote/widgets/pages/faq.lt3 +0 -6
  196. data/test/.blogs/views/computing/remote/widgets/pages/generated.lt3 +0 -4
  197. data/test/.blogs/views/computing/remote/widgets/pages/lifestory.lt3 +0 -6
  198. data/test/.blogs/views/computing/remote/widgets/pages/like-dislike.lt3 +0 -6
  199. data/test/.blogs/views/computing/remote/widgets/pages/list.data +0 -4
  200. data/test/.blogs/views/computing/remote/widgets/pages/main.html +0 -9
  201. data/test/.blogs/views/computing/remote/widgets/pages/main.lt3 +0 -18
  202. data/test/.blogs/views/computing/remote/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  203. data/test/.blogs/views/computing/staging/0003-elixir-conf-coming-up.lt3 +0 -17
  204. data/test/.blogs/views/computing/staging/0005-the-genius-of-scenic.lt3 +0 -16
  205. data/test/.blogs/views/computing/staging/0006-the-future-of-coding.lt3 +0 -16
  206. data/test/.blogs/views/computing/staging/README +0 -59
  207. data/test/.blogs/views/computing/staging/blog/generate.lt3 +0 -17
  208. data/test/.blogs/views/computing/staging/blog/head.lt3 +0 -9
  209. data/test/.blogs/views/computing/staging/blog/index.lt3 +0 -6
  210. data/test/.blogs/views/computing/staging/blog/post_entry.lt3 +0 -19
  211. data/test/.blogs/views/computing/staging/elixir-conf-coming-up.html +0 -51
  212. data/test/.blogs/views/computing/staging/etc/blog.css +0 -34
  213. data/test/.blogs/views/computing/staging/etc/blog.css.lt3 +0 -36
  214. data/test/.blogs/views/computing/staging/etc/externals.lt3 +0 -19
  215. data/test/.blogs/views/computing/staging/etc/favicon.ico +0 -0
  216. data/test/.blogs/views/computing/staging/etc/misc.js +0 -6
  217. data/test/.blogs/views/computing/staging/global.lt3 +0 -22
  218. data/test/.blogs/views/computing/staging/navbar/about.html +0 -6
  219. data/test/.blogs/views/computing/staging/navbar/contact.html +0 -6
  220. data/test/.blogs/views/computing/staging/navbar/navbar.lt3 +0 -6
  221. data/test/.blogs/views/computing/staging/post/generate.lt3 +0 -26
  222. data/test/.blogs/views/computing/staging/post/head.lt3 +0 -4
  223. data/test/.blogs/views/computing/staging/post/index.html +0 -16
  224. data/test/.blogs/views/computing/staging/post/index.lt3 +0 -16
  225. data/test/.blogs/views/computing/staging/post/permalink.lt3 +0 -26
  226. data/test/.blogs/views/computing/staging/recent.html +0 -64
  227. data/test/.blogs/views/computing/staging/sidebar/README +0 -3
  228. data/test/.blogs/views/computing/staging/the-future-of-coding.html +0 -50
  229. data/test/.blogs/views/computing/staging/the-genius-of-scenic.html +0 -50
  230. data/test/.blogs/views/computing/staging/vars.lt3 +0 -2
  231. data/test/.blogs/views/computing/staging/widgets/README +0 -4
  232. data/test/.blogs/views/computing/staging/widgets/ad/ad.lt3 +0 -12
  233. data/test/.blogs/views/computing/staging/widgets/calendar/calendar.lt3 +0 -6
  234. data/test/.blogs/views/computing/staging/widgets/news/list.data +0 -4
  235. data/test/.blogs/views/computing/staging/widgets/news/news.lt3 +0 -3
  236. data/test/.blogs/views/computing/staging/widgets/pages/README +0 -2
  237. data/test/.blogs/views/computing/staging/widgets/pages/disclaim.lt3 +0 -6
  238. data/test/.blogs/views/computing/staging/widgets/pages/faq.lt3 +0 -6
  239. data/test/.blogs/views/computing/staging/widgets/pages/generated.lt3 +0 -4
  240. data/test/.blogs/views/computing/staging/widgets/pages/lifestory.lt3 +0 -6
  241. data/test/.blogs/views/computing/staging/widgets/pages/like-dislike.lt3 +0 -6
  242. data/test/.blogs/views/computing/staging/widgets/pages/list.data +0 -4
  243. data/test/.blogs/views/computing/staging/widgets/pages/main.html +0 -9
  244. data/test/.blogs/views/computing/staging/widgets/pages/main.lt3 +0 -18
  245. data/test/.blogs/views/computing/staging/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  246. data/test/.blogs/views/computing/themes/standard/README +0 -59
  247. data/test/.blogs/views/computing/themes/standard/blog/generate.lt3 +0 -17
  248. data/test/.blogs/views/computing/themes/standard/blog/head.lt3 +0 -9
  249. data/test/.blogs/views/computing/themes/standard/blog/index.lt3 +0 -6
  250. data/test/.blogs/views/computing/themes/standard/blog/post_entry.lt3 +0 -19
  251. data/test/.blogs/views/computing/themes/standard/etc/blog.css +0 -34
  252. data/test/.blogs/views/computing/themes/standard/etc/blog.css.lt3 +0 -36
  253. data/test/.blogs/views/computing/themes/standard/etc/externals.lt3 +0 -19
  254. data/test/.blogs/views/computing/themes/standard/etc/favicon.ico +0 -0
  255. data/test/.blogs/views/computing/themes/standard/etc/misc.js +0 -6
  256. data/test/.blogs/views/computing/themes/standard/global.lt3 +0 -22
  257. data/test/.blogs/views/computing/themes/standard/navbar/about.html +0 -6
  258. data/test/.blogs/views/computing/themes/standard/navbar/contact.html +0 -6
  259. data/test/.blogs/views/computing/themes/standard/navbar/navbar.lt3 +0 -6
  260. data/test/.blogs/views/computing/themes/standard/post/generate.lt3 +0 -26
  261. data/test/.blogs/views/computing/themes/standard/post/head.lt3 +0 -4
  262. data/test/.blogs/views/computing/themes/standard/post/index.lt3 +0 -16
  263. data/test/.blogs/views/computing/themes/standard/post/permalink.lt3 +0 -26
  264. data/test/.blogs/views/computing/themes/standard/sidebar/README +0 -3
  265. data/test/.blogs/views/computing/themes/standard/widgets/README +0 -4
  266. data/test/.blogs/views/computing/themes/standard/widgets/ad/ad.lt3 +0 -12
  267. data/test/.blogs/views/computing/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  268. data/test/.blogs/views/computing/themes/standard/widgets/news/list.data +0 -4
  269. data/test/.blogs/views/computing/themes/standard/widgets/news/news.lt3 +0 -3
  270. data/test/.blogs/views/computing/themes/standard/widgets/pages/README +0 -2
  271. data/test/.blogs/views/computing/themes/standard/widgets/pages/disclaim.lt3 +0 -6
  272. data/test/.blogs/views/computing/themes/standard/widgets/pages/faq.lt3 +0 -6
  273. data/test/.blogs/views/computing/themes/standard/widgets/pages/generated.lt3 +0 -4
  274. data/test/.blogs/views/computing/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  275. data/test/.blogs/views/computing/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  276. data/test/.blogs/views/computing/themes/standard/widgets/pages/list.data +0 -4
  277. data/test/.blogs/views/computing/themes/standard/widgets/pages/main.html +0 -9
  278. data/test/.blogs/views/computing/themes/standard/widgets/pages/main.lt3 +0 -18
  279. data/test/.blogs/views/computing/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  280. data/test/.blogs/views/music/last_published +0 -1
  281. data/test/.blogs/views/music/posts/0004-does-indie-still-matter/0004-does-indie-still-matter.lt3 +0 -16
  282. data/test/.blogs/views/music/posts/0004-does-indie-still-matter/does-indie-still-matter.html +0 -11
  283. data/test/.blogs/views/music/posts/0004-does-indie-still-matter/metadata.txt +0 -6
  284. data/test/.blogs/views/music/posts/0004-does-indie-still-matter/teaser.txt +0 -1
  285. data/test/.blogs/views/music/posts/0010-remember-modest-mouse/0010-remember-modest-mouse.lt3 +0 -17
  286. data/test/.blogs/views/music/posts/0010-remember-modest-mouse/metadata.txt +0 -6
  287. data/test/.blogs/views/music/posts/0010-remember-modest-mouse/remember-modest-mouse.html +0 -12
  288. data/test/.blogs/views/music/posts/0010-remember-modest-mouse/teaser.txt +0 -1
  289. data/test/.blogs/views/music/publish +0 -5
  290. data/test/.blogs/views/music/remote/does-indie-still-matter.html +0 -50
  291. data/test/.blogs/views/music/remote/etc/blog.css +0 -34
  292. data/test/.blogs/views/music/remote/etc/blog.css.lt3 +0 -36
  293. data/test/.blogs/views/music/remote/etc/externals.lt3 +0 -19
  294. data/test/.blogs/views/music/remote/etc/favicon.ico +0 -0
  295. data/test/.blogs/views/music/remote/etc/misc.js +0 -6
  296. data/test/.blogs/views/music/remote/permalink/does-indie-still-matter.html +0 -50
  297. data/test/.blogs/views/music/remote/permalink/remember-modest-mouse.html +0 -51
  298. data/test/.blogs/views/music/remote/recent.html +0 -44
  299. data/test/.blogs/views/music/remote/remember-modest-mouse.html +0 -51
  300. data/test/.blogs/views/music/remote/widgets/README +0 -4
  301. data/test/.blogs/views/music/remote/widgets/ad/ad.lt3 +0 -12
  302. data/test/.blogs/views/music/remote/widgets/calendar/calendar.lt3 +0 -6
  303. data/test/.blogs/views/music/remote/widgets/news/list.data +0 -4
  304. data/test/.blogs/views/music/remote/widgets/news/news.lt3 +0 -3
  305. data/test/.blogs/views/music/remote/widgets/pages/README +0 -2
  306. data/test/.blogs/views/music/remote/widgets/pages/disclaim.lt3 +0 -6
  307. data/test/.blogs/views/music/remote/widgets/pages/faq.lt3 +0 -6
  308. data/test/.blogs/views/music/remote/widgets/pages/generated.lt3 +0 -4
  309. data/test/.blogs/views/music/remote/widgets/pages/lifestory.lt3 +0 -6
  310. data/test/.blogs/views/music/remote/widgets/pages/like-dislike.lt3 +0 -6
  311. data/test/.blogs/views/music/remote/widgets/pages/list.data +0 -4
  312. data/test/.blogs/views/music/remote/widgets/pages/main.html +0 -9
  313. data/test/.blogs/views/music/remote/widgets/pages/main.lt3 +0 -18
  314. data/test/.blogs/views/music/remote/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  315. data/test/.blogs/views/music/staging/0004-does-indie-still-matter.lt3 +0 -16
  316. data/test/.blogs/views/music/staging/0010-remember-modest-mouse.lt3 +0 -17
  317. data/test/.blogs/views/music/staging/README +0 -59
  318. data/test/.blogs/views/music/staging/blog/generate.lt3 +0 -17
  319. data/test/.blogs/views/music/staging/blog/head.lt3 +0 -9
  320. data/test/.blogs/views/music/staging/blog/index.lt3 +0 -6
  321. data/test/.blogs/views/music/staging/blog/post_entry.lt3 +0 -19
  322. data/test/.blogs/views/music/staging/does-indie-still-matter.html +0 -50
  323. data/test/.blogs/views/music/staging/etc/blog.css +0 -34
  324. data/test/.blogs/views/music/staging/etc/blog.css.lt3 +0 -36
  325. data/test/.blogs/views/music/staging/etc/externals.lt3 +0 -19
  326. data/test/.blogs/views/music/staging/etc/favicon.ico +0 -0
  327. data/test/.blogs/views/music/staging/etc/misc.js +0 -6
  328. data/test/.blogs/views/music/staging/global.lt3 +0 -22
  329. data/test/.blogs/views/music/staging/navbar/about.html +0 -6
  330. data/test/.blogs/views/music/staging/navbar/contact.html +0 -6
  331. data/test/.blogs/views/music/staging/navbar/navbar.lt3 +0 -6
  332. data/test/.blogs/views/music/staging/post/generate.lt3 +0 -26
  333. data/test/.blogs/views/music/staging/post/head.lt3 +0 -4
  334. data/test/.blogs/views/music/staging/post/index.html +0 -17
  335. data/test/.blogs/views/music/staging/post/index.lt3 +0 -16
  336. data/test/.blogs/views/music/staging/post/permalink.lt3 +0 -26
  337. data/test/.blogs/views/music/staging/recent.html +0 -44
  338. data/test/.blogs/views/music/staging/remember-modest-mouse.html +0 -51
  339. data/test/.blogs/views/music/staging/sidebar/README +0 -3
  340. data/test/.blogs/views/music/staging/vars.lt3 +0 -2
  341. data/test/.blogs/views/music/staging/widgets/README +0 -4
  342. data/test/.blogs/views/music/staging/widgets/ad/ad.lt3 +0 -12
  343. data/test/.blogs/views/music/staging/widgets/calendar/calendar.lt3 +0 -6
  344. data/test/.blogs/views/music/staging/widgets/news/list.data +0 -4
  345. data/test/.blogs/views/music/staging/widgets/news/news.lt3 +0 -3
  346. data/test/.blogs/views/music/staging/widgets/pages/README +0 -2
  347. data/test/.blogs/views/music/staging/widgets/pages/disclaim.lt3 +0 -6
  348. data/test/.blogs/views/music/staging/widgets/pages/faq.lt3 +0 -6
  349. data/test/.blogs/views/music/staging/widgets/pages/generated.lt3 +0 -4
  350. data/test/.blogs/views/music/staging/widgets/pages/lifestory.lt3 +0 -6
  351. data/test/.blogs/views/music/staging/widgets/pages/like-dislike.lt3 +0 -6
  352. data/test/.blogs/views/music/staging/widgets/pages/list.data +0 -4
  353. data/test/.blogs/views/music/staging/widgets/pages/main.html +0 -9
  354. data/test/.blogs/views/music/staging/widgets/pages/main.lt3 +0 -18
  355. data/test/.blogs/views/music/staging/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  356. data/test/.blogs/views/music/themes/standard/README +0 -59
  357. data/test/.blogs/views/music/themes/standard/blog/generate.lt3 +0 -17
  358. data/test/.blogs/views/music/themes/standard/blog/head.lt3 +0 -9
  359. data/test/.blogs/views/music/themes/standard/blog/index.lt3 +0 -6
  360. data/test/.blogs/views/music/themes/standard/blog/post_entry.lt3 +0 -19
  361. data/test/.blogs/views/music/themes/standard/etc/blog.css +0 -34
  362. data/test/.blogs/views/music/themes/standard/etc/blog.css.lt3 +0 -36
  363. data/test/.blogs/views/music/themes/standard/etc/externals.lt3 +0 -19
  364. data/test/.blogs/views/music/themes/standard/etc/favicon.ico +0 -0
  365. data/test/.blogs/views/music/themes/standard/etc/misc.js +0 -6
  366. data/test/.blogs/views/music/themes/standard/global.lt3 +0 -22
  367. data/test/.blogs/views/music/themes/standard/navbar/about.html +0 -6
  368. data/test/.blogs/views/music/themes/standard/navbar/contact.html +0 -6
  369. data/test/.blogs/views/music/themes/standard/navbar/navbar.lt3 +0 -6
  370. data/test/.blogs/views/music/themes/standard/post/generate.lt3 +0 -26
  371. data/test/.blogs/views/music/themes/standard/post/head.lt3 +0 -4
  372. data/test/.blogs/views/music/themes/standard/post/index.lt3 +0 -16
  373. data/test/.blogs/views/music/themes/standard/post/permalink.lt3 +0 -26
  374. data/test/.blogs/views/music/themes/standard/sidebar/README +0 -3
  375. data/test/.blogs/views/music/themes/standard/widgets/README +0 -4
  376. data/test/.blogs/views/music/themes/standard/widgets/ad/ad.lt3 +0 -12
  377. data/test/.blogs/views/music/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  378. data/test/.blogs/views/music/themes/standard/widgets/news/list.data +0 -4
  379. data/test/.blogs/views/music/themes/standard/widgets/news/news.lt3 +0 -3
  380. data/test/.blogs/views/music/themes/standard/widgets/pages/README +0 -2
  381. data/test/.blogs/views/music/themes/standard/widgets/pages/disclaim.lt3 +0 -6
  382. data/test/.blogs/views/music/themes/standard/widgets/pages/faq.lt3 +0 -6
  383. data/test/.blogs/views/music/themes/standard/widgets/pages/generated.lt3 +0 -4
  384. data/test/.blogs/views/music/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  385. data/test/.blogs/views/music/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  386. data/test/.blogs/views/music/themes/standard/widgets/pages/list.data +0 -4
  387. data/test/.blogs/views/music/themes/standard/widgets/pages/main.html +0 -9
  388. data/test/.blogs/views/music/themes/standard/widgets/pages/main.lt3 +0 -18
  389. data/test/.blogs/views/music/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  390. data/test/.blogs/views/test_view/last_published +0 -1
  391. data/test/.blogs/views/test_view/publish +0 -5
  392. data/test/.blogs/views/test_view/remote/etc/blog.css +0 -34
  393. data/test/.blogs/views/test_view/remote/etc/blog.css.lt3 +0 -36
  394. data/test/.blogs/views/test_view/remote/etc/externals.lt3 +0 -19
  395. data/test/.blogs/views/test_view/remote/etc/favicon.ico +0 -0
  396. data/test/.blogs/views/test_view/remote/etc/misc.js +0 -6
  397. data/test/.blogs/views/test_view/remote/widgets/README +0 -4
  398. data/test/.blogs/views/test_view/remote/widgets/ad/ad.lt3 +0 -12
  399. data/test/.blogs/views/test_view/remote/widgets/calendar/calendar.lt3 +0 -6
  400. data/test/.blogs/views/test_view/remote/widgets/news/list.data +0 -4
  401. data/test/.blogs/views/test_view/remote/widgets/news/news.lt3 +0 -3
  402. data/test/.blogs/views/test_view/remote/widgets/pages/README +0 -2
  403. data/test/.blogs/views/test_view/remote/widgets/pages/disclaim.lt3 +0 -6
  404. data/test/.blogs/views/test_view/remote/widgets/pages/faq.lt3 +0 -6
  405. data/test/.blogs/views/test_view/remote/widgets/pages/generated.lt3 +0 -4
  406. data/test/.blogs/views/test_view/remote/widgets/pages/lifestory.lt3 +0 -6
  407. data/test/.blogs/views/test_view/remote/widgets/pages/like-dislike.lt3 +0 -6
  408. data/test/.blogs/views/test_view/remote/widgets/pages/list.data +0 -4
  409. data/test/.blogs/views/test_view/remote/widgets/pages/main.html +0 -9
  410. data/test/.blogs/views/test_view/remote/widgets/pages/main.lt3 +0 -18
  411. data/test/.blogs/views/test_view/remote/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  412. data/test/.blogs/views/test_view/staging/README +0 -59
  413. data/test/.blogs/views/test_view/staging/blog/generate.lt3 +0 -17
  414. data/test/.blogs/views/test_view/staging/blog/head.lt3 +0 -9
  415. data/test/.blogs/views/test_view/staging/blog/index.lt3 +0 -6
  416. data/test/.blogs/views/test_view/staging/blog/post_entry.lt3 +0 -19
  417. data/test/.blogs/views/test_view/staging/etc/blog.css +0 -34
  418. data/test/.blogs/views/test_view/staging/etc/blog.css.lt3 +0 -36
  419. data/test/.blogs/views/test_view/staging/etc/externals.lt3 +0 -19
  420. data/test/.blogs/views/test_view/staging/etc/favicon.ico +0 -0
  421. data/test/.blogs/views/test_view/staging/etc/misc.js +0 -6
  422. data/test/.blogs/views/test_view/staging/global.lt3 +0 -22
  423. data/test/.blogs/views/test_view/staging/navbar/about.html +0 -6
  424. data/test/.blogs/views/test_view/staging/navbar/contact.html +0 -6
  425. data/test/.blogs/views/test_view/staging/navbar/navbar.lt3 +0 -6
  426. data/test/.blogs/views/test_view/staging/post/generate.lt3 +0 -26
  427. data/test/.blogs/views/test_view/staging/post/head.lt3 +0 -4
  428. data/test/.blogs/views/test_view/staging/post/index.lt3 +0 -16
  429. data/test/.blogs/views/test_view/staging/post/permalink.lt3 +0 -26
  430. data/test/.blogs/views/test_view/staging/sidebar/README +0 -3
  431. data/test/.blogs/views/test_view/staging/widgets/README +0 -4
  432. data/test/.blogs/views/test_view/staging/widgets/ad/ad.lt3 +0 -12
  433. data/test/.blogs/views/test_view/staging/widgets/calendar/calendar.lt3 +0 -6
  434. data/test/.blogs/views/test_view/staging/widgets/news/list.data +0 -4
  435. data/test/.blogs/views/test_view/staging/widgets/news/news.lt3 +0 -3
  436. data/test/.blogs/views/test_view/staging/widgets/pages/README +0 -2
  437. data/test/.blogs/views/test_view/staging/widgets/pages/disclaim.lt3 +0 -6
  438. data/test/.blogs/views/test_view/staging/widgets/pages/faq.lt3 +0 -6
  439. data/test/.blogs/views/test_view/staging/widgets/pages/generated.lt3 +0 -4
  440. data/test/.blogs/views/test_view/staging/widgets/pages/lifestory.lt3 +0 -6
  441. data/test/.blogs/views/test_view/staging/widgets/pages/like-dislike.lt3 +0 -6
  442. data/test/.blogs/views/test_view/staging/widgets/pages/list.data +0 -4
  443. data/test/.blogs/views/test_view/staging/widgets/pages/main.html +0 -9
  444. data/test/.blogs/views/test_view/staging/widgets/pages/main.lt3 +0 -18
  445. data/test/.blogs/views/test_view/staging/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  446. data/test/.blogs/views/test_view/themes/standard/README +0 -59
  447. data/test/.blogs/views/test_view/themes/standard/blog/generate.lt3 +0 -17
  448. data/test/.blogs/views/test_view/themes/standard/blog/head.lt3 +0 -9
  449. data/test/.blogs/views/test_view/themes/standard/blog/index.lt3 +0 -6
  450. data/test/.blogs/views/test_view/themes/standard/blog/post_entry.lt3 +0 -19
  451. data/test/.blogs/views/test_view/themes/standard/etc/blog.css +0 -34
  452. data/test/.blogs/views/test_view/themes/standard/etc/blog.css.lt3 +0 -36
  453. data/test/.blogs/views/test_view/themes/standard/etc/externals.lt3 +0 -19
  454. data/test/.blogs/views/test_view/themes/standard/etc/favicon.ico +0 -0
  455. data/test/.blogs/views/test_view/themes/standard/etc/misc.js +0 -6
  456. data/test/.blogs/views/test_view/themes/standard/global.lt3 +0 -22
  457. data/test/.blogs/views/test_view/themes/standard/navbar/about.html +0 -6
  458. data/test/.blogs/views/test_view/themes/standard/navbar/contact.html +0 -6
  459. data/test/.blogs/views/test_view/themes/standard/navbar/navbar.lt3 +0 -6
  460. data/test/.blogs/views/test_view/themes/standard/post/generate.lt3 +0 -26
  461. data/test/.blogs/views/test_view/themes/standard/post/head.lt3 +0 -4
  462. data/test/.blogs/views/test_view/themes/standard/post/index.lt3 +0 -16
  463. data/test/.blogs/views/test_view/themes/standard/post/permalink.lt3 +0 -26
  464. data/test/.blogs/views/test_view/themes/standard/sidebar/README +0 -3
  465. data/test/.blogs/views/test_view/themes/standard/widgets/README +0 -4
  466. data/test/.blogs/views/test_view/themes/standard/widgets/ad/ad.lt3 +0 -12
  467. data/test/.blogs/views/test_view/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  468. data/test/.blogs/views/test_view/themes/standard/widgets/news/list.data +0 -4
  469. data/test/.blogs/views/test_view/themes/standard/widgets/news/news.lt3 +0 -3
  470. data/test/.blogs/views/test_view/themes/standard/widgets/pages/README +0 -2
  471. data/test/.blogs/views/test_view/themes/standard/widgets/pages/disclaim.lt3 +0 -6
  472. data/test/.blogs/views/test_view/themes/standard/widgets/pages/faq.lt3 +0 -6
  473. data/test/.blogs/views/test_view/themes/standard/widgets/pages/generated.lt3 +0 -4
  474. data/test/.blogs/views/test_view/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  475. data/test/.blogs/views/test_view/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  476. data/test/.blogs/views/test_view/themes/standard/widgets/pages/list.data +0 -4
  477. data/test/.blogs/views/test_view/themes/standard/widgets/pages/main.html +0 -9
  478. data/test/.blogs/views/test_view/themes/standard/widgets/pages/main.lt3 +0 -18
  479. data/test/.blogs/views/test_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
  480. data/themes/standard/README +0 -59
  481. data/themes/standard/blog/generate.lt3 +0 -17
  482. data/themes/standard/blog/head.lt3 +0 -9
  483. data/themes/standard/blog/index.lt3 +0 -5
  484. data/themes/standard/blog/post_entry.lt3 +0 -19
  485. data/themes/standard/blog/recent.lt3 +0 -2
  486. data/themes/standard/etc/blog.css.lt3 +0 -36
  487. data/themes/standard/etc/externals.lt3 +0 -19
  488. data/themes/standard/etc/favicon.ico +0 -0
  489. data/themes/standard/etc/misc.js +0 -6
  490. data/themes/standard/global.lt3 +0 -22
  491. data/themes/standard/navbar/about.html +0 -6
  492. data/themes/standard/navbar/contact.html +0 -6
  493. data/themes/standard/navbar/navbar.lt3 +0 -6
  494. data/themes/standard/post/generate.lt3 +0 -24
  495. data/themes/standard/post/head.lt3 +0 -4
  496. data/themes/standard/post/index.lt3 +0 -16
  497. data/themes/standard/post/permalink.lt3 +0 -26
  498. data/themes/standard/sidebar/README +0 -3
  499. data/themes/standard/widgets/README +0 -4
  500. data/themes/standard/widgets/ad/ad.lt3 +0 -15
  501. data/themes/standard/widgets/calendar/calendar.lt3 +0 -6
  502. data/themes/standard/widgets/news/list.data +0 -4
  503. data/themes/standard/widgets/news/news.lt3 +0 -2
  504. data/themes/standard/widgets/pages/README +0 -2
  505. data/themes/standard/widgets/pages/disclaim.html +0 -6
  506. data/themes/standard/widgets/pages/disclaim.lt3 +0 -5
  507. data/themes/standard/widgets/pages/faq.html +0 -7
  508. data/themes/standard/widgets/pages/faq.lt3 +0 -6
  509. data/themes/standard/widgets/pages/generated.lt3 +0 -4
  510. data/themes/standard/widgets/pages/lifestory.html +0 -7
  511. data/themes/standard/widgets/pages/lifestory.lt3 +0 -6
  512. data/themes/standard/widgets/pages/like-dislike.html +0 -7
  513. data/themes/standard/widgets/pages/like-dislike.lt3 +0 -6
  514. data/themes/standard/widgets/pages/list.data +0 -4
  515. data/themes/standard/widgets/pages/main.html +0 -9
  516. data/themes/standard/widgets/pages/pages.lt3 +0 -2
  517. data/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae634ff247c9e37f85f453412336c0256c6c2d51277b602d3d6a730cc6690d0f
4
- data.tar.gz: 6c1820b2b838177cf75ae2762143ac476d63800ca47fdd5965885c4e84c653c9
3
+ metadata.gz: e1ecf6f4cbaffb7d77bd5669b64be6f790db0f8cd59b6c7f8a7d1385685b35df
4
+ data.tar.gz: ef364507a3a26dc3c53167b430c8261e9fd4fd244e44978810ff64a960645a96
5
5
  SHA512:
6
- metadata.gz: 373bb671173802b8a18391facbaa1f08623e2983b4af30e85b9df581fad0a8513aa0da517bead1be0cee1ae8ef1cf36d24d3be84741741dbdb1c51c30e40041b
7
- data.tar.gz: 326dee189dd41fe401004684e05bc4b8587809911d2ad4ac0c9555e7da238a3febc9e4fd12b970ac4db9c47818cc4ece7b420f67807216456ed3639b6e0611b9
6
+ metadata.gz: 917b2921787dfdf80eeda5dd4fa02dbca23b7f96798d07328cfa5809c226f2cb5db5c7c08c31eab6cdc40216c67766340951f08b6b007de28a195bb280093363
7
+ data.tar.gz: 1e64d1d1746b7d9939845f2da30da8ad5e70173307d37fcabb22a147d0a1aba9e1098613fe5e082593f3f4033a74ffe8d27a0b3607f7667322a8d949a26e3427
Binary file
@@ -3,6 +3,8 @@ require 'fileutils'
3
3
 
4
4
  # Home = Dir.pwd # unless Home
5
5
 
6
+ LEXT = ".lt3"
7
+
6
8
  module RuneBlog::Helpers
7
9
 
8
10
  def copy(src, dst)
@@ -31,23 +33,57 @@ exit unless rc
31
33
  # end
32
34
  end
33
35
 
34
- def stale?(src, dst)
36
+ def stale?(src, dst, force = false)
35
37
  log!(enter: __method__, args: [src, dst])
38
+ raise "Source #{src} not found in #{Dir.pwd}" unless File.exist?(src)
39
+ return true if force
36
40
  return true unless File.exist?(dst)
37
41
  return true if File.mtime(src) > File.mtime(dst)
38
42
  return false
39
43
  end
40
44
 
41
- def livetext(src, dst=nil)
42
- log!(enter: __method__, args: [src, dst])
43
- src << ".lt3" unless src.end_with?(".lt3")
44
- if dst
45
- dst << ".html" unless dst.end_with?(".html")
46
- else
47
- dst = src.sub(/.lt3$/, "")
45
+ # def livetext(src, dst=nil, dir=".")
46
+ # log!(enter: __method__, args: [src, dst])
47
+ # src << ".lt3" unless src.end_with?(".lt3")
48
+ # if dst
49
+ # dst << ".html" unless dst.end_with?(".html")
50
+ # else
51
+ # dst = src.sub(/.lt3$/, "")
52
+ # end
53
+ ## return unless stale?(src, dst)
54
+ # Dir.chdir(dir) { system("livetext #{src} >#{dst}") }
55
+ # end
56
+ #
57
+ # def livetext!(src, dst=nil, dir=".")
58
+ # log!(enter: __method__, args: [src, dst])
59
+ # src << ".lt3" unless src.end_with?(".lt3")
60
+ # if dst
61
+ # dst << ".html" unless dst.end_with?(".html")
62
+ # else
63
+ # dst = src.sub(/.lt3$/, "")
64
+ # end
65
+ ## return unless stale?(src, dst)
66
+ #STDERR.puts "-- livetext #{src} >#{dst} \n in: #{Dir.pwd}\n from: #{caller[0]}"
67
+ # Dir.chdir(dir) { system("livetext #{src} >#{dst}") }
68
+ #STDERR.puts "... completed"
69
+ # end
70
+
71
+ def xlate(cwd: Dir.pwd, src:,
72
+ dst: (strip = true; src.sub(/.lt3$/,"")),
73
+ copy: nil, debug: false, force: false)
74
+ src += LEXT unless src.end_with?(LEXT)
75
+ dst += ".html" unless dst.end_with?(".html") || strip
76
+ Dir.chdir(cwd) do
77
+ return unless stale?(src, dst, force)
78
+ if debug
79
+ STDERR.puts "-- xlate #{src} >#{dst}"
80
+ STDERR.puts " in: #{Dir.pwd}"
81
+ STDERR.puts " from: #{caller[0]}"
82
+ STDERR.puts " copy: #{copy}" if copy
83
+ end
84
+ rc = system("livetext #{src} >#{dst}")
48
85
  end
49
- # return unless stale?(src, dst)
50
- system("livetext #{src} >#{dst}")
86
+ STDERR.puts "...completed (shell returned #{rc})" if debug
51
87
  end
52
88
 
53
89
  def get_root
@@ -19,7 +19,7 @@ def init_liveblog # FIXME - a lot of this logic sucks
19
19
  @view_name = @blog.view.name
20
20
  @vdir = @blog.view.dir
21
21
  @version = RuneBlog::VERSION
22
- @theme = @vdir + "/themes/standard/"
22
+ @theme = @vdir/:themes/:standard
23
23
  end
24
24
 
25
25
  # FIXME - stale? and livetext are duplicated from helpers-blog
@@ -96,38 +96,30 @@ def list!
96
96
  _optional_blank_line
97
97
  end
98
98
 
99
- def html_body(file)
99
+ def _html_body(file)
100
100
  file.puts "<html>\n <body>"
101
101
  yield
102
102
  file.puts " </body>\n</html>"
103
103
  end
104
104
 
105
- def make_news_links
106
- # FIXME remember strings may not be safe
107
- line = _data.chomp
108
- input, cardfile, mainfile, card_title = *line.split(" ", 4)
109
- pairs = File.readlines(input).map {|line| line.chomp.split(",", 2) }
110
- # HTML for main area (iframe)
111
- File.open("#{mainfile}.html", "w") do |f|
112
- html_body(f) do
113
- f.puts "<h1>#{card_title}</h1>"
114
- pairs.each do |file, title|
115
- f.puts %[<a style="text-decoration: none; font-size: 24px" href="#{file}">#{title}</a> <br>]
116
- end
117
- end
118
- end
105
+ def _write_card(cardfile, mainfile, pairs, card_title, tag, relative: true)
119
106
  # HTML for sidebar card
107
+ log!(str: "Creating #{cardfile}.html", pwd: true)
108
+ # TTY.puts "Creating #{cardfile}.html - pwd = #{Dir.pwd}"
120
109
  File.open("#{cardfile}.html", "w") do |f|
121
110
  f.puts <<-EOS
122
111
  <div class="card mb-3">
123
112
  <div class="card-body">
124
113
  <h5 class="card-title">
125
114
  <a href="javascript: void(0)"
126
- onclick="javascript:open_main('widgets/news/#{mainfile}.html')"
115
+ onclick="javascript:open_main('widgets/#{tag}/#{mainfile}.html')"
127
116
  style="text-decoration: none; color: black">#{card_title}</a>
128
117
  </h5>
129
118
  EOS
119
+ log!(str: "Writing data pairs to #{cardfile}.html", pwd: true)
120
+ top = :widgets/tag # FIXME ???
130
121
  pairs.each do |file, title|
122
+ # took out #{top}#{file}
131
123
  f.puts <<-EOS
132
124
  <li class="list-group-item"> <a href="javascript: void(0)"
133
125
  onclick="javascript:open_main('#{file}')">#{title}</a> </li>
@@ -140,6 +132,35 @@ def make_news_links
140
132
  end
141
133
  end
142
134
 
135
+ def _write_main(mainfile, pairs, card_title)
136
+ # HTML for main area (iframe)
137
+ log!(str: "Creating #{mainfile}.html", pwd: true)
138
+ File.open("#{mainfile}.html", "w") do |f|
139
+ _html_body(f) do
140
+ f.puts "<h1>#{card_title}</h1>"
141
+ pairs.each do |file, title|
142
+ main = _main(file)
143
+ f.puts %[<a style="text-decoration: none; font-size: 24px" #{main}>#{title}</a> <br>]
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ def make_main_links
150
+ log!(enter: __method__)
151
+ # FIXME remember strings may not be safe
152
+ line = _data.chomp
153
+ tag, card_title = *line.split(" ", 2)
154
+ cardfile, mainfile = "#{tag}-card", "#{tag}-main"
155
+ input = "list.data"
156
+ log!(str: "Reading #{input}", pwd: true)
157
+ pairs = File.readlines(input).map {|line| line.chomp.split(",", 2) }
158
+ _write_main(mainfile, pairs, card_title)
159
+ widget_relative = false # (tag != "news") # FIXME kludge!!!
160
+ _write_card(cardfile, mainfile, pairs, card_title, tag, relative: widget_relative)
161
+ log!(str: "...returning from method", pwd: true)
162
+ end
163
+
143
164
  ### inset
144
165
 
145
166
  def inset
@@ -209,7 +230,7 @@ end
209
230
  def image # primitive so far
210
231
  _debug "img: huh? <img src=#{_args.first}></img>"
211
232
  fname = _args.first
212
- path = "assets/#{fname}"
233
+ path = :assets/fname
213
234
  _out "<img src=#{path}></img>"
214
235
  _optional_blank_line
215
236
  end
@@ -236,23 +257,20 @@ def pin
236
257
  _optional_blank_line
237
258
  end
238
259
 
239
- def write_post
240
- raise "'post' was not called" unless @meta
241
- save = Dir.pwd
242
- @postdir.gsub!(/\/\//, "/") # FIXME unneeded?
243
- Dir.mkdir(@postdir) unless Dir.exist?(@postdir) # FIXME remember assets!
244
- Dir.chdir(@postdir)
245
- @meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
246
- @meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
260
+ def _write_metadata
247
261
  File.write("teaser.txt", @meta.teaser)
248
-
249
262
  fields = [:num, :title, :date, :pubdate, :views, :tags]
250
-
251
263
  fname2 = "metadata.txt"
252
264
  f2 = File.open(fname2, "w") do |f2|
253
265
  fields.each {|fld| f2.puts "#{fld}: #{@meta.send(fld)}" }
254
266
  end
255
- Dir.chdir(save)
267
+ end
268
+
269
+ def write_post
270
+ raise "'post' was not called" unless @meta
271
+ @meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
272
+ @meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
273
+ _write_metadata
256
274
  rescue => err
257
275
  puts "err = #{err}"
258
276
  puts err.backtrace.join("\n")
@@ -267,19 +285,25 @@ def teaser
267
285
  end
268
286
 
269
287
  def finalize
288
+ STDERR.puts :cp1
270
289
  unless @meta
271
290
  puts @live.body
272
291
  return
273
292
  end
293
+ STDERR.puts :cp4
274
294
  if @blog.nil?
275
295
  return @meta
276
296
  end
277
297
 
298
+ STDERR.puts :cp6
278
299
  @slug = @blog.make_slug(@meta)
300
+ STDERR.puts :cp7
279
301
  slug_dir = @slug
280
- @postdir = @blog.view.dir + "/posts/#{slug_dir}"
302
+ @postdir = @blog.view.dir/:posts/slug_dir
281
303
  STDERR.puts "--- finalize: pwd = #{Dir.pwd} postdir = #@postdir"
304
+ STDERR.puts :cp8
282
305
  write_post
306
+ STDERR.puts :cp9
283
307
  @meta
284
308
  end
285
309
 
@@ -423,10 +447,12 @@ def sidebar
423
447
  _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
424
448
  _args do |token|
425
449
  tag = token.chomp.strip.downcase
426
- # Doesn't handle "split personality" widgets yet
427
- Dir.chdir("widgets/#{tag}") do
428
- livetext tag, "card-#{tag}.html"
429
- _include_file "card-#{tag}.html"
450
+ wtag = :widgets/tag
451
+ raise "Can't find #{wtag}" unless Dir.exist?(wtag)
452
+ Dir.chdir(wtag) do
453
+ tcard = "#{tag}-card.html"
454
+ livetext tag, tcard
455
+ _include_file tcard
430
456
  end
431
457
  end
432
458
  _out %[</div>]
@@ -490,8 +516,8 @@ def _post_lookup(postid) # side-effect
490
516
  # .. = templates, ../.. = views/thisview
491
517
  slug = title = date = teaser_text = nil
492
518
 
493
- dir_posts = @vdir + "/posts"
494
- posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
519
+ dir_posts = @vdir/:posts
520
+ posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
495
521
  posts.select! {|x| File.directory?(x) }
496
522
 
497
523
  post = posts.select {|x| File.basename(x).to_i == postid }
@@ -606,7 +632,7 @@ def tag_cloud
606
632
  _out open
607
633
  _body do |line|
608
634
  line.chomp!
609
- url, classname, cdata = line.split(",", 4)
635
+ url, classname, cdata = line.split(",", 3)
610
636
  main = _main(url)
611
637
  _out %[<a #{main} class="#{classname}">#{cdata}</a>]
612
638
  end
@@ -648,7 +674,7 @@ def navbar
648
674
  first = false
649
675
  _out %[<li class="nav-item active"> <a class="nav-link" href="#{href}">#{cdata}<span class="sr-only">(current)</span></a> </li>]
650
676
  else
651
- main = _main("navbar/#{href}")
677
+ main = _main(:navbar/href)
652
678
  _out %[<li class="nav-item"> <a class="nav-link" #{main}>#{cdata}</a> </li>]
653
679
  end
654
680
  end
@@ -0,0 +1,14 @@
1
+ module PathSep
2
+ def /(right)
3
+ s1 = self.to_s.dup
4
+ s2 = right.to_s.dup
5
+ s1 << "/" unless s2.end_with?("/") || s2.start_with?("/")
6
+ path = s1 + s2
7
+ path.gsub!("//", "/")
8
+ path
9
+ end
10
+ end
11
+
12
+ String.include(PathSep)
13
+ Symbol.include(PathSep)
14
+
@@ -10,23 +10,25 @@ require 'view'
10
10
  require 'publish'
11
11
  require 'post'
12
12
 
13
+ require 'pathmagic'
14
+
13
15
  ###
14
16
 
15
17
  class RuneBlog
16
18
 
17
19
  DotDir = ".blogs"
18
20
  ConfigFile = "config"
19
- Themes = RuneBlog::Path + "/../themes"
21
+ Themes = RuneBlog::Path/"../themes"
20
22
 
21
- make_exception(:FileNotFound, "File $1 was not found")
23
+ make_exception(:FileNotFound, "File $1 was not found")
22
24
  make_exception(:BlogRepoAlreadyExists, "Blog repo $1 already exists")
23
- make_exception(:CantAssignView, "$1 is not a view")
24
- make_exception(:ViewAlreadyExists, "View $1 already exists")
25
- make_exception(:DirAlreadyExists, "Directory $1 already exists")
26
- make_exception(:CantCreateDir, "Can't create directory $1")
27
- make_exception(:EditorProblem, "Could not edit $1")
28
- make_exception(:NoSuchView, "No such view: $1")
29
- make_exception(:NoBlogAccessor, "Runeblog.blog is not set")
25
+ make_exception(:CantAssignView, "$1 is not a view")
26
+ make_exception(:ViewAlreadyExists, "View $1 already exists")
27
+ make_exception(:DirAlreadyExists, "Directory $1 already exists")
28
+ make_exception(:CantCreateDir, "Can't create directory $1")
29
+ make_exception(:EditorProblem, "Could not edit $1")
30
+ make_exception(:NoSuchView, "No such view: $1")
31
+ make_exception(:NoBlogAccessor, "Runeblog.blog is not set")
30
32
 
31
33
  class << self
32
34
  attr_accessor :blog
@@ -43,7 +45,7 @@ class RuneBlog
43
45
  def self.create_new_blog_repo(dir = ".blogs")
44
46
  log!(enter: __method__, args: [dir])
45
47
  raise ArgumentError unless dir.is_a?(String) && ! dir.empty?
46
- root_dir = Dir.pwd + "/" + dir
48
+ root_dir = Dir.pwd/dir
47
49
  self.create(dir)
48
50
  rescue => err
49
51
  puts "Can't create blog repo: '#{dir}' - #{err}"
@@ -55,12 +57,12 @@ class RuneBlog
55
57
  # Crude - FIXME later - # What views are there? Publishing, etc.
56
58
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
57
59
  $_blog = self # Dumber still?
58
- root = Dir.pwd + "/" + root
60
+ root = Dir.pwd/root
59
61
  raise BlogRepoAlreadyExists if Dir.exist?(root)
60
62
  create_dirs(root)
61
63
  Dir.chdir(root) do
62
64
  system("cp #{RuneBlog::Path}/../empty_view.tgz .")
63
- create_dirs(:drafts, :views)
65
+ create_dirs(:drafts, :views, :posts)
64
66
  new_sequence
65
67
  end
66
68
  put_config(root: root)
@@ -74,7 +76,7 @@ class RuneBlog
74
76
  # Crude - FIXME later - # What views are there? Publishing, etc.
75
77
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
76
78
  $_blog = self # Dumber still?
77
- root = Dir.pwd + "/" + root
79
+ root = Dir.pwd/root
78
80
  blog = self.new(root)
79
81
  end
80
82
 
@@ -85,7 +87,7 @@ class RuneBlog
85
87
  $_blog = self # Dumber still?
86
88
 
87
89
  @root = root_dir
88
- file = @root + "/" + ConfigFile
90
+ file = @root/ConfigFile
89
91
  errmsg = "No config file! file = #{file.inspect} dir = #{Dir.pwd}"
90
92
  raise errmsg unless File.exist?(file)
91
93
 
@@ -99,6 +101,23 @@ class RuneBlog
99
101
  @post_tags = []
100
102
  end
101
103
 
104
+ def _deploy_local(dir)
105
+ log!(enter: __method__, args: [dir])
106
+ Dir.chdir(dir) do
107
+ views = File.readlines("metadata.txt").grep(/^.views /).first[7..-1].split
108
+ views.each {|v| system("cp *html #@root/views/#{v}/remote") }
109
+ end
110
+ end
111
+
112
+ def process_post(sourcefile)
113
+ log!(enter: __method__, args: [dir])
114
+ nslug = sourcefile.sub(/.lt3/, "")
115
+ dir = @root/:posts/nslug
116
+ create_dir(dir)
117
+ xlate cwd: dir, src: sourcefile, debug: true
118
+ _deploy_local(dir)
119
+ end
120
+
102
121
  def inspect
103
122
  log!(enter: __method__)
104
123
  str = "blog: "
@@ -130,7 +149,7 @@ class RuneBlog
130
149
 
131
150
  def _set_publisher
132
151
  log!(enter: __method__)
133
- file = @view.dir + "/publish"
152
+ file = @view.dir/:publish
134
153
  @view.publisher = nil
135
154
  return unless File.exist?(file)
136
155
  @view.publisher = RuneBlog::Publishing.new(read_config(file))
@@ -154,13 +173,13 @@ class RuneBlog
154
173
 
155
174
  def get_sequence
156
175
  log!(enter: __method__)
157
- File.read(root + "/sequence").to_i
176
+ File.read(@root/:sequence).to_i
158
177
  end
159
178
 
160
179
  def next_sequence
161
180
  log!(enter: __method__)
162
181
  @sequence += 1
163
- dump(@sequence, "#@root/sequence")
182
+ dump(@sequence, @root/:sequence)
164
183
  @sequence
165
184
  end
166
185
 
@@ -169,60 +188,73 @@ class RuneBlog
169
188
  v = str2view(v) if v.is_a?(String)
170
189
  raise ArgumentError unless v.nil? || v.is_a?(RuneBlog::View)
171
190
  v ||= @view
172
- @root + "/views/#{v}/"
191
+ return @root/:views/v
173
192
  end
174
193
 
175
194
  def self.exist?
176
195
  log!(enter: __method__)
177
- Dir.exist?(DotDir) && File.exist?(DotDir + "/" + ConfigFile)
196
+ Dir.exist?(DotDir) && File.exist?(DotDir/ConfigFile)
178
197
  end
179
198
 
180
- def _copy_to_staging
181
- copy!("themes/standard/", "staging/")
182
- copy!("themes/standard/widgets/", "staging/")
199
+ def make_dummy_publish_file(view_name)
200
+ log!(enter: __method__, args: [view_name])
201
+ vdir = @root/:views/view_name
202
+ pub = [:user, :server, :docroot, :path, :proto]
203
+ pub = pub.map {|x| x.to_s + ": undefined" }
204
+ pub = pub.join("\n") + "\n"
205
+ dump(pub, vdir/:publish)
183
206
  end
184
207
 
185
- def _copy_to_remote
186
- copy!("themes/standard/etc", "remote/")
187
- copy!("themes/standard/assets", "remote/")
188
- copy!("themes/standard/widgets", "remote/")
208
+ def mark_last_published(str)
209
+ log!(enter: __method__, args: [str])
210
+ dump(str, "last_published")
189
211
  end
190
212
 
191
- def create_view(arg)
192
- log!(enter: __method__, args: [arg])
193
- raise ArgumentError unless arg.is_a?(String) && ! arg.empty?
194
-
195
- names = self.views.map(&:to_s)
196
- raise ViewAlreadyExists(arg) if names.include?(arg)
197
-
198
- vdir = arg.dup
199
- raise DirAlreadyExists(vdir) if Dir.exist?(vdir)
213
+ def add_view(view_name)
214
+ log!(enter: __method__, args: [view_name])
215
+ view = RuneBlog::View.new(view_name)
216
+ @view = view # current view
217
+ @views << view # all views
218
+ view
219
+ end
200
220
 
221
+ def make_empty_view_tree(view_name)
222
+ log!(enter: __method__, args: [view_name])
201
223
  Dir.chdir(@root) do
202
224
  cmd1 = "tar zxvf empty_view.tgz >/dev/null 2>&1"
203
- cmd2 = "cp -r empty_view views/#{arg}"
225
+ cmd2 = "cp -r empty_view views/#{view_name}"
204
226
  system(cmd1)
205
227
  system(cmd2)
206
228
  end
229
+ end
207
230
 
208
- Dir.chdir("#@root/views/#{vdir}") do
209
- livetext "themes/standard/blog/generate", "remote/index"
210
- pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
211
- dump(pub, "publish")
231
+ def check_valid_new_view(view_name)
232
+ log!(enter: __method__, args: [view_name])
233
+ raise ArgumentError unless view_name.is_a?(String)
234
+ raise ArgumentError if view_name.empty?
235
+ names = self.views.map(&:to_s)
236
+ bad = names.include?(view_name)
237
+ raise ViewAlreadyExists(view_name) if bad
238
+ vdir = @root/:views/view_name
239
+ raise DirAlreadyExists(view_name) if Dir.exist?(vdir)
240
+ return true # hm?
241
+ end
212
242
 
213
- view = RuneBlog::View.new(arg)
214
- self.view = view
215
- dump("Initial creation", "last_published")
216
- end
217
- @views << view
218
- @views
243
+ def create_view(view_name)
244
+ log!(enter: __method__, args: [view_name])
245
+ check_valid_new_view(view_name)
246
+ make_empty_view_tree(view_name)
247
+ make_dummy_publish_file(view_name)
248
+ mark_last_published("Initial creation")
249
+ add_view(view_name)
219
250
  end
220
251
 
221
252
  def delete_view(name, force = false)
222
253
  log!(enter: __method__, args: [name, force])
223
254
  raise ArgumentError unless name.is_a?(String) && ! name.empty?
224
255
  if force
225
- system("rm -rf #@root/views/#{name}")
256
+ vname = @root/:views/name
257
+ system("rm -rf #{vname}")
226
258
  @views -= [str2view(name)]
227
259
  end
228
260
  end
@@ -230,18 +262,17 @@ class RuneBlog
230
262
  def view_files
231
263
  log!(enter: __method__)
232
264
  vdir = self.view.dir
233
- files = ["#{vdir}/index.html"]
234
- files += posts.map {|x| "#{vdir}/#{x}" }
235
- # Huh?
236
- files.reject! {|f| File.mtime(f) < File.mtime("#{vdir}/last_published") }
265
+ files = [vdir/"index.html"]
266
+ files += posts.map {|x| vdir/x }
267
+ files.reject! {|f| File.mtime(f) < File.mtime(vdir/:last_published) }
237
268
  end
238
269
 
239
270
  def post_lookup(postid) # side-effect?
240
271
  log!(enter: __method__, args: [postid])
241
272
  slug = title = date = teaser_text = nil
242
273
 
243
- dir_posts = @vdir + "/posts"
244
- posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
274
+ dir_posts = @vdir/:posts
275
+ posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
245
276
  posts.select! {|x| File.directory?(x) }
246
277
 
247
278
  post = posts.select {|x| File.basename(x).to_i == postid }
@@ -255,13 +286,13 @@ class RuneBlog
255
286
  log!(enter: __method__, args: [slug])
256
287
  id = slug.to_i
257
288
  text = nil
258
- post_entry_name = @theme + "/blog/post_entry.lt3"
289
+ post_entry_name = @theme/"blog/post_entry.lt3"
259
290
  @_post_entry ||= File.read(post_entry_name)
260
291
  vp = post_lookup(id)
261
292
  nslug, aslug, title, date, teaser_text =
262
293
  vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text
263
294
  path = vp.path
264
- url = "#{aslug}.html" # Should be relative to .blogs!! FIXME
295
+ url = aslug + ".html"
265
296
  date = ::Date.parse(date)
266
297
  date = date.strftime("%B %e<br>%Y")
267
298
  text = interpolate(@_post_entry, binding)
@@ -271,9 +302,9 @@ class RuneBlog
271
302
  def collect_recent_posts(file)
272
303
  log!(enter: __method__, args: [file])
273
304
  posts = nil
274
- dir_posts = @vdir + "/posts"
305
+ dir_posts = @vdir/:posts
275
306
  entries = Dir.entries(dir_posts)
276
- posts = entries.grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
307
+ posts = entries.grep(/^\d\d\d\d/).map {|x| dir_posts/x }
277
308
  posts.select! {|x| File.directory?(x) }
278
309
  # directories that start with four digits
279
310
  posts = posts.sort {|a, b| b.to_i <=> a.to_i } # sort descending
@@ -283,7 +314,6 @@ class RuneBlog
283
314
  <head><link rel="stylesheet" href="etc/blog.css"></head>
284
315
  <body>
285
316
  HTML
286
- # posts = _find_recent_posts
287
317
  wanted = [5, posts.size].min # estimate how many we want?
288
318
  enum = posts.each
289
319
  wanted.times do
@@ -292,19 +322,19 @@ class RuneBlog
292
322
  text << teaser(postid) # side effect! calls _out
293
323
  end
294
324
  text << "</body></html>"
295
- File.write("#@vdir/remote/"+file, text) # FIXME ???
296
- iframe_text = <<-HTML
297
- <iframe name="main" style="width: 100vw;height: 100vh;position: relative;"
298
- src='recent.html' width=100% frameborder="0" allowfullscreen>
299
- </iframe>
300
- HTML
325
+ File.write(@vdir/:remote/file, text)
326
+ # iframe_text = <<-HTML
327
+ # <iframe name="main" style="width: 100vw;height: 100vh;position: relative;"
328
+ # src='recent.html' width=100% frameborder="0" allowfullscreen>
329
+ # </iframe>
330
+ # HTML
301
331
  # FIXME ^ serves no purpose??
302
332
  end
303
333
 
304
334
  def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
305
335
  log!(enter: __method__, args: [title, testing, teaser, body, other_views])
306
336
  meta = nil
307
- Dir.chdir(self.view.dir) do
337
+ Dir.chdir(@root/:posts) do
308
338
  post = Post.create(title: title, teaser: teaser, body: body, other_views: other_views)
309
339
  post.edit unless testing
310
340
  post.build
@@ -319,9 +349,10 @@ class RuneBlog
319
349
  def edit_initial_post(file, testing = false)
320
350
  log!(enter: __method__, args: [file, testing])
321
351
  debug "=== edit_initial_post #{file.inspect} => #{sourcefile}"
322
- sourcefile = "#@root/drafts/#{file}"
352
+ sourcefile = @root/:drafts/file
323
353
  result = system("#@editor #{sourcefile} +8") unless testing
324
354
  raise EditorProblem(sourcefile) unless result
355
+ process_post(sourcefile)
325
356
  nil
326
357
  rescue => err
327
358
  error(err)
@@ -329,14 +360,14 @@ class RuneBlog
329
360
 
330
361
  def posts
331
362
  log!(enter: __method__)
332
- dir = self.view.dir + "/posts"
363
+ dir = self.view.dir/:posts
333
364
  posts = Dir.entries(dir).grep(/^\d{4}/)
334
365
  posts
335
366
  end
336
367
 
337
368
  def drafts
338
369
  log!(enter: __method__)
339
- dir = "#@root/drafts"
370
+ dir = @root/:drafts
340
371
  drafts = Dir.entries(dir).grep(/^\d{4}.*/)
341
372
  end
342
373
 
@@ -352,16 +383,16 @@ class RuneBlog
352
383
  def generate_index(view) # FIXME delete?
353
384
  log!(enter: __method__, args: [view], pwd: true, dir: true)
354
385
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
355
- @vdir = @root + "/views/#{view}"
386
+ @vdir = @root/:views/view
356
387
  collect_recent_posts("recent.html")
357
388
  end
358
389
 
359
390
  def generate_view(view) # huh?
360
391
  log!(enter: __method__, args: [view])
361
392
  generate_index(view) # recent posts (recent.html)
362
- Dir.chdir(@root + "/views/#{view}/themes/standard") do
363
- livetext "blog/generate.lt3", "../../remote/index.html"
364
- end
393
+ vdir = @root/:views/view
394
+ xlate cwd: vdir/:themes/:standard,
395
+ src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
365
396
  end
366
397
 
367
398
  def _get_views(draft)
@@ -379,45 +410,77 @@ class RuneBlog
379
410
  log!(enter: __method__, args: [draft, view])
380
411
  fname = File.basename(draft)
381
412
  noext = fname.sub(/.lt3$/, "")
382
- vdir = "#@root/views/#{view}"
383
- dir = "#{vdir}/posts/#{noext}/"
413
+ vdir = @root/:views/view
414
+ dir = vdir/:posts/noext
384
415
  Dir.mkdir(dir) unless Dir.exist?(dir)
385
416
  system("cp #{draft} #{dir}")
386
417
  viewdir, slugdir, aslug = vdir, dir, noext[5..-1]
387
- theme = viewdir + "/themes/standard"
418
+ theme = viewdir/:themes/:standard
388
419
  [noext, viewdir, slugdir, aslug, theme]
389
420
  end
390
421
 
422
+ def _post_metadata(draft, pdraft)
423
+ log!(enter: __method__, args: [draft, pdraft])
424
+ title_line = File.readlines(draft).grep(/^.title /).first
425
+ title = title_line.split(" ", 2)[1]
426
+ # pdir = "
427
+ Dir.chdir(pdraft) do
428
+ excerpt = File.read("teaser.txt")
429
+ vars = %[.set title="#{title.chomp}"\n] +
430
+ %[.set teaser="#{excerpt.chomp}"]
431
+ File.open(pdraft/"vars.lt3", "w") {|f| f.puts vars }
432
+ end
433
+ end
434
+
435
+ def copy_widget_html(view)
436
+ log!(enter: __method__)
437
+ vdir = @root/:views/view
438
+ remote = vdir/:remote
439
+ wdir = vdir/:themes/:standard/:widgets
440
+ widgets = Dir[wdir/"*"].select {|w| File.directory?(w) }
441
+ widgets.each do |w|
442
+ dir = File.basename(w)
443
+ rem = w.sub(/themes.standard/, "remote")
444
+ create_dirs(rem)
445
+ next unless Dir[w/"*"].any? {|x| x =~ /html$/ }
446
+ system("cp #{w}/*html #{rem}")
447
+ end
448
+ end
449
+
450
+ def _handle_post(draft, view)
451
+ log!(enter: __method__, args: [draft, view])
452
+
453
+ fname = File.basename(draft) # 0001-this-is-a-post.lt3
454
+ nslug = fname.sub(/.lt3$/, "") # 0001-this-is-a-post
455
+ aslug = nslug.sub(/\d\d\d\d-/, "") # this-is-a-post
456
+ ahtml = aslug + ".html" # this-is-a-post.html
457
+ pdraft = @root/:posts/nslug
458
+ remote = @root/:views/view/:remote
459
+ @theme = @root/:views/view/:themes/:standard
460
+ # Step 1...
461
+ create_dirs(pdraft)
462
+ xlate cwd: pdraft, src: draft, dst: "guts.html"
463
+ _post_metadata(draft, pdraft)
464
+ # Step 2...
465
+ vposts = @root/:views/view/:posts
466
+ copy!(pdraft, vposts) # ??
467
+ # Step 3..
468
+ copy(pdraft/"guts.html", @theme/:post)
469
+ copy(pdraft/"vars.lt3", @theme/:post)
470
+ # Step 4...
471
+ xlate cwd: @theme/:post, src: "generate.lt3",
472
+ dst: remote/ahtml, copy: @theme/:post
473
+ xlate cwd: @theme/:post, src: "permalink.lt3",
474
+ dst: remote/:permalink/ahtml
475
+ copy_widget_html(view)
476
+ end
477
+
391
478
  def generate_post(draft)
392
479
  log!(enter: __method__, args: [draft])
393
480
  views = _get_views(draft)
394
- views.each do |view|
395
- noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
396
- remote = viewdir + "/remote"
397
- Dir.chdir(slugdir) do
398
- copy(draft, ".")
399
- lt3 = draft.split("/")[-1]
400
- # Remember: Some posts may be in more than one view -- careful with links back
401
- copy(lt3, remote)
402
- html = noext[5..-1]
403
- livetext draft, html # livetext "foobar.lt3", "foobar.html"
404
- copy(html, "../../remote/post/index.html")
405
- title_line = File.readlines(draft).grep(/^.title /).first
406
- title = title_line.split(" ", 2)[1]
407
- excerpt = File.read("teaser.txt")
408
- vars = %[.set title="#{title.chomp}"\n] +
409
- %[.set teaser="#{excerpt.chomp}"]
410
- theme = "../../theme/standard"
411
- File.open("vars.lt3", "w") {|f| f.puts vars }
412
- livetext "#{theme}/post/generate.lt3", "#{remote}/#{html}"
413
- livetext "#{theme}/post/permalink.lt3", "#{remote}/permalink/#{html}"
414
- log!(str: "About to enter remote/", pwd: true, dir: true)
415
- Dir.chdir(remote) do
416
- log!(str: "Now in remote/", pwd: true, dir: true)
417
- system("cp -r ../themes/standard/widgets .")
418
- log!(str: "finished with remote/", pwd: true, dir: true)
419
- end
420
- end
481
+ views.each do |view|
482
+ _handle_post(draft, view)
483
+ generate_view(view)
421
484
  end
422
485
  end
423
486
 
@@ -435,7 +498,7 @@ class RuneBlog
435
498
  self.make_slug(meta)
436
499
  check_meta(meta, "index_entry3")
437
500
  # FIXME clean up and generalize
438
- ref = "#{view}/#{meta.slug}/index.html"
501
+ ref = view/meta.slug/"index.html"
439
502
  <<-HTML
440
503
  <font size=-1>#{meta.date}&nbsp;&nbsp;</font> <br>
441
504
  <font size=+2 color=blue><a href=../#{ref} style="text-decoration: none">#{meta.title}</font></a>
@@ -481,7 +544,7 @@ class RuneBlog
481
544
  def undelete_post(num)
482
545
  log!(enter: __method__, args: [num])
483
546
  raise ArgumentError unless num.is_a?(Integer)
484
- files = Find.find("#@root/views/").to_a
547
+ files = Find.find(@root/:views).to_a
485
548
  tag = prefix(num)
486
549
  list = files.select {|x| File.directory?(x) and x =~ /_#{tag}/ }
487
550
  return nil if list.empty?