Skip to content

Commit c1e8d97

Browse files
committed
Diffusion - re-jigger how README files get rendered
Summary: be more aggressive about assuming plain-text, use remarkup for no extension, .remarkup, and .md, and last but not least use rainbow for .rainbow. Fixes T5818. Test Plan: my README rendered just fine post these changes Reviewers: epriestley Reviewed By: epriestley Subscribers: asherkin, epriestley, Korvin Maniphest Tasks: T5818 Differential Revision: https://secure.phabricator.com/D10340
1 parent 6f246bd commit c1e8d97

File tree

1 file changed

+55
-42
lines changed

1 file changed

+55
-42
lines changed

src/applications/diffusion/conduit/DiffusionReadmeQueryConduitAPIMethod.php

Lines changed: 55 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ protected function getResult(ConduitAPIRequest $request) {
3434

3535
$best = -1;
3636
$readme = '';
37+
$best_render_type = 'plain';
3738
foreach ($paths as $result_path) {
3839
$file_type = $result_path->getFileType();
3940
if (($file_type != ArcanistDiffChangeType::FILE_NORMAL) &&
@@ -45,7 +46,7 @@ protected function getResult(ConduitAPIRequest $request) {
4546
$path = strtolower($result_path->getPath());
4647

4748
if ($path === 'readme') {
48-
$path .= '.txt';
49+
$path .= '.remarkup';
4950
}
5051

5152
if (strncmp($path, 'readme.', 7) !== 0) {
@@ -56,21 +57,30 @@ protected function getResult(ConduitAPIRequest $request) {
5657
switch (substr($path, 7)) {
5758
case 'remarkup':
5859
$priority = 100;
60+
$render_type = 'remarkup';
5961
break;
6062
case 'rainbow':
6163
$priority = 90;
64+
$render_type = 'rainbow';
6265
break;
6366
case 'md':
6467
$priority = 50;
68+
$render_type = 'remarkup';
6569
break;
6670
case 'txt':
6771
$priority = 10;
72+
$render_type = 'plain';
73+
break;
74+
default:
75+
$priority = 0;
76+
$render_type = 'plain';
6877
break;
6978
}
7079

7180
if ($priority > $best) {
7281
$best = $priority;
7382
$readme = $result_path;
83+
$best_render_type = $render_type;
7484
}
7585
}
7686

@@ -98,47 +108,50 @@ protected function getResult(ConduitAPIRequest $request) {
98108
)));
99109
$readme_content = $file_content->getCorpus();
100110

101-
if (preg_match('/\\.txt$/', $readme->getPath())) {
102-
$readme_content = phutil_escape_html_newlines($readme_content);
103-
104-
$class = null;
105-
} else if (preg_match('/\\.rainbow$/', $readme->getPath())) {
106-
$highlighter = new PhutilRainbowSyntaxHighlighter();
107-
$readme_content = $highlighter
108-
->getHighlightFuture($readme_content)
109-
->resolve();
110-
$readme_content = phutil_escape_html_newlines($readme_content);
111-
112-
require_celerity_resource('syntax-highlighting-css');
113-
$class = 'remarkup-code';
114-
} else {
115-
// TODO: This is sketchy, but make sure we hit the markup cache.
116-
$markup_object = id(new PhabricatorMarkupOneOff())
117-
->setEngineRuleset('diffusion-readme')
118-
->setContent($readme_content);
119-
$markup_field = 'default';
120-
121-
$readme_content = id(new PhabricatorMarkupEngine())
122-
->setViewer($request->getUser())
123-
->addObject($markup_object, $markup_field)
124-
->process()
125-
->getOutput($markup_object, $markup_field);
126-
127-
$engine = $markup_object->newMarkupEngine($markup_field);
128-
$toc = PhutilRemarkupHeaderBlockRule::renderTableOfContents($engine);
129-
if ($toc) {
130-
$toc = phutil_tag_div(
131-
'phabricator-remarkup-toc',
132-
array(
133-
phutil_tag_div(
134-
'phabricator-remarkup-toc-header',
135-
pht('Table of Contents')),
136-
$toc,
137-
));
138-
$readme_content = array($toc, $readme_content);
139-
}
140-
141-
$class = 'phabricator-remarkup';
111+
switch ($best_render_type) {
112+
case 'plain':
113+
$readme_content = phutil_escape_html_newlines($readme_content);
114+
$class = null;
115+
break;
116+
case 'rainbow':
117+
$highlighter = new PhutilRainbowSyntaxHighlighter();
118+
$readme_content = $highlighter
119+
->getHighlightFuture($readme_content)
120+
->resolve();
121+
$readme_content = phutil_escape_html_newlines($readme_content);
122+
123+
require_celerity_resource('syntax-highlighting-css');
124+
$class = 'remarkup-code';
125+
break;
126+
case 'remarkup':
127+
// TODO: This is sketchy, but make sure we hit the markup cache.
128+
$markup_object = id(new PhabricatorMarkupOneOff())
129+
->setEngineRuleset('diffusion-readme')
130+
->setContent($readme_content);
131+
$markup_field = 'default';
132+
133+
$readme_content = id(new PhabricatorMarkupEngine())
134+
->setViewer($request->getUser())
135+
->addObject($markup_object, $markup_field)
136+
->process()
137+
->getOutput($markup_object, $markup_field);
138+
139+
$engine = $markup_object->newMarkupEngine($markup_field);
140+
$toc = PhutilRemarkupHeaderBlockRule::renderTableOfContents($engine);
141+
if ($toc) {
142+
$toc = phutil_tag_div(
143+
'phabricator-remarkup-toc',
144+
array(
145+
phutil_tag_div(
146+
'phabricator-remarkup-toc-header',
147+
pht('Table of Contents')),
148+
$toc,
149+
));
150+
$readme_content = array($toc, $readme_content);
151+
}
152+
153+
$class = 'phabricator-remarkup';
154+
break;
142155
}
143156

144157
$readme_content = phutil_tag(

0 commit comments

Comments
 (0)