i hate my life
|
@ -1,3 +1,2 @@
|
||||||
/*.db
|
/*.db
|
||||||
/config.json
|
/config.json
|
||||||
/documentation/site/js/base.js
|
|
||||||
|
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 224 KiB |
|
@ -0,0 +1,125 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="shortcut icon" href="/img/favicon.ico">
|
||||||
|
<title>BBJ</title>
|
||||||
|
<link href="/css/bootstrap-custom.min.css" rel="stylesheet">
|
||||||
|
<link href="/css/font-awesome-4.5.0.css" rel="stylesheet">
|
||||||
|
<link href="/css/base.css" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="/css/highlight.css">
|
||||||
|
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||||
|
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="/js/jquery-1.10.2.min.js"></script>
|
||||||
|
<script src="/js/bootstrap-3.0.3.min.js"></script>
|
||||||
|
<script src="/js/highlight.pack.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<!-- Collapsed navigation -->
|
||||||
|
<div class="navbar-header">
|
||||||
|
<!-- Expander button -->
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="sr-only">Toggle navigation</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a class="navbar-brand" href="/">BBJ</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Expanded navigation -->
|
||||||
|
<div class="navbar-collapse collapse">
|
||||||
|
<!-- Main navigation -->
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
<li >
|
||||||
|
<a href="/">Home</a>
|
||||||
|
</li>
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">API <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
|
||||||
|
<li >
|
||||||
|
<a href="/api_overview/">Overview & Endpoints</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li >
|
||||||
|
<a href="/errors/">Errors</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li >
|
||||||
|
<a href="/validation/">Input Validation</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
<li>
|
||||||
|
<a href="#" data-toggle="modal" data-target="#mkdocs_search_modal">
|
||||||
|
<i class="fa fa-search"></i> Search
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div id="main-content" class="span12">
|
||||||
|
<h1 id="404-page-not-found" style="text-align: center">404</h1>
|
||||||
|
<p style="text-align: center"><strong>Page not found</strong></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="col-md-12">
|
||||||
|
<hr>
|
||||||
|
<p>Documentation built with <a href="http://www.mkdocs.org/">MkDocs</a>.</p>
|
||||||
|
</footer>
|
||||||
|
<script>var base_url = '';</script>
|
||||||
|
<script data-main="/mkdocs/js/search.js" src="/mkdocs/js/require.js"></script>
|
||||||
|
<script src="/js/base.js"></script><div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="Search Modal" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="exampleModalLabel">Search</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<p>
|
||||||
|
From here you can search these documents. Enter
|
||||||
|
your search terms below.
|
||||||
|
</p>
|
||||||
|
<form role="form">
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" placeholder="Search..." id="mkdocs-search-query">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div id="mkdocs-search-results"></div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Before Width: | Height: | Size: 357 KiB After Width: | Height: | Size: 357 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 224 KiB |
|
@ -0,0 +1,153 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta name="description" content="None">
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="shortcut icon" href="./img/favicon.ico">
|
||||||
|
<title>BBJ</title>
|
||||||
|
<link href="./css/bootstrap-custom.min.css" rel="stylesheet">
|
||||||
|
<link href="./css/font-awesome-4.5.0.css" rel="stylesheet">
|
||||||
|
<link href="./css/base.css" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="./css/highlight.css">
|
||||||
|
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||||
|
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="./js/jquery-1.10.2.min.js"></script>
|
||||||
|
<script src="./js/bootstrap-3.0.3.min.js"></script>
|
||||||
|
<script src="./js/highlight.pack.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="homepage">
|
||||||
|
|
||||||
|
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<!-- Collapsed navigation -->
|
||||||
|
<div class="navbar-header">
|
||||||
|
<!-- Expander button -->
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="sr-only">Toggle navigation</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a class="navbar-brand" href=".">BBJ</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Expanded navigation -->
|
||||||
|
<div class="navbar-collapse collapse">
|
||||||
|
<!-- Main navigation -->
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
<li class="active">
|
||||||
|
<a href=".">Home</a>
|
||||||
|
</li>
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">API <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
|
||||||
|
<li >
|
||||||
|
<a href="api_overview/">Overview & Endpoints</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li >
|
||||||
|
<a href="errors/">Errors</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li >
|
||||||
|
<a href="validation/">Input Validation</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
<li>
|
||||||
|
<a href="#" data-toggle="modal" data-target="#mkdocs_search_modal">
|
||||||
|
<i class="fa fa-search"></i> Search
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="disabled">
|
||||||
|
<a rel="next" >
|
||||||
|
<i class="fa fa-arrow-left"></i> Previous
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li >
|
||||||
|
<a rel="prev" href="api_overview/">
|
||||||
|
Next <i class="fa fa-arrow-right"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="col-md-3"><div class="bs-sidebar hidden-print affix well" role="complementary">
|
||||||
|
<ul class="nav bs-sidenav">
|
||||||
|
<li class="main active"><a href="#bulletin-butter-jelly">Bulletin Butter & Jelly</a></li>
|
||||||
|
<li><a href="#a-simple-community-textboard">A simple community textboard</a></li>
|
||||||
|
</ul>
|
||||||
|
</div></div>
|
||||||
|
<div class="col-md-9" role="main">
|
||||||
|
|
||||||
|
<h1 id="bulletin-butter-jelly">Bulletin Butter & Jelly</h1>
|
||||||
|
<h2 id="a-simple-community-textboard">A simple community textboard</h2>
|
||||||
|
<h3 id="bbj-is-trivial-collection-of-python-scripts-and-database-queries-that-miraculously-shit-out-a-fully-functional-client-server-textboard">BBJ is trivial collection of python scripts and database queries that miraculously shit out a fully functional client-server textboard.</h3>
|
||||||
|
<p>See also: the <a href="https://github.com/desvox/bbj">GitHub repository</a>.</p>
|
||||||
|
<p>BBJ is heavily inspired by image boards like 4chan, but it offers a simple
|
||||||
|
account system to allow users to identify themselves and set profile
|
||||||
|
attributes like a more traditional forum. Registration is optional and there
|
||||||
|
are only minimal restrictions on anonymous participation.</p>
|
||||||
|
<p><img alt="screenshot" src="./img/screenshot.png" /></p>
|
||||||
|
<p>Being a command-line-oriented text board, BBJ has no avatars or file sharing
|
||||||
|
capabilties, so its easier to administrate and can't be used to distribute illegal
|
||||||
|
content like imageboards. It has very few dependancies and is easy to set up.</p>
|
||||||
|
<p>The API is simple and doesn't use require complex authorization schemes or session management.
|
||||||
|
It is fully documented on this site.</p></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="col-md-12">
|
||||||
|
<hr>
|
||||||
|
<p>Documentation built with <a href="http://www.mkdocs.org/">MkDocs</a>.</p>
|
||||||
|
</footer>
|
||||||
|
<script>var base_url = '.';</script>
|
||||||
|
<script data-main="./mkdocs/js/search.js" src="./mkdocs/js/require.js"></script>
|
||||||
|
<script src="./js/base.js"></script><div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="Search Modal" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
||||||
|
<h4 class="modal-title" id="exampleModalLabel">Search</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<p>
|
||||||
|
From here you can search these documents. Enter
|
||||||
|
your search terms below.
|
||||||
|
</p>
|
||||||
|
<form role="form">
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" class="form-control" placeholder="Search..." id="mkdocs-search-query">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div id="mkdocs-search-results"></div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
MkDocs version : 0.16.3
|
||||||
|
Build Date UTC : 2017-05-04 02:42:48
|
||||||
|
-->
|
|
@ -0,0 +1,62 @@
|
||||||
|
function getSearchTerm()
|
||||||
|
{
|
||||||
|
var sPageURL = window.location.search.substring(1);
|
||||||
|
var sURLVariables = sPageURL.split('&');
|
||||||
|
for (var i = 0; i < sURLVariables.length; i++)
|
||||||
|
{
|
||||||
|
var sParameterName = sURLVariables[i].split('=');
|
||||||
|
if (sParameterName[0] == 'q')
|
||||||
|
{
|
||||||
|
return sParameterName[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
var search_term = getSearchTerm(),
|
||||||
|
$search_modal = $('#mkdocs_search_modal');
|
||||||
|
|
||||||
|
if(search_term){
|
||||||
|
$search_modal.modal();
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure search input gets autofocus everytime modal opens.
|
||||||
|
$search_modal.on('shown.bs.modal', function () {
|
||||||
|
$search_modal.find('#mkdocs-search-query').focus();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Highlight.js
|
||||||
|
hljs.initHighlightingOnLoad();
|
||||||
|
$('table').addClass('table table-striped table-hover');
|
||||||
|
|
||||||
|
// Improve the scrollspy behaviour when users click on a TOC item.
|
||||||
|
$(".bs-sidenav a").on("click", function() {
|
||||||
|
var clicked = this;
|
||||||
|
setTimeout(function() {
|
||||||
|
var active = $('.nav li.active a');
|
||||||
|
active = active[active.length - 1];
|
||||||
|
if (clicked !== active) {
|
||||||
|
$(active).parent().removeClass("active");
|
||||||
|
$(clicked).parent().addClass("active");
|
||||||
|
}
|
||||||
|
}, 50);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$('body').scrollspy({
|
||||||
|
target: '.bs-sidebar',
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Toggle the `clicky` class on the body when clicking links to let us
|
||||||
|
retrigger CSS animations. See ../css/base.css for more details. */
|
||||||
|
$('a').click(function(e) {
|
||||||
|
$('body').toggleClass('clicky');
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Prevent disabled links from causing a page reload */
|
||||||
|
$("li.disabled a").click(function() {
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
|
@ -4,6 +4,6 @@
|
||||||
# Nothing magical here.
|
# Nothing magical here.
|
||||||
|
|
||||||
python3 ./mkendpoints.py
|
python3 ./mkendpoints.py
|
||||||
cd ./documentation
|
cd ./docs
|
||||||
mkdocs build
|
mkdocs build
|
||||||
cd ..
|
cd ..
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
"""
|
"""
|
||||||
This is a small script that creates the endpoint doc page. It should be
|
This is a small script that creates the endpoint doc page. It should be
|
||||||
evoked from the command line each time changes are made. It writes
|
evoked from the command line each time changes are made. It writes
|
||||||
to ./documentation/docs/api_overview.md
|
to ./docs/docs/api_overview.md
|
||||||
|
|
||||||
The code used in this script is the absolute minimum required to
|
The code used in this script is the absolute minimum required to
|
||||||
get the job done; it can be considered a crude hack at best. I am
|
get the job done; it can be considered a crude hack at best. I am
|
||||||
|
@ -129,5 +129,5 @@ for doctype in sorted(types.keys()):
|
||||||
body += "\n\n" + pydoc.getdoc(f) + "\n\n"
|
body += "\n\n" + pydoc.getdoc(f) + "\n\n"
|
||||||
body += "\n<br>\n"
|
body += "\n<br>\n"
|
||||||
|
|
||||||
with open("documentation/docs/api_overview.md", "w") as output:
|
with open("docs/docs/api_overview.md", "w") as output:
|
||||||
output.write(body)
|
output.write(body)
|
||||||
|
|