summaryrefslogtreecommitdiff
path: root/lib/VN3/Docs/Lib.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VN3/Docs/Lib.pm')
-rw-r--r--lib/VN3/Docs/Lib.pm85
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/VN3/Docs/Lib.pm b/lib/VN3/Docs/Lib.pm
new file mode 100644
index 00000000..82641874
--- /dev/null
+++ b/lib/VN3/Docs/Lib.pm
@@ -0,0 +1,85 @@
+package VN3::Docs::Lib;
+
+use VN3::Prelude;
+use Text::MultiMarkdown 'markdown';
+
+our @EXPORT = qw/md2html Sidebar/;
+
+
+sub md2html {
+ my $content = shift;
+
+ $content =~ s{^:MODERATORS:$}{
+ my %modperms = map auth->listPerms->{$_} & auth->defaultPerms ? () : ($_, auth->listPerms->{$_}), keys %{ auth->listPerms };
+ my $l = tuwf->dbAlli('SELECT id, username, perm FROM users WHERE (perm & ', \(auth->allPerms &~ auth->defaultPerms), ') > 0 ORDER BY id LIMIT 100');
+ '<dl>'.join('', map {
+ my $u = $_;
+ my $p = $u->{perm} >= auth->allPerms ? 'admin'
+ : join ', ', sort grep $u->{perm} & $modperms{$_}, keys %modperms;
+ sprintf '<dt><a href="/u%d">%s</a></dt><dd>%s</dd>', $_->{id}, $_->{username}, $p;
+ } @$l).'</dl>';
+ }me;
+
+ my $html = markdown $content, {
+ strip_metadata => 1,
+ img_ids => 0,
+ disable_footnotes => 1,
+ disable_bibliography => 1,
+ };
+
+ # Number sections and turn them into links
+ my($sec, $subsec) = (0,0);
+ $html =~ s{<h([1-2])[^>]+>(.*?)</h\1>}{
+ if($1 == 1) {
+ $sec++;
+ $subsec = 0;
+ qq{<h2><a href="#$sec" name="$sec">$sec. $2</a></h2>}
+ } elsif($1 == 2) {
+ $subsec++;
+ qq|<h3><a href="#$sec.$subsec" name="$sec.$subsec">$sec.$subsec. $2</a></h3>\n|
+ }
+ }ge;
+
+ # Text::MultiMarkdown doesn't handle fenced code blocks properly. The
+ # following solution breaks inline code blocks, but I don't use those anyway.
+ $html =~ s/<code>/<pre>/g;
+ $html =~ s#</code>#</pre>#g;
+
+ $html
+}
+
+
+sub Cat {
+ Div class => 'doc-list__title', $_[0];
+}
+
+sub Doc {
+ A mkclass('doc-list__doc' => 1, 'doc-list__doc--active' => tuwf->capture('id') == $_[0]),
+ href => "/d$_[0]", $_[1];
+}
+
+
+sub Sidebar {
+ # TODO: Turn this into a nav-sidebar for better mobile viewing?
+ Cat 'About VNDB';
+ Doc 7, 'About us';
+ Doc 6, 'FAQ';
+ Doc 9, 'Discussion board';
+ Doc 17, 'Privacy Policy';
+ Doc 11, 'Database API';
+ Doc 14, 'Database Dumps';
+ Doc 8, 'Development';
+
+ Cat 'Guidelines';
+ Doc 5, 'Editing guidelines';
+ Doc 2, 'Visual novels';
+ Doc 15, 'Special games';
+ Doc 3, 'Releases';
+ Doc 4, 'Producers';
+ Doc 16, 'Staff';
+ Doc 12, 'Characters';
+ Doc 10, 'Tags & Traits';
+ Doc 13, 'Capturing screenshots';
+}
+
+1;