Files
piratepoet/tasks/makepot/node_modules/grunt-wp-i18n/tasks/add-textdomain.js

104 lines
2.7 KiB
JavaScript

/*
* grunt-wp-i18n
* https://github.com/cedaro/grunt-wp-i18n
*
* Copyright (c) 2014 Cedaro, LLC
* Licensed under the MIT license.
*/
'use strict';
module.exports = function( grunt ) {
var async = require( 'async' ),
path = require( 'path' ),
localConfig = require( './lib/util' ).init( grunt ).getLocalConfig(),
wp = require( './lib/wordpress' ).init( grunt );
/**
* Add the text domain to gettext functions.
*
* @link http://develop.svn.wordpress.org/trunk/tools/i18n/
*/
grunt.registerMultiTask( 'addtextdomain', 'Add the text domain to gettext functions.', function() {
var done = this.async(),
defaultI18nToolsPath = path.resolve( __dirname, '../vendor/wp-i18n-tools/' ),
files = [],
cmdArgs, o;
o = this.options({
i18nToolsPath: defaultI18nToolsPath,
textdomain: '',
updateDomains: []
});
// Use the Text Domain header or project folder name
// if it hasn't been set.
if ( '' === o.textdomain ) {
o.textdomain = wp.getHeader( 'Text Domain' ) || wp.slugify();
}
o.i18nToolsPath = localConfig.i18nToolsPath || o.i18nToolsPath;
// Make sure the add-textdomain.php script exists.
o.addTextdomainScript = path.join( o.i18nToolsPath, 'add-textdomain.php' );
if ( ! grunt.file.exists( o.addTextdomainScript ) ) {
grunt.fatal( 'add-textdomain.php could not be found in ' + o.i18nToolsPath );
}
if ( true === o.updateDomains ) {
o.updateDomains = ['all'];
}
// Build the list of CLI args.
cmdArgs = [
o.addTextdomainScript,
'-i',
o.textdomain,
''
];
if ( grunt.option( 'dry-run' ) ) {
cmdArgs[1] = '';
}
// Only add custom CLI args if using the bundled tools.
if ( defaultI18nToolsPath === o.i18nToolsPath ) {
// Use the custom CLI script that extends add-textdomain.php.
o.addTextdomainScript = path.join( o.i18nToolsPath, 'grunt-add-textdomain.php' );
cmdArgs[0] = o.addTextdomainScript;
cmdArgs.push( o.updateDomains.join( ',' ) );
}
this.files.forEach(function( f ) {
var filtered = f.src.filter(function( filepath ) {
// Warn on and remove invalid source files (if nonull was set).
if ( ! grunt.file.exists( filepath ) ) {
grunt.log.warn( 'Source file "' + filepath + '" not found.' );
return false;
} else {
return true;
}
});
files = files.concat( filtered );
});
async.eachSeries( files, function( file, nextFile ) {
cmdArgs[3] = path.resolve( process.cwd(), file );
grunt.util.spawn({
cmd: 'php',
args: cmdArgs,
opts: { stdio: 'inherit' }
}, function() {
nextFile();
});
}, function( error, result ) {
done( error, result );
});
});
};