|
1 | | -var config = require("./config.json"); |
| 1 | +var yaml = require( "js-yaml" ), |
| 2 | + config = require("./config.json"); |
2 | 3 |
|
3 | 4 | module.exports = function( grunt ) { |
4 | 5 |
|
@@ -41,9 +42,56 @@ grunt.initConfig({ |
41 | 42 | wordpress: grunt.utils._.extend({ |
42 | 43 | dir: "dist/wordpress", |
43 | 44 | order: "order.yml" |
44 | | - }, grunt.file.readJSON( "config.json" ) ) |
| 45 | + }, grunt.file.readJSON( "config.json" ) ) |
45 | 46 | }); |
46 | 47 |
|
| 48 | + |
| 49 | + |
| 50 | +// Process a YAML order file and return an object of page slugs and their ordinal indices |
| 51 | +grunt.registerHelper( "read-order", function( orderFile ) { |
| 52 | + var order, |
| 53 | + map = {}, |
| 54 | + index = 0; |
| 55 | + |
| 56 | + try { |
| 57 | + order = yaml.load( grunt.file.read( orderFile ) ); |
| 58 | + } catch( error ) { |
| 59 | + grunt.warn( "Invalid order file: " + orderFile ); |
| 60 | + return null; |
| 61 | + } |
| 62 | + |
| 63 | + order.forEach(function(chapter) { |
| 64 | + var article, title; |
| 65 | + |
| 66 | + if ( grunt.utils._.isObject( chapter ) ) { |
| 67 | + title = Object.keys( chapter )[ 0 ]; |
| 68 | + map[ title ] = ++index; |
| 69 | + |
| 70 | + chapter[ title ].forEach(function( article ) { |
| 71 | + map[ title + "/" + article ] = ++index; |
| 72 | + }); |
| 73 | + } else { |
| 74 | + map[ title ] = ++index; |
| 75 | + } |
| 76 | + }); |
| 77 | + return map; |
| 78 | +}); |
| 79 | + |
| 80 | +grunt.registerHelper( "build-pages-preprocess", (function() { |
| 81 | + var orderMap = grunt.helper( "read-order", "order.yml" ); |
| 82 | + |
| 83 | + return function( content, post ) { |
| 84 | + var menuOrder = orderMap[ post.__slug ]; |
| 85 | + if ( menuOrder ) { |
| 86 | + post.menuOrder = menuOrder; |
| 87 | + } |
| 88 | + |
| 89 | + return content; |
| 90 | + }; |
| 91 | +})()); |
| 92 | + |
| 93 | + |
| 94 | + |
47 | 95 | grunt.registerTask( "default", "wordpress-deploy" ); |
48 | 96 | grunt.registerTask( "build-wordpress", "check-modules clean lint build-pages build-resources"); |
49 | 97 | grunt.registerTask( "deploy", "wordpress-deploy" ); |
|
0 commit comments