From b3670ece0ec72610ad31283c6b6b2c7f556eeba1 Mon Sep 17 00:00:00 2001 From: Jonas Berlin Date: Mon, 17 Feb 2020 22:59:37 +0200 Subject: [PATCH] Add "Suggest an edit" link next to "Git repository" Includes new configuration option `git-repository-edit-baseurl` for supporting non-GitHub repository layouts. --- guide/src/format/config.md | 6 ++++++ src/config.rs | 5 +++++ src/renderer/html_handlebars/hbs_renderer.rs | 10 ++++++++++ src/theme/index.hbs | 6 ++++++ 4 files changed, 27 insertions(+) diff --git a/guide/src/format/config.md b/guide/src/format/config.md index d9c77e66..f1f65128 100644 --- a/guide/src/format/config.md +++ b/guide/src/format/config.md @@ -201,6 +201,12 @@ The following configuration options are available: an icon link will be output in the menu bar of the book. - **git-repository-icon:** The FontAwesome icon class to use for the git repository link. Defaults to `fa-github`. +- **git-repository-edit-baseurl:** The base url for suggesting an edit + to individual pages/chapters of the book. If **git-repository-url** is defined, + defaults to **git-repository-url**/blob/master which works for e.g. GitHub. + The page source path is appended to this url, e.g. `/src/SUMMARY.md`. So when + this or **git-repository-url** is configured an icon link will be output in + the menu bar of the book. - **redirect:** A subtable used for generating redirects when a page is moved. The table contains key-value pairs where the key is where the redirect file needs to be created, as an absolute path from the build directory, (e.g. diff --git a/src/config.rs b/src/config.rs index be7dae62..1191542b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -522,6 +522,11 @@ pub struct HtmlConfig { /// /// [custom domain]: https://docs.github.com/en/github/working-with-github-pages/managing-a-custom-domain-for-your-github-pages-site pub cname: Option, + /// Git repository file edit baseurl, below which e.g. src/SUMMARY.md can + /// be viewed/edited + /// Defaults to git_repository_url + `/blob/master` if `None` and + /// git_repository_url is not `None` - works for e.g. GitHub master branch + pub git_repository_edit_baseurl: Option, /// This is used as a bit of a workaround for the `mdbook serve` command. /// Basically, because you set the websocket port from the command line, the /// `mdbook serve` command needs a way to let the HTML renderer know where diff --git a/src/renderer/html_handlebars/hbs_renderer.rs b/src/renderer/html_handlebars/hbs_renderer.rs index 254f189f..ad0a271e 100644 --- a/src/renderer/html_handlebars/hbs_renderer.rs +++ b/src/renderer/html_handlebars/hbs_renderer.rs @@ -680,6 +680,16 @@ fn make_data( if let Some(ref git_repository_url) = html_config.git_repository_url { data.insert("git_repository_url".to_owned(), json!(git_repository_url)); + let defaultEditBaseUrl = git_repository_url.to_owned() + "/blob/master"; + let git_repository_edit_baseurl = match html_config.git_repository_edit_baseurl { + Some(ref git_repository_edit_baseurl) => git_repository_edit_baseurl, + None => &defaultEditBaseUrl, + }; + data.insert("git_repository_edit_baseurl".to_owned(), json!(git_repository_edit_baseurl)); + } else { + if let Some(ref git_repository_edit_baseurl) = html_config.git_repository_edit_baseurl { + data.insert("git_repository_edit_baseurl".to_owned(), json!(git_repository_edit_baseurl)); + } } let git_repository_icon = match html_config.git_repository_icon { diff --git a/src/theme/index.hbs b/src/theme/index.hbs index e9e6cff8..a1cbe6e4 100644 --- a/src/theme/index.hbs +++ b/src/theme/index.hbs @@ -148,6 +148,12 @@ {{/if}} + {{#if git_repository_edit_baseurl}} + + + + {{/if}} +