Posts about nikola (old posts, page 5)

2013-02-20 10:13

Math Works Now

Docutils has supported math rendering for a while now. That means Nikola should have supported it for a while too, but never did correctly because ... well, because noone ever tried, maybe?

Well, it does now, because Damian Avila has fixed it!

Read more…

2013-02-19 12:49

Nikola 5.3 released

I am happy to announce the release of version 5.3 of Nikola a static blog/site generator. It includes some minor features and a good amount of bugfixing. Upgrading to it should not cause you any trouble, as far as I know.

Here's the changelog:

Features

  • Bootstrap 2.3.0
  • Optionally use content distribution networks for jquery and twitter-bootstrap (USE_CDN option)
  • Improve progressive rendering by moving javascript to the bottom of pages
  • New Brazilian portuguese translation.
  • New planetoid experimental extra_plugin

Bugfixes

  • Make really sure we import the right conf.py
  • Make SLUG_TAG_PATH a config dep for most pages
  • Removed meta title tag for better HTML validation
  • Removed #999 background from footnote backlink.
  • Made footnote references be superscripted.
  • Centered figure's image and caption.
  • Removed outset border from admonitions.
  • Use default theme as last resource for messages/translations
  • DATE_FORMAT option was being ignored
  • Remove trailing "" on windows gallery links (Issue #298)
  • Inconsistent breadcrumbs in gallery pages (Issue #303)
  • Use source files as bundle dependencies instead of outputs (Issue #294)

Enjoy!

2013-02-06 20:37

Nikola 5.2 released!

I am thrilled to announce that you can now download Nikola 5.2. a new version of my static blog/site generator.

What's new in this version? A LOT. Don't let the minor version tick fool you, this version is packed with goodness. Let's start with features:

You can easily embed more content:

  • New vimeo directive for restructured text.
  • Custom "gist" directive providing reStructured text support for GitHub gists.

You can write your content in almost any markup:

  • Textile markup support.
  • Creole Wiki markup support.
  • txt2tags markup support.
  • bbcode markup support.
  • And of course, it still supports reStructured text, Markdown and HTML.

More languages:

  • New Catalá translation
  • New polish translation.
  • New Simplified Chinese translation.
  • Use multilingual Disqus (although it doesn't seem to work)

You can import your data:

  • New Blogger/Blogspot importer
  • Much improved Wordpress importer
  • Extract metadata from filename by using regexp (helpful for importing from octopress or other systems).

You can do fancier and more configurable sites:

  • One-page, dynamic-loading, client-rendered site plugin (task_mustache)
  • Recursive post/story folders
  • New COMMENTS_IN_GALLERIES and COMMENTS_IN_STORIES options.
  • Local search based on Tipue (extra_plugins/task_localsearch)
  • Added comments to image galleries
  • New option RSS_TEASERS
  • New STORY_INDEX option to generate index.html in story folders.
  • Add multi size favicon support.

You can use Python 2.6 or higher ... including Python 3. The only missing bit for full Python 3 support is Google sitemap generation.

And of course, a lot of bugs got smashed:

  • Added sane defaults for most options, so you can have a lean config file.
  • Made layout of the site theme responsive, with collapsing navbar.
  • Use timeline instead of parsing post_pages in generic_page_renderer and task_render_pages.
  • Updated disqus integration code, added identifiers so it works on any URL.
  • Make sure folder links end in "/" in the gallery code.
  • Removed copy of PyRSS2Gen, made it a dependency.
  • Detect "namespace" dependencies for Mako templates.
  • Use consistent encodings in RSS feeds.
  • Refactored disqus code into separate helpers
  • Use the correct extension (or raise an error) on new_post
  • Fix titles that include quotes
  • Updated to current CSS from docutils (was using version from 2005)
  • Avoid needless regeneration of gallery indexes.
  • Always ensure the folder for the new post exists.
  • Get title from filename if not available in metadata.
  • Don't copy sources if they end in ".html"
  • Don't link to unexisting translations.
  • Sort tags case insensitive.

Enjoy!

2013-01-30 17:26

Lunch-hour feature in Nikola: Blogger import

Today at lunch, I added support for importing blogger (maybe also blogspot? They seem to be the same nowadays) blogs into Nikola my static blog/site engine.

What works?

Well, the only site I tried works, mostly.

  • Posts
  • Pages
  • Tags
  • Drafts
  • Blog Metadata (except language)
  • Redirects to keep URLs stable (at least it tries really hard!)
  • URL rewriting in the posts (it tries!)
What's not there?
  • Comments import (it makes more sense to import them via Disqus' import tool)
  • Attachments (images and such)
  • Much testing

It's basically on par with the Wordpress import, except noone has used it for real. So, feel free to try!

(It's nikola import_blogger name_of_the_dump.xml)

2013-01-22 17:05

Nikola Can Parse That

Just for completeness' sake I have gone over Wikipedia's list of lightweight markup languages and added support in Nikola (a static site and blog generator) for a couple of them: BBCode and txt2tags, which brings the number of supported markup formats to 7 (the others are reStructured text, markdown, HTML, textile and Wiki).

Of the list of markup languages, the only missing ones with a Python implementation are AsciiDoc and Markdown Extra.

Why bother with this? It's not as if there was someone asking for BBCode support. However, one of the uses I want to support is archiving sites. Suppose you have a forum you want to shut down? I want you to be able to archive it (even if it's some work) and keep the data out there. A wiki? Same thing.

This is a first step in that direction.

2013-01-10 17:24

Adding Support for a Markup to Nikola

One of the goals for Nikola, my static site/blog generator is that it should be easy to extend. For example, today I added support for two markups: textile and CreoleWiki.

Since Nikola already supported HTML, reStructuredText and Markdown, adding a couple more is not very difficult. Here's how:

  1. Create a .plugin file like this one:
[Core]
Name = textile
Module = compile_textile

[Documentation]
Author = Roberto Alsina
Version = 0.1
Website = http://nikola.ralsina.me
Description = Compile Textile into HTML

Then you need to create a python module called (in this case) compile_textile.py

That file is boilerplate plus two methods, compile_html and create_post

The compile_html method takes two arguments, one file from which it reads the markup, and one to write HTML. Example:

def compile_html(self, source, dest):
    if textile is None:
        raise Exception('To build this site, you need to install the "textile" package.')
    try:
        os.makedirs(os.path.dirname(dest))
    except:
        pass
    with codecs.open(dest, "w+", "utf8") as out_file:
        with codecs.open(source, "r", "utf8") as in_file:
            data = in_file.read()
        output = textile(data, head_offset=1)
        out_file.write(output)

Make sure to use utf8 everyhere.

The create_post function is used to create a new, empty, post with some metadata in it. Example:

def create_post(self, path, onefile=False, title="", slug="", date="", tags=""):
    with codecs.open(path, "wb+", "utf8") as fd:
        if onefile:
            fd.write('<notextile>  <!--\n')
            fd.write('.. title: %s\n' % title)
            fd.write('.. slug: %s\n' % slug)
            fd.write('.. date: %s\n' % date)
            fd.write('.. tags: %s\n' % tags)
            fd.write('.. link: \n')
            fd.write('.. description: \n')
            fd.write('--></notextile>\n\n')
        fd.write("\nWrite your post here.")

The metadata has to be in the form ".. fieldname: fieldvalue" and usually needs to be wrapped in a comment so that it's not shown in the output.

The onefile parameter means you have to write that metadata in the post. If it's False, you don't.

In some rare cases (Creole, I am looking at you) comments are not supported and you should raise an exception if onefile is True.

And that's it, markup support is fairly easy to add as long as there is a python implementation of a function to convert markup into html.

2013-01-01 19:03

Client-rendered, one-URL, dynamic, static site.

My vacations end tomorrow. So, the time to spend hacking fun, personal, free stuff is going to be limited because of the time spent coding fun, free stuff for money. So, I decided to finish with a bit of whimsy.

I implemented a completely client-rendered, one-URL, dynamic blog. Which is actually totally static.

In fact, that blog is this blog, just with a twist. If you go to this URL you will see what's basically this very site, with comments and everything as usual. But if you click on "Previous Post" ... well, it stays in the same page, even though it displays a different post :-)

The magic is the new, experimental, dynamic task_mustache plugin for my static site generator, Nikola. which does the following:

  1. Renders post data as JSON files instead of HTML
  2. Creates a HTML file that is really a mustache.js template
  3. Creates a HTML file with some bits of Javascript that loads the template and the newest post's data.
  4. If you access that mustache.html with a fragment, it uses that to fetch JSON data and rewrite itself.

And that's it. It actually loads fast, and regenerates very fast, since it does much less than the real site. There are a bunch of things that will dump you out of the "dynamic" site, like tag links, and whatever, but it works surprisingly well (and if you want to theme it, it's just one template).

This is the first of a new kind of thing for Nikola, the "extra plugins". Basically, stuff that is too weird, specific or useless for the general distro, will go there, and to use those plugins, you have to create a plugins/ folder in your site and add it there manually.

Enjoy!

2012-12-27 22:31

Nikola Feature-by-request: tag cloud!

I asked for feature requests for Nikola my static site generator. I got some. One was from long-time user Kay Hayen, so I just couldn't say no.

He asked for tag clouds. Look:

Anything in here will be replaced on browsers that support the canvas element

Cute, isn't it? And it's real, actual tag data from this very site. With links!

How it's done:

Nikola generates a JSON file that has the cloud data (tag name, size, link), and that's processed by JQuery and tagCanvas and ... well, it works.

You have to add jquery.tagcanvas.min.js somewhere and embed a whole pile of raw HTML (see here for details) but hey, it works.

Hope you are happy, Kay, you made me code javascript, dude ;-)

It's probably rather "easy" to make it use any of these instead of tagCanvas if anyone is so inclined.

Contents © 2000-2019 Roberto Alsina