From eebe6fe0ccf507a077b6fe4db09fb196de826984 Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Sun, 4 Sep 2016 20:37:06 -0600 Subject: [PATCH] Fixed failing tests --- package.json | 3 +- public/src/modules/translator.js | 59 ++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 9992691474..a7589b6c82 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "main": "app.js", "scripts": { "start": "node loader.js", - "test": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- ./tests -t 10000" + "test": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- ./tests -t 10000", + "test-windows": "./node_modules/.bin/_mocha.cmd ./tests -t 10000" }, "dependencies": { "async": "~1.5.0", diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index cf12e4f691..25dcfc7799 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -1,13 +1,8 @@ -'use strict'; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - /* global define, jQuery, config, RELATIVE_PATH, utils, window */ -var assign = Object.assign || jQuery.extend; - (function (factory) { - function loadClient(lang, filename) { - var language = lang || config.userLang || config.defaultLang || 'en_GB'; + 'use strict'; + function loadClient(language, filename) {; return Promise.resolve(jQuery.getJSON(config.relative_path + '/language/' + language + '/' + (filename + '.json?v=' + config['cache-buster']))); }; if (typeof define === 'function' && define.amd) { @@ -15,7 +10,7 @@ var assign = Object.assign || jQuery.extend; define('translator', ['string'], function (string) { return factory(string, loadClient); }); - } else if (typeof module !== 'undefined' && module.exports) { + } else if (typeof module === 'object' && module.exports) { // Node (function () { var fs = require('fs'); @@ -52,9 +47,7 @@ var assign = Object.assign || jQuery.extend; }); }; - function loadServer(lang, filename) { - var language = lang; - + function loadServer(language, filename) { var filePath = path.join(__dirname, '../../language', language, filename + '.json'); return exists(filePath).then(function (fileExists) { if (!fileExists) { @@ -87,11 +80,19 @@ var assign = Object.assign || jQuery.extend; window.translator = factory(window.string, loadClient); } })(function (string, load) { - var Translator = function () { - function Translator(lang) { - _classCallCheck(this, Translator); + 'use strict'; + var assign = Object.assign || jQuery.extend; + function classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - this.lang = lang; + var Translator = function () { + function Translator(language) { + classCallCheck(this, Translator); + + if (!language) { + throw new TypeError('Parameter `language` must be a language string. Received ' + language + (language === '' ? '(empty string)' : '')); + } + + this.lang = language; this.translations = {}; this.load = load; } @@ -166,25 +167,27 @@ var assign = Object.assign || jQuery.extend; }; Translator.prototype.translateKey = function translateKey(name, args) { - var _this = this; + var self = this; var result = name.split(':', 2); var namespace = result[0]; var key = result[1]; - - return Promise.all([this.getTranslation(namespace, key)].concat(args.map(function (arg) { + var translation = this.getTranslation(namespace, key); + var argsToTranslate = args.map(function (arg) { return string(arg).collapseWhitespace().decodeHTMLEntities().escapeHTML().s; }).map(function (arg) { - return _this.translate(arg); - }))).then(function (result) { - var translation = result[0]; + return self.translate(arg); + }); + + return Promise.all([translation].concat(argsToTranslate)).then(function (result) { + var translated = result[0]; var translatedArgs = result.slice(1); - if (!translation) { + if (!translated) { return key; } - var out = translation; + var out = translated; translatedArgs.forEach(function (arg, i) { out = out.replace(new RegExp('%' + (i + 1), 'g'), arg); }); @@ -194,7 +197,10 @@ var assign = Object.assign || jQuery.extend; Translator.prototype.getTranslation = function getTranslation(namespace, key) { var translation; - if (this.translations[namespace]) { + if (!namespace) { + winston.warn('[translator] Parameter `namespace` is ' + namespace + (namespace === '' ? '(empty string)' : '')); + translation = Promise.resolve({}); + } else if (this.translations[namespace]) { translation = this.translations[namespace]; } else { translation = this.load(this.lang, namespace); @@ -225,6 +231,8 @@ var assign = Object.assign || jQuery.extend; if (typeof language === 'function') { cb = language; lang = adaptor.getLanguage(); + } else if (!lang) { + lang = adaptor.getLanguage(); } cache[lang] = cache[lang] || new Translator(lang); @@ -272,11 +280,10 @@ var assign = Object.assign || jQuery.extend; getLanguage: function getLanguage() { var lang; - if (typeof window !== 'undefined' && config && utils) { + if (typeof window === 'object' && window.config && window.utils) { lang = utils.params().lang || config.userLang || config.defaultLang || 'en_GB'; } else { var meta = require('../../../src/meta'); - lang = meta.config.defaultLang || 'en_GB'; }