Archived
1
0
This commit is contained in:
Jeff Becker 2017-04-18 19:42:46 -04:00
parent e9e46e1f59
commit 7c6bb5c40d
35 changed files with 1928 additions and 0 deletions

338
contrib/static/krane.css Normal file
View File

@ -0,0 +1,338 @@
body {
margin: 0px;
background: #101010;
font-family: arial,sans-serif,helvetica;
color:#ffffff;
font-size: 10pt;
}
/*table {
font-size: 10pt;
}*/
a {
color: #f7acb1;
}
hr {
color: #363636;
width: 98%;
height: 0px;
border-top: 1px solid;
border-bottom: none;
}
.sitetitle {
text-align: center;
color: #ABABAB;
margin: 10px 20px 20px 20px;
}
.sitetitle h2 {
margin: 0px;
}
.sitetitle a {
color: #ABABAB;
text-decoration: none;
}
.filedescription {
font-style: italic;
}
.messageroot .highlightroot{
margin-bottom: 1px;
border: none;
background: #101010;
padding: 9px 9px 1em;
}
.message, .highlight {
margin-left: 25px;
margin-bottom: 1px;
border: 1px solid #363636;
background: #1c1c1c;
border-radius: 0px;
padding: 9px 9px 1.5em;
}
.highlight .highlightroot {
background: #EEDACB;
padding: 10px;
color: #333333;
border: 2px dashed #EE6600;
}
.image_link {
float: left;
padding-right: 5px;
position: relative;
}
.image_root {
border-radius: 0px;
border: 1px solid #363636;
}
.image {
border-radius: 0px;
border: 1px solid #363636;
}
.thread {
padding-top: 5px;
padding-left: 10px;
padding-right: 20px;
}
.message_span {
white-space: pre-wrap;
word-wrap: break-word;
}
.topicline b{
color:#ff1493;
}
.postform th {
background: #1c1c1c;
border: 1px solid #363636;
text-align: left;
padding-left: 4px;
padding-right: 5px;
}
.posttext {
width: 400px;
height: 20px;
border: 1px solid #363636;
background: #ffffff;
}
.postbutton {
width: 100px;
border: 1px solid #363636;
background: #ffffff;
}
#newthread {
background: #F7ACB1;
}
.postarea {
width: 400px;
height: 48px;
border: 1px solid #363636;
background: #ffffff;
padding: 0px;
margin: 0px;
}
.postfile {
}
.boards {
padding: 0px 2.5em 0px 10px;
}
.boards a,
.pagelist a{
text-decoration: none;
}
.evilstuff {
background-color: #333333;
border: 1px solid #666666;
border-radius: 30px;
padding: 10px;
margin-right: 10px;
position: fixed;
right: 0px;
top: 20px;
display: none;
}
.stillevil {
display: none;
}
.evilmod {
position: fixed;
right: 20px;
top: 0px;
}
.evilmod:checked ~ form .evilstuff {
display: block;
}
.evilmod:checked ~ form .stillevil {
display: inline;
}
.stillevil input {
margin: 0px;
}
.warning {
color: #FF0000;
display: none;
}
.purge_root:checked ~ .warning {
display: inline;
}
.sig_label {
color: #00FF00;
cursor: pointer;
font-weight: bold;
}
.sig_chk {
position: absolute;
opacity: 0;
z-index: -1;
}
.sig_key {
padding-left: 5px;
display: none;
}
.sig_chk:checked ~ .sig_key {
display: inline;
}
.lblhelp {
position: fixed;
top: 0px;
right: 10px;
cursor: pointer;
font-weight: bold;
}
a.lblhelp, a.lblhelp:hover {
color: #C5C8C6;
padding: 0px;
text-decoration: none;
}
.quote {
color: #00AA00;
}
.code {
background-color: #303030;
border: 1px solid #404040;
clear: right;
font-family: monospace;
font-size: 9pt;
overflow: auto;
width: 80%;
display: block;
margin: 0;
}
.datatable {
background: #141414;
border: 1px solid #3B3B3B;
border-collapse: collapse;
}
.datatable th {
background: #1C1C1C;
}
.datatable td, .datatable th {
border: 1px dotted #3B3B3B;
padding: 1px 4px;
vertical-align: top;
}
.mod {
font-family: monospace;
font-size: 9pt;
margin: 20px 10px 10px;
}
.mod tr:hover {
background-color: #282828 !important;
}
.mod table {
border-collapse: collapse;
font-size: 9pt; /* damn you chromium */
}
.dontwrap {
white-space: nowrap;
}
.right {
text-align: right;
}
.spoiler, .spoiler a:link, .spoiler a:visited {
color: black;
background: black;
}
.spoiler:hover {
color: white;
}
.spoiler:hover a:link {
color: #FF6600;
}
.spoiler:hover a:visited {
color: #FF6600;
}
.spoiler:hover a:hover {
color: #0066FF;
}
.zoi {
color: purple;
}
.op-kyn {
color: skyblue;
}
.menu-footer {
font-size: 0.7em;
text-align: center;
margin: 0.3em;
bottom: 5em;
position: fixed
}
.published {
font-size: 0.85em;
color: #898E93;
}
.menu-left {
font-size: 0.9em;
}
.board_description {
width: 400px;
padding: 10px;
font-size: 0.75em;
font-family: sans-serif;
white-space: pre-wrap;
word-wrap: break-word;
}
/*
.play_button {
background-image: url("/static/playbutton.png");
height: 53px;
width: 70px;
position: absolute;
top: calc(50% - 26px);
left: calc(50% - 35px);
}
*/
.news {
border: 1px solid #3b3b3b;
background: #141414;
margin: 10px 20px 10px 20px;
}
.news .header {
background: #1c1c1c;
font-style: italic;
padding: 3px 5px 0px 5px;
text-align: right;
border-bottom: 1px dotted #3b3b3b;
}
.news .author {
font-style: italic;
font-weight: bold;
}
.news .header .topicline .subject {
font-style: normal;
float: left;
}
.news .message_span {
padding: 10px 5px 0px 5px;
}
.news .footer {
text-align: right;
font-style: italic;
padding: 0px 5px 5px;
}
.activity {
padding: 10px 20px;
}
.activity td, .activity th {
vertical-align: top;
white-space: nowrap;
}
.post_td {
width: 100%;
padding: 0px 10px;
}
.post_td td {
text-align: right;
}
.post_td .subject {
text-align: left;
white-space: normal;
padding-left: 10px;
}
.aa {
font-family: "IPAMonaPGothic","Monapo","Mona","MS PGothic";
overflow: auto;
display: block;
margin: 0;
}

View File

@ -0,0 +1,25 @@
{{!
404.mustache -- 404 page
template parameters:
- prefix (the site prefix)
}}
<html>
<head>
<title> 404 </title>
<meta charset="utf-8" />
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
</head>
<body>
<center>
<div class="not_found">
<img src="{{prefix}}static/404.png"></img>
<div class="not_found_message">
{{#i18n.Translations}}{{resource_not_found}}{{/i18n.Translations}}
</div>
</div>
</center>
</body>
</html>

View File

@ -0,0 +1,46 @@
{{!
board.mustache, displays the contents of page N of the board
template parameters:
- board ( the model of the current page )
- page ( the page number of the current page )
board has the properties:
- Prefix ( absolute path like //site.tld/ or /path/ )
- Board ( the name of the board )
- Navbar ( a function that renders the navbar, should not be escaped )
- Threads ( a list of Thread Models with the last few replies )
}}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>{{board.Board}}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="/static/krane.css" />
</head>
<body>
{{{ board.Navbar }}}
<hr />
<div class="sitetitle">
<h2><a href="{{Prefix}}">OVERCHAN</a></h2>
<b>decentralized and distributed</b>
</div>
<center><b>{{Board.Name}}</b></center>
{{{Postform}}}
{{#Threads}}
<div class="thread">
{{{OP.RenderPost}}}
{{#Replies}}
{{{RenderPost}}}
{{/Replies}}
</div>
<hr style="clear: both;">
{{/Threads}}
<hr />
<footer>
<p class="legal">All posts on this site are the responsibility of the individual poster and not the administration, pursuant to 47 U.S.C. § 230.</p>
<p class="legal">To make a DMCA request or report illegal content, please contact the administration</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,51 @@
{{!
boardlist.mustache -- full list of every board
template parameters:
- graph ( a list of 4 string tuples: (board, posts_per_hour, posts_per_day, total_posts) )
- frontend ( the name of the frontend )
- prefix ( the site's prefix )
}}
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/site.css"></link>
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css"></link>
<title> {{frontend}} {{#i18n.Translations}}{{board_list_title}}{{/i18n.Translations}} </title>
</head>
<body>
<center>
<div class="index-outer">
<div class="index-inner">
<table id="board_graph">
<thead>
<tr>
<th> {{#i18n.Translations}}{{board_label}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{pph_label}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{ppd_label}}{{/i18n.Translations}} </th>
<th> {{#i18n.Translations}}{{total}}{{/i18n.Translations}} </th>
</tr>
</thead>
<tbody>
{{# graph}}
<tr>
<td>
<a href="{{prefix}}b/{{Board}}/">{{Board}}</a>
</td>
<td>
{{Hour}}
</td>
<td>
{{Day}}
</td>
<td>
{{All}}
</td>
</tr>
{{/ graph}}
</tbody>
</table>
</div>
</div>
</center>
</body>
</html>

View File

@ -0,0 +1,47 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<link id="current_theme" rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{catalog_title}}{{/i18n.Translations}} {{board.Name}}</title>
</head>
<body>
<!-- begin navbar -->
{{{board.Navbar}}}
<!-- end navbar -->
<center>
<div id="nntpchan_banner">
</div>
</center>
<div class="board_header">{{#i18n.Translations}}{{catalog_title}}{{/i18n.Translations}} {{board.Name}}</div>
<!-- postform -->
<hr />
<div id="catalog_container">
{{#board.Threads}}
<div class="catalog_thread">
<a class="linkThumb" href="{{OP.PostURL}}"><img src="{{OP.RepresentativeThumb}}"></a>
<div class="catalog_header">{{#i18n.Translations}}{{replies_short_label}}{{/i18n.Translations}}: {{ReplyCount}} / {{#i18n.Translations}}{{pictures_short_label}}{{/i18n.Translations}}: {{Page}}</div>
<div class="catalog_subject">{{OP.Subject}}</div>
<div class="catalog_body">
{{{OP.RenderBody}}}
</div>
</div>
{{/board.Threads}}
</div>
<script type="text/javascript">
var e = document.getElementById("nntpchan_banner");
nntpchan_inject_banners(e, "{{board.Prefix}}");
</script>
<hr/>
<footer>
<p class="legal">All posts on this site are the responsibility of the individual poster and not the administration, pursuant to 47 U.S.C. § 230.</p>
<p class="legal">To make a DMCA request or report illegal content, please contact the administration</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,25 @@
{{!
frontpage.mustache -- template for index.html
template parameters:
- boardgraph ( markup of boardPageRows instance, see srnd/model.go )
- postgraph ( markup of postsGraph instance , see srnd/model.go )
- overview ( markup of overviewModel instance , see srnd/model.go )
- totalposts ( the number of total posts we have ever seen )
- frontend ( the name of the frontend )
- prefix ( the site's prefix )
}}
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/krane.css" />
<title> OVERCHAN </title>
</head>
<body>
<a href="{{prefix}}o/">enter</a>
<hr/>
<footer>
<p class="legal">All posts on this site are the responsibility of the individual poster and not the administration, pursuant to 47 U.S.C. § 230.</p>
<p class="legal">To make a DMCA request or report illegal content, please contact the administration</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,37 @@
{{!
graph_history.mustache
template parameters:
- history ( a list of PostEntry instances, see srnd/model.go )
}}
<!doctype html>
<html>
<head>
<meta charset="utf-8"></meta>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link rel="stylesheet" href="{{prefix}}static/user.css" />
<title>{{#i18n.Translations}}{{post_history_title}}{{/i18n.Translations}}</title>
</head>
<body>
<td>
<table id="history_graph">
<thead>
<tr>
<th>{{#i18n.Translations}}{{month}}{{/i18n.Translations}}</th>
<th>{{#i18n.Translations}}{{posts}}{{/i18n.Translations}}</th>
<th></th>
</tr>
</thead>
<tbody>
{{#history.Scale}}
<tr>
<td>{{Date}}</td>
<td class="history_num">{{Num}}</td>
<td>{{OvercockGraph}}</td>
</tr>
{{/history.Scale}}
</tbody>
</table>
</td>
</body>
</html>

View File

@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{api_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{api_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{api_username}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="user" value="{{dialog.User}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{api_password_name}}{{/i18n.Translations}}
</th>
<td>
<input type="password" name="pass" value="">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{api_secret_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="secret" value="{{dialog.Secret}}">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{binary_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{binary_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{convert_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="convert" value="{{dialog.Convert}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{ffmpeg_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="ffmpeg" value="{{dialog.FFmpeg}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{sox_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="sox" value="{{dialog.Sox}}">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,66 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{cache_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{cache_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
</th>
<td>
<input type="radio" name="cache" value="file"> {{#i18n.Translations}}{{file_cache_name}}{{/i18n.Translations}}
</td>
</tr>
<tr>
<th>
</th>
<td>
<input type="radio" name="cache" value="null" checked> {{#i18n.Translations}}{{null_cache_name}}{{/i18n.Translations}}
</td>
</tr>
<!--
<tr>
<th>
</th>
<td>
<input type="radio" name="cache" value="redis"> {{#i18n.Translations}}{{redis_cache_name}}{{/i18n.Translations}}
</td>
</tr>
-->
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,56 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{crypto_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{crypto_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{host_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="host" value="{{dialog.Host}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{key_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="key" value="{{dialog.Key}}">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,56 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{db_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{db_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
</th>
<td>
<input type="radio" name="db" value="postgres" checked> {{#i18n.Translations}}{{postgres_name}}{{/i18n.Translations}}
</td>
</tr>
<tr>
<th>
</th>
<td>
<input type="radio" name="db" value="redis" > {{#i18n.Translations}}{{redis_name}}{{/i18n.Translations}}
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,72 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{frontend_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{frontend_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{frontend_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="name" value="{{dialog.Name}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{locale_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="locale" value="{{dialog.Locale}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{allow_files_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="allow_files" value="1" checked>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{enable_json_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="json" value="1">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,56 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{key_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{key_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{pubkey_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="public" value="{{dialog.Public}}" size="65" readonly>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{secretkey_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="secret" value="{{dialog.Secret}}" size="65" readonly>
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,80 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{nntp_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{nntp_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{nntp_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="nntp_name" value="{{dialog.Name}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{allow_attachments_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="allow_attachments" value="1" checked>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{allow_anon_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="allow_anon" value="1" checked>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{allow_anon_attachments_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="allow_anon_attachments" value="1">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{require_tls_prompt}}{{/i18n.Translations}}
</th>
<td>
<input type="checkbox" name="require_tls" value="1" checked>
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,72 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{postgres_db_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{postgres_db_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{host_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="host" value="{{dialog.Host}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{port_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="port" value="{{dialog.Port}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{username_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="user" value="{{dialog.Username}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{password_name}}{{/i18n.Translations}}
</th>
<td>
<input type="password" name="password" value="">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{redis_db_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{redis_db_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{host_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="host" value="{{dialog.Host}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{port_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="port" value="{{dialog.Port}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{password_name}}{{/i18n.Translations}}
</th>
<td>
<input type="password" name="password" value="">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,64 @@
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1" />
<link rel="stylesheet" href="{{board.Prefix}}static/site.css" />
<link rel="stylesheet" href="{{board.Prefix}}static/user.css" />
<script type="text/javascript" src="{{board.Prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{redis_db_install_title}}{{/i18n.Translations}}</title>
</head>
<body>
<div class="installer_header">{{#i18n.Translations}}{{redis_db_install_title}}{{/i18n.Translations}}</div>
{{#dialog.HasError}}
<p class="installer_error">{{dialog.Error}}</p>
{{/dialog.HasError}}
<form action="" method="post" autocomplete="off">
<div id="install-outer">
<div id="installer-inner">
<table class="installer-tab">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{host_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="host" value="{{dialog.Host}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{port_name}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="port" value="{{dialog.Port}}">
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{password_name}}{{/i18n.Translations}}
</th>
<td>
<input type="password" name="password" value="">
</td>
</tr>
</tbody>
</table>
</div>
{{#dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{next_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
{{^dialog.HasNext}}
<input type="submit" value="{{#i18n.Translations}}{{finish_prompt}}{{/i18n.Translations}}" class="button" />
{{/dialog.HasNext}}
</div>
</form>
{{#dialog.HasPrevious}}
<div class="back_button">
<form action="" method="post">
<input type="hidden" name="back" value="true" />
<input type="submit" value="{{#i18n.Translations}}{{previous_prompt}}{{/i18n.Translations}}" class="button" />
</form>
</div>
{{/dialog.HasPrevious}}
</body>
</html>

View File

@ -0,0 +1,23 @@
{{!
keygen.mustache -- page containing a newly generated tripcode
template parameters:
- prefix ( the site prefix )
- public ( the public key in hex )
- secret ( the secret key in hex )
- tripcode ( html version of the public key )
}}
<!doctype html>
<html>
<head>
<meta charset="utf-8"></meta>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
<title>{{#i18n.Translations}}{{new_tripcode_title}}{{/i18n.Translations}}</title>
</head>
<body>
<pre>{{#i18n.Translations}}{{new_tripcode_label}}{{/i18n.Translations}}:
<div id="secret_key">{{#i18n.Translations}}{{secret_key}}{{/i18n.Translations}}: {{secret}}</div><div id="public_key">{{#i18n.Translations}}{{public_key}}{{/i18n.Translations}}: {{public}}</div><div>{{#i18n.Translations}}{{tripcode}}{{/i18n.Translations}}: <span class="tripcode" id="capcode_key">{{{tripcode}}}</span></div>
</pre>
</body>
</html>

View File

@ -0,0 +1,32 @@
{{!
live.mustache -- live ui
template parameters:
- prefix ( site prefix )
}}
<!doctype html>
<html>
<head>
<title> {{#i18n.Translations}}{{overboard_title}}{{/i18n.Translations}} </title>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale = 1.0,maximum-scale = 1.0" />
<link rel="stylesheet" href="{{prefix}}static/livechan.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<style type="text/css" id="convo_filter">
</style>
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
</head>
<body>
<noscript>you need js for livechan mode</noscript>
<script type="text/javascript" >
var e = document.createElement("div");
e.setAttribute("id", "chat");
e.setAttribute("style", "position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;");
document.body.appendChild(e);
var board = "";
if (location.hash != "" ) {
board = location.hash.substr(1);
}
new Chat(e, board, { prefix : "{{prefix}}" });
</script>
</body>
</html>

View File

@ -0,0 +1,49 @@
{{!
modpage.mustache -- the moderator panel when logged in
template parameters:
- prefix ( the site's prefix )
}}
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<!-- yes it uses js -->
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
<script type="text/javascript" src="{{prefix}}static/mod.js"></script>
<script type="text/javascript" src="{{prefix}}static/feed.js"></script>
<title> {{#i18n.Translations}}{{modpage_title}}{{/i18n.Translations}} </title>
</head>
<body onload="main()">
<div id="nntpchan_mod_result"></div>
<div class="nntpchan_feed_pane">
<pre> Add Feed </pre>
<label for="add_feed_host">Host</label>
<input id="add_feed_host" />
<label for="add_feed_host">Port</label>
<input id="add_feed_port" />
<label for="add_feed_name">Name</label>
<input id="add_feed_name" />
<button onclick="nntp_feed_add()">Add</button>
</div>
<div class="nntpchan_feed_pane">
<pre> Remove Feed </pre>
<label for="del_feed_name">Name</label>
<input id="del_feed_name" />
<button onclick="nntp_feed_del()">Remove</button>
</div>
<div class="nntpchan_feed_pane">
<pre> Sync Feeds </pre>
<button onclick="nntpchan_admin('feed.sync')">Sync All</button>
</div>
<div id="nntpchan_feed_result"></div>
<div id="nntpchan_feeds"></div>
<script>
nntp_feed_update();
</script>
<noscript>
<b>{{#i18n.Translations}}{{nojs_info}}{{/i18n.Translations}}</b>
</noscript>
</body>
</html>

View File

@ -0,0 +1,16 @@
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<title>{{#i18n.Translations}}{{login}}{{/i18n.Translations}}</title>
</head>
<body>
<form action="login" method="POST" name="modlogin">
<label for="mod_key">{{#i18n.Translations}}{{secret_key}}{{/i18n.Translations}}</label>
<input type="password" id="mod_key" name="privkey" />
<input type="submit" value="{{#i18n.Translations}}{{login}}{{/i18n.Translations}}" />
{{{csrfField}}}
</form>
</body>
</html>

View File

@ -0,0 +1,20 @@
{{!
modlogin_result.mustache -- shows the result of a login attempt
template parameters:
- prefix ( the site prefix )
- mod_prefix ( the prefix to the mod panel, could be something like https://mod.site.tld/ or /mod/ )
- message ( the message returned from the login attempt )
- fail ( present if the login failed ) // not yet added
}}
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link rel="stylesheet" href="{{prefix}}static/user.css" />
<meta http-equiv="refresh" content="1; {{mod_prefix}}"></meta>
<title>{{#i18n.Translations}}{{login}}{{/i18n.Translations}}</title>
</head>
<body>
<p>{{message}}</p>
</body>
</html>

View File

@ -0,0 +1,109 @@
{{!
modpage.mustache -- the moderator panel when logged in
template parameters:
- prefix ( the site's prefix )
}}
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<!-- yes it uses js -->
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
<script type="text/javascript" src="{{prefix}}static/mod.js"></script>
<title> {{#i18n.Translations}}{{modpage_title}}{{/i18n.Translations}} </title>
</head>
<body onload="main()">
<div>
<div> {{#i18n.Translations}}{{post_actions_label}}{{/i18n.Translations}} </div>
<hr />
<div>
<label for="nntpchan_mod_target">{{#i18n.Translations}}{{target_label}}{{/i18n.Translations}}</label>
<input id="nntpchan_mod_target" type="text" />
</div>
<div>
<button onclick="nntpchan_ban()">{{#i18n.Translations}}{{ban_url_prompt}}{{/i18n.Translations}}</button>
<button onclick="nntpchan_delete()">{{#i18n.Translations}}{{delete_url_prompt}}{{/i18n.Translations}}</button>
<button onclick="nntpchan_unban()">{{#i18n.Translations}}{{unban_ip_prompt}}{{/i18n.Translations}}</button>
</div>
</div>
<hr />
<div>
<div> {{#i18n.Translations}}{{key_actions_label}}{{/i18n.Translations}} </div>
<div>
<label for="nntpchan_board_target">{{#i18n.Translations}}{{pubkey_label}}{{/i18n.Translations}}:</label>
<input type="text" id="nntpchan_key_target" />
</div>
<div>
<button onclick="nntpchan_key_add()">{{#i18n.Translations}}{{add_key_prompt}}{{/i18n.Translations}}</button>
<button onclick="nntpchan_key_del()">{{#i18n.Translations}}{{remove_key_prompt}}{{/i18n.Translations}}</button>
</div>
</div>
<hr />
<div>
<div> {{#i18n.Translations}}{{nntp_login_label}}{{/i18n.Translations}} </div>
<div>
<label for="nntpchan_nntp_username">{{#i18n.Translations}}{{username}}{{/i18n.Translations}}:</label>
<input id="nntpchan_nntp_username" />
</div>
<div>
<label for="nntpchan_nntp_passwd">{{#i18n.Translations}}{{password}}{{/i18n.Translations}}:</label>
<input type="password" id="nntpchan_nntp_passwd" />
</div>
<div>
<button onclick="nntpchan_admin_nntp('nntp.login.add')">{{#i18n.Translations}}{{add_user_prompt}}{{/i18n.Translations}}</button>
</div>
<div>
<button onclick="nntpchan_admin_nntp('nntp.login.del')">{{#i18n.Translations}}{{remove_user_prompt}}{{/i18n.Translations}}</button>
</div>
</div>
<hr />
<div>
<div> {{#i18n.Translations}}{{board_actions_label}}{{/i18n.Translations}} </div>
<div>
<label for="nntpchan_board_target">{{#i18n.Translations}}{{board_name_title}}{{/i18n.Translations}}:</label>
<input id="nntpchan_board_target" />
</div>
<div>
<button onclick="nntpchan_admin_board('frontend.add')">{{#i18n.Translations}}{{add_board_prompt}}{{/i18n.Translations}}</button>
</div>
<div>
<button onclick="nntpchan_admin_board('frontend.regen')">{{#i18n.Translations}}{{regenerate_prompt}}{{/i18n.Translations}}</button>
</div>
<div>
<button onclick="nntpchan_admin_board('frontend.ban')">{{#i18n.Translations}}{{ban_prompt}}{{/i18n.Translations}}</button>
<button onclick="nntpchan_admin_board('frontend.unban')">{{#i18n.Translations}}{{unban_prompt}}{{/i18n.Translations}}</button>
</div>
<div>
<button onclick="nntpchan_admin_board('frontend.nuke')">{{#i18n.Translations}}{{nuke_prompt}}{{/i18n.Translations}}</button>
</div>
</div>
<hr />
<div>
<div>
{{#i18n.Translations}}{{light_actions_label}}{{/i18n.Translations}}
</div>
<div>
<button onclick="nntpchan_admin('template.reload')">{{#i18n.Translations}}{{reload_templates_prompt}}{{/i18n.Translations}}</button>
</div>
</div>
<hr />
<div>
<label>{{#i18n.Translations}}{{heavy_actions_label}}{{/i18n.Translations}}</label>
<div>
<button onclick="nntpchan_admin('frontend.regen')">{{#i18n.Translations}}{{regenerate_markup_prompt}}{{/i18n.Translations}}</button>
<button onclick="nntpchan_admin('thumbnail.regen')">{{#i18n.Translations}}{{regenerate_thumbs_prompt}}{{/i18n.Translations}}</button>
<button onclick="nntpchan_admin('feed.sync')">{{#i18n.Translations}}{{feed_sync_prompt}}{{/i18n.Translations}}</button>
<button onclick="nntpchan_admin('store.expire')">{{#i18n.Translations}}{{expire_old_prompt}}{{/i18n.Translations}}</button>
</div>
</div>
<div>
<a href="{{prefix}}mod/feeds">nntp feed management</a>
</div>
<div id="nntpchan_mod_result"></div>
<noscript>
<b>{{#i18n.Translations}}{{nojs_info}}{{/i18n.Translations}}</b>
</noscript>
</body>
</html>

View File

@ -0,0 +1,56 @@
{{!
navbar.mustache -- element on the top of each nod-mod page
TODO: make this not suck, have a board list, have board page list
template parameters:
- name ( the name of whatever resource we are on, board/thread )
- frontend ( the name of the frontend we are on )
- links ( a list of Link Models to display )
- prefix ( site prefix )
}}
<div class="navbar">
<span class="navbar-name">
<span class="board_title">{{name}}</span>
{{#i18n.Translations}}{{navbar_on}}{{/i18n.Translations}}
<span class="frontend_title">{{frontend}}</span>
</span>
<span class="navbar-sep">
|
</span>
<span class="navbar-links">
<span class="navbar-links-title">
Pages:
</span>
<span class="navbar-link"><a href="{{prefix}}static/search.html">Search</a></span>
{{# links }}
<span class="navbar-link"><a href="{{LinkURL}}">{{Text}}</a></span>
{{/ links }}
</span>
<span class="navbar-sep">
|
</span>
<span class="navbar-links">
<span class="navbar-link"><a href="{{prefix}}">{{#i18n.Translations}}{{front_page_title}}{{/i18n.Translations}}</a></span>
</span>
<span class="navbar-sep">
|
</span>
<span class="navbar-links">
<span class="navbar-link"><a href="{{prefix}}o/">{{#i18n.Translations}}{{overboard_title}}{{/i18n.Translations}}</a></span>
</span>
<span class="navbar-sep">
|
</span>
<span class="navbar-links">
<span class="navbar-link"><label onclick="enable_theme('{{prefix}}','bloodgod')">bloodgod</a></span>
<span class="navbar-link"><label onclick="enable_theme('{{prefix}}','dayman')">dayman</a></span>
<span class="navbar-link"><label onclick="enable_theme('{{prefix}}','tomorrow')">tomorrow</a></span>
<span class="navbar-link"><label onclick="enable_theme('{{prefix}}','site')">yotsuba</a></span>
</span>
<span class="navbar-sep">
|
</span>
</div>
<hr />

View File

@ -0,0 +1,56 @@
<html>
<head>
<title>{{#i18n.Translations}}{{new_board_title}}{{/i18n.Translations}}</title>
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link rel="stylesheet" href="{{prefix}}static/user.css" />
<script type="text/javascript" src="{{prefix}}static/newboard.js">
</script>
</head>
<body>
<p>{{#i18n.Translations}}{{first_post_label}}{{/i18n.Translations}}</p>
<hr />
<form action="{{prefix}}post/" enctype="multipart/form-data" name="post" method="post" id="postform" >
<div id="postform-outer">
<div id="postform-inner">
<table class="postform">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{board_name_title}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="name" value="" id="boardname" />
<button onclick="createBoard()">Create Board</button>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{comment}}{{/i18n.Translations}}
</th>
<td>
<textarea id="postform_message" name="message" cols=40 rows=5></textarea>
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{captcha}}{{/i18n.Translations}}
</th>
<td>
<img id="captcha_img" src="{{prefix}}captcha/img" alt="captcha" />
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{solution}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="captcha" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form>
</body>
</html>

View File

@ -0,0 +1,25 @@
{{! overview.mustache
paramters:
- overview (list of PostModels in order of last posted)
}}
<table id="overview_graph">
<thead>
<tr>
<th>{{#i18n.Translations}}{{newsgroup}}{{/i18n.Translations}}</th>
<th>{{#i18n.Translations}}{{posted}}{{/i18n.Translations}}</th>
<th>{{#i18n.Translations}}{{subject}}{{/i18n.Translations}}</th>
</tr>
</thead>
<tbody>
{{#overview}}
<tr>
<td><a href="{{Prefix}}b/{{Board}}/">{{Board}}</td>
<td>{{Date}}</td>
<td><a href="{{PostURL}}">{{Truncate.Subject}}</a></td>
</tr>
{{/overview}}
</tbody>
</table>

View File

@ -0,0 +1,37 @@
<div id="{{post.PostHash}}"
{{#OP}}
class="messageroot"
{{/OP}}
{{^OP}}
class="message"
{{/OP}}
data-frontend="{{post.Frontend}}"
data-newsgroup="{{post.Board}}"
data-msgid="{{post.MessageID}}"
data-msgidhash="{{post.PostHash}}"
data-rootmsgid="{{post.Reference}}"
data-rootmsgidhash="{{post.ReferenceHash}}"
{{#post.Sage}}
data-sage="1"
{{/post.Sage}}
{{#post.IsI2P}}
data-origin="i2p"
{{/post.IsI2P}}
{{#post.IsTor}}
data-origin="tor"
{{/post.IsTor}}
{{#post.IsClearnet}}
data-origin="clearnet"
{{/post.IsClearnet}}
data-posturl="{{post.PostURL}}">
{{#post.Attachments}}
<a href="{{Source}}" class="image_link" target="_blank" title="{{Filename}}"><img src="{{Thumbnail}}" class="image" /></a>
{{/post.Attachments}}
<a name="{{post.PostHash}}"></a><span class="topicline"><b>{{post.subject}}</b> {{post.Name}} <span class="published">{{post.Posted}}</span> <a href="{{post.PostURL}}" onclick="return '>>{{post.ShortHash}}';">&#8470;</a>
<a href="{{post.PostURL}}" onclick="return quickreply('${articlehash}', '${articlehash_full}');">&#8470; {{post.ShortHash}}</a>
</span>
<span class="frontend"> {{post.MessageID}} </span>
<br /><br />
<span class="message_span">{{post.RenderBodyPre}}</span>
<br style="clear: both;" />
</div>

View File

@ -0,0 +1,11 @@
<!doctype html>
<html>
<meta charset="utf-8" />
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
<meta http-equiv="refresh" content="5; {{redirect_url}}" />
<body>
<pre>{{#i18n.Translations}}{{post_failed_label}}{{/i18n.Translations}}: {{reason}}</pre>
</body>
</html>

View File

@ -0,0 +1,49 @@
<!doctype html>
<html>
<head>
<title> try again </title>
<meta charset="utf-8" />
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link rel="stylesheet" href="{{prefix}}static/user.css" />
</head>
<body>
<form enctype="multipart/form-data" name="post" method="post">
{{#attachment}}
<input type="hidden" name="attachment_data" value="{{attachment}}" />
<input type="hidden" name="attachment_filename" value="{{attachment_filename}}" />
<input type="hidden" name="attachment_mime" value="{{attachment_type}}" />
{{/attachment}}
<input type="hidden" name="reference" value="{{reference}}" />
<input type="hidden" name="name" value="{{name}}" />
<input type="hidden" name="subject" value="{{subject}}" />
<input type="hidden" name="captcha_id" value="{{captcha_id}}" />
<input type="hidden" name="message" value="{{message}}" />
<div id="postform-outer">
<div id="postform-inner">
<div>{{fail_message}}</div>
<table class="postform">
<tbody>
<tr>
<th>
{{#i18n.Translations}}{{captcha}}{{/i18n.Translations}}
</th>
<td>
<img id="captcha_img" src="{{prefix}}captcha/{{captcha_id}}.png" alt="captcha" />
</td>
</tr>
<tr>
<th>
{{#i18n.Translations}}{{solution}}{{/i18n.Translations}}
</th>
<td>
<input type="text" name="captcha" />
<input type="submit" value="Post" class="button" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form>
</body>
</html>

View File

@ -0,0 +1,17 @@
{{!
post_success.mustache -- shown when we do a successful post
template parameters:
- redirect_url ( the url of the next page we should redirect to )
- message_id ( the value of the Message-ID header in the post we made, the truncated sha1 of this is the >>posthash )
}}
<!doctype html>
<html>
<meta charset="utf-8" />
<link rel="stylesheet" href="{{prefix}}static/site.css" />
<link id="current_theme" rel="stylesheet" href="{{prefix}}static/user.css" />
<script type="text/javascript" src="{{prefix}}static/nntpchan.js"></script>
<meta http-equiv="refresh" content="4; {{redirect_url}}" />
<body>
<pre>{{#i18n.Translations}}{{posted_as_label}}{{/i18n.Translations}} {{message_id}}</pre>
</body>
</html>

View File

@ -0,0 +1,42 @@
{{!
postform.mustache -- the form for posting
template parameters:
- post_url ( the url of the post form )
- reference ( the post we are replying to, or empty string if it's an op )
- button ( the text for the reply button )
- files ( bool, do we allow attachments ? )
- csrf ( csrf token )
}}
<div class="postform" align="center">
<form method="POST" action="{{post_url}}" enctype="multipart/form-data">
<input type="hidden" name="reference" value="{{reference}}" id="postform_reference"/>
<table cellspacing="1" cellpadding="0">
<tr>
<th>Name</th>
<td><input type="text" name="name" class="posttext" /></td>
</tr>
<tr>
<th>Subject</th>
<td><input type="text" name="subject" class="posttext" /></td>
</tr>
<tr>
<th>Comment</th>
<td><textarea name="message" class="postarea"></textarea></td>
</tr>
{{#files}}
<tr>
<th>File</th>
<td>
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td><input type="file" name="file" class="postfile" multiple /></td>
<td align="right"><input type="submit" value="{{button}}" class="postbutton"/></td>
</tr>
</table>
</td>
</tr>
{{/files}}
</table>
</form>
</div>

View File

@ -0,0 +1,25 @@
{{!
posts graph.mustache -- post frequence graph
parameters:
* graph - a postsGraph instance (see srnd/model.go)
}}
<table id="posts_graph">
<thead>
<tr>
<th>{{#i18n.Translations}}{{day}}{{/i18n.Translations}}</th>
<th>{{#i18n.Translations}}{{posts}}{{/i18n.Translations}}</th>
<th></th>
</tr>
</thead>
<tbody>
{{#graph.Scale}}
<tr>
<td>{{Day}}</td>
<td>{{Num}}</td>
<td>{{OvercockGraph}}</td>
</tr>
{{/graph.Scale}}
</tbody>
</table>

View File

@ -0,0 +1,44 @@
{{!
thread.mustache -- renders to a thread-*.html page, shows the entire thread
template parameters:
- board ( the Board Model of the board this thread was posted in )
- thread ( the Thread Model of the current thread being rendered )
Thread Model attributes:
- OP , the Post Model of the original poster
- Replies , a list of all the replies or empty if none
- Board , the name of the Board this thread is on
- BoardURL , the url that points to the board index page
}}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>{{board.Board}}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="/static/krane.css" />
</head>
<body>
{{{ board.Navbar }}}
<hr />
<div class="sitetitle">
<h2><a href="{{thread.Prefix}}">OVERCHAN</a></h2>
<b>decentralized and distributed</b>
</div>
<center><b>{{Board.Name}}</b></center>
{{{Postform}}}
<div class="thread">
{{{OP.RenderPost}}}
{{#Replies}}
{{{RenderPost}}}
{{/Replies}}
</div>
<hr style="clear: both;">
<hr />
<footer>
<p class="legal">All posts on this site are the responsibility of the individual poster and not the administration, pursuant to 47 U.S.C. § 230.</p>
<p class="legal">To make a DMCA request or report illegal content, please contact the administration</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,34 @@
{{!
ukko.mustache -- overboard, contains the last threads posted regardless of newsgroup
template parameters:
- prefix ( site prefix )
- threads ( a list of Thread Models that represent the latest threads )
}}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>overboard</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="{{prefix}}static/krane.css" />
</head>
<body>
<hr />
<center><b>OVERCHAN</b></center>
{{#threads}}
<div class="thread">
{{{OP.RenderPost}}}
{{#Replies}}
{{{RenderPost}}}
{{/Replies}}
</div>
<hr style="clear: both;">
{{/threads}}
<hr />
<footer>
<p class="legal">All posts on this site are the responsibility of the individual poster and not the administration, pursuant to 47 U.S.C. § 230.</p>
<p class="legal">To make a DMCA request or report illegal content, please contact the administration</p>
</footer>
</body>
</html>