17 Commits

Author SHA1 Message Date
5428422f58 Merge table columns if two pipes with with no space are next to each other. 2019-03-14 14:49:03 +00:00
Boris Berenberg
5ac7422d29 readying 1.4.2 release 2018-12-19 10:40:25 -05:00
Boris Berenberg
add4e0abbd fixing broken JS for code blocks in url macro, adding js to modify tables for Confluence styling. 2018-12-19 10:40:12 -05:00
Boris Berenberg
9918002f3e i think this is the right way to merge these' 2018-11-16 14:55:15 -05:00
Boris Berenberg
98e672ff5b fixes anchors in headings, updated flexmark version, sane settings for tables 2018-11-16 14:50:35 -05:00
Otto Jongerius
c381807317 Merged in optimise_imports_and_remove_dead_code (pull request #3)
Optimise imports, reformat and remove dead code

Approved-by: Joshua Carpenter <joshua@interoctiv.io>
2018-09-28 02:29:39 +00:00
Otto Jongerius
3335c2c97d optimise imports, reformat and remove dead code 2018-09-17 12:15:23 +12:00
Joshua Carpenter
060b7b2070 Merged in import-from-url (pull request #1)
Import from url
2018-09-06 14:47:19 +00:00
unknown
1fddfb3f17 Fixed bug with syntax highlighting when importing from URL 2018-09-05 11:16:01 -06:00
Boris Berenberg
cd86baa22f Merge branch 'import-from-url' 2018-08-21 12:12:07 -04:00
unknown
27dcf6d8bf Added error handling for a variety of errors. 2018-08-10 16:27:26 -06:00
unknown
804c460981 Deleted code meant for testing. 2018-08-08 18:20:10 -05:00
unknown
14e81297dd Seperated Markdown into two macros: Markdown and Markdown From URL 2018-08-08 18:14:00 -05:00
unknown
8a4b73b7bd Removed URL parameter and updated MarkdownMacro.java to get URL from bodyContent. 2018-08-08 16:06:31 -05:00
Boris Berenberg
8aa88c0d09 higlight js fixes 2018-08-06 21:24:23 -04:00
Boris Berenberg
1253a02da9 new dc shit 2018-08-06 21:21:18 -04:00
unknown
e3fa72d307 Added import markdown from URL funtionality 2018-08-06 19:25:49 -05:00
6 changed files with 285 additions and 67 deletions

View File

@@ -7,7 +7,7 @@ It can be accessed via:
* Macro Browser * Macro Browser
* {markdown} tags * {markdown} tags
* SOAP API using <ac:macro ac:name="markdown">/ac:macro> * SOAP API using <ac:macro ac:name="markdown"></ac:macro>
This macro supports the following languages: This macro supports the following languages:

18
pom.xml
View File

@@ -9,13 +9,13 @@
</parent> </parent>
<groupId>com.atlassian.plugins.confluence.markdown</groupId> <groupId>com.atlassian.plugins.confluence.markdown</groupId>
<artifactId>confluence-markdown-macro</artifactId> <artifactId>confluence-markdown-macro</artifactId>
<version>1.3.2</version> <version>1.4.2</version>
<organization> <organization>
<name>Atlassian</name> <name>Atlassian</name>
<url>http://www.atlassian.com/</url> <url>http://www.atlassian.com/</url>
</organization> </organization>
<name>confluence-markdown-macro</name> <name>confluence-markdown-macro</name>
<description>This plugin provides a Markdown render macro for Confluence.</description> <description>This plugin provides macros to render markdown for Confluence.</description>
<packaging>atlassian-plugin</packaging> <packaging>atlassian-plugin</packaging>
<dependencies> <dependencies>
<dependency> <dependency>
@@ -51,27 +51,27 @@
<dependency> <dependency>
<groupId>com.vladsch.flexmark</groupId> <groupId>com.vladsch.flexmark</groupId>
<artifactId>flexmark-all</artifactId> <artifactId>flexmark-all</artifactId>
<version>0.32.24</version> <version>0.34.53</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.vladsch.flexmark</groupId> <groupId>com.vladsch.flexmark</groupId>
<artifactId>flexmark-ext-anchorlink</artifactId> <artifactId>flexmark-ext-anchorlink</artifactId>
<version>0.32.24</version> <version>0.34.53</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.vladsch.flexmark</groupId> <groupId>com.vladsch.flexmark</groupId>
<artifactId>flexmark-ext-autolink</artifactId> <artifactId>flexmark-ext-autolink</artifactId>
<version>0.32.24</version> <version>0.34.53</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.vladsch.flexmark</groupId> <groupId>com.vladsch.flexmark</groupId>
<artifactId>flexmark-ext-superscript</artifactId> <artifactId>flexmark-ext-superscript</artifactId>
<version>0.32.24</version> <version>0.34.53</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.vladsch.flexmark</groupId> <groupId>com.vladsch.flexmark</groupId>
<artifactId>flexmark-ext-youtube-embedded</artifactId> <artifactId>flexmark-ext-youtube-embedded</artifactId>
<version>0.32.24</version> <version>0.34.53</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.atlassian.plugin</groupId> <groupId>com.atlassian.plugin</groupId>
@@ -90,6 +90,8 @@
<configuration> <configuration>
<productVersion>${confluence.version}</productVersion> <productVersion>${confluence.version}</productVersion>
<productDataVersion>${confluence.data.version}</productDataVersion> <productDataVersion>${confluence.data.version}</productDataVersion>
<enableQuickReload>true</enableQuickReload>
<enableFastdev>false</enableFastdev>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
@@ -104,7 +106,7 @@
<properties> <properties>
<confluence.version>6.9.0</confluence.version> <confluence.version>6.9.0</confluence.version>
<confluence.data.version>6.9.0</confluence.data.version> <confluence.data.version>6.9.0</confluence.data.version>
<amps.version>6.2.11</amps.version> <amps.version>6.3.21</amps.version>
<plugin.testrunner.version>1.1</plugin.testrunner.version> <plugin.testrunner.version>1.1</plugin.testrunner.version>
<atlassian.spring.scanner.version>2.1.7</atlassian.spring.scanner.version> <atlassian.spring.scanner.version>2.1.7</atlassian.spring.scanner.version>
</properties> </properties>

View File

@@ -0,0 +1,191 @@
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.macro.Macro;
import com.atlassian.confluence.macro.MacroExecutionException;
import com.atlassian.confluence.xhtml.api.XhtmlContent;
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
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.webresource.api.assembler.PageBuilderService;
import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension;
import com.vladsch.flexmark.ext.autolink.AutolinkExtension;
import com.vladsch.flexmark.ext.definition.DefinitionExtension;
import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension;
import com.vladsch.flexmark.ext.ins.InsExtension;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.ext.wikilink.WikiLinkExtension;
import com.vladsch.flexmark.ext.youtube.embedded.YouTubeLinkExtension;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.superscript.SuperscriptExtension;
import com.vladsch.flexmark.util.options.MutableDataSet;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.Map;
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;
}
@Override
public BodyType getBodyType() {
return BodyType.PLAIN_TEXT;
}
@Override
public OutputType getOutputType() {
return OutputType.BLOCK;
}
@Override
public String execute(Map<String, String> parameters, String bodyContent, ConversionContext conversionContext) throws MacroExecutionException
{
if (bodyContent != null) {
pageBuilderService.assembler().resources().requireWebResource("com.atlassian.plugins.confluence.markdown.confluence-markdown-macro:highlightjs");
MutableDataSet options = new MutableDataSet()
.set(HtmlRenderer.GENERATE_HEADER_ID, true)
.set(HtmlRenderer.INDENT_SIZE, 2)
.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
// for full GFM table compatibility add the following table extension options:
.set(TablesExtension.COLUMN_SPANS, false)
.set(TablesExtension.APPEND_MISSING_COLUMNS, true)
.set(TablesExtension.DISCARD_EXTRA_COLUMNS, true)
.set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true)
.set(TablesExtension.CLASS_NAME, "confluenceTable")
.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));
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 = "<script>\n" +
"AJS.$('[data-macro-name=\"markdown-from-url\"] code').each(function(i, block) {\n" +
" hljs.highlightBlock(block);\n" +
" });\n" +
"</script>";
String highlightjscss = "<style>\n"+
".hljs {display: inline;}\n" +
"pre > code {display: block !important;}\n" +
"</style>";
String tableFixJs = "<script>AJS.$('[data-macro-name=\"markdown-from-url\"] table thead th').each(function(i, block) {\n" +
" block.classList.add(\"confluenceTh\");\n" +
"});\n" +
"\n" +
"AJS.$('[data-macro-name=\"markdown-from-url\"] table tbody tr td').each(function(i, block) {\n" +
" block.classList.add(\"confluenceTd\");\n" +
"});</script>";
class privateRepositoryException extends Exception {
public privateRepositoryException(String message) {
super(message);
}
}
Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build();
String exceptionsToReturn = "";
String html = "";
String toParse = "";
try {
URL importFrom = new URL(bodyContent);
BufferedReader in = new BufferedReader(
new InputStreamReader(importFrom.openStream())
);
String inputLine;
while ((inputLine = in.readLine()) != null) {
toParse = toParse + "\n" + inputLine;
}
in.close();
toParse = toParse.trim();
if (toParse.startsWith("<html>\n<head>\n <title>OpenID transaction in progress</title>")) {
throw new privateRepositoryException("Cannot import from private repository.");
}else {
Node document = parser.parse(toParse);
html = renderer.render(document) + highlightjs + highlightjscss + tableFixJs;
}
}
catch (MalformedURLException u) {
exceptionsToReturn = exceptionsToReturn + "<strong>Error with Markdown From URL macro: Invalid URL.</strong><br>Please enter a valid URL. If you are not trying to import markdown from a URL, use the Markdown macro instead of the Markdown from URL macro.<br>For support <a href='https://community.atlassian.com/t5/tag/addon-com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/tg-p'>visit our Q&A in the Atlassian Community</a>. You can ask a new question by clicking the \"Create\" button on the top right of the Q&A.<br>";
}
catch (privateRepositoryException p) {
exceptionsToReturn = exceptionsToReturn + "<strong>Error with Markdown From URL macro: Importing from private Bitbucket repositories is not supported.</strong><br>Please make your repository public before importing. Alternatively, you can copy and paste your markdown into the Markdown macro.<br>If you are allowed access, you can find the markdown file <a href='" + bodyContent + "'>here</a>.<br>For support <a href='https://community.atlassian.com/t5/tag/addon-com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/tg-p'>visit our Q&A in the Atlassian Community</a>. You can ask a new question by clicking the \"Create\" button on the top right of the Q&A.<br>";
}
catch (FileNotFoundException f) {
exceptionsToReturn = exceptionsToReturn + "<strong>Error with Markdown From URL macro: URL does not exist.</strong><br>" + bodyContent + "<br>Please double check your URL. Perhaps you made a typo or perhaps the page has been moved.<br>This can also be caused by changing the Github repository containing the file from public to private. If this is the case go back to the raw file and re-copy the link.<br>For support <a href='https://community.atlassian.com/t5/tag/addon-com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/tg-p'>visit our Q&A in the Atlassian Community</a>. You can ask a new question by clicking the \"Create\" button on the top right of the Q&A.<br>";
}
catch (IOException e) {
exceptionsToReturn = exceptionsToReturn + "<strong>Error with Markdown From URL macro: Unexpected error.</strong><br>" + e.toString() + "<br>For support <a href='https://community.atlassian.com/t5/tag/addon-com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/tg-p'>visit our Q&A in the Atlassian Community</a>. You can ask a new question by clicking the \"Create\" button on the top right of the Q&A.<br>";
}
finally {
if (exceptionsToReturn != "") {
html = "<p style='background: #ffe0e0; border-radius: 5px; padding: 10px;'>" + exceptionsToReturn + "</p>";
}
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);
}
}
}

View File

@@ -2,48 +2,36 @@ package com.atlassian.plugins.confluence.markdown;
import com.atlassian.confluence.content.render.xhtml.ConversionContext; import com.atlassian.confluence.content.render.xhtml.ConversionContext;
import com.atlassian.confluence.content.render.xhtml.DefaultConversionContext; 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.Macro;
import com.atlassian.confluence.macro.MacroExecutionException; 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 com.atlassian.confluence.xhtml.api.XhtmlContent;
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
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.RenderContext;
import com.atlassian.renderer.v2.RenderMode; import com.atlassian.renderer.v2.RenderMode;
import com.atlassian.renderer.v2.macro.BaseMacro; import com.atlassian.renderer.v2.macro.BaseMacro;
import com.atlassian.renderer.v2.macro.MacroException; 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 com.atlassian.webresource.api.assembler.PageBuilderService;
import org.springframework.beans.factory.annotation.Autowired;
import com.vladsch.flexmark.ast.Node; 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.ext.anchorlink.AnchorLinkExtension;
import com.vladsch.flexmark.superscript.SuperscriptExtension; import com.vladsch.flexmark.ext.autolink.AutolinkExtension;
import com.vladsch.flexmark.ext.definition.DefinitionExtension;
import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension;
import com.vladsch.flexmark.ext.ins.InsExtension;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.ext.wikilink.WikiLinkExtension;
import com.vladsch.flexmark.ext.youtube.embedded.YouTubeLinkExtension; import com.vladsch.flexmark.ext.youtube.embedded.YouTubeLinkExtension;
import com.vladsch.flexmark.html.HtmlRenderer; import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser; import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.superscript.SuperscriptExtension;
import com.vladsch.flexmark.util.options.MutableDataSet; import com.vladsch.flexmark.util.options.MutableDataSet;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Arrays;
import java.util.Map;
//@Scanned public class MarkdownMacro extends BaseMacro implements Macro {
public class MarkdownMacro extends BaseMacro implements Macro
{
private final XhtmlContent xhtmlUtils; private final XhtmlContent xhtmlUtils;
@@ -55,31 +43,34 @@ public class MarkdownMacro extends BaseMacro implements Macro
this.xhtmlUtils = xhtmlUtils; this.xhtmlUtils = xhtmlUtils;
} }
// public MarkdownMacro(XhtmlContent xhtmlUtils)
// {
// this.xhtmlUtils = xhtmlUtils;
// }
@Override @Override
public BodyType getBodyType() public BodyType getBodyType() {
{
return BodyType.PLAIN_TEXT; return BodyType.PLAIN_TEXT;
} }
@Override @Override
public OutputType getOutputType() public OutputType getOutputType() {
{
return OutputType.BLOCK; return OutputType.BLOCK;
} }
@Override @Override
public String execute(Map<String, String> parameters, String bodyContent, ConversionContext conversionContext) throws MacroExecutionException public String execute(Map<String, String> parameters, String bodyContent, ConversionContext conversionContext) throws MacroExecutionException {
{
pageBuilderService.assembler().resources().requireWebResource("com.atlassian.plugins.confluence.markdown.confluence-markdown-macro:highlightjs"); pageBuilderService.assembler().resources().requireWebResource("com.atlassian.plugins.confluence.markdown.confluence-markdown-macro:highlightjs");
MutableDataSet options = new MutableDataSet(); MutableDataSet options = new MutableDataSet()
.set(HtmlRenderer.GENERATE_HEADER_ID, true)
.set(HtmlRenderer.INDENT_SIZE, 2)
.set(HtmlRenderer.PERCENT_ENCODE_URLS, true)
// for full GFM table compatibility add the following table extension options:
.set(TablesExtension.COLUMN_SPANS, true)
.set(TablesExtension.APPEND_MISSING_COLUMNS, true)
.set(TablesExtension.DISCARD_EXTRA_COLUMNS, true)
.set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true)
.set(TablesExtension.CLASS_NAME, "confluenceTable")
.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));
options.set(Parser.EXTENSIONS, Arrays.asList( options.set(Parser.EXTENSIONS, Arrays.asList(
TablesExtension.create(), TablesExtension.create(),
@@ -103,11 +94,27 @@ public class MarkdownMacro extends BaseMacro implements Macro
" });\n" + " });\n" +
"</script>"; "</script>";
String highlightjscss = "<style>\n"+
".hljs {display: inline;}\n" +
"pre > code {display: block !important;}\n" +
"</style>";
String tableFixJs = "<script> AJS.$('[data-macro-name=\"markdown\"] table thead th').each(function(i, block) {\n" +
" block.classList.add(\"confluenceTh\");\n" +
"});\n" +
"\n" +
"AJS.$('[data-macro-name=\"markdown\"] table tbody tr td').each(function(i, block) {\n" +
" block.classList.add(\"confluenceTd\");\n" +
"});</script>";
Parser parser = Parser.builder(options).build(); Parser parser = Parser.builder(options).build();
HtmlRenderer renderer = HtmlRenderer.builder(options).build(); HtmlRenderer renderer = HtmlRenderer.builder(options).build();
Node document = parser.parse(bodyContent); Node document = parser.parse(bodyContent);
String html = renderer.render(document ) + highlightjs; // "<p>This is <em>Sparta</em></p>\n"
String html = renderer.render(document ) + highlightjs + highlightjscss + tableFixJs; // "<p>This is <em>Sparta</em></p>\n"
return html; return html;
} }
@@ -127,7 +134,7 @@ public class MarkdownMacro extends BaseMacro implements Macro
try { try {
return execute(map, s, new DefaultConversionContext(renderContext)); return execute(map, s, new DefaultConversionContext(renderContext));
} catch (MacroExecutionException e) { } catch (MacroExecutionException e) {
throw new MacroException(e.getMessage(),e); throw new MacroException(e.getMessage(), e);
} }
} }
} }

View File

@@ -6,6 +6,7 @@
<param name="plugin-icon">images/pluginIcon.png</param> <param name="plugin-icon">images/pluginIcon.png</param>
<param name="plugin-logo">images/pluginLogo.png</param> <param name="plugin-logo">images/pluginLogo.png</param>
<param name="atlassian-data-center-compatible">true</param> <param name="atlassian-data-center-compatible">true</param>
<param name="atlassian-data-center-status">compatible</param>
</plugin-info> </plugin-info>
<xhtml-macro name="markdown" <xhtml-macro name="markdown"
@@ -14,8 +15,7 @@
icon="/download/resources/com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/images/pluginIcon.png" icon="/download/resources/com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/images/pluginIcon.png"
documentation-url="https://spec.commonmark.org/0.28/"> documentation-url="https://spec.commonmark.org/0.28/">
<category name="formatting"/> <category name="formatting"/>
<parameters> <parameters />
</parameters>
</xhtml-macro> </xhtml-macro>
<macro name="markdown" <macro name="markdown"
class="com.atlassian.plugins.confluence.markdown.MarkdownMacro" class="com.atlassian.plugins.confluence.markdown.MarkdownMacro"
@@ -23,10 +23,26 @@
icon="/download/resources/com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/images/pluginIcon.png" icon="/download/resources/com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/images/pluginIcon.png"
documentation-url="https://spec.commonmark.org/0.28/"> documentation-url="https://spec.commonmark.org/0.28/">
<category name="formatting"/> <category name="formatting"/>
<parameters> <parameters />
</parameters> </macro>
<xhtml-macro name="markdown-from-url"
class="com.atlassian.plugins.confluence.markdown.MarkdownFromURLMacro"
key="markdown-from-url"
icon="/download/resources/com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/images/pluginIcon.png"
documentation-url="https://spec.commonmark.org/0.28/">
<category name="formatting"/>
<parameters />
</xhtml-macro>
<macro name="markdown-from-url"
class="com.atlassian.plugins.confluence.markdown.MarkdownFromURLMacro"
key="markdown-from-url.wiki"
icon="/download/resources/com.atlassian.plugins.confluence.markdown.confluence-markdown-macro/images/pluginIcon.png"
documentation-url="https://spec.commonmark.org/0.28/">
<category name="formatting"/>
<parameters />
</macro> </macro>
<resource type="i18n" name="markdown" location="markdownproperties/markdown"/> <resource type="i18n" name="markdown" location="markdownproperties/markdown"/>
<resource type="i18n" name="markdown-from-url" location="markdown-from-url-properties/markdown-from-url"/>
<resource type="download" name="images/" key="images" location="images/"/> <resource type="download" name="images/" key="images" location="images/"/>
<web-resource key="highlightjs" name="Highlight.js" > <web-resource key="highlightjs" name="Highlight.js" >

View File

@@ -0,0 +1,2 @@
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 dynamically imports Markdown from a URL and renders it into HTML.