diff --git a/src/IDF/Views/Source.php b/src/IDF/Views/Source.php index 00b7a69..a0748da 100644 --- a/src/IDF/Views/Source.php +++ b/src/IDF/Views/Source.php @@ -154,6 +154,7 @@ class IDF_Views_Source } $scmConf = $request->conf->getVal('scm', 'git'); $props = $scm->getProperties($commit); + $res->uasort(array('IDF_Views_Source', 'treeSort')); return Pluf_Shortcuts_RenderToResponse('idf/source/'.$scmConf.'/tree.html', array( 'page_title' => $title, @@ -246,6 +247,7 @@ class IDF_Views_Source $previous = substr($request_file, 0, -strlen($l.' ')); $scmConf = $request->conf->getVal('scm', 'git'); $props = $scm->getProperties($commit, $request_file); + $res->uasort(array('IDF_Views_Source', 'treeSort')); return Pluf_Shortcuts_RenderToResponse('idf/source/'.$scmConf.'/tree.html', array( 'page_title' => $page_title, @@ -455,6 +457,28 @@ class IDF_Views_Source $scm->getFile($file_info)); } + /** + * Callback function to sort tree entries + */ + public static function treeSort($a, $b) + { + // compare two nodes of the same type + if ($a->type === $b->type) { + if (mb_convert_case($a->file, MB_CASE_LOWER) < + mb_convert_case ($b->file, MB_CASE_LOWER)) { + return -1; + } + return 1; + } + + // compare two nodes of different types, directories ("tree") + // should come before files ("blob") + if ($a->type > $b->type) { + return -1; + } + return 1; + } + /** * Get the scm type for page title *