webgen 0.5.17 → 1.0.0.beta1
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.
- data/API.rdoc +143 -0
- data/AUTHORS +0 -1
- data/COPYING +17 -8
- data/ChangeLog +4456 -0
- data/GPL +623 -289
- data/README.md +71 -0
- data/Rakefile +87 -99
- data/VERSION +1 -1
- data/bin/webgen +1 -7
- data/data/webgen/basic_website_template/ext/init.rb +15 -0
- data/data/webgen/basic_website_template/webgen.config +18 -0
- data/data/webgen/bundle_template_files/README.md.erb +24 -0
- data/data/webgen/bundle_template_files/Rakefile.erb +36 -0
- data/data/webgen/bundle_template_files/info.yaml.erb +16 -0
- data/data/webgen/bundle_template_files/init.rb.erb +1 -0
- data/data/webgen/passive_sources/default.metainfo +32 -0
- data/data/webgen/passive_sources/stylesheets/coderay-default.css +109 -118
- data/data/webgen/passive_sources/templates/feed.template +62 -0
- data/data/webgen/passive_sources/templates/sitemap.template +3 -6
- data/data/webgen/passive_sources/templates/tag.template +42 -0
- data/data/webgen/website_bundles/default/README +2 -2
- data/lib/webgen/blackboard.rb +15 -51
- data/lib/webgen/bundle/built-in-show-changes/init.rb +54 -0
- data/lib/webgen/bundle/built-in/init.rb +366 -0
- data/lib/webgen/bundle_loader.rb +126 -0
- data/lib/webgen/cache.rb +9 -18
- data/lib/webgen/cli.rb +131 -58
- data/lib/webgen/cli/bundle_command.rb +30 -0
- data/lib/webgen/cli/create_bundle_command.rb +46 -0
- data/lib/webgen/cli/create_command.rb +48 -60
- data/lib/webgen/cli/generate_command.rb +25 -0
- data/lib/webgen/cli/install_bundle_command.rb +34 -0
- data/lib/webgen/cli/list_bundle_command.rb +108 -0
- data/lib/webgen/cli/logger.rb +45 -0
- data/lib/webgen/cli/show_command.rb +30 -0
- data/lib/webgen/cli/show_config_command.rb +63 -0
- data/lib/webgen/cli/show_dependencies_command.rb +103 -0
- data/lib/webgen/cli/show_extensions_command.rb +74 -0
- data/lib/webgen/cli/utils.rb +68 -95
- data/lib/webgen/configuration.rb +143 -105
- data/lib/webgen/content_processor.rb +160 -0
- data/lib/webgen/content_processor/blocks.rb +96 -0
- data/lib/webgen/content_processor/builder.rb +25 -0
- data/lib/webgen/content_processor/erb.rb +25 -0
- data/lib/webgen/content_processor/erubis.rb +31 -0
- data/lib/webgen/content_processor/fragments.rb +82 -0
- data/lib/webgen/content_processor/haml.rb +25 -0
- data/lib/webgen/content_processor/html_head.rb +157 -0
- data/lib/webgen/content_processor/kramdown.rb +49 -0
- data/lib/webgen/content_processor/maruku.rb +39 -0
- data/lib/webgen/content_processor/r_discount.rb +21 -0
- data/lib/webgen/content_processor/rdoc.rb +22 -0
- data/lib/webgen/content_processor/redcloth.rb +23 -0
- data/lib/webgen/content_processor/ruby.rb +20 -0
- data/lib/webgen/content_processor/sass.rb +145 -0
- data/lib/webgen/content_processor/scss.rb +23 -0
- data/lib/webgen/content_processor/tags.rb +30 -0
- data/lib/webgen/content_processor/tidy.rb +32 -0
- data/lib/webgen/content_processor/tikz.rb +116 -0
- data/lib/webgen/content_processor/xmllint.rb +31 -0
- data/lib/webgen/context.rb +57 -29
- data/lib/webgen/context/html_head.rb +60 -0
- data/lib/webgen/context/nodes.rb +32 -27
- data/lib/webgen/context/rendering.rb +39 -0
- data/lib/webgen/context/webgen_tags.rb +25 -0
- data/lib/webgen/core_ext.rb +25 -0
- data/lib/webgen/destination.rb +151 -0
- data/lib/webgen/destination/file_system.rb +62 -0
- data/lib/webgen/error.rb +59 -49
- data/lib/webgen/extension_manager.rb +121 -0
- data/lib/webgen/item_tracker.rb +237 -0
- data/lib/webgen/item_tracker/file.rb +39 -0
- data/lib/webgen/item_tracker/missing_node.rb +61 -0
- data/lib/webgen/item_tracker/node_content.rb +40 -0
- data/lib/webgen/item_tracker/node_meta_info.rb +53 -0
- data/lib/webgen/item_tracker/nodes.rb +92 -0
- data/lib/webgen/logger.rb +26 -82
- data/lib/webgen/node.rb +122 -367
- data/lib/webgen/node_finder.rb +336 -0
- data/lib/webgen/page.rb +48 -85
- data/lib/webgen/path.rb +218 -156
- data/lib/webgen/path_handler.rb +400 -0
- data/lib/webgen/path_handler/base.rb +220 -0
- data/lib/webgen/path_handler/copy.rb +78 -0
- data/lib/webgen/path_handler/directory.rb +21 -0
- data/lib/webgen/path_handler/feed.rb +82 -0
- data/lib/webgen/path_handler/meta_info.rb +84 -0
- data/lib/webgen/path_handler/page.rb +38 -0
- data/lib/webgen/path_handler/page_utils.rb +79 -0
- data/lib/webgen/path_handler/sitemap.rb +52 -0
- data/lib/webgen/path_handler/template.rb +96 -0
- data/lib/webgen/path_handler/virtual.rb +85 -0
- data/lib/webgen/{webgentask.rb → rake_task.rb} +31 -27
- data/lib/webgen/source.rb +106 -24
- data/lib/webgen/source/file_system.rb +41 -0
- data/lib/webgen/source/stacked.rb +49 -53
- data/lib/webgen/source/tar_archive.rb +59 -0
- data/lib/webgen/tag.rb +250 -19
- data/lib/webgen/tag/breadcrumb_trail.rb +65 -0
- data/lib/webgen/tag/coderay.rb +32 -35
- data/lib/webgen/tag/date.rb +9 -9
- data/lib/webgen/tag/execute_command.rb +31 -0
- data/lib/webgen/tag/include_file.rb +32 -0
- data/lib/webgen/tag/langbar.rb +31 -47
- data/lib/webgen/tag/link.rb +17 -18
- data/lib/webgen/tag/menu.rb +27 -189
- data/lib/webgen/tag/meta_info.rb +31 -0
- data/lib/webgen/tag/relocatable.rb +48 -39
- data/lib/webgen/tag/tikz.rb +24 -100
- data/lib/webgen/task.rb +99 -0
- data/lib/webgen/task/create_bundle.rb +73 -0
- data/lib/webgen/task/create_website.rb +94 -0
- data/lib/webgen/task/generate_website.rb +47 -0
- data/lib/webgen/test_helper.rb +183 -0
- data/lib/webgen/tree.rb +95 -46
- data/lib/webgen/utils.rb +39 -0
- data/lib/webgen/utils/external_command.rb +27 -0
- data/lib/webgen/utils/tag_parser.rb +124 -0
- data/lib/webgen/version.rb +1 -1
- data/lib/webgen/website.rb +134 -296
- data/setup.rb +1 -1
- data/test/test_documentation.rb +43 -0
- data/test/webgen/cli/test_logger.rb +41 -0
- data/test/{test_contentprocessor_blocks.rb → webgen/content_processor/test_blocks.rb} +30 -28
- data/test/webgen/content_processor/test_builder.rb +25 -0
- data/test/webgen/content_processor/test_erb.rb +21 -0
- data/test/webgen/content_processor/test_erubis.rb +33 -0
- data/test/webgen/content_processor/test_fragments.rb +96 -0
- data/test/webgen/content_processor/test_haml.rb +24 -0
- data/test/webgen/content_processor/test_html_head.rb +78 -0
- data/test/webgen/content_processor/test_kramdown.rb +49 -0
- data/test/webgen/content_processor/test_maruku.rb +30 -0
- data/test/webgen/content_processor/test_r_discount.rb +18 -0
- data/test/webgen/content_processor/test_rdoc.rb +18 -0
- data/test/webgen/content_processor/test_redcloth.rb +23 -0
- data/test/webgen/content_processor/test_ruby.rb +24 -0
- data/test/webgen/content_processor/test_sass.rb +44 -0
- data/test/webgen/content_processor/test_scss.rb +23 -0
- data/test/webgen/content_processor/test_tags.rb +44 -0
- data/test/webgen/content_processor/test_tidy.rb +31 -0
- data/test/webgen/content_processor/test_tikz.rb +33 -0
- data/test/webgen/content_processor/test_xmllint.rb +32 -0
- data/test/webgen/destination/test_file_system.rb +54 -0
- data/test/webgen/item_tracker/test_file.rb +31 -0
- data/test/webgen/item_tracker/test_missing_node.rb +70 -0
- data/test/webgen/item_tracker/test_node_content.rb +42 -0
- data/test/webgen/item_tracker/test_node_meta_info.rb +44 -0
- data/test/webgen/item_tracker/test_nodes.rb +61 -0
- data/test/webgen/path_handler/test_base.rb +153 -0
- data/test/webgen/path_handler/test_copy.rb +56 -0
- data/test/webgen/path_handler/test_feed.rb +85 -0
- data/test/webgen/path_handler/test_meta_info.rb +98 -0
- data/test/webgen/path_handler/test_page.rb +25 -0
- data/test/webgen/path_handler/test_page_utils.rb +59 -0
- data/test/webgen/path_handler/test_sitemap.rb +95 -0
- data/test/webgen/path_handler/test_template.rb +64 -0
- data/test/webgen/path_handler/test_virtual.rb +87 -0
- data/test/webgen/source/test_file_system.rb +51 -0
- data/test/webgen/source/test_stacked.rb +35 -0
- data/test/{test_source_tararchive.rb → webgen/source/test_tar_archive.rb} +10 -25
- data/test/webgen/tag/test_breadcrumb_trail.rb +66 -0
- data/test/webgen/tag/test_coderay.rb +34 -0
- data/test/webgen/tag/test_date.rb +18 -0
- data/test/webgen/tag/test_execute_command.rb +36 -0
- data/test/webgen/tag/test_include_file.rb +35 -0
- data/test/webgen/tag/test_langbar.rb +50 -0
- data/test/webgen/tag/test_link.rb +40 -0
- data/test/webgen/tag/test_menu.rb +61 -0
- data/test/webgen/tag/test_meta_info.rb +25 -0
- data/test/webgen/tag/test_relocatable.rb +50 -0
- data/test/webgen/tag/test_tikz.rb +41 -0
- data/test/webgen/task/test_create_website.rb +46 -0
- data/test/webgen/test_blackboard.rb +31 -0
- data/test/webgen/test_bundle_loader.rb +55 -0
- data/test/{test_cache.rb → webgen/test_cache.rb} +3 -15
- data/test/webgen/test_cli.rb +41 -0
- data/test/webgen/test_configuration.rb +131 -0
- data/test/webgen/test_content_processor.rb +86 -0
- data/test/webgen/test_context.rb +73 -0
- data/test/webgen/test_core_ext.rb +20 -0
- data/test/webgen/test_destination.rb +48 -0
- data/test/webgen/test_error.rb +121 -0
- data/test/webgen/test_extension_manager.rb +70 -0
- data/test/webgen/test_item_tracker.rb +106 -0
- data/test/{test_languages.rb → webgen/test_languages.rb} +4 -4
- data/test/webgen/test_logger.rb +46 -0
- data/test/webgen/test_node.rb +178 -0
- data/test/webgen/test_node_finder.rb +127 -0
- data/test/{test_page.rb → webgen/test_page.rb} +44 -48
- data/test/webgen/test_path.rb +271 -0
- data/test/{test_webgentask.rb → webgen/test_rake_task.rb} +4 -4
- data/test/webgen/test_source.rb +59 -0
- data/test/webgen/test_tag.rb +137 -0
- data/test/webgen/test_task.rb +40 -0
- data/test/webgen/test_tree.rb +147 -0
- data/test/webgen/test_utils.rb +16 -0
- data/test/webgen/test_website.rb +45 -0
- data/test/webgen/utils/test_tag_parser.rb +99 -0
- metadata +292 -344
- data/data/webgen/passive_sources/templates/atom_feed.template +0 -39
- data/data/webgen/passive_sources/templates/rss_feed.template +0 -28
- data/data/webgen/resources.yaml +0 -4
- data/data/webgen/webgui/app.rb +0 -11
- data/data/webgen/webgui/controller/main.rb +0 -135
- data/data/webgen/webgui/layout/default.xhtml +0 -40
- data/data/webgen/webgui/overrides/win32console.rb +0 -0
- data/data/webgen/webgui/public/css/jquery.autocomplete.css +0 -50
- data/data/webgen/webgui/public/css/ramaze_error.css +0 -90
- data/data/webgen/webgui/public/css/style.css +0 -55
- data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
- data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
- data/data/webgen/webgui/public/js/jquery.autocomplete.js +0 -15
- data/data/webgen/webgui/public/js/jquery.js +0 -32
- data/data/webgen/webgui/start.rb +0 -9
- data/data/webgen/webgui/view/create_website.xhtml +0 -14
- data/data/webgen/webgui/view/error.xhtml +0 -64
- data/data/webgen/webgui/view/index.xhtml +0 -22
- data/data/webgen/webgui/view/manage_website.xhtml +0 -18
- data/data/webgen/website_skeleton/README +0 -10
- data/data/webgen/website_skeleton/Rakefile +0 -69
- data/data/webgen/website_skeleton/config.yaml +0 -35
- data/data/webgen/website_skeleton/ext/init.rb +0 -10
- data/doc/contentprocessor.template +0 -11
- data/doc/contentprocessor/blocks.page +0 -129
- data/doc/contentprocessor/builder.page +0 -79
- data/doc/contentprocessor/erb.page +0 -60
- data/doc/contentprocessor/erubis.page +0 -46
- data/doc/contentprocessor/fragments.page +0 -26
- data/doc/contentprocessor/haml.page +0 -46
- data/doc/contentprocessor/head.page +0 -31
- data/doc/contentprocessor/kramdown.page +0 -49
- data/doc/contentprocessor/less.page +0 -34
- data/doc/contentprocessor/maruku.page +0 -44
- data/doc/contentprocessor/rdiscount.page +0 -37
- data/doc/contentprocessor/rdoc.page +0 -36
- data/doc/contentprocessor/redcloth.page +0 -41
- data/doc/contentprocessor/sass.page +0 -31
- data/doc/contentprocessor/scss.page +0 -39
- data/doc/contentprocessor/tags.page +0 -73
- data/doc/contentprocessor/tidy.page +0 -14
- data/doc/contentprocessor/xmllint.page +0 -14
- data/doc/extensions.metainfo +0 -29
- data/doc/extensions.page +0 -15
- data/doc/extensions.template +0 -17
- data/doc/faq.page +0 -222
- data/doc/getting_started.page +0 -135
- data/doc/index.page +0 -71
- data/doc/manual.page +0 -727
- data/doc/reference_configuration.page +0 -1254
- data/doc/reference_metainfo.page +0 -265
- data/doc/reference_website_styles.page +0 -32
- data/doc/source/filesystem.page +0 -41
- data/doc/source/tararchive.page +0 -40
- data/doc/sourcehandler.template +0 -23
- data/doc/sourcehandler/copy.page +0 -19
- data/doc/sourcehandler/directory.page +0 -27
- data/doc/sourcehandler/feed.page +0 -102
- data/doc/sourcehandler/metainfo.page +0 -48
- data/doc/sourcehandler/page.page +0 -14
- data/doc/sourcehandler/sitemap.page +0 -46
- data/doc/sourcehandler/template.page +0 -45
- data/doc/sourcehandler/virtual.page +0 -49
- data/doc/tag.template +0 -25
- data/doc/tag/breadcrumbtrail.page +0 -40
- data/doc/tag/coderay.page +0 -53
- data/doc/tag/date.page +0 -31
- data/doc/tag/executecommand.page +0 -26
- data/doc/tag/includefile.page +0 -32
- data/doc/tag/langbar.page +0 -47
- data/doc/tag/link.page +0 -44
- data/doc/tag/menu.page +0 -109
- data/doc/tag/metainfo.page +0 -29
- data/doc/tag/relocatable.page +0 -38
- data/doc/tag/sitemap.page +0 -31
- data/doc/tag/tikz.page +0 -159
- data/doc/upgrading.page +0 -138
- data/doc/webgen_page_format.page +0 -129
- data/doc/website_styles.metainfo +0 -8
- data/lib/webgen/cli/apply_command.rb +0 -66
- data/lib/webgen/cli/run_command.rb +0 -22
- data/lib/webgen/cli/webgui_command.rb +0 -68
- data/lib/webgen/common.rb +0 -27
- data/lib/webgen/common/sitemap.rb +0 -83
- data/lib/webgen/contentprocessor.rb +0 -117
- data/lib/webgen/contentprocessor/blocks.rb +0 -92
- data/lib/webgen/contentprocessor/builder.rb +0 -29
- data/lib/webgen/contentprocessor/erb.rb +0 -26
- data/lib/webgen/contentprocessor/erubis.rb +0 -39
- data/lib/webgen/contentprocessor/fragments.rb +0 -25
- data/lib/webgen/contentprocessor/haml.rb +0 -34
- data/lib/webgen/contentprocessor/head.rb +0 -128
- data/lib/webgen/contentprocessor/kramdown.rb +0 -27
- data/lib/webgen/contentprocessor/kramdown/html.rb +0 -36
- data/lib/webgen/contentprocessor/less.rb +0 -35
- data/lib/webgen/contentprocessor/maruku.rb +0 -36
- data/lib/webgen/contentprocessor/rdiscount.rb +0 -19
- data/lib/webgen/contentprocessor/rdoc.rb +0 -20
- data/lib/webgen/contentprocessor/redcloth.rb +0 -21
- data/lib/webgen/contentprocessor/sass.rb +0 -22
- data/lib/webgen/contentprocessor/scss.rb +0 -22
- data/lib/webgen/contentprocessor/tags.rb +0 -170
- data/lib/webgen/contentprocessor/tidy.rb +0 -38
- data/lib/webgen/contentprocessor/xmllint.rb +0 -37
- data/lib/webgen/context/render.rb +0 -32
- data/lib/webgen/context/tags.rb +0 -20
- data/lib/webgen/coreext.rb +0 -13
- data/lib/webgen/default_config.rb +0 -240
- data/lib/webgen/loggable.rb +0 -25
- data/lib/webgen/output.rb +0 -86
- data/lib/webgen/output/filesystem.rb +0 -69
- data/lib/webgen/source/filesystem.rb +0 -61
- data/lib/webgen/source/resource.rb +0 -45
- data/lib/webgen/source/tararchive.rb +0 -78
- data/lib/webgen/sourcehandler.rb +0 -275
- data/lib/webgen/sourcehandler/base.rb +0 -281
- data/lib/webgen/sourcehandler/copy.rb +0 -44
- data/lib/webgen/sourcehandler/directory.rb +0 -30
- data/lib/webgen/sourcehandler/feed.rb +0 -92
- data/lib/webgen/sourcehandler/fragment.rb +0 -70
- data/lib/webgen/sourcehandler/memory.rb +0 -42
- data/lib/webgen/sourcehandler/metainfo.rb +0 -128
- data/lib/webgen/sourcehandler/page.rb +0 -64
- data/lib/webgen/sourcehandler/sitemap.rb +0 -60
- data/lib/webgen/sourcehandler/template.rb +0 -66
- data/lib/webgen/sourcehandler/virtual.rb +0 -117
- data/lib/webgen/tag/base.rb +0 -170
- data/lib/webgen/tag/breadcrumbtrail.rb +0 -70
- data/lib/webgen/tag/executecommand.rb +0 -31
- data/lib/webgen/tag/includefile.rb +0 -42
- data/lib/webgen/tag/metainfo.rb +0 -27
- data/lib/webgen/tag/sitemap.rb +0 -41
- data/lib/webgen/websiteaccess.rb +0 -31
- data/lib/webgen/websitemanager.rb +0 -125
- data/misc/default.css +0 -403
- data/misc/default.template +0 -76
- data/misc/htmldoc.metainfo +0 -26
- data/misc/htmldoc.virtual +0 -17
- data/misc/images/arrow.gif +0 -0
- data/misc/images/error.png +0 -0
- data/misc/images/headerbg.jpg +0 -0
- data/misc/images/important.png +0 -0
- data/misc/images/information.png +0 -0
- data/misc/images/quote.gif +0 -0
- data/misc/images/warning.png +0 -0
- data/misc/logo.svg +0 -313
- data/misc/style.page +0 -33
- data/test/helper.rb +0 -61
- data/test/test_blackboard.rb +0 -60
- data/test/test_cli.rb +0 -119
- data/test/test_common_sitemap.rb +0 -58
- data/test/test_configuration.rb +0 -68
- data/test/test_contentprocessor.rb +0 -39
- data/test/test_contentprocessor_builder.rb +0 -41
- data/test/test_contentprocessor_erb.rb +0 -33
- data/test/test_contentprocessor_erubis.rb +0 -62
- data/test/test_contentprocessor_fragments.rb +0 -43
- data/test/test_contentprocessor_haml.rb +0 -39
- data/test/test_contentprocessor_head.rb +0 -96
- data/test/test_contentprocessor_kramdown.rb +0 -56
- data/test/test_contentprocessor_less.rb +0 -40
- data/test/test_contentprocessor_maruku.rb +0 -33
- data/test/test_contentprocessor_rdiscount.rb +0 -21
- data/test/test_contentprocessor_rdoc.rb +0 -22
- data/test/test_contentprocessor_redcloth.rb +0 -26
- data/test/test_contentprocessor_sass.rb +0 -28
- data/test/test_contentprocessor_scss.rb +0 -28
- data/test/test_contentprocessor_tags.rb +0 -122
- data/test/test_contentprocessor_tidy.rb +0 -34
- data/test/test_contentprocessor_xmllint.rb +0 -38
- data/test/test_context.rb +0 -81
- data/test/test_error.rb +0 -93
- data/test/test_loggable.rb +0 -32
- data/test/test_logger.rb +0 -94
- data/test/test_node.rb +0 -469
- data/test/test_output_filesystem.rb +0 -60
- data/test/test_path.rb +0 -241
- data/test/test_source_filesystem.rb +0 -76
- data/test/test_source_resource.rb +0 -28
- data/test/test_source_stacked.rb +0 -49
- data/test/test_sourcehandler_base.rb +0 -136
- data/test/test_sourcehandler_copy.rb +0 -47
- data/test/test_sourcehandler_directory.rb +0 -38
- data/test/test_sourcehandler_feed.rb +0 -88
- data/test/test_sourcehandler_fragment.rb +0 -70
- data/test/test_sourcehandler_main.rb +0 -39
- data/test/test_sourcehandler_memory.rb +0 -44
- data/test/test_sourcehandler_metainfo.rb +0 -127
- data/test/test_sourcehandler_page.rb +0 -73
- data/test/test_sourcehandler_sitemap.rb +0 -68
- data/test/test_sourcehandler_template.rb +0 -68
- data/test/test_sourcehandler_virtual.rb +0 -106
- data/test/test_tag_base.rb +0 -62
- data/test/test_tag_breadcrumbtrail.rb +0 -91
- data/test/test_tag_coderay.rb +0 -45
- data/test/test_tag_date.rb +0 -18
- data/test/test_tag_executecommand.rb +0 -41
- data/test/test_tag_includefile.rb +0 -50
- data/test/test_tag_langbar.rb +0 -71
- data/test/test_tag_link.rb +0 -70
- data/test/test_tag_menu.rb +0 -207
- data/test/test_tag_metainfo.rb +0 -26
- data/test/test_tag_relocatable.rb +0 -60
- data/test/test_tag_sitemap.rb +0 -47
- data/test/test_tag_tikz.rb +0 -69
- data/test/test_tree.rb +0 -70
- data/test/test_website.rb +0 -130
- data/test/test_websiteaccess.rb +0 -25
- data/test/test_websitemanager.rb +0 -65
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/path_handler/base'
|
|
4
|
+
require 'webgen/context'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
class PathHandler
|
|
8
|
+
|
|
9
|
+
# Simple path handler for copying files from the source to the destination, either without
|
|
10
|
+
# changing anything or by applying one or more content processors.
|
|
11
|
+
class Copy
|
|
12
|
+
|
|
13
|
+
include Base
|
|
14
|
+
|
|
15
|
+
# Create the node for +path+.
|
|
16
|
+
#
|
|
17
|
+
# The following order is used for finding the (optional) content processor pipeline:
|
|
18
|
+
#
|
|
19
|
+
# * If the pipeline meta info key is specified, it is used.
|
|
20
|
+
#
|
|
21
|
+
# * If the +path+ has the names of content processors as parts in the file extension, all
|
|
22
|
+
# extension parts until the first non-content processor part will be used for the pipeline
|
|
23
|
+
# and removed from the extension.
|
|
24
|
+
#
|
|
25
|
+
# If the last extension part is a file extension registered with a content processor (using
|
|
26
|
+
# the :ext_map facility), the corresponding content processor is appended to the pipeline
|
|
27
|
+
# and the post-process file extension name is used.
|
|
28
|
+
#
|
|
29
|
+
# Here are some examples:
|
|
30
|
+
#
|
|
31
|
+
# * pipeline = ['erb'] → only erb is used, extension is not modified
|
|
32
|
+
#
|
|
33
|
+
# * path = 'test.erb.kramdown.html', no pipeline → pipeline is set to ['erb', 'kramdown'] and
|
|
34
|
+
# path extension is changed to '.html', ie. path = 'test.html'
|
|
35
|
+
#
|
|
36
|
+
# * path = 'test.erb.kramdown.unknown.html', no pipeline → pipeline is set ['erb', 'kramdown']
|
|
37
|
+
# and path extension is changed to 'unknown.html', ie. path = 'test.unknown.html'
|
|
38
|
+
#
|
|
39
|
+
# * path = 'test.erb.sass', no pipeline → pipeline is set to ['erb', 'sass'] and path
|
|
40
|
+
# extension is changed to '.css', ie. path = 'test.css'
|
|
41
|
+
#
|
|
42
|
+
# * path = 'test.sass', no pipeline → pipeline is set to ['sass'] and path extension is
|
|
43
|
+
# changed to '.css', ie. path = 'test.css'
|
|
44
|
+
def create_nodes(path)
|
|
45
|
+
if !path.meta_info.has_key?('pipeline')
|
|
46
|
+
pipeline = []
|
|
47
|
+
exts = path.ext.split('.')
|
|
48
|
+
pipeline << exts.shift while exts.length > 1 && @website.ext.content_processor.registered?(exts.first)
|
|
49
|
+
if (data = @website.ext.content_processor.map_extension(exts.last))
|
|
50
|
+
pipeline << data.first
|
|
51
|
+
exts[-1] = data.last
|
|
52
|
+
end
|
|
53
|
+
path.meta_info['pipeline'] = pipeline unless pipeline.empty?
|
|
54
|
+
path.ext = exts.join('.')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
create_node(path)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Return the processed content of the +node+ if the pipeline meta info key is specified or the
|
|
61
|
+
# IO object for the node's source path.
|
|
62
|
+
def content(node)
|
|
63
|
+
if pipeline = node.meta_info['pipeline']
|
|
64
|
+
pipeline = @website.ext.content_processor.normalize_pipeline(pipeline)
|
|
65
|
+
is_binary = @website.ext.content_processor.is_binary?(pipeline.first)
|
|
66
|
+
context = Webgen::Context.new(@website, :chain => [node],
|
|
67
|
+
:content => node.node_info[:path].data(is_binary ? 'rb' : 'r'))
|
|
68
|
+
pipeline.each {|processor| @website.ext.content_processor.call(processor, context)}
|
|
69
|
+
context.content
|
|
70
|
+
else
|
|
71
|
+
node.node_info[:path]
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/path_handler/base'
|
|
4
|
+
|
|
5
|
+
module Webgen
|
|
6
|
+
class PathHandler
|
|
7
|
+
|
|
8
|
+
# Path handler for directory source paths. Has nothing special to do.
|
|
9
|
+
class Directory
|
|
10
|
+
|
|
11
|
+
include Base
|
|
12
|
+
|
|
13
|
+
# Create the node for +path+.
|
|
14
|
+
def create_nodes(path)
|
|
15
|
+
create_node(path)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/path_handler/base'
|
|
4
|
+
require 'webgen/path_handler/page_utils'
|
|
5
|
+
require 'webgen/context'
|
|
6
|
+
require 'webgen/path'
|
|
7
|
+
require 'time'
|
|
8
|
+
|
|
9
|
+
module Webgen
|
|
10
|
+
class PathHandler
|
|
11
|
+
|
|
12
|
+
# Path handler for creating atom and/or rss feeds.
|
|
13
|
+
#
|
|
14
|
+
# When customizing a feed template one can use the following utiltity methods:
|
|
15
|
+
#
|
|
16
|
+
# * #feed_entries
|
|
17
|
+
# * #feed_link
|
|
18
|
+
# * #entry_content
|
|
19
|
+
#
|
|
20
|
+
# Have a look at the default feed templates to see them in action.
|
|
21
|
+
class Feed
|
|
22
|
+
|
|
23
|
+
include Base
|
|
24
|
+
include PageUtils
|
|
25
|
+
|
|
26
|
+
# The mandatory keys that need to be set in a feed file.
|
|
27
|
+
MANDATORY_INFOS = %W[site_url author entries]
|
|
28
|
+
|
|
29
|
+
# Create the feed nodes.
|
|
30
|
+
def create_nodes(path, blocks)
|
|
31
|
+
if MANDATORY_INFOS.any? {|t| path.meta_info[t].nil?}
|
|
32
|
+
raise Webgen::NodeCreationError.new("At least one of #{MANDATORY_INFOS.join('/')} is missing",
|
|
33
|
+
self.class.name, path)
|
|
34
|
+
end
|
|
35
|
+
if !['atom', 'rss'].include?(path['version'])
|
|
36
|
+
raise Webgen::NodeCreationError.new("Invalid version '#{path['version']}' for feed path specified, only atom and rss allowed",
|
|
37
|
+
self.class.name, path)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
path.ext = path['version']
|
|
41
|
+
path['dest_path'] = '<parent><basename>(.<lang>)<ext>'
|
|
42
|
+
path['cn'] = '<basename><ext>'
|
|
43
|
+
create_node(path) do |node|
|
|
44
|
+
set_blocks(node, blocks)
|
|
45
|
+
node.meta_info['link'] ||= node.parent.alcn
|
|
46
|
+
@website.ext.item_tracker.add(node, :nodes, :node_finder_option_set,
|
|
47
|
+
{:opts => node['entries'], :ref_alcn => node.alcn}, :content)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Return the rendered feed represented by +node+.
|
|
52
|
+
def content(node)
|
|
53
|
+
context = Webgen::Context.new(@website)
|
|
54
|
+
context.render_block(:name => "#{node['version']}_template", :node => 'first',
|
|
55
|
+
:chain => [node, node.resolve("/templates/feed.template", node.lang, true), node].compact)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Return the entries for the feed node.
|
|
59
|
+
def feed_entries(node)
|
|
60
|
+
@website.ext.node_finder.find(node['entries'], node)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Return the feed link URL for the feed node.
|
|
64
|
+
def feed_link(node)
|
|
65
|
+
Webgen::Path.url(File.join(node['site_url'], node.tree[node['link']].dest_path), false)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Return the content of an +entry+ of the feed +node+.
|
|
69
|
+
def entry_content(node, entry)
|
|
70
|
+
block_name = node['content_block_name'] || 'content'
|
|
71
|
+
if entry.respond_to?(:render_block) && entry.blocks[block_name]
|
|
72
|
+
entry.render_block(block_name, Webgen::Context.new(@website, :chain => [entry])).content
|
|
73
|
+
else
|
|
74
|
+
@website.logger.warn { "Feed entry <#{entry}> not used, is not a renderable node" }
|
|
75
|
+
''
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'pathname'
|
|
4
|
+
require 'set'
|
|
5
|
+
require 'yaml'
|
|
6
|
+
require 'webgen/path_handler/base'
|
|
7
|
+
require 'webgen/path_handler/page_utils'
|
|
8
|
+
|
|
9
|
+
module Webgen
|
|
10
|
+
class PathHandler
|
|
11
|
+
|
|
12
|
+
# Handles meta information paths which provide meta information for other paths.
|
|
13
|
+
class MetaInfo
|
|
14
|
+
|
|
15
|
+
include Base
|
|
16
|
+
include PageUtils
|
|
17
|
+
|
|
18
|
+
# Upon creation the path handler registers itself as listener for the :apply_meta_info_to_path and
|
|
19
|
+
# :after_node_created hooks so that it can apply the meta information.
|
|
20
|
+
def initialize(website)
|
|
21
|
+
super
|
|
22
|
+
@website.blackboard.add_listener(:apply_meta_info_to_path, &method(:apply_meta_info_to_path))
|
|
23
|
+
@website.blackboard.add_listener(:after_node_created, &method(:after_node_created))
|
|
24
|
+
@paths = []
|
|
25
|
+
@alcns = []
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Create a meta info node from +path+.
|
|
29
|
+
def create_nodes(path, blocks)
|
|
30
|
+
@paths += add_data(path, blocks['paths'], 'paths')
|
|
31
|
+
entries = add_data(path, blocks['alcn'], 'alcn')
|
|
32
|
+
@alcns += entries
|
|
33
|
+
update_existing_nodes(entries)
|
|
34
|
+
|
|
35
|
+
nil
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#######
|
|
39
|
+
private
|
|
40
|
+
#######
|
|
41
|
+
|
|
42
|
+
# Add the data from the given page block to the hash.
|
|
43
|
+
def add_data(path, content, block_name)
|
|
44
|
+
entries = []
|
|
45
|
+
if content && (data = YAML::load(content))
|
|
46
|
+
data.each do |(*keys), value|
|
|
47
|
+
value = Marshal.dump(value)
|
|
48
|
+
keys.each {|key| entries << [Webgen::Path.append(path.parent_path, key), value]}
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
entries
|
|
52
|
+
rescue Exception => e
|
|
53
|
+
raise Webgen::NodeCreationError.new("Could not parse block '#{block_name}': #{e.message}", self.class.name)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Update already existing nodes with meta information from the given meta info node.
|
|
57
|
+
def update_existing_nodes(entries)
|
|
58
|
+
@website.tree.node_access[:alcn].each do |alcn, node|
|
|
59
|
+
entries.each do |pattern, mi|
|
|
60
|
+
node.meta_info.update(Marshal.load(mi)) if Webgen::Path.matches_pattern?(alcn, pattern)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Update the meta info of matched path before a node is created.
|
|
66
|
+
def apply_meta_info_to_path(path)
|
|
67
|
+
hash = {}
|
|
68
|
+
@paths.each do |pattern, mi|
|
|
69
|
+
hash.merge!(Marshal.load(mi)) if Webgen::Path.matches_pattern?(path, pattern)
|
|
70
|
+
end
|
|
71
|
+
path.meta_info.replace(hash.merge!(path.meta_info)) if hash.length > 0
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Update the meta information of a matched alcn after the node has been created.
|
|
75
|
+
def after_node_created(node)
|
|
76
|
+
@alcns.each do |pattern, mi|
|
|
77
|
+
node.meta_info.update(Marshal.load(mi)) if Webgen::Path.matches_pattern?(node.alcn, pattern)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/path_handler/base'
|
|
4
|
+
require 'webgen/path_handler/page_utils'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
class PathHandler
|
|
8
|
+
|
|
9
|
+
# Path handler for handling content files in Webgen Page Format.
|
|
10
|
+
class Page
|
|
11
|
+
|
|
12
|
+
include Base
|
|
13
|
+
include PageUtils
|
|
14
|
+
|
|
15
|
+
# Create a page file from +path+.
|
|
16
|
+
def create_nodes(path, blocks)
|
|
17
|
+
path.meta_info['lang'] ||= @website.config['website.lang']
|
|
18
|
+
path.ext = 'html' if path.ext == 'page'
|
|
19
|
+
create_node(path) do |node|
|
|
20
|
+
set_blocks(node, blocks)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Render the block +block_name+ of the given +node+.
|
|
25
|
+
#
|
|
26
|
+
# If the parameter +chain+ (an array of template nodes) is not set, the default template chain
|
|
27
|
+
# for the given +node+ is used.
|
|
28
|
+
def content(node, block_name = 'content', chain = nil)
|
|
29
|
+
chain ||= @website.ext.path_handler.instance(:template).template_chain(node)
|
|
30
|
+
chain << node
|
|
31
|
+
|
|
32
|
+
chain.first.render_block(block_name, Webgen::Context.new(@website, :chain => chain)).content
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/path_handler'
|
|
4
|
+
require 'webgen/page'
|
|
5
|
+
require 'webgen/error'
|
|
6
|
+
|
|
7
|
+
module Webgen
|
|
8
|
+
class PathHandler
|
|
9
|
+
|
|
10
|
+
# This module should be used by path handlers that need to work with paths in Webgen Page Format.
|
|
11
|
+
#
|
|
12
|
+
# Note that this modules provides an implementation for the #parse_meta_info! method. If you
|
|
13
|
+
# also include the Base module, make sure that you include it before this module! Also make sure
|
|
14
|
+
# to override this method if you need custom behaviour!
|
|
15
|
+
module PageUtils
|
|
16
|
+
|
|
17
|
+
# Calls #parse_as_page! to update the meta information hash of +path+. Returns the found
|
|
18
|
+
# blocks which will be passed as second parameter to the #create_nodes method.
|
|
19
|
+
def parse_meta_info!(path)
|
|
20
|
+
parse_as_page!(path)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Assume that the content of the given +path+ is in Webgen Page Format and parse it. Updates
|
|
24
|
+
# 'path.meta_info' with the meta info from the page and returns the content blocks.
|
|
25
|
+
def parse_as_page!(path)
|
|
26
|
+
begin
|
|
27
|
+
page = Webgen::Page.from_data(path.data)
|
|
28
|
+
rescue Webgen::Page::FormatError => e
|
|
29
|
+
raise Webgen::Error.new("Error reading source path: #{e.message}", self.class.name, path)
|
|
30
|
+
end
|
|
31
|
+
blocks = page.meta_info.delete('blocks') || {}
|
|
32
|
+
path.meta_info.merge!(page.meta_info)
|
|
33
|
+
blocks.each {|key, val| ((path.meta_info['blocks'] ||= {})[key] ||= {}).merge!(val)}
|
|
34
|
+
page.blocks
|
|
35
|
+
end
|
|
36
|
+
private :parse_as_page!
|
|
37
|
+
|
|
38
|
+
# Set the blocks (see #parse_as_page!) for the node.
|
|
39
|
+
def set_blocks(node, blocks)
|
|
40
|
+
node.node_info[:blocks] = blocks
|
|
41
|
+
end
|
|
42
|
+
private :set_blocks
|
|
43
|
+
|
|
44
|
+
# Return the blocks (see #parse_as_page!) for the node.
|
|
45
|
+
def blocks(node)
|
|
46
|
+
node.node_info[:blocks]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Render the block +name+ of +node+ using the provided Context object.
|
|
50
|
+
#
|
|
51
|
+
# Uses the content processors specified for the block via the +blocks+ meta information key if
|
|
52
|
+
# the +pipeline+ parameter is not set.
|
|
53
|
+
#
|
|
54
|
+
# Returns the given context with the rendered content.
|
|
55
|
+
def render_block(node, name, context, pipeline = nil)
|
|
56
|
+
unless node.blocks.has_key?(name)
|
|
57
|
+
raise Webgen::RenderError.new("No block named '#{name}' found", self.class.name,
|
|
58
|
+
context.dest_node.alcn, node.alcn)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
content_processor = context.website.ext.content_processor
|
|
62
|
+
context.website.ext.item_tracker.add(context.dest_node, :node_content, node.alcn)
|
|
63
|
+
|
|
64
|
+
context.content = node.blocks[name].dup
|
|
65
|
+
context[:block_name] = name
|
|
66
|
+
pipeline ||= ((node.meta_info['blocks'] || {})[name] || {})['pipeline'] ||
|
|
67
|
+
((node.meta_info['blocks'] || {})['defaults'] || {})['pipeline'] ||
|
|
68
|
+
[]
|
|
69
|
+
content_processor.normalize_pipeline(pipeline).each do |processor|
|
|
70
|
+
content_processor.call(processor, context)
|
|
71
|
+
end
|
|
72
|
+
context[:block_name] = nil
|
|
73
|
+
context
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'uri'
|
|
4
|
+
require 'time'
|
|
5
|
+
require 'webgen/path_handler/base'
|
|
6
|
+
require 'webgen/path_handler/page_utils'
|
|
7
|
+
require 'webgen/context'
|
|
8
|
+
|
|
9
|
+
module Webgen
|
|
10
|
+
class PathHandler
|
|
11
|
+
|
|
12
|
+
# Path handler for creating an XML sitemap based on the specification of http://sitemaps.org.
|
|
13
|
+
class Sitemap
|
|
14
|
+
|
|
15
|
+
include Base
|
|
16
|
+
include PageUtils
|
|
17
|
+
|
|
18
|
+
# The mandatory keys that need to be set in a sitemap file.
|
|
19
|
+
MANDATORY_INFOS = %W[site_url entries]
|
|
20
|
+
|
|
21
|
+
# Create an XML sitemap from +path+.
|
|
22
|
+
def create_nodes(path, blocks)
|
|
23
|
+
if MANDATORY_INFOS.any? {|t| path.meta_info[t].nil?}
|
|
24
|
+
raise Webgen::NodeCreationError.new("At least one of #{MANDATORY_INFOS.join('/')} is missing",
|
|
25
|
+
self.class.name, path)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
path.ext = 'xml'
|
|
29
|
+
create_node(path) do |node|
|
|
30
|
+
set_blocks(node, blocks)
|
|
31
|
+
node.node_info[:entries] = {:flatten => true, :and => node['entries']}
|
|
32
|
+
@website.ext.item_tracker.add(node, :nodes, :node_finder_option_set,
|
|
33
|
+
{:opts => node.node_info[:entries], :ref_alcn => node.alcn}, :meta_info)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Return the rendered feed represented by +node+.
|
|
38
|
+
def content(node)
|
|
39
|
+
context = Webgen::Context.new(@website)
|
|
40
|
+
context.render_block(:name => "sitemap", :node => 'first',
|
|
41
|
+
:chain => [node, node.resolve("/templates/sitemap.template", node.lang, true), node].compact)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Return the entries for the sitemap +node+.
|
|
45
|
+
def sitemap_entries(node)
|
|
46
|
+
@website.ext.node_finder.find(node.node_info[:entries], node)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/path_handler/base'
|
|
4
|
+
require 'webgen/path_handler/page_utils'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
class PathHandler
|
|
8
|
+
|
|
9
|
+
# Path handler for handling template files in Webgen Page Format.
|
|
10
|
+
class Template
|
|
11
|
+
|
|
12
|
+
include Base
|
|
13
|
+
include PageUtils
|
|
14
|
+
|
|
15
|
+
# Create a template node for +path+.
|
|
16
|
+
def create_nodes(path, blocks)
|
|
17
|
+
create_node(path) do |node|
|
|
18
|
+
node.meta_info['no_output'] = true
|
|
19
|
+
set_blocks(node, blocks)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return the template chain for +node+
|
|
24
|
+
#
|
|
25
|
+
# When invoked directly, the +lang+ parameter should not be used. This parameter is necessary
|
|
26
|
+
# for the recursive invocation of the method so that the correct templates are used. Consider
|
|
27
|
+
# the following path hierarchy:
|
|
28
|
+
#
|
|
29
|
+
# /default.en.template
|
|
30
|
+
# /default.de.template
|
|
31
|
+
# /custom.template
|
|
32
|
+
# /index.de.page template: custom.template
|
|
33
|
+
# /index.en.page template: custom.template
|
|
34
|
+
#
|
|
35
|
+
# The template chains for index.en.page and index.de.page are therefore
|
|
36
|
+
#
|
|
37
|
+
# /default.en.template → /custom.template
|
|
38
|
+
# /default.de.template → /custom.template
|
|
39
|
+
#
|
|
40
|
+
# This means that the /custom.template needs to reference different templates depending on the
|
|
41
|
+
# language.
|
|
42
|
+
def template_chain(node, lang = node.lang)
|
|
43
|
+
cached_template = (@website.cache.volatile[[node.alcn, :templates]] ||= {})
|
|
44
|
+
if cached_template.has_key?(lang)
|
|
45
|
+
template_node = cached_template[lang]
|
|
46
|
+
elsif node['template'].kind_of?(String)
|
|
47
|
+
template_node = node.resolve(node['template'], lang, true)
|
|
48
|
+
if template_node.nil?
|
|
49
|
+
@website.logger.warn do
|
|
50
|
+
["Template '#{node['template']}' for <#{node}> not found, using default template!",
|
|
51
|
+
'Fix the value of the meta information \'template\' for <#{node}>']
|
|
52
|
+
end
|
|
53
|
+
template_node = default_template(node.parent, lang)
|
|
54
|
+
end
|
|
55
|
+
cached_template[lang] = template_node
|
|
56
|
+
elsif node.meta_info.has_key?('template') && node['template'].nil?
|
|
57
|
+
template_node = cached_template[lang] = nil
|
|
58
|
+
else
|
|
59
|
+
@website.logger.debug { "Using default template in language '#{lang}' for <#{node}>" }
|
|
60
|
+
template_node = default_template(node.parent, lang)
|
|
61
|
+
if template_node == node && !node.parent.is_root?
|
|
62
|
+
template_node = default_template(node.parent.parent, lang)
|
|
63
|
+
end
|
|
64
|
+
cached_template[lang] = template_node
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
if template_node.nil?
|
|
68
|
+
[]
|
|
69
|
+
else
|
|
70
|
+
(template_node == node ? [] : template_chain(template_node, lang) + [template_node])
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Return the default template for the directory node +dir+ and language +lang+.
|
|
75
|
+
#
|
|
76
|
+
# If the template node is not found, the parent directories are searched.
|
|
77
|
+
def default_template(dir, lang)
|
|
78
|
+
default_template_name = @website.config['path_handler.template.default_template']
|
|
79
|
+
template = dir.resolve(default_template_name, lang)
|
|
80
|
+
if template.nil?
|
|
81
|
+
if dir.is_root?
|
|
82
|
+
@website.logger.warn do
|
|
83
|
+
["Default template '#{default_template_name}' not found in root directory!",
|
|
84
|
+
'Provide a </#{default_template_name}> to fix this warning.']
|
|
85
|
+
end
|
|
86
|
+
else
|
|
87
|
+
template = default_template(dir.parent, lang)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
template
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
end
|