Paymh

Untitled

Apr 11th, 2017
2,088
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 54.74 KB | None | 0 0
  1. const SETTINGS_COOKIE_NAME = "sitePrefs";
  2. var friendsArray;
  3. var myPermissions = null;
  4. (function(A) {
  5. A.fn.votesCounterBar = function(B) {
  6. this.each(function() {
  7. var C = A(this).find(".votesCounterBar");
  8. var D = parseInt(A(this).find("div.votesNumber").text());
  9. C.width((((B - D) / B) * 100) + "%")
  10. });
  11. return this
  12. }
  13. }(jQuery));
  14. (function(A) {
  15. A.fn.animateNumbers = function(B, C) {
  16. return this.each(function() {
  17. var E = A(this);
  18. var D = parseInt(E.text());
  19. A({
  20. value: 0
  21. }).animate({
  22. value: D
  23. }, {
  24. duration: B === undefined ? 1000 : B,
  25. easing: C === undefined ? "swing" : C,
  26. step: function() {
  27. E.text(Math.floor(this.value))
  28. },
  29. complete: function() {
  30. if (parseInt(E.text()) !== D) {
  31. E.text(D)
  32. }
  33. }
  34. })
  35. })
  36. }
  37. }(jQuery));
  38. $(document).ready(function() {
  39. initGlobals();
  40. p();
  41. $(".playerTopMenu .trigger").click(function() {
  42. $(this).toggleClass("active");
  43. if ($(this).is(".active")) {
  44. $(".playerTopMenu .icons.carrot.grey").removeClass("down").addClass("up");
  45. $(".speechBubble").css("z-index", 0);
  46. $(".playerTopMenu").animate({
  47. height: advancedLobbiesReleased ? "137px" : "108px"
  48. }, 200)
  49. } else {
  50. $(".playerTopMenu .icons.carrot.grey").removeClass("up").addClass("down");
  51. $(".playerTopMenu").animate({
  52. height: "45px"
  53. }, 200, function() {
  54. $(".speechBubble").css("z-index", 200)
  55. })
  56. }
  57. });
  58. if (advancedLobbiesReleased) {
  59. $("#trigg_menu1").click(function() {
  60. var A = function() {
  61. $("#trigg_menu1 .icons.carrot.micro").removeClass("up").addClass("down");
  62. $("#wrap_menu1 #drop_menu1").slideUp(200, function() {
  63. $("#trigg_menu1").removeClass("active");
  64. $(this).removeClass("active")
  65. })
  66. };
  67. $(this).toggleClass("active");
  68. if ($(this).is(".active")) {
  69. $("#trigg_menu1 .icons.carrot.micro").removeClass("down").addClass("up");
  70. $("#wrap_menu1 #drop_menu1").addClass("active").slideDown(200)
  71. } else {
  72. A()
  73. }
  74. $("#trigg_menu1, #wrap_menu1, #drop_menu1").each(function(B, C) {
  75. if (typeof C !== "boolean") {
  76. $(C).click(function(D) {
  77. D.stopPropagation ? D.stopPropagation() : (D.cancelBubble = true)
  78. })
  79. }
  80. });
  81. $("html").click(function() {
  82. A()
  83. });
  84. $("#drop_menu1 a").click(function() {
  85. A()
  86. });
  87. return false
  88. })
  89. }
  90. $("#info-bar .lobbySort").click(function() {
  91. if ($(this).is(".active")) {
  92. $(".carrot", this).removeClass("up").addClass("down");
  93. $(this).removeClass("active")
  94. } else {
  95. $("#info-bar .lobbySort").removeClass("active");
  96. $("#info-bar .lobbySort .carrot").removeClass("up").addClass("down");
  97. $(".carrot", this).removeClass("down").addClass("up");
  98. $(this).addClass("active")
  99. }
  100. });
  101. $(".content-requirements input[type='radio']").change(function() {
  102. update_restrictions($(this).val())
  103. });
  104. $("#game-type").change(function() {
  105. $(".class-reservations").html($("#class-reservations-" + $(this).val()).html());
  106. $(".class-reservations .class-row .slot").click(function() {
  107. if ($(this).hasClass("reserved")) {
  108. $(this).removeClass("reserved");
  109. $(this).children(".reserve").removeClass("lock");
  110. $(this).children(".reserve").addClass("unlock");
  111. $(this).children("label").text("Reserve slot")
  112. } else {
  113. $(this).addClass("reserved");
  114. $(this).children(".reserve").removeClass("unlock");
  115. $(this).children(".reserve").addClass("lock");
  116. $(this).children("label").text("Reserved")
  117. }
  118. });
  119. selected_requirements = $(".content-requirements input[type='radio']:checked").val();
  120. if (selected_requirements == "some-classes-requirements") {
  121. update_restrictions(selected_requirements)
  122. }
  123. });
  124. $("#advancedSettingsLink").click(function() {
  125. if ($(".content-advanced").hasClass("hidden")) {
  126. $("#advancedSettingsLink .carrot").removeClass("right");
  127. $("#advancedSettingsLink .carrot").addClass("left");
  128. $("#_wicket_window_0").animate({
  129. width: [967, "swing"]
  130. }, 200, function() {
  131. $(".content-advanced").removeClass("hidden")
  132. })
  133. } else {
  134. $(".content-advanced").addClass("hidden");
  135. $("#_wicket_window_0").animate({
  136. width: [474, "swing"]
  137. }, 200);
  138. $("#advancedSettingsLink .carrot").removeClass("left");
  139. $("#advancedSettingsLink .carrot").addClass("right")
  140. }
  141. });
  142. $("#shareLinkBtn").click(function() {
  143. $("#linkInput").addClass("selected green");
  144. $("#linkText").removeClass("invisible");
  145. return false
  146. });
  147. $("#enterPasswordBtn").click(function() {
  148. $("#enterPasswordInput").addClass("selected red");
  149. $("#wrongPasswordText").removeClass("invisible");
  150. return false
  151. });
  152. if ($(".wicket-modal input:radio").length) {
  153. $(".wicket-modal input:radio").transformRadio({
  154. base: "image",
  155. checked: "../assets/images/box_checked_dark.png",
  156. unchecked: "../assets/images/box_unchecked_dark.png"
  157. });
  158. $(".wicket-modal input:radio").each(function() {
  159. var A = this;
  160. $("label[for='" + A.id + "']").click(function() {
  161. $("#" + A.id + " + img").click()
  162. })
  163. })
  164. }
  165. $(".playerScrollContainerLoading").addClass("hidden");
  166. $(".playerScrollContainer").removeClass("hidden");
  167. if ($(".scrollable").length) {
  168. $(".scrollable").jScrollPane()
  169. }
  170. initConnectionPanelHeader();
  171. $("textArea#chatInput").keypress(function(A) {
  172. if (A.keyCode == 13) {
  173. A.preventDefault(A)
  174. }
  175. });
  176. $("#FAQmenu h3").click(function() {
  177. $("#FAQmenu ul ul").slideUp();
  178. if (!$(this).next().is(":visible")) {
  179. $(this).next().slideDown()
  180. }
  181. });
  182. $("#info-bar .playersOnline.hideable").click(function() {
  183. if ($(this).is(".active")) {
  184. $(".carrot", this).removeClass("up").addClass("down");
  185. $(this).removeClass("active");
  186. $("#players-online").stop().slideUp(300);
  187. toggleChatSize()
  188. } else {
  189. $("#info-bar .infoPanel").removeClass("active");
  190. $("#info-bar .infoPanel .carrot").removeClass("up").addClass("down");
  191. $(".carrot", this).removeClass("down").addClass("up");
  192. $(this).addClass("active");
  193. $("#players-online").stop().slideDown(300);
  194. toggleChatSize()
  195. }
  196. });
  197. $("#achvFullBtn").click(function() {
  198. if ($(this).hasClass("off")) {
  199. $(this).removeClass("off").addClass("on");
  200. $("#achvCompBtn").removeClass("on").addClass("off");
  201. $(this).parent().removeClass("active");
  202. $(".achvItem").removeClass("ym-g1220-3").addClass("ym-g1220-6");
  203. $(".achvDesc, .achvGrades").show(200)
  204. } else {
  205. return
  206. }
  207. });
  208. $("#achvCompBtn").click(function() {
  209. if ($(this).hasClass("off")) {
  210. $(this).removeClass("off").addClass("on");
  211. $("#achvFullBtn").removeClass("on").addClass("off");
  212. $(this).parent().removeClass("active");
  213. $(".achvItem").removeClass("ym-g1220-6").addClass("ym-g1220-3");
  214. $(".achvDesc, .achvGrades").hide(200)
  215. } else {
  216. return
  217. }
  218. });
  219. $("#achvCompBtn, #achvFullBtn").hover(function() {
  220. if ($(this).hasClass("off")) {
  221. $(this).parent().addClass("active")
  222. }
  223. }, function() {
  224. if ($(this).hasClass("off")) {
  225. $(this).parent().removeClass("active")
  226. }
  227. });
  228. $(".userBansHeader").click(function() {
  229. $(".userBansList").slideToggle(400);
  230. $(".userBansHeader .arrow").toggleClass("down")
  231. });
  232. ranksChartAnimation();
  233. if (!advancedLobbiesReleased) {
  234. showALcountDown()
  235. }
  236. });
  237.  
  238. function showALcountDown() {
  239. try {
  240. var E = countdown(new Date(), 1467482400680, countdown.HOURS | countdown.MINUTES | countdown.SECONDS, 0, 0).toString();
  241. if (Date.now() < 1467482400680) {
  242. var B = /(\d+).+?(\d+).+?(\d+)/g.exec(E);
  243. var A = leadZero(B[1]);
  244. var D = leadZero(B[2]);
  245. var C = leadZero(B[3]);
  246. $("#alCountdownTimer").text(A + ":" + D + ":" + C)
  247. }
  248. } catch (F) {}
  249. setTimeout(showALcountDown, 1000)
  250. }
  251.  
  252. function leadZero(A) {
  253. return A < 10 ? "0" + A : A
  254. }
  255.  
  256. function initGlobals() {
  257. myPermissions = $.parseJSON(permissions)
  258. }
  259.  
  260. function hasPermission(A) {
  261. if (!myPermissions) {
  262. initGlobals()
  263. }
  264. return myPermissions.indexOf(A) > -1
  265. }
  266.  
  267. function closeMenu() {
  268. $(".playerTopMenu .trigger").click()
  269. }
  270.  
  271. function update_restrictions(A) {
  272. if (A == "some-classes-requirements") {
  273. $(".class-requirements").html($("#" + A + "-" + $("#game-type").val()).html())
  274. } else {
  275. $(".class-requirements").html($("#" + A).html())
  276. }
  277. }
  278.  
  279. function checkAndAddDefaultPort() {
  280. var A = $("#hostAndPort").val();
  281. if (A != "" && A.indexOf(":") == -1) {
  282. $("#hostAndPort").val(A + ":27015")
  283. }
  284. }
  285.  
  286. function setPreReadyTimer(C, A) {
  287. if ($(document).ready) {
  288. var D = "#pre-ready-timer";
  289. var B = "#pre-ready-button";
  290. $(D).buildCounter({
  291. now_timestamp: A - C,
  292. stardate_timestamp: 0,
  293. enddate_timestamp: A+10000,
  294. color: "#213438",
  295. backgroundcolor: "#3f5a61",
  296. backgroundwidth: "4",
  297. frontwidth: "6",
  298. size: "36",
  299. countsize: "8",
  300. countcolor: "#5f94a2",
  301. callback: function() {
  302. $(D).trigger("click")
  303. },
  304. });
  305. $(B).hide();
  306. $(D).show()
  307. } else {
  308. return
  309. }
  310. }
  311.  
  312. function isMySteamId(A) {
  313. return (typeof mySteamId != "undefined") && (mySteamId == A)
  314. }
  315.  
  316. function initConnectionPanelHeader() {
  317. $("#connectionPanel .connectionHeader span").click(function() {
  318. $(this).toggleClass("active");
  319. if ($(this).is(".active")) {
  320. $("#connectionPanel .connectionHeader .icons.carrot.grey").removeClass("down").addClass("up");
  321. $("#connectionPanel .connectionDetails").stop().slideDown(200, "swing", function() {
  322. $(this).css("display", "table")
  323. })
  324. } else {
  325. $("#connectionPanel .connectionHeader .icons.carrot.grey").removeClass("up").addClass("down");
  326. $("#connectionPanel .connectionDetails").css("display", "block");
  327. $("#connectionPanel .connectionDetails").stop().slideUp(200, "swing")
  328. }
  329. })
  330. }
  331.  
  332. function meetsHoursRestriction(A) {
  333. return typeof A === "undefined" || myTotalHoursPlayed >= A
  334. }
  335.  
  336. function meetsMinimumLobbiesRestriction(A) {
  337. return typeof A === "undefined" || myLobbiesPlayed >= A
  338. }
  339.  
  340. function meetsReliabilityRestriction(A) {
  341. return typeof A === "undefined" || myReliability >= A
  342. }
  343.  
  344. function isHostUp(A) {
  345. result = false;
  346. jQuery.ajax({
  347. url: "http://" + A + "/about",
  348. async: false,
  349. success: function() {
  350. result = true
  351. }
  352. });
  353. return result
  354. }
  355.  
  356. function ranksChartAnimation() {
  357. var C = $(".ranksChartCol").toArray(),
  358. A, B = 0;
  359. A = setInterval(function() {
  360. $(C[B]).slideDown(500, "easeOutBounce");
  361. ++B;
  362. if (C[B] === undefined) {
  363. clearInterval(A);
  364. return
  365. }
  366. }, 50)
  367. }
  368.  
  369. function isSteamFriend(A) {
  370. if (friendsArray == undefined) {
  371. if (friendsJsonStr == undefined || friendsJsonStr == null) {
  372. return false
  373. }
  374. friendsArray = $.parseJSON(friendsJsonStr)
  375. }
  376. return friendsArray.indexOf(A) !== -1
  377. }
  378.  
  379. function isMe(A) {
  380. return A == mySteamId
  381. }
  382.  
  383. function initServerFieldsFromSettings() {
  384. if ($("#hostAndPort").val().length == 0) {
  385. $("#hostAndPort").val(settings.serverHost);
  386. $("#rcon").val(settings.serverRcon)
  387. }
  388. }
  389.  
  390. function getSettings() {
  391. var A = loadFromCookie();
  392. if (A == null) {
  393. A = getDefaultSettings()
  394. }
  395. return A
  396. }
  397.  
  398. function getDefaultSettings() {
  399. return {
  400. soundVolume: 75,
  401. enableDesktopNotifications: false,
  402. enableSoundNotifications: true,
  403. serverHost: null,
  404. serverRcon: null
  405. }
  406. }
  407.  
  408. function loadFromCookie() {
  409. return Cookies.getJSON(SETTINGS_COOKIE_NAME)
  410. }
  411.  
  412. function saveSettings(A) {
  413. Cookies.set(SETTINGS_COOKIE_NAME, A, {
  414. expires: 1000
  415. })
  416. }
  417. if (navigator.userAgent.indexOf("Googlebot") == -1) {
  418. if (!("WebSocket" in window) || navigator.userAgent.indexOf("MSIE") > -1 || navigator.userAgent.indexOf("Valve Steam GameOverlay") > -1) {
  419. window.location = "/unsupported"
  420. }
  421. }
  422. const VALID_AD_INS_COUNT = 3;
  423. $(document).ready(function() {
  424. var D = $(".join-steam-group").length;
  425. var E = $(".joinALs").length;
  426. B(0);
  427. setInterval(function() {
  428. //if (C()) {
  429. // window.location = "/adblock"
  430. //}
  431. }, 3000);
  432. if (D) {
  433. $(".join-steam-group").show();
  434. $(".join-steam-group").animate({
  435. height: "26px"
  436. }, 250, "swing")
  437. }
  438. if (E) {
  439. $(".joinALs").show();
  440. $(".joinALs").animate({
  441. height: "26px"
  442. }, 250, "swing")
  443. }
  444. if (D || E) {
  445. $(".youShallNotPassEnabled").animate({
  446. marginTop: "29px"
  447. }, 300, "swing")
  448. } else {
  449. $(".youShallNotPassEnabled").removeClass("youShallNotPassEnabled")
  450. }
  451.  
  452. function C() {
  453. if (noAds || mySteamId == "" || myLobbiesPlayed < 50) {
  454. return false
  455. }
  456. var H = window.location.pathname;
  457. if (H.indexOf("/lobbies") == 0 || H.indexOf("/profile") == 0) {
  458. var G = $("._containerVer ins").length;
  459. var F = $("._containerVerRight ins").length;
  460. if (G < VALID_AD_INS_COUNT || F < VALID_AD_INS_COUNT || !A(H)) {
  461. return true
  462. }
  463. }
  464. return false
  465. }
  466.  
  467. function A(F) {
  468. return $("#aswift_0_anchor > iframe")[0].isVisible(160, 600) && $("#aswift_1_anchor > iframe")[0].isVisible(160, 600) && (F != "/lobbies" || $("#aswift_2_anchor > iframe")[0].isVisible(718, 90))
  469. }
  470.  
  471. function B(F) {
  472. if (!C()) {
  473. return false
  474. }
  475. //if (F > 40) {
  476. // window.location = "/adblock";
  477. // return
  478. //}
  479. setTimeout(function() {
  480. B(F + 1)
  481. }, 50)
  482. }
  483. });
  484.  
  485. function isBlocked2(A) {
  486. return !A || A.closed || typeof A.closed == "undefined" || A.outerHeight === 0
  487. }
  488.  
  489. function openWindow(B, A) {
  490. var C = window.open(B, A);
  491. setTimeout(function() {
  492. if (isBlocked2(C)) {
  493. alert("Your browser is blocking a new window! Please adjust popup settings for this domain.")
  494. }
  495. }, 1000)
  496. }
  497.  
  498. function playReadySoundHeavy() {
  499. playSound(settings, "/assets/sounds/ready_heavy.wav", "Lobby is ready!")
  500. }
  501.  
  502. function playSteamMsg() {
  503. playSound({
  504. enableSoundNotifications: true,
  505. soundVolume: 100,
  506. enableDesktopNotifications: settings.enableDesktopNotifications
  507. }, "/assets/sounds/steam_msg.mp3", "A moderator has pinged you!")
  508. }
  509.  
  510. function playLaunchSoundAnnouncer() {
  511. playSound(settings, "/assets/sounds/announcer_am_gamestarting.mp3", "Lobby has launched!")
  512. }
  513.  
  514. function playIncomingSoundHeavy() {
  515. playSound(settings, "/assets/sounds/incoming_heavy.ogg", "Critical notification received!")
  516. }
  517.  
  518. function playPrematureLobbyEnding() {
  519. playSound(settings, "/assets/sounds/heavy_premature_ending.wav", "Lobby closed or you were kicked!")
  520. }
  521.  
  522. function playAchievementUnlocked() {
  523. new Audio("/assets/sounds/achievement-unlocked.mp3").play()
  524. }
  525.  
  526. function playTeamsBalanced() {
  527. playSound(settings, "/assets/sounds/gong.mp3", "Lobby balanced!")
  528. }
  529.  
  530. function p() {
  531. new Audio("/assets/sounds/v.wav").play()
  532. }
  533.  
  534. function playSound(A, C, D) {
  535. if (A.enableSoundNotifications) {
  536. var B = new Audio(C);
  537. B.volume = A.soundVolume / 100;
  538. B.play()
  539. }
  540. showDesktopNotification(A, D)
  541. }
  542.  
  543. function showDesktopNotification(A, B) {
  544. if (A.enableDesktopNotifications) {
  545. var C = new Notification("TF2Center", {
  546. body: B,
  547. icon: "/assets/images/tf2center_logo_archimedes.png"
  548. });
  549. C.onclick = function(D) {
  550. window.focus();
  551. C.close()
  552. };
  553. setTimeout(function() {
  554. C.close()
  555. }, 8000)
  556. }
  557. }
  558.  
  559. function delayedReload(A) {
  560. setTimeout("location.href='" + A + "'", 2000)
  561. }
  562.  
  563. function advancedLobbyClearAnimation() {
  564. var A = 0;
  565. players = shufflePlayers($(".blue-team div.playerSlot.lobbySlot, .red-team div.playerSlot.lobbySlot").toArray());
  566. $("#balanceLogo").addClass("balanceProgress");
  567. setInterval(function() {
  568. $(players[A]).children(".showOnHover").hide();
  569. $(players[A]).children(":not(.showOnHover)").fadeToggle(200, function() {
  570. if ($(this).is(":last-child")) {
  571. $(this).parent().css({
  572. "border-bottom": "1px solid #1b1b1b"
  573. }).animate({
  574. "background-color": "#2c2b2b"
  575. }, 200)
  576. }
  577. });
  578. ++A
  579. }, 100)
  580. }
  581.  
  582. function advancedLobbyFillAnimation() {
  583. var A = $(".blue-team div.playerSlot.lobbySlot").toArray(),
  584. C = $(".red-team div.playerSlot.lobbySlot").toArray(),
  585. B = 0;
  586. $("#lobbyPanel").addClass("balanced");
  587. $("#balanceLogo").removeClass("balanceProgress").addClass("balanceDone");
  588. playTeamsBalanced();
  589. $(".blue-team .playerSlot.header.advanced").animate({
  590. "background-color": "#48707d",
  591. "border-bottom-color": "#2e4952"
  592. }, 200, function() {
  593. $(this).removeClass("advanced").addClass("blue")
  594. });
  595. $(".red-team .playerSlot.header.advanced").animate({
  596. "background-color": "#9e403d",
  597. "border-bottom-color": "#66302e"
  598. }, 200, function() {
  599. $(this).removeClass("advanced").addClass("red")
  600. });
  601. setInterval(function() {
  602. $(C[B]).removeClass("balanced-hidden").css({
  603. "border-bottom": "1px solid #2c2b2b"
  604. }).animate({
  605. "background-color": "#1b1b1b"
  606. }, 200);
  607. $(A[B]).removeClass("balanced-hidden").css({
  608. "border-bottom": "1px solid #2c2b2b"
  609. }).animate({
  610. "background-color": "#1b1b1b"
  611. }, 200);
  612. ++B
  613. }, 600)
  614. }
  615.  
  616. function shufflePlayers(A) {
  617. for (var C = A.length - 1; C > 0; C--) {
  618. var B = Math.floor(Math.random() * (C + 1));
  619. var D = A[B];
  620. A[B] = A[C];
  621. A[C] = D
  622. }
  623. return A
  624. }
  625. $(document).ready(function() {
  626. setupChatScrollPane(true);
  627. setupChatHandling()
  628. });
  629.  
  630. function addChatMsg(A, B) {
  631. if (!checkLobbyFilter(B)) {
  632. return
  633. }
  634. var C = $(".chatLinePanel.templateHolder li").clone();
  635. var F = "/profile/" + A.authorSteamId;
  636. var E = new Date(A.created).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
  637. C.find(".date").text(E);
  638. C.find(".author").attr("href", F);
  639. if (A.admin) {
  640. C.find(".author .name").addClass("admin");
  641. C.find(".message").addClass("admin")
  642. }
  643. if (A.donator) {
  644. C.find(".author .name").addClass("donator")
  645. } else {
  646. C.find(".donateLink").hide()
  647. }
  648. if (!A.advanced) {
  649. C.find(".icons.playerRank.blue").hide()
  650. }
  651. if (isMySteamId(A.authorSteamId)) {
  652. C.find(".author").addClass("me")
  653. }
  654. if (isSteamFriend(A.authorSteamId)) {
  655. C.find(".author").addClass("friend");
  656. C.find(".author .icons.person").addClass("friend")
  657. }
  658. C.find(".author .name").text(A.authorName);
  659. C.find(".message").html(A.message);
  660. var D = $(".chatScrollContainer").jScrollPane().data("jsp").getIsScrollableV() == false || $(".chatScrollContainer").jScrollPane().data("jsp").getPercentScrolledY() == 1;
  661. $("#chat .chatContainer").append(C);
  662. if ($("#chat .chatContainer > li").size() > 250) {
  663. $("#chat .chatContainer > li").slice(0, -250).remove()
  664. }
  665. setupChatScrollPane(D)
  666. }
  667.  
  668. function checkLobbyFilter(A) {
  669. try {
  670. if (A != null && !lobbyMatchesFilter1(A)) {
  671. return false
  672. }
  673. } catch (B) {}
  674. return true
  675. }
  676.  
  677. function setupChatScrollPane(B) {
  678. if (!$(".chatScrollContainer").length) {
  679. return
  680. }
  681. var A = $(".chatScrollContainer").jScrollPane().data("jsp");
  682. if (B == true || A != null && A.getPercentScrolledY() == 1) {
  683. A.scrollToPercentY(100)
  684. } else {
  685. $(".chatScrollContainer").jScrollPane({
  686. maintainPosition: true
  687. })
  688. }
  689. }
  690.  
  691. function setupChatHandling() {
  692. var A = function() {
  693. var C = $("#chatInput").val();
  694. if (C.trim().length > 0) {
  695. var B = $.post("/rest/chat", {
  696. msg: C
  697. });
  698. B.always(function(D) {
  699. if (D.blocked) {
  700. D.message = "BLOCKED: " + D.message;
  701. addChatMsg(D, null)
  702. }
  703. });
  704. $("#chatInput").val("")
  705. }
  706. };
  707. $("#chatInput").keyup(function(B) {
  708. if (B.keyCode == 13) {
  709. A()
  710. }
  711. });
  712. $("#chatSayBtn").on("click", A)
  713. }
  714.  
  715. function toggleChatSize() {
  716. var A = 535;
  717. if ($(".chatScrollContainer").height() == 535) {
  718. A = 250
  719. }
  720. $(".chatScrollContainer").animate({
  721. height: A
  722. }, {
  723. duration: 300,
  724. queue: false
  725. });
  726. $("#chat .scrollable").animate({
  727. height: A
  728. }, {
  729. duration: 300,
  730. queue: false
  731. });
  732. setTimeout(function() {
  733. $(".chatScrollContainer").jScrollPane().data("jsp").scrollToPercentY(100)
  734. }, 450);
  735. $(".chatPanel").animate({
  736. height: A + 150
  737. }, {
  738. duration: 300,
  739. queue: false
  740. })
  741. }
  742.  
  743. function createLobbyOverviewItemElement(E) {
  744. var B = $(".lobby.templateHolder div.lobbyOverviewPanel").clone();
  745. var F = E.no;
  746. B.attr("id", "lobbyOverview-" + F);
  747. B.find("a.lobbyLink").attr("href", "/lobbies/" + F);
  748. B.find(".lobbyID").text("#" + F);
  749. B.find(".icons.flags").addClass(E.region.toLowerCase());
  750. B.find(".mapName").text(E.map);
  751. B.find(".mapThumb img").attr("src", E.thumbnailUrl);
  752. B.find(".gameType").text(E.gameType);
  753. B.find(".restrictionText").text(E.restrictionsText);
  754. B.find(".lobbyPlayerCount").text(E.playersInLobby);
  755. B.find(".lobbySize").text(E.playersForGame);
  756. B.addClass(E.advanced ? "advanced" : "manual");
  757. if (E.mumbleRequired == false) {
  758. B.find(".mumbleReq").remove()
  759. }
  760. if (E.inReadyUpMode == false) {
  761. B.find(".icons.lobbyReady").remove()
  762. }
  763. var A = userCanOverrideRestrictedSlots(E.leaderSteamId);
  764. for (var C = 0; C < E.slots.length; C++) {
  765. var D = createClassSlotElement(F, E.slots[C], A);
  766. B.find(".lobbyClassContainer").append(D)
  767. }
  768. return B
  769. }
  770.  
  771. function userCanOverrideRestrictedSlots(A) {
  772. return (typeof canOverrideRestrictedSlots !== "undefined" && canOverrideRestrictedSlots == true) || isMySteamId(A)
  773. }
  774.  
  775. function createClassSlotElement(F, C, B) {
  776. var E = $(".classSlot.templateHolder div").clone();
  777. var G = C.tf2Class;
  778. if (C.availableSlots.length > 0) {
  779. var D = C.availableSlots[0].team;
  780. var A = "/join/lobby/" + F + "/" + D + "/" + G;
  781. E.find(".link").attr("href", A);
  782. if (C.availableSlots.length == 1) {
  783. E.append('<span class="icons available ' + D + '"></span>')
  784. } else {
  785. E.append('<span class="icons available blue"></span>');
  786. E.append('<span class="icons available red"></span>')
  787. }
  788. if (allSlotsHaveRestrictions(C)) {
  789. E.addClass(B || meetsRestrictionsForAnySlot(C) ? "green" : "red")
  790. }
  791. }
  792. if (C.availableReservedSlots.length > 0) {
  793. if (C.availableReservedSlots.length == 1) {
  794. E.append('<span class="icons available reserved-' + C.availableReservedSlots[0].team + '"></span>')
  795. } else {
  796. E.append('<span class="icons available reserved-blue"></span>');
  797. E.append('<span class="icons available reserved-red"></span>')
  798. }
  799. }
  800. if (C.availableSlots.length + C.availableReservedSlots.length == 0) {
  801. E.find(".icons.classes").addClass("unavailable")
  802. }
  803. E.find(".icons.classes").addClass(getCssClassForTf2Class(G));
  804. return E
  805. }
  806.  
  807. function getCssClassForTf2Class(A) {
  808. switch (A) {
  809. case "solly":
  810. return "soldier";
  811. case "demo":
  812. return "demoman";
  813. case "med":
  814. return "medic";
  815. case "engie":
  816. return "engineer";
  817. case "roamer":
  818. return "soldier classextra roamer";
  819. case "pocket":
  820. return "soldier classextra pocket";
  821. default:
  822. return A
  823. }
  824. }
  825.  
  826. function allSlotsHaveRestrictions(B) {
  827. for (var A = 0; A < B.availableSlots.length; A++) {
  828. if ($.isEmptyObject(B.availableSlots[A].restrictions)) {
  829. return false
  830. }
  831. }
  832. return true
  833. }
  834.  
  835. function meetsRestrictionsForAnySlot(C) {
  836. for (var A = 0; A < C.availableSlots.length; A++) {
  837. var B = C.availableSlots[A].restrictions;
  838. if ($.isEmptyObject(B)) {
  839. continue
  840. }
  841. if (!meetsRestrictions(B)) {
  842. continue
  843. }
  844. return true
  845. }
  846. return false
  847. }
  848.  
  849. function meetsRestrictions(A) {
  850. if ($.isEmptyObject(A)) {
  851. return true
  852. }
  853. if (!(meetsHoursRestriction(A.hours))) {
  854. return false
  855. }
  856. if (!(meetsReliabilityRestriction(A.reliability))) {
  857. return false
  858. }
  859. if (!(meetsMinimumLobbiesRestriction(A.games))) {
  860. return false
  861. }
  862. return true
  863. }
  864.  
  865. function replaceAllLobbies(B) {
  866. B = filterLobbies(B);
  867. $("#lobbyContainer").children().remove();
  868. for (var A = 0; A < B.length; A++) {
  869. $("#lobbyContainer").append(createLobbyOverviewItemElement(B[A]))
  870. }
  871. }
  872.  
  873. function replaceSingleLobby(B) {
  874. if ($.cookie("filter") != undefined) {
  875. var A = JSON.parse($.cookie("filter"));
  876. if (A.filterEnabled == true && !lobbyMatchesFilter(B, A)) {
  877. return
  878. }
  879. }
  880. var C = B.no;
  881. $("#lobbyContainer").find("#lobbyOverview-" + C).replaceWith(createLobbyOverviewItemElement(B))
  882. }
  883.  
  884. function filterLobbies(E) {
  885. E = filterRegionLocked(E);
  886. if ($.cookie("filter") == undefined) {
  887. return E
  888. }
  889. var C = JSON.parse($.cookie("filter"));
  890. var A = [];
  891. if (C.filterEnabled) {
  892. for (var B = 0; B < E.length; B++) {
  893. var D = E[B];
  894. if (lobbyMatchesFilter(D, C)) {
  895. A.push(D)
  896. }
  897. }
  898. } else {
  899. A = E
  900. }
  901. A = sortLobbiesByKey(A, C.sortField, C.sortAscending);
  902. return A
  903. }
  904.  
  905. function filterRegionLocked(A) {
  906. return A.filter(function(B) {
  907. return !B.regionLock || B.region == myRegion || hasPermission("JOIN_REGION_LOCKED_SLOT")
  908. })
  909. }
  910.  
  911. function lobbyMatchesFilter1(B) {
  912. if ($.cookie("filter") == undefined) {
  913. return true
  914. }
  915. var A = JSON.parse($.cookie("filter"));
  916. if (A.filterEnabled) {
  917. return lobbyMatchesFilter(B, A)
  918. }
  919. return true
  920. }
  921.  
  922. function lobbyMatchesFilter(B, A) {
  923. if (A.mumbleRequired == true && !B.mumbleRequired == true) {
  924. return false
  925. }
  926. if (A.advancedOnly == true && !B.advanced == true) {
  927. return false
  928. }
  929. if (!arrayContainsGameType(A.gameTypes, B.gameType)) {
  930. return false
  931. }
  932. if (!arrayContainsRegion(A.locations, B.region)) {
  933. return false
  934. }
  935. if (!arrayContainsMapType(A.mapTypes, B.map)) {
  936. return false
  937. }
  938. return true
  939. }
  940.  
  941. function arrayContainsGameType(C, A) {
  942. if (C.length == 0) {
  943. return true
  944. }
  945. switch (A) {
  946. case "Highlander":
  947. A = "HIGHLANDER";
  948. break;
  949. case "6v6":
  950. A = "_6VS6";
  951. break;
  952. case "4v4":
  953. A = "_4VS4";
  954. break;
  955. case "Ultiduo":
  956. A = "ULTIDUO";
  957. break;
  958. case "BBall":
  959. A = "BBALL";
  960. break;
  961. case "Test 1v1":
  962. A = "TEST2";
  963. break;
  964. case "NoobParty":
  965. A = "NOOBPARTY";
  966. break
  967. }
  968. for (var B = 0; B < C.length; B++) {
  969. if (A == C[B]) {
  970. return true
  971. }
  972. }
  973. return false
  974. }
  975.  
  976. function arrayContainsRegion(C, D) {
  977. if (C.length == 0) {
  978. return true
  979. }
  980. var A;
  981. switch (D) {
  982. case "EU":
  983. A = "EUROPE";
  984. break;
  985. case "NA":
  986. A = "NORTH_AMERICA";
  987. break;
  988. case "SA":
  989. A = "SOUTH_AMERICA";
  990. break;
  991. case "RU":
  992. A = "RUSSIA";
  993. break;
  994. case "AS":
  995. A = "ASIA";
  996. break;
  997. case "AF":
  998. A = "AFRICA";
  999. break;
  1000. case "AU":
  1001. A = "OCEANIA";
  1002. break
  1003. }
  1004. for (var B = 0; B < C.length; B++) {
  1005. if (A == C[B]) {
  1006. return true
  1007. }
  1008. }
  1009. return false
  1010. }
  1011.  
  1012. function arrayContainsMapType(B, C) {
  1013. if (B.length == 0) {
  1014. return true
  1015. }
  1016. var E = C.split("_")[0];
  1017. var D;
  1018. switch (E) {
  1019. case "cp":
  1020. D = "CONTROL_POINT";
  1021. break;
  1022. case "pl":
  1023. D = "PAYLOAD";
  1024. break;
  1025. case "koth":
  1026. D = "KOTH";
  1027. break;
  1028. case "ctf":
  1029. D = "CTF";
  1030. break;
  1031. case "sd":
  1032. D = "SPECIAL_DELIVERY";
  1033. break;
  1034. case "mvm":
  1035. D = "MVM";
  1036. break
  1037. }
  1038. for (var A = 0; A < B.length; A++) {
  1039. if (D == B[A]) {
  1040. return true
  1041. }
  1042. }
  1043. return false
  1044. }
  1045.  
  1046. function sortLobbiesByKey(A, C, D) {
  1047. var E;
  1048. switch (C) {
  1049. case "map.name":
  1050. E = "map";
  1051. break;
  1052. case "restriction":
  1053. E = "restrictionsText";
  1054. break;
  1055. case "location":
  1056. E = "region";
  1057. break;
  1058. case "gameType":
  1059. E = "gameType";
  1060. break;
  1061. default:
  1062. E = "no"
  1063. }
  1064. var B = A.sort(function(H, G) {
  1065. if (H.advanced && !G.advanced) {
  1066. return -1
  1067. }
  1068. if (!H.advanced && G.advanced) {
  1069. return 1
  1070. }
  1071. var F = sort(H, G, E);
  1072. return D ? F : 1 - F
  1073. });
  1074. return B
  1075. }
  1076.  
  1077. function sort(C, B, D) {
  1078. var A = C[D];
  1079. var E = B[D];
  1080. if (A == E) {
  1081. return C.no < B.no ? -1 : 1
  1082. }
  1083. return ((A < E) ? -1 : 1)
  1084. }
  1085. $(document).ready(function() {
  1086. $(document).bind("tf2center.overview.refresh-substitutes", function(E, D) {
  1087. $("#substituteRequests").children().remove();
  1088. if (myLobbiesPlayed < 20) {
  1089. return
  1090. }
  1091. var C = 0;
  1092. for (var B = 0; B < D.data.length && C < maxSubsToDisplay; B++) {
  1093. var A = createSubstituteRequest(D.data[B]);
  1094. if (typeof A !== undefined) {
  1095. $("#substituteRequests").append(A);
  1096. C++
  1097. }
  1098. }
  1099. })
  1100. });
  1101.  
  1102. function createSubstituteRequest(B) {
  1103. if (!($.isEmptyObject(B.restrictions)) && !(userCanOverrideRestrictedSlots(B.leaderSteamId)) && !(meetsRestrictions(B.restrictions))) {
  1104. return
  1105. }
  1106. if (!substituteRequestMatchesFilter(B)) {
  1107. return
  1108. }
  1109. var D = $(".substituteRequest.templateHolder div.lobbySubPanel").clone();
  1110. var C = generateRequestId(B);
  1111. D.attr("id", C);
  1112. D.find("a.joinLink").attr("href", B.joinLink);
  1113. D.find("a.joinLink").attr("onClick", 'if (!confirm("' + getConfirmText(B) + '"))return false;');
  1114. D.find(".icons.flags").addClass(B.region.toLowerCase());
  1115. D.find(".lobbySubClass").addClass(B.team);
  1116. D.find(".subName .icons.classes").addClass(getCssClassForTf2Class(B.tf2Class));
  1117. D.find(".subName .displayName").text(B.className);
  1118. D.find(".mapName").text(B.map);
  1119. D.find(".gameType").text(B.gameType);
  1120. D.addClass(B.advanced ? "advanced" : "manual");
  1121. if (B.mumbleRequired == false) {
  1122. D.find(".mumbleReq").addClass("hidden")
  1123. }
  1124. if ($.isEmptyObject(B.restrictions)) {
  1125. D.find(".requirements").text("None")
  1126. } else {
  1127. var A = createStatsPanel(B.restrictions, B.leaderSteamId);
  1128. D.find(".requirements").html(A)
  1129. }
  1130. return D
  1131. }
  1132.  
  1133. function getConfirmText(A) {
  1134. return "Are you sure you wish to take this sub as " + A.region + " " + A.team.toUpperCase() + " " + A.tf2Class.toUpperCase() + "?"
  1135. }
  1136.  
  1137. function generateRequestId(A) {
  1138. return "subRequest-" + A.lobbyNo + "-" + A.slotIndex
  1139. }
  1140.  
  1141. function substituteRequestMatchesFilter(B, A) {
  1142. if (B.regionLock && B.region != myRegion) {
  1143. return false
  1144. }
  1145. if ($.cookie("filter") == undefined) {
  1146. return true
  1147. }
  1148. var A = JSON.parse($.cookie("filter"));
  1149. if (A.filterEnabled != true) {
  1150. return true
  1151. }
  1152. if (A.mumbleRequired == true && !B.mumbleRequired == true) {
  1153. return false
  1154. }
  1155. if (A.advancedOnly == true && !B.advanced == true) {
  1156. return false
  1157. }
  1158. if (!arrayContainsGameType(A.gameTypes, B.gameType)) {
  1159. return false
  1160. }
  1161. if (!arrayContainsRegion(A.locations, B.region)) {
  1162. return false
  1163. }
  1164. if (!arrayContainsMapType(A.mapTypes, B.map)) {
  1165. return false
  1166. }
  1167. return true
  1168. }
  1169.  
  1170. function testSubstituteRequestPanel() {
  1171. var A = {
  1172. lobbyNo: "1234",
  1173. leaderSteamId: "76561197985830365",
  1174. joinLink: "/join/lobby/1234/red/scout",
  1175. slotIndex: 5,
  1176. region: "EU",
  1177. mumbleRequired: false,
  1178. map: "koth_lakeside_final",
  1179. gameType: "Highlander",
  1180. team: "red",
  1181. tf2Class: "roamer",
  1182. className: "Soldier",
  1183. advanced: true,
  1184. restrictions: {
  1185. hours: 1500,
  1186. reliability: 85
  1187. }
  1188. };
  1189. console.log(A);
  1190. $("#substituteRequests").append(createSubstituteRequest(A));
  1191. A = {
  1192. lobbyNo: "1235",
  1193. leaderSteamId: "76561197985822365",
  1194. joinLink: "/join/lobby/1234/red/scout",
  1195. slotIndex: 5,
  1196. region: "EU",
  1197. mumbleRequired: false,
  1198. map: "koth_pro_viaduct_rc4",
  1199. gameType: "Highlander",
  1200. team: "red",
  1201. tf2Class: "demoman",
  1202. className: "Demoman",
  1203. advanced: false,
  1204. restrictions: {}
  1205. };
  1206. $("#substituteRequests").append(createSubstituteRequest(A));
  1207. A = {
  1208. lobbyNo: "1236",
  1209. leaderSteamId: "76561197985822365",
  1210. joinLink: "/join/lobby/1234/red/scout",
  1211. slotIndex: 5,
  1212. region: "NA",
  1213. regionLock: true,
  1214. mumbleRequired: false,
  1215. map: "pl_badwater",
  1216. gameType: "Highlander",
  1217. team: "blue",
  1218. tf2Class: "scout",
  1219. className: "Scout",
  1220. restrictions: {
  1221. hours: 750,
  1222. games: 150,
  1223. reliability: 85
  1224. }
  1225. };
  1226. $("#substituteRequests").append(createSubstituteRequest(A))
  1227. }
  1228.  
  1229. function createStatsPanel(E, D) {
  1230. var C = $(".restrictedSlotStats.templateHolder div.statsContainer").clone();
  1231. var G;
  1232. var A;
  1233. var B;
  1234. var F = canOverrideRestrictedSlots;
  1235. if (!F && typeof D !== "undefined") {
  1236. F = userCanOverrideRestrictedSlots(D)
  1237. }
  1238. if (F) {
  1239. G = "darkgrey";
  1240. A = "darkgrey";
  1241. B = "darkgrey"
  1242. } else {
  1243. if (meetsHoursRestriction(E.hours)) {
  1244. G = "green"
  1245. } else {
  1246. G = "red"
  1247. }
  1248. if (meetsMinimumLobbiesRestriction(E.games)) {
  1249. A = "green"
  1250. } else {
  1251. A = "red"
  1252. }
  1253. if (meetsReliabilityRestriction(E.reliability)) {
  1254. B = "green"
  1255. } else {
  1256. B = "red"
  1257. }
  1258. }
  1259. C.find(".hours.value").text(E.hours > 0 ? E.hours : 0);
  1260. C.find(".lobbies.value").text(E.games > 0 ? E.games : 0);
  1261. C.find(".reliability.value").text(E.reliability > 0 ? E.reliability : 0);
  1262. C.find(".hours").addClass(G);
  1263. C.find(".lobbies").addClass(A);
  1264. C.find(".reliability").addClass(B);
  1265. return C
  1266. }
  1267. var friendsOnline = new Array();
  1268. var diffSinceLastPlayersOnlineScrollGeneration = 0;
  1269. $(document).ready(function() {
  1270. setupPlayersOnlineScrollPane();
  1271. $(document).bind("tf2center.refresh-players-online", function(B, C) {
  1272. $(".playerScrollContainer .jspPane").children().remove();
  1273. for (var A = 0; A < C.data.length; A++) {
  1274. $(".playerScrollContainer .jspPane").append(createPlayerOnlineRow(C.data[A]))
  1275. }
  1276. playersOnlineCount = C.data.length;
  1277. sortPlayersOnline();
  1278. setupPlayersOnlineScrollPane();
  1279. setupFriendsOnlineCount(C.data)
  1280. });
  1281. $(document).bind("tf2center.player-login", function(C, B) {
  1282. for (var A = 0; A < B.data.length; A++) {
  1283. if (isSteamFriend(B.data[A].steamId)) {
  1284. incFriendsOnline(B.data[A].steamId)
  1285. }
  1286. addPlayerInLine(B.data[A]);
  1287. diffSinceLastPlayersOnlineScrollGeneration = diffSinceLastPlayersOnlineScrollGeneration + 1
  1288. }
  1289. if (Math.abs(diffSinceLastPlayersOnlineScrollGeneration) >= 5) {
  1290. setupPlayersOnlineScrollPane()
  1291. }
  1292. });
  1293. $(document).bind("tf2center.player-logout", function(B, C) {
  1294. for (var A = 0; A < C.data.length; A++) {
  1295. if (isSteamFriend(C.data[A])) {
  1296. decFriendsOnline(C.data[A])
  1297. }
  1298. removePlayerRow(C.data[A]);
  1299. diffSinceLastPlayersOnlineScrollGeneration = diffSinceLastPlayersOnlineScrollGeneration - 1
  1300. }
  1301. if (Math.abs(diffSinceLastPlayersOnlineScrollGeneration) >= 5) {
  1302. setupPlayersOnlineScrollPane()
  1303. }
  1304. });
  1305. $(".playerScrollContainer").removeClass("hidden")
  1306. });
  1307.  
  1308. function setupFriendsOnlineCount(C) {
  1309. for (var A = 0; A < C.length; A++) {
  1310. var B = C[A].steamId;
  1311. if (isSteamFriend(B)) {
  1312. incFriendsOnline(B)
  1313. }
  1314. }
  1315. showFriendsOnlineCounter()
  1316. }
  1317.  
  1318. function incFriendsOnline(A) {
  1319. if ($.inArray(A, friendsOnline) == -1) {
  1320. friendsOnline.push(A);
  1321. showFriendsOnlineCounter()
  1322. }
  1323. }
  1324.  
  1325. function decFriendsOnline(B) {
  1326. var A = friendsOnline.indexOf(B);
  1327. if (A > -1) {
  1328. friendsOnline.splice(A, 1);
  1329. showFriendsOnlineCounter()
  1330. }
  1331. }
  1332.  
  1333. function showFriendsOnlineCounter() {
  1334. $("#friendsOnline").text(friendsOnline.length)
  1335. }
  1336.  
  1337. function addPlayerInLine(D) {
  1338. if ($('.friend-row[steamid="' + D.steamId + '"]').length) {
  1339. return
  1340. }
  1341. var C = createPlayerOnlineRow(D);
  1342. var A = isSteamFriend(D.steamId);
  1343. var B = false;
  1344. $("#players-online .friend-row").each(function() {
  1345. var E = ($(this).attr("friend") == "true");
  1346. if (E && !A) {
  1347. return
  1348. }
  1349. if ((A && !E) || $(this).attr("steamname").localeCompare(D.playerName) === 1) {
  1350. C.insertBefore($(this));
  1351. B = true;
  1352. return false
  1353. }
  1354. });
  1355. if (!B) {
  1356. $(".playerScrollContainer .jspPane").append(C)
  1357. }
  1358. }
  1359.  
  1360. function createPlayerOnlineRow(B) {
  1361. var A = $(".singleSpectatorRow.templateHolder div.friend-row").clone();
  1362. if (isSteamFriend(B.steamId)) {
  1363. A.attr("friend", "true");
  1364. A.find(".friend-icon.icons.person").addClass("friend")
  1365. }
  1366. A.attr("steamname", B.playerName);
  1367. A.attr("steamId", B.steamId);
  1368. A.find(".name").text(B.playerName);
  1369. A.find("a.profileLink").attr("href", "/profile/" + B.steamId);
  1370. return A
  1371. }
  1372.  
  1373. function removePlayerRow(A) {
  1374. $('.friend-row[steamid="' + A + '"]').remove()
  1375. }
  1376.  
  1377. function setupPlayersOnlineScrollPane() {
  1378. if (!$(".playerScrollContainer.scrollable").length) {
  1379. return
  1380. }
  1381. var A = $(".playerScrollContainer.scrollable").jScrollPane().data("jsp");
  1382. if (A != null && A.getPercentScrolledY() == 1) {
  1383. A.scrollToPercentY(100)
  1384. } else {
  1385. $(".playerScrollContainer.scrollable").jScrollPane({
  1386. maintainPosition: true
  1387. })
  1388. }
  1389. diffSinceLastPlayersOnlineScrollGeneration = 0
  1390. }
  1391.  
  1392. function sortPlayersOnline() {
  1393. $(".playerScrollContainer .jspPane div.friend-row").sort(function(B, A) {
  1394. try {
  1395. var D = $(B).attr("friend") == "true";
  1396. var C = $(A).attr("friend") == "true";
  1397. if (D !== C) {
  1398. return (D && !C) ? -1 : 1
  1399. }
  1400. return $(B).attr("steamname").localeCompare($(A).attr("steamname"))
  1401. } catch (E) {
  1402. return 0
  1403. }
  1404. }).appendTo(".playerScrollContainer .jspPane")
  1405. }
  1406. var slider;
  1407. var notifications;
  1408. var currentNotification;
  1409. $(document).ready(function() {
  1410. notifications = $.parseJSON(notificationsJsonStr);
  1411. var D = 0;
  1412. var C = false;
  1413. var B = false;
  1414. var E = true;
  1415. for (var A = 0; A < notifications.length; A++) {
  1416. $("#notificationSlider").append(createDOMNotification(notifications[A]));
  1417. if (isLoggedIn()) {
  1418. if (notifications[A].created > notificationLastRead) {
  1419. C = true;
  1420. if (notifications[A].level == "CRITICAL") {
  1421. B = true;
  1422. D = A
  1423. }
  1424. if (!B) {
  1425. D = A
  1426. }
  1427. }
  1428. }
  1429. }
  1430. $(document).bind("tf2center.global-notification-added", function(F, H) {
  1431. notifications.unshift(H.data);
  1432. $("#notificationSlider").prepend(createDOMNotification(H.data));
  1433. var G = slider.getCurrentSlide();
  1434. slider.reloadSlider();
  1435. if (H.data.level == "CRITICAL") {
  1436. playIncomingSoundHeavy();
  1437. slider.goToSlide(getFirstUnreadIndex());
  1438. openNotifications()
  1439. } else {
  1440. if ($(".notificationButton").is(".active")) {
  1441. calSetToday();
  1442. slider.goToSlide(G + 1);
  1443. $("#notificationSlider, .bx-wrapper").hide().show();
  1444. $("#notificationSlider .notificationBox").first().hide().prop("z-index", 0)
  1445. } else {
  1446. if (getUnreadCount() == 1) {
  1447. slider.goToSlide(0)
  1448. }
  1449. }
  1450. updateUnreadCounter(true)
  1451. }
  1452. });
  1453. if ($(".notificationButton.enabled").length) {
  1454. setInterval(function() {
  1455. if (!$(".notificationButton").is(".active")) {
  1456. if (getUnreadCount() > 0) {
  1457. $(".notificationButton .red").fadeTo(500, 0.1).fadeTo(900, 1)
  1458. }
  1459. }
  1460. }, 500 + 900)
  1461. }
  1462. if ($("#notificationSlider").length) {
  1463. slider = $("#notificationSlider").bxSlider({
  1464. startSlide: D,
  1465. slideWidth: 718,
  1466. minSlides: 1,
  1467. maxSlides: 1,
  1468. slideMargin: 14,
  1469. mode: "fade",
  1470. speed: 300,
  1471. pager: false,
  1472. infiniteLoop: true,
  1473. hideControlOnEnd: false,
  1474. onSliderLoad: function(F) {
  1475. if (E) {
  1476. E = false;
  1477. if (B && isLoggedIn()) {
  1478. showNotification(notifications[F])
  1479. }
  1480. }
  1481. },
  1482. onSlideNext: function(F) {
  1483. showNotification(getNotificationById(+(F.find(".id").text())))
  1484. },
  1485. onSlidePrev: function(F) {
  1486. showNotification(getNotificationById(+(F.find(".id").text())))
  1487. }
  1488. });
  1489. $(".notificationCalendar").pickmeup({
  1490. flat: true,
  1491. format: "Y-m-d",
  1492. render: function(G) {
  1493. var F = getCssClassForDate(G);
  1494. if (F != null) {
  1495. return {
  1496. class_name: F
  1497. }
  1498. }
  1499. return {
  1500. disabled: true
  1501. }
  1502. },
  1503. change: function(F) {
  1504. var G = getNotificationIndexByDate(new Date(F));
  1505. slider.goToSlide(G);
  1506. showNotification(notifications[G])
  1507. }
  1508. });
  1509. $(".notificationToday a").click(function() {
  1510. calSetToday()
  1511. });
  1512. $(".notificationButton.enabled").click(function() {
  1513. toggleNotifications()
  1514. });
  1515. $(".notificationClose").click(function() {
  1516. closeNotifications()
  1517. });
  1518. if (isLoggedIn()) {
  1519. if (C) {
  1520. updateUnreadCounter(true);
  1521. if (B) {
  1522. playIncomingSoundHeavy();
  1523. openNotifications()
  1524. }
  1525. } else {
  1526. clearUnreadCounter()
  1527. }
  1528. }
  1529. } else {
  1530. updateUnreadCounter(true)
  1531. }
  1532. if (!isLoggedIn()) {
  1533. notificationLastRead = new Date().getTime();
  1534. clearUnreadCounter()
  1535. }
  1536. });
  1537.  
  1538. function preview(D, C, B) {
  1539. playIncomingSoundHeavy = function() {};
  1540. var A = {
  1541. id: 1,
  1542. created: new Date().getTime(),
  1543. dateDay: "12",
  1544. dateMonth: "DEC",
  1545. level: D,
  1546. title: $("<div/>").text(C).html(),
  1547. message: $("<div/>").text(B).html(),
  1548. author: "TF2Center"
  1549. };
  1550. $(document).trigger("tf2center.global-notification-added", {
  1551. data: A
  1552. });
  1553. showNotification(A);
  1554. openNotifications()
  1555. }
  1556.  
  1557. function isLoggedIn() {
  1558. return mySteamId != ""
  1559. }
  1560.  
  1561. function showNotification(A) {
  1562. currentNotification = A;
  1563. updateNotificationLastRead(A);
  1564. applyHeader(A.level == "REGULAR");
  1565. calSetDate(A.created)
  1566. }
  1567.  
  1568. function createDOMNotification(B) {
  1569. var A = $("#notificationTemplate").clone();
  1570. A.find(".id").text(B.id);
  1571. A.find(".date").text(B.dateDay);
  1572. A.find(".month").text(B.dateMonth);
  1573. A.find("h1").html($("<span />").html(B.title).text());
  1574. A.find(".notificationText").html($("<span />").html(B.message).text());
  1575. A.addClass(B.level == "CRITICAL" ? "critical" : "regular");
  1576. A.removeAttr("style");
  1577. A.removeAttr("id");
  1578. return A
  1579. }
  1580.  
  1581. function applyHeader(C) {
  1582. var A = C ? "regular" : "critical";
  1583. var B = C ? "critical" : "regular";
  1584. $("#mainHeader").removeClass(B).addClass(A);
  1585. $("#mainHeader .backgroundMain").removeClass(B).addClass(A)
  1586. }
  1587.  
  1588. function showUnreadCounter(A) {
  1589. $(".notificationButton .icons").removeClass("grey").addClass("red").text(A)
  1590. }
  1591.  
  1592. function clearUnreadCounter() {
  1593. $(".notificationButton .icons").removeClass("red").addClass("grey").text("")
  1594. }
  1595.  
  1596. function calSetToday() {
  1597. calSetDate(new Date())
  1598. }
  1599.  
  1600. function calSetDate(A) {
  1601. $(".notificationCalendar").pickmeup("set_date", A)
  1602. }
  1603.  
  1604. function toggleNotifications() {
  1605. if ($(".notificationButton").toggleClass("active").is(".active")) {
  1606. openNotifications()
  1607. } else {
  1608. closeNotifications()
  1609. }
  1610. }
  1611.  
  1612. function openNotifications() {
  1613. $(".notificationButton").addClass("active");
  1614. $("#mainHeader .backgroundLeft").css("visibility", "hidden");
  1615. $(".lobbyVoteCreate, .mostVotedMaps, .speechBubbleText, .lobbyHeader, .userProfile, .editProfile, .userProfileAdminButtons").hide();
  1616. $(".notificationClose, #notificationSlider, .bx-wrapper, .notificationCalendar, .notificationToday").show();
  1617. showNotification(getCurrentNotification())
  1618. }
  1619.  
  1620. function getCurrentNotification() {
  1621. var A = $($("#notificationSlider .notificationBox").get(slider.getCurrentSlide()));
  1622. return getNotificationById(+(A.find(".id").text()))
  1623. }
  1624.  
  1625. function closeNotifications() {
  1626. $(".notificationButton").removeClass("active");
  1627. $("#mainHeader").removeClass("critical regular");
  1628. $("#mainHeader .backgroundMain").removeClass("critical regular");
  1629. $("#mainHeader .backgroundLeft").css("visibility", "visible");
  1630. $(".bx-wrapper, .notificationClose, .notificationCalendar, .notificationToday").hide();
  1631. $(".lobbyVoteCreate, .mostVotedMaps, .speechBubbleText, .lobbyHeader, .userProfile, .editProfile, .userProfileAdminButtons").show()
  1632. }
  1633.  
  1634. function updateNotificationLastRead(A) {
  1635. if (A != null) {
  1636. if (A.created > notificationLastRead) {
  1637. notificationLastRead = A.created;
  1638. $.get("/notifications/lastread/" + notificationLastRead)
  1639. }
  1640. updateUnreadCounter()
  1641. }
  1642. }
  1643.  
  1644. function updateUnreadCounter(A) {
  1645. var B = getUnreadCount();
  1646. if (B > 0) {
  1647. if (A) {
  1648. showUnreadCounter(B)
  1649. } else {
  1650. $("#notificationUnreadCounter").text(B)
  1651. }
  1652. } else {
  1653. clearUnreadCounter()
  1654. }
  1655. }
  1656.  
  1657. function getFirstUnreadIndex() {
  1658. for (var A = 0; A < notifications.length; A++) {
  1659. if (notifications[A].created > notificationLastRead) {
  1660. return A
  1661. }
  1662. }
  1663. return 0
  1664. }
  1665.  
  1666. function getUnreadCount() {
  1667. var B = 0;
  1668. for (var A = 0; A < notifications.length; A++) {
  1669. if (notifications[A].created > notificationLastRead) {
  1670. B++
  1671. }
  1672. }
  1673. return B
  1674. }
  1675.  
  1676. function getNotificationById(B) {
  1677. for (var A = 0; A < notifications.length; A++) {
  1678. if (notifications[A].id == B) {
  1679. return notifications[A]
  1680. }
  1681. }
  1682. return null
  1683. }
  1684.  
  1685. function getCssClassForDate(A) {
  1686. var B = getNotificationByDate(A);
  1687. var C = B != null && currentNotification && datesEqual(new Date(currentNotification.created), A) ? " active" : "";
  1688. return B != null ? B.level == "CRITICAL" ? "critical" + C : "regular" + C : null
  1689. }
  1690.  
  1691. function getNotificationByDate(A) {
  1692. for (var B = 0; B < notifications.length; B++) {
  1693. if (datesEqual(new Date(notifications[B].created), A)) {
  1694. return notifications[B]
  1695. }
  1696. }
  1697. return null
  1698. }
  1699.  
  1700. function getNotificationIndexByDate(A) {
  1701. for (var B = 0; B < notifications.length; B++) {
  1702. if (datesEqual(new Date(notifications[B].created), A)) {
  1703. return B
  1704. }
  1705. }
  1706. return 0
  1707. }
  1708.  
  1709. function datesEqual(B, A) {
  1710. B.setHours(0, 0, 0, 0);
  1711. A.setHours(0, 0, 0, 0);
  1712. return B.getTime() == A.getTime()
  1713. }
  1714. var ws;
  1715. var wsOpened = false;
  1716. var WS_CHECK_TIMEOUT_SEC = 7;
  1717. var WS_CHECK_JUST_STARTED_TIMEOUT_SEC = 30;
  1718. $(document).ready(function() {
  1719. openWebSocket();
  1720. scheduleCheck()
  1721. });
  1722.  
  1723. function openWebSocket() {
  1724. console.info("openWebSocket()");
  1725. try {
  1726. ws = new WebSocket(getWebsocketPath());
  1727. ws.onopen = function(event) {
  1728. console.debug("websocket successfully established")
  1729. };
  1730. ws.onclose = function(event) {
  1731. console.warn("websocket disconnected; reconnecting...");
  1732. setTimeout(function() {
  1733. window.location.reload()
  1734. }, 40000 + Math.floor(Math.random() * 30000))
  1735. };
  1736. ws.onmessage = function(event) {
  1737. wsOpened = true;
  1738. console.debug(event.data);
  1739. try {
  1740. if (event.data.indexOf('<?xml version="1.0" encoding="UTF-8"?>') === 0) {
  1741. Wicket.Ajax.process(event.data)
  1742. } else {
  1743. eval(event.data)
  1744. }
  1745. } catch (e) {
  1746. console.error("failed to process data: " + e)
  1747. }
  1748. };
  1749. ws.onerror = function(event) {
  1750. console.error("ws.onerror(): " + event)
  1751. }
  1752. } catch (e) {
  1753. console.error(e)
  1754. }
  1755. }
  1756.  
  1757. function scheduleCheck() {
  1758. setTimeout(function() {
  1759. var A = window.location;
  1760. if (!wsOpened && A.pathname.indexOf("/lobbies") == 0) {
  1761. if (A.host == "tf2center.com" && A.protocol === "http:") {
  1762. window.location = "https://" + A.host + A.pathname
  1763. } else {
  1764. console.warn("failed to open websocket; reloading page...");
  1765. window.location.reload()
  1766. }
  1767. }
  1768. }, (hasJustStarted ? WS_CHECK_JUST_STARTED_TIMEOUT_SEC : WS_CHECK_TIMEOUT_SEC) * 1000)
  1769. }
  1770.  
  1771. function getWebsocketPath() {
  1772. var B = window.location,
  1773. A;
  1774. if (B.protocol === "https:") {
  1775. A = "wss:"
  1776. } else {
  1777. A = "ws:"
  1778. }
  1779. A += "//" + ((B.host === "tf2center.com" || B.host === "www.tf2center.com") ? "ws.tf2center.com" : B.host);
  1780. A += "/ws" + B.pathname;
  1781. return A
  1782. }
  1783. Element.prototype.isVisible = function(E, C) {
  1784. function B(K, M, G, J) {
  1785. const I = 2;
  1786. var L = K.parentNode;
  1787. if (!D(K)) {
  1788. return false
  1789. }
  1790. if (L.nodeType == 9) {
  1791. return true
  1792. }
  1793. var H = $(K);
  1794. var F = (K === J);
  1795. if (F) {}
  1796. if (A(K, "opacity") < 1 || A(K, "display") == "none" || A(K, "visibility") == "hidden" || H.width() < M || H.height() < G || (F && (A(K, "left") != "0px" || A(K, "top") != "0px" || A(K, "margin-left") != "0px" || A(K, "padding-left") != "0px"))) {
  1797. return false
  1798. }
  1799. if (L) {
  1800. return B(L, M, G, K)
  1801. }
  1802. return true
  1803. }
  1804.  
  1805. function A(F, G) {
  1806. if (window.getComputedStyle) {
  1807. return document.defaultView.getComputedStyle(F, null)[G]
  1808. }
  1809. if (F.currentStyle) {
  1810. return F.currentStyle[G]
  1811. }
  1812. }
  1813.  
  1814. function D(F) {
  1815. while (F = F.parentNode) {
  1816. if (F == document) {
  1817. return true
  1818. }
  1819. }
  1820. return false
  1821. }
  1822. return B(this, E, C, this)
  1823. };
Add Comment
Please, Sign In to add comment