Git Product home page Git Product logo

stone's Introduction

Stone

Yet another static website generator, with plugin support.

Used by (www|blog).half.systems to convert Markdown and Jinja2 into HTML.

Installation

$ pip install stone-site

Usage

To get started with `stone`:

# Create template layout
stone example_site init --site-name 'example.com'
# Generate site
stone example_site generate
# Add a new page
stone example_site newpage --name "About Us"

By default Stone is configured to turn Markdown + YAML metadata + Jinja2 templates into HTML but as it has support for custom plugins it can generate anything it has code for.

Site Configuration

Configuration File

Stone generates sites based on the contents of site.json. Each site can specify which backends, generators and renderers to use, custom versions will be loaded from the $HOME/.stone directory.

Example

An example project that generates an example landing page and blog is included in Stone's project source. you can build it by running:

stone example generate

Folder Structure

Stone was originally designed to generate the subdomains of half.systems. The following is the layout of the sites:

.
├── blog
│   └── ...
├── main
│   └── ...
├── site.json
└── templates
    └── ...

site.json is flexiable about the location of templates and files. As such your not constrained to any particular layout for your site. You could have separate template folders inside each site or one shared in the project root. Each site can specify its template directory

Pages

By default pages are Markdown file, that can have optional YAML metadata that describe the attributes of the page including the title and which template to uses. For example:

template: base.html
title: Hello, World

# This is a header

Here is some lovely content.

Stone makes all metadata available to page templates. Any data templates may use can be embedded into a page. For exampled: an author's name, email, the date the page was written. The behaviour is dependent on the generator and renderers used. See the [renderers](docs/renderers.md) and [generators](docs/generators.md) for more details.

Templates

By default templates are HTML pages with jinja2 markup.

base.html:

<html>
  <head>
    {% block head %}
    <title>{{ title }}</title>
    {% endblock %}
  <head>
  <body>
  {% block body %}
    <h1>{{ title }}</title>
    <div id="post">
      <!-- Most likely we are going to pass more html here --->
      {{ content|safe }}
    </div>
  {% endblock %}
  </body>
</html>

Generating

To generate a particular site invoke stone with the location of the project's root folder.

stone root_folder generate

Backends - File

The file backend will write out each file to the specified target path.

Backends - S3

The S3 backend will upload each object to the specified bucket. Currently only html pages are supported, they will be gzipped and have a default caching time of 1 hour.

The minimum required for this backend is:

"backends": [
  {
    "type": "s3",
    "bucket": "example.com",
  }
]

The full range of options is:

"backends": [
  {
    "type": "s3",
    "bucket": "example.com",
    "prefix": "website"
    "cache-controller": "max-age:360",
    # https://tools.ietf.org/html/rfc5646
    "content-language": "en-GB",
    "metadata": {
      "key": "value"
    }
    "tags": {
      "key", "value"
    }
  }
]

stone's People

Contributors

neuralsandwich avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

fatconan

stone's Issues

AWS backend

  • Push things to S3
  • Compare local and production files
  • Push only what is needed

Development mode

Run in daemon mode so you can actively work on your site and make changes faster

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.