diff --git a/book-example/book.toml b/book-example/book.toml index a9ba5a78..100247fa 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 d443911f..c1c7bb14 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 02452447..29e662bb 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 0625b6be..ab2c75ef 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 4e29807c..3ef89e7d 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 f1072d4e..5bfa1aa7 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 });