close to prerelase

This commit is contained in:
Quentin Wolkensperg 2024-11-11 14:52:00 -05:00
parent e55fbb5b67
commit 31022358ed
181 changed files with 2118 additions and 141 deletions

BIN
dirdirold.tar.gz Normal file

Binary file not shown.

View file

@ -1,6 +1,7 @@
services: services:
werc: werc:
build: build:
network: host
dockerfile: Dockerfile dockerfile: Dockerfile
context: . context: .
ports: ports:
@ -16,7 +17,7 @@ services:
ports: ports:
- 8001:8001 - 8001:8001
volumes: volumes:
- ./werc/sites/thirdculture.top/_files:/shared - ./werc/sites/thirdculture.top/_files:/shared
- ./werc/sites/ppl.thirdculture.top:/shared/people - ./werc/sites/ppl.thirdculture.top:/shared/people
volumes: volumes:
werc: werc:

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

@ -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,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" => "")
}

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"

View file

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

View file

@ -19,7 +19,7 @@ fn statpost {
<link>%($base_url^$req_path%)</link> <link>%($base_url^$req_path%)</link>
<description><![CDATA[%($blogDesc%)]]></description> <description><![CDATA[%($blogDesc%)]]></description>
<language>en-us</language> <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> # <webMaster>uriel99+rss@gmail.com (Uriel)</webMaster>
# rfc2822 last time channel content changed. # rfc2822 last time channel content changed.
@ -32,7 +32,7 @@ fn statpost {
%} %}
<item> <item>
<title><![CDATA[%($title%)]]></title> <title><![CDATA[%($title%)]]></title>
<author><![CDATA[%($by%)@noreply.cat-v.org (%($by%))]]></author> <author><![CDATA[%($by%)]]></author>
<link>%($post_uri%)</link> <link>%($post_uri%)</link>
<guid isPermaLink="true">%($post_uri%)</guid> <guid isPermaLink="true">%($post_uri%)</guid>
<pubDate>%($pubdate%)</pubDate> <pubDate>%($pubdate%)</pubDate>

View file

@ -2,7 +2,7 @@
% notices_handler % notices_handler
<form action="" method="post"> <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> <br>
<input type="submit" name="bridge_post" value="Post a comment"> <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 enable_wiki=yes
wiki_editors_groups=$* wiki_editors_groups=$*
conf_enable_app dirdir conf_enable_app dirdir
if(~ $"conf_dirdir_index_type '')
conf_dirdir_index_type='md'
} }
fn dirdir_init { fn dirdir_init {
@ -11,16 +14,34 @@ fn dirdir_init {
# maybe it should, but for now we can fix it up here. # maybe it should, but for now we can fix it up here.
if(~ $lp */) if(~ $lp */)
lp=$lp^'index' 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/' dirdir_dir=$dirdir_file^'_werc/dirdir/'
if(~ 1 $#post_arg_dirdir_edit $#post_arg_dirdir_preview) 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}) 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) if not if(! ~ '' $"post_arg_dirdir_save $"post_arg_edit_text)
save_page 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 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? # XXX Use a tmp file and mv(1) to ensure updates are atomic?
echo $logged_user > $dirdir_verdir/author echo $logged_user > $dirdir_verdir/author
echo $post_arg_edit_text > $dirdir_verdir/data echo $post_arg_edit_text | dos2unix > $dirdir_verdir/data
echo $post_arg_edit_text > $dirdir_file echo $post_arg_edit_text | dos2unix > $dirdir_file
post_redirect $base_url^$req_path 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> <div>
<h1>Editing: <a href="%($req_path%)">%($req_path%)</a></h1> <h1>Editing: <a href="%($req_path%)">%($req_path%)</a></h1>
<br> <br>
<form action="" method="POST"> <form action="" method="POST" enctype="multipart/form-data">
<textarea name="edit_text" id="edit_text" cols="80" rows="43">%{ <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. # 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) if(~ $#post_arg_edit_text 0 && test -f $dirdir_file)
cat $dirdir_file | escape_html cat $dirdir_file | escape_html
if not if not
@ -20,6 +21,6 @@
% if(! ~ $"post_arg_dirdir_preview '') { % if(! ~ $"post_arg_dirdir_preview '') {
<h2>Preview:</h2> <h2>Preview:</h2>
<div id="preview"> <div id="preview">
% echo $post_arg_edit_text | $formatter % echo $post_arg_edit_text | dos2unix | $formatter
</div> </div>
% } % }

View file

@ -1,3 +1,14 @@
<form action="" method="POST"> <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>
<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 cgi_path=$PLAN9/bin
SERVER_PORT=80 # default for CGI scripts, may be overridden by the Host header SERVER_PORT=80 # default for CGI scripts, may be overridden by the Host header
extra_headers='Server: rc-httpd' extra_headers='Server: rc-httpd'
cr= cr=
fn do_log{ fn do_log{
echo `{date} :: $SERVER_NAME :: $request :: \ echo `{date} :: $SERVER_NAME :: $request :: \

View file

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

View file

@ -7,11 +7,15 @@
% if(! ~ $#handlers_bar_left 0) { % if(! ~ $#handlers_bar_left 0) {
<nav id="side-bar"> <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) { % for(h in $handlers_bar_left) {
<div> <div>
% run_handler $$h % run_handler $$h
</div> </div>
% } % }
</div>
</nav> </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 } nav li ul { padding-left: 0.6em }
footer { display: flex; justify-content: space-between; } 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 { :root {
--alt-accent2: #C0CEE8ff; /* Main color scheme */
--primary-accent: #AEA3F0ff; --color-primary: #E4F0FEff;
--rebecca-purple: #5B3D8Aff; --color-secondary: #AEA3F0ff;
--primary-dark: #0C072Cff; --color-accent: #A4D1ADff;
--alt-accent: #989898ff;
--back-secondary: #1C202Fff; /* Background colors */
--back-primary: #000300ff; --bg-primary: #000300ff;
--primary: #E4F0FEff; --bg-secondary: #1C202Fff;
--white: white;
--secondary-accent: #A4D1ADff; /* Text colors */
--link: #2667deff; --text-primary: #E4F0FEff;
--code: #18A02Cff; --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 { body {
background: background:
linear-gradient(to right, rgba(0, 5, 10, 0.9), rgba(0, 5, 5, 0.9)), linear-gradient(to right, rgba(0, 5, 10, 0.9), rgba(0, 5, 5, 0.9)),
url('imgs/back.jpeg'), url('imgs/back.jpeg'),
var(--back-primary); var(--bg-primary);
background-color: var(--back-primary); background-color: var(--bg-primary);
background-position: center center; background-position: center center;
background-size: 110vh 75vh; background-size: 110vh 75vh;
background-repeat: repeat-y; background-repeat: repeat-y;
margin: 0; margin: 0;
padding: 0; padding: 0;
font-size: 84%; font-size: 90%;
font-family: verdana, helvetica, arial, sans-serif; font-family: var(--font-body);
} }
a { a {
text-decoration: none; text-decoration: none;
color: var(--link); color: var(--link-color);
} }
a:hover { a:hover {
@ -51,19 +102,19 @@ a:hover {
/* header and top bar */ /* header and top bar */
header nav { header nav {
background-color: var(--primary-accent); background-color: var(--header-bg);
color: var(--primary-dark); color: var(--header-text);
border-bottom: 3px solid var(--primary-dark); border-bottom: 3px solid var(--border-secondary);
padding: 0.3em; padding: 0.3em;
font-size: 91%; font-size: 110%;
} }
header h1 { header h1 {
display: flex; display: flex;
background-color: var(--back-secondary); background-color: var(--back-secondary);
color: var(--primary); color: var(--text-primary);
margin: 0; margin: 0;
border-bottom: 3px solid var(--primary-dark); border-bottom: 3px solid var(--border-secondary);
font-size: 200%; font-size: 200%;
font-weight: bold; font-weight: bold;
padding: 0.5ex 0 0.5ex 0.6ex; padding: 0.5ex 0 0.5ex 0.6ex;
@ -73,13 +124,15 @@ header h1 #headerSubTitle {
display: block; display: block;
margin-left: 2em; margin-left: 2em;
font-size: 40%; font-size: 40%;
color: var(--secondary-accent) color: var(--color-accent);
} }
header h1 .headerLink { header h1 .headerLink {
display: inline-block; display: inline-block;
margin-top: 0.2ex; margin-top: 0.2ex;
margin-left: 0.6ex; margin-left: 0.6ex;
font-family: var(--font-headers);
font-size: xx-large;
} }
header h1 a img { header h1 a img {
@ -107,12 +160,13 @@ header nav .right {
/* sidebar */ /* sidebar */
body>nav { body>nav {
padding: 0; padding: 0;
border-right: 3px solid var(--alt-accent2); border-right: 3px solid var(--border-primary);
} }
body>nav>div a, body>nav>div a,
input[type="submit"] { input[type="submit"],
color: var(--secondary-accent); .bu {
color: var(--color-accent);
display: block; display: block;
font-weight: bold; font-weight: bold;
padding: 0.25em 1ex 0.25em 2mm; padding: 0.25em 1ex 0.25em 2mm;
@ -120,30 +174,35 @@ input[type="submit"] {
} }
body>nav>div a:hover, body>nav>div a:hover,
input[type="submit"]:hover { input[type="submit"]:hover,
color: var(--primary-accent) !important; .bu:hover {
background-color: var(--back-primary); color: var(--text-accent) !important;
border-left: var(--secondary-accent) solid 0.3em; background-color: var(--bg-primary);
border-left: var(--color-accent) solid 0.3em;
text-decoration: none; text-decoration: none;
} }
input[type="submit"] { input[type="submit"], .bu {
background-color: transparent; background-color: transparent;
font-family: inherit; font-family: inherit;
border: none; border: none;
margin-top: 0; margin-top: 0;
} }
fieldset input[type="submit"]:hover { fieldset input[type="submit"]:hover, .bu:hover {
border: 2px ridge var(--secondary-accent); border: 2px ridge var(--color-accent);
border-left: var(--secondary-accent) solid 0.3em; border-left: var(--color-accent) solid 0.3em;
} }
fieldset input[type="submit"] { fieldset input[type="submit"], .bu {
border: 2px solid var(--secondary-accent); border: 2px solid var(--color-accent);
margin-top: 0.6em; margin-top: 0.6em;
} }
.bu {
width: fit-content;
}
fieldset { fieldset {
padding: 1em; padding: 1em;
max-width: 1000px; max-width: 1000px;
@ -164,11 +223,11 @@ input[type="text"], textarea {
} }
body>nav>div .dt { body>nav>div .dt {
color: var(--primary); color: var(--text-primary);
} }
body>nav>div a:hover .dt { body>nav>div a:hover .dt {
color: var(--primary-accent); color: var(--text-accent);
} }
body>nav>div p { body>nav>div p {
@ -180,40 +239,52 @@ body>nav>div p {
/* main copy */ /* main copy */
article { article {
padding: 0.5ex 1vw 5vh 1vw; padding: 0.5ex 1vw 5vh 1vw;
color: var(--primary); color: var(--text-primary);
backdrop-filter: blur(3px); backdrop-filter: blur(3px);
flex: 1 1 60%; flex: 1 1 60%;
max-width: 1100px; max-width: 1100px;
} }
article h1, article h1 {
article h2 { color: var(--header-primary);
color: var(--primary-accent);
font-weight: bold; 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 { article h3 {
color: var(--secondary-accent); color: var(--header-tertiary);
font-weight: bold; font-weight: bold;
margin: 2em 0 0 0; margin: 2em 0 0.2em 0;
} }
article h4 article h5 { article h4 article h5 {
color: var(--primary); color: var(--header-other);
margin: 2em 0 0 0; margin: 2em 0 0 0;
} }
article h6, article h6,
article h7, article h7,
article h8 { article h8 {
color: var(--primary); color: var(--header-other);
font-weight: bold; font-weight: bold;
margin: 2em 0 0 0; margin: 2em 0 0 0;
} }
article p, article li {
color: var(--white);
font-size: large;
}
article a { article a {
color: var(--link); color: var(--link-color);
} }
article a:hover { article a:hover {
@ -221,11 +292,12 @@ article a:hover {
} }
article img { article img {
width: 90%; border: 0.4em solid var(--bg-primary);
max-width: 600px; }
border: 0.4em solid var(--back-primary);
background-color: black !important; textarea#comment_text {
padding: 0.2em; max-width: 50em;
max-height: 5em;
} }
.center { .center {
@ -233,6 +305,11 @@ article img {
} }
img[title="main"] { 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; display: block;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
@ -240,17 +317,22 @@ img[title="main"] {
} }
hr { hr {
color: var(--alt-accent2) color: var(--border-primary);
}
.notify_errors {
padding: 0.2em;
color: red;
} }
/* footer */ /* footer */
footer { footer {
color: white; color: var(--text-primary);
background-color: color-mix(in srgb, var(--primary-back), transparent 86%); background-color: color-mix(in srgb, var(--bg-primary), transparent 86%);
} }
footer a { footer a {
color: inherit; color: var(--link-color);
} }
footer div { footer div {
@ -259,26 +341,26 @@ footer div {
/* tables */ /* tables */
table { table {
border: 1px solid rgba(128, 128, 128, 0.5); border: 1px solid rgba(var(--bg-secondary), 0.5);
padding: 0; padding: 0;
} }
th { th {
color: white; color: var(--text-primary);
background-color: rgb(100, 135, 220); background-color: var(--bg-primary);
} }
tr:nth-child(odd) { tr:nth-child(odd) {
background-color: rgba(128, 128, 128, 0.1) background-color: rgba(var(--bg-secondary), 0.1);
} }
/* accents */ /* accents */
.accent { .accent {
color: var(--primary-accent) color: var(--text-accent)
} }
.accent2 { .accent2 {
color: var(--secondary-accent) color: var(--color-accent)
} }
/* dates */ /* dates */
@ -289,14 +371,14 @@ tr:nth-child(odd) {
font-weight: normal; font-weight: normal;
max-width: fit-content; max-width: fit-content;
font-size: x-small; font-size: x-small;
color: var(--primary); color: var(--text-primary);
} }
.date::before, .date::before,
.date::after { .date::after {
content: '⋆★⋆'; content: '⋆★⋆';
flex: 1; flex: 1;
color: var(--alt-accent) color: var(--text-secondary);
} }
.date:not(:empty)::before { .date:not(:empty)::before {
@ -317,7 +399,7 @@ tr:nth-child(odd) {
.bfeed h2 a { .bfeed h2 a {
font-size: 90%; font-size: 90%;
color: var(--primary-accent); color: var(--text-accent);
text-decoration: none; text-decoration: none;
} }
@ -327,11 +409,27 @@ tr:nth-child(odd) {
blockquote { blockquote {
font-style: italic; font-style: italic;
color: var(--secondary-accent); color: var(--color-accent);
border-left: 3px solid var(--alt-accent); border-left: 3px solid var(--text-secondary);
padding-left: 1em; 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;
}
/* animations */ /* animations */
.fire { .fire {
@ -361,6 +459,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 */
@media screen and (max-width: 600px) { @media screen and (max-width: 600px) {
article { article {
@ -370,8 +531,8 @@ blockquote {
body > nav { body > nav {
flex-basis: 100%; flex-basis: 100%;
border-right: none; border-right: none;
border-bottom: 3px solid var(--alt-accent2); border-bottom: 3px solid var(--border-primary);
border-top: 3px solid var(--alt-accent2); border-top: 3px solid var(--border-primary);
padding-bottom: 1em; padding-bottom: 1em;
} }
} }

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!'
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

View file

@ -0,0 +1,359 @@
body {
background:
url("imgs/starback.gif"),
black;
background-repeat: repeat;
}
.background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
backdrop-filter: blur(1px);
}
nav#side-bar {
display: none;
}
article {
width: 100%;
max-width: 100%;
backdrop-filter: none;
}
input[name="dirdir_edit"] {
color: #2667de;
display: inline-block;
font-weight: normal;
padding: 0;
font-size: 100%
}
input[name="dirdir_edit"]:hover {
color: #2667de !important;
background-color: none;
border-left: none;
text-decoration: underline;
}
.icofeed {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 10px;
padding: 20px;
}
.categories_box {
max-width: 100%;
}
.categories_box legend {
font-size: large;
font-weight: bold;
}
.categories {
display: flex;
flex-wrap: wrap;
font-size: large;
}
.categories a {
position: relative;
text-decoration: none;
transition: color 0.1s ease;
}
.categories a:hover {
color: white;
animation: flicker 0.8s infinite;
transition: opacity 0.1s ease;
}
.categories a::after {
content: "|";
color: white;
padding-right: 0.5em;
padding-left: 0.5em;
}
.categories a:last-child::after {
content: "|";
}
.categories a:first-child::before {
color: white;
content: "|";
padding-right: 0.5em;
}
@keyframes flicker {
0% { color: #fff; opacity: 1; }
25% { color: #def8ff; opacity: 1; }
50% { color: #fff; opacity: 1; }
75% { color: #def8ff; opacity: 1; }
100% { color: #fff; opacity: 1; }
}
.event_box {
text-align: center;
border-left: 4px solid white;
border-right: 4px solid white;
border-radius: 4px;
max-width: fit-content;
margin: auto;
}
.event_box h2 {
font-size: xxx-large;
}
.date {
display: flex;
background-color: rgba(30,30,30,0.5);
color: #f0f0f0;
padding: 8px 0px 8px 0px;
font-weight: bold;
text-align: center;
border-bottom: 1px solid #4a4a4a;
align-items: center;
font-size: large;
margin: auto;
max-width: none;
}
.date::before,
.date::after {
content: '⋆★⋆';
flex: 1;
color: grey;
}
.date:not(:empty)::before {
margin-right: .25em;
}
.date:not(:empty)::after {
margin-left: .25em;
}
.post {
background-color: rgba(0,0,0,0);
border: 1px solid #3a3a3a;
border-radius: 8px;
overflow: hidden;
display: flex;
flex-direction: column;
aspect-ratio: 1;
position: relative;
transition: box-shadow 0.3s ease;
}
.post .event_info .date {
font-size: 0.9em;
}
.post .event_info .date::before,
.post .event_info .date::after {
content: '⋆★⋆';
flex: 1;
color: var(--alt-accent)
}
.post .event_info .date:not(:empty)::before {
margin-right: .25em;
}
.post .event_info .date:not(:empty)::after {
margin-left: .25em;
}
.post .event_box h2 {
margin: 0;
padding: 12px;
font-size: 200%;
text-align: center;
}
.post .cat_list {
padding: 0 12px;
font-size: 0.9em;
color: #b0b0b0;
}
.post .cat_list a {
color: #66b3ff;
text-decoration: none;
}
.location a[href=""] {
color: white;
}
.location a[href=""]:hover {
color: white;
text-decoration: none;
filter: none;
}
.post .cat_list a:hover {
text-decoration: underline;
}
.cat_list div {
display: inline-block;
}
.cat_list::before {
content: 'Catagories: ';
}
.post .cat_list::before {
content: '';
}
.post .cat_list div:nth-child(n+4) {
display: none;
}
.event_body {
padding: 12px;
color: #c0c0c0;
flex-grow: 1;
overflow: hidden;
font-size: medium;
max-width: 650px;
}
.post .event_body {
text-overflow: ellipsis;
display: -webkit-box;
line-clamp: 3;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
font-size: 0.9em;
}
.event_info {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background-color: rgba(30,30,30,0.5);
padding: 1px 1px 5px 1px;
margin: 0px 0px 0px 0px;
}
.event_info > div {
text-align: center;
border-bottom: 1px solid #4a4a4a;
width: 100%;
}
.event_info .cat_list {
padding-bottom: 5px;
}
.post .event_info .cat_list {
width: initial;
}
.event_info .location::before {
content: 'Location: ';
font-weight: bold;
}
.event_info .event_link::before {
content: '> ';
}
.event_info .event_link::after {
content: ' <';
}
.post .event_poster {
position: absolute;
z-index: -1;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
background-color: black;
}
.event_poster img {
width: 100%;
max-width: 600px;
box-sizing: border-box;
}
.post .event_poster img {
height: 100%;
padding: 0;
margin: 0;
box-sizing: border-box;
}
.post .event_box {
width: 100%;
height: 100%;
text-align: left;
border: none;
}
.post .event_box > * {
display: none;
}
.post:hover .event_info a, .post:hover .event_body {
z-index: 2;
}
.event_box_link {
display: none;
}
.post .event_box_link {
display: block;
}
.event_img_link {
width: 100%;
max-width: 600px;
box-sizing: border-box;
}
.post:hover .event_box {
background-color: rgba(0,0,0,0.7);
}
.post:hover .event_box > * {
display: block;
}
.post .event_box .event_poster {
display: block;
}
.link_span {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 1;
}
.post:hover .link_span {
z-index: 0;
}
@media (max-width: 768px) {
.icofeed {
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
}

View file

@ -0,0 +1 @@
Under construction

View file

@ -0,0 +1,3 @@
masterSite=thirdculture.top
siteTitle='Third Culture Music'
siteSubTitle='before the eyes have opened'

View file

@ -0,0 +1,3 @@
Music
=================================
This page is under construction

View file

@ -0,0 +1,7 @@
# Third Culture Members
The following are the pages of third culture friends/members.
![Ottawa Image](/_werc/pub/imgs/ottawa.png "main")
Check out various blogs, galleries and other art done by third culture members by clicking the sites below (or on the sidebar).

View file

@ -1,3 +1,3 @@
masterSite=thirdculture.top masterSite=thirdculture.top
siteTitle='third culture' siteTitle='Third Culture Collective'
siteSubTitle='the members of third culture' siteSubTitle='the members of third culture'

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View file

@ -0,0 +1,38 @@
.main {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(88px, 1fr));
grid-template-rows: repeat(31, minmax(31px, 1fr));
gap: 5px;
width: 100%;
max-width: 100%;
height: 100%;
}
.grid-item {
display: flex;
justify-content: center;
align-items: center;
background-color: var(--bg-primary);
border: 2px solid var(--color-secondary);
width: 88px;
height: 31px;
}
.grid-item:hover img {
color: white;
text-decoration: underline;
}
.grid-item img {
max-width: 100%;
max-height: 100%;
color: var(--color-accent)
}

View file

@ -0,0 +1,4 @@
extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki
conf_enable_cssedit adil
css_file='_werc/style.css'

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,6 @@
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=adil
blogTitle=''
blogDesc=''

View file

@ -0,0 +1,4 @@
extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki
conf_enable_cssedit bea
css_file='_werc/style.css'

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,6 @@
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=bea
blogTitle=''
blogDesc=''

View file

@ -1,2 +1,4 @@
conf_enable_blog extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki conf_enable_wiki
conf_enable_cssedit dulien
css_file='_werc/style.css'

View file

@ -1 +0,0 @@
/* Put custom styles here */

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,6 @@
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=dulien
blogTitle=''
blogDesc=''

View file

@ -1,2 +1,4 @@
conf_enable_blog extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki conf_enable_wiki
conf_enable_cssedit geunf
css_file='_werc/style.css'

View file

@ -1 +0,0 @@
/* Put custom styles here */

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,6 @@
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=geunf
blogTitle=''
blogDesc=''

View file

@ -0,0 +1,4 @@
extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki
conf_enable_cssedit iancobain
css_file='_werc/style.css'

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,6 @@
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=iancobain
blogTitle=''
blogDesc=''

View file

@ -0,0 +1,37 @@
<div class="main">
<div class="grid-container">
<div class="grid-item">
<a href="/q/"><img src="/_werc/pub/img/but/q.gif" alt="q" /></a>
</div>
<div class="grid-item">
<a href="/kaz/"><img src="/_werc/pub/img/but/kaz.gif" alt="kaz" /></a>
</div>
<div class="grid-item">
<a href="/sean/"><img src="/_werc/pub/img/but/sean.gif" alt="sean" /></a>
</div>
<div class="grid-item">
<a href="/dulien/"><img src="/_werc/pub/img/but/dulien.gif" alt="dulien" /></a>
</div>
<div class="grid-item">
<a href="/geunf/"><img src="/_werc/pub/img/but/geunf.gif" alt="geunf" /></a>
</div>
<div class="grid-item">
<a href="/nevada/"><img src="/_werc/pub/img/but/nevada.gif" alt="nevada" /></a>
</div>
<div class="grid-item">
<a href="/thomas/"><img src="/_werc/pub/img/but/thomas.gif" alt="thomas" /></a>
</div>
<div class="grid-item">
<a href="/vanne/"><img src="/_werc/pub/img/but/vanne.gif" alt="vanne" /></a>
</div>
<div class="grid-item">
<a href="/adil/"><img src="/_werc/pub/img/but/adil.gif" alt="adil" /></a>
</div>
<div class="grid-item">
<a href="/iancobain/"><img src="/_werc/pub/img/but/iancobain.gif" alt="iancobain" /></a>
</div>
<div class="grid-item">
<a href="/bea/"><img src="/_werc/pub/img/but/bea.gif" alt="bea" /></a>
</div>
</div>
</div>

View file

@ -1,2 +1,4 @@
conf_enable_blog extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki conf_enable_wiki
conf_enable_cssedit kaz
css_file='_werc/style.css'

View file

@ -1 +0,0 @@
/* Put custom styles here */

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,6 @@
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=kaz
blogTitle=''
blogDesc=''

View file

@ -1,2 +1,4 @@
conf_enable_blog extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki conf_enable_wiki
conf_enable_cssedit nevada
css_file='_werc/style.css'

View file

@ -1 +0,0 @@
/* Put custom styles here */

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,6 @@
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=nevada
blogTitle=''
blogDesc=''

View file

@ -1,2 +1,4 @@
conf_enable_blog extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki conf_enable_wiki
conf_enable_cssedit q
css_file='_werc/style.css'

View file

@ -1 +0,0 @@
/* Put custom styles here */

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,5 @@
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=q
blogTitle=''
blogDesc=''

View file

@ -0,0 +1,3 @@
# Q
Guitarist and vocalist for moridori

View file

@ -0,0 +1,4 @@
extraHeaders='<link rel="stylesheet" type="text/css" href="_werc/style.css">'
conf_enable_wiki
conf_enable_cssedit sean
css_file='_werc/style.css'

View file

@ -0,0 +1 @@
/* Put custom styles here */

View file

@ -0,0 +1,6 @@
conf_enable_wiki
conf_enable_blog
conf_blog_only_pull=0
conf_blog_editors=sean
blogTitle=''
blogDesc=''

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