summaryrefslogtreecommitdiff
path: root/templates
diff options
context:
space:
mode:
Diffstat (limited to 'templates')
-rw-r--r--templates/404.html42
-rw-r--r--templates/500.html99
-rw-r--r--templates/admin/base.html102
-rw-r--r--templates/admin/birds/birdsighting/change_form.html135
-rw-r--r--templates/admin/buttons.html63
-rw-r--r--templates/admin/ccg_notes/change_form.html152
-rw-r--r--templates/admin/income/monthly.html57
-rw-r--r--templates/admin/income_month.html159
-rw-r--r--templates/admin/index.html174
-rw-r--r--templates/admin/insert_images.html127
-rw-r--r--templates/admin/insert_products.html82
-rwxr-xr-xtemplates/admin/links/link/change_form.html138
-rw-r--r--templates/admin/message.html20
-rw-r--r--templates/admin/pages/change_form.html141
-rw-r--r--templates/admin/photos/luxgallery/change_form.html135
-rw-r--r--templates/admin/save_link.html123
-rw-r--r--templates/admin/upload_zip.html57
-rw-r--r--templates/archives/birds.html56
-rw-r--r--templates/archives/essays.html21
-rw-r--r--templates/archives/expenses.html26
-rw-r--r--templates/archives/figments.html26
-rw-r--r--templates/archives/figments_series.html24
-rw-r--r--templates/archives/gallery_list.html56
-rw-r--r--templates/archives/guide.html51
-rw-r--r--templates/archives/homepage-light.html98
-rw-r--r--templates/archives/homepage.html90
-rw-r--r--templates/archives/life-list.html27
-rw-r--r--templates/archives/links.html29
-rw-r--r--templates/archives/map.html57
-rw-r--r--templates/archives/map_data.html529
-rw-r--r--templates/archives/notes.html66
-rw-r--r--templates/archives/notes_date.html74
-rw-r--r--templates/archives/people.html34
-rw-r--r--templates/archives/photo_daily_list.html25
-rw-r--r--templates/archives/photos.html32
-rw-r--r--templates/archives/projects.html32
-rw-r--r--templates/archives/resume-pubs-by-pub.html28
-rw-r--r--templates/archives/resume-pubs.html33
-rw-r--r--templates/archives/robots.html2
-rw-r--r--templates/archives/sketches.html44
-rw-r--r--templates/archives/src_books.html20
-rw-r--r--templates/archives/writing.html46
-rw-r--r--templates/archives/writing_date.html32
-rw-r--r--templates/base.html54
-rw-r--r--templates/bin/country_sidebar.html6
-rw-r--r--templates/bin/map_sidebar.html23
-rw-r--r--templates/bin/recent_entries.html1
-rw-r--r--templates/bin/regions_sidebar.html6
-rw-r--r--templates/comments/base.html10
-rw-r--r--templates/comments/comment_notification_email.txt3
-rw-r--r--templates/comments/deleted.html8
-rw-r--r--templates/comments/flagged.html8
-rw-r--r--templates/comments/form.html25
-rw-r--r--templates/comments/list.html27
-rw-r--r--templates/comments/posted.html40
-rw-r--r--templates/comments/preview.html47
-rw-r--r--templates/contact_form/contact_form.html45
-rw-r--r--templates/contact_form/contact_form.txt5
-rw-r--r--templates/contact_form/contact_form_sent.html25
-rw-r--r--templates/contact_form/contact_form_subject.txt1
-rw-r--r--templates/details/5x5.html19
-rw-r--r--templates/details/babyvideos.html42
-rw-r--r--templates/details/code.html52
-rw-r--r--templates/details/cv.html144
-rw-r--r--templates/details/elliottvideos.html44
-rw-r--r--templates/details/expenses.html117
-rw-r--r--templates/details/fck_digg.html21
-rw-r--r--templates/details/figments.html55
-rw-r--r--templates/details/for-sale-412-holman-ave.html79
-rw-r--r--templates/details/gifs.html83
-rw-r--r--templates/details/guide.html65
-rw-r--r--templates/details/invoice.html97
-rw-r--r--templates/details/jrnl-export.html13
-rw-r--r--templates/details/link.html19
-rw-r--r--templates/details/location.html92
-rw-r--r--templates/details/national-parks.html55
-rw-r--r--templates/details/note.html106
-rw-r--r--templates/details/note.txt8
-rw-r--r--templates/details/photo.html85
-rw-r--r--templates/details/photo_galleries.html56
-rw-r--r--templates/details/photo_gallery.html67
-rw-r--r--templates/details/pubs.html23
-rw-r--r--templates/details/readme.html8
-rw-r--r--templates/details/resume.html141
-rw-r--r--templates/details/src_book.html62
-rw-r--r--templates/discursive_base.html83
-rw-r--r--templates/essays/entry_detail.txt8
-rw-r--r--templates/essays/essay_detail.html178
-rw-r--r--templates/essays/essay_list.html28
-rw-r--r--templates/fb-feed.xml46
-rw-r--r--templates/feed.xml26
-rw-r--r--templates/feeds/blog_description.html1
-rw-r--r--templates/feeds/links_description.html1
-rw-r--r--templates/gis/admin/google.html5
-rw-r--r--templates/gis/admin/google.js2
-rw-r--r--templates/gis/admin/openlayers.html68
-rw-r--r--templates/gis/admin/osm.html2
-rw-r--r--templates/gis/admin/osm_extra.js4
-rw-r--r--templates/human_weather.txt7
-rw-r--r--templates/js/leaflet-providers.js472
-rw-r--r--templates/lib/breadcrumbs.html14
-rw-r--r--templates/lib/breadcrumbs_detail.html14
-rw-r--r--templates/lib/friends_featured_img.html6
-rw-r--r--templates/lib/img_archive.html7
-rw-r--r--templates/lib/img_blok.html9
-rw-r--r--templates/lib/img_cluster.html6
-rw-r--r--templates/lib/img_pic960.html9
-rw-r--r--templates/lib/img_picfull.html10
-rw-r--r--templates/lib/img_pictall.html9
-rw-r--r--templates/lib/img_picwide.html7
-rw-r--r--templates/lib/img_product.html10
-rw-r--r--templates/locationsold/location_detail.html104
-rw-r--r--templates/mailing_list.html13
-rw-r--r--templates/newsletter/common.html15
-rw-r--r--templates/newsletter/message/message.html32
-rw-r--r--templates/newsletter/message/message.txt15
-rw-r--r--templates/newsletter/message/message_subject.txt1
-rw-r--r--templates/newsletter/message/subscribe.html20
-rw-r--r--templates/newsletter/message/subscribe.txt9
-rw-r--r--templates/newsletter/message/subscribe_subject.txt1
-rw-r--r--templates/newsletter/message/unsubscribe.html19
-rw-r--r--templates/newsletter/message/unsubscribe.txt9
-rw-r--r--templates/newsletter/message/unsubscribe_subject.txt1
-rw-r--r--templates/newsletter/message/update.html19
-rw-r--r--templates/newsletter/message/update.txt9
-rw-r--r--templates/newsletter/message/update_subject.txt1
-rw-r--r--templates/newsletter/newsletter_detail.html30
-rw-r--r--templates/newsletter/newsletter_list.html41
-rw-r--r--templates/newsletter/submission_archive.html21
-rw-r--r--templates/newsletter/subscription_activate.html15
-rw-r--r--templates/newsletter/subscription_subscribe.html25
-rw-r--r--templates/newsletter/subscription_subscribe_activated.html11
-rw-r--r--templates/newsletter/subscription_subscribe_email_sent.html11
-rw-r--r--templates/newsletter/subscription_subscribe_user.html25
-rw-r--r--templates/newsletter/subscription_unsubscribe.html25
-rw-r--r--templates/newsletter/subscription_unsubscribe_activated.html11
-rw-r--r--templates/newsletter/subscription_unsubscribe_email_sent.html11
-rw-r--r--templates/newsletter/subscription_unsubscribe_user.html27
-rw-r--r--templates/newsletter/subscription_update.html25
-rw-r--r--templates/newsletter/subscription_update_activated.html11
-rw-r--r--templates/newsletter/subscription_update_email_sent.html11
-rw-r--r--templates/src_base.html62
142 files changed, 6913 insertions, 0 deletions
diff --git a/templates/404.html b/templates/404.html
new file mode 100644
index 0000000..2e29130
--- /dev/null
+++ b/templates/404.html
@@ -0,0 +1,42 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Luxagraf | Error 404 {% endblock %}
+
+{%block bodyid%}id="writing-detail" class="single"{%endblock%}
+ {% block title %}404 Page Not Found{% endblock %}
+
+
+{% block primary %}
+<article>
+
+<header>
+ <h1>Error 404 &ndash; Page Not Found</h1>
+ <aside class="meta">
+ <section class="geo">Oh my god you broke the internet.</section>
+
+ </aside>
+ </header>
+ <div class="post-body">
+
+
+ <p><b></b></p>
+
+<p><b>Al Gore is pissed.</b></p>
+<p><b>So is the hamster.</b></p>
+<p>This is probably because of one or more of the following:</p>
+
+<p>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).</p>
+ <p>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.</p>
+ <p>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.</p>
+ <p>The hamster may be innocent. Perhaps I was drunk and left the page in the back of a cab.</p>
+ <p>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 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.net.</p>
+ <p>Of course it's also 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.</p>
+ <p>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.</p>
+
+ <p>Whatever the case you may <a href="javascript:history.go(-1)">return from whence you came</a>, <a href="/" title="Luxagraf Homepage">Head for the main page</a> or try searching again for whatever it is you wanted to find.</p>
+ </div>
+ <div class="clearfix">
+</article>
+ {% endblock %}
+
+
diff --git a/templates/500.html b/templates/500.html
new file mode 100644
index 0000000..d1e984d
--- /dev/null
+++ b/templates/500.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <title>Luxagraf | Internal Server Error</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <script>
+ document.createElement('header');
+ document.createElement('nav');
+ document.createElement('section');
+ document.createElement('article');
+ document.createElement('aside');
+ document.createElement('footer');
+ document.createElement('time');
+ document.createElement('hgroup');
+ </script>
+
+
+ <link rel="alternate"
+ type="application/rss+xml"
+ title="RSS 2.0"
+ href="http://feeds2.feedburner.com/luxagraf/blog">
+
+
+ <link rel="stylesheet"
+ href="http://media.luxagraf.net//css/base.css"
+ type="text/css"
+ media="screen"
+ charset="utf-8">
+
+<!--[if IE 6]><link rel="stylesheet" href="http://new.luxagraf.net/media/css/ie6.css" type="text/css" media="screen, projection"><![endif]-->
+
+ <link rel="shortcut icon"
+ href="http://media.luxagraf.net/img/favicon.ico"
+ type="image/vnd.microsoft.icon">
+
+ <link rel="apple-touch-icon"
+ href="http://media.luxagraf.net/img/luxagrafiphoneicon.png">
+
+ <meta name="author" content="luxagraf">
+ <meta name="description"
+ content="{% block metadescription %}Luxagraf: a travelogue of sorts, Recording journeys around the world and just next door.{% endblock %}">
+ <meta name="keywords"
+ content="luxagraf writing travel authors philosophy ramblings">
+ <meta name="copyright"
+ content="Licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 License">
+
+
+ <link rel="openid.server"
+ href="http://www.myopenid.com/server" >
+
+ <link rel="openid.delegate"
+ href="http://luxagraf.myopenid.com/" >
+
+<meta name="verify-v1" content="ZCZSYGNdjeLCPx5trSQELyhY9kq9N7CznTcv5JFkpnM=">
+</head>
+
+<body>
+ <header>
+ <nav>
+ <ul>
+ <li id="stories"><a href="/writing/1/" title="An archive of previous writings from around the world">I write.</a></li>
+ <li id="map" title="Maps and miscellanea"><a href="/map/">I travel.</a></li>
+ <li id="photos" title="Photos from travels around the world"><a href="/photos/1/">I photograph.</a></li>
+ </ul>
+ </nav>
+ <hgroup>
+ <h1><a href="/" title="home">Luxagraf</a></h1>
+ <h2><a href="/about/" title="About Luxagraf">{a travelogue}</a></h2>
+ </hgroup>
+ </header>
+
+ <article>
+ <h1>Server Error</h1>
+ <p>Holy crap, you broke the internet. The proper authorities have been notified and it will most likely be working again soon.</p>
+ </article>
+
+ <div class="clearfix"></div>
+ <footer>
+ <nav>
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/writing/1/">Writing</a></li>
+ <li><a href="/map/">Map</a></li>
+ <li><a href="/photos/1/">Photographs</a></li>
+ <li><a href="/contact/">Contact</a></li>
+ </ul>
+ </nav>
+ <div>
+
+ <section id="license">
+ <p>All content licensed under the Creative Commons (<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en" title="read the Attribution-Noncommercial-Share Alike 3.0 deed">details</a>). <span>Built with <a href="http://geodjango.org/" title="a GeoDjango joint">GeoDjango</a> and hosted on <a href="http://www.webfaction.com/" title="webfaction">Webfaction</a>.</span></p>
+ </section>
+ </div>
+ </footer>
+</body>
+</html>
+
+ {% endblock %}
+ \ No newline at end of file
diff --git a/templates/admin/base.html b/templates/admin/base.html
new file mode 100644
index 0000000..fd468f1
--- /dev/null
+++ b/templates/admin/base.html
@@ -0,0 +1,102 @@
+{% load i18n static %}<!DOCTYPE html>
+{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
+<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
+<head>
+<title>{% block title %}{% endblock %}</title>
+<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
+{% block extrastyle %}{% endblock %}
+{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
+{% block extrahead %}{% endblock %}
+{% block responsive %}
+ <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
+ <link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive.css" %}" />
+<style>
+@media (max-width: 1024px) {
+ textarea {
+ max-height: unset;
+ }
+}
+</style>
+ {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive_rtl.css" %}" />{% endif %}
+{% endblock %}
+{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
+</head>
+{% load i18n %}
+
+<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}"
+ data-admin-utc-offset="{% now "Z" %}">
+
+<!-- Container -->
+<div id="container">
+
+ {% if not is_popup %}
+ <!-- Header -->
+ <div id="header">
+ <div id="branding">
+ {% block branding %}{% endblock %}
+ </div>
+ {% block usertools %}
+ {% if has_permission %}
+ <div id="user-tools">
+ {% block welcome-msg %}
+ {% trans 'Welcome,' %}
+ <strong>{% firstof user.get_short_name user.get_username %}</strong>.
+ {% endblock %}
+ {% block userlinks %}
+ {% if site_url %}
+ <a href="{{ site_url }}">{% trans 'View site' %}</a> /
+ {% endif %}
+ {% if user.is_active and user.is_staff %}
+ {% url 'django-admindocs-docroot' as docsroot %}
+ {% if docsroot %}
+ <a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
+ {% endif %}
+ {% endif %}
+ {% if user.has_usable_password %}
+ <a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> /
+ {% endif %}
+ <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
+ {% endblock %}
+ </div>
+ {% endif %}
+ {% endblock %}
+ {% block nav-global %}{% endblock %}
+ </div>
+ <!-- END Header -->
+ {% block breadcrumbs %}
+ <div class="breadcrumbs">
+ <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+ {% if title %} &rsaquo; {{ title }}{% endif %}
+ </div>
+ {% endblock %}
+ {% endif %}
+
+ {% block messages %}
+ {% if messages %}
+ <ul class="messagelist">{% for message in messages %}
+ <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li>
+ {% endfor %}</ul>
+ {% endif %}
+ {% endblock messages %}
+ <div class="homepage-flex">
+ <!-- Content -->
+ <div id="content" class="{% block coltype %}colM{% endblock %} flex-left">
+ {% block pretitle %}{% endblock %}
+ {% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
+ {% block content %}
+ {% block object-tools %}{% endblock %}
+ {{ content }}
+ {% endblock %}
+ {% block sidebar %}{% endblock %}
+ <br class="clear" />
+ </div>
+ {% block adminembed %}{% endblock %}
+ <!-- END Content -->
+ </div>
+
+ {% block footer %}<div id="footer"></div>{% endblock %}
+</div>
+<!-- END Container -->
+
+</body>
+</html>
diff --git a/templates/admin/birds/birdsighting/change_form.html b/templates/admin/birds/birdsighting/change_form.html
new file mode 100644
index 0000000..31c9914
--- /dev/null
+++ b/templates/admin/birds/birdsighting/change_form.html
@@ -0,0 +1,135 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls admin_static admin_modify %}
+
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
+{{ media }}
+<script>
+if (!$) {
+ $ = django.jQuery;
+}
+$(function(){
+ $('#id_images').css('width', '500px').css('height', '400px');
+ $('#id_images option').each(function(){
+ $(this).attr('style', 'background: url('+$(this).text().split("qq")[1]+') no-repeat; background-size: 120px 80px; height: 80px; padding-left: 125px; line-height: 80px; margin-bottom: 4px; padding-bottom: 5px;border-bottom: #eee 1px solid;');
+ $(this).html($(this).text().split("qq")[0] + ' &ndash; <a href="/admin/photos/luximage/'+ $(this).text().split("qq")[2]+'/change/">edit</a>')
+ });
+});
+</script>
+
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+
+{% block coltype %}colM{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
+
+{% if not is_popup %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
+&rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+&rsaquo; {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endblock %}
+{% endif %}
+
+{% block content %}<div id="content-main">
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+ <ul class="object-tools">
+ {% block object-tools-items %}
+ <li>
+ {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
+ <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a>
+ </li>
+ {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %}
+ {% endblock %}
+ </ul>
+{% endif %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
+{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
+{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
+{% if errors %}
+ <p class="errornote">
+ {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+ </p>
+ {{ adminform.form.non_field_errors }}
+{% endif %}
+
+{% block field_sets %}
+{% for fieldset in adminform %}
+ {% include "admin/includes/fieldset.html" %}
+{% endfor %}
+{% endblock %}
+
+{% block after_field_sets %}{% endblock %}
+
+{% block inline_field_sets %}
+{% for inline_admin_formset in inline_admin_formsets %}
+ {% include inline_admin_formset.opts.template %}
+{% endfor %}
+{% endblock %}
+
+{% block after_related_objects %}{% endblock %}
+
+{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
+
+{% block admin_change_form_document_ready %}
+ <script type="text/javascript">
+ (function($) {
+ $(document).ready(function() {
+ $('.add-another').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:add-another-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showAddAnotherPopup(this);
+ }
+ });
+ $('.related-lookup').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:lookup-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectLookupPopup(this);
+ }
+ });
+ $('body').on('click', '.related-widget-wrapper-link', function(e) {
+ e.preventDefault();
+ if (this.href) {
+ var event = $.Event('django:show-related', {href: this.href});
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectPopup(this);
+ }
+ }
+ });
+ $('body').on('change', '.related-widget-wrapper select', function(e) {
+ var event = $.Event('django:update-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ updateRelatedObjectLinks(this);
+ }
+ });
+ $('.related-widget-wrapper select').trigger('change');
+
+ {% if adminform and add %}
+ $('form#{{ opts.model_name }}_form :input:visible:enabled:first').focus()
+ {% endif %}
+ });
+ })(django.jQuery);
+ </script>
+{% endblock %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
diff --git a/templates/admin/buttons.html b/templates/admin/buttons.html
new file mode 100644
index 0000000..fbfa400
--- /dev/null
+++ b/templates/admin/buttons.html
@@ -0,0 +1,63 @@
+<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 {
+ text-transform: uppercase;
+ min-width: 180px;
+ font-size: 90%;
+ position: relative;
+ display: inline-block;
+ margin: 0px;
+ padding: 7px 5px;
+ height: 32px;
+ -moz-box-sizing: border-box;
+ cursor: pointer;
+ overflow: hidden;
+ vertical-align: top;
+ color: rgb(255, 255, 255);
+ background: #79aec8;
+ }
+</style>
+
+ <div class="module" id="recent-actions-module">
+ <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=builddetails">Build Writing Details</a></li>
+ <li class="item"><a href="/admin/build/build?id=writingarchives">Build Writing Archives</a></li>
+ <li class="item"><a href="/admin/build/build?id=homepage">Build Homepage</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=buildrss">Build RSS</a></li>
+ <li class="item"><a href="/admin/build/build?id=range">Build Range</a></li>
+ <li class="item"><a href="/admin/build/build?id=guide">Build Guide</a></li>
+ <li class="item"><a href="/admin/build/build?id=pages">Build Pages</a></li>
+ <li class="item"><a href="/admin/build/build?id=discursivepages">Build Discursive Pages</a></li>
+ <li class="item"><a href="/admin/build/build?id=fieldnotes">Build FieldNotes</a></li>
+ <li class="item"><a href="/admin/build/build?id=essays">Build Essays</a></li>
+ <li class="item"><a href="/admin/build/build?id=buildbooks">Build Books</a></li>
+ <li class="item"><a href="/admin/build/build?id=buildsightings">Build Dialogues</a></li>
+ <li class="item"><a href="/admin/build/build?id=pubs">Build Publications</a></li>
+ <li class="item"><a href="/admin/build/build?id=resume">Build Resume</a></li>
+ <li class="item"><a href="/admin/build/build?id=src">Build src</a></li>
+ <li class="item"><a href="/admin/build/build?id=srcrss">Build src RSS</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
diff --git a/templates/admin/ccg_notes/change_form.html b/templates/admin/ccg_notes/change_form.html
new file mode 100644
index 0000000..a240f90
--- /dev/null
+++ b/templates/admin/ccg_notes/change_form.html
@@ -0,0 +1,152 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls admin_static admin_modify %}
+
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
+{{ media }}
+<script>
+if (!$) {
+ $ = django.jQuery;
+}
+$(function(){
+ $('#id_body_markdown').each(function(){
+ $(this).after('<iframe frameborder="0" style="border: #dddddd 1px solid;margin-left: 20px;width:330px; height:340px;" src="/luximages/insert/?textarea='+this.id+'"></iframe>');
+ });
+ $('#id_images').css('width', '500px').css('height', '400px');
+ $('#id_images option').each(function(){
+ $(this).attr('style', 'background: url('+$(this).text().split("qq")[1]+') no-repeat; background-size: 120px 80px; height: 80px; padding-left: 125px; line-height: 80px; margin-bottom: 4px; padding-bottom: 5px;border-bottom: #eee 1px solid;');
+ $(this).html($(this).text().split("qq")[0] + ' &ndash; <a href="/admin/photos/luximage/'+ $(this).text().split("qq")[2]+'/change/">edit</a>')
+ });
+});
+</script>
+
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+
+{% block coltype %}colM{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
+
+{% if not is_popup %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
+&rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+&rsaquo; {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endblock %}
+{% endif %}
+
+{% block content %}
+ <a class="btn" onclick="geoFindMe();" href="javascript:void(0);" class="historylink">Get Location</a>
+<div id="content-main">
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+ <ul class="object-tools">
+ {% block object-tools-items %}
+
+ <li>
+ <a onclick="geoFindMe();" href="javascript:void(0);" class="historylink">Get Location</a>
+ </li>
+ <li>
+ <a href="{% url opts|admin_urlname:'history' original.pk|admin_urlquote %}" class="historylink">{% trans "History" %}</a>
+ </li>
+ {% if has_absolute_url %}
+ <li>
+ <a href="{% url 'admin:view_on_site' content_type_id original.pk %}" class="viewsitelink">{% trans "View on site" %}</a>
+ </li>
+ {% endif %}
+ <li>
+ {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
+ <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a>
+ </li>
+ {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %}
+ {% endblock %}
+ </ul>
+{% endif %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
+{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
+{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
+{% if errors %}
+ <p class="errornote">
+ {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+ </p>
+ {{ adminform.form.non_field_errors }}
+{% endif %}
+
+{% block field_sets %}
+{% for fieldset in adminform %}
+ {% include "admin/includes/fieldset.html" %}
+{% endfor %}
+{% endblock %}
+
+{% block after_field_sets %}{% endblock %}
+
+{% block inline_field_sets %}
+{% for inline_admin_formset in inline_admin_formsets %}
+ {% include inline_admin_formset.opts.template %}
+{% endfor %}
+{% endblock %}
+
+{% block after_related_objects %}{% endblock %}
+
+{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
+
+{% block admin_change_form_document_ready %}
+ <script type="text/javascript">
+ (function($) {
+ $(document).ready(function() {
+ $('.add-another').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:add-another-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showAddAnotherPopup(this);
+ }
+ });
+ $('.related-lookup').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:lookup-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectLookupPopup(this);
+ }
+ });
+ $('body').on('click', '.related-widget-wrapper-link', function(e) {
+ e.preventDefault();
+ if (this.href) {
+ var event = $.Event('django:show-related', {href: this.href});
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectPopup(this);
+ }
+ }
+ });
+ $('body').on('change', '.related-widget-wrapper select', function(e) {
+ var event = $.Event('django:update-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ updateRelatedObjectLinks(this);
+ }
+ });
+ $('.related-widget-wrapper select').trigger('change');
+
+ {% if adminform and add %}
+ $('form#{{ opts.model_name }}_form :input:visible:enabled:first').focus()
+ {% endif %}
+ });
+ })(django.jQuery);
+ </script>
+{% endblock %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
diff --git a/templates/admin/income/monthly.html b/templates/admin/income/monthly.html
new file mode 100644
index 0000000..920d074
--- /dev/null
+++ b/templates/admin/income/monthly.html
@@ -0,0 +1,57 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls admin_static %}
+
+{% block breadcrumbs %}
+ <div class="breadcrumbs">
+ <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+ &rsaquo; <a href="/admin/income/">Income</a>
+ &rsaquo; <a href="/admin/income/invoice/">Invoices</a>
+ &rsaquo; <a href="/admin/income/invoice/{{object.id}}/change/">{{object.title}}</a>
+ </div>
+{% endblock %}
+{% block content %}
+
+<h1>{% trans "EDR Invoice for the month of" %} {{object.title}}</h1>
+
+
+<div style="float: left; width: 45%">
+<div class="results">
+<table id="result_list">
+<thead>
+<tr>
+
+<th scope="col" class="sortable column-title">
+ <div class="text"><a href="?o=1">Date</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Time Start</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Time Finish</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Total</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Work Done</a></div>
+ <div class="clear"></div>
+</th>
+</tr>
+</thead>
+<tbody>
+
+ {% for object in object_list %}
+ <tr class="{% cycle 'row1' 'row2' %}"><th class="field-title"><a href="/admin/income/invoiceitem/{{object.id}}/change/">{{object.time_start|date:"M d"}}</a></th><td class="field-status">{{object.time_start|date:"h:i"}}</td><td class="field-payment_status">{{object.time_end|date:"h:i"}}</td><td class="field-pub_date nowrap">{{object.total}}-{{object.rounded_total}}</td><td class="field-payment_status">{{object.work_done}}</td></tr>
+{% endfor %}
+<tr class="row2"><th class="field-title">&nbsp;</th><td class="field-status"></td><td class="field-payment_status"></td><td class="field-pub_date nowrap"></td></tr> <tr class="row2"><th class="field-title">Total Hours:</th><td class="field-status">{{total_hours}}</td><td class="field-payment_status"></td><td class="field-pub_date nowrap"></td></tr>
+<tr class="row2"><th class="field-title">Total Billed:</th><td class="field-status">${{total_billed}}</td><td class="field-payment_status"></td><td class="field-pub_date nowrap"></td></tr>
+</tbody>
+</table>
+</div>
+<p style="margin: 2rem 0; background: #79aec8; width: 120px; padding: 1rem;"><a style="color:white !important;" href="{% url 'download-invoice' object.slug %}">Generate Invoice</a></p>
+
+{% endblock %}
diff --git a/templates/admin/income_month.html b/templates/admin/income_month.html
new file mode 100644
index 0000000..125e435
--- /dev/null
+++ b/templates/admin/income_month.html
@@ -0,0 +1,159 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls admin_static %}
+
+{# Admin styling code largely taken from http://www.dmertl.com/blog/?p=116 #}
+
+{% block extrastyle %}
+ {{ block.super }}
+<script type="text/javascript" src="/admin/jsi18n/"></script>
+<script type="text/javascript" src="/static/admin/js/core.js"></script>
+<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script>
+<script type="text/javascript" src="/static/admin/js/jquery.js"></script>
+<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
+<script type="text/javascript" src="/static/admin/js/actions.js"></script>
+<script type="text/javascript" src="/static/admin/js/calendar.js"></script>
+<script type="text/javascript" src="/static/admin/js/admin/DateTimeShortcuts.js"></script>
+ <link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}"/>
+ <style>
+ .field-title {min-width: 200px;}
+ .results {margin-bottom: 4em;}
+ </style>
+{% endblock %}
+
+{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
+
+{% block breadcrumbs %}
+ <div class="breadcrumbs">
+ <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+ &rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ app_label|capfirst|escape }}</a>
+ &rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">
+ {{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+ &rsaquo; {% trans 'Income for' %} {{date|date:"F Y"}}
+ </div>
+{% endblock %}
+
+{% block content_title %}{% endblock %}
+
+{% block content %}
+
+<h1>{% trans "Income for the month of" %} {{date|date:"F Y"}}</h1>
+<h2>{% trans "Billed" %}</h2>
+
+
+<div style="float: left; width: 45%">
+<div class="results">
+<table id="result_list">
+<thead>
+<tr>
+
+<th scope="col" class="sortable column-title">
+ <div class="text"><a href="?o=1">Title</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Amount</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Source</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Date Invoiced</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Expected Pay Date</a></div>
+ <div class="clear"></div>
+</th>
+</tr>
+</thead>
+<tbody>
+
+{% for gig in billed %}
+
+<tr class="{% cycle 'row1' 'row2' %}"><th class="field-title"><a href="/admin/income/gig/{{gig.pk}}/">{{gig.title}}</a></th><td class="field-status">${{gig.payment}}</td><td class="field-payment_status">{{gig.publisher}}</td><td class="field-pub_date nowrap">{{gig.invoice_date|date:"M d, Y"}}</td><td class="field-payment_status">{{gig.get_pay_date|date:"M d, Y"}}</td></tr>
+{%endfor%}
+<tr class="row2"><th class="field-title">&nbsp;</th><td class="field-status"></td><td class="field-payment_status"></td><td class="field-pub_date nowrap"></td></tr>
+<tr class="row2"><th class="field-title">Total Billed:</th><td class="field-status">${{billed_total.total_payment}}</td><td class="field-payment_status"></td><td class="field-pub_date nowrap"></td></tr>
+</tbody>
+</table>
+</div>
+
+<h2>{% trans "Unbilled" %}</h2>
+<div class="results">
+<table id="result_list_2">
+<thead>
+<tr>
+
+<th scope="col" class="sortable column-title">
+ <div class="text"><a href="?o=1">Title</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Amount</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Source</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Article status</a></div>
+ <div class="clear"></div>
+</th>
+</tr>
+</thead>
+<tbody>
+
+{% for gig in unbilled %}
+
+<tr class="{% cycle 'row1' 'row2' %}"><th class="field-title"><a href="/admin/income/gig/{{gig.pk}}/">{{gig.title}}</a></th><td class="field-status">${{gig.payment}}</td><td class="field-payment_status">{{gig.publisher}}</td><td class="field-pub_date nowrap">{{gig.get_status_display}}</td></tr>
+{%endfor%}
+<tr class="row2"><th class="field-title">&nbsp;</th><td class="field-status"></td><td class="field-payment_status"></td><td class="field-pub_date nowrap"></td></tr>
+<tr class="row2"><th class="field-title">Total Billed:</th><td class="field-status">${{unbilled_total.total_payment}}</td><td class="field-payment_status"></td><td class="field-pub_date nowrap"></td></tr>
+</tbody>
+</table>
+</div>
+<h2>{% trans "Total Outstanding:" %} ${{total_outstanding.total_payment}}</h2>
+<h4 style="margin-top: 3em;">Also have these stories pitched, but not accepted</h4>
+<div class="results">
+<table id="result_list_2">
+<thead>
+<tr>
+
+<th scope="col" class="sortable column-title">
+ <div class="text"><a href="?o=1">Title</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Amount</a></div>
+ <div class="clear"></div>
+</th>
+<th scope="col" class="sortable column-status">
+ <div class="text"><a href="?o=5">Source</a></div>
+ <div class="clear"></div>
+</th>
+</tr>
+</thead>
+<tbody>
+
+{% for gig in pitched %}
+
+<tr class="{% cycle 'row1' 'row2' %}"><th class="field-title">{{gig.title}}</th><td class="field-status">${{gig.payment}}</td><td class="field-payment_status">{{gig.publisher}}</td></tr>
+{%endfor%}
+</tbody>
+</table>
+</div>
+
+<h2>{% trans "" %} {% with total_outstanding.total_payment|add:"-2000" as underover %}{% if underover > 0 %}${{underover}} more than budget{%else%}Need to generate another ${{underover|cut:"-"}} to cover expenses{%endif%}{%endwith%}</h2>
+
+</div>
+
+<div style="float:left; margin-left: 4em;">
+<h3>{% trans "Income by Month" %}</h3>
+<ul>{% for month in months %}
+<li><a href="?m={{month|date:"Y-m"|slugify}}">{{month|date:"F Y"}}</a></li>
+{%endfor%}</ul>
+</div>
+{% endblock %}
diff --git a/templates/admin/index.html b/templates/admin/index.html
new file mode 100644
index 0000000..78ada5b
--- /dev/null
+++ b/templates/admin/index.html
@@ -0,0 +1,174 @@
+{% extends "admin/base_site.html" %}
+{% load admin_list static i18n %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />
+<style>
+.module caption {
+ padding: 5px;
+}
+td, th {
+ font-size: 12px;
+ padding: 5px 8px;
+}
+.module {
+ margin-bottom: 20px;
+}
+.homepage-flex {
+ display: flex;
+ flex-direction: row;
+}
+.flex-right{
+ width: 84%;
+ margin-top: 5.5rem;
+}
+.flex-left {
+ width: 15%
+}
+.faux-btns {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+}
+.faux-btns li {
+ display: inline-block;
+ margin-right: .6rem;
+}
+.colMS {
+ margin-right: 0;
+}
+</style>
+{% endblock %}
+
+{% block coltype %}colMS{% endblock %}
+
+{% block bodyclass %}dashboard{% endblock %}
+
+{% block breadcrumbs %}{% endblock %}
+
+{% block content %}
+<div id="content-main">
+ <ul class="faux-btns">
+ <li><a href="https://awstats.luxagraf.net/cgi-bin/awstats.pl?config=luxagraf.net" target="_blank">lxf awstats</a></li>
+ <li><a href="https://stats.luxagraf.net/" target="_blank">lxf stats</a></li>
+ <li><a href="/admin/build/build?id=buildbooks">Build Books</a></li>
+ <li><a href="/admin/build/build?id=pubs">Build Publications</a></li>
+ <li><a href="/admin/build/build?id=resume">Build Resume</a></li>
+ </ul>
+{% if app_list %}
+ <div class="module">
+ <table>
+ <caption><a href="{{ app.app_url }}" class="section" title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">Frequently Used</a></caption>
+ <tr>
+ <th scope="row"><a href="/admin/django_comments/comment/">moderate comments</a></th>
+ <td>&nbsp;</td>
+ <td><a href="/admin/build/build?id=builddetails">Build JrnlDetails</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/posts/post/">posts</a></th>
+ <td><a href="/admin/posts/post/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=writingarchives">Build JrnlArc</a></td>
+ </tr>
+ <th scope="row"><a href="/admin/media/luximage/">images</a></th>
+ <td><a href="/admin/media/luximage/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=homepage">Build Homepage</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/lttr/newslettermailing/">newsletter mailings</a></th>
+ <td><a href="/admin/lttr/newslettermailing/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=sitemap">Build Sitemap</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/sightings/sighting/">sightings</a></th>
+ <td><a href="/admin/sightings/sighting/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=buildrss">Build Jrnl RSS</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/locations/luxcheckin/">check ins</a></th>
+ <td><a href="/admin/locations/checkin/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=range">Build Range</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/locations/location/">locations</a></th>
+ <td><a href="/admin/locations/location/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=friends">Build Friends</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/sightings/ap/">dialogue</a></th>
+ <td><a href="/admin/sightings/ap/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=src">Build src</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/locations/campsite/">campsite</a></th>
+ <td><a href="/admin/locations/campsite/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=pages">Build Pages</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/pages/homepage/1/change/">homepage</a></th>
+ <td><a href="/admin/locations/homepage/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=essays">Build Essays</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/lttr/subscriber/">subscribers</a></th>
+ <td><a href="/admin/lttr/subscriber/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=buildsightings">Build Dialogues</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/pages/page/">pages</a></th>
+ <td><a href="/admin/pages/page/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=fieldnotes">Build FieldNotes</a></td>
+ </tr>
+ <tr>
+ <th scope="row"><a href="/admin/links/link/">link</a></th>
+ <td><a href="/admin/links/link/add/" class="addlink">Add</a></td>
+ <td><a href="/admin/build/build?id=discursivepages">Build Discursive Pages</a></td>
+ </tr>
+ </table>
+ </div>
+ {% for app in app_list %}
+ <div class="module">
+ <table>
+ <caption>
+ <a href="{{ app.app_url }}" class="section" title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">
+ {% blocktrans with name=app.name %}{{ name }}{% endblocktrans %}
+ </a>
+ </caption>
+ {% for model in app.models %}
+ <tr>
+ {% if model.admin_url %}
+ <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
+ {% else %}
+ <th scope="row">{{ model.name }}</th>
+ {% endif %}
+
+ {% if model.add_url %}
+ <td><a href="{{ model.add_url }}" class="addlink">{% trans 'Add' %}</a></td>
+ {% else %}
+ <td>&nbsp;</td>
+ {% endif %}
+
+ {% if model.admin_url %}
+ <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
+ {% else %}
+ <td>&nbsp;</td>
+ {% endif %}
+ </tr>
+ {% if model.name == "Gigs"%}
+ <tr> <th scope="row"><a href="{{ model.admin_url }}monthly/">Income for month</a></th></tr>
+ {% endif %}
+ {% endfor %}
+ </table>
+ </div>
+ {% endfor %}
+{% else %}
+ <p>{% trans "You don't have permission to edit anything." %}</p>
+{% endif %}
+</div>
+{% endblock %}
+
+{% block sidebar %}
+{% endblock %}
+{% block adminembed %}
+<div class="flex-right">
+ <!--<iframe style="border:none;width:98%;height: 40%" src="https://awstats.luxagraf.net/cgi-bin/awstats.pl?config=luxagraf.net&framename=mainright"></iframe>-->
+</div>
+{% endblock %}
diff --git a/templates/admin/insert_images.html b/templates/admin/insert_images.html
new file mode 100644
index 0000000..feaa88f
--- /dev/null
+++ b/templates/admin/insert_images.html
@@ -0,0 +1,127 @@
+{% load get_image_by_size %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<head>
+<style>
+.item-wrapper {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 6px;
+ font-family: sans-serif;
+ font-size: 11px;
+ padding: 6px 0 4px;
+ border-top: #ccc 1px solid;
+}
+.item { margin: 0;}
+.item img { margin: 0 0 4px 0;}
+figure {
+ max-width: 180px;
+}
+.actions {
+ list-style-type: none;
+ margin: 0 0 0 10px;
+ padding: 0;
+}
+.actions li {
+ margin: 3px 0;
+}
+.actions a {
+ color: #666;
+}
+</style>
+</head>
+<body>
+ <input type="button" value="Refresh" onClick="window.location.reload()">
+ <button id="add_id_image" onClick="window.parent.open('/admin/media/luximage/add/?_to_field=id&amp;_popup=1')">Upload Image
+ <img src="/static/admin/img/icon-addlink.svg" alt="Add">
+ </button>
+ <div class="up-wrapper">{% for object in object_list %}
+ <div class="item-wrapper images">
+ {% if object.get_type != "Audio" %}
+ <figure class="item" >
+ <img src="{% if object.get_type == "LuxImage" %}{% get_image_by_size object 'tn' %}{%else%}{{object.video_poster.url}}" style="max-width: 150px{%endif%}" />
+ <figcaption>{{object.id}} {% if object.caption %}&ndash; {{object.caption}}{%endif%}</figcaption>
+ </figure>
+ <ul class="actions">{%if object.get_type == "LuxVideo" %}
+ <li><a data-is-video="true" data-video-mp4="{{object.video_mp4.url}}" data-video-webm="{{object.video_webm.url}}" data-id="{{object.id}}" data-class="vid" data-poster="{{object.video_poster.url}}" data-ytlink="{{object.youtube_url}}" onclick="insertImage(this);return false;" class="insert" href="#">Insert video</a>{%else%}{% get_image_by_size object 'admin_insert' as tn %}
+ <li><a data-src="{{tn}}" data-id="{{object.id}}" data-class="picwide" onclick="insertImage(this);return false;" href="#" >full width</a></li>
+ <li><a data-src="{{tn}}" data-id="{{object.id}}" data-class="picwide" data-caption="true" onclick="insertImage(this);return false;" href="#">full width cap</a></li>
+ <li><a data-src="{{tn}}" data-id="{{object.id}}" data-class="cluster pic66" onclick="insertImage(this);return false;" href="#">cluster</a></li>
+ <li><a data-src="{{tn}}" data-id="{{object.id}}" data-class="picfull" onclick="insertImage(this);return false;" href="#">column width</a></li>
+ <li><a data-src="{{tn}}" data-id="{{object.id}}" data-class="picfull" data-caption="true" onclick="insertImage(this);return false;" href="#">column width cap</a></li>
+ <li><a onclick='openInNewTab("/admin/medij/luximage/{{object.pk}}/change/");' href="#">Edit Image</a></li>{%endif%}
+ </ul>
+ {% else %}
+ <figure class="item" >
+ <img src="/media/img/audio_icon.png" style="max-width: 50px" />
+ </figure>
+ <ul class="actions">
+ <li><a data-is-audio="true" data-mp3="{{object.mp3.url}}" data-ogg="{{object.ogg.url}}" data-id="{{object.id}}" data-class="audio" onclick="insertImage(this);return false;" class="insert" href="#">Insert audio</a>
+ <li><a onclick='openInNewTab("/admin/recordings/audio/{{object.pk}}/change/");' href="#">Edit Recording</a></li>
+ </ul>
+ {% endif %}
+ </div>
+{% endfor %}
+</div>
+
+<!-- "next page" action -->
+<a class="nextPage browse right"></a>
+<script>
+function buildVideo(video_mp4, video_webm, id, c, poster, ytlink) {
+ html = '<div class="self-embed-container">\n\t<video poster="'+poster+'" controls="true" loop="false" preload="auto" id="'+id+'" class="vidauto';
+ if (c) {
+ html += c+'"';
+ } else {
+ html += '"';
+ }
+ html += '>\n\t\t<source src="'+video_webm+'" type="video/webm">\n';
+ html += '\t\t<source src="'+video_mp4+'" type="video/mp4">\n';
+ html += '\t\tYour browser does not support video playback via HTML5.\n\t</video>\n';
+ html += '\t<a class="figcaption" href="'+ytlink+'">Watch on YouTube</a>\n</div>';
+ return html;
+}
+function buildImage(image_url, id, c, caption) {
+ html = '<img src="'+image_url+'" id="image-'+id+'" class="';
+ if (c) {
+ html += c;
+ }
+ if (caption) {
+ html += ' caption" />';
+ }
+ else {
+ html += '" />';
+ }
+ return html;
+}
+function buildAudio(audio_mp3, audio_ogg) {
+ html = '<audio controls="" preload="auto">\n\t<source src="'+audio_mp3+'">\n\t'
+ html += '<source src="'+audio_ogg+'">\n\t'
+ html += 'Sorry, your browser does not support audio in HTML\n</audio>'
+ return html;
+}
+function openInNewTab(url) {
+ var win = window.open(url, '_blank');
+ win.focus();
+ return false;
+}
+function insertImage(item) {
+ if (item.dataset.isVideo) {
+ var code = buildVideo(item.dataset.videoMp4, item.dataset.videoWebm, item.dataset.id, item.dataset.class, item.dataset.poster, item.dataset.ytlink);
+ } else if (item.dataset.isAudio) {
+ var code = buildAudio(item.dataset.mp3, item.dataset.ogg);
+ } else {
+ var code = buildImage(item.dataset.src, item.dataset.id, item.dataset.class, item.dataset.caption);
+ }
+ var el = parent.document.getElementById('{{textarea_id}}');
+ var start = el.selectionStart;
+ var end = el.selectionEnd;
+ var text = el.value;
+ var before = text.substring(0, start);
+ var after = text.substring(end, text.length);
+ el.value = (before + code + after);
+ el.selectionStart = el.selectionEnd = start + code.length;
+ el.focus();
+}
+</script>
+</body>
+</html>
diff --git a/templates/admin/insert_products.html b/templates/admin/insert_products.html
new file mode 100644
index 0000000..b38389e
--- /dev/null
+++ b/templates/admin/insert_products.html
@@ -0,0 +1,82 @@
+{% load get_image_by_size %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<head>
+<style>
+.item-wrapper {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 6px;
+ font-family: sans-serif;
+ font-size: 11px;
+ padding: 6px 0 4px;
+ border-top: #ccc 1px solid;
+}
+.item { }
+.item img { margin: 0 0 4px 0;}
+h5 {
+ max-width: 180px;
+ font-size: 18px;
+ line-height: 22px;
+ margin: 12px;
+}
+.actions {
+ list-style-type: none;
+ margin: 0 0 0 10px;
+ padding: 0;
+}
+.actions li {
+ margin: 3px 0;
+}
+.actions a {
+ color: #666;
+}
+</style>
+<script>
+function buildImage(id, prod_name) {
+ html = '<div id="product-'+id+'">'+prod_name+'</div>';
+ return html;
+}
+function openInNewTab(url) {
+ var win = window.open(url, '_blank');
+ win.focus();
+ return false;
+}
+</script>
+</head>
+<body>
+ <input type="button" value="Refresh" onClick="window.location.reload()">
+ <button id="add_id_image" onClick="window.parent.open('/admin/products/product/add/?_to_field=id&amp;_popup=1')">Add Product
+ <img src="/static/admin/img/icon-addlink.svg" alt="Add">
+ </button>
+ <div class="up-wrapper">{% for object in object_list %}
+ <div class="item-wrapper images">
+ <h5 class="item" >
+ {{object.get_full_name}}
+ </h5>
+ <ul class="actions">
+ <li><a data-id="{{object.id}}" data-name="{{object.get_full_name}}" onclick="insertProduct(this);return false;" href="#" >Insert Product</a></li>
+ <li><a onclick='openInNewTab("/admin/photos/luximage/{{object.pk}}/change/");' href="#">Edit Image</a></li>
+ </ul>
+ </div>
+{% endfor %}
+</div>
+
+<!-- "next page" action -->
+<a class="nextPage browse right"></a>
+<script>
+function insertProduct(item) {
+ var code = buildImage(item.dataset.id, item.dataset.name);
+ var el = parent.document.getElementById('{{textarea_id}}');
+ var start = el.selectionStart;
+ var end = el.selectionEnd;
+ var text = el.value;
+ var before = text.substring(0, start);
+ var after = text.substring(end, text.length);
+ el.value = (before + code + after);
+ el.selectionStart = el.selectionEnd = start + code.length;
+ el.focus();
+}
+</script>
+</body>
+</html>
diff --git a/templates/admin/links/link/change_form.html b/templates/admin/links/link/change_form.html
new file mode 100755
index 0000000..5a5753a
--- /dev/null
+++ b/templates/admin/links/link/change_form.html
@@ -0,0 +1,138 @@
+{% extends "admin/base_site.html" %}
+{% load get_image_by_size %}
+{% load i18n admin_urls static admin_modify %}
+
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
+{{ media }}
+<script type="text/javascript">
+function GetURLParameter(sParam){
+ var sPageURL = window.location.search.substring(1);
+ var sURLVariables = sPageURL.split('&');
+ for (var i = 0; i < sURLVariables.length; i++) {
+ var sParameterName = sURLVariables[i].split('=');
+ if (sParameterName[0] == sParam) {
+ return sParameterName[1];
+ }
+ }
+};
+var title = GetURLParameter('title');
+var description = GetURLParameter('description');
+var url = GetURLParameter('url');
+</script>
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+
+{% block coltype %}colM{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
+
+{% if not is_popup %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
+&rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+&rsaquo; {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endblock %}
+{% endif %}
+
+{% block content %}<div id="content-main">
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+ <ul class="object-tools">
+ {% block object-tools-items %}
+ <li>
+ {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
+ <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a>
+ </li>
+ {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %}
+ {% endblock %}
+ </ul>
+{% endif %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
+{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
+{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
+{% if errors %}
+ <p class="errornote">
+ {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+ </p>
+ {{ adminform.form.non_field_errors }}
+{% endif %}
+
+{% block field_sets %}
+{% for fieldset in adminform %}
+ {% include "admin/includes/fieldset.html" %}
+{% endfor %}
+{% endblock %}
+
+{% block after_field_sets %}{% endblock %}
+
+{% block inline_field_sets %}
+{% for inline_admin_formset in inline_admin_formsets %}
+ {% include inline_admin_formset.opts.template %}
+{% endfor %}
+{% endblock %}
+
+{% block after_related_objects %}{% endblock %}
+
+{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
+
+{% block admin_change_form_document_ready %}
+ <script type="text/javascript">
+ (function($) {
+ $(document).ready(function() {
+ $('.add-another').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:add-another-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showAddAnotherPopup(this);
+ }
+ });
+ $('.related-lookup').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:lookup-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectLookupPopup(this);
+ }
+ });
+ $('body').on('click', '.related-widget-wrapper-link', function(e) {
+ e.preventDefault();
+ if (this.href) {
+ var event = $.Event('django:show-related', {href: this.href});
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectPopup(this);
+ }
+ }
+ });
+ $('body').on('change', '.related-widget-wrapper select', function(e) {
+ var event = $.Event('django:update-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ updateRelatedObjectLinks(this);
+ }
+ });
+ $('.related-widget-wrapper select').trigger('change');
+
+ {% if adminform and add %}
+ $('form#{{ opts.model_name }}_form :input:visible:enabled:first').focus()
+ {% endif %}
+ });
+ })(django.jQuery);
+ </script>
+{% endblock %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
diff --git a/templates/admin/message.html b/templates/admin/message.html
new file mode 100644
index 0000000..348b15d
--- /dev/null
+++ b/templates/admin/message.html
@@ -0,0 +1,20 @@
+{% extends 'admin/base_site.html' %}
+
+{% block content %}
+{{message}}... <span style="color:red;" id="done"></span>
+{% endblock %}
+
+{% block extrahead %}
+<script type="text/javascript">
+function delayer(){
+ console.log("function fired")
+ document.getElementById('done').innerHTML = 'done'
+ window.location = "/admin/"
+}
+
+document.addEventListener("DOMContentLoaded", function(event) {
+ window.setTimeout(delayer, 1000);
+});
+</script>
+{% endblock %}
+
diff --git a/templates/admin/pages/change_form.html b/templates/admin/pages/change_form.html
new file mode 100644
index 0000000..fcc9302
--- /dev/null
+++ b/templates/admin/pages/change_form.html
@@ -0,0 +1,141 @@
+{% extends "admin/base_site.html" %}
+{% load admin_list static i18n admin_urls admin_modify %}
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
+{{ media }}
+<script>
+if (!$) {
+ $ = django.jQuery;
+}
+</script>
+
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+
+{% block coltype %}colM{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
+
+{% if not is_popup %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
+&rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+&rsaquo; {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endblock %}
+{% endif %}
+
+{% block content %}
+ <a class="btn" onclick="geoFindMe();" href="javascript:void(0);" class="historylink">Get Location</a>
+<div id="content-main">
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+ <ul class="object-tools">
+ {% block object-tools-items %}
+
+ <li>
+ <a onclick="geoFindMe();" href="javascript:void(0);" class="historylink">Get Location</a>
+ </li>
+ <li>
+ <a href="{% url opts|admin_urlname:'history' original.pk|admin_urlquote %}" class="historylink">{% trans "History" %}</a>
+ </li>
+ {% if has_absolute_url %}
+ <li>
+ <a href="{% url 'admin:view_on_site' content_type_id original.pk %}" class="viewsitelink">{% trans "View on site" %}</a>
+ </li>
+ {% endif %}
+ <li>
+ {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
+ <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a>
+ </li>
+ {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %}
+ {% endblock %}
+ </ul>
+{% endif %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
+{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
+{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
+{% if errors %}
+ <p class="errornote">
+ {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+ </p>
+ {{ adminform.form.non_field_errors }}
+{% endif %}
+
+{% block field_sets %}
+{% for fieldset in adminform %}
+ {% include "admin/includes/fieldset.html" %}
+{% endfor %}
+{% endblock %}
+
+{% block after_field_sets %}{% endblock %}
+
+{% block inline_field_sets %}
+{% for inline_admin_formset in inline_admin_formsets %}
+ {% include inline_admin_formset.opts.template %}
+{% endfor %}
+{% endblock %}
+
+{% block after_related_objects %}{% endblock %}
+
+{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
+
+{% block admin_change_form_document_ready %}
+ <script type="text/javascript">
+ (function($) {
+ $(document).ready(function() {
+ $('.add-another').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:add-another-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showAddAnotherPopup(this);
+ }
+ });
+ $('.related-lookup').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:lookup-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectLookupPopup(this);
+ }
+ });
+ $('body').on('click', '.related-widget-wrapper-link', function(e) {
+ e.preventDefault();
+ if (this.href) {
+ var event = $.Event('django:show-related', {href: this.href});
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectPopup(this);
+ }
+ }
+ });
+ $('body').on('change', '.related-widget-wrapper select', function(e) {
+ var event = $.Event('django:update-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ updateRelatedObjectLinks(this);
+ }
+ });
+ $('.related-widget-wrapper select').trigger('change');
+
+ {% if adminform and add %}
+ $('form#{{ opts.model_name }}_form :input:visible:enabled:first').focus()
+ {% endif %}
+ });
+ })(django.jQuery);
+ </script>
+{% endblock %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
diff --git a/templates/admin/photos/luxgallery/change_form.html b/templates/admin/photos/luxgallery/change_form.html
new file mode 100644
index 0000000..1cdfde0
--- /dev/null
+++ b/templates/admin/photos/luxgallery/change_form.html
@@ -0,0 +1,135 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls admin_static admin_modify %}
+
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
+{{ media }}
+<script>
+if (!$) {
+ $ = django.jQuery;
+}
+$(function(){
+ $('#id_images').css('width', '500px').css('height', '400px');
+ $('#id_images option').each(function(){
+ $(this).attr('style', 'background: url('+$(this).text().split("qq")[1]+') no-repeat; background-size: 120px 80px; height: 80px; padding-left: 125px; line-height: 80px; margin-bottom: 4px; padding-bottom: 5px;border-bottom: #eee 1px solid;');
+ $(this).html($(this).text().split("qq")[0] + ' &ndash; <a href="/admin/media/luximage/'+ $(this).text().split("qq")[2]+'/change/">edit</a>')
+ });
+});
+</script>
+
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+
+{% block coltype %}colM{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
+
+{% if not is_popup %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
+&rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+&rsaquo; {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endblock %}
+{% endif %}
+
+{% block content %}<div id="content-main">
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+ <ul class="object-tools">
+ {% block object-tools-items %}
+ <li>
+ {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
+ <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a>
+ </li>
+ {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %}
+ {% endblock %}
+ </ul>
+{% endif %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
+{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
+{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
+{% if errors %}
+ <p class="errornote">
+ {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+ </p>
+ {{ adminform.form.non_field_errors }}
+{% endif %}
+
+{% block field_sets %}
+{% for fieldset in adminform %}
+ {% include "admin/includes/fieldset.html" %}
+{% endfor %}
+{% endblock %}
+
+{% block after_field_sets %}{% endblock %}
+
+{% block inline_field_sets %}
+{% for inline_admin_formset in inline_admin_formsets %}
+ {% include inline_admin_formset.opts.template %}
+{% endfor %}
+{% endblock %}
+
+{% block after_related_objects %}{% endblock %}
+
+{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
+
+{% block admin_change_form_document_ready %}
+ <script type="text/javascript">
+ (function($) {
+ $(document).ready(function() {
+ $('.add-another').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:add-another-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showAddAnotherPopup(this);
+ }
+ });
+ $('.related-lookup').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:lookup-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectLookupPopup(this);
+ }
+ });
+ $('body').on('click', '.related-widget-wrapper-link', function(e) {
+ e.preventDefault();
+ if (this.href) {
+ var event = $.Event('django:show-related', {href: this.href});
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectPopup(this);
+ }
+ }
+ });
+ $('body').on('change', '.related-widget-wrapper select', function(e) {
+ var event = $.Event('django:update-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ updateRelatedObjectLinks(this);
+ }
+ });
+ $('.related-widget-wrapper select').trigger('change');
+
+ {% if adminform and add %}
+ $('form#{{ opts.model_name }}_form :input:visible:enabled:first').focus()
+ {% endif %}
+ });
+ })(django.jQuery);
+ </script>
+{% endblock %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
diff --git a/templates/admin/save_link.html b/templates/admin/save_link.html
new file mode 100644
index 0000000..56047cd
--- /dev/null
+++ b/templates/admin/save_link.html
@@ -0,0 +1,123 @@
+{% extends "admin/base_site.html" %}
+{% load get_image_by_size %}
+{% load i18n admin_urls admin_static admin_modify %}
+
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
+{{ media }}
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+
+{% block coltype %}colM{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
+
+{% if not is_popup %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
+&rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+&rsaquo; {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endblock %}
+{% endif %}
+
+{% block content %}<div id="content-main">
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+ <ul class="object-tools">
+ {% block object-tools-items %}
+ <li>
+ {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
+ <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a>
+ </li>
+ {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %}
+ {% endblock %}
+ </ul>
+{% endif %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
+{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
+{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
+{% if errors %}
+ <p class="errornote">
+ {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+ </p>
+ {{ adminform.form.non_field_errors }}
+{% endif %}
+
+{% block field_sets %}
+{% for fieldset in adminform %}
+ {% include "admin/includes/fieldset.html" %}
+{% endfor %}
+{% endblock %}
+
+{% block after_field_sets %}{% endblock %}
+
+{% block inline_field_sets %}
+{% for inline_admin_formset in inline_admin_formsets %}
+ {% include inline_admin_formset.opts.template %}
+{% endfor %}
+{% endblock %}
+
+{% block after_related_objects %}{% endblock %}
+
+{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
+
+{% block admin_change_form_document_ready %}
+ <script type="text/javascript">
+ (function($) {
+ $(document).ready(function() {
+ $('.add-another').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:add-another-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showAddAnotherPopup(this);
+ }
+ });
+ $('.related-lookup').click(function(e) {
+ e.preventDefault();
+ var event = $.Event('django:lookup-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectLookupPopup(this);
+ }
+ });
+ $('body').on('click', '.related-widget-wrapper-link', function(e) {
+ e.preventDefault();
+ if (this.href) {
+ var event = $.Event('django:show-related', {href: this.href});
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ showRelatedObjectPopup(this);
+ }
+ }
+ });
+ $('body').on('change', '.related-widget-wrapper select', function(e) {
+ var event = $.Event('django:update-related');
+ $(this).trigger(event);
+ if (!event.isDefaultPrevented()) {
+ updateRelatedObjectLinks(this);
+ }
+ });
+ $('.related-widget-wrapper select').trigger('change');
+
+ {% if adminform and add %}
+ $('form#{{ opts.model_name }}_form :input:visible:enabled:first').focus()
+ {% endif %}
+ });
+ })(django.jQuery);
+ </script>
+{% endblock %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
diff --git a/templates/admin/upload_zip.html b/templates/admin/upload_zip.html
new file mode 100644
index 0000000..2a5345a
--- /dev/null
+++ b/templates/admin/upload_zip.html
@@ -0,0 +1,57 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls admin_static %}
+
+{# Admin styling code largely taken from http://www.dmertl.com/blog/?p=116 #}
+
+{% block extrastyle %}
+ {{ block.super }}
+<script type="text/javascript" src="/admin/jsi18n/"></script>
+<script type="text/javascript" src="/static/admin/js/core.js"></script>
+<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script>
+<script type="text/javascript" src="/static/admin/js/jquery.js"></script>
+<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
+<script type="text/javascript" src="/static/admin/js/actions.js"></script>
+<script type="text/javascript" src="/static/admin/js/calendar.js"></script>
+<script type="text/javascript" src="/static/admin/js/admin/DateTimeShortcuts.js"></script>
+ <link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}"/>
+{% endblock %}
+
+{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
+
+{% block breadcrumbs %}
+ <div class="breadcrumbs">
+ <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+ &rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ app_label|capfirst|escape }}</a>
+ &rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">
+ {{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+ &rsaquo; {% trans 'Upload' %}
+ </div>
+{% endblock %}
+
+{% block content_title %}{% endblock %}
+
+{% block content %}
+
+ <h1>{% trans "Upload a zip archive of photos" %}</h1>
+
+ {% if form.errors %}
+ <p class="errornote">
+ {% if form.errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+ </p>
+ {{ form.non_field_errors }}
+ {% endif %}
+
+ <form action="{% url 'admin:upload_zip' %}" method="post" id="zip_upload_form"
+ {% if form.is_multipart %}enctype="multipart/form-data"{% endif %}>
+ {% csrf_token %}
+ <div>
+ {% for fieldset in adminform %}
+ {% include "admin/includes/fieldset.html" %}
+ {% endfor %}
+ </div>
+ <div class="submit-row">
+ <input type="submit" value="{% trans 'Upload' %}" class="default"/>
+ </div>
+ </form>
+
+{% endblock %}
diff --git a/templates/archives/birds.html b/templates/archives/birds.html
new file mode 100644
index 0000000..db7c860
--- /dev/null
+++ b/templates/archives/birds.html
@@ -0,0 +1,56 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load pagination_tags %}
+
+{% block pagetitle %}Luxagraf | Birds seen {% if region %}in {{region.name|title|smartypants|safe}}{%else%}by {{user}}{%endif%}{% if page != "1" %} -- Page {{page}}{%endif%}{% endblock %}
+{% block metadescription %}Birds seen {% if region %} in {{region.name|title|smartypants|safe}}{%else%}by {{user}}{%endif%} Page {{page}}{% endblock %}
+{%block bodyid%}id="birds"{%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>
+ {% if region %}{%if region.name == 'United States'%} <li><a href="/birds/" title="See all Journal Entries" itemprop="url"><span itemprop="title">Birds</span></a> &rarr;</li>
+ <li itemprop="title">the United States</li>{%else%}<li><a href="/jrnl/" title="See all Journal Entries" itemprop="url"><span>Birds</span></a> &rarr;</li>
+ <li>{{region.name|title|smartypants|safe}}</li>{%endif%}{%else%}<li>Birds</li>{%endif%}
+ </ul>
+ <main role="main" class="archive">{% autopaginate object_list 40 %}
+ <h1 class="hide">Birds seen {% if region %}in {%if region.name == 'United States'%}the United States{%else%}{{region.name|title|smartypants|safe}}{%endif%}{%else%} by {{user}}{%endif%}</h1> {% for object in object_list %}
+ <article class="{% cycle 'odd' 'even' %} {% cycle 'first' 'second' 'third' %}">
+ <div class="post--image">
+{% load get_image_by_size %}
+{% load get_image_width %}
+<figure>
+<a href="{{object.bird.get_absolute_url}}" title="{{object.bird}}">
+<img class="picfull" sizes="(max-width: 680px) 100vw, (min-width: 681) 680px" srcset="{% for size in object.image.sizes.all%}{% get_image_by_size object.image size.name %} {{size.width}}w{% if forloop.last%}"{%else%}, {%endif%}{%endfor%}
+ {% for size in object.image.sizes.all%}{%if forloop.first %} src="{% get_image_by_size object.image size.name %}"{%endif%}{%endfor%} alt="{{object.image.alt}} photographed by {% if object.image.photo_credit_source %}{{object.image.photo_credit_source}}{%else%}luxagraf{%endif%}" >
+</a>
+{% if object.image.photo_credit_source %}<figcaption>photo by <a href="{{object.image.photo_credit_url}}">{{object.image.photo_credit_source}}</a></figcaption>{%endif%}
+</figure>
+ </div>
+ <h3 class="post--title"><a href="{{object.bird.get_absolute_url}}" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.bird}}{%endif%}">{{object.bird|safe|smartypants|widont}}</a> (<span class="sci">{{object.bird.scientific_name}}</span>)</h3>
+ <time class="post--date" datetime="{{object.date|date:'c'}}">Seen: {{object.date|date:"F"}} <span>{{object.date|date:"j, Y"}}</span></time>
+ <p>
+ <span class="sighting location place post--location" itemscope itemtype="http://schema.org/Place">Loc:
+ {% if object.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, {{object.state.name}}, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, {{object.country.name}}</a>{%endif%}
+ <span style="display: none;" itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">
+ <data itemprop="latitude" class="p-latitude" value="{{object.latitude}}">{{object.latitude}}</data>
+ <data itemprop="longitude" class="p-longitude" value="{{object.longitude}}">{{object.longitude}}</data>
+ </span>
+ </span>
+ </p>
+ <div class="audio-figure">{% for recording in object.bird.recordings.all %}
+ <audio controls="controls">
+ <source src="/media/{{recording.audio}}" />
+ </audio>
+ <small>Audio recorded by {{recording.recorder}} on {{recording.pub_date|date:"F j, Y"}} in {{recording.location}}. <a href="{{recording.link}}">&copy; {{recording.copyright}}</a></small>
+ </div>{% endfor %}
+ </article> {% endfor %}
+ </main>
+ <nav class="pagination">
+ {% paginate %}
+ </nav>
+{% endblock %}
+
+
+
+{% block js %}<script src="/media/js/hyphenate.min.js" type="text/javascript"></script>{% endblock%}
diff --git a/templates/archives/essays.html b/templates/archives/essays.html
new file mode 100644
index 0000000..06de13e
--- /dev/null
+++ b/templates/archives/essays.html
@@ -0,0 +1,21 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load comments %}
+
+{% block pagetitle %}essay - archive{% endblock %}
+
+{% block metadescription %}luxagraf essays - thoughts things that aren't strictly travel related.{% 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>Essays</li>
+ </ul>
+ <main role="main" id="essay-archive" class="src-archive">
+ <h1>Essays</h1>
+ <h4 class="subhead">Stuff that isn't really travel related</h4>{% for object in object_list %}
+ <article class="h-entry hentry {% cycle 'odd' 'even' %} {% cycle 'first' 'second' 'third' %}" itemscope itemType="http://schema.org/Article">
+ <h2><a href="{{object.get_absolute_url}}">{{object.title|safe|smartypants|widont}}</a></h2>
+ <p>{{object.meta_description|safe|smartypants|widont}} <a href="{{object.get_absolute_url}}">Read&nbsp;more.</a></p>
+ </article>
+ {%endfor%}
+ </main>
+{%endblock%}
diff --git a/templates/archives/expenses.html b/templates/archives/expenses.html
new file mode 100644
index 0000000..0007270
--- /dev/null
+++ b/templates/archives/expenses.html
@@ -0,0 +1,26 @@
+{% extends 'base.html' %}
+{% load expense_total%}
+{% load typogrify_tags %}
+
+{% block pagetitle %}Luxagraf: Expenses{% endblock %}
+
+{% block metadescription %}Think is costs a lot to drive around North America in a vintage Dodge Travco? Well, judge for yourself, here's how much is costs us.{% endblock %}
+
+{% block primary %}
+ <main role="main">
+ <article class="post--article">
+ <header class="post--header">
+ <h1 class="p-name entry-title post--title">Trip Costs</h1>
+ </header>
+ <div id="article" class="post--body post--body--single expense-wrapper">
+ <p>When we were planning our trips the people who posted their finances were invaluably helpful for calculating how much we needed to make it work. It's also something many people don't like to talk about so expense breakdowns are sort of rare in the online travel world. In the spirit of (hopefully, maybe) inspiring someone else to get out there, here is a rough breakdown of our costs (sorry I didn't track expenses in much detail prior to the Travco trip).</p>
+ {% for object in object_list %}
+ <h2>{{object.name}}</h2>
+ <p>{{object.dek}} <a href="{{object.get_absolute_url}}">View Details &#8674;</a></p>
+ {%endfor%}
+ <h2>Around the world in 2010</h2>
+ <p>This trip cost us (two) roughly ~4k, including all airfare. That's horribly expense for 2 months of traveling and I would never do it again. But sometimes you have to spend some money to learn</p>
+ <h2>Around the world in 2005-06</h2>
+ <p>This trip cost me roughly ~10k, including all airfare. I was solo back then and could have probably spent about ~2k less without really cramping my style much, but a fair amount of the time was spent trying to drink myself into an early grave and alcohol is expensive. I don't know how those numbers translate to today's money, but I wouldn't hesitate to set out again with half that much.</p>
+
+{%endblock%}
diff --git a/templates/archives/figments.html b/templates/archives/figments.html
new file mode 100644
index 0000000..da7628e
--- /dev/null
+++ b/templates/archives/figments.html
@@ -0,0 +1,26 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{%block bodyid%}class="archive" id="figments-archive"{%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>{% if series %}
+ <li><a href="/figments/" title="Figments" itemprop="url"><span itemprop="title">Figments</span></a> &rarr; </li>
+ <li>{{topic}}</li>{%else%}
+ <li>Figments</li>{%endif%}
+ </ul>
+ <main role="main" id="figments-archive" class="fig-archive">
+ <div class="intro-narrow">
+ <h1>Figments of Imagination</h1>
+ <p>The term &#8220;fiction&#8221; makes me uncomfortable because it implies that there is a corresponding term &#8220;non-fiction&#8221;, which would mean &#8220;truth&#8221;, and I don't think such a thing exists. There is no absolute truth when it comes to recording the world around you. It is always your subjective observations that allow you to record impressions in words. So I call these stories &#8220;less true stories mostly made up&#8221; and hope for the best, where &#8220;the best&#8221; is that you enjoy them.</p>
+ </div>
+ <div class="archive-grid figments-grid"> {% for object in object_list %}
+ <article id="{{object.slug}}{{object.pk}}" class="h-entry hentry" itemscope itemType="http://schema.org/CreativeWork">
+ <h2 class="p-name entry-title post-title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url permalink">{{object.title|smartypants|safe}}</a></h2>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ <p class="hide p-category">Fiction</p>
+ <p class="p-summary entry-summary">{{object.dek|safe|smartypants|widont}} <a href="{{object.get_absolute_url}}">Read&nbsp;&#8674;</a></p>
+ </article>
+ {%endfor%}
+ </div>
+ </main>
+{% endblock %}
diff --git a/templates/archives/figments_series.html b/templates/archives/figments_series.html
new file mode 100644
index 0000000..2f4a921
--- /dev/null
+++ b/templates/archives/figments_series.html
@@ -0,0 +1,24 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+
+{% 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><a href="/figments/" title="Figments" itemprop="url"><span itemprop="title">Figments</span></a> &rarr; </li>
+ <li>Series</li>
+ </ul>
+ <main role="main" id="figments-archive" class="fig-archive">
+ <h1>Figments of Imagination</h1>
+ <p class="intro">I dislike the term &#8220;fiction&#8221; because it implies that there is a non-fiction and I categorically deny that such a thing can exist. So I call these stories &#8220;less true stories mostly made up&#8221; and hope for the best, where &#8220;the best&#8221; is that you enjoy them.</p>
+ <p class="intro">These are stories by series, where series is either a collection of related short stories or a novel/novella of some sort.</p>
+ {% for obj in object_list %}
+ <h3>{{obj.title|smartypants|safe}}:</h3>{%for object in obj.series.all%}
+ <article id="{{object.slug}}{{object.pk}}" class="h-entry hentry figment" itemscope itemType="http://schema.org/CreativeWork">
+ <h2 class="p-name entry-title post--title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url permalink">{{object.title|smartypants|safe}}</a></h2>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ <p class="hide p-category">Fiction</p>
+ <p class="p-summary entry-summary">{{object.dek|safe|smartypants|widont}} <a href="{{object.get_absolute_url}}">Read&nbsp;&#8674;</a></p>
+ </article>
+ {%endfor%}
+ {%endfor%}
+ </main>
+{% endblock %}
diff --git a/templates/archives/gallery_list.html b/templates/archives/gallery_list.html
new file mode 100644
index 0000000..91e04cb
--- /dev/null
+++ b/templates/archives/gallery_list.html
@@ -0,0 +1,56 @@
+{% extends 'base.html' %}
+{% load get_image_by_size %}
+{% load typogrify_tags %}
+{% load pagination_tags %}
+
+{% block pagetitle %}Luxagraf | {% if region %}Photo Galleries: Images from {{region.name|title|smartypants|safe}}{%else%}Photo Galleries: Images from Around the World {%endif%} Page {{page}}{% endblock %}
+{% block metadescription %}{% if region %}Photo Galleries from {{region.name|title|smartypants|safe}}{%else%}Photo Galleries: Images from Around the World {%endif%} Page {{page}}{% endblock %}
+
+{%block extrahead%}
+<style>
+ @media screen and (min-width: 38em){
+ {% autopaginate object_list 24 %} {% for object in object_list %}
+ {%if object.caption_style%}
+#image-{{forloop.counter}} .gallery-text {
+ {{object.caption_style}}
+}
+ {%endif%}
+ {%endfor%}
+</style>
+{%endblock%}
+
+{%block bodyid%}id="photo-archive"{%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>
+ {% if region %}{%if region.name == 'United States'%} <li><a href="/photos/" title="See all Photos" itemprop="url"><span itemprop="title">Photos</span></a> &rarr;</li>
+ <li>the United States</li>{%else%}<li><a href="/photos/" title="See all Photos" itemprop="url"><span itemprop="title">Photos</span></a> &rarr;</li> <li>{{region.name|title|smartypants|safe}}{%endif%}{%else%}<li>{% if is_private %}<a href="/photos/">Photos</a> &rarr;</li>{%else%}<li>Photos </li>{%endif%}{%endif%}
+ {% if is_private %}<li>Private</li>{%endif%}
+ </ul>
+ <main role="main">
+ <h1 class="hide">{% if region %}Photographs from {{region.name|title|smartypants|safe}}{%else%}Photographs from Around the World {%endif%}</h1>
+ {% autopaginate object_list 24 %}{% for object in object_list %}
+ <article id="image-{{forloop.counter}}" class="photo-gallery">
+ <a href="{{object.get_absolute_url}}" title="view images from {{ object.title }}">
+ <img sizes="(max-width: 1170px) 100vw"
+ {{object.thumb}}
+ srcset="{% for size in object.thumb.sizes.all %}{%spaceless%}
+ {% get_image_by_size object.thumb size.width %} {{size.width}}w{% if forloop.last%}"{%else%}, {%endif%}{%endspaceless%}{%endfor%}
+ {% for size in object.thumb.sizes.all %}{%spaceless%}{% if size.width > 720 and size.width < 2000 %}src="{% get_image_by_size object.thumb size.width %}"{%endif%}{%endspaceless%}{%endfor%} alt="{{object.title}}" {%if photo.is_portait %}class="v"{%endif%} ></a>
+ <div class="gallery-text">
+ <h4>{{object.title}}</h4>
+ <time class="dt-published published dt-updated post--date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time> &ndash;
+ <span class="p-location h-adr adr post--location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.location.state.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/photos/united-states/" title="all galleries from the United States">{{object.location.state.name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.location.state.country.slug}}/" title="travel writing from {{object.location.state.country.name}}">{{object.state.country.name}}</a>{%endif%}
+ <span style="display: none;" itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">
+ {%if object.latitude%}<data itemprop="latitude" class="p-latitude" value="{{object.latitude}}">{{object.latitude}}</data>{%endif%}
+ {%if object.longitude%}<data itemprop="longitude" class="p-longitude" value="{{object.longitude}}">{{object.longitude}}</data>{%endif%}
+ </span>
+ </span>
+ {%if object.description%}<p>{{object.description|safe|smartypants|widont}}</p>{%endif%}
+ </div>
+ </article>{% endfor %}
+ </main>
+ <nav class="pagination">{% paginate %}
+ </nav>
+{% endblock %}
diff --git a/templates/archives/guide.html b/templates/archives/guide.html
new file mode 100644
index 0000000..e6e3f97
--- /dev/null
+++ b/templates/archives/guide.html
@@ -0,0 +1,51 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load pagination_tags %}
+
+{% block pagetitle %}Luxagraf | {% if region %}Travel Guide {{region.name|title|smartypants|safe}}{%else%} Travel Guides, Tips, Tricks and Recommendations {%endif%} Page {{page}}{% endblock %}
+{% block metadescription %}{% if region %}A Travel Guide, Tips, Tricks and Recommendations for {{region.name|title|smartypants|safe}}{%else%}Travel Guides, Tips, Tricks and Recommendations {%endif%} Page {{page}}{% endblock %}
+{%block bodyid%}id="guide-archive" class="guide"{%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>
+ {% if region %}{%if region.name == 'United States'%} <li><a href="/guide/1/" title="See all Guides" itemprop="url"><span itemprop="title">Travel Guides</span></a> &rarr;</li>
+ <li itemprop="title">United States</li>{%else%}<li><a href="/guide/1/" title="See all Guides" itemprop="url"><span>Travel Guides</span></a> &rarr;</li>
+ <li>{{region.name|title|smartypants|safe}}</li>{%endif%}{%else%}<li>Travel Guides</li>{%endif%}
+ </ul>
+
+ <section class="intro">
+ <h1>Travel Guides</h1>
+ <h2>What I Know About Where I've Been</h2>
+ <div class="formatted">
+ <p>The essays on luxagraf rarely offer much travel advice. I don't often write about places I stay, where I eat, the gear I carry or even how to get from here to there. At the same time I always save business cards and write down addresses almost everywhere I go.
+ Until now I haven't really done anything with that information, save tell a few friends headed in similar directions. So I decided to created this, the <strong>travel guide</strong> section, so you can know what I know. I even busted out the video camera for a few of these. Just bear in mind that this is my experience, yours may be very different. That's okay.</p></div>
+ </section>
+
+
+ <section id="guides" class=""> {% autopaginate object_list 10 %} {% for object in object_list %}
+ <article id="guide-10{{object.id}}">
+ <div class="meta bl">
+ <div class="tags">Filed Under: <a href="{{object.get_absolute_url}}" title="{{object.title}}">General</a>, <a href="{{object.get_absolute_url}}" title="{{object.title}}">Gear</a></div>
+ <time pubdate class="hide" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"m/d/y"}}</time>
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}"><img src="{{object.get_thumbnail_url}}" alt="{{ object.title }}" width="150" class="{{object.image_width}}" height="98" claaa="{{object.image_height}}" class="guide-thumb" /></a>
+ </div>
+ <div class="guide-dek">
+ <h1><a href="{{object.get_absolute_url}}" title="{{object.title}}">{{object.title|smartypants|widont|safe}}</a></h1>
+ <p class="hyphenate">{{object.dek|safe}}</p>
+ </div>
+ </article> {% endfor %}
+ </section>
+ <div id="pagination">{% paginate %}
+ </div>
+{% endblock %}
+
+
+
+{% block js %}<script src="{{MEDIA_URL}}js/hyphenate.min.js" type="text/javascript"></script>{% endblock%}
+
+
+
+{% if object.location %}<p class="location" itemprop="geo" itemscope itemtype="http://data-vocabulary.org/​Geo">{% if object.country_name == "United States" %}{{object.location_name|smartypants|safe}}, <a href="/writing/united-states/1/" title="travel writing from the United States">{{object.state_name}}</a>{%else%}{{object.location_name|smartypants|safe}}, <a href="/writing/{{object.country_name|slugify}}/1/" title="travel writing from {{object.country_name}}">{{object.country_name}}</a>{%endif%}
+ <meta itemprop="latitude" content="{{object.latitude}}" />
+ <meta itemprop="longitude" content="{{object.longitude}}" /></p>{%endif%}
diff --git a/templates/archives/homepage-light.html b/templates/archives/homepage-light.html
new file mode 100644
index 0000000..2f0a130
--- /dev/null
+++ b/templates/archives/homepage-light.html
@@ -0,0 +1,98 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block sitename %}
+<head itemscope itemtype="http://schema.org/WebSite">
+ <title itemprop='name'>Luxagraf: thoughts on ecology, culture, travel, photography, walking and other ephemera</title>
+ <link rel="canonical" href="https://luxagraf.net/">{%endblock%}
+
+ {%block extrahead%}
+<style>
+@media screen and (min-width: 1440px) {
+ .banner .post-image img {
+ margin-top: {{homepage.image_offset_vertical}};
+ }
+}
+</style>
+{%endblock%}
+{%block bodyid%}id="home" class="archive"{%endblock%}
+
+{% block primary %}<div class="banner">{% with object=homepage.featured %}
+ <article class="h-entry hentry" itemscope itemType="http://schema.org/Article">
+ <figure class="post-image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}">{%with image=homepage.featured_image%}
+ <img class="u-photo" itemprop="image" sizes="(max-width: 960px) 100vw"
+ srcset="{{image.get_srcset}}"
+ src="{{image.get_src}}"
+ alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}">
+ </a>{%endwith%}
+ <figcaption>
+ <div class="hero-text-wrapper">
+ <h1 class="p-name entry-title post-title" itemprop="headline">{%if object.template_name == 1 or object.template_name == 3 %}{{object.title|smartypants|safe}}{%else%}{{object.title|smartypants|safe}}{%endif%}</h1>
+ <h2 class="post-subtitle">{% if object.subtitle %}{{object.subtitle|smartypants|safe}}{%else%}{{homepage.tag_line|safe|smartypants}}{%endif%}</h2>
+ <aside class="p-location h-adr adr post-location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ <div class="h-adr" itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">{% if object.location.country_name == "United States" %}<span class="p-locality locality" itemprop="addressLocality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.location.state_name|safe}}</a>, <span class="p-country-name" itemprop="addressCountry">U.S.</span>{%else%}<span class="p-region" itemprop="addressRegion">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.location.country_slug}}/" title="travel writing from {{object.location.country_name}}"><span itemprop="addressCountry">{{object.location.country_name|safe}}</span></a>{%endif%}</div>
+ </aside>
+ <time class="dt-published published dt-updated post-date" datetime="{{object.pub_date|date:'c'}}" itemprop="datePublished">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <span class="hide" itemprop="author" itemscope itemtype="http://schema.org/Person">by <a class="p-author h-card" href="/about"><span itemprop="name">Scott Gilbertson</span></a></span>
+ <a href="{{object.get_absolute_url}}" class="u-url btn" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">Read</a>
+ </div>
+ </figcaption>
+ </figure>
+ </article>{% endwith %}
+ </div>
+ <section class="bio-short">
+ <h2 class="homepage-section-header">About Luxagraf</h2>
+ <img src="/media/img/usa-resize.svg" alt="map of travels" class="homepage-map-img" />
+ <p>We’re a family of five living full time in a vintage 1969 Dodge Travco motorhome. We’ve been at it for three years now. People always ask: <a href="https://luxagraf.net/1969-dodge-travco-motorhome">What's it like for five people to live in a 26ft RV</a>? <a href="https://luxagraf.net/essay/why-a-vintage-rv">Why do we live this way</a>?</p>
+ <p>The short answer is simple: because we like it and we can. If you want more than a soundbite, <a href="/jrnl/">read through the journal</a>. If you like it, sign up for <a href="/newsletter/">the email list</a>, though I'm bad about using it. I'd <a href="/jrnl/feed.xml">subscribe to the RSS feed</a>, but that's just <a href="/about">me</a>. <!-- If you’re interested there’s a guide section with some <a href="/guides/">advice, tips and tricks for those who’d aspire to live full time in a van or RV</a> --></p>
+ </section>
+ <section class="recent-popular">
+ <div class="recent">
+ <h2 class="homepage-section-header">Recent</h2>
+ <div class="archive-grid">{% for object in object_list %}
+ <article class="h-entry hentry archive-card {% cycle 'odd' 'even' %} {% cycle 'first' 'second' 'third' %}" itemscope itemType="http://schema.org/Article">
+ <div class="post-image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}">{% if object.featured_image %}
+ {% include "lib/img_archive.html" with image=object.featured_image %}
+ {%else%}
+ <img src="{{object.get_image_url}}" alt="{{ object.title }}" class="u-photo post-image" itemprop="image" />{%endif%}</a>
+ </div>
+ <h3 class="p-name entry-title post-title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants|widont}}</a></h3>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ <time class="dt-published published dt-updated post-date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p class="post-summary">
+ <span class="p-location h-adr adr post-location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.location.country_name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.location.state_name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.location.country_slug}}/" title="travel writing from {{object.location.country_name}}">{{object.location.country_name}}</a>{%endif%}
+ </span>
+ </p>
+ </article> {% endfor %}
+ </div>
+ </div>
+ <div class="popular">
+ <h2 class="homepage-section-header">Popular</h2>
+ <div class="archive-grid">{% for object in homepage.popular.all %}
+ <article class="h-entry hentry archive-card {% cycle 'odd' 'even' %} {% cycle 'first' 'second' 'third' %}" itemscope itemType="http://schema.org/Article">
+ <div class="post-image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}">{% if object.featured_image %}
+ {% include "lib/img_archive.html" with image=object.featured_image %}
+ {%else%}
+ <img src="{{object.get_image_url}}" alt="{{ object.title }}" class="u-photo post-image" itemprop="image" />{%endif%}</a>
+ </div>
+ <h3 class="p-name entry-title post-title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants|widont}}</a></h3>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ <time class="dt-published published dt-updated post-date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p class="post-summary">
+ <span class="p-location h-adr adr post-location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.location.country_name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.location.state_name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.location.country.slug}}/" title="travel writing from {{object.location.country_name}}">{{object.location.country_name}}</a>{%endif%}
+ </span>
+ </p>
+ </article> {% endfor %}
+ </div>
+ </div>
+ </section>
+ <section>
+ <h5 class="homepage-next"><a href="/jrnl/">Browse the Archives</a></h5>
+ </section>
+{% endblock %}
+
+{% block js %}{% comment %} <script async src="/media/js/hyphenate.min.js" type="text/javascript"></script>{% endcomment%}{% endblock%}
diff --git a/templates/archives/homepage.html b/templates/archives/homepage.html
new file mode 100644
index 0000000..8640dad
--- /dev/null
+++ b/templates/archives/homepage.html
@@ -0,0 +1,90 @@
+{% extends 'base.html' %}
+{% load get_image_by_size %}
+{% load typogrify_tags %}
+{%block htmlclass%}class="black"{%endblock%}
+{% block sitename %}
+<head itemscope itemtype="http://schema.org/WebSite">
+ <title itemprop='name'>Luxagraf</title>
+ <link rel="canonical" href="https://luxagraf.net/" itemprop="url">{%endblock%}
+{%block bodyid%}id="home"{%endblock%}
+
+{% block primary %}<section class="banner">{% with object=homepage.featured %}
+ <article class="h-entry hentry" itemscope itemType="http://schema.org/Article">
+ <div class="post--image">Hello world
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}">{% with image=object.featured_image %}
+ <img class="u-photo post-image homepage--hero" itemprop="image" sizes="(max-width: 960px) 100vw" srcset="{% for size in image.sizes.all%}{% get_image_by_size image size %} {{size}}w{% if forloop.last%}"{%else%}, {%endif%}{%endfor%} {% for size in image.sizes.all%}{%if not forloop.first and not forloop.last%} src="{% get_image_by_size image size %}"{%endif%}{%endfor%} alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}">{%endwith%}
+ </a>
+ </div>
+ <div class="hero--wrapper">
+ <h2 class="p-name entry-title post--title main--header" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants}}</a></h2>
+ <p class="p-author author hide" itemprop="author">Scott Gilbertson</p>
+ <time class="dt-published published dt-updated post--date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p class="post--location main--location">
+ <span class="p-location h-adr adr" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.state.name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.country.slug}}/" title="travel writing from {{object.country.name}}">{{object.country.name}}</a>{%endif%}
+ <span style="display: none;" itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">
+ <data itemprop="latitude" class="p-latitude" value="{{object.latitude}}">{{object.latitude}}</data>
+ <data itemprop="longitude" class="p-longitude" value="{{object.longitude}}">{{object.longitude}}</data>
+ </span>
+ </span>
+ </p>
+ <p class="p-summary main--tag">
+ {{homepage.tag_line}}
+ </p>
+ <a href="{{object.get_absolute_url}}" class="u-url btn" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">Read</a>
+ </div>
+ </article>{% endwith %}
+ </section>
+ <div class="homepage--about homepage--section">
+ <h3 class="homepage--arc-header">About Luxagraf</h3>
+ <p>Luxagraf is my notebook. Something that, in an earlier age, I would have long ago lost in the backseat of a taxi. </p>
+ <p>Or something like that. It could just be a website. Except that I don&#8217;t do lists. And I&#8217;m not trying to make&nbsp;money off of it.</p><p>Whatever it is, whatever brought you here, I hope you enjoy it.</p>
+ </div>
+ <div class="homepage--section">
+ <section class="archive homepage--archives">
+ <h1 class="homepage--arc-header">Most Popular</h1>
+ {% for object in homepage.popular.all %}
+ <article class="h-entry hentry" itemscope itemType="http://schema.org/Article">
+ <div class="post--image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}"><img src="{{object.get_image_wide_url}}" alt="{{ object.title }}" class="u-photo post-image" itemprop="image" /></a>
+ </div>
+ <h2 class="p-name entry-title post--title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants|widont}}</a></h2>
+ <p class="p-author author hide" itemprop="author">Scott Gilbertson</p>
+ <time class="dt-published published dt-updated post--date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p class="post--location">
+ <span class="p-location h-adr adr" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.state.name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.country.slug}}/" title="travel writing from {{object.country.name}}">{{object.country.name}}</a>{%endif%}
+ <span style="display: none;" itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">
+ <data itemprop="latitude" class="p-latitude" value="{{object.latitude}}">{{object.latitude}}</data>
+ <data itemprop="longitude" class="p-longitude" value="{{object.longitude}}">{{object.longitude}}</data>
+ </span>
+ </span>
+ </p>
+ </article> {% endfor %}
+ <p><a href="/jrnl/" class="homepage--next">Read More</a></p>
+ </section>
+ <section class="homepage--bright archive">
+ <h1 class="homepage--arc-header">Most Recent</h1>
+ {% for object in recent %}{% if object.pk != homepage.featured.pk %}
+ <article class="h-entry hentry" itemscope itemType="http://schema.org/Article">
+ <div class="post--image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}"><img src="{{object.get_image_url}}" alt="{{ object.title }}" class="u-photo post-image" itemprop="image" /></a>
+ </div>
+ <h2 class="p-name entry-title post--title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants|widont}}</a></h2>
+ <p class="p-author author hide" itemprop="author">Scott Gilbertson</p>
+ <time class="dt-published published dt-updated post--date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p class="post--location">
+ <span class="p-location h-adr adr" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.state.name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.country.slug}}/" title="travel writing from {{object.country.name}}">{{object.country.name}}</a>{%endif%}
+ <span style="display: none;" itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">
+ <data itemprop="latitude" class="p-latitude" value="{{object.latitude}}">{{object.latitude}}</data>
+ <data itemprop="longitude" class="p-longitude" value="{{object.longitude}}">{{object.longitude}}</data>
+ </span>
+ </span>
+ </p>
+ </article> {%endif%}{% endfor %}
+ </section>
+ </div>
+{% endblock %}
+
+{% block js %}{% comment %} <script async src="/media/js/hyphenate.min.js" type="text/javascript"></script>{% endcomment%}{% endblock%}
diff --git a/templates/archives/life-list.html b/templates/archives/life-list.html
new file mode 100644
index 0000000..9b92725
--- /dev/null
+++ b/templates/archives/life-list.html
@@ -0,0 +1,27 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load pagination_tags %}
+
+{% block pagetitle %}Luxagraf | Birding Life List {% if region %}in {{region.name|title|smartypants|safe}}{%else%}by {{user}}{%endif%}{% if page != "1" %} -- Page {{page}}{%endif%}{% endblock %}
+{% block metadescription %}Briding Life List {% if region %} in {{region.name|title|smartypants|safe}}{%else%}by {{user}}{%endif%} Page {{page}}{% endblock %}
+{%block bodyid%}id="birds"{%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>Life List</li>
+ </ul>
+ <main role="main" class="archive">
+ <h1 class="hide">Brids Life List {% if region %}in {%if region.name == 'United States'%}the United States{%else%}{{region.name|title|smartypants|safe}}{%endif%}{%else%} by {{user}}{%endif%}</h1>
+ <div class="life-list">
+ <h4>Current Life List Total: {{object_list|length}}</h4>
+ <ul>{% for object in object_list %}
+ <li><a href="{{object.get_absolute_url}}">{{object.ap.common_name}}</a></li>
+ {%endfor%}</ul>
+ </div>
+ </main>
+{% endblock %}
+
+
+
+{% block js %}<script src="/media/js/hyphenate.min.js" type="text/javascript"></script>{% endblock%}
diff --git a/templates/archives/links.html b/templates/archives/links.html
new file mode 100644
index 0000000..9e1336f
--- /dev/null
+++ b/templates/archives/links.html
@@ -0,0 +1,29 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load pagination_tags %}
+{% block pagetitle %} Links | luxagraf {% endblock %}
+{% block metadescription %} {% endblock %}
+{%block bodyid%}class="links" id="links-archive"{%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>
+ {% if tag %}<li><a href="/links/" title="all links" itemprop="url"><span itemprop="title">Links</span></a> &rarr; </li><li>{{tag}}</li>{%else%}<li>Links</li>{% endif%}
+ </ul>
+ <main role="main">
+ <div class="tags">
+ <ul class="tag-list">{% for object in tags %}
+ <li><a href="/links/tag/{{object.slug}}">{{object.name}}</a></li>{%endfor%}
+ </ul>
+ </div>
+ {% autopaginate object_list 100 %}{% for object in object_list %}
+ <article>
+ <h3 class="link-title"><a href="{{object.get_absolute_url}}">{{object.title|smartypants|safe}}</a> <span><a href="{{object.url}}">&rarr;</a></h3>
+
+ </article>
+ {% endfor %}
+ </main>
+ <nav class="pagination">
+ {% paginate %}
+ </nav>
+{% endblock %}
diff --git a/templates/archives/map.html b/templates/archives/map.html
new file mode 100644
index 0000000..5a0797a
--- /dev/null
+++ b/templates/archives/map.html
@@ -0,0 +1,57 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load truncateletters %}
+{% load slugify_under %}
+{% block pagetitle %}Luxagraf | Map and Trips{% endblock %}
+{% block metadescription %}Browse luxagraf by map, see trip routes and discover essays and dispatches from around the world{% endblock %}
+
+{#==============================================
+Google Maps code
+==============================================#}
+{% block extrahead %}
+ <script src="/media/js/leaflet-master/leaflet-mod.js"></script>
+ <style>
+ #map-canvas img{ border: none;}
+ </style>
+{% endblock %}
+{%block bodyid%}id="map"{%endblock%}
+
+{% block primary %}<ul class="bl" id="breadcrumbs" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+ <li><a href="/" itemprop="url" title="luxagraf homepage"><span itemprop="title">Home</span></a> &rarr;</li>
+ <li>Map</li>
+ </ul>
+ <main role="main" class="map--wrapper">
+ <h1 class="hide">Browse luxagraf by map</h1>
+ <div id="map-canvas">
+ <div id="map-inner-canvas" style="width: 100%; height: 100%; border: none !important;"></div>
+ </div>
+
+ <div class="map-legend">
+ <h4>Trips</h4>
+ <ul>
+ {% for r in route_list %}{%for route in r %}
+ <li><a onclick="showRoute('{{route.template_var_name}}', {{route.zoom}}, '{{route.geometry.centroid.y}}','{{route.geometry.centroid.x}}');" href="#" title="show {{route.name}} on map">{{route.name}}</a></li>
+ {% endfor %}{% endfor %}
+ </ul>
+ <h4>Regions</h4>
+ <ul>
+ {%for region in region_list %}
+ <li><a href="#{{region.slug}}" onclick="focusCountry({{region.lat}}, {{region.lon}}, {{region.zoom_level}});" title="See all writing from {{region.name|title}}">{{region.name}}</a></li>
+ {% endfor %}
+ </ul>
+ <h4>Countries</h4>
+ <ul>
+ <li><a onclick="focusCountry(19.311143,2.460938,2);" href="#" title="view all countries">All</a></li>
+ {%for c in country_list %}
+ {% for country in c %}
+ <li><a href="#{{country.slug}}" onclick="focusCountry({{country.lat}}, {{country.lon}}, {{country.zoom_level}});" title="See all writing from {{country.name|title}}">{{country.name}}</a></li>
+ {% endfor %}
+ {% endfor %}
+ </ul>
+ </div>
+ {% endblock %}
+{% block js %}
+<!--<script type="text/javascript" src="/media/js/mainmap.js"></script>-->
+<script src="/media/js/mainmap.js"></script>
+{% endblock%}
+
diff --git a/templates/archives/map_data.html b/templates/archives/map_data.html
new file mode 100644
index 0000000..ef3a4c4
--- /dev/null
+++ b/templates/archives/map_data.html
@@ -0,0 +1,529 @@
+{% load typogrify_tags %}
+{% load truncateletters %}
+(function () {
+ 'use strict';
+
+ L.TileLayer.Provider = L.TileLayer.extend({
+ initialize: function (arg, options) {
+ var providers = L.TileLayer.Provider.providers;
+
+ var parts = arg.split('.');
+
+ var providerName = parts[0];
+ var variantName = parts[1];
+
+ if (!providers[providerName]) {
+ throw 'No such provider (' + providerName + ')';
+ }
+
+ var provider = {
+ url: providers[providerName].url,
+ options: providers[providerName].options
+ };
+
+ // overwrite values in provider from variant.
+ if (variantName && 'variants' in providers[providerName]) {
+ if (!(variantName in providers[providerName].variants)) {
+ throw 'No such variant of ' + providerName + ' (' + variantName + ')';
+ }
+ var variant = providers[providerName].variants[variantName];
+ var variantOptions;
+ if (typeof variant === 'string') {
+ variantOptions = {
+ variant: variant
+ };
+ } else {
+ variantOptions = variant.options;
+ }
+ provider = {
+ url: variant.url || provider.url,
+ options: L.Util.extend({}, provider.options, variantOptions)
+ };
+ } else if (typeof provider.url === 'function') {
+ provider.url = provider.url(parts.splice(1, parts.length - 1).join('.'));
+ }
+
+ // replace attribution placeholders with their values from toplevel provider attribution,
+ // recursively
+ var attributionReplacer = function (attr) {
+ if (attr.indexOf('{attribution.') === -1) {
+ return attr;
+ }
+ return attr.replace(/\{attribution.(\w*)\}/,
+ function (match, attributionName) {
+ return attributionReplacer(providers[attributionName].options.attribution);
+ }
+ );
+ };
+ provider.options.attribution = attributionReplacer(provider.options.attribution);
+
+ // Compute final options combining provider options with any user overrides
+ var layerOpts = L.Util.extend({}, provider.options, options);
+ L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
+ }
+ });
+
+ /**
+ * Definition of providers.
+ * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
+ */
+
+ //jshint maxlen:220
+ L.TileLayer.Provider.providers = {
+ OpenStreetMap: {
+ url: 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
+ options: {
+ attribution:
+ '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
+ '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'
+ },
+ variants: {
+ Mapnik: {},
+ BlackAndWhite: {
+ url: 'http://{s}.www.toolserver.org/tiles/bw-mapnik/{z}/{x}/{y}.png'
+ },
+ DE: {
+ url: 'http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png'
+ },
+ HOT: {
+ url: 'http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
+ options: {
+ attribution: '{attribution.OpenStreetMap}, Tiles courtesy of <a href="http://hot.openstreetmap.org/" target="_blank">Humanitarian OpenStreetMap Team</a>'
+ }
+ }
+ }
+ },
+ OpenSeaMap: {
+ url: 'http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
+ options: {
+ attribution: 'Map data: &copy; <a href="http://www.openseamap.org">OpenSeaMap</a> contributors'
+ }
+ },
+ Thunderforest: {
+ url: 'http://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png',
+ options: {
+ attribution:
+ '&copy; <a href="http://www.opencyclemap.org">OpenCycleMap</a>, {attribution.OpenStreetMap}',
+ variant: 'cycle'
+ },
+ variants: {
+ OpenCycleMap: 'cycle',
+ Transport: 'transport',
+ Landscape: 'landscape',
+ Outdoors: 'outdoors'
+ }
+ },
+ OpenMapSurfer: {
+ url: 'http://openmapsurfer.uni-hd.de/tiles/{variant}/x={x}&y={y}&z={z}',
+ options: {
+ minZoom: 0,
+ maxZoom: 20,
+ variant: 'roads',
+ attribution: 'Imagery from <a href="http://giscience.uni-hd.de/">GIScience Research Group @ University of Heidelberg</a> &mdash; Map data {attribution.OpenStreetMap}'
+ },
+ variants: {
+ Roads: 'roads',
+ AdminBounds: {
+ options: {
+ variant: 'adminb',
+ maxZoom: 19
+ }
+ },
+ Grayscale: {
+ options: {
+ variant: 'roadsg',
+ maxZoom: 19
+ }
+ }
+ }
+ },
+ MapQuestOpen: {
+ url: 'http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpeg',
+ options: {
+ attribution:
+ 'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a> &mdash; ' +
+ 'Map data {attribution.OpenStreetMap}',
+ subdomains: '1234'
+ },
+ variants: {
+ OSM: {},
+ Aerial: {
+ url: 'http://oatile{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg',
+ options: {
+ attribution:
+ 'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a> &mdash; ' +
+ 'Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency'
+ }
+ }
+ }
+ },
+ MapBox: {
+ url: function (id) {
+ return 'http://{s}.tiles.mapbox.com/v3/' + id + '/{z}/{x}/{y}.png';
+ },
+ options: {
+ attribution:
+ 'Imagery from <a href="http://mapbox.com/about/maps/">MapBox</a> &mdash; ' +
+ 'Map data {attribution.OpenStreetMap}',
+ subdomains: 'abcd'
+ }
+ },
+ Stamen: {
+ url: 'http://{s}.tile.stamen.com/{variant}/{z}/{x}/{y}.png',
+ options: {
+ attribution:
+ 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, ' +
+ '<a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; ' +
+ 'Map data {attribution.OpenStreetMap}',
+ subdomains: 'abcd',
+ minZoom: 0,
+ maxZoom: 20,
+ variant: 'toner'
+ },
+ variants: {
+ Toner: 'toner',
+ TonerBackground: 'toner-background',
+ TonerHybrid: 'toner-hybrid',
+ TonerLines: 'toner-lines',
+ TonerLabels: 'toner-labels',
+ TonerLite: 'toner-lite',
+ Terrain: {
+ options: {
+ variant: 'terrain',
+ minZoom: 4,
+ maxZoom: 18
+ }
+ },
+ TerrainBackground: {
+ options: {
+ variant: 'terrain-background',
+ minZoom: 4,
+ maxZoom: 18
+ }
+ },
+ Watercolor: {
+ options: {
+ variant: 'watercolor',
+ minZoom: 3,
+ maxZoom: 16
+ }
+ }
+ }
+ },
+ Esri: {
+ url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
+ options: {
+ variant: 'World_Street_Map',
+ attribution: 'Tiles &copy; Esri'
+ },
+ variants: {
+ WorldStreetMap: {
+ options: {
+ attribution:
+ '{attribution.Esri} &mdash; ' +
+ 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
+ }
+ },
+ DeLorme: {
+ options: {
+ variant: 'Specialty/DeLorme_World_Base_Map',
+ minZoom: 1,
+ maxZoom: 11,
+ attribution: '{attribution.Esri} &mdash; Copyright: &copy;2012 DeLorme'
+ }
+ },
+ WorldTopoMap: {
+ options: {
+ variant: 'World_Topo_Map',
+ attribution:
+ '{attribution.Esri} &mdash; ' +
+ 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
+ }
+ },
+ WorldImagery: {
+ options: {
+ variant: 'World_Imagery',
+ attribution:
+ '{attribution.Esri} &mdash; ' +
+ 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
+ }
+ },
+ WorldTerrain: {
+ options: {
+ variant: 'World_Terrain_Base',
+ maxZoom: 13,
+ attribution:
+ '{attribution.Esri} &mdash; ' +
+ 'Source: USGS, Esri, TANA, DeLorme, and NPS'
+ }
+ },
+ WorldShadedRelief: {
+ options: {
+ variant: 'World_Shaded_Relief',
+ maxZoom: 13,
+ attribution: '{attribution.Esri} &mdash; Source: Esri'
+ }
+ },
+ WorldPhysical: {
+ options: {
+ variant: 'World_Physical_Map',
+ maxZoom: 8,
+ attribution: '{attribution.Esri} &mdash; Source: US National Park Service'
+ }
+ },
+ OceanBasemap: {
+ options: {
+ variant: 'Ocean_Basemap',
+ maxZoom: 13,
+ attribution: '{attribution.Esri} &mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
+ }
+ },
+ NatGeoWorldMap: {
+ options: {
+ variant: 'NatGeo_World_Map',
+ maxZoom: 16,
+ attribution: '{attribution.Esri} &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
+ }
+ },
+ WorldGrayCanvas: {
+ options: {
+ variant: 'Canvas/World_Light_Gray_Base',
+ maxZoom: 16,
+ attribution: '{attribution.Esri} &mdash; Esri, DeLorme, NAVTEQ'
+ }
+ }
+ }
+ },
+ OpenWeatherMap: {
+ url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png',
+ options: {
+ attribution: 'Map data &copy; <a href="http://openweathermap.org">OpenWeatherMap</a>',
+ opacity: 0.5
+ },
+ variants: {
+ Clouds: 'clouds',
+ CloudsClassic: 'clouds_cls',
+ Precipitation: 'precipitation',
+ PrecipitationClassic: 'precipitation_cls',
+ Rain: 'rain',
+ RainClassic: 'rain_cls',
+ Pressure: 'pressure',
+ PressureContour: 'pressure_cntr',
+ Wind: 'wind',
+ Temperature: 'temp',
+ Snow: 'snow'
+ }
+ },
+ HERE: {
+ /*
+ * HERE maps, formerly Nokia maps.
+ * These basemaps are free, but you need an API key. Please sign up at
+ * http://developer.here.com/getting-started
+ *
+ * Note that the base urls contain '.cit' whichs is HERE's
+ * 'Customer Integration Testing' environment. Please remove for production
+ * envirionments.
+ */
+ url:
+ 'http://{s}.{base}.maps.cit.api.here.com/maptile/2.1/' +
+ 'maptile/{mapID}/{variant}/{z}/{x}/{y}/256/png8?' +
+ 'app_id={app_id}&app_code={app_code}',
+ options: {
+ attribution:
+ 'Map &copy; 1987-2014 <a href="http://developer.here.com">HERE</a>',
+ subdomains: '1234',
+ mapID: 'newest',
+ 'app_id': '<insert your app_id here>',
+ 'app_code': '<insert your app_code here>',
+ base: 'base',
+ variant: 'normal.day',
+ minZoom: 0,
+ maxZoom: 20
+ },
+ variants: {
+ normalDay: 'normal.day',
+ normalDayCustom: 'normal.day.custom',
+ normalDayGrey: 'normal.day.grey',
+ normalDayMobile: 'normal.day.mobile',
+ normalDayGreyMobile: 'normal.day.grey.mobile',
+ normalDayTransit: 'normal.day.transit',
+ normalDayTransitMobile: 'normal.day.transit.mobile',
+ normalNight: 'normal.night',
+ normalNightMobile: 'normal.night.mobile',
+ normalNightGrey: 'normal.night.grey',
+ normalNightGreyMobile: 'normal.night.grey.mobile',
+
+ carnavDayGrey: 'carnav.day.grey',
+ hybridDay: {
+ options: {
+ base: 'aerial',
+ variant: 'hybrid.day'
+ }
+ },
+ hybridDayMobile: {
+ options: {
+ base: 'aerial',
+ variant: 'hybrid.day.mobile'
+ }
+ },
+ pedestrianDay: 'pedestrian.day',
+ pedestrianNight: 'pedestrian.night',
+ satelliteDay: {
+ options: {
+ base: 'aerial',
+ variant: 'satellite.day'
+ }
+ },
+ terrainDay: {
+ options: {
+ base: 'aerial',
+ variant: 'terrain.day'
+ }
+ },
+ terrainDayMobile: {
+ options: {
+ base: 'aerial',
+ variant: 'terrain.day.mobile'
+ }
+ }
+ }
+ },
+ Acetate: {
+ url: 'http://a{s}.acetate.geoiq.com/tiles/{variant}/{z}/{x}/{y}.png',
+ options: {
+ attribution:
+ '&copy;2012 Esri & Stamen, Data from OSM and Natural Earth',
+ subdomains: '0123',
+ minZoom: 2,
+ maxZoom: 18,
+ variant: 'acetate-base'
+ },
+ variants: {
+ basemap: 'acetate-base',
+ terrain: 'terrain',
+ all: 'acetate-hillshading',
+ foreground: 'acetate-fg',
+ roads: 'acetate-roads',
+ labels: 'acetate-labels',
+ hillshading: 'hillshading'
+ }
+ }
+ };
+
+ L.tileLayer.provider = function (provider, options) {
+ return new L.TileLayer.Provider(provider, options);
+ };
+
+ L.Control.Layers.Provided = L.Control.Layers.extend({
+ initialize: function (base, overlay, options) {
+ var first;
+
+ var labelFormatter = function (label) {
+ return label.replace(/\./g, ': ').replace(/([a-z])([A-Z])/g, '$1 $2');
+ };
+
+ if (base.length) {
+ (function () {
+ var out = {},
+ len = base.length,
+ i = 0;
+
+ while (i < len) {
+ if (typeof base[i] === 'string') {
+ if (i === 0) {
+ first = L.tileLayer.provider(base[0]);
+ out[labelFormatter(base[i])] = first;
+ } else {
+ out[labelFormatter(base[i])] = L.tileLayer.provider(base[i]);
+ }
+ }
+ i++;
+ }
+ base = out;
+ }());
+ this._first = first;
+ }
+
+ if (overlay && overlay.length) {
+ (function () {
+ var out = {},
+ len = overlay.length,
+ i = 0;
+
+ while (i < len) {
+ if (typeof overlay[i] === 'string') {
+ out[labelFormatter(overlay[i])] = L.tileLayer.provider(overlay[i]);
+ }
+ i++;
+ }
+ overlay = out;
+ }());
+ }
+ L.Control.Layers.prototype.initialize.call(this, base, overlay, options);
+ },
+ onAdd: function (map) {
+ this._first.addTo(map);
+ return L.Control.Layers.prototype.onAdd.call(this, map);
+ }
+ });
+
+ L.control.layers.provided = function (baseLayers, overlays, options) {
+ return new L.Control.Layers.Provided(baseLayers, overlays, options);
+ };
+}());
+
+var map = L.map('map-inner-canvas')
+
+// center on a country
+function focusCountry(latitude, longitude, zoom) {
+ map.panTo(new L.LatLng(latitude, longitude));
+ map.setZoom(zoom);
+};
+
+{% for r in route_list %}
+{% for route in r %}
+var {{route.template_var_name}} = L.polygon([
+{% for point in route.geometry.coords%}
+ [{{point.1}}, {{point.0}}]{% if forloop.last%}{%else%},{%endif%}
+{% endfor %}
+ ]);
+ {% endfor %}
+ {% endfor %}
+
+function showRoute(route, zoom, latitude, longitude) {
+ map.panTo(new L.LatLng(latitude, longitude));
+ map.setZoom(zoom);
+ eval(route).addTo(map);
+ return false;
+};
+ //check for a permalink
+ //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 (window.location.hash) {
+ for (var i=0; i < pts.length; i++) {
+ if (window.location.hash == pts[i][0]) {
+ var centerCoord = new L.LatLng(pts[i][1],pts[i][2]);
+ var zoom = pts[i][3];
+ break;
+ } else {
+ var centerCoord = new L.LatLng(19.311143,2.460938);
+ var zoom = 2;
+ }
+ }
+} else {
+ centerCoord = new L.LatLng(19.311143,2.460938);
+ zoom = 2;
+}
+//Set center
+map.setView(centerCoord, zoom);
+L.tileLayer.provider('Esri.WorldTopoMap', {maxZoom: 18,attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Tiles &copy; Esri and the GIS User Community'}).addTo(map);
+
+//loop through and set up markers/info windows
+{% for entry in object_list %}
+L.marker([{{entry.latitude}}, {{entry.longitude}}]).bindPopup('<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_featured_image_thumb}}" 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>').addTo(map);
+{% endfor %}
+
diff --git a/templates/archives/notes.html b/templates/archives/notes.html
new file mode 100644
index 0000000..9960fc8
--- /dev/null
+++ b/templates/archives/notes.html
@@ -0,0 +1,66 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load html5_datetime %}
+{% load pagination_tags %}
+{% block pagetitle %} Field Notes | luxagraf {% endblock %}
+{% block metadescription %} Rough notes and sketches from the field {% endblock %}
+{%block bodyid%}class="notes" id="notes-archive"{%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>Field Notes</li>
+ </ul>
+ <main role="main">
+ <h1>Field Notes</h1>
+ <h4 class="subhead divide-after">Quick notes and images from the road</h4>
+ {% autopaginate object_list 16 %}{% for object in object_list %}
+ <article class="h-entry">
+ <h2 class="p-name note--title hide">{{object.title|safe|amp|smartypants}}</h2>
+ <h5 class="note--date-hed"><a class="u-url" href="{{object.get_absolute_url}}" rel="bookmark"><time class="dt-published" datetime="{{object.pub_date|html5_datetime}}">{{object.pub_date|date:"F j, Y"}}</time></a></h5>
+ <div class="e-content">
+ {{object.body_html|safe|smartypants}}
+ </div>
+ <span class="p-author h-card">
+ <data class="p-name" value="Scott Gilbertson"></data>
+ <data class="u-url" value="https://luxagraf.net/"></data>
+ </span>
+ <footer>
+ {%comment%}<p class="note--date">
+ <a class="u-url" href="{{object.get_absolute_url}}" rel="bookmark"><time class="dt-published" datetime="{{object.pub_date|html5_datetime}}">{{object.pub_date|date:"F j, Y"}}</time></a>
+ </p>{%endcomment%}{% if object.location %}
+ <p class="p-location h-adr note--location bl" itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo">
+ <span class="p-locality">{{object.location.name|smartypants|safe}}</span>,
+ <span class="p-region">{{object.location.state.name}}</span>,
+ <span class="p-country-name">{{object.location.state.country.name}}</span>
+ <data class="p-latitude" value="{{object.latitude}}"></data>
+ <data class="p-longitude" value="{{object.longitude}}"></data>
+ </p>{% endif %}{% if object.twitter_id %}
+ <ul class="note--actions">
+ <li><a rel="syndication" class="u-syndication" href="https://twitter.com/luxagraf/status/{{object.twitter_id}}">View on Twitter</a></li>
+ <li>
+ <indie-action do="reply" with="{{SITE_URL}}{{object.get_absolute_url}}"><a href="https://twitter.com/intent/tweet?in_reply_to={{object.twitter_id}}">Reply</a></indie-action>
+ </li>
+ <li>
+ <indie-action do="post" with="{{SITE_URL}}{{object.get_absolute_url}}">
+ <a href="https://twitter.com/intent/retweet?tweet_id={{object.twitter_id}}">Retweet</a>
+ </indie-action>
+ </li>
+ <li>
+ <indie-action do="bookmark" with="{{SITE_URL}}{{object.get_absolute_url}}">
+ <a href="https://twitter.com/intent/favorite?tweet_id={{object.twitter_id}}">Favourite</a>
+ </indie-action>
+ </li>
+ </ul>{% endif %}
+ </footer>
+
+ </article>
+{% endfor %}
+ </main>
+ <nav class="pagination">
+ {% paginate %}
+ </nav>
+{% endblock %}
+
+
+
diff --git a/templates/archives/notes_date.html b/templates/archives/notes_date.html
new file mode 100644
index 0000000..be41176
--- /dev/null
+++ b/templates/archives/notes_date.html
@@ -0,0 +1,74 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load html5_datetime %}
+{% load month_number_to_name %}
+{% block pagetitle %} Field Notes Published in {% if month %}{{month}}{%endif%} {{year}} | luxagraf{% endblock %}
+{% block bodyid %}class="notes" id="archive-{% if month %}{{month}}{%endif%}{{year}}"{%endblock%}
+{% block primary %}<ul class="bl crumbs" 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><a href="/field-notes/" itemprop="url"><span itemprop="title">Field Notes</span></a> &rarr;</li>
+ <li>{% if not month %}{{year|date:"Y"}}{%else%}<a href="/field-notes/{{month|date:"Y"}}/">{{month|date:"Y"}}</a> &rarr;{%endif%}</li>
+ {% if month %}<li itemprop="title">{{month|date:"F"}}</li>{% endif %}
+ </ul>
+ <main role="main">
+
+ <h1>Field Notes Published in {% if not month %}{{year|date:"Y"}}{%else%} {{month|date:"F Y"}}{% endif %}</h1>{% if month %}{% for object in object_list %}</h1>
+ <article class="h-entry post--article">
+ {% if object.title %}<h1 class="p-name note--title"><a href="{{object.get_absolute_url}}" class="permalink">{{object.title|safe|amp|smartypants}}</a></h1>{%endif%}
+ <div class="e-content">
+ {{object.body_html|safe|smartypants}}
+ </div>
+ <span class="p-author h-card">
+ <data class="p-name" value="Scott Gilbertson"></data>
+ <data class="u-url" value="https://luxagraf.net/"></data>
+ </span>
+ <footer>
+ {% if object.location %}
+ <p class="p-location h-adr note--location bl" itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo">
+ <span class="p-locality">{{object.location.name|smartypants|safe}}</span>,
+ <span class="p-region">{{object.location.state.name}}</span>,
+ <span class="p-country-name">{{object.location.state.country.name}}</span>
+ <data class="p-latitude" value="{{object.latitude}}"></data>
+ <data class="p-longitude" value="{{object.longitude}}"></data>
+ </p>{% endif %}
+
+ <p class="note--date">
+ <a class="u-url" href="{{object.get_absolute_url}}" rel="bookmark"><time class="dt-published" datetime="{{object.pub_date|html5_datetime}}">{{object.pub_date|date:"F j, Y"}}</time></a>
+ </p>
+ </footer>
+ </article>
+ {% endfor %}
+ {% else %}
+{% regroup object_list by pub_date.month as entries_by_month %}{% for month in entries_by_month %}
+ <section class="month--divider">
+ <h2 class="month--header">{{ month.list.0.pub_date|date:"F Y" }}</h2>{% for object in month.list|dictsortreversed:"pub_date" %}
+ <article class="h-entry post--article">
+ {% if object.title %}<h1 class="p-name note--title"><a href="{{object.get_absolute_url}}" class="permalink">{{object.title|safe|amp|smartypants}}</a></h1>{%endif%}
+ <div class="e-content">
+ {{object.body_html|safe|smartypants}}
+ </div>
+ <span class="p-author h-card">
+ <data class="p-name" value="Scott Gilbertson"></data>
+ <data class="u-url" value="https://luxagraf.net/"></data>
+ </span>
+ <footer>
+ {% if object.location %}
+ <p class="p-location h-adr note--location bl" itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo">
+ <span class="p-locality">{{object.location.name|smartypants|safe}}</span>,
+ <span class="p-region">{{object.location.state.name}}</span>,
+ <span class="p-country-name">{{object.location.state.country.name}}</span>
+ <data class="p-latitude" value="{{object.latitude}}"></data>
+ <data class="p-longitude" value="{{object.longitude}}"></data>
+ </p>{% endif %}
+
+ <p class="note--date">
+ <a class="u-url" href="{{object.get_absolute_url}}" rel="bookmark"><time class="dt-published" datetime="{{object.pub_date|html5_datetime}}">{{object.pub_date|date:"F j, Y"}}</time></a>
+ </p>
+ </footer>
+ </article>
+ {% endfor %}
+ </section>
+ {% endfor %}
+ {% endif %}
+ </main>
+{% endblock%}
diff --git a/templates/archives/people.html b/templates/archives/people.html
new file mode 100644
index 0000000..533199a
--- /dev/null
+++ b/templates/archives/people.html
@@ -0,0 +1,34 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load pagination_tags %}
+{% block pagetitle %} People | luxagraf {% endblock %}
+{% block metadescription %} {% endblock %}
+{%block bodyid%}class="links" id="people-archive"{%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>
+ {% if tag %}<li><a href="{% url "people:list"%}" title="all people" itemprop="url"><span itemprop="title">People</span></a> &rarr; </li><li>{{tag}}</li>{%else%}<li>People</li>{% endif%}
+ </ul>
+ <main role="main">
+ <div class="tags">
+ <ul class="tag-list">{% for object in tags %}
+ <li><a href="{% url "people:list-tag" object.slug %}">{{object.name}}</a></li>{%endfor%}
+ </ul>
+ </div>
+ {% autopaginate object_list 100 %}{% for object in object_list %}
+ <article>
+ <h4 class="link-title">
+ <a href="{%url "people:detail" object.slug %}">{{object|smartypants|safe}}</a>
+ </h4>
+ <ul>
+ <li>Email: <a href="mailto:{{object.email}}">{{object.email}}</a></li>
+ <li>Tel: <a href="tel:{{object.phone}}">{{object.phone}}</a></li>
+ </ul>
+ </article>
+ {% endfor %}
+ </main>
+ <nav class="pagination">
+ {% paginate %}
+ </nav>
+{% endblock %}
diff --git a/templates/archives/photo_daily_list.html b/templates/archives/photo_daily_list.html
new file mode 100644
index 0000000..04254ff
--- /dev/null
+++ b/templates/archives/photo_daily_list.html
@@ -0,0 +1,25 @@
+{% extends 'base.html' %}
+{%block htmlclass%}class="detail single"{% endblock %}
+{% load typogrify_tags %}
+{% load html5_datetime %}
+{% load pagination_tags %}
+{% block pagetitle %} Photos | luxagraf {% endblock %}
+{% block metadescription %} Recent Images {% endblock %}
+{%block bodyid%}class="photos" id="notes-archive"{%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>Photos</li>
+ </ul>
+ <main role="main">
+ {% autopaginate object_list 8 %}{% for object in object_list %}
+ <article class="h-entry hentry " itemscope="" itemtype="http://schema.org/Article">
+ <figure class="daily-figure">
+ {% include 'lib/img_picwide.html' with image=object caption=False exif=False is_cluster=False cluster_class='' extra='' %}
+ <figcaption class="picwide">{{object.location}}, {{object.location.state.country}}</figcaption>
+ </figure>
+ </article>
+ {% endfor %}
+ </main>
+{% endblock%}
diff --git a/templates/archives/photos.html b/templates/archives/photos.html
new file mode 100644
index 0000000..c8d3db5
--- /dev/null
+++ b/templates/archives/photos.html
@@ -0,0 +1,32 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load pagination_tags %}
+
+{% block pagetitle %}Luxagraf | {% if region %}Photo Galleries: Images from {{region.name|title|smartypants|safe}}{%else%}Photo Galleries: Images from Around the World {%endif%} Page {{page}}{% endblock %}
+{% block metadescription %}{% if region %}Photo Galleries from {{region.name|title|smartypants|safe}}{%else%}Photo Galleries: Images from Around the World {%endif%} Page {{page}}{% endblock %}
+
+
+{%block bodyid%}id="photo-archive"{%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>
+ {% if region %}{%if region.name == 'United States'%} <li><a href="/photos/" title="See all Photos" itemprop="url"><span itemprop="title">Photos</span></a> &rarr;</li>
+ <li>the United States</li>{%else%}<li><a href="/photos/" title="See all Photos" itemprop="url"><span itemprop="title">Photos</span></a> &rarr;</li> <li>{{region.name|title|smartypants|safe}}{%endif%}{%else%}<li>Photos </li>{%endif%}
+ </ul>
+ <main role="main">
+ <h1 class="hide">{% if region %}Photographs from {{region.name|title|smartypants|safe}}{%else%}Photographs from Around the World {%endif%}</h1>
+ <ul id="photo-galleries" class="image-gallery--list">{% autopaginate object_list 24 %} {% for object in object_list %}
+ <li class="{% cycle 'first' 'second' 'third' 'fourth'%} {% cycle 'one' 'two' 'three'%}">
+ <figure class="image-gallery--figure">
+ <a href="{{object.get_absolute_url}}" title="view images from {{ object.set_title }}"><img src="{{object.get_main_image}}" alt="{{ object.set_title }}" /></a>
+ <figcaption class="image-gallery--legend">
+ <h1>{{object.set_title}}</h1>
+ <p>{{object.set_desc|truncatewords:30|smartypants|safe}}</p>
+ </figcaption>
+ </figure>
+ </li>{% endfor %}
+ </ul>
+ </main>
+ <nav class="pagination">{% paginate %}
+ </nav>
+{% endblock %}
diff --git a/templates/archives/projects.html b/templates/archives/projects.html
new file mode 100644
index 0000000..738317f
--- /dev/null
+++ b/templates/archives/projects.html
@@ -0,0 +1,32 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Luxagraf | Projects {% endblock %}
+{% block metadescription %}Travel Themes and Experiments {% endblock %}
+
+{%block bodyid%}class="archive"{%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>Projects</li>
+ </ul>
+ <main class="projects">
+ <div class="intro">
+ <p>Luxagraf has become a bit like an iceberg over the years. I keep adding things to it, but never actually make them public. So I decided to try making some of it more public. </p>
+ <p>This will lead you to some of the previously submerged stuff that doesn't always neatly fit in with the travel narrative portion of luxagraf. </p>
+ </div>
+ <ul id="projects-archive" class="wide-list">{%for object in object_list %}
+ <li>
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}">
+ <img sizes="(max-width: 850px) 100vw, (min-width: 851px) 720px" srcset="{{object.get_project_image|slice:"0:-4"}}_lg.jpg 1280w" src="{{object.get_project_image}}" alt="{{ object.title }}" class="post-image" />
+ </a>
+ <div class="wide-wrapper">
+ <h2 class="post-title"><a href="{{object.get_absolute_url}}" title="{{object.title}}">{{object.title|safe}}</a></h2>
+ <div class="post-summary">{{object.lede|safe|smartypants}}</div>
+ <a class="permalink" href="{{object.get_absolute_url}}">Explore&nbsp;&#8674;</a>
+ </div>
+ </li> {% endfor %}
+ </ul>
+ </main>
+{% endblock %}
+
+{% block js %}<script src="/media/js/hyphenate.min.js" type="text/javascript"></script>{% endblock%}
diff --git a/templates/archives/resume-pubs-by-pub.html b/templates/archives/resume-pubs-by-pub.html
new file mode 100644
index 0000000..575313e
--- /dev/null
+++ b/templates/archives/resume-pubs-by-pub.html
@@ -0,0 +1,28 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load html5_datetime %}
+{% load pagination_tags %}
+{% block pagetitle %} Publications | Resume{% endblock %}
+{% block metadescription %} {% endblock %}
+{%block bodyid%}class="resume" id="publications-archive"{%endblock%}
+{%block htmlclass%}class="detail"{% 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><a href="/work/">Work</a> &rarr; </li>
+ <li><a href="/work/pubs/">Publications</a> &rarr; </li>
+ <li>{{publisher}}</li>
+ </ul>
+ <main role="main">
+ <h1 class="entry-title publisher">(Most) Stories published in {{publisher}}</h1>
+ <article>
+ {{ publisher.body_html|safe|widont|smartypants}}
+ </article>
+ <hr />
+ <ul class="publications-list">{% for object in object_list %}
+ <li class="pub-title"><h3><a href="{{object.url}}">{{object.title|amp|smartypants|widont|safe}}</a></h3>
+ <time class="dt-published published dt-updated" datetime="{{object.pub_date|date:'c'}}" itemprop="datePublished">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time> (<a href="{{object.get_absolute_url}}" title="local copy if publisher version is not available">local verson</a>)
+ </li>{% endfor %}
+ </ul>
+ </main>
+{% endblock %}
diff --git a/templates/archives/resume-pubs.html b/templates/archives/resume-pubs.html
new file mode 100644
index 0000000..26b4936
--- /dev/null
+++ b/templates/archives/resume-pubs.html
@@ -0,0 +1,33 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load html5_datetime %}
+{% load pagination_tags %}
+{% block pagetitle %} Publications | Resume{% endblock %}
+{% block metadescription %} {% endblock %}
+{%block bodyid%}class="archive resume" id="publications-archive"{%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><a href="/work/">Work</a> &rarr; </li>
+ <li>Publications</li>
+ </ul>
+ <main>
+ <h1 class="hide">Publications</h1>
+ <h6>By Publication</h6>
+ <nav class="toc"><ul>{% for publisher in pub_list %}
+ <li><a href="#{{publisher.name|slugify}}">{{publisher.name}}</a></li>{%endfor%}
+ </ul></nav>
+ <ul class="archive publications-list">{% regroup object_list|dictsort:"publisher_id" by publisher.name as pub_list %}{% for pub in pub_list %}
+ <li>
+ <h2 id="{{pub.grouper|slugify}}">{{ pub.grouper }}</h2>
+ <ul>{% for object in pub.list %}{% if forloop.counter < 8 %}
+ <li class="pub-title"><h3><a href="{{object.url}}">{{object.title|amp|smartypants|widont|safe}}</a></h3>
+ <time class="dt-published published dt-updated" datetime="{{object.pub_date|date:'c'}}" itemprop="datePublished">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time> (<a href="{{object.get_absolute_url}}">local verson</a>)
+ </li>{%endif%}{% endfor %}
+ </ul>
+ <a href="{% url "resume:list_by_publisher" pub.grouper|slugify %}">View all articles published by {{pub.grouper}}</a>
+ </li>{% endfor %}
+ </ul>
+ </main>
+{% endblock %}
diff --git a/templates/archives/robots.html b/templates/archives/robots.html
new file mode 100644
index 0000000..77470cb
--- /dev/null
+++ b/templates/archives/robots.html
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: / \ No newline at end of file
diff --git a/templates/archives/sketches.html b/templates/archives/sketches.html
new file mode 100644
index 0000000..06fe311
--- /dev/null
+++ b/templates/archives/sketches.html
@@ -0,0 +1,44 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load html5_datetime %}
+{% load pagination_tags %}
+{% block pagetitle %} Field Notes | luxagraf {% endblock %}
+{% block metadescription %} Rough notes and sketches from the field {% endblock %}
+{%block bodyid%}id="field-notes"{%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>Field Notes</li>
+ </ul>
+ <main role="main" id="essay-archive" class="essay-archive archive-list">
+ <div class="essay-intro">
+ <h2>Field Notes</h2>
+ <p>Quick notes, sketches and images from the road. This is the semi-orgnized brain dump that comes before the more organized <a href="/jrnl/" title="read the journal">journal entries</a> and <a href="/essays/" title="read essays">essays</a>. If I used social media this is the stuff I'd probably put there, but I prefer to put it here, even if it means a lot few people read it.</p>
+ </div>
+ {% autopaginate object_list 30 %}
+ <ul class="fancy-archive-list">{% for object in object_list %}{% if object.slug != 'about' %}
+ <li class="h-entry hentry" itemscope itemType="http://schema.org/Article">
+ <span class="date dt-published">{{object.pub_date|date:"F d, Y"}}</span>
+ <a href="{{object.get_absolute_url}}">
+ <h2>{{object.title|safe|smartypants|widont}}</h2>
+ {% if object.subtitle %}<h3 class="p-summary">{{object.subtitle|safe|smartypants|widont}}</h3>{%endif%}
+ </a>
+ {% if object.location %}<h4 class="p-location h-adr post-location" itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo">
+ <span class="p-locality">{{object.location.name|smartypants|safe}}</span>,
+ <span class="p-region">{{object.location.state_name}}</span>,
+ <span class="p-country-name">{{object.location.country_name}}</span>
+ <data class="p-latitude" value="{{object.latitude}}"></data>
+ <data class="p-longitude" value="{{object.longitude}}"></data>
+ </h4>{% endif %}
+ </li>
+ {%endif%}{%endfor%}</ul>
+ </main>
+
+ <nav class="pagination">
+ {% paginate %}
+ </nav>
+{% endblock %}
+
+
+
diff --git a/templates/archives/src_books.html b/templates/archives/src_books.html
new file mode 100644
index 0000000..f15d9ab
--- /dev/null
+++ b/templates/archives/src_books.html
@@ -0,0 +1,20 @@
+{% extends 'src_base.html' %}
+{% load typogrify_tags %}
+{%block bodyid%}id="book-page"{%endblock%}
+{%block metadescription%}Book Store | luxagraf:src{%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><a href="/src/" title="luxagraf:src" itemprop="url"><span itemprop="title"><code>src</code></span></a> &rarr; </li>
+ <li>Books</li>
+ </ul>
+ <main role="main">
+ <h1 class="hide">Books</h1>
+ <div class="book-list"> {% for object in object_list %}
+ <article class="book-list-item {% cycle "odd" "even" %} {% cycle "uno" "dos" "tres" %}" itemscope itemtype="http://schema.org/Book">
+ {% if object.image %}<div class="img-wrapper"><a href="{{object.get_absolute_url}}"><img itemprop="image" src="{{object.get_image_url}}" alt="cover art for {{object.title}}"/></a></div>{%endif%}
+ <h2 itemprop="name"><a href="{{object.get_absolute_url}}">{{object.title|amp|smartypants|widont|safe}}</a></h2>
+ </article>
+ {% endfor %}</div>
+ </main>
+{% endblock %}
diff --git a/templates/archives/writing.html b/templates/archives/writing.html
new file mode 100644
index 0000000..e249cd3
--- /dev/null
+++ b/templates/archives/writing.html
@@ -0,0 +1,46 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load pagination_tags %}
+
+{% block pagetitle %}Luxagraf | {% if region %}Travel Writing from {{region.name|title|smartypants|safe}}{%else%}Travel Writing from Around the World {%endif%}{% if page != "1" %} -- Page {{page}}{%endif%}{% endblock %}
+{% block metadescription %}{% if region %}Travel writing, essays and dispatches from {{region.name|title|smartypants|safe}}{%else%}Travel writing, essays and dispatches from around the world{%endif%} Page {{page}}{% endblock %}
+{%block bodyid%}id="writing"{%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>
+ {% if region %}{%if region.name == 'United States'%} <li><a href="/jrnl/" title="See all Journal Entries" itemprop="url"><span itemprop="title">Journal</span></a> &rarr;</li>
+ <li itemprop="title">the United States</li>{%else%}<li><a href="/jrnl/" title="See all Journal Entries" itemprop="url"><span>Journal</span></a> &rarr;</li>
+ <li>{{region.name|title|smartypants|safe}}</li>{%endif%}{%else%}<li>Journal</li>{%endif%}
+ </ul>
+ <main role="main" id="writing-archive" class="archive">
+ <h1 class="hide">{% if region %}Journal entries from {%if region.name == 'United States'%}the United States{%else%}{{region.name|title|smartypants|safe}}{%endif%}{%else%}Journal {%endif%}</h1>{% autopaginate object_list 24 %} {% for object in object_list %}
+ <article class="h-entry hentry {% cycle 'odd' 'even' %} {% cycle 'first' 'second' 'third' %}" itemscope itemType="http://schema.org/Article">
+ <div class="post--image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}"><img src="{{object.get_image_url}}" alt="{{ object.title }}" class="u-photo post-image" itemprop="image" /></a>
+ </div>
+ <h2 class="p-name entry-title post--title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants|widont}}</a></h2>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ <time class="dt-published published dt-updated post--date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p>
+ <span class="p-location h-adr adr post--location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.state.name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.country.slug}}/" title="travel writing from {{object.country.name}}">{{object.country.name}}</a>{%endif%}
+ <span style="display: none;" itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">
+ <data itemprop="latitude" class="p-latitude" value="{{object.latitude}}">{{object.latitude}}</data>
+ <data itemprop="longitude" class="p-longitude" value="{{object.longitude}}">{{object.longitude}}</data>
+ </span>
+ </span> &ndash;
+ <span class="p-summary entry-summary hyphenate" itemprop="description">
+ {{object.dek|safe}}
+ </span>
+ </p>
+ </article> {% endfor %}
+ </main>
+ <nav class="pagination">
+ {% paginate %}
+ </nav>
+{% endblock %}
+
+
+
+{% block js %}<script src="/media/js/hyphenate.min.js" type="text/javascript"></script>{% endblock%}
diff --git a/templates/archives/writing_date.html b/templates/archives/writing_date.html
new file mode 100644
index 0000000..4091e74
--- /dev/null
+++ b/templates/archives/writing_date.html
@@ -0,0 +1,32 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load html5_datetime %}
+{% block pagetitle %}{{block.super}}: Archive{% endblock %}
+{% block bodyid %}id="archive"{%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><a href="/jrnl/" title="See all Journal Entries" itemprop="url"><span itemprop="title">Journal</span></a> &rarr;</li>
+ <li>{% if not month %}{{year|date:"Y"}}{%else%}<a href="/jrnl/{{month|date:"Y"}}/">{{month|date:"Y"}}</a> &rarr;{%endif%}</li>
+ {% if month %}<li>{{month|date:"F"}}</li>{% endif %}
+ </ul>
+ <main role="main" id="writing-archive" class="archive">
+ <h1>{% if not month %}{{year|date:"Y"}}, on luxagraf{%else%} Archive: {{month|date:"F Y"}}{% endif %}</h1>{% if not month %}
+ <ul class="date-archive">{% regroup object_list by pub_date.month as entries_by_month %}{% for entries in entries_by_month reversed %}
+ <li class="dater"><span>{{ entries.list.0.pub_date|date:"F Y" }}</span>
+ <ul>{% for post in entries.list %}
+ <li class="arc-item">
+ <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="date-archive">{% for post in object_list %}
+ <li class="arc-item"><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/templates/base.html b/templates/base.html
new file mode 100644
index 0000000..935849a
--- /dev/null
+++ b/templates/base.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html {%block htmlclass%}{%endblock%} dir="ltr" lang="en-US">
+ {% block sitename %}
+<head>
+ <title>{% block pagetitle %}Luxagraf - Topografical Writings{% endblock %}</title>{%endblock%}
+ <meta charset="utf-8">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="description"
+ content="{% block metadescription %}Luxagraf: recording journeys around the world and just next door.{% endblock %}">
+ <meta name="author" content="Scott Gilbertson">
+ <link rel="alternate"
+ type="application/rss+xml"
+ title="Luxagraf RSS feed"
+ href="https://luxagraf.net/rss/">
+ {%block stylesheet%}<link rel="stylesheet"
+ href="/media/screenv11.min.css?{% now "u" %}"
+ media="screen">{%endblock%}
+ <link rel="dns-prefetch" href="https://images.luxagraf.net">
+ <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+ <link rel="manifest" href="/manifest.json" />
+ {%block extrahead%}{%endblock%}
+</head>
+<body {%block bodyid%}{%endblock%}{%block bodyevents%}{%endblock%}>
+ <header class="header-wrapper">
+ <div id="logo">
+ <a class="logo-link" href="/" title="Home">Luxagraf</a>
+ <span class="sitesubtitle">{%block sitesubtitle %}Walk Slowly{% endblock%}</span>
+ </div>
+ <nav>
+ <a class="nav-item smcaps" href="{% url "jrnl:list" %}" title="Stories of life on the road.">Jrnl</a>{%comment%} &amp; <a href="{% url "fieldnotes:list" %}" title="Short stories, snapshots of daily life on the road.">Field Notes</a>{%endcomment%}
+ <a class="nav-item smcaps" href="/friends/" title="Join 'friends of a long year'">Friends</a>
+ <a class="nav-item smcaps" href="/range/" title="Join 'range'">Range</a>
+ <a class="nav-item smcaps" href="/about" title="About Scott">About</a>
+ </nav>
+ </header>
+ {% block breadcrumbs %}{% endblock %}
+ {% block primary %}{% endblock %}
+ {% block extrabody %}{% endblock %}
+ {% block disclaimer %}{% endblock%}
+ <footer class="page-footer">
+ <nav>
+ <a class="nav-item smcaps" href="/blogroll" title="Sites that inspire us">Blogroll</a>
+ <a class="nav-item smcaps" href="/contact/" title="contact luxagraf">Contact</a>
+ <a class="nav-item smcaps" href="/feed.xml" title="RSS feed">RSS</a>
+ </nav>
+ <p id="license">
+ &copy; 2003-{% now "Y" %}
+ <span class="h-card"><a class="p-name u-url" href="https://luxagraf.net/">Scott Gilbertson</a><data class="p-nickname" value="luxagraf"></data><data class="p-locality" value="Athens"></data><data class="p-region" value="Georgia"></data><data class="p-country-name" value="United States"></data></span>.
+ </p>
+ </footer>
+ {% block js %}{% endblock%}
+</body>
+</html>
diff --git a/templates/bin/country_sidebar.html b/templates/bin/country_sidebar.html
new file mode 100644
index 0000000..03570da
--- /dev/null
+++ b/templates/bin/country_sidebar.html
@@ -0,0 +1,6 @@
+<ul>
+ {%for country in country_list %}
+ <li><a href="/writing/{{country.slug}}/1/" title="See all writing from {{country.name|title}}">{{country.name}}</a></li>
+ </li>
+ {% endfor %}
+</ul> \ No newline at end of file
diff --git a/templates/bin/map_sidebar.html b/templates/bin/map_sidebar.html
new file mode 100644
index 0000000..e61852f
--- /dev/null
+++ b/templates/bin/map_sidebar.html
@@ -0,0 +1,23 @@
+{% load truncateletters %}{% load slugify_under %}<div class="map-legend">
+ <h4>Trips</h4>
+ <ul>
+ {% for route in route_list %}
+ <li><a onclick="showRoute('{{route.template_var_name}}', {{route.zoom}}, '{{route.geometry.centroid.y}}','{{route.geometry.centroid.x}}');" href="#" title="show {{route.name}} on map">{{route.name}}</a></li>
+ {% endfor %}
+ </ul>
+ <h4>Regions</h4>
+ <ul>
+ {%for region in region_list %}
+ <li><a href="#{{region.slug}}" onclick="focusCountry({{region.lat}}, {{region.lon}}, {{region.zoom_level}});" title="See all writing from {{region.name|title}}">{{region.name}}</a></li>
+ {% endfor %}
+ </ul>
+
+ <h4>Countries</h4>
+ <ul>
+ <li><a onclick="focusCountry(19.311143,2.460938,2);" href="#" title="view all countries">All</a></li>
+ {%for country in country_list %}
+ <li><a href="#{{country.slug}}" onclick="focusCountry({{country.lat}}, {{country.lon}}, {{country.zoom_level}});" title="See all writing from {{country.name|title}}">{{country.name}}</a></li>
+ {% endfor %}
+ </ul>
+
+ </div>
diff --git a/templates/bin/recent_entries.html b/templates/bin/recent_entries.html
new file mode 100644
index 0000000..6d08971
--- /dev/null
+++ b/templates/bin/recent_entries.html
@@ -0,0 +1 @@
+{% load typogrify_tags %}
diff --git a/templates/bin/regions_sidebar.html b/templates/bin/regions_sidebar.html
new file mode 100644
index 0000000..ce14e68
--- /dev/null
+++ b/templates/bin/regions_sidebar.html
@@ -0,0 +1,6 @@
+<ul>
+ {%for region in region_list %}
+ <li><a href="/writing/{{region.slug}}/1/" title="See all writing from {{region.name|title}}">{{region.name}}</a></li>
+ </li>
+ {% endfor %}
+</ul> \ No newline at end of file
diff --git a/templates/comments/base.html b/templates/comments/base.html
new file mode 100644
index 0000000..9828ff6
--- /dev/null
+++ b/templates/comments/base.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>{% block title %}{% endblock %}</title>
+</head>
+<body>
+ {% block content %}{% endblock %}
+</body>
+</html>
diff --git a/templates/comments/comment_notification_email.txt b/templates/comments/comment_notification_email.txt
new file mode 100644
index 0000000..63f1493
--- /dev/null
+++ b/templates/comments/comment_notification_email.txt
@@ -0,0 +1,3 @@
+A comment has been posted on {{ content_object }}.
+The comment reads as follows:
+{{ comment }}
diff --git a/templates/comments/deleted.html b/templates/comments/deleted.html
new file mode 100644
index 0000000..e608481
--- /dev/null
+++ b/templates/comments/deleted.html
@@ -0,0 +1,8 @@
+{% extends "comments/base.html" %}
+{% load i18n %}
+
+{% block title %}{% trans "Thanks for removing" %}.{% endblock %}
+
+{% block content %}
+ <h1>{% trans "Thanks for taking the time to improve the quality of discussion on our site" %}.</h1>
+{% endblock %}
diff --git a/templates/comments/flagged.html b/templates/comments/flagged.html
new file mode 100644
index 0000000..e558019
--- /dev/null
+++ b/templates/comments/flagged.html
@@ -0,0 +1,8 @@
+{% extends "comments/base.html" %}
+{% load i18n %}
+
+{% block title %}{% trans "Thanks for flagging" %}.{% endblock %}
+
+{% block content %}
+ <h1>{% trans "Thanks for taking the time to improve the quality of discussion on our site" %}.</h1>
+{% endblock %}
diff --git a/templates/comments/form.html b/templates/comments/form.html
new file mode 100644
index 0000000..b70862f
--- /dev/null
+++ b/templates/comments/form.html
@@ -0,0 +1,25 @@
+{% load comments i18n %}
+<div class="comment-form-header">
+ <p class="hed">Thoughts?</p>
+ <p class="subhed">Please leave a reply:</p>
+</div>
+<form action="{% comment_form_target %}" method="post" class="comment-form">
+ {% if next %}<div><input type="hidden" name="next" value="{{ next }}" /></div>{% endif %}
+<input type="hidden" name="rder" value="{{ form.instance.content_object.get_absolute_url }}" />
+ {% for field in form %}
+ {% if field.is_hidden %}
+ {{ field }}
+ {% else %}
+ <fieldset class="{% if field.errors %} error{% endif %} {% ifequal field.name "honeypot" %} honeypot"{% endifequal %}">
+ {{ field.label_tag }}
+ {%ifequal field.name "comment"%}<div class="textarea-rounded">{{ field }}</div>{%else%}{{field}}{%endifequal%}
+ </fieldset>
+ {% endif %}
+ {% endfor %}
+ <div class="submit">
+ <input type="submit" name="preview" class="submit-preview btn" value="{% trans "Preview" %}" />
+ <input type="submit" name="post" class="submit-post btn" value="{% trans "Post" %}" />
+ </div>
+</form>
+<p style="font-size: 75%;"><strong>All comments are moderated</strong>, so you won&#8217;t see it right away. And please remember Kurt Vonnegut's rule: &#8220;god damn it, you&#8217;ve got to be kind.&#8221; You can use Markdown or HTML to format your comments. The allowed tags are <code>&lt;b&gt;, &lt;i&gt;, &lt;em&gt;, &lt;strong&gt;, &lt;a&gt;</code>. To create a new paragraph hit return twice. </p>
+
diff --git a/templates/comments/list.html b/templates/comments/list.html
new file mode 100644
index 0000000..7c43a9a
--- /dev/null
+++ b/templates/comments/list.html
@@ -0,0 +1,27 @@
+{% load gravatar_local %}
+{% load typogrify_tags %}
+{% load markdown%}
+{% load bleach_tags %}
+{% load nofollow %}
+{% load comments %}
+ <div>
+ {% for comment in comment_list %}
+ <div id="comment-{{ comment.id }}" class="comment-card-wrapper">
+ <div class="comment-card-hed">
+ <noscript class="datahashloader" data-hash="{% if comment.user_email == "sng@luxagraf.net" %}d64f4854965b2b1c3ecafee4b2a66fac{%else%}{%if comment.user_email|has_grav %}{%gravatar_hash comment.user_email %}{%else%}default{%endif%}{%endif%}">
+ <img class="comment-card-image" {% if comment.user_email == "sng@luxagraf.net" %}src="https://images.luxagraf.net/gravcache/d64f4854965b2b1c3ecafee4b2a66fac.jpg" {%else%} {%if comment.user_email|has_grav %} src="https://images.luxagraf.net/gravcache/{%gravatar_hash comment.email %}.jpg"{%else%}src="https://images.luxagraf.net/gravcache/default.jpg"{%endif%}{%endif%} alt="gravatar icon for {{comment.name}}" />
+ </noscript>
+ <span class="comment-card-commenter">{%if comment.url %}<a href="{{comment.url}}" rel="nofollow" target="_blank">{{comment.name}}</a>{% else %}{{comment.name}}{%endif%}</span>
+ <span class="card-smcaps">{{comment.submit_date|date:"F d, Y"}} at {{comment.submit_date|date:"g:i a"}}</span>
+ </div>
+
+ <div class="comment-card-body">
+ {% if comment.user_email == "sng@luxagraf.net" %}
+ {{comment.comment|markdown|safe|smartypants}}
+ {%else%}
+ {{comment.comment|markdown|bleach|nofollow|safe|smartypants}}
+ {%endif%}
+ </div>
+ </div>
+ {% endfor %}
+ </div>
diff --git a/templates/comments/posted.html b/templates/comments/posted.html
new file mode 100644
index 0000000..de9aa9e
--- /dev/null
+++ b/templates/comments/posted.html
@@ -0,0 +1,40 @@
+{% extends "base.html" %}
+{% load i18n %}
+{%block htmlclass%}class="detail"{%endblock%}
+{% block js %}
+<script type="text/javascript">
+
+(function () {
+ var timeLeft = 5,
+ cinterval;
+
+ var timeDec = function (){
+ timeLeft--;
+ document.getElementById('countdown').innerHTML = timeLeft;
+ if(timeLeft === 0){
+ clearInterval(cinterval);
+ {% if not comment.content_object.get_absolute_url %}
+ window.location="/";
+ {% else%}
+ window.location="{{comment.content_object.get_absolute_url}}";{%endif%}
+ }
+ };
+
+ cinterval = setInterval(timeDec, 1000);
+})();
+
+</script>
+{% endblock %}
+{% block primary %}
+<main>
+ <article class="content">
+ <header class="post-header">
+ <h1 class="post-title">Thank you for your comment</h1>
+ </header>
+ <div class="post-article">
+ <p>Unless you've previously been approved a few times, your comment will be moderated. If we're on the road this can sometimes take a few days, so please be patient.</p>
+ <p><a href="{{comment.content_object.get_absolute_url}}">Return to the page you came from</a> Redirecting in <span id="countdown">5</span></p>
+ </div>
+ </article>
+</main>
+{% endblock %}
diff --git a/templates/comments/preview.html b/templates/comments/preview.html
new file mode 100644
index 0000000..9e27c81
--- /dev/null
+++ b/templates/comments/preview.html
@@ -0,0 +1,47 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{%block htmlclass%}
+class="detail"{%endblock%}
+
+
+{% block primary %}
+<main>
+ <article class="content">
+ <header class="post-header">
+ <h1 class="post-title">{% trans "Preview your comment" %}</h1>
+ </header>
+
+ {% load comments %}
+<div class="comment-form-wrapper">
+<div class="comment-form-header">
+ <form action="{% comment_form_target %}" method="post" class="comment--form" style="margin-left: 0;">{% csrf_token %}
+ {% if next %}<div><input type="hidden" name="next" value="{{ next }}" /></div>{% endif %}
+ {% if form.errors %}
+ <h3>{% if form.errors|length == 1 %}{% trans "Please correct the error below" %}{% else %}{% trans "Please correct the errors below" %}{% endif %}</h3>
+ {% else %}
+ <blockquote>{{ comment|linebreaks }}</blockquote>
+ <p>
+ <input type="submit" name="submit" class="submit-post btn" value="{% trans "Post your comment" %}" id="submit" /> <h3>{% trans "Or make changes" %}:</h3>
+ </p>
+ {% endif %}
+ {% for field in form %}
+ {% if field.is_hidden %}
+ {{ field }}
+ {% else %}
+ <fieldset {% if field.errors %} class="error"{% endif %} {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}>
+ {{ field.label_tag }}
+ {%ifequal field.name "comment"%}<div class="textarea-rounded">{{ field }}</div>{%else%}{{field}}{%endifequal%}
+ </fieldset>
+ {% endif %}
+ {% endfor %}
+ <div class="submit">
+ <input type="submit" name="post" class="submit-post btn" value="{% trans "Post" %}" />
+ <input type="submit" name="preview" class="submit-preview btn" value="{% trans "Preview" %}" />
+ </div>
+ </form>
+ </div>
+ </div>
+ </article>
+</main>
+{% endblock %}
diff --git a/templates/contact_form/contact_form.html b/templates/contact_form/contact_form.html
new file mode 100644
index 0000000..4b20fc7
--- /dev/null
+++ b/templates/contact_form/contact_form.html
@@ -0,0 +1,45 @@
+{% extends 'base.html' %}
+
+{#==============================================
+Load up the various metadata add-ins
+================================================#}
+
+{% 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%}
+
+{#==============================================
+Fill in the Title And Dateline Blocks
+================================================#}
+
+{%block title %}
+Contact Me
+{%endblock%}
+
+
+
+{%block primary%}
+<article>
+<section id="post">
+<h1>Contact Me</h1>
+
+<div class="form-holder">
+<form method="post" action="http://live.luxagraf.net/contact/" class="contact-form">
+<ul>
+{% for field in form %}
+ <li>
+ <dl>
+ <dt>{{ field.label_tag }}</dt>
+ <dd>{{ field }}</dd>
+ {% if field.help_text %}<dd>{{ field.help_text }}</dd>{% endif %}
+ {% if field.errors %}<dd class="myerrors">{{ field.errors }}</dd>{% endif %}
+ </dl>
+ </li>
+{% endfor %}
+</ul>
+<input type="submit" class="button" value="Contact" />
+</form>
+</div>
+</section>
+</article>
+{%endblock%} \ No newline at end of file
diff --git a/templates/contact_form/contact_form.txt b/templates/contact_form/contact_form.txt
new file mode 100644
index 0000000..5d8bf3e
--- /dev/null
+++ b/templates/contact_form/contact_form.txt
@@ -0,0 +1,5 @@
+Name: {{name}}
+
+Wrote: {{body}}
+
+Reply-To Address: {{email}} \ No newline at end of file
diff --git a/templates/contact_form/contact_form_sent.html b/templates/contact_form/contact_form_sent.html
new file mode 100644
index 0000000..adeabb6
--- /dev/null
+++ b/templates/contact_form/contact_form_sent.html
@@ -0,0 +1,25 @@
+{% extends 'contact_form/contact_form.html' %}
+
+{#==============================================
+Fill in the Title And Dateline Blocks
+================================================#}
+
+{%block title %}
+Thank You
+{%endblock%}
+
+
+{% block dateline %}
+Thanks for sharing your thoughts
+{% endblock%}
+
+
+{#==============================================
+ Primary Content
+================================================#}
+
+{%block primary%}
+
+<p>Thanks for sharing your thoughts, I will make an effort to respond promptly</p>
+
+{% endblock %} \ No newline at end of file
diff --git a/templates/contact_form/contact_form_subject.txt b/templates/contact_form/contact_form_subject.txt
new file mode 100644
index 0000000..2eb8f20
--- /dev/null
+++ b/templates/contact_form/contact_form_subject.txt
@@ -0,0 +1 @@
+[luxmail] {{subject_line}} \ No newline at end of file
diff --git a/templates/details/5x5.html b/templates/details/5x5.html
new file mode 100644
index 0000000..fc6b187
--- /dev/null
+++ b/templates/details/5x5.html
@@ -0,0 +1,19 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% 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/details/babyvideos.html b/templates/details/babyvideos.html
new file mode 100644
index 0000000..a91136c
--- /dev/null
+++ b/templates/details/babyvideos.html
@@ -0,0 +1,42 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Luxagraf | {{object.title}}{% endblock %}
+{% block extrahead %}
+<style>
+.vidwrap{
+ position: relative;
+ padding-bottom: 56.25%; /* 16:9 */
+ padding-top: 25px;
+ height: 0;
+}
+.vidwrap video,
+.vidwrap embed, {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+
+@media only screen and (max-width : 960px) {
+ .vidwrap video {width: 100%;}
+}
+@media only screen and (min-width : 1024px) {}
+ .vidwrap video {max-width: 960px;}
+}
+
+</style>
+<meta name="robots" content="noindex, nofollow">
+{% endblock %}
+{% block metadescription %}{{object.metadescription}}{% endblock %}
+{%block htmlclass%}class="dark"{%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>
+ <div role="main">
+ {{object.body_html|safe}}
+ </div>
+{% endblock %}
diff --git a/templates/details/code.html b/templates/details/code.html
new file mode 100644
index 0000000..8b72a18
--- /dev/null
+++ b/templates/details/code.html
@@ -0,0 +1,52 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Luxagraf | Projects | Code and Other Experiments {% endblock %}
+{%block htmlclass%}class="single"{%endblock%}
+{% block metadescription %}Browser extentsions to block comments on onlineathens.com{% endblock %}
+{% block extrahead %}
+<style>
+article[role="main"] a { color: #b53a04;}
+#ffext, #chrext, #bkmklt {
+ display: block;
+ margin: 20px 0;
+}
+#ffext a, #chrext a, #bkmklt a {
+ padding: 10px 8px 10px 35px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+ border: #d7d7d7 1px solid;
+ background: #f2f2f2;
+ width: auto;
+ font: 11px normal Helvetica, Verdana, sans-serif;
+ text-transform: uppercase;
+}
+#ffext a {
+ background: #f2f2f2 url("{{MEDIA_URL}}img/fficon.jpg") 2px 50% no-repeat;
+}
+#chrext a {
+ background: #f2f2f2 url("{{MEDIA_URL}}img/chricon.jpg") 2px 50% no-repeat;
+}
+#ffext a:hover, #chrext a:hover, #bkmklt a:hover { background-color: #e2e2e2;}
+#bkmklt a {
+ padding: 10px 8px;
+}
+</style>
+{% endblock %}
+{%block bodyid%}id="code"{%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><a href="/projects/" title="luxagraf projects page" itemprop="url"><span itemprop="title">Projects</span></a> &rarr;</li>
+ <li>Code</li>
+ </ul>
+ <article role="main">{% for object in object_list %}
+ <h1>{{object.name}}</h1>
+ <div class="post-body-single">
+ {{object.body_html|smartypants|widont|safe}}
+ </div>{% endfor %}
+ </article>
+
+
+
+{% endblock %}
diff --git a/templates/details/cv.html b/templates/details/cv.html
new file mode 100644
index 0000000..0add257
--- /dev/null
+++ b/templates/details/cv.html
@@ -0,0 +1,144 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Scott Gilbertson - Curriculum Vitæ{%endblock%}
+{% block extrahead%}
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:title" content="Curriculum Vitæ">
+ <meta name="twitter:description" content="luxagraf.net is the personal web site of Scott gilbertson.">
+ <meta name="twitter:site:id" content="9469062">
+ <meta name="twitter:creator:id" content="9469062">
+ <meta property="og:type" content="article"/>
+ <meta property="og:title" content="Scott Gilbertson - Curriculum Vitæ"/>
+ <meta property="og:url" content="http://luxagraf.net/resume/cv"/>
+ <meta property="og:description" content="luxagraf.net is the personal web site of Scott gilbertson.">
+ <meta property="article:author" content="Scott Gilbertson"/>
+ <meta property="og:site_name" content="luxagraf.net"/>
+ <meta property="og:locale" content="en_US"/>
+<style>
+</style>{%endblock%}
+{%block bodyid%}class="resume"{%endblock%}
+{% block primary %}
+<main role="main" id="content">
+<article class="h-resume">
+ <div class="h-card head">
+ <header>
+ <h1 class="p-name">
+ <span class="p-given-name">Scott</span>
+ <span class="p-additional-name hide">Nathan</span>
+ <span class="p-family-name">Gilbertson</span>
+ </h1>
+ <h2>Writer, Photographer, Web Developer</h2>
+ </header>
+ <ul class="contact">
+ <li>
+ <h6>Phone</h6>
+ <span><a class="u-tel" href="tel:706-438-4297">706-438-4297</a></span>
+ </li>
+ <li>
+ <h6>Email</h6>
+ <a class="u-email" href="mailto:sng@luxagraf.net">sng@luxagraf.net</a>
+ </li>
+ <li>
+ <h6>Web</h6>
+ <span><a class="u-url" href="https://luxagraf.net/" rel="me">https://luxagraf.net/</a></span>
+ </li>
+ <li>
+ <h6>LinkedIn</h6>
+ <span><a class="u-url" href="https://www.linkedin.com/in/luxagraf" rel="me">luxagraf</a></span>
+ </li>
+ </ul>
+ </div>
+ <div class="profile">
+ <h3>Profile</h3>
+ <p class="p-summary">I am a writer, producer and web developer based in Athens, GA. Clients include Wired, Webmonkey, Ars Technica, Pioneer and Boost Mobile, among others. I wrote for Wired.com&#8217;s Webmonkey.com for 13 years and served as head editor for three. I&#8217;ve been developing on the web and writing about web development for nearly two decades. For an up-to-date list of recent articles, please browse <a href="/resume/pubs/">the publications list</a>.</p>
+ </div>
+
+ <div id="skills">
+ <h3>Skills</h3>
+
+ <h2><a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Writing">Writing</a></h2>
+ <p>Freelance writer, producer, journalist, editor and hand model at places like Wired, Ars Technica, Budget Travel. I&#8217;ve written blogs, features, news items, ad copy, technical documentation, tutorials, how-tos, wikis and probably other things I&#8217;ve forgotten about. I also served as editor-in-chief of Webmonkey.com.</p>
+
+ <h2><a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Web_development">Web Development</a></h2>
+ <p>Expert front-end engineer in <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Web_standards">standards-based web development</a> using <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/HTML"><abbr title="Hypertext Markup Language">HTML</abbr></a>, <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets"><abbr title="Cascading Style Sheets">CSS</abbr></a>, and high performance <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Responsive_web_design">responsive design</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Progressive_enhancement">progressive enhancement</a>, <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Microformats">microformats</a>, <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/ARIA">ARIA</a> and more. </p>
+ <p>Experience maintaining large-scale web applications and tools with <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Python_(programming_language)">Python</a> and <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/PHP">PHP</a> in conjunction with databases like <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/PostgreSQL">PostgreSQL</a> (including numerous PostGIS, geographic database projects), <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/MySQL">MySQL</a>, <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Sqlite">Sqlite</a>. Experience administering <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Linux">Linux </a> servers and running web servers like <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Apache_HTTP_Server">Apache</a>, and <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Nginx">Nginx</a>.</p>
+ <p>Advocate and evangelist for free software and open web standards technologies such as <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/HTML5">HTML5</a>, related APIs, <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS3</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Responsive_web_design">responsive design</a> (including <a href="https://longhandpixels.net/books/responsive-web-design">a 350 page book on the subject</a>) and <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Progressive_enhancement">progressive enhancement</a>.</p>
+
+ <h2><a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Graphic_design">Photography/Video/Design</a></h2>
+ <p>Good design eye specializing in fluid, clean layouts with strong <a class="p-skill" rel="tag" href="http://en.wikipedia.org/wiki/Typography">typographic style</a>. </p>
+ <p>Photo and video editing using <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Adobe_Photoshop">Photoshop</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/GIMP">GIMP</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Adobe_Photoshop_Lightroom">Lightroom</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Darktable">Darktable</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Final_Cut_Pro">Final Cut Pro</a>, and <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Kdenlive">Kdenlive</a>.</p>
+
+ </div>
+
+ <div class="h-calendar" id="experience">
+ <h3>Experience</h3>
+
+ <div class="p-experience h-event">
+ <h2 class="p-name">Freelance Writer</h2>
+ <ul class="meta">
+ <li>(<time class="dt-start" datetime="2006-06-01">June 2006</time>–Present)</li>
+ </ul>
+ <p class="e-description">Regular contributor to <a class="p-organization-name" href="http://www.wired.com/reviews/author/scott-gilbertson/">Wired</a> (also, <a href="http://www.wired.com/author/luxagraf/">here</a>), <a class="p-organization-name" href="http://www.arstechnica.com/">Ars Technica</a>, <a class="p-organization-name" href="http://theregister.co.uk/Author/1785">The Register</a> and elsewhere, covering Linux, open source software, web browsers and web technology.</p>
+ </div>
+
+ <div class="p-experience h-event">
+ <h2 class="p-name">Web Developer</h2>
+ <ul class="meta">
+ <li>(<time class="dt-start" datetime="2004-06-01">June 2004</time>–Present)
+ </li>
+ </ul>
+ <p class="e-description">Co-founded a small design company where I serve as front-end web developer. I work closely with my co-founder (lead UI/UX), transforming visual designs into valid, semantic HTML/CSS/JavaScript. We specialize in responsive designs and mobile-friendly content that works across browsers and devices. Clients included Wired, Pioneer Entertainment, Boost Mobile, Co-op Credit Union and others.</p>
+ </div>
+
+ <div class="p-experience h-event">
+ <h2 class="p-name">Founder, LongHandPixels Press</h2>
+ <ul class="meta">
+ <li>(<time class="dt-start" datetime="2013-09-01">September 2013</time>–Present)
+ </li>
+ </ul>
+ <p class="e-description">Founded an ebook publishing company, <a href="http://longhandpixels.net/" class="p-organization-name">LongHandPixels Press</a> and launched my first book, <em><a href="https://longhandpixels.net/books/responsive-web-design">Build a Better Web with Responsive Web Design</a></em>. The book covers responsive design, mobile-first web development, progressive enhancement and how modern tools like Sass, Grunt, Node, the Chrome developer tools and more can speed up workflows.
+ </p>
+ </div>
+
+ <div class="p-experience h-event">
+ <h2 class="p-name">Writer/Editor Webmonkey.com</h2>
+ <ul class="meta">
+ <li class="h-location h-card">
+ <a class="u-url p-name" href="http://webmonkey.com">
+ <span class="p-organization-name">Wired.com</span>/
+ <span class="p-organization-unit">Webmonkey.com</span></a>
+ </li>
+ <li>(<time class="dt-start" datetime="2006-06-01">June 2006</time>
+ –<time class="dt-end" datetime="2013-04-31">April 2013</time>)
+ </li>
+ </ul>
+ <p class="e-description">I started contributing tutorials to Wired.com&#8217;s Webmonkey.com in 1999, became a full time employee in 2006 and served as editor-in-chief from 2010 to 2013. I was in charge of creating resources for web developers, including how-to guides on the latest in web standards, code libraries, server technologies and authoring resources. Wrote roughly 3 million words on various web development tools. I also helped cultivate and manage a global team of freelance contributors.</p>
+ </div>
+
+ <div class="p-experience h-event">
+ <h2 class="p-name">Photography and Video Editing</h2>
+ <ul class="meta">
+ <li class="h-location h-card"><a class="u-url p-name" href="http://barrelmanproductions.com"><span class="p-organization-name">barrelmanproductions.com</span></a></li>
+ <li>(<time class="dt-start" datetime="2006-06-01">June 2014</time> - Present)</li>
+ </ul>
+ <p class="e-description">Co-founded a video editing company, Barrelman Productions, specializing in HD aerial video. Portfolio and highlights reel available at <a href="http://www.barrelmanproductions.com/">http://www.barrelmanproductions.com/</a>. Skills include editing in <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Final_Cut_Pro">Final Cut Pro</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Adobe_Photoshop">Photoshop</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Adobe_Photoshop_Lightroom">Lightroom</a> and production of web-optimized video.</p>
+ </div>
+
+ </div>
+ <div class="h-calendar" id="education">
+ <h3>Education</h3>
+
+ <div class="p-education h-event">
+ <h2 class="p-name">Bachelor of Arts, English</h2>
+ <ul class="meta">
+ <li>Undergraduate degree from <a class="p-location h-card" href="http://uga.edu/">The University of <span class="p-locality">Georgia</span>.</a></li>
+ <li>(<time class="dt-start" title="2001-08-01">2001</time>–<time class="dt-end" title="2003-12-16">2003</time>)</li>
+ </ul>
+ </div>
+
+ </div>
+
+</article>
+
+</main>
+{%endblock%}
diff --git a/templates/details/elliottvideos.html b/templates/details/elliottvideos.html
new file mode 100644
index 0000000..6568d64
--- /dev/null
+++ b/templates/details/elliottvideos.html
@@ -0,0 +1,44 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Luxagraf | {{object.title}}{% endblock %}
+{% block extrahead %}
+<style>
+.vidwrap{
+ position: relative;
+ padding-bottom: 56.25%; /* 16:9 */
+ padding-top: 25px;
+ height: 0;
+}
+.vidwrap video,
+.vidwrap embed, {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+
+@media only screen and (max-width : 960px) {
+ .vidwrap video {width: 100%;}
+}
+@media only screen and (min-width : 1024px) {}
+ .vidwrap video {max-width: 960px;}
+}
+
+</style>
+<meta name="robots" content="noindex, nofollow">
+{% endblock %}
+{% block metadescription %}{{object.metadescription}}{% endblock %}
+{%block htmlclass%}class="dark"{%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>
+ <main>
+ <div class="videos">
+ {{object.body_html|safe}}
+ </div>
+ </main>
+{% endblock %}
diff --git a/templates/details/expenses.html b/templates/details/expenses.html
new file mode 100644
index 0000000..a7e5547
--- /dev/null
+++ b/templates/details/expenses.html
@@ -0,0 +1,117 @@
+{% extends 'base.html' %}
+{% load expense_total%}
+{% load typogrify_tags %}
+
+{% block pagetitle %}Luxagraf: Expenses{% endblock %}
+
+{% block metadescription %}Think is costs a lot to drive around North America in a vintage Dodge Travco? Well, judge for yourself, here's how much is costs us.{% endblock %}
+
+{% block primary %}
+ <main role="main">
+ <article class="post--article">
+ <header class="post--header">
+ <h1 class="p-name entry-title post--title">Travco Trip Costs</h1>
+ <time class="dt-updated post--date" datetime="{%now 'c'%}">Last updated: {%now "F"%} <span>{%now "j, Y"%}</span></time>
+ </header>
+ <div id="article" class="post--body post--body--single expense-wrapper">
+ <p>We're extremely fortunate to be able to do this. We afford it because we saved for a long time and I continue to work on the road. At the same time, people are usually surprised at how little it costs to live this way. When we were planning this trip the people who posted their finances were invaluably helpful for calculating how much we needed to make this work so in the spirit of (hopefully, maybe) inspiring someone else to get out there, here is a rough breakdown of costs.</p>
+ <h2>Upfront Costs</h2>
+<table class="expense upfront">
+ <caption>Initial Investments</caption>
+ <thead>
+ <tr>
+ <td>Category</td>
+ <td>Amount</td>
+ </tr>
+ </thead>
+ <tbody>
+
+
+ <tr class="row odd">
+ <td>1969 Dodge Travco Motorhome</td>
+ <td class="cat-value">$7250.00 </td>
+ </tr>
+ <tr class="row even">
+ <td>Travco restoration</td>
+ <td class="cat-value">$3000.00*</td>
+ </tr>
+
+ <tr class="row odd">
+ <td>New wheels and Tires</td>
+ <td class="cat-value">$3041.00</td>
+ </tr>
+ <tr class="row even">
+ <td>Reupholstered Seats</td>
+ <td class="cat-value">$3600.00</td>
+ </tr>
+
+ <tr class="row odd">
+ <td>DMV and insurance (taxes, title, plates -- $25 annual for tags)</td>
+ <td class="cat-value">$125.00 (annual)</td>
+ </tr>
+
+ <tr class="total even">
+ <td>Total</td>
+ <td>$16,891.00</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td colspan="2"><small>*This is a rough estimate, I did not itemize everything, so this figure is give or take $300</small></td>
+ </tr>
+ </tfoot>
+ </table>
+ <p class="end">Here's how much we've spent each month we've spent on the road since we left in April 2017.</p>
+
+ <h2>Monthly Expenses</h2>
+{% regroup object_list by month as expenses_by_month %}{% for expenses in expenses_by_month %}
+<table class="expense">
+ <caption>{{ expenses.grouper.date|date:"F Y" }}</caption>
+ <thead>
+ <tr>
+ <td>Category</td>
+ <td>Amount</td>
+ </tr>
+ </thead>
+ <tbody>
+{% regroup expenses.list|dictsort:"category" by category as category_list %}
+ {% for cat in categories %}
+ <tr class="row {%cycle 'odd' 'even' %}">
+ <td>{{cat.1}} </td>
+ <td class="cat-value">{% for clist in category_list %}{%if clist.grouper == cat.0%}${{clist.list|cat_total}} {%endif %}{%endfor%}</td>
+ </tr>
+{% endfor %}
+ <tr class="total">
+ <td>Total</td>
+ <td>${{category_list|expense_total}}</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td colspan="2">{% for clist in category_list %}{% for item in clist.list %}{% if item.notes %}<small>*{{item.notes|safe}}</small>{%endif %}{%endfor%}{%endfor%}</td>
+ </tr>
+
+ <tr>
+ <td colspan="2"><small>{{ expenses.grouper.notes}}</small></td>
+ </tr>
+ </tfoot>
+ </table>
+{% endfor %}
+ </div>
+ </article>
+ </main>
+{%endblock%}
+
+{% block js %}
+<script type="text/javascript">
+window.onload = function() {
+ //delay loading
+ zchk = document.getElementsByClassName("cat-value");
+ for(var i=0; i<zchk.length; i++) {
+ if (zchk[i].innerHTML == "") {
+ zchk[i].innerHTML = "&ndash;";
+ };
+ }
+}
+</script>
+{%endblock%}
diff --git a/templates/details/fck_digg.html b/templates/details/fck_digg.html
new file mode 100644
index 0000000..4a4be88
--- /dev/null
+++ b/templates/details/fck_digg.html
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+<head>
+ <title>{% block pagetitle %}Luxagraf - Topografical Writings{% endblock %}</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <style>
+ body { text-align: center; }
+ </style>
+</head>
+<body>
+
+<p>Dear Digg,</p>
+
+<p><b>PISS OFF</b></p>
+
+<p>&mdash;your friend, luxagraf</p>
+
+<p style="font-size: 80%; width: 100px;">Framing breaks bookmarking, it breaks copy-and-paste from the location field, it breaks your browser history, it breaks bookmarklets. There&#8217;s nothing OK about it.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/templates/details/figments.html b/templates/details/figments.html
new file mode 100644
index 0000000..ae8dd33
--- /dev/null
+++ b/templates/details/figments.html
@@ -0,0 +1,55 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{%block bodyid%}class="detail"{%endblock%}
+
+
+{%block extrahead%}
+ <meta property="og:type" content="article" />
+ <meta property="og:site_name" content="luxagraf"/>
+ <meta property="og:title" content="{{object.title|safe}}" />
+ <meta property="og:url" content="https://luxagraf.net{{object.get_absolute_url}}" />
+ <meta property="og:description" content="{{object.meta_description}}" />
+ <meta property="article:published_time" content="{{object.pub_date|date:'c'}}" />
+ <meta property="article:author" content="Luxagraf" />
+ <meta property="og:site_name" content="Luxagraf" />
+ <meta property="og:locale" content="en_US" />
+ <meta name="twitter:card" content="summary"/>
+ <meta name="twitter:site" content="@luxagraf"/>
+ <meta name="twitter:creator" content="@luxagraf"/>
+
+{%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><a href="/figments/" title="Figments" itemprop="url"><span itemprop="title">Figments</span></a> &rarr; </li>
+ <li>{{object.title}}</li>
+ </ul>
+ <main>
+ <article class="h-entry hentry post-article{% with object.get_template_name_display as t %}{%if t == "double" or t == "double-dark" %} post--article--double{%endif%}{%endwith%}" itemscope itemType="http://schema.org/Article">
+ <header id="header" class="post--header {% with object.get_template_name_display as t %}{%if t == "double" or t == "double-dark" %}post--header--double{%endif%}{%endwith%}">
+ <h1 class="p-name entry-title post-title" itemprop="headline">{%if object.template_name == 1 or object.template_name == 3 %}{{object.title|smartypants|safe}}{%else%}{{object.title|smartypants|widont|safe}}{%endif%}</h1>
+ <time class="hide dt-published published dt-updated post--date" datetime="{{object.pub_date|date:'c'}}" itemprop="datePublished">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <ul class="downloads">
+ <li class="kindle"><a href="javascript:(%0A%28function%28%29%7Bwindow.baseUrl%3D%27//www.readability.com%27%3Bwindow.readabilityToken%3D%27%27%3Bvar%20s%3Ddocument.createElement%28%27script%27%29%3Bs.setAttribute%28%27type%27%2C%27text/javascript%27%29%3Bs.setAttribute%28%27charset%27%2C%27UTF-8%27%29%3Bs.setAttribute%28%27src%27%2CbaseUrl%2B%27/bookmarklet/send-to-kindle.js%27%29%3Bdocument.documentElement.appendChild%28s%29%3B%7D%29%28%29)">Send to Kindle</a></li>
+ <li class="epub"><a href="{{object.get_absolute_url}}.epub">Download for iBooks (epub)</a></li>
+ </ul>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ </header>
+ <div id="article" class="e-content entry-content post-body post--body--{% with object.template_name as t %}{%if t == 0 or t == 2 %}single{%endif%}{%if t == 1 or t == 3 %}double{%endif%}{%endwith%}" itemprop="articleBody">
+ {{object.body_html|safe|smartypants|widont}}
+ </div>
+ </article>
+ {% with object.get_next_published as next %}
+ {% with object.get_previous_published as prev %}
+ <nav id="page-navigation">
+ <ul>{% if prev%}
+ <li id="prev"><span class="bl">Previous:</span>
+ <a href="{{ prev.get_absolute_url }}" rel="prev" title=" {{prev.title}}">{{prev.title|safe}}</a>
+ </li>{%endif%}{% if next%}
+ <li id="next"><span class="bl">Next:</span>
+ <a href="{{ next.get_absolute_url }}" rel="next" title=" {{next.title}}">{{next.title|safe}}</a>
+ </li>{%endif%}
+ </ul>
+ </nav>{%endwith%}{%endwith%}
+ </main>
+{%endblock%}
diff --git a/templates/details/for-sale-412-holman-ave.html b/templates/details/for-sale-412-holman-ave.html
new file mode 100644
index 0000000..4631522
--- /dev/null
+++ b/templates/details/for-sale-412-holman-ave.html
@@ -0,0 +1,79 @@
+{% load typogrify_tags %}
+<!DOCTYPE html>
+<html class="single house" dir="ltr" lang="en-US">
+
+<head>
+ <title>For Sale: 412 Holman Ave, Athens, GA</title>
+ <meta charset="utf-8">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="description" content=" 412 Holman is 1434 sq ft of bright and cheery Normaltown charm. The house is move in ready with the option to convey washer, dryer and refrigerator. List price: $232,000">
+ <meta name="author" content="Scott Gilbertson">
+ <!--[if IE]>
+ <script src="/js/html5css3ie.min.js"></script>
+ <![endif]-->
+ <link rel="stylesheet" href="/media/screenv8.css" media="screen">
+ <!--[if IE]>
+ <link rel="stylesheet"
+ href="/media/css/ie.css"
+ media="screen">
+ <![endif]-->
+ <link rel="canonical" href="https://412Holman.com/" />
+
+ <meta property="og:type" content="article"/>
+ <meta property="og:title" content="For Sale: 412 Holman Ave, Athens GA"/>
+ <meta property="og:url" content="https://412Holman.com/"/>
+ <meta property="og:description" content="412 Holman is 1434 sq ft of bright and cheery Normaltown charm. The house is move in ready with the option to convey washer, dryer and refrigerator. List price: $232,000"/>
+ <meta property="article:published_time" content="2016-11-10T20:53:01"/>
+ <meta property="article:author" content="Luxagraf"/>
+ <meta property="og:site_name" content="Luxagraf"/>
+ <meta property="og:image" content="https://412Holman.com/media/images/original/2016/2016-10-20_175109_412-Holman-Ave.jpg"/>
+ <meta property="og:locale" content="en_US"/>
+ <meta name="twitter:card" content="summary_large_image"/>
+ <meta name="twitter:description" content="412 Holman is 1434 sq ft of bright and cheery Normaltown charm. The house is move in ready with the option to convey washer, dryer and refrigerator. List price: $232,000"/>
+ <meta name="twitter:title" content="For Sale: 412 Holman Ave, Athens GA"/>
+ <meta name="twitter:site" content="@luxagraf"/>
+ <meta name="twitter:domain" content="luxagraf"/>
+ <meta name="twitter:image:src" content="https://412Holman.com/media/images/original/2016/2016-10-20_175109_412-Holman-Ave.jpg"/>
+ <meta name="twitter:creator" content="@luxagraf"/>
+
+
+
+
+</head>
+<body>
+ <div class="wrapper">
+ <main>
+ <article class="h-entry hentry post--article" itemscope="" itemtype="http://schema.org/Article">
+ <h1 class="">For Sale: 412 Holman Ave, Athens, GA</h1>
+ {{object.body_html|safe|smartypants|widont}}
+ </article>
+ </main>
+ </div>
+<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDwtF_4OvkTKl058VEHrwezMJS2gYXNys4&callback=initMap" type="text/javascript"></script>
+<script type="text/javascript">function initMap(){var myOptions={zoom:17,center:new google.maps.LatLng(33.957897,-83.40810199999999),mapTypeId:google.maps.MapTypeId.ROADMAP};map=new google.maps.Map(document.getElementById("gmap_canvas"),myOptions);marker=new google.maps.Marker({map:map,position:new google.maps.LatLng(33.957897,-83.40810199999999)});infowindow=new google.maps.InfoWindow({content:"<b>For Sale</b><br/>412 Holman Ave<br/>30606 Athens"});google.maps.event.addListener(marker,"click",function(){infowindow.open(map,marker);});infowindow.open(map,marker);}google.maps.event.addDomListener(window,'load',init_map);</script>
+<script src="/media/js/lightbox.js" type="text/javascript"></script>
+<script>var opts={captions:true,onload:function(){var im=document.getElementById("jslghtbx-contentwrapper");var link=im.appendChild(document.createElement('a'))
+link.href=im.firstChild.src;link.innerHTML="open ";link.target="_blank";link.setAttribute('class','p-link');im.appendChild(link);}};var lightbox=new Lightbox();lightbox.load(opts);</script>
+
+
+<!-- Piwik -->
+<script type="text/javascript">
+ var _paq = _paq || [];
+ _paq.push(["setDomains", ["*.412holman.com"]]);
+ _paq.push(['trackPageView']);
+ _paq.push(['enableLinkTracking']);
+ (function() {
+ var u="//stats.luxagraf.net/";
+ _paq.push(['setTrackerUrl', u+'piwik.php']);
+ _paq.push(['setSiteId', '2']);
+ var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
+ g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
+ })();
+</script>
+<noscript><p><img src="//stats.luxagraf.net/piwik.php?idsite=2" style="border:0;" alt="" /></p></noscript>
+<!-- End Piwik Code -->
+
+
+</body>
+</html>
diff --git a/templates/details/gifs.html b/templates/details/gifs.html
new file mode 100644
index 0000000..5519a89
--- /dev/null
+++ b/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">
+{%if object.music_ogg %}<audio id="snd" preload="auto" loop autoplay autobuffer>
+ <source src="{{object.music_ogg.url}}" type="video/ogg"/>
+ <source src="{{object.music_mp3.url}}" />
+</audio>{%endif%}
+<img id="giffy" src="{{object.gif.url}}" alt="{{object.title}}" />
+</body>
+</html>
diff --git a/templates/details/guide.html b/templates/details/guide.html
new file mode 100644
index 0000000..a749083
--- /dev/null
+++ b/templates/details/guide.html
@@ -0,0 +1,65 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+
+{% block pagetitle %}{{object.title|title|smartypants|safe}} | Luxagraf, a travelogue | {% if object.country_name == "United States" %}{{object.location_name|smartypants|safe}}, {{object.state_name}}{%else%}{{object.location_name|smartypants|safe}}, {{object.country_name}}{%endif%}){% endblock %}
+
+{% block metadescription %}{{object.meta_description|striptags|safe}}{% endblock %}
+{%block extrahead%}
+ <link rel="canonical" href="http://luxagraf.net{{object.get_absolute_url}}" />
+ <meta name="ICBM" content="{{object.latitude}}, {{object.longitude}}" />
+ <meta name="geo.position" content="{{object.latitude}}; {{object.longitude}}" />
+ <meta name="geo.placename" content="{% if object.country_name == "United States" %}{{object.location_name|smartypants|safe}}, {{object.state_name}}{%else%}{{object.location_name|smartypants|safe}}, {{object.country_name}}{%endif%}">
+ <meta name="geo.region" content="{{object.country_iso}}{%if object.state_iso != None %}-{{object.state_iso}}{%endif%}">
+{%endblock%}
+{%block htmlclass%}{% with object.template_name as t %}
+class="{%if t == 0 or t == 2 %}single{%endif%}{%if t == 1 or t == 3 %}double{%endif%}{%if t == 2 or t == 3 %} dark{%endif%}"{%endwith%}{%endblock%}
+
+
+{% block primary %}
+ <article role="main">
+ <header>
+ <h1>{%if object.template_name == 1 or object.template_name == 3 %}{{object.title|smartypants|safe}}{%else%}{{object.title|smartypants|widont|safe}}{%endif%}</h1>
+ <aside class="geo bl">
+ <span class="location" itemprop="geo" itemscope itemtype="http://data-vocabulary.org/​Geo">{% if object.country_name == "United States" %}{{object.location_name|smartypants|safe}}, <a href="/writing/united-states/1/" title="travel writing from the United States">{{object.state_name}}</a>{%else%}{{object.location_name|smartypants|safe}}, <a href="/writing/{{object.country_name|slugify}}/1/" title="travel writing from {{object.country_name}}">{{object.country_name}}</a>{%endif%}
+ <meta itemprop="latitude" content="{{object.latitude}}" />
+ <meta itemprop="longitude" content="{{object.longitude}}" /></span>
+ {%comment%} &nbsp;&nbsp;(<a href="" title="">Map</a>, <a href="" title="">Photos</a>){%endcomment%}
+ </aside>
+ <time datetime="{{object.pub_date|date:'c'}}" pubdate>{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ </header>
+ <div class="post-body{% with object.template_name as t %}{%if t == 0 or t == 2 %}-single{%endif%}{%if t == 1 or t == 3 %}-double{%endif%}{%endwith%}">
+ {{object.body_html|smartypants|widont|safe}}
+ </div>{%if object.template_name == 1 %}
+ <div class="clearfix"></div>{%endif%}{%if object.template_name == 3 %}<div class="clearfix"></div>{%endif%}
+ {%comment%}
+ <footer id="post-metadata">
+ <h4 class="hide">About {{object.title|smartypants|safe}}</h4>
+ <p>Posted <time datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F j, Y"}}</time>, from {% if object.country_name == "United States" %}{{object.location_name|smartypants|safe}}, <a href="/writing/united-states/1/" title="travel writing from the United States">{{object.state_name}}</a>{%else%}{{object.location_name|smartypants|safe}}, <a href="/writing/{{object.country_name|slugify}}/1/" title="travel writing from {{object.country_name}}">{{object.country_name}}</a>{%endif%}.
+ Follow along on <a href="http://twitter.com/luxagraf" title="twitter" rel="me">Twitter</a> or by subscribing to the <a href="http://feeds.feedburner.com/luxagraf/blog" title="writing RSS 2.0 feed">RSS Feed</a>. For more about me, see the <a href="/about/" title="about luxagraf">about page</a>. To get in touch please use the <a href="/contact/" title="contact me">contact form</a> or leave a comment below.</p>
+ </footer>
+ {% endcomment %}
+ {% with object.get_next_published as next %}
+ {% with object.get_previous_published as prev %}
+ <nav id="page-navigation">
+ <ul>{% if prev%}
+ <li id="next"><span class="bl">Previous:</span>
+ <a href="{{ prev.get_absolute_url }}" title=" {{prev.title}}">{{prev.title|safe}}</a>
+ </li>{%endif%}{% if next%}
+ <li id="prev"><span class="bl">Next:</span>
+ <a href="{{ next.get_absolute_url }}" title=" {{next.title}}">{{next.title|safe}}</a>
+ </li>{%endif%}
+ </ul>
+ </nav>{%endwith%}{%endwith%}
+
+ {%comment%}
+ <section id="comments">
+ <h4><a class="disqus-link-count" href="{{object.get_absolute_url}}#disqus_thread">Comments</a></h4>
+ <div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/luxagraf/embed.js"></script><noscript><a href="http://luxagraf.disqus.com/?url=ref">View the discussion thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
+ </section>
+ {%endcomment%}
+ </article>
+{% endblock %}
+{% block js %}
+{% with object.template_name as t %}{%if t == 1 or t == 3 %}
+<script src="{{MEDIA_URL}}js/hyphenate.min.js" type="text/javascript"></script>
+{%endif%}{%endwith%}{%endblock%}
diff --git a/templates/details/invoice.html b/templates/details/invoice.html
new file mode 100644
index 0000000..1a812c8
--- /dev/null
+++ b/templates/details/invoice.html
@@ -0,0 +1,97 @@
+{% load typogrify_tags %}
+
+<!DOCTYPE html>
+<html dir="ltr" lang="en-US">
+<head>
+ <title>Invoice for {{object.title}}</title>
+ <meta charset="utf-8">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="description"
+ content="">
+<style>
+ @page {
+ @bottom-left {
+ content: "";
+ }
+ }
+</style>
+</head>
+ {% load static %}
+<body id="quote">
+ <div class="row">
+ <div class="print-box" id="bill-from">
+ <h5>Bill From:</h5>
+ <p>Scott Gilbertson <br />
+ 1806 Dover Dr. <br />
+ Newport Beach, CA 92660<br />
+ 706-438-4297</p>
+ </div>
+ <div class="print-box" id="bill">
+ <h4>Invoice {{invoice_number}}</h4>
+ <h5>Invoice For: {{object.title}}</h5>
+ <h5>Amount Due: ${{total_billed}}</h5>
+ <h5>Sent on: {% now "M j, Y"%}</h5>
+ </div>
+ </div>
+ <div class="row">
+ <div class="print-box" id="bill-to">
+ <h5>Bill To:</h5>
+ <p>Enterprise Data Resources, Inc.<br />
+ 1089 Culpepper Drive <br />
+ Conyers, GA 30094 <br />
+ 707-973-2862</p>
+ </div>
+ </div>
+ </div>
+<table class="quote-table" id="items_list">
+<thead>
+ <caption>Items</caption>
+<tr>
+<th scope="col" class="sortable column-status">
+ <div class="text">Date</div>
+</th>
+<th scope="col" class="sortable column-created_at sorted descending">
+ <div class="text">Time</div>
+</th>
+<th scope="col" class="sortable column-repair_state">
+ <div class="text">Hours</div>
+</th>
+<th scope="col" class="sortable column-order_id">
+ <div class="text">Tasks</div>
+</th>
+</tr>
+</thead>
+<tbody>
+ {% for obj in object_list %}
+ <tr class="row{{forloop.counter}} {% cycle 'odd' 'even' %}">
+ <td class="smfield" data-label="">{{obj.time_start|date:"m/d/y"}}</td>
+ <td class="smfield" data-label="Serial" >{{obj.time_start|date:"g:i"}} - {{obj.time_end|date:"g:i"}}</td>
+ <td class="smfield" data-label="Serial" >{{obj.rounded_total}}</td>
+ <td class="field" data-label="Issue" >{{obj.work_done|capfirst}}</td>
+ </tr>
+ {%endfor%}
+ <tr class="row gap">
+ </tr>
+ <tr class="row2">
+ <td class="field-payment_status"></td>
+ <td class="field-pub_date nowrap"></td>
+ <th class="field-title">Total Hours:</th>
+ <td class="field-status">{{total_hours}}</td>
+ </tr>
+ <tr class="row2">
+ <td class="field-payment_status"></td>
+ <td class="field-pub_date nowrap"></td>
+ <th class="field-title">Rate:</th>
+ <td class="field-status">$100/hr</td>
+ </tr>
+ <tr class="row2">
+ <td class="field-payment_status"></td>
+ <td class="field-pub_date nowrap"></td>
+ <th class="field-title total">Total for Invoice:</th>
+ <td class="field-status total"><b>${{total_billed}}</b></td>
+ </tr>
+</tbody>
+</table>
+<p class="thanks">Thank you for your prompt payment</p>
+</body>
diff --git a/templates/details/jrnl-export.html b/templates/details/jrnl-export.html
new file mode 100644
index 0000000..c3f2aac
--- /dev/null
+++ b/templates/details/jrnl-export.html
@@ -0,0 +1,13 @@
+---
+template: {{object.get_template_name_display}}
+point: {{object.point.y}},{{object.point.x}}
+location: {{object.location}},{{object.location.state}},{{object.location.state.country}}
+image: {{image}}
+desc: {{object.meta_description}}
+dek: {{object.dek|safe}}
+pub_date: {{object.pub_date|date:"c"}}
+slug: {{object.slug}}
+title: {{object.title}}
+---
+
+{{body|safe}} \ No newline at end of file
diff --git a/templates/details/link.html b/templates/details/link.html
new file mode 100644
index 0000000..6ba0619
--- /dev/null
+++ b/templates/details/link.html
@@ -0,0 +1,19 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{%block bodyid%}class="links"{%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><a href="/links/" title="links" itemprop="url"><span itemprop="title">links</span></a> &rarr; </li>
+ </ul>
+ <main>
+ <h2 title="link-title">{{object.title|smartypants|widont|safe}}</h2>
+ <h3>{{object.url|urlize}}</h3>
+ <article class="h-entry hentry post--article book" itemscope itemType="http://schema.org/Article">
+ {{object.render_description|amp|smartypants|safe}}
+ <ul>{% for tag in object.tags.all %}
+ <li><a href="/links/tag/{{tag.slug}}/">{{tag}}</a></li>
+ {%endfor%}</ul>
+ </article>
+</main>
+{% endblock %}
+
diff --git a/templates/details/location.html b/templates/details/location.html
new file mode 100644
index 0000000..8f906e5
--- /dev/null
+++ b/templates/details/location.html
@@ -0,0 +1,92 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load get_image_by_size %}
+{% load get_image_width %}
+
+{% block pagetitle %}{{object.name|title|smartypants|safe}} | Luxagraf, a travelogue | {% if object.country_name == "United States" %}{{object.location_name|smartypants|safe}}, {{object.state_name}}{%else%}{{object.location_name|smartypants|safe}}, {{object.country_name}}{%endif%}){% endblock %}
+
+{% block metadescription %}{{object.meta_description|striptags|safe}}{% endblock %}
+{%block extrahead%}
+ <link rel="canonical" href="http://luxagraf.net{{object.get_absolute_url}}" />
+{%endblock%}
+{%block htmlclass%}{% with object.template_name as t %}
+class="{%if t == 0 or t == 2 %}single{%endif%}{%if t == 1 or t == 3 %}double{%endif%}{%if t == 2 or t == 3 %} dark{%endif%}"{%endwith%}{%endblock%}
+{% block primary %}
+ <article role="main">
+ <header>
+ <h1>{{object.name}}</h1>
+ </header>
+ <div class="post-body">
+ {% for object in entry_list %}
+ {% if forloop.first %}<div class="featured-entry">
+ <article class="h-entry hentry" itemscope itemType="http://schema.org/Article">
+ <div class="post--image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}">{% if object.featured_image %}
+ <img src="{% for size in object.featured_image.sizes.all%}{% if size.name == 'featured_jrnl'%}{% get_image_by_size object.featured_image size.name %}{%endif%}{%endfor%}" alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}" />
+ </a>{%else%}
+ <img src="{{object.get_image_url}}" alt="{{ object.title }}" class="u-photo post-image" itemprop="image" />
+ </a>{%endif%}
+ </div>
+ <h2 class="p-name entry-title post--title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants|widont}}</a></h2>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ <time class="dt-published published dt-updated post--date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p>
+ <span class="p-location h-adr adr post--location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.state.name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.country.slug}}/" title="travel writing from {{object.country.name}}">{{object.country.name}}</a>{%endif%}
+ </span> &ndash;
+ <span class="p-summary entry-summary hyphenate" itemprop="description">
+ {{object.dek|safe}}
+ </span>
+ </p>
+ </article>
+ </div> {% else %}
+ <article class="h-entry hentry {% cycle 'odd' 'even' %} {% cycle 'first' 'second' 'third' %}" itemscope itemType="http://schema.org/Article">
+ <div class="post--image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}"><img src="{{object.get_image_url}}" alt="{{ object.title }}" class="u-photo post-image" itemprop="image" /></a>
+ </div>
+ <h2 class="p-name entry-title post--title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants|widont}}</a></h2>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ <time class="dt-published published dt-updated post--date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p>
+ <span class="p-location h-adr adr post--location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.state.name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.country.slug}}/" title="travel writing from {{object.country.name}}">{{object.country.name}}</a>{%endif%}
+ </span> &ndash;
+ <span class="p-summary entry-summary hyphenate" itemprop="description">
+ {{object.dek|safe}}
+ </span>
+ </p>
+ </article> {% endif %}{% endfor %}
+ </div>
+ {% if entry.field_notes %}<div id="field-notes" class="" >
+ <h3>Field Notes</h3>
+ <ul>{% for entry in entry_list %}
+ {% for obj in entry.field_notes.all %}
+ <li><a href="{% url 'sketches:detail' year=obj.pub_date.year month=obj.pub_date|date:"m" slug=obj.slug %}">{{obj}}</a></li>
+ {% endfor %} {% endfor %}</ul>
+ </div>{% endif %}
+ {% if sighting_list %}
+ <div class="sightings">
+ <h2 class="hed">Birds and Mammals seen {{object}}</h2> {% for object in sighting_list %}
+ <article class="{% cycle 'odd' 'even' %} {% cycle 'first' 'second' 'third' %}">
+ {% if object.ap.image %}<div class="post--image">
+ <a href="{{object.ap.get_absolute_url}}" title="{{object.ap}}">
+ <img src="{% get_image_by_size object.ap.image 'pic5' %}" />
+ </a>
+ </div>{%endif%}
+ <h3 class="post--title"><a href="{{object.ap.get_absolute_url}}" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.ap}}{%endif%}">{{object.ap|safe|smartypants|widont}}</a> (<span class="sci">{{object.ap.scientific_name}}</span>)</h3>
+ <time class="post--date" datetime="{{object.pub_date|date:'c'}}">Seen: {{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p>
+ <span class="hide sighting location place post--location" itemscope itemtype="http://schema.org/Place">Loc:
+ {% if object.country.name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, {{object.state.name}}, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, {{object.country.name}}</a>{%endif%}
+ </span>
+ </p>
+ </article> {% endfor %}
+ </div>{%endif%}
+ {% for entry in entry_list %}{% if forloop.first %}
+ <div id="recommended-reading" >
+ <h3 class="hed">Recommended Reading</h3>
+ <ul>{% endif %}{% for obj in entry.books.all %}
+ <li><a href="{% url 'books:detail' slug=obj.slug %}"><img src="{{obj.get_small_image_url}}" /></a></li>{% endfor %}
+ {% if forloop.last%}</ul>
+ </div>{%endif%}{% endfor %}
+{% endblock %}
diff --git a/templates/details/national-parks.html b/templates/details/national-parks.html
new file mode 100644
index 0000000..84c1205
--- /dev/null
+++ b/templates/details/national-parks.html
@@ -0,0 +1,55 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Luxagraf | Projects | National Parks {% endblock %}
+{% block metadescription %}{% endblock %}
+{% block extrahead %}
+ <script src="/media/js/leaflet-master/leaflet-mod.js"></script>
+ <style>
+ #map-canvas img{ border: none;}
+ </style>
+{% endblock %}
+
+{%block bodyid%}id="projects-detail"{%endblock%}
+
+{% block htmlclass %}class="dark"{% 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><a href="/projects/" title="luxagraf projects page" itemprop="url"><span itemprop="title">Projects</span></a> &rarr;</li>
+ <li>National Parks</li>
+ </ul>
+ <main role="main" class="main--full">
+ <h1 class="hide">The National Parks Project</h1>{% for object in object_list %}
+ <article id="park-{{forloop.counter}}" class="park">
+ <h1 class="park--title">{{object.name}}</h1>
+ <figure class="fig">
+ <img src="{{object.get_image_url}}" alt="{{object.name}}" />
+ <figcaption class="park--legend">
+ <h2 class="park--subtitle">{{object.tag_line}}</h2>
+ <ul class="buttons">
+ <li><a href="{{object.post.get_absolute_url}}" title="{{object.post.title}}">Read Journal</a></li>
+ {%if object.gallery%}<li><a href="{{object.gallery.get_absolute_url}}" title="Photos of {{object.unit_name}}">View Photos</a></li>{%endif%}
+ <li><a href="#" class="map-link" data-latitude="{{object.mpoly.centroid.y}}" data-longitude="{{object.mpoly.centroid.x}}" data-zoom="{{object.zoom}}" data-id="{{object.id}}">Map</a></li>
+ <li><a href="#" id="more-{{forloop.counter}}" class="more-link" title="More about {{object.unit_name}}">More</a></li>
+ </ul>
+ <dl class="meta" style="visibility: hidden;">
+ <dt>Visited:</dt>
+ <dd>{{object.date_visited_begin|date:"m/d/y"}} - {{object.date_visited_end|date:"m/d/y"}}</dd>
+ <dt>State:</dt>
+ <dd>{{object.state}}</dd>
+ <dt>Size:</dt>
+ <dd>{{object.size}} sq miles</dd>
+ <dt>Cost:</dt>
+ <dd>${{object.fee}} / ${{object.camping_fee}} (entry/camping)</dd>
+ <dt>Link:</dt>
+ <dd>{{object.url|urlize}}</dd>
+ </dl>
+ </figcaption>
+ </figure>
+ </article>{% endfor %}
+ </main>
+{% endblock %}
+{% block js %}
+ <script type="text/javascript" src="/media/js/jquery.js"></script>
+ <script type="text/javascript" src="/media/js/natparks.min.js" ></script>
+{% endblock %}
diff --git a/templates/details/note.html b/templates/details/note.html
new file mode 100644
index 0000000..4b52537
--- /dev/null
+++ b/templates/details/note.html
@@ -0,0 +1,106 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load html5_datetime %}
+{% load month_number_to_name %}
+{% block pagetitle %}{{object.title|title|smartypants|safe}} - Luxagraf, Field Notes{% endblock %}
+
+{% block metadescription %}{{object.body_html|striptags|safe|truncatewords:30}}{% endblock %}
+{%block extrahead%}
+ <link rel="canonical" href="http://luxagraf.net{{object.get_absolute_url}}" />
+ <meta name="ICBM" content="{{object.latitude}}, {{object.longitude}}" />
+ <meta name="geo.position" content="{{object.latitude}}; {{object.longitude}}" />
+ <meta name="geo.placename" content="{% if object.location.country.name == "United States" %}{{object.location.name|smartypants|safe}}, {{object.state.name}}{%else%}{{object.location.name|smartypants|safe}}, {{object.country.name}}{%endif%}">
+ <meta name="geo.region" content="{{object.country.iso2}}{%if object.state.code != '' %}-{{object.state.code}}{%endif%}">
+{%endblock%}
+{% block bodyid %}class="notes--permalin detail" id="archive-{% if month %}{{month|month_number_to_name}}{%endif%}{{year}}"{%endblock%}
+{% block breadcrumbs %}<ul class="bl" id="breadcrumbs" itemscope itemtype="http://schema.org/BreadcrumbList">
+ <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
+ <a href="/" title="luxagraf homepage" itemprop="item">
+ <span itemprop="title">Home</span>
+ </a> &rarr;
+ <meta itemprop="position" content="1" />
+ </li>
+ <li itemscope itemtype="http://schema.org/ListItem">
+ <a href="/field-notes/" itemprop="item">
+ <span itemprop="title">Field Notes</span>
+ </a> &rarr;
+ <meta itemprop="position" content="2" />
+ </li>
+ <li itemscope itemtype="http://schema.org/ListItem">
+ <a href="/field-notes/{{object.pub_date|date:"Y"}}/">
+ <span itemprop="title">{{object.pub_date|date:"Y"}}</span>
+ </a> &rarr;
+ <meta itemprop="position" content="3" />
+ </li>
+ <li itemprop="title">Walks</li>
+ </ul>{% endblock %}
+
+{% block primary %}<ul class="bl crumbs" 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><a href="/field-notes/" itemprop="url"><span itemprop="title">Field Notes</span></a> &rarr;</li>
+ <li><a href="/field-notes/{{object.pub_date|date:"Y"}}/">{{object.pub_date|date:"Y"}}</a> &rarr;</li>
+ <li itemprop="title"><a href="/field-notes/{{object.pub_date|date:"Y"}}/{{object.pub_date|date:"m"}}/">{{object.pub_date|date:"F"}}</a></li>
+ </ul>
+ <main role="main">
+ <article class="h-entry post--article">
+ {% if object.title %}<h1 class="p-name note--title">{{object.title|safe|amp|smartypants}}</h1>{%endif%}
+ <div class="note--date-container">
+ {% if object.location %}
+ <p class="p-location h-adr note--location bl" itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo">
+ <span class="p-locality">{{object.location.name|smartypants|safe}}</span>,
+ <span class="p-region">{{object.location.state.name}}</span>,
+ <span class="p-country-name">{{object.location.state.country.name}}</span>
+ <data class="p-latitude" value="{{object.latitude}}"></data>
+ <data class="p-longitude" value="{{object.longitude}}"></data>
+ </p>{% endif %}
+
+ <p class="note--date">
+ <a class="u-url" href="{{object.get_absolute_url}}" rel="bookmark"><time class="dt-published" datetime="{{object.pub_date|html5_datetime}}">{{object.pub_date|date:"F j, Y"}}</time></a>
+ </p>
+ </div>
+ <div class="e-content">
+ {{object.body_html|safe|smartypants}}
+ </div>
+ <span class="p-author h-card">
+ <data class="p-name" value="Scott Gilbertson"></data>
+ <data class="u-url" value="https://luxagraf.net/"></data>
+ </span>
+ <footer>
+ {%comment%}<p class="note--date">
+ <a class="u-url" href="{{object.get_absolute_url}}" rel="bookmark"><time class="dt-published" datetime="{{object.pub_date|html5_datetime}}">{{object.pub_date|date:"F j, Y"}}</time></a>
+ </p>{%endcomment%}
+ {% comment %} {% if object.twitter_id %}
+ <ul class="note--actions">
+ <li><a rel="syndication" class="u-syndication" href="https://twitter.com/luxagraf/status/{{object.twitter_id}}">View on Twitter</a></li>
+ <li>
+ <indie-action do="reply" with="{{SITE_URL}}{{object.get_absolute_url}}"><a href="https://twitter.com/intent/tweet?in_reply_to={{object.twitter_id}}">Reply</a></indie-action>
+ </li>
+ <li>
+ <indie-action do="post" with="{{SITE_URL}}{{object.get_absolute_url}}">
+ <a href="https://twitter.com/intent/retweet?tweet_id={{object.twitter_id}}">Retweet</a>
+ </indie-action>
+ </li>
+ <li>
+ <indie-action do="bookmark" with="{{SITE_URL}}{{object.get_absolute_url}}">
+ <a href="https://twitter.com/intent/favorite?tweet_id={{object.twitter_id}}">Favourite</a>
+ </indie-action>
+ </li>
+ </ul>{% endif %}{% endcomment %}
+ </footer>
+
+
+ {% with object.get_next_published as next %}
+ {% with object.get_previous_published as prev %}
+ <nav id="page-navigation">
+ <ul>{% if prev%}
+ <li rel="previous" id="next"><span class="bl">Previous:</span>
+ <a href="{{ prev.get_absolute_url }}" rel="prev" title=" {{prev.title}}">{{prev.title|safe}}</a>
+ </li>{%endif%}{% if next%}
+ <li rel="next" id="prev"><span class="bl">Next:</span>
+ <a href="{{ next.get_absolute_url }}" rel="next" title=" {{next.title}}">{{next.title|safe}}</a>
+ </li>{%endif%}
+ </ul>
+ </nav>{%endwith%}{%endwith%}
+ </article>
+</main>
+{% endblock %}
diff --git a/templates/details/note.txt b/templates/details/note.txt
new file mode 100644
index 0000000..c5b1c2e
--- /dev/null
+++ b/templates/details/note.txt
@@ -0,0 +1,8 @@
+{{object.title|safe}}
+{% for letter in object.title %}={%endfor%}
+
+ by Scott Gilbertson
+ <{{SITE_URL}}{{object.get_absolute_url}}>
+ {{object.date_created|date:"l, d F Y"}}
+
+{{object.body_markdown|safe}}
diff --git a/templates/details/photo.html b/templates/details/photo.html
new file mode 100644
index 0000000..e477c73
--- /dev/null
+++ b/templates/details/photo.html
@@ -0,0 +1,85 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Luxagraf | {{object.title|title|smartypants|safe}}{% endblock %}
+{% block metadescription %}Luxagraf: Photo, {{object.title}}, Photographer: Scott Gilbertson, Published: {{ object.pub_date|date:"N j, Y" }} {{ object.pub_date|date:"h:i a" }}Camera:{%if object.exif_make%}{%if object.exif_make != 'Canon'%}{{ object.exif_make }}{%endif%} {{ object.exif_model }}{% else %}Canon Powershot S45{%endif%}, Aperture: {%if object.exif_aperture%}{{ object.exif_aperture }}{%else%}Not Recorded{%endif%}, Shutter Speed: {%if object.exif_shutter%}{{ object.exif_shutter }} sec{%else%}Not Recorded{%endif%}, Film Speed: {%if object.exif_iso%}{{ object.exif_iso }} ISO{%else%}Not Recorded{%endif%}.{% endblock %}
+{% block date %}{{object.pub_date|date:"F j, Y"}}<span class="small byline">{% if object.location.state.country.name == "United States" %}{{object.location.name|smartypants|safe}}, {{object.location.state.name}}{%else%}{{object.location.name|smartypants|safe}}, {{object.location.state.country.name}}{%endif%}</span>{% endblock %}
+
+
+
+ {% block title %}{{object.title|smartypants|safe}}{% endblock %}
+
+
+ {% block primary %}
+
+ <a href="http://flickr.com/photos/luxagraf/{{object.flickr_id}}/" title="View {{object.flickr_title}} on Flickr.com"><img class="flickr-image" src="{{ object.get_medium_url }}" alt="{{object.title}}" title="{{object.title}}" /></a>
+ {% if object.description != 'None' %}
+ <p>{{ object.description|smartypants|widont|safe }}</p>
+ {%endif %}
+ <p>Other Sizes: <a href="{{object.get_large_url}}" title="see large image">Large</a> and
+ <a href="http://flickr.com/photo_zoom.gne?id={{object.flickr_id}}&size=o" title="see original image">Original</a></p>
+
+
+
+ <div id="extra">
+
+
+
+ <p>If you enjoy this photo, you can follow along on <a href="http://flickr.com/photos/luxagraf/" title="Flickr" rel="me">Flickr</a>, <a href="http://www.facebook.com/profile.php?id=730956404" title="Facebook" rel="me">Facebook</a>, <a href="http://friendfeed.com/luxagraf" title="friendfeed" rel="me">FriendFeed</a> or by subscribing to the <a href="http://feeds.feedburner.com/luxagraf/blog" title="writing RSS 2.0 feed">RSS Feed</a>. For more about luxagraf, see the <a href="/about/" title="about luxagraf">about page</a>. To get in touch please use the <a href="/contact/" title="contact me">contact form</a> or leave a comment below.</p>
+ </div>
+
+ <div id="nav">
+ <ul>
+ {% if object.get_previous_published%}
+ <li>
+ <a href="{{ object.get_previous_published.get_absolute_url }}" title=" {{object.get_previous_published.title}}">&laquo;previous</a>
+ </li>
+ {%endif%}
+ {% if object.get_next_published%}
+ <li class="next">
+ <a href="{{ object.get_next_published.get_absolute_url }}" title=" {{object.get_next_published.title}}">next&raquo;</a>
+
+ </li>
+ {%endif%}
+ </ul>
+ </div>
+ <h4 id="comment-header">comments</h4>
+ <p>If you'd like to leave a comment, you may do so on <a href="http://flickr.com/photos/luxagraf/{{object.flickr_id}}/" title="leave a comment on Flickr">Flickr</a>.</p>
+
+ {% endblock %}
+
+
+
+{% block sidebar %}
+ <div id="sidebar">
+ <div id="nav">
+ <ul>
+ {% if object.get_previous_published%}
+ <li>
+ <a href="{{ object.get_previous_published.get_absolute_url }}" title=" {{object.get_previous_published.title}}">&laquo; previous</a>
+ </li>
+ {%endif%}
+ {% if object.get_next_published%}
+ <li class="next">
+ <a href="{{ object.get_next_published.get_absolute_url }}" title=" {{object.get_next_published.title}}">next &raquo;</a>
+
+ </li>
+ {%endif%}
+ </ul>
+ </div>
+
+ <div class="blok">
+ <h4>Image Data</h4>
+
+ <dl class="sidebar meta">
+ <dt>Camera:</dt>
+ <dd>{%if object.exif_make%}{%if object.exif_make != 'Canon'%}{{ object.exif_make }}{%endif%} {{ object.exif_model }}{% else %}Canon Powershot S45{%endif%}</dd>
+ <dt>Aperture:</dt>
+ <dd>{%if object.exif_aperture%}{{ object.exif_aperture }}{%else%}Not Recorded{%endif%}</dd>
+ <dt>Shutter Speed:</dt>
+ <dd>{%if object.exif_shutter%}{{ object.exif_shutter }} sec{%else%}Not Recorded{%endif%}</dd>
+ <dt>Film Speed:</dt>
+ <dd>{%if object.exif_iso%}{{ object.exif_iso }} ISO{%else%}Not Recorded{%endif%}</dd>
+ </dl>
+ </div>
+ </div>
+{% endblock %}
diff --git a/templates/details/photo_galleries.html b/templates/details/photo_galleries.html
new file mode 100644
index 0000000..34b7eb4
--- /dev/null
+++ b/templates/details/photo_galleries.html
@@ -0,0 +1,56 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load number_to_word %}
+
+{% block pagetitle %}{{object.set_title}} - Luxagraf, Photos{% endblock %}
+{%block htmlclass%}class="black"{%endblock%}
+
+
+{% block metadescription %}{{object.set_desc|truncatewords:30|smartypants|safe}}{% endblock %}
+
+{% block extrahead %}
+ <script src="/media/js/leaflet-master/leaflet-mod.js"></script>
+ <style>
+ #map-canvas img{ border: none;}
+ </style>
+{% endblock %}
+{%block bodyid%}class="image_gallery"{%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><a href="/photos/" title="See all Photos" itemprop="url"><span>Photos</span></a> &rarr;</li>
+ <li>{{object.set_title}}</li>
+ </ul>
+ <p class="directions">Use left/right arrow keys to navigate through photos</p>
+ <main id="slides" class="image-gallery--wrapper">
+ <h1 class="hide">Photos from {{object.set_title}}</h1>{%for photo in object.photos.all reversed %}
+ <article id="image-{{forloop.counter}}">
+ <h6><a href="#image-{{forloop.counter}}" class="permalink" title="link to this image">&#8734; {{forloop.counter|number_to_word}} &#8734;</a></h6>
+ <figure class="fig"><img src="{{photo.get_local_slideshow_url}}" {% if photo.has_retina %}srcset="{{photo.get_retina_slideshow_url}} 2x"{% endif %} alt="{{photo.title}}" {%if photo.is_portait %}class="v"{%endif%} />
+ <figcaption class="figcaption">
+ <div class="caption" id="id-{{photo.id}}">
+ <h3 class="figcaption--title">{{photo.title}}</h3>
+ <time class="figcaption--date" datetime="{{photo.exif_date|date:'c'}}">{{photo.exif_date|date:"M j, Y"}}</time>
+ <a class="map-link" href="#" data-latitude="{{photo.lat}}" data-longitude="{{photo.lon}}" data-imgid="id-{{photo.id}}">Map</a>
+ {%if photo.description %}<p class="figcaption--desc">{{photo.description|safe}}</p> {%endif%}
+ </div>
+ <div class="photo-options">
+ <p>{% if photo.exif_make == 'Canon'%}{{photo.exif_model}}{%endif%}{% if photo.exif_model == 'DMC-LX2'%}{{photo.exif_make}} {{photo.exif_model}}{%endif%}{%if photo.exif_model == 'DMC-GF1' %}Panasonic GF1 with {%endif%} {%if photo.exif_lens == 'LUMIX G VARIO 14-45/F3.5-5.6' %}<a href="http://amzn.to/azIr5w" title="buy the {{photo.exif_lens}} on Amazon">Lumix 14-45mm lens</a>{%endif%}{%if photo.exif_lens == 'LUMIX G 20/F1.7' %}<a href="http://amzn.to/daMYOm" title="buy the {{photo.exif_lens}} on Amazon">Lumix 20mm prime lens</a>{%endif%}{%if photo.exif_lens == 'LUMIX G VARIO 45-200/F4.0-5.6' %}<a href="http://amzn.to/a9DfV7" title="buy the {{photo.exif_lens}} on Amazon">Lumix 45-200mm lens</a>{%endif%}{%if photo.exif_lens == 'OLYMPUS M.9-18mm F4.0-5.6' %}<a href="http://amzn.to/mGNVkl" title="buy the {{photo.exif_lens}} on Amazon">Olympus 9-18mm lens</a>{%endif%}{%if photo.exif_lens == None %}{%endif%}</p>
+ <p>{{photo.exif_exposure}} sec at f/{{photo.exif_aperture}}, ISO {{photo.exif_iso}} </p>
+ <!--<p><a href="{{photo.flickr_link}}" title="View this Photo on Flickr.com">View on Flickr</a></p>-->
+ <!--<a href="#" class="exif-link" title="{{photo.id}}">Camera</a>-->
+ </div>
+ </figcaption>
+ </figure>
+ </article>
+ {% endfor %}
+ </section>
+{%endblock%}
+
+{% block js %}
+ <script type="text/javascript" src="/media/js/jquery.js"></script>
+ <script type="text/javascript" src="/media/js/jquery.scrollTo-1.4.2-min.js"></script>
+ <script type="text/javascript" src="/media/js/photos.min.js" ></script>
+{% endblock%}
+
+
diff --git a/templates/details/photo_gallery.html b/templates/details/photo_gallery.html
new file mode 100644
index 0000000..be25326
--- /dev/null
+++ b/templates/details/photo_gallery.html
@@ -0,0 +1,67 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load get_image_by_size %}
+{% load number_to_word %}
+
+{% block pagetitle %}{{object.title}} - Luxagraf, Photos{% endblock %}
+{%block htmlclass%}class="black"{%endblock%}
+
+
+{% block metadescription %}{{object.description|truncatewords:30|smartypants|safe}}{% endblock %}
+
+{% block extrahead %}
+ <script src="/media/js/leaflet-master/leaflet-mod.js"></script>
+ <style>
+ #map-canvas img{ border: none;}
+ video { max-width: 50%;}
+ </style>
+{% endblock %}
+{%block bodyid%}class="image_gallery"{%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><a href="/photos/" title="See all Photos" itemprop="url"><span>Photos</span></a> &rarr;</li>
+ <li>{{object.title}}</li>
+ </ul>
+ <p class="directions">Use left/right arrow keys to navigate through photos</p>
+ <main id="slides" class="image-gallery--wrapper">
+ <h1 class="hide">Photos from {{object.title}}</h1>{%for photo in object.images.all reversed %}
+ <article id="image-{{forloop.counter}}">
+ <h6><a href="#image-{{forloop.counter}}" class="permalink" title="link to this image">&#8734; {{forloop.counter|number_to_word}} &#8734;</a></h6>
+ <figure class="fig">
+ {% if not photo.is_video %}<a href="{% get_image_by_size photo "original" %}">{%endif%}
+ {% if photo.is_video %}<video src="{% get_image_by_size photo "original" %}" controls>
+ Your browser does not support the <code>video</code> element.
+ </video>
+ {% else %}
+ <img sizes="(max-width: 1140px) 100vw, (min-width: 1141px) 1140px"
+ srcset="{% for size in photo.sizes.all %}{%spaceless%}
+ {% get_image_by_size photo size.width %} {{size.width}}w{% if forloop.last%}"{%else%},{%endif%}{%endspaceless%} {%endfor%}
+ {% for size in photo.sizes.all %}{%spaceless%}{% if size.width > 720 and size.width < 2000 %}src="{% get_image_by_size photo size.width %}"{%endif%}{%endspaceless%}{%endfor%} alt="{% if photo.alt %}{{photo.alt}}{%else%}{{photo.title}}{%endif%}" p="{{photo.is_portait}}" {%if photo.is_portait %}class="v"{%endif%} >
+ {%endif%}{% if not photo.is_video %}</a>{%endif%}
+ <figcaption class="figcaption">
+ <div class="caption" id="id-{{photo.id}}">
+ <h3 class="figcaption--title">{{photo.title}}</h3>
+ <time class="figcaption--date" datetime="{{photo.exif_date|date:'c'}}">{{photo.exif_date|date:"M j, Y"}}</time>
+ {% if object.is_public %}{%if object.latitude %}<a class="map-link" href="#" data-latitude="{{photo.latitude}}" data-longitude="{{photo.longitude}}" data-imgid="id-{{photo.id}}">Map</a>{%endif%}{%endif%}
+ {%if photo.caption%}<p class="figcaption--desc">{{photo.caption|safe}}</p> {%endif%}
+ </div>
+ <div class="photo-options">
+ {% if object.is_public %}<p>{% if photo.exif_make == 'Canon'%}{{photo.exif_model}}{%endif%}{% if photo.exif_model == 'DMC-LX2'%}{{photo.exif_make}} {{photo.exif_model}}{%endif%}{%if photo.exif_model == 'DMC-GF1' %}Panasonic GF1 with {%endif%} {%if photo.exif_lens == 'LUMIX G VARIO 14-45/F3.5-5.6' %}Lumix 14-45mm lens{%endif%}{%if photo.exif_lens == 'LUMIX G 20/F1.7' %}Lumix 20mm lens{%endif%}{%if photo.exif_lens == 'LUMIX G VARIO 45-200/F4.0-5.6' %}Lumix 45-200mm lens{%endif%}{%if photo.exif_lens == 'OLYMPUS M.9-18mm F4.0-5.6' %}Olympus 9-18mm lens{%endif%}{%if photo.exif_lens == None %}{%endif%}</p>
+ <p>{{photo.exif_exposure}} sec at f/{{photo.exif_aperture}}, ISO {{photo.exif_iso}} </p>{% endif %}
+ <!--<p><a href="{{photo.flickr_link}}" title="View this Photo on Flickr.com">View on Flickr</a></p>-->
+ <!--<a href="#" class="exif-link" title="{{photo.id}}">Camera</a>-->
+ </div>
+ </figcaption>
+ </figure>
+ </article>
+ {% endfor %}
+{%endblock%}
+
+{% block js %}
+ <script type="text/javascript" src="/media/js/jquery.js"></script>
+ <script type="text/javascript" src="/media/js/jquery.scrollTo-1.4.2-min.js"></script>
+ <script type="text/javascript" src="/media/js/photos.min.js" ></script>
+{% endblock%}
+
+
diff --git a/templates/details/pubs.html b/templates/details/pubs.html
new file mode 100644
index 0000000..c196a8d
--- /dev/null
+++ b/templates/details/pubs.html
@@ -0,0 +1,23 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+
+{% block pagetitle %}{% endblock %}
+{% block metadescription %}{% endblock %}
+
+{%block htmlclass%}class="detail{%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><a href="/work">Work</a>{% if object.title != "Resume" %} &rarr; {%endif%}</li>
+ {% if object.title != "Resume" %}<li><a href="/work/pubs/">Publications</a></li>{%endif%}
+ </ul>
+ <main>
+ <article>
+ {% if object.title != "Resume" %}<h1 class="post-header">{{object.title|safe|smartypants|widont}}</h1>{% endif %}
+ {% if object.publisher %}<p><i>This article was published in {{object.publisher}}, you can view <a href="{{object.url}}">the original</a> there, complete with graphics, comments and other fun stuff.</i></p>{% endif %}
+ <div class="post-article" style="margin-top: 3em">
+ {{object.body_html|safe|smartypants|widont}}
+ </div>
+ </article>
+ </main>
+ {%endblock%}
diff --git a/templates/details/readme.html b/templates/details/readme.html
new file mode 100644
index 0000000..4d42804
--- /dev/null
+++ b/templates/details/readme.html
@@ -0,0 +1,8 @@
+{% load typogrify_tags %}
+
+ <article role="main">
+ <h1 class="page--title">{{object.title|safe}}</h1>
+ <div class="post--article">
+ {{object.body_html|safe|smartypants|widont}}
+ </div>
+ </article>
diff --git a/templates/details/resume.html b/templates/details/resume.html
new file mode 100644
index 0000000..1608934
--- /dev/null
+++ b/templates/details/resume.html
@@ -0,0 +1,141 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% block pagetitle %}Scott Gilbertson - Curriculum Vitæ{%endblock%}
+{% block extrahead%}
+ <meta name="twitter:card" content="summary">
+ <meta name="twitter:title" content="Resume of Scott Gilbertson">
+ <meta name="twitter:description" content="luxagraf.net is the personal web site of Scott gilbertson.">
+ <meta name="twitter:site:id" content="9469062">
+ <meta name="twitter:creator:id" content="9469062">
+ <meta property="og:type" content="article"/>
+ <meta property="og:title" content="Scott Gilbertson - Resume"/>
+ <meta property="og:url" content="http://luxagraf.net/work/resume/"/>
+ <meta property="og:description" content="luxagraf.net is the personal web site of Scott gilbertson.">
+ <meta property="article:author" content="Scott Gilbertson"/>
+ <meta property="og:site_name" content="luxagraf.net"/>
+ <meta property="og:locale" content="en_US"/>
+<style>
+</style>{%endblock%}
+{%block bodyid%}class="resume"{%endblock%}
+{%block htmlclass %}class="detail"{%endblock%}
+{% block primary %}
+<main role="main" id="content">
+ <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><a href="/work/">Work</a> &rarr; </li>
+ <li>Resume</li>
+ </ul>
+<article class="h-resume">
+ <div class="h-card head">
+ <header>
+ <h1 class="p-name">
+ <span class="p-given-name">Scott</span>
+ <span class="p-additional-name hide">Nathan</span>
+ <span class="p-family-name">Gilbertson</span>
+ </h1>
+ <h2>Writer, Photographer, Web Developer</h2>
+ </header>
+ <ul class="contact">
+ <li>
+ <h6>Phone</h6>
+ <span><a class="u-tel" href="tel:706-438-4297">706-438-4297</a></span>
+ </li>
+ <li>
+ <h6>Email</h6>
+ <a class="u-email" href="mailto:sng@luxagraf.net">sng@luxagraf.net</a>
+ </li>
+ <li>
+ <h6>Web</h6>
+ <span><a class="u-url" href="https://luxagraf.net/" rel="me">https://luxagraf.net/</a></span>
+ </li>
+ <li>
+ <h6>LinkedIn</h6>
+ <span><a class="u-url" href="https://www.linkedin.com/in/luxagraf" rel="me">luxagraf</a></span>
+ </li>
+ </ul>
+ </div>
+ <div class="profile">
+ <h3>Profile</h3>
+ <p class="p-summary">{{resume.profile_html|smartypants|widont|safe}}</p>
+ </div>
+
+ <div id="skills">
+ <h3>Skills</h3>
+ {{resume.skills_html|smartypants|widont|safe}}
+
+ </div>
+
+ <div class="h-calendar" id="experience">
+ <h3>Experience</h3>{% for job in resume.jobs.all %}
+ <div class="p-experience h-event">
+ <h2 class="p-name">{{job.title}}</h2>
+ <ul class="meta">
+ <li><time class="dt-start" datetime="{{job.date_start}}">{{job.date_start|date:"M Y"}}</time>–{% if job.date_end %}<time class="dt-end" datetime="{{job.date_end}}">{{job.date_end|date:"M Y"}}</time>{%else%}<span class="dt-end">present</span>{%endif%}</li>
+ </ul>
+ {% if job.employer %}<p class="p-organization">Employer: {{job.employer}}</p>{%endif%}
+ <p class="e-description">{{job.body_html|safe}}</p>
+ </div>{% endfor %}
+
+ {%comment%}
+ <div class="p-experience h-event">
+ <h2 class="p-name">Web Developer</h2>
+ <ul class="meta">
+ <li>(<time class="dt-start" datetime="2004-06-01">June 2004</time>–Present)
+ </li>
+ </ul>
+ <p class="e-description">Co-founded a small design company where I serve as front-end web developer. I work closely with my co-founder (lead UI/UX), transforming visual designs into valid, semantic HTML/CSS/JavaScript. We specialize in responsive designs and mobile-friendly content that works across browsers and devices. Clients included Wired, Pioneer Entertainment, Boost Mobile, Co-op Credit Union and others.</p>
+ </div>
+
+ <div class="p-experience h-event">
+ <h2 class="p-name">Founder, LongHandPixels Press</h2>
+ <ul class="meta">
+ <li>(<time class="dt-start" datetime="2013-09-01">September 2013</time>–Present)
+ </li>
+ </ul>
+ <p class="e-description">Founded an ebook publishing company, <a href="http://longhandpixels.net/" class="p-organization-name">LongHandPixels Press</a> and launched my first book, <em><a href="https://longhandpixels.net/books/responsive-web-design">Build a Better Web with Responsive Web Design</a></em>. The book covers responsive design, mobile-first web development, progressive enhancement and how modern tools like Sass, Grunt, Node, the Chrome developer tools and more can speed up workflows.
+ </p>
+ </div>
+
+ <div class="p-experience h-event">
+ <h2 class="p-name">Writer/Editor Webmonkey.com</h2>
+ <ul class="meta">
+ <li class="h-location h-card">
+ <a class="u-url p-name" href="http://webmonkey.com">
+ <span class="p-organization-name">Wired.com</span>/
+ <span class="p-organization-unit">Webmonkey.com</span></a>
+ </li>
+ <li>(<time class="dt-start" datetime="2006-06-01">June 2006</time>
+ –<time class="dt-end" datetime="2013-04-31">April 2013</time>)
+ </li>
+ </ul>
+ <p class="e-description">I started contributing tutorials to Wired.com&#8217;s Webmonkey.com in 1999, became a full time employee in 2006 and served as editor-in-chief from 2010 to 2013. I was in charge of creating resources for web developers, including how-to guides on the latest in web standards, code libraries, server technologies and authoring resources. Wrote roughly 3 million words on various web development tools. I also helped cultivate and manage a global team of freelance contributors.</p>
+ </div>
+
+ <div class="p-experience h-event">
+ <h2 class="p-name">Photography and Video Editing</h2>
+ <ul class="meta">
+ <li class="h-location h-card"><a class="u-url p-name" href="http://barrelmanproductions.com"><span class="p-organization-name">barrelmanproductions.com</span></a></li>
+ <li>(<time class="dt-start" datetime="2006-06-01">June 2014</time> - Present)</li>
+ </ul>
+ <p class="e-description">Co-founded a video editing company, Barrelman Productions, specializing in HD aerial video. Portfolio and highlights reel available at <a href="http://www.barrelmanproductions.com/">http://www.barrelmanproductions.com/</a>. Skills include editing in <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Final_Cut_Pro">Final Cut Pro</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Adobe_Photoshop">Photoshop</a>, <a class="p-skill" rel="tag" href="https://en.wikipedia.org/wiki/Adobe_Photoshop_Lightroom">Lightroom</a> and production of web-optimized video.</p>
+ </div>
+ {%endcomment%}
+
+ </div>
+ <div class="h-calendar" id="education">
+ <h3>Education</h3>
+
+ <div class="p-education h-event">
+ <h2 class="p-name">Bachelor of Arts, English</h2>
+ <ul class="meta">
+ <li>Undergraduate degree from <a class="p-location h-card" href="http://uga.edu/">The University of <span class="p-locality">Georgia</span>.</a></li>
+ <li>(<time class="dt-start" title="2001-08-01">2001</time>–<time class="dt-end" title="2003-12-16">2003</time>)</li>
+ </ul>
+ </div>
+
+ </div>
+
+</article>
+
+</main>
+{%endblock%}
diff --git a/templates/details/src_book.html b/templates/details/src_book.html
new file mode 100644
index 0000000..8b92bd2
--- /dev/null
+++ b/templates/details/src_book.html
@@ -0,0 +1,62 @@
+{% extends 'src_base.html' %}
+{% load typogrify_tags %}
+{%block bodyid%}id="book-page"{%endblock%}
+{%block metadescription%}Buy the Book: {{object.title}}{%endblock%}
+{%block extrahead%}
+ <meta property="og:site_name" content="luxagraf:src"/>
+ <meta property="og:locale" content="en_US"/>
+ <meta property="og:type" content="book"/>
+ <meta property="og:title" content="{{object.title}}"/>
+ <meta property="og:url" content="https://luxagraf.net{{object.get_absolute_url}}"/>
+ <meta property="og:description" content="It's time to stop fighting the web's flexible nature. Discover how simple tools like CSS media queries, fluid layouts and flexible media can transform your website from fixed-width failure to responsive success."/>
+ <meta property="book:release_date" content="{{object.pub_date}}"/>
+ <meta property="book:tag" content="Responsive Web Design">
+ <meta property="book:tag" content="Web Development">
+ <meta property="og:image" content="{{object.get_image_url}}"/>
+ <meta name="twitter:card" content="summary_large_image"/>
+ <meta name="twitter:description" content="It's time to stop fighting the web's flexible nature. Discover how simple tools like CSS media queries, fluid layouts and flexible media can transform your website from fixed-width failure to responsive success."/>
+ <meta name="twitter:title" content="{{object.title}}"/>
+ <meta name="twitter:site" content="@luxagraf"/>
+ <meta name="twitter:domain" content="luxagraf"/>
+ <meta name="twitter:image:src" content="{{object.get_image_url}}"/>
+ <meta name="twitter:creator" content="@luxagraf"/>
+{%endblock%}
+{%block pagetitle%}{{object.title}} | Books | luxagraf:src{%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><a href="/src/" title="luxagraf:src" itemprop="url"><span itemprop="title"><code>src</code></span></a> &rarr; </li>
+ <li><a href="/src/books/" title="luxagraf:src books" itemprop="url"><span itemprop="title">Books</span></a> </li>
+ </ul>
+ <main role="main" itemprop="mainEntity" itemscope itemtype="http://schema.org/Book">
+ <h1 class="book-title" itemprop="name">{{object.title|smartypants|widont|safe}}</h1>
+ <div class="book-cover-wrapper"><img src="{{object.get_image_url}}" alt="{{object.title}} cover" /></div>
+ <div class="meta-cover">
+ <dl class="book-metadata">
+ <dt>Published</dt>
+ <dd>{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></dd>
+ <dt>Last Updated</dt>
+ <dd>{{object.last_updated|date:"F"}} <span>{{object.last_updated|date:"j, Y"}}</span></dd>
+ <dt>Pages</dt>
+ <dd>{{object.pages}}</dd>
+ <dt>Buy it</dt>
+ <dd>{%if object.price_sale < object.price%}<span class="strike">${{object.price|floatformat:"0"}}</span> <span class="alert">${{object.price_sale|floatformat:"0"}}</span>{%else%}${{object.price|floatformat:"0" }}{%endif%}</dd>
+ </dl>
+ </div>
+ <div class="paypal-form-wrapper">
+<script src="https://gumroad.com/js/gumroad.js"></script>
+<a target="_blank" class="gumroad-button btn-top" href="https://gum.co/rwd-b">Buy it Now</a>
+{%comment%}{{paypal_form.render}}{%endcomment%}
+ </div>
+ <div class="highlights">
+ <h4>Learn Responsive Design:</h4>
+ <article class="h-entry hentry post--article book" itemscope itemType="http://schema.org/Article">
+ {{object.body_html|safe|amp|smartypants}}
+
+<script src="https://gumroad.com/js/gumroad.js"></script>
+<a target="_blank" class="gumroad-button btn-bottom" href="https://gum.co/rwd-b">Buy it Now</a>
+{%comment%}{{paypal_form.render}}{%endcomment%}
+ </article>
+ </div>
+</main>
+{% endblock %}
+
diff --git a/templates/discursive_base.html b/templates/discursive_base.html
new file mode 100644
index 0000000..2b0b0b3
--- /dev/null
+++ b/templates/discursive_base.html
@@ -0,0 +1,83 @@
+{% load static %}<!DOCTYPE html>
+<!--[if lt IE 8]> <html class="lte8"> <![endif]-->
+<!--[if IE 8]> <html class="ie8 lte8"> <![endif]-->
+<!--[if IE 9]> <html class="ie9"> <![endif]-->
+<!--[if !IE]><!--> <html lang="en"><!--<![endif]-->
+<head>
+ <title>{% block pagetitle %}{% endblock %}</title>
+ <meta name="viewport" content="width=device-width">
+ <meta name="description" content="">
+ <meta property="og:description" content="">
+ <meta property="og:site_name" content="">
+ <meta property="og:image" content="">
+ <link rel="stylesheet" href="/media/screenv1.css?{%now "u"%}" type="text/css">
+ {% block extrastyles %}{%endblock%}
+ <link rel="icon" type="image/png" href="">
+ <!--<link rel="manifest" href="/webmanifest.json">-->
+ <link rel="apple-touch-icon" sizes="256x256" href="">
+ {%comment%}{% block jsinclude %}{%endblock%}
+ <script async src="/media/js/main.pack.js?{%now "u"%}"></script>{%endcomment%}
+</head>
+<body id="{% block bodyid %}{%endblock%}" class="{% block bodyclass %}{% endblock %}">
+ <div class="head-wrapper">
+ <header>
+ <nav class="left">
+ <ul>
+ <li><a href="/" title="">Home</a></li>
+ </ul>
+ </nav>
+ <div class="logo"></div>
+ <nav class="right {% if request.user.is_anonymous %}nologin{% endif %}">
+ <ul>
+ <li><a href="{% url 'pages:detail' slug='discursive-meditation-history' %}" title="">What is Discursive Meditation?</a></li>
+ <li><a href="{% url 'pages:detail' slug='discursive-meditation-how-to' %}" title="">How Do I Do It?</a></li>{% if not request.user.is_anonymous %}
+ {%comment%}<li><a id="account-menu" href="{% url 'clients:settings' %}" title="">Account</a>
+ <div id="user-menu" class="dropmenu" tabindex="-1">
+ <ul id="user-menu-list" class="list-style-none vertical">
+ <li><a href="/settings/" class="">Account settings</a></li>
+ <li><a href="/plans/" class="">Subscription plans</a></li>
+ </ul>
+ <ul class="menu-divider list-style-none">
+ <li>
+ <form action="/logout/" method="post">{% csrf_token %}
+ <input type="hidden" name="a" value="3">
+ <button type="submit" value="Log out" class="btn-link">Log out</button>
+ </form>
+ </li>
+ </ul>
+ </div>
+ </li>{%endcomment%}{% else %}
+ {%comment %}<li><a href="{% url 'login' %}" title="" id="overlay-trigger" data-element="#js-overlay-content">Login</a></li>
+ <li><a href="{% url 'django_registration_register' %}" title="" class="btn">Get Started</a></li>{%endcomment%}{% endif %}
+ </ul>
+ </nav>
+ </header>
+ </div>
+ {% block color %}{%endblock%}
+ <div class="wrapper">
+ {%comment%}<ul class="breadcrumb" id="breadcrumbs" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
+ <li>
+ <a href="/" title="home" itemprop="url"><span itemprop="title">Home</span></a>
+ </li>
+ {% block breadcrumbs %}{% endblock %}
+ </ul>{%endcomment%}
+{% block content %}
+{% endblock %}
+ </div>
+ <footer>
+ <p>&copy;{%comment%}{% now "Y" %}{%endcomment%}2018 discursivemeditation.com</p>
+ <nav>
+ <ul>
+ <li><a href="{% url 'pages:detail' slug='faq' %}" title="">FAQ</a></li>
+ <li><a href="{% url 'pages:detail' slug='resources' %}" title="">Resources</a></li>
+ </ul>
+ </nav>
+ </footer>
+ {% block extra %}
+ {%endblock%}
+<script>
+document.addEventListener("DOMContentLoaded", function () {
+ {% block jsdomready %}{%endblock%}
+});
+</script>
+</body>
diff --git a/templates/essays/entry_detail.txt b/templates/essays/entry_detail.txt
new file mode 100644
index 0000000..547ce79
--- /dev/null
+++ b/templates/essays/entry_detail.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/templates/essays/essay_detail.html b/templates/essays/essay_detail.html
new file mode 100644
index 0000000..9f8c97b
--- /dev/null
+++ b/templates/essays/essay_detail.html
@@ -0,0 +1,178 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load comments %}
+{%block htmlclass%}class="detail single"{%endblock%}
+{% block pagetitle %}{{object.title|title|smartypants|safe}} - by Scott Gilbertson{% endblock %}
+
+{% block metadescription %}{% autoescape on %}{{object.meta_description|striptags|safe}}{% endautoescape %}{% endblock %}
+{%block extrahead%}
+{% if object.has_code %}
+ <link rel="stylesheet" href="/media/src/solarized.css" type="text/css" media="screen"/>
+{%endif %}
+ <link rel="canonical" href="https://luxagraf.net{{object.get_absolute_url}}" />
+ <meta property="og:type" content="article" />
+ <meta property="og:title" content="{{object.title|safe}}" />
+ <meta property="og:url" content="https://luxagraf.net{{object.get_absolute_url}}" />
+ <meta property="og:description" content="{% if object.meta_description %}{{object.meta_description}}{%else%}{{object.sub_title}}{%endif%}" />
+ <meta property="article:published_time" content="{{object.pub_date|date:'c'}}" />
+ <meta property="article:author" content="Scott Gilbertson" />
+ <meta property="og:site_name" content="Luxagraf" />
+ <meta property="og:image" content="{{self.get_featured_image}}" />
+ <meta property="og:locale" content="en_US" />
+ <meta name="twitter:card" content="summary_large_image"/>
+ <meta name="twitter:description" content="{% if object.meta_description %}{{object.meta_description}}{%else%}{{object.sub_title}}{%endif%}"/>
+ <meta name="twitter:title" content="{{object.title|safe}}"/>
+ <meta name="twitter:site" content="@luxagraf"/>
+ <meta name="twitter:domain" content="luxagraf"/>{% if object.featured_image %}
+ <meta name="twitter:image:src" content="{{object.featured_image.get_image_url}}"/>{%endif%}
+ <meta name="twitter:creator" content="@luxagraf"/>
+{%endblock%}
+
+{%block bodyid %}{% if object.get_post_type_display == 'tools' %}class="src"{% endif %}{%endblock%}
+
+{% block primary %}
+ <main>
+ <article class="h-entry hentry {% with object.get_template_name_display as t %}{%if t == "double" or t == "double-dark" %} post--article--double{%endif%}{%endwith%}" itemscope itemType="http://schema.org/Article">
+ <header id="header" class="post-header {% with object.get_template_name_display as t %}{%if t == "double" or t == "double-dark" %}post--header--double{%endif%}{%endwith%}">
+ <h1 class="p-name entry-title post-title" itemprop="headline">{%if object.template_name == 1 or object.template_name == 3 %}{{object.title|smartypants|safe}}{%else%}{{object.title|smartypants|safe}}{%endif%}</h1>
+ <h2 class="post-subtitle">{{object.sub_title|smartypants|safe}}</h2>
+ <div class="post-linewrapper">
+ {% if object.originally_published_by %}<h4 class="post-source">Originally Published By: <a href="{{object.originally_published_by_url}}" title="View {{object.title}} on {{object.originally_published_by}}">{{object.originally_published_by}}</a></h4>{%endif%}
+ {% if object.location %}<div class="p-location h-adr adr post-location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ <h3 class="h-adr" itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">{% if object.location.country_name == "United States" %}<span class="p-locality locality" itemprop="addressLocality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.location.state_name|safe}}</a>, <span class="p-country-name" itemprop="addressCountry">U.S.</span>{%else%}<span class="p-region" itemprop="addressRegion">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.location.country_slug}}/" title="travel writing from {{object.location.country_name}}"><span itemprop="addressCountry">{{object.location.country_name|safe}}</span></a>{%endif%}</h3>
+ &ndash;&nbsp;<a href="" onclick="showMap({{object.latitude}}, {{object.longitude}}, { type:'point', lat:'{{object.latitude}}', lon:'{{object.longitude}}'}); return false;" title="see a map">Map</a>
+ </div>{%endif%}
+ <time class="dt-published published dt-updated post-date" datetime="{{object.pub_date|date:'c'}}" itemprop="datePublished">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <span class="hide" itemprop="author" itemscope itemtype="http://schema.org/Person">by <a class="p-author h-card" href="/about"><span itemprop="name">Scott Gilbertson</span></a></span>
+ </div>
+ </header>
+ <div id="article" class="e-content entry-content post--body post--body--{% with object.template_name as t %}{%if t == 0 or t == 2 %}single{%endif%}{%if t == 1 or t == 3 %}double{%endif%}{%endwith%} post-essay" itemprop="articleBody">
+ {% if object.preamble %}<div class="afterward">
+ {{object.preamble_html|smartypants|safe}}
+ </div>{%endif%}
+ {{object.body_html|safe|smartypants}}
+ </div>
+ {% if object.afterword_html %}<div class="afterward">
+ <h4>Afterward</h4>
+ {{object.afterword_html|smartypants|safe}}
+ </div>{%endif%}
+ {%if wildlife or object.field_notes.all or object.books.all %}<div class="entry-footer">{%if wildlife %}
+ <aside id="wildlife">
+ <h3>Fauna and Flora</h3>
+ {% regroup wildlife by ap.apclass.get_kind_display as wildlife_list %}
+ <ul>
+ {% for object_list in wildlife_list %}
+ <li class="grouper">{{object_list.grouper}}<ul>
+ {% for object in object_list.list %}
+ <li>{%if object.ap.body_markdown%}<a href="{% url 'sightings:detail' object.ap.slug %}">{{object}}</a>{%else%}{{object}}{%endif%} </li>
+ {% endfor %}</ul>
+ {% endfor %}</ul>
+ </aside>
+ {% endif %}{%if object.field_notes.all %}
+ <aside {% if wildlife %}class="margin-left-none" {%endif%}id="field_notes">
+ <h3>Field Notes</h3>
+ <ul>{% for obj in object.field_notes.all %}
+ <li><a href="{% url 'fieldnotes:detail' year=obj.pub_date.year month=obj.pub_date|date:"m" slug=obj.slug %}">{{obj}}</a></li>
+ {% endfor %}</ul>
+ </aside>{% endif %}
+ {%if object.books.all %}
+ <aside id="recommended-reading" {%if object.field_notes.all and wildlife %}class="rr-clear{%endif%}" >
+ <h3>Recommended Reading</h3>
+ <ul>{% for obj in object.books.all %}
+ <li><a href="{% url 'books:detail' slug=obj.slug %}"><img src="{{obj.get_small_image_url}}" /></a></li>
+ {% endfor %}</ul>
+ </aside>{% endif %}
+ </div>{%endif%}
+ </article>
+
+ {% comment %} <div class="mailing-list--wrapper">
+ <h5>If you enjoyed this, you should join the mailing&nbsp;list&hellip;</h5>
+ {% include 'mailing_list.html' %}
+ </div> {% endcomment %}
+ </main>
+ {% if object.enable_comments %}
+{% get_comment_count for object as comment_count %}
+{%if comment_count > 0 %}
+<p class="comments--header">{{comment_count}} Comment{{ comment_count|pluralize }}</p>
+{% render_comment_list for object %}
+{%endif%}
+<div class="comment--form--wrapper {%if comment_count > 0%}comment-form-border{%endif%}">
+{% render_comment_form for object %}
+</div>
+{% else %}
+<p class="comments--header" style="text-align: center">Sorry, comments have been disabled for this post.</p>
+{%endif%}
+{% endblock %}
+{% block js %}
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+ var leaflet = document.createElement('script');
+ leaflet.src = "/media/js/leaflet-master/leaflet-mod.js";
+ document.body.appendChild(leaflet);
+ var lightbox = document.createElement('script');
+ lightbox.src = "/media/js/lightbox.js";
+ document.body.appendChild(lightbox);
+ leaflet.onload = function(){
+ var detail = document.createElement('script');
+ detail.src = "/media/js/detail.min.js";
+ document.body.appendChild(detail);
+ {% with object.get_template_name_display as t %}{%if t == "single" or t == "single-dark" %}
+ detail.onload = function(){
+ createMap();
+ var open = false;
+ }
+ {%endif%}{%endwith%}
+ }
+
+ lightbox.onload = function() {
+ var opts= {
+ //nextOnClick: false,
+ captions: true,
+ onload: function(){
+ var im = document.getElementById("jslghtbx-contentwrapper");
+ var link = im.appendChild(document.createElement('a'))
+ link.href = im.firstChild.src;
+ link.innerHTML= "open ";
+ link.target = "_blank";
+ link.setAttribute('class', 'p-link');
+ im.appendChild(link);
+ }
+ };
+ var lightbox = new Lightbox();
+ lightbox.load(opts);
+ }
+ {% if object.enable_comments %}
+{% get_comment_count for object as comment_count %}
+{%if comment_count > 0 %}
+ //delay loading of gravatar images using noscript data-hash attribute
+ dataattr = document.getElementsByClassName("datahashloader");
+ for(var i=0; i<dataattr.length; i++) {
+ var c = dataattr[i].parentNode;
+ var img = document.createElement("img");
+ img.src = 'https://images.luxagraf.net/gravcache/' + dataattr[i].getAttribute('data-hash') + '.jpg';
+ img.className += "gravatar";
+ c.insertBefore(img, c.childNodes[3]);
+ }
+{%endif%}
+{%endif%}
+{% if object.has_video %}
+var tester = document.getElementsByClassName("vidauto");
+var wrapper = document.getElementById('wrapper');
+var dist = 100;
+
+window.onscroll = function() {
+ for (var i=0; i<tester.length; i++) {
+ checkVisible(tester[i]) ? tester[i].play() : tester[i].pause();
+ }
+};
+
+function checkVisible(elm) {
+ var rect = elm.getBoundingClientRect();
+ var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
+ return !(rect.bottom < 0 || rect.top - viewHeight >= 0);
+}
+{%endif%}
+
+});
+</script>
+{%endblock%}
diff --git a/templates/essays/essay_list.html b/templates/essays/essay_list.html
new file mode 100644
index 0000000..9c20abe
--- /dev/null
+++ b/templates/essays/essay_list.html
@@ -0,0 +1,28 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+
+{% block pagetitle %}Collected Essays of Scott Gilbertson {% endblock %}
+{% block metadescription %}Collected writing: essays, articles and stories on travel, photography, tools, walking, the natural world and other ephemera.{% 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>Essays</li>
+ </ul>
+ <main role="main" id="essay-archive" class="essay-archive archive-list">
+ <div class="essay-intro">
+ <h2>My various articles and essays collected in one spot.</h2>
+ <p>Topics include travel, writing, photography, free software, culture, and once, Del Taco.</p>
+ <p>Many essays below were previously published in: <em><a href="https://www.wired.com/author/scott-gilbertson/">WIRED</a></em>, <em><a href="https://www.budgettravel.com/article/0902_HTTN_SocialNetwork_5488">Budget Travel</a></em>, <em><a href="https://arstechnica.com/">Ars Technica</a></em>, <em><a href="https://web.archive.org/web/20100904114555/http://one.longshotmag.com/article/going-for-seconds">Longshot Magazine</a>,</em> <em><a href="https://web.archive.org/web/20150506051746/http://1888.center/scott-gilbertson/">The Cost of Paper</a></em> and elsewhere.</a></p>
+ </div>
+ <h1 class="topic-hed">Essays</h1>
+ <ul>{% for object in object_list %}
+ <li class="h-entry hentry" itemscope itemType="http://schema.org/Article">
+ <span class="date dt-published">{{object.pub_date|date:"F Y"}}</span>
+ <a href="{{object.get_absolute_url}}">
+ <h2>{{object.title|safe|smartypants|widont}}</h2>
+ <p class="p-summary">{% if object.sub_title %}{{object.sub_title|safe|smartypants}}{%else%}{{object.metadescription}}{%endif%}</p>
+ </a>
+ </li>
+ {%endfor%}</ul>
+ </main>
+{%endblock%}
diff --git a/templates/fb-feed.xml b/templates/fb-feed.xml
new file mode 100644
index 0000000..1f83170
--- /dev/null
+++ b/templates/fb-feed.xml
@@ -0,0 +1,46 @@
+{%load facebook_processor%}<?xml version="1.0"?>
+<!-- RSS generated by luxagraf.net on Sun, 28 Feb 2016 02:11:10 GMT -->
+<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
+ <channel>
+ <title>Luxagraf.net</title>
+ <link>http://luxagraf.net/</link>
+ <description>Walk Slowly</description>
+ <pubDate>Sat, 27 Feb 2016 22:15:06 GMT</pubDate>
+ <lastBuildDate>Sun, 28 Feb 2016 02:11:10 GMT</lastBuildDate>
+ <language>en-us</language>
+ <generator>luxagraf.net</generator>
+ <docs>http://cyber.law.harvard.edu/rss/rss.html</docs>{% for object in object_list %}{% with object.content_object as object %}
+ <item>
+ <title>{{object.title}}</title>
+ <description>{{object.dek}}</description>
+ <content:encoded><![CDATA[
+ <!doctype html>
+ <html lang="en" prefix="op: http://media.facebook.com/op#">
+ <head>
+ <meta charset="utf-8">
+ <meta property="op:markup_version" content="v1.0">
+ <meta property="fb:article_style" content="default">
+ <link rel="canonical" href="https://luxagraf.net{{object.get_absolute_url}}">
+ </head>
+ <body>
+ <article>
+ <header>
+ <h1>{{object.title}}</h1>
+ <time class="op-published" datetime="{{object.pub_date}}"></time>
+ <time class="op-modified" dateTime="{{object.pub_date}}"></time>
+ <address><a>luxagraf</a></address>
+ </header>
+ {{object.body_html|facebook_processor|safe}}
+ <footer>
+ <small>&copy;{{object.pub_date|date:"Y"}} luxagraf.net</small>
+ </footer>
+ </article>
+ </body>
+ </html>
+ ]]></content:encoded>
+ <pubDate>Wed, 17 Feb 2016 19:11:17 GMT</pubDate>
+ <link>https://luxagraf.net{{object.get_absolute_url}}</link>
+ <guid>https://luxagraf.net{{object.get_absolute_url}}</guid>
+ </item>{%endwith%}{% endfor %}
+ </channel>
+</rss>
diff --git a/templates/feed.xml b/templates/feed.xml
new file mode 100644
index 0000000..44bf670
--- /dev/null
+++ b/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>https://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>sng@luxagraf.net</managingEditor>
+ <webMaster>sng@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>
diff --git a/templates/feeds/blog_description.html b/templates/feeds/blog_description.html
new file mode 100644
index 0000000..29c4f44
--- /dev/null
+++ b/templates/feeds/blog_description.html
@@ -0,0 +1 @@
+{{obj.body_html|safe}} \ No newline at end of file
diff --git a/templates/feeds/links_description.html b/templates/feeds/links_description.html
new file mode 100644
index 0000000..09d5411
--- /dev/null
+++ b/templates/feeds/links_description.html
@@ -0,0 +1 @@
+<img style="float: left; padding: 0 5px 5px 0;"src="http://images.luxagraf.net/magnolia_thumbs/{{obj.screen_url}}" />{{obj.description|safe }} \ No newline at end of file
diff --git a/templates/gis/admin/google.html b/templates/gis/admin/google.html
new file mode 100644
index 0000000..460d28d
--- /dev/null
+++ b/templates/gis/admin/google.html
@@ -0,0 +1,5 @@
+{% extends "gis/admin/openlayers.html" %}
+{% block extrastyle %}{{ block.super }}
+<style type="text/css">v\:* {behavior:url(#default#VML);}</style>
+{% endblock %}
+{% block openlayers %}{% include "gis/admin/google.js" %}{% endblock %} \ No newline at end of file
diff --git a/templates/gis/admin/google.js b/templates/gis/admin/google.js
new file mode 100644
index 0000000..3ecb766
--- /dev/null
+++ b/templates/gis/admin/google.js
@@ -0,0 +1,2 @@
+{% extends "gis/admin/openlayers.js" %}
+{% block base_layer %}new OpenLayers.Layer.Google("Google Base Layer", {'type': G_NORMAL_MAP, 'sphericalMercator' : true});{% endblock %}
diff --git a/templates/gis/admin/openlayers.html b/templates/gis/admin/openlayers.html
new file mode 100644
index 0000000..f4efdcc
--- /dev/null
+++ b/templates/gis/admin/openlayers.html
@@ -0,0 +1,68 @@
+{% block extrastyle %}
+<script>
+function geoFindMe() {
+ var output = document.getElementById("out");
+
+ if (!navigator.geolocation){
+ output.innerHTML = "<p>Geolocation is not supported by your browser</p>";
+ return;
+ }
+
+ function success(position) {
+ var lat = position.coords.latitude;
+ var lon = position.coords.longitude;
+ var proj = new OpenLayers.Projection("EPSG:4326");
+ var point = new OpenLayers.LonLat(lon, lat);
+ var wkt = point.transform(proj, geodjango_point.map.getProjectionObject());
+ var wkttemp = "SRID=3857;POINT(" + wkt.lon + " "+ wkt.lat + ")";
+ geodjango_point.map.setCenter(wkt);
+ var admin_geom = geodjango_point.read_wkt(wkttemp);
+ geodjango_point.layers.vector.addFeatures([admin_geom]);
+ };
+
+ function error() {
+ output.innerHTML = "Unable to retrieve your location";
+ };
+
+
+ navigator.geolocation.getCurrentPosition(success, error);
+}
+</script>
+{% load static %}
+<style type="text/css">
+ #{{ id }}_map { width: {{ map_width }}px; height: {{ map_height }}px; }
+ #{{ id }}_map .aligned label { float:inherit; }
+ #{{ id }}_admin_map { position: relative; vertical-align: top; float: {{ LANGUAGE_BIDI|yesno:"right,left" }}; }
+ {% if not display_wkt %}#{{ id }} { display: none; }{% endif %}
+ .olControlEditingToolbar .olControlModifyFeatureItemActive {
+ background-image: url("{% static "admin/img/gis/move_vertex_on.png" %}");
+ background-repeat: no-repeat;
+ }
+ .olControlEditingToolbar .olControlModifyFeatureItemInactive {
+ background-image: url("{% static "admin/img/gis/move_vertex_off.png" %}");
+ background-repeat: no-repeat;
+ }
+</style>
+<!--[if IE]>
+<style type="text/css">
+ /* This fixes the mouse offset issues in IE. */
+ #{{ id }}_admin_map { position: static; vertical-align: top; }
+ /* `font-size: 0` fixes the 1px border between tiles, but borks LayerSwitcher.
+ Thus, this is disabled until a better fix is found.
+ #{{ id }}_map { width: {{ map_width }}px; height: {{ map_height }}px; font-size: 0; } */
+</style>
+<![endif]-->
+{% endblock %}
+<span id="{{ id }}_admin_map">
+<script type="text/javascript">
+//<![CDATA[
+{% block openlayers %}{% include "gis/admin/openlayers.js" %}{% endblock %}
+//]]>
+</script>
+<div id="{{ id }}_map"{% if LANGUAGE_BIDI %} dir="ltr"{% endif %}></div>
+<div id="out"></div>
+<a href="javascript:{{ module }}.clearFeatures()">Delete all Features</a>
+{% if display_wkt %}<p> WKT debugging window:</p>{% endif %}
+<textarea id="{{ id }}" class="vWKTField required" cols="150" rows="10" name="{{ name }}">{{ wkt }}</textarea>
+<script type="text/javascript">{% block init_function %}{{ module }}.init();{% endblock %}</script>
+</span>
diff --git a/templates/gis/admin/osm.html b/templates/gis/admin/osm.html
new file mode 100644
index 0000000..e27526a
--- /dev/null
+++ b/templates/gis/admin/osm.html
@@ -0,0 +1,2 @@
+{% extends "gis/admin/openlayers.html" %}
+{% block openlayers %}{% include "gis/admin/osm_extra.js" %}{% endblock %}
diff --git a/templates/gis/admin/osm_extra.js b/templates/gis/admin/osm_extra.js
new file mode 100644
index 0000000..478f78c
--- /dev/null
+++ b/templates/gis/admin/osm_extra.js
@@ -0,0 +1,4 @@
+{% extends "gis/admin/openlayers.js" %}
+{% block base_layer %}
+new OpenLayers.Layer.XYZ( "ESRI", "https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/${z}/${y}/${x}", {sphericalMercator: true} );
+{% endblock %}
diff --git a/templates/human_weather.txt b/templates/human_weather.txt
new file mode 100644
index 0000000..677a690
--- /dev/null
+++ b/templates/human_weather.txt
@@ -0,0 +1,7 @@
+{% load f_to_c %}
+Today the high temperature was {{object.temp_max}}F/{{object.temp_max|f_to_c}}C and the low was {{object.temp_min}}F/{{object.temp_min|f_to_c}}C. The mean temp was {{object.temp_mean}}F/{{object.temp_mean|f_to_c}}C. The mean wind speed was {{object.wind_mean}}mph with gusts up to {{object.wind_max}}mph.
+{%if object.rain%}It rained {{object.rain_amount}} inches.{%endif%}
+{%if object.snow%}It snowed {{object.snow_amount}} inches.{%endif%}
+{%if object.hail%}It hailed.{%endif%}
+{%if object.thunder%}It thundered {%endif%}
+{%if object.fog%}There was fog{%endif%}
diff --git a/templates/js/leaflet-providers.js b/templates/js/leaflet-providers.js
new file mode 100644
index 0000000..c339c8b
--- /dev/null
+++ b/templates/js/leaflet-providers.js
@@ -0,0 +1,472 @@
+(function () {
+ 'use strict';
+
+ L.TileLayer.Provider = L.TileLayer.extend({
+ initialize: function (arg, options) {
+ var providers = L.TileLayer.Provider.providers;
+
+ var parts = arg.split('.');
+
+ var providerName = parts[0];
+ var variantName = parts[1];
+
+ if (!providers[providerName]) {
+ throw 'No such provider (' + providerName + ')';
+ }
+
+ var provider = {
+ url: providers[providerName].url,
+ options: providers[providerName].options
+ };
+
+ // overwrite values in provider from variant.
+ if (variantName && 'variants' in providers[providerName]) {
+ if (!(variantName in providers[providerName].variants)) {
+ throw 'No such variant of ' + providerName + ' (' + variantName + ')';
+ }
+ var variant = providers[providerName].variants[variantName];
+ var variantOptions;
+ if (typeof variant === 'string') {
+ variantOptions = {
+ variant: variant
+ };
+ } else {
+ variantOptions = variant.options;
+ }
+ provider = {
+ url: variant.url || provider.url,
+ options: L.Util.extend({}, provider.options, variantOptions)
+ };
+ } else if (typeof provider.url === 'function') {
+ provider.url = provider.url(parts.splice(1, parts.length - 1).join('.'));
+ }
+
+ // replace attribution placeholders with their values from toplevel provider attribution,
+ // recursively
+ var attributionReplacer = function (attr) {
+ if (attr.indexOf('{attribution.') === -1) {
+ return attr;
+ }
+ return attr.replace(/\{attribution.(\w*)\}/,
+ function (match, attributionName) {
+ return attributionReplacer(providers[attributionName].options.attribution);
+ }
+ );
+ };
+ provider.options.attribution = attributionReplacer(provider.options.attribution);
+
+ // Compute final options combining provider options with any user overrides
+ var layerOpts = L.Util.extend({}, provider.options, options);
+ L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
+ }
+ });
+
+ /**
+ * Definition of providers.
+ * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
+ */
+
+ //jshint maxlen:220
+ L.TileLayer.Provider.providers = {
+ OpenStreetMap: {
+ url: 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
+ options: {
+ attribution:
+ '&copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
+ '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'
+ },
+ variants: {
+ Mapnik: {},
+ BlackAndWhite: {
+ url: 'http://{s}.www.toolserver.org/tiles/bw-mapnik/{z}/{x}/{y}.png'
+ },
+ DE: {
+ url: 'http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png'
+ },
+ HOT: {
+ url: 'http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
+ options: {
+ attribution: '{attribution.OpenStreetMap}, Tiles courtesy of <a href="http://hot.openstreetmap.org/" target="_blank">Humanitarian OpenStreetMap Team</a>'
+ }
+ }
+ }
+ },
+ OpenSeaMap: {
+ url: 'http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
+ options: {
+ attribution: 'Map data: &copy; <a href="http://www.openseamap.org">OpenSeaMap</a> contributors'
+ }
+ },
+ Thunderforest: {
+ url: 'http://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png',
+ options: {
+ attribution:
+ '&copy; <a href="http://www.opencyclemap.org">OpenCycleMap</a>, {attribution.OpenStreetMap}',
+ variant: 'cycle'
+ },
+ variants: {
+ OpenCycleMap: 'cycle',
+ Transport: 'transport',
+ Landscape: 'landscape',
+ Outdoors: 'outdoors'
+ }
+ },
+ OpenMapSurfer: {
+ url: 'http://openmapsurfer.uni-hd.de/tiles/{variant}/x={x}&y={y}&z={z}',
+ options: {
+ minZoom: 0,
+ maxZoom: 20,
+ variant: 'roads',
+ attribution: 'Imagery from <a href="http://giscience.uni-hd.de/">GIScience Research Group @ University of Heidelberg</a> &mdash; Map data {attribution.OpenStreetMap}'
+ },
+ variants: {
+ Roads: 'roads',
+ AdminBounds: {
+ options: {
+ variant: 'adminb',
+ maxZoom: 19
+ }
+ },
+ Grayscale: {
+ options: {
+ variant: 'roadsg',
+ maxZoom: 19
+ }
+ }
+ }
+ },
+ MapQuestOpen: {
+ url: 'http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpeg',
+ options: {
+ attribution:
+ 'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a> &mdash; ' +
+ 'Map data {attribution.OpenStreetMap}',
+ subdomains: '1234'
+ },
+ variants: {
+ OSM: {},
+ Aerial: {
+ url: 'http://oatile{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg',
+ options: {
+ attribution:
+ 'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a> &mdash; ' +
+ 'Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency'
+ }
+ }
+ }
+ },
+ MapBox: {
+ url: function (id) {
+ return 'http://{s}.tiles.mapbox.com/v3/' + id + '/{z}/{x}/{y}.png';
+ },
+ options: {
+ attribution:
+ 'Imagery from <a href="http://mapbox.com/about/maps/">MapBox</a> &mdash; ' +
+ 'Map data {attribution.OpenStreetMap}',
+ subdomains: 'abcd'
+ }
+ },
+ Stamen: {
+ url: 'http://{s}.tile.stamen.com/{variant}/{z}/{x}/{y}.png',
+ options: {
+ attribution:
+ 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, ' +
+ '<a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; ' +
+ 'Map data {attribution.OpenStreetMap}',
+ subdomains: 'abcd',
+ minZoom: 0,
+ maxZoom: 20,
+ variant: 'toner'
+ },
+ variants: {
+ Toner: 'toner',
+ TonerBackground: 'toner-background',
+ TonerHybrid: 'toner-hybrid',
+ TonerLines: 'toner-lines',
+ TonerLabels: 'toner-labels',
+ TonerLite: 'toner-lite',
+ Terrain: {
+ options: {
+ variant: 'terrain',
+ minZoom: 4,
+ maxZoom: 18
+ }
+ },
+ TerrainBackground: {
+ options: {
+ variant: 'terrain-background',
+ minZoom: 4,
+ maxZoom: 18
+ }
+ },
+ Watercolor: {
+ options: {
+ variant: 'watercolor',
+ minZoom: 3,
+ maxZoom: 16
+ }
+ }
+ }
+ },
+ Esri: {
+ url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
+ options: {
+ variant: 'World_Street_Map',
+ attribution: 'Tiles &copy; Esri'
+ },
+ variants: {
+ WorldStreetMap: {
+ options: {
+ attribution:
+ '{attribution.Esri} &mdash; ' +
+ 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
+ }
+ },
+ DeLorme: {
+ options: {
+ variant: 'Specialty/DeLorme_World_Base_Map',
+ minZoom: 1,
+ maxZoom: 11,
+ attribution: '{attribution.Esri} &mdash; Copyright: &copy;2012 DeLorme'
+ }
+ },
+ WorldTopoMap: {
+ options: {
+ variant: 'World_Topo_Map',
+ attribution:
+ '{attribution.Esri} &mdash; ' +
+ 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
+ }
+ },
+ WorldImagery: {
+ options: {
+ variant: 'World_Imagery',
+ attribution:
+ '{attribution.Esri} &mdash; ' +
+ 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
+ }
+ },
+ WorldTerrain: {
+ options: {
+ variant: 'World_Terrain_Base',
+ maxZoom: 13,
+ attribution:
+ '{attribution.Esri} &mdash; ' +
+ 'Source: USGS, Esri, TANA, DeLorme, and NPS'
+ }
+ },
+ WorldShadedRelief: {
+ options: {
+ variant: 'World_Shaded_Relief',
+ maxZoom: 13,
+ attribution: '{attribution.Esri} &mdash; Source: Esri'
+ }
+ },
+ WorldPhysical: {
+ options: {
+ variant: 'World_Physical_Map',
+ maxZoom: 8,
+ attribution: '{attribution.Esri} &mdash; Source: US National Park Service'
+ }
+ },
+ OceanBasemap: {
+ options: {
+ variant: 'Ocean_Basemap',
+ maxZoom: 13,
+ attribution: '{attribution.Esri} &mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
+ }
+ },
+ NatGeoWorldMap: {
+ options: {
+ variant: 'NatGeo_World_Map',
+ maxZoom: 16,
+ attribution: '{attribution.Esri} &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
+ }
+ },
+ WorldGrayCanvas: {
+ options: {
+ variant: 'Canvas/World_Light_Gray_Base',
+ maxZoom: 16,
+ attribution: '{attribution.Esri} &mdash; Esri, DeLorme, NAVTEQ'
+ }
+ }
+ }
+ },
+ OpenWeatherMap: {
+ url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png',
+ options: {
+ attribution: 'Map data &copy; <a href="http://openweathermap.org">OpenWeatherMap</a>',
+ opacity: 0.5
+ },
+ variants: {
+ Clouds: 'clouds',
+ CloudsClassic: 'clouds_cls',
+ Precipitation: 'precipitation',
+ PrecipitationClassic: 'precipitation_cls',
+ Rain: 'rain',
+ RainClassic: 'rain_cls',
+ Pressure: 'pressure',
+ PressureContour: 'pressure_cntr',
+ Wind: 'wind',
+ Temperature: 'temp',
+ Snow: 'snow'
+ }
+ },
+ HERE: {
+ /*
+ * HERE maps, formerly Nokia maps.
+ * These basemaps are free, but you need an API key. Please sign up at
+ * http://developer.here.com/getting-started
+ *
+ * Note that the base urls contain '.cit' whichs is HERE's
+ * 'Customer Integration Testing' environment. Please remove for production
+ * envirionments.
+ */
+ url:
+ 'http://{s}.{base}.maps.cit.api.here.com/maptile/2.1/' +
+ 'maptile/{mapID}/{variant}/{z}/{x}/{y}/256/png8?' +
+ 'app_id={app_id}&app_code={app_code}',
+ options: {
+ attribution:
+ 'Map &copy; 1987-2014 <a href="http://developer.here.com">HERE</a>',
+ subdomains: '1234',
+ mapID: 'newest',
+ 'app_id': '<insert your app_id here>',
+ 'app_code': '<insert your app_code here>',
+ base: 'base',
+ variant: 'normal.day',
+ minZoom: 0,
+ maxZoom: 20
+ },
+ variants: {
+ normalDay: 'normal.day',
+ normalDayCustom: 'normal.day.custom',
+ normalDayGrey: 'normal.day.grey',
+ normalDayMobile: 'normal.day.mobile',
+ normalDayGreyMobile: 'normal.day.grey.mobile',
+ normalDayTransit: 'normal.day.transit',
+ normalDayTransitMobile: 'normal.day.transit.mobile',
+ normalNight: 'normal.night',
+ normalNightMobile: 'normal.night.mobile',
+ normalNightGrey: 'normal.night.grey',
+ normalNightGreyMobile: 'normal.night.grey.mobile',
+
+ carnavDayGrey: 'carnav.day.grey',
+ hybridDay: {
+ options: {
+ base: 'aerial',
+ variant: 'hybrid.day'
+ }
+ },
+ hybridDayMobile: {
+ options: {
+ base: 'aerial',
+ variant: 'hybrid.day.mobile'
+ }
+ },
+ pedestrianDay: 'pedestrian.day',
+ pedestrianNight: 'pedestrian.night',
+ satelliteDay: {
+ options: {
+ base: 'aerial',
+ variant: 'satellite.day'
+ }
+ },
+ terrainDay: {
+ options: {
+ base: 'aerial',
+ variant: 'terrain.day'
+ }
+ },
+ terrainDayMobile: {
+ options: {
+ base: 'aerial',
+ variant: 'terrain.day.mobile'
+ }
+ }
+ }
+ },
+ Acetate: {
+ url: 'http://a{s}.acetate.geoiq.com/tiles/{variant}/{z}/{x}/{y}.png',
+ options: {
+ attribution:
+ '&copy;2012 Esri & Stamen, Data from OSM and Natural Earth',
+ subdomains: '0123',
+ minZoom: 2,
+ maxZoom: 18,
+ variant: 'acetate-base'
+ },
+ variants: {
+ basemap: 'acetate-base',
+ terrain: 'terrain',
+ all: 'acetate-hillshading',
+ foreground: 'acetate-fg',
+ roads: 'acetate-roads',
+ labels: 'acetate-labels',
+ hillshading: 'hillshading'
+ }
+ }
+ };
+
+ L.tileLayer.provider = function (provider, options) {
+ return new L.TileLayer.Provider(provider, options);
+ };
+
+ L.Control.Layers.Provided = L.Control.Layers.extend({
+ initialize: function (base, overlay, options) {
+ var first;
+
+ var labelFormatter = function (label) {
+ return label.replace(/\./g, ': ').replace(/([a-z])([A-Z])/g, '$1 $2');
+ };
+
+ if (base.length) {
+ (function () {
+ var out = {},
+ len = base.length,
+ i = 0;
+
+ while (i < len) {
+ if (typeof base[i] === 'string') {
+ if (i === 0) {
+ first = L.tileLayer.provider(base[0]);
+ out[labelFormatter(base[i])] = first;
+ } else {
+ out[labelFormatter(base[i])] = L.tileLayer.provider(base[i]);
+ }
+ }
+ i++;
+ }
+ base = out;
+ }());
+ this._first = first;
+ }
+
+ if (overlay && overlay.length) {
+ (function () {
+ var out = {},
+ len = overlay.length,
+ i = 0;
+
+ while (i < len) {
+ if (typeof overlay[i] === 'string') {
+ out[labelFormatter(overlay[i])] = L.tileLayer.provider(overlay[i]);
+ }
+ i++;
+ }
+ overlay = out;
+ }());
+ }
+ L.Control.Layers.prototype.initialize.call(this, base, overlay, options);
+ },
+ onAdd: function (map) {
+ this._first.addTo(map);
+ return L.Control.Layers.prototype.onAdd.call(this, map);
+ }
+ });
+
+ L.control.layers.provided = function (baseLayers, overlays, options) {
+ return new L.Control.Layers.Provided(baseLayers, overlays, options);
+ };
+}());
+
diff --git a/templates/lib/breadcrumbs.html b/templates/lib/breadcrumbs.html
new file mode 100644
index 0000000..025b8e4
--- /dev/null
+++ b/templates/lib/breadcrumbs.html
@@ -0,0 +1,14 @@
+<nav class="breadcrumbs" itemscope itemtype="http://schema.org/BreadcrumbList">
+ <span class="nav-item" itemprop="item">
+ <a href="/" itemprop="name">Home</a>
+ <meta itemprop="position" content="1" />
+ </span>{% for crumb in breadcrumbs %}{% if crumb_url %}
+ <span class="nav-item" itemprop="item">
+ <a href="{{crumb_url}}" itemprop="name">{{crumb}}</a>
+ <meta itemprop="position" content="{{ forloop.counter|add:"+1" }}" />
+ </span>{% else %}
+ <span class="nav-item" itemprop="item">
+ <span itemprop="name">{{crumb}}</span>
+ <meta itemprop="position" content="2" />
+ </span>{% endif %}{%endfor%}
+ </nav>
diff --git a/templates/lib/breadcrumbs_detail.html b/templates/lib/breadcrumbs_detail.html
new file mode 100644
index 0000000..170c53a
--- /dev/null
+++ b/templates/lib/breadcrumbs_detail.html
@@ -0,0 +1,14 @@
+<ol class="bl" id="breadcrumbs" itemscope itemtype="http://schema.org/BreadcrumbList">
+ <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
+ <a itemprop="item" href="/"><span itemprop="name">Home</span></a> &rarr;
+ <meta itemprop="position" content="1" />
+ </li>
+ {% for crumb in breadcrumbs %}<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">{% if forloop.last %}
+ <span itemprop="item">
+ <span itemprop="name" class="faint">{{crumb}}</span>
+ </span>
+ <meta itemprop="position" content="{{ forloop.counter|add:"+1"}}" />{%else%}
+ <a href="{{crumb_url}}" itemprop="item"><span itemprop="name">{{crumb}}</span></a> &rarr;
+ <meta itemprop="position" content="{{ forloop.counter|add:"+1" }}" />{% endif %}
+ </li>{%endfor%}
+ </ol>
diff --git a/templates/lib/friends_featured_img.html b/templates/lib/friends_featured_img.html
new file mode 100644
index 0000000..999c780
--- /dev/null
+++ b/templates/lib/friends_featured_img.html
@@ -0,0 +1,6 @@
+{% load get_image_by_size %}
+<img sizes="(max-width: 728px) 100vw, (min-width: 729px) 520px"
+ srcset="{% get_image_by_size image 'featured_jrnl'%} 520w, {% get_image_by_size image 'picwide-sm'%} 720w"
+ src="{% get_image_by_size image 'picwide-sm'%}"
+ alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}"
+ style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;max-width:94%; border:40px solid #f4f2f0;" />
diff --git a/templates/lib/img_archive.html b/templates/lib/img_archive.html
new file mode 100644
index 0000000..4ff8e8a
--- /dev/null
+++ b/templates/lib/img_archive.html
@@ -0,0 +1,7 @@
+{% load get_image_by_size %}
+{% get_image_by_size image 'featured_jrnl' as featured %}
+<img sizes="(max-width: 728px) 100vw, (min-width: 729px) 520px"
+ srcset="{{featured}} 520w, {%get_image_by_size image 'picwide-sm'%} 720w"
+ src="{{featured}}"
+ alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}"
+ {% if not nolightbox %}data-jslghtbx="{{image.get_image_by_size}}" data-jslghtbx-group="group" {% if caption%}data-jslghtbx-caption="{{image.caption}}"{%endif%}{%endif%}>
diff --git a/templates/lib/img_blok.html b/templates/lib/img_blok.html
new file mode 100644
index 0000000..2d0e947
--- /dev/null
+++ b/templates/lib/img_blok.html
@@ -0,0 +1,9 @@
+{% load get_image_by_size %}
+{% if caption or exif or image.photo_credit_source %}
+<figure{%if not is_cluster %} class="blokwide"{%endif%}>{%else%}{%if not is_cluster %}<div class="blokwide">{%endif%}{%endif%}
+ <a itemscope itemtype="http://schema.org/ImageObject" href="{%get_image_by_size image "original"%} " title="view larger image">
+ <img class="u-photo" itemprop="contentUrl" sizes="(max-width: 1439px) 100vw, (min-width: 1440px) 1440px" srcset="{% for size in image.sizes.all%}{% get_image_by_size image size.slug %} {{size.width}}w{% if forloop.last%}"{%else%}, {%endif%}{%endfor%}{% for size in image.sizes.all%}{%if not forloop.first and not forloop.last%} src="{% get_image_by_size image size.slug %}"{%endif%}{%endfor%} alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}" data-jslghtbx="{%get_image_by_size image "original"%}" data-jslghtbx-group="group" {% if caption%}data-jslghtbx-caption="{{image.caption}}"{%endif%}>
+ </a>
+{% if caption or exif or image.photo_credit_source %}<figcaption>{% endif %}{% if caption %}{{image.caption|safe}}{% endif %}{% if exif %} | <small>Camera: {{image.exif_make}} {{image.exif_model}} with {{image.exif_lens}}</small>{% endif %}{% if image.photo_credit_source %}{%if caption or exif %} | {%endif%}image by {% if image.photo_credit_url %}<a href="{{image.photo_credit_url}}" itemprop="author">{%endif%}{{image.photo_credit_source}}{% if image.photo_credit_url %}</a>{%endif%}{%endif%}{% if caption or exif or image.photo_credit_source %}</figcaption>
+</figure>{%else%}{%if not is_cluster %}</div>{%endif%}
+{% endif %}
diff --git a/templates/lib/img_cluster.html b/templates/lib/img_cluster.html
new file mode 100644
index 0000000..9e7d8a3
--- /dev/null
+++ b/templates/lib/img_cluster.html
@@ -0,0 +1,6 @@
+{% load get_image_by_size %}{% if caption or exif %}<figure {%if cluster_class != "picwide"%}class="{{cluster_class}}"{%endif%}>{%endif%}
+ <a href="{%get_image_by_size image "original"%}" title="view larger image {% if image.photo_credit_source%}(photo by {{image.photo_credit_source}}){%endif%}">
+ <img class="{% if caption or exif %}{%else%}{%if cluster_class != "picwide"%}{{cluster_class}}{%endif%}{%endif%} {%if extra%}{{extra}}{%endif%}" {%if cluster_class == "picwide"%} sizes="(max-width: 1439px) 100vw, (min-width: 1440px) 1440px" srcset="{% for size in image.sizes.all%}{% get_image_by_size image size.slug %} {{size.width}}w{% if forloop.last%}"{%else%}, {%endif%}{%endfor%}{% for size in image.sizes.all%}{%if not forloop.first and not forloop.last%} src="{% get_image_by_size image size.slug%}"{%endif%}{%endfor%}{%else%} src="{% get_image_by_size image cluster_class %}"{%endif%} alt="{%if image.alt %}{{image.alt}}{%else%}{{image.title}}{%endif%} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}"></a>
+{% if caption or exif %}<figcaption>{% endif %}{% if caption %}{{image.caption|safe}}{% endif %}{% if exif %} | <small>Camera: {{image.exif_make}} {{image.exif_model}} with {{image.exif_lens}}</small>{% endif %}{% if caption or exif %}</figcaption>
+</figure>
+{% endif %}
diff --git a/templates/lib/img_pic960.html b/templates/lib/img_pic960.html
new file mode 100644
index 0000000..1915ce6
--- /dev/null
+++ b/templates/lib/img_pic960.html
@@ -0,0 +1,9 @@
+{% load get_image_by_size %}
+{% if caption or exif or image.photo_credit_source %}
+<figure{%if not is_cluster %} class="pic960"{%endif%}>{%else%}{%if not is_cluster %}<div class="pic960">{%endif%}{%endif%}
+ <a itemscope itemtype="http://schema.org/ImageObject" href="{%get_image_by_size image "original"%} " title="view larger image">
+ <img class="u-photo" itemprop="contentUrl" sizes="(max-width: 959px) 100vw, (min-width: 960px) 960px" srcset="{% for size in image.sizes.all%}{% get_image_by_size image size.slug %} {{size.width}}w{% if forloop.last%}"{%else%}, {%endif%}{%endfor%}{% for size in image.sizes.all%}{%if not forloop.first and not forloop.last%} src="{% get_image_by_size image size.slug %}"{%endif%}{%endfor%} alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}" data-jslghtbx="{%get_image_by_size image "original"%}" data-jslghtbx-group="group" {% if caption%}data-jslghtbx-caption="{{image.caption}}"{%endif%}>
+ </a>
+{% if caption or exif or image.photo_credit_source %}<figcaption>{% endif %}{% if caption %}{{image.caption|safe}}{% endif %}{% if exif %} | <small>Camera: {{image.exif_make}} {{image.exif_model}} with {{image.exif_lens}}</small>{% endif %}{% if image.photo_credit_source %}{%if caption or exif %} | {%endif%}image by {% if image.photo_credit_url %}<a href="{{image.photo_credit_url}}" itemprop="author">{%endif%}{{image.photo_credit_source}}{% if image.photo_credit_url %}</a>{%endif%}{%endif%}{% if caption or exif or image.photo_credit_source %}</figcaption>
+</figure>{%else%}{%if not is_cluster %}</div>{%endif%}
+{% endif %}
diff --git a/templates/lib/img_picfull.html b/templates/lib/img_picfull.html
new file mode 100644
index 0000000..15dd5f6
--- /dev/null
+++ b/templates/lib/img_picfull.html
@@ -0,0 +1,10 @@
+{% load get_image_by_size %}
+{% load get_image_width %}
+{% if caption or exif or image.photo_credit_source %}
+<figure{%if not is_cluster %} class="picfull"{%endif%}>{%else%}{%if not is_cluster %}<div class="picfull">{%endif%}{%endif%}
+ <a itemscope itemtype="http://schema.org/ImageObject" href="{%get_image_by_size image "original"%} " title="view larger image">
+ <img class="u-photo" itemprop="contentUrl" sizes="(max-width: 750px) 100vw, (min-width: 751) 750px" srcset="{% for size in image.sizes.all%}{% get_image_by_size image size.slug %} {{size.width}}w{% if forloop.last%}"{%else%}, {%endif%}{%endfor%}{% for size in image.sizes.all%}{%if not forloop.first and not forloop.last%} src="{% get_image_by_size image size.slug %}"{%endif%}{%endfor%} alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}" data-jslghtbx="{%get_image_by_size image "original"%}" data-jslghtbx-group="group" {% if caption%}data-jslghtbx-caption="{{image.caption}}"{%endif%}>
+ </a>
+{% if caption or exif or image.photo_credit_source %}<figcaption>{% endif %}{% if caption %}{{image.caption|safe}}{% endif %}{% if exif %} | <small>Camera: {{image.exif_make}} {{image.exif_model}} with {{image.exif_lens}}</small>{% endif %}{% if image.photo_credit_source %}{%if caption or exif %} | {%endif%}image by {% if image.photo_credit_url %}<a href="{{image.photo_credit_url}}" itemprop="author">{%endif%}{{image.photo_credit_source}}{% if image.photo_credit_url %}</a>{%endif%}{%endif%}{% if caption or exif or image.photo_credit_source %}</figcaption>
+</figure>{%else%}{%if not is_cluster %}</div>{%endif%}
+{% endif %}
diff --git a/templates/lib/img_pictall.html b/templates/lib/img_pictall.html
new file mode 100644
index 0000000..7d539e8
--- /dev/null
+++ b/templates/lib/img_pictall.html
@@ -0,0 +1,9 @@
+{% load get_image_by_size %}
+{% load get_image_width %}
+{% if caption %}
+<figure class="picfull">{%endif%}
+<a href="{%get_image_by_size image "original"%} " title="view larger image"><img class="picfull" sizes="(max-width: 680px) 100vw, (min-width: 681) 680px" srcset="{% for size in image.sizes.all%}{% get_image_by_size image size.slug %} {% if image.is_portait %}{% get_image_width image size.height %}w{%else%}{{size.width}}w{%endif%}{% if forloop.last%}"{%else%}, {%endif%}{%endfor%}
+ {% for size in image.sizes.all%}{%if forloop.first %} src="{% get_image_by_size image size.slug%}"{%endif%}{%endfor%} alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}" data-jslghtbx="{%get_image_by_size image "original"%}" data-jslghtbx-group="group" {% if caption%}data-jslghtbx-caption="{{image.caption}}"{%endif%}></a>
+{% if caption %}<figcaption>{{image.caption|safe}}</figcaption>
+</figure>
+{% endif %}
diff --git a/templates/lib/img_picwide.html b/templates/lib/img_picwide.html
new file mode 100644
index 0000000..9f98020
--- /dev/null
+++ b/templates/lib/img_picwide.html
@@ -0,0 +1,7 @@
+{% load get_image_by_size %}{% if caption or exif or image.photo_credit_source %}<figure{%if not is_cluster %} class="picwide"{%endif%}>{%else%}{%if not is_cluster %}<div class="picwide">{%endif%}{%endif%}
+ <a itemscope itemtype="http://schema.org/ImageObject" href="{%get_image_by_size image "original"%} " title="view larger image">
+ <img class="u-photo" itemprop="contentUrl" sizes="(max-width: 1439px) 100vw, (min-width: 1440px) 1440px" srcset="{% for size in image.sizes.all%}{% get_image_by_size image size.slug %} {{size.width}}w{% if forloop.last%}"{%else%}, {%endif%}{%endfor%}{% for size in image.sizes.all%}{%if not forloop.first and not forloop.last%} src="{% get_image_by_size image size.slug %}"{%endif%}{%endfor%} alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}" data-jslghtbx="{%get_image_by_size image "original"%}" data-jslghtbx-group="group" {% if caption%}data-jslghtbx-caption="{{image.caption}}"{%endif%}>
+ </a>
+{% if caption or exif or image.photo_credit_source %}<figcaption>{% endif %}{% if caption %}{{image.caption|safe}}{% endif %}{% if exif %} | <small>Camera: {{image.exif_make}} {{image.exif_model}} with {{image.exif_lens}}</small>{% endif %}{% if image.photo_credit_source %}{%if caption or exif %} | {%endif%}image by {% if image.photo_credit_url %}<a href="{{image.photo_credit_url}}" itemprop="author">{%endif%}{{image.photo_credit_source}}{% if image.photo_credit_url %}</a>{%endif%}{%endif%}{% if caption or exif or image.photo_credit_source %}</figcaption>
+</figure>{%else%}{%if not is_cluster %}</div>{%endif%}
+{% endif %}
diff --git a/templates/lib/img_product.html b/templates/lib/img_product.html
new file mode 100644
index 0000000..58dd43e
--- /dev/null
+++ b/templates/lib/img_product.html
@@ -0,0 +1,10 @@
+{% load get_image_by_size %}
+{% load get_image_width %}
+{% if caption or exif or image.photo_credit_source %}
+<figure{%if not is_cluster %} class="picfull"{%endif%}>{%else%}{%if not is_cluster %}<div class="picfull">{%endif%}{%endif%}
+ <a itemscope itemtype="http://schema.org/ImageObject" href="{%get_image_by_size image "original"%} " title="view larger image">
+ <img class="u-photo" itemprop="contentUrl" sizes="(max-width: 750px) 100vw, (min-width: 751) 750px" srcset="{% for size in image.sizes.all%}{% get_image_by_size image size.slug%} {{size.width}}w{% if forloop.last%}"{%else%}, {%endif%}{%endfor%}{% for size in image.sizes.all%}{%if not forloop.first and not forloop.last%} src="{% get_image_by_size image size.slug %}"{%endif%}{%endfor%} alt="{{image.alt}} photographed by {% if image.photo_credit_source %}{{image.photo_credit_source}}{%else%}luxagraf{%endif%}" data-jslghtbx="{%get_image_by_size image "original"%}" data-jslghtbx-group="group" {% if caption%}data-jslghtbx-caption="{{image.caption}}"{%endif%}>
+ </a>
+{% if caption or exif or image.photo_credit_source %}<figcaption>{% endif %}{% if caption %}{{image.caption|safe}}{% endif %}{% if exif %} | <small>Camera: {{image.exif_make}} {{image.exif_model}} with {{image.exif_lens}}</small>{% endif %}{% if image.photo_credit_source %}{%if caption or exif %} | {%endif%}image by {% if image.photo_credit_url %}<a href="{{image.photo_credit_url}}" itemprop="author">{%endif%}{{image.photo_credit_source}}{% if image.photo_credit_url %}</a>{%endif%}{%endif%}{% if caption or exif or image.photo_credit_source %}</figcaption>
+</figure>{%else%}{%if not is_cluster %}</div>{%endif%}
+{% endif %}
diff --git a/templates/locationsold/location_detail.html b/templates/locationsold/location_detail.html
new file mode 100644
index 0000000..334fa9d
--- /dev/null
+++ b/templates/locationsold/location_detail.html
@@ -0,0 +1,104 @@
+{% extends 'base.html' %}
+{% load typogrify_tags %}
+{% load get_image_by_size %}
+{% load get_image_width %}
+{% load pagination_tags %}
+
+{% block pagetitle %}{{object.name|title|smartypants|safe}} | Luxagraf, a travelogue | {% if object.country_name == "United States" %}{{object.location_name|smartypants|safe}}, {{object.state_name}}{%else%}{{object.location_name|smartypants|safe}}, {{object.country_name}}{%endif%}){% endblock %}
+
+{% block metadescription %}{{object.meta_description|striptags|safe}}{% endblock %}
+{%block extrahead%}
+ <link rel="canonical" href="http://luxagraf.net{{object.get_absolute_url}}" />
+{%endblock%}
+{%block bodyid%}id="location" class="archive"{%endblock%}
+{% block primary %}
+ <main>
+ <header>
+ <h1>{{object.name}}</h1>
+ </header>
+
+ <section>
+ <h2 class="">Journal entries from {{object.name}}</h2>
+ <div class="archive-grid">{% for object in entry_list %}
+ <article class="h-entry hentry archive-card" itemscope itemType="http://schema.org/Article">
+ <div class="post-image">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}" class="u-url">{% if object.featured_image %}
+ {% include "lib/img_archive.html" with image=object.featured_image %}
+ {%else%}
+ <img src="{{object.get_image_url}}" alt="{{ object.title }}" class="u-photo post-image" itemprop="image" />{%endif%}</a>
+ </div>
+ <h2 class="p-name entry-title post-title" itemprop="headline"><a href="{{object.get_absolute_url}}" class="u-url" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.title}}{%endif%}">{{object.title|safe|smartypants|widont}}</a></h2>
+ <p class="p-author author hide" itemprop="author"><span class="byline-author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Scott Gilbertson</span></span></p>
+ <time class="dt-published published dt-updated post-date" datetime="{{object.pub_date|date:'c'}}">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <p class="post-summary">
+ <span class="p-location h-adr adr post-location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.location.country_name == "United States" %}<span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.location.state_name}}</a>, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.location.country_slug}}/" title="travel writing from {{object.location.country_name}}">{{object.location.country_name}}</a>{%endif%}
+ </span> &ndash;
+ <span class="p-summary" itemprop="description">
+ {{object.dek|safe}}
+ </span>
+ </p>
+ </article> {% endfor %}
+ </div>
+ </section>
+
+
+
+
+
+
+
+ {% if notes_list %}<section id="field-notes" class="essay-archive archive-list">
+ <h3>Field Notes</h3>
+ <ul class="fancy-archive-list">{% for object in notes_list %}
+ <li class="h-entry hentry" itemscope itemType="http://schema.org/Article">
+ <a href="{{object.get_absolute_url}}" class="u-url">
+ {% if object.featured_image %}<div class="circle-img-wrapper"><img src="{{object.featured_image.get_thumbnail_url}}" alt="{{object.featured_image.alt}}" class="u-photo" /></div>{%endif%}
+ <span class="date dt-published">{{object.pub_date|date:"F d, Y"}}</span>
+ <a href="{{object.get_absolute_url}}">
+ <h2>{{object.title|safe|smartypants|widont}}</h2>
+ {% if object.subtitle %}<h3 class="p-summary">{{object.subtitle|safe|smartypants|widont}}</h3>{%endif%}
+ </a>
+ {% if object.location %}<h4 class="p-location h-adr post-location" itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo">
+ <span class="p-locality">{{object.location.name|smartypants|safe}}</span>,
+ <span class="p-region">{{object.location.state_name}}</span>,
+ <span class="p-country-name">{{object.location.country_name}}</span>
+ <data class="p-latitude" value="{{object.latitude}}"></data>
+ <data class="p-longitude" value="{{object.longitude}}"></data>
+ </h4>{% endif %}
+ </li>
+ {%endfor%}</ul>
+ </section>{% endif %}
+
+
+
+ {% if sighting_list %}
+ <section class="sightings dialogue-grid">
+ <h2>Birds and Mammals seen {{object}}</h2> {% for object in sighting_list %}
+ <article class="archive-card">{% if object.ap.image%}
+ <div class="post--image">
+ <a href="{{object.ap.get_absolute_url}}" title="{{object.ap}}">
+ {% include "lib/img_archive.html" with image=object.ap.image %}
+ </a>
+ </div>{% endif %}
+ <h2 class="post-title"><a href="{{object.ap.get_absolute_url}}" title="{%if object.title_keywords%}{{object.title_keywords}}{%else%}{{object.ap}}{%endif%}">{{object.ap|safe|smartypants|widont}}</a> (<span class="sci">{{object.ap.scientific_name}}</span>)</h2>
+ <time class="post-date" datetime="{{object.pub_date|date:'c'}}">Last Seen: {{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <div class="post-summary">
+ <span class="post-location" itemscope itemtype="http://schema.org/Place">
+ {% if object.country_name == "United States" %}<span class="p-locality locality">{{object.location_name|smartypants|safe}}</span>, {{object.state_name}}, <span class="p-country-name">U.S.</span>{%else%}<span class="p-region">{{object.location_name|smartypants|safe}}</span>, {{object.country_name}}</a>{%endif%}
+ </span>
+ </div>
+ </article> {% endfor %}
+ </section>{%endif%}
+
+ {% comment %}
+ {% for entry in book_list %}{% if forloop.first %}
+ <div id="recommended-reading" >
+ <h3 class="hed">Recommended Reading</h3>
+ <ul>{% endif %}{% for obj in entry.books.all %}
+ <li><a href="{% url 'books:detail' slug=obj.slug %}"><img src="{{obj.get_small_image_url}}" /></a></li>{% endfor %}
+ {% if forloop.last%}</ul>
+ </div>{%endif%}{% endfor %}
+ {% endcomment %}
+ </main>
+{% endblock %}
diff --git a/templates/mailing_list.html b/templates/mailing_list.html
new file mode 100644
index 0000000..50ce183
--- /dev/null
+++ b/templates/mailing_list.html
@@ -0,0 +1,13 @@
+{% load typogrify_tags %}
+<!-- Begin MailChimp Signup Form -->
+<div class="mailing-list">
+<form action="//longhandpixels.us7.list-manage.com/subscribe/post?u=f56776029b67b1c8c712eee00&amp;id=c578a42596" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
+ <label class="form--label" for="mce-EMAIL">Your Email:</label>
+ <div class="form--flex-container">
+ <input type="email" value="" name="EMAIL" class="form--input user-field required email" id="mce-EMAIL" placeholder="jane@doe.com">
+ <div class="response" id="mce-error-response" style="display:none"></div>
+ <div class="response" id="mce-success-response" style="display:none"></div>
+ <input type="submit" value="Join" name="subscribe" id="mc-embedded-subscribe" class="btn">
+</div>
+</form>
+</div>
diff --git a/templates/newsletter/common.html b/templates/newsletter/common.html
new file mode 100644
index 0000000..20ac822
--- /dev/null
+++ b/templates/newsletter/common.html
@@ -0,0 +1,15 @@
+{% load i18n %}
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>{% block title %}{% trans "Newsletter" %}{% endblock title %}</title>
+ {% block header %}
+ {% endblock header %}
+ </head>
+
+ <body>
+ {% block body %}
+ {% endblock body %}
+ </body>
+</html>
diff --git a/templates/newsletter/message/message.html b/templates/newsletter/message/message.html
new file mode 100644
index 0000000..8929b67
--- /dev/null
+++ b/templates/newsletter/message/message.html
@@ -0,0 +1,32 @@
+{% load thumbnail i18n %}<!DOCTYPE html>
+
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>{{ newsletter.title }}: {{ message.title }}</title>
+</head>
+<body>
+ <h1>{{ newsletter.title }}</h1>
+ <h2>{{ message.title }}</h2>
+ {% for article in message.articles.all %}
+ <h3>{{ article.title }}</h3>
+
+ {% thumbnail article.image "200x200" as image %}
+ <img src="http://{{ site.domain }}{{ image.url }}" width="{{ image.width }}" height="{{ image.height }}">
+ {% endthumbnail %}
+
+ <div>{{ article.text|safe }}</div>
+
+ {% if article.url %}
+ <div><a href="{{ article.url }}">{% trans "Read more" %}</a></div>
+ {% endif %}
+ {% endfor %}
+
+ <ul>
+ {% if submission.publish %}
+ <li><a href="http://{{ site.domain }}{{ submission.get_absolute_url }}">{% trans "Read message online" %}</a></li>
+ {% endif %}
+ <li><a href="http://{{ site.domain }}{% url "newsletter_unsubscribe_request" newsletter.slug %}">{% trans "Unsubscribe" %}</a></li>
+ </ul>
+</body>
+</html>
diff --git a/templates/newsletter/message/message.txt b/templates/newsletter/message/message.txt
new file mode 100644
index 0000000..ffaab98
--- /dev/null
+++ b/templates/newsletter/message/message.txt
@@ -0,0 +1,15 @@
+{% load i18n %}++++++++++++++++++++
+
+{{ newsletter.title }}: {{ message.title }}
+
+++++++++++++++++++++
+
+{% for article in message.articles.all %}
+{{ article.title }}
+{{ article.text|striptags|safe }}
+
+{% endfor %}
+
+++++++++++++++++++++
+
+{% trans "Unsubscribe:" %} http://{{ site }}{% url "newsletter_unsubscribe_request" newsletter.slug %}
diff --git a/templates/newsletter/message/message_subject.txt b/templates/newsletter/message/message_subject.txt
new file mode 100644
index 0000000..00aa450
--- /dev/null
+++ b/templates/newsletter/message/message_subject.txt
@@ -0,0 +1 @@
+{{ newsletter.title }} - {{ message.title }} \ No newline at end of file
diff --git a/templates/newsletter/message/subscribe.html b/templates/newsletter/message/subscribe.html
new file mode 100644
index 0000000..088a3d0
--- /dev/null
+++ b/templates/newsletter/message/subscribe.html
@@ -0,0 +1,20 @@
+{% load i18n %}<!DOCTYPE html>
+
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>{% blocktrans with title=newsletter.title %}Subscription to {{ title }}{% endblocktrans %}
+</title>
+</head>
+<body>
+{% blocktrans with name=subscription.name title=newsletter.title domain=site.domain url=subscription.subscribe_activate_url %}Dear {{ name }},
+
+you, or someone in your name requested a subscription to {{ title }}.
+
+If you would like to confirm your subscription, please follow this activation link:
+http://{{ domain }}{{ url }}
+
+Kind regards,{% endblocktrans %}
+{{ newsletter.sender }}
+</body>
+</html>
diff --git a/templates/newsletter/message/subscribe.txt b/templates/newsletter/message/subscribe.txt
new file mode 100644
index 0000000..1f334f2
--- /dev/null
+++ b/templates/newsletter/message/subscribe.txt
@@ -0,0 +1,9 @@
+{% load i18n %}{% blocktrans with name=subscription.name title=newsletter.title domain=site.domain url=subscription.subscribe_activate_url %}Dear {{ name }},
+
+you, or someone in your name requested a subscription to {{ title }}.
+
+If you would like to confirm your subscription, please follow this activation link:
+http://{{ domain }}{{ url }}
+
+Kind regards,{% endblocktrans %}
+{{ newsletter.sender }}
diff --git a/templates/newsletter/message/subscribe_subject.txt b/templates/newsletter/message/subscribe_subject.txt
new file mode 100644
index 0000000..f61b228
--- /dev/null
+++ b/templates/newsletter/message/subscribe_subject.txt
@@ -0,0 +1 @@
+{% load i18n %}{{ newsletter.title }} - {% trans "Confirm subscription" %}
diff --git a/templates/newsletter/message/unsubscribe.html b/templates/newsletter/message/unsubscribe.html
new file mode 100644
index 0000000..4b1a86b
--- /dev/null
+++ b/templates/newsletter/message/unsubscribe.html
@@ -0,0 +1,19 @@
+{% load i18n %}<!DOCTYPE html>
+
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>{% blocktrans with title=newsletter.title %}Unsubscription from {{ title }}{% endblocktrans %}</title>
+</head>
+<body>
+{% blocktrans with name=subscription.name title=newsletter.title domain=site.domain url=subscription.unsubscribe_activate_url %}Dear {{ name }},
+
+you, or someone in your name requested unsubscription from {{ title }}.
+
+If you would like to confirm your unsubscription, please follow this activation link:
+http://{{ domain }}{{ url }}
+
+Kind regards,{% endblocktrans %}
+{{ newsletter.sender }}
+</body>
+</html>
diff --git a/templates/newsletter/message/unsubscribe.txt b/templates/newsletter/message/unsubscribe.txt
new file mode 100644
index 0000000..ab31fa5
--- /dev/null
+++ b/templates/newsletter/message/unsubscribe.txt
@@ -0,0 +1,9 @@
+{% load i18n %}{% blocktrans with name=subscription.name title=newsletter.title domain=site.domain url=subscription.unsubscribe_activate_url %}Dear {{ name }},
+
+you, or someone in your name requested unsubscription from {{ title }}.
+
+If you would like to confirm your unsubscription, please follow this activation link:
+http://{{ domain }}{{ url }}
+
+Kind regards,{% endblocktrans %}
+{{ newsletter.sender }}
diff --git a/templates/newsletter/message/unsubscribe_subject.txt b/templates/newsletter/message/unsubscribe_subject.txt
new file mode 100644
index 0000000..49c68ef
--- /dev/null
+++ b/templates/newsletter/message/unsubscribe_subject.txt
@@ -0,0 +1 @@
+{% load i18n %}{{ newsletter.title }} - {% trans "Confirm unsubscription" %}
diff --git a/templates/newsletter/message/update.html b/templates/newsletter/message/update.html
new file mode 100644
index 0000000..e46235d
--- /dev/null
+++ b/templates/newsletter/message/update.html
@@ -0,0 +1,19 @@
+{% load i18n %}<!DOCTYPE html>
+
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>{% blocktrans with title=newsletter.title %}Update of subscription to {{ title }}{% endblocktrans %}</title>
+</head>
+<body>
+{% blocktrans with name=subscription.name title=newsletter.title domain=site.domain url=subscription.update_activate_url %}Dear {{ name }},
+
+you, or someone in your name requested updating your personal information for {{ title }}.
+
+To make changes to your information in our database, please follow this activation link:
+http://{{ domain }}{{ url }}
+
+Kind regards,{% endblocktrans %}
+{{ newsletter.sender }}
+</body>
+</html>
diff --git a/templates/newsletter/message/update.txt b/templates/newsletter/message/update.txt
new file mode 100644
index 0000000..aa50b19
--- /dev/null
+++ b/templates/newsletter/message/update.txt
@@ -0,0 +1,9 @@
+{% load i18n %}{% blocktrans with name=subscription.name title=newsletter.title domain=site.domain url=subscription.update_activate_url %}Dear {{ name }},
+
+you, or someone in your name requested updating your personal information for {{ title }}.
+
+To make changes to your information in our database, please follow this activation link:
+http://{{ domain }}{{ url }}
+
+Kind regards,{% endblocktrans %}
+{{ newsletter.sender }}
diff --git a/templates/newsletter/message/update_subject.txt b/templates/newsletter/message/update_subject.txt
new file mode 100644
index 0000000..217d5f6
--- /dev/null
+++ b/templates/newsletter/message/update_subject.txt
@@ -0,0 +1 @@
+{% load i18n %}{{ newsletter.title }} - {% trans "Update information" %}
diff --git a/templates/newsletter/newsletter_detail.html b/templates/newsletter/newsletter_detail.html
new file mode 100644
index 0000000..fe23a1f
--- /dev/null
+++ b/templates/newsletter/newsletter_detail.html
@@ -0,0 +1,30 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter detail" %}{% endblock title %}
+
+{% block body %}
+<table>
+ <tr>
+ <th>{% trans "Newsletter" %} {{ object.title }}</th>
+ </tr>
+ <tr>
+ <td><a href="{% url "newsletter_subscribe_request" object.slug %}">{% trans "Subscribe" %}</a></td>
+ </tr>
+ {% if not user.is_authenticated %}
+ <tr>
+ <td><a href="{% url "newsletter_update_request" object.slug %}">{% trans "Update" %}</a></td>
+ </tr>
+ {% endif %}
+ <tr>
+ <td><a href="{% url "newsletter_unsubscribe_request" object.slug %}">{% trans "Unsubscribe" %}</a></td>
+ </tr>
+ <tr>
+ <td><a href="{% url "newsletter_archive" object.slug %}">{% trans "Archive" %}</a></td>
+ </tr>
+ <tr>
+ <td><a href="../">{% trans "Back to list" %}</a></td>
+ </tr>
+</table>
+{% endblock body %}
diff --git a/templates/newsletter/newsletter_list.html b/templates/newsletter/newsletter_list.html
new file mode 100644
index 0000000..2b48fa2
--- /dev/null
+++ b/templates/newsletter/newsletter_list.html
@@ -0,0 +1,41 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter list" %}{% endblock title %}
+
+{% block body %}
+{% if user.is_authenticated %}
+<form method="POST" action="">
+ {% csrf_token %}
+ {{ formset.management_form }}
+ <table>
+ <tr>
+ <th>{% trans "Newsletter" %}</th>
+ {% if user %}
+ <th>{% trans "Subscribe" %}</th>
+ {% endif %}
+ </tr>
+ {% for form in formset.forms %}
+ <tr>
+ <td>{{ form.id }}{{ form.newsletter }}
+<a href="{% url "newsletter_detail" form.instance.newsletter.slug %}">{{ form.instance.newsletter.title }}</a></td>
+ <td>{{ form.subscribed }}</td>
+ </tr>
+ {% endfor %}
+ </table>
+ <p><input id="id_submit" name="submit" value="{% trans "Update subscriptions" %}" type="submit" /></p>
+</form>
+{% else %}
+<table>
+ <tr>
+ <th>{% trans "Newsletter" %}</th>
+ </tr>
+ {% for newsletter in object_list %}
+ <tr>
+ <td><a href="{% url "newsletter_detail" newsletter.slug %}">{{ newsletter.title }}</a></td>
+ </tr>
+ {% endfor %}
+</table>
+{% endif %}
+{% endblock body %}
diff --git a/templates/newsletter/submission_archive.html b/templates/newsletter/submission_archive.html
new file mode 100644
index 0000000..771b995
--- /dev/null
+++ b/templates/newsletter/submission_archive.html
@@ -0,0 +1,21 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter archive" %}{% endblock title %}
+
+{% block body %}
+<table>
+ <tr>
+ <th>{% trans "Newsletter archive" %} {{ newsletter.title }}</th>
+ </tr>
+ {% for submission in latest %}
+ <tr>
+ <td><a href="{{ submission.get_absolute_url }}">{{ submission }}</a></td>
+ </tr>
+ {% endfor %}
+ <tr>
+ <td><a href="../">{% trans "Back to list" %}</a></td>
+ </tr>
+</table>
+{% endblock body %}
diff --git a/templates/newsletter/subscription_activate.html b/templates/newsletter/subscription_activate.html
new file mode 100644
index 0000000..558013a
--- /dev/null
+++ b/templates/newsletter/subscription_activate.html
@@ -0,0 +1,15 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter" %} {{ newsletter.title }} {{ action }} {% trans "activate" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter" %} {{ newsletter.title }} {{ action }} {% trans "activate" %}</h1>
+
+ <form enctype="multipart/form-data" method="post" action=".">
+ {% csrf_token %}
+ {{ form.as_p }}
+ <p><input id="id_submit" name="submit" value="{% trans "Activate" %}" type="submit" /></p>
+ </form>
+{% endblock body %}
diff --git a/templates/newsletter/subscription_subscribe.html b/templates/newsletter/subscription_subscribe.html
new file mode 100644
index 0000000..a2716a1
--- /dev/null
+++ b/templates/newsletter/subscription_subscribe.html
@@ -0,0 +1,25 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter subscribe" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter subscribe" %} {{ newsletter.title }}</h1>
+
+ {% if error %}
+ <p>{% trans "Due to a technical error we were not able to submit your confirmation email. This could be because your email address is invalid." %}</p>
+
+ {% comment %} Replace the the following dummy with a valid email address and remove this comment.
+
+ <p>{% trans "If the error persists, please don't hesitate to contact us at the following email address:" %} <a href="newsletter@luxagraf.net">newsletter@luxagraf.net</a></p>
+
+ {% endcomment %}
+ {% else %}
+ <form enctype="multipart/form-data" method="post" action=".">
+ {% csrf_token %}
+ {{ form.as_p }}
+ <p><input id="id_submit" name="submit" value="{% trans "Subscribe" %}" type="submit" /></p>
+ </form>
+ {% endif %}
+{% endblock body %}
diff --git a/templates/newsletter/subscription_subscribe_activated.html b/templates/newsletter/subscription_subscribe_activated.html
new file mode 100644
index 0000000..c8519d7
--- /dev/null
+++ b/templates/newsletter/subscription_subscribe_activated.html
@@ -0,0 +1,11 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter" %} {{ newsletter.title }} {{ action }} {% trans "activate" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter" %} {{ newsletter.title }} {{ action }} {% trans "activate" %}</h1>
+
+ <p>{% trans "Your subscription has successfully been activated." %}</p>
+{% endblock body %}
diff --git a/templates/newsletter/subscription_subscribe_email_sent.html b/templates/newsletter/subscription_subscribe_email_sent.html
new file mode 100644
index 0000000..79eea11
--- /dev/null
+++ b/templates/newsletter/subscription_subscribe_email_sent.html
@@ -0,0 +1,11 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter subscribe" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter subscribe" %} {{ newsletter.title }}</h1>
+
+ <p>{% trans "Your subscription request was successfully received and an activation email has been sent to you. In that email you will find a link which you need to follow in order to activate your subscription." %}</p>
+{% endblock body %}
diff --git a/templates/newsletter/subscription_subscribe_user.html b/templates/newsletter/subscription_subscribe_user.html
new file mode 100644
index 0000000..f0bbf3d
--- /dev/null
+++ b/templates/newsletter/subscription_subscribe_user.html
@@ -0,0 +1,25 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter subscribe" %}{% endblock title %}
+
+{% block body %}
+<h1>{% trans "Newsletter subscribe" %} {{ newsletter.title }}</h1>
+
+<p>Welcome, {{ user }}!</p>
+
+{% if messages %}
+<ul>
+ {% for message in messages %}
+ <li>{{ message }}</li>
+ {% endfor %}
+</ul>
+{% else %}
+{% trans "Do you want to subscribe to this newsletter?" %}
+<form enctype="multipart/form-data" method="post" action="{% url "newsletter_subscribe_confirm" newsletter.slug %}">
+ {% csrf_token %}
+ <p><input id="id_submit" name="submit" value="{% trans "Subscribe" %}" type="submit" /></p>
+</form>
+{% endif %}
+{% endblock body %}
diff --git a/templates/newsletter/subscription_unsubscribe.html b/templates/newsletter/subscription_unsubscribe.html
new file mode 100644
index 0000000..022ba4b
--- /dev/null
+++ b/templates/newsletter/subscription_unsubscribe.html
@@ -0,0 +1,25 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter unsubscribe" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter unsubscribe" %} {{ newsletter.title }}</h1>
+
+ {% if error %}
+ <p>{% trans "Due to a technical error we were not able to submit your confirmation email. This could be because your email address is invalid." %}</p>
+
+ {% comment %} Replace the the following dummy with a valid email address and remove this comment.
+
+ <p>{% trans "If the error persists, please don't hesitate to contact us at the following email address:" %} <a href="mailto:info@foobar.com">info@foobar.com</a></p>
+
+ {% endcomment %}
+ {% else %}
+ <form enctype="multipart/form-data" method="post" action=".">
+ {% csrf_token %}
+ {{ form.as_p }}
+ <p><input id="id_submit" name="submit" value="{% trans "Unsubscribe" %}" type="submit" /></p>
+ </form>
+ {% endif %}
+{% endblock body %}
diff --git a/templates/newsletter/subscription_unsubscribe_activated.html b/templates/newsletter/subscription_unsubscribe_activated.html
new file mode 100644
index 0000000..65628c5
--- /dev/null
+++ b/templates/newsletter/subscription_unsubscribe_activated.html
@@ -0,0 +1,11 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter" %} {{ newsletter.title }} {{ action }} {% trans "activate" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter" %} {{ newsletter.title }} {{ action }} {% trans "activate" %}</h1>
+
+ <p>{% trans "You have successfully been unsubscribed." %}</p>
+{% endblock body %}
diff --git a/templates/newsletter/subscription_unsubscribe_email_sent.html b/templates/newsletter/subscription_unsubscribe_email_sent.html
new file mode 100644
index 0000000..19d00b8
--- /dev/null
+++ b/templates/newsletter/subscription_unsubscribe_email_sent.html
@@ -0,0 +1,11 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter unsubscribe" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter unsubscribe" %} {{ newsletter.title }}</h1>
+
+ <p>{% trans "Your unsubscription request has successfully been received. An email has been sent to you with a link you need to follow in order to confirm your unsubscription." %}</p>
+{% endblock body %}
diff --git a/templates/newsletter/subscription_unsubscribe_user.html b/templates/newsletter/subscription_unsubscribe_user.html
new file mode 100644
index 0000000..5bc81dc
--- /dev/null
+++ b/templates/newsletter/subscription_unsubscribe_user.html
@@ -0,0 +1,27 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter unsubscribe" %}{% endblock title %}
+
+{% block body %}
+<h1>{% trans "Newsletter unsubscribe" %} {{ newsletter.title }}</h1>
+
+<p>Welcome, {{ user }}!</p>
+
+{% if messages %}
+<ul>
+ {% for message in messages %}
+ <li>{{ message }}</li>
+ {% endfor %}
+</ul>
+{% else %}
+
+{% trans "Do you want to unsubscribe from this newsletter?" %}
+<form enctype="multipart/form-data" method="post" action="{% url "newsletter_unsubscribe_confirm" newsletter.slug %}">
+ {% csrf_token %}
+ <p><input id="id_submit" name="submit" value="{% trans "Unsubscribe" %}" type="submit" /></p>
+</form>
+{% endif %}
+
+{% endblock body %}
diff --git a/templates/newsletter/subscription_update.html b/templates/newsletter/subscription_update.html
new file mode 100644
index 0000000..fe83797
--- /dev/null
+++ b/templates/newsletter/subscription_update.html
@@ -0,0 +1,25 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter update" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter update" %} {{ newsletter.title }}</h1>
+
+ {% if error %}
+ <p>{% trans "Due to a technical error we were not able to submit your confirmation email. This could be because your email address is invalid." %}</p>
+
+ {% comment %} Replace the the following dummy with a valid email address and remove this comment.
+
+ <p>{% trans "If the error persists, please don't hesitate to contact us at the following email address:" %} <a href="mailto:info@foobar.com">info@foobar.com</a></p>
+
+ {% endcomment %}
+ {% else %}
+ <form enctype="multipart/form-data" method="post" action=".">
+ {% csrf_token %}
+ {{ form.as_p }}
+ <p><input id="id_submit" name="submit" value="{% trans "Update subscription" %}" type="submit" /></p>
+ </form>
+ {% endif %}
+{% endblock body %}
diff --git a/templates/newsletter/subscription_update_activated.html b/templates/newsletter/subscription_update_activated.html
new file mode 100644
index 0000000..65b0298
--- /dev/null
+++ b/templates/newsletter/subscription_update_activated.html
@@ -0,0 +1,11 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter" %} {{ newsletter.title }} {{ action }} {% trans "activate" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter" %} {{ newsletter.title }} {{ action }} {% trans "activate" %}</h1>
+
+ <p>{% trans "Your subscription has successfully been updated." %}</p>
+{% endblock body %}
diff --git a/templates/newsletter/subscription_update_email_sent.html b/templates/newsletter/subscription_update_email_sent.html
new file mode 100644
index 0000000..b740d18
--- /dev/null
+++ b/templates/newsletter/subscription_update_email_sent.html
@@ -0,0 +1,11 @@
+{% extends "newsletter/common.html" %}
+
+{% load i18n %}
+
+{% block title %}{% trans "Newsletter update" %}{% endblock title %}
+
+{% block body %}
+ <h1>{% trans "Newsletter update" %} {{ newsletter.title }}</h1>
+
+ <p>{% trans "Your update request was successfully received and an activation email has been sent to you. In that email you will find a link which you need to follow in order to update your subscription." %}</p>
+{% endblock body %}
diff --git a/templates/src_base.html b/templates/src_base.html
new file mode 100644
index 0000000..8bd029b
--- /dev/null
+++ b/templates/src_base.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html {%block htmlclass%}{%endblock%} dir="ltr" lang="en-US">
+ {% block sitename %}
+<head>
+ <title>{% block pagetitle %}Luxagraf - Topografical Writings{% endblock %}</title>{%endblock%}
+ <meta charset="utf-8">
+ <meta name="description"
+ content="{% block metadescription %}Luxagraf: recording journeys around the world and just next door.{% endblock %}">
+ <meta name="author" content="Scott Gilbertson">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <!--[if IE]>
+ <script src="/js/html5css3ie.min.js"></script>
+ <![endif]-->
+ <link rel="alternate"
+ type="application/rss+xml"
+ title="Luxagraf:src RSS feed"
+ href="https://luxagraf.net/src/feed.xml">
+ {%block stylesheet%}<link rel="stylesheet"
+ href="/media/screenv9.css"
+ media="screen">{%endblock%}
+ <!--[if IE]>
+ <link rel="stylesheet"
+ href="/media/css/ie.css"
+ media="screen">
+ <![endif]-->
+ {%block extrahead%}{%endblock%}
+</head>
+<body {%block bodyid%}{%endblock%}{%block bodyevents%}{%endblock%}>
+ <div class="wrapper">
+ <div class="header-wrapper">
+ <header role="banner">
+ <h1><a id="logo" href="/src/" title="home">Luxagraf</a></h1>
+ <h2><code>SRC: Code Slowly</code></h2>
+ </header>
+ <nav role="navigation" class="bl">
+ <ul>
+ <li><a href="/src/" title="Archive">Archive</a></li>
+ <!--<li><a href="/src/books/" title="Ebooks">Books</a></li>-->
+ <li><a href="/src/about" title="">About</a></li>
+ <li class="last"><a href="/" title="See the real luxagraf">Travel Site</a></li>
+ </ul>
+ </nav>
+ </div>
+ {% block primary %}{% endblock %}
+ {% block extrabody %}{% endblock %}
+ <footer role="contentinfo">
+ <nav class="bl">
+ <ul>
+ <li><a href="/src/feed.xml" title="RSS feed">Subscribe</a></li>
+ <li><a href="/contact/" title="contact luxagraf">Contact</a></li>
+ <li><a href="/" rel="me" title="Mostly I write about travel">Travel Site</a></li>
+ </ul>
+ </nav>
+ <p id="license">
+ &copy; 2003-{% now "Y" %}
+ <span class="h-card"><a class="p-name u-url" href="https://luxagraf.net/">Scott Gilbertson</a><data class="p-nickname" value="luxagraf"></data><data class="p-locality" value="Athens"></data><data class="p-region" value="Georgia"></data><data class="p-country-name" value="United States"></data></span>, except photos, which are licensed under the Creative Commons (<a href="http://creativecommons.org/licenses/by-sa/3.0/" title="read the Attribution-Share Alike 3.0 deed">details</a>).
+ </p>
+ </footer>
+ </div>
+ {% block js %}{% endblock%}
+</body>
+</html>