From: Nil Gradisnik Date: Sat, 6 Jan 2018 23:32:46 +0000 (-0800) Subject: Preview updated X-Git-Url: https://git.ozva.co.uk/?a=commitdiff_plain;h=d92635bbd269120ae00406c7d08af06cbfda2275;p=gn-editor Preview updated --- diff --git a/src/main.rs b/src/main.rs index c0d39ed..2ae908d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,6 +22,7 @@ use webkit2gtk::*; use std::env::args; use std::time::{SystemTime, UNIX_EPOCH}; +use preview::Preview; use utils::{buffer_to_string, configure_sourceview, open_file, set_title}; const NAME: &str = env!("CARGO_PKG_NAME"); @@ -111,9 +112,10 @@ fn build_ui(application: >k::Application) { about_dialog.set_authors(&[AUTHORS]); about_dialog.set_comments(DESCRIPTION); - text_buffer.connect_changed(clone!(web_view => move |buffer| { + let preview = Preview::new(); + text_buffer.connect_changed(clone!(web_view, preview => move |buffer| { let markdown = buffer_to_string(buffer).unwrap(); - web_view.load_html(&preview::render(&markdown), None); + web_view.load_html(&preview.render(&markdown), None); })); web_view.connect_decide_policy(clone!(window => move |view, decision, _| { diff --git a/src/preview.rs b/src/preview.rs index 823d44f..216866a 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -5,39 +5,46 @@ use horrorshow::helper::doctype; // https://github.com/kivikakk/comrak use comrak::{markdown_to_html, ComrakOptions}; -pub fn string_to_html(markdown: &str) -> String { - let options = ComrakOptions { - hardbreaks: true, - ext_table: true, - ext_strikethrough: true, - ..ComrakOptions::default() - }; - - markdown_to_html(markdown, &options) +#[derive(Clone, Debug)] +pub struct Preview { + comrak_options: ComrakOptions, } -pub fn render(markdown: &str) -> String { - format!( - "{}", - html!( - : doctype::HTML; - html { - head { - link(rel="stylesheet", href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css") {} - script(src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js") {} - script(src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/rust.min.js") {} - script { - : Raw("hljs.initHighlightingOnLoad()") +impl Preview { + pub fn new() -> Preview { + let comrak_options = ComrakOptions { + hardbreaks: true, + ext_table: true, + ext_strikethrough: true, + ..ComrakOptions::default() + }; + + Preview { comrak_options } + } + + pub fn render(&self, markdown: &str) -> String { + format!( + "{}", + html!( + : doctype::HTML; + html { + head { + script(src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js") {} + script(src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/rust.min.js") {} + script { + : Raw("hljs.initHighlightingOnLoad()") + } + style { + : ".hljs{display:block;overflow-x:auto;padding:0.5em;color:#333;background:#f8f8f8}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:bold}.hljs-number,.hljs-literal,.hljs-variable,.hljs-template-variable,.hljs-tag .hljs-attr{color:#008080}.hljs-string,.hljs-doctag{color:#d14}.hljs-title,.hljs-section,.hljs-selector-id{color:#900;font-weight:bold}.hljs-subst{font-weight:normal}.hljs-type,.hljs-class .hljs-title{color:#458;font-weight:bold}.hljs-tag,.hljs-name,.hljs-attribute{color:#000080;font-weight:normal}.hljs-regexp,.hljs-link{color:#009926}.hljs-symbol,.hljs-bullet{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}"; + : "body { width: 90%; margin: 0 auto; }"; + : "img { max-width: 90% }" + } } - style { - : "body { width: 90%; margin: 0 auto; }"; - : "img { max-width: 90% }" + body { + : Raw(markdown_to_html(markdown, &self.comrak_options)); } } - body { - : Raw(&string_to_html(markdown)); - } - } + ) ) - ) + } }