summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluxagraf <sng@luxagraf.net>2012-10-14 22:29:43 -0400
committerluxagraf <sng@luxagraf.net>2012-10-14 22:29:43 -0400
commit37ca84e1f55e14b87b1f8d9e02e81d9b55efca85 (patch)
tree96b21f645ff6e321694e4cec1839844f0e22d358
parent3e2646125792d2152aef086bfad2f0d1062f1d66 (diff)
moved and modified a few templates
-rw-r--r--.gitignore1
-rw-r--r--design/templates/admin/base.html119
-rw-r--r--design/templates/admin/buttons.html59
-rw-r--r--design/templates/admin/index.html79
-rw-r--r--design/templates/admin/message.html21
-rw-r--r--design/templates/archives/map_data.html111
-rw-r--r--design/templates/archives/writing_date.html26
-rw-r--r--design/templates/details/entry.txt8
-rw-r--r--design/templates/details/gifs.html83
-rw-r--r--design/templates/details/page.html18
-rw-r--r--design/templates/details/page.txt8
-rw-r--r--design/templates/feed.xml26
12 files changed, 559 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index ad795bb..35b461c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ Thumbs.db
*.pyc
venv/
site/
+static/
diff --git a/design/templates/admin/base.html b/design/templates/admin/base.html
new file mode 100644
index 0000000..3ed4858
--- /dev/null
+++ b/design/templates/admin/base.html
@@ -0,0 +1,119 @@
+{% load admin_static %}{% load url from future %}{% load i18n grp_tags %}
+<!DOCTYPE html>
+<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% comment %}{% if LANGUAGE_BIDI %}dir="rtl"{% endif %}{% endcomment %}>
+<head>
+ <title>{% block title %}{% endblock %}</title>
+ <meta charset="utf-8" />
+ {% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
+ <!-- STYLESHEETS -->
+ {% block stylesheets %}
+ <link href="{% static "grappelli/jquery/ui/css/custom-theme/jquery-ui-1.8.18.custom.css" %}" rel="stylesheet" type="text/css" media="screen" />
+ <link href="{% static "grappelli/stylesheets/screen.css" %}" rel="stylesheet" type="text/css" media="screen" />
+ <link href="{% static "grappelli/stylesheets/mueller/grid/output.css" %}" rel="stylesheet" type="text/css" media="screen" />
+ {% comment %}{% if LANGUAGE_BIDI %}<link href="{% block stylesheet_rtl %}{% static "grappelli/css/rtl.css" %}{% endblock %}" rel="stylesheet" type="text/css" media="screen" />{% endif %}{% endcomment %}
+ {% endblock %}
+ <!-- EXTRASTYLES -->
+ {% block extrastyle %}{% endblock %}
+ <!-- JAVASCRIPTS -->
+ {% block javascripts %}
+ <script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "grappelli/" %}{% endfilter %}";</script>
+ <script type="text/javascript" charset="utf-8">
+ // GLOBALS
+ var grappelli = {},
+ ADMIN_URL = "{% url 'admin:index' %}",
+ MODEL_URL_ARRAY = {% get_content_types %},
+ DATE_FORMAT = "{% get_date_format %}",
+ TIME_FORMAT = "{% get_time_format %}",
+ DATETIME_FORMAT = "{% get_datetime_format %}";
+ </script>
+ <!-- jQuery, jQuery-UI -->
+ <script src="{% static "grappelli/jquery/jquery-1.7.2.min.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/jquery/ui/js/jquery-ui-1.8.18.custom.min.js" %}" type="text/javascript"></script>
+ {% if debug %}
+ <!-- Grappelli Main JS -->
+ <script src="{% static "grappelli/js/grappelli.js" %}" type="text/javascript"></script>
+ <!-- Grappelli jQuery Plugins, Widgets -->
+ <script src="{% static "grappelli/js/jquery.grp_collapsible.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_collapsible_group.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_timepicker.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_related_fk.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_related_m2m.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_related_generic.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_autocomplete_fk.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_autocomplete_m2m.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_autocomplete_generic.js" %}" type="text/javascript"></script>
+ <script src="{% static "grappelli/js/jquery.grp_inline.js" %}" type="text/javascript"></script>
+ {% else %}
+ <!-- Grappelli Minified -->
+ <script src="{% static "grappelli/js/grappelli.min.js" %}" type="text/javascript"></script>
+ {% endif %}
+ {% endblock %}
+ <!-- EXTRAHEAD -->
+ {% block extrahead %}{% endblock %}
+</head>
+<body {%block onload%}{%endblock%} class="{% if is_popup %}grp-popup {% endif %}{% block bodyclass %}{% endblock %}">
+ <div id="grp-container">
+
+ <!-- HEADER -->
+ <header id="grp-header" class="{% block header-class %}{% endblock %}">
+ {% if not is_popup %}
+
+ <!-- NAVIGATION -->
+ {% include "admin/includes_grappelli/header.html" %}
+
+ <!-- CONTEXT NAVIGATION -->
+ <div id="grp-context-navigation">
+ <nav id="grp-breadcrumbs" class="{% block breadcrumbs-class %}{% endblock %}">
+ <header style="display:none"><h1>Breadcrumbs</h1></header>
+ {% block breadcrumbs %}
+ <ul>
+ <li><a href="/">{% trans 'Home' %}</a></li>
+ {% if title %}
+ <li> &rsaquo; {{ title }}</li>
+ {% endif %}
+ </ul>
+ {% endblock %}
+ </nav>
+ <nav id="grp-page-tools">
+ <header style="display:none"><h1>Page Tools</h1></header>
+ {% block page-tools %}{% endblock %}
+ </nav>
+ </div>
+ {% endif %}
+ </header>
+
+ <!-- CONTENT -->
+ <article id="grp-content" class="{% block content-class %}{% endblock %}">
+
+ <!-- MESSAGES -->
+ {% if messages %}
+ <ul class="grp-messagelist">
+ {% for message in messages %}
+ <li{% if message.tags %} class="grp-{{ message.tags }}"{% endif %}>{{ message }}</li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+
+ <!-- CONTENT TITLE -->
+ <header id="grp-content-title">
+ {% block pretitle %}{% endblock %}
+ {% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
+ {% block object-tools %}{% endblock %}
+ </header>
+
+ <!-- CONTENT-CONTAINER -->
+ <div id="grp-content-container">
+ {% block content %}
+ {{ content }}
+ {% block filters %}{% endblock %}
+ {% endblock %}
+ </div>
+
+ </article>
+
+ <!-- FOOTER -->
+ {% block footer %}{% endblock %}
+
+ </div>
+</body>
+</html>
diff --git a/design/templates/admin/buttons.html b/design/templates/admin/buttons.html
new file mode 100644
index 0000000..e1a7a98
--- /dev/null
+++ b/design/templates/admin/buttons.html
@@ -0,0 +1,59 @@
+<style>
+ .cust {
+ margin-top: 8px;
+ margin-bottom: 16px;
+ }
+ .item {
+ display: block;
+ float: none !important;
+ margin-left: 8px;
+ margin-top: 6px;
+ color: #444;
+ overflow: visible !important;
+ }
+ .item a {
+ min-width: 150px;
+ font-size: 110%;
+ border: 1px solid #BDBDBD !important;
+ position: relative;
+ display: inline-block;
+ margin: 0px;
+ padding: 5px;
+ height: 28px;
+ font-weight: bold;
+ border-radius: 5px 5px 5px 5px !important;
+ -moz-box-sizing: border-box;
+ cursor: pointer;
+ overflow: hidden;
+ vertical-align: top;
+ color: rgb(255, 255, 255);
+ border: 1px solid rgb(43, 138, 171);
+ background-image: linear-gradient(rgb(79, 178, 211), rgb(48, 155, 191));
+ }
+</style>
+
+ <div class="g-d-6">
+ <div class="grp-module" id="grp-recent-actions-module">
+ <h2>Publish Site</h2>
+ {% if message %}
+ <ul class="messagelist">
+ <li style="font-weight: bold; color: red;">{{message}}...</li>
+ </ul>
+ {%endif%}
+ <div class="grp-module">
+ <ul class="grp-listing-small cust">
+ <li class="item"><a href="/admin/build/build?id=newpost">Build New Post</a></li>
+ <li class="item"><a href="/admin/build/build?id=writing">Build Writing Archives</a></li>
+ <li class="item"><a href="/admin/build/build?id=photos">Build Photo Galleries</a></li>
+ <li class="item"><a href="/admin/build/build?id=projects">Build Project Pages</a></li>
+ <li class="item"><a href="/admin/build/build?id=map">Build Map</a></li>
+ <li class="item"><a href="/admin/build/build?id=pages">Build All Pages</a></li>
+ <li class="item"><a href="/admin/build/build?id=home">Build Homepage</a></li>
+ <li class="item"><a href="/admin/build/build?id=feed">Build RSS Feed</a></li>
+ <li class="item"><a href="/admin/build/build?id=sitemap">Build Sitemap</a></li>
+ <li class="item"><a href="/admin/build/build?id=all">Build Entire Site</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
diff --git a/design/templates/admin/index.html b/design/templates/admin/index.html
new file mode 100644
index 0000000..cbb2904
--- /dev/null
+++ b/design/templates/admin/index.html
@@ -0,0 +1,79 @@
+{% extends "admin/base_site.html" %}
+
+<!-- LOADING -->
+{% load i18n grp_tags log %}
+
+<!-- JAVASCRIPTS -->
+{% block javascripts %}
+ {{ block.super }}
+{% endblock %}
+
+<!-- COLTYPE/BODYCLASS-- >
+{% block bodyclass %}dashboard{% endblock %}
+{% block content-class %}content-grid{% endblock %}
+
+
+<!-- BREADCRUMBS -->
+{% block breadcrumbs %}
+ <ul class="grp-horizontal-list">
+ <li>{% trans "Home" %}</li>
+ </ul>
+{% endblock %}
+{% block content_title %}
+ {% if title %}
+ <header><h1>{{ title }}</h1></header>
+ {% endif %}
+{% endblock %}
+
+<!-- CONTENT -->
+{% block content %}
+ <div class="g-d-c">
+ <div class="g-d-12 g-d-f">
+ {% for app in app_list %}
+ <div class="grp-module" id="app_{{ app.name|lower }}">
+ <h2><a href="{{ app.app_url }}" class="grp-section">{% trans app.name %}</a></h2>
+ {% for model in app.models %}
+ <div class="grp-row">
+ {% if model.perms.change %}<a href="{{ model.admin_url }}"><strong>{{ model.name }}</strong></a>{% else %}<span><strong>{{ model.name }}</strong></span>{% endif %}
+ {% if model.perms.add or model.perms.change %}
+ <ul class="grp-actions">
+ {% if model.perms.add %}<li class="grp-add-link"><a href="{{ model.admin_url }}add/">{% trans 'Add' %}</a></li>{% endif %}
+ {% if model.perms.change %}<li class="grp-change-link"><a href="{{ model.admin_url }}">{% trans 'Change' %}</a></li>{% endif %}
+ </ul>
+ {% endif %}
+ </div>
+ {% endfor %}
+ </div>
+ {% empty %}
+ <p>{% trans "You donĀ“t have permission to edit anything." %}</p>
+ {% endfor %}
+ </div>
+{% include 'admin/buttons.html' %}
+ <div class="g-d-6 g-d-l">
+ <div class="grp-module" id="grp-recent-actions-module">
+ <h2>{% trans 'Recent Actions' %}</h2>
+ <div class="grp-module">
+ <h3>{% trans 'My Actions' %}</h3>
+ {% get_admin_log 10 as admin_log for_user user %}
+ {% if not admin_log %}
+ <p>{% trans 'None available' %}</p>
+ {% else %}
+ <ul class="grp-listing-small">
+ {% for entry in admin_log %}
+ <li class="grp-row{% if entry.is_addition %} grp-add-link{% endif %}{% if entry.is_change %} grp-change-link{% endif %}{% if entry.is_deletion %} grp-delete-link{% endif %}">
+ {% if entry.is_deletion %}
+ <span>{{ entry.object_repr }}</span>
+ {% else %}
+ <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
+ {% endif %}
+ <span class="grp-font-color-quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
+ </li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+ </div>
+ </div>
+ </div>
+ </div>
+{% endblock %}
+
diff --git a/design/templates/admin/message.html b/design/templates/admin/message.html
new file mode 100644
index 0000000..528fb01
--- /dev/null
+++ b/design/templates/admin/message.html
@@ -0,0 +1,21 @@
+{% extends 'admin/base_site.html' %}
+
+{% block content %}
+{{message}}... <span style="color:red;" id="done"></span>
+{% endblock %}
+
+{% block onload %}
+onLoad="setTimeout('delayer()', 1000)"
+{% endblock %}
+
+{% block extrahead %}
+<script type="text/javascript">
+<!--
+function delayer(){
+ document.getElementById('done').innerHTML = 'done'
+ window.location = "/admin/"
+}
+//-->
+</script>
+{% endblock %}
+
diff --git a/design/templates/archives/map_data.html b/design/templates/archives/map_data.html
new file mode 100644
index 0000000..a58de05
--- /dev/null
+++ b/design/templates/archives/map_data.html
@@ -0,0 +1,111 @@
+{% load typogrify %}
+{% load truncateletters %}
+{% load slugify_under %}
+
+ // center on a country
+ function focusCountry(latitude, longitude, zoom) {
+ map.setZoom(zoom);
+ map.panTo(new google.maps.LatLng(latitude, longitude));
+ };
+
+ {% for route in route_list %}
+ var {{route.template_var_name}} = [
+ {% for point in route.geometry.coords%}
+ new google.maps.LatLng({{point.1}}, {{point.0}}){% if forloop.last%}{%else%},{%endif%}
+ {% endfor %}
+ ];
+ {% endfor %}
+ function showRoute(route, zoom, latitude, longitude) {
+ var routePath = new google.maps.Polyline({
+ path: eval(route),
+ strokeColor: "#FF0000",
+ strokeOpacity: 1.0,
+ strokeWeight: 2
+ });
+ map.setZoom(zoom);
+ map.panTo(new google.maps.LatLng(latitude, longitude));
+ routePath.setMap(map);
+ return false;
+ };
+var map;
+function initialize() {
+
+ //custom marker
+ var image = new google.maps.MarkerImage('http://luxagraf.net/media/img/marker-entry.png',
+ new google.maps.Size(15, 26),
+ new google.maps.Point(0, 0),
+ new google.maps.Point(7, 26)
+ );
+ //custom marker shadow
+ var shadow = new google.maps.MarkerImage('http://luxagraf.net/media/img/shadow.png',
+ new google.maps.Size(37, 34),
+ new google.maps.Point(0,0),
+ new google.maps.Point(8, 34)
+ );
+
+
+ //check for a permalink
+ var location = window.location.hash;
+ //find a centerpoint
+ var pts = new Array();
+ {%for c in country_list%}pts[{{forloop.counter0}}] = ["#{{c.slug}}", {{c.lat}},{{c.lon}},{{c.zoom_level}}];{% endfor %}
+ {%for c in region_list%}pts[pts.length] = ["#{{c.slug}}", {{c.lat}},{{c.lon}},{{c.zoom_level}}];{% endfor %}
+ if (location.length>1) {
+ for (i=0;i<pts.length;i++) {
+ if (location == pts[i][0]) {
+ centerCoord = new google.maps.LatLng(pts[i][1],pts[i][2]);
+ zoom = pts[i][3];
+ break;
+ } else {
+ centerCoord = new google.maps.LatLng(19.311143,2.460938);
+ zoom = 2;
+ }
+ }
+ } else {
+ centerCoord = new google.maps.LatLng(19.311143,2.460938);
+ zoom = 2;
+ }
+ //set up map options
+ var mapOptions = {
+ zoom: zoom,
+ center: centerCoord,
+ mapTypeId: google.maps.MapTypeId.TERRAIN,
+ disableDefaultUI: true,
+ navigationControl: true,
+ navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}
+ };
+ //create map
+ map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
+
+
+ //loop through and set up markers/info windows
+
+ {% for entry in object_list %}
+ var marker_{{entry.title|truncatewords:2|slugify_under}} = new google.maps.Marker({
+ position: new google.maps.LatLng({{entry.latitude}}, {{entry.longitude}}),
+ map: map,
+ shadow: shadow,
+ icon: image
+ });
+
+ var c_{{entry.title|truncatewords:2|slugify_under}} = '<div class="infowin"><h4>{{entry.title}}<\/h4><span class="date blok">{{entry.pub_date|date:"F j, Y"}} ({% if entry.location.state.country.name == "United States" %}{{entry.location.name|smartypants|safe}}, {{entry.location.state.name}}){%else%}{{entry.location.name|smartypants|safe}}, {{entry.location.state.country.name}}){%endif%}<\/span><p><img src="{{entry.get_thumbnail_url}}" height="100" alt="{{ entry.title }}" style="float: left; border: #000 10px solid; margin-right: 8px; margin-bottom: 4px; height: 100px;" \/>{{entry.dek|escapejs}} <a href="{{entry.get_absolute_url}}">Read it &raquo;<\/a><\/p><\/div>';
+
+ google.maps.event.addListener(marker_{{entry.title|truncatewords:2|slugify_under}}, 'click', function() {
+ openWin(c_{{entry.title|truncatewords:2|slugify_under}},marker_{{entry.title|truncatewords:2|slugify_under}});
+ });
+
+ {% endfor %}
+ // create an empty info window instance, set max width
+ var infowindow = new google.maps.InfoWindow({
+ content: ' ',
+ maxWidth: 400
+ });
+ //function to handle click event and display single info window
+ function openWin(content, marker) {
+ infowindow.close();
+ infowindow.setContent(content);
+ infowindow.open(map,marker);
+ };
+
+
+}
diff --git a/design/templates/archives/writing_date.html b/design/templates/archives/writing_date.html
new file mode 100644
index 0000000..67144b3
--- /dev/null
+++ b/design/templates/archives/writing_date.html
@@ -0,0 +1,26 @@
+{% extends 'base.html' %}
+{% load typogrify %}
+{% load html5_datetime %}
+{% block pagetitle %}{{block.super}}: Archive{% endblock %}
+{% block bodyid %}id="archive"{%endblock%}
+{% block primary %}
+<p>How did you get here? You URL chopping maniac you. Right on.</p>
+
+<h1>{% if type == 'year' %}{{date}}, on luxagraf{%else%} Archive: {{date}} {% endif %}</h1>{% if type == 'year' %}
+ <ul class="archive">{% regroup object_list by pub_date.month as entries_by_month %}{% for entries in entries_by_month %}
+ <li><span>{{ entries.list.0.pub_date|date:"F Y" }}</span>
+ <ul>{% for post in entries.list %}
+ <li>
+ <a href="{{post.get_absolute_url}}" title="{{post.title}}">{{post.title|smartypants|widont|safe }}</a>
+ <time datetime="{{post.pub_date|html5_datetime}}">{{post.pub_date|date:"M d, Y"}}</time>
+ </li> {% endfor %}
+ </ul>
+ </li>{% endfor %}
+ </ul>{% else %}
+ <ul class="archive">{% for post in object_list %}
+ <li><a href="{{post.get_absolute_url}}" title="{{post.title}}">{{post.title|smartypants|widont|safe }}</a>
+ <time datetime="{{post.pub_date|html5_datetime}}">{{post.pub_date|date:"M d, Y"}}</time>
+ </li> {% endfor %}
+ </ul>
+ {% endif %}
+{% endblock%}
diff --git a/design/templates/details/entry.txt b/design/templates/details/entry.txt
new file mode 100644
index 0000000..547ce79
--- /dev/null
+++ b/design/templates/details/entry.txt
@@ -0,0 +1,8 @@
+{{object.title|safe}}
+{% for letter in object.title %}={%endfor%}
+
+ by Scott Gilbertson
+ <{{SITE_URL}}{{object.get_absolute_url}}>
+ {{object.pub_date|date:"l, d F Y"}}
+
+{{object.body_markdown|safe}}
diff --git a/design/templates/details/gifs.html b/design/templates/details/gifs.html
new file mode 100644
index 0000000..7dd8208
--- /dev/null
+++ b/design/templates/details/gifs.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en-US">
+<head>
+ <meta charset="utf-8" />
+ <title>{{object.title|safe}}</title>
+ <style>
+ body {
+ background: #222;
+ }
+
+ .overlay {
+ background-color: #000;
+ opacity: .9;
+ position: absolute; top: 0; left: 0;
+ width: 100%; height: 100%;
+ z-index: 10;
+ }
+ .btn {
+ position: absolute;
+ z-index: 11;
+ left: 35%;
+ top: 40%;
+ }
+ @media only screen and (max-device-width: 1024px) {
+ img#giffy {
+ width: 100%;
+ }
+ }
+ </style>
+ <script src="http://luxagraf.net/media/js/jquery.js" type="text/javascript"></script>
+ <script>
+ var isiPad = false;
+ var playing = true;
+ if (navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i)) {
+ isiPad = true;
+ }
+ $(function() {
+ function togglebtn() {
+ if (playing) {
+ document.getElementById('snd').pause();
+ playing = false
+ } else {
+ document.getElementById('snd').play();
+ playing = true
+ }
+ }
+ document.body.onclick=togglebtn
+ if (isiPad) {
+ var overlay = document.createElement("div");
+ overlay.setAttribute("id","overlay");
+ overlay.setAttribute("class", "overlay");
+ document.body.appendChild(overlay);
+
+ // create image and append to page
+ var img = document.createElement("img");
+ img.setAttribute("id","img");
+ img.src = "btn.png";
+ img.setAttribute("class","btn");
+
+ // click to restore page
+ img.onclick=restore;
+ document.body.appendChild(img);
+
+ function restore() {
+ document.body.removeChild(document.getElementById("overlay"));
+ document.body.removeChild(document.getElementById("img"));
+ playing = false;
+ document.getElementById('snd').play();
+ }
+
+ }
+ });
+
+ </script>
+</head>
+<body id="home">
+<audio id="snd" preload="auto" loop autoplay autobuffer>
+ <source src="{{object.music_ogg.url}}" type="video/ogg"/>
+ <source src="{{object.music_mp3.url}}" />
+</audio>
+<img id="giffy" src="{{object.gif.url}}" alt="{{object.title}}" />
+</body>
+</html>
diff --git a/design/templates/details/page.html b/design/templates/details/page.html
new file mode 100644
index 0000000..8a79e2c
--- /dev/null
+++ b/design/templates/details/page.html
@@ -0,0 +1,18 @@
+{% extends 'base.html' %}
+{% load typogrify %}
+{% block pagetitle %}Luxagraf | {{object.title}}{% endblock %}
+{% block metadescription %}{{object.metadescription}}{% endblock %}
+{%block htmlclass%}class="single"{%endblock%}
+{%block bodyid%}id="{{object.title|lower}}"{%endblock%}
+
+{% block primary %}<ul class="bl" id="breadcrumbs" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+ <li><a href="/" title="luxagraf homepage" itemprop="url"><span itemprop="title">Home</span></a> &rarr; </li>
+ <li>{{object.title}}</li>
+ </ul>
+ <article role="main">
+ <h1 class="hide">About Luxagraf</h1>
+ <div class="post-body-single">
+ {{object.body_html|safe}}
+ </div>
+ </article>
+{% endblock %}
diff --git a/design/templates/details/page.txt b/design/templates/details/page.txt
new file mode 100644
index 0000000..547ce79
--- /dev/null
+++ b/design/templates/details/page.txt
@@ -0,0 +1,8 @@
+{{object.title|safe}}
+{% for letter in object.title %}={%endfor%}
+
+ by Scott Gilbertson
+ <{{SITE_URL}}{{object.get_absolute_url}}>
+ {{object.pub_date|date:"l, d F Y"}}
+
+{{object.body_markdown|safe}}
diff --git a/design/templates/feed.xml b/design/templates/feed.xml
new file mode 100644
index 0000000..d70604c
--- /dev/null
+++ b/design/templates/feed.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- RSS generated by luxpub v2.0 on {% now "D, d M Y H:i:00" %} GMT -->
+<rss version="2.0">
+ <channel>
+ <title>Luxagraf</title>
+ <link>http://luxagraf.net/</link>
+ <description>Latest posts on luxagraf.net</description>
+ <language>en-us</language>
+ <copyright>Copyright 2011-{% now "Y" %} Luxagraf</copyright>
+ <pubDate>{% now "D, d M Y H:i:00" %} GMT</pubDate>
+ <lastBuildDate>{% now "D, d M Y H:i:00" %} GMT</lastBuildDate>
+ <docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
+ <generator>IPpub v2.0</generator>
+ <managingEditor>contact@luxagraf.net</managingEditor>
+ <webMaster>contact@luxagraf.net</webMaster>{% for object in object_list %}
+ <item>
+ <title>{{object.title|escape}}</title>
+ <link>{{SITE_URL}}{{object.get_absolute_url}}</link>
+ <guid>{{SITE_URL}}{{object.get_absolute_url}}</guid>
+ <description>
+ {{object.body_html|escape}}
+ </description>
+ <pubDate>{{object.pub_date|date:'D, d M Y H:i:00'}} EST</pubDate>
+ </item>{% endfor %}
+ </channel>
+</rss>