bem
Version:
91 lines (64 loc) • 2.45 kB
JavaScript
var BEM = require('bem'),
Q = BEM.require('q'),
LangsMixin = require('./i18n').LangsMixin,
PATH = require('path'),
I18NJS = require('../../../__i18n/lib/i18n-js');
exports.baseTechName = 'js';
exports.techMixin = BEM.util.extend({}, LangsMixin, {
getBaseTechSuffix: function() {
return 'js';
},
getBuildSuffixesMap: function() {
var suffixes = {};
this.getLangs()
.map(this.getBuildSuffixForLang, this).concat([this.getBaseTechSuffix()])
.forEach(function(s) {
suffixes[s] = [this.getBaseTechSuffix()];
}, this);
return suffixes;
},
getBuildSuffixForLang: function(lang) {
return lang + '.' + this.getBaseTechSuffix();
},
getBuildResults: function(decl, levels, output, opts) {
var _this = this,
source = this.getPath(output, this.getSourceSuffix()),
base = this.__base;
return BEM.util.readJsonJs(source)
.then(function(data) {
if (!opts) opts = {};
opts.ctx = {
data: data
};
return base.call(_this, decl, levels, output, opts);
});
},
getBuildResult: function(files, suffix, output, opts) {
if (suffix === this.getBaseTechSuffix()) return Q.resolve(output);
var _this = this;
return this.__base.apply(this, arguments)
.then(function(res) {
var lang = suffix.substr(0, 2),
dataLang = _this.extendLangDecl({}, opts.ctx.data['all'] || {});
dataLang = _this.extendLangDecl(dataLang, opts.ctx.data[suffix.substr(0, 2)] || {});
return res.concat(dataLang? _this.serializeI18nData(dataLang, lang) : [])
.concat([_this.serializeI18nInit(lang)]);
});
},
serializeI18nInit: I18NJS.serializeInit,
serializeI18nData: I18NJS.serializeData,
storeBuildResult: function(path, suffix, res) {
if (suffix === this.getBaseTechSuffix()) {
return BEM.util.symbolicLink(
path,
this.getPath(
res,
this.getBuildSuffixForLang(this.getDefaultLang())),
true);
}
return this.__base(path, suffix, res);
},
getDependencies: function() {
return ['i18n'];
}
});