// ==UserScript==
// @id googletranslatorbytoprapid
// @name Google select text translator
// @name:zh-CN 谷歌点击划词翻译
// @version 3.99
// @namespace https://gf.qytechs.cn/en/scripts/36842
// @author Toprapid
// @copyright 2017+,toprapid
// @description Translate any selected text into the language you wants with google translator
// @description:zh-cn 谷歌点击划词翻译综合插件
// @match http://*/*
// @match https://*/*
// @grant GM_registerMenuCommand
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
//版本
var gtVer="3.99";
//缓存已经翻译过的信息内容
var transCache = [];
var transMd5Cache=[];
//缓存已经取得的音频数据内容
var transSoundCache=[];
var transSoundMd5Cache=[];
//
var sourceTranslateLanguageNameInStorage = "sourceTranslateLanguage";
var targetTranslateLanguageNameInStorage = "targetTranslateLanguage";
var translatorSettingLanguageInStorage="translatorSettingLanguage";
var defaultSourceLanguage = "-1";
var defaultTranslateLanguage = "0";
var currentSourceLanguage = parseInt(GM_getValue(sourceTranslateLanguageNameInStorage, defaultSourceLanguage));
var currentTranslateLanguage= parseInt(GM_getValue(targetTranslateLanguageNameInStorage, defaultTranslateLanguage));
var translatorSettingLanguage = GM_getValue(translatorSettingLanguageInStorage, "0") === "0" ? 0 : 1;
//国家与语言代码字符串
//国家
var uLanguageNames = [["中文", "中文", "中文", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "芬兰语", "英语", "丹麦语", "英语", "希伯来语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "韩文", "日语", "荷兰语", "荷兰语", "葡萄牙语", "葡萄牙语", "法语", "法语", "法语", "法语", "法语", "西班牙语", "西班牙语", "西班牙语", "西班牙语", "西班牙语", "西班牙语", "西班牙语", "德语", "德语", "德语", "俄语","乌克兰语", "意大利语", "希腊语", "挪威语", "匈牙利语", "土耳其语", "捷克语", "斯洛文尼亚语", "波兰语", "瑞典语", "西班牙语"], ["Chinese", "Chinese", "Chinese", "English", "English", "English", "English", "English", "English", "English", "English", "Finnish", "English", "Danish", "English", "Hebrew", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "Korean", "Japanese", "Dutch", "Dutch", "Portuguese", "Portuguese", "French", "French", "French", "French", "French", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "Spanish", "German", "German", "German", "Russian","Ukrainian", "Italian", "Greek", "Norwegian", "Hungarian", "Turkish", "Czech", "Slovenian", "Polish", "Sweden Language", "Spanish"]];
//国家所对应的地区
var uRegionNames = [["简体", "繁体台湾", "繁体香港", "香港", "美国", "英国", "全球", "加拿大", "澳大利亚", "爱尔兰", "芬兰", "芬兰", "丹麦", "丹麦", "以色列", "以色列", "南非", "印度", "挪威", "新加坡", "新西兰", "印度尼西亚", "菲律宾", "泰国", "马来西亚", "阿拉伯", "韩国", "日本", "荷兰", "比利时", "葡萄牙", "巴西", "法国", "卢森堡", "瑞士", "比利时", "加拿大", "拉丁美洲", "西班牙", "阿根廷", "美国", "墨西哥", "哥伦比亚", "波多黎各", "德国", "奥地利", "瑞士", "俄罗斯", "乌克兰","意大利", "希腊", "挪威", "匈牙利", "土耳其", "捷克共和国", "斯洛文尼亚语", "波兰", "瑞典", "智利"],["Simplified", "Traditional Taiwan", "Traditional Hong Kong", "Hong Kong", "America", "United Kingdom", "Global", "Canada", "Australia", "Irish", "Finland", "Finland", "Denmark", "Denmark", "Israel", "Israel", "South Africa", "Indian", "Norway", "Singapore", "New Zealand", "Indonesia", "the Philippines", "Thai", "Malaysia", "Arab", "Korea", "Japan", "Dutch", "Belgium", "Portugal", "Brazil", "French", "Luxembourg", "Switzerland", "Belgium", "Canada", "Latin America", "Spain", "Argentina", "America", "Mexico", "Columbia", "Puerto Rico", "Germany", "Austria", "Switzerland", "Russia", "Ukraine","Italy", "Greece", "Norway", "Hungary", "Turkey", "Czech Republic", "Slovenian", "Poland", "Sweden", "Chile"]];
//最终代码
var uLanguageCode = ["zh-cn", "zh-tw", "zh-hk", "en-hk", "en-us", "en-gb", "en-ww", "en-ca", "en-au", "en-ie", "en-fi", "fi-fi", "en-dk", "da-dk", "en-il", "he-il", "en-za", "en-in", "en-no", "en-sg", "en-nz", "en-id", "en-ph", "en-th", "en-my", "en-xa", "ko-kr", "ja-jp", "nl-nl", "nl-be", "pt-pt", "pt-br", "fr-fr", "fr-lu", "fr-ch", "fr-be", "fr-ca", "es-la", "es-es", "es-ar", "es-us", "es-mx", "es-co", "es-pr", "de-de", "de-at", "de-ch", "ru-ru", "uk-uk","it-it", "el-gr", "no-no", "hu-hu", "tr-tr", "cs-cz", "sl-sl", "pl-pl", "sv-se", "es-cl"];
//腾讯代码
var tLanguageCode=["自动识别","中文", "中文", "中文", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "xxx", "英语", "xxx", "英语", "xxx", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "英语", "韩语", "日语", "xxx", "xxx", "葡萄牙语", "葡萄牙语", "法语", "法语", "法语", "法语", "法语", "西班牙语", "西班牙语", "西班牙语", "西班牙语", "西班牙语", "西班牙语", "西班牙语", "德语", "德语", "德语", "俄语","xxx", "意大利语", "xxx", "xxx", "xxx", "土耳其语", "xxx", "xxx", "xxx", "xxx", "西班牙语","泰语","越南语","印尼语","马来西亚语","阿拉伯语","印地语"];
//google翻译api变量
var UA = navigator.userAgent;
var googleDomain = ["translate.google.cn", "translate.google.com"];
var dictURL = "https://" + googleDomain[translatorSettingLanguage] + "/translate_a/single?client=t";
var ttsURL = "http://" + googleDomain[translatorSettingLanguage] + "/translate_tts?client=t";
var alURL="https://"+googleDomain[translatorSettingLanguage] +"/?op=translate";
var audioContext= new AudioContext();
var tokenNameInStorage=["google_value_tk_zh_cn","google_value_tk_en_us"];
var isEnabled = true;
var isTranslatorDisabledTemporarily=true;
var oldText = "";
var searchedTextCache=[];
var searchedTextIndex=-1;
var speakerIconBase64Data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QEQDhUFQkzk7wAAAIpJREFUOMtj/P//PwNFgAQD3jMwMDRg6MVjwHw0/n4GBob/DAwM5xkYGAQIGTAfqhgdFEDF1+MzAKYZl9P6oXIO2AxA1owsAXc2lH7PwMCwHtmA/zgwPLygYYBi0f///xmYSIgwByT2QxiDiYFCQIoBB5DY8rgSEtmBSLVopEpCokpSJjozMVKanQFy4nkNOfntnwAAAABJRU5ErkJggg==";
var settingIconBase64Data="data:image/png;base64,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";
var closeIconBase64Data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFfUlEQVR4XuzQQQEAIAwAoWn/zrOEv4MInN2dsjtxAgTECRAQJ0BAnAABcQIE/CXgMWtuvW0UUQCeXa+96+56fQvGASInjh3fkiI1XF4QUPFUeADhXIUA5QfAX+g7/IK89oE2oQ1CgrYg0byUN96oE19L04KoFLW1vbtxbMe7nPE6o6zlQSi01ZxktRtrb983M2fOJFlZyZ9bXl34cmk1/8HS0pL3/wLgeyyuLF5YXMl/ge/NQTApAGCjq58sPhAk8VY4PPaVfMZ3mRfQXQB44/QyP57lBa4ky2c2xsLhrwWPtL28uvhn/tP8OFMCANLjEtBPkUg0mstk/RMTr4ipVNIXj09FQcIvIOGt0/Qkjnf/OjkVm8ikU75YLCbmchl1fDwa8fRct9bW1iR2eoBw9I7b7Y5Hoy8KGAD3UrwFAgGUmplRXG50gyaBDi9sJ5LTajgUwvciWyQSETyi+LLRbrzLjgCLe8HrJcPd8cI+1YdSqTRFAh0+mUqoIBBDOzYckiRx8MwoSzmgcdhpW8fwwxJUkJBJZ0AC55BAg0+lk2owEBwJj/eHh4cmZ3J1ZgR8e2XrervTftCoNzDwaAl+FWWzWSKBBp/OpNRgMESFrzfqqN3u/LW5ee17ZgRYEEc98/N79/c0TdepEvwgYTaXIxKG4TO5tBoK0eF1w0D37u1pR1bvMwuCqWnw6uWrv5ld9H61Wv13CQE/mpubIxL68C5hOzebhYQXpsOD2HK5rOFn4GcxWQhtbm7exhLwi2pNjSohABJePXu2LwHDz87l1HCYDq9pGiqWSn14/AyWK0EioVgq682GhmiJMRgKovn5eWX+3Dl1LDyGeJ4fCd9sNNHubkl3wLMsgEg4si7sFot6s+mQ4DjGOQEPCQyPYxi+AfA7u0Ud34vAsymALmFnZ1dvNBpOePqeRB2uKRR2HPCMC6BLKICE+pP68YxB9kMb+bxer6PCnQIFnmEB9JwAEgo7Bk5mpmmiTqeDixmYz9uo2+06JOhwzp3fC0avS+CfaQjoOcaBcdAXYNlNTbo+zgEul8s+p9VCzzOe+T9I4LneJXA344kpWZGVE/AcPnDkAPyFv3VNR5VaDTI/U0Pg9PDTibjsU3x9aH7Q4pxzbws5sYBKJhIKL5CKkfkeQIdPxnHL23CkdMasjtcY/hk2nA8MVK5USDJkWAAdHlreMc1Z+Jis6tqD5a04ACAnkNCaukMC2wIIPIJuPy2rquqY/0G2LQI2wzBQqVg28IepVFJRfD4CQM4bRLPZxBJYL4UJ/I2p6SnZB0DD1R3P28cHA/ie1VnoQcsWSxXIezoWQ3LCSRmKoqBEIuHj3eg6FsykgIXVhTd5G16Bbm9Pd5ZF9nbYS9riAH7zm62bx8USCNG1puaoCeBacr0iy2g6Pt2XAM96jakhAK3ihRerTsZiL/n9fiLFuQCy4SvlCsB3+/DDvQdn/ZkkHg7ycLXoKJH39u7/4VcCqfX19S4TPYDjzLe9klcegndA2Ov5E/CUshknvOGecDICINgrSeHHjccfMTMETI6bFCVRpAmClgf4qmEOwdMkVGpVrTmQMCpEyeOCnZ8ZAbxllqHM7YyCMg4OULVSM0xEgaf8PqF2twZ50RgJ0GodWrxlPWFGQCAwdhsWOA/39/dNR8trOgX+v0sYLKVJ7O8/Qp1O+2E2O/cdI0mQJLEE7+Z+8Hg844oiS+3WYQtav2P1essbG9e2T/l3xteRS9iQRCksih4eVpAWwP9t9Y7yV65s3WGuEDp//rwQiYTfsziUBrX3Jbf886VLl4yncM8Poc/7OJN7BC3/48WLF82nOQ3+054dFAEAACAM8uwf2iCyCHxnj18FAAAAAAAAAAAAAAAAAAAAABh6fiXP0juK5QAAAABJRU5ErkJggg==";
var copyIconBase64Data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB/UlEQVR4Xq2VMWvCUBDHLzFFsYiKOqi4iMZBUBMoFId+gWDpJnR0KDhKh36MrrWrLTgLguAiTi2hODuIH8DBRQU1mt4VHsRgYlLyh4MLgfu9/93jHqfrOpA4VLfbfaIUTDocDrDdbvVGo/EOADpcENVkEliiKMptvV5/AwttNhvIZrOPkUjkoVKpLMGheMMpebsTkYtisXi3Wq2+JpNJ1ClAMBThWH48Hun7BLDf72E+n4MkSSICvqbT6W2hUFg6BhhA1G8KKnjSIp7nQVVViMVi4mKxcAQRrFoym81AlmUaPpwRORLH43EH03sybTcDqwKgaRpYidpYLpcVhKjoJGoPcC8CMJcytYsgngJYK4PBIOC1FQmCM4t4BvD5fJBKpWA4HMJoNIJEIiGiiw/PAIIgQCgUgnw+D7lcjm4YxONxhX7ZAsg2CztRwXA4DMlkEjKZDKTTaSiVSrQRbiyvKQ2O9g4L1EVIIBAwH5CzdMBWAgXlXoi3ckC5FzI78B5gM4Oz324lYLAHR0cRhA2QrXHjUCn+BxgMBt/tdvsZt+gVgrj1en1VrVZfEHhteDNoR7kGMGmtVuuVPZm1Wq2Brna48BBgLzfrWqdgLWND9wxghmFxzS2ADuYI0Ov1PjudjoTbMuMU4Pf7t/1+/8epg12z2XzGxAfORXZPbsEvSLk9F+qUJXIAAAAASUVORK5CYII=";
var pinIconBase64Data="data:image/png;base64,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";
var nextIconBase64Data="data:image/png;base64,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";
var previousIconBase64Data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wgSCwEjIU24iwAABttJREFUaN7tWW9oFOkZ/73zzszubHY3MS67hkiqkYjgxT9QrUa0VjgjSM8cwlE4WLh+8LyCilAxUBVFEUpbep5BKKm20utFlH7wy4K0QVH0gxVDgkJYN03WmLhLokl2s2R3dt53+mmms5OZTS7mdKF54GH+MPPO7/f8nud5330XWLIl+/828j4/1traWlsoFD4D8OLevXvdizGm+D6Ab9++XaGUfp3L5b7YtWuXNDAwkAZQB0B/17GFHxp8S0vLRgA9jLFDzc3NUigUAmMssljj/6AKbNu27YSmaecjkYinqakJlFJkMhkkk0kjffWKJNDS0hLmnHdxzvc0NzdDURQIggBKKQqFAhhjqFgFdu7cuV9V1Wt+vz+8fv16FItFSJIEQggIIdB13SCgVxSB3bt3i5zzP6qq+qvGxkZh2bJls8ADAOccnPPKUqC1tXVtoVC4KQjCxs2bN0NVVWiaBlH83/C6rpvRrygF9u3b90tVVb8JhUJV4XAYuVwOoiiaEbeC55xbCXxYBQ4cOBDQNO3PnPPPmpqaUCwWkc1mQSk1QdvBGyn0wQm0tbW1MMa+CwaDPwqHw0ilUqCUmuCdIm9ca5r2QQmQgwcPnmGM/WblypUSYwyvXr0qAW6AtoMHAEKImUKrV6/WRVGE4ZTSWUdDRcN8Pt9kbW3tr7u6uq5+bwLRaLQ+n89/RyndFYlEMDo6ClVVS1LGLW2sBKqqqrB3714IgmDWif1oL3pd10EIwapVq2oymcxvAXw/AtFo9NNisdhZW1u7nBCCRCIBQohryjiBN0BwzuHxeMx7Rls1akPTNNONblYsFsEYg9frRSKRWD7vFDp69Kgnm81+rev6l5FIhKTTaUxOTpZEzyltnIhY5wKnGjHc+q7dpqamkMvl5lcDhw8fXj8zM3PD5/N9RClFPB4HYwyCIMwCUC76xuxrEDBI2J93I2G8a+1scxI4cuTIV4yxPwQCASWVSmF0dNQx6m5FKwiCeW4FPh8F7ESs6efUvUoItLe3L1NV9RohpA0Anj9/jnw+75guRmTnkzZW8E4KzKWCYU5LEJPAqVOnfqpp2reKoqxMp9MYGBiY1RnKFaxRoAAgCMKc0S+XRsa1FbxlETibwNmzZz/inP9LlmWxr68Pb9++dcxZa9TtCnDOzR4uy7LZpQRBMN1JDQOYdZlh70aGOwVBBABK6Wpd10Vd15HJZFy7khW4oijw+/0mYFmWzcjbe/tcKlJKS5YadhWsKZVKpUrGoABw9+7d+J49eyghZGc4HCbZbBaFQqHkwx6PB42Njairq0N9fT38fj8kSYIsy6CUms8akbZG3R59q7spY3/G8LGxMbx8+fKc467EhQsXdmua9i3nvH5oaAiEEITDYfMX1Zs3b1wL0+m6XA25zSGGCk7NAQB6e3vx4MED4rqtcvHixeWqql7jnH8iiiJ0Xcfk5KQjqHKgrcDdCrhcO3a79+TJk/IEDDtz5swRzvnvRFH0BINBjI+PgzFWNup2sG7n9u5Sjoj1viAIePjw4fwIAMDp06c3MsZu6Lq+bsWKFcjn85iennYFPVfU3VKoHBHruSRJ6O7uLiFQdl/o/Pnzvaqq/ljX9WsjIyMQBAENDQ2QJAmSJEEURfNodad7bu42jvENqwcCgYVvLZ48efIXnPM/VVVVBdeuXYt0Og1VVV0VcFNibGwMr1+/di12a+exzuqyLGP//v24c+fOdEdHR2BBe6Pt7e2NxWKxC8DWTZs2gTGGiYmJOUFbrb+/H/fv3y+Z6ERRNI/GZGgQMNzj8aCtrS2fz+c7jh8/fmLBm7uHDh2S/H7/Bc75iTVr1pCGhgYMDw/PO/cTiQS6u7vR19e3KBvLCx7k2LFjH+u6/rdgMBjZsWMHxsfHMTMzM6cSyWQSsVgMT58+XRQCC97cvXTp0j9lWd4wNTV1JxaLgVKKuro6eL1e0z0ezyz3+XyQJGnRftTTd3n50aNHucePH/9969at04ODgz/L5/N03bp10DTN3Au1e6FQQH9/P4aHh899UAWsrbyjo+P3giDsGBoa+s+tW7fg9XpRU1NjLvKs7vP5SnbsKub/gStXrvybMbaJMXbj5s2bePHiBUKhkCOBikkhu/X09Kg9PT3/2LJly8tkMvnx4OCgtGHDBni9XlBKIUkSGGN49uwZ4vH4uYpSwGpXr179i6IomycmJno7OzuRSqVQXV0NWZYRDAahKErlpZDdOjs74zU1NT+RJOmb27dvIxaLIRAIoLq6Gl6vt/IJAMDly5cL169fPyaK4s/j8fj4yMgIOOeQJKlvsb7x3v5mjUajyzVN+5xzLhNC/trV1TWOJVuyJXtn+y9EZ9IzZsYm1wAAAABJRU5ErkJggg==";
var searchIconBase64Data="data:image/png;base64,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";
var forbiddenIconBase64Data="data:image/png;base64,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";
var translatorIconBase64Data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wgUCCwMjZs+uAAAC+hJREFUeNrtm3twXFUdxz/nnLt7d5PNpkm2L1qaRx/QTgOltJVHS3kLKmDtoECH0Rl1fAyiIqN/6dQ/FJlBOiPjY9Q/VBTUURwHHQVEytQ6xdLIu02bkjaEpqVp0qbJPu89xz/u7ia72cfdJNDoeGbOZPfuueee7/f83udGfOzh0z91pfqkMaABDBjAGAi7w1f9+qtLdvE/3MTWHWeNrSCeMQQs5aEnS0J2kDHjN+Q+a5P+3h+/0vTF/3oCPrLjrNG4BGQAgUFgSBsXSwQmoC75sfCzKf0AU+LesDQLHv9S5MRsIEAayIN3DWhkIfgJ0lCp1zI+kcncOVskQGKyu2QMUoj35KFaWl+eNQTkdsX1TKAvEZ623gm5ZOv2gx2zggCdRSWFVRE8JcR8Oi1jN26bPSqQBVvcfQOegpQYo+6dNSpQbdVmirtfSYKkHY5t3d594bknoEbwU9WFUsPSVsPds4IAv+6tGl7fdiE70LEinwfEOVcBY/yt2dSA2M+cwYCac9vXX1l9TglwkqkfTEnKzcxIhg7O/fg5DYUBbnt4zChZw11VwFf0IEUeQ6ecsdF015yd269xzgUBVs1OfTrgS3oDq37r8gWZh/btZ86cCOGQhRAgpcjOZ4rmNyU/T1bBSfcNpx3nkb4jRx645pprkuNxQC3AfYATlX4vs97Dww2kUklSyWQBiUKIGetSyqZQMPiNpUuXdj/3XG+oQALysYDwv3VeEmW4rENzSauhPWaIhgwIGEkKjg4KXjwi2HNYktaiInlHRxsYS57AshIoJYk0hDFGzGDwPd6UUksWLzZfA76Z37BbvztmLFmbBly+VHPHepeGUOVFnkkKHtujeOFNWVFtbm7rY82iFKGQRaS+jkgknFeDCmLtWwUmtlQqdaqjoyOWV4Fa3KAEPnGly6c3OVXBAzSGDJ+72mHzCreiuzw0FEVrg+No4vE4yWTK17qm0oLBYMtkFfDpuu6+wuWq5e4kED0nBQOnJQZY2KhZNs+Q28CX+yW7D8uK8/aejZBIHUcpibYgkUwgpSAUst8DL+BT297XoSft5N4jkt/uVQyOiglzKGIRw10bXLSBH+60cHVlj+Eai8Onw3SG0tn6BMTjcYQA27ZrEvF3xQ1a0nDH+kLwT76seKJLlZxi8KzgkWctEP5V7OBQI6vnv4PRBq0NUgoSiQRQmoSp6P/kdLgC/omp8YZ2Q2N4fOSr/ZInulTFEHlimF0tXgDoHYmQyoCrNa5r0MZgDCSTSZLJ5LtUDwDQ6der1QMuWVJYMfrdPuUrRK4lWMpoi57hEI5jcLXG6PHdTKVSpNPpaQMulg4LQCfGbiIQfKvSjR2x8RtPnhUcHRIlkX5rS6bqIv70imJ3T2mjeHAwwqq5SVxXo6T0ajYGhPBIMMYQDAZn1gj+Zfvi/g8/PFbR7zdMEP8TI6LsFi9qqq5/rTHD7p7SqnN4JEom8w6BgPBUAJMlwHvm2dExfv3sM0hlsXzxQq7fcNG0jKMs9vPV6gHVc2R/BrWc3XCyaqA1eW9QEP8DxweHGDg5xPDo2My5wWrtTFzQEvEWsiBqygJ/rltNuhaxDevbxm3IWKpyDeTAyXpaG4+T0RZpRyKVQEmJFJBKZzwb5TqkUylG44mqe1Bn20gpSkqHPwIM9A6OExBrMLTGDEcHxSQt+NluNcngXbFMFxBw7IyoaCW7hyMM/Pl5LGWQFl5AJUAIgzEirw77j/TT3XcMqVRJA5uTs89uuZGFLU2VVaBaXWxfX2GycPs6t6IWTPQk117oFjzmwDFROb1WYTKBRd7crkHrUrmmN1prF61d31WoKavA3l7J7esEzXXeU1afp7l9nctvX1QVy2Ef6HRZMX/8woFjgqG4qFpbqGvpZHlQYwUkKiiwlEAiEVlpQIxnmEJA38khzox5scLKtkUEA+PQwnawrHG0fGoAGRce26O459rxws0HL3JZ0Gj4zV6LEyOFwKNh2LLW4boLC+OHP7xk+SqsjKpWNq51CAUtbFthBxVCgFIyrwK5v8YYvv/7p9DapT4c4vZrL0dK6cs71JQL7D0ieXa/5LqV46AubdWsbU1zZFDy9rBHwryoYek8Q3GK/bc3JPsHhK/CStK16B22WTnPyYbGGqVUHoiYcI7Z03+cs3EvZF5x/kLf4GtSgVx7dI8FOAUkCKA9pmmPlb/vhTeld68P8LkFHzwVgfhrDJwaQinBBW3nsbJ98SR12/3qgfz3NcuW4DgOlmXNrA3Ix/QGfv5Pi/0Dmrsuc/M2oVyLp+GJLounX5O+Tpgm7lbPcJQNcxt4rutVhBL0nTxF23nzCNuBCZ7gLQZODoMQtM6fy4KWJjKZDEKIAompng7XaEH/1Svp6pNsaNdc2qppixmastHiSFLQNyR4+S3J7h5JIu2v3lC82DE3yBm3mRXnL+JQ/9uMxRM83/UGN12+BoBEKs3fX3w1P37z2lX5z5mMF5IXq8O0VWBiy7iwu0fm43q/VRXjI33NXek+FWHzymX0DhzH0S4vHXqT5Uvms2zxeTz9wkuMxJMIoHPp+Sya21wwRzqdJhAIoJQq+7xaTgP8h8mmfFZYC3iAQ6ej2MEgm9asyl9/ctc+dna9zuu9/QDUh22uX39xyaU4joPrulPPBWrOC4xvPqqCB4g7Nv0jNisWL2Jl6yIwhmQ6zZ7XDuS9wa2bNhAKBsrO7bpunoTiZ0qm26qwY2qo2pRLkA4ORtDGcPXaTlqiDRhEPircfPFKWhfEqs7tui6O41QIhaeiA6Z2Xowxk8vbVQ5RuoeiOI6m/8QpTp1JkHuvyaDp7jtGKuPvVM0YL54obQOmrQNVjtVLAC8rIUUXRx2bfx9J8OSufd4uGggGLUBwbGiYx57eRTKd8VUP0Fqjx5OL6auAH37KLaqWktrzPS4Z18UAF69o5VO3XE9zQwMAxweHefyZXSRSad+SMGUCTA2gK+263yP33KW03QFG0Lmsjc1rVlMfDnHnDRtpjnokDAye5vFn/pGXBHxKYU1ewPhkt9KOG58/THKXwWZa21azqfNC7xlaEwmHuOuGjTQ3Rj1JOHWax57aRbJE8bTcmqbvBarsdlVHYfyphjFgz1mFNt6ZgdZewaM+ZHPXjRtpbmzAYBgYGuZXf91FPJnyRYIcj+oyb08FcMUDymrAawDveYNGHMc7M3BcjXY9YxYJ22y7cRMtWXU4PnyaXz5VaBirSkDATT9SDKxcn1ZoUFOUWJijnE7ZDIwGcBwPvJlQMI2Ebba9/ypi0SgYmNccJWhZVdecJ6AuM3eHySQPvWvewPjPDcolZ0YIugcjaO2VyrUuHBQJ22y76Squ6LyAW69c7xWNqmxYQZHt5i8cspln3+8KdY+SoQXVAPtmpuYosdRY72KTnebeywewwwGCAUXAkiWrRDnRz70hkvst19vb20WpKuN71u6//+X6rt6jo4X/jFFNRATrL6pjy80thGyFZVlYlsSaUHoSorD8XY0Aea4IeOihi8eWLQ0dlUoilURIiVSqsMtsz36/oMPmlhuaENIjw3uDxP9bI++aG5xqm99U9x1vCRIhinrRtYUxi4/e0pIVe5UV+8KCh19DPa1IcCabSoV+IaVX1s73CVXvXG+IwJ1bmqgPK6Q0KCmQSngl8qwE+PZQM54OT6Nt374uvqwt1JuHbfLw8z2gYNttzcTmBJFKYFkKpQQyq8s1uedKgdC5anNj6sGysYHRbL25gfMX2h54JT3wUuZ3v9jo1ZqQnXMC5Fj9o8W+KJe337gpwqoVdSglUVKglMzqvJkR8LOCgO3b18UvWBp+s3CxhnWdITauj3iiLr1XZ4XM7TozAn5WEADQHBUPTtTjjiWKW66fkwUv8iTkjKNfd1duTCqVemdWEdBkBx7NAYs1C+74UDMyu+tSCoQweaMnfPxrXzWjeOJE4kezioD77rsisbwt2Bupg7u3NGHbAoEB4b1sKfKvzE5f5EdGEod37tz7YO67xSxpjfXOtzd+KPKTaAS0dj2P6EgwAmOUJwXZoKc47i8lFcXhbyqVOvHOYPLHT/2l/4EdOz6T4P/t/w2A/wDKyXvC301xSQAAAABJRU5ErkJggg==";
var detailedIconBase64Data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADVUlEQVR4Xr2WTYscRRzGf/+q6nEnmlVZEMFcsllEwYCZjSFmMYkgZCEXD549iAcPcY9eFhJEEI8LmYsnv4AHD8Z485CQSMwtgiJrcjABb4IkSjbT/Zhqumiane2Zxsn8TgUzXc/Tz/+FNiC8+Omlb/7J7eyjQkg8Ucwgc8Y+r0t/Xjj7LsD+xfPfad5EzagdgIX45pGbN37CeY85h2HMEiFUFBR5ztFjb1BpLgTAUuyh1+PWz7e4d/cukmYcvfHSgQMcfu0wkUrTAjWEkD0W/4Nz5z4unYrZYFAmOxxe5MjrAxqa1OC9QxJ5nvPLr78xS1595WUkRY0WA86naFhc3J+i43/QKKVUauxtwDmHAd57lpaWmCXxTis1WhLAxMHlQwyHQ3YjEGBpPoyuLC+vYEZLAmacWFvj5KlTVfQGCAEqBBLeAt4FDNdtCCV2Rg/Z2fm3pQdC4Pr1a9y5fZsmcGhlhZNrp/nqypdc276K4emCyDm+fIL33/xgnAFVYxj4fXubjY0NiqJo9Mbw4pB3Tp95LH6Fzz5ZAQWYOoUCbMTmF1f58K2PkqXxUwAqxX+8cRMzQxLHjx0lEnyGySMFvv7h+/j/iRtTiLzIee/tdQwfy9fSA94lY2RZlgw09gQYJmMhW4iXTRxTKRoYYbI0DRP2ABGV5agNqCqFT2d6Wa+DAUeJJoyhS5epdFobUP27AFUGvU1nwBwIoaTRtoojqs7JgKC5RgW9kOGm7AFfGAhAbSVIEQMqS0ACpRIAqhLwYWoDhRki3eEmNaEQNJyKEsynK2MCPcw8RjsC5PIUAM6PM6BmE6altIs0JBJZCDjzTEMhAylpUKLxCdQlqBOoUhHUPUoWsqnXsXCpeXF+dxPWb10VWbXT2qyoEWQ+dDBQ1CLpHfdqQilNRKhUm44lECILPcC6fBEmA3s3Ic5IhOCQNGbOBSgm0MkACKQ2A01CCEhgxlie6mV0RURaDaSF4+n3+ymB9K1IpNAI53P29bslEJ+RRpMNDAYDtra2sKZzVldXiawfOcPm55cxQhd9xIj1wTrjeKG/+a3mTdSM2g4g8455kzQDwNOB+89euPzMo7ygEE8UZ6V4qfk3YMBzwEHgecCYDwL+Au4E4EE8APeYLztR+z++nDG+ugE5XAAAAABJRU5ErkJggg==";
var simplifiedIconBase64Data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wgXBy0V6QJP6gAAA8hJREFUWMO9l01vW1UQhp+ZOefaqdN8KCmEIkFSUiAbWFCqSixgQaVKFRJ/gA1iwa9oxT9i07IGiQ8Jqa3KokgURSrQD9okpU0T4o87LM6913btuLFDOwvLC59z3nnnfWfGAoSlry59vdOR863ccee5hghEFY6YX7p78fynAEdnLlz2Fx0zFy47cDQA9Vae0v7xpx/Yy5vsNHfp5DmC/g85Ow7UYuRIrFPXOqdOv0/xZj0AUtK+2dzk2u0rXP/jenvryT+taNnh6AZydzre4uTLq1PLi8s3Pl49twaUpZbQe+D21j1ubf3Ghx80wrGF2eB5VlwDPsHjKTp0aHLjxjbX1n+ZP/f2J32/6wOwvbfD5s591t5c4dVF5a/NhyCKikxAPOR5h3ot8Epjnj/v3OPWg7u7Zro/gKiRIBmdduTm3Tt8e+UqpkYw68vpoHXfa+6xODfH2dNnUM/IrIap7Q9AVNNDDqZGLWSohgLAmAy448GJFhGXdK+A6ggGeittqtSyGipGsDAuAQUHkIWIiCTVeeoD+zMg5WlHVQkWUDVMLV0yJoBO6GAFew4sTi+uqIxgQNXwsoICaoZJAsABAUhBf2LR0AqAc//xg/UYspUhALwAoJQeVZRohoqhasgELggeCKXoPH1kIesrdz8DPfSICGYBFR1Q7kF9ENywSnSJVdMwygVS1U9EEoWiEzLg5Jp3WS3FbaNsKJKOegIQNSAFiGFOGa4BqXTkljL2Uhf+DBtKz/UiyQUiOnDooBoAuhoAxBnoqk+5QKsmopLoUlFUtPL1wWdBSkdNqdwtBypBQp8YMES0uGz8CCQLV9bGn1ECla5gRTAzBEUnBCBC4aBSF6BDh5F36+6lCxCCBgQZrwv2Rp5auvQsANbXF4aUoFSsqKQZcAgAIlq4wCuRqw0RoVeNqPSBo2hF38QAkKoReTFjyi3PR4mw/B7MkgAnrIBramZlCdzh6TUzMDgOAcdMyWI45DoKMWi5YqSsRwFod9q02v9Sqzkz0fDZbGDDG7cdxyA0VFFtsdfaHWLVnliYneO1xWWuXt/h15uPabdsYvorO6tjlvPkUYN3VtamRwJ4Y+l1Trz01sPvfv6++ffWRrsW63gPgIWjC8c3Hm/cHmstz3PaeZP3Vt+dOXVy7Xfg2ACAsv+sLK3yxdkv5z776HNy927y/SwcH3cgOBDNqMXame7o7wEQi+4ULRKnItNTPPeIpuyWABqB7dmL30y3Ojn5c/5zqpIebwS2HxXkzgErwDyHk9y4Dt0C1gWIQAPIeLHRBJ78B15HplODYzQFAAAAAElFTkSuQmCC";
var realtimeIconBase64Data="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmcgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojMGU2YWUwO30uY2xzLTJ7ZmlsbDojMDU5M2ZmO308L3N0eWxlPjwvZGVmcz48dGl0bGUvPjxnIGRhdGEtbmFtZT0iMjQgSG91cnMiIGlkPSJfMjRfSG91cnMiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE5LDIwYTEsMSwwLDAsMS0uNzEtLjI5bC0zLTNBMSwxLDAsMCwxLDE1LDE2VjExYTEsMSwwLDAsMSwyLDB2NC41OWwyLjcxLDIuN2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwxOSwyMFoiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xNiw4YTEsMSwwLDAsMS0xLTFWM2ExLDEsMCwwLDEsMiwwVjdBMSwxLDAsMCwxLDE2LDhaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNywxN0gzYTEsMSwwLDAsMSwwLTJIN2ExLDEsMCwwLDEsMCwyWiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTYuODEsMjYuMTlhMSwxLDAsMCwxLS43MS0uMjksMSwxLDAsMCwxLDAtMS40MWwyLjgzLTIuODNhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjUxLDI1LjlBMSwxLDAsMCwxLDYuODEsMjYuMTlaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTYsMzBhMSwxLDAsMCwxLTEtMVYyNWExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE2LDMwWiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTI1LjE5LDI2LjE5YTEsMSwwLDAsMS0uNy0uMjlsLTIuODMtMi44M2ExLDEsMCwwLDEsMS40MS0xLjQxbDIuODMsMi44M2ExLDEsMCwwLDEsMCwxLjQxQTEsMSwwLDAsMSwyNS4xOSwyNi4xOVoiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yOSwxN0gyNWExLDEsMCwwLDEsMC0yaDRhMSwxLDAsMCwxLDAsMloiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yMi4zNiwxMC42NGExLDEsMCwwLDEtLjctLjMsMSwxLDAsMCwxLDAtMS40MUwyNC40OSw2LjFBMSwxLDAsMSwxLDI1LjksNy41MWwtMi44MywyLjgzQTEsMSwwLDAsMSwyMi4zNiwxMC42NFoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0xNiwyQTEzLjk0LDEzLjk0LDAsMCwwLDYsNi4yM1Y1QTEsMSwwLDAsMCw0LDVWOWExLDEsMCwwLDAsMSwxSDlBMSwxLDAsMCwwLDksOEg3LjA4QTEyLDEyLDAsMSwxLDQsMTZhMTIuMiwxMi4yLDAsMCwxLC4zMi0yLjc3LDEsMSwwLDAsMC0xLjk1LS40NkExNC41NCwxNC41NCwwLDAsMCwyLDE2LDE0LDE0LDAsMSwwLDE2LDJaIi8+PC9nPjwvc3ZnPg==";
var notRealtimeIconBase64Data="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmcgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojZDhlMWVmO30uY2xzLTJ7ZmlsbDojMDU5M2ZmO30uY2xzLTN7ZmlsbDojMGU2YWUwO308L3N0eWxlPjwvZGVmcz48dGl0bGUvPjxnIGlkPSJGb2N1cyI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjkuOTMsMTUuNTRDMjgsMTAuMzUsMjIuNDksNywxNiw3UzQsMTAuMzUsMi4wNywxNS41NEEuOTIuOTIsMCwwLDAsMiwxNS45VjE2YS45Mi45MiwwLDAsMCwuMDcuMzZjMiw1LjIyLDcuNDgsOC41OSwxNCw4LjU5UzI4LDIxLjYyLDI5LjkzLDE2LjQ2QS45Mi45MiwwLDAsMCwzMCwxNi4xdi0uMkEuOTIuOTIsMCwwLDAsMjkuOTMsMTUuNTRaIi8+PGNpcmNsZSBjbGFzcz0iY2xzLTIiIGN4PSIxNiIgY3k9IjE2IiByPSI2Ii8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTQsMTdhMSwxLDAsMCwxLTEtMSwzLDMsMCwwLDEsMy0zLDEsMSwwLDAsMSwwLDIsMSwxLDAsMCwwLTEsMUExLDEsMCwwLDEsMTQsMTdaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMyw4QTEsMSwwLDAsMSwyLDdWM0ExLDEsMCwwLDEsMywySDdBMSwxLDAsMCwxLDcsNEg0VjdBMSwxLDAsMCwxLDMsOFoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yOSw4YTEsMSwwLDAsMS0xLTFWNEgyNWExLDEsMCwwLDEsMC0yaDRhMSwxLDAsMCwxLDEsMVY3QTEsMSwwLDAsMSwyOSw4WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTcsMzBIM2ExLDEsMCwwLDEtMS0xVjI1YTEsMSwwLDAsMSwyLDB2M0g3YTEsMSwwLDAsMSwwLDJaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMjksMzBIMjVhMSwxLDAsMCwxLDAtMmgzVjI1YTEsMSwwLDAsMSwyLDB2NEExLDEsMCwwLDEsMjksMzBaIi8+PC9nPjwvc3ZnPg==";
var accurateIconBase64Data="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDUxMiA1MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIHN0eWxlPSJmaWxsOiNGRkNBNEY7IiBkPSJNMjU2LjAwMSw1MTJDMzk3LDUxMiw1MTIsMzk3LDUxMiwyNTYuMDAxUzM5NywwLDI1Ni4wMDEsMEMxMTUsMCwwLDExNS4wMDIsMCwyNTYuMDAxDQoJUzExNSw1MTIsMjU2LjAwMSw1MTJ6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojNUREREQzOyIgZD0iTTE1My4xMiwxMzUuNTE5djI4Mi42MDFsNjIuMTkxLTU0LjYyOVY4MC44OWgtOC4wOTJsLTQuMzA3LDMuMjg3SDE2Mi4wM2wtMC4wMTMtMy4zNDJsLTYuNzI1LDAuMDU1DQoJbC02Mi4xOTQsNTQuNjI2aDYwLjAxOUwxNTMuMTIsMTM1LjUxOXoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMTAxLjY2NywxMzUuNTE5aDQ0LjM5Mmw1Ni44NTMtNTEuMzQySDE1OC41MkwxMDEuNjY3LDEzNS41MTl6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojRkY3NTdDOyIgZD0iTTE2OC44MzQsMTIxLjcxN2wtNy4zNjUtMC4xMTNsLTE1LjQwNywxMy45MTVIMTAxLjY3bDE2LjEzMS0xNC41NzFsLTcuOTc5LTAuMTE4TDkzLjEsMTM1LjUxOQ0KCXYyODIuNjAxaDYwLjAxOWwxNS43MTItMTMuOFYxMjEuNzE3SDE2OC44MzR6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojRUNGMEYxOyIgZD0iTTI0OS42ODUsMTM1LjUxOXYyODIuNjAxbDYyLjE4OS01NC42MjlWODAuODl2LTAuMDAzaC04LjA5MmwtNC4zMDQsMy4yOTJoLTQwLjg3OWwtMC4wMTMtMy4zNDINCglsLTYuNzI4LDAuMDVsLTYyLjE5NCw1NC42MjloNjAuMDE5aDAuMDAzVjEzNS41MTl6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTE5OC4yMzMsMTM1LjUxOWg0NC4zOTFsNTYuODUzLTUxLjM0MmgtNDQuMzkxTDE5OC4yMzMsMTM1LjUxOXoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNGRjc1N0M7IiBkPSJNMjY1LjM5NywxMjEuNzE3bC03LjM2NS0wLjExM2wtMTUuNDA3LDEzLjkxNWgtNDQuMzkxbDE2LjEzMS0xNC41NzFsLTcuOTc5LTAuMTE4bC0xNi43MjIsMTQuNjg5DQoJdjI4Mi42MDFoNjAuMDE5bDE1LjcxMi0xMy44VjEyMS43MTdIMjY1LjM5N3oiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiM1RERERDM7IiBkPSJNMzgwLjk0Miw3MC44NWwtNDYuMDQ3LDY4Ljc4NWw3Mi42OTQsMjczLjA5bDQ2LjA0Ny02OC43ODVMMzgwLjk0Miw3MC44NWwtNy44MTksMi4wODNsLTMuMzE1LDQuMjgzDQoJbC0zOS41MDUsMTAuNTE2bC0wLjg3MS0zLjIyNGwtNi40ODcsMS43ODFsLTQ2LjA0OSw2OC43ODVsNTcuOTk3LTE1LjQzOUwzODAuOTQyLDcwLjg1eiIvPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0yODUuMTc0LDE1Mi44NzFsNDIuODk5LTExLjQxOGw0MS43MzItNjQuMjM3bC00Mi44OTYsMTEuNDE4bC00MS43MzQsNjQuMjRWMTUyLjg3MXoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNGRjc1N0M7IiBkPSJNMzQ2LjUyOSwxMjIuMjU1bC03LjE0OCwxLjc4OWwtMTEuMzA4LDE3LjQwOWwtNDIuODk2LDExLjQxOGwxMS44NDMtMTguMjI3bC03Ljc0LDEuOTM2DQoJbC0xMi4zODEsMTguNDk3bDcyLjY5NCwyNzMuMDlsNTgtMTUuNDM5bDExLjYzMy0xNy4zNzVsLTcyLjY5NC0yNzMuMDk1TDM0Ni41MjksMTIyLjI1NXoiLz4NCjxnPg0KCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBkPSJNMzk0LjQxMSwxNDYuNzU5bC0zLjY1MS0xMy44OTRsLTI1LjczMiw0Mi4wNzNsMy42NDksMTMuODk0bDI1LjczNC00Mi4wNzVWMTQ2Ljc1OXoiLz4NCgk8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGOyIgZD0iTTM4MC41MTIsMTM4Ljg2OWwtMS45MzgtOS4wMjhsLTE3LjM2NywyOC4zOTlsMS45NDEsOS4wMjZsMTcuMzY3LTI4LjM5NkgzODAuNTEyeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=";
var nonAccurateIconBase64Data="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDUxMiA1MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIHN0eWxlPSJmaWxsOiNGRkNBNEY7IiBkPSJNMjU2LjAwMSw1MTJDMzk3LDUxMiw1MTIsMzk3LjAwMSw1MTIsMjU2LjAwMUM1MTIsMTE1LDM5NywwLDI1Ni4wMDEsMEMxMTUuMDAxLDAsMCwxMTUsMCwyNTYuMDAxDQoJQzAsMzk3LjAwMSwxMTUuMDAxLDUxMiwyNTYuMDAxLDUxMnoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiMyMEQwQzI7IiBkPSJNMTQ2LjQ0NywxMDAuMzJoMjU1LjE2OGw1Ny45MDEsMjYzLjc1NGwtMjEuMjA2LDAuMTE0bC0wLjUwOCw5My4xMjFsMjEuODU2LDAuMTE0bC0wLjE0MywxNS41NjENCglIMTE0LjU4NGMtMzIuNjQ2LTIuNjE0LTI5LjczNC02Mi40OTQtMzEuNDgtNzguNTIybDI5LjA2Mi0yNjguMTJDMTEyLjI3OCwxMTQuNDI3LDEyNC4yOTIsMTAwLjMyLDE0Ni40NDcsMTAwLjMyTDE0Ni40NDcsMTAwLjMyeiINCgkvPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ZGNUI2MTsiIGQ9Ik0xNDYuNDQ3LDEwMC4zMmgyNC40MzhsLTIyLjI0MywzNzIuNjY0bC0zOC4xNDMtMS4wOTdjLTMxLjg5Ni0xLjI1My0zNi42Ni03Ny41MDMtMjYuMDEzLTEwNS4xNDgNCglsMjcuNjgxLTI0MC4zOThDMTEyLjI3OSwxMTQuNDI3LDEyNC4yOTQsMTAwLjMyLDE0Ni40NDcsMTAwLjMyTDE0Ni40NDcsMTAwLjMyeiIvPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0xMTkuMDI2LDM2NC4wNDVoMzMzLjg3N2MtMTUuMTUsMzEuOTQyLTE0Ljc1Nyw2My40NDMsMCw5NC41MjZIMTE5LjAyNg0KCUM4My4yMTEsNDU4LjU3Miw4My4yMTYsMzY0LjA0NSwxMTkuMDI2LDM2NC4wNDV6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojRUNGMEYxOyIgZD0iTTk0Ljc0OSwzOTAuMDMxaDM0OS4yMThjLTAuMjA0LDAuOTQ2LTAuMzkyLDEuODkzLTAuNTY4LDIuODM3SDk0LjA3OA0KCUM5NC4yODcsMzkxLjkxMSw5NC41MDcsMzkwLjk2Miw5NC43NDksMzkwLjAzMUw5NC43NDksMzkwLjAzMXogTTQ0Mi4zMzMsMzk5Ljk3NUw0NDIuMzMzLDM5OS45NzUNCgljLTAuMTEsMC45NDYtMC4yMDQsMS44OTItMC4yODQsMi44MzdIOTIuNTU1YzAuMDg2LTAuOTUxLDAuMTk0LTEuODk4LDAuMzE0LTIuODM3SDQ0Mi4zMzN6IE00NDEuNjk5LDQwOS45MTlMNDQxLjY5OSw0MDkuOTE5DQoJYy0wLjAxNCwwLjk0Ni0wLjAxNCwxLjg5MSwwLDIuODM3SDkyLjE4NGMtMC4wMTQtMC45NDYtMC4wMTQtMS44OTEsMC0yLjgzN0g0NDEuNjk5eiBNNDQyLjA1NCw0MTkuODYxTDQ0Mi4wNTQsNDE5Ljg2MQ0KCWMwLjA4MywwLjk0OSwwLjE3NiwxLjg5MywwLjI4NCwyLjgzOEg5Mi44NzRjLTAuMTE5LTAuOTQxLTAuMjI0LTEuODg4LTAuMzExLTIuODM4SDQ0Mi4wNTR6IE00NDMuNDA1LDQyOS44MDVMNDQzLjQwNSw0MjkuODA1DQoJYzAuMTc0LDAuOTQ0LDAuMzY0LDEuODkxLDAuNTY4LDIuODM3SDk0Ljc2M2MtMC4yNDYtMC45MzQtMC40NjYtMS44OC0wLjY3NC0yLjgzN0g0NDMuNDA1eiBNNDQ1Ljc0OCw0MzkuNzQ2TDQ0NS43NDgsNDM5Ljc0Ng0KCWMwLjI2OSwwLjk0NiwwLjU1MywxLjg5MywwLjg1MSwyLjgzN0g5OC4yOTRjLTAuNDI4LTAuOTE2LTAuODM4LTEuODY1LTEuMjItMi44MzdINDQ1Ljc0OEw0NDUuNzQ4LDQzOS43NDZ6IE00NDkuMDgzLDQ0OS42OQ0KCUw0NDkuMDgzLDQ0OS42OWMwLjM2NiwwLjk0NiwwLjc0NSwxLjg5MywxLjEzNiwyLjgzN0gxMDUuMDI0Yy0wLjg3Mi0wLjg2Ni0xLjY5OS0xLjgxNi0yLjQ4NC0yLjgzN0g0NDkuMDgzeiIvPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ZGNUI2MTsiIGQ9Ik0xMzQuMDU5LDQxMi45NTloNTIuMTc0VjUxMmwtMjYuMzA0LTMyLjMxTDEzNC4wNTksNTEyTDEzNC4wNTksNDEyLjk1OUwxMzQuMDU5LDQxMi45NTl6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojREZFMUUzOyIgZD0iTTE1My45NjEsMzgzLjg2NEg0MjIuODdoMTUuMzMzaDcuMjY5YzEuODA5LTYuNTY3LDQuMjcxLTEzLjE0OCw3LjQwMS0xOS43NTMNCgljMC4wMDgtMC4wMjEsMC4wMi0wLjA0NCwwLjAzMi0wLjA2NUg0MjkuMDRIMTU1LjE0NWgtMzYuMTIxYy0zMy4xMzksMC0zNS42MTUsODAuOTQ3LTcuNDE3LDkzLjAyNw0KCWMtOS41NDktMjcuODc5LTEuOTIxLTczLjIwOSwyMi44NzgtNzMuMjA5TDE1My45NjEsMzgzLjg2NEwxNTMuOTYxLDM4My44NjR6Ii8+DQo8Zz4NCgk8cGF0aCBzdHlsZT0iZmlsbDojRUNGMEYxOyIgZD0iTTI1MC4yMzMsMzE0Ljc5NGgxMDAuNTc5di03LjIxM0gyNTAuMjMzVjMxNC43OTR6Ii8+DQoJPHBhdGggc3R5bGU9ImZpbGw6I0VDRjBGMTsiIGQ9Ik0yNTguMzI5LDMyOC40MzVoODQuMzg5di01LjQwMWgtODQuMzg5VjMyOC40MzV6Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==";
var loadingIconBase64Data="data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ibGRzLXNwaW5uZXIiIHdpZHRoPSIyMDBweCIgIGhlaWdodD0iMjAwcHgiICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIHN0eWxlPSJiYWNrZ3JvdW5kOiBub25lOyI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoMCA1MCA1MCkiPgogIDxyZWN0IHg9IjQ3IiB5PSIyNCIgcng9IjkuNCIgcnk9IjQuOCIgd2lkdGg9IjYiIGhlaWdodD0iMTIiIGZpbGw9IiMxMGM5NTIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgdmFsdWVzPSIxOzAiIGtleVRpbWVzPSIwOzEiIGR1cj0iMXMiIGJlZ2luPSItMC45MTY2NjY2NjY2NjY2NjY2cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4KICA8L3JlY3Q+CjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgzMCA1MCA1MCkiPgogIDxyZWN0IHg9IjQ3IiB5PSIyNCIgcng9IjkuNCIgcnk9IjQuOCIgd2lkdGg9IjYiIGhlaWdodD0iMTIiIGZpbGw9IiMxMGM5NTIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgdmFsdWVzPSIxOzAiIGtleVRpbWVzPSIwOzEiIGR1cj0iMXMiIGJlZ2luPSItMC44MzMzMzMzMzMzMzMzMzM0cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4KICA8L3JlY3Q+CjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg2MCA1MCA1MCkiPgogIDxyZWN0IHg9IjQ3IiB5PSIyNCIgcng9IjkuNCIgcnk9IjQuOCIgd2lkdGg9IjYiIGhlaWdodD0iMTIiIGZpbGw9IiMxMGM5NTIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgdmFsdWVzPSIxOzAiIGtleVRpbWVzPSIwOzEiIGR1cj0iMXMiIGJlZ2luPSItMC43NXMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+CiAgPC9yZWN0Pgo8L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNTAgNTApIj4KICA8cmVjdCB4PSI0NyIgeT0iMjQiIHJ4PSI5LjQiIHJ5PSI0LjgiIHdpZHRoPSI2IiBoZWlnaHQ9IjEyIiBmaWxsPSIjMTBjOTUyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIHZhbHVlcz0iMTswIiBrZXlUaW1lcz0iMDsxIiBkdXI9IjFzIiBiZWdpbj0iLTAuNjY2NjY2NjY2NjY2NjY2NnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+CiAgPC9yZWN0Pgo8L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDUwIDUwKSI+CiAgPHJlY3QgeD0iNDciIHk9IjI0IiByeD0iOS40IiByeT0iNC44IiB3aWR0aD0iNiIgaGVpZ2h0PSIxMiIgZmlsbD0iIzEwYzk1MiI+CiAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiB2YWx1ZXM9IjE7MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49Ii0wLjU4MzMzMzMzMzMzMzMzMzRzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPgogIDwvcmVjdD4KPC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDE1MCA1MCA1MCkiPgogIDxyZWN0IHg9IjQ3IiB5PSIyNCIgcng9IjkuNCIgcnk9IjQuOCIgd2lkdGg9IjYiIGhlaWdodD0iMTIiIGZpbGw9IiMxMGM5NTIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgdmFsdWVzPSIxOzAiIGtleVRpbWVzPSIwOzEiIGR1cj0iMXMiIGJlZ2luPSItMC41cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4KICA8L3JlY3Q+CjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgxODAgNTAgNTApIj4KICA8cmVjdCB4PSI0NyIgeT0iMjQiIHJ4PSI5LjQiIHJ5PSI0LjgiIHdpZHRoPSI2IiBoZWlnaHQ9IjEyIiBmaWxsPSIjMTBjOTUyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIHZhbHVlcz0iMTswIiBrZXlUaW1lcz0iMDsxIiBkdXI9IjFzIiBiZWdpbj0iLTAuNDE2NjY2NjY2NjY2NjY2N3MiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+CiAgPC9yZWN0Pgo8L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoMjEwIDUwIDUwKSI+CiAgPHJlY3QgeD0iNDciIHk9IjI0IiByeD0iOS40IiByeT0iNC44IiB3aWR0aD0iNiIgaGVpZ2h0PSIxMiIgZmlsbD0iIzEwYzk1MiI+CiAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiB2YWx1ZXM9IjE7MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49Ii0wLjMzMzMzMzMzMzMzMzMzMzNzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPgogIDwvcmVjdD4KPC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDI0MCA1MCA1MCkiPgogIDxyZWN0IHg9IjQ3IiB5PSIyNCIgcng9IjkuNCIgcnk9IjQuOCIgd2lkdGg9IjYiIGhlaWdodD0iMTIiIGZpbGw9IiMxMGM5NTIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgdmFsdWVzPSIxOzAiIGtleVRpbWVzPSIwOzEiIGR1cj0iMXMiIGJlZ2luPSItMC4yNXMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+CiAgPC9yZWN0Pgo8L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoMjcwIDUwIDUwKSI+CiAgPHJlY3QgeD0iNDciIHk9IjI0IiByeD0iOS40IiByeT0iNC44IiB3aWR0aD0iNiIgaGVpZ2h0PSIxMiIgZmlsbD0iIzEwYzk1MiI+CiAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiB2YWx1ZXM9IjE7MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49Ii0wLjE2NjY2NjY2NjY2NjY2NjY2cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4KICA8L3JlY3Q+CjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgzMDAgNTAgNTApIj4KICA8cmVjdCB4PSI0NyIgeT0iMjQiIHJ4PSI5LjQiIHJ5PSI0LjgiIHdpZHRoPSI2IiBoZWlnaHQ9IjEyIiBmaWxsPSIjMTBjOTUyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIHZhbHVlcz0iMTswIiBrZXlUaW1lcz0iMDsxIiBkdXI9IjFzIiBiZWdpbj0iLTAuMDgzMzMzMzMzMzMzMzMzMzNzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPgogIDwvcmVjdD4KPC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDMzMCA1MCA1MCkiPgogIDxyZWN0IHg9IjQ3IiB5PSIyNCIgcng9IjkuNCIgcnk9IjQuOCIgd2lkdGg9IjYiIGhlaWdodD0iMTIiIGZpbGw9IiMxMGM5NTIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgdmFsdWVzPSIxOzAiIGtleVRpbWVzPSIwOzEiIGR1cj0iMXMiIGJlZ2luPSIwcyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4KICA8L3JlY3Q+CjwvZz48L3N2Zz4=";
var ANS_TYPE_GOOGLE_RESULT=0,ANS_TYPE_ZDIC_HTML=2,ANS_TYPE_YOUDAO_WORD=3,ANS_TYPE_YOUDAO_SENTENCE=4,ANS_TYPE_ACCURATE=5;
var CACHE_TYPE_GOOGLE_RESULT=0,CACHE_TYPE_ZDIC_HTML=1,CACHE_TYPE_YOUDAO_WORD=2,CACHE_TYPE_YOUDAO_SENTENCE=3,CACHE_TYPE_ACCURATE=4;
var lingoesServerConfigNameInStorage="lingoesServerConfig";
var defaultLingoesServerConfigValue="0|0|127.0.0.1|11111";
var lingoes_isEnabled=!1,lingoes_showingWay=0,lingoes_serverIp="127.0.0.1",lingoes_serverPort="11111";
var youdaoConfigNameInStorage="youdaoConfig";
var defaultYoudaoConfigValue="0|0|0";
var youdao_isEnabled=!1,youdao_isOnlyForSingleWord=!0;
var hotKeyNameInStorage="hotKeyName";
var hotKeyNameForQSInStorage = "QSHotKeyName";
var defaultHotKeyValue= "1|1|1|81"; //Ctrl+Alt+Q enabled
var defaultHotKeyValueForQS="1|1|1|68"; //Ctrl+Alt+D enabled
var hotKey_Ctrl=!0,hotKey_Alt=!0,hotKey_Code=81, hotkey_isActive = !0, isHotkeyEventRegistered=!1;
var hotKey_Ctrl_forQS = !0, hotKey_Alt_forQS = !0, hotKey_Code_forQS = 68, hotkey_isActive_forQS = !0, isHotkeyEventRegistered_forQS = !1;
var hotkeyType_forPlugin=0;
var hotkeyType_forQS=1;
var isPinned=!1;
var isToolBarMoving=!1;
var tBarOffsetX=0;
var tBarOffsetY=0;
var isEnableSimpleMode=!1;
var isEnableSimpleModeDefaultConfig="0";
var isEnableSimpleModeConfigString="isEnableSimpleModeConfigString";
var isEnableRealtimeTranslationMode=!0;
var isEnableRealtimeTranslationModeDefaultConfig="1";
var isEnableRealtimeTranslationModeConfigString="isEnableRealtimeTranslationModeConfigString";
var isRemoveWebsiteSelectingRestriction=!0;
var isRemoveWebsiteSelectingRestrictionDefaultConfig="1";
var isRemoveWebsiteSelectingRestrictionConfigString="isRemoveWebsiteSelectingRestrictionConfigString";
var isWebsiteRestrictionRemoved=!1;
var isEnableAccurateMode=!1;
var isEnableAccurateModeDefaultConfig="0";
var isEnableAccurateModeConfigString="isEnableAccurateModeConfigString";
var isTMode=!1;
var isTModeDefaultConfig="0";
var isTModeConfigString="isTMode";
var translatedDataConfigString="translatedDataConfigString";
var translationTaskTimout=0;
var translationTaskInterval=100;
var maxTimesToDestroy=200;
let accurateData={dy:maxTimesToDestroy,mx:0,my:0,md5:"",wh:null};
var isExistsTranslationTask={
get:function(){
return GM_getValue("isExistsTranslationTaskConfigString","0")!=="0";
},
set:function(vl){
GM_setValue("isExistsTranslationTaskConfigString",vl ? "1":"0");
}
};
//current target language for playing sound
var curTarLanForSpeaker = uLanguageCode[currentTranslateLanguage];
let maxNResult=80;
let tencentTStr="";
function fetchNResult(){
let n=document.getElementsByClassName("tlid-translation");
if(n){
if(n.length>0){
let s=n[0].innerHTML;
if(s.length>0){
GM_setValue(translatedDataConfigString,s);
}
isExistsTranslationTask.set(false);
window.close();
return;
}
}
if(maxNResult-->0)setTimeout(fetchNResult,200);
}
function fetchTResult(){
let n=document.getElementsByClassName("textinput");
if(n){
if(n.length>0){
n[0].value=tencentTStr;
triggerEvent(n[0],"propertychange");
fetchZResult();
return;
}
}
if(maxNResult-->0)setTimeout(fetchTResult,200);
}
function fetchZResult(){
let z=document.getElementsByClassName("textpanel-target-textblock");
if(z){
if(z.length>0){
if(z[0].innerHTML!=="undefined" && z[0].innerHTML!==null){
let s=z[0].innerHTML.trim();
if(s.length>0){
GM_setValue(translatedDataConfigString,`<style type="text/css">#gt_prefs_contentDiv span.hidden{display:none;};</style>${s}`);
isExistsTranslationTask.set(false);
window.close();
return;
}
}
}
}
if(maxNResult-->0)setTimeout(fetchZResult,100);
}
getModesConfigValue();
if(isEnableAccurateMode){
if(isExistsTranslationTask.get()){
if(/translate\.google\.[com|cn]+\/\?op=translate\&sl=/gi.test(location.href)){
if(translatorSettingLanguage===1){
document.onreadystatechange=function(e){
if(document.readyState==="complete"){
fetchNResult();
}
}
}
else{
fetchNResult();
}
return;
}
if(/^https:\/\/fanyi\.qq\.com\/$/gi.test(location.href)){
document.onreadystatechange=function(e){
if(document.readyState==="complete"){
let dta=GM_getValue(translatedDataConfigString,null);
if(dta!=null && dta!="undefined" && dta!==""){
let s=dta.split("|");
if(s.length===3){
let zn=document.getElementsByTagName("ul");
let sps=null;
let i=0;
tencentTStr=decodeURI(s[2]);
for(;i<zn.length;i++){
if(zn[i].hasAttribute("node-type")){
if(zn[i].getAttribute("node-type")==="target_language_list"){
sps=zn[i].getElementsByTagName("span");
break;
}
}
}
if(sps){
for(let n=0;n<sps.length;n++){
if(sps[n].innerText===s[0]){
triggerEvent(sps[n],"click");
break;
}
}
}
sps=null;
for(;i<zn.length;i++){
if(zn[i].hasAttribute("node-type")){
if(zn[i].getAttribute("node-type")==="target_language_list"){
sps=zn[i].getElementsByTagName("span");
break;
}
}
}
if(sps){
for(let n=0;n<sps.length;n++){
if(sps[n].innerText===s[1]){
triggerEvent(sps[n],"click");
break;
}
}
}
fetchTResult();
}
}
}
}
return;
}
}
}
getHotKeyValue(hotkeyType_forPlugin);
getHotKeyValue(hotkeyType_forQS);
getLingoesConfigValue();
getYoudaoConfigValue();
window.document.body.addEventListener("mouseup", googleTranslate, false);
var on = function (node, e, f) {
node.addEventListener(e, f, false);
};
var $ = function (s) {
return document.getElementById('gt_prefs_' + s);
};
var setup=function() {
var d = document;
if ($('setup')) return;
var div = d.createElement('div');
div.id = 'gt_prefs_setup';
d.body.appendChild(div);
var styleNode = GM_addStyle(`
#gt_prefs_setup {opacity:0.9; box-shadow:-2px 0px 9px 5px #898D91;position:fixed;z-index:2147483647;top:30px;right:60px;padding:20px 30px;background:radial-gradient(circle, rgba(31,103,127,1) 0%, rgba(83,160,124,1) 94%, rgba(132,175,155,1) 96%, rgba(31,96,161,1) 98%, rgba(56,115,173,1) 98%, rgba(5,183,246,1) 100%);width:600px;border:1px solid black; border-radius:10px;}
#gt_prefs_setup * { color:#deff08;text-align:left;line-height:normal;font-size:12px; }
#gt_prefs_setup a { color:black;text-decoration:underline; }
#gt_prefs_setup div { text-align:center;font-weight:bold;font-size:14px; }
#gt_prefs_setup ul { margin:15px 0 15px 0;padding:0;list-style:none;border:0; }
#gt_prefs_setup input,select {border:1px solid blue;border-radius:5px;width:auto;padding:2px;background:#53a07c;text-align:center;}
#gt_prefs_setup li { margin:0;padding:6px 0;vertical-align:middle;border:0 }
#gt_prefs_setup button { background:transparent;width:150px;margin:0 10px;text-align:center;border:1px blue solid;border-radius:5px;box-shadow:2px 2px 2px 1px #2C3E50;}
#gt_prefs_setup textarea { width:98%; height:60px; margin:3px 0; text-align:center;border-radius:5px;}
#gt_prefs_setup b { font-weight: bold; font-family: "微软雅黑", sans-serif; }
#gt_prefs_setup button:disabled { color: graytext; }
`);
var sb_Title=["谷歌点击划词翻译设置","Google select text translator Setting"],
sb_CurStatus = [["(启用中)", "(禁用中)"], ["(Enabled)", "(Disabled)"]],
sb_HotkeyForQuickSearch = ["快速查询热键:", "Hotkey for Quick Search:"],
sb_HotkeyActivatorForQuickSearch = ["启用热键", "Enable Hotkey"],
sb_Usage = ["插件开关热键:", "Hotkey for Plugin switch:"],
sb_HotKeyActivator=["启用热键","Enable Hotkey"],
sb_CurVersion=["当前版本:","Current Version "],
sb_CurAuthor=[",作者:",", Author: "],
sb_CurUILanguage=[",Current UI Language:",", 当前界面语言:"],
sb_UILanguage=[["Chinese Simplified","English"],["英文","中文"]],
sb_SourceLanguage = ["指定源语言:", "Select the source language:"],
sb_SourceLanguageSetToAuto = ["自动检测", "Auto Detect"],
sb_TargetLanguage=["设置目标翻译语言:","Select the target language to translate:"],
sb_Confirmation=[["确定","取消"],["Save","Cancel"]],
sb_UseLingoesAPILocalServer=["启用本地灵格斯API服务(需要本机安装灵格斯词典软件,并在其设置中启用API服务器)。","Enable Lingoes Local API Server (Need Lingoes software installed, and enable it's API server)."],
sb_LingoesAPIServerIP=["灵格斯API服务器 -- IP地址:","Lingoes Local API Server -- IP:"],
sb_LingoesAPIServerPort=["端口号:","Port:"],
sb_LingoesShowingWay=[["显示取词窗口","主界面取词","主界面翻译文字","查询方式:"],["Showing query result","Main UI query","Main UI translator","Query way:"]],
sb_LingoesErrorWarning=[["输入的IPv4地址不规范!本地地址一般为:127.0.0.1","端口号必须为0-65535间的数字!"],["The Ipv4 address is wrong! For localhost server, use 127.0.0.1 please!","Port number must be a digital between 0 to 65535"]],
sb_UseYoudaoSever=["启用有道翻译代替谷歌翻译引擎(注:仅限中英互译):","Use Youdao translator (PS: only used between Chinese and English):"],
sb_YoudaoTranslationWay=[["全面启用","仅限单词"],["Totaly enabled","Only for words"]],
sb_ErrorWarning=["输入的热键必须为字母或数字!","The hot key must be alphabet or digital!"],
sb_SimpleMode=["简洁模式(仅翻译成目标语言)","Simple Mode (Show translated content only)"],
sb_RealTimeTranslationMode=["启用对选定内容的实时翻译模式(否则需点击翻译图标进行翻译)","Enable real-time selection translating mode (Otherwise click an icon to translate)"],
sb_RemoveSelectingRestriction=["移除网站对文本选定的限制(如果导致部分网站功能异常,请禁用该选项)","Remove website selection restriction (Disable this if website runs unusually)"],
sb_AccurateMode=["对长句使用精确翻译模式(需借助临时弹窗获取翻译数据,速度较慢)","Use accurate mode for sentences (Need a popup window for retrieve translated data. It's slowly.)."],
sb_AccurateEngineSelection=[["谷歌翻译引擎","腾讯翻译引擎"],["Google Engine","Tencent Engine"]];
var divHtml = `
<div>${sb_Title[translatorSettingLanguage]}${sb_CurStatus[translatorSettingLanguage][(isEnabled ? 0:1)]}</div>
<ul>
<li>${sb_CurVersion[translatorSettingLanguage]} <b>${gtVer}</b>${sb_CurAuthor[translatorSettingLanguage]}<b>Toprapid</b>${sb_CurUILanguage[translatorSettingLanguage]}
<select id="gt_prefs_se_curUILanguage">
<option value="0" selected="selected">${sb_UILanguage[translatorSettingLanguage][0]}</option>
<option value="1">${sb_UILanguage[translatorSettingLanguage][1]}</option>
</select>
</li>
<li>${sb_Usage[translatorSettingLanguage]}
<input type="checkbox" id="gt_prefs_cb_ctrl" value="Ctrl" />Ctrl<b>+</b>
<input type="checkbox" id="gt_prefs_cb_alt" value="Alt" />Alt<b>+</b>
<input type="text" maxlength="1" style="text-transform:uppercase;" onclick="javascript:this.select();" id="gt_prefs_txt_key" value="${String.fromCharCode(hotKey_Code)}" />
<input type="checkbox" id="gt_prefs_cb_stat" value="isActive" />${sb_HotKeyActivator[translatorSettingLanguage]}
</li>
<li>${sb_HotkeyForQuickSearch[translatorSettingLanguage]}
<input type="checkbox" id="gt_prefs_cb_ctrl_forQS" value="Ctrl" />Ctrl<b>+</b>
<input type="checkbox" id="gt_prefs_cb_alt_forQS" value="Alt" />Alt<b>+</b>
<input type="text" maxlength="1" style="text-transform:uppercase;" onclick="javascript:this.select();" id="gt_prefs_txt_key_forQS" value="${String.fromCharCode(hotKey_Code_forQS)}" />
<input type="checkbox" id="gt_prefs_cb_stat_forQS" value="isActive" />${sb_HotkeyActivatorForQuickSearch[translatorSettingLanguage]}
</li>
<li><input type="checkbox" id="gt_prefs_cb_stat_enable_simple_mode" value="isEnableSimpleMode" />${sb_SimpleMode[translatorSettingLanguage]}</li>
<li>
<input type="checkbox" id="gt_prefs_cb_stat_enable_accurate_mode" value="isEnableAccurateMode" />${sb_AccurateMode[translatorSettingLanguage]}
<select id="gt_prefs_se_accurate_engine">
<option value="0" ${!isTMode ? 'selected="selected"' : ''}>${sb_AccurateEngineSelection[translatorSettingLanguage][0]}</option>
<option value="1" ${isTMode ? 'selected="selected"' : ''}>${sb_AccurateEngineSelection[translatorSettingLanguage][1]}</option>
</select>
</li>
<li><input type="checkbox" id="gt_prefs_cb_stat_enable_realtime_translation_mode" value="isEnableRealtimeTranslationMode" />${sb_RealTimeTranslationMode[translatorSettingLanguage]}</li>
<li><input type="checkbox" id="gt_prefs_cb_stat_remove_website_restriction" value="isRemoveWebsiteSelectingRestriction" />${sb_RemoveSelectingRestriction[translatorSettingLanguage]}</li>
<li><input type="checkbox" id="gt_prefs_cb_stat_using_lingoes" onclick="javascript:document.getElementById('gt_prefs_li_lingoes_config').style.display=(this.checked ? 'block':'none');" value="isActive" />${sb_UseLingoesAPILocalServer[translatorSettingLanguage]}</li>
<li id="gt_prefs_li_lingoes_config">${sb_LingoesAPIServerIP[translatorSettingLanguage]}
<input type="text" maxlength="15" onclick="javascript:this.select();" id="gt_prefs_txt_lingoes_ip" value="${lingoes_serverIp}" />
${sb_LingoesAPIServerPort[translatorSettingLanguage]}
<input type="text" maxlength="15" onclick="javascript:this.select();" id="gt_prefs_txt_lingoes_port" value="${lingoes_serverPort}" />
<br/>
${sb_LingoesShowingWay[translatorSettingLanguage][3]}
<select id="gt_prefs_se_lingoes_showingWay">
`;
for (let i=0;i<3;i++){
divHtml+=`<option value="${i}" ${lingoes_showingWay===i ? 'selected="selected"':''}>${sb_LingoesShowingWay[translatorSettingLanguage][i]}</option>`
}
divHtml+=`</select></li>
<li>
<input type="checkbox" id="gt_prefs_cb_stat_using_youdao" value="isActive" />${sb_UseYoudaoSever[translatorSettingLanguage]}
<select id="gt_prefs_se_youdao_trans_way">
<option value="0" ${!youdao_isOnlyForSingleWord ? 'selected="selected"' : ''}>${sb_YoudaoTranslationWay[translatorSettingLanguage][0]}</option>
<option value="1" ${youdao_isOnlyForSingleWord ? 'selected="selected"' : ''}>${sb_YoudaoTranslationWay[translatorSettingLanguage][1]}</option>
</select>
</li>
<li>${sb_SourceLanguage[translatorSettingLanguage]}
<select id="gt_prefs_se_curSourceLanguage">
<option value="0" ${currentSourceLanguage < 0 ? 'selected="selected"' : ''}>${sb_SourceLanguageSetToAuto[translatorSettingLanguage]}</option>`;
for (let i = 0; i < uLanguageCode.length; i++) {
if (currentSourceLanguage === i) divHtml += `<option value="${i}" selected="selected">${uLanguageNames[translatorSettingLanguage][i]}-${uRegionNames[translatorSettingLanguage][i]}(${uLanguageCode[i]})</option>`;
else divHtml += `<option value="${i}">${uLanguageNames[translatorSettingLanguage][i]}-${uRegionNames[translatorSettingLanguage][i]}(${uLanguageCode[i]})</option>`;
}
divHtml+=`</select>
</li>
<li>${sb_TargetLanguage[translatorSettingLanguage]}
<select id="gt_prefs_se_curTargetLanguage">`;
for (let i=0;i<uLanguageCode.length;i++){
if (currentTranslateLanguage===i) divHtml += `<option value="${i}" selected="selected">${uLanguageNames[translatorSettingLanguage][i]}-${uRegionNames[translatorSettingLanguage][i]}(${uLanguageCode[i]})</option>`;
else divHtml+=`<option value="${i}">${uLanguageNames[translatorSettingLanguage][i]}-${uRegionNames[translatorSettingLanguage][i]}(${uLanguageCode[i]})</option>`;
}
divHtml += `</select>
</li>
</ul>
<div><button id="gt_prefs_ok">${sb_Confirmation[translatorSettingLanguage][0]}</button><button id="gt_prefs_cancel">${sb_Confirmation[translatorSettingLanguage][1]}</button></div>`;
div.innerHTML= divHtml;
div = null;
var close = function () {
if (styleNode) {
styleNode.parentNode.removeChild(styleNode);
}
var div = $('setup');
div.parentNode.removeChild(div);
};
on($('ok'), 'click', function () {
//save lingoes server config
if(!/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/.test($("txt_lingoes_ip").value.trim())){
alert(sb_LingoesErrorWarning[translatorSettingLanguage][0]);
return;
}
if (!/^[0-9]{1,5}$/.test($("txt_lingoes_port").value.trim())){
alert(sb_LingoesErrorWarning[translatorSettingLanguage][1]);
return;
}
var portNum=parseInt($("txt_lingoes_port").value.trim());
if (portNum<0&&portNum>65535){
alert(sb_LingoesErrorWarning[translatorSettingLanguage][1]);
return;
}
saveLingoesSettings($("cb_stat_using_lingoes").checked, $("se_lingoes_showingWay").selectedIndex, $("txt_lingoes_ip").value.trim(), $("txt_lingoes_port").value.trim());
saveYoudaoSettings($("cb_stat_using_youdao").checked, $("se_youdao_trans_way").selectedIndex, null);
saveModeSettings(isTModeConfigString,(isTMode=($("se_accurate_engine").selectedIndex!==0)));
saveModeSettings(isEnableSimpleModeConfigString,(isEnableSimpleMode=$("cb_stat_enable_simple_mode").checked));
saveModeSettings(isEnableAccurateModeConfigString,(isEnableAccurateMode=$("cb_stat_enable_accurate_mode").checked));
saveModeSettings(isEnableRealtimeTranslationModeConfigString,(isEnableRealtimeTranslationMode=$("cb_stat_enable_realtime_translation_mode").checked));
saveModeSettings(isRemoveWebsiteSelectingRestrictionConfigString,(isRemoveWebsiteSelectingRestriction=$("cb_stat_remove_website_restriction").checked));
if($("translatorDiv")){
if(isEnableSimpleMode){
$("iconSimplified").style.display="block";
$("iconDetailed").style.display="none";
}
else{
$("iconSimplified").style.display="none";
$("iconDetailed").style.display="block";
}
if(isEnableAccurateMode){
$("iconAccurate").style.display="block";
$("iconNonAccurate").style.display="none";
}
else{
$("iconAccurate").style.display="none";
$("iconNonAccurate").style.display="block";
}
if(isEnableRealtimeTranslationMode){
$("iconRealtime").style.display="block";
$("iconNotRealtime").style.display="none";
$("iconForbidden").style.display="block";
}
else{
$("iconRealtime").style.display="none";
$("iconNotRealtime").style.display="block";
$("iconForbidden").style.display="none";
}
}
if(isRemoveWebsiteSelectingRestriction && !isWebsiteRestrictionRemoved){
removeWebsiteSelectingRestriction();
}
if (translatorSettingLanguage===0){
youdao_isEnabled= $("cb_stat_using_youdao").checked;
GM_setValue(youdaoConfigNameInStorage,(youdao_isEnabled ? "1":"0")+"|1|0");
}
if ($("se_curUILanguage").selectedIndex > 0){
translatorSettingLanguage= translatorSettingLanguage===0 ? 1:0;
GM_setValue(translatorSettingLanguageInStorage, translatorSettingLanguage.toString());
dictURL = "https://" + googleDomain[translatorSettingLanguage] + "/translate_a/single?client=t";
alURL="https://"+googleDomain[translatorSettingLanguage] +"/?op=translate";
}
if ($("se_curSourceLanguage").selectedIndex !== currentSourceLanguage) {
currentSourceLanguage = $("se_curSourceLanguage").selectedIndex - 1;
GM_setValue(sourceTranslateLanguageNameInStorage, currentSourceLanguage.toString());
}
if ($("se_curTargetLanguage").selectedIndex!==currentTranslateLanguage){
currentTranslateLanguage= $("se_curTargetLanguage").selectedIndex;
GM_setValue(targetTranslateLanguageNameInStorage,currentTranslateLanguage.toString());
}
var kyc= $("txt_key").value.toUpperCase().charCodeAt(0);
if (kyc!==hotKey_Code || $("cb_ctrl").checked!==hotKey_Ctrl || $("cb_alt").checked!==hotKey_Alt || $("cb_stat").checked!==hotkey_isActive){
if (kyc<=128){
makeAndSaveHotKeyValue($("cb_stat").checked, $("cb_ctrl").checked, $("cb_alt").checked, kyc, hotkeyType_forPlugin);
}
else{
alert(sb_ErrorWarning[translatorSettingLanguage]);
}
}
kyc = $("txt_key_forQS").value.toUpperCase().charCodeAt(0);
if (kyc !== hotKey_Code_forQS || $("cb_ctrl_forQS").checked !== hotKey_Ctrl_forQS || $("cb_alt_forQS").checked !== hotKey_Alt_forQS || $("cb_stat_forQS").checked !== hotkey_isActive_forQS) {
if (kyc <= 128) {
makeAndSaveHotKeyValue($("cb_stat_forQS").checked, $("cb_ctrl_forQS").checked, $("cb_alt_forQS").checked, kyc, hotkeyType_forQS);
}
else {
alert(sb_ErrorWarning[translatorSettingLanguage]);
}
}
close();
});
if (lingoes_isEnabled) $("cb_stat_using_lingoes").checked = true;
else $("li_lingoes_config").style.display = "none";
$("se_youdao_trans_way").selectedIndex = youdao_isOnlyForSingleWord ? 1 : 0;
$("se_accurate_engine").selectedIndex= isTMode ? 1:0;
$("cb_stat_using_youdao").checked = youdao_isEnabled;
if (hotkey_isActive) $("cb_stat").checked = true;
if (hotKey_Ctrl)$("cb_ctrl").checked = true;
if (hotKey_Alt) $("cb_alt").checked = true;
if (hotkey_isActive_forQS) $("cb_stat_forQS").checked = true;
if (hotKey_Ctrl_forQS) $("cb_ctrl_forQS").checked = true;
if (hotKey_Alt_forQS) $("cb_alt_forQS").checked = true;
if(isEnableSimpleMode) $("cb_stat_enable_simple_mode").checked=true;
if(isEnableAccurateMode) $("cb_stat_enable_accurate_mode").checked=true;
if(isEnableRealtimeTranslationMode) $("cb_stat_enable_realtime_translation_mode").checked=true;
if(isRemoveWebsiteSelectingRestriction)$("cb_stat_remove_website_restriction").checked=true;
on($('cancel'), 'click', close);
};
function saveLingoesSettings(isEnabled,showingWay,ip,port){
lingoes_isEnabled=isEnabled;
var lingoesConfigStr = (lingoes_isEnabled ? "1|" : "0|") + (lingoes_showingWay = showingWay).toString() + "|" + (lingoes_serverIp = ip) + "|" + (lingoes_serverPort = port);
GM_setValue(lingoesServerConfigNameInStorage, lingoesConfigStr);
}
function saveYoudaoSettings(isEnabled,showingWay,Reserved) {
youdao_isEnabled=isEnabled;
youdao_isOnlyForSingleWord = showingWay === 1;
GM_setValue(youdaoConfigNameInStorage, (youdao_isEnabled ? "1|" : "0|") + (youdao_isOnlyForSingleWord ? "1|" : "0|") + (Reserved == null ? "0" : Reserved));
}
function saveModeSettings(configStr,isEnable){
GM_setValue(configStr, (isEnable==true ? "1":"0"));
}
function makeAndSaveHotKeyValue(hkStat,hkCtrl,hkAlt,keyCode,hotkeyType) {
var kv;
switch(hotkeyType){
case hotkeyType_forPlugin:
kv = ((hotkey_isActive = hkStat) ? "1|" : "0|") + ((hotKey_Ctrl = hkCtrl) ? "1|" : "0|") + ((hotKey_Alt = hkAlt) ? "1|" : "0|") + (hotKey_Code = keyCode).toString();
GM_setValue(hotKeyNameInStorage, kv);
break;
case hotkeyType_forQS:
kv = ((hotkey_isActive_forQS = hkStat) ? "1|" : "0|") + ((hotKey_Ctrl_forQS = hkCtrl) ? "1|" : "0|") + ((hotKey_Alt_forQS = hkAlt) ? "1|" : "0|") + (hotKey_Code_forQS = keyCode).toString();
GM_setValue(hotKeyNameForQSInStorage,kv);
break;
default:
console.log("Error occured while make and save hot key value.");
return;
}
registerHotKeyEvent(hotkeyType);
}
function getHotKeyValue(hotkeyType) {
var keyCodes="";
switch (hotkeyType){
case hotkeyType_forPlugin:
keyCodes = GM_getValue(hotKeyNameInStorage, defaultHotKeyValue).split("|");
if (keyCodes.length !== 4) keyCodes = defaultHotKeyValue.split("|");
hotKey_Ctrl = keyCodes[1] === "1";
hotKey_Alt = keyCodes[2] === "1";
hotKey_Code = parseInt(keyCodes[3]);
hotkey_isActive = keyCodes[0] === "1";
break;
case hotkeyType_forQS:
keyCodes = GM_getValue(hotKeyNameForQSInStorage, defaultHotKeyValueForQS).split("|");
if (keyCodes.length !== 4) keyCodes = defaultHotKeyValueForQS.split("|");
hotKey_Ctrl_forQS = keyCodes[1] === "1";
hotKey_Alt_forQS = keyCodes[2] === "1";
hotKey_Code_forQS= parseInt(keyCodes[3]);
hotkey_isActive_forQS = keyCodes[0] === "1";
break;
default:
return;
}
registerHotKeyEvent(hotkeyType);
}
function getLingoesConfigValue(){
var rst = GM_getValue(lingoesServerConfigNameInStorage, defaultLingoesServerConfigValue).split("|");
lingoes_isEnabled = rst[0] === "1";
lingoes_showingWay = parseInt(rst[1]);
lingoes_serverIp = rst[2];
lingoes_serverPort = rst[3];
}
function getModesConfigValue(){
let rst=GM_getValue(isEnableSimpleModeConfigString,isEnableSimpleModeDefaultConfig);
isEnableSimpleMode= rst==="0" ? false:true;
rst=GM_getValue(isEnableRealtimeTranslationModeConfigString,isEnableRealtimeTranslationModeDefaultConfig);
isEnableRealtimeTranslationMode= rst==="0" ? false:true;
rst=GM_getValue(isRemoveWebsiteSelectingRestrictionConfigString,isRemoveWebsiteSelectingRestrictionDefaultConfig);
isRemoveWebsiteSelectingRestriction= rst==="0" ? false:true;
rst=GM_getValue(isEnableAccurateModeConfigString,isEnableAccurateModeDefaultConfig);
isEnableAccurateMode= rst==="0" ? false:true;
rst=GM_getValue(isTModeConfigString,isTModeDefaultConfig);
isTMode= rst==="0" ? false:true;
}
function getYoudaoConfigValue() {
var rst = GM_getValue(youdaoConfigNameInStorage, defaultYoudaoConfigValue);
youdao_isEnabled = rst[0] === "1";
youdao_isOnlyForSingleWord = rst[1] === "1";
}
function registerHotKeyEvent(hotkeyType){
switch(hotkeyType){
case hotkeyType_forPlugin:
if (hotkey_isActive) {
if (!isHotkeyEventRegistered) {
window.document.body.addEventListener("keyup", toggleGoogleTranslate, false);
isHotkeyEventRegistered = !0;
}
}
else {
if (isHotkeyEventRegistered) {
window.document.body.removeEventListener("keyup", toggleGoogleTranslate, false);
isHotkeyEventRegistered = !1;
}
}
break;
case hotkeyType_forQS:
if (hotkey_isActive_forQS) {
if (!isHotkeyEventRegistered_forQS) {
window.document.body.addEventListener("keyup", toggleQuickSearch, false);
isHotkeyEventRegistered_forQS = !0;
}
}
else {
if (isHotkeyEventRegistered_forQS) {
window.document.body.removeEventListener("keyup", toggleQuickSearch, false);
isHotkeyEventRegistered_forQS = !1;
}
}
break;
default:
return;
}
}
GM_registerMenuCommand("Google select text translator Setting(谷歌划词设置)", setup);
function createToolTip(){
let tp=$("toolTip");
if(!tp){
tp=document.createElement("span");
tp.id="gt_prefs_toolTip";
document.body.appendChild(tp);
GM_addStyle(`
#gt_prefs_toolTip{position: absolute;background: #eafdff;border-radius: .4em;display:none;color:blue;font-weight:bold;font-size:14px;}
#gt_prefs_toolTip:after {content: '';position:absolute;bottom: 0;left: 50%;width:auto;height:auto;border: 20px solid transparent;border-top-color: #eafdff;border-bottom: 0;border-left: 0;margin-left: -10px;margin-bottom: -20px;}
`)
}
return tp;
}
var loadingIconUI={
get(){
let li=$("loading_icon");
if(!li){
li=document.createElement("img");
li.id="gt_prefs_loading_icon";
li.setAttribute("src",loadingIconBase64Data);
li.width=64;
li.height=64;
li.style.zIndex=9999;
li.style.display="none";
li.style.position="fixed";
document.body.appendChild(li);
}
return li;
},
show(pos){
let li=this.get();
if(pos){
li.style.left=pos.mx+"px";
li.style.top=pos.my+"px";
}
li.style.display="block";
},
hide(){
this.get().style.display="none";
}
}
function createTranslatorIcon(){
let ci=$("translator_icon");
if(!ci){
ci=document.createElement("img");
ci.id="gt_prefs_translator_icon";
ci.setAttribute("src",translatorIconBase64Data);
ci.width=32;
ci.height=32;
ci.style.zIndex=9999;
ci.style.display="none";
ci.style.position="fixed";
ci.onmouseover=function(e){
ci.style.display="none";
toolTip.show(this,e);
setTimeout(function(){
toolTip.hide();
},2000);
isTranslatorDisabledTemporarily=!1;
googleTranslate(e);
}
document.body.appendChild(ci);
}
return ci;
}
var realtimeTranslatorUI={
n:0,
delayTime:5000,
get:function(){
let rti=$("realtime_translator_icon");
if(!rti){
rti=document.createElement("img");
rti.id="gt_prefs_realtime_translator_icon";
rti.setAttribute("src",translatorIconBase64Data);
rti.width=32;
rti.height=32;
rti.style.zIndex=9999;
rti.style.display="none";
rti.style.position="fixed";
rti.onclick=function(e){
var selectedText = window.getSelection().toString().trim();
if (selectedText) {
oldText=selectedText;
searchedTextProcessor.addText(oldText);
GetTranslation(oldText, e.clientX, e.clientY);
}
realtimeTranslatorUI.hide();
}
document.body.appendChild(rti);
}
return rti;
},
show:function(){
let rti=$("realtime_translator_icon");
if(rti){
rti.style.display="block";
}
},
hide:function(){
let rti=$("realtime_translator_icon");
if(rti){
rti.style.display="none";
this.destroy();
}
},
delay:function(){
let rti=$("realtime_translator_icon");
this.n=setTimeout(function(){
realtimeTranslatorUI.hide();
},this.delayTime);
},
destroy:function(){
if(this.n){
clearTimeout(this.n);
this.n=0;
}
}
};
var toolTip={
s:{"gt_prefs_iconForbidden":["暂停","Disable"],"gt_prefs_iconPrevious":["上一个","Previous"],"gt_prefs_iconSetting":["设置","Setting"],"gt_prefs_iconSearch":["搜索","Search"],"gt_prefs_iconClose":["关闭","Close"],"gt_prefs_iconNext":["下一个","Next"],"gt_prefs_iconCopy":["拷贝","Copy"],"gt_prefs_iconPin":["固定","Pin to screen"],"gt_prefs_translator_icon":["点击翻译","Click to translate"],"gt_prefs_iconDetailed":["详解模式","Detailed Mode"],"gt_prefs_iconSimplified":["简洁模式","Simplified Mode"],"gt_prefs_iconRealtime":["实时翻译模式","Real-time Translation Mode"],"gt_prefs_iconNotRealtime":["点击图标翻译模式","Click-icon Translation Mode"],"gt_prefs_tBar":["按住拖动窗口","Press down and drag"],"gt_prefs_iconAccurate":["精确翻译模式","Accurate Translation Mode"],"gt_prefs_iconNonAccurate":["普通模式","Normal Mode"]},
show(el,e){
let tp=createToolTip();
tp.innerHTML=toolTip.s[el.id][translatorSettingLanguage];
let oL=0;
if($("translatorDiv"))if($("tBar")){oL=$("translatorDiv").offsetLeft+$("tBar").offsetLeft;}
let oS= translatorSettingLanguage===0 ? (tp.innerHTML.length*tp.innerHTML.length-Math.ceil(tp.innerHTML.length/5)*10+5):(tp.innerHTML.length*2-10+Math.ceil(tp.innerHTML.length/10)*10);
tp.style.left=(el.offsetLeft+oL-oS)+"px";
tp.style.top=(el.offsetTop+el.parentNode.offsetTop+el.parentNode.parentNode.offsetTop-40)+"px";
tp.style.display="block";
},
hide(){
$("toolTip").style.display="none";
}
};
function toggleGoogleTranslate(e) {
if(e.keyCode === 27){
if(isToolBarMoving){
window.removeEventListener("mousemove", divMove, true);
isToolBarMoving=!1;
return;
}
}
if (e.keyCode === hotKey_Code && (hotKey_Alt ? e.altKey : e.altKey === false) && (hotKey_Ctrl ? e.ctrlKey : e.ctrlKey === false)) {
if (isEnabled) {
window.document.body.removeEventListener("mouseup", googleTranslate, false);
alert(translatorSettingLanguage ? "Google select text translator is disabled!":"谷歌点击划词翻译,已禁用!");
isEnabled = isTranslatorDisabledTemporarily = false;
translatorDivUI.hide();
} else {
window.document.body.addEventListener("mouseup", googleTranslate, false);
alert(translatorSettingLanguage ? "Google select text translator is enabled!" : "谷歌点击划词翻译,已启用!");
isEnabled = isTranslatorDisabledTemporarily = true;
translatorDivUI.show();
}
}
}
var quickSearchDiv=null;
var searchBox=null;
var oldSIdx=-1,oldDIdx=-1;
function showQuickSearch(){
//Showing quick searching pannel
if (!quickSearchDiv){
GM_addStyle(`
#gt_prefs_quickSearch { position:fixed;z-index:998;top:30%;left:30%;width:40%;padding:0.3%;background:radial-gradient(ellipse at center, #EDF4FC 0%,#e3edf9 60%,#c9d7e5 80%, #c3cedb 90%, #bac6d3 95%, #adb5bc 100%);border:1px solid black;box-shadow:-2px 0px 9px 5px #898D91;opacity:0.9; border-radius:5px;}
#gt_prefs_quickSearch * { color:black;text-align:left;line-height:normal;font-size:12px; }
#gt_prefs_quickSearch a { color:black;text-decoration:underline; }
#gt_prefs_quickSearch div { text-align:center;font-weight:bold;font-size:14px; }
#gt_prefs_quickSearch ul { margin:15px 0 15px 0;padding:0;list-style:none;background:#eee;border:0; }
#gt_prefs_quickSearch input {width:99%;border:1px solid gray;padding:2px;background:white;text-align:center;}
#gt_prefs_quickSearch select {width:auto;border:1px solid gray;padding:2px;background:white;text-align:center;color:Green;}
#gt_prefs_quickSearch li { margin:0;padding:6px 0;vertical-align:middle;background:#eee;border:0 }
#gt_prefs_quickSearch button { width:150px;margin:0 10px;text-align:center;background:transparent;border-radius:5px;box-shadow:2px 2px 2px 1px gray;}
#gt_prefs_quickSearch textarea { width:98%; height:98%; margin:3px 0; }
#gt_prefs_quickSearch p,b { font-weight: bold;color:Green; margin:2px 0px; font-family: "微软雅黑", sans-serif;text-align:center; }
#gt_prefs_quickSearch button:disabled { color: graytext; }
`);
quickSearchDiv = document.createElement('div');
quickSearchDiv.id = 'gt_prefs_quickSearch';
document.body.appendChild(quickSearchDiv);
searchBox=null;
searchBox=document.createElement("input");
searchBox.id ="gt_prefs_searchBox";
searchBox.value = "";
searchBox.align="center";
searchBox.onkeyup=function (e) {
//ENTER
if (e.keyCode===13){
queryIt();
}
//ESC
if (e.keyCode===27){
if (searchBox.value==="") quickSearchDiv.style.display = "none";
else searchBox.value="";
}
}
var queryIt=function () {
var queryStr = searchBox.value.trim();
if (queryStr === "") {
quickSearchDiv.style.display = "none";
return;
}
var nSIdx= $("srcLanguageSelector").selectedIndex;
var nDIdx= $("dstLanguageSelector").selectedIndex;
if (oldText===queryStr){
if (nSIdx===oldSIdx&&nDIdx===oldDIdx) {
var translatorDiv = $("translatorDiv");
if (translatorDiv) {
if (translatorDiv.style.display === "none") translatorDiv.style.display = "block";
}
return;
}
}
translateIt((oldSIdx=nSIdx) <= 0 ? "auto" : uLanguageCode[nSIdx - 1], uLanguageCode[(oldDIdx=nDIdx)], oldText = queryStr, quickSearchDiv.offsetLeft, quickSearchDiv.offsetTop + quickSearchDiv.offsetHeight);
}
var hintText=document.createElement("p");
hintText.id = "gt_prefs_hintText";
hintText.innerText=translatorSettingLanguage===0 ? "输入要查询的单词或句子(按回车进行查询,按ESC退出查询):":"Enter the word or sentence you want to query ( Press enter to query, ESC to exit or clear.) :";
var srcLanguageSelector=document.createElement("select");
srcLanguageSelector.id = "gt_prefs_srcLanguageSelector";
var divHtml=`<option value="0" ${currentSourceLanguage < 0 ? 'selected="selected"' : ''}>${translatorSettingLanguage===0 ? "自动检测":"Auto Detect"}</option>;`;
for (let i = 0; i < uLanguageCode.length; i++) {
if (currentSourceLanguage === i) divHtml += `<option value="${i}" selected="selected">${uLanguageNames[translatorSettingLanguage][i]}-${uRegionNames[translatorSettingLanguage][i]}(${uLanguageCode[i]})</option>`;
else divHtml += `<option value="${i}">${uLanguageNames[translatorSettingLanguage][i]}-${uRegionNames[translatorSettingLanguage][i]}(${uLanguageCode[i]})</option>`;
}
srcLanguageSelector.innerHTML=divHtml;
var dstLanguageSelector=document.createElement("select");
dstLanguageSelector.id="gt_prefs_dstLanguageSelector";
divHtml = "";
for (let i = 0; i < uLanguageCode.length; i++) {
if (currentTranslateLanguage === i) divHtml += `<option value="${i}" selected="selected">${uLanguageNames[translatorSettingLanguage][i]}-${uRegionNames[translatorSettingLanguage][i]}(${uLanguageCode[i]})</option>`;
else divHtml += `<option value="${i}">${uLanguageNames[translatorSettingLanguage][i]}-${uRegionNames[translatorSettingLanguage][i]}(${uLanguageCode[i]})</option>`;
}
dstLanguageSelector.innerHTML=divHtml;
var languageChooseParagraph= document.createElement("p");
languageChooseParagraph.appendChild(document.createTextNode(translatorSettingLanguage === 0 ? "源语言:" : "Source:"));
languageChooseParagraph.appendChild(srcLanguageSelector);
languageChooseParagraph.appendChild(document.createTextNode(translatorSettingLanguage === 0 ? "==>目标语言:" : "==>Destination:"));
languageChooseParagraph.appendChild(dstLanguageSelector);
var btnQuery=document.createElement("button");
btnQuery.onclick=queryIt;
btnQuery.innerText = translatorSettingLanguage === 0 ? "查询" : "Query";
var btnExit=document.createElement("button");
btnExit.onclick=function (e) {
quickSearchDiv.style.display = "none";
}
btnExit.innerText = translatorSettingLanguage === 0 ? "退出" : "Exit";
var btnParagraph=document.createElement("p");
btnParagraph.appendChild(btnQuery);
btnParagraph.appendChild(btnExit);
quickSearchDiv.appendChild(hintText);
quickSearchDiv.appendChild(searchBox);
quickSearchDiv.appendChild(languageChooseParagraph);
quickSearchDiv.appendChild(btnParagraph);
searchBox.focus();
return;
}
if (quickSearchDiv.style.display === "none"){
quickSearchDiv.style.display = "block";
searchBox.focus();
}
else quickSearchDiv.style.display="none";
}
function toggleQuickSearch(e) {
if (e.keyCode === hotKey_Code_forQS && (hotKey_Alt_forQS ? e.altKey : e.altKey === false) && (hotKey_Ctrl_forQS ? e.ctrlKey : e.ctrlKey === false)) {
showQuickSearch();
}
}
function GetTranslation(queryStr, mx, my) {
currentTranslateLanguage = parseInt(GM_getValue(targetTranslateLanguageNameInStorage, defaultTranslateLanguage));
currentSourceLanguage = parseInt(GM_getValue(sourceTranslateLanguageNameInStorage, defaultSourceLanguage));
queryStr=optimizeQueryString(queryStr);
if (lingoes_isEnabled){
var url=null;
if (lingoes_showingWay<2){
if (!/\s+/gi.test(queryStr)) {
switch(lingoes_showingWay){
case 0:
url = `http://${lingoes_serverIp}:${lingoes_serverPort}/lingoes?cmd=mini_search&text=${encodeURI(queryStr)}&pos_x=${mx}&pos_y=${my}`;
break;
case 1:
url = `http://${lingoes_serverIp}:${lingoes_serverPort}/lingoes?cmd=main_search&text=${encodeURI(queryStr)}&pos_x=${mx}&pos_y=${my}`;
break;
}
}
}
else{
url = `http://${lingoes_serverIp}:${lingoes_serverPort}/lingoes?cmd=main_translator&text=${encodeURI(queryStr)}&pos_x=${mx}&pos_y=${my}`;
}
if (url!=null){
GM_xmlhttpRequest({
method:"GET",
url:url,
headers: {
"User-Agent": UA,
"Accept": "application/json"
},
onerror: function (err) {
alert(translatorSettingLanguage===0 ? "与灵格斯API服务器的通信失败,已自动禁用灵格斯词典调用功能!\n请保证您的电脑安装有灵格斯词典软件,并在设置中启用了API服务器,且正确的设置了IP与端口地址!":"Failed to fetch from lingoes API sever, disable the query from lingoes automatically!\n Please ensure you got a lingoes, and enabled the API server from it's setting, and sets the right ip and port number in the setting of this plugin.");
console.log("failed to fetch from lingoes sever, disable lingoes server automatically.",err);
saveLingoesSettings(false,lingoes_showingWay,lingoes_serverIp,lingoes_serverPort);
}
});
}
}
translateIt(currentSourceLanguage < 0 ? "auto" : uLanguageCode[currentSourceLanguage], uLanguageCode[currentTranslateLanguage], queryStr, mx, my);
}
function checkIsSoundIconClicked(e) {
return (e.target.className === "gt_prefs_img_for_play_sound"||e.target.id==="gt_prefs_show_or_hide_examples");
//return e.target.id === "gt_prefs_img_for_play_sound1" || e.target.id === "gt_prefs_img_for_play_sound2" || e.target.id === "gt_prefs_img_for_play_sound3";
}
function mouseDown(e){
window.addEventListener('mousemove', divMove, true);
isToolBarMoving=!0;
var div=$("translatorDiv");
tBarOffsetX=e.clientX-div.offsetLeft;
tBarOffsetY=e.clientY-div.offsetTop;
}
function divMove(e){
var div = $("translatorDiv");
div.style.position = 'absolute';
let xpos=e.clientX - tBarOffsetX;
let ypos=e.clientY - tBarOffsetY;
div.style.top = ypos + "px";
div.style.left = xpos + "px";
}
function optimizeQueryString(t){
return t.replace('-\n', '').replace('\n', ' ').replace(/[&]+/g, currentSourceLanguage >= 0 && currentSourceLanguage < 3 ? "和" : " and ").replace(/[\+]+/g, currentSourceLanguage >= 0 && currentSourceLanguage < 3 ? "加" : " plus ");
}
function googleTranslate(e) {
if(isToolBarMoving){
window.removeEventListener("mousemove", divMove, true);
isToolBarMoving=!1;
return;
}
if (checkIsSoundIconClicked(e))return;
var selectedText = window.getSelection().toString().trim();
if(selectedText){
if(!isEnableRealtimeTranslationMode){
let rti=realtimeTranslatorUI.get();
rti.style.top=(e.clientY+15)+"px";
rti.style.left=(e.clientX+15)+"px";
translatorDivUI.hide();
rti.style.display="block";
realtimeTranslatorUI.destroy();
realtimeTranslatorUI.delay();
return;
}
if(isTranslatorDisabledTemporarily){
let ci=createTranslatorIcon();
ci.style.top=(e.clientY+15)+"px";
ci.style.left=(e.clientX+15)+"px";
translatorDivUI.hide();
ci.style.display="block";
setTimeout(function(){
createTranslatorIcon().style.display="none";
},5000);
return;
}
if (selectedText === oldText && $('iconPrevious').style.display==="block"){
translatorDivUI.show();
return;
}
oldText = selectedText;
searchedTextProcessor.addText(oldText);
GetTranslation(oldText, e.clientX, e.clientY);
}
else{
if(!isPinned)translatorDivUI.hide();
if(!isEnableRealtimeTranslationMode) realtimeTranslatorUI.hide();
if(isTranslatorDisabledTemporarily)createTranslatorIcon().style.display="none";
}
}
var translatorDivUI={
show:function(){
var translatorDiv = $("translatorDiv");
if(translatorDiv){
translatorDiv.style.display="block";
}
},
hide:function(){
var translatorDiv = $("translatorDiv");
if(translatorDiv){
translatorDiv.style.display="none";
}
}
};
var timerHide=-1;
function popup(mx, my, result) {
loadingIconUI.hide();
var translatorDiv = $("translatorDiv");
var contentDiv=$("contentDiv");
var clearTimerHide=function () {
if (timerHide > 0){
clearTimeout(timerHide);
timerHide=-1;
}
}
if (!translatorDiv){
translatorDiv = document.createElement('div');
translatorDiv.id = "gt_prefs_translatorDiv";
document.body.appendChild(translatorDiv);
translatorDiv.style.color = "black";
translatorDiv.style.fontSize="12px";
translatorDiv.style.textAlign = "left";
translatorDiv.style.display = "block";
translatorDiv.style.position = "absolute";
translatorDiv.style.background = "radial-gradient(ellipse at center, #EDF4FC 0%,#e3edf9 60%,#c9d7e5 80%, #c3cedb 90%, #bac6d3 95%, #adb5bc 100%)";
translatorDiv.style.borderRadius = "5px";
translatorDiv.style.boxShadow = "-2px 0px 9px 5px #898D91";
translatorDiv.style.opacity = "0.9";
translatorDiv.style.padding="5px";
translatorDiv.style.margin="0";
translatorDiv.style.zIndex = 900;
translatorDiv.style.width = "400px";
translatorDiv.style.height="auto";
translatorDiv.style.wordWrap = "break-word";
translatorDiv.onmouseleave=function (e) {
if(!isPinned){
timerHide=setTimeout(function(){translatorDiv.style.display = "none"},10000);
}
}
translatorDiv.onmouseenter= clearTimerHide;
GM_addStyle(`
.gt_prefs_img_for_play_sound{width:16px;height:16px;}
.gt_prefs_translator_div_li{list-style:none;margin:0;padding:2px;background:none;width:100%;color:inherit;font-family:Tahoma;font-size:14px;font-weight:bold;}
.gt_prefs_translator_div_li b{color:Green;}
.gt_prefs_translator_div_li a{color:Blue;}
.gt_prefs_translator_div_li span{color:#39538c;font-weight:normal;}
.gt_prefs_translator_div_li p{color:Red;font-size:16px;}
.gt_prefs_translator_div_li em{color:#131930;font-style:normal;}
.gt_prefs_translator_div_li h1{color:#771b1b;font-size:18px;}
#gt_prefs_sample_ul li{font-weight:normal;list-style-type:upper-roman;}
.gt_prefs_main_word{font-weight:bold;color:#116f89;};
`);
let tBar=document.createElement('div');
tBar.id="gt_prefs_tBar";
tBar.style.width="100%";
tBar.style.height="20px";
tBar.style.borderRadius="5px";
tBar.onmouseenter=function(e){
tBar.style.background="linear-gradient(90deg, #ABCDEF 0%, #ABCDEF 40%, #E3EDF9 50%,#C3CEDB 100%)";
tBar.style.opacity="0.8";
toolTip.show(this,e);
}
tBar.onmouseout=function(e){
tBar.style.background="transparent";
toolTip.hide();
}
on(tBar,'mousedown', mouseDown);
let iconAccurate=document.createElement('img');
let iconNonAccurate=document.createElement('img');
let iconRealtime=document.createElement('img');
let iconNotRealtime=document.createElement('img');
let iconForbidden=document.createElement('img');
let iconSimplified=document.createElement('img');
let iconDetailed=document.createElement('img');
let iconPrevious=document.createElement('img');
let iconSetting=document.createElement('img');
let iconSearch=document.createElement('img');
let iconClose=document.createElement('img');
let iconNext=document.createElement('img');
let iconCopy=document.createElement('img');
let iconPin=document.createElement('img');
tBar.style.margin=iconAccurate.style.margin=iconNonAccurate.style.margin=iconRealtime.style.margin=iconNotRealtime.style.margin=iconForbidden.style.margin=iconSimplified.style.margin=iconDetailed.style.margin=iconPrevious.style.margin=iconSetting.style.margin=iconSearch.style.margin=iconClose.style.margin=iconNext.style.margin=iconCopy.style.margin=iconPin.style.margin="0";
tBar.style.padding=iconAccurate.style.padding=iconNonAccurate.style.padding=iconRealtime.style.padding=iconNotRealtime.style.padding=iconForbidden.style.padding=iconSimplified.style.padding=iconDetailed.style.padding=iconPrevious.style.padding=iconSetting.style.padding=iconSearch.style.padding=iconClose.style.padding=iconNext.style.padding=iconCopy.style.padding=iconPin.style.padding="0";
iconRealtime.setAttribute('src',realtimeIconBase64Data);
iconAccurate.setAttribute('src',accurateIconBase64Data);
iconNonAccurate.setAttribute('src',nonAccurateIconBase64Data);
iconNotRealtime.setAttribute('src',notRealtimeIconBase64Data);
iconForbidden.setAttribute('src',forbiddenIconBase64Data);
iconSimplified.setAttribute('src',simplifiedIconBase64Data);
iconDetailed.setAttribute('src',detailedIconBase64Data);
iconPrevious.setAttribute('src',previousIconBase64Data);
iconSetting.setAttribute('src',settingIconBase64Data);
iconSearch.setAttribute('src',searchIconBase64Data);
iconClose.setAttribute('src',closeIconBase64Data);
iconNext.setAttribute('src',nextIconBase64Data);
iconCopy.setAttribute('src',copyIconBase64Data);
iconPin.setAttribute('src',pinIconBase64Data);
iconNonAccurate.width=iconAccurate.width=iconForbidden.width=iconRealtime.width=iconNotRealtime.width=iconSimplified.width=iconDetailed.width=iconPrevious.width=iconSetting.width=iconSearch.width=iconClose.width=iconNext.width=iconCopy.width=iconPin.width=20;
iconNonAccurate.height=iconAccurate.height=iconForbidden.height=iconRealtime.height=iconNotRealtime.height=iconSimplified.height=iconDetailed.height=iconPrevious.height=iconSetting.height=iconSearch.height=iconClose.height=iconNext.height=iconCopy.height=iconPin.height=20;
iconForbidden.style.cssFloat=iconAccurate.style.cssFloat=iconNonAccurate.style.cssFloat=iconRealtime.style.cssFloat=iconNotRealtime.style.cssFloat=iconSimplified.style.cssFloat=iconDetailed.style.cssFloat=iconPrevious.style.cssFloat=iconSetting.style.cssFloat=iconSearch.style.cssFloat=iconClose.style.cssFloat=iconNext.style.cssFloat=iconCopy.style.cssFloat=iconPin.style.cssFloat="right";
iconForbidden.id="gt_prefs_iconForbidden";
iconForbidden.style.border=(isEnabled ? "none":"1px solid red");
iconForbidden.onclick=function(e){
isTranslatorDisabledTemporarily=!0;
$("translatorDiv").style.display="none";
}
iconForbidden.onmouseenter=function(e){
toolTip.show(this,e);
}
iconForbidden.onmouseleave=function(e){
toolTip.hide();
}
iconAccurate.id="gt_prefs_iconAccurate";
iconAccurate.onclick=function(e){
this.style.display="none";
saveModeSettings(isEnableAccurateModeConfigString,(isEnableAccurateMode=false));
$("iconNonAccurate").style.display="block";
}
iconAccurate.onmouseenter=function(e){
toolTip.show(this,e);
}
iconAccurate.onmouseleave=function(e){
toolTip.hide();
}
iconNonAccurate.id="gt_prefs_iconNonAccurate";
iconNonAccurate.onclick=function(e){
this.style.display="none";
saveModeSettings(isEnableAccurateModeConfigString,(isEnableAccurateMode=true));
$("iconAccurate").style.display="block";
}
iconNonAccurate.onmouseenter=function(e){
toolTip.show(this,e);
}
iconNonAccurate.onmouseleave=function(e){
toolTip.hide();
}
isEnableAccurateMode ? iconNonAccurate.style.display="none":iconAccurate.style.display="none";
iconRealtime.id="gt_prefs_iconRealtime";
iconRealtime.onclick=function(e){
saveModeSettings(isEnableRealtimeTranslationModeConfigString,isEnableRealtimeTranslationMode=false);
this.style.display="none";
$("iconNotRealtime").style.display="block";
$("iconForbidden").style.display="none";
}
iconRealtime.onmouseenter=function(e){
toolTip.show(this,e);
}
iconRealtime.onmouseleave=function(e){
toolTip.hide();
}
iconNotRealtime.id="gt_prefs_iconNotRealtime";
iconNotRealtime.onclick=function(e){
saveModeSettings(isEnableRealtimeTranslationModeConfigString,isEnableRealtimeTranslationMode=true);
this.style.display="none";
$("iconRealtime").style.display="block";
$("iconForbidden").style.display="block";
}
iconNotRealtime.onmouseenter=function(e){
toolTip.show(this,e);
}
iconNotRealtime.onmouseleave=function(e){
toolTip.hide();
}
if(isEnableRealtimeTranslationMode){
iconNotRealtime.style.display="none";
}
else{
iconRealtime.style.display="none";
iconForbidden.style.display="none";
}
iconSimplified.id="gt_prefs_iconSimplified";
iconSimplified.onclick=function(e){
this.style.display="none";
$("iconDetailed").style.display="block";
saveModeSettings(isEnableSimpleModeConfigString,(isEnableSimpleMode=false));
}
iconSimplified.onmouseenter=function(e){
toolTip.show(this,e);
}
iconSimplified.onmouseleave=function(e){
toolTip.hide();
}
iconDetailed.id="gt_prefs_iconDetailed";
iconDetailed.onclick=function(e){
this.style.display="none";
$("iconSimplified").style.display="block";
saveModeSettings(isEnableSimpleModeConfigString,(isEnableSimpleMode=true));
}
iconDetailed.onmouseenter=function(e){
toolTip.show(this,e);
}
iconDetailed.onmouseleave=function(e){
toolTip.hide();
}
isEnableSimpleMode==!1 ? iconSimplified.style.display="none":iconDetailed.style.display="none";
iconPrevious.id="gt_prefs_iconPrevious";
iconPrevious.style.display="none";
iconPrevious.onmouseenter=function(e){
toolTip.show(this,e);
}
iconPrevious.onmouseleave=function(e){
toolTip.hide();
}
iconPrevious.onclick=function(e){
searchedTextProcessor.showPreviousText();
}
iconNext.id="gt_prefs_iconNext";
iconNext.style.display="none";
iconNext.onmouseenter=function(e){
toolTip.show(this,e);
}
iconNext.onmouseleave=function(e){
toolTip.hide();
}
iconNext.onclick=function(e){
searchedTextProcessor.showNextText();
}
iconSearch.id="gt_prefs_iconSearch";
iconSearch.onmouseenter=function(e){
toolTip.show(this,e);
}
iconSearch.onmouseleave=function(e){
toolTip.hide();
}
iconSearch.onclick=function(e){
showQuickSearch();
}
iconSetting.id="gt_prefs_iconSetting";
iconSetting.onmouseenter=function(e){
toolTip.show(this,e);
}
iconSetting.onmouseleave=function(e){
toolTip.hide();
}
iconSetting.onclick=function(e){
setup();
$("setup").style.display= $("setup").style.display==="block" ? "none":"block";
}
iconClose.id="gt_prefs_iconClose";
iconClose.onmouseenter=function(e){
toolTip.show(this,e);
}
iconClose.onmouseleave=function(e){
toolTip.hide();
}
iconClose.onclick=function(e){
$("translatorDiv").style.display="none";
}
iconCopy.id="gt_prefs_iconCopy";
iconCopy.onmouseenter=function(e){
toolTip.show(this,e);
}
iconCopy.onmouseleave=function(e){
toolTip.hide();
}
iconCopy.onclick=function(e){
if(window.getSelection){
let range = document.createRange();
range.selectNode($("contentDiv"));
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand("Copy",false,null);
window.getSelection().removeAllRanges();
alert(translatorSettingLanguage===0 ? "复制成功":"Copy Done");
}
}
iconPin.id="gt_prefs_iconPin";
iconPin.style.border="1px none";
iconPin.onmouseenter=function(e){
toolTip.show(this,e);
}
iconPin.onmouseleave=function(e){
toolTip.hide();
}
iconPin.onclick=function(e){
iconPin.style.border=((isPinned=!isPinned) ? "solid":"none");
}
tBar.appendChild(iconClose);
tBar.appendChild(iconPin);
tBar.appendChild(iconSetting);
tBar.appendChild(iconSearch);
tBar.appendChild(iconForbidden);
tBar.appendChild(iconSimplified);
tBar.appendChild(iconDetailed);
tBar.appendChild(iconAccurate);
tBar.appendChild(iconNonAccurate);
tBar.appendChild(iconSimplified);
tBar.appendChild(iconRealtime);
tBar.appendChild(iconNotRealtime);
tBar.appendChild(iconCopy);
tBar.appendChild(iconNext);
tBar.appendChild(iconPrevious);
translatorDiv.appendChild(tBar);
contentDiv=document.createElement("div");
contentDiv.id="gt_prefs_contentDiv";
contentDiv.style.margin=contentDiv.style.padding="0";
contentDiv.onclick = function (e) {
if(!isPinned){
if(!checkIsSoundIconClicked(e))translatorDiv.style.display="none";
}
}
translatorDiv.appendChild(contentDiv);
}
else{
contentDiv.innerHTML="";
clearTimerHide();
translatorDiv.style.display="block";
}
// parse
var resultTxt = getTargetAnswer(result);
if (resultTxt) createShower();
else {
console.log("resultTxt is null!");
return;
}
// main window
// first insert into dom then there is offsetHeight!IMPORTANT!
if(!isPinned){
translatorDiv.style.left = mx + "px";
if (mx + 400 + 30 >= window.innerWidth) {
translatorDiv.style.left = parseInt(translatorDiv.style.left) - 400 + "px";
}
if(translatorDiv.offsetHeight>=window.innerHeight){
translatorDiv.style.height=(window.innerHeight/2)+"px";
translatorDiv.style.overflow="auto";
}
else{
translatorDiv.style.height="auto";
translatorDiv.style.overflow="visible";
}
translatorDiv.style.top=(my>(window.innerHeight-translatorDiv.offsetHeight) ? window.innerHeight-translatorDiv.offsetHeight+self.pageYOffset:my+self.pageYOffset)+"px";
}
function createShower() {
var el = null;
switch (resultTxt[0]) {
case ANS_TYPE_ACCURATE:
el = document.createElement("div");
el.innerHTML=resultTxt[1];
el.style.fontSize="14px";
el.style.fontWeight="normal";
el.style.color="Green";
break;
case ANS_TYPE_ZDIC_HTML:
el = document.createElement("div");
el.id="shiyi_content";
el.innerHTML=zdictStyle+resultTxt[1];
el.style.height = "500px";
el.style.width="100%";
el.style.margin = "0";
el.style.padding = "0";
el.style.border="none";
el.style.color="black";
el.style.textDecoration="none";
el.style.overflow = "auto";
break;
case ANS_TYPE_YOUDAO_SENTENCE:
el = document.createElement('ul');
el.style.margin = "0";
el.style.padding = "0";
resultTxt[1].translation.map(function (trans) {
var li = document.createElement('li');
li.className="gt_prefs_translator_div_li";
li.appendChild(document.createTextNode(trans));
el.appendChild(li);
});
break;
case ANS_TYPE_YOUDAO_WORD:
el = document.createElement("div");
el.style.fontSize = "12px";
el.style.fontFamily="Tahoma";
el.style.margin = "0";
el.style.padding = "0";
var basic = resultTxt[1].basic;
var header = document.createElement('p');
// header
var span = document.createElement('span');
span.innerHTML = resultTxt[1].query;
header.appendChild(span);
// phonetic if there is
var phonetic = basic.phonetic;
if (phonetic) {
var phoneticNode = document.createElement('span');
phoneticNode.innerHTML = '[' + phonetic + '] ';
phoneticNode.style.cursor = "pointer";
header.appendChild(phoneticNode);
var img3 = document.createElement('img');
img3.setAttribute('src', speakerIconBase64Data);
img3.className = "gt_prefs_img_for_play_sound";
img3.onclick = function (e) {
if (e.target === img3) {
e.stopPropagation();
YouDaoPlay(resultTxt[1].query);
}
}
header.appendChild(img3);
}
header.style.color = "darkBlue";
header.style.margin = "0";
header.style.padding = "0";
span.style.fontweight = "900";
span.style.color = "black";
el.appendChild(header);
var hr = document.createElement('hr');
hr.style.margin = "0";
hr.style.padding = "0";
hr.style.height = "1px";
hr.style.borderTop = "dashed 1px black";
el.appendChild(hr);
var ul = document.createElement('ul');
// ul style
ul.style.margin = "0";
ul.style.padding = "0";
basic.explains.map(function (trans) {
var li = document.createElement('li');
li.style.listStyle = "none";
li.style.margin = "0";
li.style.padding = "0";
li.style.background = "none";
li.style.color = "inherit";
li.appendChild(document.createTextNode(trans));
ul.appendChild(li);
});
el.appendChild(ul);
break;
case ANS_TYPE_GOOGLE_RESULT:
el=processGoogleResult(JSON.parse(resultTxt[1]));
break;
default:
return;
}
contentDiv.appendChild(el);
}
}
function processGoogleResult(arr){
let el = document.createElement('ul');
el.className="gt_prefs_translator_div_li";
el.style.padding = el.style.margin = "0";
let z={
sb_details:["【翻译】","<< Translation >>"],
sb_meaning:["【释义】","<< Meaning >>"],
sb_suggestedTranslation:["【可能的翻译】","<< Other Translation >>"],
sb_more:["【点击显示例句】","<< Click to show examples >>"],
sb_hideMore:["【点击隐藏例句】","<< Click to hide examples >>"],
ce:function(tpe){
let n=document.createElement(tpe);
if(tpe==="li")n.className = "gt_prefs_translator_div_li";
return n;
},
ap:function(elm){
if(elm){
el.appendChild(elm);
return el;
}
return null;
},
app:function(els,eld){
if(els){
if(eld){
els.appendChild(eld);
return els;
}
}
return null;
},
aps:function(ela,tpe,innerStr){
if(innerStr){
if(tpe==="pr"){
innerStr="["+innerStr+"]";
tpe="a";
}
let s=z.ce(tpe);
s.style.padding=s.style.margin="0";
s.innerHTML= innerStr;
ela.appendChild(s);
return ela;
}
return null;
},
cv:function(txt,lan){
if(txt){
var img1 = z.ce('img');
img1.setAttribute('src', speakerIconBase64Data);
img1.className = "gt_prefs_img_for_play_sound";
img1.onclick=function () {
playTTS(lan,txt);
}
return img1;
}
},
apv:function(ela,txt,lan){
if(txt){
ela.appendChild(z.cv(txt,lan));
return ela;
}
return null;
},
gor:function(arr,el,isShowTitle){
if(arr[5]){
if(arr[5][0][2]){
if(isShowTitle)z.app(el,z.aps(z.ce("li"),"h1",z.sb_suggestedTranslation[translatorSettingLanguage]));
for(let i=0;i<arr[5][0][2].length;i++){
let lis=z.ce("li");
lis.innerHTML=`<i>${i+1}. </i>`;
for(let ii=0;ii<arr[5].length;ii++){
if(arr[5][ii][2]){
if(arr[5][ii][2][i]){
z.aps(lis,"span",arr[5][ii][2][i][0]);
}
}
}
z.app(el,lis);
}
return true;
}
}
return false;
}
};
if(arr){
let len=arr.length;
if(len>8){
if(isEnableSimpleMode)if(z.gor(arr,el,false))return el;
if(arr[0]){
let totalRet=arr[0].length-1;
let b1=new Array(totalRet);
let b2=new Array(totalRet);
let v1=new Array(totalRet);
let v2=new Array(totalRet);
for(let k=0;k<totalRet;k++){
if(arr[0][k]){
if(arr[0][k][1]){
b1[k] = z.ce("b");
b1[k].innerHTML=arr[0][k][1];
v1[k]=z.cv(arr[0][k][1],arr[2]);
}
if(arr[0][k][0]){
b2[k]=z.ce("b");
b2[k].innerHTML=arr[0][k][0];
v2[k]=z.cv(arr[0][k][0],curTarLanForSpeaker);
}
}
}
let li1=z.ce("li");
if(isEnableSimpleMode){
for(let i=0;i<totalRet;i++){
z.app(li1,b2[i]);
}
z.ap(li1);
return el;
}
let li2=z.ce("li");
switch(totalRet){
case -1:
console.log("Error occured. Google result return an unnormal data.");
break;
case 0:
if(arr[0][0]){
if(arr[0][0][1]){
let l1=z.ce("li");
z.aps(l1,"b",arr[0][0][1]);
z.apv(l1,arr[0][0][1],arr[2]);
z.ap(l1);
}
if(arr[0][0][0]){
let l2=z.ce("li");
z.aps(l2,"b",arr[0][0][0]);
z.apv(l2,arr[0][0][0],curTarLanForSpeaker);
z.ap(l2);
}
}
break;
case 1:
z.app(li1,b1[0]);
z.app(li2,b2[0]);
if(arr[0][1]){
if(arr[0][1][0]){
z.app(li1,v1[0]);
z.aps(li1,"b",arr[0][1][1]);
z.apv(li1,arr[0][1][1],arr[2]);
z.app(li2,v2[0]);
z.aps(li2,"b",arr[0][1][0]);
z.apv(li2,arr[0][1][0],curTarLanForSpeaker);
z.ap(li1);
z.ap(li2);
break;
}
z.aps(li1,"pr",arr[0][1][3]);
z.aps(li2,"pr",arr[0][1][2]);
}
z.ap(z.app(li1,v1[0]));
z.ap(z.app(li2,v2[0]));
break;
default:
for(let k=0;k<totalRet;k++){
z.app(li1,b1[k]);
z.app(li1,v1[k]);
z.app(li2,b2[k]);
z.app(li2,v2[k]);
}
if(arr[0][totalRet]){
z.ap(li1);
z.ap(z.aps(z.ce("p"),"pr",arr[0][totalRet][3]));
z.ap(li2);
z.ap(z.aps(z.ce("p"),"pr",arr[0][totalRet][2]));
}
else{
z.ap(li1);
z.ap(li2);
}
break;
}
}
if(arr[1]){
z.ap(z.aps(z.ce("li"),"h1",z.sb_details[translatorSettingLanguage]));
for(let i=0;i<arr[1].length;i++){
let lit=z.ce("li");
z.aps(lit,"p",arr[1][i][0]);
for(let ii=0;ii<arr[1][i][2].length;ii++){
z.aps(lit,"em",arr[1][i][2][ii][0]);
let t="("
for(let iii=0;iii<arr[1][i][2][ii][1].length;iii++){
t+=arr[1][i][2][ii][1][iii]+", ";
}
t=t.substr(0,t.length-2)+"); ";
z.aps(lit,"span",t);
}
z.ap(lit);
}
}
z.gor(arr,el,true);
}
if(len>12){
if(arr[12]){
z.ap(z.aps(z.ce("li"),"h1",z.sb_meaning[translatorSettingLanguage]));
for(let o=0;o<arr[12].length;o++){
z.ap(z.aps(z.ce("li"),"p",arr[12][o][0]));
for(let oo=0;oo<arr[12][o][1].length;oo++){
z.ap(z.aps(z.ce("li"),"b",arr[12][o][1][oo][0]));
if(arr[12][o][1][oo][2])z.ap(z.aps(z.ce("li"),"span",arr[12][o][1][oo][2]));
}
}
}
}
if(len>13){
if(arr[13]){
let liSample=z.ce("li");
liSample.id="gt_prefs_liSample";
liSample.onclick=function(e){
let divSample=$('dSample');
let lSample=$('liSample');
if(divSample){
if(divSample.style.display==="none"){
divSample.style.display="block";
liSample.innerHTML=`<h1 id="gt_prefs_show_or_hide_examples">${z.sb_hideMore[translatorSettingLanguage]}<h1>`;
}
else{
divSample.style.display="none";
liSample.innerHTML=`<h1 id="gt_prefs_show_or_hide_examples">${z.sb_more[translatorSettingLanguage]}<h1>`;
}
}
}
liSample.innerHTML=`<h1 id="gt_prefs_show_or_hide_examples">${z.sb_more[translatorSettingLanguage]}<h1>`;
z.ap(liSample);
let dSample=z.ce("li");
dSample.id="gt_prefs_dSample";
let ulSample=z.ce("ul");
ulSample.id="gt_prefs_sample_ul";
for(let j=0;j<arr[13][0].length;j++){
z.aps(ulSample,"li",arr[13][0][j][0]);
}
dSample.appendChild(ulSample);
z.ap(dSample);
dSample.style.display="none";
}
}
return el;
}
return null;
}
var searchedTextProcessor={
addText:function(txt){
if(searchedTextProcessor.isTextNotExisted(txt)){
searchedTextCache.push(txt);
searchedTextIndex=searchedTextCache.length-1;
let iconNext=$('iconNext');
if(iconNext)iconNext.style.display="none";
}
if(searchedTextIndex>0){
let iconPrevious=$('iconPrevious');
if(iconPrevious)iconPrevious.style.display="block";
}
},
getCurrentText:function(){
return searchedTextCache[searchedTextIndex];
},
isTextNotExisted:function(txt){
for(let n=0;n<searchedTextCache.length;n++){
if(searchedTextCache[n]===txt)return false;
}
return true;
},
showTranslation:function(){
let translatorDiv=document.getElementById('gt_prefs_translatorDiv');
GetTranslation(searchedTextCache[searchedTextIndex],translatorDiv.offsetLeft,translatorDiv.offsetTop);
},
showPreviousText:function(){
let iconPrevious=document.getElementById('gt_prefs_iconPrevious');
let iconNext=document.getElementById('gt_prefs_iconNext');
if(--searchedTextIndex<0){
iconPrevious.style.display="none";
searchedTextIndex=0;
}
else{
if(searchedTextIndex===0){
iconPrevious.style.display="none";
}
if(searchedTextIndex<searchedTextCache.length-1){
iconNext.style.display="block";
}
this.showTranslation();
}
},
showNextText:function(){
let iconPrevious=document.getElementById('gt_prefs_iconPrevious');
let iconNext=document.getElementById('gt_prefs_iconNext');
if(++searchedTextIndex>searchedTextCache.length-1){
iconNext.style.display="none";
searchedTextIndex=searchedTextCache.length-1;
}
else{
if(searchedTextIndex===searchedTextCache.length-1){
iconNext.style.display="none";
}
if(searchedTextIndex>0){
iconPrevious.style.display="block";
}
this.showTranslation();
}
}
};
function checkIsWordOrNot(txt,maxWordLength, isChineseWord) {
if (isChineseWord)return txt.length <= maxWordLength && /^([\u4E00-\u9FA5]|[\uFF00-\uFF20]|[\u3000-\u301C])+$/g.test(txt);
else return txt.length <= maxWordLength && !/\s+/gi.test(txt);
}
function translateIt(srcLanguage, dstLanguage, queryStr, mx, my) {
queryStr = queryStr.trim();
if (queryStr === "") return;
curTarLanForSpeaker=dstLanguage;
var targetMd5 = MD5(queryStr, srcLanguage + dstLanguage, null);
var sps = searchInTranslateCache(targetMd5);
if (sps) {
popup(mx, my, sps);
}
else {
loadingIconUI.show({"mx":mx,"my":my});
if(isEnableAccurateMode){
accurateData.md5=targetMd5;
accurateData.mx=mx;
accurateData.my=my;
accurateData.dy=maxTimesToDestroy;
accurateData.wh=null;
}
var googleCallBackFunc = function (arrayTxt) {
//console.log("返回值为:" + arrayTxt);
if (arrayTxt != 'undefined' && arrayTxt != null) {
transCache.push([CACHE_TYPE_GOOGLE_RESULT, arrayTxt]);
transMd5Cache.push(targetMd5);
popup(mx, my, [CACHE_TYPE_GOOGLE_RESULT, arrayTxt]);
}
};
var youdaoCallBackFunc=function (repArray, bIsSuccess) {
if (bIsSuccess) {
if (repArray != null || repArray != "undefined") {
var dictJson = JSON.parse(repArray);
transCache.push([dictJson.basic ? CACHE_TYPE_YOUDAO_WORD:CACHE_TYPE_YOUDAO_SENTENCE, dictJson]);
transMd5Cache.push(targetMd5);
popup(mx, my, [dictJson.basic ? CACHE_TYPE_YOUDAO_WORD : CACHE_TYPE_YOUDAO_SENTENCE, dictJson]);
return;
}
}
GoogleRequest(queryStr, srcLanguage, dstLanguage, googleCallBackFunc);
};
var getYoudaoTranslation=function (maxWordLength) {
if (youdao_isEnabled) {
if (youdao_isOnlyForSingleWord) {
if (checkIsWordOrNot(queryStr, maxWordLength, false)) YoudaoRequest(queryStr, youdaoCallBackFunc);
else GoogleRequest(queryStr, srcLanguage, dstLanguage, googleCallBackFunc);
}
else YoudaoRequest(queryStr, youdaoCallBackFunc);
}
else GoogleRequest(queryStr, srcLanguage, dstLanguage, googleCallBackFunc);
};
switch (dstLanguage){
case "zh-cn":
case "zh-tw":
case "zh-hk":
//if query string is chinese word with max four characters
if (checkIsWordOrNot(queryStr, 4, true)) {
ZdicRequest(queryStr, function (repHtml, finalUrl, bIsSuccess) {
if (bIsSuccess) {
if (repHtml != null && repHtml != "undefined" && repHtml.trim()!="") {
transCache.push([CACHE_TYPE_ZDIC_HTML, repHtml]);
transMd5Cache.push(targetMd5);
popup(mx, my, [CACHE_TYPE_ZDIC_HTML, repHtml]);
return;
}
}
getYoudaoTranslation(8);
});
return;
}
else getYoudaoTranslation(8);
return;
case "en-hk":
case "en-us":
case "en-gb":
case "en-ww":
case "en-ca":
case "en-au":
//if translate from Chinese to English
if (/([\u4E00-\u9FA5]|[\uFF00-\uFF20]|[\u3000-\u301C])+/g.test(queryStr)){
getYoudaoTranslation(30);
return;
}
break;
default:
break;
}
GoogleRequest(queryStr, srcLanguage, dstLanguage, googleCallBackFunc);
}
}
function playSound(buffer) {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var source = audioContext.createBufferSource();
source.buffer = buffer;
source.connect(audioContext.destination);
source.start(0);
}
function YouDaoPlay(word) {
var txtMd5 = MD5(word, "YouDaoEnToCn" + CACHE_TYPE_YOUDAO_WORD, null);
var buf = searchInTransSoundCache(txtMd5);
if (buf) {
playSound(buf);
return;
}
GM_xmlhttpRequest({
method: "GET",
url: `https://dict.youdao.com/dictvoice?type=2&audio=${encodeURI(word)}`,
responseType: 'arraybuffer',
onload: function(resp) {
try {
audioContext.decodeAudioData(resp.response, function (buffer) {
transSoundMd5Cache.push(txtMd5);
transSoundCache.push(buffer);
playSound(buffer);
});
} catch (e) {
console.log(e);
}
}
});
}
function YoudaoRequest(queryStr,callBackFunc) {
GM_xmlhttpRequest({
method: "GET",
url: `http://fanyi.youdao.com/openapi.do?type=data&doctype=json&version=1.1&relatedUrl=http%3A%2F%2Ffanyi.youdao.com%2F%23&keyfrom=fanyiweb&key=null&translate=on&q=${queryStr}&ts=${(new Date().getTime()).toString()}`,
headers: {
"Accept": "application/json"
},
onload: function (resp) {
if (resp.statusText==="OK"){
callBackFunc(resp.responseText,true);
return;
}
callBackFunc(null,false);
}
});
}
function ZdicRequest(queryStr,callBackFunc) {
GM_xmlhttpRequest({
method: "GET",
url: "https://www.zdic.net/hans/"+encodeURI(queryStr),
headers:{
"User-Agent": UA,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding": "GBK,gzip,deflate"
},
onload: function (resp) {
try {
if (resp.readyState === 4) {
let repTxt=resp.responseText;
//if got the right answer
if (resp.responseText.indexOf("<title>查无此结果</title>") < 0) {
if (resp.responseText.indexOf("<title>全站搜索</title>") < 0) {
let beginIndex=repTxt.indexOf(`<div class="homograph-entry">`);
let endIndex=repTxt.lastIndexOf(`<div class="res_c_right">`)-7;
var result1=repTxt.substring(beginIndex,endIndex);//.replace(/src="\/\/img\.zdic\.net/gi,`src="https://img.zdic.net`).replace(/data-original="\/\/img\.zdic\.net\//gi,`data-original="https://img.zdic.net/`);
callBackFunc(result1, resp.finalUrl, true);
return;
}
}
}
} catch (e) {
console.log(e);
}
callBackFunc(null, null, false);
}
});
}
function getTargetAnswer(resultObj) {
if (resultObj) {
switch(resultObj[0]){
case CACHE_TYPE_ZDIC_HTML:
return [ANS_TYPE_ZDIC_HTML, resultObj[1]];
case CACHE_TYPE_YOUDAO_SENTENCE:
return [ANS_TYPE_YOUDAO_SENTENCE, resultObj[1]];
case CACHE_TYPE_YOUDAO_WORD:
return [ANS_TYPE_YOUDAO_WORD, resultObj[1]];
case CACHE_TYPE_GOOGLE_RESULT:
return [ANS_TYPE_GOOGLE_RESULT, resultObj[1]];
case CACHE_TYPE_ACCURATE:
return[ANS_TYPE_ACCURATE,resultObj[1]];
default:
break;
}
}
return null;
}
function searchInTranslateCache(targetMd5) {
for (var n = 0; n < transCache.length; n++) {
if (transMd5Cache[n] === targetMd5) return transCache[n];
}
return null;
}
function searchInTransSoundCache(targetMd5) {
for (var n = 0; n < transSoundCache.length; n++) {
if (transSoundMd5Cache[n] === targetMd5) return transSoundCache[n];
}
return null;
}
function init_google_value_tk() {
var url = "https://" + googleDomain[translatorSettingLanguage];
GM_xmlhttpRequest({
method: "GET",
url: url,
onreadystatechange: function (resp) {
if (resp.readyState == 4) {
if (resp.status == 200) {
if(init_google_value_tk_parse(resp.responseText)){
location.reload();
}
else{
alert(translatorSettingLanguage===0 ? "谷歌令牌初始化失败,转为使用有道翻译,请联系作者改进程序。":"Google token initialized failed, use youdao translator instead. Please contact the author to fix this problem.");
}
}
}
}
});
}
function init_google_value_tk_parse(responseText) {
let indexStr=",tkk:'";
let bIdx=responseText.indexOf(indexStr);
if(bIdx>0){
bIdx+=indexStr.length;
let eIdx=responseText.indexOf("',",bIdx);
if(eIdx>0){
let tkk=responseText.substring(bIdx,eIdx);
if(tkk!=null){
GM_setValue(tokenNameInStorage[translatorSettingLanguage], tkk)
return true;
}
}
}
return false;
}
function googleTK(text) {
var uM = GM_getValue(tokenNameInStorage[translatorSettingLanguage],null);
if (uM == 'undefined' || uM == null) {
init_google_value_tk();
return null;
}
var cb = "&";
var k = "";
var Gf = "=";
var Vb = "+-a^+6";
var t = "a";
var Yb = "+";
var Zb = "+-3^+b+-f";
var jd = ".";
var sM = function (a) {
return function () {
return a;
};
};
var tM = function (a, b) {
for (var c = 0; c < b.length - 2; c += 3) {
var d = b.charAt(c + 2);
d = d >= t ? d.charCodeAt(0) - 87 : Number(d);
d = b.charAt(c + 1) == Yb ? a >>> d : a << d;
a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d;
}
return a;
};
var vM = function (a) {
try{
var b;
if (null !== uM) {
b = uM;
} else {
b = sM(String.fromCharCode(84));
var c = sM(String.fromCharCode(75));
b = [b(), b()];
b[1] = c();
b = (uM = window[b.join(c())] || k) || k;
}
var d = sM(String.fromCharCode(116));
c = sM(String.fromCharCode(107));
d = [d(), d()];
d[1] = c();
c = cb + d.join(k) + Gf;
d = b.split(jd);
b = Number(d[0]) || 0;
for (var e = [], f = 0, g = 0; g < a.length; g++) {
var m = a.charCodeAt(g);
128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = m >> 18 | 240, e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, e[f++] = m >> 6 & 63 | 128), e[f++] = m & 63 | 128);
}
a = b || 0;
for (f = 0; f < e.length; f++) {
a += e[f];
a = tM(a, Vb);
}
a = tM(a, Zb);
a ^= Number(d[1]) || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a %= 1E6;
return a.toString() + jd + (a ^ b);
}
catch(err){
console.log(err);
}
};
return vM(text);
}
function translationTaskProcessor(){
if(accurateData.dy-->0){
if(!isExistsTranslationTask.get()){
translationTaskTimout=0;
let s=GM_getValue(translatedDataConfigString,"");
if(s.length>0){
accurateData.wh.close();
accurateData.wh=null;
transCache.push([CACHE_TYPE_ACCURATE,s]);
transMd5Cache.push(accurateData.md5);
GM_setValue(translatedDataConfigString,"");
popup(accurateData.mx,accurateData.my,[CACHE_TYPE_ACCURATE,s]);
}
}
else translationTaskTimout=setTimeout(translationTaskProcessor,translationTaskInterval);
}
else{
translationTaskTimout=0;
isExistsTranslationTask.set(false);
GM_setValue(translatedDataConfigString,"");
loadingIconUI.hide();
}
}
// Google Translate Request
function GoogleRequest(txt, sl, tl, parse) {
if(isEnableAccurateMode){
if(!isExistsTranslationTask.get()){
let iN=/\s+/g.test(txt);
if(!iN){
if(/^([\u4E00-\u9FA5]|[\uFF00-\uFF20]|[\u3000-\u301C])+$/g.test(txt)){
iN=(txt.length>4);
}
}
if(iN){
if(isTMode){
if(tLanguageCode[currentSourceLanguage+1]!=="xxx" && tLanguageCode[currentTranslateLanguage+1]!=="xxx"){
GM_setValue(translatedDataConfigString,`${tLanguageCode[currentSourceLanguage+1]}|${tLanguageCode[currentTranslateLanguage+1]}|${encodeURI(txt)}`);
if((accurateData.wh=window.open("https://fanyi.qq.com/","_blank","height=100,width=100,top="+window.screen.height+",left="+window.screen.width+",location=0,menubar=0,status=0,titlebar=0,toolbar=0"))){
isExistsTranslationTask.set(true);
translationTaskTimout=setTimeout(translationTaskProcessor,translationTaskInterval);
return;
}
}
}
let vlUrl=alURL+ "&sl=" + sl + "&tl=" + tl + "&text=" + encodeURI(txt);
if((accurateData.wh=window.open(vlUrl,"_blank","height=100,width=100,top="+window.screen.height+",left="+window.screen.width+",location=0,menubar=0,status=0,titlebar=0,toolbar=0"))){
isExistsTranslationTask.set(true);
translationTaskTimout=setTimeout(translationTaskProcessor,translationTaskInterval);
return;
}
else{
saveModeSettings(isEnableAccurateModeConfigString,false);
$("iconAccurate").style.display="none";
$("iconNonAccurate").style.display="block";
}
}
}
else{
if(accurateData.wh){
accurateData.wh.close();
accurateData.wh=null;
}
if(translationTaskTimout!==0){
clearTimeout(translationTaskTimout);
translationTaskTimout=0;
}
isExistsTranslationTask.set(false);
}
}
var tk = googleTK(txt);
if(!tk){
loadingIconUI.hide();
return;
}
var Url = dictURL +
"&hl=auto" +
"&sl=" + sl + "&tl=" + tl +
"&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&ie=UTF-8&oe=UTF-8&otf=2&trs=1&inputm=1&ssel=0&tsel=0&source=btn&kc=3" +
"&tk=" + tk +
"&q=" + encodeURI(txt);
var method = 'POST';
var Data = '';
var Hdr = {
"User-Agent": UA,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate"
};
var Q = Url.split('&q=');
Url = Q[0];
Data = '&q=' + Q[1];
Hdr["Content-Length"] = Data.length + '';
Hdr["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8";
GM_xmlhttpRequest({
method: method,
url: Url,
data: Data,
headers: Hdr,
onload: function (resp) {
try {
//console.log(resp.responseText);
parse(resp.responseText, tl);
} catch (e) {
console.log(e);
}
}
});
}
function playTTS(lang,text) {
text = text.replace(/[«»'"]/g, ' ');
var txtMd5 = MD5(text, lang + CACHE_TYPE_GOOGLE_RESULT, null);
var buf= searchInTransSoundCache(txtMd5);
if (buf){
playSound(buf);
return;
}
var tk = googleTK(text);
var Url = ttsURL + "&ie=UTF-8&total=1&idx=0" +
"&tl=" + lang +
"&q=" + text +
"&textlen=" + text.length +
"&tk=" + tk;
GM_xmlhttpRequest({
method: "GET",
url: Url,
responseType: 'arraybuffer',
onload: function (response) {
try {
audioContext.decodeAudioData(response.response, function (buffer) {
transSoundMd5Cache.push(txtMd5);
transSoundCache.push(buffer);
playSound(buffer);
});
} catch (e) {
console.log(e);
}
}
});
}
'use strict';
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t) {
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
function md5_ff(a, b, c, d, x, s, t) {
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t) {
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t) {
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t) {
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length.
*/
function binl_md5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var i, olda, oldb, oldc, oldd,
a = 1732584193,
b = -271733879,
c = -1732584194,
d = 271733878;
for (i = 0; i < x.length; i += 16) {
olda = a;
oldb = b;
oldc = c;
oldd = d;
a = md5_ff(a, b, c, d, x[i], 7, -680876936);
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i], 20, -373897302);
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5_hh(d, a, b, c, x[i], 11, -358537222);
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i], 6, -198630844);
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return [a, b, c, d];
}
/*
* Convert an array of little-endian words to a string
*/
function binl2rstr(input) {
var i,
output = '';
for (i = 0; i < input.length * 32; i += 8) {
output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
}
return output;
}
/*
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*/
function rstr2binl(input) {
var i,
output = [];
output[(input.length >> 2) - 1] = undefined;
for (i = 0; i < output.length; i += 1) {
output[i] = 0;
}
for (i = 0; i < input.length * 8; i += 8) {
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
}
return output;
}
/*
* Calculate the MD5 of a raw string
*/
function rstr_md5(s) {
return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
}
/*
* Calculate the HMAC-MD5, of a key and some data (raw strings)
*/
function rstr_hmac_md5(key, data) {
var i,
bkey = rstr2binl(key),
ipad = [],
opad = [],
hash;
ipad[15] = opad[15] = undefined;
if (bkey.length > 16) {
bkey = binl_md5(bkey, key.length * 8);
}
for (i = 0; i < 16; i += 1) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
}
/*
* Convert a raw string to a hex string
*/
function rstr2hex(input) {
var hex_tab = '0123456789abcdef',
output = '',
x,
i;
for (i = 0; i < input.length; i += 1) {
x = input.charCodeAt(i);
output += hex_tab.charAt((x >>> 4) & 0x0F) +
hex_tab.charAt(x & 0x0F);
}
return output;
}
/*
* Encode a string as utf-8
*/
function str2rstr_utf8(input) {
return unescape(encodeURIComponent(input));
}
/*
* Take string arguments and return either raw or hex encoded strings
*/
function raw_md5(s) {
return rstr_md5(str2rstr_utf8(s));
}
function hex_md5(s) {
return rstr2hex(raw_md5(s));
}
function raw_hmac_md5(k, d) {
return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));
}
function hex_hmac_md5(k, d) {
return rstr2hex(raw_hmac_md5(k, d));
}
function MD5(string, key, raw) {
if (!key) {
if (!raw) {
return hex_md5(string);
} else {
return raw_md5(string);
}
}
if (!raw) {
return hex_hmac_md5(key, string);
} else {
return raw_hmac_md5(key, string);
}
}
function triggerEvent(el,evtName){
var evt;
if(document.createEvent){
evt = document.createEvent("HTMLEvents");
evt.initEvent(evtName, true, true);
evt.eventName = evtName;
el.dispatchEvent(evt);
} else {
evt = document.createEventObject();
evt.eventName = evtName;
evt.eventType = evtName;
el.fireEvent("on" + evt.eventType, evt);
}
}
function removeWebsiteSelectingRestriction(){
GM_addStyle(`*{-webkit-user-select:text !important;-moz-user-select:text !important;-ms-user-select:text !important;user-select:text !important;}`);
[].forEach.call(['copy', 'cut', 'paste', 'select', 'selectstart'],function(event) {document.addEventListener(event, function(e) { e.stopPropagation(); }, true);});
isWebsiteRestrictionRemoved=true;
}
if(isRemoveWebsiteSelectingRestriction){
removeWebsiteSelectingRestriction();
}
var zdictStyle=`
<style type="text/css">
#shiyi_content{height: 500px; width: 100%; margin: 0px; padding: 0px; border: none; color: black; text-decoration: none; overflow: auto;background:transparent;}
#shiyi_content .homograph-entry{margin: 0px; padding: 0px; border: none;word-wrap:break-word;box-sizing:border-box;}
#shiyi_content .page{font-size:16px;}
#shiyi_content .nr-box{ padding-top: 0;border: 1px solid #af9a87;padding: 15px;background: transparent;margin-bottom: 20px;-webkit-column-break-inside: avoid;page-break-inside: avoid;break-inside: avoid;}
#shiyi_content .nr-box-shiyi .jbjs {border-right: solid 4px #c99464;}
#shiyi_content .nr-box-header {background: #f3e8df;padding: 10px 15px;margin: 0 -15px 1em -15px;font-size: 12px;}
#shiyi_content .zib-title {float: right;font-size: 16px;}
#shiyi_content .nr-box-shiyi h2.h2_entry {font-size: 1.8em;margin-bottom: 0;}
#shiyi_content .h2_entry {font-size: 1.4em;margin-bottom: .5em;}
#shiyi_content .page .dictname {font-size: .7em;}
#shiyi_content .page .zdict .definitions, .page .zdict .derivs, .page .zdict .etyms {margin-bottom: 1em;}
#shiyi_content span.z_ts2, span.z_ts3, span.z_ts4 {background-image:transparent;height: 18px;line-height: 18px;color: #660000;font-size: 12px;text-align: center;display: inline-block;font-weight: normal;margin-right: 5px;padding: 0;}
#shiyi_content span.z_ts2 {background-position: 0 -78px;width: 33px;}
#shiyi_content .jnr, .bknr, .wknr {margin: .5em;line-height: 1.5em;}
#shiyi_content .p, p {margin-bottom: 1em;}
#shiyi_content .dicpy {font-size: 20px;font-family: Arial;color: #660000;font-weight: normal;}
#shiyi_content .encs {color: #339900;}
#shiyi_content .diczx1 {color: #660000;}
#shiyi_content .h_line1 {clear: both;height: 3px;width: 98%; margin-bottom: 3px;background-color:gray;text-indent: -9999px;}
#shiyi_content span.z_ts4 {background-position: 0 -114px;width: 55px;}
#shiyi_content span.z_ts2, span.z_ts3, span.z_ts4 {background-color:#F1DED6;border:1px #B07D7E solid;border-radius:3px;height: 18px;line-height: 18px;color: #660000;font-size: 12px;text-align: center;display: inline-block;font-weight: normal;margin-right: 5px;padding: 0;}
#shiyi_content .gnr .gycd {line-height: 1.5;padding-bottom: 5px;}
#shiyi_content .pz {border-bottom: 1px dashed #F1E9E7;padding-bottom: 5px;}
#shiyi_content ruby {display: inline-table;text-align: center;white-space: nowrap;text-indent: 0;margin: 0;vertical-align: -20%;}
#shiyi_content ruby > rb, ruby > rbc {display: table-row-group;line-height: 90%;}
#shiyi_content rbc > rb, rtc > rt {display: table-cell;letter-spacing: 0;}
#shiyi_content rt {text-indent: 0px;line-height: normal;-webkit-text-emphasis: none;}
#shiyi_content .gnr .pz ruby rtc {font-size: 12px;color: #8F6652;line-height: 30px;}
#shiyi_content .pz ruby rtc {font-size: 12px;color: #8F6652;line-height: 30px;}
#shiyi_content ruby > rt, ruby > rbc + rtc {display: table-header-group;font-size: 60%;line-height: 40%;letter-spacing: 0;}
#shiyi_content ruby > rbc + rtc + rtc {display: table-footer-group;font-size: 60%;line-height: 40%;letter-spacing: 0;}
#shiyi_content ol, ul {list-style-type: none;}
#shiyi_content .gnr .gycd {line-height: 1.5;padding-bottom: 5px;}
#shiyi_content .gnr .gc_uono {list-style: outside none none;text-indent: 2em;}
#shiyi_content .gnr .def {margin: 5px 0 5px;line-height: 1.6em;}
#shiyi_content .gnr .gc_sy {clear: both;display: block;margin-bottom: 2pt;}
#shiyi_content .gnr .gc_lz {clear: both;display: block;}
#shiyi_content .gnr .gc_fy, .gc_jy {clear: both;display: block;font-size: 85%;margin-top: 2px;font-weight: 700;color: #666;}
#shiyi_content .gnr .gc_jfy_i {background-color: #633;border-radius: 4px;color: white;font-size: 100%;line-height: 1;padding: 2px;margin-right: 5px;}
#shiyi_content .page .copyright {color: gray;font-size: small;margin-top: 10px;}
#shiyi_content .contentslot, .mpuslot_b {margin-top: 20px;text-align: center;}
#shiyi_content .nr-box-shiyi.wljs {border-right: solid 4px #aea4a4;}
#shiyi_content .page .zdict .definitions, .page .zdict .derivs, .page .zdict .etyms {margin-bottom: 1em;}
#shiyi_content .cnr h3 {color: #660000;font-size: 16px;line-height: 2em;font-weight: bold;}
#shiyi_content .jnr, .bknr, .wknr {margin: .5em;line-height: 1.5em;}
#shiyi_content .cnr li {counter-increment: li;}
#shiyi_content .jnr ol {list-style: none;counter-reset: li;}
#shiyi_content .jnr li {counter-increment: li;}
#shiyi_content .dichr {margin-top: 5px;width: 100%;clear: both;color: #af9a87;border-bottom: solid 1px;}
#shiyi_content .enbox {padding: 10px 0 5px 0;border-top: 1px solid #efe3e3;margin: 5px;background:transparent;}
#shiyi_content .jnr p {margin-bottom: .5em;line-height: 1.5em;}
#shiyi_content .enbox p {font-size: 14px;color: #327311;}
#shiyi_content .wytl{display:none;}
</style>
`;