From 995f1a13c3b17aac73aa7f0dcdbe5ddb021b404f Mon Sep 17 00:00:00 2001 From: Thomas Keller Date: Thu, 29 Apr 2010 23:35:57 +0200 Subject: [PATCH] Add a new view modifier which allows the shortening of long strings such as branch or tag names. Use that in the tree view and display the full name in a title tag. --- src/IDF/Middleware.php | 5 +++-- src/IDF/Views/Source.php | 25 ++++++++++++++++------ src/IDF/templates/idf/source/mtn/tree.html | 8 +++++-- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/IDF/Middleware.php b/src/IDF/Middleware.php index a4060af..e0436b6 100644 --- a/src/IDF/Middleware.php +++ b/src/IDF/Middleware.php @@ -92,6 +92,7 @@ class IDF_Middleware array( 'size' => 'IDF_Views_Source_PrettySize', 'ssize' => 'IDF_Views_Source_PrettySizeSimple', + 'shorten' => 'IDF_Views_Source_ShortenString', )); } } @@ -104,9 +105,9 @@ function IDF_Middleware_ContextPreProcessor($request) $c['isAdmin'] = ($request->user->administrator or $request->user->staff); if (isset($request->project)) { $c['project'] = $request->project; - $c['isOwner'] = $request->user->hasPerm('IDF.project-owner', + $c['isOwner'] = $request->user->hasPerm('IDF.project-owner', $request->project); - $c['isMember'] = $request->user->hasPerm('IDF.project-member', + $c['isMember'] = $request->user->hasPerm('IDF.project-member', $request->project); $c = array_merge($c, $request->rights); } diff --git a/src/IDF/Views/Source.php b/src/IDF/Views/Source.php index e979084..9a4791f 100644 --- a/src/IDF/Views/Source.php +++ b/src/IDF/Views/Source.php @@ -35,10 +35,10 @@ class IDF_Views_Source * Extension supported by the syntax highlighter. */ public static $supportedExtenstions = array( - 'ascx', 'ashx', 'asmx', 'aspx', 'browser', 'bsh', 'c', 'cc', - 'config', 'cpp', 'cs', 'csh', 'csproj', 'css', 'cv', 'cyc', - 'html', 'html', 'java', 'js', 'master', 'perl', 'php', 'pl', - 'pm', 'py', 'rb', 'sh', 'sitemap', 'skin', 'sln', 'svc', 'vala', + 'ascx', 'ashx', 'asmx', 'aspx', 'browser', 'bsh', 'c', 'cc', + 'config', 'cpp', 'cs', 'csh', 'csproj', 'css', 'cv', 'cyc', + 'html', 'html', 'java', 'js', 'master', 'perl', 'php', 'pl', + 'pm', 'py', 'rb', 'sh', 'sitemap', 'skin', 'sln', 'svc', 'vala', 'vb', 'vbproj', 'wsdl', 'xhtml', 'xml', 'xsd', 'xsl', 'xslt'); /** @@ -415,7 +415,7 @@ class IDF_Views_Source $scm->getMainBranch())); return new Pluf_HTTP_Response_Redirect($url); } - $info = self::getRequestedFileMimeType($request_file_info, + $info = self::getRequestedFileMimeType($request_file_info, $commit, $scm); $rep = new Pluf_HTTP_Response($scm->getFile($request_file_info), $info[0]); @@ -476,7 +476,7 @@ class IDF_Views_Source public static function getMimeTypeFromContent($file, $filedata) { $info = pathinfo($file); - $res = array('application/octet-stream', + $res = array('application/octet-stream', $info['basename'], isset($info['extension']) ? $info['extension'] : 'bin'); if (function_exists('finfo_open')) { @@ -597,3 +597,16 @@ function IDF_Views_Source_PrettySizeSimple($size) return Pluf_Utils::prettySize($size); } +function IDF_Views_Source_ShortenString($string, $length) +{ + $ellipse = "..."; + $length = max(strlen($ellipse) + 2, $length); + $preflen = ceil($length / 10); + + if (mb_strlen($string) < $length) + return $string; + + return substr($string, 0, $preflen).$ellipse. + substr($string, -($length - $preflen - mb_strlen($ellipse))); +} + diff --git a/src/IDF/templates/idf/source/mtn/tree.html b/src/IDF/templates/idf/source/mtn/tree.html index 8dfdb18..933f7b0 100644 --- a/src/IDF/templates/idf/source/mtn/tree.html +++ b/src/IDF/templates/idf/source/mtn/tree.html @@ -58,14 +58,18 @@

{trans 'Branches:'}
{foreach $branches as $branch => $path} {aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, $branch)} -{if $path}{$path}{else}{$branch}{/if}
+ + {if $path}{$path|shorten:25}{else}{$branch|shorten:25}{/if} +
{/foreach}

{if $tags}

{trans 'Tags:'}
{foreach $tags as $tag => $path} {aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, $tag)} -{if $path}{$path}{else}{$tag}{/if}
+ + {if $path}{$path|shorten:25}{else}{$tag|shorten:25}{/if} +
{/foreach}

{/if}