From 0882d73ca1ba4c84ce24c946548c80d9e4d1c04e Mon Sep 17 00:00:00 2001
From: "luxagraf@c63593aa-01b0-44d9-8516-4b9c7e931d7f"
Date: Sat, 30 Jan 2010 19:19:30 +0000
Subject: added topics to posts
---
apps/blog/admin.py | 7 +-
apps/blog/models.py | 22 ++
apps/blog/views.py | 13 +-
apps/links/utils.py | 2 +-
apps/photos/models.py | 9 +-
apps/photos/urls.py | 2 +-
apps/photos/utils.py | 110 ++++++++--
apps/photos/views.py | 5 +
base_urls.py | 6 +-
cron/sync_links.py | 12 ++
lib/contact_form/forms.py | 6 +-
lib/view_wrapper.py | 10 +
media/css/base.css | 47 +++--
media/googlehostedservice.html | 1 +
media/img/pause.png | Bin 0 -> 963 bytes
media/img/play.png | Bin 0 -> 1072 bytes
media/img/slideshow-arrow-left.png | Bin 0 -> 1062 bytes
media/img/slideshow-arrow-right.png | Bin 0 -> 1064 bytes
media/robots.txt | 2 +
templates/404.html | 25 +--
templates/500.html | 132 ++++++++----
templates/archives/homepage.html | 2 +-
templates/archives/map.html | 2 +-
templates/archives/photos.html | 6 +-
templates/archives/topics.html | 39 ++++
templates/archives/writing.html | 4 +-
templates/base.html | 6 +-
templates/contact_form/contact_form.html | 26 ++-
templates/details/entry.html | 40 +++-
templates/details/photo_galleries.html | 345 +++++++++++++++++++++++++++++++
templates/includes/map_entry_list.html | 145 ++++++-------
31 files changed, 832 insertions(+), 194 deletions(-)
create mode 100644 cron/sync_links.py
create mode 100644 lib/view_wrapper.py
create mode 100644 media/googlehostedservice.html
create mode 100644 media/img/pause.png
create mode 100644 media/img/play.png
create mode 100644 media/img/slideshow-arrow-left.png
create mode 100644 media/img/slideshow-arrow-right.png
create mode 100644 media/robots.txt
create mode 100644 templates/archives/topics.html
create mode 100644 templates/details/photo_galleries.html
diff --git a/apps/blog/admin.py b/apps/blog/admin.py
index 78ad458..c5c5c5d 100644
--- a/apps/blog/admin.py
+++ b/apps/blog/admin.py
@@ -1,6 +1,6 @@
from django.contrib import admin
from django import forms
-from blog.models import Entry, PostImage
+from blog.models import Entry, PostImage, Topic
from blog.widgets import AdminImageWidget
from django.contrib.gis.admin import OSMGeoAdmin
from django.contrib.gis.maps.google import GoogleMap
@@ -23,7 +23,7 @@ class EntryAdmin(OSMGeoAdmin):
list_filter = ('pub_date', 'enable_comments', 'status','region','location')
fieldsets = (
('Entry', {'fields': ('title','body_markdown', ('location','region'), 'pub_date', ('status','enable_comments'), 'tags', 'slug','photo_gallery'), 'classes': ('show','extrapretty','wide')}),
- ('Pub Location', {'fields': ('point',('thumbnail',),'dek', 'title_keywords'), 'classes': ('collapse', 'wide')}),
+ ('Pub Location', {'fields': ('point',('thumbnail',),'dek', 'topics', 'title_keywords'), 'classes': ('collapse', 'wide')}),
)
class Media:
@@ -71,6 +71,9 @@ class EntryAdmin(OSMGeoAdmin):
class PostImageAdmin(admin.ModelAdmin):
list_display = ('title', 'output_tags')
+class TopicAdmin(admin.ModelAdmin):
+ list_display = ('name', 'slug')
+admin.site.register(Topic, TopicAdmin)
admin.site.register(PostImage, PostImageAdmin)
admin.site.register(Entry, EntryAdmin)
diff --git a/apps/blog/models.py b/apps/blog/models.py
index 5ff6624..bdbcd82 100644
--- a/apps/blog/models.py
+++ b/apps/blog/models.py
@@ -35,6 +35,17 @@ class PostImage(models.Model):
return force_unicode('' % \
(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')
@@ -56,6 +67,17 @@ class Entry(models.Model):
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',)
diff --git a/apps/blog/views.py b/apps/blog/views.py
index 6ccdc28..ef933eb 100644
--- a/apps/blog/views.py
+++ b/apps/blog/views.py
@@ -5,7 +5,7 @@ from django.views.generic.list_detail import object_list
from django.http import Http404
-from blog.models import Entry
+from blog.models import Entry, Topic
from locations.models import Region, Country
def home(request):
@@ -35,6 +35,17 @@ def entry_list(request,page):
return object_list(request, queryset=qs, template_name='archives/writing.html')
+"""
+List of all writing
+"""
+def topic_list(request,slug,page):
+ request.page_url = '/topics/'+slug+'/%d/'
+ request.page = int(page)
+ topic = Topic.objects.get(slug=slug)
+ qs = Entry.objects.filter(status__exact=1,topics=topic).order_by('-pub_date').select_related()
+ return object_list(request, queryset=qs, template_name='archives/topics.html',)
+
+
"""
Grabs entries by region or country
"""
diff --git a/apps/links/utils.py b/apps/links/utils.py
index b94f196..9acbd52 100644
--- a/apps/links/utils.py
+++ b/apps/links/utils.py
@@ -109,7 +109,7 @@ def sync_delicious_links(*args, **kwargs):
email_link(l)
if l.status == 1:
pass
- post_to_tumblr(l)
+ #post_to_tumblr(l)
#send_to_deliciousfb(l)
if(dupe):
break
diff --git a/apps/photos/models.py b/apps/photos/models.py
index 9b6d331..73098b3 100644
--- a/apps/photos/models.py
+++ b/apps/photos/models.py
@@ -47,7 +47,14 @@ class Photo(models.Model):
admin_thumbnail.allow_tags = True
admin_thumbnail.short_description = 'Thumbnail'
+ def get_local_medium_url(self):
+ return '%sflickr/med/%s/%s.jpg' %(settings.IMAGES_URL,self.pub_date.strftime("%Y"),self.flickr_id)
+ def get_local_orig_url(self):
+ return '%sflickr/full/%s/%s.jpg' %(settings.IMAGES_URL,self.pub_date.strftime("%Y"),self.flickr_id)
+
+ def get_local_slideshow_url(self):
+ return '%sslideshow/%s/%s.jpg' %(settings.IMAGES_URL,self.pub_date.strftime("%Y"),self.flickr_id)
def __unicode__(self):
return self.title
@@ -139,7 +146,7 @@ class PhotoGallery(models.Model):
return "%sgallery_thumbs/%s.jpg" % (settings.IMAGES_URL, self.id)
def get_absolute_url(self):
- return "/photos/album/%s/" % (self.id)
+ return "/photos/galleries/%s/" % (self.set_slug)
class PhotoSitemap(Sitemap):
diff --git a/apps/photos/urls.py b/apps/photos/urls.py
index 44b4869..b53b343 100644
--- a/apps/photos/urls.py
+++ b/apps/photos/urls.py
@@ -5,7 +5,7 @@ from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
- (r'(?P[-\w]+)/(?P\d+)/$', 'photos.views.gallery_list_by_area'),
+ (r'galleries/(?P[-\w]+)/$', 'photos.views.gallery'),
(r'(?P\d+)/$', 'photos.views.gallery_list'),
(r'(?P[-\w]+)/$', redirect_to, {'url': '/photos/%(slug)s/1/'}),
(r'', redirect_to, {'url': '/photos/1/'}),
diff --git a/apps/photos/utils.py b/apps/photos/utils.py
index de0884d..57a4cdb 100644
--- a/apps/photos/utils.py
+++ b/apps/photos/utils.py
@@ -55,7 +55,7 @@ def sync_flickr_photos(*args, **kwargs):
print 'already have '+info['id']+' moving on'
except ObjectDoesNotExist:
taglist = []
- place = place_handler(force_unicode(info['latitude'])+","+force_unicode(info['longitude']))
+ location, region = get_geo(float(info['latitude']),float(info['longitude']))
details = client.flickr_photos_getInfo(user_id=settings.FLICKR_USER_ID, photo_id=force_unicode(info['id']))
for t in details.findall('photo/tags/tag'):
tag = dict((k, smart_unicode(t.get(k))) for k in t.keys())
@@ -78,12 +78,15 @@ def sync_flickr_photos(*args, **kwargs):
exif_iso = exif['ISO Speed'],
exif_lens = exif['Focal Length'],
exif_date = flickr_datetime_to_datetime(exif["Date and Time (Original)"].replace(':', '-', 2)),
- gps = force_unicode(info['latitude'])+","+force_unicode(info['longitude']),
- place = place,
+ lat = float(info['latitude']),
+ lon = float(info['longitude']),
+ region = region,
+ location = location,
tags = ", ".join(t for t in taglist)
)
+ #print info['title'], region, location
photo.save()
- make_local_size(photo)
+ #make_local_size(photo)
def exif_handler(data):
converted = {}
@@ -109,20 +112,92 @@ def flickr_datetime_to_datetime(fdt):
date_parts = strptime(fdt, '%Y-%m-%d %H:%M:%S')
return datetime(*date_parts[0:6])
-def place_handler(gps):
- place = Place.objects.all()
- count = Place.objects.count()
- num = 1
- for p in place:
- if p.within_bounds(gps) is True:
- return p
- elif p.within_bounds(gps) is False and count == num:
- return Place.objects.filter(name='Default').get()
- num += 1
+def get_geo(lat,lon):
+ from locations.models import Location, Region
+ from django.contrib.gis.geos import Point
+ pnt_wkt = Point(lon, lat)
+ try:
+ location = Location.objects.get(geometry__contains=pnt_wkt)
+ except Location.DoesNotExist:
+ location = None
+ region = Region.objects.get(geometry__contains=pnt_wkt)
+ return location, region
+
ImageFile.MAXBLOCK = 1000000
-def make_local_size(photo,set):
+def slideshow_image(photo):
+ slide_dir = settings.IMAGES_ROOT + '/slideshow/'+ photo.pub_date.strftime("%Y")
+ if not os.path.isdir(slide_dir):
+ os.makedirs(slide_dir)
+ med = photo.get_original_url()
+ fname = urllib.urlopen(med)
+ im = cStringIO.StringIO(fname.read()) # constructs a StringIO holding the image
+ img = Image.open(im)
+ cur_width, cur_height = img.size
+ #if image landscape
+ if cur_width > cur_height:
+ new_width = 800
+ #check to make sure we aren't upsizing
+ if cur_width > new_width:
+ ratio = float(new_width)/cur_width
+ x = (cur_width * ratio)
+ y = (cur_height * ratio)
+ resized = img.resize((int(x), int(y)), Image.ANTIALIAS)
+ resized_filename = '%s/%s.jpg' %(slide_dir, photo.flickr_id)
+ resized.save(resized_filename, 'JPEG', quality=95, optimize=True)
+ else:
+ filename = '%s/%s.jpg' %(slide_dir, photo.flickr_id)
+ img.save(filename)
+ else:
+ #image portrait
+ new_height = 600
+ #check to make sure we aren't upsizing
+ if cur_height > new_height:
+ ratio = float(new_height)/cur_height
+ x = (cur_width * ratio)
+ y = (cur_height * ratio)
+ resized = img.resize((int(x), int(y)), Image.ANTIALIAS)
+ resized_filename = '%s/%s.jpg' %(slide_dir, photo.flickr_id)
+ resized.save(resized_filename, 'JPEG', quality=95, optimize=True)
+ else:
+ filename = '%s/%s.jpg' %(slide_dir, photo.flickr_id)
+ img.save(filename)
+
+def make_local_copies(photo):
+ orig_dir = settings.IMAGES_ROOT + '/flickr/full/'+ photo.pub_date.strftime("%Y")
+ if not os.path.isdir(orig_dir):
+ os.makedirs(orig_dir)
+ full = photo.get_original_url()
+ fname = urllib.urlopen(full)
+ im = cStringIO.StringIO(fname.read()) # constructs a StringIO holding the image
+ img = Image.open(im)
+ local_full = '%s/%s.jpg' %(orig_dir, photo.flickr_id)
+ img.save(local_full)
+ #save large size
+ large_dir = settings.IMAGES_ROOT + '/flickr/large/'+ photo.pub_date.strftime("%Y")
+ if not os.path.isdir(large_dir):
+ os.makedirs(large_dir)
+ large = photo.get_large_url()
+ fname = urllib.urlopen(large)
+ im = cStringIO.StringIO(fname.read()) # constructs a StringIO holding the image
+ img = Image.open(im)
+ local_large = '%s/%s.jpg' %(large_dir, photo.flickr_id)
+ if img.format == 'JPEG':
+ img.save(local_large)
+ #save medium size
+ med_dir = settings.IMAGES_ROOT + '/flickr/med/'+ photo.pub_date.strftime("%Y")
+ if not os.path.isdir(med_dir):
+ os.makedirs(med_dir)
+ med = photo.get_medium_url()
+ fname = urllib.urlopen(med)
+ im = cStringIO.StringIO(fname.read()) # constructs a StringIO holding the image
+ img = Image.open(im)
+ local_med = '%s/%s.jpg' %(med_dir, photo.flickr_id)
+ img.save(local_med)
+
+
+def make_gallery_thumb(photo,set):
crop_dir = settings.IMAGES_ROOT + '/gallery_thumbs/'
if not os.path.isdir(crop_dir):
os.makedirs(crop_dir)
@@ -392,8 +467,6 @@ for p in photos.photos.photo:
make_local_size(photo)
#if (dupe):
#break
-
-"""
from locations.models import Location
from photos.models import Photo
@@ -408,4 +481,5 @@ def find_loc(photos):
print photo.id
photo.save()
except Location.DoesNotExist:
- print "photo %s does not fall within any exisiting location" %(photo.id)
\ No newline at end of file
+ print "photo %s does not fall within any exisiting location" %(photo.id)
+"""
\ No newline at end of file
diff --git a/apps/photos/views.py b/apps/photos/views.py
index 43591ca..5967333 100644
--- a/apps/photos/views.py
+++ b/apps/photos/views.py
@@ -3,6 +3,7 @@ from django.template import RequestContext
from django.views.generic.list_detail import object_list
from django.http import Http404
+from view_wrapper import luxagraf_render
from tagging.models import Tag,TaggedItem
from photos.models import Photo,PhotoGallery
from locations.models import Country, Region
@@ -20,6 +21,10 @@ def gallery_list(request,page):
qs = PhotoGallery.objects.all().order_by('-id')
return object_list(request, queryset=qs, template_name='archives/photos.html')
+def gallery(request,slug):
+ g = PhotoGallery.objects.get(set_slug=slug)
+ return luxagraf_render(request,'details/photo_galleries.html', {'object': g,})
+
"""
Grabs entries by region or country
diff --git a/base_urls.py b/base_urls.py
index 2fab651..1fdc87b 100644
--- a/base_urls.py
+++ b/base_urls.py
@@ -38,6 +38,7 @@ urlpatterns += patterns('',
)
urlpatterns += patterns('',
+ (r'^colophon/', redirect_to, {'url': '/about/'}),
(r'^admin/doc/', redirect_to, {'url': '/grappelli/help/1/'}),
(r'^admin/doc/', include('django.contrib.admindocs.urls')),
(r'^admin/filebrowser/', include('filebrowser.urls')),
@@ -53,6 +54,9 @@ urlpatterns += patterns('',
#(r'^photo-of-the-day/$', 'luxagraf.photos.views.potd_list'),
(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
(r'^writing/', include('blog.urls')),
+ (r'^tops/', include('blog.urls')),
+ (r'^topics/(?P[-\w]+)/$', redirect_to, {'url': '/topics/%(slug)s/1/'}),
+ (r'^topics/(?P[-\w]+)/(?P\d+)/', 'blog.views.topic_list'),
#Entry detail i.e. /year/month/day/my-title/
(r'(?P\d{4})/(?P[a-z]{3})/(?P\w{1,2})/(?P[-\w]+)/$', 'blog.views.entry_detail'),
# locations
@@ -63,6 +67,4 @@ urlpatterns += patterns('',
(r'^map/', include('locations.urls')),
#homepage
(r'^$', 'blog.views.home'), #'blog.views.home'),
- #static pages
- #(r'(?P[-\w]+)/$', 'static.views.page_view'),
)
diff --git a/cron/sync_links.py b/cron/sync_links.py
new file mode 100644
index 0000000..3ecd5a4
--- /dev/null
+++ b/cron/sync_links.py
@@ -0,0 +1,12 @@
+import sys, os
+
+sys.path.append('/home/luxagraf/webapps/django')
+sys.path.append('/home/luxagraf/webapps/django/luxagraf')
+sys.path.append('/home/luxagraf/webapps/django/luxagraf/apps')
+sys.path.append('/home/luxagraf/webapps/django/luxagraf/lib')
+sys.path.append('/home/luxagraf/webapps/django/lib/python2.5/')
+os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
+
+from links import utils
+#utils.sync_magnolia_links()
+utils.sync_delicious_links()
\ No newline at end of file
diff --git a/lib/contact_form/forms.py b/lib/contact_form/forms.py
index 921d8ee..830db75 100644
--- a/lib/contact_form/forms.py
+++ b/lib/contact_form/forms.py
@@ -139,12 +139,12 @@ class ContactForm(forms.Form):
name = forms.CharField(max_length=100,
widget=forms.TextInput(attrs=attrs_dict),
- label=u'Your name')
+ label=u'Name:')
email = forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict,
maxlength=200)),
- label=u'Your email address')
+ label=u'E-mail:')
body = forms.CharField(widget=forms.Textarea(attrs=attrs_dict),
- label=u'Your message')
+ label=u'Message:')
#from_email = settings.DEFAULT_FROM_EMAIL
diff --git a/lib/view_wrapper.py b/lib/view_wrapper.py
new file mode 100644
index 0000000..0e1e492
--- /dev/null
+++ b/lib/view_wrapper.py
@@ -0,0 +1,10 @@
+from django.shortcuts import render_to_response
+from django.template.context import RequestContext
+
+def luxagraf_render(request, *args, **kwargs):
+ """
+ Replacement for render_to_response that uses RequestContext and sets an
+ extra template variable, TEMPLATE_NAME.
+ """
+ kwargs['context_instance'] = RequestContext(request)
+ return render_to_response(*args, **kwargs)
\ No newline at end of file
diff --git a/media/css/base.css b/media/css/base.css
index 231da59..33d1e10 100644
--- a/media/css/base.css
+++ b/media/css/base.css
@@ -26,7 +26,7 @@ header, section, footer, aside, article, nav {display: block;text-align:left;}
html {height:100%;}
body {
background: #faf9f4;
- font-family: Georgia, "Times New Roman", Times, Serif;
+ font-family: "Hoefler Text", Georgia, "Times New Roman", Times, Serif;
/* font-size 15px */
font-size: 93.75%;
/* line height of 24 px */
@@ -54,7 +54,7 @@ a:hover {
color: #b53a04 !important;
text-decoration: none;
}
-article a {border-bottom: 1px dotted #b53a04;}
+article a {border-bottom: 1px dotted #f00;}
blockquote, blockquote p { font-size: 14px !important; margin: 1.2em !important; line-height: 22px !important; font-style: italic !important;}
/* --------------------- layout ------------------------ */
@@ -65,7 +65,7 @@ header nav ul { margin: 35px auto 0;text-align: center;}
header nav li {display: inline; font-style: italic; font-size: 11px; margin: 0 0 2px 0; letter-spacing: 1px;}
header hgroup h1,
header hgroup h1 a {
- font: 40px/40px Georgia, "Times New Roman", Times, serif;
+ font: 40px/40px Georgia, "Times New Roman", Times, Serif;
text-transform: uppercase;
letter-spacing: 4px;
color: #b53a04 !important;
@@ -86,7 +86,7 @@ header hgroup h2 a {color: #b53a04 !important;}
/* global article styles */
article h1,
article h1 a {
- font: 48px/48px Georgia, "Times New Roman", Times, serif;
+ font: 48px/48px Georgia, "Times New Roman", Times, Serif;
font-style: normal;
color: #000 !important;
margin: 55px 0 5px 0;
@@ -106,7 +106,7 @@ h3 {
/*make the first graf bigger for browsers that understand -- suck it ie6 */
body.writing-detail article section#post p:nth-of-type(1), body#home article section#featured-article p:nth-of-type(1) {
- font: 18px/28px Georgia, "Times New Roman", Times, serif;
+ font: 18px/28px "Hoefler Text", Georgia, "Times New Roman", Times, Serif;
margin: 0 0 1em 0;
}
@@ -115,8 +115,7 @@ body.writing-detail article section#post p:nth-of-type(1), body#home article sec
article {margin: 0 auto; width: 560px;}
-time, .location, .all-link { color: #888; text-align: center; margin: 12px 0 22px;text-transform: uppercase; font-size: 80%;font-style: italic;}
-.location a {color: #888;}
+.all-link { color: #888; text-align: center; margin: 12px 0 22px;text-transform: uppercase; font-size: 80%;font-style: italic; }
.all-link a {border: none;}
@@ -209,10 +208,13 @@ aside h4 {
margin: 8px 0 2px;
}
aside ul li { margin-left: 4px; font-size: 80%; line-height: 20px;}
-
+aside.meta { float: none; text-align: center; margin: 22px 0 22px 0; color: #888; text-transform: uppercase; font-size: 80%;font-style: italic;}
+aside.meta a {color: #888; border: none;}
+aside.meta span {line-height: 18px;}
+aside.meta .topics {display: block;}
/* Writing Detail Pages */
-span.byline, .all-link {display: block;color: #888; text-align: center; margin: 12px 0 22px;}
+.all-link {display: block;color: #888; text-align: center; margin: 12px 0 22px;}
/* drop caps */
span.drop {
font-size: 5.5em;
@@ -220,18 +222,19 @@ span.drop {
float: left;
padding: 30px 5px 5px 0;
overflow: visible;
+ font-family: Georgia, "Times New Roman", Times, Serif;
}
ol.footnote {
border-top: 1px dotted #ccc;
- font-size: 85%;
+ font-size: 12px;
margin: 18px 0;
}
ol.footnote li {
margin: 12px 0;
line-height: .8em;
}
-ol.footnote li p {line-height: 18px !important;}
-ol.footnote li a, ol.footnote li span {font-size: 70%; }
+ol.footnote li p {line-height: 18px !important; font-size:12px !important;}
+ol.footnote li a, ol.footnote li span {font-size: 12px; }
hr.footnotes {
display: none;
}
@@ -258,9 +261,17 @@ section#comments h4 {
padding-top: 45px;
}
section#comments h4 span {font-size: 90%; font-style: italic;}
-
+section p.pull-quote {text-align: center; font-style: italic;font-size: 14px !important; line-height: 18px !important;margin-bottom: 24px;}
+span.credit {display: block;}
+
+/*contact form*/
+.form-holder {width: 500px; margin: 40px auto;}
+.form-holder li { clear: both; }
+.form-holder dt {float: left; margin: 0 10px 6px 0; text-align: right; width: 130px;}
+.form-holder dd { float: left;}
+.form-holder .button { clear: both; float: right; margin: 8px 30px 100px 0;}
/* --------------------- Footer ------------------------ */
-footer {text-align:center; padding-top: 40px; font-size: 80%; clear:both; margin-top: 60px; background:#e2e2dd;}
+footer {text-align:center; padding-top: 40px; font-size: 80%; clear:both; margin-top: 60px; background:#ded1c0;}
footer div { margin: 0 auto; width: 580px;}
footer section {float: left; margin: 0 14px; width: 110px; line-height: 20px;}
footer section:first-child {width: 220px; margin: 0 20px 0 30px;}
@@ -316,9 +327,15 @@ img.postpicleft {
margin: 5px;
}
/* --------------------- misc classes ------------------------ */
-
+.hide {display:none;}
.dsq-brlink, img[src='http://maps.gstatic.com/intl/en_us/mapfiles/poweredby.png'], .terms-of-use-link {display: none;}
+#dsq-comments-count {display: none;}
div[dir='ltr'] span {
width: 0;
visibility: collapse;
}
+p.update {font-size: 12px !important; line-height: 18px !important;}
+#dsq-comments-title {display: none;}
+#dsq-new-post {padding: 10px !important; background:#ded1c0 !important; margin-top: 50px !important}
+.disqus-link-count {text-decoration: none; border: none;}
+a.disqus-link-count:hover {color: #222 !important; cursor:pointer !important;}
\ No newline at end of file
diff --git a/media/googlehostedservice.html b/media/googlehostedservice.html
new file mode 100644
index 0000000..21ca48c
--- /dev/null
+++ b/media/googlehostedservice.html
@@ -0,0 +1 @@
+googleffffffffa0ebb2f3
\ No newline at end of file
diff --git a/media/img/pause.png b/media/img/pause.png
new file mode 100644
index 0000000..a87cd1e
Binary files /dev/null and b/media/img/pause.png differ
diff --git a/media/img/play.png b/media/img/play.png
new file mode 100644
index 0000000..e94b94f
Binary files /dev/null and b/media/img/play.png differ
diff --git a/media/img/slideshow-arrow-left.png b/media/img/slideshow-arrow-left.png
new file mode 100644
index 0000000..facb4d5
Binary files /dev/null and b/media/img/slideshow-arrow-left.png differ
diff --git a/media/img/slideshow-arrow-right.png b/media/img/slideshow-arrow-right.png
new file mode 100644
index 0000000..34d45a5
Binary files /dev/null and b/media/img/slideshow-arrow-right.png differ
diff --git a/media/robots.txt b/media/robots.txt
new file mode 100644
index 0000000..d7cd58c
--- /dev/null
+++ b/media/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /admin/
\ No newline at end of file
diff --git a/templates/404.html b/templates/404.html
index 56b58a4..d3db4f8 100644
--- a/templates/404.html
+++ b/templates/404.html
@@ -6,25 +6,26 @@
{% block title %}404 Page Not Found{% endblock %}
- {% block primary %}
+{% block primary %}
+
+
Error 404 – Page Not Found
Oh my god you broke the internet.
Al Gore is pissed.
So is the hamster
This is probably because of one or more of the following:
-
-
The hamster who fetches these pages has stepped out for a smoke break (he earns extra travel money over at the Philip Morris Labs where he poses as a rat and gets paid under the table).
-
The hamster who fetches these pages is actually at Phillip Morris Labs working right now in which case you'll just have to wait until he comes back here.
-
The hamster who fetches the pages finally made enough extra travel money working nights at the Philip Morris Labs to actually travel and is no longer running this site at all, in fact he's sipping Mai Tai's in Indonesia even as we speak, laughing that semi-sinister but always endearing high pitched squeak of a laugh.
-
The hamster may be innocent. Perhaps I was drunk and left the page in the back of a cab.
-
Wait, why is this our fault? Why are you so quick to blame the hamster? This could be your fault. You might have man hands or thick, clumsy fingers or that led you to type the wrong address. Or you might just be an idiot. Or you might be following the links of an idiot. See what happens when you visit other sites? Keep it simple, make the hamster happy. Limit your internet usage to luxagraf only.
-
Of course its possible that you're ahead of me and the page simply hasn't been invented yet, which makes you a genius. And explains why the hamster coouldn't find it.
-
It's also entirely possible that the page exists but the hamster doesn't want to show it to you. It maybe one of those "backroom" pages he has where secret stuff beyond your wildest imaginings are happening even now, right this second, just behind this blank white curtain. Stuff which you can only guess at. You can ask the hamster for an invite. Just email a full body shot, two forms of ID and a credit card number for verification purposes.
-
+
+
The hamster who fetches these pages has stepped out for a smoke break (he earns extra travel money over at the Philip Morris Labs where he poses as a rat and gets paid under the table).
+
The hamster who fetches these pages is actually at Phillip Morris Labs working right now in which case you'll just have to wait until he comes back here.
+
The hamster who fetches the pages finally made enough extra travel money working nights at the Philip Morris Labs to actually travel and is no longer running this site at all, in fact he's sipping Mai Tai's in Indonesia even as we speak, laughing that semi-sinister but always endearing high pitched squeak of a laugh.
+
The hamster may be innocent. Perhaps I was drunk and left the page in the back of a cab.
+
Wait, why is this our fault? Why are you so quick to blame the hamster? This could be your fault. You might have man hands or thick, clumsy fingers or that led you to type the wrong address. Or you might just be an idiot. Or you might be following the links of an idiot. See what happens when you visit other sites? Keep it simple, make the hamster happy. Limit your internet usage to luxagraf only.
+
Of course its possible that you're ahead of me and the page simply hasn't been invented yet, which makes you a genius. And explains why the hamster couldn't find it.
+
It's also entirely possible that the page exists but the hamster doesn't want to show it to you. It maybe one of those "backroom" pages he has, where secret stuff beyond your wildest imaginings is happening even now, right this second, just behind this blank white curtain. Stuff which you can only guess at. You can ask the hamster for an invite. Just email a full body shot, two forms of ID and a credit card number for verification purposes.
More »
diff --git a/templates/archives/map.html b/templates/archives/map.html
index 0a90df9..b040b00 100644
--- a/templates/archives/map.html
+++ b/templates/archives/map.html
@@ -4,7 +4,7 @@
{% load slugify_under %}
{% block pagetitle %}Luxagraf | Map and Trips{% endblock %}
-{% block metadescription %}Writing Archive, Luxagraf{% endblock %}
+{% block metadescription %}Browse luxagraf by map, see trip routes and discover essays and dispatches from around the world{% endblock %}
{#==============================================
Google Maps code
diff --git a/templates/archives/photos.html b/templates/archives/photos.html
index f44265d..b2ef4f7 100644
--- a/templates/archives/photos.html
+++ b/templates/archives/photos.html
@@ -2,8 +2,8 @@
{% load typogrify %}
{% load pagination_tags %}
-{% block pagetitle %}Luxagraf | {% if region %}Photos from {{region.name|title|smartypants|safe}}{%else%}Photos from Around the World {%endif%}{% endblock %}
-{% block metadescription %}Photo Archive, Luxagraf{% endblock %}
+{% block pagetitle %}Luxagraf | {% if region %}Photo Galleries: Images from {{region.name|title|smartypants|safe}}{%else%}Photo Galleries: Images from Around the World {%endif%}{% endblock %}
+{% block metadescription %}{% if region %}Photo Galleries from {{region.name|title|smartypants|safe}}{%else%}Photo Galleries: Images from Around the World {%endif%}{% endblock %}
{%block bodyid%}id="photo-archive"{%endblock%}
@@ -13,7 +13,7 @@
{% if region %}Photographs from {{region.name|title|smartypants|safe}}{%else%}Photographs from Around the World {%endif%}
{% autopaginate object_list 18 %} {% for object in object_list %}
diff --git a/templates/contact_form/contact_form.html b/templates/contact_form/contact_form.html
index f167676..0815ef4 100644
--- a/templates/contact_form/contact_form.html
+++ b/templates/contact_form/contact_form.html
@@ -4,8 +4,8 @@
Load up the various metadata add-ins
================================================#}
-{% block meta_description %} Contact, Get in touch with corriegreathouse.com.{%endblock%}
-{% block metatitle %} - Get in Touch{% endblock %}
+{% block metadescription %}Contact Luxagraf: Want to know something more about somewhere I've been? Or something about the website? Drop me an e-mail and I'll get back to you as soon as I can.{%endblock%}
+{% block pagetitle %}Get in Touch | Luxagraf {% endblock %}
{% block metakeywords %}contact, get in touch, drop a line{%endblock%}
{#==============================================
@@ -19,17 +19,27 @@ Contact Me
{%block primary%}
+
+
+
If you enjoyed reading this, you can follow along on Twitter or by subscribing to the RSS Feed. For more about luxagraf, see the about page. To get in touch please use the contact form or leave a comment below.
Follow along on Twitter or by subscribing to the RSS Feed. For more about me, see the about page. To get in touch please use the contact form or leave a comment below.
-
Comments on {{object.title|title|smartypants|safe}}
Comments on {{object.title|title|smartypants|safe}}
+Comments
blog comments powered by Disqus