From 678e742d78fcbd6c513e6654d1c6c5c294316bc0 Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Mon, 9 Nov 2015 23:50:47 +0300 Subject: [PATCH 1/9] package.json: Use tadatuta/enb-bemxjst#4.x-bemtree --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bc88c80..06c6833 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { "clear-require": "1.0.1", "enb-bem-i18n": "1.1.0", - "enb-bemxjst": "2.1.0", + "enb-bemxjst": "tadatuta/enb-bemxjst#4.x-bemtree", "vow": "0.4.11" }, "devDependencies": { From d48c6f1b95ebb9885a94135ace3bb8836a77c822 Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Tue, 10 Nov 2015 00:15:21 +0300 Subject: [PATCH 2/9] Add techs/bemtree-i18n.js --- techs/bemtree-i18n.js | 139 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 techs/bemtree-i18n.js diff --git a/techs/bemtree-i18n.js b/techs/bemtree-i18n.js new file mode 100644 index 0000000..2ceec5d --- /dev/null +++ b/techs/bemtree-i18n.js @@ -0,0 +1,139 @@ +var EOL = require('os').EOL, + vow = require('vow'), + keysets = require('enb-bem-i18n/lib/keysets'), + compileI18N = require('enb-bem-i18n/lib/compile'); + +/** + * @class BemhtmlI18nTech + * @augments {BemhtmlTech} + * @classdesc + * + * Compiles localized BEMTREE template files with BEMXJST translator and merges them into a single BEMTREE bundle. + * + * Localization is based on pre-built `?.keysets.{lang}.js` bundle files. + * + * Important: It supports only JS syntax by default. Use `compat` option to support old BEMTREE syntax. + * + * @param {Object} options Options + * @param {String} [options.target='?.bemtree.{lang}.js'] Path to a target with compiled file. + * @param {String} [options.filesTarget='?.files'] Path to a target with BEMTREE FileList. + * @param {String[]} [options.sourceSuffixes] Files with specified BEMTREE suffixes + * involved in the assembly. + * @param {String} options.lang Language identifier. + * @param {String} [options.keysetsFile='?.keysets.{lang}.js'] Path to a source keysets file. + * @param {String} [options.exportName='BEMTREE'] Name of BEMTREE template variable. + * @param {Boolean} [options.compat=false] Sets `compat` option to support old BEMTREE syntax. + * @param {Boolean} [options.devMode=true] Sets `devMode` option for convenient debugging. + * If `devMode` is set to true, code of templates will + * not be compiled but only wrapped for development + * purposes. + * @param {Boolean} [options.cache=false] Sets `cache` option for cache usage. + * @param {Object} [options.requires] Names of dependencies which should be available from + * code of templates. + * + * @example + * var BemhtmlI18nTech = require('enb-bemxjst-i18n/techs/bemtree-i18n'), + * KeysetsTech = require('enb-bem-i18n/techs/keysets'), + * FileProvideTech = require('enb/techs/file-provider'), + * bemTechs = require('enb-bem-techs'); + * + * module.exports = function(config) { + * config.setLanguages(['en', 'ru']); + * + * config.node('bundle', function(node) { + * // get FileList + * node.addTechs([ + * [FileProvideTech, { target: '?.bemdecl.js' }], + * [bemTechs.levels, { levels: ['blocks'] }], + * [bemTechs.deps], + * [bemTechs.files] + * ]); + * + * // collect and merge keysets files into bundle + * node.addTech([KeysetsTech, { lang: '{lang}' }]); + * + * // build localized BEMTREE file for each lang + * node.addTech([BemhtmlI18nTech, { lang: '{lang}' }]); + * node.addTarget('?.bemtree.{lang}.js'); + * }); + * }; + */ +module.exports = require('enb-bemxjst/techs/bemtree').buildFlow() + .name('bemtree-i18n') + .target('target', '?.bemtree.{lang}.js') + .defineRequiredOption('lang') + .useSourceFilename('keysetsFile', '?.keysets.{lang}.js') + .builder(function (fileList, keysetsFilename) { + // don't add fat wrapper code of bem-xjst + if (fileList.length === 0) { + return this._mockBEMTREE(); + } + + return vow.all([ + this._getBEMTREESources(fileList), + this._compileI18N(keysetsFilename) + ]).spread(function (BEMTREESources, I18NCode) { + // i18n will be available in templates by `this.i18n` + var sources = BEMTREESources.concat({ + contents: [ + 'oninit(function(exports, context) {', + ' var BEMContext = exports.BEMContext || context.BEMContext;', + ' BEMContext.prototype.i18n = ' + I18NCode + ';', + '});' + ].join(EOL) + }); + + return this._compileBEMXJST(sources, 'bemtree'); + }, this); + }) + .methods({ + /** + * Reads source code of BEMTREE templates and processes. + * + * @param {FileList} fileList — objects that contain file information. + * @returns {Promise} + * @private + */ + _getBEMTREESources: function (fileList) { + var filenames = this._getUniqueFilenames(fileList); + + return this._readFiles(filenames) + .then(this._processSources, this); + }, + /** + * Compiles i18n module. + * + * Wraps compiled code for usage with different modular systems. + * + * @param {String} keysetsFilename — path to file with keysets.. + * @returns {Promise} + * @private + */ + _compileI18N: function (keysetsFilename) { + return this._readKeysetsFile(keysetsFilename) + .then(function (keysetsSource) { + var parsed = keysets.parse(keysetsSource), + opts = { + version: parsed.version, + language: this._lang + }; + + return compileI18N(parsed.core, parsed.keysets, opts); + }, this); + }, + /** + * Reads file with keysets. + * + * @param {String} filename — path to file with keysets. + * @returns {Promise} + * @private + */ + _readKeysetsFile: function (filename) { + var node = this.node, + root = node.getRootDir(), + cache = node.getNodeCache(this._target); + + return keysets.read(filename, cache, root); + } + }) + .createTech(); From 353e4904d9b29aa86a8776ad8c5b5da5f81179a7 Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Thu, 19 Nov 2015 21:14:03 +0300 Subject: [PATCH 3/9] bemhtml-i18n: Provide engine name --- techs/bemhtml-i18n.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/techs/bemhtml-i18n.js b/techs/bemhtml-i18n.js index 1323b8d..41bc174 100644 --- a/techs/bemhtml-i18n.js +++ b/techs/bemhtml-i18n.js @@ -83,7 +83,7 @@ module.exports = require('enb-bemxjst/techs/bemhtml').buildFlow() ].join(EOL) }); - return this._compileBEMXJST(sources); + return this._compileBEMXJST(sources, 'bemhtml'); }, this); }) .methods({ From 907793c5c364852d907dffc7729f939aa757126c Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Sat, 27 Feb 2016 01:03:51 +0300 Subject: [PATCH 4/9] Update enb-bemxjst to ^5.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 06c6833..5eaab7f 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { "clear-require": "1.0.1", "enb-bem-i18n": "1.1.0", - "enb-bemxjst": "tadatuta/enb-bemxjst#4.x-bemtree", + "enb-bemxjst": "^5.0.0", "vow": "0.4.11" }, "devDependencies": { From 29c93d79b8723ac745367de2bde9babb1215063f Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Sat, 27 Feb 2016 12:09:44 +0300 Subject: [PATCH 5/9] Update bemtree-i18n.js --- techs/bemtree-i18n.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/techs/bemtree-i18n.js b/techs/bemtree-i18n.js index 2ceec5d..d2ec05f 100644 --- a/techs/bemtree-i18n.js +++ b/techs/bemtree-i18n.js @@ -83,7 +83,7 @@ module.exports = require('enb-bemxjst/techs/bemtree').buildFlow() ].join(EOL) }); - return this._compileBEMXJST(sources, 'bemtree'); + return this._compileBEMTREE(sources); }, this); }) .methods({ From 2e534ce68ffc6c510f0239f2e263332459c26ca7 Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Sat, 27 Feb 2016 12:10:26 +0300 Subject: [PATCH 6/9] Update bemhtml-i18n.js --- techs/bemhtml-i18n.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/techs/bemhtml-i18n.js b/techs/bemhtml-i18n.js index 41bc174..4cca740 100644 --- a/techs/bemhtml-i18n.js +++ b/techs/bemhtml-i18n.js @@ -83,7 +83,7 @@ module.exports = require('enb-bemxjst/techs/bemhtml').buildFlow() ].join(EOL) }); - return this._compileBEMXJST(sources, 'bemhtml'); + return this._compileBEMHTML(sources); }, this); }) .methods({ From e7916ce3bcc76c81f73f2c62a426dedcd0d6c3b9 Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Tue, 12 Apr 2016 17:32:46 +0300 Subject: [PATCH 7/9] Update enb-bemxjst to ^6.2.1 (#1) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5eaab7f..fbb1339 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { "clear-require": "1.0.1", "enb-bem-i18n": "1.1.0", - "enb-bemxjst": "^5.0.0", + "enb-bemxjst": "^6.2.1", "vow": "0.4.11" }, "devDependencies": { From acd48e231ba6f23bf00274b56d403b18ec338a4c Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Mon, 14 Nov 2016 19:52:38 +0300 Subject: [PATCH 8/9] Update enb-bemxjst to ^7.5.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fbb1339..705447b 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { "clear-require": "1.0.1", "enb-bem-i18n": "1.1.0", - "enb-bemxjst": "^6.2.1", + "enb-bemxjst": "^7.5.0", "vow": "0.4.11" }, "devDependencies": { From 0dc65e72afaa7cc9282eddc0335d98de8193bed3 Mon Sep 17 00:00:00 2001 From: Vladimir Grinenko Date: Wed, 22 Mar 2017 11:28:34 +0300 Subject: [PATCH 9/9] Update enb-bemxjst to ^8.6.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 705447b..1eea0d4 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { "clear-require": "1.0.1", "enb-bem-i18n": "1.1.0", - "enb-bemxjst": "^7.5.0", + "enb-bemxjst": "^8.6.7", "vow": "0.4.11" }, "devDependencies": {