A flexible and extensible static content generation framework for .NET.
MIT License
Bot releases are hidden (Show)
Published by daveaglick almost 3 years ago
IApplicationState
, IMemoryStreamFactory
, ILinkGenerator
, INamespacesCollection
, IScriptHelper
, IDocumentFactory
, and IFileCleaner
. In addition, the default implementations of these interfaces have been refactored to make deriving from them easier (I.e. marked interface members as virtual
).LinkGenerator
to use strings instead of NormalizedPath
which could result in poor results in some edge cases like trailing slashes (#218).LinkGenerator
and related extensions, also exposed via a new Keys.LinkHiddenPageTrailingSlash
setting (#218).Published by daveaglick almost 3 years ago
HtmlKeys
file not being in the original namespace (#973).Published by daveaglick almost 3 years ago
Statiq.Html
extension and moved all functionality into either Statiq.Common
(helpers and utilities) or Statiq.Core
(modules). All modules are still available through Statiq.Core
and you should remove references to Statiq.Html
.AngleSharp
in Statiq.Common
.HtmlKeys
to Keys
in Statiq.Common
but kept HtmlKeys
and marked it obsolete for backwards-compatibility.IExecutionContext.GetContentProvider()
extension that accepts an AngleSharp IMarkupFormattable
(such as IHtmlDocument
).WithAutoHighlightUnspecifiedLanguage()
to the HighlightCode
module to avoid time-consuming generation-time code highlighting when the language is unknown (#210, thanks @Turnerj).HighlightShortcode
module to add a <pre>
element when there are new lines in the content or when specified using a new AddPre
shortcode argument (#215).Published by daveaglick about 3 years ago
LinkGenerator
class is no longer static and now needs to be accessed through a new IExecutionState.LinkGenerator
or IExecutionContext.LinkGenerator
property.cache
directory to the excluded list in Statiq.App.props
.DocumentFileProvider
and documents with a null Destination
.CachedPartial()
and CachedPartialAsync()
HTML helpers. (#205)Published by daveaglick about 3 years ago
GenerateLunrIndex.WithClientName
method to allow setting the name of the client object in the generated JavaScript file.GenerateLunrIndex
when no documents contain a given search field.GenerateLunrIndex.WithStemming
methods to control stemming behavior and changed default to no stemming.Published by daveaglick over 3 years ago
Statiq.SearchIndex
namespace in the Statiq.Lunr
package to Statiq.Lunr
.GenerateLunrIndex
module to build and output a search index at generation time and add a bunch of new features (#192).GenerateSiteMap
module when using the LinkRoot
setting that included the link root twice (#158, #193, thanks @kkato233).Published by daveaglick over 3 years ago
MirrorResources
to prevent it from mirroring links with "rel" values that don't specify artifacts (#190).MirrorResources
to prevent it from mirroring resources from the current host when Host
is specified (#190).ReadExcel
module to Statiq.Tables that can read an Excel file into metadata as a IReadOnlyList<IReadOnlyList<string>>
.ReadCsv
module to Statiq.Tables that can read a CSV file into metadata as a IReadOnlyList<IReadOnlyList<string>>
.Published by daveaglick over 3 years ago
CopyFiles
module (#189).Published by daveaglick over 3 years ago
IDocument
. This meant that extension methods and other IDocument
oriented functionality worked in a layout or partial@Model
property to access the document, but it also meant they didn't work for alternate models. Layouts and partials aredynamic
for layouts and partials@Model
access like IDocument
extension methods that used to work fail.@Model
property access to @Document
in your layouts@model
directive at the top of the layout pr partial file to explicitly specify the model type for that layout or partial.CleanMode
setting via the bootstrapper.Published by daveaglick over 3 years ago
Published by daveaglick over 3 years ago
IFile.GetCacheHashCodeAsync()
and replaced it with an implementation of ICacheCode
.IContentProvider.GetCacheHashCodeAsync()
and replaced it with an implementation of ICacheCode
.IDocument.GetCacheHashCodeAsync()
and replaced it with an implementation of ICacheCode
.IFile.ReadAllBytesAsync()
and IFile.WriteAllBytesAsync()
.IFile.WriteFromAsync()
, IFile.AppendFromAsync()
, and IFile.CopyToAsync()
extension methods to more easily copy a file from/to a stream.IReadOnlyFileSystem.CachePath
and related extensions, methods, etc. to provide a path where cache files should be stored and set to "cache" by default (which should be excluded in .gitignore
).ICacheCode
interface to provide a standard deterministic .GetCacheCodeAsync()
method and implemented it in IDocument
, IContentProvider
, and IFile
.ProcessLauncher
child process console encodings to UTF-8 so emoji and other Unicode characters will render correctly from child processes.--help
CLI option and command description escaping (#186).Published by daveaglick over 3 years ago
PATH
and PATHEXT
environment variables to the ProcessLauncher
so it can resolve file names more like cmd.exe
.CleanMode.Unwritten
that will wait to clean the output folder after each execution and tries to avoid writing duplicate files to the file system (this is the new default).IFile.GetCacheHashCodeAsync()
which can be used to get a hash code representing the current state of a file.FileContent.GetCacheHashCodeAsync()
to use the new IFile.GetCacheHashCodeAsync()
instead of attempting to read the entire file content.Published by daveaglick over 3 years ago
WriteFiles
and CopyFiles
modules.Published by daveaglick over 3 years ago
ConsoleListener
on MacOS that prevented signaling from the main thread (used for the preview
command in Statiq Web) (#182, #183, thanks @devlead).--help
output that caused the app to crash (#180, #181, thanks @matkoch).IEnumerable<TDocument>.GetDestinationTree()
and IEnumerable<TDocument>.GetSourceTree()
which results in a significant performance improvement in some cases for large sites.IFile
extensions to serialize and deserialize JSON.IFile
extensions to serialize and deserialize YAML.NormalizedPath.ThrowIfRealtive()
and NormalizedPath.ThrowIfAbsolute()
helper methods.IDirectory.MoveTo()
method.ExecutionPipeline
not to execute.Published by daveaglick over 3 years ago
DebugLogger
(#176).RedirectTo
metadata value to documents output from GenerateRedirects
.DocumentLink()
HTML helper in Razor (#177).Published by daveaglick over 3 years ago
AnalyzeCSharp
module (#174, thanks @mholo65).makeAbsolute
parameter to LinkGenerator.GetLink()
that allows keeping links as relative (#170).LinkGenerator
behavior when using query and/or fragment components (#170).makeAbsolute
parameters to IExecutionState.GetLink()
extension methods and others as appropriate (#170).Published by daveaglick over 3 years ago
UrlResolutionTagHelper
from Razor processing so that ~/
links don't get processed (#170).~/
link resolution to Markdown files, note that this is an interim feature and will be removed again in favor of a new module that handles ~/
links for all template engines soon (#170, #171, thanks @JoshClose).Published by daveaglick over 3 years ago
IDocument
from dynamic
if no explicit model or base type is specified.Published by daveaglick over 3 years ago
GenerateJson
module back in (it got dropped a while ago when Statiq.Json was merged with Statiq.Core).LoggerFactoryLoggerWrapper
class that can wrap the context (or any other ILogger
) and provide it as an ILoggerFactory
that always logs to the underlying logger.Published by daveaglick almost 4 years ago
IExecutionContext.GetContentProviderAsync(string)
extension (and overloads) to be non-async and unified related extensions that get content providers.IDocument.CloseAsync(string)
and related extensions to be non-async and unified related clone methods into a single set of overloads.UseStringContentFiles
option because it's no longer relevant with the new string and stream processing.ProcessLauncher
on Linux and Mac by ensuring the entire process tree is killed (#156).IExecutionProcess.OutputPages
.NormalizedPath
to reduce use of strings.