From 264f5017dee99878793781cd626a2d3a571c7219 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 1 Oct 2022 15:49:09 +0200 Subject: [PATCH 01/32] Update --- README.md | 4 ++-- README_NUGET.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 72c19db..ad2423a 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ var myAwesomeWebsite = new Website( var manager = new WebsiteManager( website: myAwesomeWebsite, - source: @"/path/to/your/project" // Path to the folder of your website project. + source: @"C:\path\to\your\project" // Absolute path to your Content, Resources and Output directories. ); await manager.Make(); @@ -140,7 +140,7 @@ var myAwesomeWebsite = new Website( var manager = new WebsiteManager( website: myAwesomeWebsite, - source: @"/path/to/your/project" // Path to the folder of your website project. + source: @"C:\path\to\your\project" // Absolute path to your Content, Resources and Output directories. ); await manager.Make(); diff --git a/README_NUGET.md b/README_NUGET.md index 2171c77..8d22e8c 100644 --- a/README_NUGET.md +++ b/README_NUGET.md @@ -20,7 +20,7 @@ var myAwesomeWebsite = new Website( var manager = new WebsiteManager( website: myAwesomeWebsite, - source: @"/path/to/your/project" // Path to the folder of your website project + source: @"C:\path\to\your\project" // Absolute path to your Content, Resources and Output directories. ); await manager.Make(); @@ -124,7 +124,7 @@ var myAwesomeWebsite = new Website( var manager = new WebsiteManager( website: myAwesomeWebsite, - source: @"/path/to/your/project" // Path to the folder of your website project. + source: @"C:\path\to\your\project" // Absolute path to your Content, Resources and Output directories. ); await manager.Make(); From d87cbdbb8667219771085974a4f11b2db4191057 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Wed, 9 Nov 2022 19:48:21 +0100 Subject: [PATCH 02/32] Update Now targeting .NET 7.0. --- .../ProjectTemplate/ProjectTemplate.zip | Bin 2558 -> 2559 bytes README.md | 4 ++-- README_NUGET.md | 2 +- StatiCSharp.csproj | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Documentation/ProjectTemplate/ProjectTemplate.zip b/Documentation/ProjectTemplate/ProjectTemplate.zip index d53c16c40515fc065dae11953360b2ab7b3d9f29..8bfe2bf47faa5632ca4d4f5f6fca90c296b8c948 100644 GIT binary patch delta 266 zcmV+l0rmd=6aN#iTLlS+ooQ8EZX43hlVk-de^M9SfHzedu}B&f+P&*csDrVsVXQW{ zuR$nESMjQH=jO!-}PJP*wyTPk`jMmQm zM7wqe%f`ia<%Ko`knT!+is=pYXkW~F4rs?u3 zkMYSn@l}r&#`XFo@_*^dYLV}6E^#=&Xib-H{MR&|YZ=b+lMDZ<99*eCyU4s^YX8Ms zJL~PQze~8eG<^npSVMTRK(*gz3D3|y}QnM|6XfQ@Qu?#@_klZ zmwI4P*cxZK&!2K6t@ay-)^GM@+s%aJB|*+$MxV*4oR*Abljn1qGp?C@ol}YJCOZQV F003^ubJ+j@ diff --git a/README.md b/README.md index ad2423a..f25fcf1 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ - + @@ -64,7 +64,7 @@ After .NET has created the project files open `myWebsite.csproj` and add StatiC# - + diff --git a/README_NUGET.md b/README_NUGET.md index 8d22e8c..89ea324 100644 --- a/README_NUGET.md +++ b/README_NUGET.md @@ -47,7 +47,7 @@ After .NET has created the project files open `myWebsite.csproj` and add StatiC# - + diff --git a/StatiCSharp.csproj b/StatiCSharp.csproj index 10e8fc1..fd773a2 100644 --- a/StatiCSharp.csproj +++ b/StatiCSharp.csproj @@ -1,11 +1,11 @@  - net6.0 + net7.0 enable enable 0.2.0 - 0.2.0 + 0.3.0 Roland Braun False A static webside generator written in C#. It enables entire websites to be built using C#. Custom templates are supported. See the documentation to learn how to build them. From 8a1143ba476bedbe7619b6a49afc2bc1fe011efc Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Wed, 9 Nov 2022 19:54:33 +0100 Subject: [PATCH 03/32] Update --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f25fcf1..a99a4d5 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@

- C# 10.0 + C# 10.0 - + From 608bb51fc11cacf8f1445420347f24f91f0408ea Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Wed, 9 Nov 2022 19:55:55 +0100 Subject: [PATCH 04/32] Update --- README.md | 2 +- README_NUGET.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a99a4d5..909c756 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ After .NET has created the project files open `myWebsite.csproj` and add StatiC# Exe - net6.0 + net7.0 enable enable diff --git a/README_NUGET.md b/README_NUGET.md index 89ea324..38c694c 100644 --- a/README_NUGET.md +++ b/README_NUGET.md @@ -41,7 +41,7 @@ After .NET has created the project files open `myWebsite.csproj` and add StatiC# Exe - net6.0 + net7.0 enable enable From 5571d193f7bbf677b0223aad6e6fcda59528f650 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 10 Nov 2022 16:35:58 +0100 Subject: [PATCH 05/32] Refactoring Removed async type of method, because no await possible. --- Sources/WebsiteManager.CheckEnvironment.cs | 68 ++-------------------- 1 file changed, 6 insertions(+), 62 deletions(-) diff --git a/Sources/WebsiteManager.CheckEnvironment.cs b/Sources/WebsiteManager.CheckEnvironment.cs index 342656f..3bfcece 100644 --- a/Sources/WebsiteManager.CheckEnvironment.cs +++ b/Sources/WebsiteManager.CheckEnvironment.cs @@ -9,76 +9,20 @@ public partial class WebsiteManager : IWebsiteManager /// Checks if all nessessary directories exist and if it can read and write in this folders.
/// If a directory does not exist, it tries to create it. /// - /// - /// - private void CheckEnvironment(string? templateResources = null) - { - string[] assumedDirectories = new string[] {Output, Content, Resources}; - foreach (string assumedDirectory in assumedDirectories) - { - if (!Directory.Exists(assumedDirectory)) - { - try - { - Directory.CreateDirectory(assumedDirectory); - } - catch (Exception ex) - { - throw new CannotCreateDirectoryException(message: $"Your {nameof(assumedDirectory).ToLower()} directory does not exist. Trying to create it failed. Do you have read and write access to {assumedDirectory} ?", ex); - } - } - - try - { - DirectoryIsWritable(assumedDirectory); - } - catch (Exception ex) - { - throw new DirectoryNotWriteableException(message: $"Trying to write to {assumedDirectory} failed. Do you have read and write access?", ex); - } - } - - - if (templateResources is not null) - { - if (!Directory.Exists(templateResources!)) - { - throw new DirectoryNotFoundException($"Your template resources directory does not exist. Do you have read and write access to {templateResources} ?"); - } - } - - - void DirectoryIsWritable(string path) - { - using (FileStream fs = File.Create(Path.Combine(path, Path.GetRandomFileName()), 1, FileOptions.DeleteOnClose)) - { - } - - } - } - - ///

- /// Asynchronously checks if all nessessary directories exist and if it can read and write in this folders.
- /// If a directory does not exist, it tries to create it. - ///
/// - /// A task that represents the asynchronous checking operation. + /// /// /// - private async Task CheckEnvironmentAsync(string? templateResources = null) + private void CheckEnvironment(string? templateResources = null) { string[] assumedDirectories = new string[] { Output, Content, Resources }; - List tasks = new List(); - foreach(string assumedDirectory in assumedDirectories) { - tasks.Add(CheckIfDirectoryExists(assumedDirectory)); - tasks.Add(CheckIfDirectoryIsWritable(assumedDirectory)); + CheckIfDirectoryExists(assumedDirectory); + CheckIfDirectoryIsWritable(assumedDirectory); } - await Task.WhenAll(tasks); - if (templateResources is not null) { if (!Directory.Exists(templateResources!)) @@ -88,7 +32,7 @@ private async Task CheckEnvironmentAsync(string? templateResources = null) } - async Task CheckIfDirectoryExists(string assumedDirectory) + void CheckIfDirectoryExists(string assumedDirectory) { if (!Directory.Exists(assumedDirectory)) { @@ -104,7 +48,7 @@ async Task CheckIfDirectoryExists(string assumedDirectory) } - async Task CheckIfDirectoryIsWritable(string path) + void CheckIfDirectoryIsWritable(string path) { using (FileStream fs = File.Create(Path.Combine(path, Path.GetRandomFileName()), 1, FileOptions.DeleteOnClose)) { From 6fe190ee15717ca8c0f2cb8ccff325409056905d Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 10 Nov 2022 16:40:06 +0100 Subject: [PATCH 06/32] Clean Up Removed old synchronous version, as it's no longer used. Updated documentation. --- Sources/WebsiteManager.CleanUp.cs | 48 +------ Sources/WebsiteManager.CopyAll.cs | 42 +----- ...ebsiteManager.GenerateSitesFromMarkdown.cs | 122 +----------------- Sources/WebsiteManager.MakeIndex.cs | 14 +- Sources/WebsiteManager.MakeItems.cs | 31 +---- Sources/WebsiteManager.MakePages.cs | 30 +---- Sources/WebsiteManager.MakeSections.cs | 25 +--- Sources/WebsiteManager.MakeTagLists.cs | 56 +------- 8 files changed, 21 insertions(+), 347 deletions(-) diff --git a/Sources/WebsiteManager.CleanUp.cs b/Sources/WebsiteManager.CleanUp.cs index facda88..9ffa1d0 100644 --- a/Sources/WebsiteManager.CleanUp.cs +++ b/Sources/WebsiteManager.CleanUp.cs @@ -4,46 +4,10 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { - private void CleanUp() - { - string[] directories = Directory.GetDirectories(Output); - foreach (string directory in directories) - { - cleanUpDirectory(directory); - } - - - void cleanUpDirectory(string dir) - { - // check if there are folders that are not in _pathDirectory - string[] currentDirectories = Directory.GetDirectories(dir); - - foreach (string directory in currentDirectories) - { - if (!PathDirectory.Contains(directory)) - { - // Delete only files named index.html. Other files can be resources! - if (File.Exists(Path.Combine(directory, "index.html"))) - { - File.Delete(Path.Combine(directory, "index.html")); - } - - if (Directory.GetDirectories(directory).Length == 0 && Directory.GetFiles(directory).Length == 0) - { - Directory.Delete(directory); - } - else - { - foreach (string subdir in Directory.GetDirectories(directory)) - { - cleanUpDirectory(subdir); - } - } - } - } - } - } - + /// + /// Cleans up the Output directory from HTML files that have no corresponding markdown file. + /// + /// A that represents the asynchronous clean up operation. private async Task CleanUpAsync() { string[] directories = Directory.GetDirectories(Output); @@ -55,14 +19,14 @@ private async Task CleanUpAsync() async Task cleanUpDirectory(string dir) { - // check if there are folders that are not in _pathDirectory + // Check if there are folders that are not in _pathDirectory string[] currentDirectories = Directory.GetDirectories(dir); foreach (string directory in currentDirectories) { if (!PathDirectory.Contains(directory)) { - // Delete only files named index.html. Other files can be resources! + // Delete only files named index.html. Other files could be resources! if (File.Exists(Path.Combine(directory, "index.html"))) { File.Delete(Path.Combine(directory, "index.html")); diff --git a/Sources/WebsiteManager.CopyAll.cs b/Sources/WebsiteManager.CopyAll.cs index cdcfd1c..1cebdc8 100644 --- a/Sources/WebsiteManager.CopyAll.cs +++ b/Sources/WebsiteManager.CopyAll.cs @@ -5,48 +5,12 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { /// - /// Copies all directories and files (incl. subfolders and -files) from the source-directory to the destination-directory. + /// Asynchronously copies all directories and files (incl. subfolders and -files) from the source directory to the destination directory. /// /// Source directory - /// Destination directory + /// Source directory + /// A that represents the asynchronous copying operation. /// - private void CopyAll(string sourceDir, string destinationDir) - { - // https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-copy-directories - - - // Get information about the source directory - var dir = new DirectoryInfo(sourceDir); - - // Check if the source directory exists - if (!dir.Exists) - throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}"); - - // Cache directories before we start copying - DirectoryInfo[] dirs = dir.GetDirectories(); - - // Create the destination directory - Directory.CreateDirectory(destinationDir); - - // Get the files in the source directory and copy to the destination directory - foreach (FileInfo file in dir.GetFiles()) - { - string targetFilePath = Path.Combine(destinationDir, file.Name); - file.CopyTo(targetFilePath, true); - } - - // If recursive and copying subdirectories, recursively call this method - if (true) - { - foreach (DirectoryInfo subDir in dirs) - { - string newDestinationDir = Path.Combine(destinationDir, subDir.Name); - CopyAll(subDir.FullName, newDestinationDir); - } - } - } - - private async Task CopyAllAsync(string sourceDir, string destinationDir) { // https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-copy-directories diff --git a/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs b/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs index 203eb89..bf16a01 100644 --- a/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs +++ b/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs @@ -5,120 +5,6 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { - /// - /// Generates index, pages, sections and items for the IWebsite object from the markdown files in the `Content` directory. - /// - private void GenerateSitesFromMarkdown(string pathToContent) - { - var pipeline = new MarkdownPipelineBuilder() - .UseAdvancedExtensions() - .Build(); - - // For the index: Collecting meta data and content from markdown files, if there are any - string pathOfIndex = Path.Combine(pathToContent, "index.md"); - if (File.Exists(pathOfIndex)) - { - Dictionary markdownMetaData = MarkdownFactory.ParseMetaData(pathOfIndex); - string markdownContent = MarkdownFactory.ParseContent(pathOfIndex); - Website.Index.Content = Markdown.ToHtml(markdown: markdownContent, pipeline: pipeline); - string markdownFilePath = Path.GetFileName(pathOfIndex); - Website.Index.MarkdownFileName = markdownFilePath.Substring(0, markdownFilePath.LastIndexOf(".md")); - Website.Index.MarkdownFilePath = pathOfIndex; - MapMetaData(markdownMetaData, Website.Index); - } - - // Collecting pages and sections data - string[] directoriesOfContent = Directory.GetDirectories(pathToContent); - foreach (string directory in directoriesOfContent) - { - string nameOfCurrentDirectory = Path.GetFileName(directory); - if (!Website.MakeSectionsFor.Contains(nameOfCurrentDirectory)) - { - // Add a page - string[] filenames = Directory.GetFiles(directory, "*.md"); - for (int i = 0; i < filenames.Length; i++) - { - filenames[i] = Path.GetFileName(filenames[i]); - } - - if (filenames.Length > 0) - { - foreach (string filename in filenames) - { - IPage currentPage = new Page(); - MapMetaData(MarkdownFactory.ParseMetaData(Path.Combine(pathToContent, directory, filename)), currentPage); - currentPage.Content = Markdown.ToHtml(markdown: MarkdownFactory.ParseContent(Path.Combine(pathToContent, directory, filename)), pipeline: pipeline); - - currentPage.MarkdownFileName = filename; - currentPage.MarkdownFilePath = Path.Combine(directory, filename).ToString(); - currentPage.Hierarchy = nameOfCurrentDirectory; - Website.Pages.Add(currentPage); - } - } - } - else - { - // Add a section - ISection currentSection = new Section(); - currentSection.SectionName = nameOfCurrentDirectory; - - string[] filenames = Directory.GetFiles(directory, "*.md"); - for (int i = 0; i < filenames.Length; i++) - { - filenames[i] = Path.GetFileName(filenames[i]); - } - - if (filenames.Length > 0) - { - foreach (string filename in filenames) - { - // If filename == index.md the content is for the section itself. Otherwise an item is generated. - if (filename == "index.md") - { - // Add content to the section itself - MapMetaData(MarkdownFactory.ParseMetaData(Path.Combine(pathToContent, directory, filename)), currentSection); - currentSection.Content = Markdown.ToHtml(markdown: MarkdownFactory.ParseContent(Path.Combine(pathToContent, directory, filename)), pipeline: pipeline); - - currentSection.MarkdownFileName = filename; - currentSection.MarkdownFilePath = Path.Combine(directory, filename).ToString(); - } - else - { - // Add item - Item currentItem = new Item(); - Dictionary currentMetaData = MarkdownFactory.ParseMetaData(Path.Combine(pathToContent, directory, filename)); - MapMetaData(MarkdownFactory.ParseMetaData(Path.Combine(pathToContent, directory, filename)), currentItem); - currentItem.Content = Markdown.ToHtml(markdown: MarkdownFactory.ParseContent(Path.Combine(pathToContent, directory, filename)), pipeline: pipeline); - - currentItem.DateLastModified = DateOnly.FromDateTime(Directory.GetLastWriteTime(Path.Combine(pathToContent, directory, filename))); - - if (currentMetaData.ContainsKey("date")) - { - if (currentMetaData["date"] == string.Empty) - { - currentMetaData["date"] = currentItem.DateLastModified.ToString(); - } - } - else - { - currentMetaData.Add("date", currentItem.DateLastModified.ToString()); - } - - currentItem.MarkdownFileName = filename; - currentItem.MarkdownFilePath = Path.Combine(directory, filename).ToString(); - currentItem.Section = nameOfCurrentDirectory; - currentSection.AddItem(currentItem); - } - - } - - Website.Sections.Add(currentSection); - } - } - } - } - - /// /// Asynchronously generates index, pages, sections and items for the IWebsite object from the markdown files in the Content directory. /// @@ -130,7 +16,7 @@ private async Task GenerateSitesFromMarkdownAsync() // Index string pathOfIndex = Path.Combine(Content, "index.md"); if (File.Exists(pathOfIndex)) - await LoadSiteFromMarkdown(pathOfIndex); + LoadSiteFromMarkdown(pathOfIndex); // Pages @@ -151,7 +37,7 @@ async Task ProcessAllPagesInDirectory(string dir) foreach (string file in files) { if (file.EndsWith(".md")) - await LoadSiteFromMarkdown(file); + LoadSiteFromMarkdown(file); } foreach (string directory in dirs) @@ -170,12 +56,12 @@ async Task ProcessAllPagesInDirectory(string dir) string pathOfSectionIndexFile = Path.Combine(directory, "index.md"); if (File.Exists(pathOfSectionIndexFile)) - await LoadSiteFromMarkdown(pathOfSectionIndexFile); + LoadSiteFromMarkdown(pathOfSectionIndexFile); } } } - private async Task LoadSiteFromMarkdown(string path) + private void LoadSiteFromMarkdown(string path) { var pipeline = new MarkdownPipelineBuilder() .UseAdvancedExtensions() diff --git a/Sources/WebsiteManager.MakeIndex.cs b/Sources/WebsiteManager.MakeIndex.cs index b4c89de..f1b11f3 100644 --- a/Sources/WebsiteManager.MakeIndex.cs +++ b/Sources/WebsiteManager.MakeIndex.cs @@ -4,22 +4,10 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { - /// - /// Creates and writes the index (homepage) of the website. - /// - private void MakeIndex() - { - string body = HtmlFactory.MakeIndexHtml(Website.Index); - string head = HtmlFactory.MakeHeadHtml(); - string index = AddLeadingHtmlCode(Website, Website.Index, head, body); - WriteFile(Output, "index.html", index, gitMode: GitMode); - PathDirectory.Add(Output); - } - /// /// Asynchronously creates and writes the index (homepage) of the website. /// - /// A task that represents the asynchronous index generating operation. + /// A that represents the asynchronous index generating operation. private async Task MakeIndexAsync() { string body = HtmlFactory.MakeIndexHtml(Website.Index); diff --git a/Sources/WebsiteManager.MakeItems.cs b/Sources/WebsiteManager.MakeItems.cs index 39f7437..2044bb0 100644 --- a/Sources/WebsiteManager.MakeItems.cs +++ b/Sources/WebsiteManager.MakeItems.cs @@ -5,39 +5,10 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { - /// - /// Creates and writes the items (not sections or pages) of the website. - /// - private void MakeItems() - { - foreach (ISection currentSection in Website.Sections) - { - foreach (IItem site in currentSection.Items) - { - string body = HtmlFactory.MakeItemHtml(site); - string head = HtmlFactory.MakeHeadHtml(); - string page = AddLeadingHtmlCode(Website, site, head, body); - string defaultPath = FilenameToPath.From(site.MarkdownFileName); - - string itemPath = (site.Path != string.Empty) ? site.Path : defaultPath; - string path = Directory.CreateDirectory(Path.Combine(Output, currentSection.SectionName, itemPath)).ToString(); - - if (this.PathDirectory.Contains(path)) - { - Console.WriteLine($"WARNING: The path {path} is allready in use. Change the path in meta data to avoid duplicates."); - } - - WriteFile(path: path, filename: "index.html", content: page, gitMode: GitMode); - - PathDirectory.Add(path); - } - } - } - /// /// Asynchronously creates and writes the items (not sections or pages) of the website. /// - /// A task that represents the asynchronous items generating operation. + /// A that represents the asynchronous items generating operation. private async Task MakeItemsAsync() { List tasks = new List(); diff --git a/Sources/WebsiteManager.MakePages.cs b/Sources/WebsiteManager.MakePages.cs index b26c343..e5b3ccb 100644 --- a/Sources/WebsiteManager.MakePages.cs +++ b/Sources/WebsiteManager.MakePages.cs @@ -5,38 +5,10 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { - /// - /// Creates and writes the pages (not sections or items) of the website. - /// - private void MakePages() - { - foreach (IPage site in Website.Pages) - { - string body = HtmlFactory.MakePageHtml(site); - string head = HtmlFactory.MakeHeadHtml(); - string page = AddLeadingHtmlCode(Website, site, head, body); - string defaultPath = FilenameToPath.From(site.MarkdownFileName); - - // Create directory, if it does not excist. - string pathInHierachy = (site.Path == string.Empty) ? defaultPath : site.Path; - if (pathInHierachy == "index") { pathInHierachy = string.Empty; } - string path = Directory.CreateDirectory(Path.Combine(Output, site.Hierarchy, pathInHierachy)).ToString(); - - if (this.PathDirectory.Contains(path)) - { - Console.WriteLine($"WARNING: The path {path} is allready in use. Change the path in meta data to avoid duplicates."); - } - - WriteFile(path: path, filename: "index.html", content: page, gitMode: GitMode); - - PathDirectory.Add(path); - } - } - /// /// Asynchronously creates and writes the pages (not sections or items) of the website. /// - /// A task that represents the asynchronous pages generating operation. + /// A that represents the asynchronous pages generating operation. private async Task MakePagesAsync() { List tasks = new List(); diff --git a/Sources/WebsiteManager.MakeSections.cs b/Sources/WebsiteManager.MakeSections.cs index 304d04b..8d553b1 100644 --- a/Sources/WebsiteManager.MakeSections.cs +++ b/Sources/WebsiteManager.MakeSections.cs @@ -4,33 +4,10 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { - /// - /// Creates and writes the sections (not pages or items) of the website. - /// - private void MakeSections() - { - foreach (ISection site in Website.Sections) - { - string body = HtmlFactory.MakeSectionHtml(site); - string head = HtmlFactory.MakeHeadHtml(); - string page = AddLeadingHtmlCode(Website, site, head, body); - string path = Directory.CreateDirectory(Path.Combine(Output, site.SectionName)).ToString(); - - if (this.PathDirectory.Contains(path)) - { - Console.WriteLine($"WARNING: The path {path} is allready in use. Change the path in meta data to avoid duplicates."); - } - - WriteFile(path: path, filename: "index.html", content: page, gitMode: GitMode); - - PathDirectory.Add(path); - } - } - /// /// Asynchronously creates and writes the sections (not pages or items) of the website. /// - /// A task that represents the asynchronous sections generating operation. + /// A that represents the asynchronous sections generating operation. private async Task MakeSectionsAsync() { List tasks = new List(); diff --git a/Sources/WebsiteManager.MakeTagLists.cs b/Sources/WebsiteManager.MakeTagLists.cs index 33a86bb..93f61de 100644 --- a/Sources/WebsiteManager.MakeTagLists.cs +++ b/Sources/WebsiteManager.MakeTagLists.cs @@ -4,58 +4,10 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { - private void MakeTagLists() - { - // Collect all available tags - List tags = new List(); - foreach (ISection currentSection in Website.Sections) - { - foreach (IItem currentItem in currentSection.Items) - { - foreach (string tag in currentItem.Tags) - { - // Check if tag is already in list. If not, add it - if (!tags.Contains(tag)) { tags.Add(tag); } - } - } - } - - // Make a taglist for each tag - foreach (string tag in tags) - { - List itemsWithCurrentTag = new(); - // Collect all items with the current tag - foreach (ISection currentSection in Website.Sections) - { - foreach (IItem item in currentSection.Items) - { - if (item.Tags.Contains(tag)) - { - itemsWithCurrentTag.Add(item); - } - } - } - // Write tags sites to files - IItem tagPage = new Item(); - tagPage.Title = $"{tag} | {Website.Name}"; - string body = HtmlFactory.MakeTagListHtml(itemsWithCurrentTag, tag); - string head = HtmlFactory.MakeHeadHtml(); - string page = AddLeadingHtmlCode(Website, tagPage, head, body); - - // Create directory, if it does not excist - string path = Directory.CreateDirectory(Path.Combine(Output, "tag", tag)).ToString(); - - if (this.PathDirectory.Contains(path)) - { - Console.WriteLine($"WARNING: The path {path} is allready in use. Change the path in meta data to avoid duplicates."); - } - - WriteFile(path: path, filename: "index.html", content: page, gitMode: GitMode); - - PathDirectory.Add(path); - } - } - + /// + /// Asynchronously creates and writes the tags pages of the website. + /// + /// A that represents the asynchronous tags generating operation. private async Task MakeTagListsAsync() { // Collect all available tags From 45a3be754fd7173725b1e79073136e2333b3c2a6 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 10 Nov 2022 16:41:11 +0100 Subject: [PATCH 07/32] Update Calling the updated version of DeleteAll() and CopyAllAsync(). Reordered console output. --- Sources/WebsiteManager.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Sources/WebsiteManager.cs b/Sources/WebsiteManager.cs index 17e0e7d..0e91157 100644 --- a/Sources/WebsiteManager.cs +++ b/Sources/WebsiteManager.cs @@ -74,10 +74,10 @@ public WebsiteManager(IWebsite website, string source) /// public async Task Make() { - WriteLine("Checking environment..."); - await CheckEnvironmentAsync(HtmlFactory.ResourcesPath); + WriteLine("Website generating process startet..."); - WriteLine("Starting generating your website:"); + WriteLine("Checking environment..."); + CheckEnvironment(HtmlFactory.ResourcesPath); WriteLine("Collecting markdown data..."); await GenerateSitesFromMarkdownAsync(); @@ -85,11 +85,11 @@ public async Task Make() if (!GitMode) { WriteLine("Deleting old output files..."); - await DeleteAllAsync(Output); + DeleteAll(Output); } WriteLine("Copying theme resources..."); - CopyAll(HtmlFactory.ResourcesPath, Output); + await CopyAllAsync(HtmlFactory.ResourcesPath, Output); WriteLine("Writing index..."); await MakeIndexAsync(); From 6509cb78d94b2c19e1d6e7a9bfc097d402d40079 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 10 Nov 2022 16:42:03 +0100 Subject: [PATCH 08/32] Refactoring Removed async verion of the method, as no await was possible. --- Sources/WebsiteManager.DeleteAll.cs | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/Sources/WebsiteManager.DeleteAll.cs b/Sources/WebsiteManager.DeleteAll.cs index de33e79..1357a86 100644 --- a/Sources/WebsiteManager.DeleteAll.cs +++ b/Sources/WebsiteManager.DeleteAll.cs @@ -7,28 +7,9 @@ public partial class WebsiteManager : IWebsiteManager /// /// Deletes all directories and files within the given path, without deleting the path folder itself. /// - /// Path of the directory. - private void DeleteAll(string path) - { - DirectoryInfo directory = new DirectoryInfo(path); - - foreach (FileInfo file in directory.GetFiles()) - { - file.Delete(); - } - - foreach (DirectoryInfo dir in directory.GetDirectories()) - { - dir.Delete(true); - } - } - - /// - /// Asynchronously deletes all directories and files within the given path, without deleting the path folder itself. - /// /// - /// A task that represents the asynchronous deleting operation. - private async Task DeleteAllAsync(string path) + /// void + private void DeleteAll(string path) { DirectoryInfo directory = new DirectoryInfo(path); From 3f4e39527fe7fb44a0279dd381528f8a14252585 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Fri, 18 Nov 2022 18:45:01 +0100 Subject: [PATCH 09/32] Update --- Documentation/HowTo/meta_data_for_sites.md | 36 ++++++++++++---------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Documentation/HowTo/meta_data_for_sites.md b/Documentation/HowTo/meta_data_for_sites.md index b768f86..a5a0be9 100644 --- a/Documentation/HowTo/meta_data_for_sites.md +++ b/Documentation/HowTo/meta_data_for_sites.md @@ -1,28 +1,30 @@ -# Supported meta data for sites +# Supported metadata for sites -You can provide meta data for all your sites (md-files). -These meta data need to be placed at the top of your markdown files and is [yaml](https://en.wikipedia.org/wiki/YAML) like. You find an example in the [content template](https://github.com/rolandbraun-dev/StatiCSharp/blob/master/Documentation/HowTo/content-template.md). +You can provide metadata for all your sites (md-files). +These metadata need to be placed at the top of your markdown files and are [yaml](https://en.wikipedia.org/wiki/YAML) like. You find an example in the [content template](https://github.com/rolandbraun-dev/StatiCSharp/blob/master/Documentation/HowTo/content-template.md). -It is recommended to provide all meta data in your files. +It is recommended to provide all metadata in your files. -The folling entries are currently available: +The following entries are currently available: +- Published: A boolean value of whether the site is ready to be published. If false, no HTML file is generated. True is the default. - Title: The title of that site. -- Description: A short description of the site. Is displayed in the itemlist e.g. -- Author: The authors name. -- Date: The date this site was created by ISO 8601. E.g. 2022-06-26 . Times are not supported. -- Path: The path the site is available at, relatively to its hierachy. If no path is provided, the filename is used. -- Tags: The tags that the site is corresponding to, seperated by comma. E.g. tag1, tag2, tag3 +- Description: A short description of the site. Is displayed in the item list e.g. +- Author: The authors' name. +- Date: The date this site was created by ISO 8601. E.g., 2022-06-26 Times are not supported. +- Path: The path the site is available at relative to its hierarchy. If no path is provided, the filename is used. +- Tags: The tags the site corresponds to, separated by a comma. E.g. tag1, tag2, tag3 -Important! => To mark your entries as meta data, make sure the data is written between "---". The first "---" need to be placed in the first line of the document! +Important! => To mark your entries as metadata, ensure the data is written between "---". The first "---" need to be placed in the document's first line! ``` --- +Published: true Title: The title of that site. -Description: A short description of the site. Is displayed in the itemlist e.g. -Author: The authors name. -Date: The date this site was created by ISO 8601. E.g. 2022-06-26 . Times are not supported. -Path: The path the site is available at, relatively to its hierachy. If no path is provided, the filename is used. -Tags: The tags that the site is corresponding to, seperated by comma. E.g. tag1, tag2, tag3 +Description: A short description of the site. Is displayed in the item list e.g. +Author: The authors' name. +Date: The date this site was created by ISO 8601. E.g., 2022-06-26 Times are not supported. +Path: The path the site is available at relative to its hierarchy. If no path is provided, the filename is used. +Tags: The tags the site corresponds to, separated by a comma. E.g. tag1, tag2, tag3 --- -``` +``` \ No newline at end of file From 7370d71316d9e8743766b41d6d2d75456aadb6fb Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Fri, 18 Nov 2022 18:46:28 +0100 Subject: [PATCH 10/32] Update --- Documentation/HowTo/content-template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/HowTo/content-template.md b/Documentation/HowTo/content-template.md index dbfef39..9ea923c 100644 --- a/Documentation/HowTo/content-template.md +++ b/Documentation/HowTo/content-template.md @@ -1,4 +1,5 @@ --- +Published: true Date: 2022-01-31 Path: path-for-this-site Author: Your Name From 4f4332773c1fff5cfcd117d639b06a317d31a28f Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 19 Nov 2022 09:21:02 +0100 Subject: [PATCH 11/32] Update --- .../HowTo/controlling_source_directories.md | 6 +-- Documentation/HowTo/favicon.md | 6 +-- Documentation/HowTo/making_a_custom_theme.md | 54 +++++++++---------- Documentation/HowTo/use_themes.md | 6 +-- Documentation/HowTo/using_gitmode.md | 6 +-- Documentation/README.md | 4 +- 6 files changed, 41 insertions(+), 41 deletions(-) diff --git a/Documentation/HowTo/controlling_source_directories.md b/Documentation/HowTo/controlling_source_directories.md index cb50b9a..b326c21 100644 --- a/Documentation/HowTo/controlling_source_directories.md +++ b/Documentation/HowTo/controlling_source_directories.md @@ -1,6 +1,6 @@ # Controlling source directories - After initializing a new WebsiteManager the default location for your output, content and static files is in the given source directory. E.g. + After initializing a new WebsiteManager, the default location for your output, content, and static files is in the given source directory. E.g. ```C# ... source: @"path\to\myWebsite" @@ -17,10 +17,10 @@ │ ├── ... ``` -If you want to change this behavior you can change these defaults by changing the corresponding properties of the WebsiteManager: +If you want to change this behavior, you can change these defaults by changing the corresponding properties of the WebsiteManager: ```C# manager.Content = @"another\path\to\Content"; manager.Output = @"another\path\to\Output"; manager.Resources = @"another\path\to\Resources"; -``` +``` \ No newline at end of file diff --git a/Documentation/HowTo/favicon.md b/Documentation/HowTo/favicon.md index 8e117d1..be1fc9c 100644 --- a/Documentation/HowTo/favicon.md +++ b/Documentation/HowTo/favicon.md @@ -1,11 +1,11 @@ # Customize your favicon -If your website template does not privide a favicon or you don't like the one that is proposed, you can use your very own. +If your website template does not provide a favicon or you don't like the one proposed, you can use your very own. Place your favicon into the Resources directory: ```bash Resources/favicon.png ``` -The file as to be `.png` -Check out [favicon.io](https://favicon.io/) to generate a favicon. +The file has to be `.png`. +Check out [favicon.io](https://favicon.io/) to generate a favicon. \ No newline at end of file diff --git a/Documentation/HowTo/making_a_custom_theme.md b/Documentation/HowTo/making_a_custom_theme.md index 3b062c3..c6d8249 100644 --- a/Documentation/HowTo/making_a_custom_theme.md +++ b/Documentation/HowTo/making_a_custom_theme.md @@ -1,14 +1,14 @@ # Making a custom theme -StatiC# is build to provide third party templates. It's more than welcome that users create their own template, to make their website even greater. Moreover, it would be fantastic if those templates are shared with other users over GitHub or NuGet as a standalone package. +StatiC# is built to provide third-party templates. It's more than welcome that users create their own templates, to make their website even greater. Moreover, it would be fantastic if those templates were shared with other users over GitHub or NuGet as a standalone package. This article describes everything you need to start building your very own template. The only thing you must know is to code C#. StatiC# will deliver the tools you'll need. -You can code your template purely in C#, if you want. Additionally you can build reusable components. +You can code your template purely in C# if you want. Additionally, you can build reusable components. ## Supported HTML components -StatiC# has build in the following HTML elements (more are added frequently). +StatiC# has built-in the following HTML elements (more are added frequently). - \ - \
@@ -27,11 +27,11 @@ StatiC# has build in the following HTML elements (more are added frequently). - \

- \ -Of course, you can make your own and its welcome to contribute new elements or features of elements to this project. +Of course, you can make your own, and it's welcome to contribute new elements or features of elements to this project. ## Getting started -To get started create a new class library project in [.NET](https://dotnet.microsoft.com/en-us/) that is version 6 or higher and add [StatiC#](https://github.com/RolandBraunDev/StatiCSharp) as a package reference to the project. Feel free to check out the [integrated template](https://github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/DefaultHtmlFactory.cs) while following this documentation. +To get started, create a new class library project in [.NET](https://dotnet.microsoft.com/en-us/) that is version 6 or higher and add [StatiC#](https://github.com/RolandBraunDev/StatiCSharp) as a package reference to the project. Feel free to check out the [integrated template](https://github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/DefaultHtmlFactory.cs) while following this documentation. On the top of your class-file import `StatiCSharp.HtmlComponents` and `StatiCSharp.Interfaces`: ```C# @@ -39,7 +39,7 @@ using StatiCSharp.HtmlComponents; using StatiCSharp.Interfaces; ``` -Create a new class that will handle your template. This class need to implement `IHtmlFactory`. You can call it whatever you want, but it is StatiC# convention to call it `NameOfYourTemplateHtmlFactory`. +Create a new class that will handle your template. This class needs to implement `IHtmlFactory`. You can call it whatever you want, but it is StatiC# convention to call it `NameOfYourTemplateHtmlFactory`. ```C# namespace YourTemplate @@ -53,19 +53,19 @@ namespace YourTemplate When adding `IHtmlFactory` your IDE will prompt you to add the following property and methods to your class: - `public string ResourcesPath` The absolute path to the resources your template uses, like css files or images. How to work with those files is explained later. -- `public string MakeHeadHtml()` Creates html-code for inside the \-tag. This code is added to all sites. -- `public string MakeIndexHtml(IIndex index)` Method that returns the \ html-code for the index site. -- `public string MakePageHtml(IPage page)` Method that returns the \ html-code for a page (not section or item). -- `public string MakeSectionHtml(ISection section)` Method that returns the \ html-code for a section site. -- `public string MakeItemHtml(IItem item)` Method that returns the \ html-code for an item site. -- `public string MakeTagListHtml(List items, string tag)` Method that returns the \ html-code for the taglist site. +- `public string MakeHeadHtml()` Creates HTML-code for inside the \-tag. This code is added to all sites. +- `public string MakeIndexHtml(IIndex index)` Method that returns the \ HTML-code for the index site. +- `public string MakePageHtml(IPage page)` Method that returns the \ HTML-code for a page (not section or item). +- `public string MakeSectionHtml(ISection section)` Method that returns the \ HTML -code for a section site. +- `public string MakeItemHtml(IItem item)` Method that returns the \ HTML -code for an item site. +- `public string MakeTagListHtml(List items, string tag)` Method that returns the \ HTML -code for the taglist site. ## Build your first site -First, let's take a look at the methods called `Make...Html()`. As their names suggest, these methods deliver the HTML-Code for the sites their name stands for. StatiC# calls these methods during the website generating process and injects the parameters, depending on the item that is processed at that moment. The return type of that methods is always a string, containing the HTML-Code for this site. Note: Only the HTML-Code within the \-tag. The \ is generated by StatiC#, although you can add elements to the \ with the `MakeHeadHtml()` method. +First, let's look at the method called `Make...Html()`. As their names suggest, these methods deliver the HTML-Code for the sites their name stands for. StatiC# calls these methods during the website generating process and injects the parameters depending on the item that is processed. The return type of that methods is always a string containing the HTML-Code for this site. Note: Only the HTML-Code within the \-tag. The \ is generated by StatiC#, although you can add elements to the \ with the `MakeHeadHtml()` method. You can access the content through the object given with the parameters. Those objects do always implement the corresponding interface. -By using the StatiC#-HTML-Components you can write HTML-Code in C#. Let's check this out by an example with the `MakePageHtml()` method from the integrated default theme. +By using the StatiC#-HTML-Components, you can write HTML-Code in C#. Let's check this out with an example with the `MakePageHtml()` method from the integrated default theme. ```C# public string MakePageHtml(IPage page) @@ -82,12 +82,12 @@ public string MakePageHtml(IPage page) } ``` -In this case, inspect the [IPage interface](github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/Interfaces/IPage.cs) for information about the content you can access via `page`. Pay attention to the fact, that all parameter interfaces inherit from [ISite](github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/Interfaces/ISite.cs), so you have always access to those properties, too. -Initiate a new `Body` object, which is a representation of your current body of the html site. Then follows the elements you want to add to the body of the page. You see that you can use chaining and you are able to nest the elements. This makes your code more readable. Imagine: The code above is everything you need to display a page. -`SiteHeader` and `Footer` are not basic HTML elements. They are custom components that can be used across all your sites. You can create those components with the use of other components or whatever you want. But you need to implement [IHtmlComponent](github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/Interfaces/IHtmlComponent.cs) to work with StatiC#. To ensure chaining you have to return the element itself after every method you implement to customize the element. -Note that the property `Website` is not initialized in the method. If you want access to the hole website object (this can be usefull for a navigation or sitemap) use dependency injection in your custom cunstructor, e.g. `DefaultHtmlFactory(IWebsite website)`. +In this case, inspect the [IPage interface](github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/Interfaces/IPage.cs) for information about the content you can access via `page`. Pay attention to the fact that all parameter interfaces inherit from [ISite](github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/Interfaces/ISite.cs), so you always have access to those properties, too. +Initiate a new `Body` object, which is a representation of your current body of the HTML site. Then follows the elements you want to add to the body of the page. You see that you can use chaining, and you are able to nest the elements. This makes your code more readable. Imagine: The code above is everything you need to display a page. +`SiteHeader` and `Footer` are not basic HTML elements. They are custom components that can be used across all your sites. You can create those components with the use of other components or whatever you want. But you need to implement [IHtmlComponent](github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/Interfaces/IHtmlComponent.cs) to work with StatiC#. To ensure chaining, you have to return the element itself after every method you implement to customize the element. +Note that the property `Website` is not initialized in the method. If you want access to the whole website object (this can be useful for navigation or sitemap), use dependency injection in your custom constructor, e.g., `DefaultHtmlFactory(IWebsite website)`. -Here an example from the [integrated default theme](https://github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/DefaultHtmlFactory.cs) for a custom component called Footer: +Here is an example from the [integrated default theme](https://github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/DefaultHtmlFactory.cs) for a custom component called Footer: ```C# private class Footer : IHtmlComponent @@ -107,11 +107,11 @@ By the way, it would be nice if you implement this reference to StatiC# in your ## Managing resources -With all the steps from above you can build the HTML-code for all sites that are generated by StatiC#. If your templates consists just of HTML-Code... great, then your are done at this point. But for most of the cases you want to provide additional data like css files, javascript or images. Follow these steps to add those resources to your template. +With all the steps above, you can build the HTML code for all sites generated by StatiC#. If your templates consist just of HTML-Code... great, then you are done at this point. But for most of the cases, you want to provide additional data like CSS files, javascript, or images. Follow these steps to add those resources to your template. -Add a folder to your projects root directory and call it `YourThemNameResources`. Within this folder create a new one called `yourthemename-theme`. Again, this is a StatiC# convention. StatiC# will copy all files and folders you provide in `YourThemeNameResources` to the root directory of the generated website. The user is also capable of using additional resources. To prevent potential conflicts you are recommended to put everything that has to do with your theme into the seperate folder `yourthemename-theme`. There is only one exeption: If you want to provide a favicon, put it in `YourThemeNameResources`. If the user provides a favicon, yours will be overriden. +Add a folder to your project's root directory and call it `YourThemNameResources`. Within this folder, create a new one called `yourthemename-theme`. Again, this is a StatiC# convention. StatiC# will copy all files and folders you provide in `YourThemeNameResources` to the root directory of the generated website. The user is also capable of using additional resources. To prevent potential conflicts, you are recommended to put everything that has to do with your theme into the separate folder `yourthemename-theme`. There is only one exception: If you want to provide a favicon, put it in `YourThemeNameResources`. If the user provides a favicon, yours will be overridden. -Tell StatiC# from where to copy your resources by using the `ResourcesPath` property. When folling this guide, your files will be placed in the mentioned directory next the `.dll` of your template. One way to give StatiC# the path of that directory is: +Tell StatiC# from where to copy your resources by using the `ResourcesPath` property. When following this guide, your files will be placed in the mentioned directory next to the `.dll` of your template. One way to give StatiC# the path of that directory is: ```C# public string ResourcesPath @@ -124,7 +124,7 @@ public string ResourcesPath } ``` -You have to implement into your project, that the resources are copied to the output directory of the website generating process. Lets say you want to provide a `styles.css` file: +You have to implement into your project that the resources are copied to the output directory of the website generating process. Let's say you want to provide a `styles.css` file: Add the file to your project into `yourthemename-theme`. Open your `.csproj` file and add the file as ``: @@ -134,7 +134,7 @@ Open your `.csproj` file and add the file as ``: ``` -Additionaly include the file as `` and set the parameters as shown below. With that set, the file will be copied to the output directory ether if the themes is used via a package reference or via a project reference: +Additionally, include the file as `` and set the parameters as shown below. With that set, the file will be copied to the output directory either if the theme is used via a package reference or a project reference: ``` @@ -147,7 +147,7 @@ Additionaly include the file as `` and set the paramete You have to provide these steps for all your files. -Your file is available at `/yourthemename-theme/styles.css`. Add this css-reference by using the `MakeHeadHtml()`: +Your file is available at `/yourthemename-theme/styles.css`. Add this CSS-reference by using the `MakeHeadHtml()`: ```C# public string MakeHeadHtml() @@ -156,8 +156,8 @@ public string MakeHeadHtml() } ``` -This whould be equivalent to javascript files. If you want to access images or other files within the \ tag you can link to them the same way. +This would be equivalent to javascript files. If you want to access images or other files within the \ tag, you can link to them the same way. --- -Check out the [default theme](https://github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/DefaultHtmlFactory.cs) to see a template in action. I would be pleased if you give me feedback for this guide, so that I can it better and make the entry to build custom themes with StatiC# as smoothly as possible. It would be great, if many developers bring in their template ideas and there would be a big number of template to choose from. +Check out the [default theme](https://github.com/RolandBraunDev/StatiCSharp/blob/master/Sources/DefaultHtmlFactory.cs) to see a template in action. I will be pleased if you give me feedback on this guide so that I can make it better and make the entry to build custom themes with StatiC# as smoothly as possible. It would be great if many developers bring in their template ideas, and there would be a large number of templates to choose from. \ No newline at end of file diff --git a/Documentation/HowTo/use_themes.md b/Documentation/HowTo/use_themes.md index 03e8d5b..c364b56 100644 --- a/Documentation/HowTo/use_themes.md +++ b/Documentation/HowTo/use_themes.md @@ -11,10 +11,10 @@ Add the template of your choice to your website project as a project or package ``` -Your can use the NuGet package manager as well. +You can use the NuGet package manager as well. Build your project to restore packages. -Now we can import the theme in the `Program.cs` of the website project, initiate a new member and inject it to the StatiC# website generating process: +Now we can import the theme in the `Program.cs` of the website project, initiate a new member, and inject it to the StatiC# website generating process: ```C# using StatiCSharp; @@ -43,4 +43,4 @@ Build and run your project. Your website is created with the new theme in your ` ```bash $ dotnet run -``` +``` \ No newline at end of file diff --git a/Documentation/HowTo/using_gitmode.md b/Documentation/HowTo/using_gitmode.md index ae72a7e..2659510 100644 --- a/Documentation/HowTo/using_gitmode.md +++ b/Documentation/HowTo/using_gitmode.md @@ -1,11 +1,11 @@ # Using GitMode -By default, __StatiC#__ will delete all files in the output folder and then write all files to make up your website. If your website is under source control this behavior can cause changes in your repository even if no content has changed. E.q. the meta data of the files may have a different value for the date they have been created. +By default, __StatiC#__ will delete all files in the output folder and then write all files to make up your website. If your website is under source control, this behavior can cause changes in your repository, even if no content has changed. E.q., the files' metadata may have a different value for the date they were created. -You can use StatiC# in _GitMode_ to ensure that the files in the output directory are only touched if their content has changed. New files are created as needed. At the same time files that have no corresponding markdown file are deleted. With that behavior you can delete an article by deleting the markdown file it is referring to. +You can use StatiC# in _GitMode_ to ensure that the files in the output directory are only touched if their content has changed. New files are created as needed. At the same time, files that have no corresponding markdown file are deleted. With that behavior, you can delete an article by deleting the markdown file it refers to. Activate GitMode with the property of your WebsiteManager before using Make(): ```C# manager.GitMode = true; -``` +``` \ No newline at end of file diff --git a/Documentation/README.md b/Documentation/README.md index 5acd2d3..06dbb6c 100644 --- a/Documentation/README.md +++ b/Documentation/README.md @@ -3,7 +3,7 @@ Welcome to *StatiC#*'s documentation. This collection contains documentation focused on helping you understand how to use StatiC#'s various features and capabilities. If you need a [project template](ProjectTemplate/) to get started, feel free to use [this](ProjectTemplate/). -## How to's +## How-to's - [Content template file](HowTo/content-template.md) - [Meta Data](HowTo/meta_data_for_sites.md) @@ -13,4 +13,4 @@ This collection contains documentation focused on helping you understand how to - [Favicon](HowTo/favicon.md) - [Making a custom theme](HowTo/making_a_custom_theme.md) -*Contributions adding more “How to”'s, or other kinds of documentation, are more than welcome.* +*Contributions adding more “How-to”'s or other documentation are more than welcome.* \ No newline at end of file From 04602e3df555a94f77bfa7f15353e3a8f944e57b Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 19 Nov 2022 11:31:00 +0100 Subject: [PATCH 12/32] Update Added new property to indicate if the site is ready to be published --- Sources/Index.cs | 1 + Sources/Interfaces/ISite.cs | 5 +++++ Sources/Item.cs | 1 + Sources/Page.cs | 1 + Sources/Section.cs | 1 + Sources/WebsiteManager.MapMetaData.cs | 9 +++++++++ 6 files changed, 18 insertions(+) diff --git a/Sources/Index.cs b/Sources/Index.cs index 3e7434c..2bfcee4 100644 --- a/Sources/Index.cs +++ b/Sources/Index.cs @@ -7,6 +7,7 @@ namespace StatiCSharp; /// internal class Index : IIndex { + public bool Published { get; set; } = true; public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; diff --git a/Sources/Interfaces/ISite.cs b/Sources/Interfaces/ISite.cs index 3370b4c..c848446 100644 --- a/Sources/Interfaces/ISite.cs +++ b/Sources/Interfaces/ISite.cs @@ -6,6 +6,11 @@ /// public interface ISite { + ///

+ /// Indicates if the site is ready to publish. + /// + bool Published { get; set; } + /// /// The title of the site. E.g used for the <title>-tag in the browser. /// diff --git a/Sources/Item.cs b/Sources/Item.cs index d79ec20..64e6c54 100644 --- a/Sources/Item.cs +++ b/Sources/Item.cs @@ -4,6 +4,7 @@ namespace StatiCSharp; internal class Item : IItem { + public bool Published { get; set; } = true; public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; diff --git a/Sources/Page.cs b/Sources/Page.cs index f7e16b4..a0ec208 100644 --- a/Sources/Page.cs +++ b/Sources/Page.cs @@ -7,6 +7,7 @@ namespace StatiCSharp; /// internal class Page : IPage { + public bool Published { get; set; } = true; public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; diff --git a/Sources/Section.cs b/Sources/Section.cs index 5b3194d..2af6c04 100644 --- a/Sources/Section.cs +++ b/Sources/Section.cs @@ -5,6 +5,7 @@ namespace StatiCSharp; internal class Section : ISection { + public bool Published { get; set; } = true; public string SectionName { get; set; } = string.Empty; public List Items { get; set; } = new List(); diff --git a/Sources/WebsiteManager.MapMetaData.cs b/Sources/WebsiteManager.MapMetaData.cs index 298212f..deac47e 100644 --- a/Sources/WebsiteManager.MapMetaData.cs +++ b/Sources/WebsiteManager.MapMetaData.cs @@ -13,6 +13,15 @@ public partial class WebsiteManager : IWebsiteManager private void MapMetaData(Dictionary metaData, ISite site) { // Markdown.ToHtml adds

-marks at the beginning and end of each value. This is sliced manually every time for now. Trim() removes \n at the end of the string. + try + { + if (metaData["published"] is not null) + { + site.Published = bool.Parse(Markdown.ToHtml(metaData["published"]).Replace("

", "").Replace("

", "").Trim()); + } + } + catch { } + try { if (metaData["title"] is not null) From 599728a7a8159f45e4e4d78297975a15568ff732 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 19 Nov 2022 15:06:54 +0100 Subject: [PATCH 13/32] Refactoring Cleaning up directories is now refactored. --- Sources/WebsiteManager.CleanUp.cs | 52 ++++++++++++++----------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/Sources/WebsiteManager.CleanUp.cs b/Sources/WebsiteManager.CleanUp.cs index 9ffa1d0..9ade7f2 100644 --- a/Sources/WebsiteManager.CleanUp.cs +++ b/Sources/WebsiteManager.CleanUp.cs @@ -1,4 +1,6 @@ using StatiCSharp.Interfaces; +using System.IO; +using System.Threading.Tasks; namespace StatiCSharp; @@ -10,41 +12,35 @@ public partial class WebsiteManager : IWebsiteManager /// A that represents the asynchronous clean up operation. private async Task CleanUpAsync() { - string[] directories = Directory.GetDirectories(Output); - foreach (string directory in directories) - { - await cleanUpDirectory(directory); - } + await cleanUpDirectory(Output); - async Task cleanUpDirectory(string dir) + async Task cleanUpDirectory(string directory) { - // Check if there are folders that are not in _pathDirectory - string[] currentDirectories = Directory.GetDirectories(dir); - - foreach (string directory in currentDirectories) + if (!PathDirectory.Contains(directory)) { - if (!PathDirectory.Contains(directory)) + // Delete only files named index.html. Other files could be resources! + if (File.Exists(Path.Combine(directory, "index.html"))) { - // Delete only files named index.html. Other files could be resources! - if (File.Exists(Path.Combine(directory, "index.html"))) - { - File.Delete(Path.Combine(directory, "index.html")); - } - - if (Directory.GetDirectories(directory).Length == 0 && Directory.GetFiles(directory).Length == 0) - { - Directory.Delete(directory); - } - else - { - foreach (string subdir in Directory.GetDirectories(directory)) - { - await cleanUpDirectory(subdir); - } - } + File.Delete(Path.Combine(directory, "index.html")); + } + } + if (Directory.GetDirectories(directory).Length == 0 && Directory.GetFiles(directory).Length == 0) + { + // Do not delete output directory! + if (directory != Output) + { + Directory.Delete(directory); + } + } + else + { + foreach (string subdir in Directory.GetDirectories(directory)) + { + await cleanUpDirectory(subdir); } } + } } } From 60ba290de2e9c3d2cb4af2d03add213007c24b97 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 19 Nov 2022 15:10:45 +0100 Subject: [PATCH 14/32] Update Now using explicit usings instead of global usings. Updated spelling in the documentation. --- Sources/WebsiteManager.MakeIndex.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Sources/WebsiteManager.MakeIndex.cs b/Sources/WebsiteManager.MakeIndex.cs index f1b11f3..d1eba24 100644 --- a/Sources/WebsiteManager.MakeIndex.cs +++ b/Sources/WebsiteManager.MakeIndex.cs @@ -1,19 +1,20 @@ using StatiCSharp.Interfaces; +using System.Threading.Tasks; namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { /// - /// Asynchronously creates and writes the index (homepage) of the website. + /// Asynchronous creates and writes the index (homepage) of the website. /// /// A that represents the asynchronous index generating operation. private async Task MakeIndexAsync() { - string body = HtmlFactory.MakeIndexHtml(Website.Index); - string head = HtmlFactory.MakeHeadHtml(); - string index = AddLeadingHtmlCode(Website, Website.Index, head, body); - await WriteFileAsync(Output, "index.html", index, gitMode: GitMode); - PathDirectory.Add(Output); + string body = HtmlFactory.MakeIndexHtml(Website.Index); + string head = HtmlFactory.MakeHeadHtml(); + string index = AddLeadingHtmlCode(Website, Website.Index, head, body); + await WriteFileAsync(Output, "index.html", index, gitMode: GitMode); + PathDirectory.Add(Output); + } } -} From 1c77722440ca1bb8f937b30f946d6760c539a903 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 19 Nov 2022 15:27:46 +0100 Subject: [PATCH 15/32] Refactoring Disabled implicit usings. Usings are now explicit at the top of the file. --- Sources/DefaultHtmlFactory.cs | 3 +++ Sources/Exceptions/CannotCreateDirectoryException.cs | 4 +++- Sources/Exceptions/DirectoryNotWriteableException.cs | 4 +++- Sources/HtmlComponents/A.cs | 2 ++ Sources/HtmlComponents/Article.cs | 1 + Sources/HtmlComponents/Body.cs | 1 + Sources/HtmlComponents/Div.cs | 1 + Sources/HtmlComponents/Footer.cs | 1 + Sources/HtmlComponents/Header.cs | 1 + Sources/HtmlComponents/Heading.cs | 1 + Sources/HtmlComponents/HtmlElement.cs | 1 + Sources/HtmlComponents/List.cs | 1 + Sources/HtmlComponents/Nav.cs | 1 + Sources/HtmlComponents/Paragraph.cs | 1 + Sources/HtmlComponents/Span.cs | 1 + Sources/Index.cs | 2 ++ Sources/Interfaces/IHtmlFactory.cs | 4 +++- Sources/Interfaces/ISection.cs | 4 +++- Sources/Interfaces/ISite.cs | 5 ++++- Sources/Interfaces/IWebsite.cs | 3 ++- Sources/Interfaces/IWebsiteManager.cs | 4 +++- Sources/Item.cs | 2 ++ Sources/MarkdownFactory.cs | 5 ++++- Sources/Page.cs | 2 ++ Sources/Section.cs | 4 +++- Sources/Website.cs | 2 ++ Sources/WebsiteManager.CheckEnvironment.cs | 2 ++ Sources/WebsiteManager.CopyAll.cs | 2 ++ Sources/WebsiteManager.DeleteAll.cs | 1 + Sources/WebsiteManager.GenerateSitesFromMarkdown.cs | 3 +++ Sources/WebsiteManager.MakeItems.cs | 4 ++++ Sources/WebsiteManager.MakePages.cs | 4 ++++ Sources/WebsiteManager.MakeSections.cs | 4 ++++ Sources/WebsiteManager.MakeTagLists.cs | 4 ++++ Sources/WebsiteManager.MapMetaData.cs | 3 +++ Sources/WebsiteManager.WriteFile.cs | 2 ++ Sources/WebsiteManager.cs | 4 +++- StatiCSharp.csproj | 5 +++-- 38 files changed, 87 insertions(+), 12 deletions(-) diff --git a/Sources/DefaultHtmlFactory.cs b/Sources/DefaultHtmlFactory.cs index eb92305..3277553 100644 --- a/Sources/DefaultHtmlFactory.cs +++ b/Sources/DefaultHtmlFactory.cs @@ -1,5 +1,8 @@ using StatiCSharp.HtmlComponents; using StatiCSharp.Interfaces; +using System; +using System.Collections.Generic; +using System.IO; namespace StatiCSharp; diff --git a/Sources/Exceptions/CannotCreateDirectoryException.cs b/Sources/Exceptions/CannotCreateDirectoryException.cs index 70d53a4..10c8ba1 100644 --- a/Sources/Exceptions/CannotCreateDirectoryException.cs +++ b/Sources/Exceptions/CannotCreateDirectoryException.cs @@ -1,4 +1,6 @@ -namespace StatiCSharp.Exceptions; +using System; + +namespace StatiCSharp.Exceptions; internal class CannotCreateDirectoryException : Exception { diff --git a/Sources/Exceptions/DirectoryNotWriteableException.cs b/Sources/Exceptions/DirectoryNotWriteableException.cs index 3b63768..691eb5f 100644 --- a/Sources/Exceptions/DirectoryNotWriteableException.cs +++ b/Sources/Exceptions/DirectoryNotWriteableException.cs @@ -1,4 +1,6 @@ -namespace StatiCSharp.Exceptions; +using System; + +namespace StatiCSharp.Exceptions; internal class DirectoryNotWriteableException : Exception { diff --git a/Sources/HtmlComponents/A.cs b/Sources/HtmlComponents/A.cs index d181c2f..cf5c57b 100644 --- a/Sources/HtmlComponents/A.cs +++ b/Sources/HtmlComponents/A.cs @@ -1,4 +1,6 @@ using StatiCSharp.Interfaces; +using System; +using System.Collections.Generic; namespace StatiCSharp.HtmlComponents { diff --git a/Sources/HtmlComponents/Article.cs b/Sources/HtmlComponents/Article.cs index 478db7a..8c1d178 100644 --- a/Sources/HtmlComponents/Article.cs +++ b/Sources/HtmlComponents/Article.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; namespace StatiCSharp.HtmlComponents { diff --git a/Sources/HtmlComponents/Body.cs b/Sources/HtmlComponents/Body.cs index 4723444..7b48814 100644 --- a/Sources/HtmlComponents/Body.cs +++ b/Sources/HtmlComponents/Body.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; using System.Text; namespace StatiCSharp.HtmlComponents diff --git a/Sources/HtmlComponents/Div.cs b/Sources/HtmlComponents/Div.cs index b304846..41d138d 100644 --- a/Sources/HtmlComponents/Div.cs +++ b/Sources/HtmlComponents/Div.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; using System.Text; namespace StatiCSharp.HtmlComponents diff --git a/Sources/HtmlComponents/Footer.cs b/Sources/HtmlComponents/Footer.cs index 0b66658..a4c8024 100644 --- a/Sources/HtmlComponents/Footer.cs +++ b/Sources/HtmlComponents/Footer.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; namespace StatiCSharp.HtmlComponents { diff --git a/Sources/HtmlComponents/Header.cs b/Sources/HtmlComponents/Header.cs index 012c0a4..395af6a 100644 --- a/Sources/HtmlComponents/Header.cs +++ b/Sources/HtmlComponents/Header.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; namespace StatiCSharp.HtmlComponents { diff --git a/Sources/HtmlComponents/Heading.cs b/Sources/HtmlComponents/Heading.cs index 70aaa2d..60be35f 100644 --- a/Sources/HtmlComponents/Heading.cs +++ b/Sources/HtmlComponents/Heading.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; namespace StatiCSharp.HtmlComponents { diff --git a/Sources/HtmlComponents/HtmlElement.cs b/Sources/HtmlComponents/HtmlElement.cs index 9c40a0d..e62b5c0 100644 --- a/Sources/HtmlComponents/HtmlElement.cs +++ b/Sources/HtmlComponents/HtmlElement.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; using System.Text; namespace StatiCSharp.HtmlComponents diff --git a/Sources/HtmlComponents/List.cs b/Sources/HtmlComponents/List.cs index 422ff45..7f436be 100644 --- a/Sources/HtmlComponents/List.cs +++ b/Sources/HtmlComponents/List.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; namespace StatiCSharp.HtmlComponents { diff --git a/Sources/HtmlComponents/Nav.cs b/Sources/HtmlComponents/Nav.cs index 7b9caaa..1a470e2 100644 --- a/Sources/HtmlComponents/Nav.cs +++ b/Sources/HtmlComponents/Nav.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; using System.Text; namespace StatiCSharp.HtmlComponents diff --git a/Sources/HtmlComponents/Paragraph.cs b/Sources/HtmlComponents/Paragraph.cs index 9702f78..9f8a5e0 100644 --- a/Sources/HtmlComponents/Paragraph.cs +++ b/Sources/HtmlComponents/Paragraph.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; using System.Text; namespace StatiCSharp.HtmlComponents diff --git a/Sources/HtmlComponents/Span.cs b/Sources/HtmlComponents/Span.cs index fc9c834..ac94877 100644 --- a/Sources/HtmlComponents/Span.cs +++ b/Sources/HtmlComponents/Span.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; using System.Text; namespace StatiCSharp.HtmlComponents diff --git a/Sources/Index.cs b/Sources/Index.cs index 2bfcee4..258f803 100644 --- a/Sources/Index.cs +++ b/Sources/Index.cs @@ -1,4 +1,6 @@ using StatiCSharp.Interfaces; +using System; +using System.Collections.Generic; namespace StatiCSharp; diff --git a/Sources/Interfaces/IHtmlFactory.cs b/Sources/Interfaces/IHtmlFactory.cs index 9c78299..7a8eabd 100644 --- a/Sources/Interfaces/IHtmlFactory.cs +++ b/Sources/Interfaces/IHtmlFactory.cs @@ -1,4 +1,6 @@ -namespace StatiCSharp.Interfaces +using System.Collections.Generic; + +namespace StatiCSharp.Interfaces { /// /// Interface to implement for making StatiC# compatible custom themes. diff --git a/Sources/Interfaces/ISection.cs b/Sources/Interfaces/ISection.cs index 31eacb3..0f49ae1 100644 --- a/Sources/Interfaces/ISection.cs +++ b/Sources/Interfaces/ISection.cs @@ -1,4 +1,6 @@ -namespace StatiCSharp.Interfaces +using System.Collections.Generic; + +namespace StatiCSharp.Interfaces { /// /// The interface a section of the website must implement. diff --git a/Sources/Interfaces/ISite.cs b/Sources/Interfaces/ISite.cs index c848446..3f820a9 100644 --- a/Sources/Interfaces/ISite.cs +++ b/Sources/Interfaces/ISite.cs @@ -1,4 +1,7 @@ -namespace StatiCSharp.Interfaces +using System; +using System.Collections.Generic; + +namespace StatiCSharp.Interfaces { /// /// The interface that all sites (index, pages, sections, items) must implement.
diff --git a/Sources/Interfaces/IWebsite.cs b/Sources/Interfaces/IWebsite.cs index 6be994d..77e54ca 100644 --- a/Sources/Interfaces/IWebsite.cs +++ b/Sources/Interfaces/IWebsite.cs @@ -1,4 +1,5 @@ -using System.Globalization; // CultureInfo +using System.Collections.Generic; +using System.Globalization; // CultureInfo namespace StatiCSharp.Interfaces { diff --git a/Sources/Interfaces/IWebsiteManager.cs b/Sources/Interfaces/IWebsiteManager.cs index 7f87b82..5a59246 100644 --- a/Sources/Interfaces/IWebsiteManager.cs +++ b/Sources/Interfaces/IWebsiteManager.cs @@ -1,4 +1,6 @@ -namespace StatiCSharp.Interfaces +using System.Threading.Tasks; + +namespace StatiCSharp.Interfaces { internal interface IWebsiteManager { diff --git a/Sources/Item.cs b/Sources/Item.cs index 64e6c54..2d2a4f2 100644 --- a/Sources/Item.cs +++ b/Sources/Item.cs @@ -1,4 +1,6 @@ using StatiCSharp.Interfaces; +using System; +using System.Collections.Generic; namespace StatiCSharp; diff --git a/Sources/MarkdownFactory.cs b/Sources/MarkdownFactory.cs index 3378e71..1c56657 100644 --- a/Sources/MarkdownFactory.cs +++ b/Sources/MarkdownFactory.cs @@ -1,4 +1,7 @@ -using static System.Console; +using System; +using System.Collections.Generic; +using System.IO; +using static System.Console; namespace StatiCSharp; diff --git a/Sources/Page.cs b/Sources/Page.cs index a0ec208..1b40fe6 100644 --- a/Sources/Page.cs +++ b/Sources/Page.cs @@ -1,4 +1,6 @@ using StatiCSharp.Interfaces; +using System; +using System.Collections.Generic; namespace StatiCSharp; diff --git a/Sources/Section.cs b/Sources/Section.cs index 2af6c04..d69e622 100644 --- a/Sources/Section.cs +++ b/Sources/Section.cs @@ -1,5 +1,7 @@ using StatiCSharp.Interfaces; - +using System; +using System.Collections.Generic; +using System.Linq; namespace StatiCSharp; diff --git a/Sources/Website.cs b/Sources/Website.cs index e3fb123..ef946ca 100644 --- a/Sources/Website.cs +++ b/Sources/Website.cs @@ -1,5 +1,7 @@ using StatiCSharp.Interfaces; +using System.Collections.Generic; using System.Globalization; // CultureInfo +using System.Linq; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.CheckEnvironment.cs b/Sources/WebsiteManager.CheckEnvironment.cs index 3bfcece..760e9fe 100644 --- a/Sources/WebsiteManager.CheckEnvironment.cs +++ b/Sources/WebsiteManager.CheckEnvironment.cs @@ -1,5 +1,7 @@ using StatiCSharp.Interfaces; using StatiCSharp.Exceptions; +using System.IO; +using System; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.CopyAll.cs b/Sources/WebsiteManager.CopyAll.cs index 1cebdc8..ffba433 100644 --- a/Sources/WebsiteManager.CopyAll.cs +++ b/Sources/WebsiteManager.CopyAll.cs @@ -1,4 +1,6 @@ using StatiCSharp.Interfaces; +using System.IO; +using System.Threading.Tasks; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.DeleteAll.cs b/Sources/WebsiteManager.DeleteAll.cs index 1357a86..67c7710 100644 --- a/Sources/WebsiteManager.DeleteAll.cs +++ b/Sources/WebsiteManager.DeleteAll.cs @@ -1,4 +1,5 @@ using StatiCSharp.Interfaces; +using System.IO; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs b/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs index bf16a01..cc69505 100644 --- a/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs +++ b/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs @@ -1,5 +1,8 @@ using Markdig; using StatiCSharp.Interfaces; +using System.IO; +using System.Threading.Tasks; +using System; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.MakeItems.cs b/Sources/WebsiteManager.MakeItems.cs index 2044bb0..6a08ef9 100644 --- a/Sources/WebsiteManager.MakeItems.cs +++ b/Sources/WebsiteManager.MakeItems.cs @@ -1,5 +1,9 @@ using StatiCSharp.Interfaces; using StatiCSharp.Tools; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.IO; +using System; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.MakePages.cs b/Sources/WebsiteManager.MakePages.cs index e5b3ccb..b84e150 100644 --- a/Sources/WebsiteManager.MakePages.cs +++ b/Sources/WebsiteManager.MakePages.cs @@ -1,5 +1,9 @@ using StatiCSharp.Interfaces; using StatiCSharp.Tools; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.IO; +using System; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.MakeSections.cs b/Sources/WebsiteManager.MakeSections.cs index 8d553b1..410db1b 100644 --- a/Sources/WebsiteManager.MakeSections.cs +++ b/Sources/WebsiteManager.MakeSections.cs @@ -1,4 +1,8 @@ using StatiCSharp.Interfaces; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.MakeTagLists.cs b/Sources/WebsiteManager.MakeTagLists.cs index 93f61de..de45c8d 100644 --- a/Sources/WebsiteManager.MakeTagLists.cs +++ b/Sources/WebsiteManager.MakeTagLists.cs @@ -1,4 +1,8 @@ using StatiCSharp.Interfaces; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.IO; +using System; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.MapMetaData.cs b/Sources/WebsiteManager.MapMetaData.cs index deac47e..06b007f 100644 --- a/Sources/WebsiteManager.MapMetaData.cs +++ b/Sources/WebsiteManager.MapMetaData.cs @@ -1,5 +1,8 @@ using Markdig; using StatiCSharp.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.WriteFile.cs b/Sources/WebsiteManager.WriteFile.cs index 4a46331..b6d8e8d 100644 --- a/Sources/WebsiteManager.WriteFile.cs +++ b/Sources/WebsiteManager.WriteFile.cs @@ -1,4 +1,6 @@ using StatiCSharp.Interfaces; +using System.IO; +using System.Threading.Tasks; namespace StatiCSharp; diff --git a/Sources/WebsiteManager.cs b/Sources/WebsiteManager.cs index 0e91157..ba0e885 100644 --- a/Sources/WebsiteManager.cs +++ b/Sources/WebsiteManager.cs @@ -1,6 +1,8 @@ using StatiCSharp.Interfaces; -using System.Diagnostics; +using System.Collections.Generic; +using System.IO; using static System.Console; +using System.Threading.Tasks; namespace StatiCSharp; diff --git a/StatiCSharp.csproj b/StatiCSharp.csproj index fd773a2..5414ac5 100644 --- a/StatiCSharp.csproj +++ b/StatiCSharp.csproj @@ -2,7 +2,7 @@ net7.0 - enable + disable enable 0.2.0 0.3.0 @@ -19,7 +19,8 @@ true Icon.png StatiC# - StatiC# is now non-blocking. + - StatiC# is now on .NET 7. +- Metadata now supports the "Published" keyword to determine whether an HTML site is generated. LICENSE From 72144001c26a29d003af3a4cb32e8add5674ae09 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 19 Nov 2022 15:45:49 +0100 Subject: [PATCH 16/32] Update Updated spelling in documentation. --- Sources/WebsiteManager.GenerateSitesFromMarkdown.cs | 2 +- Sources/WebsiteManager.MakeItems.cs | 2 +- Sources/WebsiteManager.MakePages.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs b/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs index cc69505..e6b53fd 100644 --- a/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs +++ b/Sources/WebsiteManager.GenerateSitesFromMarkdown.cs @@ -9,7 +9,7 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { /// - /// Asynchronously generates index, pages, sections and items for the IWebsite object from the markdown files in the Content directory. + /// Asynchronous generates index, pages, sections and items for the IWebsite object from the markdown files in the Content directory. /// /// private async Task GenerateSitesFromMarkdownAsync() diff --git a/Sources/WebsiteManager.MakeItems.cs b/Sources/WebsiteManager.MakeItems.cs index 6a08ef9..2cd1f44 100644 --- a/Sources/WebsiteManager.MakeItems.cs +++ b/Sources/WebsiteManager.MakeItems.cs @@ -10,7 +10,7 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { /// - /// Asynchronously creates and writes the items (not sections or pages) of the website. + /// Asynchronous creates and writes the items (not sections or pages) of the website. /// /// A that represents the asynchronous items generating operation. private async Task MakeItemsAsync() diff --git a/Sources/WebsiteManager.MakePages.cs b/Sources/WebsiteManager.MakePages.cs index b84e150..52ac15c 100644 --- a/Sources/WebsiteManager.MakePages.cs +++ b/Sources/WebsiteManager.MakePages.cs @@ -10,7 +10,7 @@ namespace StatiCSharp; public partial class WebsiteManager : IWebsiteManager { /// - /// Asynchronously creates and writes the pages (not sections or items) of the website. + /// Asynchronous creates and writes the pages (not sections or items) of the website. /// /// A that represents the asynchronous pages generating operation. private async Task MakePagesAsync() From 7e0b1a1970c57cbd16b71a52620215e7a1ac00d2 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 19 Nov 2022 18:03:02 +0100 Subject: [PATCH 17/32] Removed Removed code for the feature of not publishing a site. This feature is delayed. --- Sources/Index.cs | 1 - Sources/Interfaces/ISite.cs | 5 ----- Sources/Item.cs | 1 - Sources/Page.cs | 1 - Sources/Section.cs | 1 - Sources/WebsiteManager.MapMetaData.cs | 9 --------- StatiCSharp.csproj | 3 +-- 7 files changed, 1 insertion(+), 20 deletions(-) diff --git a/Sources/Index.cs b/Sources/Index.cs index 258f803..08d3cd0 100644 --- a/Sources/Index.cs +++ b/Sources/Index.cs @@ -9,7 +9,6 @@ namespace StatiCSharp; ///
internal class Index : IIndex { - public bool Published { get; set; } = true; public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; diff --git a/Sources/Interfaces/ISite.cs b/Sources/Interfaces/ISite.cs index 3f820a9..9b6d00b 100644 --- a/Sources/Interfaces/ISite.cs +++ b/Sources/Interfaces/ISite.cs @@ -9,11 +9,6 @@ namespace StatiCSharp.Interfaces ///
public interface ISite { - /// - /// Indicates if the site is ready to publish. - /// - bool Published { get; set; } - /// /// The title of the site. E.g used for the <title>-tag in the browser. /// diff --git a/Sources/Item.cs b/Sources/Item.cs index 2d2a4f2..43e97d1 100644 --- a/Sources/Item.cs +++ b/Sources/Item.cs @@ -6,7 +6,6 @@ namespace StatiCSharp; internal class Item : IItem { - public bool Published { get; set; } = true; public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; diff --git a/Sources/Page.cs b/Sources/Page.cs index 1b40fe6..463ef7e 100644 --- a/Sources/Page.cs +++ b/Sources/Page.cs @@ -9,7 +9,6 @@ namespace StatiCSharp; ///
internal class Page : IPage { - public bool Published { get; set; } = true; public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; diff --git a/Sources/Section.cs b/Sources/Section.cs index d69e622..2ae5df4 100644 --- a/Sources/Section.cs +++ b/Sources/Section.cs @@ -7,7 +7,6 @@ namespace StatiCSharp; internal class Section : ISection { - public bool Published { get; set; } = true; public string SectionName { get; set; } = string.Empty; public List Items { get; set; } = new List(); diff --git a/Sources/WebsiteManager.MapMetaData.cs b/Sources/WebsiteManager.MapMetaData.cs index 06b007f..036cd20 100644 --- a/Sources/WebsiteManager.MapMetaData.cs +++ b/Sources/WebsiteManager.MapMetaData.cs @@ -16,15 +16,6 @@ public partial class WebsiteManager : IWebsiteManager private void MapMetaData(Dictionary metaData, ISite site) { // Markdown.ToHtml adds

-marks at the beginning and end of each value. This is sliced manually every time for now. Trim() removes \n at the end of the string. - try - { - if (metaData["published"] is not null) - { - site.Published = bool.Parse(Markdown.ToHtml(metaData["published"]).Replace("

", "").Replace("

", "").Trim()); - } - } - catch { } - try { if (metaData["title"] is not null) diff --git a/StatiCSharp.csproj b/StatiCSharp.csproj index 5414ac5..a4841e2 100644 --- a/StatiCSharp.csproj +++ b/StatiCSharp.csproj @@ -19,8 +19,7 @@ true Icon.png StatiC# - - StatiC# is now on .NET 7. -- Metadata now supports the "Published" keyword to determine whether an HTML site is generated. + StatiC# is now on .NET 7 LICENSE From 1f022fd2589cfacfaebbae700ff69cc185749090 Mon Sep 17 00:00:00 2001 From: Roland Date: Mon, 12 Dec 2022 18:01:59 +0100 Subject: [PATCH 18/32] Initial commit --- Logo.svg | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Logo.svg diff --git a/Logo.svg b/Logo.svg new file mode 100644 index 0000000..f8f190b --- /dev/null +++ b/Logo.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + From ca81db762d9595af7951cd21b9145804f775c00d Mon Sep 17 00:00:00 2001 From: Roland Date: Mon, 12 Dec 2022 18:03:59 +0100 Subject: [PATCH 19/32] Update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 909c756..b3c81be 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- StatiC# + StatiC#

From e31474624989b10d367e3bc62aa02711cad4695d Mon Sep 17 00:00:00 2001 From: Roland Date: Mon, 12 Dec 2022 18:04:31 +0100 Subject: [PATCH 20/32] Delete Logo.png --- Logo.png | Bin 110698 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Logo.png diff --git a/Logo.png b/Logo.png deleted file mode 100644 index 7eb97f91fa1d0150feaca83bcbac4a9e46431965..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110698 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

BL_fh|#v;>vBLm7S8 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 From e1ac192101ca05d947f90fcb39aaeee522cdf2b8 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Tue, 13 Dec 2022 10:55:59 +0100 Subject: [PATCH 21/32] Update --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b3c81be..8ca88a7 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Welcome to **StatiC#**, a static website generator written in C#. It enables ent StatiC# provides everything you need to create a website with all the files needed to upload onto a web server. -If you want to quickstart with your new website, you can start with the [default configuration](https://github.com/RolandBraunDev/StatiCSharp/tree/master/Documentation/ProjectTemplate) and build up from there. Here is an example: +If you want to quickstart with your new website, you can start with the [default configuration](Documentation/ProjectTemplate) and build up from there. Here is an example: ```C# using StatiCSharp; @@ -78,7 +78,7 @@ using StatiCSharp; ## Quick start -You can use StatiC#'s [project template](/Documentation/ProjectTemplate) to quick start or follow the following steps to set up your project manually. +You can use StatiC#'s [project template](Documentation/ProjectTemplate) to quick start or follow the following steps to set up your project manually. Nevertheless its recommended to read this readme to get a understanding how StatiC# works. StatiC# expects three folders to work with at the path given during the initialization of the WebsiteManager. @@ -104,7 +104,7 @@ StatiC# renders four different types of sites: *sections*: Sites that contain items e.g. articles in a specific field. *items*: The sites that are part of a section. -Add some content to your website by adding your markdown files to the `Content` folder. Check out the [documentation](/Documentation) for a [template file](Documentation/HowTo/content-template.md): +Add some content to your website by adding your markdown files to the `Content` folder. Check out the [documentation](Documentation/) for a [template file](Documentation/HowTo/content-template.md): ``` ├── myWebsite @@ -151,7 +151,7 @@ Run the project and your new awesome website will be generated in the `Output` d $ dotnet run ``` -Check out the [documentation](/Documentation) for further information. +Check out the [documentation](Documentation/) for further information. ## Dependencies From 2f803a5732664e87d9a7f7e8e71b3a97bead09fa Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Tue, 13 Dec 2022 10:58:55 +0100 Subject: [PATCH 22/32] Update --- Documentation/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/README.md b/Documentation/README.md index 06dbb6c..ede4150 100644 --- a/Documentation/README.md +++ b/Documentation/README.md @@ -13,4 +13,4 @@ This collection contains documentation focused on helping you understand how to - [Favicon](HowTo/favicon.md) - [Making a custom theme](HowTo/making_a_custom_theme.md) -*Contributions adding more “How-to”'s or other documentation are more than welcome.* \ No newline at end of file +Contributions adding more How-to's or other documentation are more than welcome. \ No newline at end of file From 6aaa7855e44b79cdfb351c85428d519f98ef0a37 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 17 Dec 2022 16:48:29 +0100 Subject: [PATCH 23/32] Initial commit --- Sources/StatiCSharpConsole.cs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Sources/StatiCSharpConsole.cs diff --git a/Sources/StatiCSharpConsole.cs b/Sources/StatiCSharpConsole.cs new file mode 100644 index 0000000..ffeb423 --- /dev/null +++ b/Sources/StatiCSharpConsole.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StatiCSharp +{ + internal static class StatiCSharpConsole + { + ///

+ /// Writes a text to the console, just like . If no console is available, the text is written to the debug console. + /// + /// + public static void WriteLine(string text) + { + if (Environment.UserInteractive) + { + Console.WriteLine(text); + return; + } + Debug.WriteLine(text); + } + } +} From 722e67f098f33ecfe690efc47453a1cb34aaf8fa Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 17 Dec 2022 16:48:52 +0100 Subject: [PATCH 24/32] Update Changed assembly version to 0.3.0. --- StatiCSharp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StatiCSharp.csproj b/StatiCSharp.csproj index a4841e2..a3b224e 100644 --- a/StatiCSharp.csproj +++ b/StatiCSharp.csproj @@ -4,7 +4,7 @@ net7.0 disable enable - 0.2.0 + 0.3.0 0.3.0 Roland Braun False From ae92e5d08e7703c5f41c88ef83af9958c31c5c73 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 17 Dec 2022 16:52:10 +0100 Subject: [PATCH 25/32] Update Now using the StatiCSharpConsole to writeline text. CheckEnviroment() is now running in an async task, which is configured to false. So the following continuation task continues running in the other thread, preventing deadlocks when StatiC# is used as a library in GUI applications. --- Sources/WebsiteManager.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Sources/WebsiteManager.cs b/Sources/WebsiteManager.cs index ba0e885..dc0a8c3 100644 --- a/Sources/WebsiteManager.cs +++ b/Sources/WebsiteManager.cs @@ -1,7 +1,7 @@ using StatiCSharp.Interfaces; using System.Collections.Generic; using System.IO; -using static System.Console; +using static StatiCSharp.StatiCSharpConsole; using System.Threading.Tasks; namespace StatiCSharp; @@ -79,7 +79,8 @@ public async Task Make() WriteLine("Website generating process startet..."); WriteLine("Checking environment..."); - CheckEnvironment(HtmlFactory.ResourcesPath); + var checkEnvTask = Task.Run(() => CheckEnvironment(HtmlFactory.ResourcesPath)).ConfigureAwait(false); + await checkEnvTask; WriteLine("Collecting markdown data..."); await GenerateSitesFromMarkdownAsync(); From 6620a5ce69be61407589db68117a32c42e6a6528 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sat, 17 Dec 2022 17:15:17 +0100 Subject: [PATCH 26/32] Update Deleting old output files is now called async. --- Sources/WebsiteManager.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Sources/WebsiteManager.cs b/Sources/WebsiteManager.cs index dc0a8c3..7423388 100644 --- a/Sources/WebsiteManager.cs +++ b/Sources/WebsiteManager.cs @@ -1,8 +1,8 @@ using StatiCSharp.Interfaces; using System.Collections.Generic; using System.IO; -using static StatiCSharp.StatiCSharpConsole; using System.Threading.Tasks; +using static StatiCSharp.StatiCSharpConsole; namespace StatiCSharp; @@ -88,7 +88,8 @@ public async Task Make() if (!GitMode) { WriteLine("Deleting old output files..."); - DeleteAll(Output); + var deleteAllTask = Task.Run(() => DeleteAll(Output)); + await deleteAllTask; } WriteLine("Copying theme resources..."); From ef39c21d78a47958f54992f0bfed5e2ae0305761 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Sun, 18 Dec 2022 10:56:10 +0100 Subject: [PATCH 27/32] Update Changed release notes. --- StatiCSharp.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/StatiCSharp.csproj b/StatiCSharp.csproj index a3b224e..adc0bde 100644 --- a/StatiCSharp.csproj +++ b/StatiCSharp.csproj @@ -19,7 +19,8 @@ true Icon.png StatiC# - StatiC# is now on .NET 7 + StatiC# is now on .NET 7. +Improved async compatibility. You can use Make() without causing a deadlock in GUI applications. LICENSE From 0a1c3e3d153e131d0018742ef27bd0c573fad5a0 Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 22 Dec 2022 13:03:48 +0100 Subject: [PATCH 28/32] Update Updated documentation. --- Sources/StatiCSharpConsole.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/StatiCSharpConsole.cs b/Sources/StatiCSharpConsole.cs index ffeb423..47bd2cf 100644 --- a/Sources/StatiCSharpConsole.cs +++ b/Sources/StatiCSharpConsole.cs @@ -10,7 +10,7 @@ namespace StatiCSharp internal static class StatiCSharpConsole { /// - /// Writes a text to the console, just like . If no console is available, the text is written to the debug console. + /// Writes a text to the console, just like . If no console is available, the text is written to the debug console. /// /// public static void WriteLine(string text) From d02b8aa9d42cbeb4a60bdd8b5cc7e7a2b6da505c Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 22 Dec 2022 13:57:27 +0100 Subject: [PATCH 29/32] Update --- Icon.png | Bin 13969 -> 59549 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Icon.png b/Icon.png index 88aed6f2ad914d63616485686a472e4c4e054df5..e93c9169abf30fb6bd0d652bf660b6ac175171d9 100644 GIT binary patch delta 58661 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 DEP_92 From 1e9fec3ca002def5898dc78160497ca9beb97ebb Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 22 Dec 2022 14:03:55 +0100 Subject: [PATCH 30/32] Update Corrected spelling. --- StatiCSharp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StatiCSharp.csproj b/StatiCSharp.csproj index adc0bde..c151e81 100644 --- a/StatiCSharp.csproj +++ b/StatiCSharp.csproj @@ -8,7 +8,7 @@ 0.3.0 Roland Braun False - A static webside generator written in C#. It enables entire websites to be built using C#. Custom templates are supported. See the documentation to learn how to build them. + A static website generator written in C#. It enables entire websites to be built using C#. Custom templates are supported. See the documentation to learn how to create them. Roland Braun https://github.com/RolandBraunDev/StatiCSharp README_NUGET.md From 8aa3b451b613f65d4289db1cdb65910e3dfacc3a Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 22 Dec 2022 14:08:43 +0100 Subject: [PATCH 31/32] Update --- Documentation/HowTo/content-template.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Documentation/HowTo/content-template.md b/Documentation/HowTo/content-template.md index 9ea923c..dbfef39 100644 --- a/Documentation/HowTo/content-template.md +++ b/Documentation/HowTo/content-template.md @@ -1,5 +1,4 @@ --- -Published: true Date: 2022-01-31 Path: path-for-this-site Author: Your Name From 5f35bd73b12ec4dc46a290c1182b2920402cebba Mon Sep 17 00:00:00 2001 From: Roland Braun Date: Thu, 22 Dec 2022 14:11:37 +0100 Subject: [PATCH 32/32] Update --- Documentation/HowTo/meta_data_for_sites.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Documentation/HowTo/meta_data_for_sites.md b/Documentation/HowTo/meta_data_for_sites.md index a5a0be9..719d0eb 100644 --- a/Documentation/HowTo/meta_data_for_sites.md +++ b/Documentation/HowTo/meta_data_for_sites.md @@ -7,7 +7,6 @@ It is recommended to provide all metadata in your files. The following entries are currently available: -- Published: A boolean value of whether the site is ready to be published. If false, no HTML file is generated. True is the default. - Title: The title of that site. - Description: A short description of the site. Is displayed in the item list e.g. - Author: The authors' name. @@ -19,7 +18,6 @@ Important! => To mark your entries as metadata, ensure the data is written betwe ``` --- -Published: true Title: The title of that site. Description: A short description of the site. Is displayed in the item list e.g. Author: The authors' name.