Advertisement
Slupik98

[PLEMIONA] ForumManager

May 5th, 2016
5,891
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.34 KB | None | 0 0
  1. // ==UserScript==
  2. // @name ForumManager
  3. // @version 1.0.1
  4. // @description Rozszerza standardowe forum
  5. // @author Slupik98
  6. // @downloadURL http://pastebin.com/raw/bFFzyA2Z
  7. // @updateURL http://pastebin.com/raw/bFFzyA2Z
  8. // @match https://*.plemiona.pl/game.php?village=*&screen=forum*
  9. // @match http://*.plemiona.pl/game.php?village=*&screen=forum*
  10. // ==/UserScript==
  11.  
  12. $.getScript('https://gitcdn.xyz/repo/Slupik/TribalWars/master/SlupioScriptSettings/maincode.js');
  13.  
  14. if (!('contains' in String.prototype)) {
  15. String.prototype.contains = function (str, startIndex) {
  16. return -1 !== String.prototype.indexOf.call(this, str, startIndex);
  17. };
  18. };
  19. if (!('replaceAll' in String.prototype)) {
  20. String.prototype.replaceAll = function (token, newToken, ignoreCase) {
  21. var _token;
  22. var str = this + "";
  23. var i = -1;
  24.  
  25. if (typeof token === "string") {
  26. if (ignoreCase) {
  27. _token = token.toLowerCase();
  28.  
  29. while ((
  30. i = str.toLowerCase().indexOf(
  31. _token, i >= 0 ? i + newToken.length : 0
  32. )
  33. ) !== -1
  34. ) {
  35. str = str.substring(0, i) +
  36. newToken +
  37. str.substring(i + token.length);
  38. }
  39. } else {
  40. return this.split(token).join(newToken);
  41. }
  42. }
  43. return str;
  44. };
  45. };
  46. FM_COOKIE_MANAGER = {
  47. HIDDEN_DEPARTMENTS_COOKIE_NAME: 'FM_Departments',//Departments - działy
  48. createCookie: function (name, decodedData, days) {
  49. var encodedData = window.btoa(decodedData);
  50.  
  51. var value = encodedData;
  52. var expires;
  53. if (days) {
  54. var date = new Date();
  55. date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
  56. expires = "; expires=" + date.toGMTString();
  57. }
  58. else expires = "";
  59. document.cookie = name + "=" + value + expires + "; path=/";
  60. },
  61. getCookie: function (name) {
  62. var nameEQ = name + "=";
  63. var ca = document.cookie.split(';');
  64. for (var i = 0; i < ca.length; i++) {
  65. var c = ca[i];
  66. while (c.charAt(0) == ' ') c = c.substring(1, c.length);
  67.  
  68. if (c.indexOf(nameEQ) === 0) {
  69. var encodedData = c.substring(nameEQ.length, c.length);
  70. var decodedData = window.atob(encodedData);
  71. return decodedData;
  72. }
  73. }
  74. return null;
  75. },
  76. deleteCookie: function (name) {
  77. document.createCookie(name, "", -1);
  78. },
  79. saveHiddenDepartments: function (dataObject) {
  80. var dataJSON = JSON.stringify(dataObject);
  81. FM_COOKIE_MANAGER.createCookie(FM_COOKIE_MANAGER.HIDDEN_DEPARTMENTS_COOKIE_NAME, dataJSON, 1000);
  82. },
  83. getHiddenDepartments: function () {
  84. var dataJSON = FM_COOKIE_MANAGER.getCookie(FM_COOKIE_MANAGER.HIDDEN_DEPARTMENTS_COOKIE_NAME);
  85. var dataObject = JSON.parse(dataJSON);
  86. if (dataObject === null) {
  87. dataObject = [];
  88. }
  89. return dataObject;
  90. }
  91. };
  92. FM_CSS = {
  93. setAllStyles: function () {
  94. FM_CSS.setTagStyles();
  95. FM_CSS.setShowerButtonStyle();
  96. },
  97. setTagStyles: function () {
  98. var cssPrefix = '.prefix {' + '\n' +
  99. ' vertical-align: middle;' + '\n' +
  100. ' display: inline-block;' + '\n' +
  101. ' height: 16px;' + '\n' +
  102. ' line-height: 16px;' + '\n' +
  103. ' font-size: 9px;' + '\n' +
  104. ' font-weight: bold;' + '\n' +
  105. ' text-transform: uppercase;' + '\n' +
  106. ' text-shadow: rgba(0,0,0,0.2) 0px -1px 0px;' + '\n' +
  107. ' -moz-border-radius: 3px;' + '\n' +
  108. ' -webkit-border-radius: 3px;' + '\n' +
  109. ' border-radius: 3px;' + '\n' +
  110. ' background-repeat: repeat-x;' + '\n' +
  111. ' color: #fff!important;' + '\n' +
  112. ' padding: 3px 9px;' + '\n' +
  113. //' background: #c1a264' + '\n' +//It is in style for every element
  114. '}';
  115. FM_CSS.setStyle(cssPrefix);
  116. var importantTopic = '.importantTopic {' + '\n' +
  117. ' background: #c1a264 url(https://dspl.innogamescdn.com/8.57.1/30830/graphic/screen/tableheader_bg3.png) repeat-x;' + '\n' +
  118. ' background-clip: padding-box;' + '\n' +
  119. ' padding: 3px;' + '\n' +
  120. ' box-sizing: border-box;' + '\n' +
  121. ' height: 23px;' + '\n' +
  122. ' border-top-left-radius: 3px;' + '\n' +
  123. ' border-top-right-radius: 3px;' + '\n' +
  124. ' border-bottom-right-radius: 3px;' + '\n' +
  125. ' border-bottom-left-radius: 3px;' + '\n' +
  126. ' cursor: pointer;' + '\n' +
  127. ' font-weight: bold;' + '\n' +
  128. '}';
  129. FM_CSS.setStyle(importantTopic);
  130. },
  131. setShowerButtonStyle: function () {
  132. var cssBtn = '.showerBtn {' + '\n' +
  133. ' display: inline-block;' + '\n' +
  134. ' background-color: #c6f9b1;' + '\n' +
  135. ' margin-bottom: 4px;' + '\n' +
  136. ' padding: 1px;' + '\n' +
  137. ' border: 1px solid #000;' + '\n' +
  138. ' border-radius: 2px;' + '\n' +
  139. ' white-space: nowrap;' + '\n' +
  140. ' line-height: 130%;' + '\n' +
  141. ' text-shadow: rgba(0,0,0,0.2) 0px -1px 0px;' + '\n' +
  142. '}';
  143. FM_CSS.setStyle(cssBtn);
  144. },
  145. setStyle: function (code) {
  146. var styleElement = document.createElement("style");
  147. styleElement.innerHTML = code;
  148. document.getElementsByTagName("head")[0].appendChild(styleElement);
  149. }
  150. };
  151. FM_SETTER = {
  152. TOPIC_ROW_NAME: 'topicRowName',
  153. setTopicRowNames: function () {
  154. var forumBox = document.getElementById('forum_box');
  155. var forumContainer = forumBox.children[0];
  156. var forumContent = forumContainer.children[2];
  157. var form = forumContent.children[1];
  158. var table = form.children[0];
  159. var topicRows = table.rows;
  160. for (var i = 1; i < topicRows.length - 1; i++) {
  161. var singleTopicRow = topicRows[i];
  162. singleTopicRow.setAttribute('name', FM_SETTER.TOPIC_ROW_NAME);
  163. }
  164. }
  165. };
  166. FM_TAGS = {
  167. setTags: function () {
  168. var rows = document.getElementsByName(FM_SETTER.TOPIC_ROW_NAME);
  169. for (var i = 0; i < rows.length; i++) {
  170. var row = rows[i];
  171. FM_TAGS.setTagsForRow(row);
  172. }
  173. },
  174. setTagsForRow: function (row) {
  175. var title = row.children[0];
  176. var href = FM_TAGS.getHrefFromTitle(title);
  177. var tags = FM_TAGS.getTags(href.textContent);
  178. var spaceToAdd = false;
  179.  
  180. if (FM_TAGS.containsPreffixImportant(title)) {
  181. var text = title.children[2].textContent.replaceAll(':', '!');
  182. var importantPrefix = FM_TAGS.getImportantTag(text);
  183. if (title.children.length === 5) {
  184. title.insertBefore(importantPrefix, title.childNodes[title.childNodes.length - 5]);
  185. } else {
  186. title.insertBefore(importantPrefix, title.childNodes[title.childNodes.length - 3]);
  187. }
  188. title.children[2].remove();
  189. }
  190.  
  191. for (var i = 0; i < tags.length; i++) {
  192. var tagText = tags[i];
  193. var formatedTag = FM_TAGS.getFormatedTag(tagText);
  194.  
  195. title.insertBefore(formatedTag, title.childNodes[5 + i]);
  196. href.textContent = href.textContent.replaceAll(tagText, '');
  197.  
  198. spaceToAdd = true;
  199. }
  200. if (spaceToAdd) {
  201. var space = document.createTextNode(" ");
  202. title.insertBefore(space, title.childNodes[6 + (tags.length - 1)]);
  203. href.textContent = href.textContent.trim();
  204. }
  205. },
  206. getImportantTag: function (tagText) {
  207. var spanElement = document.createElement("SPAN");
  208. tagText = tagText.toUpperCase();
  209. spanElement.textContent = tagText;
  210. spanElement.setAttribute('class', 'importantTopic');
  211. return spanElement;
  212. },
  213. getFormatedTag: function (tagText) {
  214. var spanElement = document.createElement("SPAN");
  215. tagText = tagText.toUpperCase();
  216. spanElement.textContent = tagText;
  217. spanElement.setAttribute('class', 'prefix');
  218. spanElement.setAttribute('style', 'background: ' + FM_TAGS.getTagColour(tagText));
  219. return spanElement;
  220. },
  221. getTagColour: function (tagText) {
  222. switch (tagText) {
  223. case '[I don\'t have any idea]':
  224. return '#c1a264';
  225. default:
  226. var word = tagText.substring(1, tagText.length);
  227. var md5Code = md5(word);
  228. var colour = '#' + md5Code.substring(0, 6);
  229. return colour;
  230. }
  231. },
  232. getTags: function (text) {
  233. var preElements = text.split(']');
  234. var tags = [];
  235. for (var i = 0; i < preElements.length; i++) {
  236. var probablyTag = preElements[i];
  237. probablyTag = probablyTag.trim();
  238. if (probablyTag.startsWith('[')) {
  239. var tag = probablyTag + ']';
  240. tag = tag.trim();
  241. tags.push(tag);
  242. }
  243. }
  244. return tags;
  245. },
  246. getHrefFromTitle: function (title) {
  247. var href = title.children[2];
  248. if (FM_TAGS.containsPreffixImportant(title)) {
  249. href = title.children[3];
  250. }
  251. return href;
  252. },
  253. containsPreffixImportant: function (title) {
  254. var titleElements = title.children;
  255. if (titleElements[2].nodeName == "STRONG") {
  256. return true;
  257. } else {
  258. return false;
  259. }
  260. }
  261. };
  262. FM_DEPARTMENTS_SHOWER = {
  263. getButton: function () {
  264. var btn = document.createElement('BUTTON');
  265. btn.setAttribute('class', 'showerBtn');
  266. //var text = document.createTextNode("Pokaż ukryte fora");
  267. var text = document.createElement('A');
  268. text.textContent = "Pokaż ukryte fora";
  269. btn.appendChild(text);
  270. btn.setAttribute('id', 'btnShowHiddenDepartments')
  271. return btn;
  272. },
  273. onShowHiddenDepartments: function () {
  274. document.getElementById('btnShowHiddenDepartments').remove();
  275. FM_DEPARTMENTS_SHOWER.showHiddenDepartments();
  276. },
  277. showHiddenDepartments: function () {
  278. var code = '';
  279. var hiddenDepartments = FM_DEPARTMENTS_HIDDER.hiddenDepartments;
  280. FM_DEPARTMENTS_HIDDER.hiddenDepartments = [];
  281. for (var i = 0; i < hiddenDepartments.length; i++) {
  282. var space = document.createTextNode(" ");
  283. code += hiddenDepartments[i].outerHTML + space.textContent;
  284. }
  285.  
  286. var forumContainer = document.getElementsByClassName('forum-container')[0];
  287. var mainDiv = forumContainer.children[0];
  288. mainDiv.innerHTML += code;
  289. }
  290. }
  291. FM_DEPARTMENTS_HIDDER = {
  292. hiddenDepartments: [],
  293. hideHiddenDepartments: function () {
  294. var forumContainer = document.getElementsByClassName('forum-container')[0];
  295. var mainDiv = forumContainer.children[0];
  296. var allDepartments = mainDiv.children;
  297. var departmentsToHide = FM_COOKIE_MANAGER.getHiddenDepartments();// ['32696'];
  298.  
  299. var code = '';
  300. for (var i = 0; i < allDepartments.length; i++) {
  301. var department = allDepartments[i];
  302. var id = FM_DEPARTMENTS_HIDDER.getDepartmentID(department);
  303. if (departmentsToHide.includes(id) && !department.getAttribute('class').contains('selected')) {
  304. //FM_DEPARTMENTS_HIDDER.hiddenDepartments.push(department.outerHTML);
  305. FM_DEPARTMENTS_HIDDER.hiddenDepartments.push(department);
  306. } else {
  307. var space = document.createTextNode(" ");
  308. var codePart = department.outerHTML + space.textContent;
  309. code += codePart;
  310. }
  311. }
  312. code += FM_DEPARTMENTS_SHOWER.getButton().outerHTML;
  313.  
  314. var newDIV = document.createElement('DIV');
  315. newDIV.innerHTML = code;
  316. mainDiv.outerHTML = newDIV.outerHTML;
  317.  
  318. document.getElementById('btnShowHiddenDepartments').addEventListener('click', function () {
  319. console.log('clicked!');
  320. FM_DEPARTMENTS_SHOWER.onShowHiddenDepartments();
  321. });
  322. },
  323. getDepartmentID: function (department) {
  324. var hrefElement = department.children[0];
  325. var href = hrefElement.getAttribute('href');
  326.  
  327. var ID = href.split('forum_id=')[1];
  328. return ID;
  329. }
  330. };
  331. FM_APPLET_MANAGER = {
  332. loadApplet: function () {
  333. var forumContent = document.getElementsByClassName('forum-content')[0];
  334. var table = forumContent.children[0];
  335. var tbody = table.children[0];
  336. var hrefRow = tbody.children[0];
  337. var hrefCell = hrefRow.children[hrefRow.children.length - 1];
  338.  
  339. var code = '<a id="appletHideDepartment" href="#" style="font-size: 10px;">' + '\n';
  340. if (FM_APPLET_MANAGER.isActualDepartmentHidden()) {
  341. code += '» Odkryj to forum' + '\n';
  342. } else {
  343. code += '» Ukryj to forum' + '\n';
  344. }
  345. code += '<a>';
  346. hrefCell.innerHTML += code;
  347. document.getElementById('appletHideDepartment').addEventListener('click', function () {
  348. FM_APPLET_MANAGER.onHideForum();
  349. });
  350. },
  351. onHideForum: function () {
  352. var id = FM_APPLET_MANAGER.getActualDepartmentID();
  353. var hiddenList = FM_COOKIE_MANAGER.getHiddenDepartments();
  354. var applet = document.getElementById('appletHideDepartment');
  355.  
  356. if (FM_APPLET_MANAGER.isActualDepartmentHidden()) {
  357. applet.innerText = '» Ukryj to forum' + '\n';
  358. hiddenList.splice(hiddenList.indexOf(id), 1);
  359. } else {
  360. applet.innerText = '» Odkryj to forum' + '\n';
  361. hiddenList[hiddenList.length] = id;
  362. }
  363. FM_COOKIE_MANAGER.saveHiddenDepartments(hiddenList);
  364.  
  365. FM_DEPARTMENTS_SHOWER.onShowHiddenDepartments();
  366. FM_DEPARTMENTS_HIDDER.hideHiddenDepartments();
  367. },
  368. getActualDepartmentID: function () {
  369. var departmentRow = document.getElementsByClassName('shared_selected');
  370. if (departmentRow.length === 0) {
  371. departmentRow = document.getElementsByClassName('forum selected')[0];
  372. } else {
  373. departmentRow = departmentRow[0];
  374. }
  375. var id = FM_DEPARTMENTS_HIDDER.getDepartmentID(departmentRow);
  376. return id;
  377. },
  378. isActualDepartmentHidden: function () {
  379. var hiddenList = FM_COOKIE_MANAGER.getHiddenDepartments();
  380. var id = FM_APPLET_MANAGER.getActualDepartmentID();
  381. return hiddenList.includes(id);
  382. }
  383. };
  384. FM_DISTANCE_SETTER = {
  385. setVillagesDistance: function () {
  386. var rows = document.getElementsByName(FM_SETTER.TOPIC_ROW_NAME);
  387. var howManyEdited = 0;
  388. for (var i = 0; i < rows.length; i++) {
  389. var row = rows[i];
  390. if(FM_DISTANCE_SETTER.setDistanceForRow(row)){
  391. howManyEdited++;
  392. }
  393. }
  394. if(howManyEdited>20){
  395. FM_GAME.setBiggerWindow();
  396. }
  397. },
  398. setDistanceForRow: function (row) {
  399. var title = row.children[0];
  400. var hrefElement = FM_TAGS.getHrefFromTitle(title);
  401. var href = hrefElement.innerHTML;
  402.  
  403. var hrefParts = href.split(' ');
  404. var edited = false;
  405. for (var i = 0; i < hrefParts.length; i++) {
  406. var part = hrefParts[i];
  407.  
  408. if (FM_DISTANCE_SETTER.isThisCoords(part)) {
  409. part = part.trim();
  410. var x = parseInt(part.split('|')[0]);
  411. var y = parseInt(part.split('|')[1]);
  412. var distance = FM_DISTANCE_SETTER.getDistanceFromActualVillage(x, y);
  413. distance = Math.round(distance);
  414. var code = part + '<font size="1"><i>(Odległość: ' + distance + ')</i></font>';
  415. href = href.replaceAll(part, code);
  416. edited = true;
  417. }
  418. }
  419. hrefElement.innerHTML = href;
  420. return edited;
  421. //console.log(href);
  422. },
  423. isThisCoords: function (text) {
  424. var match = text.match(/^([0-9]{1,3})\|([0-9]{1,3})$/);
  425. return (match !== null);
  426. },
  427. getDistanceFromActualVillage: function (x, y) {
  428. var ownVillage = {
  429. x: game_data.village.x,
  430. y: game_data.village.y
  431. };
  432. var tartgetVillage = {
  433. x: x,
  434. y: y
  435. }
  436. return FM_DISTANCE_SETTER.getDistance(ownVillage, tartgetVillage);
  437. },
  438. getDistance: function (v1, v2) {
  439. return Math.sqrt(
  440. (Math.pow(
  441. (v1.x - v2.x), 2
  442. ) +
  443. Math.pow(
  444. (v1.y - v2.y), 2
  445. )
  446. ));
  447. }
  448. };
  449. FM_LOADER = {
  450. preloader: function () {
  451. setTimeout(function () {
  452. if (FM_LOADER.canRun()) {
  453. FM_LOADER.load();
  454. } else {
  455. FM_LOADER.preloader();
  456. }
  457. }, 10);
  458. },
  459. canRun: function () {
  460. if (game_data.screen.toLowerCase() === 'forum') {
  461. return true;
  462. }
  463. return false;
  464. },
  465. load: function () {
  466. //load basic settings
  467. if (!window.location.search.contains('&thread_id=')) {
  468. FM_SETTER.setTopicRowNames();
  469. }
  470. FM_CSS.setAllStyles();
  471.  
  472. //load others settings
  473. FM_DEPARTMENTS_HIDDER.hideHiddenDepartments();
  474. FM_APPLET_MANAGER.loadApplet();
  475. if (!window.location.search.contains('&thread_id=')) {
  476. FM_DISTANCE_SETTER.setVillagesDistance();//must be first because function below modify html code so hard
  477. FM_TAGS.setTags();
  478. }
  479. }
  480. };
  481. FM_GAME = {
  482. setBiggerWindow: function(){
  483. var mainCell = document.getElementsByClassName('maincell')[0];
  484. mainCell.setAttribute('style', 'width: 1000px;')
  485. }
  486. };
  487. //md5
  488. (function ($) {
  489. /*
  490. * JavaScript MD5
  491. * https://github.com/blueimp/JavaScript-MD5
  492. *
  493. * Copyright 2011, Sebastian Tschan
  494. * https://blueimp.net
  495. *
  496. * Licensed under the MIT license:
  497. * http://www.opensource.org/licenses/MIT
  498. *
  499. * Based on
  500. * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
  501. * Digest Algorithm, as defined in RFC 1321.
  502. * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
  503. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
  504. * Distributed under the BSD License
  505. * See http://pajhome.org.uk/crypt/md5 for more info.
  506. */
  507.  
  508. /* global define */
  509.  
  510. 'use strict'
  511.  
  512. /*
  513. * Add integers, wrapping at 2^32. This uses 16-bit operations internally
  514. * to work around bugs in some JS interpreters.
  515. */
  516. function safeAdd(x, y) {
  517. var lsw = (x & 0xFFFF) + (y & 0xFFFF)
  518. var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
  519. return (msw << 16) | (lsw & 0xFFFF)
  520. }
  521.  
  522. /*
  523. * Bitwise rotate a 32-bit number to the left.
  524. */
  525. function bitRotateLeft(num, cnt) {
  526. return (num << cnt) | (num >>> (32 - cnt))
  527. }
  528.  
  529. /*
  530. * These functions implement the four basic operations the algorithm uses.
  531. */
  532. function md5cmn(q, a, b, x, s, t) {
  533. return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)
  534. }
  535. function md5ff(a, b, c, d, x, s, t) {
  536. return md5cmn((b & c) | ((~b) & d), a, b, x, s, t)
  537. }
  538. function md5gg(a, b, c, d, x, s, t) {
  539. return md5cmn((b & d) | (c & (~d)), a, b, x, s, t)
  540. }
  541. function md5hh(a, b, c, d, x, s, t) {
  542. return md5cmn(b ^ c ^ d, a, b, x, s, t)
  543. }
  544. function md5ii(a, b, c, d, x, s, t) {
  545. return md5cmn(c ^ (b | (~d)), a, b, x, s, t)
  546. }
  547.  
  548. /*
  549. * Calculate the MD5 of an array of little-endian words, and a bit length.
  550. */
  551. function binlMD5(x, len) {
  552. /* append padding */
  553. x[len >> 5] |= 0x80 << (len % 32)
  554. x[(((len + 64) >>> 9) << 4) + 14] = len
  555.  
  556. var i
  557. var olda
  558. var oldb
  559. var oldc
  560. var oldd
  561. var a = 1732584193
  562. var b = -271733879
  563. var c = -1732584194
  564. var d = 271733878
  565.  
  566. for (i = 0; i < x.length; i += 16) {
  567. olda = a
  568. oldb = b
  569. oldc = c
  570. oldd = d
  571.  
  572. a = md5ff(a, b, c, d, x[i], 7, -680876936)
  573. d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)
  574. c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)
  575. b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)
  576. a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)
  577. d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)
  578. c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)
  579. b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)
  580. a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)
  581. d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)
  582. c = md5ff(c, d, a, b, x[i + 10], 17, -42063)
  583. b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)
  584. a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)
  585. d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)
  586. c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)
  587. b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)
  588.  
  589. a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)
  590. d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)
  591. c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)
  592. b = md5gg(b, c, d, a, x[i], 20, -373897302)
  593. a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)
  594. d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)
  595. c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)
  596. b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)
  597. a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)
  598. d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)
  599. c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)
  600. b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)
  601. a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)
  602. d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)
  603. c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)
  604. b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)
  605.  
  606. a = md5hh(a, b, c, d, x[i + 5], 4, -378558)
  607. d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)
  608. c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)
  609. b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)
  610. a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)
  611. d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)
  612. c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)
  613. b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)
  614. a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)
  615. d = md5hh(d, a, b, c, x[i], 11, -358537222)
  616. c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)
  617. b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)
  618. a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)
  619. d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)
  620. c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)
  621. b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)
  622.  
  623. a = md5ii(a, b, c, d, x[i], 6, -198630844)
  624. d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)
  625. c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)
  626. b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)
  627. a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)
  628. d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)
  629. c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)
  630. b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)
  631. a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)
  632. d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)
  633. c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)
  634. b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)
  635. a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)
  636. d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)
  637. c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)
  638. b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)
  639.  
  640. a = safeAdd(a, olda)
  641. b = safeAdd(b, oldb)
  642. c = safeAdd(c, oldc)
  643. d = safeAdd(d, oldd)
  644. }
  645. return [a, b, c, d]
  646. }
  647.  
  648. /*
  649. * Convert an array of little-endian words to a string
  650. */
  651. function binl2rstr(input) {
  652. var i
  653. var output = ''
  654. var length32 = input.length * 32
  655. for (i = 0; i < length32; i += 8) {
  656. output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF)
  657. }
  658. return output
  659. }
  660.  
  661. /*
  662. * Convert a raw string to an array of little-endian words
  663. * Characters >255 have their high-byte silently ignored.
  664. */
  665. function rstr2binl(input) {
  666. var i
  667. var output = []
  668. output[(input.length >> 2) - 1] = undefined
  669. for (i = 0; i < output.length; i += 1) {
  670. output[i] = 0
  671. }
  672. var length8 = input.length * 8
  673. for (i = 0; i < length8; i += 8) {
  674. output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32)
  675. }
  676. return output
  677. }
  678.  
  679. /*
  680. * Calculate the MD5 of a raw string
  681. */
  682. function rstrMD5(s) {
  683. return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))
  684. }
  685.  
  686. /*
  687. * Calculate the HMAC-MD5, of a key and some data (raw strings)
  688. */
  689. function rstrHMACMD5(key, data) {
  690. var i
  691. var bkey = rstr2binl(key)
  692. var ipad = []
  693. var opad = []
  694. var hash
  695. ipad[15] = opad[15] = undefined
  696. if (bkey.length > 16) {
  697. bkey = binlMD5(bkey, key.length * 8)
  698. }
  699. for (i = 0; i < 16; i += 1) {
  700. ipad[i] = bkey[i] ^ 0x36363636
  701. opad[i] = bkey[i] ^ 0x5C5C5C5C
  702. }
  703. hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)
  704. return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))
  705. }
  706.  
  707. /*
  708. * Convert a raw string to a hex string
  709. */
  710. function rstr2hex(input) {
  711. var hexTab = '0123456789abcdef'
  712. var output = ''
  713. var x
  714. var i
  715. for (i = 0; i < input.length; i += 1) {
  716. x = input.charCodeAt(i)
  717. output += hexTab.charAt((x >>> 4) & 0x0F) +
  718. hexTab.charAt(x & 0x0F)
  719. }
  720. return output
  721. }
  722.  
  723. /*
  724. * Encode a string as utf-8
  725. */
  726. function str2rstrUTF8(input) {
  727. return unescape(encodeURIComponent(input))
  728. }
  729.  
  730. /*
  731. * Take string arguments and return either raw or hex encoded strings
  732. */
  733. function rawMD5(s) {
  734. return rstrMD5(str2rstrUTF8(s))
  735. }
  736. function hexMD5(s) {
  737. return rstr2hex(rawMD5(s))
  738. }
  739. function rawHMACMD5(k, d) {
  740. return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))
  741. }
  742. function hexHMACMD5(k, d) {
  743. return rstr2hex(rawHMACMD5(k, d))
  744. }
  745.  
  746. function md5(string, key, raw) {
  747. if (!key) {
  748. if (!raw) {
  749. return hexMD5(string)
  750. }
  751. return rawMD5(string)
  752. }
  753. if (!raw) {
  754. return hexHMACMD5(key, string)
  755. }
  756. return rawHMACMD5(key, string)
  757. }
  758.  
  759. if (typeof define === 'function' && define.amd) {
  760. define(function () {
  761. return md5
  762. })
  763. } else if (typeof module === 'object' && module.exports) {
  764. module.exports = md5
  765. } else {
  766. $.md5 = md5
  767. }
  768. } (this));
  769. //start script
  770. FM_LOADER.preloader();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement