]> OzVa Git service - gn-editor/commitdiff
Preview updated
authorNil Gradisnik <nil@layer.com>
Sat, 6 Jan 2018 23:32:46 +0000 (15:32 -0800)
committerNil Gradisnik <nil@layer.com>
Sat, 6 Jan 2018 23:32:46 +0000 (15:32 -0800)
src/main.rs
src/preview.rs

index c0d39eda0e9862c0342440cfb32e00e597da2a9f..2ae908d580662fca69ff41f83f9af5691e4dad57 100644 (file)
@@ -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: &gtk::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, _| {
index 823d44f9688604bc4c3b70fb49fd5ef1189673fd..216866a20fc1af1eee9ebbb96a4a01f5c73dec3e 100644 (file)
@@ -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));
-                }
-            }
+            )
         )
-    )
+    }
 }