As creative expression, blogs and other authored web content qualify for copyright protection. Yet, a number of Pelican (a static site and blog generator) themes, including the default notmyidea and the one I am using, do not include configuration variables for displaying copyright, and more importantly, the terms of reuse, i.e., the license.

Presumably this is not because most blog writers don't expect their content to ever be reused. Of course, it is easy enough to tweak a theme's template(s) to include the author's choice of license. However, every tweak to a theme's templates makes it diverge a little more from its origin, and thus a little more difficult to upgrade it when the theme developer improves it. This is exactly the situation with the pelican-bootstrap3 theme I am using - it is under active development, including in fact by myself.

A Creative Commons license chooser as a macro

So I decided to address this in a way that would be reusable by the Pelican community. I'm a big fan of Creative Commons and their legal work to make the world's online content better shareable, and so I wrote a Jinja2 macro that generates, in a configurable way, a Creative Commons license mark, mirroring the choices that the Creative Commons license chooser offers, and the HTML markup that it generates. Jinja2 is the templating language that Pelican uses, and so any Pelican theme or Pelican-powered blog could take advantage of it. You can see the result at the bottom of this blog.

The code for the macro is on Github:

Here are its current capabilities as per its documentation:

{# Choose the license either by name (CC-BY, CC-BY-SA, CC-BY-NC-SA, or      #}
{# CC-BY-NC-ND), or by its features (allow derivatives: Yes, No, ShareAlike;#}
{# allow commercial reuse: Yes, No). Name, if provided, takes precedence,   #}
{# and case is ignored.                                                     #}
{#                                                                          #}
{# Optional:                                                                #}
{#   br_after_icon: if true put a line break after the license icon         #}
{#   attr_markup: if true create markup for fulll attribution               #}
{#   attr_props: if attr_markup, a dict with title, name, and url keys      #}
{#               specifying how under which title, to which creator, and    #}
{#               to which URL to attribute the work                         #}

How does it work?

As an example for how to apply this to a Pelican theme to add a configurable license mark, consider the change set in the pull request that applies it to the pelican-bootstrap3 theme. Apart from dropping the macro in an appropriate location, and adding configuration documentation to the README, here is where the macro is called:

              {% from 'includes/cc-license.html' import cc_license_mark %}
              <p><small>{{ cc_license_mark(cc_name=CC_LICENSE,derivatives=CC_LICENSE_DERIVATIVES,commercial=CC_LICENSE_COMMERCIAL,attr_markup=CC_ATTR_MARKUP,attr_props={'title':SITENAME,'name' if article else AUTHOR,'url':SITEURL}) }}</small></p>
          {% endif %}

In, you can then enable the license mark in two ways. Either you simply set its name, like so:

# Content licensing: CC-BY

Alternatively, you can specify which features you want the license mark to fulfill:

# Content licensing: permit derivatives, permit commercial use

Optionally, you can ask for full RDFa-compliant markup for the title, author, and source URL with which attribution should be made:

# Include human and machine-readable markup for title (name of the site), 
# author (article author or AUTHOR),  and URL (SITEURL) in license mark

Why not a plugin that uses the CC API?

Good question. For one, I haven't figured out yet how to cast this as a Pelican plugin. The documenation is not very details, and speaks about generators and writers, neither of which strikes me as an immediate fit. If it could be a generator plugin, how would it be invoked?

Second, sadly the Creative Commons API seems to have been neglected from maintenance. The 1.5 version is several years old, and even the "development" version still returns the 3.0 versions of the licenses. On the flip side, using the API probably wouldn't simplify anything, and instead would require being online when the site is generated.

Why no public domain (CC Zero) choice?

I haven't gotten to that yet. Most people I know would rather assert copyright even on content that isn't eligible, rather than waive it. But the feature is registered, and if you know how to add it, please fork the repo and submit a pull request.

Also, please add issues for any other features you'd like to see.

And why does a license mark matter?

Many people understand meanwhile that stating a license for software source code is important, because it achieves clarity on the terms of reuse. Creative Commons explains this much better, but in a nutshell, the same principle as for source code applies to authored content. As creative expression, copyright vests in its creator whether they assert it or not. A license grants rights that users would otherwise not have, and it is explicit about them.


comments powered by Disqus