diff options
-rw-r--r-- | franticworld/LICENSE | 13 | ||||
-rw-r--r-- | franticworld/screenshot.png | bin | 0 -> 407201 bytes | |||
-rw-r--r-- | franticworld/static/css/franticworld.css | 238 | ||||
-rw-r--r-- | franticworld/static/css/pygments.css | 61 | ||||
-rw-r--r-- | franticworld/static/img/pattern.png | bin | 0 -> 22749 bytes | |||
-rw-r--r-- | franticworld/templates/archives.html | 13 | ||||
-rw-r--r-- | franticworld/templates/article.html | 34 | ||||
-rw-r--r-- | franticworld/templates/author.html | 5 | ||||
-rw-r--r-- | franticworld/templates/authors.html | 0 | ||||
-rw-r--r-- | franticworld/templates/base.html | 35 | ||||
-rw-r--r-- | franticworld/templates/categories.html | 1 | ||||
-rw-r--r-- | franticworld/templates/category.html | 2 | ||||
-rw-r--r-- | franticworld/templates/index.html | 20 | ||||
-rw-r--r-- | franticworld/templates/page.html | 27 | ||||
-rw-r--r-- | franticworld/templates/pagination.html | 15 | ||||
-rw-r--r-- | franticworld/templates/sidebar.html | 1 | ||||
-rw-r--r-- | franticworld/templates/tag.html | 2 | ||||
-rw-r--r-- | franticworld/templates/tags.html | 0 |
18 files changed, 467 insertions, 0 deletions
diff --git a/franticworld/LICENSE b/franticworld/LICENSE new file mode 100644 index 0000000..07b7a81 --- /dev/null +++ b/franticworld/LICENSE @@ -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.
\ No newline at end of file diff --git a/franticworld/screenshot.png b/franticworld/screenshot.png Binary files differnew file mode 100644 index 0000000..1164a21 --- /dev/null +++ b/franticworld/screenshot.png diff --git a/franticworld/static/css/franticworld.css b/franticworld/static/css/franticworld.css new file mode 100644 index 0000000..ffdf574 --- /dev/null +++ b/franticworld/static/css/franticworld.css @@ -0,0 +1,238 @@ +@import url(http://fonts.googleapis.com/css?family=Source+Code+Pro|Kelly+Slab|Atomic+Age|Jim+Nightshade);
+
+body{
+font-size:15px;
+font-family:arial;
+font-family:kelly slab;
+}
+a{text-decoration:none}
+.nav-banner{
+display:block;
+width:auto;
+height:50px;
+font-size:64px;
+margin-top:20px;
+margin-bottom:40px;
+text-align:center;
+font-family:jim nightshade;
+}
+.nav-banner>a{
+color:white;
+font-weight:bold;
+font-size:72px;
+text-shadow:5px 5px 0px #000,4px 4px 0px white,5px -5px 0px #000,4px -4px 0px white,-5px 5px 0px #000,-4px 4px 0px white,-5px -5px 0px #000,-4px -4px 0px white;
+}
+
+.content{
+width:60em;
+display:inline-block;
+margin-left:3%;
+}
+.summarycontainer{
+width:60em;
+}
+.metabox{
+vertical-align:top;
+display:inline-block;
+top:0;
+width:5em;
+text-align:center;
+color:white;
+background-color:rgba(255,255,255,0.3);
+box-shadow:0px 0px 10px #000000;
+z-index:-1;
+}
+.metaday{
+font-weight:bold;
+font-size:26px;
+text-shadow:0 0 10px #ff1f99;
+}
+.metayear{
+font-size:18px;
+text-shadow:0 0 5px #ff1f99;
+}
+.metacategory{
+font-size:22px;
+text-shadow:1px 1px 0px #000;
+}
+.summarybox{
+display:inline-block;
+width:50em;
+background-color:rgba(255,255,255,0.6);
+margin-bottom:3em;
+margin-left:-4px;
+padding:1em;
+box-shadow:0px 0px 10px #000000;
+color:#222;
+text-shadow:1px 1px 0px rgba(255,255,255,0.2);
+}
+.summarytitle,.articletitle{
+display:block;
+width:790px;
+margin-top:-25px;
+margin-left:-25px;
+padding:5px;
+padding-top:10px;
+padding-bottom:15px;
+font-size:30px;
+font-weight:bold;
+text-align:center;
+color:#eee;
+text-shadow:1px 1px 2px #333,-1px -1px 5px #333,20px 15px 2px rgba(255,255,255,0.1),-20px 15px 2px rgba(255,255,255,0.1),20px -10px 2px rgba(255,255,255,0.1),-20px -10px 2px rgba(255,255,255,0.1);
+box-shadow:0 1px 5px rgba(0,0,0,0.8);
+background:rgba(48,48,48,1);
+transition: text-shadow 0.5s;
+-moz-transition: text-shadow 0.5s; /* Firefox 4 */
+-webkit-transition: text-shadow 0.5s; /* Safari 和 Chrome */
+-o-transition: text-shadow 0.5s; /* Opera */
+}
+.summarytitle:hover,.articletitle:hover{
+text-shadow:0 0 10px #2fa0ff;
+}
+
+.arcticlecontentbox,.page-body{
+display:inline-block;
+width:50em;
+background-color:rgba(255,255,255,0.6);
+margin-bottom:3em;
+margin-left:-4px;
+padding:1em;
+box-shadow:0px 0px 10px #000000;
+color:#222;
+text-shadow:1px 1px 0px rgba(255,255,255,0.2);
+}
+h1{
+padding-top:5px;
+padding-bottom:5px;
+padding-left:10px;
+margin-left:-20px;
+background:rgba(140,203,255,0.2);
+text-shadow:0 0 10px rgba(255,255,255,0.5);
+width:780px;
+height:1.2em;
+text-align:center;
+box-shadow:1px 1px 2px rgba(48,168,200,1);
+}
+h2{
+padding:3px;
+font-size:28px;
+text-align:center;
+margin-left:30px;
+margin-right:30px;
+background:rgba(155,155,155,0.5);
+box-shadow:0 0 2px rgba(0,0,0,0.4);
+}
+pre,blockquote{
+color:#eee;
+padding:5px;
+background-color:#222;
+box-shadow:0px 0px 1px #222;
+padding-left:10px;
+border-left:2px solid #2fa0ff;
+overflow:auto;
+}
+blockquote{
+margin-left:0;
+margin-right:0;
+padding-top:1px;
+padding-bottom:1px;
+border-left:2px solid #000;
+color:inherit;
+font-size:12px;
+line-height:18px;
+background-color:transparent;
+}
+code{
+font-family:sourcecode pro;
+font-weight:bold;
+padding-left:2px;
+padding-right:2px;
+background:#888888
+}
+table{
+font-size:12px;
+line-height:18px;
+background-color:transparent;
+width:100%;
+overflow:auto;
+}
+tr:nth-child(odd){background-color:rgba(255,255,255,0.2);}
+tr:nth-child(even){background-color:rgba(140,203,255,0.2);}
+li{
+font-size:12px;
+list-style-type : square;
+}
+.sidebar{
+position:absolute;
+display:inline-block;
+margin-left:-1em;
+width:10em;
+padding:0em 1em 1em 1em;
+background-color:rgba(0,0,0,0.3);
+box-shadow:2px 0px 10px #000000;
+}
+.sidebar h4{
+line-height:5px;
+font-size:20px;
+text-shadow:0 0 1px #63b8ff;
+color:#ccc;
+font-weight:bold;
+}
+.sidebar li{list-style-type : none;}
+.sidebar a{
+font-family:atomic age;
+line-height:28px;
+color:#2fa0ff;
+font-size:16px;
+display:block;
+width:100%;
+padding:3px;
+padding-left:5px;
+}
+.sidebar a:hover{
+font-size:20px;
+font-weight:bold;
+color:#eee;
+padding-left:18px;
+border-radius:2px 0 0 2px;
+box-shadow:0px 0px 20px rgba(140,203,255,0.7);
+background:rgba(140,203,255,1);
+-moz-transition: font-size 0.2s; /* Firefox 4 */
+-webkit-transition:font-size 0.2s; /* Safari 和 Chrome */
+-o-transition:font-size 0.2s; /* Opera */
+}
+.paginator{
+border-radius:2px;
+padding:10px;
+color:#fff;
+font-family:jim nightshade;
+margin-top:-1em;
+text-align:center;
+font-size:2em;}
+.paginator>a{
+color:#2f99ff;
+font-family:kelly slab;
+text-shadow:1px 1px 1px rgba(0,0,0,0.8),-1px -1px 1px rgba(0,0,0,0.8),1px -1px 1px rgba(0,0,0,0.8),-1px 1px 1px rgba(0,0,0,0.8); +transition:text-shadow; +-moz-transition:text-shadow 0.2s; /* Firefox 4 */ +-webkit-transition:text-shadow 0.2s; /* Safari 和 Chrome */ +-o-transition:text-shadow 0.2s; /* Opera */
+}
+.paginator>a:hover{ +font-weight:bold; +color:white; +text-shadow:1px 1px 1px rgba(0,0,0,0.4),-1px -1px 1px rgba(0,0,0,0.4),1px -1px 1px rgba(0,0,0,0.4),-1px 1px 1px rgba(0,0,0,0.4),0px 0px 10px rgba(140,203,255,0.8),0px 0px 10px rgba(140,203,255,0.8),0px 0px 10px rgba(140,203,255,0.8),0px 0px 10px rgba(140,203,255,0.8); +}.paginator>a:before{
+content:" ";
+display:inline-block;
+margin-left:20px;
+height:10px;
+width:10px;
+background-color:transparent;}
+#about{
+font-size:1.5em;
+display:block;
+text-align:center;
+color:#ccc;
+}
+#about a{text-decoration:underline;color:#ccc;font-family:jim nightshade;}
\ No newline at end of file diff --git a/franticworld/static/css/pygments.css b/franticworld/static/css/pygments.css new file mode 100644 index 0000000..3fbcb47 --- /dev/null +++ b/franticworld/static/css/pygments.css @@ -0,0 +1,61 @@ +/* .highlight { background: #eeffcc; } */ +.highlight .hll { background-color: #ffffcc } +.highlight .c { color: #75715E; font-style: italic } /* Comment */ +.highlight .k { color: #F92672; font-weight: bold } /* Keyword */ +.highlight .o { color: #F92672 } /* Operator */ +.highlight .cm { color: #75715E; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #F92672 } /* Comment.Preproc */ +.highlight .c1 { color: #75715E; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #75715E; background-color: #000000 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #303030 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0040D0 } /* Generic.Traceback */ +.highlight .kc { color: #F92672; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #F92672; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #F92672; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #F92672 } /* Keyword.Pseudo */ +.highlight .kr { color: #F92672; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #F92672 } /* Keyword.Type */ +.highlight .m { color: #AE81FF } /* Literal.Number */ +.highlight .s { color: #E6DB74 } /* Literal.String */ +.highlight .na { color: #E6DB74 } /* Name.Attribute */ +.highlight .nb { color: #F92672 } /* Name.Builtin */ +.highlight .nc { color: #ff8300; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #F92672 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #ff8300; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #F92672; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #777777 } /* Text.Whitespace */ +.highlight .mf { color: #AE81FF } /* Literal.Number.Float */ +.highlight .mh { color: #AE81FF } /* Literal.Number.Hex */ +.highlight .mi { color: #AE81FF } /* Literal.Number.Integer */ +.highlight .mo { color: #AE81FF } /* Literal.Number.Oct */ +.highlight .sb { color: #E6DB74 } /* Literal.String.Backtick */ +.highlight .sc { color: #E6DB74 } /* Literal.String.Char */ +.highlight .sd { color: #E6DB74; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #E6DB74 } /* Literal.String.Double */ +.highlight .se { color: #E6DB74; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #E6DB74 } /* Literal.String.Heredoc */ +.highlight .si { color: #E6DB74; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #E6DB74 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #F92672 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .il { color: #AE81FF } /* Literal.Number.Integer.Long */
\ No newline at end of file diff --git a/franticworld/static/img/pattern.png b/franticworld/static/img/pattern.png Binary files differnew file mode 100644 index 0000000..17b491e --- /dev/null +++ b/franticworld/static/img/pattern.png diff --git a/franticworld/templates/archives.html b/franticworld/templates/archives.html new file mode 100644 index 0000000..0e25a5d --- /dev/null +++ b/franticworld/templates/archives.html @@ -0,0 +1,13 @@ +{% extends "base.html" %}
+{% block content %}
+
+<h1>Archives for {{ SITENAME }}</h1>
+
+<dl>
+{% for article in dates %}
+ <dt>{{ article.date|strftime('%d %b,%Y') }}</dt>
+ <dd><a href='{{ article.url }}'>{{ article.title }}</a></dd>
+{% endfor %}
+</dl>
+
+{% endblock %}
diff --git a/franticworld/templates/article.html b/franticworld/templates/article.html new file mode 100644 index 0000000..ecb4bfe --- /dev/null +++ b/franticworld/templates/article.html @@ -0,0 +1,34 @@ +{% extends "base.html" %} +{% block title %}{{ article.title }} | {{ SITENAME }}{% endblock title %} +{% block content %} + +<div class="metabox"> + <p class="metaday">{{ article.date|strftime('%j') }}</p> + <p class="metayear">{{ article.date|strftime('%Y') }}</p> + <p class="metacategory">{{ article.category }}</p> +</div> +<div class="arcticlecontentbox"> + <div class="articlecontent"> + <a class="articletitle" href="{{ BLOGURL }}/{{ article.url }} " >{{ article.title }}</a> + {{ article.content }} + </div> + + {% if DISQUS_SITENAME %} + <div class="comments"> + <div id="disqus_thread"></div> + <script type="text/javascript"> + var disqus_identifier = "{{ article.url }}"; + (function() { + var dsq = document.createElement('script'); + dsq.type = 'text/javascript'; dsq.async = true; + dsq.src = 'http://{{ DISQUS_SITENAME }}.disqus.com/embed.js'; + (document.getElementsByTagName('head')[0] || + document.getElementsByTagName('body')[0]).appendChild(dsq); + })(); + </script> + </div> + {% endif %} + +</div> + +{% endblock content %}
\ No newline at end of file diff --git a/franticworld/templates/author.html b/franticworld/templates/author.html new file mode 100644 index 0000000..bde672c --- /dev/null +++ b/franticworld/templates/author.html @@ -0,0 +1,5 @@ +{% extends "index.html" %}
+{% block title %}{{ SITENAME }} - {{ author }}{% endblock %}
+{% block content %}
+<h2>Articles by {{ author }}</h2>
+{% endblock content %}
\ No newline at end of file diff --git a/franticworld/templates/authors.html b/franticworld/templates/authors.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/franticworld/templates/authors.html diff --git a/franticworld/templates/base.html b/franticworld/templates/base.html new file mode 100644 index 0000000..1dd9464 --- /dev/null +++ b/franticworld/templates/base.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang="{{ DEFAULT_LANG }}"> +<head> + {% block head %} + <title>{% block title %}{{ SITENAME }}{% endblock title %}</title> + <meta charset="utf-8" /> + <meta name="author" content="{{ AUTHOR }}"> + <link rel="stylesheet" href="{{ SITEURL }}/theme/css/franticworld.css" type="text/css" /> + <link href="{{ SITEURL }}/theme/css/pygments.css" rel="stylesheet"> + {% endblock head %} +</head> +<body background="{{ SITEURL }}/theme/img/pattern.png"> + <div class="nav-banner"> + <a href="{{ SITEURL }}">{{ SITENAME }}</a> + </div> + + <div class="content"> + {% block content %} + {% endblock content %} + </div> + + <div class="sidebar"> + {% include 'sidebar.html' %} + </div> + + <footer id="contentinfo" class="body"> + <address id="about" class="vcard body"> + Proudly powered by <a href="http://getpelican.com/">Pelican</a>, + which takes great advantage of <a href="http://python.org">Python</a>, + Theme by <a href="http://frantic1048.com/">Frantic1048</a>. + </address><!-- /#about --> + </footer><!-- /#contentinfo --> +</body> +</body> +</html>
\ No newline at end of file diff --git a/franticworld/templates/categories.html b/franticworld/templates/categories.html new file mode 100644 index 0000000..6708a47 --- /dev/null +++ b/franticworld/templates/categories.html @@ -0,0 +1 @@ +{% extends "base.html" %}
{% block content %}
<ul>
{% for category, articles in categories %}
<li><a href="{{ category.url }}">{{ category }}</a></li>
{% endfor %}
</ul>
{% endblock %}
\ No newline at end of file diff --git a/franticworld/templates/category.html b/franticworld/templates/category.html new file mode 100644 index 0000000..816aaf0 --- /dev/null +++ b/franticworld/templates/category.html @@ -0,0 +1,2 @@ +{% extends "index.html" %}
+{% block title %}{{ SITENAME }} - {{ category }}{% endblock %}
\ No newline at end of file diff --git a/franticworld/templates/index.html b/franticworld/templates/index.html new file mode 100644 index 0000000..e3b8c81 --- /dev/null +++ b/franticworld/templates/index.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} +{% block content %} + +{% for article in articles_page.object_list %} +<div class="summarycontainer"> + <div class="metabox"> + <p class="metaday">{{ article.date|strftime('%j') }}</p> + <p class="metayear">{{ article.date|strftime('%Y') }}</p> + <p class="metacategory">{{ article.category }}</p> + </div> + <div class="summarybox"> + <a class="summarytitle" href="{{ BLOGURL }}/{{ article.url }} " >{{ article.title }}</a> + {{ article.summary }} + <a class="btnmore" href="{{ BLOGURL }}/{{ article.url }}">more ...</a> + </div> +</div> +{% endfor %} + +{% include 'pagination.html' %} +{% endblock content %}
\ No newline at end of file diff --git a/franticworld/templates/page.html b/franticworld/templates/page.html new file mode 100644 index 0000000..3b569b5 --- /dev/null +++ b/franticworld/templates/page.html @@ -0,0 +1,27 @@ +{% extends "base.html" %}
+{% block title %}{{ page.title }} | {{ SITENAME }}{% endblock %}
+{% block content %}
+<div id="content" class="page-body">
+ <h1 class="page-title">{{ page.title }}</h1>
+ <hr></hr>
+ {{ page.content }}
+ {% if DISQUS_SITENAME %}
+ <div class="comments">
+ <div id="disqus_thread"></div>
+ <script type="text/javascript">
+ var disqus_identifier = "{{ page.url }}";
+ (function() {
+ var dsq = document.createElement('script');
+ dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://{{ DISQUS_SITENAME }}.disqus.com/embed.js';
+ (document.getElementsByTagName('head')[0] ||
+ document.getElementsByTagName('body')[0]).appendChild(dsq);
+ })();
+ </script>
+ </div>
+ {% endif %}
+</div>
+
+
+
+{% endblock %}
diff --git a/franticworld/templates/pagination.html b/franticworld/templates/pagination.html new file mode 100644 index 0000000..a1300e8 --- /dev/null +++ b/franticworld/templates/pagination.html @@ -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">«prev</a> + {% else %} + <a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.previous_page_number() }}.html">«</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">next»</a> + {% endif %} +</p> +{% endif %} diff --git a/franticworld/templates/sidebar.html b/franticworld/templates/sidebar.html new file mode 100644 index 0000000..c8811c2 --- /dev/null +++ b/franticworld/templates/sidebar.html @@ -0,0 +1 @@ +<div class="sidebarcategory">
<h4>Categories</h4>
{% for cat, null in categories %}
<li><a href="{{ SITEURL }}/{{ cat.url }}">{{ cat }}</a></li>
{% endfor %}
</div>
<div class="sidebarpages">
{% if PAGES %}
<h4>Pages</h4>
{% for page in PAGES %}
<li><a href="{{ SITEURL }}/{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
{% endif %}
</div>
<div class="sidebarblogroll">
{% if LINKS %}
<h4>Blogroll</h4>
{% for name, link in LINKS %}
<li><a href="{{ link }}" target="_blank">{{ name }}</a></li>
{% endfor %}
{% endif %}
</div>
<div class="sidebarsocial">
{% if SOCIAL %}
<h4>Social</h4>
{% for name, link in SOCIAL %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
{% endif %}
</div>
\ No newline at end of file diff --git a/franticworld/templates/tag.html b/franticworld/templates/tag.html new file mode 100644 index 0000000..68cdcba --- /dev/null +++ b/franticworld/templates/tag.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %} diff --git a/franticworld/templates/tags.html b/franticworld/templates/tags.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/franticworld/templates/tags.html |