// ==UserScript== // @name Tampermonkey translation support // @namespace http://tampermonkey.net/ // @version 0.4.1 // @description Tampermonkey translation support // @match https://github.com/*/tampermonkey-i18n/* // @require https://code.jquery.com/jquery-2.2.0.min.js // @updateURL https://gist.github.com/derjanb/5592ff3b7cdc4feabba5/raw/tampermonkey_translation_support.user.js // @grant GM_xmlhttpRequest // @domain raw.githubusercontent.com // @domain jsonformat.com // @run-at document-start // ==/UserScript== /* global $, GM_xmlhttpRequest, alert */ (function() { "use strict"; window.history.replaceState = window.history.pushState = function(a, b, url) { if (window.location.href != url) window.location.href = url; }; if (!window.location.href.match(/https:\/\/github\.com\/.*\/tampermonkey-i18n\/.*\/messages\.json/)) return; var getTranslation = function(url) { var d = $.Deferred(); GM_xmlhttpRequest({ method: 'GET', url: url, onload: function(r) { d.resolve(JSON.parse(r.response)); }, onerror: function() { d.reject(); } }); return d.promise(); }; var format = function(o) { return JSON.stringify(o, null, 4); }; var compare = function(en, la) { var ret = {}; Object.keys(en).forEach(function(k) { if (!la[k]) { ret[k] = en[k]; ret[k].message = '>>>' + ret[k].message + '>>' + ret[k].message + 'Adjust to English translation'))) .append((button2 = $('Remove English strings'))); button.click(function() { var lo = determineLocation(window.location.href); if (!lo || !lo[0] || !lo[1]) { alert('Unable to determine location :('); return; } var ow = lo[0]; var la = lo[1]; var lang, en; getTranslation(createUrl(ow, la)) .fail(function() { alert('Unable to retrieve language file!'); }) .then(function(r) { lang = r; return getTranslation(createUrl('Tampermonkey', 'en')); }) .fail(function() { alert('Unable to retrieve original file!'); }) .then(function(r) { en = r; var result = compare(en, lang); var text = format(result); document.body.textContent = ''; var ta; $(document.body).append((ta = $('