UNPKG

webpack-angular-translate

Version:

Webpack plugin that extracts the translation-ids with the default texts.

105 lines 4.82 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var path = __importStar(require("path")); var cheerio = __importStar(require("cheerio")); var loaderUtils = __importStar(require("loader-utils")); var translate_directive_translation_extractor_1 = __importDefault(require("./translate-directive-translation-extractor")); var translate_html_parser_1 = __importStar(require("./translate-html-parser")); /** * Loader that must be used together with the plugin. The loader parses the html content and extracts all * translate elements, elements with a translate attribute or translate filter. * * The loader communicates with the plugin by the registerTranslation functions provided by the plugin (loader.registerTranslation). * The plugin is responsible for merging the translations and emitting them. * * The plugin is required because the loader doesn't know when all files have been processed. The plugin removes * all suppress-dynamic-translation-error attributes for non dev builds. * * The following cases are supported: * @example * <span translate>TRANSLATE-ID</span> * <translate>TRANSLATE-ID</translate> * * <span translate translate-default="Default Text">TRANSLATE-ID</span> * <translate translate-default="Default Text">TRANSLATE-ID</translate> * * <span translate translate-attr-title="TRANSLATE-ID">Content</span> * <translate translate-attr-title="TRANSLATE-ID">Content</translate> * * <span translate translate-attr-title="TRANSLATE-ID" translate-default-attr-title="Default Text">Content</span> * * <h1 title="{{ 'My title' | translate }}"></h1> * <h2>{{ 'My long translation' | translate | limitTo:20 }}</h2> * * <span>{{ "4" | translate }} {{ "x" | translate }}</span> * * @param source the content of the file (expected to be html or xml) * @param sourceMaps the source maps */ function loader(source, sourceMaps) { "use strict"; var loader = this; if (!loader.registerTranslation) { return this.callback(new Error("The WebpackAngularTranslate plugin is missing. Add the plugin to your webpack configurations 'plugins' section."), source, sourceMaps); } if (this.cacheable) { this.cacheable(); } loader.pruneTranslations(path.relative(loader.context, loader.resourcePath)); var options = loaderUtils.getOptions(loader) || {}; var translationExtractors = __spreadArrays((options.translationExtractors || []), [ translate_directive_translation_extractor_1.default, ]); // Don't parse the HTML if none of the extractors detect any possible translations. if (translationExtractors.every(function (extractor) { return extractor.mayContainTranslations != null && !extractor.mayContainTranslations(source); })) { return this.callback(null, source, sourceMaps); } new translate_html_parser_1.default(loader, translationExtractors).parse(source); var result = source; if (!this.debug) { result = removeSuppressTranslationErrorAttributes(source); } this.callback(null, result, sourceMaps); } function removeSuppressTranslationErrorAttributes(source) { var $ = cheerio.load(source); var elementsWithSuppressAttribute = $("[" + translate_html_parser_1.SUPPRESS_ATTRIBUTE_NAME + "]"); if (elementsWithSuppressAttribute.length === 0) { return source; } elementsWithSuppressAttribute.removeAttr(translate_html_parser_1.SUPPRESS_ATTRIBUTE_NAME); return $.html(); } module.exports = loader; //# sourceMappingURL=html-loader.js.map