您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
In Steam Translation Server, add many features to make translate easier.
当前为
// ==UserScript== // @name STS Helper // @namespace iFantz7E.StsHelper // @version 1.87 // @description In Steam Translation Server, add many features to make translate easier. // @match *://translation.steampowered.com/* // @icon http://translation.steampowered.com/public/favicon.ico // @run-at document-start // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @copyright 2014, 7-elephant // ==/UserScript== // http://userscripts.org/scripts/show/325610 // https://greasyfork.org/scripts/2250-sts-helper/ GM_addStyle( " #logout { position: fixed; z-index: 1001; right: 12px; top: 10px; line-height: 24px; text-align: right; } " + "input[type='button'], input[type='submit'] { cursor: pointer; } " + "input[type='button']:disabled { cursor: default; color: #777; } " + "#suggestionmain { overflow-x: hidden; } " + "#suggestionmain > div:nth-child(4) > form:nth-child(2) > div:nth-child(1) " + " { text-align: left; } " + ".lbAction > div > input[value^='SUBMIT'] " + " { width: 750px; height: 30px; border-color: #777 #333 #777 #777; } " + ".lbAction > div > input[value^='RESUBMIT'] " + " { width: 641px; height: 30px; border-color: #777 #333 #777 #777; } " + ".lbAction > div > input[value='CANCEL'] " + " { width: 100px; height: 30px; margin-right: 5px; } " + "form.lbAction:nth-child(1) > div:nth-child(2) > input:nth-child(1) " + " { width: 90%; margin-top: 5px; } " + "div.suggestion form.lbAction textarea" + " { width: 700px !important; min-height: 50px; } " + ".progress td { vertical-align: top; } " + "div#suggestions_nav { z-index: 3; position: absolute; width: 430px; left: 558px; top: 4px; text-align: right; line-height: 24px; } " + "#suggestionmain .smallcopy { width: 855px; min-height: 70px; max-height: 70px; } " + "#suggestionmain .progress { margin-top: -12px; } " + "#leftAreaContainer > table > tbody:nth-child(1) > tr > td:nth-child(1) { vertical-align: top; } " + "#leftAreaContainer > table, #leftAreaContainer > table th, #leftAreaContainer > table td " + " { border: 1px solid #333; border-collapse: collapse; padding: 4px; } " + "#suggestions_box { margin-top: 1px !important; } " + "#suggestions_iframe { min-height: 100px !important; } " + "#keylist td:nth-child(1) > div { background-image: none !important; min-height: 43px; } " + "#keylist tr:nth-child(2n) > td:nth-child(1) > div { background-color: #060606 !important; } " + "#keylist tr:nth-child(2n) > td:nth-child(1) > div:hover { background-color: #0D0D0D !important; } " + "#keylist td:nth-child(1) > div:hover " + " { background-repeat: no-repeat; background-position: center; background-color: #0D0D0D !important; " + " background-image: url('./public/images/row_over.gif') !important; " + " } " + ".progress h1 { display: inline-block; width: 484px; } " + "div#suggestions_box iframe { background-color: #111 !important; } " + ".suggestions_list { border-right: 0px none !important; } " + ".suggestion { resize: both; overflow: hidden; border-right: 1px solid #505050; max-width: 953px; min-width: 200px; min-height: 50px; } " + ".suggestion_signature { font-family: Verdana; } " + ".suggestion_signature input[value~='APPROVE'], .suggestion_signature input[value~='Next'] { color: #A4B23C } " + ".suggestion_signature input[value~='DECLINE'], .suggestion_signature input[value~='Next']:nth-child(5) { color: #F22 } " + ".suggestion_signature input[disabled='disabled'] { color: #777 !important; } " + ".lbAction input[value~='COMMENT'] { vertical-align: top; margin-top: 1px; height: 52px; } " + ".lbAction input[value~='DISCUSS'] { vertical-align: top; margin-top: 1px; height: 36px; } " + "#votes_container a[title='not translated'] { background-color: #333; } " + "#suggestion_value_new { min-height: 84px; max-width: 960px; min-width: 200px; } " + "#hours > table input[name*='[remarks]'] { width: 460px; } " + "#suggestions_box_outer { overflow: hidden !important; } " + ".stsh_btn { width: 90px; } " + ".stsh_btn_med { min-width: 112px; } " + ".stsh_btn_long { min-width: 136px; } " + ".stsh_btn_short { min-width: 66px; } " + ".stsh_btn_right { position: relative; float: right; margin-left: 4px; } " + ".stsh_suggestion_header { color: #A4B23C; } " + ".stsh_suggestion_comment:before { background-color: #CF8B37 !important; } " + ".stsh_suggestion_pending:before { background-color: #FFF !important; } " + ".stsh_suggestion_approved:before { background-color: #A4B23C !important; } " + ".stsh_suggestion_declined:before { background-color: red !important; } " + ".stsh_suggestion_applied:before { background-color: #2EBCEB !important; } " + ".stsh_suggestion_removed:before { background-color: #555 !important; } " + ".stsh_suggestion { list-style: none; } " + ".stsh_suggestion:before " + " { content: ''; display: inline-block; position: relative; height: 6px; width: 6px; " + " border-radius: 3px; background-clip: padding-box; margin-right: -6px; top: -1px; left: -12px; background-color: green; }" + "#stsh_frame { text-align: center; } " + ".stsh_blue { color: #2ebceb; } " + ".stsh_green { color: #a4b23c; } " + ".stsh_red { color: #F00; } " + ".stsh_white { color: #fff; } " + ".stsh_grey { color: #777; } " + ".stsh_orange { color: #CF8B37; } " + ".stsh_pink { color: pink; } " + "#stsh_showing { color: #CCDAD6; position: fixed; z-index: 1001; right: 12px; bottom: 12px; text-align: right; line-height: 14px;} " + "#stsh_showing_current { color: #CCDAD6; position: fixed; z-index: 1001; right: 12px; bottom: 28px; text-align: right; line-height: 14px;} " + ".stsh_showing_counter { display: inline-block; min-width: 60px; text-align: center; } " + ".stsh_showing_header { color: #CCDAD6; display: inline-block; width: 135px; text-align: center; padding-top: 10px; } " + ".stsh_showing_group { position: fixed; z-index: 3; right: 10px; top: 74px; line-height: 24px; text-align: right; } " + ".stsh_home_header { color: #CCDAD6; display: inline-block; padding-top: 10px; } " + ".stsh_home_group { position: fixed; z-index: 3; right: 0px; top: 74px; line-height: 24px; text-align: center; width: 164px; } " + ".stsh_scroll_header { color: #CCDAD6; display: inline-block; width: 130px; text-align: center; padding-top: 10px; } " + "#stsh_specialEvent { position: absolute; z-index: 2; right: 164px; top: 13px; } " + ".stsh_snapshot { position: absolute; top: 320px; left: 790px; width: 140px; text-align: center; color: #FFF; } " + ".stsh_text_comment_header { vertical-align: top; } " + ".stsh_text_comment { vertical-align: top; display: inline-block; max-width: 850px; } " + "#stsh_autoApprove { vertical-align: -2px; margin-left: 15px; margin-right: 1px; } " + ".stsh_unselectable { -webkit-user-select: none !important; -moz-user-select: none !important; user-select: none !important; } " + ".stsh_a_button " + " { background-color: #1D1D1D; font-family: tahoma,arial,helvetica,trebuchet ms,sans-serif; " + " color: #E1E1E1; font-size: 13px; border: 1px solid #777; padding: 1px 9px; } " + ".stsh_a_button:link, .stsh_a_button:hover, .stsh_a_button:active, .stsh_a_button:visited { color: #E1E1E1; text-decoration: none; } " + ".stsh_a_button.stsh_btn { display: inline-block; padding: 0px; height: 19px; line-height: 19px; width: 88px; } " + ".stsh_a_button.stsh_btn_med { display: inline-block; padding: 0px; height: 19px; line-height: 19px; min-width: 110px; } " + ".stsh_a_button.stsh_btn_long { display: inline-block; padding: 0px; height: 19px; line-height: 19px; min-width: 134px; } " + ".stsh_lineCounter_outer { position: relative; } " + ".stsh_lineCounter " + " { position: absolute; width: 30px; left: -35px; top: -28px; line-height: 28px; text-align: right; " + " color: #ACACAC; font-size: 9px; } " + ".stsh_glossary_term { min-width: 50px; display: inline-block; } " + ".stsh_glossary_header, .stsh_glossary_header td { color: #DDD; } " + ".stsh_glossary_header *, .stsh_glossary_header td * { color: #858585; } " + ".stsh_time_convert { cursor: pointer; } " + ".stsh_comment_img " + " { display: block; cursor: zoom-in; cursor: -webkit-zoom-in; cursor: -moz-zoom-in; " + " max-width: 400px; margin-top: 5px; margin-bottom: 20px; } " + ".stsh_hours_curDate { color: #A4B23C; } " + ".stsh_hours_curDate input { border-color: #A4B23C; } " + ".stsh_submit_suggestion_right { height: 30px; width: 214px; margin-right: 5px; border-color: #777 #777 #777 #333; } " + ".stsh_truncate " + " { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; " + " display: inline-block; vertical-align: bottom; } " + ".stsh_token_name { max-width: 500px; } " + ".stsh_token_share { max-width: 600px; font-size: 0.8em; } " + ".stsh_pad { padding-left: 2px; padding-right: 2px; } " + ".stsh_hidden { display: none; } " ); function attachOnLoad(callback) { window.addEventListener("load", function (e) { callback(); }); } function attachOnReady(callback) { document.addEventListener("DOMContentLoaded", function (e) { callback(); }); } function insertBeforeElement(newNode, referenceNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode); } function insertAfterElement(newNode, referenceNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } function addKeyCtrl(ele, input, keyCode, keyName) { if (ele != null && input != null) { if (keyName != null && keyName != "") { if (input.tagName == "INPUT") { input.value += " (Ctrl+" + keyName + ")"; } } ele.addEventListener("keydown", function (e) { if (e.ctrlKey && !e.shiftKey && !e.altKey) { var isSameKey = false; if (Number.isInteger(keyCode)) { isSameKey = (e.keyCode == keyCode); } else { isSameKey = (e.code != undefined && e.code == keyCode) } if (isSameKey) { input.focus(); input.click(); return false; } } }, true); } } function addKeyCtrlShift(ele, input, keyCode, keyName) { if (ele != null && input != null) { if (keyName != null && keyName != "") { if (input.tagName == "INPUT") { input.value += " (Ctrl+Shift+" + keyName + ")"; } } ele.addEventListener("keydown", function (e) { if (e.ctrlKey && e.shiftKey && !e.altKey) { var isSameKey = false; if (Number.isInteger(keyCode)) { isSameKey = (e.keyCode == keyCode); } else { isSameKey = (e.code != undefined && e.code == keyCode) } if (isSameKey) { input.focus(); input.click(); return false; } } }, true); } } function addKeyAlt(ele, input, keyCode, keyName) { if (ele != null && input != null) { if (keyName != null && keyName != "") { if (input.tagName == "INPUT") { input.value += " (Alt+" + keyName + ")"; } } ele.addEventListener("keydown", function (e) { if (!e.ctrlKey && !e.shiftKey && e.altKey) { var isSameKey = false; if (Number.isInteger(keyCode)) { isSameKey = (e.keyCode == keyCode); } else { isSameKey = (e.code != undefined && e.code == keyCode) } if (isSameKey) { input.focus(); input.click(); return false; } } }, true); } } function addKeyCtrlEnter(form, input) { addKeyCtrl(form, input, 13, "Enter") } function addKeyCtrlShiftEnter(form, input) { addKeyCtrlShift(form, input, 13, "Enter") } function disableAfterClick(ele) { ele.addEventListener("click", function (e) { var ele = e.target; var tagName = ele.tagName; if (tagName == "INPUT") { // don't change color after disable ele.style.setProperty("color" , window.getComputedStyle(ele).color, "important"); ele.disabled = true; } else if (tagName == "IMG") { ele.removeAttribute("onclick"); } }, true); } function removeAllEventListeners(element) { if (element != null) { var clone = element.cloneNode(false); while (element.firstChild) { clone.appendChild(element.lastChild); } element.parentNode.replaceChild(clone, element); } } function resizeSuggestionBox() { var script = document.createElement('script'); script.innerHTML = " \ var stsh_showSuggestionsBox_start = new Date(); \ var stsh_showSuggestionsBox_itv = setIntervalCustom(function() \ { \ var stsh_showSuggestionsBox_isEnd = false; \ var stsh_showSuggestionsBox_cur = new Date(); \ if (typeof showSuggestionsBox != 'undefined') \ { \ showSuggestionsBox = function(url) \ { \ /* Edit from STS */ \ g_suggestionsBoxIsOpen = true; \ $('suggestions_box_outer').appear( \ { \ duration : 0.1 \ } \ ); \ $('suggestions_iframe').setAttribute('src', url); \ if (!Prototype.Browser.IE) \ { \ $('suggestions_iframe').focus(); \ } \ $('suggestions_iframe').style.height = (document.viewport.getHeight() * 0.99) + 'px'; \ return false; \ }; \ stsh_showSuggestionsBox_isEnd = true; \ } \ if (stsh_showSuggestionsBox_isEnd || stsh_showSuggestionsBox_cur - stsh_showSuggestionsBox_start > 10000) \ { \ clearInterval(stsh_showSuggestionsBox_itv); \ } \ }, 300); \ "; document.head.appendChild(script); window.addEventListener("resize", function() { var iframe = document.querySelector("#suggestions_iframe"); iframe.style.height = (window.innerHeight * 0.99) + "px"; }); } function getQueryByName(name, url) { if (url == null) { url = location == null ? "" : location.search; } name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"); var results = regex.exec(url); var retVal = ""; if (results != null) { retVal = results[1].replace(/\+/g, " "); try { retVal = decodeURIComponent(retVal); } catch (ex) { } } return retVal; } function padZero(num, size) { return (1e15 + num + "").slice(-size); } function padZeroHex(num, size) { return ("00000000000000000000000" + num.toString(16)).slice(-size).toUpperCase(); } function isSpecialChar(ch) { var chCode = -1; if (typeof ch === 'number') { chCode = ch; } else { chCode = ch.charCodeAt(0); } if ((chCode > -1 && chCode < 9) // 0-8 || (chCode > 10 && chCode < 13) // 11-12 || (chCode > 13 && chCode < 32)) // 14-31 { return true; } return false; } function hasSpecialChar(str) { var rgxSpCh = /[\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F]+/; return rgxSpCh.test(str); } function checkSpecialCharMatched(str1, str2) { // return (status, numSp1, numSp2) // status: 0:Match, 1:NotMatch, 2:NotEqual var strOut1 = ""; var strOut2 = ""; if (str1 != null && str2 != null) { for (var i = 0; i < str1.length; i++) { if (isSpecialChar(str1[i])) { strOut1 += str1[i]; } } for (var i = 0; i < str2.length; i++) { if (isSpecialChar(str2[i])) { strOut2 += str2[i]; } } } var retVal = 0; if (strOut1 == strOut2) retVal = 0; else if (strOut1.length == strOut2.length) retVal = 1; else retVal = 2; return new Array(retVal, strOut1.length, strOut2.length); } function trimSpace(str) { return str.replace(/^[ \r\n\t]+/, "").replace(/[ \r\n\t]+$/, ""); } if (!String.prototype.endsWith) { String.prototype.endsWith = function(searchString, position) { var subjectString = this.toString(); if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) { position = subjectString.length; } position -= searchString.length; var lastIndex = subjectString.indexOf(searchString, position); return lastIndex !== -1 && lastIndex === position; }; } function reload() { var curHref = window.location.href; var posHashtag = curHref.indexOf("#"); if (posHashtag > -1) { window.location = curHref.substr(0, posHashtag); } else { window.location = curHref; } } function getCookie(c_name) { var c_value = document.cookie; var c_start = c_value.indexOf(" " + c_name + "="); if (c_start == -1) { c_start = c_value.indexOf(c_name + "="); } if (c_start == -1) { c_value = null; } else { c_start = c_value.indexOf("=", c_start) + 1; var c_end = c_value.indexOf(";", c_start); if (c_end == -1) { c_end = c_value.length; } c_value = unescape(c_value.substring(c_start, c_end)); } return c_value; } var isVisible = (function() { var stateKey; var eventKey; var keys = { hidden: "visibilitychange", webkitHidden: "webkitvisibilitychange", mozHidden: "mozvisibilitychange", msHidden: "msvisibilitychange" }; for (stateKey in keys) { if (stateKey in document) { eventKey = keys[stateKey]; break; } } return function(c) { if (c) { document.addEventListener(eventKey, c); } return !document[stateKey]; } })(); function isDstUsa(year, month, day, hour) { // 2016, 3, 1, 15 == 1 Mar 2016 15:00 var isDst = false; try { var y = parseInt(year); var m = parseInt(month); var d = parseInt(day); var h = parseInt(hour); function checkDstUsa(dayMar, dayNov, m, d, h) { var isDst = false; if ((m == 3 && d >= dayMar) || (m > 3 && m < 11) || (m == 11 && d <= dayNov)) isDst = true; if ((m == 3 && d == dayMar && h < 2) || (m == 11 && d == dayNov && h >= 2)) isDst = false; return isDst; } if (y == 2007 || y == 2012 || y == 2018 || y == 2029) { isDst = checkDstUsa(11, 4, m, d, h); } else if (y == 2013 || y == 2019 || y == 2024) { isDst = checkDstUsa(10, 3, m, d, h); } else if (y == 2008 || y == 2014 || y == 2025) { isDst = checkDstUsa(9, 2, m, d, h); } else if (y == 2009 || y == 2015 || y == 2020 || y == 2026) { isDst = checkDstUsa(8, 1, m, d, h); } else if (y == 2010 || y == 2021 || y == 2027) { isDst = checkDstUsa(14, 7, m, d, h); } else if (y == 2011 || y == 2016 || y == 2022) { isDst = checkDstUsa(13, 6, m, d, h); } else if (y == 2017 || y == 2023 || y == 2028) { isDst = checkDstUsa(12, 5, m, d, h); } } catch (ex) { } return isDst; } function getUnixTimestamp() { return parseInt((new Date()) / 1000); } var timeoutList = new Array(); var intervalList = new Array(); function setTimeoutCustom(func, tm, params) { var id = setTimeout(func, tm, params); timeoutList.push(id); return id; } function clearTimeoutAll() { for (var i = 0; i < timeoutList.length; i++) { clearTimeout(timeoutList[i]); } } function setIntervalCustom(func, tm, params) { var id = setInterval(func, tm, params); intervalList.push(id); return id; } function clearIntervalAll() { for (var i = 0; i < intervalList.length; i++) { clearInterval(intervalList[i]); } } function main() { var url = document.documentURI; var lang = getCookie("Language"); // Auto refresh when error { var h1 = document.querySelector("#leftAreaContainer > h1, body > h1"); if (h1 != null) { var text = h1.textContent.trim(); if (text == "Steam Translation Server - Maintenance Warning" || text == "Forbidden") { console.log("stsh: refresh"); setTimeoutCustom(reload, 60000); return; } } } // Clean links { var pattT1 = /\?t=[0-9]{6,}\&/g; var pattT2 = /\&t=[0-9]{6,}/g; var pattT3 = /\?t=[0-9]{6,}/g; var as = document.querySelectorAll("a"); for (var i = 0; i < as.length; i++) { var href = as[i].href; if (pattT1.test(href)) { as[i].href = href.replace(pattT1,"?"); } else if (pattT2.test(href)) { as[i].href = href.replace(pattT2,""); } else if (pattT3.test(href)) { as[i].href = href.replace(pattT3,""); } } } var eleLogout = document.querySelector("#logout"); if (eleLogout != null) { var logoutHtml = ' <a class="stsh_a_button" target="_blank" ' + ' href="/user_activity.php">My Profile</a> ' + ' <input name="login_button" value="Logout?" type="submit" onclick="return confirm(\'Logout?\');" /> '; eleLogout.innerHTML = logoutHtml; } // Special event button { var eleLogoff = document.querySelector("#logoff"); if (eleLogoff != null) { var d = new Date(); if ((d.getUTCMonth() > 8) || (d.getUTCMonth() == 8 && d.getUTCDate() >= 25) || (d.getUTCMonth() == 0 && d.getUTCDate() <= 1)) { var divSpecial = document.createElement("div"); divSpecial.id = "stsh_specialEvent"; divSpecial.innerHTML = ' <a class="stsh_a_button" target="_blank" ' + ' href="/rally.php">Year-End Rally</a> '; eleLogoff.appendChild(divSpecial); } } } if (url.indexOf("Us_And_Them.php") > -1) { var container = "\""; var tdEng = document.querySelector("#leftAreaContainer > table > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)"); if (tdEng != null) { tdEng.innerHTML = container + tdEng.innerHTML + container; } var h1 = document.querySelector("#leftAreaContainer > h1:nth-child(2)"); if (h1 != null) { var header = h1.textContent.trim(); var key = header.split(" ")[0]; h1.innerHTML = header.replace(key, "<a href='http://translation.steampowered.com/translate.php?keyonly=1&search_input=" + encodeURIComponent(key) + "' >" + key + "</a>"); document.title = key + " - " + document.title; } } // End Us_And_Them.php if (url.indexOf("suggestions.php") > -1) { var eleTextOrg = document.querySelector(".progress tr:last-child > td:nth-child(1)"); if (eleTextOrg) { eleTextOrg.classList.add("stsh_text_org"); } var eleTextTrn = document.querySelector(".progress tr:last-child > td:nth-child(3)"); if (eleTextTrn) { eleTextTrn.classList.add("stsh_text_trn"); } var eleTextSubmit = document.querySelector(".lbAction[name='suggestion_temp'] input[accesskey='s']"); if (eleTextSubmit) { eleTextSubmit.classList.add("stsh_text_submit"); } var elesTextRemoveComment = document.querySelectorAll(".suggestion_signature .lbAction[name^='mymodcomment'] a"); for (var i = 0; i < elesTextRemoveComment.length; i++) { elesTextRemoveComment[i].removeAttribute("href"); elesTextRemoveComment[i].classList.add("stsh_text_removeComment"); } var elesTextComment = document.querySelectorAll("textarea[name='suggestion_comment']"); for (var i = 0; i < elesTextComment.length; i++) { elesTextComment[i].nextElementSibling.classList.add("stsh_submit_comment"); } var ele = document.querySelector("#suggestion_value_new"); if (ele != null) { ele.style.width = "960px"; ele.style.height = "64px"; ele.style.marginLeft = "3px"; } var inputClose = document.querySelector("#suggestions_nav > input[value^='Close']"); if (inputClose != null) { inputClose.value = "Close (Esc)"; } // Move region { var td = document.querySelector(".stsh_text_trn"); if (td != null && td.textContent.trim() == "") { function moveSuggestionBox() { var td = document.querySelector(".stsh_text_trn"); if (td != null && td.textContent.trim() == "") { td.innerHTML = ""; var eleTarget = document.querySelector("#suggestionmain > div:nth-child(4) > .lbAction"); if (eleTarget != null) { td.appendChild(eleTarget); td.style.padding = "0px"; var textarea = document.querySelector("#suggestion_value_new"); if (textarea != null) { textarea.style.width = "98%"; textarea.style.marginLeft = "0px"; textarea.style.height = (textarea.scrollHeight + 20) + "px"; textarea.focus(); } } } } function moveSuggestionList() { var td = document.querySelector(".stsh_text_trn"); if (td != null && td.textContent.trim() == "") { td.innerHTML = ""; var eleTarget = document.querySelector(".suggestion"); if (eleTarget != null) { td.appendChild(eleTarget); td.style.padding = "0px"; eleTarget.style.marginTop = "-2px"; eleTarget.style.paddingTop = "0px"; eleTarget.style.borderBottomWidth = "0px"; eleTarget.style.borderRightWidth = "0px"; eleTarget.style.resize = "none"; var eleAutoApprove = document.querySelector("#stsh_autoApprove"); if (eleAutoApprove != null) { eleAutoApprove.style.display = "none"; } var eleAutoApproveLabel = document.querySelector(".stsh_autoApprove_label"); if (eleAutoApproveLabel != null) { eleAutoApproveLabel.style.display = "none"; } } } } var eleMoveBox = document.createElement("input"); eleMoveBox.id = "stsh_moveSuggestionBox"; eleMoveBox.setAttribute("value", "Move Box Here"); eleMoveBox.setAttribute("type", "button"); eleMoveBox.style.marginRight = "5px"; eleMoveBox.addEventListener("click", function(e) { moveSuggestionBox(); }); td.appendChild(eleMoveBox); var eleMoveList = document.createElement("input"); eleMoveList.id = "stsh_moveSuggestionList"; eleMoveList.setAttribute("value", "Move Suggestion Here"); eleMoveList.setAttribute("type", "button"); eleMoveList.style.marginRight = "5px"; eleMoveList.addEventListener("click", function(e) { moveSuggestionList(); }); td.appendChild(eleMoveList); } } var textarea = document.querySelector("#suggestion_value_new"); if (textarea != null) { textarea.focus(); textarea.style.height = (textarea.scrollHeight + 20) + "px"; if (textarea.scrollHeight > 200 && document.querySelector(".suggestion") != null) { textarea.scrollIntoView(); } } var br = document.querySelector("form.lbAction:nth-child(2) > div:nth-child(2) > br:nth-child(1)"); if (br != null) { br.parentElement.removeChild(br); } var key = ""; var divNav = document.querySelector("div#suggestions_nav"); if (divNav != null) { var insert = ""; var spliter = "_"; var regApp = /[0-9]{2,}/; var aKey = document.querySelector(".smallcopy > font:nth-child(2) > a:nth-child(1)"); if (aKey != null) { insert += ' <br/> '; key = encodeURIComponent(aKey.textContent.trim()); if (key == "token-key") { aKey = document.querySelector(".smallcopy > a:nth-child(3)"); if (aKey != null) { key = encodeURIComponent(aKey.textContent.trim()); } } if (key != "") { document.title = key + " - " + document.title; if (key.split(spliter).length > 1) { if (key.indexOf("%23") == 0) { var firstSpliter = key.indexOf(spliter); var keySharp = key.substring(0, firstSpliter); insert += ' <a class="stsh_a_button" target="_blank" ' + ' href="/translate.php?keyonly=1&paginationrows=1000&search_input=' + keySharp + '">Search by Hashtag</a> '; } var lastSpliter = key.lastIndexOf(spliter); var keyGroup = key.substring(0, lastSpliter); insert += ' <a class="stsh_a_button" target="_blank" ' + ' href="/translate.php?keyonly=1&paginationrows=1000&search_input=' + keyGroup + '">Search by Group</a> '; } insert += ' <a class="stsh_a_button" target="_blank" ' + ' href="/translate.php?keyonly=1&search_input=' + key + '">Search by Key</a> '; } } var tdText = document.querySelector(".stsh_text_org"); if (tdText != null) { var text = encodeURIComponent(tdText.textContent.trim()).replace(/(%20|%09)/g,"+") .replace(/'/g,"\\'").replace("%0A","+").replace(/\++/g,"+").substr(0, 80); if (text.length >= 80) { text = text.substr(0, text.lastIndexOf("+")); } if (text.indexOf(".") > 20) { text = text.substr(0, text.indexOf(".") + 1); } var eleSubmit = document.querySelector(".stsh_text_submit"); if (eleSubmit != null) { var elePrev = eleSubmit.previousElementSibling; if (elePrev == null || elePrev.tagName != "BR") { var eleNew = document.createElement("br"); insertBeforeElement(eleNew, eleSubmit); } } if (text != "") { insert += ' <br/> <a class="stsh_a_button" target="_blank" ' + ' href="/translate.php?keyonly=2&paginationrows=1000&search_input=' + text + '">Search by String</a> '; var eleSubmitNext = document.querySelector(".lbAction input[type='submit'][accesskey='a']"); if (eleSubmitNext != null) { eleSubmitNext.value = "Next"; eleSubmitNext.classList.add("stsh_submit_suggestion_right"); var eleForm = eleSubmitNext.parentElement.parentElement; if (eleForm.tagName == "FORM") { addKeyCtrlShiftEnter(eleForm, eleSubmitNext); } } else { if (eleSubmit != null) { var eleNew = document.createElement("input"); eleNew.id = "stsh_submit_suggestion_next"; eleNew.classList.add("stsh_submit_suggestion_right"); eleNew.setAttribute("type", "submit"); eleNew.setAttribute("value", "Next"); eleNew.setAttribute("name", "submitandnext"); insertAfterElement(eleNew, eleSubmit); eleNew.addEventListener("click", function(ev) { var textOrg = ""; var textTrn = ""; var textCur = ""; var eleTextOrg = document.querySelector(".stsh_text_org"); if (eleTextOrg != null) { textOrg = trimSpace(eleTextOrg.textContent); } var eleTextTrn = document.querySelector(".stsh_text_trn"); if (eleTextTrn != null) { textTrn = trimSpace(eleTextTrn.textContent); } var eleTextCur = document.querySelector("#suggestion_value_new"); if (eleTextCur != null) { textCur = trimSpace(eleTextCur.value); } if (textCur == "" || textOrg == textCur || textTrn == textCur) { ev.preventDefault(); var eleSubmit = document.querySelector(".stsh_text_submit"); if (eleSubmit != null) { eleSubmit.click(); } } }); var eleForm = eleSubmit.parentElement.parentElement; if (eleForm.tagName == "FORM") { addKeyCtrlShiftEnter(eleForm, eleNew); } } } } else { if (textarea != null) { if (eleSubmit != null) { var eleNew = document.createElement("input"); eleNew.id = "stsh_submit_suggestion_space"; eleNew.classList.add("stsh_submit_suggestion_right"); eleNew.setAttribute("type", "button"); eleNew.setAttribute("value", "Submit Space (Alt+0160)"); insertAfterElement(eleNew, eleSubmit); eleNew.addEventListener("click", function(ev) { var textarea = document.querySelector("#suggestion_value_new"); if (textarea != null) { textarea.value = String.fromCharCode(160); textarea.focus(); ev.preventDefault(); var eleSubmit = document.querySelector(".stsh_text_submit"); if (eleSubmit != null) { eleSubmit.click(); } } }); } } } } var app = regApp.exec(key.replace("%23","")); if (key.indexOf("faq") < 0 && app != null) { insert += ' <br/> '; if (key.indexOf("SharedFiles_App_") == 0) { insert += ' <a class="stsh_a_button" target="_blank" ' + ' href="http://steamcommunity.com/workshop/browse?appid=' + app + '">View Workshop</a> '; } insert += ' <a class="stsh_a_button" target="_blank" ' + ' href="http://steamcommunity.com/app/' + app + '">View Community</a> ' insert += ' <a class="stsh_a_button" target="_blank" ' + ' href="http://store.steampowered.com/app/' + app + '">View App</a> '; } var src = document.documentURI; var insertBefore = ' <input id="stsh_refresh" value="Refresh" ' + ' onclick="return false;" type="button"> ' + ' <a class="stsh_a_button" target="_blank" ' + ' href="' + src + '">Frame</a> '; var innerNew = divNav.innerHTML .replace('<input value="Previous',' <input value="Prev') .replace('<input value="Close',' <input value="Close'); divNav.innerHTML = insertBefore + innerNew + insert; var eleRefresh = document.querySelector("#stsh_refresh"); if (ele != null) { eleRefresh.addEventListener("click", function() { reload(); }); } } // Regroup glossary and auto replace matched string { setTimeoutCustom(function() { var br = "<br>"; var brSpace = " <br> "; var tag = "<a"; var colon = ">: "; var comma = ","; var bracket = " ("; var isEdit = false; var p = null; var aGls = document.querySelectorAll("a[href='glossary.php']"); for (var i = 0; i < aGls.length; i++) { if (aGls[i].textContent.trim() == "GLOSSARY FEATURE") { p = aGls[i].parentElement; break; } } if (p != null) { var glosOuters = []; var glosInnerStart = 0; var countGl = 0; var glossaries = p.innerHTML.split(br); if (glossaries.length > 2) { glosOuters = [p]; glosInnerStart = 2; } else { glosOuters = p.nextSibling.querySelectorAll("td"); glosInnerStart = 0; } var rgxKey = />[^><]+</; var rgxKeyClean = /[><]+/g; var rgxKeyPunct = /[\(\)\[\]\:\!]/g; var rgxContentClean = /<[^<]*>/g; var textOrg = ""; var textEng = ""; var isTextReplaced = false; var isOutdated = false; var eleBtnResummit = document.querySelector("input[type='submit'][value^='RESUBMIT']"); if (eleBtnResummit != null) { isTextReplaced = true; } else { var eleTextOrg = document.querySelector("#suggestion_value_new"); if (eleTextOrg != null) { textOrg = eleTextOrg.value.trim().toLowerCase(); } if (textOrg == "") { isTextReplaced = true; } } if (!isTextReplaced) { var eleTrs = document.querySelectorAll(".progress tr"); isOutdated = (eleTrs.length >= 3); if (isOutdated) { textEng = eleTrs[eleTrs.length - 1].firstElementChild.textContent.trim().toLowerCase(); } } for (var i = 0; i < glosOuters.length; i++) { var glosOuter = glosOuters[i]; var glosInners = glosOuter.innerHTML.split(br); isEdit = false; for (var j = glosInnerStart; j < glosInners.length; j++) { var glossary = glosInners[j].trim(); if (glossary.length > 0 && glossary.indexOf(tag) == 0) { var colonIndex = glossary.indexOf(colon); var contentHead = glossary.substr(0, colonIndex + 3); var contentAll = glossary.substr(colonIndex + 3); var contentWords = contentAll.split(comma); var contentFirst = contentWords[0].trim(); for (var k = 0; k < contentWords.length; k++) { var contentNew = contentWords[k].trim(); var contentSub = null; var bracketPos = contentNew.indexOf(" ("); if (bracketPos > -1) { contentSub = contentNew.substr(bracketPos); contentNew = contentNew.substr(0, bracketPos); } contentNew = " <span id='stsh_gls_" + countGl + "' onclick='clickToSelect(this)'>" + contentNew + "</span>"; //+ "<span style='color: white; cursor: pointer;'>^</span>"; if (contentSub != null) { contentNew += "<span " + "onclick='clickToSelect(this.previousElementSibling)'>" + contentSub + "</span>"; } contentWords[k] = contentNew; countGl++; } if (!isTextReplaced) { var keys = contentHead.match(rgxKey); if (keys != null && keys.length > 0) { var key = keys[0].replace(rgxKeyClean, "").trim().toLowerCase(); var contentClean = contentFirst.replace(rgxContentClean, ""); var contentLower = contentClean.toLowerCase(); var textCur = ""; if (key == textOrg.replace(rgxKeyPunct, "")) { textCur = textOrg; } else if (key == textEng.replace(rgxKeyPunct, "")) { textCur = textEng; } if (textCur != "" && key != contentLower) { var rgxReplace = new RegExp(key, "i"); eleTextOrg.value = textCur.replace(rgxReplace, contentClean); isTextReplaced = true; } } } glosInners[j] = contentHead + contentWords.join(comma); isEdit = true; } } if (isEdit && false) { // old feature glosOuter.innerHTML = glosInners.join(brSpace); } } } }, 200); } // Insert clicked word in last textarea { var eleTextLast = null; if (document.activeElement && document.activeElement.tagName == "TEXTAREA") { eleTextLast = document.activeElement; } var elesText = document.querySelectorAll("textarea#suggestion_value_new, textarea[name='suggestion_comment']"); for (var i = 0; i < elesText.length; i++) { elesText[i].addEventListener('focus', function(ev) { eleTextLast = ev.target; }); } setTimeoutCustom(function() { var elesInsert = document.querySelectorAll(".insertword"); for (var i = 0; i < elesInsert.length; i++) { removeAllEventListeners(elesInsert[i]); } function insertAtCaret(txtarea, text) { // Edit from STS var scrollPos = txtarea.scrollTop; var strPos = 0; var strLength = 0; var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? "ff" : (document.selection ? "ie" : false)); if (br == "ie") { txtarea.focus(); var range = document.selection.createRange(); range.moveStart('character', -txtarea.value.length); strPos = range.text.length; } else if (br == "ff") { strPos = txtarea.selectionStart; strLength = txtarea.selectionEnd - txtarea.selectionStart; } var front = (txtarea.value).substring(0, strPos); var back = (txtarea.value).substring(strPos + strLength, txtarea.value.length); txtarea.value = front + text + back; strPos = strPos + text.length; if (br == "ie") { txtarea.focus(); var range = document.selection.createRange(); range.moveStart('character', -txtarea.value.length); range.moveStart('character', strPos); range.moveEnd('character', 0); range.select(); } else if (br == "ff") { txtarea.selectionStart = strPos; txtarea.selectionEnd = strPos; txtarea.focus(); } txtarea.scrollTop = scrollPos; } elesInsert = document.querySelectorAll(".insertword"); for (var i = 0; i < elesInsert.length; i++) { //elesInsert[i].classList.add("stsh_unselectable"); elesInsert[i].addEventListener("click", function(ev) { if (eleTextLast != null) { insertAtCaret(eleTextLast , ev.target.textContent.trim()); } }); } }, 500); } // Restyle glossary { var eleP = null; var elesA = document.querySelectorAll("a[href='glossary.php']"); for (var i = 0; i < elesA.length; i++) { if (elesA[i].textContent.trim() == "GLOSSARY FEATURE") { eleP = elesA[i].parentElement; break; } } if (eleP != null) { var nodeText = eleP.firstElementChild.nextSibling; if (nodeText.nodeType == document.TEXT_NODE) { var ele = document.createElement("span"); ele.textContent = nodeText.textContent; nodeText.parentElement.removeChild(nodeText); insertAfterElement(ele, eleP.firstElementChild); } var eleHead; if (eleP.nextElementSibling.tagName == "TABLE") { eleHead = eleP.nextElementSibling; } else { eleHead = eleP; } eleHead.classList.add("stsh_glossary_header"); var elesTerm = eleHead.querySelectorAll("a[href^='http://translation.steampowered.com/translate.php?search_input=']"); for (var i = 0; i < elesTerm.length; i++) { elesTerm[i].classList.add("stsh_glossary_term"); } { var eleSpan = null; if (eleHead.tagName == "TABLE") { eleSpan = eleHead.previousElementSibling.querySelector("span"); } else { eleSpan = eleHead.querySelector("span"); } eleSpan.textContent = eleSpan.textContent.replace("(click to copy to top)", "(click to copy to suggestion or comment)"); } } } // Auto link http // Format comment { var countSugStatus = document.querySelectorAll( ".suggestions_list span[class^='suggestion_status_']").length; var regUrl = /http[^ "]+/ig; var hostUrl = "http://translation.steampowered.com/"; var hostReplace = "/"; var eleComments = document.querySelectorAll("" + ".suggestion_signature > i:nth-child(3), " + ".suggestion_signature div:nth-child(1) > i:nth-child(4), " + ".suggestion_signature div:nth-child(1) > i:nth-child(6), " + "*[class^='row'] > td:nth-child(2) "); for (var i = 0; i < eleComments.length; i++) { var comment = eleComments[i].innerHTML + " "; if (comment.indexOf("<a") == -1) { var commentUrls = comment.match(regUrl) || []; for (var j = 0; j < commentUrls.length; j++) { var urlDecode = commentUrls[j]; try { urlDecode = decodeURIComponent(commentUrls[j]); if (countSugStatus == 0 && urlDecode.indexOf(hostUrl) == 0) { var query = getQueryByName("search_input", urlDecode.replace("&", "&")); if (query != "") { urlDecode = query; } else { urlDecode = urlDecode.replace(hostUrl, hostReplace); } } } catch (ex) { } var commentUrl = commentUrls[j] + " "; comment = comment.replace(commentUrl,"<a target='_blank' href='" + commentUrls[j] + "' >" + urlDecode + "</a> "); } } comment = comment.trim(); if (comment.indexOf("Comment:") == 0) { eleComments[i].classList.add("stsh_text_comment_header"); comment = comment .replace("Comment:", "Comment: <span class='stsh_text_comment'>") .replace(/\/ /g, "<span class='stsh_white stsh_pad'>/</span> ") .replace(/ \//g, " <span class='stsh_white stsh_pad'>/</span>") .replace(/\-\>\;/g, "<span class='stsh_white stsh_pad'>-></span>") .replace(/\-\-/g, "<span class='stsh_white stsh_pad'>--</span>") .replace(/\,/g, "<span class='stsh_white stsh_pad'>,</span>") .replace(/\*/g, "<span class='stsh_white stsh_pad'><br>*</span>") + "</span>"; } eleComments[i].innerHTML = comment; var eleAs = eleComments[i].querySelectorAll("a"); for (var j = 0; j < eleAs.length; j++) { var href = eleAs[j].getAttribute("href"); if (href.indexOf("#") > -1) { eleAs[j].setAttribute("href", href.replace(/\#/g,"%23")); } } //if (comment.indexOf("Comment:") != 0) { // Discussion comment var rgxImg = /(\.(jpg|png|gif)|\/ugc\/)/i; var elesA = eleComments[i].querySelectorAll("a"); for (var j = 0; j < elesA.length; j++) { var href = elesA[j].getAttribute("href"); if (rgxImg.test(href)) { if (elesA[j].querySelectorAll("img").length == 0) { var ele = document.createElement("img"); ele.classList.add("stsh_comment_img"); ele.setAttribute("src", href); ele.setAttribute("title", href); ele.setAttribute("onclick", " if (this.style.minWidth != '850px') " + " { this.style.minWidth = this.naturalWidth < 850 ? this.naturalWidth + 'px' : '850px'; } " + " else { this.style.minWidth = '400px'; } "); insertAfterElement(ele, elesA[j]); } } } } } } // Restyle token info { var divIntro = document.querySelector("#suggestionmain > div.smallcopy"); if (divIntro != null) { var qBranch = getQueryByName("branch"); var htmlEdit = "You are editing"; var htmlEditReplace = ""; var htmlToken = "Token <"; var htmlTokenReplace = "Token: <"; var htmlToken2 = "token-key"; var htmlToken2Replace = "Token"; var htmlLiveLinkMoved = '<font style="color:red;">This FAQ likely does not exist anymore!</font>' + ' The generated <a href="https://support.steampowered.com/kb_article.php?ref=" target="_blank">live link</a>' + ' seems dead or is redirecting.'; var htmlLiveLinkMovedReplace = '<font style="color:red; cursor: help;"' + ' title="The generated live link seems dead or is redirecting.">' + 'This FAQ likely does not exist anymore!</font>'; var htmlLiveLink = 'target="_blank">Live link'; var htmlLiveLinkReplace = 'target="_blank">Live link'; var htmlFile = " of <"; var htmlFileReplace = ' <br>File: <font class="stsh_blue" onclick="clickToSelect(this)">' + qBranch + '</font> >> <'; var htmlFrom = "<br>Added on <"; var htmlFromReplace = " Added: <"; var htmlUpdated = ">. Updated on <"; var htmlUpdatedReplace = "> Updated: <"; var htmlSugg = 'You have <font style="'; var htmlSuggReplace = 'You have <font title="Enter and submit new suggestions below. Do not alter HTML tags or variables." style="cursor: help; '; var htmlIntro = "Enter and submit new suggestions below. Do not alter HTML tags or variables."; var htmlIntroReplace = ' <a href="mailto:[email protected]" ' + ' title="Please report token issues by posting a TOKEN DISCUSSION \r\nor email to [email protected]" ' + ' style="cursor: help; ">' + '<font style="color:white;">Report Tokens</font></a>'; var htmlContact = '<br>Please report token issues by posting a <font style="color:#a4b23c;">TOKEN DISCUSSION</font> tagged<input style="border:none; color:#FFFFFF; background-color:#111111; cursor:pointer;" onclick="tosts(\'truncated\')" value="[sts_admin][truncated]" type="button">or<input style="border:none; color:#FFFFFF; background-color:#111111; cursor:pointer;" onclick="tosts(\'typo\');" value="[sts_admin][typo]" type="button">or<input style="border:none; color:#FFFFFF; background-color:#111111; cursor:pointer;" onclick="tosts(\'unlockpls\')" value="[sts_admin][unlockpls]" type="button">or by <a href="mailto:[email protected]">email</a>.'; var htmlContactReplace = ''; if (key != "") { htmlIntroReplace += ' <br>Share: <font class="stsh_token_share stsh_green stsh_truncate" ' + 'onclick="clickToSelect(this)">' + 'http://translation.steampowered.com/translate.php?search_input=' + key + "</font> <br>"; } var urlLiveLink = "https://support.steampowered.com/kb_article.php?ref="; var eleLiveLink = divIntro.querySelector("a[href^='" + urlLiveLink + "']"); if (eleLiveLink != null) { htmlLiveLinkReplace = 'target="_blank" title="Live link">' + eleLiveLink.getAttribute("href").replace(urlLiveLink, ""); } var isComplete = (divIntro.innerHTML.indexOf(htmlContact) > -1); divIntro.innerHTML = divIntro.innerHTML .replace(htmlEdit, htmlEditReplace) .replace(htmlToken, htmlTokenReplace) .replace(htmlToken2, htmlToken2Replace) .replace(htmlLiveLinkMoved, htmlLiveLinkMovedReplace) .replace(htmlLiveLink, htmlLiveLinkReplace) .replace(htmlFile, htmlFileReplace) .replace(htmlFrom, htmlFromReplace) .replace(htmlUpdated, htmlUpdatedReplace) .replace(htmlSugg, htmlSuggReplace) .replace(htmlIntro, htmlIntroReplace) .replace(htmlContact, htmlContactReplace) .trim(); var eleToken = document.querySelector("a[href^='Us_And_Them.php?']"); if (eleToken != null) { if (eleToken.textContent != "Token") { eleToken.classList.add("stsh_token_name"); eleToken.classList.add("stsh_truncate"); } } if (!isComplete) { var stsh_introReplace_start = new Date(); var stsh_introReplace_itv = setIntervalCustom(function(params) { var divIntro = params[0]; var htmlContact = params[1]; var htmlContactReplace = params[2]; var stsh_introReplace_isEnd = false; var stsh_introReplace_cur = new Date(); if (divIntro.innerHTML.indexOf(htmlContact) > -1) { divIntro.innerHTML = divIntro.innerHTML .replace(htmlContact, htmlContactReplace); stsh_introReplace_isEnd = true; } if (stsh_introReplace_isEnd || stsh_introReplace_cur - stsh_introReplace_start > 10000) { clearInterval(stsh_introReplace_itv); } }, 100, [divIntro, htmlContact, htmlContactReplace]); } } } // Restyle token discussion { var eleDiscuss = document.querySelector("a[name='tokendiscussion']"); if (eleDiscuss) { var htmlHeader = "TOKEN DISCUSSION (keep global comments English please!):"; var htmlHeaderReplace = "TOKEN DISCUSSION:"; var eleHeader = eleDiscuss.nextElementSibling; eleHeader.setAttribute("title", "Keep global comments English please!"); eleHeader.style.cursor = "help"; eleHeader.textContent = eleHeader.textContent.replace(htmlHeader, htmlHeaderReplace); var eleParent = eleDiscuss.parentElement; var eleSpan = document.createElement("span"); eleSpan.innerHTML = '<input style="border:none; color:#888888; background-color:#111111; cursor:pointer;" onclick="tosts(\'truncated\')" value="[sts_admin][truncated]" type="button">' + '<input style="border:none; color:#888888; background-color:#111111; cursor:pointer;" onclick="tosts(\'typo\');" value="[sts_admin][typo]" type="button">' + '<input style="border:none; color:#888888; background-color:#111111; cursor:pointer;" onclick="tosts(\'unlockpls\')" value="[sts_admin][unlockpls]" type="button">'; eleParent.appendChild(eleSpan); } } var elesForm = document.querySelectorAll(".lbAction"); for (var i = 0; i < elesForm.length; i++) { var eleForm = elesForm[i]; var eleSubmit = eleForm.querySelector("input[type=submit]"); if (eleSubmit != null) { addKeyCtrlEnter(eleForm, eleSubmit); } } var inputApprove = document.querySelector(".suggestion_signature input[value~='APPROVE']"); if (inputApprove != null) { addKeyAlt(document, inputApprove, 219, ""); // [ addKeyAlt(document, inputApprove, "BracketLeft", ""); // [ //addKeyAlt(document, inputApprove, 0, ""); // [ //addKeyAlt(document, inputApprove, 53, ""); // [ addKeyAlt(document, inputApprove, 79, ""); // O addKeyAlt(document, inputApprove, 65, ""); // A } var inputApproveNext = document.querySelector(".suggestion_signature input[value~='Next']"); if (inputApproveNext != null) { inputApproveNext.value = "Next"; addKeyAlt(document, inputApproveNext, 221, ""); // ] addKeyAlt(document, inputApproveNext, "BracketRight", ""); // ] //addKeyAlt(document, inputApproveNext, 188, ""); // ] //addKeyAlt(document, inputApproveNext, 173, ""); // ] //addKeyAlt(document, inputApproveNext, 169, ""); // ] addKeyAlt(document, inputApproveNext, 80, ""); // P addKeyAlt(document, inputApproveNext, 83, ""); // S addKeyCtrl(document, inputApproveNext, 45, "Ins"); // INS disableAfterClick(inputApproveNext); if (inputApproveNext.disabled && inputApprove != null) { addKeyAlt(document, inputApprove, 221, ""); // ] addKeyAlt(document, inputApprove, "BracketRight", ""); // ] //addKeyAlt(document, inputApprove, 188, ""); // ] //addKeyAlt(document, inputApprove, 173, ""); // ] //addKeyAlt(document, inputApprove, 169, ""); // ] addKeyAlt(document, inputApprove, 80, ""); // P addKeyAlt(document, inputApprove, 83, ""); // S addKeyCtrl(document, inputApprove, 45, ""); // INS } } var inputDecline = document.querySelector(".suggestion_signature input[value~='DECLINE']"); if (inputDecline != null) { addKeyCtrl(document, inputDecline, 46, "Del"); // DEL } else { var eleReconsider = document.querySelector(".suggestion_status_approved > a, .suggestion_status_declined > a"); if (eleReconsider) { if (eleReconsider.parentElement.classList.contains("suggestion_status_approved")) { eleReconsider.firstElementChild.textContent += " (Ctrl+Del)"; addKeyCtrl(document, eleReconsider, 46, ""); // DEL } else { if (!eleReconsider.parentElement.parentElement.querySelector(".suggestion_signature .lbAction[name^='mymodcomment']")) { eleReconsider.firstElementChild.textContent += " (Ctrl+Ins)"; addKeyAlt(document, eleReconsider, 221, ""); // ] addKeyAlt(document, eleReconsider, "BracketRight", ""); // ] addKeyAlt(document, eleReconsider, 80, ""); // P addKeyAlt(document, eleReconsider, 83, ""); // S addKeyCtrl(document, eleReconsider, 45, ""); // INS } } } } var inputDeclineNext = document.querySelector(".suggestion_signature input[value~='Next']:nth-child(5)"); if (inputDeclineNext != null) { inputDeclineNext.value = "Next"; } var elesTextRemoveComment = document.querySelectorAll(".stsh_text_removeComment"); if (elesTextRemoveComment.length > 0) { var i = elesTextRemoveComment.length - 1; elesTextRemoveComment[i].firstElementChild.textContent += " (Ctrl+Bksp)"; addKeyCtrl(document, elesTextRemoveComment[i], 8, "Bksp"); // Backspace } var inputPrev = document.querySelector("#suggestions_nav > input[value^='Prev']"); if (inputPrev != null) { addKeyCtrl(document, inputPrev, 219, "["); // [ addKeyCtrl(document, inputPrev, "BracketLeft", ""); // [ //addKeyCtrl(document, inputPrev, 0, ""); // [ //addKeyCtrl(document, inputPrev, 53, ""); // [ disableAfterClick(inputPrev); } var inputNext = document.querySelector("#suggestions_nav > input[value~='Next']"); if (inputNext != null) { addKeyCtrl(document, inputNext, 221, "]"); // ] addKeyCtrl(document, inputNext, "BracketRight", ""); // ] //addKeyCtrl(document, inputNext, 188, ""); // ] //addKeyCtrl(document, inputNext, 173, ""); // ] //addKeyCtrl(document, inputNext, 169, ""); // ] disableAfterClick(inputNext); } // Check special chars { var h1s = document.querySelectorAll(".progress h1"); if (h1s.length == 2) { var h1Org = h1s[0]; var h1Trn = h1s[1]; var tdOrg = document.querySelector(".stsh_text_org"); var tdTrn = document.querySelector(".stsh_text_trn"); if (tdOrg != null && tdTrn != null) { var strOrg = trimSpace(tdOrg.textContent); var strTrn = trimSpace(tdTrn.textContent); var statusTrnArr = checkSpecialCharMatched(strOrg, strTrn); var statusTrnMatched = statusTrnArr[0]; var spOrg = statusTrnArr[1]; var spTrn = statusTrnArr[2]; if (spOrg > 0) { var spanSpOrg = document.createElement("span"); spanSpOrg.id = "stsh_spanSpOrg"; spanSpOrg.classList.add("stsh_blue"); spanSpOrg.innerHTML = " SpecialChar: " + spOrg; h1Org.parentElement.appendChild(spanSpOrg); // Check chars in translated if (strTrn != "") { var spanSpTrn = document.createElement("span"); spanSpTrn.id = "stsh_spanSpTrn"; if (statusTrnMatched == 0) { spanSpTrn.classList.add("stsh_green"); } else { spanSpTrn.classList.add("stsh_red"); } var outputTrn = " SpecialChar: " + spTrn; if (statusTrnMatched == 0) { outputTrn += " (Matched)"; } else if (statusTrnMatched == 1) { outputTrn += " (Order not matched)"; } else { outputTrn += " (Not matched)"; } spanSpTrn.innerHTML = outputTrn; h1Trn.parentElement.appendChild(spanSpTrn); } // Check chars in suggested var divSugs = document.querySelectorAll(".suggestion_text"); for (var i = 0; i < divSugs.length; i++) { var divSug = divSugs[i]; var strSug = trimSpace(divSug.textContent); var statusSugArr = checkSpecialCharMatched(strOrg, strSug); var statusSugMatched = statusSugArr[0]; var spSug = statusSugArr[2]; var spanSpSug = document.createElement("span"); spanSpSug.classList.add("stsh_spanSpSug"); if (statusSugMatched == 0) { spanSpSug.classList.add("stsh_green"); } else { spanSpSug.classList.add("stsh_red"); } var outputSug = " SpecialChar: " + spSug; if (statusSugMatched == 0) { outputSug += " (Matched)"; } else if (statusSugMatched == 1) { outputSug += " (Order not matched)"; } else { outputSug += " (Not matched)"; } outputSug += " <br/><br/> "; spanSpSug.innerHTML = outputSug; divSug.insertBefore(spanSpSug, divSug.firstChild); } } } } } // Trim string in same token { var p = document.querySelector("#suggestionmain > div:nth-child(5) > p:nth-child(4)"); if (p != null) { for (var i = 0; i < p.childNodes.length; i++) { child = p.childNodes[i]; if (child.nodeName == "#text") { child.nodeValue = child.nodeValue.trim(); } } } } // Display newlines and specialChars { var tdOrg = document.querySelector(".stsh_text_org"); var tdTrn = document.querySelector(".stsh_text_trn"); if (tdOrg != null && tdTrn != null) { var htmlOrg = tdOrg.innerHTML.trim(); var htmlTrn = tdTrn.innerHTML.trim(); if ((htmlOrg.indexOf("\n") > -1 || htmlOrg.indexOf("\\n") > -1 || htmlTrn.indexOf("\n") > -1 || htmlTrn.indexOf("\\n") > -1) /*&& htmlOrg.indexOf("<br") < 0 && htmlOrg.indexOf("<p") < 0 && htmlOrg.indexOf("<div") < 0 && htmlOrg.indexOf("<li") < 0*/) { var h2SugHeader = document.querySelector("#suggestionmain > div > h2"); if (h2SugHeader != null) { var btn = document.createElement("input"); btn.setAttribute("class", "stsh_btn_right"); btn.setAttribute("type", "button"); btn.setAttribute("value", "Display Newlines"); h2SugHeader.appendChild(btn); function displayNewlines(ele) { if (ele != null) { ele.innerHTML = ele.innerHTML.trim() .replace(/\n/g,"\n<br>") .replace(/\\n/g," \\n<br>") .replace(/\\r \\n/g," \\r\\n<br>") .replace(/\<br\>[\s]+/g,"<br> "); } } btn.addEventListener("click", function(e) { e.target.disabled = true; var tdOrg = document.querySelector(".stsh_text_org"); var tdTrn = document.querySelector(".stsh_text_trn"); displayNewlines(tdOrg); displayNewlines(tdTrn); var divSugs = document.querySelectorAll(".suggestion_text"); for (var i = 0; i < divSugs.length; i++) { var divSug = divSugs[i]; displayNewlines(divSug); } var textarea = document.querySelector("#suggestion_value_new"); if (textarea != null) { textarea.focus(); } }); } } if (hasSpecialChar(htmlOrg) || hasSpecialChar(htmlTrn)) { var h2SugHeader = document.querySelector("#suggestionmain > div > h2"); if (h2SugHeader != null) { var btn = document.createElement("input"); btn.setAttribute("class", "stsh_btn_right"); btn.setAttribute("type", "button"); btn.setAttribute("value", "Display SpecialChars"); h2SugHeader.appendChild(btn); function replaceSpecialChars(str, unicodeNumber) { var rgx = new RegExp("\\u" + padZeroHex(unicodeNumber, 4), "g"); return str.replace(rgx, '<span class="stsh_grey">[' + unicodeNumber + ']</span>'); } function displaySpecialChars(ele) { if (ele != null) { var strInner = ele.innerHTML.trim(); for (var i = 0; i < 32; i++) { if (hasSpecialChar(strInner)) { if (isSpecialChar(i)) { strInner = replaceSpecialChars(strInner, i); } } else { break; } } ele.innerHTML = strInner; } } btn.addEventListener("click", function(e) { e.target.disabled = true; var tdOrg = document.querySelector(".stsh_text_org"); var tdTrn = document.querySelector(".stsh_text_trn"); displaySpecialChars(tdOrg); displaySpecialChars(tdTrn); var divSugs = document.querySelectorAll(".suggestion_text"); for (var i = 0; i < divSugs.length; i++) { var divSug = divSugs[i]; displaySpecialChars(divSug); } var textarea = document.querySelector("#suggestion_value_new"); if (textarea != null) { textarea.focus(); } }); } } } } // Open comment when decline { var countComment = 0; var elesComment = []; var countSug = document.querySelectorAll(".suggestions_list .suggestion").length; var countSugDeclined = document.querySelectorAll( ".suggestions_list span[class='suggestion_status_declined']").length; if (countSug == countSugDeclined) { var elesSugA = document.querySelectorAll(".suggestions_list span[class^='suggestion_status_'] a"); for (var i = 0; i < elesSugA.length; i++) { var eleComment = elesSugA[i].parentElement.parentElement.nextSibling; if (eleComment.nodeName == "DIV" && eleComment.classList.contains("copy")) { if (elesSugA[i].parentElement.classList.contains("suggestion_status_declined")) { countComment++; elesComment.push(eleComment); } } } if (countComment == elesSugA.length) { var isFocus = false; for (var i = 0; i < elesComment.length; i++) { elesComment[i].style.display = "block"; if (!isFocus) { var eleTxt = elesComment[i].querySelector("textarea[name='suggestion_comment']"); if (eleTxt) { eleTxt.focus(); // Auto paste last comment { var eleTextOrg = document.querySelector(".stsh_text_org"); if (eleTextOrg) { var textOrg = trimSpace(eleTextOrg.innerHTML).substr(0, 1000).toLowerCase(); if (textOrg == GM_getValue("textLastOrg_Comment", "")) { var textLastCur = GM_getValue("textLastCur_Comment", ""); if (textLastCur != "") { eleTxt.value = textLastCur; } setTimeoutCustom(function(ele) { if (ele) { var textLastCur = GM_getValue("textLastCur_Comment", ""); if (textLastCur != "") { ele.value = textLastCur; //ele.selectionStart = 0; //ele.selectionEnd = ele.value.length; } } }, 250, eleTxt); } } } var eleSugOuter = elesComment[i].parentElement.parentElement.parentElement.parentElement; if (eleSugOuter.classList.contains("suggestion")) { var eleOnion = eleSugOuter.querySelector(".suggestion_text font[style='color:#01ec00;']"); if (eleOnion != null) { eleTxt.value = "onion"; } } var eleSugComment = elesComment[i].parentElement .parentElement.parentElement.querySelector(".stsh_text_comment font"); if (eleSugComment != null && eleSugComment.textContent.trim() == "ATTENTION - English string was updated. This suggestion might be outdated.") { eleTxt.value = "outdated"; } isFocus = true; } } } } } } // Convert time { var rgxTime = /\d{2}-\d{2}-\d{4}, \d{2}:\d{2} [AP]M/; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var eleFriends = document.querySelectorAll(".friend_block_avatar, .friend_block_discussions"); for (var i = 0; i < eleFriends.length; i++) { var nodes = []; if (eleFriends[i].classList.contains("friend_block_avatar")) { nodes = eleFriends[i].childNodes; } else if (eleFriends[i].classList.contains("friend_block_discussions")) { nodes = eleFriends[i].parentElement.nextElementSibling.childNodes[2].childNodes; } for (var j = 0; j < nodes.length; j++) { var nodeVal = nodes[j].nodeValue; if (nodeVal != null) { var dateTimes = rgxTime.exec(nodeVal); if (dateTimes != null) { var dateTime = dateTimes[0]; var month = dateTime.substr(0, 2); var day = dateTime.substr(3, 2); var year = dateTime.substr(6, 4); var hour = dateTime.substr(12, 2); var minute = dateTime.substr(15, 2); var period = dateTime.substr(18, 2); if (period == "AM") { if (hour == "12") { hour = "00" } } else if (period == "PM") { hour = parseInt(hour) + 12; if (hour == 24) { hour = 12; } } var dateTimeStd = year + "-" + month + "-" + day; if (isDstUsa(year, month, day, hour)) { dateTimeStd += "T" + hour + ":" + minute + ":00-0700"; } else { dateTimeStd += "T" + hour + ":" + minute + ":00-0800"; } var dateStd = new Date(dateTimeStd); if (dateStd.toLocaleString() != "Invalid Date") { var gmt = dateStd.getTimezoneOffset() / 60 * -1; var gmtStr = " GMT"; if (gmt > 0) { gmtStr += "+" + gmt; } else if (gmt < 0) { gmtStr += "" + gmt; } var dateNew = dateStd.getDate() + " " + months[dateStd.getMonth()] + " " + dateStd.getFullYear() + ", " + padZero(dateStd.getHours(), 2) + ":" + padZero(dateStd.getMinutes(), 2) + gmtStr; //console.log("Time: " + dateTimeStd); //console.log("Time: " + dateTime + " -> " + dateNew); //var dateNew2 = dateStd.toLocaleString() + gmtStr; //console.log("Time: " + dateTime + " -> " + dateNew2); var nodeValBegin = nodeVal.substr(0, nodeVal.indexOf(dateTime)); var nodeValEnd = nodeVal.substr(nodeVal.indexOf(dateTime) + dateTime.length); nodes[j].nodeValue = nodeValBegin; var ele = document.createElement("span"); ele.classList.add("stsh_time_convert"); ele.setAttribute("title", dateTime); ele.textContent = dateNew; insertAfterElement(ele, nodes[j]); if (nodeValEnd != "") { insertAfterElement(document.createTextNode(nodeValEnd), ele); } } else { console.log("Invalid Date: " + dateTimeStd); } } } } } } // Add Steam profile links { var eleSpans = document.querySelectorAll("span[title='Send this user a private message']"); for (var i = 0; i < eleSpans.length; i++) { var href = eleSpans[i].parentElement.firstElementChild.getAttribute("href"); if (href != null && href.indexOf("user_activity.php?user=") == 0) { var profile = href.replace("user_activity.php?user=", ""); var ele = document.createElement("a"); ele.classList.add("stsh_steamProfile"); ele.setAttribute("target", "_blank"); ele.setAttribute("title", "View Steam profile"); ele.setAttribute("href", "http://steamcommunity.com/profiles/" + profile); ele.textContent = " Steam "; insertBeforeElement(ele, eleSpans[i]); } } } // Add auto approve { if (inputApprove != null) { var eleInput = document.createElement("input"); eleInput.id = "stsh_autoApprove"; eleInput.setAttribute("type", "checkbox"); eleInput.setAttribute("value", "auto"); eleInput.textContent = ""; var eleLabel = document.createElement("label"); eleLabel.classList.add("stsh_autoApprove_label"); eleLabel.classList.add("stsh_unselectable"); eleLabel.setAttribute("for", "stsh_autoApprove"); eleLabel.setAttribute("title", "Please use with care!"); eleLabel.textContent = " Auto Approve Next "; inputApprove.parentElement.appendChild(eleInput); inputApprove.parentElement.appendChild(eleLabel); function autoApprove() { var tm = 2000; console.log("AutoApprove: Next in " + tm + "ms"); setTimeoutCustom(function () { var eleCheck = document.querySelector("#stsh_autoApprove"); if (eleCheck != null && eleCheck.checked) { var isClicked = false; var ele = document.querySelector(".suggestion_signature input[value~='Next']"); if (ele != null && !ele.disabled && isVisible()) { var isOutdated = false; var eleSugComment = ele.parentElement .parentElement.parentElement.querySelector(".stsh_text_comment font"); if (eleSugComment != null && eleSugComment.textContent.trim() == "ATTENTION - English string was updated. This suggestion might be outdated.") { isOutdated = true; } if (!isOutdated) { isClicked = true; GM_setValue("timeAutoApproveLast", getUnixTimestamp()); ele.click(); } } if (!isClicked) { eleCheck.checked = false; GM_setValue("isAutoApprove", "false"); } } }, tm); } var tmDiff = getUnixTimestamp() - GM_getValue("timeAutoApproveLast", 0); if (tmDiff > 10) { // > 10s eleInput.checked = false; GM_setValue("isAutoApprove", "false"); } if (window.parent != window) { var eleOuter = window.parent.document.querySelector("#suggestions_box_outer"); if (eleOuter != null) { if (eleOuter.style.display == "none") { // Closed iFrame eleInput.checked = false; GM_setValue("isAutoApprove", "false"); } } } if (GM_getValue("isAutoApprove", 0) == "true") { eleInput.checked = true; autoApprove(); } eleInput.addEventListener("click", function (e) { var ele = e.target; if (ele.checked) { GM_setValue("isAutoApprove", "true"); autoApprove(); } else { GM_setValue("isAutoApprove", "false"); } }); } } // Warn when remove { var elesRemove = document.querySelectorAll(".suggestion_signature input[value='REMOVE']"); for (var i = 0; i < elesRemove.length; i++) { var oldClick = elesRemove[i].getAttribute("onclick"); if (oldClick != null && oldClick.indexOf("location.href") == 0) { var eleSug = elesRemove[i].parentElement.parentElement.parentElement.parentElement; if (eleSug.classList.contains("suggestion")) { var eleOnion = eleSug.querySelector(".suggestion_text font[style='color:#01ec00;']"); if (eleOnion != null) { var newClick = "if (!confirm(\"Warning: You will delete your onion. Press Cancel to go back.\")) return false; " + oldClick; elesRemove[i].setAttribute("onclick", newClick); elesRemove[i].setAttribute("title", "Do not remove your onion!"); elesRemove[i].style.color = "#777"; elesRemove[i].style.cursor = "not-allowed"; } else { var eleComment = elesRemove[i].previousElementSibling.previousElementSibling; if (eleComment != null) { if (eleComment.textContent.trim().indexOf("Comment:") == 0) { var newClick = "if (!confirm(\"Warning: You should not remove this suggestion. Press OK if you really want.\")) return false; " + oldClick; elesRemove[i].setAttribute("onclick", newClick); elesRemove[i].setAttribute("title", "Your suggestion that has a comment!"); elesRemove[i].style.color = "#777"; elesRemove[i].style.cursor = "not-allowed"; } } } } } } } // Clean language markers that link to Steam { var rgxLang = /\?l=[a-z]+$/i; var elesFriend = document.querySelectorAll(".friend_block_discussions"); for (var i = 0; i < elesFriend.length; i++) { var eleDiscuss = elesFriend[i].parentElement.nextElementSibling; if (eleDiscuss.querySelector("font[style='color:#EDB687;']") == null) { var elesA = eleDiscuss.querySelectorAll("a[href*='steam']"); for (var j = 0; j < elesA.length; j++) { var href = elesA[j].getAttribute("href"); if (rgxLang.test(href)) { elesA[j].setAttribute("href", href.replace(rgxLang, "")); } } } } } // Auto paste last suggestion { if (!/edit/i.test(getQueryByName("action"))) { var eleTextOrg = document.querySelector(".stsh_text_org"); if (eleTextOrg) { var textOrg = trimSpace(eleTextOrg.innerHTML).toLowerCase(); if (textOrg == GM_getValue("textLastOrg", "")) { var eleTextCur = document.querySelector("#suggestion_value_new"); if (eleTextCur) { var textLastCur = GM_getValue("textLastCur", ""); if (textLastCur != "") { eleTextCur.value = textLastCur; } } setTimeoutCustom(function() { var eleTextCur = document.querySelector("#suggestion_value_new"); if (eleTextCur) { var textLastCur = GM_getValue("textLastCur", ""); if (textLastCur != "") { eleTextCur.value = textLastCur; } } }, 250); } } } var elesTextSubmit = document.querySelectorAll(".stsh_text_submit, #stsh_submit_suggestion_next"); for (var i = 0; i < elesTextSubmit.length; i++) { elesTextSubmit[i].addEventListener("click", function() { var eleTextOrg = document.querySelector(".stsh_text_org"); if (eleTextOrg) { var textOrg = trimSpace(eleTextOrg.innerHTML); if (textOrg.length < 1000) { var eleTextCur = document.querySelector("#suggestion_value_new"); if (eleTextCur) { var textCur = trimSpace(eleTextCur.value); GM_setValue("textLastOrg", textOrg.toLowerCase()); GM_setValue("textLastCur", textCur); } } } }); } } // Auto store last comment { //console.log("textLastOrg_Comment: " + GM_getValue("textLastOrg_Comment", "")); //console.log("textLastCur_Comment: " + GM_getValue("textLastCur_Comment", "")); function storeLastComment(eleTextComment, isRemoved) { if (eleTextComment) { var eleTextOrg = document.querySelector(".stsh_text_org"); if (eleTextOrg) { var textOrg = trimSpace(eleTextOrg.innerHTML).substr(0, 1000).toLowerCase(); if (isRemoved) { if (textOrg == GM_getValue("textLastOrg_Comment", "")) { // When remove comment, don't store if original text is the same return; } } var textCur = trimSpace(eleTextComment.value || eleTextComment.textContent); GM_setValue("textLastOrg_Comment", textOrg); GM_setValue("textLastCur_Comment", textCur); } } } var elesTextRemoveComment = document.querySelectorAll(".stsh_text_removeComment"); for (var i = 0; i < elesTextRemoveComment.length; i++) { elesTextRemoveComment[i].addEventListener("click", function(ev) { var target = null; if (ev.target.tagName === "FONT") { target = ev.target.parentElement; } else { target = ev.target; } var eleTextComment = target .parentElement.parentElement.parentElement.parentElement .querySelector(".stsh_text_comment"); storeLastComment(eleTextComment, true); }); } var elesSubmitComment = document.querySelectorAll(".stsh_submit_comment"); for (var i = 0; i < elesSubmitComment.length; i++) { elesSubmitComment[i].addEventListener("click", function(ev) { var eleTextComment = ev.target.previousElementSibling; storeLastComment(eleTextComment, false); }); } } } // End suggestions.php if (url.indexOf("translate.php") > -1) { var searchText = getQueryByName("search_input"); if (searchText != "") { document.title = searchText + " - " + document.title; } else { var fileID = getQueryByName("file_ID"); if (fileID != "") { var eleFile = document.querySelector("#leftAreaContainer label[for='chosenfile']"); if (eleFile != null) { var file = eleFile.textContent.trim(); if (file.indexOf("Limit search results to CURRENT FILE: ") == 0) { file = file.replace("Limit search results to CURRENT FILE: ", ""); var fileNew = file.split("#").reverse().join(" # ").trim(); document.title = fileNew + " - " + document.title; } } } else { var eleInput = document.querySelector("#search_input"); if (eleInput != null) { var valInput = eleInput.value.trim(); if (valInput.indexOf("SUGGESTIONS FROM: ") == 0) { document.title = valInput.replace("SUGGESTIONS FROM: ", "") + " - " + document.title; } } } } var outer = document.getElementById("suggestions_box_outer"); if (outer != null) { outer.setAttribute("onclick","hideSuggestionsBox();"); } var divBtn = document.createElement("div"); document.body.appendChild(divBtn); divBtn.innerHTML = ' \ <div class="stsh_showing_group"> \ <span class="stsh_showing_header">Hide</span>\ <br/> <input value="App" class="stsh_btn_short" type="button" onclick="hideKeyAppInterval(); return false;" /> \ <input value="Game" class="stsh_btn_short" type="button" onclick="hideKeyGameInterval(); return false;" /> \ <br/> <input value="FAQ" class="stsh_btn_short" type="button" onclick="hideKeyFaqInterval(); return false;" /> \ <input value="Support" class="stsh_btn_short" type="button" onclick="hideKeySupportInterval(); return false;" /> \ <br/> <input value="Promo" class="stsh_btn_short" type="button" onclick="hideKeyPromoInterval(); return false;" /> \ <input value="Email" class="stsh_btn_short" type="button" onclick="hideKeyEmailInterval(); return false;" /> \ <br/> \ <br/> <input value="Hide not similar" class="stsh_btn_long" type="button" onclick="hideStrNotMatchInterval(); return false;" /> \ <br/> <input value="Hide very long" class="stsh_btn_long" type="button" onclick="hideStrLongInterval(); return false;" /> \ \ <br/> <span class="stsh_showing_header">Hide Suggestions</span>\ <br/> <input id="stsh_showing_notTranslated" value="Not Translated (0)" class="stsh_btn_long" type="button" /> \ <br/> <input id="stsh_showing_suggested" value="Suggested (0)" class="stsh_btn_long" type="button" /> \ <br/> <input id="stsh_showing_resuggested" value="Resuggested (0)" class="stsh_btn_long" type="button" /> \ <br/> <input id="stsh_showing_approved" value="Approved (0)" class="stsh_btn_long" type="button" /> \ <br/> <input id="stsh_showing_declined" value="Declined (0)" class="stsh_btn_long" type="button" /> \ <br/> <input id="stsh_showing_translated" value="Translated (0)" class="stsh_btn_long" type="button" /> \ \ <br/> <span class="stsh_showing_header">Sort by</span>\ <br/> <input value="Key" class="stsh_btn_short" type="button" onclick="sortKeyInterval(); return false;" /> \ <input value="String" class="stsh_btn_short" type="button" onclick="sortStringInterval(); return false;" /> \ <br/> <input value="Word" class="stsh_btn_short" type="button" onclick="sortWordInterval(); return false;" /> \ <input value="Length" class="stsh_btn_short" type="button" onclick="sortLengthInterval(); return false;" /> \ <br/> \ <br/> <input id="stsh_showing_refresh" value="Refresh" class="stsh_btn" type="button" onclick="hideSuggestionsBox(); return false;" /> \ <br/> <input id="stsh_showing_all" value="Show All" class="stsh_btn" type="button" onclick="showKey(); return false;" /> \ </div> \ <div id="stsh_showing_current"></div> \ <div id="stsh_showing"></div> \ '; // Count showing function countShowing() { if (!isVisible()) return; var trKeys = document.querySelectorAll("#keylist > table:nth-child(1) > tbody:nth-child(1) > tr"); var countAll = document.querySelectorAll("#keylist .copysmall").length; var countShow = 0; var countSuggest = 0; var countResuggest = 0; var countApprove = 0; var countDecline = 0; var countNotTranslated = 0; var countTranslated = 0; var txtApprove = "ready for Admin"; var txtDecline = "ready for removal"; var txtSuggest = "suggestion"; for (var i = 0; i < trKeys.length; i++) { if (trKeys[i].style.display != "none") { var eleCounter = trKeys[i].querySelector("tr.copysmall > td:nth-child(3)"); if (eleCounter != null) { countShow++; var txtCounter = eleCounter.textContent.trim(); if (txtCounter.indexOf(txtApprove) > -1) { countApprove++; } else if (txtCounter.indexOf(txtDecline) > -1) { countDecline++; } else if (txtCounter.indexOf(txtSuggest) > -1) { var eleNotTranslated = trKeys[i].querySelector("span.token_nottranslated"); if (eleNotTranslated != null) { countSuggest++; } else { countResuggest++; } } else { var eleNotTranslated = trKeys[i].querySelector("span.token_nottranslated"); if (eleNotTranslated != null) { countNotTranslated++; } else { countTranslated++; } } } else { var eleTd = trKeys[i].querySelector("td"); if (eleTd != null) { if (eleTd.textContent.trim() == "") { trKeys[i].parentElement.removeChild(trKeys[i]); } } } } } var eleShowing = document.getElementById("stsh_showing"); if (eleShowing != null) { var newHtml = "Showing: <span class=\"stsh_showing_counter\">" + countShow + " of " + countAll + "</span>" + "<!-- " + countNotTranslated + ", " + countSuggest + ", " + countResuggest + ", " + countApprove + ", " + countDecline + ", " + countTranslated + " -->"; if (eleShowing.innerHTML != newHtml) { eleShowing.innerHTML = newHtml; var eleBtnShowings = document.querySelectorAll("#stsh_showing_notTranslated, #stsh_showing_suggested, #stsh_showing_resuggested" + ", #stsh_showing_approved, #stsh_showing_declined, #stsh_showing_translated"); if (eleBtnShowings.length == 6) { var counterArr = [countNotTranslated, countSuggest, countResuggest, countApprove, countDecline, countTranslated ]; var counterTextArr = ["Not Translated", "Suggested", "Resuggested" , "Approved", "Declined", "Translated" ]; for (var i = 0; i < eleBtnShowings.length; i++) { eleBtnShowings[i].value = counterTextArr[i] + " ("+ counterArr[i] +")" ; }; } } } var eleShowingCur = document.getElementById("stsh_showing_current"); if (eleShowingCur != null) { var eleOuter = document.getElementById("suggestions_box_outer"); if (eleOuter != null) { if (eleOuter.style.display != "none") { if (eleShowingCur.style.display != "initial") eleShowingCur.style.display = "initial"; var eleIframe = document.getElementById("suggestions_iframe"); var iUrl = eleIframe.contentWindow.location.href; var listId = parseInt(getQueryByName("list_id", iUrl)); if (isNaN(listId)) listId = 1; else listId += 1; var newHtml = "Current: <span class=\"stsh_showing_counter\">" + listId + " of " + countShow + "</span>"; if (eleShowingCur.innerHTML != newHtml) { eleShowingCur.innerHTML = newHtml; } } else { if (eleShowingCur.style.display != "none") { eleShowingCur.style.display = "none"; eleShowingCur.innerHTML = ""; } } } } } countShowing(); setIntervalCustom(countShowing, 1000); // End Count showing // Line Counter function addLineCounter() { if (!isVisible()) return; var elesCounter = document.querySelectorAll(".stsh_lineCounter"); if (elesCounter.length > 0) { var j = 1; for (var i = 0; i < elesCounter.length; i++) { if (elesCounter[i].parentElement.parentElement.parentElement.parentElement.style.display != "none") { if (elesCounter[i].textContent.trim() != j) { elesCounter[i].textContent = j; } j++; } } } else { var elesDiv = document.querySelectorAll("#keylist td:nth-child(1) > div"); for (var i = 0; i < elesDiv.length; i++) { var eleNew = document.createElement("span"); eleNew.classList.add("stsh_lineCounter_outer"); eleNew.innerHTML = ' <span class="stsh_lineCounter"> ' + (i + 1) + ' </span> '; elesDiv[i].appendChild(eleNew); } } } addLineCounter(); setIntervalCustom(addLineCounter, 1000); // End Line Counter // Hide suggestions { function hideSuggestions(mode) { // mode: 0-5 (0: "Not Translated", 1: "Suggested", 2: "Resuggested", 3: "Approved", 4: "Declined", 5: "Translated") if (!isVisible()) return; if (mode < 0 || mode > 5) return; var display = "none"; var txtApprove = "ready for Admin"; var txtDecline = "ready for removal"; var txtSuggest = "suggestion"; var trKeys = document.querySelectorAll("#keylist > table:nth-child(1) > tbody:nth-child(1) > tr"); for (var i = 0; i < trKeys.length; i++) { if (trKeys[i].style.display != display) { var curMode = -1; var eleCounter = trKeys[i].querySelector("tr.copysmall > td:nth-child(3)"); if (eleCounter != null) { var txtCounter = eleCounter.textContent.trim(); if (txtCounter.indexOf(txtApprove) > -1) { curMode = 3; // Approved } else if (txtCounter.indexOf(txtDecline) > -1) { curMode = 4; // Declined } else if (txtCounter.indexOf(txtSuggest) > -1) { var eleNotTranslated = trKeys[i].querySelector("span.token_nottranslated"); if (eleNotTranslated != null) { curMode = 1; // Suggested } else { curMode = 2; // Resuggested } } else { var eleNotTranslated = trKeys[i].querySelector("span.token_nottranslated"); if (eleNotTranslated != null) { curMode = 0; // Not Translated } else { curMode = 5; // Translated } } } if (curMode == mode) { trKeys[i].style.display = display; } } } } var itvTime = 300; var itvIdHider = [0, 0, 0, 0, 0, 0]; var eleBtnShowings = document.querySelectorAll("#stsh_showing_notTranslated, #stsh_showing_suggested, #stsh_showing_resuggested" + ", #stsh_showing_approved, #stsh_showing_declined, #stsh_showing_translated"); if (eleBtnShowings.length == 6) { for (var i = 0; i < eleBtnShowings.length; i++) { eleBtnShowings[i].param = i; eleBtnShowings[i].addEventListener("click", function(ev) { var mode = ev.target.param; clearInterval(itvIdHider[mode]); itvIdHider[mode] = setIntervalCustom(function(ev) { hideSuggestions(mode); }, itvTime); hideSuggestions(mode); countShowing(); eleBtnShowings[mode].setAttribute("disabled", "disabled"); }); } var eleBtnShowAll = document.querySelector("#stsh_showing_all"); if (eleBtnShowAll != null) { eleBtnShowAll.addEventListener("click", function() { for (var i = 0; i < eleBtnShowings.length; i++) { clearInterval(itvIdHider[i]); countShowing(); eleBtnShowings[i].removeAttribute("disabled"); } }); } } } // End Hide suggestions resizeSuggestionBox(); // Add Frame button when iframe load failed { var ifrm = document.querySelector("#suggestions_iframe"); if (ifrm != null) { ifrm.addEventListener("DOMAttrModified", function (ev) { if (ev.attrName === "src") { var divFrame = document.querySelector("#stsh_frame"); if (divFrame == null) { var divOuter = document.querySelector("#suggestions_box_outer"); if (divOuter != null) { divFrame = document.createElement("div"); divFrame.id = "stsh_frame"; divOuter.appendChild(divFrame); } } if (divFrame != null) { var src = ifrm.getAttribute("src"); divFrame.innerHTML = '<br/> <a class="stsh_a_button" target="_blank" ' + ' href="' + src + '">Frame</a> '; } } }, false); } } // Open frame if only one string { setTimeoutCustom(function() { var elesCopy = document.querySelectorAll("#keylist .copysmall"); if (elesCopy.length == 1) { var eleDiv = elesCopy[0].parentElement.parentElement.parentElement; if (eleDiv.tagName == "DIV") { if (!isVisible()) { eleDiv.click(); } } } }, 1000); } } // End translate.php if (url.indexOf("user_activity.php") > -1) { var user = ""; var eleAvatar = document.querySelector(".friend_block_avatar > a[href^='https://steamcommunity.com']"); if (eleAvatar != null) { eleAvatar.href = eleAvatar.href.replace("https://steamcommunity.com", "http://steamcommunity.com"); if (eleAvatar.href.indexOf("http://steamcommunity.com/profiles/") == 0) { user = eleAvatar.href.replace("http://steamcommunity.com/profiles/", ""); } var name = eleAvatar.firstElementChild.getAttribute("title"); if (name == "") { name = user; } document.title = name + " - " + document.title; } var stsh_activityAddLink_start = new Date(); var stsh_activityAddLink_itv = setIntervalCustom(function(user) { var stsh_activityAddLink_isEnd = false; var stsh_activityAddLink_cur = new Date(); var h3s = document.querySelectorAll("#leftAreaContainer h3"); if (h3s.length == 2) { var td = h3s[1].parentElement; var matchArr = td.innerHTML.match(/<\/h3>.+<br>/i); if (matchArr != null) { var name = matchArr[0].replace("</h3>-","").replace("-<br>","").replace("<br>","").trim(); if (name == "") { name = user; } if (name == "") { name = "Steam"; } var tagNew = ""; if (user == "") { tagNew = "</h3><a id='stsh_sectionId' class='stsh_blue' target='_blank' href='http://steamcommunity.com/my'>" + name + "</a>" + ", <a class='stsh_green' target='_blank' href='http://translation.steampowered.com/WhereIsEsty.php'>Esty</a><br><br>"; } else { tagNew = "</h3><a id='stsh_sectionId' class='stsh_blue' target='_blank' href='http://steamcommunity.com/profiles/" + user + "'>" + name + "</a>" + ", <a class='stsh_green' target='_blank' href='http://translation.steampowered.com/WhereIsEsty.php?collectionof=" + user + "'>Esty</a>" /*+ ", <a class='stsh_green' target='_blank' href='http://translation.steampowered.com/translate.php?user=" + user + "&onionhunter=1&liststatus=1'>Onion</a>*/ + " <br><br> "; } td.innerHTML = td.innerHTML.replace(/<\/h3>.+<br>/i, tagNew); stsh_activityAddLink_isEnd = true; } if (stsh_activityAddLink_isEnd || stsh_activityAddLink_cur - stsh_activityAddLink_start > 10000) { clearInterval(stsh_activityAddLink_itv); } } }, 300, user); var countWord = ""; var countSugg = ""; var inputDials = document.querySelectorAll("#leftAreaContainer input.dial"); if (inputDials.length == 2) { countWord = inputDials[0].getAttribute("title").replace("words", "").trim(); countSugg = inputDials[1].getAttribute("title").replace("suggestions", "").trim(); } var tdCount = document.querySelector("#leftAreaContainer td[align='left']"); if (tdCount != null) { tdCount.innerHTML = '<div style="width: 100px; display: inline-block; text-align: center;">Word: ' + countWord + '</div> <div style="width: 100px; display: inline-block; text-align: center; margin-left: 13px;">Suggestion: ' + countSugg + '</div>'; } var sug = document.body.textContent; var regComment = /VIEW COMMENT/g; var regSuggest = /VIEW SUGGESTION/g; var strComment = "...RECEIVED A MODERATOR COMMENT"; var strPending = "...ARE PENDING"; var strApproved = "...WERE APPROVED"; var strDeclined = "...WERE DECLINED"; var strApplied = "...HAVE BEEN APPLIED WITHIN THE LAST 14 DAYS"; var strRemoved = "...HAVE BEEN REMOVED WITHIN THE LAST 14 DAYS"; var startComment = sug.indexOf(strComment); var startPending = sug.indexOf(strPending); var startApproved = sug.indexOf(strApproved); var startDeclined = sug.indexOf(strDeclined); var startApplied = sug.indexOf(strApplied); var startRemoved = sug.indexOf(strRemoved); var sugComment = sug.substring(startComment,startPending); var sugPending = sug.substring(startPending,startApproved); var sugApproved = sug.substring(startApproved,startDeclined); var sugDeclined = sug.substring(startDeclined,startApplied); var sugApplied = sug.substring(startApplied,startRemoved); var sugRemoved = sug.substring(startRemoved); var countComment = (sugComment.match(regComment) || []).length; var countPending = (sugPending.match(regSuggest) || []).length; var countApproved = (sugApproved.match(regSuggest) || []).length; var countDeclined = (sugDeclined.match(regSuggest) || []).length; var countApplied = (sugApplied.match(regSuggest) || []).length; var countRemoved = (sugRemoved.match(regSuggest) || []).length; var divBtn = document.createElement("div"); document.body.appendChild(divBtn); divBtn.innerHTML = ' \ <div style="position: fixed; z-index: 3; right: 12px; top: 84px; line-height: 24px; text-align: right;"> \ <input id="stsh_btnToProgress" value="To Progress" class="stsh_btn_long" type="button" onclick="scrollToId(\'stsh_sectionId\', -50); return false;" /> \ \ <br/> <span class="stsh_scroll_header">Scroll To</span>\ <li class="stsh_suggestion_btn stsh_suggestion stsh_suggestion_comment"><input value="Comment (' + countComment + ')" \ class="stsh_btn_long" type="button" onclick="scrollToId(\'stsh_sectionComment\'); return false;" /></li> \ <li class="stsh_suggestion_btn stsh_suggestion stsh_suggestion_pending"><input value="Pending (' + countPending + ')" \ class="stsh_btn_long" type="button" onclick="scrollToId(\'stsh_sectionPending\'); return false;" /></li> \ <li class="stsh_suggestion_btn stsh_suggestion stsh_suggestion_approved"><input value="Approved (' + countApproved + ')" \ class="stsh_btn_long" type="button" onclick="scrollToId(\'stsh_sectionApproved\'); return false;" /> \ <li class="stsh_suggestion_btn stsh_suggestion stsh_suggestion_declined"><input value="Declined (' + countDeclined + ')" \ class="stsh_btn_long" type="button" onclick="scrollToId(\'stsh_sectionDeclined\'); return false;" /> \ <li class="stsh_suggestion_btn stsh_suggestion stsh_suggestion_applied"><input value="Applied (' + countApplied + ')" \ class="stsh_btn_long" type="button" onclick="scrollToId(\'stsh_sectionApplied\'); return false;" /> \ <li class="stsh_suggestion_btn stsh_suggestion stsh_suggestion_removed"><input value="Removed (' + countRemoved + ')" \ class="stsh_btn_long" type="button" onclick="scrollToId(\'stsh_sectionRemoved\'); return false;" /> \ <br/> \ <br/> <input value="Hide Suggestions" class="stsh_btn_long" type="button" onclick="hideSuggestion(); return false;" /> \ <br/> <input value="Show Suggestions" class="stsh_btn_long" type="button" onclick="showSuggestion(); return false;" /> \ <br/> \ <br/> <input value="Refresh" class="stsh_btn_long" type="button" onclick="window.location = window.location.href; return false;" /> \ </div> \ '; var divContainer = document.querySelector("#leftAreaContainer"); if (divContainer != null) { divContainer.innerHTML = divContainer.innerHTML .replace("...RECEIVED A MODERATOR COMMENT", "<span id='stsh_sectionComment' class='stsh_suggestion_header'>...RECEIVED A MODERATOR COMMENT (" + countComment + ")</span>") .replace("...ARE PENDING", "<span id='stsh_sectionPending' class='stsh_suggestion_header'>...ARE PENDING (" + countPending + ")</span>") .replace("...WERE APPROVED", "<span id='stsh_sectionApproved' class='stsh_suggestion_header'>...WERE APPROVED (" + countApproved + ")</span>") .replace("...WERE DECLINED", "<span id='stsh_sectionDeclined' class='stsh_suggestion_header'>...WERE DECLINED (" + countDeclined + ")</span>") .replace("...HAVE BEEN APPLIED WITHIN THE LAST 14 DAYS", "<span id='stsh_sectionApplied' class='stsh_suggestion_header'>...HAVE BEEN APPLIED WITHIN THE LAST 14 DAYS (" + countApplied + ")</span>") .replace("...HAVE BEEN REMOVED WITHIN THE LAST 14 DAYS", "<span id='stsh_sectionRemoved' class='stsh_suggestion_header'>...HAVE BEEN REMOVED WITHIN THE LAST 14 DAYS (" + countRemoved + ")</span>"); } var eleHours = document.querySelector("#hours"); if (eleHours != null) { var eleBtn = document.querySelector("#stsh_btnToProgress"); if (eleBtn != null) { var ele = document.createElement("input"); ele.classList.add("stsh_btn_long"); ele.setAttribute("value", "To Hours"); ele.setAttribute("type", "button"); ele.setAttribute("onclick", "scrollToElement(\"input[name*='[remarks]']\", -48); return false;"); insertAfterElement(ele, eleBtn); ele = document.createTextNode(" \u00A0 "); insertAfterElement(ele, eleBtn); ele = document.createElement("br"); insertAfterElement(ele, eleBtn); } } var cans = document.querySelectorAll("canvas"); for (var i = 0; i < cans.length; i++) { cans[i].parentElement.removeChild(cans[i]); } var aKeys = document.querySelectorAll("#leftAreaContainer li > a:nth-child(1)"); for (var i = 0; i < aKeys.length; i++) { var key = aKeys[i].textContent; var keyArr = key.substr(21).trim().split(" >> "); keyArr[0] = "<span style='color: #FFF !important;'>" + keyArr[0] + "</span>"; var keyNew = key.substr(0,21) + keyArr.join(" >> ") + ""; aKeys[i].innerHTML = keyNew; } /*var liMode = strComment; var liSugs = document.querySelectorAll("#leftAreaContainer > li, #leftAreaContainer > form > li"); for (var i = 0; i < liSugs.length; i++) { if (i == 0) { var content = liSugs[i].previousElementSibling.previousElementSibling.textContent.trim(); if (content.indexOf(strRemoved) > -1) { liMode = strRemoved; } else if (content.indexOf(strApplied) > -1) { liMode = strApplied; } else if (content.indexOf(strDeclined) > -1) { liMode = strDeclined; } else if (content.indexOf(strApproved) > -1) { liMode = strApproved; } else if (content.indexOf(strPending) > -1) { liMode = strPending; } } if (liMode == strComment) { liSugs[i].setAttribute("class", "stsh_suggestion stsh_suggestion_comment"); } else if (liMode == strPending) { liSugs[i].setAttribute("class", "stsh_suggestion stsh_suggestion_pending"); } else if (liMode == strApproved) { liSugs[i].setAttribute("class", "stsh_suggestion stsh_suggestion_approved"); } else if (liMode == strDeclined) { liSugs[i].setAttribute("class", "stsh_suggestion stsh_suggestion_declined"); } else if (liMode == strApplied) { liSugs[i].setAttribute("class", "stsh_suggestion stsh_suggestion_applied"); } else if (liMode == strRemoved) { liSugs[i].setAttribute("class", "stsh_suggestion stsh_suggestion_removed"); } var content = liSugs[i].textContent; if (content.indexOf(strRemoved) > -1) { liMode = strRemoved; } else if (content.indexOf(strApplied) > -1) { liMode = strApplied; } else if (content.indexOf(strDeclined) > -1) { liMode = strDeclined; } else if (content.indexOf(strApproved) > -1) { liMode = strApproved; } else if (content.indexOf(strPending) > -1) { liMode = strPending; } }*/ var sugModeComment = 0; var sugModePending = 1; var sugModeApproved = 2; var sugModeDeclined = 3; var sugModeApplied = 4; var sugModeRemoved = 5; var sugMode = sugModeComment; var eleSugFirst = document.querySelector("#leftAreaContainer > a[href^='translate.php?search_input=']" + ", #leftAreaContainer > form > a[href^='translate.php?search_input=']"); if (eleSugFirst) { var eleSugHeadPrev = eleSugFirst.previousElementSibling.previousElementSibling; if (eleSugHeadPrev.id == "stsh_sectionRemoved") { sugMode = sugModeRemoved; } else if (eleSugHeadPrev.id == "stsh_sectionApplied") { sugMode = sugModeApplied; } else if (eleSugHeadPrev.id == "stsh_sectionDeclined") { sugMode = sugModeDeclined; } else if (eleSugHeadPrev.id == "stsh_sectionApproved") { sugMode = sugModeApproved; } else if (eleSugHeadPrev.id == "stsh_sectionPending") { sugMode = sugModePending; } var eleSugNext = eleSugFirst; while (eleSugNext) { if (eleSugNext.tagName == "A") { var attrHref = eleSugNext.getAttribute("href"); if (attrHref && attrHref.indexOf("translate.php?search_input=") == 0) { eleSugNext.classList.add("stsh_suggestion"); if (sugMode == sugModeComment) { eleSugNext.classList.add("stsh_suggestion_comment"); } else if (sugMode == sugModePending) { eleSugNext.classList.add("stsh_suggestion_pending"); } else if (sugMode == sugModeApproved) { eleSugNext.classList.add("stsh_suggestion_approved"); } else if (sugMode == sugModeDeclined) { eleSugNext.classList.add("stsh_suggestion_declined"); } else if (sugMode == sugModeApplied) { eleSugNext.classList.add("stsh_suggestion_applied"); } else if (sugMode == sugModeRemoved) { eleSugNext.classList.add("stsh_suggestion_removed"); } } } else if (eleSugNext.tagName == "SPAN" && eleSugNext.classList.contains("stsh_suggestion_header")) { if (eleSugNext.id == "stsh_sectionRemoved") { sugMode = sugModeRemoved; } else if (eleSugNext.id == "stsh_sectionApplied") { sugMode = sugModeApplied; } else if (eleSugNext.id == "stsh_sectionDeclined") { sugMode = sugModeDeclined; } else if (eleSugNext.id == "stsh_sectionApproved") { sugMode = sugModeApproved; } else if (eleSugNext.id == "stsh_sectionPending") { sugMode = sugModePending; } } eleSugNext = eleSugNext.nextElementSibling; } } // Change language & correct url { var aProgresses = document.querySelectorAll("div > .friend_block_avatar a[onmouseout]"); for (var i = 0; i < aProgresses.length; i++) { var langCur = getQueryByName("lang", aProgresses[i].href); if (langCur == "") { aProgresses[i].href = aProgresses[i].href + lang; } else { if (langCur != lang) { var langQuery = (url.indexOf("?") > -1) ? "&lang=" : "?lang="; window.location = url + langQuery + langCur; } } var aContent = aProgresses[i].textContent.trim(); if (aContent.indexOf("SUGGESTIONS") > -1) { aProgresses[i].href = aProgresses[i].href + "&listsort=5&liststatus=1&paginationrows=1000"; } else if (aContent.indexOf("REVIEWS") > -1) { aProgresses[i].href = aProgresses[i].href + "&listsort=5&liststatus=3&paginationrows=1000"; } } } if (document.querySelector("#hours")) { function calculateHours() { var rgxDate = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/; var rgxTime = /^(\d{1,2}:\d{2}(:\d{2})?|\d{1,2}\.\d{2})$/; var eleFrom = document.querySelector("#stsh_hoursCalc_from"); var eleTo = document.querySelector("#stsh_hoursCalc_to"); var eleRes = document.querySelector("#stsh_hoursCalc_result"); if (eleFrom != null && eleTo != null && eleRes != null) { var rawFrom = eleFrom.value.trim(); var rawTo = eleTo.value.trim(); var valFrom = 0; var valTo = 0; if (rgxDate.test(rawFrom)) { rawFrom = rawFrom.substr(11); } if (rgxTime.test(rawFrom)) { var arrTime = rawFrom.split(":"); if (arrTime.length == 1) { arrTime = rawFrom.split("."); } valFrom = parseInt(arrTime[1]) + (parseInt(arrTime[0]) * 60); } if (rgxDate.test(rawTo)) { rawTo = rawTo.substr(11); } if (rgxTime.test(rawTo)) { var arrTime = rawTo.split(":"); if (arrTime.length == 1) { arrTime = rawTo.split("."); } valTo = parseInt(arrTime[1]) + (parseInt(arrTime[0]) * 60); } var valDiff = Math.abs(valTo - valFrom); var valHr = parseInt(valDiff / 60); var valMn = valDiff % 60; eleRes.textContent = padZero(valHr, 2) + ":" + padZero(valMn, 2); } } var curDate = new Date(); curDate.setTime(curDate.getTime() - (1000 * 60 * 60 * 8)); if (isDstUsa(curDate.getUTCFullYear(), curDate.getUTCMonth() + 1, curDate.getUTCDate(), curDate.getUTCHours())) { curDate.setTime(curDate.getTime() + (1000 * 60 * 60 * 1)); } var curDateStr = curDate.toISOString().substr(0, 10); // Add hours calculator { var eleFinalize = document.querySelector("#hours input[name='Finalize']"); if (eleFinalize != null) { var eleFinalizeParent = eleFinalize.parentElement; eleFinalizeParent.setAttribute("colspan", "2"); eleFinalizeParent.style.verticalAlign = "top"; var elePad = document.createElement("td"); insertBeforeElement(elePad, eleFinalizeParent); var eleCalc = document.createElement("td"); eleCalc.classList.add("stsh_hoursCalc"); insertBeforeElement(eleCalc, eleFinalizeParent); var ele = document.createElement("b"); ele.textContent = " Hours Calculator (Estimated) "; eleCalc.appendChild(ele); ele = document.createElement("br"); eleCalc.appendChild(ele); var ele = document.createElement("span"); ele.innerHTML = " Enter date or time to calculate range (calculate only hours and minutes). " + "<br/>You can enter date \"2016-01-01 08:05:00\" or time \"8:05\" or time \"8.05\"."; ele.setAttribute("style", "display: inline-block; padding-bottom: 4px;"); eleCalc.appendChild(ele); ele = document.createElement("br"); eleCalc.appendChild(ele); var ele = document.createElement("span"); ele.textContent = " From: "; eleCalc.appendChild(ele); var ele = document.createElement("input"); ele.id = "stsh_hoursCalc_from" ele.setAttribute("type", "text"); ele.setAttribute("onkeypress", "return event.keyCode != 13;"); ele.addEventListener("keyup", function() { calculateHours(); }); eleCalc.appendChild(ele); var ele = document.createElement("span"); ele.innerHTML = " To: "; eleCalc.appendChild(ele); var ele = document.createElement("input"); ele.id = "stsh_hoursCalc_to" ele.setAttribute("type", "text"); ele.setAttribute("onkeypress", "return event.keyCode != 13;"); ele.addEventListener("keyup", function() { calculateHours(); }); eleCalc.appendChild(ele); var ele = document.createElement("span"); ele.innerHTML = " Result: "; eleCalc.appendChild(ele); var ele = document.createElement("b"); ele.id = "stsh_hoursCalc_result" ele.textContent = " 00:00 "; eleCalc.appendChild(ele); } } // Hilight current date { var elesTd = document.querySelectorAll("#hours > table > tbody > tr > td:nth-child(1)"); for (var i = 0; i < elesTd.length; i++) { if (elesTd[i].textContent.indexOf(curDateStr) > -1) { elesTd[i].parentElement.id = "stsh_hours_curDate"; elesTd[i].parentElement.classList.add("stsh_hours_curDate"); break; } } } // Auto calculate hours in current date { var timeFirst = ""; var timeLast = ""; var elesPending = document.querySelectorAll(".stsh_suggestion_pending:not(.stsh_suggestion_btn)"); for (var i = 0; i < elesPending.length; i++) { var content = elesPending[i].textContent.trim().substr(0, 19); if (content.substr(0, 10) == curDateStr) { timeFirst = content.substr(11, 8); if (timeLast == "") { timeLast = timeFirst; } } else { break; } } if (timeFirst != "") { var eleFrom = document.querySelector("#stsh_hoursCalc_from"); if (eleFrom) { eleFrom.value = timeFirst; } var eleTo = document.querySelector("#stsh_hoursCalc_to"); if (eleTo) { eleTo.value = timeLast; } calculateHours(); } } } } // End user_activity.php if (/\/rally[0-9]{0,4}/.test(url)) { resizeSuggestionBox(); var outer = document.getElementById("suggestions_box_outer"); if (outer != null) { outer.setAttribute("onclick","hideSuggestionsBox();"); } // Set cur lang to first { var first = document.querySelector(".gradienttable tr:nth-child(6)"); var cur = null; var tdLangs = document.querySelectorAll(".gradienttable tr > td:nth-child(1)"); for (var i = 0; i < tdLangs.length; i++) { if (lang == tdLangs[i].textContent.trim().toLowerCase()) { cur = tdLangs[i].parentElement; break; } } if (cur != null) { first.parentElement.insertBefore(cur, first); } } // Change row per page { var eleAs = document.querySelectorAll(".gradienttable tr:nth-child(6) a[href^='translate.php?']"); for (var i = 0; i < eleAs.length; i++) { eleAs[i].href = eleAs[i].href + "&paginationrows=1000"; } } var inputClose = document.querySelector("td:nth-child(3) > input:nth-child(1)"); if (inputClose != null) { inputClose.value = "Close (Esc)"; } } // End rally.php if (/\/rally_results_?[0-9]{0,4}/.test(url)) { var h3 = document.querySelector("table.curved h3"); if (h3 != null) { document.title = h3.textContent.trim(); } var inputClose = document.querySelector("td:nth-child(3) > input:nth-child(1)"); if (inputClose != null) { inputClose.value = "Close (Esc)"; inputClose.focus(); } var src = document.documentURI; var insert = ' <a class="stsh_a_button" target="_blank" ' + ' href="' + src + '">Frame</a> '; var tdFirst = document.querySelector("td:nth-child(1)"); if (tdFirst != null) { var ele = document.createElement("td"); ele.setAttribute("align", "right"); ele.innerHTML = insert; tdFirst.parentElement.insertBefore(ele, tdFirst); } var inputPrev = document.querySelector("input[value^='Prev']"); if (inputPrev != null) { addKeyCtrl(document, inputPrev, 219, "["); // [ addKeyCtrl(document, inputPrev, "BracketLeft", ""); // [ //addKeyCtrl(document, inputPrev, 0, ""); // [ //addKeyCtrl(document, inputPrev, 53, ""); // [ disableAfterClick(inputPrev); } var inputNext = document.querySelector("input[value^='Next']"); if (inputNext != null) { addKeyCtrl(document, inputNext, 221, "]"); // ] addKeyCtrl(document, inputNext, "BracketRight", ""); // ] //addKeyCtrl(document, inputNext, 188, ""); // ] //addKeyCtrl(document, inputNext, 173, ""); // ] //addKeyCtrl(document, inputNext, 169, ""); // ] disableAfterClick(inputNext); } // Hilight cur lang { var elesLang = document.querySelectorAll("table.curved > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(3) > h2:nth-child(1)"); for (var i = 0; i < elesLang.length; i++) { if (lang == elesLang[i].textContent.trim().toLowerCase()) { var eleParent = elesLang[i].parentElement.parentElement.parentElement.parentElement; //eleParent.style.backgroundColor = "#474D1A"; eleParent.setAttribute("bgcolor", "#474D1A"); eleParent.setAttribute("onmouseout", "this.bgColor='#474D1A'"); eleParent.setAttribute("onmouseover", "this.bgColor='#76802B'"); break; } } } } // End rally_results.php if (url.indexOf("/WhereIsEsty.php") > -1) { resizeSuggestionBox(); var outer = document.getElementById("suggestions_box_outer"); if (outer != null) { outer.setAttribute("onclick","hideSuggestionsBox();"); } var divContainer = document.querySelector("#pageContainer"); if (divContainer != null) { var ele = document.createElement("div"); ele.id = "logout"; ele.innerHTML = ' <a class="stsh_a_button" target="_blank" ' + ' href="/home.php">Home</a> '; divContainer.appendChild(ele); } var divContent = document.querySelector("#leftAreaContainer > div"); if (divContent != null) { var countSnap = document.querySelectorAll("div.box").length; var user = ""; var name = ""; var eleImg = document.querySelector("#leftAreaContainer > div > div > a > img "); if (eleImg != null) { name = eleImg.getAttribute("title"); user = eleImg.parentElement.getAttribute("href").replace("https://steamcommunity.com/profiles/", ""); } var ele = document.createElement("div"); ele.setAttribute("class", "stsh_snapshot"); ele.innerHTML = "<a class='stsh_blue' target='_blank' href='http://translation.steampowered.com/user_activity.php?user=" + user + "'>" + name + "</a>" + "<br>Snapshot: " + countSnap; divContent.appendChild(ele); } } // End WhereIsEsty.php if (url.indexOf("/stickerbox.php") > -1) { document.querySelector("textarea[name='add_comment']").focus(); var inputPrev = document.querySelector("img[src*='40lEQVRIx5WWe0xXZRjH'"); if (inputPrev != null) { addKeyCtrl(document, inputPrev, 219, ""); // [ addKeyCtrl(document, inputPrev, "BracketLeft", ""); // [ //addKeyCtrl(document, inputPrev, 0, ""); // [ //addKeyCtrl(document, inputPrev, 53, ""); // [ disableAfterClick(inputPrev); } var inputNext = document.querySelector("img[src*='z0lEQVRIx5WWaWxVRRTH'"); if (inputNext != null) { addKeyCtrl(document, inputNext, 221, ""); // ] addKeyCtrl(document, inputNext, "BracketRight", ""); // ] //addKeyCtrl(document, inputNext, 188, ""); // ] //addKeyCtrl(document, inputNext, 173, ""); // ] //addKeyCtrl(document, inputNext, 169, ""); // ] disableAfterClick(inputNext); } } // End stickerbox.php if (/\/(home|index)/i.test(url)) { // Set cur lang to first { var first = null; var cur = null; var curLang = lang.substring(0, 4); if (curLang == "schi") curLang = "sim."; else if (curLang == "tchi") curLang = "tra."; var eleLangs = document.querySelectorAll("#overall .progress"); first = eleLangs[0]; for (var i = 0; i < eleLangs.length; i++) { if (curLang == eleLangs[i].textContent.trim().substring(0, 4).toLowerCase()) { cur = eleLangs[i]; break; } } if (cur != null) { var curSib1 = cur.nextSibling; var curSib2 = curSib1.nextSibling; var curSib3 = curSib2.nextSibling; var curSib4 = curSib3.nextSibling; var curSib5 = curSib4.nextSibling; var curSib6 = curSib5.nextSibling; insertBeforeElement(cur, first); insertAfterElement(curSib6, cur); insertAfterElement(curSib5, cur); insertAfterElement(curSib4, cur); insertAfterElement(curSib3, cur); insertAfterElement(curSib2, cur); insertAfterElement(curSib1, cur); } } if (document.querySelector("#logout") != null) { var tmplHome = ' \ <div class="stsh_home_group"> \ <span class="stsh_home_header">Shortcuts</span>\ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/translate.php?search_input=DATE%3A+%DATE%&paginationrows=1000">New Today</a> \ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/glossary.php">Glossary</a> \ \ <br/> <span class="stsh_home_header">Rally</span>\ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/rally.php">Rally 2016</a> \ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/rally2015.php">Rally 2015</a> \ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/rally2014.php">Rally 2014</a> \ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/rally2013.php">Rally 2013</a> \ \ <br/> <span class="stsh_home_header">Events</span>\ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/onionolooorm.php">Typonion</a> \ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/dstbattle.php">DST Battle</a> \ <br/> <a class="stsh_a_button stsh_btn_med" target="_blank" href="/dota2.php">DOTA 2</a> \ </div> \ '; var curDate = new Date(); curDate.setTime(curDate.getTime() - (1000 * 60 * 60 * 8)); if (isDstUsa(curDate.getUTCFullYear(), curDate.getUTCMonth() + 1, curDate.getUTCDate(), curDate.getUTCHours())) { curDate.setTime(curDate.getTime() + (1000 * 60 * 60 * 1)); } tmplHome = tmplHome.replace("%DATE%", curDate.toISOString().substr(0, 10)); var eleNew = document.createElement("div"); eleNew.innerHTML = tmplHome; document.body.appendChild(eleNew); } } // End home.php if (url.indexOf("/glossary.php") > -1) { } // End glossary.php if (url.indexOf("/statistics.php") > -1) { setTimeoutCustom(function() { var qBranch = getQueryByName("branch_ID"); var qFile = getQueryByName("file_ID"); if (qBranch === "" && qFile === "") { var keyIdArr = new Array(); var valDataArr = new Array(); var keyBrArr = new Array(); var valBrArr = new Array(); var keyTrArr = new Array(); var valTrArr = new Array(); var keyApArr = new Array(); var valApArr = new Array(); var eleHead = document.querySelector("#overall"); if (eleHead) { function getProgress(content) { var rgxNum = /[0-9]+/g; var data = ""; if (content.indexOf("<15") > -1) { data = "014" } else if (content.indexOf("100") < 0) { data = "0" + (content.match(rgxNum) || ["00"])[0]; } else { data = "100"; } return data; } var dataId = -1; var dataBr = ""; var dataTr = ""; var dataAp = ""; var eleProgress = document.createElement("div"); while (eleHead.firstChild) { var child = eleHead.firstChild; if (child.nodeName !== "#text") { if (child.id === "" && child.classList.contains("progress")) { dataId++; eleProgress = document.createElement("div"); eleProgress.classList.add("stsh_stat_progress"); dataBr = child.textContent.trim(); eleProgress.setAttribute("data-br", dataBr); eleProgress.setAttribute("data-id", dataId); keyIdArr.push(dataId); valDataArr[dataId] = eleProgress; } else if (child.classList.contains("graphtranslatedstats")) { dataTr = getProgress(child.textContent); eleProgress.setAttribute("data-tr", dataTr); } else if (child.classList.contains("graphapprovedstats")) { dataAp = getProgress(child.textContent); eleProgress.setAttribute("data-ap", dataAp); //var dataId = eleProgress.dataset.id; //var dataTr = eleProgress.dataset.tr; //var dataBr = eleProgress.dataset.br; var dataTrApBr = dataTr + "_" + dataAp + "_" + dataBr; var dataApTrBr = dataAp + "_" + dataTr + "_" + dataBr; //eleProgress.setAttribute("data-trapbr", dataTrApBr); //eleProgress.setAttribute("data-aptrbr", dataApTrBr); keyBrArr.push(dataBr); valBrArr[dataBr] = dataId; keyTrArr.push(dataTrApBr); valTrArr[dataTrApBr] = dataId; keyApArr.push(dataApTrBr); valApArr[dataApTrBr] = dataId; } } eleProgress.appendChild(child); } var i = keyIdArr.length - 1; if (i > -1) { eleHead.appendChild(valDataArr[keyIdArr[i]]); } for (i--; i > -1; i--) { insertBeforeElement(valDataArr[keyIdArr[i]], eleHead.firstElementChild); } keyBrArr.sort(); keyTrArr.sort().reverse(); keyApArr.sort().reverse(); } var eleDiv = document.createElement("div"); document.body.appendChild(eleDiv); eleDiv.innerHTML = ' \ <div class="stsh_showing_group"> \ <span class="stsh_showing_header">Hide</span>\ <br/> <input id="stsh_stat_hideGame" value="Game" class="stsh_btn_short" type="button" /> \ <input id="stsh_stat_hideSteam" value="Steam" class="stsh_btn_short" type="button" /> \ <br/> <input id="stsh_stat_hideApproved" value="Approved" class="stsh_btn_long" type="button" /> \ <br/> <input id="stsh_stat_hideCompleted" value="Completed" class="stsh_btn_long" type="button" /> \ \ <br/> <span class="stsh_showing_header">Sort by</span>\ <br/> <input id="stsh_stat_sortBr" value="Branch" class="stsh_btn_long" type="button" /> \ <br/> <input id="stsh_stat_sortTr" value="Translated" class="stsh_btn_long" type="button" /> \ <br/> <input id="stsh_stat_sortAp" value="Approved" class="stsh_btn_long" type="button" /> \ <br/> \ <br/> <input id="stsh_stat_showAll" value="Show All" class="stsh_btn_long" type="button" /> \ </div> \ '; var eleHideGame = document.querySelector("#stsh_stat_hideGame"); eleHideGame.addEventListener("click", function() { var elesProgress = document.querySelectorAll(".stsh_stat_progress:not(.stsh_hidden)"); for (var i = 0; i < elesProgress.length; i++) { if (elesProgress[i].dataset.br.indexOf("games/") === 0) { elesProgress[i].classList.add("stsh_hidden"); } } }); var eleHideSteam = document.querySelector("#stsh_stat_hideSteam"); eleHideSteam.addEventListener("click", function() { var elesProgress = document.querySelectorAll(".stsh_stat_progress:not(.stsh_hidden)"); for (var i = 0; i < elesProgress.length; i++) { if (elesProgress[i].dataset.br.indexOf("steam") === 0) { elesProgress[i].classList.add("stsh_hidden"); } } }); var eleHideApproved = document.querySelector("#stsh_stat_hideApproved"); eleHideApproved.addEventListener("click", function() { var elesProgress = document.querySelectorAll(".stsh_stat_progress:not(.stsh_hidden)"); for (var i = 0; i < elesProgress.length; i++) { if (elesProgress[i].dataset.tr === elesProgress[i].dataset.ap) { elesProgress[i].classList.add("stsh_hidden"); } } }); var eleHideCompleted = document.querySelector("#stsh_stat_hideCompleted"); eleHideCompleted.addEventListener("click", function() { var elesProgress = document.querySelectorAll(".stsh_stat_progress:not(.stsh_hidden)"); for (var i = 0; i < elesProgress.length; i++) { if (elesProgress[i].dataset.tr === "100" && elesProgress[i].dataset.ap === "100") { elesProgress[i].classList.add("stsh_hidden"); } } }); var eleShowAll = document.querySelector("#stsh_stat_showAll"); eleShowAll.addEventListener("click", function() { var eleHead = document.querySelector("#overall"); while (eleHead.firstChild) { var child = eleHead.firstChild; if (child.classList && child.classList.contains("stsh_hidden")) { child.classList.remove("stsh_hidden"); } eleHead.removeChild(eleHead.firstChild); } var i = keyIdArr.length - 1; if (i > -1) { eleHead.appendChild(valDataArr[keyIdArr[i]]); } for (i--; i > -1; i--) { insertBeforeElement(valDataArr[keyIdArr[i]], eleHead.firstElementChild); } }); var eleSortBr = document.querySelector("#stsh_stat_sortBr"); eleSortBr.addEventListener("click", function() { var eleHead = document.querySelector("#overall"); if (eleHead) { while (eleHead.firstChild) { eleHead.removeChild(eleHead.firstChild); } var i = keyBrArr.length - 1; if (i > -1) { eleHead.appendChild(valDataArr[valBrArr[keyBrArr[i]]]); } for (i--; i > -1; i--) { insertBeforeElement(valDataArr[valBrArr[keyBrArr[i]]], eleHead.firstElementChild); } } }); var eleSortTr = document.querySelector("#stsh_stat_sortTr"); eleSortTr.addEventListener("click", function() { var eleHead = document.querySelector("#overall"); if (eleHead) { while (eleHead.firstChild) { eleHead.removeChild(eleHead.firstChild); } var i = keyTrArr.length - 1; if (i > -1) { eleHead.appendChild(valDataArr[valTrArr[keyTrArr[i]]]); } for (i--; i > -1; i--) { insertBeforeElement(valDataArr[valTrArr[keyTrArr[i]]], eleHead.firstElementChild); } } }); var eleSortAp = document.querySelector("#stsh_stat_sortAp"); eleSortAp.addEventListener("click", function() { var eleHead = document.querySelector("#overall"); if (eleHead) { while (eleHead.firstChild) { eleHead.removeChild(eleHead.firstChild); } var i = keyApArr.length - 1; if (i > -1) { eleHead.appendChild(valDataArr[valApArr[keyApArr[i]]]); } for (i--; i > -1; i--) { insertBeforeElement(valDataArr[valApArr[keyApArr[i]]], eleHead.firstElementChild); } } }); } }, 100); } // End statistics.php window.addEventListener("beforeunload", function (e) { clearTimeoutAll(); clearIntervalAll(); }); } // End Main function client() { var clientScript = ' \ \ var itvTime = 300; \ var itvIdHideKeyApp = 0; \ var itvIdHideKeyGame = 0; \ var itvIdHideKeyFaq = 0; \ var itvIdHideKeySupport = 0; \ var itvIdHideKeyPromo = 0; \ var itvIdHideKeyEmail = 0; \ var itvIdHideStrNotMatch = 0; \ var itvIdHideStrLong = 0; \ var itvIdSortKey = 0; \ \ var isVisible = (function() \ { \ var stateKey; \ var eventKey; \ var keys = \ { \ hidden: "visibilitychange", \ webkitHidden: "webkitvisibilitychange", \ mozHidden: "mozvisibilitychange", \ msHidden: "msvisibilitychange" \ }; \ for (stateKey in keys) \ { \ if (stateKey in document) \ { \ eventKey = keys[stateKey]; \ break; \ } \ } \ return function(c) \ { \ if (c) \ { \ document.addEventListener(eventKey, c); \ } \ return !document[stateKey]; \ } \ })(); \ \ var timeoutList = new Array(); \ var intervalList = new Array(); \ \ function setTimeoutCustom(func, tm, params) \ { \ var id = setTimeout(func, tm, params); \ timeoutList.push(id); \ return id; \ } \ \ function clearTimeoutAll() \ { \ for (var i = 0; i < timeoutList.length; i++) \ { \ clearTimeout(timeoutList[i]); \ } \ } \ \ function setIntervalCustom(func, tm, params) \ { \ var id = setInterval(func, tm, params); \ intervalList.push(id); \ return id; \ } \ \ function clearIntervalAll() \ { \ for (var i = 0; i < intervalList.length; i++) \ { \ clearInterval(intervalList[i]); \ } \ } \ \ function setVisibleKey(startKey, visible) \ { \ if (!isVisible()) return; \ \ startKey = startKey.toLowerCase(); \ var display = visible != true ? "none" : ""; \ var eleKeys = document.querySelectorAll("#keylist > table:nth-child(1) > tbody:nth-child(1) > tr > td:nth-child(1) > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(1)"); \ for (var i = 0; i < eleKeys.length; i++) \ { \ try \ { \ if (eleKeys[i].textContent.trim().toLowerCase().indexOf(startKey) > -1) \ { \ var eleTarget = eleKeys[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement; \ if (eleTarget.style.display != display) \ { \ eleTarget.style.display = display; \ } \ } \ } \ catch (ex) \ { \ } \ } \ } \ \ function hideKeyGame() \ { \ setVisibleKey("GAMES/", false); \ setVisibleKey("TF_", false); \ } \ \ function hideKeyApp() \ { \ setVisibleKey("# storefront_english_apps.txt #", false); \ setVisibleKey("# storefront_english_main.txt # #app_", false); \ setVisibleKey("# community_english.txt # SharedFiles_App_", false); \ setVisibleKey("# appmgmt_english.txt #", false); \ setVisibleKey("STEAM/VR", false); \ } \ \ function hideKeyFaq() \ { \ setVisibleKey("# support_faq_english.txt #", false); \ } \ \ function hideKeySupport() \ { \ setVisibleKey("# supportui_english.txt #", false); \ setVisibleKey("# help_english.txt #", false); \ } \ \ function hideKeyPromo() \ { \ setVisibleKey("#promo", false); \ setVisibleKey("#hardware", false); \ setVisibleKey("ControllerBinding", false); \ setVisibleKey("Library_Controller", false); \ } \ \ function hideKeyEmail() \ { \ setVisibleKey("#email", false); \ } \ \ function showKey() \ { \ clearInterval(itvIdHideKeyApp); \ clearInterval(itvIdHideKeyGame); \ clearInterval(itvIdHideKeyFaq); \ clearInterval(itvIdHideKeySupport); \ clearInterval(itvIdHideKeyPromo); \ clearInterval(itvIdHideKeyEmail); \ clearInterval(itvIdSortKey); \ clearInterval(itvIdHideStrNotMatch); \ clearInterval(itvIdHideStrLong); \ setVisibleKey("", true); \ \ hideSuggestionsBox(); \ } \ \ function sortKey(mode) \ { \ /* \ mode: \ 1: key \ 2: string \ 3: word \ 4: length \ */ \ if (!isVisible()) return; \ \ var keyArr = new Array(); \ var valArr = new Array(); \ var key; \ var str; \ \ var dot = "..."; \ var dotLengthMinus = 0 - dot.length; \ var isDot = false; \ var isSuggested = false; \ var isTranslated = false; \ var strNotTranslated = "NOT TRANSLATED"; \ var strTr = ""; \ \ var eleKeys = document.querySelectorAll("#keylist > table:nth-child(1) > tbody:nth-child(1) > tr > td:nth-child(1) > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(1)"); \ for (var i = 0; i < eleKeys.length; i++) \ { \ try \ { \ key = eleKeys[i].textContent.trim(); \ str = ""; \ isDot = false; \ if (mode != 1) \ { \ str = eleKeys[i].parentElement.nextSibling.nextSibling.firstElementChild.textContent.trim(); \ isDot = (str.substr(dotLengthMinus) == dot); \ \ isSuggested = (eleKeys[i].nextElementSibling.nextElementSibling.textContent.trim() !== ""); \ strTr = eleKeys[i].parentElement.nextElementSibling.lastElementChild.textContent.trim(); \ isTranslated = (strTr !== strNotTranslated); \ \ key = (isTranslated ? "tl0_ " : "tl9_ ") + strTr + (isSuggested ? " _sg0" : " _sg9") + " ___ " + key; \ } \ \ if (mode == 2) \ { \ key = str + " ___ " + key; \ } \ else if (mode == 3) \ { \ key = (isDot ? "dt9_" : "dt0_") \ + "sb" + padZero(str.split(" ").length, 2) + "_sc" + padZero(str.split(/[^a-z0-9 ]/i).length, 2) \ + " ___ "+ str + " ___ " + key; \ } \ else if (mode == 4) \ { \ key = (isDot ? "dt9_" : "dt0_") \ + "sc" + (str.split(/[^a-z0-9]/i).length > 1 ? "9_" : "0_") \ + "ln" + padZero(str.length, 3) \ + " ___ "+ str + " ___ " + key; \ } \ key = key.toLowerCase(); \ keyArr.push(key); \ valArr[key] = eleKeys[i].parentElement.parentElement.parentElement \ .parentElement.parentElement.parentElement.outerHTML.trim(); \ /*console.log("Key: " + key);*/ \ } \ catch (ex) \ { \ } \ } \ \ var keyArrTmp = keyArr.slice(); \ keyArr.sort(); \ \ var isSame = true; \ for (var i = 0; i < keyArr.length; i++) \ { \ if (keyArr[i] != keyArrTmp[i]) \ { \ isSame = false; \ } \ } \ \ if (!isSame) \ { \ var eleTable = document.querySelector("#keylist > table:nth-child(1) > tbody:nth-child(1)"); \ if (eleTable != null) \ { \ var newInner = ""; \ \ for (var i = 0; i < keyArr.length; i++) \ { \ newInner += valArr[keyArr[i]]; \ } \ \ eleTable.innerHTML = newInner; \ } \ } \ } \ \ function scrollToId(id, offset) \ { \ scrollToElement("#" + id, offset); \ } \ \ function scrollToElement(selector, offset) \ { \ if (typeof offset == "undefined") \ { \ offset = -20; \ } \ \ var ele = document.querySelector(selector); \ if (ele != null) \ { \ ele.scrollIntoView(true); \ window.scrollBy(0, offset); \ } \ } \ \ function setVisibleSuggestion(visible) \ { \ var display = visible != true ? "none" : ""; \ var els = document.querySelectorAll(".copy"); \ for (var i = 0; i < els.length; i++) \ { \ if (els[i].id.indexOf("showwalletkeys") < 0 && els[i].id != "abuse_report" \ && els[i].id != "moderator_announcement") \ { \ if (els[i].style.display != display) \ { \ els[i].style.display = display; \ } \ } \ } \ } \ \ function showSuggestion() \ { \ setVisibleSuggestion(true); \ } \ \ function hideSuggestion() \ { \ setVisibleSuggestion(false); \ } \ \ function hideKeyAppInterval() \ { \ clearInterval(itvIdHideKeyApp); \ itvIdHideKeyApp = setIntervalCustom(hideKeyApp, itvTime); \ } \ \ function hideKeyGameInterval() \ { \ clearInterval(itvIdHideKeyGame); \ itvIdHideKeyGame = setIntervalCustom(hideKeyGame, itvTime); \ } \ \ function hideKeyFaqInterval() \ { \ clearInterval(itvIdHideKeyFaq); \ itvIdHideKeyFaq = setIntervalCustom(hideKeyFaq, itvTime); \ } \ \ function hideKeySupportInterval() \ { \ clearInterval(itvIdHideKeySupport); \ itvIdHideKeySupport = setIntervalCustom(hideKeySupport, itvTime); \ } \ \ function hideKeyPromoInterval() \ { \ clearInterval(itvIdHideKeyPromo); \ itvIdHideKeyPromo = setIntervalCustom(hideKeyPromo, itvTime); \ } \ \ function hideKeyEmailInterval() \ { \ clearInterval(itvIdHideKeyEmail); \ itvIdHideKeyEmail = setIntervalCustom(hideKeyEmail, itvTime); \ } \ \ function sortKeyInterval() \ { \ clearInterval(itvIdSortKey); \ itvIdSortKey = setIntervalCustom(sortKey, itvTime, 1); \ } \ \ function sortStringInterval() \ { \ clearInterval(itvIdSortKey); \ itvIdSortKey = setIntervalCustom(sortKey, itvTime, 2); \ } \ \ function sortWordInterval() \ { \ clearInterval(itvIdSortKey); \ itvIdSortKey = setIntervalCustom(sortKey, itvTime, 3); \ } \ \ function sortLengthInterval() \ { \ clearInterval(itvIdSortKey); \ itvIdSortKey = setIntervalCustom(sortKey, itvTime, 4); \ } \ \ function pressHideSuggestion() \ { \ document.addEventListener("keydown", function(e) { \ if (e.keyCode == 27) { \ if (parent != null) \ { \ parent.hideSuggestionsBox(); \ } \ else \ { \ hideSuggestionsBox(); \ } \ } \ return false; \ }); \ } \ pressHideSuggestion(); \ \ function hideStrNotMatch() \ { \ if (!isVisible()) return; \ \ var display = "none"; \ \ var searchStr = decodeURIComponent(document.documentURI.replace(/^.*search_input=/i,"").replace(/&.*$/i,"")) \ .replace(/\\+/g," ").trim(); \ searchStr = searchStr.toLowerCase(); \ \ var eleStrs = document.querySelectorAll("#keylist > table:nth-child(1) > tbody:nth-child(1) > tr > td:nth-child(1) > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(2)"); \ for (var i = 0; i < eleStrs.length; i++) \ { \ try \ { \ var valStr = eleStrs[i].childElements()[0].textContent.trim().toLowerCase(); \ var valTrn = eleStrs[i].childElements()[2].textContent.trim().toLowerCase(); \ if (valStr != searchStr && valTrn != searchStr) \ { \ var eleTarget = eleStrs[i].parentElement.parentElement.parentElement.parentElement.parentElement; \ if (eleTarget.style.display != display) \ { \ eleTarget.style.display = display; \ } \ } \ } \ catch (ex) \ { \ } \ } \ } \ \ function hideStrNotMatchInterval() \ { \ clearInterval(itvIdHideStrNotMatch); \ itvIdHideStrNotMatch = setIntervalCustom(hideStrNotMatch, itvTime); \ } \ \ function hideStrLong() \ { \ if (!isVisible()) return; \ \ var display = "none"; \ var dot = "..."; \ var dotLengthMinus = 0 - dot.length; \ \ var eleStrs = document.querySelectorAll("#keylist > table:nth-child(1) > tbody:nth-child(1) > tr > td:nth-child(1) > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(2) > td:nth-child(1)"); \ for (var i = 0; i < eleStrs.length; i++) \ { \ try \ { \ var valStr = eleStrs[i].textContent.trim(); \ if (valStr.substr(dotLengthMinus) == dot) \ { \ var eleTarget = eleStrs[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement; \ if (eleTarget.style.display != display) \ { \ eleTarget.style.display = display; \ } \ } \ } \ catch (ex) \ { \ } \ } \ } \ \ function hideStrLongInterval() \ { \ clearInterval(itvIdHideStrLong); \ itvIdHideStrLong = setIntervalCustom(hideStrLong, itvTime); \ } \ \ function clickToSelect(ele) \ { \ var range = document.createRange(); \ range.setStartBefore(ele.firstChild); \ range.setEndAfter(ele.lastChild); \ var sel = window.getSelection(); \ sel.removeAllRanges(); \ sel.addRange(range); \ } \ \ function syncUrlArray() \ { \ if (!isVisible()) return; \ \ var displayNone = "none"; \ var strStart = "showSuggestionsBox( \'"; \ var strEnd = "\' ); return false;"; \ var strCur = "&list_id="; \ var strAll = "&endnext="; \ var regPos = /&list_id=\\d+&endnext=\\d+/g; \ var isEdit = false; \ var eleDivs = []; \ var urls = []; \ \ var trKeys = document.querySelectorAll("#keylist > table:nth-child(1) > tbody:nth-child(1) > tr"); \ for (var i = 0; i < trKeys.length; i++) \ { \ if (trKeys[i].style.display != displayNone) \ { \ var eleDiv = trKeys[i].childNodes[0].childNodes[0]; \ if (typeof eleDiv.getAttribute != "undefined" \ && eleDiv.getAttribute("onclick") != null) \ { \ eleDivs.push(eleDiv); \ } \ } \ } \ \ for (var i = 0, l = eleDivs.length; i < l; i++) \ { \ var evOld = eleDivs[i].getAttribute("onclick"); \ if (evOld != null) \ { \ var url = evOld.replace(strStart,"").replace(strEnd,"").replace(regPos,""); \ url = url + strCur + i + strAll + l; \ urls.push(url); \ \ var evNew = strStart + url + strEnd; \ if (evOld != evNew) \ { \ eleDivs[i].setAttribute("onclick", evNew); \ isEdit = true; \ } \ } \ } \ \ if (isEdit || typeof URLarray == "undefined" || URLarray.length != urls.length) \ { \ URLarray = urls; \ } \ } \ \ function setFrameColor(color) \ { \ var frame = document.querySelector("div#suggestions_box iframe"); \ if (frame != null) \ { \ if (frame.style.backgroundColor != color) \ { \ frame.style.setProperty("background-color", color, "important"); \ } \ } \ } \ \ function padZero(num, size) \ { \ return (1e15+num+"").slice(-size); \ } \ \ function doInstant() \ { \ var url = document.documentURI; \ if (url.indexOf("user_activity.php") > -1) \ { \ showSuggestion(); \ \ document.addEventListener("DOMContentLoaded", function (e) \ { \ if (typeof $ != "undefined") \ { \ $(".dial").css("display", "none"); \ setTimeoutCustom(function() \ { \ /* Restore drawing progress */ \ $(function() { \ $(".dial").css("display", ""); \ $(".dial").knob({ \ "draw" : function () { \ $(this.i).val(this.cv + "%"); \ } \ }); \ }) \ }, 50); \ } \ }); \ } \ else if (url.indexOf("translate.php") > -1) \ { \ var tmOb = -1; \ var observer = new MutationObserver(function(mutations) \ { \ mutations.forEach(function(mutation) \ { \ clearTimeout(tmOb); \ tmOb = setTimeout(function() \ { \ syncUrlArray(); \ /*console.log("syncUrlArray: " + tmOb);*/ \ }, 100); \ }); \ }); \ \ var target = document.getElementById("keylist_container"); \ var config = { childList: true, subtree: true }; \ observer.observe(target, config); \ } \ else if (url.indexOf("suggestions.php") > -1) \ { \ if (parent != window) \ { \ var main = document.querySelector("#suggestionmain"); \ if (main != null) \ { \ var color = window.getComputedStyle(main).backgroundColor; \ parent.setFrameColor(color); \ } \ } \ } \ \ window.addEventListener("beforeunload", function (e) \ { \ clearTimeoutAll(); \ clearIntervalAll(); \ }); \ \ } \ doInstant(); \ \ '; var eleClientScript = document.createElement("script"); eleClientScript.innerHTML = clientScript; document.head.appendChild(eleClientScript); } // End client attachOnReady(client); attachOnReady(main); // End