This commit is contained in:
Dooho Yi 2020-04-26 02:50:38 +09:00
parent 0e7356f1c5
commit 5a1e66536e
38 changed files with 741 additions and 9 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
public/
*.pyc

13
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,13 @@
build:
script:
- virtualenv venv
- source venv/bin/activate
- pip install -r requirements.txt
- patch venv/lib/python3.5/site-packages/pelican/readers.py -i patch/pelican_readers.patch
- make publish
- rm -rf /var/www/webapp_doohoyi/nosignal.hopto.org_site/ci/losttr
- cp -r public /var/www/webapp_doohoyi/nosignal.hopto.org_site/ci/losttr
- deactivate
artifacts:
paths:
- public

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 GitLab Pages examples
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

75
Makefile Normal file
View file

@ -0,0 +1,75 @@
PY?=python3
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(CURDIR)/public
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
@echo ' make devserver [PORT=8000] serve and regenerate together '
@echo ' make ssh_upload upload the web site via SSH '
@echo ' make rsync_upload upload the web site via rsync+ssh '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@echo ' '
html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
clean:
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
serve:
ifdef PORT
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif
serve-global:
ifdef SERVER
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b $(SERVER)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b 0.0.0.0
endif
devserver:
ifdef PORT
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif
publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
.PHONY: html help clean regenerate serve serve-global devserver publish

15
README.md Normal file
View file

@ -0,0 +1,15 @@
# Example [Pelican] website using GitLab server, 'nosignal.hopto.org/gitlab'
- located <https://nosignal.hopto.org/gitlab/doohoyi/lost_tr>
- Check the resulting website here: <https://nosignal.hopto.org/site/ci/losttr/>
- utilizing 'SparkleShare' for real-time sync.
- CI powered by server-side gitlab-runner !
## patch applied
- if there is no 'title' in '.rst' file, FILENAME_METADATA = '(?P\<title\>.*)' doesn't work!
- it works fine with '.md' files --> https://github.com/getpelican/pelican/issues/2107#issuecomment-363388649
- but, it doesn't work with '.rst' files.
- that's because metadata being merged with a default 'title' which is empty if you don't give one in the document!
- so, if 'title' is empty, then do not add the default. that is meaningless.
- look into : patch/pelican_readers.patch

View file

@ -1,9 +0,0 @@
Congratulations, you've successfully created a SparkleShare repository!
Any files you add or change in this folder will be automatically synced to
ssh://git@nosignal.hopto.org/doohoyi/lost-train.git and everyone connected to it.
SparkleShare is an Open Source software program that helps people collaborate and
share files. If you like what we do, consider buying us a beer: http://www.sparkleshare.org/
Have fun! :)

View file

@ -0,0 +1,3 @@
gitlab-ci + sparkleshare + python + pelican + emacs / atom
새로운 시작.

View file

@ -0,0 +1 @@
kiki

View file

@ -0,0 +1,6 @@
294c294,296
< metadata.setdefault('title', parts.get('title'))
---
> title = parts.get('title')
> if title:
> metadata.setdefault('title', parts.get('title'))

71
pelicanconf.py Normal file
View file

@ -0,0 +1,71 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
AUTHOR = 'D'
SITENAME = 'lost/tr'
SITEURL = 'https://nosignal.hopto.org/site/ci/losttr'
PATH = 'content'
OUTPUT_PATH = 'public'
TIMEZONE = 'Asia/Seoul'
DEFAULT_LANG = 'en'
DEFAULT_DATE = 'fs'
#20200421T223234+0900_(testt).rst
FILENAME_METADATA = r'(?P<date>\d{8}T\d{6}\+\d{4})_\((?P<title>.*)\).*'
SLUGIFY_SOURCE = 'basename'
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# Blogroll
LINKS = (('Pelican', 'http://getpelican.com/'),
('Python.org', 'http://python.org/'),
('Jinja2', 'http://jinja.pocoo.org/'),
('You can modify those links in your config file', '#'),)
# Social widget
SOCIAL = (('You can add links in your config file', '#'),
('Another social link', '#'),)
DEFAULT_PAGINATION = 5
# Uncomment following line if you want document-relative URLs when developing
#RELATIVE_URLS = True
# PLUGINS
PLUGIN_PATHS = ['/home/admin/pelican-plugins']
PLUGINS = ['assets']
# THEME (customizing)
THEME = "./theme"
# THEME / bulrush
# import bulrush
# THEME = bulrush.PATH
# JINJA_ENVIRONMENT = bulrush.ENVIRONMENT
# JINJA_FILTERS = bulrush.FILTERS
# THEME
# THEME = "/home/admin/pelican-themes/dev-random" # Responsive !
# THEME = "/home/admin/pelican-themes/dev-random2" # Responsive !
# THEME = "/home/admin/pelican-themes/pelican-cait" # Responsive !
# THEME = "/home/admin/pelican-themes/mnmlist" # NOT-responsive !
# THEME = "/home/admin/pelican-themes/basic" # NOT-responsive !
# THEME = "/home/admin/pelican-themes/nmnlist" # NOT-responsive !
# THEME = "/home/admin/pelican-themes/monospace" # NOT-responsive !
# THEME = "/home/admin/pelican-themes/jesuislibre" # NOT-responsive !
# THEME = "/home/admin/pelican-themes/blue-penguin" # NOT-responsive !
# THEME = "/home/admin/pelican-themes/crowsfoot" # unstable?
# THEME = "/home/admin/pelican-themes/eevee" # DOESN'T WORK, AS IS.
# THEME = "/home/admin/pelican-themes/twenty-html5up" # DOESN'T WORK, AS IS.

24
publishconf.py Normal file
View file

@ -0,0 +1,24 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
# This file is only used if you use `make publish` or
# explicitly specify it as your config file.
import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *
SITEURL = '/site/ci/losttr'
RELATIVE_URLS = False
FEED_ALL_ATOM = 'feeds/all.atom.xml'
CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml'
DELETE_OUTPUT_DIRECTORY = True
# Following items are often useful when publishing
#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""

6
requirements.txt Normal file
View file

@ -0,0 +1,6 @@
pelican ~= 4.1.0
markdown
typogrify
bulrush
pathlib
virtualenv

109
tasks.py Normal file
View file

@ -0,0 +1,109 @@
# -*- coding: utf-8 -*-
import os
import shutil
import sys
import datetime
from invoke import task
from invoke.util import cd
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
from pelican.settings import DEFAULT_CONFIG, get_settings_from_file
SETTINGS_FILE_BASE = 'pelicanconf.py'
SETTINGS = {}
SETTINGS.update(DEFAULT_CONFIG)
LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE)
SETTINGS.update(LOCAL_SETTINGS)
CONFIG = {
'settings_base': SETTINGS_FILE_BASE,
'settings_publish': 'publishconf.py',
# Output path. Can be absolute or relative to tasks.py. Default: 'output'
'deploy_path': SETTINGS['OUTPUT_PATH'],
# Port for `serve`
'port': 8000,
}
@task
def clean(c):
"""Remove generated files"""
if os.path.isdir(CONFIG['deploy_path']):
shutil.rmtree(CONFIG['deploy_path'])
os.makedirs(CONFIG['deploy_path'])
@task
def build(c):
"""Build local version of site"""
c.run('pelican -s {settings_base}'.format(**CONFIG))
@task
def rebuild(c):
"""`build` with the delete switch"""
c.run('pelican -d -s {settings_base}'.format(**CONFIG))
@task
def regenerate(c):
"""Automatically regenerate site upon file modification"""
c.run('pelican -r -s {settings_base}'.format(**CONFIG))
@task
def serve(c):
"""Serve site at http://localhost:$PORT/ (default port is 8000)"""
class AddressReuseTCPServer(RootedHTTPServer):
allow_reuse_address = True
server = AddressReuseTCPServer(
CONFIG['deploy_path'],
('', CONFIG['port']),
ComplexHTTPRequestHandler)
sys.stderr.write('Serving on port {port} ...\n'.format(**CONFIG))
server.serve_forever()
@task
def reserve(c):
"""`build`, then `serve`"""
build(c)
serve(c)
@task
def preview(c):
"""Build production version of site"""
c.run('pelican -s {settings_publish}'.format(**CONFIG))
@task
def livereload(c):
"""Automatically reload browser tab upon file modification."""
from livereload import Server
build(c)
server = Server()
# Watch the base settings file
server.watch(CONFIG['settings_base'], lambda: build(c))
# Watch content source files
content_file_extensions = ['.md', '.rst']
for extension in content_file_extensions:
content_blob = '{0}/**/*{1}'.format(SETTINGS['PATH'], extension)
server.watch(content_blob, lambda: build(c))
# Watch the theme's templates and static assets
theme_path = SETTINGS['THEME']
server.watch('{}/templates/*.html'.format(theme_path), lambda: build(c))
static_file_extensions = ['.css', '.js']
for extension in static_file_extensions:
static_file = '{0}/static/**/*{1}'.format(theme_path, extension)
server.watch(static_file, lambda: build(c))
# Serve output path on configured port
server.serve(port=CONFIG['port'], root=CONFIG['deploy_path'])
@task
def publish(c):
"""Publish to production via rsync"""
c.run('pelican -s {settings_publish}'.format(**CONFIG))
c.run(
'rsync --delete --exclude ".DS_Store" -pthrvz -c '
'{} {production}:{dest_path}'.format(
CONFIG['deploy_path'].rstrip('/') + '/',
**CONFIG))

13
theme/LICENSE Normal file
View file

@ -0,0 +1,13 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

18
theme/README.md Normal file
View file

@ -0,0 +1,18 @@
Monospace
==========
Theme adapted from [Monospace for Wordpress](http://wordpress.org/themes/monospace)
Here is a screenshot for your viewing pleasure:
![screengrab](screenshot.png)
If you are using Markdown, you need to include the following option in your settings file to enable syntax highlighting.
MD_EXTENSIONS = ['codehilite(css_class=codehilite code)']
Also, you might want to include the `DESCRIPTION` option (it appears in the left sidebar):
DESCRIPTION = 'My blog and stuff ...'
Nice and simple,
Enjoy!

BIN
theme/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

107
theme/static/css/main.css Normal file
View file

@ -0,0 +1,107 @@
/**
* Theme Name: Monospace
* Theme URI: http://vinicius.soylocoporti.org.br/monospace-wordpress-theme
* Description: A clean, extra-light, easy, objective, image free and 80 columns monospaced content theme. Made for code, manuals and e-mail publishing. Good for programming blogs, planets and posting by mail.
* Author: Vinicius Massuchetto
* Author URI: http://vinicius.soylocoporti.org.br
* Version: 1.91
* Tags: white, blue, two-columns, fixed-width, threaded-comments, translation-ready
* License: GNU General Public License v2.0
* License URI: http://www.gnu.org/licenses/gpl-2.0.html
*/
@import url("pygment.css");
body { margin:0px; padding:20px 0px; text-align:center; font-family:Monospace; color:#585858; }
a, a:visited { text-decoration:none; color:rgb(17, 170, 34); }
a:hover { color:#FFF; background-color:#5353CB }
h1, h2, h3, h4, h5, h6, h7 { margin:0px; text-transform:uppercase; }
h4, h5, h6 { font-size:14px; }
h1 { padding:0px 0px 15px; margin:0px 0px 15px 0px; }
blockquote { font-style:italic; background:#EAEAEA; margin:20px; padding:5px 10px; }
blockquote cite { display:block; padding:10px 20px 0 0; text-align:right; }
input, textarea { padding:5px; border:1px solid #8A8A8A; background:#EAEAEA; }
input:hover, textarea:hover, blockquote:hover { background:#E5E5E5; }
#wrap { margin:0px auto; text-align:left; font-size: 13px; line-height: 1.4; }
#container { float:right; }
#sidebar { overflow:hidden; clear:left; text-align:right; width:250px; height:auto; padding:0px 15px 0px 0px; border-right:1px dotted #C8C8C8; }
#sidebar li { list-style-type:none; }
#sidebar > li { margin:20px 0px; }
#sidebar h1 { border-bottom:1px dotted #C8C8C8; }
#sidebar .description { display:block; width:100%; height:auto; margin:0px 0px 10px 0px; }
ul.sub-menu, ul.children { margin:0px 10px 0px 0px; }
.post { margin:0px 0px 30px 0px; padding:0px 0px 30px 0px; border-bottom:1px dotted #C8C8C8; }
.post-edit-link { clear:both; }
.meta { margin:10px; padding:15px; background:#EAEAEA; clear:both; }
.meta span { display:block; clear:left; }
.thumbnail { margin:0px; padding:0px; }
.thumbnail img { float:right; }
.entry { font-size: 14px; line-height: 20px; }
.entry h2, h3, h4, h5 { margin:30px 0px 10px 0px; }
.entry img { display:block; border:1px solid #BDBDBD !important; }
.entry img.wp-smiley { border:0px !important; }
.entry a img:hover { background-color:transparent; border:1px solid #E5E5E5 !important; }
.entry .aligncenter, div.aligncenter { margin:10px auto; }
.entry .alignleft { float: left; margin:10px 15px 10px 0px; }
.entry .alignright { float: right; margin:10px 0px 10px 15px; }
.entry .alignnone { margin:10px 0px; }
.entry .gallery, .wp-caption { text-align:center; background:#EAEAEA; margin:10px; padding:10px; border:0px; max-width:520px; height:auto; }
.entry .wp-caption img { border:0 none; margin:0px auto; padding:0; max-width:500px; height:auto; }
.entry .gallery:hover, .wp-caption:hover { background:#E5E5E5; }
.entry .gallery-caption, .wp-caption-text { background:transparent; }
.entry .wp-caption p.wp-caption-text { font-size:11px; line-height:17px; margin:5px 50px 0px; }
.entry .gallery-icon { width:100%; height:auto; }
.entry .gallery-icon img { margin:0px auto; }
.entry .gallery-caption { margin:5px 10px 0px 0px; padding:0px; }
.entry p.attachment img { margin:0px auto; }
.sticky { border-bottom:3px dotted #C8C8C8; }
.wp_syntax { padding:5px 0px; }
.wp_syntax pre { line-height:1.3; }
.wp_syntax pre.php { line-height:1; }
.widget_recent_entries ul li,
.widget_recent_comments ul li,
.widget_rss ul li { margin:10px 0px; padding:10px 0px; border-top:1px dotted #C8C8C8; }
.related { margin:20px 0px 0px 0px; }
.nav { margin:30px 0px; text-align:center; }
#comments { border-top:1px dotted #C8C8C8; margin:30px 0px 0px 0px; padding:30px 0px 0px 0px; }
.commentlist li { list-style-type:none; padding:10px; margin:20px 0px 0px 0px; }
.commentlist li.even { background:#EAEAEA; }
.commentlist li.odd { background:#D6D6D6; }
.comment-author img { float:left; margin:0px 10px 10px 0px; }
ul.commentlist ul.children { padding-left:10px; }
ul.commentlist ul.children li { list-style-type:none; border:1px solid #AAA }
.form-section { margin:10px 0px; text-align:right; }
.form-section div { display:inline; }
.bypostauthor { border:3px dotted #C8C8C8; }
.form-allowed-tags { display:none; }
#respond { margin:30px 0px 0px 0px; background:#FFF; border:1px solid #9A9A9A; margin:30px 0 0; padding:20px; }
#commentform p { text-align:right; }
#commentform input { width:50%; height:auto; margin:0px 0px 0px 10px; }
#commentform .required { font-weight:bold; }
#commentform textarea { width:95%; height:auto; margin:10px 0px 0px 0px; }
#commentform .comment-form-comment { margin-bottom:5px; text-align:right; }
#commentform .form-allowed-tags { color:#8A8A8A; margin-top:0px; font-size:10px; }
input#submit { font-weight:bold; }
input#s { width:70%; height:auto; margin:5px 0px; }
#footer { text-align:center; clear:both; }
#footer div { margin:30px 0px 0px 0px; padding:30px 0px 0px 0px; border-top:1px dotted #C8C8C8; }
#footer li { list-style-type:none; }
#footer .widget_tag_cloud h2 { display:none; }
/* LWM EDITS */
#page-title{
position : relative;
top : 8px;
}

View file

@ -0,0 +1,2 @@
.highlight code,.highlight pre{color:#fdce93;background-color:#3f3f3f;padding:10px;}.highlight .hll{background-color:#222}.highlight .c{color:#7f9f7f}.highlight .err{color:#e37170;background-color:#3d3535}.highlight .g{color:#7f9f7f}.highlight .k{color:#f0dfaf}.highlight .l{color:#ccc}.highlight .n{color:#dcdccc}.highlight .o{color:#f0efd0}.highlight .x{color:#ccc}.highlight .p{color:#41706f}.highlight .cm{color:#7f9f7f}.highlight .cp{color:#7f9f7f}.highlight .c1{color:#7f9f7f}.highlight .cs{color:#cd0000;font-weight:bold}.highlight .gd{color:#cd0000}.highlight .ge{color:#ccc;font-style:italic}.highlight .gr{color:red}.highlight .gh{color:#dcdccc;font-weight:bold}.highlight .gi{color:#00cd00}.highlight .go{color:gray}.highlight .gp{color:#dcdccc;font-weight:bold}.highlight .gs{color:#ccc;font-weight:bold}.highlight .gu{color:purple;font-weight:bold}.highlight .gt{color:#0040D0}.highlight .kc{color:#dca3a3}.highlight .kd{color:#ffff86}.highlight .kn{color:#dfaf8f;font-weight:bold}.highlight .kp{color:#cdcf99}.highlight .kr{color:#cdcd00}.highlight .kt{color:#00cd00}.highlight .ld{color:#cc9393}.highlight .m{color:#8cd0d3}.highlight .s{color:#cc9393}.highlight .na{color:#9ac39f}.highlight .nb{color:#efef8f}.highlight .nc{color:#efef8f}.highlight .no{color:#ccc}.highlight .nd{color:#ccc}.highlight .ni{color:#c28182}.highlight .ne{color:#c3bf9f;font-weight:bold}.highlight .nf{color:#efef8f}.highlight .nl{color:#ccc}.highlight .nn{color:#8fbede}.highlight .nx{color:#ccc}.highlight .py{color:#ccc}.highlight .nt{color:#9ac39f}.highlight .nv{color:#dcdccc}.highlight .ow{color:#f0efd0}.highlight .w{color:#ccc}.highlight .mf{color:#8cd0d3}.highlight .mh{color:#8cd0d3}.highlight .mi{color:#8cd0d3}.highlight .mo{color:#8cd0d3}.highlight .sb{color:#cc9393}.highlight .sc{color:#cc9393}.highlight .sd{color:#cc9393}.highlight .s2{color:#cc9393}.highlight .se{color:#cc9393}.highlight .sh{color:#cc9393}.highlight .si{color:#cc9393}.highlight .sx{color:#cc9393}.highlight .sr{color:#cc9393}.highlight .s1{color:#cc9393}.highlight .ss{color:#cc9393}.highlight .bp{color:#efef8f}.highlight .vc{color:#efef8f}.highlight .vg{color:#dcdccc}.highlight .vi{color:#ffffc7}.highlight .il{color:#8cd0d3}

View file

@ -0,0 +1,11 @@
{% if GOOGLE_ANALYTICS %}
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("{{GOOGLE_ANALYTICS}}");
pageTracker._trackPageview();
} catch(err) {}</script>
{% endif %}

View file

@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block content %}
<section id="content" class="body">
<h1>Archives for {{ SITENAME }}</h1>
<dl>
{% for article in dates %}
<dt>{{ article.locale_date }}</dt>
<dd><a href='{{ SITEURL }}/{{ article.url }}'>{{ article.title }}</a></dd>
{% endfor %}
</dl>
</section>
{% endblock %}

View file

@ -0,0 +1,29 @@
{% extends "base.html" %}
{% block title %}{{ super() }} : {{ article.title }}{% endblock %}
{% block content %}
<header>
<h1><a href="{{ SITEURL }}" id="site-title"> {#{{ SITENAME }}#} {% if SITESUBTITLE %} <strong>{{ SITESUBTITLE }}</strong>{% endif %}</a> {#:#}
<a href="{{ SITEURL }}/{{ article.url }}" id="page-title">{{ article.title }}</a></h1>
{% if not HIDE_DATE %}<time datetime="{{ article.date.isoformat() }}">{{ article.locale_date }}</time>{% endif %}
</header>
<article>
{{ article.content }}
{% if DISQUS_SITENAME and SITEURL and article.status != "draft" %}
<h2>Comments</h2>
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_shortname = '{{ DISQUS_SITENAME }}';
var disqus_identifier = '{{ article.url }}';
var disqus_url = '{{ SITEURL }}/{{ article.url }}';
(function() {
var dsq = document.createElement('script');
dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'https://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] ||
document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the comments.</noscript>
{% endif %}
</article>
{% endblock %}

View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ author }}{% endblock %}

View file

71
theme/templates/base.html Normal file
View file

@ -0,0 +1,71 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}{{ SITENAME }}{%endblock%}</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="{{ SITEURL }}/theme/css/{{ CSS_FILE }}" type="text/css" />
<link href="{{ SITEURL }}/{{ FEED }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} ATOM Feed" />
{% if FEED_RSS %}
<link href="{{ SITEURL }}/{{ FEED_RSS }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
{% endif %}
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="{{ SITEURL }}/css/ie.css"/>
<script src="{{ SITEURL }}/js/IE8.js" type="text/javascript"></script><![endif]-->
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="{{ SITEURL }}/css/ie6.css"/><![endif]-->
</head>
<body>
<div id="wrap" style="width:850px">
<div id="container" style="width:560px">
{% include 'github.html' %}
<div class="entry">
{% block content %}
{% endblock %}
</div>
</div>
<div id="sidebar">
<h1><a href="{{ SITEURL }} " title="title">{{ SITENAME }}</a></h1>
<span class="description">{{ DESCRIPTION }} </span>
<!-- <span class="feed"><a href="">RSS</a> | <a href="">Atom</a></span> -->
</div>
<div id="footer">
<nav>
<ul>
{% for page in pages %}
<li><a href="{{ SITEURL }}/{{ page.url }}">{{ page.title }}</a>{% if not loop.last %} ::{% endif %}</li>
{% endfor %}
{% if categories|length > 1 %}
<li>:: <a href="{{ SITEURL }}/categories.html">Categories</a></li>
{% endif %}
{% if tags|length > 1 %}
<li>:: <a href="{{ SITEURL }}/tags.html">Tags</a></li>
{% endif %}
</ul>
</nav>
<div id="credits">
<span>Adapted from <a href="http://wordpress.org/themes/monospace">Monospace</a> || Created with <a href="">Pelican</a></span>
</div>
</div>
{% include 'analytics.html' %}
{% include 'piwik.html' %}
{% include 'disqus_script.html' %}
</div>
</body>
</html>

View file

@ -0,0 +1,8 @@
{% extends "base.html" %}
{% block content %}
<ul>
{% for category, articles in categories %}
<li><a href="{{ SITEURL }}/{{ category.url }}">{{ category }}</a></li>
{% endfor %}
</ul>
{% endblock %}

View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ category }}{% endblock %}

View file

@ -0,0 +1 @@
{% if DISQUS_SITENAME %}<p>There are <a href="{{ SITEURL }}/{{ article.url }}#disqus_thread">comments</a>.</p>{% endif %}

View file

@ -0,0 +1,11 @@
{% if DISQUS_SITENAME %}
<script type="text/javascript">
var disqus_shortname = '{{ DISQUS_SITENAME }}';
(function () {
var s = document.createElement('script'); s.async = true;
s.type = 'text/javascript';
s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
</script>
{% endif %}

View file

@ -0,0 +1,9 @@
{% if GITHUB_URL %}
<a href="{{ GITHUB_URL }}">
{% if GITHUB_POSITION != "left" %}
<img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub" />
{% else %}
<img style="position: absolute; top: 0; left: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_left_white_ffffff.png" alt="Fork me on GitHub" />
{% endif %}
</a>
{% endif %}

View file

@ -0,0 +1,34 @@
{% extends "base.html" %}
{% block content_title %}{% endblock %}
{% block content %}
{% if articles %}
{% for article in articles %}
{# First item #}
{% if loop.first %}
<header>
<h1><a href="{{ SITEURL }}" id="site-title"> {# {{ SITENAME }} #} {% if SITESUBTITLE %} <strong>{{ SITESUBTITLE }}</strong>{% endif %}</a> {#:#} <a href="{{ SITEURL }}/{{ article.url }}" id="page-title">{{ article.title }}</a></h1>
{% if not HIDE_DATE %}<time datetime="{{ article.date.isoformat() }}">{{ article.locale_date }}</time>{% endif %}
</header>
<article>
{{ article.content }}{% include 'comments.html' %}
</article>
{% if loop.length > 1 %}
<section id="article-list">
<h2>All posts</h2>
<ol>
{% endif %}
{# other items #}
{% else %}
<li><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title}}">{{ article.title }}</a></li>
{% endif %}
{% if loop.length > 1 %}
</ol>
</section><!-- #article-list -->
{% endif %}
{% endfor %}
{% else %}
No posts found.
{% endif %}
{% endblock content %}

11
theme/templates/page.html Normal file
View file

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% block title %}{{ page.title }}{% endblock %}
{% block content %}
<header>
<h1><a href="{{ SITEURL }}" id="site-title">{# {{ SITENAME }} #} {% if SITESUBTITLE %} <strong>{{ SITESUBTITLE }}</strong>{% endif %}</a> {#:#}
<a href="{{ SITEURL }}/{{ page.url }}" id="page-title">{{ page.title }}</a></h1>
</header>
<article>
{{ page.content }}
</article>
{% endblock %}

View file

@ -0,0 +1,15 @@
{% if DEFAULT_PAGINATION %}
<p class="paginator">
{% if articles_page.has_previous() %}
{% if articles_page.previous_page_number() == 1 %}
<a href="{{ SITEURL }}/{{ page_name }}.html">&laquo;</a>
{% else %}
<a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.previous_page_number() }}.html">&laquo;</a>
{% endif %}
{% endif %}
Page {{ articles_page.number }} / {{ articles_paginator.num_pages }}
{% if articles_page.has_next() %}
<a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.next_page_number() }}.html">&raquo;</a>
{% endif %}
</p>
{% endif %}

View file

@ -0,0 +1,16 @@
{% if PIWIK_URL and PIWIK_SITE_ID %}
<script type="text/javascript">
{% if PIWIK_SSL_URL %}
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{{ PIWIK_SSL_URL }}/" : "http://{{ PIWIK_URL }}/");
{% else %}
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{{ PIWIK_URL }}/" : "http://{{ PIWIK_URL }}/");
{% endif %}
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {{ PIWIK_SITE_ID }});
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://{{ PIWIK_URL }}/piwik.php?idsite={{ PIWIK_SITE_ID }}" style="border:0" alt="" /></p></noscript>
{% endif %}

2
theme/templates/tag.html Normal file
View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %}

View file

@ -0,0 +1,2 @@
{% if article.tags %}<p>tags: {% for tag in article.tags %}<a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a>{% endfor %}</p>{% endif %}
{% if PDF_PROCESSOR %}<p><a href="{{ SITEURL }}/pdf/{{ article.slug }}.pdf">get the pdf</a></p>{% endif %}

View file

@ -0,0 +1,9 @@
{% extends "base.html" %}
{% block content %}
<ul>
{% for tag, articles in tags %}
<li><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a></li>
{% endfor %}
</ul>
{% endblock %}

View file

@ -0,0 +1,6 @@
{% if article.translations %}
Translations:
{% for translation in article.translations %}
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
{% endfor %}
{% endif %}

View file

@ -0,0 +1,3 @@
{% if TWITTER_USERNAME %}
<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="{{TWITTER_USERNAME}}">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
{% endif %}