Add "Suggest an edit" link next to "Git repository"

Includes new configuration option `git-repository-edit-baseurl` for
supporting non-GitHub repository layouts.
This commit is contained in:
Jonas Berlin 2020-02-17 22:59:37 +02:00 committed by Ruben Moor
parent 59073b1084
commit a6f13ff54d
4 changed files with 27 additions and 2 deletions

View File

@ -201,6 +201,12 @@ The following configuration options are available:
an icon link will be output in the menu bar of the book. 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 - **git-repository-icon:** The FontAwesome icon class to use for the git
repository link. Defaults to `fa-github`. 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. - **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 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. needs to be created, as an absolute path from the build directory, (e.g.

View File

@ -530,6 +530,15 @@ pub struct HtmlConfig {
/// is ignored, because our code overrides this field with the value [`LIVE_RELOAD_ENDPOINT`] /// is ignored, because our code overrides this field with the value [`LIVE_RELOAD_ENDPOINT`]
/// ///
/// [`LIVE_RELOAD_ENDPOINT`]: cmd::serve::LIVE_RELOAD_ENDPOINT /// [`LIVE_RELOAD_ENDPOINT`]: cmd::serve::LIVE_RELOAD_ENDPOINT
/// 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<String>,
/// 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
/// to point livereloading at, if it has been enabled.
/// ///
/// This config item *should not be edited* by the end user. /// This config item *should not be edited* by the end user.
#[doc(hidden)] #[doc(hidden)]

View File

@ -766,6 +766,16 @@ fn make_data(
if let Some(ref git_repository_url) = html_config.git_repository_url { if let Some(ref git_repository_url) = html_config.git_repository_url {
data.insert("git_repository_url".to_owned(), json!(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 { let git_repository_icon = match html_config.git_repository_icon {

View File

@ -152,8 +152,8 @@
<i id="git-repository-button" class="fab {{git_repository_icon}}"></i> <i id="git-repository-button" class="fab {{git_repository_icon}}"></i>
</a> </a>
{{/if}} {{/if}}
{{#if git_repository_edit_url}} {{#if git_repository_edit_baseurl}}
<a href="{{git_repository_edit_url}}" title="Suggest an edit" aria-label="Suggest an edit"> <a href="{{git_repository_edit_baseurl}}/src/{{path}}" title="Suggest an edit" aria-label="Suggest an edit">
<i id="git-edit-button" class="fa fa-edit"></i> <i id="git-edit-button" class="fa fa-edit"></i>
</a> </a>
{{/if}} {{/if}}