From: <udi...@us...> - 2021-10-27 08:20:06
|
Revision: 1403 http://sourceforge.net/p/j-trac/code/1403 Author: udittmer Date: 2021-10-27 08:20:04 +0000 (Wed, 27 Oct 2021) Log Message: ----------- finalize Markdown support Modified Paths: -------------- trunk/jtrac/pom.xml trunk/jtrac/src/main/java/info/jtrac/util/ItemUtils.java trunk/jtrac/src/main/java/info/jtrac/wicket/BasePanel.java trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPanel.java Modified: trunk/jtrac/pom.xml =================================================================== --- trunk/jtrac/pom.xml 2021-10-26 15:22:35 UTC (rev 1402) +++ trunk/jtrac/pom.xml 2021-10-27 08:20:04 UTC (rev 1403) @@ -4,7 +4,7 @@ <groupId>info.jtrac</groupId> <artifactId>jtrac</artifactId> <packaging>war</packaging> - <version>2.2.0-b2</version> + <version>2.2.0-b3</version> <name>JTrac</name> <description> JTrac is a generic issue-tracking web-application that can be easily customized by adding custom fields Modified: trunk/jtrac/src/main/java/info/jtrac/util/ItemUtils.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/util/ItemUtils.java 2021-10-26 15:22:35 UTC (rev 1402) +++ trunk/jtrac/src/main/java/info/jtrac/util/ItemUtils.java 2021-10-27 08:20:04 UTC (rev 1403) @@ -26,6 +26,7 @@ import info.jtrac.domain.Space; import info.jtrac.domain.User; import info.jtrac.exception.JtracSecurityException; +import info.jtrac.wicket.JtracApplication; import java.io.BufferedReader; import java.io.StringReader; @@ -48,7 +49,7 @@ import org.commonmark.Extension; import org.commonmark.node.*; import org.commonmark.parser.Parser; -import org.commonmark.renderer.html.HtmlRenderer; +import org.commonmark.renderer.html.*; import org.commonmark.ext.autolink.AutolinkExtension; import org.commonmark.ext.gfm.strikethrough.StrikethroughExtension; import org.commonmark.ext.ins.InsExtension; @@ -73,8 +74,27 @@ extensions.add(AutolinkExtension.create()); extensions.add(StrikethroughExtension.create()); extensions.add(InsExtension.create()); - parser = Parser.builder().extensions(extensions).build(); - renderer = HtmlRenderer.builder().extensions(extensions).sanitizeUrls(true).build(); + parser = Parser.builder() + .extensions(extensions) + .build(); + renderer = HtmlRenderer.builder() + .extensions(extensions) + .attributeProviderFactory(new AttributeProviderFactory() { + @Override + public AttributeProvider create (AttributeProviderContext context) { + return new AttributeProvider() { + @Override + public void setAttributes (Node node, String tagName, Map<String, String> attributes) { + // if (tagName.equals("a")) would probably work as well + if (node instanceof Link) { + attributes.put("target", "_blank"); + } + } + }; + } + }) + .sanitizeUrls(true) + .build(); } /** @@ -114,15 +134,22 @@ throw new RuntimeException(e); } return sb.toString().replaceAll("\t", " "); - } + } public static String renderMarkdown (String text) { if (text == null) { return null; } else { - Node document = parser.parse(text); - return renderer.render(document); -// return text.replaceAll(URL_PATTERN, "<a href='$0' target='_blank'>$0</a>"); + String markdown = JtracApplication.get().getJtrac().loadConfig("markdown.enabled"); + if (markdown!=null && markdown.equalsIgnoreCase("true")) { + // apply markdown + Node document = parser.parse(text); + return renderer.render(document); + } else { + // at least auto-link URLs + text = fixWhiteSpace(text); + return text.replaceAll(URL_PATTERN, "<a href='$0' target='_blank'>$0</a>"); + } } } @@ -144,17 +171,15 @@ return getAsHtml(item, request, response, messageSource, locale); } - private static String getAsHtml(Item item, HttpServletRequest request, HttpServletResponse response, - MessageSource ms, Locale loc) { - + private static String getAsHtml (Item item, HttpServletRequest request, HttpServletResponse response, MessageSource ms, Locale loc) { boolean isWeb = request != null && response != null; - + String tableStyle = " class='jtrac'"; String tdStyle = ""; String thStyle = ""; String altStyle = " class='alt'"; String labelStyle = " class='label'"; - + if (!isWeb) { // inline CSS so that HTML mail works across most mail-reader clients String tdCommonStyle = "border: 1px solid black"; Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/BasePanel.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/wicket/BasePanel.java 2021-10-26 15:22:35 UTC (rev 1402) +++ trunk/jtrac/src/main/java/info/jtrac/wicket/BasePanel.java 2021-10-27 08:20:04 UTC (rev 1403) @@ -65,13 +65,4 @@ m.setLocalizer(getLocalizer()); return m.getString(); } - - protected boolean markdown() { - String markdown = getJtrac().loadConfig("markdown.enabled"); - if (StringUtils.hasText(markdown)) { - return markdown.trim().equalsIgnoreCase("true"); - } else { - return false; - } - } } Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPanel.java =================================================================== --- trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPanel.java 2021-10-26 15:22:35 UTC (rev 1402) +++ trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPanel.java 2021-10-27 08:20:04 UTC (rev 1403) @@ -189,10 +189,8 @@ add(new Label("loggedBy", new PropertyModel(item, "loggedBy.name"))); add(new Label("assignedTo", new PropertyModel(item, "assignedTo.name"))); add(new Label("summary", new PropertyModel(item, "summary"))); - String text = ItemUtils.fixWhiteSpace(item.getDetail()); - if (markdown()) { - text = ItemUtils.renderMarkdown(text); - } + String text = item.getDetail(); + text = ItemUtils.renderMarkdown(text); add(new Label("detail", text).setEscapeModelStrings(false)); final SimpleAttributeModifier sam = new SimpleAttributeModifier("class", "alt"); @@ -243,13 +241,11 @@ WebMarkupContainer comment = new WebMarkupContainer("comment"); comment.add(new AttachmentLinkPanel("attachment", h.getAttachment())); - String text = ItemUtils.fixWhiteSpace(h.getComment()); - if (markdown()) { - text = ItemUtils.renderMarkdown(text); - } + String text = h.getComment(); + text = ItemUtils.renderMarkdown(text); comment.add(new Label("comment", text).setEscapeModelStrings(false)); listItem.add(comment); - + listItem.add(new Label("timeStamp", DateUtils.formatTimeStamp(h.getTimeStamp()))); listItem.add(new ListView("fields", editable) { /* (non-Javadoc) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |