Automatic detection also will now also display a plain text "readme" or "readme.txt" file. Change-Id: Id6be729bdc469e7a5cfd1f4144df340a6b93475etags/v1.4.0
- Updated default binary and Lucene ignore extensions | - Updated default binary and Lucene ignore extensions | ||||
- Change the WAR baseFolder context parameter to a JNDI env-entry to improve enterprise deployments | - Change the WAR baseFolder context parameter to a JNDI env-entry to improve enterprise deployments | ||||
- Removed internal Gitblit ref exclusions in the upload pack | - Removed internal Gitblit ref exclusions in the upload pack | ||||
- Removed "show readme" setting in favor of automatic detection | |||||
- Support plain text "readme" files | |||||
additions: | additions: | ||||
- Added branch graph image servlet based on EGit's branch graph renderer (issue-194) | - Added branch graph image servlet based on EGit's branch graph renderer (issue-194) | ||||
- Added option to render Markdown commit messages (issue-203) | - Added option to render Markdown commit messages (issue-203) |
model.verifyCommitter = getConfig(config, "verifyCommitter", false); | model.verifyCommitter = getConfig(config, "verifyCommitter", false); | ||||
model.showRemoteBranches = getConfig(config, "showRemoteBranches", hasOrigin); | model.showRemoteBranches = getConfig(config, "showRemoteBranches", hasOrigin); | ||||
model.isFrozen = getConfig(config, "isFrozen", false); | model.isFrozen = getConfig(config, "isFrozen", false); | ||||
model.showReadme = getConfig(config, "showReadme", false); | |||||
model.skipSizeCalculation = getConfig(config, "skipSizeCalculation", false); | model.skipSizeCalculation = getConfig(config, "skipSizeCalculation", false); | ||||
model.skipSummaryMetrics = getConfig(config, "skipSummaryMetrics", false); | model.skipSummaryMetrics = getConfig(config, "skipSummaryMetrics", false); | ||||
model.commitMessageRenderer = CommitMessageRenderer.fromName(getConfig(config, "commitMessageRenderer", | model.commitMessageRenderer = CommitMessageRenderer.fromName(getConfig(config, "commitMessageRenderer", | ||||
config.setBoolean(Constants.CONFIG_GITBLIT, null, "verifyCommitter", repository.verifyCommitter); | config.setBoolean(Constants.CONFIG_GITBLIT, null, "verifyCommitter", repository.verifyCommitter); | ||||
config.setBoolean(Constants.CONFIG_GITBLIT, null, "showRemoteBranches", repository.showRemoteBranches); | config.setBoolean(Constants.CONFIG_GITBLIT, null, "showRemoteBranches", repository.showRemoteBranches); | ||||
config.setBoolean(Constants.CONFIG_GITBLIT, null, "isFrozen", repository.isFrozen); | config.setBoolean(Constants.CONFIG_GITBLIT, null, "isFrozen", repository.isFrozen); | ||||
config.setBoolean(Constants.CONFIG_GITBLIT, null, "showReadme", repository.showReadme); | |||||
config.setBoolean(Constants.CONFIG_GITBLIT, null, "skipSizeCalculation", repository.skipSizeCalculation); | config.setBoolean(Constants.CONFIG_GITBLIT, null, "skipSizeCalculation", repository.skipSizeCalculation); | ||||
config.setBoolean(Constants.CONFIG_GITBLIT, null, "skipSummaryMetrics", repository.skipSummaryMetrics); | config.setBoolean(Constants.CONFIG_GITBLIT, null, "skipSummaryMetrics", repository.skipSummaryMetrics); | ||||
config.setString(Constants.CONFIG_GITBLIT, null, "federationStrategy", | config.setString(Constants.CONFIG_GITBLIT, null, "federationStrategy", |
private JCheckBox showRemoteBranches; | private JCheckBox showRemoteBranches; | ||||
private JCheckBox showReadme; | |||||
private JCheckBox skipSizeCalculation; | private JCheckBox skipSizeCalculation; | ||||
private JCheckBox skipSummaryMetrics; | private JCheckBox skipSummaryMetrics; | ||||
showRemoteBranches = new JCheckBox( | showRemoteBranches = new JCheckBox( | ||||
Translation.get("gb.showRemoteBranchesDescription"), | Translation.get("gb.showRemoteBranchesDescription"), | ||||
anRepository.showRemoteBranches); | anRepository.showRemoteBranches); | ||||
showReadme = new JCheckBox(Translation.get("gb.showReadmeDescription"), | |||||
anRepository.showReadme); | |||||
skipSizeCalculation = new JCheckBox( | skipSizeCalculation = new JCheckBox( | ||||
Translation.get("gb.skipSizeCalculationDescription"), | Translation.get("gb.skipSizeCalculationDescription"), | ||||
anRepository.skipSizeCalculation); | anRepository.skipSizeCalculation); | ||||
.add(newFieldPanel(Translation.get("gb.enableIncrementalPushTags"), useIncrementalPushTags)); | .add(newFieldPanel(Translation.get("gb.enableIncrementalPushTags"), useIncrementalPushTags)); | ||||
fieldsPanel.add(newFieldPanel(Translation.get("gb.showRemoteBranches"), | fieldsPanel.add(newFieldPanel(Translation.get("gb.showRemoteBranches"), | ||||
showRemoteBranches)); | showRemoteBranches)); | ||||
fieldsPanel.add(newFieldPanel(Translation.get("gb.showReadme"), | |||||
showReadme)); | |||||
fieldsPanel | fieldsPanel | ||||
.add(newFieldPanel(Translation.get("gb.skipSizeCalculation"), | .add(newFieldPanel(Translation.get("gb.skipSizeCalculation"), | ||||
skipSizeCalculation)); | skipSizeCalculation)); | ||||
repository.useDocs = useDocs.isSelected(); | repository.useDocs = useDocs.isSelected(); | ||||
repository.useIncrementalPushTags = useIncrementalPushTags.isSelected(); | repository.useIncrementalPushTags = useIncrementalPushTags.isSelected(); | ||||
repository.showRemoteBranches = showRemoteBranches.isSelected(); | repository.showRemoteBranches = showRemoteBranches.isSelected(); | ||||
repository.showReadme = showReadme.isSelected(); | |||||
repository.skipSizeCalculation = skipSizeCalculation.isSelected(); | repository.skipSizeCalculation = skipSizeCalculation.isSelected(); | ||||
repository.skipSummaryMetrics = skipSummaryMetrics.isSelected(); | repository.skipSummaryMetrics = skipSummaryMetrics.isSelected(); | ||||
repository.maxActivityCommits = (Integer) maxActivityCommits.getSelectedItem(); | repository.maxActivityCommits = (Integer) maxActivityCommits.getSelectedItem(); |
public AuthorizationControl authorizationControl; | public AuthorizationControl authorizationControl; | ||||
public boolean allowAuthenticated; | public boolean allowAuthenticated; | ||||
public boolean isFrozen; | public boolean isFrozen; | ||||
public boolean showReadme; | |||||
public FederationStrategy federationStrategy; | public FederationStrategy federationStrategy; | ||||
public List<String> federationSets; | public List<String> federationSets; | ||||
public boolean isFederated; | public boolean isFederated; | ||||
clone.accessRestriction = AccessRestrictionType.PUSH; | clone.accessRestriction = AccessRestrictionType.PUSH; | ||||
clone.authorizationControl = AuthorizationControl.NAMED; | clone.authorizationControl = AuthorizationControl.NAMED; | ||||
clone.federationStrategy = federationStrategy; | clone.federationStrategy = federationStrategy; | ||||
clone.showReadme = showReadme; | |||||
clone.showRemoteBranches = false; | clone.showRemoteBranches = false; | ||||
clone.allowForks = false; | clone.allowForks = false; | ||||
clone.useDocs = useDocs; | clone.useDocs = useDocs; |
*/ | */ | ||||
public class MarkdownUtils { | public class MarkdownUtils { | ||||
/** | |||||
* Returns the html version of the plain source text. | |||||
* | |||||
* @param text | |||||
* @return html version of plain text | |||||
* @throws java.text.ParseException | |||||
*/ | |||||
public static String transformPlainText(String text) { | |||||
// url auto-linking | |||||
text = text.replaceAll("((http|https)://[0-9A-Za-z-_=\\?\\.\\$#&/]*)", "<a href=\"$1\">$1</a>"); | |||||
String html = "<pre>" + text + "</pre>"; | |||||
return html; | |||||
} | |||||
/** | /** | ||||
* Returns the html version of the markdown source text. | * Returns the html version of the markdown source text. | ||||
* | * |
<tr><th><wicket:message key="gb.enableDocs"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="useDocs" tabindex="8" /> <span class="help-inline"><wicket:message key="gb.useDocsDescription"></wicket:message></span></label></td></tr> | <tr><th><wicket:message key="gb.enableDocs"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="useDocs" tabindex="8" /> <span class="help-inline"><wicket:message key="gb.useDocsDescription"></wicket:message></span></label></td></tr> | ||||
<tr><th><wicket:message key="gb.enableIncrementalPushTags"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="useIncrementalPushTags" tabindex="8" /> <span class="help-inline"><wicket:message key="gb.useIncrementalPushTagsDescription"></wicket:message></span></label></td></tr> | <tr><th><wicket:message key="gb.enableIncrementalPushTags"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="useIncrementalPushTags" tabindex="8" /> <span class="help-inline"><wicket:message key="gb.useIncrementalPushTagsDescription"></wicket:message></span></label></td></tr> | ||||
<tr><th><wicket:message key="gb.showRemoteBranches"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="showRemoteBranches" tabindex="9" /> <span class="help-inline"><wicket:message key="gb.showRemoteBranchesDescription"></wicket:message></span></label></td></tr> | <tr><th><wicket:message key="gb.showRemoteBranches"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="showRemoteBranches" tabindex="9" /> <span class="help-inline"><wicket:message key="gb.showRemoteBranchesDescription"></wicket:message></span></label></td></tr> | ||||
<tr><th><wicket:message key="gb.showReadme"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="showReadme" tabindex="10" /> <span class="help-inline"><wicket:message key="gb.showReadmeDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.skipSizeCalculation"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="skipSizeCalculation" tabindex="11" /> <span class="help-inline"><wicket:message key="gb.skipSizeCalculationDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.skipSummaryMetrics"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="skipSummaryMetrics" tabindex="12" /> <span class="help-inline"><wicket:message key="gb.skipSummaryMetricsDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.maxActivityCommits"></wicket:message></th><td class="edit"><select class="span2" wicket:id="maxActivityCommits" tabindex="13" /> <span class="help-inline"><wicket:message key="gb.maxActivityCommitsDescription"></wicket:message></span></td></tr> | |||||
<tr><th><wicket:message key="gb.metricAuthorExclusions"></wicket:message></th><td class="edit"><input class="span8" type="text" wicket:id="metricAuthorExclusions" size="40" tabindex="14" /></td></tr> | |||||
<tr><th><wicket:message key="gb.commitMessageRenderer"></wicket:message></th><td class="edit"><select class="span2" wicket:id="commitMessageRenderer" tabindex="15" /></td></tr> | |||||
<tr><th><wicket:message key="gb.skipSizeCalculation"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="skipSizeCalculation" tabindex="10" /> <span class="help-inline"><wicket:message key="gb.skipSizeCalculationDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.skipSummaryMetrics"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="skipSummaryMetrics" tabindex="11" /> <span class="help-inline"><wicket:message key="gb.skipSummaryMetricsDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.maxActivityCommits"></wicket:message></th><td class="edit"><select class="span2" wicket:id="maxActivityCommits" tabindex="12" /> <span class="help-inline"><wicket:message key="gb.maxActivityCommitsDescription"></wicket:message></span></td></tr> | |||||
<tr><th><wicket:message key="gb.metricAuthorExclusions"></wicket:message></th><td class="edit"><input class="span8" type="text" wicket:id="metricAuthorExclusions" size="40" tabindex="13" /></td></tr> | |||||
<tr><th><wicket:message key="gb.commitMessageRenderer"></wicket:message></th><td class="edit"><select class="span2" wicket:id="commitMessageRenderer" tabindex="14" /></td></tr> | |||||
<tr><th colspan="2"><hr/></th></tr> | <tr><th colspan="2"><hr/></th></tr> | ||||
<tr><th><wicket:message key="gb.mailingLists"></wicket:message></th><td class="edit"><input class="span8" type="text" wicket:id="mailingLists" size="40" tabindex="16" /></td></tr> | |||||
<tr><th><wicket:message key="gb.mailingLists"></wicket:message></th><td class="edit"><input class="span8" type="text" wicket:id="mailingLists" size="40" tabindex="15" /></td></tr> | |||||
</tbody> | </tbody> | ||||
</table> | </table> | ||||
</div> | </div> | ||||
<div class="tab-pane" id="permissions"> | <div class="tab-pane" id="permissions"> | ||||
<table class="plain"> | <table class="plain"> | ||||
<tbody class="settings"> | <tbody class="settings"> | ||||
<tr><th><wicket:message key="gb.owners"></wicket:message></th><td class="edit"><span wicket:id="owners" tabindex="17" /> </td></tr> | |||||
<tr><th><wicket:message key="gb.owners"></wicket:message></th><td class="edit"><span wicket:id="owners" tabindex="16" /> </td></tr> | |||||
<tr><th colspan="2"><hr/></th></tr> | <tr><th colspan="2"><hr/></th></tr> | ||||
<tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span4" wicket:id="accessRestriction" tabindex="18" /></td></tr> | |||||
<tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span4" wicket:id="accessRestriction" tabindex="17" /></td></tr> | |||||
<tr><th colspan="2"><hr/></th></tr> | <tr><th colspan="2"><hr/></th></tr> | ||||
<tr><th><wicket:message key="gb.authorizationControl"></wicket:message></th><td style="padding:2px;"><span class="authorizationControl" wicket:id="authorizationControl"></span></td></tr> | <tr><th><wicket:message key="gb.authorizationControl"></wicket:message></th><td style="padding:2px;"><span class="authorizationControl" wicket:id="authorizationControl"></span></td></tr> | ||||
<tr><th colspan="2"><hr/></th></tr> | <tr><th colspan="2"><hr/></th></tr> | ||||
<tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="isFrozen" tabindex="19" /> <span class="help-inline"><wicket:message key="gb.isFrozenDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.allowForks"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="allowForks" tabindex="20" /> <span class="help-inline"><wicket:message key="gb.allowForksDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.verifyCommitter"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="verifyCommitter" tabindex="21" /> <span class="help-inline"><wicket:message key="gb.verifyCommitterDescription"></wicket:message></span><br/><span class="help-inline" style="padding-left:10px;"><wicket:message key="gb.verifyCommitterNote"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="isFrozen" tabindex="18" /> <span class="help-inline"><wicket:message key="gb.isFrozenDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.allowForks"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="allowForks" tabindex="19" /> <span class="help-inline"><wicket:message key="gb.allowForksDescription"></wicket:message></span></label></td></tr> | |||||
<tr><th><wicket:message key="gb.verifyCommitter"></wicket:message></th><td class="edit"><label class="checkbox"><input type="checkbox" wicket:id="verifyCommitter" tabindex="20" /> <span class="help-inline"><wicket:message key="gb.verifyCommitterDescription"></wicket:message></span><br/><span class="help-inline" style="padding-left:10px;"><wicket:message key="gb.verifyCommitterNote"></wicket:message></span></label></td></tr> | |||||
<tr><th colspan="2"><hr/></th></tr> | <tr><th colspan="2"><hr/></th></tr> | ||||
<tr><th><wicket:message key="gb.userPermissions"></wicket:message></th><td style="padding:2px;"><span wicket:id="users"></span></td></tr> | <tr><th><wicket:message key="gb.userPermissions"></wicket:message></th><td style="padding:2px;"><span wicket:id="users"></span></td></tr> | ||||
<tr><th colspan="2"><hr/></th></tr> | <tr><th colspan="2"><hr/></th></tr> | ||||
<div class="tab-pane" id="federation"> | <div class="tab-pane" id="federation"> | ||||
<table class="plain"> | <table class="plain"> | ||||
<tbody class="settings"> | <tbody class="settings"> | ||||
<tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span4" wicket:id="federationStrategy" tabindex="22" /></td></tr> | |||||
<tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span4" wicket:id="federationStrategy" tabindex="21" /></td></tr> | |||||
<tr><th><wicket:message key="gb.federationSets"></wicket:message></th><td style="padding:2px;"><span wicket:id="federationSets"></span></td></tr> | <tr><th><wicket:message key="gb.federationSets"></wicket:message></th><td style="padding:2px;"><span wicket:id="federationSets"></span></td></tr> | ||||
</tbody> | </tbody> | ||||
</table> | </table> |
form.add(new CheckBox("useDocs")); | form.add(new CheckBox("useDocs")); | ||||
form.add(new CheckBox("useIncrementalPushTags")); | form.add(new CheckBox("useIncrementalPushTags")); | ||||
form.add(new CheckBox("showRemoteBranches")); | form.add(new CheckBox("showRemoteBranches")); | ||||
form.add(new CheckBox("showReadme")); | |||||
form.add(new CheckBox("skipSizeCalculation")); | form.add(new CheckBox("skipSizeCalculation")); | ||||
form.add(new CheckBox("skipSummaryMetrics")); | form.add(new CheckBox("skipSummaryMetrics")); | ||||
List<Integer> maxActivityCommits = Arrays.asList(-1, 0, 25, 50, 75, 100, 150, 200, 250, 500 ); | List<Integer> maxActivityCommits = Arrays.asList(-1, 0, 25, 50, 75, 100, 150, 200, 250, 500 ); |
// conditional links | // conditional links | ||||
// per-repository extra page links | // per-repository extra page links | ||||
if (model.showReadme || model.useDocs) { | |||||
if (model.useDocs) { | |||||
pages.put("docs", new PageRegistration("gb.docs", DocsPage.class, params, true)); | pages.put("docs", new PageRegistration("gb.docs", DocsPage.class, params, true)); | ||||
} | } | ||||
if (JGitUtils.getPagesBranch(r) != null) { | if (JGitUtils.getPagesBranch(r) != null) { |
<div wicket:id="readmeContent" class="markdown"></div> | <div wicket:id="readmeContent" class="markdown"></div> | ||||
</div> | </div> | ||||
</wicket:fragment> | </wicket:fragment> | ||||
<wicket:fragment wicket:id="plaintextPanel"> | |||||
<div class="header" style="margin-top:0px;" > | |||||
<i style="vertical-align: middle;" class="icon-book"></i> | |||||
<span style="font-weight:bold;vertical-align:middle;" wicket:id="readmeFile"></span> | |||||
</div> | |||||
<div style="border:1px solid #ddd;border-radius: 0 0 3px 3px;padding: 20px;"> | |||||
<div wicket:id="readmeContent"></div> | |||||
</div> | |||||
</wicket:fragment> | |||||
<wicket:fragment wicket:id="ownersFragment"> | <wicket:fragment wicket:id="ownersFragment"> | ||||
</wicket:fragment> | </wicket:fragment> |
add(new TagsPanel("tagsPanel", repositoryName, r, numberRefs).hideIfEmpty()); | add(new TagsPanel("tagsPanel", repositoryName, r, numberRefs).hideIfEmpty()); | ||||
add(new BranchesPanel("branchesPanel", getRepositoryModel(), r, numberRefs, false).hideIfEmpty()); | add(new BranchesPanel("branchesPanel", getRepositoryModel(), r, numberRefs, false).hideIfEmpty()); | ||||
if (getRepositoryModel().showReadme) { | |||||
String htmlText = null; | |||||
String markdownText = null; | |||||
String readme = null; | |||||
try { | |||||
RevCommit head = JGitUtils.getCommit(r, null); | |||||
List<String> markdownExtensions = GitBlit.getStrings(Keys.web.markdownExtensions); | |||||
List<PathModel> paths = JGitUtils.getFilesInPath(r, null, head); | |||||
for (PathModel path : paths) { | |||||
if (!path.isTree()) { | |||||
String name = path.name.toLowerCase(); | |||||
if (name.startsWith("readme")) { | |||||
if (name.indexOf('.') > -1) { | |||||
String ext = name.substring(name.lastIndexOf('.') + 1); | |||||
if (markdownExtensions.contains(ext)) { | |||||
readme = path.name; | |||||
break; | |||||
} | |||||
String htmlText = null; | |||||
String markdownText = null; | |||||
String readme = null; | |||||
boolean isMarkdown = false; | |||||
try { | |||||
RevCommit head = JGitUtils.getCommit(r, null); | |||||
List<String> markdownExtensions = GitBlit.getStrings(Keys.web.markdownExtensions); | |||||
List<PathModel> paths = JGitUtils.getFilesInPath(r, null, head); | |||||
for (PathModel path : paths) { | |||||
if (!path.isTree()) { | |||||
String name = path.name.toLowerCase(); | |||||
if (name.equals("readme") || name.equals("readme.txt")) { | |||||
readme = path.name; | |||||
isMarkdown = false; | |||||
} else if (name.startsWith("readme")) { | |||||
if (name.indexOf('.') > -1) { | |||||
String ext = name.substring(name.lastIndexOf('.') + 1); | |||||
if (markdownExtensions.contains(ext)) { | |||||
readme = path.name; | |||||
isMarkdown = true; | |||||
break; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
if (!StringUtils.isEmpty(readme)) { | |||||
String [] encodings = GitBlit.getEncodings(); | |||||
markdownText = JGitUtils.getStringContent(r, head.getTree(), readme, encodings); | |||||
} | |||||
if (!StringUtils.isEmpty(readme)) { | |||||
String [] encodings = GitBlit.getEncodings(); | |||||
markdownText = JGitUtils.getStringContent(r, head.getTree(), readme, encodings); | |||||
if (isMarkdown) { | |||||
htmlText = MarkdownUtils.transformMarkdown(markdownText); | htmlText = MarkdownUtils.transformMarkdown(markdownText); | ||||
} else { | |||||
htmlText = MarkdownUtils.transformPlainText(markdownText); | |||||
} | } | ||||
} catch (Exception e) { | |||||
logger.error("failed to transform markdown", e); | |||||
markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText); | |||||
htmlText = StringUtils.breakLinesForHtml(markdownText); | |||||
} | } | ||||
Fragment fragment = new Fragment("readme", "markdownPanel"); | |||||
} catch (Exception e) { | |||||
logger.error("failed to transform markdown", e); | |||||
markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText); | |||||
htmlText = MarkdownUtils.transformPlainText(markdownText); | |||||
} | |||||
if (StringUtils.isEmpty(htmlText)) { | |||||
add(new Label("readme").setVisible(false)); | |||||
} else { | |||||
Fragment fragment = new Fragment("readme", isMarkdown ? "markdownPanel" : "plaintextPanel"); | |||||
fragment.add(new Label("readmeFile", readme)); | fragment.add(new Label("readmeFile", readme)); | ||||
// Add the html to the page | // Add the html to the page | ||||
Component content = new Label("readmeContent", htmlText).setEscapeModelStrings(false); | Component content = new Label("readmeContent", htmlText).setEscapeModelStrings(false); | ||||
fragment.add(content.setVisible(!StringUtils.isEmpty(htmlText))); | fragment.add(content.setVisible(!StringUtils.isEmpty(htmlText))); | ||||
add(fragment); | add(fragment); | ||||
} else { | |||||
add(new Label("readme").setVisible(false)); | |||||
} | } | ||||
// Display an activity line graph | // Display an activity line graph |