docpad

Configurable redirect URL in DocPad


I'm using DocPad to generate system documentation. I am including release notes in the format

I want to include a link which will redirect to the most recent release.

My question: how do I make a link that will redirect to a relative URL based on configuration? I want this to be easily changeable by a non-programmer.

Update: I've added cleanurls into my docpad.js, similar to example below. (see code below). But using "grunt docpad:generate" seems to skip making the redirect (is this an HTML page?). I've a static site. I also confirmed I'm using the latest cleanurls (2.8.1) in my package.json.

Here's my docpad.js

'use strict';

var releases = require('./releases.json');  // list them as a list, backwards: ["1.3", "1.2", "1.1", "1.0"]

var latestRelease = releases.slice(1,2)[0];

module.exports = {
    outPath: 'epicenter/docs/',
    templateData: {
        site: {
            swiftype: {
                apiKey: 'XXXX',
                resultsUrl: '/epicenter/docs/search.html'
            },
            ga: 'XXXX'
        },
    },
    collections: {
        public: function () {
            return this.getCollection('documents').findAll({
                relativeOutDirPath: /public.*/, isPage: true
            });
        }
    },
    plugins: {
        cleanurls: {
            simpleRedirects: {'/public/releases/latest': '/public/releases/' + latestRelease}
        },
        lunr: {
            resultsTemplate: 'src/partials/teaser.html.eco',
            indexes: {
                myIndex: {
                    collection: 'public',
                    indexFields: [{
                        name: 'title',
                        boost: 10
                    }, {
                        name: 'body',
                        boost: 1
                    }]
                }
            }
        }
    }
};

When I run grunt docpad:generate, my pages get generated, but there is an error near the end:

/data/jenkins/workspace/stage-epicenter-docs/docs/docpad/node_modules/docpad-plugin-cleanurls/node_modules/taskgroup/node_modules/ambi/es6/lib/ambi.js:5
export default function ambi (method, ...args) {
^^^^^^

I can't tell if that's the issue preventing this from running but it seems suspicious.


Solution

  • Providing that your configuration is available to the DocPad Configuration File, you can use the redirect abilities of the cleanurls plugin to accomplish this for both dynamic and static environments.

    With a docpad.coffee configuration file, it would look something like this:

    releases = require('./releases.json')  # ['1.0', '1.1', '1.2', '1.3']
    latestRelease = releases.slice(-1)[0]
    
    docpadConfig =
        plugins:
            cleanurls:
                simpleRedirects:
                    '/releases/latest': '/releases/' + latestRelease
    
    module.exports = docpadConfig