Compare commits

...

10 commits

Author SHA1 Message Date
q
55ad283eff dont include uploads 2024-11-14 00:44:02 -05:00
q
9aa9815a78 pull nov 14 2024-11-14 00:42:53 -05:00
q
dea82c4913 bug list 2 2024-11-13 01:23:26 -05:00
q
44c17d0b56 bug list 2024-11-13 01:22:33 -05:00
q
cd92e95a10 post pre release fixes 2024-11-13 01:14:20 -05:00
q
db0a088492 pre release fixes 3 2024-11-13 01:05:42 -05:00
q
81e9489b8b pre release fixes 2' 2024-11-12 19:40:40 -05:00
q
6cca2a6ab5 pre release fixes 2024-11-12 19:40:29 -05:00
q
79de710800 pre release 2024-11-12 16:45:42 -05:00
Quentin Wolkensperg
31022358ed close to prerelase 2024-11-11 14:52:00 -05:00
283 changed files with 3619 additions and 147 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
.DS_Store
.htpasswd
werc/etc/*
transfer/uploads/*

View file

@ -1,23 +1,51 @@
services:
werc:
build:
network: host
dockerfile: Dockerfile
context: .
container_name: werc
ports:
- 80:80
- 3080:80
environment:
- HOSTNAME=thirdculture.top
volumes:
- werc:/var/www/werc
- lighttpd:/etc/lighttpd
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
tty: true
networks:
- default-werc
gossa:
image: pldubouilh/gossa
container_name: gossa
ports:
- 8001:8001
- 3001:8001
volumes:
- ./werc/sites/thirdculture.top/_files:/shared
- ./werc/sites/thirdculture.top/_files:/shared
- ./werc/sites/ppl.thirdculture.top:/shared/people
networks:
- default-werc
transfer:
image: dutchcoders/transfer.sh:latest
container_name: transfer
ports:
- "3880:8080"
command: ["--provider", "local", "--basedir", "/uploads/", "--web-path", "/web/"]
volumes:
- ./transfer/uploads:/uploads
- ./transfer/tshweb:/web
restart: always
networks:
- default-werc
networks:
default-werc:
driver: bridge
volumes:
werc:
driver: local

View file

@ -0,0 +1,6 @@
$HTTP["host"] =~ "^events\.thirdculture\.top$" {
index-file.names = ( )
server.error-handler-404 = "/werc.rc"
alias.url += ( "/werc.rc" => "/var/www/werc/bin/werc.rc" )
cgi.assign += ( ".rc" => "")
}

View file

@ -14,7 +14,11 @@ $HTTP["host"] =~ "^files\.thirdculture\.top$" {
"" => (
(
"host" => "gossa",
"port" => 8001
"port" => 8001,
"headers" => (
"Host" => "$HTTP_HOST",
"X-Forwarded-For" => "$REMOTE_ADDR"
)
)
)
)

View file

@ -0,0 +1,6 @@
$HTTP["host"] =~ "^music\.thirdculture\.top$" {
index-file.names = ( )
server.error-handler-404 = "/werc.rc"
alias.url += ( "/werc.rc" => "/var/www/werc/bin/werc.rc" )
cgi.assign += ( ".rc" => "")
}

View file

@ -0,0 +1,6 @@
$HTTP["host"] =~ "^social\.thirdculture\.top$" {
index-file.names = ( )
server.error-handler-404 = "/werc.rc"
alias.url += ( "/werc.rc" => "/var/www/werc/bin/werc.rc" )
cgi.assign += ( ".rc" => "")
}

View file

@ -0,0 +1,19 @@
$HTTP["host"] =~ "up\.thirdculture\.top" {
server.document-root = "/var/www/localhost/htdocs"
proxy.server = (
"" => (
"localhost" => (
"host" => "transfer",
"port" => 8080,
"path" => "/web",
"headers" => (
"Host" => "$HTTP_HOST",
"X-Forwarded-For" => "$REMOTE_ADDR"
)
)
)
)
proxy.balance = "round-robin"
}

View file

@ -0,0 +1,6 @@
$HTTP["host"] =~ "^visual\.thirdculture\.top$" {
index-file.names = ( )
server.error-handler-404 = "/werc.rc"
alias.url += ( "/werc.rc" => "/var/www/werc/bin/werc.rc" )
cgi.assign += ( ".rc" => "")
}

View file

@ -20,6 +20,7 @@ server.modules = (
"mod_access",
# "mod_cml",
# "mod_trigger_b4_dl",
"mod_authn_file",
"mod_auth",
# "mod_status",
# "mod_setenv",
@ -37,7 +38,10 @@ server.modules = (
"mod_accesslog"
)
# }}}
# DEBUG
#setenv.add-response-header = ( "X-Debug" => "true" )
#debug.log-request-header = "enable"
#debug.log-response-header = "enable"
# {{{ includes
include "mime-types.conf"
# uncomment for cgi support

38
scripts/add_person.sh Executable file
View file

@ -0,0 +1,38 @@
#!/bin/bash
# Ensure the script is run with exactly two arguments
if [ $# -ne 2 ]; then
echo "Usage: $0 <path> <name>"
exit 1
fi
# Define variables
path="$1"
name="$2"
# Create the folder structure
mkdir -p "$path/$name/_werc" "$path/$name/blog/_werc"
# Create the first config file (not under blog)
cat > "$path/$name/_werc/config" <<EOF
extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki
conf_enable_cssedit $name
css_file='_werc/style.css'
EOF
# Create the second config file (under blog)
cat > "$path/$name/blog/_werc/config" <<EOF
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=$name
blogTitle='$name Feed'
blogDesc=''
EOF
# Create the style.css file
echo "/* Put custom styles here */" > "$path/$name/_werc/style.css"
# Output a success message
echo "Folder structure created successfully at $path/$name"

35
scripts/add_web_person.rc Normal file
View file

@ -0,0 +1,35 @@
#!/bin/rc
# Check if the correct number of arguments are provided
if (~ $#argv 2) {
echo "Usage: $0 <path> <name>"
exit 1
}
# Assign arguments to variables
path = $argv[1]
name = $argv[2]
# Create the folder structure
mkdir -p $path/$name/_werc
mkdir -p $path/$name/blog/_werc
# Create the first config file (not under blog)
echo "extraHeaders='<link rel=\"stylesheet\" type=\"text/css\" href=\"_werc/style.css\">'" > $path/$name/_werc/config
echo "conf_enable_wiki" >> $path/$name/_werc/config
echo "conf_enable_cssedit $name" >> $path/$name/_werc/config
echo "css_file='_werc/style.css'" >> $path/$name/_werc/config
echo "" >> $path/$name/_werc/config
# Create the second config file (under blog)
echo "conf_enable_wiki" > $path/$name/blog/_werc/config
echo "conf_enable_blog" >> $path/$name/blog/_werc/config
echo "conf_blog_only_pull=0" >> $path/$name/blog/_werc/config
echo "conf_blog_editors=$name" >> $path/$name/blog/_werc/config
echo "" >> $path/$name/blog/_werc/config
# Create the style.css file
touch $path/$name/_werc/style.css
# Output a success message
echo "Folder structure created successfully at $path/$name"

14
transfer/tshweb/404.html Normal file
View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Third Culture Upload</title>
<link rel="stylesheet" href="styles/main.css">
</head>
<body>
<br/>
<p style="color: red; text-align: center;">Content not found!</p>
<p style="color: red; text-align: center;">404</p>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Third Culture Upload</title>
<link rel="stylesheet" href="../styles/main.css">
</head>
<body>
<div class="wrapper">
<br />
<h2 class="page-title">{{.Filename}}</h2>
<code>
type: <b>{{.ContentType}}</b>
size: <b>{{.ContentLength | format "#,###."}}</b> bytes
</code>
<br />
<audio id="audio-player" class="preview-audio" controls preload="auto" data-setup='{}'>
<source src="{{.URL}}" type="{{.ContentType}}">
</source>
</audio>
<p class="dwn"><a href="{{.URLGet}}"> download</a></p>
<div class="qrcode">
<img src="data:image/png;base64,{{.QRCode}}" />
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Third Culture Upload</title>
<link rel="stylesheet" href="../styles/main.css">
</head>
<body>
<div class="wrapper">
<br />
<h2 class="page-title">{{.Filename}}</h2>
<code>
type: <b>{{.ContentType}}</b>
size: <b>{{.ContentLength | format "#,###."}}</b> bytes
</code>
<br />
<p class="dwn"><a href="{{.URLGet}}"> download</a></p>
<div class="qrcode">
<img src="data:image/png;base64,{{.QRCode}}" />
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Third Culture Upload</title>
<link rel="stylesheet" href="../styles/main.css">
</head>
<body>
<div class="wrapper">
<br />
<h2 class="page-title">{{.Filename}}</h2>
<code>
type: <b>{{.ContentType}}</b>
size: <b>{{.ContentLength | format "#,###."}}</b> bytes
</code>
<br />
<div class="preview-image"><img src="{{.URL}}" alt=""></div>
<p class="dwn"><a href="{{.URLGet}}"> download</a></p>
<div class="qrcode">
<img src="data:image/png;base64,{{.QRCode}}" />
</div>
</body>
</html>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Third Culture Upload</title>
<link rel="stylesheet" href="../styles/main.css">
</head>
<body>
<div class="wrapper">
<br />
<h2 class="page-title">{{.Filename}}</h2>
<code>
type: <b>{{.ContentType}}</b>
size: <b>{{.ContentLength | format "#,###."}}</b> bytes
</code>
<br />
<div class="md-preview">{{.Content}}</div>
<p class="dwn"><a href="{{.URLGet}}"> download</a></p>
<div class="qrcode">
<img src="data:image/png;base64,{{.QRCode}}" />
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Third Culture Upload</title>
<link rel="stylesheet" href="../styles/main.css">
</head>
<body>
<div class="wrapper">
<br />
<h2 class="page-title">{{.Filename}}</h2>
<code>
type: <b>{{.ContentType}}</b>
size: <b>{{.ContentLength | format "#,###."}}</b> bytes
</code>
<br />
<video id="video-player" class="prev-video" controls preload="auto" data-setup='{}'>
<source src="{{.URL}}" type="{{.ContentType}}">
</source>
</video>
<p class="dwn"><a href="{{.URLGet}}"> download</a></p>
<div class="qrcode">
<img src="data:image/png;base64,{{.QRCode}}" />
</div>
</div>
</body>
</html>

BIN
transfer/tshweb/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,4 @@
<a href="{{.URLGet}}" class="btn-cta btn"> download</i> </a> <br/><br/>
<div class="qrcode">
<img src="data:image/png;base64,{{.QRCode}}"/>
</div>

View file

@ -0,0 +1,4 @@
<br/>
<h2 class="page-title">{{.Filename}}</h2>
<h4>type: <b>{{.ContentType}}</b></h4>
<h4>size: <b>{{.ContentLength | format "#,###."}}</b> bytes</h4>

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Third Culture Upload</title>
<link rel="stylesheet" href="styles/main.css">
</head>
<body>
<h1><span class="accent">Third Culture</span> Upload</h1>
<form action="https://up.thirdculture.top" method="POST" enctype="multipart/form-data">
<label for="fileInput">Choose file:</label>
<input type="file" name="file" id="fileInput" required />
<br><br>
<button type="submit">Upload</button>
</form>
<p><br></p>
<p>Make sure to copy the link in the next page!</p>
<p>More info on third culture upload <a href="scripts/info.html">here</a>.</p>
<p><br></p>
<svg version="1.1" style="fill:none;width:75px;height:75px;" width="50" height="50" viewBox="0 0 50 50" id="svg3" sodipodi:docname="logo.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs3" />
<path style="fill:#000000;stroke:#000000;stroke-width:1.51515px;stroke-linecap:round;stroke-linejoin:round"
d="m 0.75757498,49.242423 v 0 V 0.75757498 H 49.242425 V 49.242423 Z" id="path1" />
<path style="fill:none;stroke:#a4d1ad;stroke-width:1.51515px;stroke-linecap:round;stroke-linejoin:round"
d="m 20.454546,38.636362 v 0 l 9.090908,-9.090909 m -9.090908,0 v 0 l 9.090908,9.090909" id="path2" />
<path style="fill:none;stroke:#aea3f0;stroke-width:4.24243px;stroke-linecap:round;stroke-linejoin:round"
d="m 6.8181812,40.151514 v 0 L 25,9.8484837 43.181819,40.151514" id="path3" />
</svg>
</body>
</html>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Third Culture Upload</title>
<link rel="stylesheet" href="../styles/main.css">
</head>
<body>
<h1>up.thirdculture.top info</h1>
<p>Third culture upload supports uploading through the browser but also using the terminal as well you can find more details on the <a href="https://github.com/dutchcoders/transfer.sh">transfer.sh github</a>. I will include some simple examples here for quick reference.</p>
</body>
</html>

View file

@ -0,0 +1,99 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background-color: #121212;
color: #e0e0e0;
padding: 20px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
h1 {
color: #9b4d96;
margin-bottom: 20px;
}
.preview-image {
text-align: center;
}
.preview-image img {
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
.page-title {
text-align: center;
color: #9b4d96;
}
.accent {
color: #7bbc7f;
}
form {
background-color: #1e1e1e;
padding: 20px;
border-radius: 8px;
width: 300px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5);
}
label {
font-size: 16px;
color: #ddd;
margin-bottom: 10px;
display: block;
}
input[type="file"] {
width: 100%;
padding: 10px;
margin: 10px 0;
border: 2px solid #9b4d96;
background-color: #333;
color: #fff;
border-radius: 4px;
}
input[type="file"]:hover {
border-color: #be2b90;
}
button {
background-color: #9b4d96;
color: #fff;
padding: 12px;
border: none;
border-radius: 4px;
width: 100%;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
}
.dwn {
text-align: center;
margin-top: 5px;
margin-bottom: 15px;
}
button:hover {
background-color: #be2b90;
}
button:active {
background-color: #9b4d96;
}
.qrcode {
text-align: center;
}

View file

@ -49,7 +49,7 @@ fn blagh_init {
if not if(~ $req_path $blagh_uri^index.rss)
blagh_setup_feed_handlers rss20.tpl 'text/xml; charset=utf-8'
if not if(~ $req_path $blagh_uri^feed.json)
if not if(~ $req_path $blagh_uri^feed.json)
blagh_setup_feed_handlers jsonfeed.tpl 'application/json; charset=utf-8'
if not if(~ $req_path $blagh_uri^new_post && ! ~ $#editor_mode 0) {
@ -101,16 +101,16 @@ fn get_post_list {
}
fn mkbpost {
bptext=$1
bpdate=$2
bptitle=$3
bpid=$4
bptext=$1;
bpdate=$2;
bptitle=$3;
bpid=$4;
_status=()
if(~ $"bptext '')
_status=($_status 'You need to provide a post body.')
if(! ~ $"bpdate [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9])
_status=($_status 'Invalid date: '''^$"bpdate^'''') # XXX Should make semantic check.
if(~ $#_status 0) {
umask 002 # Let group write
if(! ~ $"bpid '')

View file

@ -19,7 +19,7 @@ fn statpost {
<link>%($base_url^$req_path%)</link>
<description><![CDATA[%($blogDesc%)]]></description>
<language>en-us</language>
<generator><![CDATA[Tom Duff's rc, and Kris Maglione's clever hackery]]></generator>
<generator><![CDATA[werc blagh app]]></generator>
%{
# <webMaster>uriel99+rss@gmail.com (Uriel)</webMaster>
# rfc2822 last time channel content changed.
@ -32,7 +32,7 @@ fn statpost {
%}
<item>
<title><![CDATA[%($title%)]]></title>
<author><![CDATA[%($by%)@noreply.cat-v.org (%($by%))]]></author>
<author><![CDATA[%($by%)]]></author>
<link>%($post_uri%)</link>
<guid isPermaLink="true">%($post_uri%)</guid>
<pubDate>%($pubdate%)</pubDate>

View file

@ -2,7 +2,7 @@
% notices_handler
<form action="" method="post">
<textarea name="comment_text" id="comment_text" cols="80" rows="16">%($"saved_comment_text%)</textarea>
<textarea name="comment_text" id="comment_text">%($"saved_comment_text%)</textarea>
<br>
<input type="submit" name="bridge_post" value="Post a comment">

33
werc/apps/cssedit/app.rc Normal file
View file

@ -0,0 +1,33 @@
fn conf_enable_cssedit {
enable_cssedit=yes
cssedit_editors_groups=$*
conf_enable_app cssedit
css_file='_werc/style.css' # Default location, can be changed
}
fn cssedit_init {
if(! ~ $#enable_cssedit 0 && check_user $cssedit_editors_groups) {
lp=$local_path
lp=`{echo $lp | sed 's/index$//'}
cssedit_file=$"lp$"css_file
if(~ 1 $#post_arg_cssedit_edit $#post_arg_cssedit_preview) {
handler_body_main=(tpl_handler `{get_lib_file cssedit/edit.tpl apps/cssedit/edit.tpl})
}
if not if(! ~ '' $"post_arg_cssedit_save $"post_arg_css_text) {
save_css
}
if not if(~ $"handler_body_main '' || {~ $REQUEST_METHOD GET && test -f $cssedit_file}) {
ll_add handlers_bar_left tpl_handler apps/cssedit/sidebar_controls.tpl
}
}
}
fn save_css {
umask 002
echo $post_arg_css_text > $cssedit_file
post_redirect $base_url^$req_path
}

View file

@ -0,0 +1,27 @@
<div>
<h1>Editing CSS: <a href="%($css_file%)">%($css_file%)</a></h1>
<br>
<form action="" method="POST">
<fieldset>
<textarea name="css_text" id="css_text" cols="80" rows="43">%{
if(~ $#post_arg_css_text 0 && test -f $cssedit_file)
cat $cssedit_file | escape_html
if not
echo -n $post_arg_css_text | escape_html
%}</textarea>
<br>
<a class="bu" href="%($css_file%)" download="%(style`{date -n}.css%)">Download Stylesheet</a>
<hr>
<input type="submit" name="cssedit_save" value="Save">
<small><strong>Note:</strong> Saved changes are final, historical versions of stylesheet are not kept.</small>
</fieldset>
</form>
<h2>Tips</h2>
<div class="info">
<ul>
<li>Pressing <code>F12</code> in your browser and editing the style.css that way is a good way to test/preview your changes out before committing to them using this tool.</li>
<li>Using a computer is suggested for these kind of changes</li>
<li>Learn css: <a href="https://www.w3schools.com/Css/css_intro.asp">w3schools</a></li>
</ul>
</div>
</div>

View file

@ -0,0 +1,3 @@
<form action="" method="POST">
<input type="submit" name="cssedit_edit" value="Edit CSS" />
</form>

View file

@ -0,0 +1,19 @@
# RisingThumb's build of dirdir
dirdir is werc's directory management tool.
## Features
This adds a few features to dirdir.
- Ability to edit larger text files
- Ability to edit template files
- Ability to upload files(optionally under a different name)
- Ability to delete a page
- Ability to delete a folder
## Roadmap
- Ideally take some filetype info for making new pages. Would be nice to make tpl files this way.
- User permissioning around editing template files (default config off?)
- Possibly allowing different markdown/formatters to be used.

View file

@ -2,6 +2,9 @@ fn conf_enable_wiki {
enable_wiki=yes
wiki_editors_groups=$*
conf_enable_app dirdir
if(~ $"conf_dirdir_index_type '')
conf_dirdir_index_type='md'
}
fn dirdir_init {
@ -11,16 +14,34 @@ fn dirdir_init {
# maybe it should, but for now we can fix it up here.
if(~ $lp */)
lp=$lp^'index'
dirdir_file=$lp.md
dirdir_file=$lp.^$"conf_dirdir_index_type
if (test -f $lp.tpl) {
dirdir_file=$lp.tpl
}
dirdir_dir=$dirdir_file^'_werc/dirdir/'
if(~ 1 $#post_arg_dirdir_edit $#post_arg_dirdir_preview)
handler_body_main=(tpl_handler `{get_lib_file dirdir/edit.tpl apps/dirdir/edit.tpl})
if not if(~ 1 $#post_arg_dirdir_delete && ! ~ $#post_arg_dirdir_delete_yes 1)
handler_body_main=(tpl_handler `{get_lib_file dirdir/delete_sure.tpl apps/dirdir/delete_sure.tpl})
if not if(~ 1 $#post_arg_dirdir_delete_folder && ! ~ $#post_arg_dirdir_delete_yes 1)
handler_body_main=(tpl_handler `{get_lib_file dirdir/delete_sure.tpl apps/dirdir/delete_sure.tpl})
if not if(~ 1 $#post_arg_dirdir_delete && ! ~ $#post_arg_dirdir_delete_yes 0)
rm $dirdir_file
if not if(~ 1 $#post_arg_dirdir_delete_folder && ! ~ $#post_arg_dirdir_delete_yes 0)
rm -rf `{dirname $dirdir_file}
if not if(~ 1 $#post_arg_dirdir_add_child_file && ! ~ $#post_arg_dirdir_search 0)
touch `{dirname $dirdir_file}^'/'^$post_arg_dirdir_search^'.md'
if not if(~ 1 $#post_arg_dirdir_add_child_folder! ~ $#post_arg_dirdir_search 0)
mkdir `{dirname $dirdir_file}^'/'^$post_arg_dirdir_search
if not if(~ 1 $#post_arg_dirdir_upload_file_pressed && ! ~ $#post_arg_dirdir_file_name 0 && ! ~ $post_arg_dirdir_file_name "" && ! ~ $#post_arg_dirdir_upload_file 0)
mv /tmp/werc_file.*.data `{dirname $dirdir_file}^'/'^$post_arg_dirdir_file_name
if not if(~ 1 $#post_arg_dirdir_upload_file_pressed && ! ~ $#post_arg_dirdir_upload_file 0)
mv /tmp/werc_file.*.data `{dirname $dirdir_file}^'/'^$post_arg_dirdir_upload_file
if not if(! ~ '' $"post_arg_dirdir_save $"post_arg_edit_text)
save_page
if not if(~ $"handler_body_main '' || {~ $REQUEST_METHOD GET && test -f $local_path.md})
if not if(~ $"handler_body_main '' || {~ $REQUEST_METHOD GET && test -f $local_path.md} || {~ $REQUEST_METHOD GET && test -f $local_path.tpl} )
ll_add handlers_bar_left tpl_handler apps/dirdir/sidebar_controls.tpl
}
}
@ -32,9 +53,7 @@ fn save_page {
# XXX Use a tmp file and mv(1) to ensure updates are atomic?
echo $logged_user > $dirdir_verdir/author
echo $post_arg_edit_text > $dirdir_verdir/data
echo $post_arg_edit_text > $dirdir_file
echo $post_arg_edit_text | dos2unix > $dirdir_verdir/data
echo $post_arg_edit_text | dos2unix > $dirdir_file
post_redirect $base_url^$req_path
#notify_notes='Saved <a href="'$"req_path'">'$"req_path'</a>!'
}

View file

@ -0,0 +1,9 @@
<form action="" method="POST">
% if(~ 1 $#post_arg_dirdir_delete ) {
% echo '<input type="hidden" name="dirdir_delete" value="Delete page" />' }
% if(~ 1 $#post_arg_dirdir_delete_folder ) {
% echo '<input type="hidden" name="dirdir_delete_folder" value="Delete folder" />' }
<input type="submit" name="dirdir_delete_yes" value="Are you sure you want to delete?" />
</form>

View file

@ -1,9 +1,10 @@
<div>
<h1>Editing: <a href="%($req_path%)">%($req_path%)</a></h1>
<br>
<form action="" method="POST">
<form action="" method="POST" enctype="multipart/form-data">
<textarea name="edit_text" id="edit_text" cols="80" rows="43">%{
# FIXME Extra trailing new lines get added to the content somehow, should avoid it.
echo $dirdir_search
if(~ $#post_arg_edit_text 0 && test -f $dirdir_file)
cat $dirdir_file | escape_html
if not
@ -20,6 +21,6 @@
% if(! ~ $"post_arg_dirdir_preview '') {
<h2>Preview:</h2>
<div id="preview">
% echo $post_arg_edit_text | $formatter
% echo $post_arg_edit_text | dos2unix | $formatter
</div>
% }

View file

@ -1,3 +1,14 @@
<form action="" method="POST">
<input type="submit" name="dirdir_edit" value="Edit page" />
<input type="submit" name="dirdir_edit" value="Edit page" /><br/>
</form>
<form action="" method="POST">
<input type="search" id="test-search" name="dirdir_search" placeholder="Page or folder to add"/><br/>
<input type="submit" name="dirdir_add_child_file" value="New Page" />
<input type="submit" name="dirdir_add_child_folder" value="New Folder" /><hr />
</form>
<form action="" method="POST">
<hr style="color: red"/><input type="submit" name="dirdir_delete_folder" value="Delete folder" />
</form>
<form action="" method="POST">
<input type="submit" name="dirdir_delete" value="Delete page" /><hr style="color: red"/>
</form>

1
werc/apps/gallery Submodule

@ -0,0 +1 @@
Subproject commit 65ecf50e317daa8c463b0375f1a57bd388b5bca4

144
werc/apps/ico/app.rc Normal file
View file

@ -0,0 +1,144 @@
fn conf_enable_ico {
ico_uri=$conf_wd
ico_dirs=$*
if(~ $#ico_dirs 0)
ico_dirs=( . )
conf_enable_app ico
if(~ $"conf_ico_editors '')
conf_ico_editors=ico-editors
if(~ $"conf_max_posts_per_page '')
conf_max_posts_per_page=32
if(~ $"conf_ico_categories '')
conf_ico_categories=(general)
if(~ $"conf_ico_max_image_size '')
conf_ico_max_image_size=5242880
}
fn ico_init {
if(~ $#ico_dirs 0 && ~ $req_path */[iI]co/*) {
ico_uri=`{echo $req_path | sed 's,(/[iI]co/).*,\1,'}
ico_dirs=( . )
}
if(! ~ $#ico_dirs 0) {
ico_url=$base_url^$ico_uri
ico_root=$sitedir^$ico_uri
if(check_user $conf_ico_editors) {
editor_mode=on
if(~ $"post_arg_date '')
post_date=`{/bin/date -I|sed 's,-,/,g'}
if not
post_date=$post_arg_date
ll_add handlers_foot_body template `{get_lib_file ico/foot.tpl apps/ico/foot.tpl}
}
if(~ $req_path $ico_uri) {
handler_body_main=ico_body
u=$ico_uri'index'
extraHeaders=$"extraHeaders ^ \
'<link rel="alternate" type="application/atom+xml" title="ATOM" href="'$"u'.atom" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="'$"u'.rss" />'
}
if not if(~ $req_path $ico_uri^category/*) {
category=`{echo $req_path | sed 's!.*/!!; s/_/ /g'}
handler_body_main=ico_category_body
}
if not if(~ $req_path $ico_uri^index.atom)
ico_setup_feed_handlers atom.tpl 'application/atom+xml'
if not if(~ $req_path $ico_uri^index.rss)
ico_setup_feed_handlers rss20.tpl 'application/rss+xml'
if not if(~ $req_path $ico_uri^new_post && ! ~ $#editor_mode 0) {
handler_body_main=( tpl_handler `{get_lib_file ico/new_post.tpl apps/ico/new_post.tpl} )
if(~ $REQUEST_METHOD POST) {
if(mkicopost $"post_arg_body $"post_date $"post_arg_title $"post_arg_categories $"post_arg_loc $"post_arg_loc_link $"post_arg_link $"post_arg_short_desc $"post_arg_poster $"post_arg_edate)
post_redirect $ico_uri
if not
notify_errors=$status
}
}
}
}
fn ico_category_body {
template apps/ico/event_list_cat.tpl
}
fn ico_body {
template apps/ico/event_list_all.tpl
}
fn get_post_list {
ls -F $*^/[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]/ >[2]/dev/null |
sed -n '/'^$forbidden_uri_chars^'/d; /\/$/p' |
sort -r |
sed -e $conf_max_posts_per_page^'q'
}
fn mkicopost {
icotext=$1
icodate=$2
icotitle=$3
icocategories=$4
icolocation=$5
icolocationlink=$6
icoeventlink=$7
icoshortdesc=$8
icoposterpath=$9
icoexpireddate=$10
_status=()
postdate=`{/bin/date -I|sed 's,-,/,g'}
if(~ $"icotext '')
_status=($_status 'You need to provide a post body.')
if(! ~ $"postdate [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9])
_status=($_status 'Invalid date: '''^$"postdate^'''')
if(~ $#_status 0) {
umask 022
ddir=$ico_root^$postdate^'/'
n=`{ls $ddir >[2]/dev/null | wc -l}
mkdir -p $ddir^$n
post_link='/'$postdate^'/'$n
category_links=''
for(cat in `{echo $icocategories}) {
if(! ~ $cat '') {
cat_link=`{echo -n $cat | sed 's/ /_/g'}
category_links=$category_links'<div>[<a href='$ico_uri'category/'$cat_link'>'$cat'</a>]</div> '
}
}
icopostlink='/'^$postdate^'/'^$n^'/'
template apps/ico/post.tpl > $ddir^$n^'/index.html'
# Create the main categories directory
categories_dir=$ico_root^'categories'
mkdir -p $categories_dir
# Update category files
for(cat in `{echo $icocategories}) {
if(! ~ $cat '') {
cat_file=$categories_dir^'/'^`{echo -n $cat | sed 's/ /_/g'}^'.txt'
echo $post_link >> $cat_file
}
}
}
status=$_status
}
fn get_post_by_category {
cat_dir=$ico_root^'categories'
cat_file=$cat_dir^'/'^`{echo -n $1 | sed 's/ /_/g'}^'.txt'
if(test -f $cat_file) {
cat $cat_file | sort -r | sed $conf_max_posts_per_page^'q'
}
}
fn list_categories {
ls $ico_root^'categories/'*.txt | sed 's!.*/!!; s!\.txt$!!; s!_! !g'
}

View file

@ -0,0 +1,25 @@
% if (! ~ $"icoTitle '')
<h1>%($"icoTitle%)</h1>
% if (! ~ $"icoDesc '')
<p class="ico_desc">%($"icoDesc%)</p>
<fieldset class="categories_box">
<legend>Catagories</legend>
<div class="categories">
%{
for(cat in `{list_categories}) {
echo '<a href="'$ico_uri'category/'^`{echo -n $cat | sed 's/ /_/g'}^'">'$cat'</a> '
}
%}
</div>
</fieldset>
<div class="icofeed">
%{
for(p in `{get_post_list $ico_root^$ico_dirs}) {
echo '<div class="post">'
cat $p/index.html
echo '</div>'
}
%}
</div>
<p>Check out the <a href="/archive">archive</a> to see past events.</p>

View file

@ -0,0 +1,23 @@
<h1>Posts in category: %($category%)</h1>
<p class="ico_desc">You are seeing events in the <strong>%($category%)</strong> category. Click <a href="/">here</a> to go home!</p>
<fieldset class="categories_box">
<legend>Catagories</legend>
<div class="categories">
<a href="/">all</a>
%{
for(cat in `{list_categories}) {
echo '<a href="'$ico_uri'category/'^`{echo -n $cat | sed 's/ /_/g'}^'">'$cat'</a> '
}
%}
</div>
</fieldset>
<div class="icofeed">
%{
for(p in `{get_post_by_category $category}) {
echo '<div class="post">'
cat $sitedir$p/index.html
echo '</div>'
}
%}
</div>
<p>Check out the <a href="/archive">archive</a> to see past events.</p>

1
werc/apps/ico/foot.tpl Normal file
View file

@ -0,0 +1 @@
<div><p>[ <a href="/new_post">Make a new post</a> ]</p></div>

View file

@ -0,0 +1,17 @@
<div>
% notices_handler
<form method="POST"><fieldset>
<legend>Submit a new ico post</legend>
<label>Title: <input size="64" type="text" name="title" value="%($"post_arg_title%)" required /></label>
<label>Event Date (Displayed): <input size="10" type="text" name="date" value="%($"post_date%)" /></label>
<label for="dateInput">Expire Date [YYYY-MM-DD] <small>(usually the date of the show)</small>: <input type="text" name="edate" id="dateInput" placeholder="YYYY-MM-DD" pattern="\d{4}-\d{2}-\d{2}" required value="%($"post_arg_edate%)"/></label>
<label>Categories <small>(space-separated)</small>: <input size="64" type="text" name="categories" value="%($"post_arg_categories%)" /></label>
<label>Location: <input size="64" type="text" name="loc" value="%($"post_arg_loc%)" /></label>
<label>Location Link: <input size="64" type="text" name="loc_link" value="%($"post_arg_loc_link%)" /></label>
<label>Event Link/Website: <input size="64" type="text" name="link" value="%($"post_arg_link%)" /></label>
<label>Short Description: <textarea cols="94" rows="1" name="short_desc">%($"post_arg_short_desc%)</textarea></label>
<label>Description: <textarea cols="94" rows="16" name="body">%($"post_arg_body%)</textarea></label>
<label>Event Poster Image Link: <input size="64" type="text" name="poster" value="%($"post_arg_poster%)" /></label><br />
<input type="submit" value="Post" />
</fieldset></form>
</div>

20
werc/apps/ico/post.tpl Normal file
View file

@ -0,0 +1,20 @@
<!-- EXPIRES: "%($icoexpireddate%)" -->
<div class="event_box">
<a href="%($icopostlink%)" class="event_box_link"><span class="link_span"></span></a>
<a href="%($icopostlink%)"><h2>%($icotitle%)</h2></a>
<div class="event_info">
<div class="date">%($icodate%)</div>
<div class="location"><a href="%($icolocationlink%)">%($icolocation%)</a></div>
<div class="event_link"><a href="%($icoeventlink%)">Event Link</a></div>
<div class="cat_list">%($category_links%)</div>
<div class="short_desc">%($icoshortdesc%)</div>
</div>
% if(! ~ $"icoposterpath '') {
<div class="event_poster">
<a href="%($icoeventlink%)" class="event_img_link"><img src="%($icoposterpath%)" alt="Event Poster" /></a>
</div>
% }
<div class="event_body">
%($icotext%)
</div>
</div>

25
werc/apps/ico/rss20.tpl Normal file
View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<atom:link href="%($base_url^$req_path%)" rel="self" type="application/rss+xml" />
<title><![CDATA[%($siteTitle%)]]></title>
<link>%($base_url^$req_path%)</link>
<description><![CDATA[%($icoDesc%)]]></description>
<language>en-us</language>
<generator>werc ico app</generator>
<lastBuildDate>%($lastBuildDate%)</lastBuildDate>
%{
for(f in `{get_post_list $ico_root$ico_dirs}){
statpost $f
%}
<item>
<title><![CDATA[%($title%)]]></title>
<link>%($post_uri%)</link>
<guid isPermaLink="true">%($post_uri%)</guid>
<pubDate>%($pubdate%)</pubDate>
<description><![CDATA[%($summary%)]]></description>
<category>%($categories%)</category>
</item>
% }
</channel>
</rss>

View file

@ -5,7 +5,7 @@ path=($PLAN9/bin $rc_httpd_dir/handlers $PATH)
cgi_path=$PLAN9/bin
SERVER_PORT=80 # default for CGI scripts, may be overridden by the Host header
extra_headers='Server: rc-httpd'
cr=
cr=
fn do_log{
echo `{date} :: $SERVER_NAME :: $request :: \

View file

@ -34,7 +34,7 @@ for(a in $werc_apps)
fn werc_exec_request {
site=$SERVER_NAME
base_url=http://$site:$SERVER_PORT
base_url=https://$site
sitedir=$sitesdir/$site
headers=`{get_lib_file headers.tpl}
master_template=`{get_lib_file default_master.tpl}

View file

@ -7,11 +7,15 @@
% if(! ~ $#handlers_bar_left 0) {
<nav id="side-bar">
<input type="checkbox" class="menu-toggle" name="menu" value='valuable' id="menu" /><label for="menu"><div></div><p>[&lt; Menu]</p></label>
<div class="nav-content">
% for(h in $handlers_bar_left) {
<div>
% run_handler $$h
</div>
% }
</div>
</nav>
% }

BIN
werc/pub/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -10,39 +10,90 @@ nav ul { display: flex; flex-direction: column; list-style-type: none; list-styl
nav li ul { padding-left: 0.6em }
footer { display: flex; justify-content: space-between; }
@font-face {
font-family: 'ft88';
src: url('fonts/FT88-Gothique.woff2') format('woff2'),
url('fonts/FT88-Gothique.woff') format('woff');
}
@font-face {
font-family: 'gt';
src: url('fonts/terminal-grotesque-webfont.woff2') format('woff2'),
url('fonts/terminal-grotesque-webfont.woff') format('woff');
}
@font-face {
font-family: 'wonder';
src: url('fonts/WonderType-Regular.otf') format('opentype');
}
@font-face {
font-family: 'c';
src: url('fonts/Creduci.ttf') format('truetype');
}
@font-face {
font-family: 'rumeur';
src: url('fonts/rumeur.otf') format('opentype');
}
:root {
--alt-accent2: #C0CEE8ff;
--primary-accent: #AEA3F0ff;
--rebecca-purple: #5B3D8Aff;
--primary-dark: #0C072Cff;
--alt-accent: #989898ff;
--back-secondary: #1C202Fff;
--back-primary: #000300ff;
--primary: #E4F0FEff;
--white: white;
--secondary-accent: #A4D1ADff;
--link: #2667deff;
--code: #18A02Cff;
/* Main color scheme */
--color-primary: #E4F0FEff;
--color-secondary: #AEA3F0ff;
--color-accent: #A4D1ADff;
/* Background colors */
--bg-primary: #000300ff;
--bg-secondary: #1C202Fff;
/* Text colors */
--text-primary: #E4F0FEff;
--text-secondary: #989898ff;
--text-accent: #AEA3F0ff;
/* Header colours */
--header-primary:#AEA3F0ff;
--header-secondary: #AEA3F0ff;
--header-tertiary: #A4D1ADff;
--header-other: #E4F0FEff;
/* Link colors */
--link-color: #2667deff;
--link-hover: #5B3D8Aff;
/* Border colors */
--border-primary: #C0CEE8ff;
--border-secondary: #0C072Cff;
--border-image: #000300ff;
/* Special purpose colors */
--code-color: #18A02Cff;
--header-bg: #AEA3F0ff;
--header-text: #0C072Cff;
/* Font families */
--font-headers: 'rumeur', sans-serif;
--font-body: verdana, helvetica, arial, sans-serif;
}
body {
background:
linear-gradient(to right, rgba(0, 5, 10, 0.9), rgba(0, 5, 5, 0.9)),
url('imgs/back.jpeg'),
var(--back-primary);
background-color: var(--back-primary);
var(--bg-primary);
background-color: var(--bg-primary);
background-position: center center;
background-size: 110vh 75vh;
background-repeat: repeat-y;
margin: 0;
padding: 0;
font-size: 84%;
font-family: verdana, helvetica, arial, sans-serif;
font-size: 90%;
font-family: var(--font-body);
}
a {
text-decoration: none;
color: var(--link);
color: var(--link-color);
}
a:hover {
@ -51,19 +102,19 @@ a:hover {
/* header and top bar */
header nav {
background-color: var(--primary-accent);
color: var(--primary-dark);
border-bottom: 3px solid var(--primary-dark);
background-color: var(--header-bg);
color: var(--header-text);
border-bottom: 3px solid var(--border-secondary);
padding: 0.3em;
font-size: 91%;
font-size: 110%;
}
header h1 {
display: flex;
background-color: var(--back-secondary);
color: var(--primary);
color: var(--text-primary);
margin: 0;
border-bottom: 3px solid var(--primary-dark);
border-bottom: 3px solid var(--border-secondary);
font-size: 200%;
font-weight: bold;
padding: 0.5ex 0 0.5ex 0.6ex;
@ -73,13 +124,15 @@ header h1 #headerSubTitle {
display: block;
margin-left: 2em;
font-size: 40%;
color: var(--secondary-accent)
color: var(--color-accent);
}
header h1 .headerLink {
display: inline-block;
margin-top: 0.2ex;
margin-left: 0.6ex;
font-family: var(--font-headers);
font-size: xx-large;
}
header h1 a img {
@ -107,12 +160,13 @@ header nav .right {
/* sidebar */
body>nav {
padding: 0;
border-right: 3px solid var(--alt-accent2);
border-right: 3px solid var(--border-primary);
}
body>nav>div a,
input[type="submit"] {
color: var(--secondary-accent);
input[type="submit"],
.bu {
color: var(--color-accent);
display: block;
font-weight: bold;
padding: 0.25em 1ex 0.25em 2mm;
@ -120,30 +174,35 @@ input[type="submit"] {
}
body>nav>div a:hover,
input[type="submit"]:hover {
color: var(--primary-accent) !important;
background-color: var(--back-primary);
border-left: var(--secondary-accent) solid 0.3em;
input[type="submit"]:hover,
.bu:hover {
color: var(--text-accent) !important;
background-color: var(--bg-primary);
border-left: var(--color-accent) solid 0.3em;
text-decoration: none;
}
input[type="submit"] {
input[type="submit"], .bu {
background-color: transparent;
font-family: inherit;
border: none;
margin-top: 0;
}
fieldset input[type="submit"]:hover {
border: 2px ridge var(--secondary-accent);
border-left: var(--secondary-accent) solid 0.3em;
fieldset input[type="submit"]:hover, .bu:hover {
border: 2px ridge var(--color-accent);
border-left: var(--color-accent) solid 0.3em;
}
fieldset input[type="submit"] {
border: 2px solid var(--secondary-accent);
fieldset input[type="submit"], .bu {
border: 2px solid var(--color-accent);
margin-top: 0.6em;
}
.bu {
width: fit-content;
}
fieldset {
padding: 1em;
max-width: 1000px;
@ -164,11 +223,11 @@ input[type="text"], textarea {
}
body>nav>div .dt {
color: var(--primary);
color: var(--text-primary);
}
body>nav>div a:hover .dt {
color: var(--primary-accent);
color: var(--text-accent);
}
body>nav>div p {
@ -180,40 +239,52 @@ body>nav>div p {
/* main copy */
article {
padding: 0.5ex 1vw 5vh 1vw;
color: var(--primary);
color: var(--text-primary);
backdrop-filter: blur(3px);
flex: 1 1 60%;
max-width: 1100px;
}
article h1,
article h2 {
color: var(--primary-accent);
article h1 {
color: var(--header-primary);
font-weight: bold;
margin: 1em 0 1em 0;
margin: 1em 0 0.5em 0;
font-size: xx-large;
font-family: rumeur, sans-serif;
}
article h2 {
color: var(--header-secondary);
font-weight: bold;
margin: 1em 0 0.5em 0;
font-family: var(--font-headers);
}
article h3 {
color: var(--secondary-accent);
color: var(--header-tertiary);
font-weight: bold;
margin: 2em 0 0 0;
margin: 2em 0 0.2em 0;
}
article h4 article h5 {
color: var(--primary);
color: var(--header-other);
margin: 2em 0 0 0;
}
article h6,
article h7,
article h8 {
color: var(--primary);
color: var(--header-other);
font-weight: bold;
margin: 2em 0 0 0;
}
article p, article li {
color: var(--text-primary);
font-size: large;
}
article a {
color: var(--link);
color: var(--link-color);
}
article a:hover {
@ -221,11 +292,12 @@ article a:hover {
}
article img {
width: 90%;
max-width: 600px;
border: 0.4em solid var(--back-primary);
background-color: black !important;
padding: 0.2em;
border: 0.4em solid var(--bg-primary);
}
textarea#comment_text {
max-width: 50em;
max-height: 5em;
}
.center {
@ -233,6 +305,11 @@ article img {
}
img[title="main"] {
width: 90%;
max-width: 600px;
border: 0.4em solid var(--bg-primary);
background-color: var(--border-image) !important;
padding: 0.2em;
display: block;
margin-left: auto;
margin-right: auto;
@ -240,17 +317,22 @@ img[title="main"] {
}
hr {
color: var(--alt-accent2)
color: var(--border-primary);
}
.notify_errors {
padding: 0.2em;
color: red;
}
/* footer */
footer {
color: white;
background-color: color-mix(in srgb, var(--primary-back), transparent 86%);
color: var(--text-primary);
background-color: color-mix(in srgb, var(--bg-primary), transparent 86%);
}
footer a {
color: inherit;
color: var(--link-color);
}
footer div {
@ -259,26 +341,26 @@ footer div {
/* tables */
table {
border: 1px solid rgba(128, 128, 128, 0.5);
border: 1px solid rgba(var(--bg-secondary), 0.5);
padding: 0;
}
th {
color: white;
background-color: rgb(100, 135, 220);
color: var(--text-primary);
background-color: var(--bg-primary);
}
tr:nth-child(odd) {
background-color: rgba(128, 128, 128, 0.1)
background-color: rgba(var(--bg-secondary), 0.1);
}
/* accents */
.accent {
color: var(--primary-accent)
color: var(--text-accent)
}
.accent2 {
color: var(--secondary-accent)
color: var(--color-accent)
}
/* dates */
@ -289,14 +371,14 @@ tr:nth-child(odd) {
font-weight: normal;
max-width: fit-content;
font-size: x-small;
color: var(--primary);
color: var(--text-primary);
}
.date::before,
.date::after {
content: '⋆★⋆';
flex: 1;
color: var(--alt-accent)
color: var(--text-secondary);
}
.date:not(:empty)::before {
@ -317,7 +399,7 @@ tr:nth-child(odd) {
.bfeed h2 a {
font-size: 90%;
color: var(--primary-accent);
color: var(--text-accent);
text-decoration: none;
}
@ -327,11 +409,32 @@ tr:nth-child(odd) {
blockquote {
font-style: italic;
color: var(--secondary-accent);
border-left: 3px solid var(--alt-accent);
color: var(--color-accent);
border-left: 3px solid var(--text-secondary);
padding-left: 1em;
}
.copybox {
background-color: var(--bg-primary);
border: 1px solid var(--text-primary);
border-radius: 4px;
padding: 16px;
font-family: 'Courier New', Courier, monospace;
font-size: 14px;
color: var(--code-color);
overflow-x: auto;
position: relative;
}
.info {
text-align: left;
}
#test-search {
padding: 5px;
margin: 5px;
}
/* animations */
.fire {
@ -361,6 +464,69 @@ blockquote {
}
}
.menu-toggle {
display: none;
}
.menu-toggle + label {
display: none;
}
.menu-toggle + label div {
display: none;
height: 20px;
width: 60px;
margin-top: 15px;
margin-left: 5px;
padding: 5px 5px 5px 5px;
text-align: center;
border: 2px solid var(--border-primary);
border-radius: 3px;
font-weight: bold;
font-family: 'Courier New', Courier, monospace;
font-size: xx-large;
}
.menu-toggle + label p {
display: inline-block;
font-size: x-large;
color: var(--text-primary);
margin-left: 10px;
margin-bottom: 0px;
}
@media (max-width: 600px) {
.menu-toggle + label {
display: block;
}
.menu-toggle + label div {
display: inline-flex;
justify-content: center;
align-items: center;
}
.nav-content {
padding: 0;
display: none;
}
.menu-toggle:checked ~ .nav-content {
display: block;
}
.menu-toggle + label div::after {
content: '▶';
color: var(--text-primary);
}
.menu-toggle:checked + label div::after {
content: '▽';
}
.nav-list li:hover {
background-color: #555;
}
}
/* media */
@media screen and (max-width: 600px) {
article {
@ -370,8 +536,8 @@ blockquote {
body > nav {
flex-basis: 100%;
border-right: none;
border-bottom: 3px solid var(--alt-accent2);
border-top: 3px solid var(--alt-accent2);
border-bottom: 3px solid var(--border-primary);
border-top: 3px solid var(--border-primary);
padding-bottom: 1em;
}
}

View file

@ -0,0 +1,21 @@
<!-- EXPIRES: "2024-11-15" -->
<div class="event_box">
<a href="/2024/11/13/0/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/0/"><h2>BETTER LOVERS ($48.5)</h2></a>
<div class="event_info">
<div class="date">Friday, November 15th</div>
<div class="location"><a href="">Brass Monkey 250 Greenbank Avenue </a></div>
<div class="event_link"><a href="https://bronsoncentremusictheatre.com/events/event/better-lovers/">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/punk>punk</a>]</div> <div>[<a href=/category/metalcore>metalcore</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">expensive ass metal core show (but good) </div>
</div>
<div class="event_poster">
<a href="https://bronsoncentremusictheatre.com/events/event/better-lovers/" class="event_img_link"><img src="https://bronsoncentremusictheatre.com/wp-content/uploads/2024/08/241115a_BetterLovers2_INSTA_web-780x780.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
loud harsh noise played in a manner that will cause physical harm to nearby people upon listening its fifty bucks im fucking killing myself but these are good well established hardcore bands so if you have money to throw around go see them FUCK SPECTRASONIC
</div>
</div>

View file

@ -0,0 +1,23 @@
<!-- EXPIRES: "2024-11-15" -->
<div class="event_box">
<a href="/2024/11/13/0/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/0/"><h2>BETTER LOVERS $48.5</h2></a>
<div class="event_info">
<div class="date">Friday, November 15th</div>
<div class="location"><a href="">Brass Monkey 250 Greenbank Avenue </a></div>
<div class="event_link"><a href="https://bronsoncentremusictheatre.com/events/event/better-lovers/">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/punk>punk</a>]</div> <div>[<a href=/category/metalcore>metalcore</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">All-ages metalcore show </div>
</div>
<div class="event_poster">
<a href="https://bronsoncentremusictheatre.com/events/event/better-lovers/" class="event_img_link"><img src="https://bronsoncentremusictheatre.com/wp-content/uploads/2024/08/241115a_BetterLovers2_INSTA_web-780x780.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
loud harsh noise played in a manner that will cause physical harm to nearby people upon listening
its fifty bucks im fucking killing myself
but these are good well established hardcore bands so if you have money to throw around go see them
</div>
</div>

View file

@ -0,0 +1,20 @@
<!-- EXPIRES: "2024-11-15" -->
<div class="event_box">
<a href="/2024/11/13/0/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/0/"><h2>BETTER LOVERS ($48.5)</h2></a>
<div class="event_info">
<div class="date">Friday, November 15th</div>
<div class="location"><a href="">Brass Monkey 250 Greenbank Avenue </a></div>
<div class="event_link"><a href="https://bronsoncentremusictheatre.com/events/event/better-lovers/">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/punk>punk</a>]</div> <div>[<a href=/category/metalcore>metalcore</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">All-ages metalcore show </div>
</div>
<div class="event_poster">
<a href="https://bronsoncentremusictheatre.com/events/event/better-lovers/" class="event_img_link"><img src="https://bronsoncentremusictheatre.com/wp-content/uploads/2024/08/241115a_BetterLovers2_INSTA_web-780x780.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
loud harsh noise played in a manner that will cause physical harm to nearby people upon listening its fifty bucks im fucking killing myself but these are good well established hardcore bands so if you have money to throw around go see them FUCK SPECTRASONIC
</div>
</div>

View file

@ -0,0 +1,21 @@
<!-- EXPIRES: "2024-11-15" -->
<div class="event_box">
<a href="/2024/11/13/0/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/0/"><h2>BETTER LOVERS ($48.5)</h2></a>
<div class="event_info">
<div class="date">Friday, November 15th</div>
<div class="location"><a href="">Brass Monkey 250 Greenbank Avenue </a></div>
<div class="event_link"><a href="https://bronsoncentremusictheatre.com/events/event/better-lovers/">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/punk>punk</a>]</div> <div>[<a href=/category/metalcore>metalcore</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">expensive ass metal core show (but good) </div>
</div>
<div class="event_poster">
<a href="https://bronsoncentremusictheatre.com/events/event/better-lovers/" class="event_img_link"><img src="https://bronsoncentremusictheatre.com/wp-content/uploads/2024/08/241115a_BetterLovers2_INSTA_web-780x780.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
loud harsh noise played in a manner that will cause physical harm to nearby people upon listening its fifty bucks im fucking killing myself but these are good well established hardcore bands so if you have money to throw around go see them FUCK SPECTRASONIC
</div>
</div>

View file

@ -0,0 +1,19 @@
<!-- EXPIRES: "2024-11-14" -->
<div class="event_box">
<a href="/2024/11/13/1/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/1/"><h2>Altar Of The Fuzz ($20)</h2></a>
<div class="event_info">
<div class="date">Thursday, November 14th</div>
<div class="location"><a href="">The Rainbow Bistro 76 Murray Street</a></div>
<div class="event_link"><a href="https://therainbow.ca/event/5741013/694045601/the-consequents-altar-of-the-fuzz-afraid-of-grace">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/metal>metal</a>]</div> <div>[<a href=/category/doom-metal>doom-metal</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">Fuzzy waves of raw sound to drown the cries of your bitch wife</div>
</div>
<div class="event_poster">
<a href="https://therainbow.ca/event/5741013/694045601/the-consequents-altar-of-the-fuzz-afraid-of-grace" class="event_img_link"><img src="https://d10j3mvrs1suex.cloudfront.net/s:bzglfiles/u/607487/c798fc16d6b55036dad3d5726eda44458ec594df/original/the-consequents-nov-2024.jpg/!!/b%3AW1sicmVzaXplIixbNjAwLG51bGwseyJ3aXRob3V0RW5sYXJnZW1lbnQiOnRydWUsImZpdCI6Im91dHNpZGUifV1dXQ%3D%3D/meta%3AeyJzcmNCdWNrZXQiOiJiemdsZmlsZXMifQ%3D%3D.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
altar of the fuzz are a really fucking good stoner rock band with loud fuzzy droning riffs reminiscent of electric wizard. music that makes you drool like a retard. i highly recommend it rainbow bistro is based woot woot
</div>
</div>

View file

@ -0,0 +1,19 @@
<!-- EXPIRES: "2024-11-14" -->
<div class="event_box">
<a href="/2024/11/13/1/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/1/"><h2>Altar Of The Fuzz ($20)</h2></a>
<div class="event_info">
<div class="date">Thursday, November 14th</div>
<div class="location"><a href="">The Rainbow Bistro 76 Murray Street</a></div>
<div class="event_link"><a href="https://therainbow.ca/event/5741013/694045601/the-consequents-altar-of-the-fuzz-afraid-of-grace">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/metal>metal</a>]</div> <div>[<a href=/category/doom-metal>doom-metal</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">Fuzzy waves of raw sound to drown the cries of your bitch wife</div>
</div>
<div class="event_poster">
<a href="https://therainbow.ca/event/5741013/694045601/the-consequents-altar-of-the-fuzz-afraid-of-grace" class="event_img_link"><img src="https://d10j3mvrs1suex.cloudfront.net/s:bzglfiles/u/607487/c798fc16d6b55036dad3d5726eda44458ec594df/original/the-consequents-nov-2024.jpg/!!/b%3AW1sicmVzaXplIixbNjAwLG51bGwseyJ3aXRob3V0RW5sYXJnZW1lbnQiOnRydWUsImZpdCI6Im91dHNpZGUifV1dXQ%3D%3D/meta%3AeyJzcmNCdWNrZXQiOiJiemdsZmlsZXMifQ%3D%3D.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
altar of the fuzz are a really fucking good stoner rock band with loud fuzzy droning riffs reminiscent of electric wizard. music that makes you drool like a retard. i highly recommend it rainbow bistro is based woot woot
</div>
</div>

View file

@ -0,0 +1,20 @@
<!-- EXPIRES: "2024-11-16" -->
<div class="event_box">
<a href="/2024/11/13/2/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/2/"><h2>hard rock birthday party ($20)</h2></a>
<div class="event_info">
<div class="date">Saturday, November 16th</div>
<div class="location"><a href="">The Rainbow Bistro 79 Murray Street</a></div>
<div class="event_link"><a href="https://therainbow.ca/event/5743376/694261231/super-kyle-s-birthday-bash-featuring-beyond-driven-this-disaster-don-t-tell-sarah-until">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/rock>rock</a>]</div> <div>[<a href=/category/classic-rock>classic-rock</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">butt rock made by divorced boomers with nothing better to do on their birthday</div>
</div>
<div class="event_poster">
<a href="https://therainbow.ca/event/5743376/694261231/super-kyle-s-birthday-bash-featuring-beyond-driven-this-disaster-don-t-tell-sarah-until" class="event_img_link"><img src="https://d10j3mvrs1suex.cloudfront.net/s:bzglfiles/u/607487/9b6df44a01242649fec1a813f57502ada6eb334e/original/super-kyle-bday-bash.jpeg/!!/b%3AW1sicmVzaXplIixbNjAwLG51bGwseyJ3aXRob3V0RW5sYXJnZW1lbnQiOnRydWUsImZpdCI6Im91dHNpZGUifV1dXQ%3D%3D/meta%3AeyJzcmNCdWNrZXQiOiJiemdsZmlsZXMifQ%3D%3D.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
i dont know any of these bands but they're probably going to play some van halen/jimi hendrix/led zeppelin style hard rock because they're stuck in their childhood celebrating a birthday party with electric guitars and bad hair (kind of based)
</div>
</div>

View file

@ -0,0 +1,19 @@
<!-- EXPIRES: "2024-11-16" -->
<div class="event_box">
<a href="/2024/11/13/2/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/2/"><h2>hard rock birthday party $20</h2></a>
<div class="event_info">
<div class="date">Saturday, November 16th</div>
<div class="location"><a href="">The Rainbow Bistro 79 Murray Street</a></div>
<div class="event_link"><a href="https://therainbow.ca/event/5743376/694261231/super-kyle-s-birthday-bash-featuring-beyond-driven-this-disaster-don-t-tell-sarah-until">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/rock>rock</a>]</div> <div>[<a href=/category/classic-rock>classic-rock</a>]</div> </div>
<div class="short_desc">butt rock made by divorced boomers with nothing better to do on their birthday</div>
</div>
<div class="event_poster">
<a href="https://therainbow.ca/event/5743376/694261231/super-kyle-s-birthday-bash-featuring-beyond-driven-this-disaster-don-t-tell-sarah-until" class="event_img_link"><img src="https://d10j3mvrs1suex.cloudfront.net/s:bzglfiles/u/607487/9b6df44a01242649fec1a813f57502ada6eb334e/original/super-kyle-bday-bash.jpeg/!!/b%3AW1sicmVzaXplIixbNjAwLG51bGwseyJ3aXRob3V0RW5sYXJnZW1lbnQiOnRydWUsImZpdCI6Im91dHNpZGUifV1dXQ%3D%3D/meta%3AeyJzcmNCdWNrZXQiOiJiemdsZmlsZXMifQ%3D%3D.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
i dont know any of these bands but they're probably going to play some van halen/jimi hendrix/led zeppelin style hard rock because they're stuck in their childhood celebrating a birthday party with electric guitars and bad hair (kind of based)
</div>
</div>

View file

@ -0,0 +1,20 @@
<!-- EXPIRES: "2024-11-16" -->
<div class="event_box">
<a href="/2024/11/13/2/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/2/"><h2>hard rock birthday party ($20)</h2></a>
<div class="event_info">
<div class="date">Saturday, November 16th</div>
<div class="location"><a href="">The Rainbow Bistro 79 Murray Street</a></div>
<div class="event_link"><a href="https://therainbow.ca/event/5743376/694261231/super-kyle-s-birthday-bash-featuring-beyond-driven-this-disaster-don-t-tell-sarah-until">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/rock>rock</a>]</div> <div>[<a href=/category/classic-rock>classic-rock</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">butt rock made by divorced boomers with nothing better to do on their birthday</div>
</div>
<div class="event_poster">
<a href="https://therainbow.ca/event/5743376/694261231/super-kyle-s-birthday-bash-featuring-beyond-driven-this-disaster-don-t-tell-sarah-until" class="event_img_link"><img src="https://d10j3mvrs1suex.cloudfront.net/s:bzglfiles/u/607487/9b6df44a01242649fec1a813f57502ada6eb334e/original/super-kyle-bday-bash.jpeg/!!/b%3AW1sicmVzaXplIixbNjAwLG51bGwseyJ3aXRob3V0RW5sYXJnZW1lbnQiOnRydWUsImZpdCI6Im91dHNpZGUifV1dXQ%3D%3D/meta%3AeyJzcmNCdWNrZXQiOiJiemdsZmlsZXMifQ%3D%3D.jpg" alt="Event Poster" /></a>
</div>
<div class="event_body">
i dont know any of these bands but they're probably going to play some van halen/jimi hendrix/led zeppelin style hard rock because they're stuck in their childhood celebrating a birthday party with electric guitars and bad hair (kind of based)
</div>
</div>

View file

@ -0,0 +1,18 @@
<!-- EXPIRES: "2024-11-22" -->
<div class="event_box">
<a href="/2024/11/13/3/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/3/"><h2>Unchained ($15)</h2></a>
<div class="event_info">
<div class="date">Friday, November 22nd</div>
<div class="location"><a href="">Avant Garde Bar 150 Besserer Street</a></div>
<div class="event_link"><a href="https://www.ottawagigs.ca/gig/unchained-friday-22-november-2024-at-2000">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/rock>rock</a>]</div> <div>[<a href=/category/punk>punk</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">mystery lineup of weird bands </div>
</div>
<div class="event_poster">
<a href="https://www.ottawagigs.ca/gig/unchained-friday-22-november-2024-at-2000" class="event_img_link"><img src="https://cdn.prod.website-files.com/63ed2f1997d1c7be9b6844f7/6714f77474b315412e94ea35_VLlut_5mlB1Ma2ELjItJngAjKms3GFxuXo1DeaNKm3iexTfIJpoLulppwZIfmUL8HaTybIjs0_WqsLHHaoRTutsZAZzCW1bwSdzdaj9OXHKMqyICECLSOZgrJjHS2bVVIcbwYarifNVc4ODWk_O8Fr2Iy5e4RbL2_lHbG6xW_Kc.jpeg" alt="Event Poster" /></a>
</div>
<div class="event_body">
this looks cool, interesting influences on their bandcamps drawing from all over alternative rock, punk, post-punk, doom, amongst other things. expect driving guitars and sweaty drummers with a non negligible degree of headbangitude
</div>
</div>

View file

@ -0,0 +1,23 @@
<!-- EXPIRES: "2024-11-29" -->
<div class="event_box">
<a href="/2024/11/13/4/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/4/"><h2>Apostlebird</h2></a>
<div class="event_info">
<div class="date">Friday, November 29</div>
<div class="location"><a href="">Live on elgin 220 Elgin street</a></div>
<div class="event_link"><a href="https://www.ottawagigs.ca/gig/abijah-valvehead-apostlebird-at-live-on-elgin">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/indie>indie</a>]</div> <div>[<a href=/category/shoegaze>shoegaze</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">our friends in apostlebird live on elgin</div>
</div>
<div class="event_poster">
<a href="https://www.ottawagigs.ca/gig/abijah-valvehead-apostlebird-at-live-on-elgin" class="event_img_link"><img src="https://up.thirdculture.top/4Vfptr9ufT/2024-11-13T00:15:54%2C137815319-05:00.png" alt="Event Poster" /></a>
</div>
<div class="event_body">
bwoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
</div>
</div>

View file

@ -0,0 +1,18 @@
<!-- EXPIRES: "2024-11-29" -->
<div class="event_box">
<a href="/2024/11/13/4/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/4/"><h2>Apostlebird</h2></a>
<div class="event_info">
<div class="date">Friday, November 29</div>
<div class="location"><a href="">Live on elgin 220 Elgin street</a></div>
<div class="event_link"><a href="https://www.ottawagigs.ca/gig/abijah-valvehead-apostlebird-at-live-on-elgin">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/indie>indie</a>]</div> <div>[<a href=/category/shoegaze>shoegaze</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">our friends in apostlebird live on elgin</div>
</div>
<div class="event_poster">
<a href="https://www.ottawagigs.ca/gig/unchained-friday-22-november-2024-at-2000" class="event_img_link"><img src="2024-11-13T00:15:54,137815319-05:00.png" alt="Event Poster" /></a>
<div class="event_body">
bwoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
</div>
</div>

View file

@ -0,0 +1,19 @@
<!-- EXPIRES: "2024-11-29" -->
<div class="event_box">
<a href="/2024/11/13/4/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/4/"><h2>Apostlebird</h2></a>
<div class="event_info">
<div class="date">Friday, November 29</div>
<div class="location"><a href="">Live on elgin 220 Elgin street</a></div>
<div class="event_link"><a href="https://www.ottawagigs.ca/gig/abijah-valvehead-apostlebird-at-live-on-elgin">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/indie>indie</a>]</div> <div>[<a href=/category/shoegaze>shoegaze</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">our friends in apostlebird live on elgin</div>
</div>
<div class="event_poster">
<a href="https://www.ottawagigs.ca/gig/unchained-friday-22-november-2024-at-2000" class="event_img_link"><img src="2024-11-13T00:15:54,137815319-05:00.png" alt="Event Poster" /></a>
<div class="event_body">
2024-11-13T00:15:54,137815319-05:00.png bwoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
</div>
</div>

View file

@ -0,0 +1,18 @@
<!-- EXPIRES: "2024-11-29" -->
<div class="event_box">
<a href="/2024/11/13/4/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/4/"><h2>Apostlebird</h2></a>
<div class="event_info">
<div class="date">Friday, November 29</div>
<div class="location"><a href="">Live on elgin 220 Elgin street</a></div>
<div class="event_link"><a href="https://www.ottawagigs.ca/gig/abijah-valvehead-apostlebird-at-live-on-elgin">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/indie>indie</a>]</div> <div>[<a href=/category/shoegaze>shoegaze</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">our friends in apostlebird live on elgin</div>
</div>
<div class="event_body">
bwoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
</div>
</div>

View file

@ -0,0 +1,22 @@
<!-- EXPIRES: "2024-11-29" -->
<div class="event_box">
<a href="/2024/11/13/4/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/4/"><h2>Apostlebird</h2></a>
<div class="event_info">
<div class="date">Friday, November 29</div>
<div class="location"><a href="">Live on elgin 220 Elgin street</a></div>
<div class="event_link"><a href="https://www.ottawagigs.ca/gig/abijah-valvehead-apostlebird-at-live-on-elgin">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/indie>indie</a>]</div> <div>[<a href=/category/shoegaze>shoegaze</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">our friends in apostlebird live on elgin</div>
</div>
<div class="event_poster">
<a href="https://up.thirdculture.top/4Vfptr9ufT/2024-11-13T00:15:54%2C137815319-05:00.png" alt="Event Poster" /></a>
</div>
<div class="event_body">
bwoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
</div>
</div>

View file

@ -0,0 +1,23 @@
<!-- EXPIRES: "2024-11-29" -->
<div class="event_box">
<a href="/2024/11/13/4/" class="event_box_link"><span class="link_span"></span></a>
<a href="/2024/11/13/4/"><h2>Apostlebird</h2></a>
<div class="event_info">
<div class="date">Friday, November 29</div>
<div class="location"><a href="">Live on elgin 220 Elgin street</a></div>
<div class="event_link"><a href="https://www.ottawagigs.ca/gig/abijah-valvehead-apostlebird-at-live-on-elgin">Event Link</a></div>
<div class="cat_list"><div>[<a href=/category/indie>indie</a>]</div> <div>[<a href=/category/shoegaze>shoegaze</a>]</div> <div>[<a href=/category/all-ages>all-ages</a>]</div> </div>
<div class="short_desc">our friends in apostlebird live on elgin</div>
</div>
<div class="event_poster">
<a href="https://www.ottawagigs.ca/gig/abijah-valvehead-apostlebird-at-live-on-elgin" class="event_img_link"><img src="https://up.thirdculture.top/4Vfptr9ufT/2024-11-13T00:15:54%2C137815319-05:00.png" alt="Event Poster" /></a>
</div>
<div class="event_body">
bwoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
</div>
</div>

View file

@ -0,0 +1,8 @@
masterSite=thirdculture.top
siteTitle='Third Culture Events'
siteSubTitle='happening right now'
conf_enable_ico
icoTitle='Events'
icoDesc='Hand picked, interesting events happening in the Ottawa area!<br><small>(maintained by <a href="https://ppl.thirdculture.top/iancobain/">iancobain</a>)</small>'
conf_enable_wiki
conf_dirdir_index_type='html'

View file

@ -0,0 +1,28 @@
<header>
<h1><a href="/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAMAAACfvvDEAAADAFBMVEUAAAAAAKgA/wD/+wCC/wAA/wAA/30A//8Agv8AAP95AP/PAP//ANf/AIL/AAD/fQDLmkWWPBhhAAD/94LD/4KC/4KC/76C//+Cw/+Cgv+mgv/Pgv/7gv//gsP/goL/noKCAACCHACCPACCUQCCZQCCeQBBggAAggAAgjwAgoIAQYIAAIIoAIJNAIJ5AIKCAEEAAAAQEBAgICAwMDBFRUVVVVVlZWV1dXWGhoaampqqqqq6urrLy8vf39/v7+////9NAABZAABxAACGAACeAAC2AADPAADnAAD/AAD/HBz/NDT/UVH/bW3/ior/oqL/vr5NJABVKABtNACGPACeSQC2WQDPZQDncQD/fQD/jhz/mjT/plH/sm3/vob/z6L/375NSQBZUQBxaQCGggCelgC2rgDPxwDn4wD//wD//xz/+zT/+1H/923/+4b/+6L/+74ATQAAYQAAeQAAjgAApgAAugAA0wAA6wAA/wAc/xw4/zRV/1Fx/22K/4am/6LD/74AQUEAWVkAcXEAhoYAnp4AtrYAz88A5+cA//9Z//t1//uK//+e//u6///L///b//8AIEEALFkAOHEARYYAUZ4AXbYAac8AdecAgv8cjv80nv9Rqv9tuv+Ky/+i1/++4/8AAE0AAGUABHkABI4ABKYAAL4AANMAAOsAAP8cJP80PP9RXf9tef+Kkv+iqv++x/8kAE0wAGVBAIJNAJpZALJlAMtxAOd5AP+CAP+OHP+WNP+mUf+ubf++hv/Lov/bvv9JAE1fAGN1AHqLAJChAKe3AL3NANTjAOvmF+3qL/DtR/LxX/X0dvf4jvr7pvz/vv8gAAAsAAA4BARJDAhVFBBhIBhxKCR9OCyGRTiaWU2qbV26gnXLmorfsqLvz77/698gIAA8PABRTQBlWQh5ZQyObRSieRy2fSi+gjjHjk3PlmHbpnXjso7rw6b308P/69//HBz/HBz/HBz/HBz/HBz/HBz/HBysfHz/HBz/HBz/HBz/HBwAAABtbW2qqqptbW0REdKpAAAAD3RFWHRTb2Z0d2FyZQBHcmFmeDKgolNqAAAASGNyTmcAAAACMD8AAAACQE8AAAACUF8AAAACYG8AAAACcH8AAAACgI8AAAACkJ8AAAACoK8AAAACsL8AAAACwM8AAAAC0N8AAAAC4O+6mu6bAAAAk0lEQVQ4jd3UXQ6AIAgA4C7BC6dg3f9wZTPkz2RlD4W1gr6htdmyZmN5SdI4Pi5xHymJJeZKxIA+k4dyNJDIEhOyXS4kC0OdRCVxIP1tINVTldyW5i1kqqX9iDL3ksjQSHId6implG0ugHLompV1KqhQFIVUkBztSF5nJIMNoaju2ZOmp9+4JyXTcxC/lfn//Gy5AVilLcOiiriTAAAAAElFTkSuQmCC"></a><a href="/" class="headerLink">%($"siteTitle%) <br><span id="headerSubTitle">[ %($"siteSubTitle%) ]</span></a></h1>
<nav>
% cat `{ get_lib_file top_bar.inc }
</nav>
</header>
% if(! ~ $#handlers_bar_left 0) {
<nav id="side-bar">
% for(h in $handlers_bar_left) {
<div>
% run_handler $$h
</div>
% }
</nav>
% }
<div class="background"></div>
<article>
% run_handlers $handlers_body_head
% run_handler $handler_body_main
% run_handlers $handlers_body_foot
</article>
<footer>
% run_handlers $handlers_foot_body
% cat `{ get_lib_file footer.inc }
</footer>

View file

@ -0,0 +1,4 @@
<div><p>[ <a href="/new_post">Make a new post</a> ]</p>
<form action="" method="POST">
<p>[ <input type="submit" name="dirdir_edit" value="Edit page" /> ]</p>
</form></div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Some files were not shown because too many files have changed in this diff Show more