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