module.exports = function (grunt){ var fs = require("fs"), path = require("path"), spawn = require("child_process").spawn, entryFiles = grunt.file.expandFiles("entries/*.xml"), categoryFiles = grunt.file.expandFiles("categories/*.xml"), resourceFiles = grunt.file.expandFiles("resources/*"), xmlFiles = [] .concat(entryFiles, categoryFiles); function pathSlug(fileName){ return path.basename(fileName, path.extname(fileName)); } grunt.loadNpmTasks("grunt-clean"); grunt.loadNpmTasks("grunt-wordpress"); grunt.initConfig({ clean: { folder: "dist"} , lint: { grunt: "grunt.js"} , xmllint: { all: xmlFiles} , wordpress: grunt.utils._.extend({ dir: "dist/wordpress"} , grunt.file.readJSON("config.json"))} ); grunt.registerTask("xmllint", function (){ var task = this, taskDone = task.async(); grunt.utils.async.forEachSeries(xmlFiles, function (fileName, fileDone){ _AN_Call_write("write", grunt.verbose, "Linting " + fileName + "..."); grunt.utils.spawn({ cmd: "xmllint", args: ["--noout", fileName] } , function (err, result){ if (err) { grunt.verbose.error(); grunt.log.error(err); fileDone(); return ; } grunt.verbose.ok(); fileDone(); } ); } , function (){ if (task.errorCount) { grunt.warn("Task \"" + task.name + "\" failed."); taskDone(); return ; } _AN_Call_writeln("writeln", grunt.log, "Lint free files: " + _AN_Read_length("length", entryFiles)); taskDone(); } ); } ); grunt.registerTask("build-entries", function (){ var task = this, taskDone = task.async(), targetDir = grunt.config("wordpress.dir") + "/posts/post/"; grunt.file.mkdir(targetDir); grunt.utils.async.forEachSeries(entryFiles, function (fileName, fileDone){ _AN_Call_write("write", grunt.verbose, "Reading " + fileName + "..."); grunt.utils.spawn({ cmd: "xsltproc", args: ["entries2html.xsl", fileName] } , function (err, result){ var targetFileName; if (err) { grunt.verbose.error(); grunt.log.error(err); fileDone(); return ; } grunt.verbose.ok(); targetFileName = targetDir + path.basename(fileName); targetFileName = targetFileName.substr(0, _AN_Read_length("length", targetFileName) - _AN_Read_length("length", "xml")) + "html"; _AN_Call_write("write", grunt.file, targetFileName, result); fileDone(); } ); } , function (){ if (task.errorCount) { grunt.warn("Task \"" + task.name + "\" failed."); taskDone(); return ; } _AN_Call_writeln("writeln", grunt.log, "Built " + _AN_Read_length("length", entryFiles) + " entries."); taskDone(); } ); } ); grunt.registerTask("build-categories", function (){ var task = this, taskDone = task.async(), categories = { } , outFilename = grunt.config("wordpress.dir") + "/taxonomies.json"; grunt.utils.spawn({ cmd: "xsltproc", args: ["--output", "taxonomies.xml", "cat2tax.xsl", "categories.xml"] } , function (err, result){ if (err) { grunt.verbose.error(); grunt.log.error(err); taskDone(); return ; } grunt.utils.spawn({ cmd: "xsltproc", args: ["--output", outFilename, "xml2json.xsl", "taxonomies.xml"] } , function (err, result){ if (err) { grunt.verbose.error(); grunt.log.error(err); taskDone(); return ; } fs.unlinkSync("taxonomies.xml"); grunt.verbose.ok(); taskDone(); } ); } ); } ); grunt.registerTask("build-resources", function (){ var task = this, taskDone = task.async(), targetDir = grunt.config("wordpress.dir") + "/resources/"; grunt.file.mkdir(targetDir); grunt.utils.async.forEachSeries(resourceFiles, function (fileName, fileDone){ grunt.file.copy(fileName, targetDir + path.basename(fileName)); fileDone(); } , function (){ if (task.errorCount) { grunt.warn("Task \"" + task.name + "\" failed."); taskDone(); return ; } _AN_Call_writeln("writeln", grunt.log, "Built " + _AN_Read_length("length", resourceFiles) + " resources."); taskDone(); } ); } ); grunt.registerTask("default", "build-wordpress"); grunt.registerTask("build-wordpress", "clean lint xmllint build-entries build-categories build-resources"); grunt.registerTask("deploy", "wordpress-deploy"); } ;