Configurable redirect URL in DocPad

260 Views Asked by At

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.

1

There are 1 best solutions below

6
balupton On BEST ANSWER

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