From af0a226d787fe91314b2ab0a387ffbe754ba4d54 Mon Sep 17 00:00:00 2001 From: David McEwing Date: Fri, 18 Nov 2022 10:32:26 +1300 Subject: [PATCH 1/3] Update the mermaid, katex and Highlight libraries, Fix rendering of workitem status indicator. --- AzureDevOps.WikiPDFExport/WikiPDFExporter.cs | 12 ++++++------ AzureDevOps.WikiPDFExport/devopswikistyle.css | 16 +++++++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/AzureDevOps.WikiPDFExport/WikiPDFExporter.cs b/AzureDevOps.WikiPDFExport/WikiPDFExporter.cs index 3a226f1..e289f8c 100644 --- a/AzureDevOps.WikiPDFExport/WikiPDFExporter.cs +++ b/AzureDevOps.WikiPDFExport/WikiPDFExporter.cs @@ -141,7 +141,7 @@ public async Task Export() { string mermaid = !string.IsNullOrEmpty(_options.MermaidJsPath) ? $"" - : @""; + : @""; var mermaidInitialize = ""; @@ -153,8 +153,8 @@ public async Task Export() if (_options.Math) { - var katex = ""; - var katexCss = ""; + var katex = ""; + var katexCss = ""; header.Add(katexCss); footer.Add(katex); @@ -163,8 +163,8 @@ public async Task Export() if (_options.HighlightCode) { string hightlightStyle = _options.HighlightStyle ?? "vs"; - string hightlight = $@" - + string hightlight = $@" + "; var hightlightInitialize = @""; @@ -315,7 +315,7 @@ async private Task GenerateWorkItemLink(string stringId, WorkItemTrackin {title} - + {state} diff --git a/AzureDevOps.WikiPDFExport/devopswikistyle.css b/AzureDevOps.WikiPDFExport/devopswikistyle.css index 3e34529..fb860cb 100644 --- a/AzureDevOps.WikiPDFExport/devopswikistyle.css +++ b/AzureDevOps.WikiPDFExport/devopswikistyle.css @@ -388,15 +388,21 @@ a.mention-link, a.mention-link :hover { vertical-align: bottom; color: rgba(0, 0, 0, 0.9); } + +.mention-widget-workitem-state .workitem-state-color::after { + content: "\0000B7"; + font-size: 6em; + top: -12px; + left: 0px; + display: inline-block; + position: relative; +} + .mention-widget-workitem-state .workitem-state-color { - border: 3px solid transparent; width: 16px; height: 16px; - border-radius: 50%; - margin: 0 4px; - background-clip: padding-box; - box-sizing: border-box; } + .work-item-type-icon-host { display: inline-block; } From fdf05ad71b53a51580f7262b31e2d569e811ebd5 Mon Sep 17 00:00:00 2001 From: David McEwing Date: Fri, 18 Nov 2022 13:09:17 +1300 Subject: [PATCH 2/3] Change default path for devopswikistyle.css --- AzureDevOps.WikiPDFExport/Options.cs | 2 +- AzureDevOps.WikiPDFExport/WikiPDFExporter.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AzureDevOps.WikiPDFExport/Options.cs b/AzureDevOps.WikiPDFExport/Options.cs index 8988b57..c8dcce1 100644 --- a/AzureDevOps.WikiPDFExport/Options.cs +++ b/AzureDevOps.WikiPDFExport/Options.cs @@ -56,7 +56,7 @@ public class Options [Option('m', "mermaid", Required = false, HelpText = "Convert mermaid diagrams to SVG. Will download latest chromium, if chrome-path is not defined")] public bool ConvertMermaid { get; set; } - [Option("mermaidjs-path", Required = false, HelpText = "Path of the mermaid.js file. It'll be used if mermaid diagrams support is turned on (-m/--mermaid). If not specified, 'https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.6.4/mermaid.min.js' will be used.")] + [Option("mermaidjs-path", Required = false, HelpText = "Path of the mermaid.js file. It'll be used if mermaid diagrams support is turned on (-m/--mermaid). If not specified, 'https://cdnjs.cloudflare.com/ajax/libs/mermaid/9.1.6/mermaid.min.js' will be used.")] public string MermaidJsPath { get; set; } [Option("chrome-path", Required = false, HelpText = "Path of the chrome or chromium executable. If not specified, a headless version will be downloaded.")] diff --git a/AzureDevOps.WikiPDFExport/WikiPDFExporter.cs b/AzureDevOps.WikiPDFExport/WikiPDFExporter.cs index e289f8c..64955d1 100644 --- a/AzureDevOps.WikiPDFExport/WikiPDFExporter.cs +++ b/AzureDevOps.WikiPDFExport/WikiPDFExporter.cs @@ -203,7 +203,7 @@ public async Task Export() var cssPath = ""; if (string.IsNullOrEmpty(_options.CSS)) { - cssPath = "devopswikistyle.css"; + cssPath = AppDomain.CurrentDomain.BaseDirectory + "devopswikistyle.css"; Log("No CSS specified, using devopswikistyle.css", LogLevel.Information, 0); } else From ea7d524bc552503620cccfa76ce3fefb99ed8ee5 Mon Sep 17 00:00:00 2001 From: Dominik Szmigiel Date: Mon, 28 Nov 2022 14:32:20 +0100 Subject: [PATCH 3/3] Configurable position of TOC --- AzureDevOps.WikiPDFExport/MarkdownConverter.cs | 12 +++++++----- AzureDevOps.WikiPDFExport/Options.cs | 3 +++ README.md | 3 +++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/AzureDevOps.WikiPDFExport/MarkdownConverter.cs b/AzureDevOps.WikiPDFExport/MarkdownConverter.cs index d4189c1..ef1297e 100644 --- a/AzureDevOps.WikiPDFExport/MarkdownConverter.cs +++ b/AzureDevOps.WikiPDFExport/MarkdownConverter.cs @@ -66,7 +66,9 @@ internal string ConvertToHTML(IList files) if (!string.IsNullOrEmpty(_options.GlobalTOC)) { - var firstMDFileInfo = files[0].FileInfo; + if (_options.GlobalTOCPosition > files.Count) + _options.GlobalTOCPosition = files.Count; + var firstMDFileInfo = files[_options.GlobalTOCPosition].FileInfo; var directoryName = firstMDFileInfo.Directory.Name; var tocName = _options.GlobalTOC == "" ? directoryName : _options.GlobalTOC; var relativePath = "/" + tocName + ".md"; @@ -75,9 +77,9 @@ internal string ConvertToHTML(IList files) var contents = files.Select(x => x.Content).ToList(); var tocContent = CreateGlobalTableOfContent(contents); var tocString = string.Join("\n", tocContent); - var tocMarkdownFile = new MarkdownFile(new FileInfo(tocMDFilePath), relativePath, 0, relativePath, tocString); - files.Insert(0, tocMarkdownFile); + + files.Insert(_options.GlobalTOCPosition, tocMarkdownFile); } for (var i = 0; i < files.Count; i++) @@ -155,7 +157,7 @@ internal string ConvertToHTML(IList files) } html = builder.ToString(); - if (!string.IsNullOrEmpty(_options.GlobalTOC) && i == 0) + if (!string.IsNullOrEmpty(_options.GlobalTOC) && i == _options.GlobalTOCPosition) { html = RemoveDuplicatedHeadersFromGlobalTOC(html); Log($"Removed duplicated headers from toc html", LogLevel.Information, 1); @@ -185,7 +187,7 @@ internal string ConvertToHTML(IList files) } - if (!string.IsNullOrEmpty(_options.GlobalTOC) && i == 0 && !_options.Heading) + if (!string.IsNullOrEmpty(_options.GlobalTOC) && i == _options.GlobalTOCPosition && !_options.Heading) { var heading = $"

{_options.GlobalTOC}

"; html = heading + html; diff --git a/AzureDevOps.WikiPDFExport/Options.cs b/AzureDevOps.WikiPDFExport/Options.cs index c8dcce1..fd4a140 100644 --- a/AzureDevOps.WikiPDFExport/Options.cs +++ b/AzureDevOps.WikiPDFExport/Options.cs @@ -95,6 +95,9 @@ public class Options [Option("globaltoc", Required = false, HelpText = "Title for a global table of content for all markdown files. When not specified each markdown creates its own toc if defined")] public string GlobalTOC { get; set; } + [Option("globaltocposition", Required = false, HelpText = "Order of TOC within all files (starting from 0). When not specified TOC will be printed on the first page")] + public int GlobalTOCPosition { get; set; } + [Option("printbackground", Required = false, HelpText = "Enable print background when using no header/footer template")] public bool PrintBackground { get; set; } = false; diff --git a/README.md b/README.md index bd4059b..e09ecf3 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,9 @@ Provide a path to html files that will be added as header and footer. See [examp ### --GlobalTOC Title for a global table of content for all markdown files. When not specified each markdown creates its own toc if defined +### --GlobalTOCPosition +Order of TOC within all files (starting from 0). When not specified TOC will be printed on the first page + ### --include-unlisted-pages By default only pages listed in `.order` files are considered. Setting this option any Markdown file (`.md`) found will be included as-well.