| Index: ui/webui/resources/js/i18n_template_no_process.js
|
| diff --git a/ui/webui/resources/js/i18n_template_no_process.js b/ui/webui/resources/js/i18n_template_no_process.js
|
| index 44262810b0328671273ec433f4b6a5b0f2c24496..535d5a8661330a66dd24d096674de67b7c56ea50 100644
|
| --- a/ui/webui/resources/js/i18n_template_no_process.js
|
| +++ b/ui/webui/resources/js/i18n_template_no_process.js
|
| @@ -26,6 +26,7 @@
|
| */
|
|
|
| var i18nTemplate = (function() {
|
| + 'use strict';
|
| /**
|
| * This provides the handlers for the templating engine. The key is used as
|
| * the attribute name and the value is the function that gets called for every
|
| @@ -111,32 +112,44 @@ var i18nTemplate = (function() {
|
| };
|
|
|
| var attributeNames = Object.keys(handlers);
|
| - // Chrome for iOS must use Apple's UIWebView, which (as of April 2015) does
|
| - // not have native shadow DOM support. If shadow DOM is supported (or
|
| - // polyfilled), search for i18n attributes using the /deep/ selector;
|
| - // otherwise, do not attempt to search within the shadow DOM.
|
| - var selector =
|
| - (window.document.body && window.document.body.createShadowRoot) ?
|
| - 'html /deep/ [' + attributeNames.join('],[') + ']' :
|
| - '[' + attributeNames.join('],[') + ']';
|
| + var selector = '[' + attributeNames.join('],[') + ']';
|
|
|
| /**
|
| * Processes a DOM tree with the {@code dictionary} map.
|
| - * @param {Document|Element} root The root of the DOM tree to process.
|
| + * @param {Document|DocumentFragment|Element} root The root of the DOM tree to
|
| + * process.
|
| * @param {LoadTimeData} dictionary The dictionary to draw from.
|
| */
|
| function process(root, dictionary) {
|
| - var elements = root.querySelectorAll(selector);
|
| - for (var element, i = 0; element = elements[i]; i++) {
|
| - for (var j = 0; j < attributeNames.length; j++) {
|
| - var name = attributeNames[j];
|
| - var attribute = element.getAttribute(name);
|
| + let importLinks = root.querySelectorAll('link[rel=import]');
|
| + for (let i = 0; i < importLinks.length; ++i) {
|
| + let importLink = /** @type {!HTMLLinkElement} */(importLinks[i]);
|
| + if (!importLink.import) {
|
| + // Happens when a <link rel=import> is inside a <template>.
|
| + // TODO(dbeam): should we log an error if we detect that here?
|
| + continue;
|
| + }
|
| + process(importLink.import, dictionary);
|
| + }
|
| +
|
| + let templates = root.querySelectorAll('template');
|
| + for (let i = 0; i < templates.length; ++i) {
|
| + let template = /** @type {HTMLTemplateElement} */(templates[i]);
|
| + process(template.content, dictionary);
|
| + }
|
| +
|
| + let elements = root.querySelectorAll(selector);
|
| + for (let element, i = 0; element = elements[i]; i++) {
|
| + for (let j = 0; j < attributeNames.length; j++) {
|
| + let name = attributeNames[j];
|
| + let attribute = element.getAttribute(name);
|
| if (attribute != null)
|
| handlers[name](element, attribute, dictionary);
|
| }
|
| }
|
| - var doc = root instanceof Document ? root : root.ownerDocument;
|
| - if (doc)
|
| +
|
| + let doc = root instanceof Document ? root : root.ownerDocument;
|
| + if (doc && doc.documentElement)
|
| doc.documentElement.classList.add('i18n-processed');
|
| }
|
|
|
|
|