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.
- checksums.yaml +4 -4
- data/README.lt3 +324 -0
- data/README.md +3155 -1
- data/assets/.DS_Store +0 -0
- data/assets/README.md +44 -0
- data/assets/icons/social/reddit.png +0 -0
- data/assets/icons/social/x-logo.png +0 -0
- data/assets/icons/ui/.DS_Store +0 -0
- data/assets/icons/ui/back.png +0 -0
- data/assets/icons/ui/copy.png +0 -0
- data/assets/icons/ui/down.png +0 -0
- data/assets/icons/ui/end.png +0 -0
- data/assets/icons/ui/exit.png +0 -0
- data/assets/icons/ui/foo +10 -0
- data/assets/icons/ui/home.png +0 -0
- data/assets/icons/ui/left.png +0 -0
- data/assets/icons/ui/next.png +0 -0
- data/assets/icons/ui/right.png +0 -0
- data/assets/icons/ui/start.png +0 -0
- data/assets/icons/ui/up.png +0 -0
- data/assets/imagenotfound.jpg +0 -0
- data/assets/samples/placeholder.svg +9 -0
- data/assets/themes/standard/favicon.svg +6 -0
- data/bin/sblog +84 -5
- data/bin/scriptorium +1 -0
- data/doc/README.txt +6 -0
- data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +94 -0
- data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +2 -0
- data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +45 -0
- data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +40 -0
- data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +46 -0
- data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +158 -0
- data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +35 -0
- data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +27 -0
- data/doc/anti-amnesia/20250807-213025.md +116 -0
- data/doc/anti-amnesia/20250901-211714-codemirror-integration-and-web-tests.md +172 -0
- data/doc/anti-amnesia/20250902-002402-backup-restore-system.md +126 -0
- data/doc/anti-amnesia/20250907-203339-backup-metadata-implementation.md +66 -0
- data/doc/banner_svg_config.md +114 -0
- data/doc/contrib.lt3 +8 -0
- data/doc/dependencies.md +281 -0
- data/doc/hacker.lt3 +5 -0
- data/doc/imported/0001-elixir-conf-2014/metadata.txt +7 -0
- data/doc/imported/0001-elixir-conf-2014/post.html +37 -0
- data/doc/imported/0001-elixir-conf-2014/source.lt3 +22 -0
- data/doc/imported/0002-programmers-and-word-processing/metadata.txt +7 -0
- data/doc/imported/0002-programmers-and-word-processing/post.html +192 -0
- data/doc/imported/0002-programmers-and-word-processing/source.lt3 +146 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/metadata.txt +7 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/post.html +60 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/source.lt3 +40 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/metadata.txt +7 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/post.html +42 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/source.lt3 +24 -0
- data/doc/imported/0005-elixir-conf-2015-announced/metadata.txt +7 -0
- data/doc/imported/0005-elixir-conf-2015-announced/post.html +30 -0
- data/doc/imported/0005-elixir-conf-2015-announced/source.lt3 +16 -0
- data/doc/imported/0006-ruby-for-dinosaurs/metadata.txt +7 -0
- data/doc/imported/0006-ruby-for-dinosaurs/post.html +43 -0
- data/doc/imported/0006-ruby-for-dinosaurs/source.lt3 +27 -0
- data/doc/imported/0007-phoenix-isnt-rails/metadata.txt +7 -0
- data/doc/imported/0007-phoenix-isnt-rails/post.html +116 -0
- data/doc/imported/0007-phoenix-isnt-rails/source.lt3 +87 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/metadata.txt +7 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/post.html +129 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/source.lt3 +92 -0
- data/doc/imported/0009-announcement-coming-soon/metadata.txt +7 -0
- data/doc/imported/0009-announcement-coming-soon/post.html +33 -0
- data/doc/imported/0009-announcement-coming-soon/source.lt3 +19 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/metadata.txt +7 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/post.html +175 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/source.lt3 +139 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/metadata.txt +7 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/post.html +139 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/source.lt3 +104 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/metadata.txt +7 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/post.html +42 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/source.lt3 +24 -0
- data/doc/imported/0013-rubyday-was-a-success/metadata.txt +7 -0
- data/doc/imported/0013-rubyday-was-a-success/post.html +44 -0
- data/doc/imported/0013-rubyday-was-a-success/source.lt3 +27 -0
- data/doc/imported/0014-working-on-the-blogging-software/metadata.txt +7 -0
- data/doc/imported/0014-working-on-the-blogging-software/post.html +63 -0
- data/doc/imported/0014-working-on-the-blogging-software/source.lt3 +41 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/metadata.txt +7 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/post.html +172 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/source.lt3 +134 -0
- data/doc/imported/0016-an-in-operator-for-ruby/metadata.txt +7 -0
- data/doc/imported/0016-an-in-operator-for-ruby/post.html +155 -0
- data/doc/imported/0016-an-in-operator-for-ruby/source.lt3 +106 -0
- data/doc/imported/0017-the-forgotten-mathematician/metadata.txt +7 -0
- data/doc/imported/0017-the-forgotten-mathematician/post.html +161 -0
- data/doc/imported/0017-the-forgotten-mathematician/source.lt3 +119 -0
- data/doc/imported/0018-ruby-puns/metadata.txt +7 -0
- data/doc/imported/0018-ruby-puns/post.html +46 -0
- data/doc/imported/0018-ruby-puns/source.lt3 +28 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/metadata.txt +7 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/post.html +138 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/source.lt3 +101 -0
- data/doc/imported/0020-fffff/metadata.txt +7 -0
- data/doc/imported/0020-fffff/post.html +24 -0
- data/doc/imported/0020-fffff/source.lt3 +12 -0
- data/doc/imported/0021-trying-ror-yet-again/metadata.txt +7 -0
- data/doc/imported/0021-trying-ror-yet-again/post.html +26 -0
- data/doc/imported/0021-trying-ror-yet-again/source.lt3 +12 -0
- data/doc/imported/0023-doctor-sleep/metadata.txt +7 -0
- data/doc/imported/0023-doctor-sleep/post.html +63 -0
- data/doc/imported/0023-doctor-sleep/source.lt3 +44 -0
- data/doc/imported/0024-just-a-test/metadata.txt +7 -0
- data/doc/imported/0024-just-a-test/post.html +24 -0
- data/doc/imported/0024-just-a-test/source.lt3 +12 -0
- data/doc/imported/import_summary.txt +98 -0
- data/doc/livetext-informal-spec.txt +65 -0
- data/doc/myuserdoc/ch-0.lt3 +31 -0
- data/doc/myuserdoc/ch-1.lt3 +37 -0
- data/doc/myuserdoc/ch-10.lt3 +22 -0
- data/doc/myuserdoc/ch-2.lt3 +37 -0
- data/doc/myuserdoc/ch-3.lt3 +19 -0
- data/doc/myuserdoc/ch-4.lt3 +43 -0
- data/doc/myuserdoc/ch-5.lt3 +22 -0
- data/doc/myuserdoc/ch-6.lt3 +19 -0
- data/doc/myuserdoc/ch-7.lt3 +16 -0
- data/doc/myuserdoc/ch-8.lt3 +13 -0
- data/doc/myuserdoc/ch-9.lt3 +19 -0
- data/doc/myuserdoc/tweak.rb +18 -0
- data/doc/myuserdoc/userdoc-toc.txt +88 -0
- data/doc/old-posts/0001-elixir-conf-2014.lt3 +24 -0
- data/doc/old-posts/0002-programmers-and-word-processing.lt3 +150 -0
- data/doc/old-posts/0003-how-to-turn-your-brain-sideways.lt3 +43 -0
- data/doc/old-posts/0004-upcoming-lone-star-ruby-conference.lt3 +26 -0
- data/doc/old-posts/0005-elixir-conf-2015-announced.lt3 +17 -0
- data/doc/old-posts/0006-ruby-for-dinosaurs.lt3 +30 -0
- data/doc/old-posts/0007-phoenix-isnt-rails.lt3 +90 -0
- data/doc/old-posts/0008-concerning-the-term-monkeypatching.lt3 +105 -0
- data/doc/old-posts/0009-announcement-coming-soon.lt3 +20 -0
- data/doc/old-posts/0010-immutable-data-ditching-the-wax-tablet.lt3 +142 -0
- data/doc/old-posts/0011-computer-science-as-a-lost-art.lt3 +117 -0
- data/doc/old-posts/0012-ruby-day-in-turin-italy.lt3 +26 -0
- data/doc/old-posts/0013-rubyday-was-a-success.lt3 +28 -0
- data/doc/old-posts/0014-working-on-the-blogging-software.lt3 +42 -0
- data/doc/old-posts/0015-ok-its-not-really-a-lost-art.lt3 +137 -0
- data/doc/old-posts/0016-an-in-operator-for-ruby.lt3 +142 -0
- data/doc/old-posts/0017-the-forgotten-mathematician.lt3 +129 -0
- data/doc/old-posts/0018-ruby-puns.lt3 +31 -0
- data/doc/old-posts/0019-custom-exceptions-via-metaprogramming.lt3 +116 -0
- data/doc/old-posts/0021-trying-ror-yet-again.lt3 +35 -0
- data/doc/old-posts/0023-doctor-sleep.lt3 +43 -0
- data/doc/old-posts/0024-just-a-test.lt3 +12 -0
- data/doc/old-posts/0025-trying-another-post.lt3 +12 -0
- data/doc/old-repo +1 -0
- data/doc/reddit_credentials_template.json +8 -0
- data/doc/reddit_integration.md +207 -0
- data/doc/user.lt3 +35 -0
- data/doc/user_guide_section_1.md +137 -0
- data/doc/user_guide_section_10.md +515 -0
- data/doc/user_guide_section_11.md +708 -0
- data/doc/user_guide_section_2.md +233 -0
- data/doc/user_guide_section_3.md +5 -0
- data/doc/user_guide_section_4.md +221 -0
- data/doc/user_guide_section_5.md +243 -0
- data/doc/user_guide_section_6.md +147 -0
- data/doc/user_guide_section_7.md +311 -0
- data/doc/user_guide_section_8.md +224 -0
- data/doc/user_guide_section_9.md +375 -0
- data/lib/rouge/lexers/livetext.rb +74 -0
- data/lib/scriptorium/api.rb +2373 -0
- data/lib/scriptorium/banner_svg.rb +729 -0
- data/lib/scriptorium/contract.rb +34 -0
- data/lib/scriptorium/exceptions.rb +201 -1
- data/lib/scriptorium/helpers.rb +675 -0
- data/lib/scriptorium/post.rb +259 -0
- data/lib/scriptorium/reddit.rb +83 -0
- data/lib/scriptorium/repo.rb +938 -0
- data/lib/scriptorium/standard_files.rb +149 -0
- data/lib/scriptorium/support/bootstrap/css.txt +5 -0
- data/lib/scriptorium/support/bootstrap/js.txt +4 -0
- data/lib/scriptorium/support/common_js/clipboard.js +35 -0
- data/lib/scriptorium/support/common_js/content-loader.js +187 -0
- data/lib/scriptorium/support/common_js/navigation.js +52 -0
- data/lib/scriptorium/support/common_js/syntax-highlighting.js +27 -0
- data/lib/scriptorium/support/config/reddit.txt +10 -0
- data/lib/scriptorium/support/config/reddit_template.txt +17 -0
- data/lib/scriptorium/support/config/social.txt +8 -0
- data/lib/scriptorium/support/highlight/css.txt +2 -0
- data/lib/scriptorium/support/highlight/custom.css +119 -0
- data/lib/scriptorium/support/highlight/js.txt +1 -0
- data/lib/scriptorium/support/post_index/config.txt +15 -0
- data/lib/scriptorium/support/post_index/style.css +55 -0
- data/lib/scriptorium/support/templates/index_entry.lt3 +16 -0
- data/lib/scriptorium/support/templates/initial_post.lt3 +12 -0
- data/lib/scriptorium/support/templates/layout.txt +5 -0
- data/lib/scriptorium/support/templates/post.lt3 +104 -0
- data/lib/scriptorium/support/theme/footer.lt3 +2 -0
- data/lib/scriptorium/support/theme/header.lt3 +4 -0
- data/lib/scriptorium/support/theme/left.lt3 +3 -0
- data/lib/scriptorium/support/theme/main.lt3 +5 -0
- data/lib/scriptorium/support/theme/right.lt3 +3 -0
- data/lib/scriptorium/theme.rb +192 -0
- data/lib/scriptorium/version.rb +1 -1
- data/lib/scriptorium/view.rb +1021 -0
- data/lib/scriptorium/widgets/featured_posts.rb +149 -0
- data/lib/scriptorium/widgets/links.rb +112 -0
- data/lib/scriptorium/widgets/pages.rb +133 -0
- data/lib/scriptorium/widgets/widget.rb +133 -0
- data/lib/scriptorium.rb +38 -34
- data/lib/skeleton.rb +10 -1
- data/scriptorium.gemspec +17 -5
- data/test/README.md +69 -0
- data/test/WEB_INTEGRATION_README.md +196 -0
- data/test/all +83 -0
- data/test/api_demo.rb +99 -0
- data/test/assets/imagenotfound.jpg +0 -0
- data/test/assets/images/.DS_Store +0 -0
- data/test/assets/images/README.md +27 -0
- data/test/assets/images/odd_aspect.png +0 -0
- data/test/assets/images/perfect.png +0 -0
- data/test/assets/images/small.png +0 -0
- data/test/assets/images/tall.png +0 -0
- data/test/assets/images/very_tall.png +0 -0
- data/test/assets/images/very_wide.png +0 -0
- data/test/assets/images/wide.png +0 -0
- data/test/assets/testbanner.jpg +0 -0
- data/test/banner_svg/simple_helpers.rb +13 -0
- data/test/banner_svg/unit.rb +1000 -0
- data/test/config/deployment.txt +5 -0
- data/test/ed_test.rb +204 -0
- data/test/integration/cursor_banner_combinations.rb +193 -0
- data/test/integration/cursor_banner_features.rb +374 -0
- data/test/integration/integration_test.rb +326 -0
- data/test/integration/preview_flow_test.rb +94 -0
- data/test/livetext_plugin_test.rb +500 -0
- data/test/manual/asset_mgmt.rb +67 -0
- data/test/manual/banner-tests/index.html +45 -0
- data/test/manual/banner-tests/svg.txt +3 -0
- data/test/manual/banner-tests/test01.html +122 -0
- data/test/manual/banner-tests/test02.html +122 -0
- data/test/manual/banner-tests/test03.html +122 -0
- data/test/manual/banner-tests/test04.html +129 -0
- data/test/manual/banner-tests/test05.html +129 -0
- data/test/manual/banner-tests/test06.html +129 -0
- data/test/manual/banner-tests/test07.html +129 -0
- data/test/manual/banner-tests/test08.html +123 -0
- data/test/manual/banner-tests/test09.html +123 -0
- data/test/manual/banner-tests/test10.html +123 -0
- data/test/manual/banner-tests/test11.html +123 -0
- data/test/manual/banner-tests/test12.html +123 -0
- data/test/manual/banner-tests/test13.html +123 -0
- data/test/manual/banner-tests/test14.html +123 -0
- data/test/manual/banner-tests/test15.html +122 -0
- data/test/manual/banner-tests/test16.html +122 -0
- data/test/manual/banner-tests/test17.html +122 -0
- data/test/manual/banner-tests/test18.html +132 -0
- data/test/manual/banner-tests/test19.html +132 -0
- data/test/manual/banner-tests/test20.html +132 -0
- data/test/manual/banner-tests/test21.html +132 -0
- data/test/manual/banner-tests/test22.html +132 -0
- data/test/manual/banner-tests/test23.html +132 -0
- data/test/manual/banner-tests/test24.html +132 -0
- data/test/manual/banner-tests/test25.html +131 -0
- data/test/manual/banner_environment.rb +205 -0
- data/test/manual/codemirror_demo.html +773 -0
- data/test/manual/create_posts_for_web.rb +114 -0
- data/test/manual/environment.rb +67 -0
- data/test/manual/make_banner.rb +153 -0
- data/test/manual/preview_manual_test.rb +129 -0
- data/test/manual/sample_banner_config.txt +12 -0
- data/test/manual/test_advanced_widgets.rb +73 -0
- data/test/manual/test_banner_combinations.rb +120 -0
- data/test/manual/test_banner_features.rb +306 -0
- data/test/manual/test_banner_integration.rb +115 -0
- data/test/manual/test_banner_radial.rb +87 -0
- data/test/manual/test_basic_posts.rb +47 -0
- data/test/manual/test_layout_widgets.rb +40 -0
- data/test/manual/test_pagination.rb +24 -0
- data/test/manual/test_random_posts.rb +38 -0
- data/test/manual/test_syntax_highlighting.rb +167 -0
- data/test/rubytext/rubytext_comprehensive_test.rb +307 -0
- data/test/rubytext/rubytext_demo_test.rb +42 -0
- data/test/rubytext/rubytext_testing_guide.md +277 -0
- data/test/run_automated_tests.rb +45 -0
- data/test/staging/.DS_Store +0 -0
- data/test/support/preview_utils.rb +88 -0
- data/test/syntax_highlighting_test.lt3 +124 -0
- data/test/test_gem_assets.rb +48 -0
- data/test/test_helpers.rb +240 -0
- data/test/tui_editor_integration_test.rb +296 -0
- data/test/tui_integration_test.rb +883 -0
- data/test/unit/api.rb +1776 -0
- data/test/unit/asset_management.rb +219 -0
- data/test/unit/backup_test.rb +451 -0
- data/test/unit/clipboard_test.rb +60 -0
- data/test/unit/contract_test.rb +69 -0
- data/test/unit/core.rb +1211 -0
- data/test/unit/deploy_config_test.rb +248 -0
- data/test/unit/deploy_test.rb +478 -0
- data/test/unit/edit_post_test.rb +168 -0
- data/test/unit/gem_asset_management.rb +183 -0
- data/test/unit/livetext_basic.rb +57 -0
- data/test/unit/livetext_compatibility.rb +82 -0
- data/test/unit/parse_cmd_test.rb +260 -0
- data/test/unit/permalink_copy_test.rb +211 -0
- data/test/unit/post.rb +309 -0
- data/test/unit/post_index_config_test.rb +258 -0
- data/test/unit/post_state_helpers_test.rb +137 -0
- data/test/unit/read_commented_file_test.rb +278 -0
- data/test/unit/reddit_test.rb +235 -0
- data/test/unit/repo.rb +569 -0
- data/test/unit/social_test.rb +366 -0
- data/test/unit/syntax_highlighting.rb +70 -0
- data/test/unit/theme_management_test.rb +91 -0
- data/test/unit/view.rb +498 -0
- data/test/unit/widgets.rb +669 -0
- data/test/web_integration_test.rb +231 -0
- data/test/web_test_helper.rb +218 -0
- data/test/web_workflow_test.rb +527 -0
- data/test/wizard_test.rb +123 -0
- data/ui/README.md +67 -0
- data/ui/common/lib/ui_common.rb +8 -0
- data/ui/rubytext/README.md +191 -0
- data/ui/rubytext/bin/scriptorium-rubytext +402 -0
- data/ui/rubytext/lib/rubytext_ui.rb +300 -0
- data/ui/tui/bin/scriptorium +1890 -0
- data/ui/tui/test/tui_test.rb +23 -0
- data/ui/web/app/app.rb +2600 -0
- data/ui/web/app/assets/livetext_mode.js +244 -0
- data/ui/web/app/error_helpers.rb +150 -0
- data/ui/web/app/views/advanced_config.erb +196 -0
- data/ui/web/app/views/asset_management.erb +645 -0
- data/ui/web/app/views/backup_management.erb +238 -0
- data/ui/web/app/views/banner_config.erb +200 -0
- data/ui/web/app/views/config_widget.erb +232 -0
- data/ui/web/app/views/configure_view.erb +401 -0
- data/ui/web/app/views/dashboard.erb +154 -0
- data/ui/web/app/views/deploy_config.erb +149 -0
- data/ui/web/app/views/edit_pages.erb +363 -0
- data/ui/web/app/views/edit_post.erb +175 -0
- data/ui/web/app/views/edit_theme.erb +73 -0
- data/ui/web/app/views/edit_theme_file.erb +74 -0
- data/ui/web/app/views/error_page.erb +29 -0
- data/ui/web/app/views/header_config.erb +155 -0
- data/ui/web/app/views/layout_config.erb +147 -0
- data/ui/web/app/views/navbar_config.erb +411 -0
- data/ui/web/app/views/theme_management.erb +130 -0
- data/ui/web/app/views/view_dashboard.erb +779 -0
- data/ui/web/app/views/widgets.erb +249 -0
- data/ui/web/bin/scriptorium-web +164 -0
- data/ui/web/test/web_basic_test.rb +38 -0
- data/ui/web/test_navbar.txt +7 -0
- data/ui/web/tmp/timing.log +17 -0
- data/ui/web/tmp/web_server.log +0 -0
- metadata +434 -8
- data/lib/scriptorium/engine.rb +0 -22
- data/test/engine/unit.rb +0 -44
@@ -0,0 +1,306 @@
|
|
1
|
+
# Manual inspection tests for BannerSVG features
|
2
|
+
#
|
3
|
+
# This file creates individual HTML pages for each banner feature test,
|
4
|
+
# with simple navigation between them. Each page is completely isolated
|
5
|
+
# to prevent state sharing issues.
|
6
|
+
#
|
7
|
+
# Usage:
|
8
|
+
# ruby test_banner_features_simple.rb # Interactive mode with browser
|
9
|
+
# ruby test_banner_features_simple.rb --automated # Automated mode for CI/AI testing
|
10
|
+
#
|
11
|
+
require_relative "../../lib/scriptorium"
|
12
|
+
require_relative "./banner_environment"
|
13
|
+
|
14
|
+
# Test definitions
|
15
|
+
tests = [
|
16
|
+
{
|
17
|
+
title: "Red Background",
|
18
|
+
subtitle: "Solid color test",
|
19
|
+
config: "back.color #ff0000",
|
20
|
+
description: "Red Background"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
title: "Blue Background",
|
24
|
+
subtitle: "Solid color test",
|
25
|
+
config: "back.color #0000ff",
|
26
|
+
description: "Blue Background"
|
27
|
+
},
|
28
|
+
{
|
29
|
+
title: "Green Background",
|
30
|
+
subtitle: "Solid color test",
|
31
|
+
config: "back.color #00ff00",
|
32
|
+
description: "Green Background"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
title: "Red to Blue Gradient",
|
36
|
+
subtitle: "Linear gradient test",
|
37
|
+
config: "back.linear red blue lr",
|
38
|
+
description: "Linear Gradient (Left to Right)"
|
39
|
+
},
|
40
|
+
{
|
41
|
+
title: "Green to Yellow Gradient",
|
42
|
+
subtitle: "Linear gradient test",
|
43
|
+
config: "back.linear green yellow tb",
|
44
|
+
description: "Linear Gradient (Top to Bottom)"
|
45
|
+
},
|
46
|
+
{
|
47
|
+
title: "Red to Blue Radial",
|
48
|
+
subtitle: "Radial gradient test",
|
49
|
+
config: "back.radial red blue",
|
50
|
+
description: "Radial Gradient"
|
51
|
+
},
|
52
|
+
{
|
53
|
+
title: "Green to Yellow Radial",
|
54
|
+
subtitle: "Radial gradient test",
|
55
|
+
config: "back.radial green yellow",
|
56
|
+
description: "Radial Gradient"
|
57
|
+
},
|
58
|
+
{
|
59
|
+
title: "Small Text",
|
60
|
+
subtitle: "Size test",
|
61
|
+
config: "title.scale 0.5\nsubtitle.scale 0.3",
|
62
|
+
description: "Small Text (0.5x, 0.3x)"
|
63
|
+
},
|
64
|
+
{
|
65
|
+
title: "Large Text",
|
66
|
+
subtitle: "Size test",
|
67
|
+
config: "title.scale 1.5\nsubtitle.scale 1.0",
|
68
|
+
description: "Large Text (1.5x, 1.0x)"
|
69
|
+
},
|
70
|
+
{
|
71
|
+
title: "Bold Text",
|
72
|
+
subtitle: "Style test",
|
73
|
+
config: "title.style bold\nsubtitle.style bold",
|
74
|
+
description: "Bold Text"
|
75
|
+
},
|
76
|
+
{
|
77
|
+
title: "Italic Text",
|
78
|
+
subtitle: "Style test",
|
79
|
+
config: "title.style italic\nsubtitle.style italic",
|
80
|
+
description: "Italic Text"
|
81
|
+
},
|
82
|
+
{
|
83
|
+
title: "Bold & Italic",
|
84
|
+
subtitle: "Style test",
|
85
|
+
config: "title.style bold italic\nsubtitle.style bold italic",
|
86
|
+
description: "Bold & Italic Text"
|
87
|
+
},
|
88
|
+
{
|
89
|
+
title: "Blue Text",
|
90
|
+
subtitle: "Color test",
|
91
|
+
config: "title.color #0000ff\nsubtitle.color #0000ff",
|
92
|
+
description: "Blue Text"
|
93
|
+
},
|
94
|
+
{
|
95
|
+
title: "Green Text",
|
96
|
+
subtitle: "Color test",
|
97
|
+
config: "title.color #00ff00\nsubtitle.color #00ff00",
|
98
|
+
description: "Green Text"
|
99
|
+
},
|
100
|
+
{
|
101
|
+
title: "Left Position",
|
102
|
+
subtitle: "Position test",
|
103
|
+
config: "text.align left",
|
104
|
+
description: "Left Positioned Text"
|
105
|
+
},
|
106
|
+
{
|
107
|
+
title: "Center Position",
|
108
|
+
subtitle: "Position test",
|
109
|
+
config: "text.align center",
|
110
|
+
description: "Center Positioned Text"
|
111
|
+
},
|
112
|
+
{
|
113
|
+
title: "Right Position",
|
114
|
+
subtitle: "Position test",
|
115
|
+
config: "text.align right",
|
116
|
+
description: "Right Positioned Text"
|
117
|
+
},
|
118
|
+
{
|
119
|
+
title: "Perfect Image Background",
|
120
|
+
subtitle: "Image test (8:1 aspect)",
|
121
|
+
config: "back.image ../../assets/images/perfect.png",
|
122
|
+
description: "Perfect match: 8:1 aspect ratio image fits banner exactly - no cropping or scaling needed"
|
123
|
+
},
|
124
|
+
{
|
125
|
+
title: "Wide Image Background",
|
126
|
+
subtitle: "Image test (16:1 aspect)",
|
127
|
+
config: "back.image ../../assets/images/wide.png",
|
128
|
+
description: "Wide image (16:1) cropped to fit 8:1 banner - left/right edges removed, center preserved"
|
129
|
+
},
|
130
|
+
{
|
131
|
+
title: "Tall Image Background",
|
132
|
+
subtitle: "Image test (1:1 aspect)",
|
133
|
+
config: "back.image ../../assets/images/tall.png",
|
134
|
+
description: "Square image (1:1) cropped to fit 8:1 banner - top/bottom removed, center strip visible"
|
135
|
+
},
|
136
|
+
{
|
137
|
+
title: "Very Tall Image Background",
|
138
|
+
subtitle: "Image test (1:4 aspect)",
|
139
|
+
config: "back.image ../../assets/images/very_tall.png",
|
140
|
+
description: "Very tall image (1:4) heavily cropped - only narrow center strip visible, most content lost"
|
141
|
+
},
|
142
|
+
{
|
143
|
+
title: "Very Wide Image Background",
|
144
|
+
subtitle: "Image test (16:1 aspect)",
|
145
|
+
config: "back.image ../../assets/images/very_wide.png",
|
146
|
+
description: "Very wide image (16:1) heavily cropped - only narrow center strip visible, sides removed"
|
147
|
+
},
|
148
|
+
{
|
149
|
+
title: "Small Image Background",
|
150
|
+
subtitle: "Image test (low res, 8:1 aspect)",
|
151
|
+
config: "back.image ../../assets/images/small.png",
|
152
|
+
description: "Small low-res image scaled up to fill banner - may appear pixelated but maintains aspect"
|
153
|
+
},
|
154
|
+
{
|
155
|
+
title: "Odd Aspect Image Background",
|
156
|
+
subtitle: "Image test (~4:1 aspect)",
|
157
|
+
config: "back.image ../../assets/images/odd_aspect.png",
|
158
|
+
description: "Non-standard aspect ratio (~4:1) cropped to fit 8:1 banner - moderate cropping applied"
|
159
|
+
},
|
160
|
+
{
|
161
|
+
title: "Another gradient test",
|
162
|
+
subtitle: "Just one more, I swear",
|
163
|
+
config: "back.linear #0000ff #000033 lr\ntitle.color #fff\nsubtitle.color #fff",
|
164
|
+
description: "Linear Gradient (Left to Right)"
|
165
|
+
}
|
166
|
+
]
|
167
|
+
|
168
|
+
# Create temp directory for tests
|
169
|
+
test_dir = File.dirname(__FILE__)/"banner-tests"
|
170
|
+
Dir.mkdir(test_dir) unless Dir.exist?(test_dir)
|
171
|
+
|
172
|
+
# Create individual pages for each test
|
173
|
+
pages = []
|
174
|
+
tests.each_with_index do |test, index|
|
175
|
+
page_num = index + 1
|
176
|
+
filename = "test#{page_num.to_s.rjust(2, '0')}.html"
|
177
|
+
|
178
|
+
# Write config file for this test
|
179
|
+
File.write(test_dir/"svg.txt", test[:config])
|
180
|
+
|
181
|
+
# Create banner
|
182
|
+
require_relative '../../lib/scriptorium'
|
183
|
+
Dir.chdir(test_dir) do
|
184
|
+
banner = Scriptorium::BannerSVG.new(test[:title], test[:subtitle])
|
185
|
+
banner.parse_header_svg
|
186
|
+
svg_output = banner.get_svg
|
187
|
+
|
188
|
+
# Check if this is an image background test
|
189
|
+
image_path = nil
|
190
|
+
if test[:config].include?("back.image")
|
191
|
+
image_path = test[:config].match(/back\.image\s+(.+)/)&.[](1)
|
192
|
+
# For the original image display, we need the path relative to the HTML file
|
193
|
+
# The HTML is in test/manual/banner-tests/, and images are in test/assets/images/
|
194
|
+
# Convert ../../assets/images/... to /assets/images/... (absolute from web server root)
|
195
|
+
display_path = image_path.gsub('../../assets/images/', '/assets/images/') if image_path
|
196
|
+
|
197
|
+
# Fix the SVG pattern path to use the correct absolute path
|
198
|
+
svg_output = svg_output.gsub('../../assets/images/', '/assets/images/')
|
199
|
+
end
|
200
|
+
|
201
|
+
# Create standalone HTML page
|
202
|
+
html_content = <<~HTML
|
203
|
+
<!DOCTYPE html>
|
204
|
+
<html>
|
205
|
+
<head>
|
206
|
+
<title>#{test[:title]}</title>
|
207
|
+
<style>
|
208
|
+
body { font-family: Arial, sans-serif; margin: 0; padding: 0; background: #f5f5f5; }
|
209
|
+
.banner { width: 100%; margin: 0; padding: 0; border: 3px solid #007cba; border-radius: 8px; }
|
210
|
+
.content { padding: 20px; padding-bottom: 80px; }
|
211
|
+
.description { margin: 10px 0; font-weight: bold; }
|
212
|
+
.config { background: #f0f0f0; padding: 10px; margin: 10px 0; font-family: monospace; font-size: 12px; }
|
213
|
+
.navigation {
|
214
|
+
position: fixed;
|
215
|
+
bottom: 0;
|
216
|
+
left: 0;
|
217
|
+
right: 0;
|
218
|
+
background: #e0e0e0;
|
219
|
+
padding: 15px;
|
220
|
+
text-align: center;
|
221
|
+
border-top: 2px solid #007cba;
|
222
|
+
z-index: 1000;
|
223
|
+
}
|
224
|
+
.navigation a { margin: 0 10px; padding: 8px 15px; background: #007cba; color: white; text-decoration: none; border-radius: 3px; }
|
225
|
+
.navigation a:hover { background: #005a87; }
|
226
|
+
.original-image { margin: 20px 0; padding: 20px; background: white; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
|
227
|
+
.original-image h3 { margin: 0 0 10px 0; color: #333; }
|
228
|
+
.original-image img { max-width: 100%; height: auto; border: 1px solid #ddd; }
|
229
|
+
</style>
|
230
|
+
</head>
|
231
|
+
<body>
|
232
|
+
<div class="banner" id="header">
|
233
|
+
#{svg_output}
|
234
|
+
</div>
|
235
|
+
<div class="content">
|
236
|
+
<div class="description">#{test[:description]}</div>
|
237
|
+
<div class="config">#{test[:config]}</div>
|
238
|
+
#{image_path ? "<div class='original-image'>\n <h3>Original Image (for comparison):</h3>\n <img src='#{display_path}' alt='Original image'>\n </div>" : ""}
|
239
|
+
<div class="navigation">
|
240
|
+
<a href="index.html">Back to Index</a>
|
241
|
+
</div>
|
242
|
+
</div>
|
243
|
+
</body>
|
244
|
+
</html>
|
245
|
+
HTML
|
246
|
+
|
247
|
+
File.write(filename, html_content)
|
248
|
+
end
|
249
|
+
|
250
|
+
pages << { number: page_num, title: test[:title], filename: filename }
|
251
|
+
end
|
252
|
+
|
253
|
+
# Add navigation links to each page
|
254
|
+
pages.each_with_index do |page, index|
|
255
|
+
prev_page = index > 0 ? pages[index - 1][:filename] : nil
|
256
|
+
next_page = index < pages.length - 1 ? pages[index + 1][:filename] : nil
|
257
|
+
|
258
|
+
# Read the current page
|
259
|
+
page_file = test_dir/page[:filename]
|
260
|
+
content = File.read(page_file)
|
261
|
+
|
262
|
+
# Create navigation HTML
|
263
|
+
nav_html = '<div class="navigation">'
|
264
|
+
nav_html += '<a href="index.html">Back to Index</a>'
|
265
|
+
nav_html += " <a href=\"#{prev_page}\">Previous</a>" if prev_page
|
266
|
+
nav_html += " <a href=\"#{next_page}\">Next</a>" if next_page
|
267
|
+
nav_html += '</div>'
|
268
|
+
|
269
|
+
# Replace the placeholder navigation
|
270
|
+
content.gsub!(/<div class="navigation">.*?<\/div>/m, nav_html)
|
271
|
+
|
272
|
+
# Write the updated page
|
273
|
+
File.write(page_file, content)
|
274
|
+
end
|
275
|
+
|
276
|
+
# Create index page
|
277
|
+
index_html = <<~HTML
|
278
|
+
<!DOCTYPE html>
|
279
|
+
<html>
|
280
|
+
<head>
|
281
|
+
<title>BannerSVG Feature Tests</title>
|
282
|
+
<style>
|
283
|
+
body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }
|
284
|
+
.test-list { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
|
285
|
+
.test-item { margin: 10px 0; padding: 10px; background: #f9f9f9; border-left: 4px solid #007cba; }
|
286
|
+
.test-item a { color: #007cba; text-decoration: none; font-weight: bold; }
|
287
|
+
.test-item a:hover { text-decoration: underline; }
|
288
|
+
.test-description { color: #666; font-size: 14px; margin-top: 5px; }
|
289
|
+
</style>
|
290
|
+
</head>
|
291
|
+
<body>
|
292
|
+
<h1>BannerSVG Feature Tests</h1>
|
293
|
+
<div class="test-list">
|
294
|
+
<p>Click on any test to view the banner in isolation:</p>
|
295
|
+
#{pages.map.with_index { |page, index|
|
296
|
+
"<div class='test-item'><a href='#{page[:filename]}'>#{index + 1}. #{page[:title]}</a><div class='test-description'>#{tests[index][:description]}</div></div>"
|
297
|
+
}.join("\n")}
|
298
|
+
</div>
|
299
|
+
</body>
|
300
|
+
</html>
|
301
|
+
HTML
|
302
|
+
|
303
|
+
File.write(test_dir/"index.html", index_html)
|
304
|
+
|
305
|
+
# Call the environment's examine function
|
306
|
+
examine("banner-test")
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require_relative './environment'
|
2
|
+
|
3
|
+
manual_setup
|
4
|
+
|
5
|
+
# Create multiple views to test different banner integration scenarios
|
6
|
+
views = []
|
7
|
+
|
8
|
+
# Test 1: Simple banner in header
|
9
|
+
view1 = @repo.create_view("banner-simple", "Simple Banner Site", "A site with basic SVG banner in header")
|
10
|
+
File.open(view1.dir/:config/"layout.txt", "w") do |f|
|
11
|
+
f.puts "header"
|
12
|
+
f.puts "main"
|
13
|
+
end
|
14
|
+
view1.generate_empty_containers
|
15
|
+
File.open(view1.dir/:config/"header.txt", "w") do |f|
|
16
|
+
f.puts "banner svg"
|
17
|
+
end
|
18
|
+
view1.generate_front_page
|
19
|
+
views << view1
|
20
|
+
|
21
|
+
# Test 2: SVG debug test (header only)
|
22
|
+
view2 = @repo.create_view("svg-debug", "SVG Debug Test", "Testing SVG insertion")
|
23
|
+
File.open(view2.dir/:config/"layout.txt", "w") do |f|
|
24
|
+
f.puts "header"
|
25
|
+
end
|
26
|
+
view2.generate_empty_containers
|
27
|
+
File.open(view2.dir/:config/"header.txt", "w") do |f|
|
28
|
+
f.puts "banner_svg"
|
29
|
+
end
|
30
|
+
File.open(view2.dir/:config/"config.txt", "w") do |f|
|
31
|
+
f.puts "# Simple debug config"
|
32
|
+
f.puts "back.radial #FF0000 #0000FF"
|
33
|
+
f.puts "title.color #FFFFFF"
|
34
|
+
f.puts "subtitle.color #FFFF00"
|
35
|
+
f.puts "title.style bold"
|
36
|
+
f.puts "subtitle.style italic"
|
37
|
+
end
|
38
|
+
view2.generate_front_page
|
39
|
+
views << view2
|
40
|
+
|
41
|
+
# Test 3: Complex header with multiple elements
|
42
|
+
view3 = @repo.create_view("complex-header", "My Awesome Blog", "Exploring the Power of SVG Banners")
|
43
|
+
File.open(view3.dir/:config/"layout.txt", "w") do |f|
|
44
|
+
f.puts "header"
|
45
|
+
f.puts "main"
|
46
|
+
end
|
47
|
+
view3.generate_empty_containers
|
48
|
+
File.open(view3.dir/:config/"header.txt", "w") do |f|
|
49
|
+
f.puts "banner_svg"
|
50
|
+
f.puts "title"
|
51
|
+
f.puts "subtitle"
|
52
|
+
end
|
53
|
+
File.open(view3.dir/:config/"config.txt", "w") do |f|
|
54
|
+
f.puts "# Complex SVG Banner Configuration"
|
55
|
+
f.puts "# This exercises multiple features at once"
|
56
|
+
f.puts ""
|
57
|
+
f.puts "# Background: Radial gradient from purple to blue"
|
58
|
+
f.puts "back.radial #8B5CF6 #3B82F6"
|
59
|
+
f.puts ""
|
60
|
+
f.puts "# Custom aspect ratio (wider banner)"
|
61
|
+
f.puts "aspect 6.0"
|
62
|
+
f.puts ""
|
63
|
+
f.puts "# Custom font"
|
64
|
+
f.puts "text.font Georgia serif"
|
65
|
+
f.puts ""
|
66
|
+
f.puts "# Title styling: Bold, larger scale, custom color"
|
67
|
+
f.puts "title.scale 1.2"
|
68
|
+
f.puts "title.style bold"
|
69
|
+
f.puts "title.color #FFFFFF"
|
70
|
+
f.puts "title.align center"
|
71
|
+
f.puts ""
|
72
|
+
f.puts "# Subtitle styling: Italic, smaller scale, different color"
|
73
|
+
f.puts "subtitle.scale 0.6"
|
74
|
+
f.puts "subtitle.style italic"
|
75
|
+
f.puts "subtitle.color #E5E7EB"
|
76
|
+
f.puts "subtitle.align center"
|
77
|
+
f.puts ""
|
78
|
+
f.puts "# Custom positioning for both title and subtitle"
|
79
|
+
f.puts "title.xy 50% 45%"
|
80
|
+
f.puts "subtitle.xy 50% 75%"
|
81
|
+
end
|
82
|
+
view3.generate_front_page
|
83
|
+
views << view3
|
84
|
+
|
85
|
+
# Test 4: Empty header (placeholder test)
|
86
|
+
view4 = @repo.create_view("empty-header-test", "Empty Header Test", "Testing placeholder text")
|
87
|
+
File.open(view4.dir/:config/"layout.txt", "w") do |f|
|
88
|
+
f.puts "header"
|
89
|
+
f.puts "main"
|
90
|
+
end
|
91
|
+
view4.generate_empty_containers
|
92
|
+
File.open(view4.dir/:config/"header.txt", "w") do |f|
|
93
|
+
# Empty file - should trigger placeholder
|
94
|
+
end
|
95
|
+
view4.generate_front_page
|
96
|
+
views << view4
|
97
|
+
|
98
|
+
instruct <<~EOS
|
99
|
+
Banner Integration Tests
|
100
|
+
|
101
|
+
This test demonstrates different banner integration scenarios:
|
102
|
+
|
103
|
+
1. banner-simple: Basic SVG banner in header with main content
|
104
|
+
2. svg-debug: Header-only layout with red-to-blue radial gradient banner
|
105
|
+
3. complex-header: Multiple header elements with sophisticated banner styling
|
106
|
+
4. empty-header-test: Empty header to verify placeholder text behavior
|
107
|
+
|
108
|
+
Each view tests different aspects of banner integration:
|
109
|
+
- Simple banner insertion
|
110
|
+
- Header-only layouts
|
111
|
+
- Complex styling combinations
|
112
|
+
- Placeholder text handling
|
113
|
+
EOS
|
114
|
+
|
115
|
+
examine views
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require_relative './environment'
|
2
|
+
|
3
|
+
manual_setup
|
4
|
+
|
5
|
+
# Create multiple views to test different radial gradient scenarios
|
6
|
+
views = []
|
7
|
+
|
8
|
+
# Test 1: Custom radial gradient with custom center and radius
|
9
|
+
view1 = @repo.create_view("radial-custom", "Custom Radial Test", "Testing custom radial gradient parameters")
|
10
|
+
File.open(view1.dir/:config/"layout.txt", "w") do |f|
|
11
|
+
f.puts "header"
|
12
|
+
end
|
13
|
+
view1.generate_empty_containers
|
14
|
+
File.open(view1.dir/:config/"header.txt", "w") do |f|
|
15
|
+
f.puts "banner_svg"
|
16
|
+
end
|
17
|
+
File.open(view1.dir/:config/"config.txt", "w") do |f|
|
18
|
+
f.puts "# Custom Radial Gradient Test"
|
19
|
+
f.puts "# Default: circular vignette (ar omitted, will use 1/aspect)"
|
20
|
+
f.puts "aspect 5.0"
|
21
|
+
f.puts "back.radial #FF6B6B #4ECDC4 75% 25% 60%"
|
22
|
+
f.puts ""
|
23
|
+
f.puts "# Custom: elliptical vignette (ar = 0.5, i.e. squished horizontally)"
|
24
|
+
f.puts "# Uncomment to test:"
|
25
|
+
f.puts "# back.radial #FF6B6B #4ECDC4 75% 25% 60% 0.5"
|
26
|
+
f.puts ""
|
27
|
+
f.puts "# Title styling"
|
28
|
+
f.puts "title.color #FFFFFF"
|
29
|
+
f.puts "title.style bold"
|
30
|
+
f.puts "title.align center"
|
31
|
+
f.puts ""
|
32
|
+
f.puts "# Subtitle styling"
|
33
|
+
f.puts "subtitle.color #FFFFFF"
|
34
|
+
f.puts "subtitle.style italic"
|
35
|
+
f.puts "subtitle.align center"
|
36
|
+
end
|
37
|
+
view1.generate_front_page
|
38
|
+
views << view1
|
39
|
+
|
40
|
+
# Test 2: Large radius radial gradient (soft vignette)
|
41
|
+
view2 = @repo.create_view("radial-large-radius", "Large Radius Radial Test", "Testing r > 100% for soft vignette")
|
42
|
+
File.open(view2.dir/:config/"layout.txt", "w") do |f|
|
43
|
+
f.puts "header"
|
44
|
+
end
|
45
|
+
view2.generate_empty_containers
|
46
|
+
File.open(view2.dir/:config/"header.txt", "w") do |f|
|
47
|
+
f.puts "banner_svg"
|
48
|
+
end
|
49
|
+
File.open(view2.dir/:config/"config.txt", "w") do |f|
|
50
|
+
f.puts "# Large Radius Radial Gradient Test"
|
51
|
+
f.puts "aspect 5.0"
|
52
|
+
f.puts "# r = 150% (soft vignette, gradient extends beyond banner)"
|
53
|
+
f.puts "back.radial #FF6B6B #4ECDC4 50% 50% 150%"
|
54
|
+
f.puts ""
|
55
|
+
f.puts "# Title styling"
|
56
|
+
f.puts "title.color #FFFFFF"
|
57
|
+
f.puts "title.style bold"
|
58
|
+
f.puts "title.align center"
|
59
|
+
f.puts ""
|
60
|
+
f.puts "# Subtitle styling"
|
61
|
+
f.puts "subtitle.color #FFFFFF"
|
62
|
+
f.puts "subtitle.style italic"
|
63
|
+
f.puts "subtitle.align center"
|
64
|
+
end
|
65
|
+
view2.generate_front_page
|
66
|
+
views << view2
|
67
|
+
|
68
|
+
instruct <<~EOS
|
69
|
+
Radial Gradient Banner Tests
|
70
|
+
|
71
|
+
This test demonstrates different radial gradient scenarios:
|
72
|
+
|
73
|
+
1. radial-custom: Custom center position (75%, 25%) and radius (60%)
|
74
|
+
- Tests aspect-ratio compensation for circular vignettes
|
75
|
+
- Includes commented example for elliptical vignettes (ar=0.5)
|
76
|
+
|
77
|
+
2. radial-large-radius: Large radius (150%) for soft vignette effect
|
78
|
+
- Tests gradients that extend beyond the banner boundaries
|
79
|
+
- Creates a very soft, subtle color transition
|
80
|
+
|
81
|
+
Both tests use:
|
82
|
+
- Wide aspect ratio (5.0) to test gradient behavior in non-square banners
|
83
|
+
- White text with bold title and italic subtitle
|
84
|
+
- Centered text alignment
|
85
|
+
EOS
|
86
|
+
|
87
|
+
examine views
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative "./environment"
|
2
|
+
|
3
|
+
manual_setup
|
4
|
+
|
5
|
+
@repo.create_view("testview", "Test View", "A test view for manual inspection")
|
6
|
+
|
7
|
+
# Post 1
|
8
|
+
draft_1_body = <<~BODY
|
9
|
+
.blurb It's sort of the William Riker of blog posts.
|
10
|
+
This is the first post.
|
11
|
+
|
12
|
+
It contains multiple paragraphs:
|
13
|
+
- Introduction to the topic.<br>
|
14
|
+
- A deep dive into the details.<br>
|
15
|
+
- Conclusion with key takeaways.<br>
|
16
|
+
|
17
|
+
This should span multiple lines in the draft.
|
18
|
+
BODY
|
19
|
+
|
20
|
+
name1 = @repo.create_draft(title: "Post number one", views: ["testview"], body: draft_1_body)
|
21
|
+
num = @repo.finish_draft(name1)
|
22
|
+
@repo.generate_post(num)
|
23
|
+
|
24
|
+
# Post 2
|
25
|
+
draft_2_body = <<~BODY
|
26
|
+
.blurb In Roman numerals, this is post II.
|
27
|
+
This is the second post.
|
28
|
+
|
29
|
+
- Discussing the second topic.<br>
|
30
|
+
- Elaborating on several points.<br>
|
31
|
+
- Wrapping up with some additional comments.<br>
|
32
|
+
|
33
|
+
It also spans multiple lines in the draft.
|
34
|
+
BODY
|
35
|
+
|
36
|
+
name2 = @repo.create_draft(title: "Post number two", views: ["testview"], body: draft_2_body)
|
37
|
+
num = @repo.finish_draft(name2)
|
38
|
+
@repo.generate_post(num)
|
39
|
+
|
40
|
+
@repo.generate_front_page("testview") # Generate the front page
|
41
|
+
|
42
|
+
instruct <<~EOS
|
43
|
+
Front page should have two posts.
|
44
|
+
Each should have a blurb.
|
45
|
+
Links should work (and back button to return).
|
46
|
+
EOS
|
47
|
+
examine("testview")
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative './environment'
|
2
|
+
|
3
|
+
manual_setup
|
4
|
+
|
5
|
+
srand(42) # for random posts
|
6
|
+
|
7
|
+
create_3_views
|
8
|
+
create_13_posts_manual
|
9
|
+
alter_pubdates
|
10
|
+
|
11
|
+
view = @repo.view("blog3")
|
12
|
+
File.open(view.dir/:config/"layout.txt", "w") do |f|
|
13
|
+
f.puts "header"
|
14
|
+
f.puts "main"
|
15
|
+
f.puts "right 20%"
|
16
|
+
end
|
17
|
+
view.generate_empty_containers
|
18
|
+
File.open(view.dir/:config/"right.txt", "w") do |f|
|
19
|
+
f.puts "widget links"
|
20
|
+
end
|
21
|
+
|
22
|
+
data = view.dir/:widgets/"links/list.txt"
|
23
|
+
Dir.mkdir(view.dir/:widgets/"links")
|
24
|
+
File.open(data, "w") do |f|
|
25
|
+
f.puts "https://www.google.com,Google"
|
26
|
+
f.puts "https://www.yahoo.com,Yahoo"
|
27
|
+
end
|
28
|
+
see_file data
|
29
|
+
|
30
|
+
view.generate_front_page
|
31
|
+
|
32
|
+
instruct <<~EOS
|
33
|
+
Again, 13 posts in three views
|
34
|
+
blog3 will have only header, main, right
|
35
|
+
It will have the Links widget
|
36
|
+
Click the + to expand
|
37
|
+
Links open in new tabs
|
38
|
+
EOS
|
39
|
+
|
40
|
+
examine view
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative './environment'
|
2
|
+
|
3
|
+
manual_setup
|
4
|
+
|
5
|
+
srand(42) # for random posts
|
6
|
+
|
7
|
+
view = @repo.create_view("testview", "Another Test View", "testing pagination for post index")
|
8
|
+
|
9
|
+
35.times do |i|
|
10
|
+
post = @repo.create_post(title: pseudowords(5, "Post #{i}"), body: pseudolines(10))
|
11
|
+
post.set_pubdate_with_seconds("2025-07-26", i) # Set seconds to 00, 01, 02, etc.
|
12
|
+
@repo.generate_post(post.id)
|
13
|
+
end
|
14
|
+
|
15
|
+
view.generate_front_page
|
16
|
+
|
17
|
+
instruct <<~EOS
|
18
|
+
Creates 35 posts (now instant!)
|
19
|
+
Posts have timestamps 12:00:00, 12:00:01, 12:00:02, etc.
|
20
|
+
Confirm they are in "recent first" order -- 35 down to 1
|
21
|
+
Confirm pagination works
|
22
|
+
EOS
|
23
|
+
|
24
|
+
examine view
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative './environment'
|
2
|
+
|
3
|
+
# Handle --automated flag at the end
|
4
|
+
automated_mode = ARGV.last == '--automated'
|
5
|
+
if automated_mode
|
6
|
+
ARGV.pop # Remove --automated from ARGV
|
7
|
+
end
|
8
|
+
|
9
|
+
abort "Need a view name (blog1 blog2 blog3)" unless ARGV.size == 1
|
10
|
+
|
11
|
+
view = ARGV.first
|
12
|
+
|
13
|
+
# Restore --automated flag for the examine function
|
14
|
+
ARGV << '--automated' if automated_mode
|
15
|
+
|
16
|
+
manual_setup
|
17
|
+
|
18
|
+
srand(42) # for random posts
|
19
|
+
|
20
|
+
create_3_views
|
21
|
+
create_13_posts_manual
|
22
|
+
alter_pubdates
|
23
|
+
|
24
|
+
view = @repo.lookup_view(view)
|
25
|
+
|
26
|
+
instruct <<~EOS
|
27
|
+
Three blogs created: blog1 blog2 blog3
|
28
|
+
Browser goes to whichever you put on command line: #{view.name}
|
29
|
+
You can also navigate to the others.
|
30
|
+
Total of 13 posts
|
31
|
+
Each post may be in only one view or two or all three
|
32
|
+
EOS
|
33
|
+
|
34
|
+
%w[blog1 blog2 blog3].each do |v|
|
35
|
+
@repo.generate_front_page(v)
|
36
|
+
end
|
37
|
+
|
38
|
+
examine view
|