Url_Cleaner

Clean Url

  1. // ==UserScript==
  2. // @name Url_Cleaner
  3. // @namespace https://userscripts.org/scripts/show/somewhere
  4. // @author I don't Know who he or she is, but I need it
  5. // @description Clean Url
  6. // @include http*://*
  7. // @version 0.0.1.20140628222827
  8. // ==/UserScript==
  9.  
  10. (function() {
  11.  
  12. urlCleaner = function() {
  13. /* Function: decode ROT-13 string */
  14. //+ Jonas Raoni Soares Silva
  15. //@ http://jsfromhell.com/string/rot13 [rev. #1]
  16. String.prototype.rot13 = function() {
  17. return this.replace(/[a-zA-Z]/g, function(c){
  18. return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
  19. });
  20. };
  21.  
  22. /* Based on above prototype, decode ROT-1 */
  23. /* All chars that are not preceded with an exclamation mark are rotated by 1 */
  24. String.prototype.rot1 = function() {
  25. return this.replace(/[^!=\-&_]/g, function(c){
  26. return String.fromCharCode(c.charCodeAt(0) - 1);
  27. }).replace(/(![=\-&_Y]|[^!]-)/g, function(c){
  28. /* Note about this part: "bcd!-234" is "abc-123" but "bcd-234" is "abc,123" */
  29. /* !Y is Z */
  30. if (c.charAt(0) == "!")
  31. return (c.charAt(1)=="Y") ? "Z" : c.charAt(1);
  32. else
  33. return c.charAt(0) + String.fromCharCode(c.charCodeAt(1) - 1);
  34. });
  35. };
  36.  
  37.  
  38. var reTraffic = /(protraffic|clicksagent|greatdemosite|evrotraff|fpctraffic2|trafficholder|trafficroup|g-traffic|refer\.ccbill|trafficshop)\.(com|net)/g;
  39.  
  40. var urlCleaner = function() {
  41. var pattern = {
  42. "order": "huUTiIQVk4x2BMgt6G9LYPjKpWJDqw8a0AHl7CEsndSRz5obX3eryFOvm1NZcf",
  43. "a": "apGPHevTgzFoNbrwhEqAY1JZCkdcIsDO2X9fK6MVx8tRQBU3LWj75nyu4S0mil", // aLW8
  44. "b": "bvH0PCOAJxTKukNzUgE92In643sReq7ZMrw8LVyohjtplDYiWX5SFfcamBGQ1d", // bWXj
  45. "c": "csgBXVNJmfDuSPt9KlE6ZCa3TH7hnqLo8AWxrUGj5Oi41kb2YwvRQeFdpMyz0I", // cYwO
  46. "d": "dxAJqfvXWwn0PLkBGj4F1ycb9oiOUpgSTtRsEhZmr6YlQHu3aeK8DN75zIM2VC", // dae6
  47. "e": "ezK4Dp2mHY9cWZuEsf37oFSa5xMnkCbP8lJUQdgq16iw0VLBNIvGtXjThAyOrR", // eNI6
  48. "f": "f1JWH2tonLAQxhXSCmTMa39sNv0YiVzFPudypZrB7ljIbwGRkq6gO84KeDcUE5", // fkql
  49. "g": "gsEPJKLu85X3yvHBtWTZOMIariD6Np7FRGxlQ1mfkjdncqCowbAVe94S2YUzh0", // gwbj
  50. "i": "i52jJrhAnDImC8F4x9lWPgYLEOUsN6q7TSkKf0Mu1ywzQoeXtpcvdaHVRbG3ZB", // itpy
  51. "j": "jYPwv2O0qFQb5ZiEn8d6fIJUzGa1N9M73CTtHXmkWS4AyxcpLRDguBrolVsehK", // jLRS
  52. "k": "ksABZth0aR9UNj1crl3wJ5TiyqPbzQgpx67DFvCEmfo2endLXSVOYHuIGKWM48", // kXSf
  53. "l": "lnNDQJ3XEseuq0a6z4ZPO1M9fBA2hbSUpCvHrKTgidRGmFtLoy5IWw7VcjkYx8", // loyd
  54. "m": "mhFHoN1Jrtc5TWzZRlQwduvD9n3k624LX70gKiYABMeVfGOCj8xSaqypIUsPbE", // mj8M
  55. "n": "ncP9I1Mrx0okmNZvlDfT6zt3hdOWKYjQa8XSbEGse4ygFqiUA2JuCLp5R7BwVH", // nA24
  56. "o": "omPbXaE2hc76F1sfS5puzM8ygtYHiZkCLIWNQT0enqOvKUxB9rj4RVwAdJlDG3", // o9rq
  57. "p": "psSBAJrNDk4PcbXhY8ET9zF53IoQKxwvfMtm0ea1ZURud7L62yGlqjOnCHWVig", // p2yU
  58. "q": "q2dv1myOTiVhEH5alpMnQr0SP68zBe3gLA7o9IZNkUwjJWDuFcXtfRbGYsK4Cx", // qFcU
  59. "r": "rDdA5yEKz6eQmoZWbc7PgsIpBNFHOlnMjLfXT8x0RGUqYvu1Swt3ai2kh4CV9J", // rSwG
  60. "s": "sX2Pc5qalA6RWYhFS1w0UTDEbnBp4odHQJkImrGvy3uZOLxKgefMNCV7z9ji8t", // sge3
  61. "t": "tNSLF4fe1owQnpy6aUH3bAOmiMdjshlvV9rkIT0BzGEDgPZ8R7WcKqJY25xuXC", // tR7G
  62. "u": "ucdy0L3eN6xqsbD7S8JUkj5QhP4grF2fOI9imZltCATzVpEnBWowav1YGMKHXR", // uBWA
  63. "v": "vWtBkEI9NPX41M7yCKspDFVUzSqTecAw0m5JnuQ3djiHOZrfhoLgYRl2ba6G8x", // vhoj
  64. "w": "wfsVBkyjhUXARZL4xeHlSgYrcP6uQmaKo9EWv21iMz078t3D5qFJOCNnTIdbpG", // w5qz
  65. "x": "xPG1ObRq6E0TogFNBpwijmCdesh8AtXS3MHZDQrYa5f9Jz2WU4vcyKI7klVunL", // xU45
  66. "y": "ygUleV0C9xYNvGOKFWsjkqfPmt6hH2TZJuRniDrL4cI87z1d3wXBbSEaM5AQop", // y3wc
  67. "z": "zXZb7ILU10Pi8mhpltcosn3WVMBxujCQFKHASqJYONkaEG9DT4d6wfRegrv5y2", // zT4N
  68. "A": "AIQljrOW7b9scw6dg2KvNqiF8BME4ftZDPmkXzuVxYHCeSJG31TLy0RaUnoph5", // A31Y
  69. "B": "Baw9VCNHODbhk42yixnolmvGTqRXt35MPrjISJEWY7f6cQzKdF0UugAZ18pLse", // BdF7
  70. "C": "C7YB3je1z4EPToOvgxKhyA2a5wVkDnNMHLc8GuWqSJmifU6d9l0rsbQXIZtFRp", // C9lJ
  71. "D": "DdiGEY8P9eIHnbmFSZkgaXQAhovW3TjruflN2y7BL4MtOJzxpqU60wRK1scC5V", // Dpq4
  72. "E": "EHAfiIU5L0BxtWznkT7CcP3GJ1Y4KZVb26Xoed8jyraqRuvQwhsmS9FNlOpDMg", // Ewhr
  73. "F": "FNU3p7aBRVrOshZJyjl6deMK2YzgTbi1P0W4nqmLHktS9cvAGxCwuQIX58oDfE", // FGxk
  74. "G": "GEY59tKgZPsDiTMmJp0cOfeQRrzVal2SxNIW36kBCj7LU8y14ndHAqvuhboFwX", // G4nj
  75. "H": "HLA9XJKOdi8v5B0mochZuqa2Eygr7ejU1YDfPbQnWRzxwNtTlsSpFk6CV3G4MI", // HlsR
  76. "I": "IktWmzfGnBs1vDRLQPaHVMCZKdgYXESNFh52x3A4pw07c9uoqej8OlU6TryJib", // Iqew
  77. "J": "JAdMYTBIRaueX3kS6HCE4FVhg1Lrl0y8Uno7p5iqWjfmGQvtzsxZDcw9KNPb2O", // Jzsj
  78. "K": "KLHzE8kmT9qgPvRGp7welFQD5BuVnjr64o2fxYCt3dsIMiyObhScN1XZA0UWJa", // Kbhd
  79. "L": "LWavE6ZCy579IkqjnQrJ3eUXs1hxgADPwldfNV4cYtiHzmuGRS0Bb2op8FKMOT", // LRSt
  80. "M": "Mw5iEexyU7VW2BRTKmlcvOou3PLXkpZ0sjnGHdrIDfJY48zQtNq6h91SgAaCFb", // MtNf
  81. "N": "Nuz2gT8xV5re9jRwKsJWA4pBbSctM7Xy0hlFvqI1nYod6mQCOPUEZ3iGaHLkfD", // NOPY
  82. "O": "O9dfiPmZbUFBJYC5z4qxtgrj8R7DMeQSy2uoIVXaNvAK1cTwGsl6WnL0E3pkhH", // OGsv
  83. "P": "PQJumeWLd9nx8jokz6sMc2N05hSfRqZOTAYCVXKaGDU3ti7pgIrHFywEB4bl1v", // PgID
  84. "Q": "QCe6L8lWS1soiMKOyvUA5ZfB7EDbRzhwJcYItHnFrdkGuV3ap92NmT40xqgjXP", // Qp9d
  85. "R": "R7B2Chd4kDvc9PKF5tG6HETz8SgufeVnLU3jWZbqoMxiJ1arNlyXpswOQ0IYmA", // RNlM
  86. "S": "SeDMCPfdo9Ig72uaWzN3kGLp4QBTxFnUA5bOcysqtwh6YVX8vZli1KRJEjHmr0", // SvZw
  87. "T": "T0KxhcaPZLOleJWAmvXYSEC1RnI93Mdyip8tuNQVqg7frk6BGbs2owFzHj5UD4", // TGbg
  88. "U": "USKyOztEqVLIRB4km8xis6wWDcXb973nCTeZFNGufg25vJAd1lM0jhaPYHQorp", // U1lg
  89. "V": "VDt7LwiYFRPZzlqGBm4AK5IuOeS1dWUsCyaMkx3cf68pNbQh2TJo0vEXngjrH9", // V2T6
  90. "W": "W6CXhu9ylrjpwc7iKe2bFgMtOJSLZsaqHBdP81IT5NfvmxRUAn3YGD4zQoV0Ek", // WAnN
  91. "X": "X6nGBOqp5ulFhZUzetEcbdNL87S24IQPm3RCADMg9vYwfojsxHKJTayk0rWi1V", // XxHv
  92. "Y": "YekFo4xREVdpN85Gc3gPJlBf9XHuWizyCnjKm6MD1AST7st0rOqwhZL2aIQvUb", // YrOA
  93. "Z": "Z4bHQr1hgXncI2FMu0dBzERlm6kxsJqSpL8OjNvV39WGoiwPKY5tfTA7eUyCDa", // ZKY9
  94. "1": "160WTmRqnyJe49dEfMi2UHDYpcVaz7ObA8QXj3NhGxsw5KBgrvklCZISouFPLt", // 1rvx
  95. "2": "2kXelCYR4zNiLH8m3UZ1Pg7Kjp9qTfWbcr5D6AvsBhVtInGuwyMS0FdoQxaOEJ", // 2wyh
  96. "3": "3f10UaWhlriVXgbQqRvKBECwcFykxIzs67mPGHSMoDp845LAJut9YOnNZej2Td", // 3JuD
  97. "4": "48ztHaU3M0uensEJLpcCwTjq7Wr9OiQ2ADPvhfYx5Bb1VRFoy6mSXlkNKGdgIZ", // 4y6B
  98. "5": "5uE2L8NMbrdCIsvVKkJYo963PpjBqnF7tDQm4xc1ZShwUWRXeH0fAilyaTGOgz", // 5eHS
  99. "6": "6WVolOMb3GPhz9riDyXFkZgBJIvEQq8Kma5Lsxc0pfeUwHjS7TtRunCdNA14Y2", // 67Tf
  100. "7": "7P2msG1BioQwUkTu0VLbYcOve6nrZ8KdpaylxWqMgNH5h3DAICFXtj4RSfJ9zE", // 7ICN
  101. "8": "8GcezXwSlkg1mhHyCIjNTidvZqAJptfF4KRVEoLsWQ6bDuMaB2U359OP7nY0rx", // 8B2Q
  102. "9": "9LqPF0eyOXsSazcZMAhgCEY2wpU3Ho8BvQlG5N1nuWi6VbRKJkrT4Dfmtxd7jI", // 9JkW
  103. "0": "0uJz6VMKTegcGXoBI3iaHP9rZ5qswb4WUxDvCytdnQS8k1jYNf7LOmEhFl2RpA" // 0NfQ
  104. }
  105. var chr = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
  106. var pad = [ 96, 48, 46, 53, 93, 96, 49, 47, 96, 95, 93, 95, 93, 50, 50, 94, 52, 50, 45, 49, 96, 44, 93, 49, 48, 98, 47, 96, 93, 46, 94, 98, 53, 47, 98, 95, 49, 95, 93, 49 ];
  107. var ord = "0123456789abcdefghijklmnopqrstuvwxyz";
  108.  
  109. this.fixUrl = function(url) {
  110. data = {
  111. originalUrl: url,
  112. debugData: [],
  113. urls: []
  114. };
  115.  
  116. // Bizarre fixes
  117. url = url.toString().replace(/%(s=[^%&]|link=pics|p=0)/g, "").replace(/(=Http|\*\*http)/g, "=http").replace(/\/\*\*\*\/$/, "");
  118.  
  119. // unescape (urls can be escaped multiple times)
  120. while (/%u[a-fA-F0-9]{4}/g.test(url) || /%[a-fA-F0-9]{2}/g.test(url)) {
  121. url = unescape(url);
  122. }
  123. url = url.replace(/"|'/g,'');
  124. data.debugData.push({url:url, f:1}); // 1
  125.  
  126. // ROT-13 + Base64 encoding
  127. re = url.match(/=~?(nUE0[a-zA-Z0-9+\/=]+)/);
  128. if (re != null) {
  129. url = deBase64(re[1].rot13());
  130. data.debugData.push({url:url, f:2}); // 2
  131. }
  132.  
  133. // Base64 + ROT-13 encoding (some prefixes)
  134. re = url.match(/=((?:ampq|dG55|c3V0|Y3Zw|Y2Vi|aXZx|eW9j|Z3Rj|Zmd3|dWd6)[a-zA-Z0-9+\/=]+)/);
  135. if (re != null) {
  136. url = "http://" + deBase64(re[1]).rot13();
  137. data.debugData.push({url:url, f:3}); // 3
  138. }
  139.  
  140. // ROT-1 encoding
  141. if (url.indexOf("iuuq") != -1) {
  142. url = url.substr(url.indexOf("iuuq"));
  143. url = url.rot1();
  144. data.debugData.push({url:url, f:4}); // 4
  145. }
  146.  
  147. // False positive Base64 encoded links
  148. re = url.match(/\/(v|x)\/cT1[a-zA-Z0-9+\/=]+\/\*\*\*\//);
  149. if (re != null) {
  150. url = "http://" + url.substring(url.indexOf("/***/")+5);
  151. data.debugData.push({url:url, f:5}); // 5
  152. }
  153.  
  154. // Base64 encoded links (=aHR0, =~aHR0, =cD0, /cT1, b64aHR0, =bj0)
  155. re = /=?(?:~*|b64|\/)((?:aHR0|cD0|cT1|bj0|Li4v)[a-zA-Z0-9+\/=]+)/;
  156. // can be encoded more than once
  157. while (re.test(url)) {
  158. rm = url.match(re);
  159. if (rm != null)
  160. url = deBase64(rm[1]);
  161. data.debugData.push({url:url, f:6}); // 6
  162. }
  163.  
  164. // Reversed Base64 encoded links
  165. re = url.match(/g=([a-zA-Z0-9+\/=]+0RHa)/);
  166. if (re != null) {
  167. url = deBase64(re[1].split("").reverse().join(""));
  168. data.debugData.push({url:url, f:6}); // 6
  169. }
  170.  
  171. // Note: there are just couple of regexp's to remove unwanted params
  172. // Why? Because some of links require params, therefore removing all of them would cause link to be invalid
  173. // Todo: add more useless / problematic params
  174. url = url.replace(/amp;/g, '');
  175. url = url.replace(/\*/g, '&');
  176. if (url.substring(url.lastIndexOf("http")).indexOf(document.domain) == -1)
  177. url = url.replace(/&(p|s|c)=\w{0,3}/g, '');
  178. url = url.replace(/&link=(big|today)/g, '');
  179. url = url.replace(/(&var(1|2)=(?!http)\w*(=\d+g)?)/g, '');
  180. url = url.replace(/&gr(oup)?=[A-Za-z\-]+/g, '');
  181.  
  182. // Other bizarre fixes
  183. url = url.replace(/\?http/g, "=http").replace(/php\?path=/g,"php?path=http://");
  184. if (url.indexOf("|") != -1)
  185. url = url.substring(0, url.indexOf("|"));
  186. if (url.indexOf(";") != -1)
  187. url = url.substring(0, url.indexOf(";"));
  188. data.debugData.push({url:url, f:7}); // 7
  189.  
  190. // Pattern encoded links
  191. patt = url.match(/=(aLW8|bWXj|cYwO|dae6|eNI6|fkql|gwbj|itpy|jLRS|kXSf|loyd|mj8M|nA24|o9rq|p2yU|qFcU|rSwG|sge3|tR7G|uBWA|vhoj|w5qz|xU45|y3wc|zT4N|A31Y|BdF7|C9lJ|Dpq4|Ewhr|FGxk|G4nj|HlsR|Iqew|Jzsj|Kbhd|LRSt|MtNf|NOPY|OGsv|PgID|Qp9d|RNlM|SvZw|TGbg|U1lg|V2T6|WAnN|XxHv|YrOA|ZKY9|1rvx|2wyh|3JuD|4y6B|5eHS|67Tf|7ICN|8B2Q|9JkW|0NfQ)/g);
  192. if (patt != null) {
  193. url = dePattern(url.substring(url.indexOf(patt)+1));
  194. data.debugData.push({url:url, f:8}); // 8
  195. }
  196. // Pattern 2
  197. patt = url.match(/=o5o4/);
  198. if (patt != null) {
  199. url = dePattern2(url.substring(url.indexOf(patt)+1, url.indexOf("&")));
  200. data.debugData.push({url:url, f:9}); // 9
  201. }
  202.  
  203. first_http = url.indexOf("http");
  204. last_http = url.lastIndexOf("http");
  205.  
  206. // If the decoded url has some garbage before 'http'
  207. if (first_http != 0)
  208. url = url.substr(first_http);
  209.  
  210. // In case of multiple urls in one link, return only the url with highest rank
  211. // Todo: improve
  212. if (first_http != last_http) {
  213. temp = url.split("http");
  214. for (i=1; i<temp.length; i++) {
  215. rank = 0;
  216.  
  217. // first url
  218. if (i == 1) rank -= 1;
  219.  
  220. // traffic type sites
  221. re = temp[i].match(reTraffic);
  222. if (re != null) rank -= 2;
  223.  
  224. // domain at the end of the link (.com, .com/ etc.)
  225. re = temp[i].match(/\.(com|net|org|biz|coop|info|museum|name|pro|edu|gov|int|mil|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gv|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rw|ru|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|ws|wf|ye|yt|yu|za|zm|zw)\/?$/g);
  226. if (re != null) rank -= 1;
  227.  
  228. // bumpers
  229. re = temp[i].match(/\/(in\d?|g?o(ut)?|x|video)\.(php|cgi)\?/g);
  230. if (re != null) rank -= 2;
  231.  
  232. // other
  233. re = temp[i].match(/url=|\/\?go=/g);
  234. if (re != null) rank -= 1;
  235.  
  236. // valid pages
  237. re = temp[i].match(/index(\d+)?\.(s?html?|php)/g);
  238. if (re != null) rank += 2;
  239.  
  240. re = temp[i].match(/\/gallery\//g);
  241. if (re != null) rank += 1;
  242.  
  243. data.urls.push({url: "http" + temp[i], rank: rank});
  244. }
  245. } else {
  246. data.urls.push({url: url, rank: 0});
  247. }
  248. // Sort by rank
  249. data.urls.sort(function(a,b){return b.rank-a.rank;});
  250.  
  251.  
  252. for (i=0; i<data.urls.length; i++) {
  253. // If theres no q mark, or index of q mark is greater than amp index, there should be no params
  254. i_qmark = data.urls[i].url.indexOf("?");
  255. i_amp = data.urls[i].url.indexOf("&");
  256. if ((i_qmark == -1 || i_qmark > i_amp) && i_amp != -1)
  257. data.urls[i].url = data.urls[i].url.substring(0, i_amp);
  258. data.debugData.push({url:data.urls[i].url, rank: data.urls[i].rank, f:10}); // 10
  259. }
  260. return data;
  261. }
  262.  
  263. /* Function: decode Base64 String */
  264. var deBase64 = function(_str) {
  265. // Code was written by Tyler Akins and is placed in the public domain
  266. // It would be nice if you left this header. http://rumkin.com
  267. base64_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  268.  
  269. // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
  270. _str = _str.toString().replace(/[^A-Za-z0-9\+\/\=]/g, '');
  271.  
  272. var output="";
  273. var chr1,chr2,chr3;
  274. var enc1,enc2,enc3,enc4;
  275. var i=0;
  276.  
  277. do {
  278. enc1 = base64_keyStr.indexOf(_str.charAt(i++));
  279. enc2 = base64_keyStr.indexOf(_str.charAt(i++));
  280. enc3 = base64_keyStr.indexOf(_str.charAt(i++));
  281. enc4 = base64_keyStr.indexOf(_str.charAt(i++));
  282. chr1 = (enc1 << 2) | (enc2 >> 4);
  283. chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  284. chr3 = ((enc3 & 3) << 6) | enc4;
  285. output = output+String.fromCharCode(chr1);
  286. if (enc3 != 64) {
  287. output=output+String.fromCharCode(chr2);
  288. }
  289. if (enc4 != 64) {
  290. output=output+String.fromCharCode(chr3);
  291. }
  292. } while (i<_str.length);
  293.  
  294. output = unescape(output);
  295. return output;
  296. }
  297.  
  298. /* Function: Decode urls using declared patterns */
  299. var dePattern = function(_url) {
  300. var outurl = "";
  301. for (m=0; m<_url.length; m++) {
  302. if (/[a-zA-Z0-9]/.test(_url[m])) {
  303. outurl += pattern.order.charAt((62 - pattern[_url[0]].indexOf(_url[m]) + m%62)%62);
  304. } else {
  305. outurl += _url[m];
  306. }
  307. }
  308. return outurl;
  309. }
  310.  
  311. var dePattern2 = function(_url) {
  312. if (_url.length%2 != 0) return "";
  313. return _url.replace(/[a-z0-9]\d/g, function(c, d) {
  314. c1 = c.charAt(0);
  315. c2 = parseInt(c.charAt(1))-1;
  316. pos = c2*36 + ord.indexOf(c1) - pad[(d/2)%40];
  317. if (pos > 94) return "*";
  318. return chr.charAt(pos);
  319. });
  320. }
  321.  
  322. }
  323.  
  324. /* **************************************** */
  325. /* Link parsing loop */
  326. /* **************************************** */
  327.  
  328. uc = new urlCleaner();
  329.  
  330. var links = document.links;
  331. for (var j=0; j<links.length; j++) {
  332. if (!/http:/.test(links[j].href)) continue;
  333.  
  334. var out = [];
  335. if (typeof links[j].realurl != "undefined") {
  336. links[j].onclick = function(){};
  337. links[j].onmouseup = function(){};
  338. links[j].onmousedown = function(){};
  339. links[j].onmouseout = function(){};
  340. links[j].onblur = function(){};
  341. out = uc.fixUrl(links[j].realurl);
  342. } else
  343. out = uc.fixUrl(links[j].href);
  344.  
  345. links[j].ucData = out;
  346. links[j].href = out.urls[0].url;
  347.  
  348. // dim all the links with traffic-type sites
  349. re = links[j].href.match(reTraffic);
  350. if (re != null) {
  351. links[j].style.opacity = 0.2;
  352. }
  353. // remove the onmouseover action, so it won't change the href value
  354. omo = links[j].getAttribute('onmouseover');
  355. if (omo != null) {
  356. links[j].removeAttribute('onmouseover');
  357. }
  358. }
  359. }
  360.  
  361. var scr = document.createElement("script");
  362. scr.type = "text/javascript";
  363. scr.appendChild(document.createTextNode('('+ urlCleaner +')();'));
  364. document.getElementsByTagName("head")[0].appendChild(scr);
  365. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址