diff --git a/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php b/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php index c70ad1c9d2..6427611ffe 100644 --- a/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php +++ b/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php @@ -26,6 +26,7 @@ class DiffusionBrowseFileController extends DiffusionController { 'jpeg'=> 'image/jpeg' ); + public function processRequest() { // Build the view selection form. @@ -90,6 +91,20 @@ class DiffusionBrowseFileController extends DiffusionController { } + /* + * Returns a content-type corrsponding to an image file extension + * + * @param string $path File path + * @return mixed A content-type string or NULL if path doesn't end with a + * recognized image extension + */ + public function getImageType($path) { + $ext = pathinfo($path); + $ext = $ext['extension']; + return idx($this->imageTypes, $ext); + } + + private function buildCorpus($selected) { $needs_blame = ($selected == 'blame' || $selected == 'plainblame'); @@ -166,7 +181,7 @@ class DiffusionBrowseFileController extends DiffusionController { implode("\n", $text_list))); $rows = $this->buildDisplayRows($text_list, $rev_list, $blame_dict, - $needs_blame, $drequest); + $needs_blame, $drequest, $file_query, $selected); $corpus_table = phutil_render_tag( 'table', @@ -189,7 +204,7 @@ class DiffusionBrowseFileController extends DiffusionController { private static function buildDisplayRows($text_list, $rev_list, $blame_dict, - $needs_blame, DiffusionRequest $drequest) { + $needs_blame, DiffusionRequest $drequest, $file_query, $selected) { $last_rev = null; $color = null; $rows = array(); @@ -208,6 +223,8 @@ class DiffusionBrowseFileController extends DiffusionController { $rev = $rev_list[$k]; if ($last_rev == $rev) { $blame_info = + ($file_query->getSupportsBlameOnBlame() ? + '' : ''). ''. ''; } else { @@ -220,8 +237,25 @@ class DiffusionBrowseFileController extends DiffusionController { $drequest, substr($rev, 0, 7)); + if (!$file_query->getSupportsBlameOnBlame()) { + $prev_link = ''; + } else { + $prev_rev = $file_query->getPrevRev($rev); + $path = $drequest->getPath(); + $prev_link = self::renderBrowse( + $drequest, + $path, + "\xC2\xAB", + $prev_rev, + $n, + $selected); + $prev_link = '' . $prev_link . ''; + } + $author_link = $blame_dict[$rev]['author']; $blame_info = + $prev_link . ''.$revision_link.''. 'request; } diff --git a/src/applications/diffusion/query/filecontent/svn/DiffusionSvnFileContentQuery.php b/src/applications/diffusion/query/filecontent/svn/DiffusionSvnFileContentQuery.php index 64e7f9f085..3371c3027b 100644 --- a/src/applications/diffusion/query/filecontent/svn/DiffusionSvnFileContentQuery.php +++ b/src/applications/diffusion/query/filecontent/svn/DiffusionSvnFileContentQuery.php @@ -18,6 +18,14 @@ final class DiffusionSvnFileContentQuery extends DiffusionFileContentQuery { + public function getSupportsBlameOnBlame() { + return true; + } + + public function getPrevRev($rev) { + return max($rev - 1, 0); + } + protected function executeQuery() { $drequest = $this->getRequest();