The `rel` and `type` HTML attributes are needed in the `base_url` (or
`section.permalink`) link so feed aggregators know that's the HTML page
that corresponds to the atom feed.
Note: The RSS template doesn't have this issue.
* templates:atom: add support for multiple authors
Atom 1.0 [0] support multiple `<author>` entries in the feed. This commit
modified the template to generate as many `<author>` as the page's
metadata contains.
[0] https://validator.w3.org/feed/docs/atom.html#recommendedEntryElements
* Test we can have multiple authors in ATOM feeds
Relative links in the entry content do not currently have a base URI, so
will be resolved relative to the feed URI:
Given an entry with the content:
<a href="some-resource.bin">
And URIS of:
* entry: https://example.org/blog/some-entry/
* feed: https://example.org/atom.xml
The link URI will end up as:
https://example.org/some-resource.bin
rather than the URI that ends up resolved in the rendered page:
https://example.org/blog/some-entry/some-resource.bin
The atom and RSS formats allow for an xml:base attribute (itself
specified in [1]) to provide a base URI of a subset of a document. This
change adds xml:base attributes to each entry, using the page permalink.
This gives us something equivalent to:
<entry>
<content xml:base="https://example.org/blog/some-entry/">
<![CDATA[
<a href="some-resource.bin">
]]>
</content>
</entry>
[1]: https://www.w3.org/TR/xmlbase/
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
The W3C feed validator fails to validate RSS 2.0 and Atom 1.0 feed
elements that do not contain a valid author. This change adds an
`authors: Vec<String>` to pages, as well as an `author: Option<String>`
to Config that will act as a default to use in RSS and Atom templates if
no page-level authors are specified.
The [RFC](http://www.robotstxt.org/orig.html) mentions only `Disallow`
directive, so it must appear in the file.
`Allow` is an ad hoc agreement between search engines that no all of
them follow.
* Add YAML to formats supported by load_data()
A fairly trivial addition; JSON and YAML are handled so similarly
that this was a matter of copying the JSON-relevant handlers and
editing the copies to handle YAML as well. The test file was
literally generated with 'json2yaml'.
The documentation has been updated to indicate that load_data() now
handles YAML code.
The CHANGELOG has been updated as well.
* After checking, I found that it's generally agreed the mime type is still application/x-yaml.
* Update comment, unify library importing.
I noticed one more place where the list of formats was supported,
and added YAML to that list.
I noticed that there's a singular place to load the `libs::` crate,
and unified by importing of serde_yaml in that place.
* Add `literal` as a new entry for `data source`, to be used by the `load_data` function
* Add tests to the module for plain text, json, xml, toml, and csv
* Update error messaging to include literal as a potential choice
* Update site documentation to include instructions for using `load_data` with a literal
* Make sure that zola serve/build can start from anywhere inside dir tree
* make clippy and rustfmt a bit happier
* replace unecessary if-else with unwrap_or and display which path could not get canonicalized if it fails at startup
* canonicalize config_path to avoid crash when config.toml changes
* templates/load_data: add an optional parameter headers ...
... now `load_data` function supports setting extra headers
* docs/templates/overview: cover some edge-cases in the explanation
* templates/load_data: fix caching logic with headers
* docs/templates: change wording for load_data headers explanations
* Next version
* Added tests for shortcode insertion
* Added TOC tests
* Added test for #1475 and #1355
* Basic internal / external links tests
* Added integration test
* Added pseudocode and started on logos
* Logos parsing for shortcodes
* Fixed string literal parsing
Moved string literal parsing to a new lexer in order to have greater
control of control characters which are parsed. This fixes the bug that
was present in the `string_from_quoted` function and also moves the
`QuoteType` to be in the `ArgValueToken`.
* Moved string literal logic to seperate module
* Added square bracket notation for variables
* Error handling rewritten
Remove the Result from the `fetch_shortcodes` function. Added proper
messages within the internal parsing.
* Reorganized and documented the shortcode submodule
* Added all logic for ShortcodeContext spans
* Added working insertion code for MD files
* Made functions generic over Markdown or HTML
* Add check for embedding bodies
* Structure of main function clear
* Added test for `new_with_transforms` function
* It runs!
* Added the code for handling p-ed html shortcodes
* Removed placeholders in markdown function
* Adjusted integration tests
* fetch_shortcodes now also returns a string
* Start of HTML insertion
* Kinda working everything
* Loading of shortcodes and builtins
* Fix tests
* Some missed fixes
* Tweaks + fmt
* Remove string literal handling
* Fix benches
* Grab shortcode def only once per site
* Fix benches
* Rewrite of parser
* Fix tests
* Add test for #1655
* Re-enable integration test
* Add test for #1601
* Add test for #1600
* Add test for #1500
* Add test for #1320
* Fix test on windows?
Co-authored-by: Gijs Burghoorn <g.burghoorn@gmail.com>
* Pass lang to shortcodes context
* Add tests for lang in shortcodes
* Lang is passed to anchor-link.html template
* Document passing lang to shortcodes/anchor-link.html
Add a test to make sure lang can be overriden by passing an explicit argument to the shortcode,
for usage in the markdown filter where the language context is not available.
* Update docs for more information on shortcodes+i18n+markdown() filter
Co-authored-by: southerntofu <southerntofu@thunix.net>
* Consider the site's output path in search_for_file
The search_for_file helper function now accepts an optional
output path. If passed, the file will also be searched there.
This is used in the get_url function to search in the
Site::output_path.
In practice, this means cachebust works for files in the
output path.
* Make output_dir required in search_for_file
* Update docs for file searching logic
* Add test for new file searching behavior