summaryrefslogtreecommitdiff
path: root/inc/lib
diff options
context:
space:
mode:
authorczaks <marcin@6irc.net>2014-05-11 14:10:53 +0200
committerczaks <marcin@6irc.net>2014-05-11 14:10:53 +0200
commitfe126cb4bf103b59fe66fe5f0921560c62f80165 (patch)
tree3ca39d3c8e525038a19e194d6be347ffa5f15ba4 /inc/lib
parent7d29cf9e37c42102fb70a040a997f787ae05b170 (diff)
rewrite filename truncation code; ref #53
Diffstat (limited to 'inc/lib')
-rw-r--r--inc/lib/Twig/Extensions/Extension/Tinyboard.php18
1 files changed, 17 insertions, 1 deletions
diff --git a/inc/lib/Twig/Extensions/Extension/Tinyboard.php b/inc/lib/Twig/Extensions/Extension/Tinyboard.php
index e5dff993..986ecf45 100644
--- a/inc/lib/Twig/Extensions/Extension/Tinyboard.php
+++ b/inc/lib/Twig/Extensions/Extension/Tinyboard.php
@@ -13,7 +13,7 @@ class Twig_Extensions_Extension_Tinyboard extends Twig_Extension
new Twig_SimpleFilter('filesize', 'format_bytes'),
new Twig_SimpleFilter('truncate', 'twig_truncate_filter'),
new Twig_SimpleFilter('truncate_body', 'truncate'),
- new Twig_SimpleFilter('truncate_filename', 'truncate_filename'),
+ new Twig_SimpleFilter('truncate_filename', 'twig_filename_truncate_filter'),
new Twig_SimpleFilter('extension', 'twig_extension_filter'),
new Twig_SimpleFilter('sprintf', 'sprintf'),
new Twig_SimpleFilter('capcode', 'capcode'),
@@ -104,6 +104,22 @@ function twig_truncate_filter($value, $length = 30, $preserve = false, $separato
return $value;
}
+function twig_filename_truncate_filter($value, $length = 30, $separator = '&hellip;') {
+ if (mb_strlen($value) > $length) {
+ $value = strrev($value);
+ $array = array_reverse(explode(".", $value, 2));
+ $array = array_map("strrev", $array);
+
+ $filename = &$array[0];
+ $extension = isset($array[1]) ? $array[1] : false;
+
+ $filename = mb_substr($filename, 0, $length - ($extension ? mb_strlen($extension) + 1 : 0)) . $separator;
+
+ return implode(".", $array);
+ }
+ return $value;
+}
+
function twig_ratio_function($w, $h) {
return fraction($w, $h, ':');
}