Make Page an interface
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 2 Jan 2019 11:33:26 +0000 (12:33 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 23 Mar 2019 17:51:22 +0000 (18:51 +0100)
commit597e418cb02883418f2cebb41400e8e61413f651
tree177ad9c540b2583b6dab138c9f0490d28989c7f7
parent44f5c1c14cb1f42cc5f01739c289e9cfc83602af
Make Page an interface

The main motivation of this commit is to add a `page.Page` interface to replace the very file-oriented `hugolib.Page` struct.
This is all a preparation step for issue  #5074, "pages from other data sources".

But this also fixes a set of annoying limitations, especially related to custom output formats, and shortcodes.

Most notable changes:

* The inner content of shortcodes using the `{{%` as the outer-most delimiter will now be sent to the content renderer, e.g. Blackfriday.
  This means that any markdown will partake in the global ToC and footnote context etc.
* The Custom Output formats are now "fully virtualized". This removes many of the current limitations.
* The taxonomy list type now has a reference to the `Page` object.
  This improves the taxonomy template `.Title` situation and make common template constructs much simpler.

See #5074
Fixes #5763
Fixes #5758
Fixes #5090
Fixes #5204
Fixes #4695
Fixes #5607
Fixes #5707
Fixes #5719
Fixes #3113
Fixes #5706
Fixes #5767
Fixes #5723
Fixes #5769
Fixes #5770
Fixes #5771
Fixes #5759
Fixes #5776
Fixes #5777
Fixes #5778
228 files changed:
benchbep.sh [new file with mode: 0755]
codegen/methods.go [new file with mode: 0644]
codegen/methods2_test.go [new file with mode: 0644]
codegen/methods_test.go [new file with mode: 0644]
commands/commandeer.go
commands/commands.go
commands/commands_test.go
commands/convert.go
commands/hugo.go
commands/import_jekyll.go
commands/list.go
commands/new_content_test.go
commands/server.go
common/collections/append.go
common/collections/slice_test.go
common/hugio/readers.go
common/hugo/site.go [deleted file]
common/maps/scratch.go
common/types/types.go
config/configProvider.go
config/services/servicesConfig.go
config/sitemap.go [new file with mode: 0644]
create/content.go
deps/deps.go
docs/content/en/variables/page.md
go.mod
go.sum
helpers/content.go
helpers/content_renderer_test.go
helpers/content_test.go
helpers/general.go
helpers/general_test.go
helpers/path.go
helpers/pygments.go
htesting/test_structs.go
hugofs/createcounting_fs.go [new file with mode: 0644]
hugofs/fs.go
hugofs/hashing_fs.go
hugofs/stacktracer_fs.go [new file with mode: 0644]
hugolib/alias.go
hugolib/alias_test.go
hugolib/author.go [deleted file]
hugolib/collections.go
hugolib/collections_test.go
hugolib/config.go
hugolib/datafiles_test.go
hugolib/disableKinds_test.go
hugolib/embedded_shortcodes_test.go
hugolib/gitinfo.go
hugolib/hugo_sites.go
hugolib/hugo_sites_build.go
hugolib/hugo_sites_build_errors_test.go
hugolib/hugo_sites_build_test.go
hugolib/hugo_sites_multihost_test.go
hugolib/hugo_smoke_test.go [new file with mode: 0644]
hugolib/language_content_dir_test.go
hugolib/media.go [deleted file]
hugolib/menu.go [deleted file]
hugolib/menu_test.go
hugolib/minify_publisher_test.go
hugolib/multilingual.go
hugolib/orderedMap.go [deleted file]
hugolib/orderedMap_test.go [deleted file]
hugolib/page.go
hugolib/pageCache.go [deleted file]
hugolib/pageCache_test.go [deleted file]
hugolib/pageGroup.go [deleted file]
hugolib/pageGroup_test.go [deleted file]
hugolib/pageSort.go [deleted file]
hugolib/pageSort_test.go [deleted file]
hugolib/page__common.go [new file with mode: 0644]
hugolib/page__content.go [new file with mode: 0644]
hugolib/page__data.go [new file with mode: 0644]
hugolib/page__menus.go [new file with mode: 0644]
hugolib/page__meta.go [new file with mode: 0644]
hugolib/page__new.go [new file with mode: 0644]
hugolib/page__output.go [new file with mode: 0644]
hugolib/page__paginator.go [new file with mode: 0644]
hugolib/page__paths.go [new file with mode: 0644]
hugolib/page__per_output.go [new file with mode: 0644]
hugolib/page__position.go [new file with mode: 0644]
hugolib/page__ref.go [new file with mode: 0644]
hugolib/page__tree.go [new file with mode: 0644]
hugolib/page_content.go [deleted file]
hugolib/page_errors.go [deleted file]
hugolib/page_kinds.go [new file with mode: 0644]
hugolib/page_output.go [deleted file]
hugolib/page_paths.go [deleted file]
hugolib/page_paths_test.go [deleted file]
hugolib/page_permalink_test.go
hugolib/page_ref.go [deleted file]
hugolib/page_resource.go [deleted file]
hugolib/page_taxonomy_test.go [deleted file]
hugolib/page_test.go
hugolib/page_time_integration_test.go [deleted file]
hugolib/page_unwrap.go [new file with mode: 0644]
hugolib/page_unwrap_test.go [new file with mode: 0644]
hugolib/page_without_content.go [deleted file]
hugolib/pagebundler.go
hugolib/pagebundler_capture.go
hugolib/pagebundler_capture_test.go
hugolib/pagebundler_handlers.go
hugolib/pagebundler_test.go
hugolib/pagecollections.go
hugolib/pagecollections_test.go
hugolib/pagemeta/page_frontmatter.go [deleted file]
hugolib/pagemeta/page_frontmatter_test.go [deleted file]
hugolib/pagemeta/pagemeta.go [deleted file]
hugolib/pagesPrevNext.go [deleted file]
hugolib/pagesPrevNext_test.go [deleted file]
hugolib/pages_language_merge.go [deleted file]
hugolib/pages_language_merge_test.go
hugolib/pages_related.go [deleted file]
hugolib/pages_related_test.go [deleted file]
hugolib/pagination.go [deleted file]
hugolib/pagination_test.go [deleted file]
hugolib/path_separators_test.go [deleted file]
hugolib/paths/themes.go
hugolib/permalinker.go
hugolib/permalinks.go [deleted file]
hugolib/permalinks_test.go [deleted file]
hugolib/resource_chain_test.go
hugolib/rss_test.go
hugolib/shortcode.go
hugolib/shortcode_page.go [new file with mode: 0644]
hugolib/shortcode_test.go
hugolib/site.go
hugolib/siteJSONEncode_test.go
hugolib/site_output.go
hugolib/site_output_test.go
hugolib/site_render.go
hugolib/site_sections.go
hugolib/site_sections_test.go
hugolib/site_test.go
hugolib/site_url_test.go
hugolib/sitemap.go [deleted file]
hugolib/sitemap_test.go
hugolib/taxonomy.go
hugolib/taxonomy_test.go
hugolib/testhelpers_test.go
hugolib/translations.go
langs/language.go
lazy/init.go [new file with mode: 0644]
lazy/init_test.go [new file with mode: 0644]
lazy/once.go [new file with mode: 0644]
magefile.go
media/mediaType.go
media/mediaType_test.go
navigation/menu.go [new file with mode: 0644]
navigation/pagemenus.go [new file with mode: 0644]
output/outputFormat.go
output/outputFormat_test.go
parser/pageparser/itemtype_string.go [new file with mode: 0644]
parser/pageparser/pageparser.go
parser/pageparser/pageparser_test.go
publisher/publisher.go
related/inverted_index.go
related/inverted_index_test.go
resources/image.go
resources/image_cache.go
resources/page/page.go [new file with mode: 0644]
resources/page/page_author.go [new file with mode: 0644]
resources/page/page_data.go [new file with mode: 0644]
resources/page/page_data_test.go [new file with mode: 0644]
resources/page/page_generate/.gitignore [new file with mode: 0644]
resources/page/page_generate/generate_page_wrappers.go [new file with mode: 0644]
resources/page/page_kinds.go [new file with mode: 0644]
resources/page/page_kinds_test.go [new file with mode: 0644]
resources/page/page_marshaljson.autogen.go [new file with mode: 0644]
resources/page/page_nop.go [new file with mode: 0644]
resources/page/page_outputformat.go [new file with mode: 0644]
resources/page/page_paths.go [new file with mode: 0644]
resources/page/page_paths_test.go [new file with mode: 0644]
resources/page/page_wrappers.autogen.go [new file with mode: 0644]
resources/page/pagegroup.go [new file with mode: 0644]
resources/page/pagegroup_test.go [new file with mode: 0644]
resources/page/pagemeta/page_frontmatter.go [new file with mode: 0644]
resources/page/pagemeta/page_frontmatter_test.go [new file with mode: 0644]
resources/page/pagemeta/pagemeta.go [new file with mode: 0644]
resources/page/pages.go [new file with mode: 0644]
resources/page/pages_cache.go [new file with mode: 0644]
resources/page/pages_cache_test.go [new file with mode: 0644]
resources/page/pages_language_merge.go [new file with mode: 0644]
resources/page/pages_prev_next.go [new file with mode: 0644]
resources/page/pages_prev_next_test.go [new file with mode: 0644]
resources/page/pages_related.go [new file with mode: 0644]
resources/page/pages_related_test.go [new file with mode: 0644]
resources/page/pages_sort.go [new file with mode: 0644]
resources/page/pages_sort_test.go [new file with mode: 0644]
resources/page/pagination.go [new file with mode: 0644]
resources/page/pagination_test.go [new file with mode: 0644]
resources/page/permalinks.go [new file with mode: 0644]
resources/page/permalinks_test.go [new file with mode: 0644]
resources/page/site.go [new file with mode: 0644]
resources/page/testhelpers_test.go [new file with mode: 0644]
resources/page/weighted.go [new file with mode: 0644]
resources/resource.go
resources/resource/dates.go [new file with mode: 0644]
resources/resource/params.go [new file with mode: 0644]
resources/resource/resource_helpers.go [new file with mode: 0644]
resources/resource/resourcetypes.go
resources/resource_metadata.go
resources/resource_metadata_test.go
resources/resource_test.go
resources/testhelpers_test.go
resources/transform.go
source/fileInfo.go
tpl/collections/apply_test.go
tpl/collections/collections.go
tpl/collections/collections_test.go
tpl/template.go
tpl/template_info.go [new file with mode: 0644]
tpl/tplimpl/ace.go
tpl/tplimpl/embedded/generate/generate.go
tpl/tplimpl/embedded/templates.autogen.go
tpl/tplimpl/embedded/templates/_default/rss.xml
tpl/tplimpl/embedded/templates/_default/sitemap.xml
tpl/tplimpl/embedded/templates/_default/sitemapindex.xml
tpl/tplimpl/embedded/templates/disqus.html
tpl/tplimpl/shortcodes.go [new file with mode: 0644]
tpl/tplimpl/shortcodes_test.go [new file with mode: 0644]
tpl/tplimpl/template.go
tpl/tplimpl/templateFuncster.go
tpl/tplimpl/template_ast_transformers.go
tpl/tplimpl/template_ast_transformers_test.go
tpl/tplimpl/template_funcs_test.go
tpl/tplimpl/template_info_test.go [new file with mode: 0644]
tpl/tplimpl/template_test.go [deleted file]