| @@ -0,0 +1,77 @@ | |||||
| === | |||||
| title: Overview | |||||
| subtitle: hyde in a nutshell | |||||
| created: 2011-01-25 21:31:03 | |||||
| === | |||||
| §§ blurb | |||||
| Hyde is a static website generator written in python. While Hyde took | |||||
| life as the [awesome Jekyll][Jekyll]'s evil twin, it has since been | |||||
| completely consumed by [the dark side][python] to have an identity of its own. | |||||
| Hyde desires to fulfill the lofty goal of removing the | |||||
| [pain points][static cons] involved in creating and maintaining | |||||
| [static websites][static pros]. | |||||
| §§ . | |||||
| ## Spotlight | |||||
| * Support for powerful template languages like [Jinja2][] complemented | |||||
| with custom tags and filters. | |||||
| * [Rich object model][hyde objects] and | |||||
| [overridable hierarchical metadata][metadata] thats available for use in | |||||
| templates. | |||||
| * Configurable [sorting, filtering and grouping][sorter] support. | |||||
| * Extensible [plugin architecture][plugins] with Text preprocessing and html | |||||
| postprocessing support for complex content transformations. | |||||
| * Instant preview using built-in [webserver][server] that regenerates content | |||||
| if needed. | |||||
| ## Source | |||||
| Hyde is [socially coded on github][hydepy]. | |||||
| ## Install | |||||
| There will be a package soon on pypi, but this works for now: | |||||
| ~~~sh~~~ | |||||
| pip install -e https://github.com/hydepy/hyde#egg=hyde | |||||
| ~~~~~~~~ | |||||
| You can find more detailed documentation in the [installation section][install]. | |||||
| ## Project Roadmap | |||||
| 1. Support for Django and Mako | |||||
| * Template implementation | |||||
| * Default layouts | |||||
| 2. Support for other markup languages | |||||
| * restructured text | |||||
| * textile | |||||
| * asciidoc | |||||
| 3. Text Compression | |||||
| * Slimmer | |||||
| * pre-gzipping | |||||
| * uglifyjs | |||||
| 4. Image Manipulation | |||||
| * Optipng Compression | |||||
| * Thumbnail generation | |||||
| * Photo Data Extraction | |||||
| 5. Feed / Listing generation | |||||
| 6. Translation | |||||
| [Jekyll]: http://jekyllrb.com | |||||
| [Jinja2]: http://jinja.pocoo.org/ | |||||
| [hyde objects]: [[/template/variables]] | |||||
| [hydepy]: https://github.com/hydepy/hyde | |||||
| [install]: [[/installation]] | |||||
| [metadata]: [[/plugins/metadata]] | |||||
| [plugins]: [[/plugins]] | |||||
| [python]: http://python.org | |||||
| [server]: [[/server]] | |||||
| [sorter]: [[plugins/sorter]] | |||||
| [static cons]: [[/static/#cons]] | |||||
| [static pros]: [[/static/#pros]] | |||||
| @@ -0,0 +1,50 @@ | |||||
| - overview | |||||
| - getting started | |||||
| - installation | |||||
| - command line | |||||
| - your first hyde website | |||||
| - configuration | |||||
| - metadata | |||||
| - sorting | |||||
| - texty | |||||
| - templating guide | |||||
| - jinja2 | |||||
| - context | |||||
| - site | |||||
| - node | |||||
| - resource | |||||
| - custom context variables | |||||
| - markdown | |||||
| - typogrify | |||||
| - include text | |||||
| - mark and refer | |||||
| - accessing arbitrary nodes and resources by path | |||||
| - snippets | |||||
| - breadcrumbs | |||||
| - table of contents | |||||
| - excerpts | |||||
| - latest excerpt | |||||
| - demo pages (example page + documentation) | |||||
| - extending hyde | |||||
| - contributing | |||||
| - unit tests | |||||
| - git workflow | |||||
| - pull requests | |||||
| - New Template Languages | |||||
| - The template interface | |||||
| - features to support | |||||
| - Plugins | |||||
| - What can be done | |||||
| - The plugin interface | |||||
| - Texty abstract plugin | |||||
| - Error handling | |||||
| - Layouts | |||||
| - Custom Layouts | |||||
| - New Themes for existing layouts | |||||
| - Apps | |||||
| - Switching | |||||
| - From hyde 0.5 | |||||
| - From Jekyll | |||||
| - From wordpress or similar | |||||
| @@ -0,0 +1,29 @@ | |||||
| mode: development | |||||
| media_root:: media | |||||
| media_url: /media | |||||
| base_url: / | |||||
| template: hyde.ext.jinja2 | |||||
| plugins: | |||||
| - hyde.ext.plugins.meta.MetaPlugin | |||||
| - hyde.ext.plugins.auto_extend.AutoExtendPlugin | |||||
| - hyde.ext.plugins.less.LessCSSPlugin | |||||
| - hyde.ext.plugins.blockdown.BlockdownPlugin | |||||
| - hyde.ext.plugins.sorter.SorterPlugin | |||||
| - hyde.ext.plugins.markings.MarkingsPlugin | |||||
| - hyde.ext.plugins.markings.ReferencePlugin | |||||
| - hyde.ext.plugins.syntext.SyntextPlugin | |||||
| context: | |||||
| meta: | |||||
| nodemeta: meta.yaml | |||||
| title: Hyde - A Python Static Website Generator | |||||
| keywords: > | |||||
| hyde,python,django,jinja,static website,static site, | |||||
| generator,html generator | |||||
| author: Lakshmi Vyasarajan | |||||
| less: | |||||
| app: ~/local/bin/lessc | |||||
| markdown: | |||||
| extensions: | |||||
| - def_list | |||||
| - headerid | |||||
| - tables | |||||
| @@ -0,0 +1,7 @@ | |||||
| mode: development | |||||
| content_root: stuff # Relative path from site root | |||||
| media_root: media # Relative path from site root | |||||
| media_url: /media | |||||
| widgets: | |||||
| plugins: | |||||
| aggregators: | |||||
| @@ -0,0 +1,22 @@ | |||||
| <!doctype html> | |||||
| <title>not found</title> | |||||
| <style> | |||||
| body { text-align: center;} | |||||
| h1 { font-size: 50px; } | |||||
| body { font: 20px Constantia, 'Hoefler Text', "Adobe Caslon Pro", Baskerville, Georgia, Times, serif; color: #999; text-shadow: 2px 2px 2px rgba(200, 200, 200, 0.5); } | |||||
| ::-moz-selection{ background:#FF5E99; color:#fff; } | |||||
| ::selection { background:#FF5E99; color:#fff; } | |||||
| details { display:block; } | |||||
| a { color: rgb(36, 109, 56); text-decoration:none; } | |||||
| a:hover { color: rgb(96, 73, 141) ; text-shadow: 2px 2px 2px rgba(36, 109, 56, 0.5); } | |||||
| span[frown] { transform: rotate(90deg); display:inline-block; color: #bbb; } | |||||
| </style> | |||||
| <details> | |||||
| <summary><h1>Not found</h1></summary> | |||||
| <p><span frown>:(</span></p> | |||||
| </details> | |||||
| @@ -0,0 +1,8 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block main %} | |||||
| Hi! | |||||
| I am a test template to make sure jinja2 generation works well with hyde. | |||||
| {{resource.name}} | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,8 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block main %} | |||||
| Hi! | |||||
| I am a test template to make sure jinja2 generation works well with hyde. | |||||
| {{resource.name}} | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,8 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block main %} | |||||
| Hi! | |||||
| I am a test template to make sure jinja2 generation works well with hyde. | |||||
| {{resource.name}} | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,8 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block main %} | |||||
| Hi! | |||||
| I am a test template to make sure jinja2 generation works well with hyde. | |||||
| {{resource.name}} | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,8 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block main %} | |||||
| Hi! | |||||
| I am a test template to make sure jinja2 generation works well with hyde. | |||||
| {{resource.name}} | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,8 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block main %} | |||||
| Hi! | |||||
| I am a test template to make sure jinja2 generation works well with hyde. | |||||
| {{resource.name}} | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,25 @@ | |||||
| <?xml version="1.0"?> | |||||
| <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> | |||||
| <cross-domain-policy> | |||||
| <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html --> | |||||
| <!-- Most restrictive policy: --> | |||||
| <site-control permitted-cross-domain-policies="none"/> | |||||
| <!-- Least restrictive policy: --> | |||||
| <!-- | |||||
| <site-control permitted-cross-domain-policies="all"/> | |||||
| <allow-access-from domain="*" to-ports="*" secure="false"/> | |||||
| <allow-http-request-headers-from domain="*" headers="*" secure="false"/> | |||||
| --> | |||||
| <!-- | |||||
| If you host a crossdomain.xml file with allow-access-from domain=“*” | |||||
| and don’t understand all of the points described here, you probably | |||||
| have a nasty security vulnerability. ~ simon willison | |||||
| --> | |||||
| </cross-domain-policy> | |||||
| @@ -0,0 +1,4 @@ | |||||
| body{ | |||||
| margin: 0 auto; | |||||
| width: 960px; | |||||
| } | |||||
| @@ -0,0 +1,5 @@ | |||||
| # www.robotstxt.org/ | |||||
| # www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449 | |||||
| User-agent: * | |||||
| @@ -0,0 +1,4 @@ | |||||
| author: Lakshmi Vyasarajan | |||||
| description: A test layout for hyde. | |||||
| template: jinja2 (2.6) | |||||
| version: 0.1 | |||||
| @@ -0,0 +1,57 @@ | |||||
| {% extends "root.html" %} | |||||
| {% block all %} | |||||
| <!doctype html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| {% block starthead %}{% endblock starthead %} | |||||
| <meta charset="{{resource.meta.charset|default('utf-8')}}"> | |||||
| <meta http-equiv="X-UA-Compatible" content="{{resource.meta.compatibility|default('IE=edge,chrome=1')}}"> | |||||
| <title>{% block title %}{{resource.meta.title}}{% endblock %}</title> | |||||
| <meta name="description" content="{{resource.meta.description}}"> | |||||
| <meta name="author" content="{{resource.meta.author}}"> | |||||
| <!-- Mobile viewport optimized: j.mp/bplateviewport --> | |||||
| <meta name="viewport" content="{{resource.meta.viewport|default('width=device-width, initial-scale=1.0')}}"> | |||||
| {% block favicons %} | |||||
| <!-- Place favicon.ico & apple-touch-icon.png in the root of your domain and delete these references --> | |||||
| <link rel="shortcut icon" href="{{ media_url('/favicon.ico') }}"> | |||||
| <link rel="apple-touch-icon" href="{{ media_url('/apple-touch-icon.png') }}"> | |||||
| {% endblock favicons %} | |||||
| {% block css %} | |||||
| <link rel="stylesheet" href="{{ media_url('css/site.css') }}"> | |||||
| {% endblock css %} | |||||
| {% block endhead %}{% endblock endhead %} | |||||
| </head> | |||||
| <body id="{{resource.id if resource.id else resource.name_without_extension}}"> | |||||
| {% block content %} | |||||
| <div id="container"> | |||||
| {% block container %} | |||||
| <header> | |||||
| {% block header %}{% endblock header %} | |||||
| </header> | |||||
| <div id="main" role="main"> | |||||
| {% block main %}{% endblock main %} | |||||
| </div> | |||||
| <footer> | |||||
| {% block footer %}{% endblock %} | |||||
| </footer> | |||||
| {% endblock container%} | |||||
| </div> <!--! end of #container --> | |||||
| {% endblock content%} | |||||
| {% block js %} | |||||
| <!-- Javascript at the bottom for fast page loading --> | |||||
| {% block jquery %} | |||||
| <!-- Grab Google CDN's jQuery. fall back to local if necessary --> | |||||
| <script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"></script> | |||||
| {% endblock jquery %} | |||||
| {% block scripts %}{% endblock scripts %} | |||||
| {%endblock js %} | |||||
| </body> | |||||
| </html> | |||||
| {% endblock all %} | |||||
| @@ -0,0 +1,10 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block main %} | |||||
| <article> | |||||
| {% block article %}{% endblock %} | |||||
| </article> | |||||
| <aside> | |||||
| {% block aside %}{% endblock %} | |||||
| </aside> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1 @@ | |||||
| {% block all %}{% endblock all %} | |||||
| @@ -0,0 +1,7 @@ | |||||
| mode: development | |||||
| media_root:: media # Relative path from site root (the directory where this file exists) | |||||
| media_url: /media | |||||
| template: hyde.ext.jinja2 | |||||
| widgets: | |||||
| plugins: | |||||
| aggregators: | |||||