summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/projects/models.py142
-rw-r--r--apps/projects/models/__init__.py2
-rw-r--r--apps/projects/models/base.py63
-rw-r--r--apps/projects/models/fiveby.py58
-rw-r--r--apps/projects/urls.py15
-rw-r--r--apps/projects/views.py22
-rw-r--r--media/css/base.css2
-rw-r--r--media/sass/_projects.sass25
-rw-r--r--media/sass/base.sass4
-rw-r--r--templates/archives/projects.html31
-rw-r--r--templates/details/5x5.html19
-rw-r--r--templates/projects/base.html20
12 files changed, 232 insertions, 171 deletions
diff --git a/apps/projects/models.py b/apps/projects/models.py
deleted file mode 100644
index bdbcd82..0000000
--- a/apps/projects/models.py
+++ /dev/null
@@ -1,142 +0,0 @@
-import datetime
-from django.contrib.gis.db import models
-from django.conf import settings
-from django.contrib.syndication.feeds import Feed
-from django.contrib.sitemaps import Sitemap
-from django.template.defaultfilters import truncatewords_html
-
-
-import markdown2 as markdown
-from tagging.fields import TagField
-from tagging.models import Tag
-
-from photos.models import PhotoGallery
-from locations.models import Location,Region
-#from locations.signals import create_location_item
-from blog.signals import update_recent
-
-def get_upload_path(self, filename):
- return "images/post-thumbs/%s/%s" %(datetime.datetime.today().strftime("%Y"), filename)
-
-def markdown_processor(md):
- processed = markdown.markdown(md, safe_mode = False).split('<break>')
- html = processed[0]+processed[1]
- lede = processed[0]
- return html, lede
-
-class PostImage(models.Model):
- title = models.CharField(max_length=100)
- image = models.ImageField(upload_to="%s%s" %(settings.IMAGES_ROOT, datetime.datetime.today().strftime("%Y")))
-
- def __unicode__(self):
- return self.title
-
- def output_tags(self):
- return force_unicode('<img src="%s%s" alt="%s" class="postpic"/>' % \
- (settings.IMAGES_URL, self.image.url.split('images')[1].split('/',1)[1], self.title))
-
-
-class Topic(models.Model):
- name = models.CharField(max_length=100)
- slug = models.SlugField()
-
- def __unicode__(self):
- return self.name
-
- def get_absolute_url(self):
- return "/topics/%s/" % (self.slug)
-
-class Entry(models.Model):
- title = models.CharField(max_length=200)
- slug = models.SlugField(unique_for_date='pub_date')
- lede = models.TextField(blank=True)
- body_html = models.TextField(blank=True)
- body_markdown = models.TextField()
- dek = models.TextField(null=True,blank=True)
- pub_date = models.DateTimeField('Date published')
- tags = TagField()
- enable_comments = models.BooleanField(default=True)
- point = models.PointField(null=True)
- location = models.ForeignKey(Location, null=True)
- region = models.ForeignKey(Region, null=True)
- PUB_STATUS = (
- (0, 'Draft'),
- (1, 'Published'),
- )
- status = models.IntegerField(choices=PUB_STATUS, default=0)
- photo_gallery = models.ForeignKey(PhotoGallery, blank=True, null=True, verbose_name='photo set')
- thumbnail = models.FileField(upload_to=get_upload_path, null=True,blank=True)
- title_keywords = models.CharField(max_length=200, null=True, blank=True)
- topics = models.ManyToManyField(Topic, blank=True)
-
- @property
- def longitude(self):
- '''Get the site's longitude.'''
- return self.point.x
-
- @property
- def latitude(self):
- '''Get the site's latitude.'''
- return self.point.y
-
- class Meta:
- ordering = ('-pub_date',)
- get_latest_by = 'pub_date'
- verbose_name_plural = 'entries'
-
- def __unicode__(self):
- return self.title
-
- def get_absolute_url(self):
- return "/%s/%s/" % (self.pub_date.strftime("%Y/%b/%d").lower(), self.slug)
-
- def get_previous_published(self):
- return self.get_previous_by_pub_date(status__exact=1)
-
- def get_next_published(self):
- return self.get_next_by_pub_date(status__exact=1)
-
- def get_tags(self):
- return Tag.objects.get_for_object(self)
-
- def comment_period_open(self):
- return self.enable_comments and datetime.datetime.today() - datetime.timedelta(30) <= self.pub_date
-
- def get_thumbnail_url(self):
- if settings.DEVELOPMENT == True:
- return '%s%s' %(settings.IMAGES_URL, self.thumbnail.url[35:])
- else:
- return '%s%s' %(settings.IMAGES_URL, self.thumbnail.url[33:])
-
- def save(self):
- html,lede = markdown_processor(self.body_markdown)
- self.body_html = html
- self.lede = lede
- self.dek == markdown.markdown(self.dek, safe_mode = False)
- super(Entry, self).save()
-
-class BlogSitemap(Sitemap):
- changefreq = "never"
- priority = 1.0
-
- def items(self):
- return Entry.objects.filter(status=1)
-
- def lastmod(self, obj):
- return obj.pub_date
-
-class LatestFull(Feed):
- title = "Luxagraf: Topographical Writings"
- link = "/writing/"
- description = "Latest postings to luxagraf.net"
- description_template = 'feeds/blog_description.html'
-
- def items(self):
- return Entry.objects.filter(status__exact=1).order_by('-pub_date')[:10]
-
-
-from django.dispatch import dispatcher
-from django.db.models import signals
-
-signals.post_save.connect(update_recent, sender=Entry)
-
diff --git a/apps/projects/models/__init__.py b/apps/projects/models/__init__.py
new file mode 100644
index 0000000..b29933a
--- /dev/null
+++ b/apps/projects/models/__init__.py
@@ -0,0 +1,2 @@
+from base import Project
+from fiveby import FiveBy \ No newline at end of file
diff --git a/apps/projects/models/base.py b/apps/projects/models/base.py
new file mode 100644
index 0000000..bc42918
--- /dev/null
+++ b/apps/projects/models/base.py
@@ -0,0 +1,63 @@
+import datetime
+from django.contrib.gis.db import models
+from django.conf import settings
+from django.contrib.syndication.feeds import Feed
+from django.contrib.sitemaps import Sitemap
+from django.template.defaultfilters import truncatewords_html
+
+
+import markdown2 as markdown
+
+
+from photos.models import PhotoGallery
+from locations.models import Location,Region
+
+
+def get_upload_path(self, filename):
+ return "images/project-thumbs/%s/%s" %(datetime.datetime.today().strftime("%Y"), filename)
+
+def markdown_processor(md):
+ html = markdown.markdown(md, safe_mode = False).split('<break>')
+ return html
+
+
+
+class Project(models.Model):
+ title = models.CharField(max_length=200)
+ subtitle = models.CharField(max_length=200, null=True, blank=True)
+ slug = models.SlugField(unique_for_date='pub_date')
+ lede = models.TextField(blank=True)
+ pub_date = models.DateTimeField('Date published')
+ PUB_STATUS = (
+ (0, 'Draft'),
+ (1, 'Published'),
+ )
+ status = models.IntegerField(choices=PUB_STATUS, default=0)
+ image = models.FileField(upload_to=get_upload_path, null=True,blank=True)
+
+ @property
+ def longitude(self):
+ '''Get the site's longitude.'''
+ return self.point.x
+
+ @property
+ def latitude(self):
+ '''Get the site's latitude.'''
+ return self.point.y
+
+ class Meta:
+ ordering = ('-pub_date',)
+ get_latest_by = 'pub_date'
+ app_label = 'projects'
+
+ def __unicode__(self):
+ return self.title
+
+ def get_absolute_url(self):
+ return "/%s/%s/" % ('projects', self.slug)
+
+ def get_previous_published(self):
+ return self.get_previous_by_pub_date(status__exact=1)
+
+ def get_next_published(self):
+ return self.get_next_by_pub_date(status__exact=1) \ No newline at end of file
diff --git a/apps/projects/models/fiveby.py b/apps/projects/models/fiveby.py
new file mode 100644
index 0000000..5415ee7
--- /dev/null
+++ b/apps/projects/models/fiveby.py
@@ -0,0 +1,58 @@
+import datetime
+from django.contrib.gis.db import models
+from django.conf import settings
+from django.contrib.syndication.feeds import Feed
+from django.contrib.sitemaps import Sitemap
+from django.template.defaultfilters import truncatewords_html
+
+from locations.models import Location,Region
+
+def get_upload_path(self, filename):
+ return "images/projects/videos/5x5/%s/%s" %(datetime.datetime.today().strftime("%Y"), filename)
+
+def get_image_upload_path(self, filename):
+ return "images/projects/5x5/%s/%s" %(datetime.datetime.today().strftime("%Y"), filename)
+
+class FiveBy(models.Model):
+ title = models.CharField(max_length=200)
+ slug = models.SlugField(unique_for_date='pub_date')
+ lede = models.TextField(blank=True)
+ image = models.FileField(upload_to=get_image_upload_path, null=True,blank=True)
+ videoh264 = models.FileField(upload_to=get_upload_path, null=True,blank=True)
+ videoogg = models.FileField(upload_to=get_upload_path, null=True,blank=True)
+ vimeo_link = models.CharField(max_length=200)
+ youtube_link = models.CharField(max_length=200)
+ pub_date = models.DateTimeField('Date published')
+ PUB_STATUS = (
+ (0, 'Draft'),
+ (1, 'Published'),
+ )
+ status = models.IntegerField(choices=PUB_STATUS, default=0)
+ point = models.PointField(null=True)
+ location = models.ForeignKey(Location, null=True)
+ region = models.ForeignKey(Region, null=True)
+
+
+
+ class Meta:
+ ordering = ('-pub_date',)
+ get_latest_by = 'pub_date'
+ app_label = 'projects'
+ verbose_name_plural = '5x5'
+
+ def __unicode__(self):
+ return self.title
+
+ def get_absolute_url(self):
+ return "/%s/%s/%s/" % ('projects', '5x5', self.slug)
+
+ @property
+ def longitude(self):
+ '''Get the site's longitude.'''
+ return self.point.x
+
+ @property
+ def latitude(self):
+ '''Get the site's latitude.'''
+ return self.point.y
+ \ No newline at end of file
diff --git a/apps/projects/urls.py b/apps/projects/urls.py
index ed2dbfb..3ea4b45 100644
--- a/apps/projects/urls.py
+++ b/apps/projects/urls.py
@@ -1,15 +1,16 @@
from django.conf.urls.defaults import *
from django.views.generic.list_detail import object_list
from django.views.generic.simple import redirect_to,direct_to_template
+from django.views.generic import list_detail
-#from blog.models import Entry
-
+from projects.models.base import Project
+projects = {
+ 'queryset': Project.objects.filter(status__exact=1).order_by('-pub_date'),
+}
urlpatterns = patterns('',
-
- #(r'(?P<slug>[-\w]+)/(?P<page>\d+)/$', 'blog.views.entry_list_by_area'),
- #(r'(?P<page>\d+)/$', 'blog.views.entry_list'),
- #(r'(?P<slug>[-\w]+)/$', redirect_to, {'url': '/writing/%(slug)s/1/'}),
- (r'^$', direct_to_template, {'template': 'projects/base.html'}),
+ (r'(?P<slug>[-\w]+)/$', 'projects.views.detail'),
+ (r'^$',list_detail.object_list, dict(projects, template_name='archives/projects.html')),
)
+
diff --git a/apps/projects/views.py b/apps/projects/views.py
new file mode 100644
index 0000000..8103270
--- /dev/null
+++ b/apps/projects/views.py
@@ -0,0 +1,22 @@
+from django.shortcuts import render_to_response,get_object_or_404
+from django.template import RequestContext
+from django.views.generic.list_detail import object_list
+from django.db.models import get_model
+
+
+from projects.models.base import Project
+from projects.models.fiveby import FiveBy
+
+projects = {'5x5':'FiveBy','6x6':'SixBy'}
+
+"""
+Projects by slug
+"""
+def detail(request,slug):
+ name = projects[slug]
+ model = get_model('projects', name)
+ qs = model.objects.filter(status__exact=1)
+ template = 'details/%s.html' %(slug)
+ return object_list(request, queryset=qs, template_name=template,)
+
+
diff --git a/media/css/base.css b/media/css/base.css
index 146ee15..1c6a851 100644
--- a/media/css/base.css
+++ b/media/css/base.css
@@ -1 +1 @@
-ol,ul,li,dl{list-style:none;margin:0;padding:0;border:0;outline:0;background:transparent}blockquote,q{quotes:none}:focus{outline:0}header,section,footer,aside,article,nav{display:block;text-align:left}*:focus{outline:#b53a04 dotted thin}body{background:white;font-family:Hoefler Text, Georgia, Times New Roman, Times, serif;font-size:62.5%;line-height:23px;color:#201a11;text-align:center}p{margin:0.8em 0 0 0}a{text-decoration:none;color:#201a11}a:visited{color:#201a11;text-decoration:none}a:hover{color:#b53a04;text-decoration:none}header{width:980px;margin:0 auto 40px}header{border-bottom:#201a11 2px solid;height:160px}header h1 a{background:url('../img/logo.gif') no-repeat left bottom;height:158px;width:400px;float:left;text-indent:-1000px}header h2{float:left;text-indent:-1000px;display:none}header nav{float:left;margin-top:110px;margin-left:40px}header nav li{display:inline;font-size:1.1em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:1.2em;margin-left:4px}header nav a:hover{color:#b53a04}footer{width:980px;background:#201a11;height:36px;color:#888;font-size:1.2em;margin:80px auto 0}footer nav li{float:left;font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;text-transform:uppercase;line-height:36px;margin-left:8px}footer a{color:#888 !important}footer a:hover{color:#b53a04 !important}footer nav{float:right;margin-right:8px}footer p{float:left;font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;padding-left:8px;line-height:36px;margin:0}article{width:980px;margin:0 auto}article ul{font-size:1.5em}ul#breadcrumbs{font-weight:normal;font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:110%}ul#breadcrumbs li{display:inline}.hide{display:none}img.postpic,img.postpicright{display:block;margin:.3em .6em;border:#201a11 10px solid;clear:both}img.postpic{float:left;margin-left:0;margin-top:.3em}img.postpicright{float:right;margin-right:0}img.postpicleft{float:left;margin:5px}img.picfull{border:#201a11 10px solid}img.post-image{margin:0 10px 0 0;float:left;border:#201a11 10px solid !important}.hide,.dsq-brlink,img[src='http://maps.gstatic.com/intl/en_us/mapfiles/poweredby.png'],.terms-of-use-link,#dsq-comments-count{display:"none"}div[dir='ltr'] span{width:0;visibility:collapse}p.pull-quote{font-size:14px !important;font-style:italic !important}sup{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;font-size:.6em}#writing-archive{margin-top:72px;margin-bottom:36px}#writing-archive li{clear:both}#writing-archive h3{font-family:Helvetica, Verdana, sans-serif;font-size:1.6em;line-height:1.3em;font-weight:normal;margin:0}#writing-archive div{width:420px;float:left}#writing-archive div.img{width:520px;margin-left:20px;margin-bottom:36px}#writing-archive p{margin:0;font-size:1.1em}#writing-archive .location,#writing-archive time{font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;line-height:3em;font-size:.7em}#writing-archive img{border:#201a11 10px solid}body#writing-detail article{font-size:1.7em;line-height:1.5em}body#writing-detail article header{border:none;height:auto;width:auto;margin:0 0 0 0}body#writing-detail article h1{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal;font-size:1.8em;line-height:1.2em;margin:0}body#writing-detail article aside{font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:0.7em;line-height:2.3em}body#writing-detail article aside a{color:#201a11}body#writing-detail article aside a:hover{color:#b53a04}body#writing-detail article dl{font-size:100%}body#writing-detail article dl dt{font-style:italic;margin:9px}body#writing-detail article a{color:#b53a04}body#writing-detail article h3{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal;font-size:1.6em;line-height:1.2em}.single article header,.single article div#post-body{margin-left:200px !important;width:560px !important}.single article header p:nth-of-type(1),.single article div#post-body p:nth-of-type(1){font-size:1.2em;line-height:1.4em}.double article header{float:left;width:180px !important;text-align:right !important;margin-top:20px !important}.double article header aside section{text-align:right !important;font-size:1em}.double article div#post-body{width:780px;float:left;margin-left:20px}.double article div#post-body div.col{width:350px;float:left;margin:0 40px 0 0}.double article div#post-body img.picwide{clear:both;margin:30px 0 30px -200px;border:#201a11 10px solid}.double article div#post-body div.narrow{width:520px}span.drop{font-size:4.8em;display:block;float:left;padding:38px 10px 5px 0;overflow:visible}span.drop-small{font-size:2.9em;display:block;float:left;padding:19px 8px 5px 0;overflow:visible}blockquote{font-size:.8em}ol.footnote{font-size:12px;margin:18px 0}ol.footnote li{margin:12px 0;line-height:.8em}ol.footnote li p{line-height:18px !important;font-size:12px !important}ol.footnote li a,ol.footnote li span{font-size:12px}section#post-metadata{width:560px;border-top:#201a11 1px dotted;border-bottom:#201a11 1px dotted;margin:24px 0 24px 200px;font-size:0.8em;padding-bottom:8px}section#page-navigation{width:980px;margin:24px 0 0 0;text-transform:uppercase;font-size:.5em}section#page-navigation li#next{float:right;font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;margin-right:140px}section#page-navigation li#prev{float:left;font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;margin-left:120px}section#comments{clear:both;width:520px;margin:24px 0 24px 200px;font-size:.8em}section#comments h4{margin-top:96px;font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal;text-transform:uppercase;font-size:1.3em}h4 a.disqus-link-count{color:#201a11 !important}#pagination{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;width:980px;clear:both;margin:0;border-top:#201a11 1px dotted;border-bottom:#201a11 1px dotted;text-align:center}#pagination .pagination{margin:8px 0}#pagination .current{color:#b53a04}body.dubcol footer nav li{font-size:0.6em}h4.notes{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;font-weight:bold;text-transform:uppercase}dl.addendum dt{font-style:italic;margin:0.8em 0 0 0;margin-left:-30px !important;text-indent:-30px;padding-left:30px}dl.addendum dd{margin:0.8em 0 0 0}ul#dsq-comments{font-size:1.2em}.dsq-comment-cite{font-family:Helvetica, Verdana, sans-serif;font-size:.9em !important;font-weight:normal;text-transform:uppercase}.dsq-comment-header-time,.dsq-comment-footer{font-family:Helvetica, Verdana, sans-serif}.dsq-comment-footer{font-size:.8em}#dsq-comments-title{display:none !important}#photo-archive article{width:980px}#photo-archive article h1{display:none}ul#photo-galleries{margin-left:-10px}ul#photo-galleries li{float:left;margin:10px;width:310px;position:relative;display:block}ul#photo-galleries div.figure{border:10px #201a11 solid;height:350px}ul#photo-galleries div.figure img{border:none}ul#photo-galleries span.legend{display:block;color:#888;padding:10px 10px 10px 15px;font-size:85%;line-height:18px;width:285px;background:#201a11;-khtml-opacity:0.9;opacity:0.9;position:absolute;bottom:0;left:0}ul#photo-galleries h3{color:#fff;padding:0;margin:3px 0;font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase}ul#photo-galleries p{margin:0}.map-legend{width:160px;margin-top:24px;float:left}.map-legend h4{font-size:1.1em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:1.4em;margin:8px 0}.map-legend li{font-size:90%;margin:0;line-height:20px}.clearfix{clear:both}#map-canvas{float:left;width:760px;height:500px;border:#201a11 10px solid;margin-left:40px;margin-top:24px}section#location #map-canvas{width:295px;height:350px;border:#201a11 10px solid;margin:10px 0 0 5px}.infowin{line-height:18px;margin-bottom:16px}.infowin p{font-size:1.4em;line-height:1.4em}.infowin h4{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;font-size:2.4em;margin:6px 0 0 0}.infowin a{color:#b53a04 !important;border-bottom:1px dotted #b53a04}.infowin .date{color:#888;text-align:center;text-transform:uppercase;display:block;text-align:left;margin:6px 0 0;font-size:1.2em}body#about section{clear:both;margin-top:24px}body#about section ul{font-size:1em;margin:18px}body#about section li{margin:9px}body#about section li a{font-weight:bold}.image{float:left;width:180px;margin-top:48px}.image img{border:#201a11 10px solid}.content{float:left;margin-left:20px;width:540px;font-size:1.6em}.content h3{font-family:Helvetica, Verdana, sans-serif;font-size:1.6em;line-height:1.3em;font-weight:normal;margin:0}section#post{margin-left:200px}section#post h1{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal}.contact-form li{clear:both;width:440px;padding:4px 0}.contact-form dt{float:left;font-family:Helvetica, Verdana, sans-serif;font-size:1.6em;line-height:1.3em;font-weight:normal;text-align:right;font-size:.9em}.contact-form dt label{font-style:normal;text-align:right}.contact-form dd{text-align:right;margin-top:4px}.contact-form dd input#id_name,.contact-form dd input#id_email,.contact-form dd input#id_subject_line{width:298px}body#projects h3{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal}body#projects article p{font-size:1.4em}#featured-image img{margin-left:20px;margin-bottom:78px}section#writing-tease,section#currently{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;text-transform:uppercase;font-size:.8em;clear:both;width:980px;padding-top:20px;border-top:#b9b9b9 1px dotted}section#currently{padding:0;margin-bottom:0px;margin-top:36px;border-top:#201a11 1px solid}section#currently div.project-tease{font-size:18px;line-height:16px;margin-top:8px}section#currently div.project-tease h4{font-size:64px;line-height:50px;float:left;margin:0}section#currently div.project-tease h4 span{font-size:36px}section#currently div.project-tease a{display:block;width:220px;float:left}section#currently div.project-tease p{font-size:.7em;text-transform:none;line-height:50px;margin-left:440px;font-family:Hoefler Text, Georgia, Times New Roman, Times, serif}section#currently div.project-tease p cite{padding-left:4px}section#fromthearc{clear:both}section#fromthearc li{float:left;width:300px;margin-bottom:20px}section#fromthearc h2{font-size:1.1em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:2em;margin:0}section#fromthearc .col2{margin-left:40px;margin-right:40px}section#fromthearc h3{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal;font-size:1.2em;margin-bottom:12px;min-height:50px}section#fromthearc .location,section#fromthearc time{font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;line-height:2em;font-size:.7em}section#fromthearc p{margin:0;text-align:justify}
+ol,ul,li,dl{list-style:none;margin:0;padding:0;border:0;outline:0;background:transparent}blockquote,q{quotes:none}:focus{outline:0}header,section,footer,aside,article,nav{display:block;text-align:left}*:focus{outline:#b53a04 dotted thin}body{background:white;font-family:Hoefler Text, Georgia, Times New Roman, Times, serif;font-size:62.5%;line-height:23px;color:#201a11;text-align:center}p{margin:0.8em 0 0 0}a{text-decoration:none;color:#201a11}a:visited{color:#201a11;text-decoration:none}a:hover{color:#b53a04;text-decoration:none}header{width:980px;margin:0 auto 40px}header{border-bottom:#201a11 2px solid;height:160px}header h1 a{background:url('../img/logo.gif') no-repeat left bottom;height:158px;width:400px;float:left;text-indent:-1000px}header h2{float:left;text-indent:-1000px;display:none}header nav{float:left;margin-top:110px;margin-left:40px}header nav li{display:inline;font-size:1.1em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:1.2em;margin-left:4px}header nav a:hover{color:#b53a04}footer{width:980px;background:#201a11;height:36px;color:#888;font-size:1.2em;margin:80px auto 0}footer nav li{float:left;font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;text-transform:uppercase;line-height:36px;margin-left:8px}footer a{color:#888 !important}footer a:hover{color:#b53a04 !important}footer nav{float:right;margin-right:8px}footer p{float:left;font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;padding-left:8px;line-height:36px;margin:0}article{width:980px;margin:0 auto}article ul{font-size:1.5em}ul#breadcrumbs{font-weight:normal;font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:110%}ul#breadcrumbs li{display:inline}.hide{display:none}img.postpic,img.postpicright{display:block;margin:.3em .6em;border:#201a11 10px solid;clear:both}img.postpic{float:left;margin-left:0;margin-top:.3em}img.postpicright{float:right;margin-right:0}img.postpicleft{float:left;margin:5px}img.picfull{border:#201a11 10px solid}img.post-image{margin:0 10px 0 0;float:left;border:#201a11 10px solid !important}.hide,.dsq-brlink,img[src='http://maps.gstatic.com/intl/en_us/mapfiles/poweredby.png'],.terms-of-use-link,#dsq-comments-count{display:"none"}div[dir='ltr'] span{width:0;visibility:collapse}p.pull-quote{font-size:14px !important;font-style:italic !important}sup{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;font-size:.6em}#writing-archive{margin-top:72px;margin-bottom:36px}#writing-archive li{clear:both}#writing-archive h3{font-family:Helvetica, Verdana, sans-serif;font-size:1.6em;line-height:1.3em;font-weight:normal;margin:0}#writing-archive div{width:420px;float:left}#writing-archive div.img{width:520px;margin-left:20px;margin-bottom:36px}#writing-archive p{margin:0;font-size:1.1em}#writing-archive .location,#writing-archive time{font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;line-height:3em;font-size:.7em}#writing-archive img{border:#201a11 10px solid}body#writing-detail article{font-size:1.7em;line-height:1.5em}body#writing-detail article header{border:none;height:auto;width:auto;margin:0 0 0 0}body#writing-detail article h1{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal;font-size:1.8em;line-height:1.2em;margin:0}body#writing-detail article aside{font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:0.7em;line-height:2.3em}body#writing-detail article aside a{color:#201a11}body#writing-detail article aside a:hover{color:#b53a04}body#writing-detail article dl{font-size:100%}body#writing-detail article dl dt{font-style:italic;margin:9px}body#writing-detail article a{color:#b53a04}body#writing-detail article h3{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal;font-size:1.6em;line-height:1.2em}.single article header,.single article div#post-body{margin-left:200px !important;width:560px !important}.single article header p:nth-of-type(1),.single article div#post-body p:nth-of-type(1){font-size:1.2em;line-height:1.4em}.double article header{float:left;width:180px !important;text-align:right !important;margin-top:20px !important}.double article header aside section{text-align:right !important;font-size:1em}.double article div#post-body{width:780px;float:left;margin-left:20px}.double article div#post-body div.col{width:350px;float:left;margin:0 40px 0 0}.double article div#post-body img.picwide{clear:both;margin:30px 0 30px -200px;border:#201a11 10px solid}.double article div#post-body div.narrow{width:520px}span.drop{font-size:4.8em;display:block;float:left;padding:38px 10px 5px 0;overflow:visible}span.drop-small{font-size:2.9em;display:block;float:left;padding:19px 8px 5px 0;overflow:visible}blockquote{font-size:.8em}ol.footnote{font-size:12px;margin:18px 0}ol.footnote li{margin:12px 0;line-height:.8em}ol.footnote li p{line-height:18px !important;font-size:12px !important}ol.footnote li a,ol.footnote li span{font-size:12px}section#post-metadata{width:560px;border-top:#201a11 1px dotted;border-bottom:#201a11 1px dotted;margin:24px 0 24px 200px;font-size:0.8em;padding-bottom:8px}section#page-navigation{width:980px;margin:24px 0 0 0;text-transform:uppercase;font-size:.5em}section#page-navigation li#next{float:right;font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;margin-right:140px}section#page-navigation li#prev{float:left;font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;margin-left:120px}section#comments{clear:both;width:520px;margin:24px 0 24px 200px;font-size:.8em}section#comments h4{margin-top:96px;font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal;text-transform:uppercase;font-size:1.3em}h4 a.disqus-link-count{color:#201a11 !important}#pagination{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;width:980px;clear:both;margin:0;border-top:#201a11 1px dotted;border-bottom:#201a11 1px dotted;text-align:center}#pagination .pagination{margin:8px 0}#pagination .current{color:#b53a04}body.dubcol footer nav li{font-size:0.6em}h4.notes{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;font-weight:bold;text-transform:uppercase}dl.addendum dt{font-style:italic;margin:0.8em 0 0 0;margin-left:-30px !important;text-indent:-30px;padding-left:30px}dl.addendum dd{margin:0.8em 0 0 0}ul#dsq-comments{font-size:1.2em}.dsq-comment-cite{font-family:Helvetica, Verdana, sans-serif;font-size:.9em !important;font-weight:normal;text-transform:uppercase}.dsq-comment-header-time,.dsq-comment-footer{font-family:Helvetica, Verdana, sans-serif}.dsq-comment-footer{font-size:.8em}#dsq-comments-title{display:none !important}#photo-archive article{width:980px}#photo-archive article h1{display:none}ul#photo-galleries{margin-left:-10px}ul#photo-galleries li{float:left;margin:10px;width:310px;position:relative;display:block}ul#photo-galleries div.figure{border:10px #201a11 solid;height:350px}ul#photo-galleries div.figure img{border:none}ul#photo-galleries span.legend{display:block;color:#888;padding:10px 10px 10px 15px;font-size:85%;line-height:18px;width:285px;background:#201a11;-khtml-opacity:0.9;opacity:0.9;position:absolute;bottom:0;left:0}ul#photo-galleries h3{color:#fff;padding:0;margin:3px 0;font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase}ul#photo-galleries p{margin:0}.map-legend{width:160px;margin-top:24px;float:left}.map-legend h4{font-size:1.1em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:1.4em;margin:8px 0}.map-legend li{font-size:90%;margin:0;line-height:20px}.clearfix{clear:both}#map-canvas{float:left;width:760px;height:500px;border:#201a11 10px solid;margin-left:40px;margin-top:24px}section#location #map-canvas{width:295px;height:350px;border:#201a11 10px solid;margin:10px 0 0 5px}.infowin{line-height:18px;margin-bottom:16px}.infowin p{font-size:1.4em;line-height:1.4em}.infowin h4{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;font-size:2.4em;margin:6px 0 0 0}.infowin a{color:#b53a04 !important;border-bottom:1px dotted #b53a04}.infowin .date{color:#888;text-align:center;text-transform:uppercase;display:block;text-align:left;margin:6px 0 0;font-size:1.2em}body#about section{clear:both;margin-top:24px}body#about section ul{font-size:1em;margin:18px}body#about section li{margin:9px}body#about section li a{font-weight:bold}.image{float:left;width:180px;margin-top:48px}.image img{border:#201a11 10px solid}.content{float:left;margin-left:20px;width:540px;font-size:1.6em}.content h3{font-family:Helvetica, Verdana, sans-serif;font-size:1.6em;line-height:1.3em;font-weight:normal;margin:0}section#post{margin-left:200px}section#post h1{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal}.contact-form li{clear:both;width:440px;padding:4px 0}.contact-form dt{float:left;font-family:Helvetica, Verdana, sans-serif;font-size:1.6em;line-height:1.3em;font-weight:normal;text-align:right;font-size:.9em}.contact-form dt label{font-style:normal;text-align:right}.contact-form dd{text-align:right;margin-top:4px}.contact-form dd input#id_name,.contact-form dd input#id_email,.contact-form dd input#id_subject_line{width:298px}li.project-tease{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;font-size:18px;line-height:16px;margin-top:36px}li.project-tease h4{font-size:64px;line-height:50px;float:left;margin:0}li.project-tease h4 span{font-size:36px}li.project-tease a{display:block;width:175px;float:left}li.project-tease div.img{float:right;width:540px;margin-bottom:36px}li.project-tease div.img img{border:#201a11 10px solid}body#projects h3{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal}body#projects article p{font-size:1.4em}#featured-image img{margin-left:20px;margin-bottom:78px}section#writing-tease,section#currently{font-family:Helvetica, Verdana, sans-serif;font-size:1em;font-weight:normal;text-transform:uppercase;font-size:.8em;clear:both;width:980px;padding-top:20px;border-top:#b9b9b9 1px dotted}section#currently{padding:0;margin-bottom:0px;margin-top:36px;border-top:#201a11 1px solid}section#currently div.project-tease{font-size:18px;line-height:16px;margin-top:8px}section#currently div.project-tease h4{font-size:64px;line-height:50px;float:left;margin:0}section#currently div.project-tease h4 span{font-size:36px}section#currently div.project-tease a{display:block;width:220px;float:left}section#currently div.project-tease p{font-size:.7em;text-transform:none;line-height:50px;margin-left:440px;font-family:Hoefler Text, Georgia, Times New Roman, Times, serif}section#currently div.project-tease p cite{padding-left:4px}section#fromthearc{clear:both}section#fromthearc li{float:left;width:300px;margin-bottom:20px}section#fromthearc h2{font-size:1.1em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;font-size:2em;margin:0}section#fromthearc .col2{margin-left:40px;margin-right:40px}section#fromthearc h3{font-family:Helvetica, Verdana, sans-serif;font-size:2em;line-height:1.5em;font-weight:normal;font-size:1.2em;margin-bottom:12px;min-height:50px}section#fromthearc .location,section#fromthearc time{font-size:0.8em;letter-spacing:1px;line-height:1.2em;text-transform:uppercase;line-height:2em;font-size:.7em}section#fromthearc p{margin:0;text-align:justify}
diff --git a/media/sass/_projects.sass b/media/sass/_projects.sass
new file mode 100644
index 0000000..60b0db8
--- /dev/null
+++ b/media/sass/_projects.sass
@@ -0,0 +1,25 @@
+li.project-tease
+ +sm-sans
+ font-size: 18px
+ line-height: 16px
+ margin-top: 36px
+ h4
+
+ font-size: 64px
+ line-height: 50px
+ float: left
+ margin: 0
+ span
+ font-size: 36px
+
+ a
+ display: block
+ width= 175px
+ float: left
+
+ div.img
+ float: right
+ width = !col9+!pad
+ margin-bottom= 36px
+ img
+ border= !luxagraf_brown 10px solid \ No newline at end of file
diff --git a/media/sass/base.sass b/media/sass/base.sass
index c3df2cf..94485f8 100644
--- a/media/sass/base.sass
+++ b/media/sass/base.sass
@@ -7,7 +7,9 @@
@import _maps.sass
@import _about.sass
@import _contact.sass
-
+@import _projects.sass
+
+
body#projects
h3
+headline-sans
diff --git a/templates/archives/projects.html b/templates/archives/projects.html
new file mode 100644
index 0000000..cdefc1f
--- /dev/null
+++ b/templates/archives/projects.html
@@ -0,0 +1,31 @@
+{% extends 'base.html' %}
+{% load typogrify %}
+{% block pagetitle %}Luxagraf | Projects {% endblock %}
+{% block metadescription %}Travel Themes and Experiments {% endblock %}
+
+{%block bodyid%}id="projects"{%endblock%}
+
+{% block primary %}
+<article>
+ <ul id="breadcrumbs">
+ <li><a href="/" title="luxagraf homepage">Home</a> &rarr;</li>
+ <li>Projects</li>
+ </ul>
+ <h1 class="hide">Projects</h1>
+ {%for project in object_list %}
+ <ul>
+ <li class="project-tease">
+ <dl>
+ <dt>
+ <a href="{{project.get_absolute_url}}"><h4 class="proj">{{project.title|safe}}</h4> {{project.subtitle|safe}}</a>
+ </dt>
+ <dd>{{project.lede|safe}}</dd>
+ </dl>
+ <div class="img"><img src="{{project.image.url}}" /></div>
+ </li>
+ </ul>
+ {% endfor %}
+
+</article>
+{% endblock %}
+
diff --git a/templates/details/5x5.html b/templates/details/5x5.html
new file mode 100644
index 0000000..a9bdd63
--- /dev/null
+++ b/templates/details/5x5.html
@@ -0,0 +1,19 @@
+{% extends 'base.html' %}
+{% load typogrify %}
+{% block pagetitle %}Luxagraf | Projects | 5x5 - Interviews from the road {% endblock %}
+{% block metadescription %}{% endblock %}
+
+{%block bodyid%}id="projects"{%endblock%}
+
+{% block primary %}
+<article>
+ <ul id="breadcrumbs">
+ <li><a href="/" title="luxagraf homepage">Home</a> &rarr;</li>
+ <li><a href="/projects/" title="luxagraf projects page">Projects</a> &rarr;</li>
+ <li>5x5</li>
+ </ul>
+
+
+
+</article>
+{% endblock %}
diff --git a/templates/projects/base.html b/templates/projects/base.html
deleted file mode 100644
index 590de52..0000000
--- a/templates/projects/base.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{% extends 'base.html' %}
-{% load typogrify %}
-{% block pagetitle %}Luxagraf | Projects {% endblock %}
-{% block metadescription %}Travel Themes and Experiments {% endblock %}
-
-{%block bodyid%}id="projects"{%endblock%}
-
-{% block primary %}
-<article>
- <ul id="breadcrumbs">
- <li><a href="/" title="luxagraf homepage">Home</a> &rarr;</li>
- <li>Projects</li>
- </ul>
- <h1 class="hide">Projects</h1>
- <h3>Coming soon.</h3>
- <p>Projects. Experiments in travel. Because everything is amazing.</p>
-
-</article>
-{% endblock %}
-