From 14e81297dd2ca0fddb31472dc901b2e6f59ebbd1 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Aug 2018 18:14:00 -0500 Subject: [PATCH] Seperated Markdown into two macros: Markdown and Markdown From URL --- pom.xml | 2 +- .../markdown/MarkdownFromURLMacro.java | 154 ++++++++++++++++++ .../confluence/markdown/MarkdownMacro.java | 33 +--- src/main/resources/atlassian-plugin.xml | 25 ++- .../markdown-from-url.properties | 3 + 5 files changed, 185 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/atlassian/plugins/confluence/markdown/MarkdownFromURLMacro.java create mode 100644 src/main/resources/markdown-from-url-properties/markdown-from-url.properties diff --git a/pom.xml b/pom.xml index 61a5b82..d7b4abf 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ http://www.atlassian.com/ confluence-markdown-macro - This plugin provides a Markdown render macro for Confluence. + This plugin provides macros to render markdown for Confluence. atlassian-plugin diff --git a/src/main/java/com/atlassian/plugins/confluence/markdown/MarkdownFromURLMacro.java b/src/main/java/com/atlassian/plugins/confluence/markdown/MarkdownFromURLMacro.java new file mode 100644 index 0000000..b4987b4 --- /dev/null +++ b/src/main/java/com/atlassian/plugins/confluence/markdown/MarkdownFromURLMacro.java @@ -0,0 +1,154 @@ +package com.atlassian.plugins.confluence.markdown; + +import com.atlassian.confluence.content.render.xhtml.ConversionContext; +import com.atlassian.confluence.content.render.xhtml.DefaultConversionContext; +import com.atlassian.confluence.content.render.xhtml.XhtmlException; +import com.atlassian.confluence.macro.Macro; +import com.atlassian.confluence.macro.MacroExecutionException; +import com.atlassian.confluence.xhtml.api.MacroDefinition; +import com.atlassian.confluence.xhtml.api.MacroDefinitionHandler; +import com.atlassian.confluence.xhtml.api.XhtmlContent; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import com.atlassian.renderer.RenderContext; +import com.atlassian.renderer.v2.RenderMode; +import com.atlassian.renderer.v2.macro.BaseMacro; +import com.atlassian.renderer.v2.macro.MacroException; + +//import com.atlassian.plugin.spring.scanner.annotation.component.Scanned; +import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport; +import com.atlassian.webresource.api.assembler.PageBuilderService; +import org.springframework.beans.factory.annotation.Autowired; + +import com.vladsch.flexmark.ast.Node; +import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension; +import com.vladsch.flexmark.ext.tables.TablesExtension; +import com.vladsch.flexmark.ext.ins.InsExtension; +import com.vladsch.flexmark.ext.definition.DefinitionExtension; +import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension; +import com.vladsch.flexmark.ext.footnotes.FootnoteExtension; +import com.vladsch.flexmark.ext.wikilink.WikiLinkExtension; +import com.vladsch.flexmark.ext.autolink.AutolinkExtension; +import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension; +import com.vladsch.flexmark.superscript.SuperscriptExtension; +import com.vladsch.flexmark.ext.youtube.embedded.YouTubeLinkExtension; +import com.vladsch.flexmark.html.HtmlRenderer; +import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.util.options.MutableDataSet; + +import java.net.*; +import java.io.*; + +//@Scanned +public class MarkdownFromURLMacro extends BaseMacro implements Macro +{ + + private final XhtmlContent xhtmlUtils; + + private PageBuilderService pageBuilderService; + + @Autowired + public MarkdownFromURLMacro(@ComponentImport PageBuilderService pageBuilderService, XhtmlContent xhtmlUtils) { + this.pageBuilderService = pageBuilderService; + this.xhtmlUtils = xhtmlUtils; + } + +// public MarkdownFromURLMacro(XhtmlContent xhtmlUtils) +// { +// this.xhtmlUtils = xhtmlUtils; +// } + + @Override + public BodyType getBodyType() + { + return BodyType.PLAIN_TEXT; + } + + @Override + public OutputType getOutputType() + { + return OutputType.BLOCK; + } + + @Override + public String execute(Map parameters, String bodyContent, ConversionContext conversionContext) throws MacroExecutionException + { + + + pageBuilderService.assembler().resources().requireWebResource("com.atlassian.plugins.confluence.markdown.confluence-markdown-macro:highlightjs"); + + MutableDataSet options = new MutableDataSet(); + + options.set(Parser.EXTENSIONS, Arrays.asList( + TablesExtension.create(), + StrikethroughSubscriptExtension.create(), + InsExtension.create(), + TaskListExtension.create(), + FootnoteExtension.create(), + WikiLinkExtension.create(), + DefinitionExtension.create(), + AnchorLinkExtension.create(), + AutolinkExtension.create(), + SuperscriptExtension.create(), + YouTubeLinkExtension.create() + + )); + + + String highlightjs = ""; + + if (bodyContent != null) { + Parser parser = Parser.builder(options).build(); + HtmlRenderer renderer = HtmlRenderer.builder(options).build(); + + String toParse = ""; + try { + URL importFrom = new URL(bodyContent); + BufferedReader in = new BufferedReader( + new InputStreamReader(importFrom.openStream()) + ); + String inputLine; + toParse = ""; + while ((inputLine = in.readLine()) != null) { + toParse = toParse + "\n" + inputLine; + } + in.close(); + } + catch (IOException e) {} + + Node document = parser.parse(toParse); + String html = renderer.render(document) + highlightjs; + return html; + }else { + return ""; + } + + } + + @Override + public boolean hasBody() { + return true; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public RenderMode getBodyRenderMode() { + return RenderMode.NO_RENDER; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public String execute(Map map, String s, RenderContext renderContext) throws MacroException { + try { + return execute(map, s, new DefaultConversionContext(renderContext)); + } catch (MacroExecutionException e) { + throw new MacroException(e.getMessage(),e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/atlassian/plugins/confluence/markdown/MarkdownMacro.java b/src/main/java/com/atlassian/plugins/confluence/markdown/MarkdownMacro.java index e748399..e7077bd 100644 --- a/src/main/java/com/atlassian/plugins/confluence/markdown/MarkdownMacro.java +++ b/src/main/java/com/atlassian/plugins/confluence/markdown/MarkdownMacro.java @@ -40,8 +40,6 @@ import com.vladsch.flexmark.html.HtmlRenderer; import com.vladsch.flexmark.parser.Parser; import com.vladsch.flexmark.util.options.MutableDataSet; -import java.net.*; -import java.io.*; //@Scanned public class MarkdownMacro extends BaseMacro implements Macro @@ -105,31 +103,12 @@ public class MarkdownMacro extends BaseMacro implements Macro " });\n" + ""; - if (bodyContent != null) { - Parser parser = Parser.builder(options).build(); - HtmlRenderer renderer = HtmlRenderer.builder(options).build(); - - String toParse = ""; - try { - URL importFrom = new URL(bodyContent); - BufferedReader in = new BufferedReader( - new InputStreamReader(importFrom.openStream()) - ); - String inputLine; - toParse = ""; - while ((inputLine = in.readLine()) != null) { - toParse = toParse + "\n" + inputLine; - } - in.close(); - } - catch (IOException e) {} - - Node document = parser.parse(toParse); - String html = renderer.render(document) + highlightjs; - return html; - }else { - return ""; - } + Parser parser = Parser.builder(options).build(); + HtmlRenderer renderer = HtmlRenderer.builder(options).build(); + + Node document = parser.parse(bodyContent); + String html = renderer.render(document ) + highlightjs; // "

This is Sparta

\n" + return html; } diff --git a/src/main/resources/atlassian-plugin.xml b/src/main/resources/atlassian-plugin.xml index e64267c..0acb029 100644 --- a/src/main/resources/atlassian-plugin.xml +++ b/src/main/resources/atlassian-plugin.xml @@ -7,24 +7,41 @@ images/pluginLogo.png true - - + - - + + + + + + + + + + diff --git a/src/main/resources/markdown-from-url-properties/markdown-from-url.properties b/src/main/resources/markdown-from-url-properties/markdown-from-url.properties new file mode 100644 index 0000000..57128de --- /dev/null +++ b/src/main/resources/markdown-from-url-properties/markdown-from-url.properties @@ -0,0 +1,3 @@ +com.atlassian.plugins.confluence.markdown.confluence-markdown-macro.markdown-from-url.label=Markdown From URL +com.atlassian.plugins.confluence.markdown.confluence-markdown-macro.markdown-from-url.desc=This macro imports Markdown from a URL and renders it into HTML. +com.atlassian.plugins.confluence.markdown.confluence-markdown-macro.markdown-from-url.body.desc=Type URL here \ No newline at end of file