First commit.
18
subsites/films/about.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<p>
|
||||
This is nohifilms, Niels Serup's index of his short films. The earliest films
|
||||
involved often revolve around
|
||||
the <a href='http://en.wikipedia.org/wiki/Stopmotion'>stopmotion
|
||||
technique</a>, while others don't.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href='http://playogg.org/'>
|
||||
<img src='/static/playogg.png' alt='Play OGG' />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
nohifilms runs on a simple AGPLv3-licensed WSGI script which can downloaded
|
||||
<a href='/films.wsgi'>here</a> using an Apache config file similar
|
||||
to <a href='/apache-config-template'>this one</a>.
|
||||
</p>
|
||||
28
subsites/films/apache-config-template
Normal file
@@ -0,0 +1,28 @@
|
||||
<VirtualHost *:80>
|
||||
|
||||
ServerName films.example.org
|
||||
ServerAlias films.example.org
|
||||
ServerAdmin webmaster@example.org
|
||||
|
||||
DocumentRoot /path/to/dir/of/films
|
||||
|
||||
Alias /robots.txt /path/to/dir/of/films/robots.txt
|
||||
Alias /favicon.ico /path/to/dir/of/films/favicon.ico
|
||||
Alias /favicon.png /path/to/dir/of/films/favicon.png
|
||||
Alias /static /path/to/dir/of/films/static
|
||||
Alias /previews /path/to/dir/of/films/previews
|
||||
Alias /films /path/to/dir/of/videos
|
||||
Alias /films.wsgi /path/to/dir/of/films/films.wsgi
|
||||
Alias /apache-config-template /path/to/dir/of/films/apache-config-template
|
||||
|
||||
<Directory /path/to/dir/of/films>
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
</Directory>
|
||||
|
||||
WSGIDaemonProcess films.example.org processes=2 threads=15 display-name=%{GROUP}
|
||||
WSGIProcessGroup films.example.org
|
||||
|
||||
WSGIScriptAlias / /path/to/dir/of/films/films.wsgi
|
||||
|
||||
</VirtualHost>
|
||||
175
subsites/films/filminfo
Normal file
@@ -0,0 +1,175 @@
|
||||
super-surveillance
|
||||
SUPER SURVEILLANCE
|
||||
2011
|
||||
true
|
||||
ab
|
||||
true
|
||||
|
||||
Yes, it is true. Truedom.
|
||||
|
||||
|
||||
creative-process
|
||||
The Creative Process of an Artist
|
||||
2010
|
||||
false
|
||||
ab
|
||||
false
|
||||
|
||||
I was bored.
|
||||
|
||||
|
||||
paranoia
|
||||
Paranoia
|
||||
2010
|
||||
true
|
||||
ab
|
||||
false
|
||||
|
||||
Do <em>you</em> have paranoia?
|
||||
|
||||
|
||||
box
|
||||
Box
|
||||
2010
|
||||
true
|
||||
ab
|
||||
false
|
||||
|
||||
A box and a human.
|
||||
|
||||
|
||||
cola
|
||||
Cola
|
||||
2008
|
||||
true
|
||||
bcd
|
||||
false
|
||||
|
||||
The Coca Cola Company has created a monster: a can that moves by itself! Too
|
||||
much caffeine, perhaps?
|
||||
|
||||
|
||||
robo
|
||||
Robo
|
||||
2009
|
||||
true
|
||||
bcd
|
||||
false
|
||||
|
||||
In the future, scientists will have to construct robots out of crap. For now,
|
||||
simple boxes will do.<br /><br />Music credit goes to user RedChili at <a
|
||||
href="http://jamendo.com/en/user/redchili">http://jamendo.com/en/user/redchili</a>. His
|
||||
track is called "Sen Mandaryna" and is released under CC-BY-NC-SA 3.0, which is
|
||||
why I have to license this works as a whole under the same license, thus
|
||||
releasing this film under the <b>Creative Commons
|
||||
Attribution-Noncommercial-ShareAlike 3.0</b>. Note that this film is available
|
||||
under CC-BY-SA as well, just without the background music. So if you want to
|
||||
use this for commercial purposes, use another soundtrack.
|
||||
|
||||
|
||||
dice
|
||||
Dice
|
||||
2010
|
||||
false
|
||||
bcd
|
||||
false
|
||||
|
||||
A die meets a die. No sound.
|
||||
|
||||
|
||||
compufight
|
||||
Compufight
|
||||
2009
|
||||
false
|
||||
bcde
|
||||
false
|
||||
|
||||
The kung fu of computing.
|
||||
|
||||
|
||||
mobility
|
||||
Mobility
|
||||
2008
|
||||
true
|
||||
bcde
|
||||
false
|
||||
|
||||
Is it a bird? Is it an airplane? No, it's a MOBILE PHONE!
|
||||
|
||||
|
||||
legoshow
|
||||
Lego SHOW
|
||||
2006
|
||||
false
|
||||
none
|
||||
false
|
||||
|
||||
Showoff.
|
||||
|
||||
|
||||
easteregg
|
||||
Beware of the Easter Egg
|
||||
2007
|
||||
false
|
||||
none
|
||||
false
|
||||
|
||||
It's dangerous, I tell you. Beware of other traditions, too.<br /><br />Music
|
||||
credit goes to freesound contributor Richard Frohlich at <a
|
||||
href="http://freesound.org/">freesound.org</a>. His piano track is released
|
||||
under <a href="http://creativecommons.org/licenses/sampling+/1.0/">CC Sampling
|
||||
Plus 1.0.</a>. When I originally applied this track to my film, I didn't
|
||||
realize that its license was somewhat non-free and not compatible with
|
||||
CC-BY-SA. So to get this film under CC-BY-SA, you'll have to take it without
|
||||
sound.
|
||||
|
||||
|
||||
compumotion
|
||||
Compumotion
|
||||
2008
|
||||
false
|
||||
bcd
|
||||
false
|
||||
|
||||
Or maybe "Lapstop"?
|
||||
|
||||
|
||||
crazychristmas
|
||||
Crazy Christmas
|
||||
2007
|
||||
false
|
||||
bcd
|
||||
false
|
||||
|
||||
Celebrating Christmas also means celebrating the day these unfortunate lego
|
||||
accesories went berserk.
|
||||
|
||||
|
||||
testdraw
|
||||
Test draw
|
||||
2008
|
||||
true
|
||||
b
|
||||
false
|
||||
|
||||
Just testing.
|
||||
|
||||
|
||||
legoparty
|
||||
Lego Party
|
||||
2006
|
||||
false
|
||||
bc
|
||||
false
|
||||
|
||||
They seem to be slightly.. drunk?
|
||||
|
||||
|
||||
saltvspepper
|
||||
Salt vs. pepper
|
||||
2008
|
||||
false
|
||||
bcd
|
||||
false
|
||||
|
||||
Who will win this battle of destiny?
|
||||
3
subsites/films/films.config
Normal file
@@ -0,0 +1,3 @@
|
||||
[films]
|
||||
previews_dir = /previews
|
||||
videos_dir = /films
|
||||
185
subsites/films/films.wsgi
Normal file
@@ -0,0 +1,185 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# films.wsgi: a WSGI script for showing films
|
||||
# Copyright (C) 2011 Niels Serup
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public
|
||||
# License along with this program. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
|
||||
## Version:...... 0.1.0
|
||||
## Maintainer:... Niels Serup <ns@metanohi.org>
|
||||
## Website:...... http://films.metanohi.name/about/
|
||||
|
||||
import sys
|
||||
import os
|
||||
import bottle
|
||||
from bottle import route, abort, error, request, redirect
|
||||
import configparser
|
||||
import locale
|
||||
_preferred_encoding = 'utf-8' #locale.getpreferredencoding() # fail
|
||||
|
||||
_absfile = os.path.abspath(__file__)
|
||||
_filedir = os.path.dirname(_absfile)
|
||||
_configfile_name = 'films.config'
|
||||
|
||||
# Get settings
|
||||
_settings = {'previews_dir': '/previews', 'videos_dir': '/videos'} # Defaults
|
||||
|
||||
_cfg = configparser.SafeConfigParser(_settings)
|
||||
_cfg.add_section('films')
|
||||
try:
|
||||
_cfg.read(os.path.join(_filedir, _configfile_name))
|
||||
except configparser.Error as e:
|
||||
print('Python error: ' + repr(e), file=sys.stderr)
|
||||
except TypeError:
|
||||
pass
|
||||
_settings = {name: value for name, value in _cfg.items('films')}
|
||||
|
||||
# Get templates
|
||||
def _readfile(locpath):
|
||||
with open(os.path.join(_filedir, locpath), 'rb') as f:
|
||||
return f.read().decode(_preferred_encoding)
|
||||
|
||||
_template, _about, _frontpage = (_readfile(x + '.html') for x in
|
||||
('template', 'about', 'frontpage'))
|
||||
|
||||
# Create more templates
|
||||
_videosource = ''' <source src='{url}' type='{mime}' />\n'''
|
||||
_videotemplate = '''
|
||||
<video width='640' height='{height}' autoplay='autoplay'
|
||||
controls='controls', style='width: 640px; height: {height}px;'>
|
||||
{sources}
|
||||
<applet code='com.fluendo.player.Cortado.class'
|
||||
archive='http://theora.org/cortado.jar'
|
||||
width='640' height='{height}'>
|
||||
<param name='url' value='{url}' />
|
||||
</applet>
|
||||
</video>
|
||||
|
||||
<div id='description' style='height: {height}px'>
|
||||
<p>{description}</p>
|
||||
<p><span>Year:</span> {year}</p>
|
||||
</div>
|
||||
|
||||
<div id='dl'>
|
||||
<p><span>Download:</span> {downloads}</p>
|
||||
</div>
|
||||
'''
|
||||
|
||||
# Extract info
|
||||
def _parse_filminfo(locpath):
|
||||
with open(os.path.join(_filedir, locpath), 'U') as f:
|
||||
sfilms = (line.split('\n', 7) for line in f.read().split('\n' * 3))
|
||||
films, films_html = [], {}
|
||||
i = 1
|
||||
for x in sfilms:
|
||||
kwds = {
|
||||
'name': x[0],
|
||||
'title': x[1],
|
||||
'year': int(x[2]),
|
||||
'16:9': x[3] == 'true',
|
||||
'sizes': x[4],
|
||||
'webm': x[5] == 'true',
|
||||
'description': x[7]
|
||||
}
|
||||
|
||||
if kwds['16:9']:
|
||||
kwds['height'] = 360
|
||||
sizes = (
|
||||
'640x360',
|
||||
'1024x576',
|
||||
'1280x720',
|
||||
'1920x1080'
|
||||
)
|
||||
else:
|
||||
kwds['height'] = 480
|
||||
sizes = (
|
||||
'640x480',
|
||||
'768x576',
|
||||
'960x720',
|
||||
'1440x1080'
|
||||
)
|
||||
kwds['downloads'] = ''
|
||||
linknames = {
|
||||
'': (sizes[0], '640w'),
|
||||
'b': (sizes[1], '576p'),
|
||||
'c': (sizes[2], '720p'),
|
||||
'd': (sizes[3], '1080p'),
|
||||
'e': ('Behind', 'behind')
|
||||
}
|
||||
for x in filter(lambda x: x in kwds['sizes'], linknames.keys()):
|
||||
linkname, sid = linknames[x]
|
||||
if kwds['webm']:
|
||||
kwds['downloads'] += "<a href='{dir}/{name}-{sid}.webm'>{linkname} WebM</a>".format(
|
||||
dir=_settings['videos_dir'], sid=sid, name=kwds['name'], linkname=linkname)
|
||||
kwds['downloads'] += "<a href='{dir}/{name}-{sid}.ogv'>{linkname} Theora</a>".format(
|
||||
dir=_settings['videos_dir'], sid=sid, name=kwds['name'], linkname=linkname)
|
||||
|
||||
addr = _settings['videos_dir']
|
||||
srcs = ''
|
||||
kwds['url'] = '{}/{}-{}.ogv'.format(
|
||||
addr, kwds['name'], linknames[''][1])
|
||||
if kwds['webm']:
|
||||
srcs += _videosource.format(url='{}/{}-{}.webm'.format(
|
||||
addr, kwds['name'], linknames[''][1]), mime='video/webm')
|
||||
srcs += _videosource.format(url=kwds['url'], mime='video/ogg')
|
||||
kwds['sources'] = srcs
|
||||
kwds['content'] = _videotemplate.format(**kwds)
|
||||
kwds['leftclass'] = " class='left'" if i % 2 else ''
|
||||
i += 1
|
||||
|
||||
films.append(kwds)
|
||||
films_html[kwds['name']] = _template.format(**kwds)
|
||||
return films, films_html
|
||||
|
||||
_films, _films_html = _parse_filminfo('filminfo')
|
||||
_settings['numberoffilms'] = len(_films)
|
||||
|
||||
# Improve templates
|
||||
_frontpage_boxlink = '''
|
||||
<a href='/{{name}}' style='background-image: url({previews_dir}/{{name}}.jpg);'{{leftclass}}>
|
||||
<span>{{title}}</span>
|
||||
</a>
|
||||
'''.format(**_settings)
|
||||
|
||||
_settings['filmboxes'] = ''.join(_frontpage_boxlink.format(**kwds)
|
||||
for kwds in _films)
|
||||
|
||||
_frontpage = _frontpage.format(**_settings)
|
||||
|
||||
_settings['content'], _settings['title'] = _frontpage, 'Start'
|
||||
_frontpage = _template.format(**_settings)
|
||||
_settings['content'], _settings['title'] = _about, 'About'
|
||||
_about = _template.format(**_settings)
|
||||
del _settings['content']
|
||||
del _settings['title']
|
||||
|
||||
@route('/')
|
||||
def frontpage():
|
||||
if request.query_string:
|
||||
# compatibility reasons, can be removed
|
||||
redirect('/' + request.query_string)
|
||||
return _frontpage
|
||||
|
||||
@route('/about')
|
||||
@route('/!about') # compatibility reasons, can be removed
|
||||
def about():
|
||||
return _about
|
||||
|
||||
@route('/:name')
|
||||
def film(name):
|
||||
return _films_html[name]
|
||||
|
||||
application = bottle.default_app()
|
||||
|
||||
17
subsites/films/frontpage.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<p>
|
||||
This is my personal film index. Below is a list of the {numberoffilms} films
|
||||
that I have so far produced. The films are both downloadable and directly
|
||||
viewable in any fairly modern web browser. I'm releasing all of my films
|
||||
under the <a href='http://creativecommons.org/licenses/by-sa/3.0/'>Creative
|
||||
Commons Attribution-ShareAlike 3.0 license</a>, which permits everyone to
|
||||
remix and share my videos as long as they attribute me and do not restrict
|
||||
other remixers and sharers from altering and sharing new versions.
|
||||
</p>
|
||||
<p><a href='/about'>Read more.</a></p>
|
||||
|
||||
<div id='films'>
|
||||
{filmboxes}
|
||||
<div class='end'></div>
|
||||
</div>
|
||||
|
||||
<p>That is all.</p>
|
||||
BIN
subsites/films/previews/box.jpg
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
subsites/films/previews/cola.jpg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
subsites/films/previews/compufight.jpg
Normal file
|
After Width: | Height: | Size: 237 KiB |
BIN
subsites/films/previews/compumotion.jpg
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
subsites/films/previews/crazychristmas.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
subsites/films/previews/creative-process.jpg
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
subsites/films/previews/dice.jpg
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
subsites/films/previews/easteregg.jpg
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
subsites/films/previews/legoparty.jpg
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
subsites/films/previews/legoshow.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
subsites/films/previews/mobility.jpg
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
subsites/films/previews/paranoia.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
subsites/films/previews/robo.jpg
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
subsites/films/previews/saltvspepper.jpg
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
subsites/films/previews/super-surveillance.jpg
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
subsites/films/previews/testdraw.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
2
subsites/films/robots.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
User-agent: *
|
||||
Disallow: /static
|
||||
BIN
subsites/films/static/logo.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
111
subsites/films/static/logo.svg
Normal file
@@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="300"
|
||||
height="75"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.46"
|
||||
version="1.0"
|
||||
sodipodi:docname="logo.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
id="linearGradient4627">
|
||||
<stop
|
||||
style="stop-color:#b9b9b9;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4629" />
|
||||
<stop
|
||||
style="stop-color:#b13a3a;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4631" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3179"
|
||||
x="-0.02068712"
|
||||
width="1.0413742"
|
||||
y="-0.1385752"
|
||||
height="1.2771504">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="2.3188809"
|
||||
id="feGaussianBlur3181" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4627"
|
||||
id="linearGradient4635"
|
||||
x1="177.11351"
|
||||
y1="196.21216"
|
||||
x2="447.64648"
|
||||
y2="196.21216"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-164.26057,-161.22003)" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.9466667"
|
||||
inkscape:cx="150"
|
||||
inkscape:cy="37.5"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="938"
|
||||
inkscape:window-x="-4"
|
||||
inkscape:window-y="-4" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:73.6212616px;font-style:normal;font-weight:bold;line-height:125%;fill:url(#linearGradient4635);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3179);font-family:Bitstream Vera Sans;-inkscape-font-specification:DejaVu Sans Mono Bold"
|
||||
x="8.5248137"
|
||||
y="55.575882"
|
||||
id="text2383"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2385"
|
||||
x="8.5248137"
|
||||
y="55.575882"
|
||||
style="font-size:51.53488159px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4635);fill-opacity:1;fill-rule:nonzero;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono Bold">nohifilms</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
BIN
subsites/films/static/playogg.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
135
subsites/films/static/screen.css
Normal file
@@ -0,0 +1,135 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #555;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
font-family: 'Dejavu Sans', 'Nimbus Sans', Helvetica, Arial, Verdana, sans-serif;
|
||||
}
|
||||
|
||||
.end {
|
||||
clear: both;
|
||||
float: none;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#wrapper {
|
||||
width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#header {
|
||||
font-size: 30px;
|
||||
height: 20px;
|
||||
background: #000 url(logo.png) right top no-repeat;
|
||||
margin-bottom: 6px;
|
||||
padding: 23px 6px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#header a {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 198px;
|
||||
height: 66px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#content {
|
||||
background: #222;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* MAIN PAGE SPECIFIC */
|
||||
#films {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
#films a {
|
||||
width: 435px;
|
||||
height: 300px;
|
||||
float: left;
|
||||
background-color: #666;
|
||||
background-position: center center;
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#films a.left {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
#films a span {
|
||||
width: 425px;
|
||||
padding: 3px 5px;
|
||||
background: rgba(0, 0, 0, .5);
|
||||
font-size: 25px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#films a:hover div {
|
||||
height: 294px;
|
||||
}
|
||||
|
||||
#film {
|
||||
width: 640px;
|
||||
background: #999;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
span {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#description {
|
||||
padding: 5px;
|
||||
width: 220px;
|
||||
overflow: auto;
|
||||
float: right;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#dl {
|
||||
clear: both;
|
||||
padding: 3px;
|
||||
background: #444;
|
||||
}
|
||||
|
||||
#dl a {
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
#footer {
|
||||
margin-top: 6px;
|
||||
background: #000;
|
||||
padding: 3px;
|
||||
font-size: 11px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: Inconsolata, 'Dejavu Sans Mono', monospace;
|
||||
}
|
||||
|
||||
.end {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
a:link, a:visited {
|
||||
color: #00aaff;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #00eeff;
|
||||
}
|
||||
50
subsites/films/template.html
Normal file
@@ -0,0 +1,50 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN'
|
||||
'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>
|
||||
<html version='-//W3C//DTD XHTML 1.1//EN'
|
||||
xmlns='http://www.w3.org/1999/xhtml'
|
||||
xml:lang='en'
|
||||
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
|
||||
xsi:schemaLocation='http://www.w3.org/1999/xhtml
|
||||
http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd'>
|
||||
<head>
|
||||
<title>nohifilms :: {title}</title>
|
||||
<meta name='author' content='Niels Serup' />
|
||||
<meta name='description'
|
||||
content='This site contains films by Niels Serup.' />
|
||||
<meta name='keywords'
|
||||
content='films' />
|
||||
<link rel='stylesheet' type='text/css'
|
||||
href='/static/screen.css' />
|
||||
<link rel='schema.DCTERMS' href='http://purl.org/dc/terms/' />
|
||||
<meta name='DCTERMS.title' content='nohifilms :: {title}' />
|
||||
<meta name='DCTERMS.creator' content='Niels Serup' />
|
||||
<meta name='DCTERMS.language' content='en' />
|
||||
<meta name='DCTERMS.isPartOf' content='http://films.metanohi.name/' />
|
||||
<link rel='copyright' href='http://creativecommons.org/licenses/by-sa/3.0/' />
|
||||
<meta name='DCTERMS.license' content='http://creativecommons.org/licenses/by-sa/3.0/' />
|
||||
<meta name='robots' content='ALL' />
|
||||
<link rel='icon' type='image/png' href='/favicon.png' />
|
||||
</head>
|
||||
<body>
|
||||
<div id='wrapper'>
|
||||
|
||||
<div id='header'>
|
||||
<a href='/'></a>
|
||||
</div>
|
||||
|
||||
<div id='content'>
|
||||
{content}
|
||||
</div>
|
||||
|
||||
<div id='footer'>
|
||||
Videos and text are released under
|
||||
the <a href='http://creativecommons.org/licenses/by-sa/3.0/'>Creative
|
||||
Commons Attribution-ShareAlike 3.0 Unported license</a>. Copyleft ©
|
||||
2006, 2007, 2008, 2009, 2010,
|
||||
2011 <a href='http://metanohi.name/about/niels'>Niels Serup</a>.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||