Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

'HTML Source' preview added

AuthorKarl Tauber <email>
Date2015-07-29 12:48:42 GMT+0200
Commit74fd13715d71f157d24f40d20e108a5e1d41720f
Parent09b2042
Delta80 lines added, 4 lines removed, 76-line increase
src/main/java/org/markdownwriterfx/preview/HtmlSourcePreview.java
+/*
+ * Copyright (c) 2015 Karl Tauber <karl at jformdesigner dot com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.markdownwriterfx.preview;
+
+import javafx.scene.Node;
+import javafx.scene.control.ScrollBar;
+import javafx.scene.control.TextArea;
+import org.markdownwriterfx.util.Utils;
+import org.pegdown.ast.RootNode;
+
+/**
+ * HTML source preview.
+ *
+ * @author Karl Tauber
+ */
+class HtmlSourcePreview
+{
+ private final TextArea textArea = new TextArea();
+ private ScrollBar vScrollBar;
+
+ HtmlSourcePreview() {
+ textArea.setEditable(false);
+ textArea.setWrapText(true);
+ }
+
+ Node getNode() {
+ return textArea;
+ }
+
+ void update(RootNode astRoot) {
+ textArea.setText(WebViewPreview.toHtml(astRoot));
+ }
+
+ void scrollY(double value) {
+ if (vScrollBar == null)
+ vScrollBar = Utils.findVScrollBar(textArea);
+ if (vScrollBar == null)
+ return;
+
+ double maxValue = vScrollBar.maxProperty().get();
+ vScrollBar.setValue(maxValue * value);
+ }
+}
src/main/java/org/markdownwriterfx/preview/MarkdownPreviewPane.java
{
private final WebViewPreview webViewPreview = new WebViewPreview();
+ private final HtmlSourcePreview htmlSourcePreview = new HtmlSourcePreview();
private final ASTPreview astPreview = new ASTPreview();
private TabPane tabPane;
public MarkdownPreviewPane() {
markdownAST.addListener((observable, oldValue, newValue) -> {
webViewPreview.update(newValue);
+ htmlSourcePreview.update(newValue);
astPreview.update(newValue);
});
scrollY.addListener((observable, oldValue, newValue) -> {
Platform.runLater(() -> {
webViewPreview.scrollY(newValue.doubleValue());
+ htmlSourcePreview.scrollY(newValue.doubleValue());
astPreview.scrollY(newValue.doubleValue());
});
tabPane.getTabs().add(webViewTab);
- Tab astTab = new Tab("AST", astPreview.getNode());
+ Tab htmlSourceTab = new Tab("HTML Source", htmlSourcePreview.getNode());
+ tabPane.getTabs().add(htmlSourceTab);
+
+ Tab astTab = new Tab("Markdown AST", astPreview.getNode());
tabPane.getTabs().add(astTab);
}
src/main/java/org/markdownwriterfx/preview/WebViewPreview.java
}
- void update(RootNode astRoot) {
- String html = new ToHtmlSerializer(new LinkRenderer(),
+ static String toHtml(RootNode astRoot) {
+ return new ToHtmlSerializer(new LinkRenderer(),
Collections.<String, VerbatimSerializer>emptyMap(),
PegDownPlugins.NONE.getHtmlSerializerPlugins())
.toHtml(astRoot);
+ }
+ void update(RootNode astRoot) {
webView.getEngine().loadContent(
"<!DOCTYPE html><html><head><link rel=\"stylesheet\" href=\""
+ getClass().getResource("markdownpad-github.css")
+ "\"></head><body>"
- + html
+ + toHtml(astRoot)
+ "</body></html>");
}