diff options
Diffstat (limited to 'data/extensions/spyblock@gnu.org/chrome/content/ui/i18n.js')
-rw-r--r-- | data/extensions/spyblock@gnu.org/chrome/content/ui/i18n.js | 89 |
1 files changed, 56 insertions, 33 deletions
diff --git a/data/extensions/spyblock@gnu.org/chrome/content/ui/i18n.js b/data/extensions/spyblock@gnu.org/chrome/content/ui/i18n.js index 9d380b7..a21fa24 100644 --- a/data/extensions/spyblock@gnu.org/chrome/content/ui/i18n.js +++ b/data/extensions/spyblock@gnu.org/chrome/content/ui/i18n.js @@ -1,6 +1,6 @@ /* * This file is part of Adblock Plus <https://adblockplus.org/>, - * Copyright (C) 2006-2015 Eyeo GmbH + * Copyright (C) 2006-2017 eyeo GmbH * * Adblock Plus is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as @@ -15,9 +15,11 @@ * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. */ +"use strict"; + // This variable should no longer be necessary once options.js in Chrome // accesses ext.i18n directly. -var i18n = ext.i18n; +let {i18n} = ext; // Getting UI locale cannot be done synchronously on Firefox, // requires messaging the background page. For Chrome and Safari, @@ -28,71 +30,92 @@ ext.backgroundPage.sendMessage( type: "app.get", what: "localeInfo" }, - function(localeInfo) + (localeInfo) => { document.documentElement.lang = localeInfo.locale; document.documentElement.dir = localeInfo.bidiDir; } ); -// Inserts i18n strings into matching elements. Any inner HTML already in the element is -// parsed as JSON and used as parameters to substitute into placeholders in the i18n -// message. -ext.i18n.setElementText = function(element, stringName, arguments) +// Inserts i18n strings into matching elements. Any inner HTML already +// in the element is parsed as JSON and used as parameters to +// substitute into placeholders in the i18n message. +ext.i18n.setElementText = function(element, stringName, args) { - function processString(str, element) + function processString(str, currentElement) { - var match = /^(.*?)<(a|strong)>(.*?)<\/\2>(.*)$/.exec(str); + let match = /^(.*?)<(a|strong)>(.*?)<\/\2>(.*)$/.exec(str); if (match) { - processString(match[1], element); + processString(match[1], currentElement); - var e = document.createElement(match[2]); + let e = document.createElement(match[2]); processString(match[3], e); - element.appendChild(e); + currentElement.appendChild(e); - processString(match[4], element); + processString(match[4], currentElement); } else - element.appendChild(document.createTextNode(str)); + currentElement.appendChild(document.createTextNode(str)); } while (element.lastChild) element.removeChild(element.lastChild); - processString(ext.i18n.getMessage(stringName, arguments), element); -} + processString(ext.i18n.getMessage(stringName, args), element); +}; // Loads i18n strings function loadI18nStrings() { - var nodes = document.querySelectorAll("[class^='i18n_']"); - for(var i = 0; i < nodes.length; i++) + function addI18nStringsToElements(containerElement) { - var node = nodes[i]; - var arguments = JSON.parse("[" + node.textContent + "]"); - if (arguments.length == 0) - arguments = null; + let elements = containerElement.querySelectorAll("[class^='i18n_']"); + for (let node of elements) + { + let args = JSON.parse("[" + node.textContent + "]"); + if (args.length == 0) + args = null; - var className = node.className; - if (className instanceof SVGAnimatedString) - className = className.animVal; - var stringName = className.split(/\s/)[0].substring(5); + let {className} = node; + if (className instanceof SVGAnimatedString) + className = className.animVal; + let stringName = className.split(/\s/)[0].substring(5); - ext.i18n.setElementText(node, stringName, arguments); + ext.i18n.setElementText(node, stringName, args); + } } + addI18nStringsToElements(document); + // Content of Template is not rendered on runtime so we need to add + // translation strings for each Template documentFragment content + // individually. + for (let template of document.querySelectorAll("template")) + addI18nStringsToElements(template.content); } // Provides a more readable string of the current date and time -function i18n_timeDateStrings(when) +function i18nTimeDateStrings(when) { - var d = new Date(when); - var timeString = d.toLocaleTimeString(); + let d = new Date(when); + let timeString = d.toLocaleTimeString(); - var now = new Date(); + let now = new Date(); if (d.toDateString() == now.toDateString()) return [timeString]; - else - return [timeString, d.toLocaleDateString()]; + return [timeString, d.toLocaleDateString()]; +} + +// Formats date string to ["YYYY-MM-DD", "mm:ss"] format +function i18nFormatDateTime(when) +{ + let date = new Date(when); + let dateParts = [date.getFullYear(), date.getMonth() + 1, date.getDate(), + date.getHours(), date.getMinutes()]; + + dateParts = dateParts.map( + (datePart) => datePart < 10 ? "0" + datePart : datePart + ); + + return [dateParts.splice(0, 3).join("-"), dateParts.join(":")]; } // Fill in the strings as soon as possible |