mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-29 10:12:41 +01:00
Show README on repository screen in Diffusion
Summary: - Show README on the repository screen. - Move README to the bottom of the page for both repository and browse screens. - Support "README.rainbow". Test Plan: Looked at repository, browse screens. Made a "README.rainbow". Reviewers: btrahan, vrana, jungejason Reviewed By: btrahan CC: aran Maniphest Tasks: T1104 Differential Revision: https://secure.phabricator.com/D2336
This commit is contained in:
parent
6fd99e287b
commit
321b776148
5 changed files with 86 additions and 31 deletions
|
@ -81,34 +81,6 @@ final class DiffusionBrowseController extends DiffusionController {
|
|||
$phids = array_keys($phids);
|
||||
$handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
|
||||
|
||||
if ($readme) {
|
||||
$readme_request = DiffusionRequest::newFromDictionary(
|
||||
array(
|
||||
'repository' => $drequest->getRepository(),
|
||||
'commit' => $drequest->getStableCommitName(),
|
||||
'path' => $readme->getFullPath(),
|
||||
));
|
||||
|
||||
$content_query = DiffusionFileContentQuery::newFromDiffusionRequest(
|
||||
$readme_request);
|
||||
$content_query->loadFileContent();
|
||||
$readme_content = $content_query->getRawData();
|
||||
|
||||
if (preg_match('/.txt$/', $readme->getPath())) {
|
||||
$readme_content = phutil_escape_html($readme_content);
|
||||
$readme_content = nl2br($readme_content);
|
||||
} else {
|
||||
// Markup extensionless files as remarkup so we get links and such.
|
||||
$readme_content = $this->markupText($readme_content);
|
||||
}
|
||||
|
||||
$readme_panel = new AphrontPanelView();
|
||||
$readme_panel->setHeader('README');
|
||||
$readme_panel->appendChild($readme_content);
|
||||
|
||||
$content[] = $readme_panel;
|
||||
}
|
||||
|
||||
$browse_table = new DiffusionBrowseTableView();
|
||||
$browse_table->setDiffusionRequest($drequest);
|
||||
$browse_table->setHandles($handles);
|
||||
|
@ -122,6 +94,16 @@ final class DiffusionBrowseController extends DiffusionController {
|
|||
|
||||
$content[] = $this->buildOpenRevisions();
|
||||
|
||||
$readme_content = $browse_query->renderReadme($results);
|
||||
if ($readme_content) {
|
||||
$readme_panel = new AphrontPanelView();
|
||||
$readme_panel->setHeader('README');
|
||||
$readme_panel->appendChild($readme_content);
|
||||
|
||||
$content[] = $readme_panel;
|
||||
}
|
||||
|
||||
|
||||
$nav = $this->buildSideNav('browse', false);
|
||||
$nav->appendChild($content);
|
||||
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
phutil_require_module('phabricator', 'applications/diffusion/controller/base');
|
||||
phutil_require_module('phabricator', 'applications/diffusion/controller/file');
|
||||
phutil_require_module('phabricator', 'applications/diffusion/query/browse/base');
|
||||
phutil_require_module('phabricator', 'applications/diffusion/query/filecontent/base');
|
||||
phutil_require_module('phabricator', 'applications/diffusion/request/base');
|
||||
phutil_require_module('phabricator', 'applications/diffusion/view/browsetable');
|
||||
phutil_require_module('phabricator', 'applications/diffusion/view/emptyresult');
|
||||
phutil_require_module('phabricator', 'applications/markup/engine');
|
||||
|
|
|
@ -110,6 +110,14 @@ final class DiffusionRepositoryController extends DiffusionController {
|
|||
$content[] = $branch_panel;
|
||||
}
|
||||
|
||||
$readme = $browse_query->renderReadme($browse_results);
|
||||
if ($readme) {
|
||||
$panel = new AphrontPanelView();
|
||||
$panel->setHeader('README');
|
||||
$panel->appendChild($readme);
|
||||
$content[] = $panel;
|
||||
}
|
||||
|
||||
return $this->buildStandardPageResponse(
|
||||
$content,
|
||||
array(
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright 2011 Facebook, Inc.
|
||||
* Copyright 2012 Facebook, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -93,5 +93,66 @@ abstract class DiffusionBrowseQuery {
|
|||
return $this;
|
||||
}
|
||||
|
||||
final public function renderReadme(array $results) {
|
||||
$drequest = $this->getRequest();
|
||||
|
||||
$readme = null;
|
||||
foreach ($results as $result) {
|
||||
$path = $result->getPath();
|
||||
if (preg_match('/^readme(|\.txt|\.remarkup|\.rainbow)$/i', $path)) {
|
||||
$readme = $result;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$readme) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$readme_request = DiffusionRequest::newFromDictionary(
|
||||
array(
|
||||
'repository' => $drequest->getRepository(),
|
||||
'commit' => $drequest->getStableCommitName(),
|
||||
'path' => $readme->getFullPath(),
|
||||
));
|
||||
|
||||
$content_query = DiffusionFileContentQuery::newFromDiffusionRequest(
|
||||
$readme_request);
|
||||
$content_query->loadFileContent();
|
||||
$readme_content = $content_query->getRawData();
|
||||
|
||||
|
||||
if (preg_match('/\\.txt$/', $readme->getPath())) {
|
||||
$readme_content = phutil_escape_html($readme_content);
|
||||
$readme_content = nl2br($readme_content);
|
||||
|
||||
$class = null;
|
||||
} else if (preg_match('/\\.rainbow$/', $readme->getPath())) {
|
||||
$highlighter = new PhutilRainbowSyntaxHighlighter();
|
||||
$readme_content = $highlighter
|
||||
->getHighlightFuture($readme_content)
|
||||
->resolve();
|
||||
$readme_content = nl2br($readme_content);
|
||||
|
||||
require_celerity_resource('syntax-highlighting-css');
|
||||
$class = 'remarkup-code';
|
||||
} else {
|
||||
// Markup extensionless files as remarkup so we get links and such.
|
||||
$engine = PhabricatorMarkupEngine::newDiffusionMarkupEngine();
|
||||
$readme_content = $engine->markupText($readme_content);
|
||||
|
||||
$class = 'phabricator-remarkup';
|
||||
}
|
||||
|
||||
$readme_content = phutil_render_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => $class,
|
||||
),
|
||||
$readme_content);
|
||||
|
||||
return $readme_content;
|
||||
}
|
||||
|
||||
abstract protected function executeQuery();
|
||||
}
|
||||
|
|
|
@ -6,8 +6,14 @@
|
|||
|
||||
|
||||
|
||||
phutil_require_module('phabricator', 'applications/diffusion/query/filecontent/base');
|
||||
phutil_require_module('phabricator', 'applications/diffusion/request/base');
|
||||
phutil_require_module('phabricator', 'applications/markup/engine');
|
||||
phutil_require_module('phabricator', 'applications/repository/constants/repositorytype');
|
||||
phutil_require_module('phabricator', 'infrastructure/celerity/api');
|
||||
|
||||
phutil_require_module('phutil', 'markup');
|
||||
phutil_require_module('phutil', 'markup/syntax/highlighter/rainbow');
|
||||
phutil_require_module('phutil', 'symbols');
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue