Compare commits
12 Commits
confluence
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 5428422f58 | |||
|
|
5ac7422d29 | ||
|
|
add4e0abbd | ||
|
|
9918002f3e | ||
|
|
98e672ff5b | ||
|
|
c381807317 | ||
|
|
3335c2c97d | ||
|
|
060b7b2070 | ||
|
|
1fddfb3f17 | ||
|
|
cd86baa22f | ||
|
|
8aa88c0d09 | ||
|
|
1253a02da9 |
@@ -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
18
pom.xml
@@ -9,7 +9,7 @@
|
|||||||
</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>
|
||||||
@@ -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,8 +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>
|
<enableQuickReload>true</enableQuickReload>
|
||||||
<enableFastdev>false</enableFastdev>
|
<enableFastdev>false</enableFastdev>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
@@ -106,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.3.0</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>
|
||||||
|
|||||||
@@ -2,52 +2,43 @@ 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.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;
|
||||||
|
|
||||||
|
|
||||||
import java.net.*;
|
public class MarkdownFromURLMacro extends BaseMacro implements Macro {
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
//@Scanned
|
|
||||||
public class MarkdownFromURLMacro extends BaseMacro implements Macro
|
|
||||||
{
|
|
||||||
|
|
||||||
private final XhtmlContent xhtmlUtils;
|
private final XhtmlContent xhtmlUtils;
|
||||||
|
|
||||||
@@ -59,31 +50,37 @@ public class MarkdownFromURLMacro extends BaseMacro implements Macro
|
|||||||
this.xhtmlUtils = xhtmlUtils;
|
this.xhtmlUtils = xhtmlUtils;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public MarkdownFromURLMacro(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
|
||||||
{
|
{
|
||||||
|
|
||||||
if (bodyContent != null) {
|
if (bodyContent != null) {
|
||||||
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, 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(
|
options.set(Parser.EXTENSIONS, Arrays.asList(
|
||||||
TablesExtension.create(),
|
TablesExtension.create(),
|
||||||
@@ -102,11 +99,24 @@ public class MarkdownFromURLMacro extends BaseMacro implements Macro
|
|||||||
|
|
||||||
|
|
||||||
String highlightjs = "<script>\n" +
|
String highlightjs = "<script>\n" +
|
||||||
"AJS.$('[data-macro-name=\"markdown\"] code').each(function(i, block) {\n" +
|
"AJS.$('[data-macro-name=\"markdown-from-url\"] code').each(function(i, block) {\n" +
|
||||||
" hljs.highlightBlock(block);\n" +
|
" hljs.highlightBlock(block);\n" +
|
||||||
" });\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-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 {
|
class privateRepositoryException extends Exception {
|
||||||
public privateRepositoryException(String message) {
|
public privateRepositoryException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
@@ -134,7 +144,7 @@ public class MarkdownFromURLMacro extends BaseMacro implements Macro
|
|||||||
throw new privateRepositoryException("Cannot import from private repository.");
|
throw new privateRepositoryException("Cannot import from private repository.");
|
||||||
}else {
|
}else {
|
||||||
Node document = parser.parse(toParse);
|
Node document = parser.parse(toParse);
|
||||||
html = renderer.render(document) + highlightjs;
|
html = renderer.render(document) + highlightjs + highlightjscss + tableFixJs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (MalformedURLException u) {
|
catch (MalformedURLException u) {
|
||||||
@@ -175,7 +185,7 @@ public class MarkdownFromURLMacro 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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,44 +43,47 @@ 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(),
|
||||||
StrikethroughSubscriptExtension.create(),
|
StrikethroughSubscriptExtension.create(),
|
||||||
InsExtension.create(),
|
InsExtension.create(),
|
||||||
TaskListExtension.create(),
|
TaskListExtension.create(),
|
||||||
FootnoteExtension.create(),
|
FootnoteExtension.create(),
|
||||||
WikiLinkExtension.create(),
|
WikiLinkExtension.create(),
|
||||||
DefinitionExtension.create(),
|
DefinitionExtension.create(),
|
||||||
AnchorLinkExtension.create(),
|
AnchorLinkExtension.create(),
|
||||||
AutolinkExtension.create(),
|
AutolinkExtension.create(),
|
||||||
SuperscriptExtension.create(),
|
SuperscriptExtension.create(),
|
||||||
YouTubeLinkExtension.create()
|
YouTubeLinkExtension.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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user