diff --git a/book-example/book.toml b/book-example/book.toml
index a9ba5a78df..100247fac2 100644
--- a/book-example/book.toml
+++ b/book-example/book.toml
@@ -9,6 +9,7 @@ mathjax-support = true
[output.html.playpen]
editable = true
+line-numbers = true
[output.html.search]
limit-results = 20
diff --git a/book-example/src/format/config.md b/book-example/src/format/config.md
index d443911f88..c1c7bb14ba 100644
--- a/book-example/src/format/config.md
+++ b/book-example/src/format/config.md
@@ -179,6 +179,7 @@ Available configuration options for the `[output.html.playpen]` table:
- **editable:** Allow editing the source code. Defaults to `false`.
- **copy-js:** Copy JavaScript files for the editor to the output directory.
Defaults to `true`.
+- **line-numbers** Display line numbers on editable sections of code. Requires both `editable` and `copy-js` to be `true`. Defaults to `false`.
[Ace]: https://ace.c9.io/
@@ -228,6 +229,7 @@ git-repository-icon = "fa-github"
[output.html.playpen]
editable = false
copy-js = true
+line-numbers = false
[output.html.search]
enable = true
diff --git a/src/config.rs b/src/config.rs
index 0245244702..29e662bb58 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -479,6 +479,8 @@ pub struct Playpen {
/// Copy JavaScript files for the editor to the output directory?
/// Default: `true`.
pub copy_js: bool,
+ /// Display line numbers on playpen snippets
+ pub line_numbers: bool,
}
impl Default for Playpen {
@@ -486,6 +488,7 @@ impl Default for Playpen {
Playpen {
editable: false,
copy_js: true,
+ line_numbers: false,
}
}
}
@@ -620,6 +623,7 @@ mod tests {
let playpen_should_be = Playpen {
editable: true,
copy_js: true,
+ line_numbers: false,
};
let html_should_be = HtmlConfig {
curly_quotes: true,
diff --git a/src/renderer/html_handlebars/hbs_renderer.rs b/src/renderer/html_handlebars/hbs_renderer.rs
index 0625b6bef4..ab2c75ef8b 100644
--- a/src/renderer/html_handlebars/hbs_renderer.rs
+++ b/src/renderer/html_handlebars/hbs_renderer.rs
@@ -441,6 +441,9 @@ fn make_data(
if html_config.playpen.editable && html_config.playpen.copy_js {
data.insert("playpen_js".to_owned(), json!(true));
+ if html.playpen.line_numbers {
+ data.insert("playpen_line_numbers".to_owned(), json!(true));
+ }
}
let search = html_config.search.clone();
diff --git a/src/theme/index.hbs b/src/theme/index.hbs
index 4e29807c6f..3ef89e7de7 100644
--- a/src/theme/index.hbs
+++ b/src/theme/index.hbs
@@ -230,6 +230,12 @@
{{/if}}
+ {{#if playpen_line_numbers}}
+
+ {{/if}}
+
{{#if playpen_js}}
diff --git a/src/theme/playpen_editor/editor.js b/src/theme/playpen_editor/editor.js
index f1072d4e0b..5bfa1aa713 100644
--- a/src/theme/playpen_editor/editor.js
+++ b/src/theme/playpen_editor/editor.js
@@ -6,12 +6,14 @@ window.editors = [];
}
Array.from(document.querySelectorAll('.editable')).forEach(function(editable) {
+ let display_line_numbers = window.playpen_line_numbers || false;
+
let editor = ace.edit(editable);
editor.setOptions({
highlightActiveLine: false,
showPrintMargin: false,
- showLineNumbers: false,
- showGutter: false,
+ showLineNumbers: display_line_numbers,
+ showGutter: display_line_numbers,
maxLines: Infinity,
fontSize: "0.875em" // please adjust the font size of the code in general.css
});