module.exports = function (grunt){ var fs = require("fs"), path = require("path"), spawn = require("child_process").spawn, entryFiles = grunt.file.expandFiles("entries/*.xml"); grunt.loadNpmTasks("grunt-wordpress"); grunt.initConfig({ lint: { grunt: "grunt.js"} , xmllint: { all: entryFiles} , wordpress: grunt.file.readJSON("config.json")} ); grunt.registerTask("xmllint", function (){ var task = this, taskDone = task.async(); grunt.utils.async.forEachSeries(entryFiles, 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 = "dist/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.verbose, "Writing " + targetFileName + "..."); fs.writeFile(targetFileName, result, function (err){ 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, "Built " + _AN_Read_length("length", entryFiles) + " entries."); taskDone(); } ); } ); grunt.registerTask("default", "build"); grunt.registerTask("build", "lint xmllint build-entries"); grunt.registerTask("deploy", "wordpress-deploy"); } ;