%PDF- %PDF-
Direktori : /var/www/projetos/stb.ind.br/wp-content/themes/stb/node_modules/node-wp-i18n/lib/ |
Current File : //var/www/projetos/stb.ind.br/wp-content/themes/stb/node_modules/node-wp-i18n/lib/package.js |
/** * node-wp-i18n * https://github.com/cedaro/node-wp-i18n * * @copyright Copyright (c) 2015 Cedaro, LLC * @license MIT */ 'use strict'; var fs = require('fs'); var glob = require('glob'); var path = require('path'); var Pot = require('./pot'); var util = require('./util'); module.exports = WPPackage; /** * Guess the wpPackage slug. * * See MakePOT::guess_plugin_slug() in makepot.php * * @returns {string} */ function guessSlug(wpPackage) { var directory = wpPackage.getPath(); var slug = path.basename(directory); var slug2 = path.basename(path.dirname(directory)); if ('trunk' === slug || 'src' === slug) { slug = slug2; } else if (-1 !== ['branches', 'tags'].indexOf(slug2)) { slug = path.basename(path.dirname(path.dirname(directory))); } return slug; } /** * Discover the main package file. * * For themes, the main file will be style.css. The main file for plugins * contains the plugin headers. * * @param {WPPackage} wpPackage Package object. * @returns {string} */ function findMainFile(wpPackage) { if (wpPackage.isType('wp-theme')) { return 'style.css'; } var found = ''; var pluginFile = guessSlug(wpPackage) + '.php'; var filename = wpPackage.getPath(pluginFile); // Check if the main file exists. if (util.fileExists(filename) && wpPackage.getHeader('Plugin Name', filename)) { return pluginFile; } // Search for plugin headers in php files in the main directory. glob.sync('*.php', { cwd: wpPackage.getPath() }).forEach(function(file) { var filename = wpPackage.getPath(file); if (wpPackage.getHeader('Plugin Name', filename)) { found = file; } }); return found; } /** * Create a new package. * * @class WPPackage */ function WPPackage(directory, type) { if (!(this instanceof WPPackage)) { return new WPPackage(directory, type); } this.directory = null; this.domainPath = null; this.mainFile = null; this.potFile = null; this.type = 'wp-plugin'; this.initialize(directory, type); } /** * Initialize the package. * * @param {string} directory Full path to the package root directory. * @param {string} type Optional. Package type. * @returns {this} */ WPPackage.prototype.initialize = function(directory, type) { return this.setDirectory(directory) .setType(type) .setMainFile(findMainFile(this)) .setDomainPath(this.getHeader('Domain Path')) .setPotFile(this.getHeader('Text Domain') + '.pot'); }; /** * Set the package directory. * * @param {string} directory Full path to the package root directory. * @returns {this} */ WPPackage.prototype.setDirectory = function(directory) { this.directory = directory; if (!path.isAbsolute(directory)) { this.directory = path.resolve(process.cwd(), directory); } return this; }; /** * Retrieve the domain path. * * @returns {string} Relative directory to the language files from the package directory. */ WPPackage.prototype.getDomainPath = function() { return this.domainPath.replace(/^(\/|\\)/, ''); // Strip leading slashes. }; /** * Set the domain path. * * @param {string} domainPath Relative directory to the language files from the package directory. * @returns {this} */ WPPackage.prototype.setDomainPath = function(domainPath) { this.domainPath = domainPath; return this; }; /** * Get the value of a plugin or theme header. * * @param {string} name Name of the header. * @param {string} filename Optional. Absolute path to the main file. * @returns {string} */ WPPackage.prototype.getHeader = function(name, filename) { if ('undefined' === typeof filename) { filename = this.getPath(this.getMainFile()); } else if (!path.isAbsolute(filename)) { filename = path.resolve(this.getPath(), filename); } if (filename && util.fileExists(filename)) { var pattern = new RegExp(name + ':(.*)$', 'mi'); var matches = fs.readFileSync(filename, {encoding: 'utf-8'}).match(pattern); if (matches) { return matches.pop().trim(); } } if ('Text Domain' === name) { return guessSlug(this); } return ''; }; /** * Retrieve the main file. * * The main file contains the packager headers. * * @returns {string} Name of the main file relative to the package directory. */ WPPackage.prototype.getMainFile = function() { return this.mainFile; }; /** * Set the main file. * * @param {string} mainFile Name of the main file relative to the package directory. * @returns {this} */ WPPackage.prototype.setMainFile = function(mainFile) { this.mainFile = mainFile; return this; }; /** * Retrieve the full path to the package or a file within it. * * @param {string} file Optional. Name of a file relative to the package directory. * @returns {string} Full path to the package directory a file within it. */ WPPackage.prototype.getPath = function(file) { if ('undefined' === typeof file) { return this.directory; } return path.join(this.directory, file); }; /** * Retrieve the package POT object. * * @returns {Pot} */ WPPackage.prototype.getPot = function() { return new Pot(this.getPotFilename()); }; /** * Retrieve the name of the POT file. * * @returns {string} */ WPPackage.prototype.getPotFile = function() { return this.potFile; }; /** * Set the name of the POT file. * * @param {string} potFile Name of the pot file. * @returns {this} */ WPPackage.prototype.setPotFile = function(potFile) { this.potFile = potFile; return this; }; /** * Retrieve the full path to the POT file. * * @returns {string} */ WPPackage.prototype.getPotFilename = function() { return path.join(this.getPath(), this.getDomainPath(), this.potFile); }; /** * Retrieve the package slug. * * @returns {string} */ WPPackage.prototype.getSlug = function() { return guessSlug(this); }; /** * Retrieve the package type. * * @returns {string} */ WPPackage.prototype.getType = function() { return this.type; }; /** * Whether a package is a certain type. * * @param {string} type Package type. * @returns {boolean}} */ WPPackage.prototype.isType = function(type) { return this.getType() === type; }; /** * Set the package type. * * @param {string} type Optional. Defaults to 'wp-plugin' if the package doesn't have a style.css file. * @returns {this} */ WPPackage.prototype.setType = function(type) { if ('wp-theme' === type) { this.type = 'wp-theme'; } else if (('undefined' === typeof type || '' === type) && util.fileExists(this.getPath('style.css'))) { this.type = 'wp-theme'; } else { this.type = 'wp-plugin'; } return this; };