mirror of https://github.com/kirsle/kirsle.net
93 changed files with 8724 additions and 7517 deletions
@ -1,82 +0,0 @@ |
|||
#!/usr/bin/env python3 |
|||
|
|||
"""Bootstrap script to set up a local dev instance of Kirsle.net |
|||
|
|||
This will `git clone` an instance of the Rophako CMS and configure it to run |
|||
this local website. When the dev Rophako instance already exists, running this |
|||
script again acts as a shortcut to running `python runserver.py` from within |
|||
the Rophako git repo. |
|||
|
|||
This script is only designed to work in Python 3 and requires the `git` and |
|||
`pyvenv` commands. |
|||
|
|||
This performs the following tasks: |
|||
* Clones Rophako into ./rophako |
|||
* Sets up a Python 3 virtual environment via `pyvenv` at ./rophako/pyvenv |
|||
* Installs requirements via `pip` into its virtual environment |
|||
* Symlinks settings.yml and kirsle_legacy.py into the Rophako root |
|||
* Runs the server |
|||
""" |
|||
|
|||
import os |
|||
import os.path |
|||
import subprocess |
|||
import sys |
|||
|
|||
def main(): |
|||
# Make sure we have everything we need. |
|||
check_depends() |
|||
|
|||
# Do we already have Rophako? |
|||
if os.path.isdir("./rophako"): |
|||
os.chdir("./rophako") |
|||
else: |
|||
# Clone it. |
|||
must_run(["git", "clone", "https://github.com/kirsle/rophako"]) |
|||
os.chdir("./rophako") |
|||
|
|||
# Make the Python environment. |
|||
must_run(["pyvenv", "pyvenv"]) |
|||
must_run(["pyvenv/bin/pip", "install", "-r", "requirements.txt"]) |
|||
|
|||
# Configure it. |
|||
os.symlink("../settings.yml", "settings.yml") |
|||
os.symlink("../kirsle_legacy.py", "kirsle_legacy.py") |
|||
|
|||
print("=" * 80) |
|||
print("Success! Rophako has been cloned and configured! The server") |
|||
print("will now start. To quickly start the server again in the") |
|||
print("future, just run bootstrap.py again.") |
|||
print("=" * 80) |
|||
|
|||
# Run Rophako. |
|||
must_run(["pyvenv/bin/python", "runserver.py"]) |
|||
|
|||
def check_depends(): |
|||
# Make sure we have access to required commands. |
|||
errors = False |
|||
for command in [ "git", "pyvenv" ]: |
|||
try: |
|||
subprocess.check_call(["which", command], |
|||
stdout=subprocess.PIPE, |
|||
stderr=subprocess.PIPE, |
|||
) |
|||
except subprocess.CalledProcessError: |
|||
print("You seem to be missing the command: {}".format(command)) |
|||
errors = True |
|||
|
|||
if errors: |
|||
print("Make sure the required commands are installed and try again.") |
|||
sys.exit(1) |
|||
|
|||
def must_run(args, **kwargs): |
|||
"""Calls subprocess to run a command which must succeed or die.""" |
|||
result = subprocess.call(args, **kwargs) |
|||
if result != 0: |
|||
print("Errors were detected in the command I tried to run: {}".format( |
|||
" ".join(args), |
|||
)) |
|||
sys.exit(1) |
|||
|
|||
if __name__ == "__main__": |
|||
main() |
@ -1,3 +1,7 @@ |
|||
# Apache config from when kirsle.net ran on Apache. |
|||
# |
|||
# This is for a Python mod_wsgi site. |
|||
|
|||
## SSL main site www.kirsle.net |
|||
<VirtualHost *:443> |
|||
ServerName www.kirsle.net |
@ -1,127 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
# Legacy endpoint compatibility from kirsle.net. |
|||
|
|||
from flask import g, request, redirect, url_for, flash |
|||
import re |
|||
import os |
|||
import json |
|||
|
|||
from rophako.settings import Config |
|||
from rophako.app import app |
|||
from rophako.utils import template, login_required |
|||
import rophako.model.blog as Blog |
|||
import rophako.jsondb as JsonDB |
|||
|
|||
|
|||
@app.route("/+") |
|||
def google_plus(): |
|||
return redirect("https://plus.google.com/+NoahPetherbridge/posts") |
|||
|
|||
|
|||
@app.route("/blog.html") |
|||
def ancient_legacy_blog(): |
|||
post_id = request.args.get("id", None) |
|||
if post_id is None: |
|||
return redirect(url_for("blog.index")) |
|||
|
|||
# Look up the friendly ID. |
|||
post = Blog.get_entry(post_id) |
|||
if not post: |
|||
flash("That blog entry wasn't found.") |
|||
return redirect(url_for("blog.index")) |
|||
|
|||
return redirect(url_for("blog.entry", fid=post["fid"]), code=301) |
|||
|
|||
|
|||
@app.route("/blog/kirsle/<fid>") |
|||
def legacy_blog(fid): |
|||
return redirect(url_for("blog.entry", fid=fid), code=301) |
|||
|
|||
|
|||
@app.route("/rss.cgi") |
|||
def legacy_rss(): |
|||
return redirect(url_for("blog.rss"), code=301) |
|||
|
|||
|
|||
@app.route("/firered/<page>") |
|||
@app.route("/firered") |
|||
def legacy_firered(page=""): |
|||
g.info["page"] = str(page) or "1" |
|||
return template("firered.html") |
|||
|
|||
|
|||
@app.route("/download", methods=["GET", "POST"]) |
|||
def legacy_download(): |
|||
form = None |
|||
if request.method == "POST": |
|||
form = request.form |
|||
else: |
|||
# CNET links to the MS-DOS download using semicolon delimiters in the |
|||
# query string. Fix that if detected. |
|||
query = request.query_string.decode() |
|||
if not '&' in query and ';' in query: |
|||
url = re.sub(r';|%3b', '&', request.url, flags=re.IGNORECASE) |
|||
return redirect(url) |
|||
|
|||
form = request.args |
|||
|
|||
method = form.get("method", "index") |
|||
project = form.get("project", "") |
|||
filename = form.get("file", "") |
|||
|
|||
root = "/home/kirsle/www/projects" |
|||
|
|||
if project and filename: |
|||
# Filter the sections. |
|||
project = re.sub(r'[^A-Za-z0-9]', '', project) # Project name is alphanumeric only. |
|||
filename = re.sub(r'[^A-Za-z0-9\-_\.]', '', filename) |
|||
|
|||
# Check that all the files exist. |
|||
if os.path.isdir(os.path.join(root, project)) and os.path.isfile(os.path.join(root, project, filename)): |
|||
# Hit counters. |
|||
hits = { "hits": 0 } |
|||
db = "data/downloads/{}-{}".format(project, filename) |
|||
if JsonDB.exists(db.format(project, filename)): |
|||
hits = JsonDB.get(db) |
|||
|
|||
# Actually getting the file? |
|||
if method == "get": |
|||
# Up the hit counter. |
|||
hits["hits"] += 1 |
|||
JsonDB.commit(db, hits) |
|||
|
|||
g.info["method"] = method |
|||
g.info["project"] = project |
|||
g.info["file"] = filename |
|||
g.info["hits"] = hits["hits"] |
|||
return template("download.html") |
|||
|
|||
flash("The file or project wasn't found.") |
|||
return redirect(url_for("index")) |
|||
|
|||
|
|||
@app.route("/<page>.html") |
|||
def legacy_url(page): |
|||
return redirect("/{}".format(page), code=301) |
|||
|
|||
|
|||
@app.route("/metacity") |
|||
def legacy_metacity(): |
|||
return redirect("https://github.com/kirsle/linux-themes", code=301) |
|||
|
|||
|
|||
@app.route("/ssl_test") |
|||
@login_required |
|||
def ssl_test(): |
|||
return "<pre>{}</pre>".format(json.dumps({ |
|||
"SSLify criteria": { |
|||
"request.is_secure": request.is_secure, |
|||
"app.debug": app.debug, |
|||
"X-Forwarded-Proto is http": request.headers.get("X-Forwarded-Proto", "http") == "https", |
|||
}, |
|||
"App Configuration": { |
|||
"Session cookies secure": app.config["SESSION_COOKIE_SECURE"], |
|||
"config.FORCE_SSL": Config.security.force_ssl, |
|||
}, |
|||
})) |
@ -1,28 +0,0 @@ |
|||
{# Custom category list for kirsle.net <ul>-based design #} |
|||
<ul> |
|||
<li>» <a href="{{ url_for('blog.archive') }}">Blog Archives</a></li> |
|||
{% for tag in tags %} |
|||
{% if not tag["small"] %} |
|||
<li>» <a href="{{ url_for('blog.category', category=tag['category']) }}">{{ tag['category'] }}</a> |
|||
<small>({{ tag['count'] }})</small></li> |
|||
{% endif %} |
|||
{% endfor %} |
|||
</ul> |
|||
|
|||
{% if has_small %} |
|||
<div id="blog_show_more" style="display: none"> |
|||
<ul> |
|||
{% for tag in tags %} |
|||
{% if tag["small"] %} |
|||
<li>» <a href="{{ url_for('blog.category', category=tag['category']) }}">{{ tag['category'] }}</a> |
|||
<small>({{ tag['count'] }})</small></li> |
|||
{% endif %} |
|||
{% endfor %} |
|||
</ul> |
|||
</div> |
|||
<div id="blog_show_less" style="display: block"> |
|||
<ul> |
|||
<li>¤ <a href="#" onClick="$('#blog_show_less').hide(); $('#blog_show_more').show(1000); return false">Show more...</a></li> |
|||
</ul> |
|||
</div> |
|||
{% endif %} |
@ -0,0 +1,20 @@ |
|||
{{ if .IndexView }} |
|||
Sorted by most frequently used: |
|||
|
|||
<ul> |
|||
{{ range .Tags }} |
|||
<li><a href="/tagged/{{ .Name }}">{{ .Name }}</a> ({{ .Count }})</li> |
|||
{{ end }} |
|||
</ul> |
|||
{{ else }} |
|||
<ul> |
|||
<li>» <a href="/archive">Blog Archives</a></li> |
|||
{{ range .Tags }} |
|||
{{ if ge .Count 8 }} |
|||
<li>» <a href="/tagged/{{ .Name }}">{{ .Name }}</a> |
|||
<small>({{ .Count }})</small></li> |
|||
{{ end }} |
|||
{{ end }} |
|||
<li>» <a href="/tagged">View all tags</a></li> |
|||
</ul> |
|||
{{ end }} |
@ -1,442 +0,0 @@ |
|||
/*! |
|||
* Bootstrap v3.2.0 (http://getbootstrap.com) |
|||
* Copyright 2011-2014 Twitter, Inc. |
|||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
|||
*/ |
|||
|
|||
.btn-default, |
|||
.btn-primary, |
|||
.btn-success, |
|||
.btn-info, |
|||
.btn-warning, |
|||
.btn-danger { |
|||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); |
|||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); |
|||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); |
|||
} |
|||
.btn-default:active, |
|||
.btn-primary:active, |
|||
.btn-success:active, |
|||
.btn-info:active, |
|||
.btn-warning:active, |
|||
.btn-danger:active, |
|||
.btn-default.active, |
|||
.btn-primary.active, |
|||
.btn-success.active, |
|||
.btn-info.active, |
|||
.btn-warning.active, |
|||
.btn-danger.active { |
|||
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); |
|||
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); |
|||
} |
|||
.btn:active, |
|||
.btn.active { |
|||
background-image: none; |
|||
} |
|||
.btn-default { |
|||
text-shadow: 0 1px 0 #fff; |
|||
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); |
|||
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); |
|||
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|||
background-repeat: repeat-x; |
|||
border-color: #dbdbdb; |
|||
border-color: #ccc; |
|||
} |
|||
.btn-default:hover, |
|||
.btn-default:focus { |
|||
background-color: #e0e0e0; |
|||
background-position: 0 -15px; |
|||
} |
|||
.btn-default:active, |
|||
.btn-default.active { |
|||
background-color: #e0e0e0; |
|||
border-color: #dbdbdb; |
|||
} |
|||
.btn-default:disabled, |
|||
.btn-default[disabled] { |
|||
background-color: #e0e0e0; |
|||
background-image: none; |
|||
} |
|||
.btn-primary { |
|||
background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); |
|||
background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2)); |
|||
background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|||
background-repeat: repeat-x; |
|||
border-color: #2b669a; |
|||
} |
|||
.btn-primary:hover, |
|||
.btn-primary:focus { |
|||
background-color: #2d6ca2; |
|||
background-position: 0 -15px; |
|||
} |
|||
.btn-primary:active, |
|||
.btn-primary.active { |
|||
background-color: #2d6ca2; |
|||
border-color: #2b669a; |
|||
} |
|||
.btn-primary:disabled, |
|||
.btn-primary[disabled] { |
|||
background-color: #2d6ca2; |
|||
background-image: none; |
|||
} |
|||
.btn-success { |
|||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); |
|||
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); |
|||
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|||
background-repeat: repeat-x; |
|||
border-color: #3e8f3e; |
|||
} |
|||
.btn-success:hover, |
|||
.btn-success:focus { |
|||
background-color: #419641; |
|||
background-position: 0 -15px; |
|||
} |
|||
.btn-success:active, |
|||
.btn-success.active { |
|||
background-color: #419641; |
|||
border-color: #3e8f3e; |
|||
} |
|||
.btn-success:disabled, |
|||
.btn-success[disabled] { |
|||
background-color: #419641; |
|||
background-image: none; |
|||
} |
|||
.btn-info { |
|||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); |
|||
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); |
|||
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|||
background-repeat: repeat-x; |
|||
border-color: #28a4c9; |
|||
} |
|||
.btn-info:hover, |
|||
.btn-info:focus { |
|||
background-color: #2aabd2; |
|||
background-position: 0 -15px; |
|||
} |
|||
.btn-info:active, |
|||
.btn-info.active { |
|||
background-color: #2aabd2; |
|||
border-color: #28a4c9; |
|||
} |
|||
.btn-info:disabled, |
|||
.btn-info[disabled] { |
|||
background-color: #2aabd2; |
|||
background-image: none; |
|||
} |
|||
.btn-warning { |
|||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); |
|||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); |
|||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|||
background-repeat: repeat-x; |
|||
border-color: #e38d13; |
|||
} |
|||
.btn-warning:hover, |
|||
.btn-warning:focus { |
|||
background-color: #eb9316; |
|||
background-position: 0 -15px; |
|||
} |
|||
.btn-warning:active, |
|||
.btn-warning.active { |
|||
background-color: #eb9316; |
|||
border-color: #e38d13; |
|||
} |
|||
.btn-warning:disabled, |
|||
.btn-warning[disabled] { |
|||
background-color: #eb9316; |
|||
background-image: none; |
|||
} |
|||
.btn-danger { |
|||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); |
|||
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); |
|||
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|||
background-repeat: repeat-x; |
|||
border-color: #b92c28; |
|||
} |
|||
.btn-danger:hover, |
|||
.btn-danger:focus { |
|||
background-color: #c12e2a; |
|||
background-position: 0 -15px; |
|||
} |
|||
.btn-danger:active, |
|||
.btn-danger.active { |
|||
background-color: #c12e2a; |
|||
border-color: #b92c28; |
|||
} |
|||
.btn-danger:disabled, |
|||
.btn-danger[disabled] { |
|||
background-color: #c12e2a; |
|||
background-image: none; |
|||
} |
|||
.thumbnail, |
|||
.img-thumbnail { |
|||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); |
|||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075); |
|||
} |
|||
.dropdown-menu > li > a:hover, |
|||
.dropdown-menu > li > a:focus { |
|||
background-color: #e8e8e8; |
|||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); |
|||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); |
|||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.dropdown-menu > .active > a, |
|||
.dropdown-menu > .active > a:hover, |
|||
.dropdown-menu > .active > a:focus { |
|||
background-color: #357ebd; |
|||
background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); |
|||
background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); |
|||
background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.navbar-default { |
|||
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); |
|||
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); |
|||
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|||
background-repeat: repeat-x; |
|||
border-radius: 4px; |
|||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); |
|||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); |
|||
} |
|||
.navbar-default .navbar-nav > .active > a { |
|||
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); |
|||
background-image: -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3)); |
|||
background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); |
|||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); |
|||
} |
|||
.navbar-brand, |
|||
.navbar-nav > li > a { |
|||
text-shadow: 0 1px 0 rgba(255, 255, 255, .25); |
|||
} |
|||
.navbar-inverse { |
|||
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); |
|||
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); |
|||
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.navbar-inverse .navbar-nav > .active > a { |
|||
background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); |
|||
background-image: -o-linear-gradient(top, #222 0%, #282828 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828)); |
|||
background-image: linear-gradient(to bottom, #222 0%, #282828 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); |
|||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); |
|||
} |
|||
.navbar-inverse .navbar-brand, |
|||
.navbar-inverse .navbar-nav > li > a { |
|||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); |
|||
} |
|||
.navbar-static-top, |
|||
.navbar-fixed-top, |
|||
.navbar-fixed-bottom { |
|||
border-radius: 0; |
|||
} |
|||
.alert { |
|||
text-shadow: 0 1px 0 rgba(255, 255, 255, .2); |
|||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); |
|||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); |
|||
} |
|||
.alert-success { |
|||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); |
|||
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); |
|||
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
border-color: #b2dba1; |
|||
} |
|||
.alert-info { |
|||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); |
|||
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); |
|||
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
border-color: #9acfea; |
|||
} |
|||
.alert-warning { |
|||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); |
|||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); |
|||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
border-color: #f5e79e; |
|||
} |
|||
.alert-danger { |
|||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); |
|||
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); |
|||
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
border-color: #dca7a7; |
|||
} |
|||
.progress { |
|||
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); |
|||
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); |
|||
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.progress-bar { |
|||
background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); |
|||
background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9)); |
|||
background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.progress-bar-success { |
|||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); |
|||
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); |
|||
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.progress-bar-info { |
|||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); |
|||
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); |
|||
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.progress-bar-warning { |
|||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); |
|||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); |
|||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.progress-bar-danger { |
|||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); |
|||
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); |
|||
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.progress-bar-striped { |
|||
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); |
|||
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); |
|||
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); |
|||
} |
|||
.list-group { |
|||
border-radius: 4px; |
|||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); |
|||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075); |
|||
} |
|||
.list-group-item.active, |
|||
.list-group-item.active:hover, |
|||
.list-group-item.active:focus { |
|||
text-shadow: 0 -1px 0 #3071a9; |
|||
background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); |
|||
background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3)); |
|||
background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
border-color: #3278b3; |
|||
} |
|||
.panel { |
|||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); |
|||
box-shadow: 0 1px 2px rgba(0, 0, 0, .05); |
|||
} |
|||
.panel-default > .panel-heading { |
|||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); |
|||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); |
|||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.panel-primary > .panel-heading { |
|||
background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); |
|||
background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); |
|||
background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.panel-success > .panel-heading { |
|||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); |
|||
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); |
|||
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.panel-info > .panel-heading { |
|||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); |
|||
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); |
|||
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.panel-warning > .panel-heading { |
|||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); |
|||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); |
|||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.panel-danger > .panel-heading { |
|||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); |
|||
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); |
|||
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
} |
|||
.well { |
|||
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); |
|||
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); |
|||
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); |
|||
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); |
|||
background-repeat: repeat-x; |
|||
border-color: #dcdcdc; |
|||
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); |
|||
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); |
|||
} |
|||
/*# sourceMappingURL=bootstrap-theme.css.map */ |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,49 @@ |
|||
{{ define "title" }}Download{{ end }} |
|||
{{ define "content" }} |
|||
|
|||
{{ $method := or (.Request.FormValue "method") "index" }} |
|||
{{ $project := .Request.FormValue "project" }} |
|||
{{ $file := .Request.FormValue "file" }} |
|||
{{ if eq $project "" }} |
|||
<h1>An error has occurred</h1> |
|||
{{ else if eq $method "index" }} |
|||
<h1>Project {{ $project }}</h1> |
|||
|
|||
You are about to download the file <strong>{{ $file }}</strong> from the |
|||
project <strong>{{ $project }}</strong>. <!-- This file has been downloaded |
|||
0 time(s). --> |
|||
|
|||
<h1>Download</h1> |
|||
|
|||
To continue your download, click on the button below. |
|||
<br><br><br> |
|||
|
|||
<form name="download" action="/download" method="POST"> |
|||
<input type="hidden" name="_csrf" value="{{ .CSRF }}"> |
|||
<input type="hidden" name="method" value="get"> |
|||
<input type="hidden" name="project" value="{{ $project }}"> |
|||
<input type="hidden" name="file" value="{{ $file }}"> |
|||
|
|||
<span style="background-color: #88AADD; padding: 15px; border-top: 2px solid #006699; |
|||
border-left: 2px solid #006699; border-right: 2px solid #AACCFF; border-bottom: 2px solid #AACCFF"> |
|||
<button type="submit">Download Now</button> |
|||
</span> |
|||
</form> |
|||
{{ else if eq $method "get" }} |
|||
<h1>Downloading File...</h1> |
|||
|
|||
Your download of <strong>{{ $file }}</strong> will begin shortly. If it doesn't, |
|||
<a href="/projects/{{ $project }}/{{ $file }}">download it directly</a>. |
|||
|
|||
<script type="text/javascript"> |
|||
(function() { |
|||
setTimeout(function() { |
|||
window.location.href = "/projects/{{ $project }}/{{ $file }}"; |
|||
}, 2000); |
|||
})(); |
|||
</script> |
|||
{{ else }} |
|||
<h1>An error has occurred.</h1> |
|||
{{ end}} |
|||
|
|||
{{ end }} |
@ -1,44 +0,0 @@ |
|||
{% extends "layout.html" %} |
|||
{% block title %}Download Manager{% endblock %} |
|||
{% block content %} |
|||
|
|||
{% if method == "index" %} |
|||
<h1>Project {{ project }}</h1> |
|||
|
|||
You are about to download the file <strong>{{ file }}</strong> from the |
|||
project <strong>{{ project }}</strong>. This file has been downloaded |
|||
{{ hits }} time(s). |
|||
|
|||
<h1>Download</h1> |
|||
|
|||
To continue your download, click on the button below. |
|||
<br><br><br> |
|||
|
|||
<form name="download" action="/download" method="POST"> |
|||
<input type="hidden" name="token" value="{{ csrf_token() }}"> |
|||
<input type="hidden" name="method" value="get"> |
|||
<input type="hidden" name="project" value="{{ project }}"> |
|||
<input type="hidden" name="file" value="{{ file }}"> |
|||
|
|||
<span style="background-color: #88AADD; padding: 15px; border-top: 2px solid #006699; |
|||
border-left: 2px solid #006699; border-right: 2px solid #AACCFF; border-bottom: 2px solid #AACCFF"> |
|||
<button type="submit">Download Now</button> |
|||
</span> |
|||
</form> |
|||
{% elif method == "get" %} |
|||
<h1>Downloading File...</h1> |
|||
|
|||
Your download of <strong>{{ file }}</strong> will begin shortly. If it doesn't, |
|||
<a href="/projects/{{ project }}/{{ file }}">download it directly</a>. |
|||
{% endif %} |
|||
|
|||
{% endblock %} |
|||
{% block scripts %} |
|||
{% if method == "get" %} |
|||
<script> |
|||
$(document).ready(function() { |
|||
window.location.href = "/projects/{{ project }}/{{ file }}"; |
|||
}); |
|||
</script> |
|||
{% endif %} |
|||
{% endblock %} |
@ -0,0 +1,21 @@ |
|||
{{ define "title" }}AiChaos Warners - Flash Animations{{ end }} |
|||
{{ define "content" }} |
|||
|
|||
<h1>AiChaos Warners</h1> |
|||
|
|||
<script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script> |
|||
|
|||
<div id="swfObject"></div> |
|||
<br><br> |
|||
|
|||
<script> |
|||
swfobject.embedSWF("/creativity/flash/warners.swf", "swfObject", |
|||
550, 400, |
|||
"10.0.0" |
|||
); |
|||
</script> |
|||
|
|||
|
|||
« <a href="/flash">More Flash Animations</a> |
|||
|
|||
{{ end }} |
@ -1,15 +0,0 @@ |
|||
{% extends "layout.html" %} |
|||
{% block title %}AiChaos Warners - Flash Animations{% endblock %} |
|||
{% block content %} |
|||
|
|||
<h1>AiChaos Warners</h1> |
|||
|
|||
{% set swf_path="/creativity/flash/warners.swf" %} |
|||
{% set swf_width=550 %} |
|||
{% set swf_height=400 %} |
|||
{% include "flash/flash-common.html" %} |
|||
|
|||
|
|||
« <a href="/flash">More Flash Animations</a> |
|||
|
|||
{% endblock %} |
@ -1,12 +0,0 @@ |
|||
<script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script> |
|||
|
|||
<div id="swfObject"></div> |
|||
<br><br> |
|||
|
|||
<script> |
|||
swfobject.embedSWF("{{ swf_path }}", "swfObject", |
|||
{{ swf_width }}, {{ swf_height }}, |
|||
"10.0.0" |
|||
); |
|||
</script> |
|||
|
@ -0,0 +1,20 @@ |
|||
{{ define "title" }}Kanian/Azulian War - Flash Animations{{ end }} |
|||
{{ define "content" }} |
|||
|
|||
<h1>Kanian/Azulian War</h1> |
|||
|
|||
<script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script> |
|||
|
|||
<div id="swfObject"></div> |
|||
<br><br> |
|||
|
|||
<script> |
|||
swfobject.embedSWF("/creativity/flash/KanianAzuWar.swf", "swfObject", |
|||
550, 400, |
|||
"10.0.0" |
|||
); |
|||
</script> |
|||
|
|||
« <a href="/flash">More Flash Animations</a> |
|||
|
|||
{{ end }} |
@ -1,14 +0,0 @@ |
|||
{% extends "layout.html" %} |
|||
{% block title %}Kanian/Azulian War - Flash Animations{% endblock %} |
|||
{% block content %} |
|||
|
|||
<h1>Kanian/Azulian War</h1> |
|||
|
|||
{% set swf_path="/creativity/flash/KanianAzuWar.swf" %} |
|||
{% set swf_width=550 %} |
|||
{% set swf_height=400 %} |
|||
{% include "flash/flash-common.html" %} |
|||
|
|||
« <a href="/flash">More Flash Animations</a> |
|||
|
|||
{% endblock %} |
@ -0,0 +1,20 @@ |
|||
{{ define "title" }}Pwnizard, I Choose You! - Flash Animations{{ end }} |
|||