scriptorium 0.0.3 → 0.7.2

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 (353) hide show
  1. checksums.yaml +4 -4
  2. data/README.lt3 +324 -0
  3. data/README.md +3155 -1
  4. data/assets/.DS_Store +0 -0
  5. data/assets/README.md +44 -0
  6. data/assets/icons/social/reddit.png +0 -0
  7. data/assets/icons/social/x-logo.png +0 -0
  8. data/assets/icons/ui/.DS_Store +0 -0
  9. data/assets/icons/ui/back.png +0 -0
  10. data/assets/icons/ui/copy.png +0 -0
  11. data/assets/icons/ui/down.png +0 -0
  12. data/assets/icons/ui/end.png +0 -0
  13. data/assets/icons/ui/exit.png +0 -0
  14. data/assets/icons/ui/foo +10 -0
  15. data/assets/icons/ui/home.png +0 -0
  16. data/assets/icons/ui/left.png +0 -0
  17. data/assets/icons/ui/next.png +0 -0
  18. data/assets/icons/ui/right.png +0 -0
  19. data/assets/icons/ui/start.png +0 -0
  20. data/assets/icons/ui/up.png +0 -0
  21. data/assets/imagenotfound.jpg +0 -0
  22. data/assets/samples/placeholder.svg +9 -0
  23. data/assets/themes/standard/favicon.svg +6 -0
  24. data/bin/sblog +84 -5
  25. data/bin/scriptorium +1 -0
  26. data/doc/README.txt +6 -0
  27. data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +94 -0
  28. data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +2 -0
  29. data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +45 -0
  30. data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +40 -0
  31. data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +46 -0
  32. data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +158 -0
  33. data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +35 -0
  34. data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +27 -0
  35. data/doc/anti-amnesia/20250807-213025.md +116 -0
  36. data/doc/anti-amnesia/20250901-211714-codemirror-integration-and-web-tests.md +172 -0
  37. data/doc/anti-amnesia/20250902-002402-backup-restore-system.md +126 -0
  38. data/doc/anti-amnesia/20250907-203339-backup-metadata-implementation.md +66 -0
  39. data/doc/banner_svg_config.md +114 -0
  40. data/doc/contrib.lt3 +8 -0
  41. data/doc/dependencies.md +281 -0
  42. data/doc/hacker.lt3 +5 -0
  43. data/doc/imported/0001-elixir-conf-2014/metadata.txt +7 -0
  44. data/doc/imported/0001-elixir-conf-2014/post.html +37 -0
  45. data/doc/imported/0001-elixir-conf-2014/source.lt3 +22 -0
  46. data/doc/imported/0002-programmers-and-word-processing/metadata.txt +7 -0
  47. data/doc/imported/0002-programmers-and-word-processing/post.html +192 -0
  48. data/doc/imported/0002-programmers-and-word-processing/source.lt3 +146 -0
  49. data/doc/imported/0003-how-to-turn-your-brain-sideways/metadata.txt +7 -0
  50. data/doc/imported/0003-how-to-turn-your-brain-sideways/post.html +60 -0
  51. data/doc/imported/0003-how-to-turn-your-brain-sideways/source.lt3 +40 -0
  52. data/doc/imported/0004-upcoming-lone-star-ruby-conference/metadata.txt +7 -0
  53. data/doc/imported/0004-upcoming-lone-star-ruby-conference/post.html +42 -0
  54. data/doc/imported/0004-upcoming-lone-star-ruby-conference/source.lt3 +24 -0
  55. data/doc/imported/0005-elixir-conf-2015-announced/metadata.txt +7 -0
  56. data/doc/imported/0005-elixir-conf-2015-announced/post.html +30 -0
  57. data/doc/imported/0005-elixir-conf-2015-announced/source.lt3 +16 -0
  58. data/doc/imported/0006-ruby-for-dinosaurs/metadata.txt +7 -0
  59. data/doc/imported/0006-ruby-for-dinosaurs/post.html +43 -0
  60. data/doc/imported/0006-ruby-for-dinosaurs/source.lt3 +27 -0
  61. data/doc/imported/0007-phoenix-isnt-rails/metadata.txt +7 -0
  62. data/doc/imported/0007-phoenix-isnt-rails/post.html +116 -0
  63. data/doc/imported/0007-phoenix-isnt-rails/source.lt3 +87 -0
  64. data/doc/imported/0008-concerning-the-term-monkeypatching/metadata.txt +7 -0
  65. data/doc/imported/0008-concerning-the-term-monkeypatching/post.html +129 -0
  66. data/doc/imported/0008-concerning-the-term-monkeypatching/source.lt3 +92 -0
  67. data/doc/imported/0009-announcement-coming-soon/metadata.txt +7 -0
  68. data/doc/imported/0009-announcement-coming-soon/post.html +33 -0
  69. data/doc/imported/0009-announcement-coming-soon/source.lt3 +19 -0
  70. data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/metadata.txt +7 -0
  71. data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/post.html +175 -0
  72. data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/source.lt3 +139 -0
  73. data/doc/imported/0011-computer-science-as-a-lost-art/metadata.txt +7 -0
  74. data/doc/imported/0011-computer-science-as-a-lost-art/post.html +139 -0
  75. data/doc/imported/0011-computer-science-as-a-lost-art/source.lt3 +104 -0
  76. data/doc/imported/0012-ruby-day-in-turin-italy/metadata.txt +7 -0
  77. data/doc/imported/0012-ruby-day-in-turin-italy/post.html +42 -0
  78. data/doc/imported/0012-ruby-day-in-turin-italy/source.lt3 +24 -0
  79. data/doc/imported/0013-rubyday-was-a-success/metadata.txt +7 -0
  80. data/doc/imported/0013-rubyday-was-a-success/post.html +44 -0
  81. data/doc/imported/0013-rubyday-was-a-success/source.lt3 +27 -0
  82. data/doc/imported/0014-working-on-the-blogging-software/metadata.txt +7 -0
  83. data/doc/imported/0014-working-on-the-blogging-software/post.html +63 -0
  84. data/doc/imported/0014-working-on-the-blogging-software/source.lt3 +41 -0
  85. data/doc/imported/0015-ok-its-not-really-a-lost-art/metadata.txt +7 -0
  86. data/doc/imported/0015-ok-its-not-really-a-lost-art/post.html +172 -0
  87. data/doc/imported/0015-ok-its-not-really-a-lost-art/source.lt3 +134 -0
  88. data/doc/imported/0016-an-in-operator-for-ruby/metadata.txt +7 -0
  89. data/doc/imported/0016-an-in-operator-for-ruby/post.html +155 -0
  90. data/doc/imported/0016-an-in-operator-for-ruby/source.lt3 +106 -0
  91. data/doc/imported/0017-the-forgotten-mathematician/metadata.txt +7 -0
  92. data/doc/imported/0017-the-forgotten-mathematician/post.html +161 -0
  93. data/doc/imported/0017-the-forgotten-mathematician/source.lt3 +119 -0
  94. data/doc/imported/0018-ruby-puns/metadata.txt +7 -0
  95. data/doc/imported/0018-ruby-puns/post.html +46 -0
  96. data/doc/imported/0018-ruby-puns/source.lt3 +28 -0
  97. data/doc/imported/0019-custom-exceptions-via-metaprogramming/metadata.txt +7 -0
  98. data/doc/imported/0019-custom-exceptions-via-metaprogramming/post.html +138 -0
  99. data/doc/imported/0019-custom-exceptions-via-metaprogramming/source.lt3 +101 -0
  100. data/doc/imported/0020-fffff/metadata.txt +7 -0
  101. data/doc/imported/0020-fffff/post.html +24 -0
  102. data/doc/imported/0020-fffff/source.lt3 +12 -0
  103. data/doc/imported/0021-trying-ror-yet-again/metadata.txt +7 -0
  104. data/doc/imported/0021-trying-ror-yet-again/post.html +26 -0
  105. data/doc/imported/0021-trying-ror-yet-again/source.lt3 +12 -0
  106. data/doc/imported/0023-doctor-sleep/metadata.txt +7 -0
  107. data/doc/imported/0023-doctor-sleep/post.html +63 -0
  108. data/doc/imported/0023-doctor-sleep/source.lt3 +44 -0
  109. data/doc/imported/0024-just-a-test/metadata.txt +7 -0
  110. data/doc/imported/0024-just-a-test/post.html +24 -0
  111. data/doc/imported/0024-just-a-test/source.lt3 +12 -0
  112. data/doc/imported/import_summary.txt +98 -0
  113. data/doc/livetext-informal-spec.txt +65 -0
  114. data/doc/myuserdoc/ch-0.lt3 +31 -0
  115. data/doc/myuserdoc/ch-1.lt3 +37 -0
  116. data/doc/myuserdoc/ch-10.lt3 +22 -0
  117. data/doc/myuserdoc/ch-2.lt3 +37 -0
  118. data/doc/myuserdoc/ch-3.lt3 +19 -0
  119. data/doc/myuserdoc/ch-4.lt3 +43 -0
  120. data/doc/myuserdoc/ch-5.lt3 +22 -0
  121. data/doc/myuserdoc/ch-6.lt3 +19 -0
  122. data/doc/myuserdoc/ch-7.lt3 +16 -0
  123. data/doc/myuserdoc/ch-8.lt3 +13 -0
  124. data/doc/myuserdoc/ch-9.lt3 +19 -0
  125. data/doc/myuserdoc/tweak.rb +18 -0
  126. data/doc/myuserdoc/userdoc-toc.txt +88 -0
  127. data/doc/old-posts/0001-elixir-conf-2014.lt3 +24 -0
  128. data/doc/old-posts/0002-programmers-and-word-processing.lt3 +150 -0
  129. data/doc/old-posts/0003-how-to-turn-your-brain-sideways.lt3 +43 -0
  130. data/doc/old-posts/0004-upcoming-lone-star-ruby-conference.lt3 +26 -0
  131. data/doc/old-posts/0005-elixir-conf-2015-announced.lt3 +17 -0
  132. data/doc/old-posts/0006-ruby-for-dinosaurs.lt3 +30 -0
  133. data/doc/old-posts/0007-phoenix-isnt-rails.lt3 +90 -0
  134. data/doc/old-posts/0008-concerning-the-term-monkeypatching.lt3 +105 -0
  135. data/doc/old-posts/0009-announcement-coming-soon.lt3 +20 -0
  136. data/doc/old-posts/0010-immutable-data-ditching-the-wax-tablet.lt3 +142 -0
  137. data/doc/old-posts/0011-computer-science-as-a-lost-art.lt3 +117 -0
  138. data/doc/old-posts/0012-ruby-day-in-turin-italy.lt3 +26 -0
  139. data/doc/old-posts/0013-rubyday-was-a-success.lt3 +28 -0
  140. data/doc/old-posts/0014-working-on-the-blogging-software.lt3 +42 -0
  141. data/doc/old-posts/0015-ok-its-not-really-a-lost-art.lt3 +137 -0
  142. data/doc/old-posts/0016-an-in-operator-for-ruby.lt3 +142 -0
  143. data/doc/old-posts/0017-the-forgotten-mathematician.lt3 +129 -0
  144. data/doc/old-posts/0018-ruby-puns.lt3 +31 -0
  145. data/doc/old-posts/0019-custom-exceptions-via-metaprogramming.lt3 +116 -0
  146. data/doc/old-posts/0021-trying-ror-yet-again.lt3 +35 -0
  147. data/doc/old-posts/0023-doctor-sleep.lt3 +43 -0
  148. data/doc/old-posts/0024-just-a-test.lt3 +12 -0
  149. data/doc/old-posts/0025-trying-another-post.lt3 +12 -0
  150. data/doc/old-repo +1 -0
  151. data/doc/reddit_credentials_template.json +8 -0
  152. data/doc/reddit_integration.md +207 -0
  153. data/doc/user.lt3 +35 -0
  154. data/doc/user_guide_section_1.md +137 -0
  155. data/doc/user_guide_section_10.md +515 -0
  156. data/doc/user_guide_section_11.md +708 -0
  157. data/doc/user_guide_section_2.md +233 -0
  158. data/doc/user_guide_section_3.md +5 -0
  159. data/doc/user_guide_section_4.md +221 -0
  160. data/doc/user_guide_section_5.md +243 -0
  161. data/doc/user_guide_section_6.md +147 -0
  162. data/doc/user_guide_section_7.md +311 -0
  163. data/doc/user_guide_section_8.md +224 -0
  164. data/doc/user_guide_section_9.md +375 -0
  165. data/lib/rouge/lexers/livetext.rb +74 -0
  166. data/lib/scriptorium/api.rb +2373 -0
  167. data/lib/scriptorium/banner_svg.rb +729 -0
  168. data/lib/scriptorium/contract.rb +34 -0
  169. data/lib/scriptorium/exceptions.rb +201 -1
  170. data/lib/scriptorium/helpers.rb +675 -0
  171. data/lib/scriptorium/post.rb +259 -0
  172. data/lib/scriptorium/reddit.rb +83 -0
  173. data/lib/scriptorium/repo.rb +938 -0
  174. data/lib/scriptorium/standard_files.rb +149 -0
  175. data/lib/scriptorium/support/bootstrap/css.txt +5 -0
  176. data/lib/scriptorium/support/bootstrap/js.txt +4 -0
  177. data/lib/scriptorium/support/common_js/clipboard.js +35 -0
  178. data/lib/scriptorium/support/common_js/content-loader.js +187 -0
  179. data/lib/scriptorium/support/common_js/navigation.js +52 -0
  180. data/lib/scriptorium/support/common_js/syntax-highlighting.js +27 -0
  181. data/lib/scriptorium/support/config/reddit.txt +10 -0
  182. data/lib/scriptorium/support/config/reddit_template.txt +17 -0
  183. data/lib/scriptorium/support/config/social.txt +8 -0
  184. data/lib/scriptorium/support/highlight/css.txt +2 -0
  185. data/lib/scriptorium/support/highlight/custom.css +119 -0
  186. data/lib/scriptorium/support/highlight/js.txt +1 -0
  187. data/lib/scriptorium/support/post_index/config.txt +15 -0
  188. data/lib/scriptorium/support/post_index/style.css +55 -0
  189. data/lib/scriptorium/support/templates/index_entry.lt3 +16 -0
  190. data/lib/scriptorium/support/templates/initial_post.lt3 +12 -0
  191. data/lib/scriptorium/support/templates/layout.txt +5 -0
  192. data/lib/scriptorium/support/templates/post.lt3 +104 -0
  193. data/lib/scriptorium/support/theme/footer.lt3 +2 -0
  194. data/lib/scriptorium/support/theme/header.lt3 +4 -0
  195. data/lib/scriptorium/support/theme/left.lt3 +3 -0
  196. data/lib/scriptorium/support/theme/main.lt3 +5 -0
  197. data/lib/scriptorium/support/theme/right.lt3 +3 -0
  198. data/lib/scriptorium/theme.rb +192 -0
  199. data/lib/scriptorium/version.rb +1 -1
  200. data/lib/scriptorium/view.rb +1021 -0
  201. data/lib/scriptorium/widgets/featured_posts.rb +149 -0
  202. data/lib/scriptorium/widgets/links.rb +112 -0
  203. data/lib/scriptorium/widgets/pages.rb +133 -0
  204. data/lib/scriptorium/widgets/widget.rb +133 -0
  205. data/lib/scriptorium.rb +38 -34
  206. data/lib/skeleton.rb +10 -1
  207. data/scriptorium.gemspec +17 -5
  208. data/test/README.md +69 -0
  209. data/test/WEB_INTEGRATION_README.md +196 -0
  210. data/test/all +83 -0
  211. data/test/api_demo.rb +99 -0
  212. data/test/assets/imagenotfound.jpg +0 -0
  213. data/test/assets/images/.DS_Store +0 -0
  214. data/test/assets/images/README.md +27 -0
  215. data/test/assets/images/odd_aspect.png +0 -0
  216. data/test/assets/images/perfect.png +0 -0
  217. data/test/assets/images/small.png +0 -0
  218. data/test/assets/images/tall.png +0 -0
  219. data/test/assets/images/very_tall.png +0 -0
  220. data/test/assets/images/very_wide.png +0 -0
  221. data/test/assets/images/wide.png +0 -0
  222. data/test/assets/testbanner.jpg +0 -0
  223. data/test/banner_svg/simple_helpers.rb +13 -0
  224. data/test/banner_svg/unit.rb +1000 -0
  225. data/test/config/deployment.txt +5 -0
  226. data/test/ed_test.rb +204 -0
  227. data/test/integration/cursor_banner_combinations.rb +193 -0
  228. data/test/integration/cursor_banner_features.rb +374 -0
  229. data/test/integration/integration_test.rb +326 -0
  230. data/test/integration/preview_flow_test.rb +94 -0
  231. data/test/livetext_plugin_test.rb +500 -0
  232. data/test/manual/asset_mgmt.rb +67 -0
  233. data/test/manual/banner-tests/index.html +45 -0
  234. data/test/manual/banner-tests/svg.txt +3 -0
  235. data/test/manual/banner-tests/test01.html +122 -0
  236. data/test/manual/banner-tests/test02.html +122 -0
  237. data/test/manual/banner-tests/test03.html +122 -0
  238. data/test/manual/banner-tests/test04.html +129 -0
  239. data/test/manual/banner-tests/test05.html +129 -0
  240. data/test/manual/banner-tests/test06.html +129 -0
  241. data/test/manual/banner-tests/test07.html +129 -0
  242. data/test/manual/banner-tests/test08.html +123 -0
  243. data/test/manual/banner-tests/test09.html +123 -0
  244. data/test/manual/banner-tests/test10.html +123 -0
  245. data/test/manual/banner-tests/test11.html +123 -0
  246. data/test/manual/banner-tests/test12.html +123 -0
  247. data/test/manual/banner-tests/test13.html +123 -0
  248. data/test/manual/banner-tests/test14.html +123 -0
  249. data/test/manual/banner-tests/test15.html +122 -0
  250. data/test/manual/banner-tests/test16.html +122 -0
  251. data/test/manual/banner-tests/test17.html +122 -0
  252. data/test/manual/banner-tests/test18.html +132 -0
  253. data/test/manual/banner-tests/test19.html +132 -0
  254. data/test/manual/banner-tests/test20.html +132 -0
  255. data/test/manual/banner-tests/test21.html +132 -0
  256. data/test/manual/banner-tests/test22.html +132 -0
  257. data/test/manual/banner-tests/test23.html +132 -0
  258. data/test/manual/banner-tests/test24.html +132 -0
  259. data/test/manual/banner-tests/test25.html +131 -0
  260. data/test/manual/banner_environment.rb +205 -0
  261. data/test/manual/codemirror_demo.html +773 -0
  262. data/test/manual/create_posts_for_web.rb +114 -0
  263. data/test/manual/environment.rb +67 -0
  264. data/test/manual/make_banner.rb +153 -0
  265. data/test/manual/preview_manual_test.rb +129 -0
  266. data/test/manual/sample_banner_config.txt +12 -0
  267. data/test/manual/test_advanced_widgets.rb +73 -0
  268. data/test/manual/test_banner_combinations.rb +120 -0
  269. data/test/manual/test_banner_features.rb +306 -0
  270. data/test/manual/test_banner_integration.rb +115 -0
  271. data/test/manual/test_banner_radial.rb +87 -0
  272. data/test/manual/test_basic_posts.rb +47 -0
  273. data/test/manual/test_layout_widgets.rb +40 -0
  274. data/test/manual/test_pagination.rb +24 -0
  275. data/test/manual/test_random_posts.rb +38 -0
  276. data/test/manual/test_syntax_highlighting.rb +167 -0
  277. data/test/rubytext/rubytext_comprehensive_test.rb +307 -0
  278. data/test/rubytext/rubytext_demo_test.rb +42 -0
  279. data/test/rubytext/rubytext_testing_guide.md +277 -0
  280. data/test/run_automated_tests.rb +45 -0
  281. data/test/staging/.DS_Store +0 -0
  282. data/test/support/preview_utils.rb +88 -0
  283. data/test/syntax_highlighting_test.lt3 +124 -0
  284. data/test/test_gem_assets.rb +48 -0
  285. data/test/test_helpers.rb +240 -0
  286. data/test/tui_editor_integration_test.rb +296 -0
  287. data/test/tui_integration_test.rb +883 -0
  288. data/test/unit/api.rb +1776 -0
  289. data/test/unit/asset_management.rb +219 -0
  290. data/test/unit/backup_test.rb +451 -0
  291. data/test/unit/clipboard_test.rb +60 -0
  292. data/test/unit/contract_test.rb +69 -0
  293. data/test/unit/core.rb +1211 -0
  294. data/test/unit/deploy_config_test.rb +248 -0
  295. data/test/unit/deploy_test.rb +478 -0
  296. data/test/unit/edit_post_test.rb +168 -0
  297. data/test/unit/gem_asset_management.rb +183 -0
  298. data/test/unit/livetext_basic.rb +57 -0
  299. data/test/unit/livetext_compatibility.rb +82 -0
  300. data/test/unit/parse_cmd_test.rb +260 -0
  301. data/test/unit/permalink_copy_test.rb +211 -0
  302. data/test/unit/post.rb +309 -0
  303. data/test/unit/post_index_config_test.rb +258 -0
  304. data/test/unit/post_state_helpers_test.rb +137 -0
  305. data/test/unit/read_commented_file_test.rb +278 -0
  306. data/test/unit/reddit_test.rb +235 -0
  307. data/test/unit/repo.rb +569 -0
  308. data/test/unit/social_test.rb +366 -0
  309. data/test/unit/syntax_highlighting.rb +70 -0
  310. data/test/unit/theme_management_test.rb +91 -0
  311. data/test/unit/view.rb +498 -0
  312. data/test/unit/widgets.rb +669 -0
  313. data/test/web_integration_test.rb +231 -0
  314. data/test/web_test_helper.rb +218 -0
  315. data/test/web_workflow_test.rb +527 -0
  316. data/test/wizard_test.rb +123 -0
  317. data/ui/README.md +67 -0
  318. data/ui/common/lib/ui_common.rb +8 -0
  319. data/ui/rubytext/README.md +191 -0
  320. data/ui/rubytext/bin/scriptorium-rubytext +402 -0
  321. data/ui/rubytext/lib/rubytext_ui.rb +300 -0
  322. data/ui/tui/bin/scriptorium +1890 -0
  323. data/ui/tui/test/tui_test.rb +23 -0
  324. data/ui/web/app/app.rb +2600 -0
  325. data/ui/web/app/assets/livetext_mode.js +244 -0
  326. data/ui/web/app/error_helpers.rb +150 -0
  327. data/ui/web/app/views/advanced_config.erb +196 -0
  328. data/ui/web/app/views/asset_management.erb +645 -0
  329. data/ui/web/app/views/backup_management.erb +238 -0
  330. data/ui/web/app/views/banner_config.erb +200 -0
  331. data/ui/web/app/views/config_widget.erb +232 -0
  332. data/ui/web/app/views/configure_view.erb +401 -0
  333. data/ui/web/app/views/dashboard.erb +154 -0
  334. data/ui/web/app/views/deploy_config.erb +149 -0
  335. data/ui/web/app/views/edit_pages.erb +363 -0
  336. data/ui/web/app/views/edit_post.erb +175 -0
  337. data/ui/web/app/views/edit_theme.erb +73 -0
  338. data/ui/web/app/views/edit_theme_file.erb +74 -0
  339. data/ui/web/app/views/error_page.erb +29 -0
  340. data/ui/web/app/views/header_config.erb +155 -0
  341. data/ui/web/app/views/layout_config.erb +147 -0
  342. data/ui/web/app/views/navbar_config.erb +411 -0
  343. data/ui/web/app/views/theme_management.erb +130 -0
  344. data/ui/web/app/views/view_dashboard.erb +779 -0
  345. data/ui/web/app/views/widgets.erb +249 -0
  346. data/ui/web/bin/scriptorium-web +164 -0
  347. data/ui/web/test/web_basic_test.rb +38 -0
  348. data/ui/web/test_navbar.txt +7 -0
  349. data/ui/web/tmp/timing.log +17 -0
  350. data/ui/web/tmp/web_server.log +0 -0
  351. metadata +434 -8
  352. data/lib/scriptorium/engine.rb +0 -22
  353. data/test/engine/unit.rb +0 -44
@@ -0,0 +1,137 @@
1
+ # 1. Core Concepts
2
+
3
+ ## What is Scriptorium?
4
+
5
+ Scriptorium is a static site generator designed for creating and managing multiple blogs or content sites from a single installation. It combines the simplicity of static file generation with the power of a multi-view architecture, allowing you to maintain several distinct websites with shared infrastructure.
6
+
7
+ ### Static Files Philosophy
8
+
9
+ Scriptorium generates static HTML, CSS, and JavaScript files. This approach offers several key benefits:
10
+
11
+ - **Performance**: Static files load quickly and can be served efficiently by any web server
12
+ - **Reliability**: No server-side processing means fewer points of failure
13
+ - **Security**: No dynamic code execution reduces attack vectors
14
+ - **Scalability**: Static files can be served by CDNs and cached effectively
15
+ - **Simplicity**: No database setup, server configuration, or runtime dependencies
16
+
17
+ When you publish content with Scriptorium, it generates a complete set of static files that can be deployed to any web hosting service - from simple file hosting to sophisticated CDN networks.
18
+
19
+ ### Multi-View Architecture
20
+
21
+ Scriptorium's most distinctive feature is its **multi-view architecture**. Instead of managing separate installations for different blogs or websites, you can create multiple "views" within a single Scriptorium repository.
22
+
23
+ **What is a view?**
24
+ A view represents a complete, independent website or blog. Each view has its own:
25
+ - Configuration settings
26
+ - Theme and styling
27
+ - Content (posts, pages, widgets)
28
+ - Deployment settings
29
+ - URL structure
30
+
31
+ **Why use views?**
32
+ - **Efficiency**: Manage multiple sites from one installation
33
+ - **Consistency**: Share themes, templates, and infrastructure
34
+ - **Flexibility**: Each view can have completely different content and styling
35
+ - **Maintenance**: Update core functionality across all views at once
36
+
37
+ For example, you might have:
38
+ - A personal blog view
39
+ - A professional portfolio view
40
+ - A project documentation view
41
+ - A photo gallery view
42
+
43
+ All managed from the same Scriptorium installation, with shared themes and infrastructure but completely independent content.
44
+
45
+ ### Repository Structure
46
+
47
+ A Scriptorium repository is a directory that contains everything needed to manage your views and generate your websites. The repository structure follows a logical organization:
48
+
49
+ ```
50
+ scriptorium/
51
+ ├── config/ # Global configuration files
52
+ ├── views/ # Individual view directories
53
+ │ ├── personal/ # Personal blog view
54
+ │ ├── portfolio/ # Professional portfolio view
55
+ │ └── docs/ # Documentation view
56
+ ├── drafts/ # Draft posts (global)
57
+ ├── posts/ # Generated posts (global)
58
+ ├── assets/ # Shared images and files
59
+ ├── themes/ # Theme templates
60
+ └── scripts/ # Utility scripts
61
+ ```
62
+
63
+ **Key Repository Concepts:**
64
+ - **Global vs View-specific**: Some content (like posts) is global and can be shared across views, while other content (like view configuration) is specific to each view
65
+ - **Separation of concerns**: Content, presentation, and configuration are clearly separated
66
+ - **Version control friendly**: The entire repository can be managed with Git or similar tools
67
+
68
+ ### Deployment Overview
69
+
70
+ Scriptorium generates static files that can be deployed to virtually any web hosting service. The deployment process is straightforward:
71
+
72
+ 1. **Generate content**: Scriptorium processes your content and generates static HTML files
73
+ 2. **Upload files**: Transfer the generated files to your web server
74
+ 3. **Serve content**: Your web server serves the static files to visitors
75
+
76
+ **Deployment options include:**
77
+ - Traditional web hosting (shared hosting, VPS, dedicated servers)
78
+ - Static hosting services (Netlify, Vercel, GitHub Pages)
79
+ - Content delivery networks (CDN) for global performance
80
+ - Cloud storage with web serving capabilities
81
+
82
+ The static nature of Scriptorium's output means you have maximum flexibility in choosing where and how to host your content. [Detailed deployment instructions are covered in Section 9.]
83
+
84
+ ## What is LiveText?
85
+
86
+ LiveText is a templating and content processing system that powers Scriptorium's content generation. It provides a simple, powerful way to create dynamic content while maintaining the benefits of static file generation.
87
+
88
+ ### Why LiveText?
89
+
90
+ Scriptorium could have used any number of templating systems (Markdown, Liquid, ERB, etc.), but LiveText was chosen for several key reasons:
91
+
92
+ - **Simplicity**: LiveText syntax is straightforward and easy to learn
93
+ - **Power**: Despite its simplicity, LiveText is capable of complex content processing
94
+ - **Integration**: LiveText integrates seamlessly with Ruby, allowing for custom functions and logic
95
+ - **Flexibility**: LiveText can handle both simple content formatting and complex dynamic generation
96
+ - **Consistency**: LiveText provides a unified approach to content, templates, and configuration
97
+
98
+ LiveText bridges the gap between static content and dynamic generation, allowing you to create sophisticated websites while maintaining the performance and reliability benefits of static files.
99
+
100
+ ### LiveText Syntax in Brief
101
+
102
+ LiveText uses a simple but powerful syntax based on "dot commands" and inline formatting. Here's a quick overview:
103
+
104
+ **Inline formatting:**
105
+ ```
106
+ This is *bold and this is _italic text.
107
+ This is *[multiple words boldfaced].
108
+ ```
109
+
110
+ **Dot commands with parameters:**
111
+ ```
112
+ .title My Blog Post
113
+ .date 2025-07-29
114
+ .tags ruby, programming, blog
115
+
116
+ .link https://example.com Visit Example
117
+ .image /images/photo.jpg My Photo
118
+ ```
119
+
120
+ **Dot commands with body content:**
121
+ ```
122
+ .quote
123
+ This is an inset quote.
124
+ Wherever you go,
125
+ there you are.
126
+ .end
127
+ ```
128
+
129
+ **Variables and functions:**
130
+ ```
131
+ This file is called $File (predefined var).
132
+ The current time is: $$time
133
+ This post has $$word_count words.
134
+ ```
135
+
136
+ LiveText's syntax is designed to be readable and writable, making it easy to create content without getting bogged down in complex templating syntax. [Complete LiveText documentation is provided in Section 3.]
137
+
@@ -0,0 +1,515 @@
1
+ # 10. Troubleshooting
2
+
3
+ Even with the best setup, you may encounter issues while using Scriptorium. This section covers common problems and their solutions, helping you quickly resolve issues and get back to creating content.
4
+
5
+ ## Common Issues
6
+
7
+ ### Site generation problems
8
+
9
+ #### Site won't generate
10
+
11
+ **Symptoms**: Running `scriptorium generate` fails or produces errors.
12
+
13
+ **Possible causes and solutions**:
14
+
15
+ 1. **Missing dependencies**:
16
+ ```bash
17
+ # Check if Ruby and required gems are installed
18
+ ruby --version
19
+ gem list
20
+
21
+ # Reinstall Scriptorium if needed
22
+ gem uninstall scriptorium
23
+ gem install scriptorium
24
+ ```
25
+
26
+ 2. **Corrupted repository**:
27
+ ```bash
28
+ # Check repository integrity
29
+ scriptorium status
30
+
31
+ # If corrupted, restore from backup or recreate
32
+ cp -r .scriptorium .scriptorium.backup
33
+ scriptorium init
34
+ ```
35
+
36
+ 3. **Permission issues**:
37
+ ```bash
38
+ # Check file permissions
39
+ ls -la
40
+
41
+ # Fix permissions if needed
42
+ chmod 755 .
43
+ chmod 644 *.txt *.md *.lt3
44
+ ```
45
+
46
+ #### Posts not appearing
47
+
48
+ **Symptoms**: Posts exist but don't show up on the site.
49
+
50
+ **Solutions**:
51
+
52
+ 1. **Check post status**:
53
+ ```bash
54
+ scriptorium list posts
55
+ ```
56
+
57
+ 2. **Verify post is linked to current view**:
58
+ ```bash
59
+ scriptorium post 001
60
+ # Check the "views" field
61
+ ```
62
+
63
+ 3. **Link post to view if needed**:
64
+ ```bash
65
+ scriptorium link 001
66
+ ```
67
+
68
+ 4. **Regenerate the site**:
69
+ ```bash
70
+ scriptorium generate
71
+ ```
72
+
73
+ #### Images not displaying
74
+
75
+ **Symptoms**: Images appear broken or don't load.
76
+
77
+ **Solutions**:
78
+
79
+ 1. **Check image paths**:
80
+ ```bash
81
+ # Verify image exists
82
+ ls -la assets/images/
83
+
84
+ # Check path in post
85
+ scriptorium edit posts/001.lt3
86
+ ```
87
+
88
+ 2. **Correct image references**:
89
+ ```
90
+ # Use relative paths from the post
91
+ ![Alt text](assets/images/my-image.jpg)
92
+
93
+ # Or absolute paths from site root
94
+ ![Alt text](/assets/images/my-image.jpg)
95
+ ```
96
+
97
+ 3. **Ensure images are in the correct directory**:
98
+ ```bash
99
+ # Move images to assets directory
100
+ mv my-image.jpg assets/images/
101
+ ```
102
+
103
+ ### Widget issues
104
+
105
+ #### Widget not appearing
106
+
107
+ **Symptoms**: Widget is configured but doesn't show on the site.
108
+
109
+ **Solutions**:
110
+
111
+ 1. **Check widget configuration**:
112
+ ```bash
113
+ scriptorium edit widgets/links/list.txt
114
+ # Verify the file exists and has content
115
+ ```
116
+
117
+ 2. **Generate the widget**:
118
+ ```bash
119
+ scriptorium generate widget links
120
+ ```
121
+
122
+ 3. **Check layout configuration**:
123
+ ```bash
124
+ scriptorium edit config/layout.txt
125
+ # Ensure sidebar containers are defined
126
+
127
+ scriptorium edit config/left.txt
128
+ # Ensure widget is referenced
129
+ ```
130
+
131
+ 4. **Regenerate the entire site**:
132
+ ```bash
133
+ scriptorium generate
134
+ ```
135
+
136
+ #### Widget content not updating
137
+
138
+ **Symptoms**: Changes to widget configuration don't appear on the site.
139
+
140
+ **Solutions**:
141
+
142
+ 1. **Regenerate the specific widget**:
143
+ ```bash
144
+ scriptorium generate widget widget-name
145
+ ```
146
+
147
+ 2. **Clear any caching**:
148
+ ```bash
149
+ # Remove generated files
150
+ rm -rf output/
151
+ scriptorium generate
152
+ ```
153
+
154
+ ### Theme and styling issues
155
+
156
+ #### Theme not applying
157
+
158
+ **Symptoms**: Site doesn't use the expected theme.
159
+
160
+ **Solutions**:
161
+
162
+ 1. **Check theme configuration**:
163
+ ```bash
164
+ scriptorium edit config.txt
165
+ # Verify theme: theme-name is set correctly
166
+ ```
167
+
168
+ 2. **Verify theme exists**:
169
+ ```bash
170
+ ls -la themes/
171
+ # Ensure the theme directory exists
172
+ ```
173
+
174
+ 3. **Apply theme explicitly**:
175
+ ```bash
176
+ scriptorium theme theme-name
177
+ ```
178
+
179
+ #### CSS not loading
180
+
181
+ **Symptoms**: Site appears unstyled or with broken styling.
182
+
183
+ **Solutions**:
184
+
185
+ 1. **Check CSS file paths**:
186
+ ```bash
187
+ ls -la themes/standard/layout/gen/
188
+ # Verify CSS files exist
189
+ ```
190
+
191
+ 2. **Regenerate theme**:
192
+ ```bash
193
+ scriptorium generate
194
+ # This should regenerate CSS files
195
+ ```
196
+
197
+ 3. **Check browser cache**:
198
+ - Hard refresh (Ctrl+F5 or Cmd+Shift+R)
199
+ - Clear browser cache
200
+ - Try incognito/private browsing mode
201
+
202
+ ## Dependency Management
203
+
204
+ ### Ruby version issues
205
+
206
+ **Symptoms**: Scriptorium fails to run or has compatibility issues.
207
+
208
+ **Solutions**:
209
+
210
+ 1. **Check Ruby version**:
211
+ ```bash
212
+ ruby --version
213
+ # Scriptorium requires Ruby 2.7 or higher
214
+ ```
215
+
216
+ 2. **Update Ruby if needed**:
217
+ ```bash
218
+ # Using rbenv
219
+ rbenv install 3.2.0
220
+ rbenv global 3.2.0
221
+
222
+ # Using rvm
223
+ rvm install 3.2.0
224
+ rvm use 3.2.0 --default
225
+ ```
226
+
227
+ 3. **Reinstall gems**:
228
+ ```bash
229
+ gem update
230
+ gem install scriptorium
231
+ ```
232
+
233
+ ### Gem conflicts
234
+
235
+ **Symptoms**: Scriptorium conflicts with other Ruby gems.
236
+
237
+ **Solutions**:
238
+
239
+ 1. **Use bundler**:
240
+ ```bash
241
+ # Create Gemfile
242
+ echo 'gem "scriptorium"' > Gemfile
243
+
244
+ # Install with bundler
245
+ bundle install
246
+ bundle exec scriptorium
247
+ ```
248
+
249
+ 2. **Use gem isolation**:
250
+ ```bash
251
+ # Install in user directory
252
+ gem install --user-install scriptorium
253
+ ```
254
+
255
+ 3. **Check gem environment**:
256
+ ```bash
257
+ gem env
258
+ # Verify gem paths and versions
259
+ ```
260
+
261
+ ### System dependencies
262
+
263
+ **Symptoms**: Scriptorium fails due to missing system libraries.
264
+
265
+ **Solutions**:
266
+
267
+ 1. **Install development tools**:
268
+ ```bash
269
+ # Ubuntu/Debian
270
+ sudo apt install build-essential
271
+
272
+ # macOS
273
+ xcode-select --install
274
+
275
+ # CentOS/RHEL
276
+ sudo yum groupinstall "Development Tools"
277
+ ```
278
+
279
+ 2. **Install specific libraries**:
280
+ ```bash
281
+ # Ubuntu/Debian
282
+ sudo apt install libssl-dev libreadline-dev zlib1g-dev
283
+
284
+ # CentOS/RHEL
285
+ sudo yum install openssl-devel readline-devel zlib-devel
286
+ ```
287
+
288
+ ## Error Messages
289
+
290
+ ### Common error messages and solutions
291
+
292
+ #### "Cannot read file: file not found"
293
+
294
+ **Cause**: Scriptorium can't find a required file.
295
+
296
+ **Solution**:
297
+ ```bash
298
+ # Check if file exists
299
+ ls -la path/to/file
300
+
301
+ # Create missing file if needed
302
+ touch path/to/file
303
+
304
+ # Check file permissions
305
+ chmod 644 path/to/file
306
+ ```
307
+
308
+ #### "Cannot build widget: name invalid"
309
+
310
+ **Cause**: Widget name contains invalid characters.
311
+
312
+ **Solution**:
313
+ ```bash
314
+ # Use only lowercase letters, numbers, and hyphens
315
+ # Good: my-widget, links, pages
316
+ # Bad: My_Widget, links!, pages@
317
+ ```
318
+
319
+ #### "Layout has unknown tag"
320
+
321
+ **Cause**: Layout file contains unrecognized container names.
322
+
323
+ **Solution**:
324
+ ```bash
325
+ # Check layout file
326
+ scriptorium edit config/layout.txt
327
+
328
+ # Valid containers: header, main, left, right, footer
329
+ # Remove or correct invalid container names
330
+ ```
331
+
332
+ #### "Theme doesn't exist"
333
+
334
+ **Cause**: Referenced theme is not found.
335
+
336
+ **Solution**:
337
+ ```bash
338
+ # List available themes
339
+ ls -la themes/
340
+
341
+ # Check theme configuration
342
+ scriptorium edit config.txt
343
+
344
+ # Use existing theme or create new one
345
+ scriptorium theme standard
346
+ ```
347
+
348
+ #### "Post not found"
349
+
350
+ **Cause**: Referenced post ID doesn't exist.
351
+
352
+ **Solution**:
353
+ ```bash
354
+ # List all posts
355
+ scriptorium list posts
356
+
357
+ # Check post ID format
358
+ # Posts should be numbered: 001, 002, etc.
359
+
360
+ # Create post if needed
361
+ scriptorium new post "Post Title"
362
+ ```
363
+
364
+ ### Debugging techniques
365
+
366
+ #### Enable verbose output
367
+
368
+ ```bash
369
+ # Run commands with verbose output
370
+ scriptorium generate --verbose
371
+
372
+ # Check for detailed error messages
373
+ scriptorium status --verbose
374
+ ```
375
+
376
+ #### Check log files
377
+
378
+ ```bash
379
+ # Look for error logs
380
+ find . -name "*.log" -exec cat {} \;
381
+
382
+ # Check system logs
383
+ tail -f /var/log/syslog # Linux
384
+ tail -f /var/log/system.log # macOS
385
+ ```
386
+
387
+ #### Test individual components
388
+
389
+ ```bash
390
+ # Test post generation
391
+ scriptorium generate post 001
392
+
393
+ # Test widget generation
394
+ scriptorium generate widget links
395
+
396
+ # Test theme application
397
+ scriptorium theme standard
398
+ ```
399
+
400
+ ## Getting Help
401
+
402
+ ### Self-help resources
403
+
404
+ 1. **Check the documentation**:
405
+ - Review relevant sections of this user guide
406
+ - Check the README file in your Scriptorium installation
407
+ - Look for examples in the test directory
408
+
409
+ 2. **Use built-in help**:
410
+ ```bash
411
+ scriptorium --help
412
+ scriptorium help command-name
413
+ ```
414
+
415
+ 3. **Check the source code**:
416
+ ```bash
417
+ # Find Scriptorium installation
418
+ gem which scriptorium
419
+
420
+ # Explore the source
421
+ ls -la $(gem which scriptorium | sed 's/lib\/scriptorium.rb//')
422
+ ```
423
+
424
+ ### Community resources
425
+
426
+ 1. **GitHub repository**:
427
+ - Check issues for similar problems
428
+ - Review recent commits for fixes
429
+ - Submit new issues for bugs
430
+
431
+ 2. **Documentation**:
432
+ - Check the project wiki
433
+ - Review example configurations
434
+ - Look for community-contributed guides
435
+
436
+ 3. **Forums and discussions**:
437
+ - Search for Scriptorium discussions
438
+ - Ask questions in relevant communities
439
+ - Share solutions with others
440
+
441
+ ### Reporting bugs
442
+
443
+ When reporting bugs, include:
444
+
445
+ 1. **System information**:
446
+ ```bash
447
+ ruby --version
448
+ gem list scriptorium
449
+ uname -a
450
+ ```
451
+
452
+ 2. **Steps to reproduce**:
453
+ - Exact commands run
454
+ - Expected vs. actual behavior
455
+ - Any error messages
456
+
457
+ 3. **Configuration details**:
458
+ - Relevant configuration files
459
+ - Post content (if relevant)
460
+ - Theme and widget setup
461
+
462
+ 4. **Error logs**:
463
+ - Full error messages
464
+ - Stack traces
465
+ - Debug output
466
+
467
+ ### Getting support
468
+
469
+ 1. **Before asking for help**:
470
+ - Try the solutions in this section
471
+ - Search for similar issues
472
+ - Check if the problem is user error
473
+
474
+ 2. **When asking for help**:
475
+ - Be specific about the problem
476
+ - Include relevant error messages
477
+ - Provide system and configuration details
478
+ - Explain what you've already tried
479
+
480
+ 3. **Follow up**:
481
+ - Let people know if their suggestions worked
482
+ - Share solutions that worked for you
483
+ - Help others with similar problems
484
+
485
+ ### Prevention tips
486
+
487
+ 1. **Regular backups**:
488
+ ```bash
489
+ # Backup your Scriptorium repository
490
+ tar -czf scriptorium-backup-$(date +%Y%m%d).tar.gz .
491
+ ```
492
+
493
+ 2. **Version control**:
494
+ ```bash
495
+ # Use git for version control
496
+ git init
497
+ git add .
498
+ git commit -m "Initial commit"
499
+ ```
500
+
501
+ 3. **Test changes**:
502
+ ```bash
503
+ # Test changes before applying
504
+ scriptorium generate --dry-run
505
+
506
+ # Keep a test environment
507
+ cp -r . test-environment
508
+ ```
509
+
510
+ 4. **Document your setup**:
511
+ - Keep notes on your configuration
512
+ - Document customizations
513
+ - Record solutions to problems
514
+
515
+ By following these troubleshooting steps and best practices, you can quickly resolve most issues and maintain a stable Scriptorium installation.