划词翻译

try to take over the world!

  1. // ==UserScript==
  2. // @name 划词翻译
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author You
  7. // @match *://*/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11.  
  12. var tip = document.createElement("div");
  13. tip.id='tip';
  14. tip.style.background='#C7F5FE';
  15. tip.style.width='300px';
  16. tip.style.height='105px';
  17. tip.style.position='fixed';
  18. tip.style.display='none';
  19. tip.style.overflow='scroll';
  20. tip.style.fontFamily='微软雅黑';
  21. document.body.appendChild(tip);
  22. var script = document.createElement("script");
  23. var host = window.location.host;
  24. if (host=='www.youtube.com') {
  25. script.setAttribute("src", "https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js");
  26. } else{
  27. script.setAttribute("src", "http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js");
  28. }
  29.  
  30.  
  31.  
  32. var heads = document.getElementsByTagName("head");
  33. if(heads.length)
  34. heads[0].appendChild(script);
  35. else{
  36. document.documentElement.appendChild(script);
  37. }
  38.  
  39.  
  40.  
  41. ////////////////////////////
  42.  
  43. document.body.onmouseup = function(event) {
  44. var x = event.clientX;
  45. var y = event.clientY;
  46. var odiv = document.getElementById('tip');
  47. var tipx=odiv.getBoundingClientRect().left;
  48. var tipy=odiv.getBoundingClientRect().top;
  49. tipx=Math.round(tipx);
  50. tipy=Math.round(tipy);
  51. var x1=tipx+300;
  52. var y1=tipy+105;
  53. if(x1>=x&&x>=tipx&&y1>=y&&y>=tipy){
  54. console.log('在方框内');
  55. }else{
  56. var userSelection, str;
  57. userSelection = window.getSelection();
  58. if(!(str = userSelection.str)) {
  59. str = userSelection;
  60. str = str + '';
  61.  
  62. if(str.length <= 0) {
  63. var tip = document.getElementById('tip');
  64. if(tip.style.display === '') {
  65. tip.style.display = 'none';
  66.  
  67. }
  68. } else {
  69.  
  70. translatepost(event, str);
  71.  
  72. }
  73.  
  74. str = '';
  75. }
  76.  
  77. }
  78.  
  79. };
  80. function translatepost(event, str) {
  81.  
  82. var appid = '20170419000045200';
  83. var key = 'VhVFhqlN6BnHknV43aSZ';
  84. var myDate = new Date();
  85. var salt = myDate.getTime();
  86. var query = str;
  87.  
  88. var from = 'en';
  89. var to = 'zh';
  90. var str1 = appid + query + salt + key;
  91. var sign = MD5(str1);
  92.  
  93. $.ajax({
  94. url: 'https://fanyi-api.baidu.com/api/trans/vip/translate',
  95. type: 'get',
  96. dataType: 'jsonp',
  97. data: {
  98. q: query,
  99. appid: appid,
  100. salt: salt,
  101. from: from,
  102. to: to,
  103. sign: sign
  104. },
  105. success: function(data) {
  106. var res = JSON.stringify(data);
  107. var strs = data['trans_result'][0]['dst'];
  108. changetip(event,strs);
  109.  
  110. }
  111. });
  112.  
  113. }
  114. function changetip(event, str) {
  115. var tip = document.getElementById('tip');
  116. var x = event.clientX;
  117. var y = event.clientY;
  118. var seewidth = document.body.clientWidth;
  119. if(y < 100) {
  120. tip.style.top = y + 'px';
  121.  
  122. } else {
  123. tip.style.top = (y - 100) + 'px';
  124. }
  125.  
  126. if(seewidth - x < 300) {
  127. tip.style.left = (seewidth - 300) + 'px';
  128.  
  129. } else {
  130. tip.style.left = x + 'px';
  131. }
  132. tip.innerHTML = str;
  133. tip.style.display = '';
  134.  
  135.  
  136.  
  137. }
  138. ///////////////
  139. var MD5 = function (string) {
  140.  
  141. function RotateLeft(lValue, iShiftBits) {
  142. return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
  143. }
  144.  
  145. function AddUnsigned(lX,lY) {
  146. var lX4,lY4,lX8,lY8,lResult;
  147. lX8 = (lX & 0x80000000);
  148. lY8 = (lY & 0x80000000);
  149. lX4 = (lX & 0x40000000);
  150. lY4 = (lY & 0x40000000);
  151. lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
  152. if (lX4 & lY4) {
  153. return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
  154. }
  155. if (lX4 | lY4) {
  156. if (lResult & 0x40000000) {
  157. return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
  158. } else {
  159. return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
  160. }
  161. } else {
  162. return (lResult ^ lX8 ^ lY8);
  163. }
  164. }
  165.  
  166. function F(x,y,z) { return (x & y) | ((~x) & z); }
  167. function G(x,y,z) { return (x & z) | (y & (~z)); }
  168. function H(x,y,z) { return (x ^ y ^ z); }
  169. function I(x,y,z) { return (y ^ (x | (~z))); }
  170.  
  171. function FF(a,b,c,d,x,s,ac) {
  172. a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
  173. return AddUnsigned(RotateLeft(a, s), b);
  174. }
  175.  
  176. function GG(a,b,c,d,x,s,ac) {
  177. a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
  178. return AddUnsigned(RotateLeft(a, s), b);
  179. }
  180.  
  181. function HH(a,b,c,d,x,s,ac) {
  182. a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
  183. return AddUnsigned(RotateLeft(a, s), b);
  184. }
  185.  
  186. function II(a,b,c,d,x,s,ac) {
  187. a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
  188. return AddUnsigned(RotateLeft(a, s), b);
  189. }
  190.  
  191. function ConvertToWordArray(string) {
  192. var lWordCount;
  193. var lMessageLength = string.length;
  194. var lNumberOfWords_temp1=lMessageLength + 8;
  195. var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
  196. var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
  197. var lWordArray=Array(lNumberOfWords-1);
  198. var lBytePosition = 0;
  199. var lByteCount = 0;
  200. while ( lByteCount < lMessageLength ) {
  201. lWordCount = (lByteCount-(lByteCount % 4))/4;
  202. lBytePosition = (lByteCount % 4)*8;
  203. lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
  204. lByteCount++;
  205. }
  206. lWordCount = (lByteCount-(lByteCount % 4))/4;
  207. lBytePosition = (lByteCount % 4)*8;
  208. lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
  209. lWordArray[lNumberOfWords-2] = lMessageLength<<3;
  210. lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
  211. return lWordArray;
  212. }
  213.  
  214. function WordToHex(lValue) {
  215. var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
  216. for (lCount = 0;lCount<=3;lCount++) {
  217. lByte = (lValue>>>(lCount*8)) & 255;
  218. WordToHexValue_temp = "0" + lByte.toString(16);
  219. WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
  220. }
  221. return WordToHexValue;
  222. }
  223.  
  224. function Utf8Encode(string) {
  225. string = string.replace(/\r\n/g,"\n");
  226. var utftext = "";
  227.  
  228. for (var n = 0; n < string.length; n++) {
  229.  
  230. var c = string.charCodeAt(n);
  231.  
  232. if (c < 128) {
  233. utftext += String.fromCharCode(c);
  234. }
  235. else if((c > 127) && (c < 2048)) {
  236. utftext += String.fromCharCode((c >> 6) | 192);
  237. utftext += String.fromCharCode((c & 63) | 128);
  238. }
  239. else {
  240. utftext += String.fromCharCode((c >> 12) | 224);
  241. utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  242. utftext += String.fromCharCode((c & 63) | 128);
  243. }
  244.  
  245. }
  246.  
  247. return utftext;
  248. }
  249.  
  250. var x=Array();
  251. var k,AA,BB,CC,DD,a,b,c,d;
  252. var S11=7, S12=12, S13=17, S14=22;
  253. var S21=5, S22=9 , S23=14, S24=20;
  254. var S31=4, S32=11, S33=16, S34=23;
  255. var S41=6, S42=10, S43=15, S44=21;
  256.  
  257. string = Utf8Encode(string);
  258.  
  259. x = ConvertToWordArray(string);
  260.  
  261. a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
  262.  
  263. for (k=0;k<x.length;k+=16) {
  264. AA=a; BB=b; CC=c; DD=d;
  265. a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
  266. d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
  267. c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
  268. b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
  269. a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
  270. d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
  271. c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
  272. b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
  273. a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
  274. d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
  275. c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
  276. b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
  277. a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
  278. d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
  279. c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
  280. b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
  281. a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
  282. d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
  283. c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
  284. b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
  285. a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
  286. d=GG(d,a,b,c,x[k+10],S22,0x2441453);
  287. c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
  288. b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
  289. a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
  290. d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
  291. c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
  292. b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
  293. a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
  294. d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
  295. c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
  296. b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
  297. a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
  298. d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
  299. c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
  300. b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
  301. a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
  302. d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
  303. c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
  304. b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
  305. a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
  306. d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
  307. c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
  308. b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
  309. a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
  310. d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
  311. c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
  312. b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
  313. a=II(a,b,c,d,x[k+0], S41,0xF4292244);
  314. d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
  315. c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
  316. b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
  317. a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
  318. d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
  319. c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
  320. b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
  321. a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
  322. d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
  323. c=II(c,d,a,b,x[k+6], S43,0xA3014314);
  324. b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
  325. a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
  326. d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
  327. c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
  328. b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
  329. a=AddUnsigned(a,AA);
  330. b=AddUnsigned(b,BB);
  331. c=AddUnsigned(c,CC);
  332. d=AddUnsigned(d,DD);
  333. }
  334.  
  335. var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
  336.  
  337. return temp.toLowerCase();
  338. };
  339.  
  340.