%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;
};