th1x
TH1 extension functions
Fossil comes with a neat but lightweigh TCL-like language. It can be utilized for other things, but in the GitHub or Stackoverflow themes it's used for pretty interfaces.
The features/*.th1 collections provide a few basic extensions.
Control structures (basic.th1)
Increment a variable
++ varnameShorthand if-else:
?: {$x<5} "true" {puts "false"}Shorthand info exists
isset varnameWhile-loop
while {$x < 7} { ++ x }Foreach over lists
set list "aa bb cc dd ee" foreach var $list { puts $var }And a switch statement:
switch $x { {1} { puts "value was 1." } {zzz} { puts "Sleepy value." } {{default}} { puts "Something else." } }
String functions (str.th1)
Shorthand string search (returns either just 1 or 0):
str::contains "/" "dirname/filename"Return substring position after startindex (the TH1 builtin string first function doesn't yet do that, contrary to its documentation).
str::next "/" "http://example.org/this" 10Wrap HTML tags around search terms in a string:
str::wrap $html "findme" "<b>" "</b>"Get directory name from path
str::dirname "/etc/passwd" # returns just /etc
Database functions (sql.th1)
To further simplify some of the template features, some basic database functions are included. They're all sql:: prefixed:
sql::allowed $strtests for whitelisted characters.Because the new prepared statements query API is not yet in Fossil mainline, we have to resort to escaping or whitelisting in this case. Actually, Fossils TH1queryautomatically binds literal$varnamesas parameters. Either enclose the query in unparsed{..}curly braces, or escape\$varnamesto be parameterized. (So this function is redundant now.)sql::page_exists $Wikitests for existence of a wiki page.sql::file_exists $pathnametests if the filename exists in the repository (must include complete path).While
sql::find_file $basenameallows a file to be located anywhere in the directory tree, and then returns its complete path.
User interface / template code (github.th1)
ui::statsreturns some variables: $stats_checkins, $stats_files, $stats_tickets, $stats_branches, $stats_developers, $stats_tags, , $stats_releasesu::lang_statsoutputs the language bar from fx_stats percentages.ui::last_commitoutputs two table rows, used by the GitHub template file box.ui::recent_files ""outputs table rows containing the top-level filenames and subdirectories. If a subdirectory name is passed, it will constrain the output to thats contents.ui::social_links $baseurloutputs facebook/google+/reddit/twitter/etc. links.