// ==UserScript== // @name Tidy up your Dashboard // @namespace https://greasyfork.org/users/10154 // @grant none // @run-at document-start // @match https://www.warlight.net/* // @description Customizable Userscript which tidies up your Dashboard! // @version 1.14.7 // @icon http://i.imgur.com/XzA5qMO.png // @require https://code.jquery.com/jquery-1.11.2.min.js // @require https://code.jquery.com/ui/1.11.3/jquery-ui.min.js // @require https://cdn.bootcss.com/datatables/1.10.10/js/jquery.dataTables.min.js // @require https://cdn.bootcss.com/datatables/1.10.10/js/dataTables.bootstrap.js // @require https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js // @downloadURL none // ==/UserScript== window.timeUserscriptStart = new Date().getTime(); var version = "1.14.7"; this.$$$ = jQuery.noConflict(true); var logData = ""; function log(entry) { var time = moment(new Date()).format('h:mm:ss'); logData += `\n${time} | ${entry}`; } function logError(entry) { var time = moment(new Date()).format('h:mm:ss'); logData += `\n${time} | ${entry}`; } //ctrl+shift+2 $$$(document).keydown(function(e){ if( e.which === 50 && e.ctrlKey && e.shiftKey ){ getLog() } }); window.logDialog = undefined; window.getLog = function() { if(logDialog) { logDialog.html(``) logDialog.dialog('open') } else { logDialog = $$$(`
`).dialog({ width: 800, title: "Userscript log", height: 400}); } } window.onerror = windowError function windowError(message, source, lineno, colno, error) { logError(`Error on line ${lineno} col ${colno} in ${source}`) logError(`${JSON.stringify(error)} ${message}`) if(typeof $().dialog == "function") { window.wlerror(message, source, lineno, colno, error) } } if(pageIsDashboard()) { createSelector("#MainSiteWrapper", "display: none") createSelector("body", "overflow: hidden") } document.addEventListener("DOMContentLoaded", DOM_ContentReady); function checkVersion() { Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, "version", function(v) { var currentVersion = v != undefined ? v.value: undefined log("Current version " + currentVersion) if (currentVersion == version) { //Script Up to date } else if (currentVersion == undefined) { //Script new installed addDefaultBookmark(); setupSettingsDatabase(); } else { setUserInvalid() //Script Updated //$("label[for='showPrivateNotesOnProfile']").addClass('newSetting'); //showPopup(".userscript-show"); // window.setTimeout(function() { // warlight_shared_viewmodels_AlertVM.DoPopup("Tidy up Your Dashboard was sucessfully updated to version " + version + "! Check out the forum thread to see what changed."); // }, 1000) } addVersionLabel() if(sessionStorage.getItem("showUserscriptMenu")) { showUserscriptMenu(); sessionStorage.removeItem("showUserscriptMenu") } }) Database.update(Database.Table.Settings, {name: "version", value: version}, undefined, function() { }) } setupImages(); window.userscriptSettings = [ { id: 'scrollGames', text: 'Fixed Window with scrollable Games', selected: true, title: 'Dashboard', addBreak: false, help: 'This Option displays My-, Open-, Coin-Games in a scrollable box, which removes lots of unesessary scrolling. You can find tabs to switch between the different type of games. ' }, { id: 'hideMyGamesIcons', text: 'Hide Icons in "My Games"', selected: false, title: '', addBreak: false, help: 'This Option hides Game-Icons like ( , , etc) in "My Games"' }, { id: 'autoRefreshOnFocus', text: 'Automatically refresh Games on Tab-Focus', selected: true, title: '', addBreak: false, help: 'This Option automatically refreshes your Games after switching back to Warlight from a different tab / program. This only applies if Warlight was idle for 30 or more seconds.' }, { id: 'highlightTournaments', text: 'Highlight Tournament invites', selected: false, title: '', addBreak: false, }, { id: 'hideRightColumn', text: 'Hide Right Column', selected: false, title: '', addBreak: false, help: 'This Option hides the right column completely and leaves you alone with My-, Open- and Coin-Games.' }, { id: 'hidePromotedGames', text: 'Hide Promoted Games', selected: false, title: '', addBreak: false, help: 'This Option hides the Promoted Games on the Dashboard' }, { id: 'showOpenGamesTab', text: 'Show Open Games Tab in Menu Bar', selected: false, title: 'Global', addBreak: false, help: 'This Option displays a link to the "Open Games" site right next to the "Past Games" Link.' }, { id: 'hideCoinsGlobally', text: 'Hide Coins Globally', selected: false, title: '', addBreak: false, help: 'This Option removes everything from Warlight related to Coins' }, { id: 'showPrivateNotesOnProfile', text: 'Show Private Notes on Profile', selected: true, title: '', addBreak: false, help: 'This Option will show you your Private Notes which you made on a player directly on their Profile page. You can find them on the left side under the profile picture.' }, { id: 'unlinkDashboard', text: 'Link Dashboard to "old" My-Games Site', selected: false, title: '', addBreak: false, help: 'This Option links the Dashboard to the "old" My-Games Site' }, { id: 'useDefaultBootLabel', text: 'Use the Default Boot Time Label', selected: false, title: 'Advanced', addBreak: false }, { id: 'hideRefreshButton', text: 'Hide Refresh Button', selected: false, title: '', addBreak: false, help: 'Hide the Refresh Button. You can still refresh with R' }, { id: 'hideOffTopic', text: 'Automatically hide Off-topic threads', selected: false, title: '', addBreak: false, help: 'This Option automatically hides all Off-topic threads everytime you visit the "All Forum Posts"-Page' }, { id: 'disableHideThreadOnDashboard', text: 'Disable right-click on the Forum Table', selected: false, title: '', addBreak: false, help: 'This Option will allow you right-click Forum Thread on the Dashboard and use the Default Options.' }, { id: 'hideCreateRandomGameForm', text: 'Hide Randomized Bonuses Game Form', selected: false, title: '', addBreak: false, help: 'This Option will hide the Randomized Bonuses Game Form which is located on the Profile Page.' }, { id: 'burningHot', text: 'Disable burning words', selected: false, title: '', addBreak: false, help: 'Certain words will receive a flame affect.' }, { id: 'showSnow', text: 'Show Snow', selected: false, title: '', addBreak: false, help: 'Shows the snow animation on all sites' }, { id: 'snowLight', text: 'Reduce the number of Snowflakes', selected: false, title: '', addBreak: false, help: 'Reduce the number of Snowflakes for a better performance' } ]; window.filters = [ { id: "disableAll", text: "Disable All Filters", selected: false, type: "checkbox" }, { id: "", text: "
", selected: false, type: "custom" }, { id: "hideTeam", text: "Hide Team Games", selected: false, type: "checkbox" }, { id: "hideCommanderGames", text: "Hide Games with Commanders", selected: false, type: "checkbox" }, { id: "hideFFA", text: "Hide FFA Games", selected: false, type: "checkbox" }, { id: "hideNoneCommanderGames", text: "Hide Games without Commanders", selected: false, type: "checkbox" }, { id: "hide1v1", text: "Hide 1 v 1 Games", selected: false, type: "checkbox" }, { id: "hideManualDistribution", text: "Hide Manual Distribution Games", selected: false, type: "checkbox" }, { id: "hideNoSplit", text: "Hide No-Split Games", selected: false, type: "checkbox" }, { id: "hideAutoDistribution", text: "Hide Auto Distribution Games", selected: false, type: "checkbox" }, { id: "hideLocalDeployments", text: "Hide Local Deployment Games", selected: false, type: "checkbox" }, { id: "hideCustomScenario", text: "Hide Custom Scenario Games", selected: false, type: "checkbox" }, { id: "hideLuck", text: "", selected: false, type: "custom" }, { id: "hideNonCustomScenario", text: "Hide Non-Custom Scenario Games", selected: false, type: "checkbox" }, { id: "hideKeyword", text: '

', selected: false, type: "custom", }, { id: "hidePractice", text: "Hide Practice Games", selected: false, type: "checkbox" }, { id: "hideNonPractice", text: "Hide Non-Practice Games", selected: false, type: "checkbox" }, { id: "limitPlayers", text: '
Players
Players
', selected: false, type: "custom" }, { id: "hideBootTime", text: '
minute(s)
day(s) and hour(s)
', selected: false, type: "custom" } ]; window.showGamesActive = "ShowMyGames"; setupDatabase() log("indexedDB setup complete") window.openGames = []; window.wlerror = function(){} function DOM_ContentReady() { log("DOM content ready") window.wlerror = window.onerror window.onerror = windowError window.timeDomContentReady = new Date().getTime(); log("Time DOM content ready " + (timeDomContentReady - timeUserscriptStart) / 1000) log("DOM content ready") $.fn.outerHTML = function (s) { return s ? this.before(s).remove() : jQuery("

").append(this.eq(0).clone()).html(); }; window.WLError = function(a, b) { logError(a) null == a && (a = ""); console.log("WLError: " + a + ", silent=" + b); - 1 != a.indexOf("NotAuth") ? location.reload() : -1 != a.indexOf("WarLight Server returned CouldNotConnect") ? CNCDialog() : -1 == a.indexOf("TopLine is not defined") && -1 == a.indexOf("_TPIHelper") && -1 == a.indexOf("Syntax error, unrecognized expression: a[href^=http://]:not([href*=") && -1 == a.indexOf("y2_cc2242") && -1 == a.indexOf("Error calling method on NPObject") && (-1 != a.indexOf("WARLIGHTERROR48348927984712893471394") ? a = "ServerError" : -1 != a.indexOf("WARLIGHTHEAVYLOAD48348927984712893471394") && (a = "HeavyLoad"), ReportError(a), b || PopErrorDialog(a)) } $.fn.getsFiltered = function (openGamesFilters) { var game = this[0]; if(game) { if (openGamesFilters["hideMaxPlayers"] <= 100 && $(game).numOfPlayers() > openGamesFilters["hideMaxPlayers"]) return true; if (openGamesFilters["hideMinPlayers"] <= 100 && $(game).numOfPlayers() < openGamesFilters["hideMinPlayers"]) return true; if (openGamesFilters["hideLuck"] < 100 && game.SettingsOpt.LuckModifier * 100 > openGamesFilters["hideLuck"]) return true; if (openGamesFilters["hideFFA"] && $(game).numOfTeams() == 0 && $(game).numOfPlayers() > 2) return true; if (openGamesFilters["hideTeam"] && $(game).numOfTeams() > 0) return true; if (openGamesFilters["hide1v1"] && $(game).numOfPlayers() == 2) return true; if (openGamesFilters["hideCustomScenario"] && game.SettingsOpt.DistributionMode === -3) return true; if (openGamesFilters["hideNonCustomScenario"] && game.SettingsOpt.DistributionMode !== -3) return true; if (openGamesFilters["hideCommanderGames"] && game.SettingsOpt.HasCommanders) return true; if (openGamesFilters["hideNoneCommanderGames"] && !game.SettingsOpt.HasCommanders) return true; if (openGamesFilters["hidePractice"] && !game.SettingsOpt.RankedGame) return true; if (openGamesFilters["hideNoSplit"] && game.SettingsOpt.NoSplit) return true; if (openGamesFilters["hideLocalDeployments"] && game.SettingsOpt.LocalDeployments) return true; if (openGamesFilters["hideNonPractice"] && game.SettingsOpt.RankedGame) return true; if (openGamesFilters["hideManualDistribution"] && !game.SettingsOpt.AutoDistribution) return true; if (openGamesFilters["hideAutoDistribution"] && game.SettingsOpt.AutoDistribution) return true; if (openGamesFilters["hideKeyword"] && openGamesFilters["hideKeyword"].length > 0 && $(game).containsKeyword(openGamesFilters)) return true; if (openGamesFilters["hideRealTimeBootTime"] > 0 && game.RealTimeGame && game.DirectBoot._totalMilliseconds < openGamesFilters["hideRealTimeBootTime"]) return true; if (openGamesFilters["hideMultiDayBootTimeInMs"] > 0 && !game.RealTimeGame && game.DirectBoot._totalMilliseconds < openGamesFilters["hideMultiDayBootTimeInMs"]) return true; } return false; }; $.fn.numOfPlayers = function () { var game = this[0]; return game.Players.length + game.OpenSeats.length; }; $.fn.playerJoined = function () { var game = this[0]; var playerJoined = false; var id = warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ID; $.each(game.Players, function (key, player) { if (player.PlayerID == id) { playerJoined = true; } }); return playerJoined; }; $.fn.markJoined = function () { var game = this[0]; game.Name += '##joined##'; return game; }; $.fn.numOfTeams = function () { var game = this[0]; var teams = 0; if (game.AtStartDivideIntoTeamsOfIfOpenGame > 0) return $(game).numOfPlayers() / game.AtStartDivideIntoTeamsOfIfOpenGame; if (Math.max.apply(Math, game.OpenSeats) == -1) return 0; var maxTeam = Math.max.apply(Math, game.OpenSeats); $.each(game.Players, function (key, player) { if (player.Team > maxTeam) { maxTeam = player.Team; }; }); return maxTeam + 1; } $.fn.containsKeyword = function (openGamesFilters) { var game = this[0]; var keywords = openGamesFilters["hideKeyword"].split(","); var title = game._nameLowered || game.Name.toLowerCase(); var filtered = false; $.each(keywords, function (key, keyword) { if (title.indexOf(keyword.trim().toLowerCase()) >= 0) { filtered = true; } }) return filtered; }; $.fn.settingIsEnabled = function (setting) { var selected = false; $.each(userscriptSettings, function (key, set) { if (set.id == setting) { selected = set.selected; } }); return selected; }; try { $.extend( $$$.fn.dataTableExt.oSort, { "rank-pre": function ( a ) { return a.match(/([0-9]*)/)[1] || 9999; }, "rank-asc": function( a, b ) { return a < b; }, "rank-desc": function(a,b) { return a > b; } } ); $.extend( $$$.fn.dataTableExt.oSort, { "numeric-comma-pre": function ( a ) { return Number(a.replace(/,/g, "")) }, "numeric-comma-asc": function( a, b ) { return a < b; }, "numeric-comma-desc": function(a,b) { return a > b; } } ); } catch(e) { log(e) } if(pageIsNewThread()) { $("[onclick='undoIgnore()']").closest("th").remove(); $(".checkbox").closest("td").remove() } $("#MyGamesFilter").on("change", function() { var customFilter = $(this).val() Database.update(Database.Table.Settings, {name: "customFilter", value: customFilter}, undefined, function() { }) }) if(pageIsDashboard()) { $("body").append("

") $("#MainSiteWrapper").show(); window.lastRefresh; window.myGamesTable = $("#MyGamesTable"); window.openGamesTable = $("#OpenGamesTable"); window.promotedGamesTable = $("#PromotedGamesTable"); window.lastClick = new Date(); } if(pageIsThread()) { setupTextarea() } if(pageIsMapPage()) { var id = location.href.match(/[^\d]*([\d]*)/)[1] $("#MainSiteContent ul").append(`
  • Rate Map
  • `) } if (pageIsForumThread() || pageIsClanForumThread()) { //Show Open Games Link $("[href='#Reply']").after(" | Bookmark") $("#PostReply").after(" | Bookmark") $(".region a[href='/Profile?p=2211733141']:contains('Muli')").closest("td").find("a:contains('Report')").before("
    Script Creator
    ") setupAWPWorldTour() } if (pageIsTournament()) { window.setTimeout(function() { setupTournamentFindMe() setupPlayerDataTable() }, 50) $("#HostLabel").after(" | Bookmark"); $("#HostLabel").css("display", "inline-block") $("#LeftToStartMessage").text(" | " + $("#LeftToStartMessage").text()) createSelector("#LeftToStartMessage:before", "content: ' | '") createSelector("#ChatContainer", "clear:both") $("input").on("keypress keyup keydown", function(e) {e.stopPropagation()}) } if (pageIsCommonGames()) { window.$ = $$$ setupCommonGamesDataTable() } if(pageIsTournamentOverview()) { setupTournamentDecline(); setupTournamentTableStyles(); setupTournamentDataCheck(); $(window).resize(function () { setTournamentTableHeight(); }); $(window).on("scroll",function(){$(window).scrollTop(0)}) } if(pageIsLadderOverview()) { setupLadderClotOverview() } if(pageIsMapsPage()) { setupMapSearch() } if(pageIsLevelPlayLog()) { setupPlayerAttempDataTable(); } if(pageIsLevelOverview()) { setupLevelBookmark(); } if(pageIsRealTimeLadder()) { setupRealTimeLadderPageTimer() } if(pageIsDashboard() || pageIsRealTimeLadder()) { window.setInterval(setRTLadderTime, 1000) window.setInterval(setMyGamesTimeLeft, 1000) $(window).on("mousewheel", function() { $(".ui-tooltip").hide() }) } if(pageIsProfile()) { createSelector(".profileBox", "background-image: url(\'https://d2wcw7vp66n8b3.cloudfront.net/Images/ProfileSpeedBackground.png\'); background-repeat: no-repeat; text-align: left; padding:10px;margin-top: 12px;") // setupManagerLeague(); foldProfileStats() } Database.init(function() { if(pageIsDashboard()) { warlight_shared_viewmodels_WaitDialogVM.Start("Tidying Up...") } setIsMember(); window.setTimeout(validateUser, 2000); setGlobalStyles(); setupUserscriptMenu(); setupBookmarkMenu(); checkVersion(); main(); setupSnowflakes() }) } function main() { log("Running main") if(pageIsForumOverview()) { ifSettingIsEnabled("hideOffTopic", function() { hideOffTopicThreads() }) formatHiddenThreads(); } if(pageIsCommunityLevels()) { setupCommunityLevels() } if(pageIsForumOverview() || pageIsSubForum()) { setupSpammersBeGone() } ifSettingIsEnabled("unlinkDashboard", function() { $("#MultiPlayerBtn").attr('href', 'https://www.warlight.net/MultiPlayer?MyGames=1'); $("#SubTabRow td > a[href='/MultiPlayer/']").attr('href', 'https://www.warlight.net/MultiPlayer?MyGames=1'); }) if (pageIsMultiplayer()) { //Show Open Games Link ifSettingIsEnabled('showOpenGamesTab', function() { showOpenGamesLink(); }) } if(pageIsProfile() && $("#BlackListImage").length > 0) { ifSettingIsEnabled('showPrivateNotesOnProfile', function() { loadPrivateNotes(); }) } if(pageIsTournamentOverview()){ log("loading torunament data") loadTournamentData(); } if(pageIsTournament()) { updateTournamentData() $("#JoinBtn").on("click", updateTournamentData) } if(pageIsBlacklistPage()) { $("#MainSiteContent ul").before(`You have ${$("#MainSiteContent ul li:visible").length} players on your blacklist.`) window.setInterval(function() { $("#numBlacklisted").replaceWith(`You have ${$("#MainSiteContent ul li:visible").length} players on your blacklist.`) }, 500) } setupRandomizedBonuses(); if(pageIsPointsPage()) { Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, "totalPoints", function(res) { if(res) { $("#MainSiteContent table:first").before(`
    In total, you've earned ${res.value.toLocaleString("en")} points.`) } else { $("#MainSiteContent table:first").before(`
    Visit the Dashboard once to see how many points you've earned in total.`) } }) } if (pageIsDashboard()) { window.StringTools.htmlEscape = function (a) { if (a.indexOf("##joined##") >= 0) { a = a.replace("##joined##", ""); return htmlEscape(a) + ''; } else { return htmlEscape(a); } } setupDashboardSearch(); hideBlacklistedThreads(); setupBasicDashboardStyles(); setupCustomSort(function() { Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, "customFilter", function(f) { var filter = (f && f.value) ? f.value : 4; $("#MyGamesFilter").val(filter) refreshMyGames(); }) }); ifSettingIsEnabled('hideCoinsGlobally', function() { hideCoinsGlobally() }) ifSettingIsEnabled('useDefaultBootLabel', function() { createSelector(".BootTimeLabel", "z-index:50;"); }, function() { createSelector(".BootTimeLabel", "color:white !important;font-weight:normal!important;font-style:italic;font-size:13px!important;z-index:50;"); }) ifSettingIsEnabled("hideRefreshButton", function() { createSelector("#refreshAll", "display: none"); }) ifSettingIsEnabled("highlightTournaments", function() { createSelector("#MyTournamentsTable tbody", "background:#4C4C33;"); }) ifOneOrMoreIsEnabled(["hidePromotedGames", "hideCoinsGlobally"], function() { createSelector("#PromotedGamesTable", "display:none"); }) ifSettingIsEnabled("hideMyGamesIcons", function() { createSelector("#MyGamesTable td div img, #MyGamesTable td div a img", "display:none;"); }) ifSettingIsEnabled("scrollGames", function() { setupFixedWindowWithScrollableGames(); }, function() { createSelector(".SideColumn", "padding-top: 22px;") createSelector("body", "overflow: auto") createSelector("#MainSiteContent > table", "width: 100%;max-width: 1400px;") addCSS(` @media (max-width: 1050px) { #MyGamesTable > thead > tr * { font-size: 14px; } #MyGamesTable > thead > tr > td > div:nth-of-type(1) { margin-top: 5px!important; display: block; float: left; padding-right: 5px; } } @media (max-width: 750px) { #MyGamesTable > thead > tr > td > div:nth-of-type(1) { display:none; } }`) }, function() { setupRightColumn(true); refreshOpenGames(); setupOpenGamesFilter(); }) ifSettingIsEnabled("hideRightColumn", function() { hideRightColumn(); }) $("label[for='MultiDayRadio']").on("click", function () { registerGameTabClick() }); $("label[for='RealTimeRadio']").on("click", function () { registerGameTabClick() }); $("label[for='BothRadio']").on("click", function () { registerGameTabClick() }); $(window).resize(function () { ifSettingIsEnabled("scrollGames", function() { refreshSingleColumnSize(); }, undefined, function() { makePopupVisible() }) }); window.setTimeout(setupRefreshFunction, 00); updateTotalPointsEarned() } else { ifSettingIsEnabled('hideCoinsGlobally', function() { hideCoinsGlobally(); }) } setupBurn(); } function setupSettingsDatabase() { if(WLJSDefined()){ warlight_shared_viewmodels_WaitDialogVM.Start("Setting up Muli's Userscript...") } var promises = []; $.each(userscriptSettings, function(key, set) { promises[key] = $.Deferred(); var setting = { name: set.id, value: set.selected } Database.update(Database.Table.Settings, setting, undefined, function() { promises[key].resolve(); }) }) $.when.apply($, promises).done(function () { sessionStorage.setItem("showUserscriptMenu", true) window.setTimeout(window.location.reload(), 2000) }) } function hideCoinsGlobally() { $("#CoinsBtn").parent().next().css('left', 512); $("#CoinsBtn").parent().next().next().css('left', 635); $("#CoinsBtn").parent().next().next().next().css('left', 740); $("#LeaderboardTable").prev().remove(); $("#LeaderboardTable").css({ opacity: 0, cursor: 'default' }); $("#LeaderboardTable a").css('display', 'none'); $(".TopRightBar").find("a[href='/Coins/']").css('display', 'none'); $(".dropdown-menu a[href='/Coins/']").parent().remove() $("a[href='/Win-Money']").css('display', 'none'); $("#OpenTournamentsTable").css('display', 'none'); } /** * Creates the Userscript-Menu */ function setupUserscriptMenu() { var inputs = ''; $.each(userscriptSettings, function (key, setting) { if (setting.title != '') { inputs += `${setting.title}
    `; } var help = setting.help != undefined ? '' : '' inputs += '' + '
    '; if (setting.addBreak) { inputs += '
    '; } }); inputs += '
    Close and Refresh
    '; $("body").append(''); $("body").append(""); $(".userscript-show").on("change", function () { storeSettingsVariables(); }); $("#TopRightDropDown .dropdown-divider").before('
  • Muli\'s Userscript
  • '); $(".userscript-menu").on("click", function () { showUserscriptMenu() }); $(".close-userscript").on("click", function () { $(".userscript-show").fadeOut(); $(".overlay").fadeOut(); location.reload(); }); $(".close-popup-img").on("click", function () { $(".userscript-show").fadeOut(); $(".overlay").fadeOut(); $("embed#main").css('opacity', '1'); }); $("#hideRightColumn").after('
    ') // $("#hideRightColumn").after('') createSelector("#sortTables","margin-top: 5px") $("#sortTables").on("click", function() { showSortTables() }) $("#snowLight").after('') $("#snowLight").after('
    ') $("#snowLight").after('') $("body").append(""); $("body").append(""); createSelector("#exportSettingsBox, #importSettingsBox", "width:100%; height: 300px") $("#exportSettings").on("click", function() { exportSettings(); }) $("#showImportSettings").on("click", function() { showPopup('.importSettings-show'); }) $("#importSettings").on("click", function() { importSettings(); }) $("#resetHiddenThreads").on("click", function() { window.undoIgnore(); }) getSortTables(function(tables){ var tableCode = '' $.each(tables, function(key, table) { tableCode += '
    ' + table.name + '
    ' }) createSelector(".sortableLadder", "border: 1px gray solid;margin: 5px;padding: 5px;background-color:rgb(25, 25, 25);") createSelector(".tableSortNavigation", "display: inline-block;float: right;margin-top: -2px;") createSelector(".tableSortNavigation span", "padding: 3px 10px; cursor: pointer") createSelector(".tableSortNavigation span:hover", "color: #C0D0FF") createSelector(".sortTableHighlight", "background-color: rgb(60, 60, 60)") createSelector(".tableSortHideShow img", "height: 10px") createSelector(".tableSortHidden", "opacity: 0.2;") $("body").append(' ') $(".close-popup-img").unbind(); $(".close-popup-img").on("click", function () { $(".popup").fadeOut(); $(".overlay").fadeOut(); }); $(".tableSortUp").on("click", function() { $(".sortTableHighlight").removeClass("sortTableHighlight") var table = $(this).closest(".sortableLadder") table.addClass("sortTableHighlight") var prev = table.prev() table = table.detach() prev.before(table) }) $(".tableSortDown").on("click", function() { $(".sortTableHighlight").removeClass("sortTableHighlight") var table = $(this).closest(".sortableLadder") table.addClass("sortTableHighlight") var next = table.next() table = table.detach() next.after(table) }) $(".tableSortHideShow").on("click", function() { $(".sortTableHighlight").removeClass("sortTableHighlight") var table = $(this).closest(".sortableLadder") table.addClass("sortTableHighlight") table.toggleClass("tableSortHidden") }) checkUserscriptMenuButtons(); }) } function updateTotalPointsEarned() { var pointsEarned = { name: "totalPoints", value: warlight_shared_points_PointValues.Get(warlight_shared_viewmodels_SignIn.get_CurrentPlayer().Level).RawPoints + warlight_shared_viewmodels_SignIn.get_CurrentPlayer().PointsThisLevel } Database.update(Database.Table.Settings, pointsEarned, undefined, function() { }) } function importSettings() { var deferredCount = 0; var resolvedCount = 0; var clearPromises = []; $.each(Database.Table, function(key, table) { clearPromises[deferredCount++] = $.Deferred(); Database.clear(table, function() { clearPromises[resolvedCount++].resolve(); }) }) warlight_shared_viewmodels_WaitDialogVM.Start("Importing Settings...") $(".popup").fadeOut(); var settings = $("#importSettingsBox").val().trim(); // try { // settings = JSON.parse((atob(settings))) // for (x in settings) { // localStorage.setItem(settings[x].id, decodeURI(settings[x].value)) // } // window.location.reload(); // } catch (e) { // log(e) // warlight_shared_viewmodels_WaitDialogVM.Stop(); // $(".overlay").fadeOut(); // warlight_shared_viewmodels_AlertVM.DoPopup("There was an error importing the settings."); // } $.when.apply($, clearPromises).done(function () { var deferredCount = 0; var resolvedCount = 0; var promises = []; try { settings = JSON.parse(atob(settings)) $.each(settings, function(key, data) { var table = data.table var content = data.data $.each(content, function(key, value){ promises[deferredCount++] = $.Deferred(); Database.add(table, value, function() { promises[resolvedCount++].resolve(); }) }) }) $.when.apply($, promises).done(function () { window.location.reload(); }) } catch (e) { log(e) warlight_shared_viewmodels_WaitDialogVM.Stop(); $(".overlay").fadeOut(); warlight_shared_viewmodels_AlertVM.DoPopup("There was an error importing the settings."); } }); } function exportSettings() { var settings = []; var deferredCount = 0; var resolvedCount = 0; var promises = []; $.each(Database.Exports, function (key, table) { promises[deferredCount++] = $.Deferred(); Database.readAll(table, function(data) { settings.push({table: table, data: data}) promises[resolvedCount++].resolve(); }) }) $.when.apply($, promises).done(function () { var settingsString = btoa(JSON.stringify(settings)) $("#exportSettingsBox").html(settingsString) showPopup(".exportSettings-show"); $("#exportSettingsBox").focus(); $("#exportSettingsBox").select(); $("#downloadExportSettingsFile").click(function(){ this.href = "data:text/plain;charset=UTF-8," + settingsString; }); }); } function showUserscriptMenu() { showPopup(".userscript-show") $("#TopRightDropDown").fadeOut(); $("embed#main").attr('wmode', 'transparent'); $("embed#main").css('opacity', '0'); $("embed#main").attr('align', 'left'); } function showPopup(selector) { if($(selector).length > 0) { $(".popup").fadeOut(); $(selector).fadeIn(); $(".overlay").fadeIn(); makePopupVisible(); } } function makePopupVisible() { if($(".popup600:visible").offset() && $(".popup600:visible").offset().top + $(".popup600:visible").height() + 150 > $(window).height() || ($(".popup600:visible").offset() && $(".popup600:visible").offset().top < 100)) { $(".popup600:visible").css("margin-top", $(window).height() - 250 - $(".popup600:visible").height()) $(".popup600:visible .head").css("margin-top", $(window).height() - 250 - $(".popup600:visible").height() + 2) } } function getSortTables(callback) { var defaultTables = [ {id: "#BookmarkTable", name: "Bookmarks", hidden: false, order: 0}, {id: "#LeagueTable", name: "Community Events", hidden: false, order: 1}, {id: "#MyTournamentsTable", name: "Tournaments", hidden: false, order: 2}, {id: "#RealTimeLadderTable", name: "Real-Time Ladder", hidden: false, order: 3}, {id: "#MapOfTheWeekTable", name: "Map of the Week", hidden: false, order: 4}, {id: "#ForumTable", name: "Forum Posts", hidden: false, order: 5}, {id: "#ClanForumTable", name: "Clan Forum Posts", hidden: false, order: 6}, {id: "#BlogTable", name: "Recent Blog Posts", hidden: false, order: 7}, {id: "#LeaderboardTable", name: "Coin Leaderboard", hidden: false, order: 8} ] if($("#ShopTable").length > 0) { defaultTables.push({id: "#ShopTable", name: "WarLight Shop", hidden: false, order: -1}) } Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, "tableSort", function(tableData) { if(tableData && tableData.value.length > 3) { var tables = tableData.value; if($("#ShopTable").length > 0 && !arrayHasObjWithId(tables, "#ShopTable")) { tables.push({id: "#ShopTable", name: "WarLight Shop", hidden: false, order: -1}) } if(!arrayHasObjWithId(tables, "#LeagueTable")) { tables.push( {id: "#LeagueTable", name: "Community Events", hidden: false, order: 1}); } callback($(tables).sort(compareTable)); } else { callback($(defaultTables).sort(compareTable)) } }) } function arrayHasObjWithId(arr, id) { var found = false; $.each(arr, function(key, val) { if(val.id == id) { found = true; } }) return found; } window.saveTableSort = function() { var tables = [] $.each($("#sortTablePopup > div.sortableLadder"), function(key, table) { var order = key var id = $(table).attr('data-tableId') var hidden = $(table).hasClass("tableSortHidden") var name = $(table).attr('data-name') tables.push({id: id, name: name, hidden: hidden, order: order}) }) var tableSort = { name: "tableSort", value: tables } Database.update(Database.Table.Settings, tableSort, undefined, function() { $("#sortTablePopup").fadeOut(); $(".overlay").fadeOut(); refreshOpenGames(); }) } function showSortTables() { $(".popup").fadeOut(); showPopup("#sortTablePopup") } function compareTable(a,b) { if (a.order < b.order) return -1; if (a.order > b.order) return 1; return 0; } function showInfo(text, x, y) { window.setTimeout(function () { if (!$(".custom-menu").is(':visible')) { $(".custom-menu .content").html(text); $(".custom-menu").finish().toggle(100). // In the right position (the mouse) css({ top: x + "px", left: y + "px" }); } }, 10); } window.showSettingHelp = function (id, obj) { var help = ''; $.each(userscriptSettings, function (key, setting) { if (setting.id == id) { help = setting.help; } }); var x = $(obj).offset().top; var y = $(obj).offset().left; showInfo(help, x, y); } function checkUserscriptMenuButtons() { $.each(userscriptSettings, function (key, set) { Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, set.id, function(setting) { if(setting){ $("#" + setting.name).prop("checked", setting.value); } else { $("#" + set.id).prop("checked", set.selected); } }) }); } function StickyTitles(stickies) { var thisObj = this; thisObj.load = function () { stickies.each(function () { var thisSticky = $(this).wrap('
    '); thisSticky.parent().height(thisSticky.outerHeight()); var pos = parseInt(thisSticky.offset().top, 10) - parseInt($(".showSide").offset().top, 10); $.data(thisSticky[0], 'pos', pos); }); $(".showSide").off("scroll.stickies").on("scroll.stickies", function () { thisObj.scroll(); }); }; thisObj.scroll = function () { stickies.each(function (i) { var thisSticky = $(this), nextSticky = stickies.eq(i + 1), prevSticky = stickies.eq(i - 1), pos = $.data(thisSticky[0], 'pos'); var showSide = $(".showSide"); if (pos <= showSide.scrollTop()) { thisSticky.addClass("fixed"); if (nextSticky.length > 0 && thisSticky.offset().top >= $.data(nextSticky[0], 'pos') - thisSticky.outerHeight()) { thisSticky.addClass("absolute").css("top", jQuery.data(nextSticky[0], 'pos') - thisSticky.outerHeight()); } } else { thisSticky.removeClass("fixed"); if (prevSticky.length > 0 && showSide.scrollTop() <= $.data(thisSticky[0], 'pos') - prevSticky.outerHeight()) { prevSticky.removeClass("absolute").removeAttr("style"); } } }); } } /** * Stores User-Settings to local Storage */ function storeSettingsVariables() { $.each(userscriptSettings, function (key, set) { var isEnabled = $("#" + set.id).prop("checked"); var setting = { name: set.id, value: isEnabled } Database.update(Database.Table.Settings, setting, undefined, function() { }) }); } /** * Refreshes Width & Height of Columns */ function refreshSingleColumnSize() { var showSide = $(".showSide"); var showGames = $(".showGames"); showSide.scrollTop(0); /** * Sticky Titles */ $(".followMeBar").each(function () { $(this).removeClass("fixed"); if ($(this).parent().hasClass("followWrap")) { $(this).unwrap(); } var thisSticky = $(this).wrap('
    '); thisSticky.parent().height(thisSticky.outerHeight()); var pos = parseInt(thisSticky.offset().top) - parseInt(showSide.offset().top); $.data(thisSticky[0], 'pos', pos); }); var width = $("#ForumTable").width(); createSelector(".followMeBar", "width:" + width + "px;"); showGames.find("table").css({ height: window.innerHeight - 150 }); //var height = showGames.find("table thead tr").height() + 30; var height = 48; createSelector(".showGames table tbody tr:first-of-type td", "padding-top:" + height + "px"); showSide.css({ height: window.innerHeight - 150 }); showGames.find("table tbody tr:first-of-type td").css("padding-top", height); $(".showGames thead tr").width($(".showGames thead tr").closest("table").width()-30) $(".showGames thead tr td div").unwrap(); } /** * Create a CSS selector * @param name The name of the object, which the rules are applied to * @param rules The CSS rules */ function createSelector(name, rules) { var style = document.createElement('style'); style.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(style); if (!(style.sheet || {}).insertRule) { (style.styleSheet || style.sheet).addRule(name, rules); } else { style.sheet.insertRule(name + "{" + rules + "}", 0); } } /** * Reloads all Games */ function refreshAllGames(force) { log("Reloading Games") if ($(".popup").is(":visible") && !force) { return; } ifSettingIsEnabled('scrollGames', function() { openGamesTable.scrollTop(0); myGamesTable.scrollTop(0); promotedGamesTable.scrollTop(0); }) $('table').css('overflow-y', 'hidden') refreshMyGames(); refreshOpenGames(); refreshPromotedGames(); } function setupCustomSort(cb) { Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, "customSort", function(sort) { sortType = (sort != undefined && sort.value != undefined) ? sort.value : 1; $("#myGamesSortContainer").remove(); var target; ifSettingIsEnabled("scrollGames", function() { target = $($("#MyGamesTable thead tr").find("*")[0]); }, function() { target = $($("#MyGamesTable thead tr td").find("*")[0]); }, function() { target.after('
    Sort:
    ') sessionStorage.setItem("customSort", sortType) $("#myGamesSort").on("change", function() { var sortType = $(this).val(); sessionStorage.setItem("customSort", sortType) var sort = { name: "customSort", value: sortType } Database.update(Database.Table.Settings, sort, undefined, function() { }) refreshMyGames(); }) cb(); }) }) } function refreshMyGames(data) { myGamesTable.find("tbody").fadeTo('fast', 0.15); var filter = $("#MyGamesFilter").val() || 4; wljs_Jsutil.Post("?", "FilterChange=" + filter, function (a) { var myGames = wljs_Jsutil.GamesFromDump(a); renderMyGames(myGames) }); } Array.prototype.diff = function(a) { return this.filter(function(i) {return a.indexOf(i) < 0;}); }; function renderMyGames(myGames) { removeMyGames() var sortType = sessionStorage.getItem("customSort") if(sortType != 1 && sortType != 4) { myGames.sort(gameSort) } var dueGames = myGames.filter(function(a) { var game = (new warlight_shared_viewmodels_main_MyGamesGameVM).Init(warlight_shared_viewmodels_ConfigurationVM.Settings, 0, a, warlight_shared_viewmodels_SignIn.get_CurrentPlayer()) return !game.UsOpt.HasCommittedOrders && (game.Game.State == 3 || game.Game.State == 5) && game.UsOpt.State == 2 }) if (myGames.length == 0) { d.append('' + warlight_shared_viewmodels_main_MultiPlayerDashboardVM.NoGamesHtml(0) + ""); } else { //Render MyGames for (var f = 0; f < myGames.length;) { var g = myGames[f]; ++f; g = (new warlight_shared_viewmodels_main_MyGamesGameVM).Init(warlight_shared_viewmodels_ConfigurationVM.Settings, 0, g, warlight_shared_viewmodels_SignIn.get_CurrentPlayer()); d.append(warlight_shared_viewmodels_main_MultiPlayerDashboardVM.RenderGameHtml(warlight_shared_viewmodels_ConfigurationVM.Settings, g, null) + "
    Hallo
    ") } //Setup time left in GameRow if(sortType != 1) { $.each(dueGames, function(key, game) { var id = game.GameID var timeLeft = Math.min(game.AutoBoot._totalMilliseconds, game.VoteToBoot._totalMilliseconds, game.DirectBoot._totalMilliseconds) - game.WaitingFor._totalMilliseconds var bootTime = new Date().getTime() + parseInt(timeLeft) $("[gameid='" + id + "']").find("td div + span").append(` (${getTimeLeft(timeLeft)} left)`) }) } //Setup time left tooltip $.each(myGames, function(key, game) { var id = game.GameID var timeLeft = Math.min(game.AutoBoot._totalMilliseconds, game.VoteToBoot._totalMilliseconds, game.DirectBoot._totalMilliseconds) - game.WaitingFor._totalMilliseconds; var bootTime = new Date().getTime() + parseInt(timeLeft) var label = $("[gameid='" + id + "']").find(".BootTimeLabel") label.attr("title", getTimeLeft(timeLeft, true) + " left") label.tooltip({ show: {delay: 100}, hide: 100 }); label.attr("data-boottime", bootTime) }) //Setup NextGameId var nextGameIds = []; $.each(myGames, function(key, game) { var id = game.GameID if(gameCanBeNextGame(game)){ nextGameIds.push(id) } }) $.each(myGames, function(key, game) { var id = game.GameID if(nextGameIds.length > 0 && nextGameIds[0]) { var ids = []; var url = "https://www.warlight.net/MultiPlayer?GameID=" + id + (nextGameIds.length > 1 ? ("&NextGameIDs=" + nextGameIds.slice(1, nextGameIds.length).join()) : ""); $("[gameid='" + id + "'] td > a").attr("href", url) nextGameIds.push(nextGameIds.shift()) } }) } myGamesTable.find("tbody").fadeTo('fast', 1, function () { myGamesTable.css('overflow-y', 'scroll'); }); $(window).trigger('resize'); } function removeMyGames() { d = $("#MyGamesTable").children("tbody"); d.children().remove(); } function setMyGamesTimeLeft() { $.each($("[data-boottime]"), function(key, target) { var timeLeft = $(target).attr("data-boottime") - new Date().getTime() if($(target).is("[data-inline]")) { $(target).text(` (${getTimeLeft(timeLeft)} left)`) } else { $(target).tooltip( "option", "content", getTimeLeft(timeLeft, true) + " left") } }) } function getTimeLeft(time, detailed) { var hours1 = 1 * 60 * 60 * 1000 var hours5 = 5 * 60 * 60 * 1000 var days5 = 5 * 25 * 60 * 60 * 1000 var secs = time / 1000 var mins = secs / 60 var hours = mins / 60 var days = hours / 24 if(time < 0) { return "Hurry up! No time" } else if(time < hours1) { var m = Math.round(Math.floor(mins) % 60); var s = Math.round(Math.floor(secs) % 60); return m > 0 ? (m + (m == 1 ? " minute " : " minutes ")) : "" + s + (s == 1 ? " second" : " seconds") } else if(time < hours5) { var m = Math.round(Math.floor(mins) % 60) var h = Math.floor(hours); return h + (h == 1 ? " hour " : " hours ") + m + (m == 1 ? " minute" : " minutes") } else if(time < days5 && !detailed) { var d = Math.floor(days) var h = Math.round(Math.floor(hours) % 24) return (d > 0 ? d + (d == 1 ? " day " : " days ") : "") + h + (h == 1 ? " hour" : " hours") } else if(time >= days5 && !detailed) { return Math.round(days) + " days " } else if(detailed) { var d = Math.floor(days) var h = Math.round(Math.floor(hours) % 24) var m = Math.round(Math.floor(mins) % 60) return (d > 0 ? d + (d == 1 ? " day " : " days ") : "") + h + (h == 1 ? " hour " : " hours ") + m + (m == 1 ? " minute" : " minutes") } else { return "undefined left " + time } } function gameSort(a,b){ var sortType = sessionStorage.getItem("customSort") var gameA = (new warlight_shared_viewmodels_main_MyGamesGameVM).Init(warlight_shared_viewmodels_ConfigurationVM.Settings, 0, a, warlight_shared_viewmodels_SignIn.get_CurrentPlayer()) var gameB = (new warlight_shared_viewmodels_main_MyGamesGameVM).Init(warlight_shared_viewmodels_ConfigurationVM.Settings, 0, b, warlight_shared_viewmodels_SignIn.get_CurrentPlayer()) var aRealTime = gameA.Game.RealTimeGame var aPlaying = (gameA.Game.State == 3 || gameA.Game.State == 5) && gameA.UsOpt.State == 2 var aPrio0 = gameA.Game.PrivateMessagesWaiting || gameA.Game.PublicChatWaiting || gameA.Game.TeamChatWaiting var aPrio1 = gameA.Game.State == 2 && gameA.UsOpt.State == 1 //Waiting to join var aPrio4 = gameA.Game.State == 2 && gameA.Game.WaitingForYouToStart //Waiting for you to start var aPrio3 = aPlaying && !gameA.UsOpt.HasCommittedOrders //Your turn 3 = turn, 5 = picking var aBootTime = Math.min(a.AutoBoot._totalMilliseconds, a.VoteToBoot._totalMilliseconds, a.DirectBoot._totalMilliseconds) - a.WaitingFor._totalMilliseconds var bRealTime = gameB.Game.RealTimeGame var bPlaying = (gameB.Game.State == 3 || gameB.Game.State == 5) && gameB.UsOpt.State == 2 var bPrio0 = gameB.Game.PrivateMessagesWaiting || gameB.Game.PublicChatWaiting || gameB.Game.TeamChatWaiting var bPrio1 = gameB.Game.State == 2 && gameB.UsOpt.State == 1 var bPrio4 = gameB.Game.State == 2 && gameB.Game.WaitingForYouToStart var bPrio3 = bPlaying && !gameB.UsOpt.HasCommittedOrders var bBootTime = Math.min(b.AutoBoot._totalMilliseconds, b.VoteToBoot._totalMilliseconds, b.DirectBoot._totalMilliseconds) - b.WaitingFor._totalMilliseconds if(aRealTime && !bRealTime) return -1; if(bRealTime && !aRealTime) return 1; if(sortType == 3) { if(aPrio0 && !bPrio0) return -1; if(bPrio0 && !aPrio0) return 1; } if(aPrio1 && !bPrio1) return -1; if(bPrio1 && !aPrio1) return 1; if(aPrio3 && !bPrio3) return -1; if(bPrio3 && !aPrio3) return 1; if(aPlaying && !bPlaying) return -1; if(bPlaying && !aPlaying) return 1; if(aPrio3 && bPrio3) return aBootTime - bBootTime; if(aPrio4 && !bPrio4) return -1; if(bPrio4 && !aPrio4) return 1; return a.WaitingFor - b.WaitingFor } function gameCanBeNextGame(g) { var game = (new warlight_shared_viewmodels_main_MyGamesGameVM).Init(warlight_shared_viewmodels_ConfigurationVM.Settings, 0, g, warlight_shared_viewmodels_SignIn.get_CurrentPlayer()) var playing = (game.Game.State == 3 || game.Game.State == 5) && game.UsOpt.State == 2 var prio0 = game.Game.PrivateMessagesWaiting || game.Game.PublicChatWaiting || game.Game.TeamChatWaiting var prio1 = game.Game.State == 2 && game.UsOpt.State == 1 //Waiting to join var prio3 = playing && !game.UsOpt.HasCommittedOrders //Your turn 3 = turn, 5 = picking var prio4 = game.Game.State == 2 && game.Game.WaitingForYouToStart //Waiting for you to start return prio0 || prio1 || prio3 || prio4 } function refreshOpenGames() { deletedMD = deletedRT = 0; openGamesTable.find("tbody").fadeTo('fast', 0.15); var page = $('
    ').load('https://www.warlight.net/MultiPlayer/ ', function () { var data = page.find('#AllOpenGamesData').html(); $('#AllOpenGamesData').html(data); WL_MPDash.OpenGamesCtrl.AllOpenGamesData = data Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, "openGamesFilters", function(filters) { var openGamesFilters; if(filters) { openGamesFilters = filters.value; } var games; if (openGamesFilters && openGamesFilters["disableAll"] != true) { games = filterGames(wljs_Jsutil.GamesFromDump(data), openGamesFilters); } else { games = wljs_Jsutil.GamesFromDump(data); } $.each(games, function (key, game) { if ($(game).playerJoined()) { games[key] = $(game).markJoined(); } }); wljs_AllOpenGames = WL_MPDash.OpenGamesCtrl.AllOpenGames = games; var RealTimeLadderTable = page.find("#RealTimeLadderTable tbody tr:first-of-type").outerHTML(); $("#RealTimeLadderTable tbody tr:first-of-type") $("#RealTimeLadderTable tbody tr:first-of-type").replaceWith(RealTimeLadderTable) replaceAndFilterForumTable(page.find("#ForumTable").outerHTML()); $("#ClanForumTable").replaceWith(page.find("#ClanForumTable").outerHTML()) setupRightColumn() updateOpenGamesCounter(); wljs_AllOpenGamesData = wljs_multiplayer_Ctrl_AllOpenGamesData = data; var player = warlight_shared_viewmodels_SignIn.get_CurrentPlayer(); if ((new js.JQuery(this.BothRadio)).is(":checked")) { player.OpenGamePreference = 1; } else if ((new js.JQuery(this.MultiDayRadio)).is(":checked")) { player.OpenGamePreference = 2; } else if ((new js.JQuery(this.RealTimeRadio)).is(":checked")) { player.OpenGamePreference = 3; } wljs_Jsutil.Post("/MultiPlayer/", "ChangePace=" + player.OpenGamePreference, function (a) {}); var a = $("#OpenGamesTable").children("tbody"); a.children().remove(); var gamesToShow = warlight_shared_viewmodels_main_MultiPlayerDashboardVM.GamesToShow(wljs_AllOpenGames, player.OpenGamePreference, 0 == this.ShowingAllOpenGames) for (var b = 0; b < gamesToShow.length;) { var game = gamesToShow[b]; b++; game.get_IsLottery() && warlight_shared_viewmodels_main_MultiPlayerDashboardVM.get_HideLotteryGames() || (game = (new warlight_shared_viewmodels_main_MyGamesGameVM).Init(warlight_shared_viewmodels_ConfigurationVM.Settings, 2, game, warlight_shared_viewmodels_SignIn.get_CurrentPlayer()), a.append(warlight_shared_viewmodels_main_MultiPlayerDashboardVM.RenderGameHtml(warlight_shared_viewmodels_ConfigurationVM.Settings, game, null))) } openGamesTable.find("tbody").fadeTo('fast', 1, function () { openGamesTable.css('overflow-y', 'scroll'); }); addOpenGamesSuffix(); domRefresh(); }) }); } var refreshingPromotedGames = false; function refreshPromotedGames() { if(!refreshingPromotedGames) { refreshingPromotedGames = true; promotedGamesTable.find("tbody").fadeTo('fast', 0.15); var page = $('
    ').load('https://www.warlight.net/MultiPlayer/ ', function () { var data = page.find('#MorePromotedGamesData').html(); $('#MorePromotedGamesData').html(data); wljs_PromotedGames = wljs_Jsutil.GamesFromDump(data); refreshingPromotedGames = false; var a = $("#PromotedGamesTable").children("tbody"); a.children().remove(); for (var b = 0; b < wljs_PromotedGames.length;) { var game = wljs_PromotedGames[b]; b++; (game = (new warlight_shared_viewmodels_main_MyGamesGameVM).Init(warlight_shared_viewmodels_ConfigurationVM.Settings, 2, game, warlight_shared_viewmodels_SignIn.get_CurrentPlayer()), a.append(warlight_shared_viewmodels_main_MultiPlayerDashboardVM.RenderGameHtml(warlight_shared_viewmodels_ConfigurationVM.Settings, game, null))) } domRefresh(); promotedGamesTable.find("tbody").fadeTo('fast', 1, function () { promotedGamesTable.css('overflow-y', 'scroll'); }); }); } else { log("refreshing promoted blocked") } } /** * Setups the refresh functionality */ function setupRefreshFunction() { lastRefresh = new Date(); var oldRefreshBtn = $("#RefreshBtn"); var oldRefreshBtn2 = $("#RefreshBtn2"); if (oldRefreshBtn.length) { var newRefreshBtn = $("#refreshAll"); oldRefreshBtn.replaceWith(oldRefreshBtn.clone().removeAttr("id").attr("id", "refreshAll").attr("value", "Refresh (R)")); newRefreshBtn.appendTo("body"); $("#refreshAll").on("click", function () { if (new Date() - lastRefresh > 3000) { lastRefresh = new Date(); log("Refresh by click") refreshAllGames(); } }); } else if (oldRefreshBtn2.length) { var newRefreshBtn = $("#refreshAll"); oldRefreshBtn2.replaceWith(oldRefreshBtn2.clone().removeAttr("id").attr("id", "refreshAll").attr("value", "Refresh (R)")); newRefreshBtn.appendTo("body"); $("#refreshAll").on("click", function () { if (new Date() - lastRefresh > 3000) { lastRefresh = new Date(); log("Refresh by click") refreshAllGames(); } }); } $(".MainColumn").prepend($('#refreshAll')) ifSettingIsEnabled('autoRefreshOnFocus', function() { $(window).on('focus', function () { if (new Date() - lastRefresh > 30000) { lastRefresh = new Date(); log("Refresh by focus") refreshAllGames(); } }); }) $("body").keyup(function (event) { // "R" is pressed if (event.which == 82) { if (new Date() - lastRefresh > 3000) { lastRefresh = new Date(); log("Refresh by key r") refreshAllGames(); } } }); } function getDate(text) { var date; if (text.match(/[0-9]+ second/)) { date = new Date() - 1000; } else if (text.match(/[0-9]+ seconds/)) { date = new Date() - text.match(/[0-9]+/) * 1000; } else if (text.match(/[0-9]+ minute/)) { date = new Date() - text.match(/[0-9]+/) * 1000 * 60; } else if (text.match(/[0-9]+ minutes/)) { date = new Date() - text.match(/[0-9]+/) * 1000 * 60; } else if (text.match(/[0-9]+ hour/)) { date = new Date() - text.match(/[0-9]+/) * 1000 * 60 * 59; } else if (text.match(/[0-9]+ hours/)) { date = new Date() - text.match(/[0-9]+/) * 1000 * 60 * 60; } else if (text.match(/[0-9]+ day/)) { date = new Date() - text.match(/[0-9]+/) * 1000 * 60 * 60 * 36; } else if (text.match(/[0-9]+ days/)) { date = new Date() - text.match(/[0-9]+/) * 1000 * 60 * 60 * 24; } else if (text.match(/[0-9]+[\/][0-9]+[\/][0-9]+/)) { var split = text.split('/'); date = new Date(split[2], split[0] - 1, split[1]); date.setHours(0, 0, 0, 0); } return date; } function setGlobalStyles() { $("[src='https://d2wcw7vp66n8b3.cloudfront.net/Images/MembershipGiftIcon.gif']").closest(".dataTable").attr("id", "ShopTable"); createSelector('.help-icon', 'display:inline-block;position:absolute; margin-left:10px;margin-top: 2px;cursor:pointer; height: 15px; width: 15px;') var winHeight = $(window).height(); createSelector(".userscript-menu", "display: block;color: #555;text-decoration: none;line-height: 18px;padding: 3px 15px;margin: 0;white-space: nowrap;"); createSelector(".userscript-menu:hover", "cursor:pointer;background-color: #08C;color: #FFF;cursor: pointer;"); createSelector(".popup", "position: fixed;;left: 50%;background: #171717;top: 100px;z-index: 99; color:white;padding:60px 30px 30px 30px;border: 2px solid gray;border-radius:8px;max-height:" + (winHeight - 200) + "px;overflow-y:auto"); createSelector(".close-userscript", "margin: 40px 0;width: 100%;text-align: center;font-size: 15px;cursor: pointer;background: gray;line-height: 30px;border-radius: 8px;clear: both"); createSelector(".close-popup-img", "float:right;margin:5px;cursor:pointer;margin-right: 20px"); createSelector(".popup label", "width: 80%;display: inline-block;font-size: 15px;margin: 5px;"); createSelector(".popup .title", "color: gray;font-size: 15px;margin-top: 10px;display: inline-block;width: 95%;border-bottom: 1px gray solid;padding-bottom: 3px;"); createSelector(".popup input[type='checkbox']", "width: 20px;height: 20px;margin-left:30px;margin: 5px;-moz-appearance:none;"); createSelector(".overlay", "position: absolute;background: white;top: 0;left: 0;right: 0;bottom: 0;z-index: 98;opacity: 0.5;width: 100%;height: 100%;position: fixed;"); createSelector(".popup .head", "position: fixed;height: 40px;background: #330000;width: 660px;left: 0;right: 0;top: 100px;color: white;font-size: 15px;text-align: center;line-height: 40px;border-top-left-radius:8px;border-top-right-radius:8px;margin:auto;z-index:10000;"); createSelector(".userscript-show", "display:none"); createSelector("#MorePromotedGamesHorizontalRow", "display:none"); createSelector(".newSetting", "color: gold;font-weight: bold;"); createSelector(".userscript-menu img", "height: 18px;display: inline-block;position: relative;margin-bottom: -5px;margin-right: 7px;"); createSelector(".custom-menu", "display: none;z-index: 98;position: absolute;overflow: hidden;border: 1px solid #CCC;white-space: nowrap;font-family: sans-serif;background: #FFF;color: #333;border-radius:5px;padding: 10px;z-index:100000000; cursor:pointer"); createSelector(".custom-menu .content", "width: 300px;white-space: pre-wrap;"); createSelector('.popup input[type="text"]', 'display: inline-block;background: none;border-top: none;border-left: none;border-right: none;color: green;font-size: 15px;border-bottom: 1px white dashed;font-family: Verdana;padding: 0 5px 0 5px;text-align: center;margin-right: 5px'); createSelector(".popup840", "width: 840px;margin-left: -452px"); createSelector(".popup600", "width: 600px;margin-left: -332px"); createSelector(".popup840 .head", "width: 900px"); createSelector(".popup600 .head", "width: 660px"); createSelector(".context-menu", "display: none;z-index: 100;position: absolute;overflow: hidden;border: 1px solid #CCC;white-space: nowrap;font-family: sans-serif;background: #FFF;color: #333;border-radius: 5px;padding: 0;"); createSelector(".context-menu li", "padding: 8px 12px;cursor: pointer;list-style-type: none;"); createSelector(".context-menu li:hover", "background-color: #DEF;"); createSelector("#MyGamesTable select","margin: 0 10px 0 5px; width: 125px") createSelector("#MyGamesFilter", "float:right") createSelector("#MyGamesTable thead tr", "text-align: right") $("body").on("click", function (e) { if ($(".custom-menu").is(':visible')) { $(".custom-menu").hide(100); } }); } window.deletedRT = 0; window.deletedMD = 0; function filterGames(games, openGamesFilters) { var filteredGames = []; var deletedGames = []; $.each(games, function (key, game) { if (!$(game).getsFiltered(openGamesFilters)) { filteredGames.push(game); } else { if (game.RealTimeGame) { deletedRT++; } else { deletedMD++; } } }); return filteredGames; } function storeFilterVariables() { openGamesFilters = {}; $.each(filters, function (key, filter) { if (filter.type == "checkbox") { openGamesFilters[filter.id] = $("#" + filter.id).prop("checked"); } }); openGamesFilters["hideKeyword"] = $("#hideKeyword").val() openGamesFilters["hideRealTimeBootTime"] = $("#hideRealTimeBootTime").val() openGamesFilters["hideMultiDayBootTimeDays"] = $("#hideMultiDayBootTimeDays").val() openGamesFilters["hideMultiDayBootTimeHours"] = $("#hideMultiDayBootTimeHours").val() var luck = $("#hideLuck").val(); openGamesFilters["hideLuck"] = ($.isNumeric(luck) && luck <= 100 && luck >= 0) ? luck : 100; var minPlayers = $("#hideMinPlayers").val(); openGamesFilters["hideMinPlayers"] = ($.isNumeric(minPlayers) && minPlayers <= 100 && minPlayers >= 2) ? minPlayers : 2; var maxPlayers = $("#hideMaxPlayers").val(); openGamesFilters["hideMaxPlayers"] = ($.isNumeric(maxPlayers) && maxPlayers <= 100 && maxPlayers >= 2) ? maxPlayers : 100; if (parseFloat(openGamesFilters["hideMinPlayers"]) > parseFloat(openGamesFilters["hideMaxPlayers"])) { openGamesFilters["hideMaxPlayers"] = openGamesFilters["hideMinPlayers"] } var rtBoot = $("#hideRealTimeBootTime").val(); openGamesFilters["hideRealTimeBootTime"] = $.isNumeric(rtBoot) ? rtBoot * 60 * 1000 : 0; var mdBoot = calculateMDBoot($("#hideMultiDayBootTimeHours").val(), $("#hideMultiDayBootTimeDays").val()); openGamesFilters["hideMultiDayBootTimeDays"] = mdBoot.days; openGamesFilters["hideMultiDayBootTimeHours"] = mdBoot.hours; openGamesFilters["hideMultiDayBootTimeInMs"] = (parseInt(mdBoot.days) * 24 + parseInt(mdBoot.hours)) * 60 * 60 * 1000; var gameFilters = { name: "openGamesFilters", value: openGamesFilters } Database.update(Database.Table.Settings, gameFilters, undefined, function() { updateFilterSettings() }) } function calculateMDBoot(hours, days) { hours = $.isNumeric(hours) ? hours : 0; days = $.isNumeric(days) ? days : 0; if (hours >= 24) { days = parseFloat(days) + parseInt(hours / 24); hours -= parseInt(hours / 24) * 24 } return { hours: hours, days: days } } function updateFilterSettings() { Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, "openGamesFilters", function(gameFilters) { if(!gameFilters || !gameFilters.value) { return; } var openGamesFilters = gameFilters.value; $.each(filters, function (key, filter) { if (filter.type == "checkbox") { $("#" + filter.id).prop("checked", openGamesFilters[filter.id]); } }); $("#hideLuck").val(openGamesFilters["hideLuck"] || 100); $("#hideMinPlayers").val(openGamesFilters["hideMinPlayers"] || 0); $("#hideMaxPlayers").val(openGamesFilters["hideMaxPlayers"] || 100); $("#hideKeyword").val(openGamesFilters["hideKeyword"] || ""); $("#hideRealTimeBootTime").val(openGamesFilters["hideRealTimeBootTime"] / 1000 / 60 || 0); $("#hideMultiDayBootTimeDays").val(openGamesFilters["hideMultiDayBootTimeDays"] || 0); $("#hideMultiDayBootTimeHours").val(openGamesFilters["hideMultiDayBootTimeHours"] || 0); }) } function ifSettingIsEnabled(setting, positive, negative, cb) { Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, setting, function(setting) { if(setting && setting.value) { positive(); if(typeof cb == "function") { cb(); } } else { if(typeof negative == 'function') { negative(); } if(typeof cb == 'function') { cb(); } } }) } function ifSettingIsNotEnabled(setting, callback) { Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, setting, function(setting) { if(!setting.value) { callback(); } }) } function ifAllAreEnabled(settings, positive, negative) { var promises = []; var allAreEnabled = true; $.each(settings, function (key, setting) { promises[key] = $.Deferred(); Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, setting, function(set) { if(!set || !set.value) { allAreEnabled = false; } promises[key].resolve(); }) }) $.when.apply($, promises).done(function () { if(allAreEnabled){ positive() } else { if(typeof negative == "function") { negative(); } } }) } function ifOneOrMoreIsEnabled(settings, positive, negative) { var promises = []; var isEnabled = false; $.each(settings, function (key, setting) { promises[key] = $.Deferred(); Database.readIndex(Database.Table.Settings, Database.Row.Settings.Name, setting, function(set) { if(set && set.value) { isEnabled = true; } promises[key].resolve(); }) }) $.when.apply($, promises).done(function () { if(isEnabled){ positive() } else { if(typeof negative == "function") { negative(); } } }) } function pageIsMultiplayer() { return location.href.match(/.*warlight[.]net\/MultiPlayer.*/i); } function pageIsPointsPage() { return location.href.match(/.*warlight[.]net\/Points.*/i); } function pageIsDashboard() { return location.href.match(/.*warlight[.]net\/MultiPlayer\/(?:#|\?|$).*$/i); } function pageIsRealTimeLadder() { return location.href.match(/.*warlight[.]net\/LadderSeason\?ID=3.*$/i); } function pageIsProfile() { return location.href.match(/.*warlight[.]net\/profile\?p=[0-9]+$/i); } function pageIsLevelOverview() { return location.href.match(/.*warlight[.]net\/SinglePlayer\/Level\?ID=[0-9]+$/i); } function pageIsLevelPlayLog() { return location.href.match(/.*warlight[.]net\/SinglePlayer\/PlayLog\?ID=[0-9]+$/i); } function pageIsMapsPage() { return location.href.match(/.*warlight[.]net\/maps/i); } function pageIsClanThread() { return location.href.match(/.*warlight[.]net\/Discussion/i); } function pageIsNewThread() { return location.href.match(/.*warlight[.]net\/Forum\/NewThread.*/i); } function pageIsForumThread() { return location.href.match(/.*warlight[.]net\/Forum\/[0-9]+.*/i); } function pageIsForumOverview() { return location.href.match(/.*warlight[.]net\/Forum\/Forum.*/i); } function pageIsThread() { return location.href.match(/.*warlight[.]net\/(Forum|Discussion|Clans\/CreateThread).*/i); } function pageIsSubForum() { return location.href.match(/.*warlight[.]net\/Forum\/[A-Z]+.*/i); } function pageIsForum() { return location.href.match(/.*warlight[.]net\/Forum\/.*/); } function pageIsLadderOverview() { return location.href.match(/.*warlight[.]net\/Ladders/); } function pageIsLogin() { return location.href.match(/.*warlight[.]net\/LogIn.*/); } function pageIsClanForumThread() { return location.href.match(/.*warlight[.]net\/Discussion\/\?ID=[0-9]+.*/); } function pageIsTournament() { return location.href.match(/.*warlight[.]net\/MultiPlayer\/Tournament\?ID=[0-9]+/i); } function pageIsTournamentOverview() { return location.href.match(/.*warlight[.]net\/MultiPlayer\/Tournaments\/$/i); } function pageIsGame() { return location.href.match(/.*warlight[.]net\/MultiPlayer\?GameID=[0-9]+/i); } function pageIsCommonGames() { return location.href.match(/.*warlight[.]net\/CommonGames\?p=[0-9]+$/i); } function pageIsCommunityLevels() { return location.href.match(/.*warlight[.]net\/SinglePlayer\/CommunityLevels/i); } function pageIsBlacklistPage() { return location.href.match(/.*warlight[.]net\/ManageBlackList.*/i); } function pageIsMapPage() { return location.href.match(/.*warlight[.]net\/Map.*/i); } function showOpenGamesLink() { $("#SubTabRow td:nth-child(8)").after('Open Games '); if (location.href.match(/.*warlight[.]net\/MultiPlayer\/OpenGames.*/)) { $("#openGamesTab").addClass("SubTabCellSelected"); $("#openGamesTab").prev().children().css("visibility", "visible"); $("#openGamesTab").next().children().css("visibility", "visible"); } } function setupOpenGamesFilter() { $("#OpenGamesTable thead tr td").prepend(''); var filtersHTML = "
    "; $.each(filters, function (key, filter) { if (filter.type == "checkbox") { filtersHTML += '
    '; } else if (filter.type == "custom") { filtersHTML += '
    ' + filter.text + '
    '; } }); $("body").append("'); createSelector('hr', 'height: 1px;border: none;background-color: gray;opacity:0.5;'); createSelector('.number', 'width: 31px'); createSelector('.filterOption', 'width: 400px;float: left;margin: 5px;'); createSelector('.info', 'font-size: 12px;color: gray;border: 1px gray solid;padding: 5px;display: block;margin: 8px 0 8px 0;line-height: 20px;overflow: hidden; max-height:18px;transition:max-height 2s;-webkit-transition:max-height 2s;'); createSelector('.info:hover', 'max-height:500px'); createSelector('#hideKeyword', 'text-align: left;'); createSelector('.filter-small, .filter-small label', 'font-size: 12px!important;color: #aaa;'); $("#hideLuck").after("%"); createSelector('.ui-button-text-only .ui-button-text', 'padding: .4em 0.6em;'); createSelector('#editFilters:hover', 'cursor:pointer'); $(".filters-show").on("change", function () { storeFilterVariables(); }); $("#editFilters").on("click", function () { window.showFilterOptions(); }); $(".close-userscript").on("click", function () { $(".filters-show").fadeOut(); $(".overlay").fadeOut(); log("Refresh by userscript settings close") refreshAllGames(true); }); $(".close-popup-img").on("click", function () { $(".overlay").fadeOut(); $(".popup").fadeOut(); }); updateFilterSettings(); } function setupBasicDashboardStyles() { createSelector(".GameRow a", "font-size:16px !important;"); createSelector("a", "outline: none"); createSelector('#PromotedGamesTable td:last-of-type a img', 'display:none'); createSelector("#MyGamesTable td > a > img", 'display:none'); createSelector(".GameRow td:last-of-type span,#OpenGamesTable .GameRow td:last-of-type span:first-child, #PromotedGamesTable .GameRow td:last-of-type span:first-child", "margin:5px 0px;position:relative !important;z-index:10;"); createSelector("#MyGamesTable td span a img, #MyGamesTable td span a img", "display:inherit;"); createSelector(".GameRow:hover", "background-color:rgb(50, 50, 50);cursor:pointer;"); createSelector(".GameRow a:hover", "text-decoration:none;"); createSelector(".TournamentRow a:hover", "text-decoration:none;"); createSelector(".TournamentRow:hover", "background-color:rgb(50, 50, 50);cursor:pointer;"); createSelector(".ui-buttonset label", "font-size:11px;"); createSelector("#OpenGamesTable label:hover", " border: 1px solid #59b4d4;background: #0078a3 50% 50% repeat-x;font-weight: bold;color: #ffffff;"); createSelector("#OpenGamesTable td:last-child,#MyGamesTable td:last-child, #PromotedGamesTable td:last-child", "position: relative;"); createSelector("#OpenGamesTable td:nth-child(2) > a,#MyGamesTable td:nth-child(2) > a, #PromotedGamesTable td:nth-child(2) > a", " display: block;width: 100%;height: 100%;float: left;position: absolute;margin-top: -5px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;"); createSelector(".loading", "position: absolute;height: 100%;width: 100%;background-color: rgba(255, 255, 255, 0.2);text-align: center;z-index: 12;margin-top: 34px;display:none;"); createSelector(".loading img", "position: absolute;top: 50%;left: 50%;margin-left: -16px;margin-top: -16px;"); createSelector("img", "position: relative;z-index:50;"); createSelector("input", "z-index: 98;position: relative;"); createSelector(".showGames thead tr", "background: rgb(51, 0, 0) none repeat scroll 0% 0%;z-index: 98;position: fixed;padding: 5px;border-bottom: 1px solid rgb(68, 68, 68);border-top-left-radius: 8px;letter-spacing: 1px;"); createSelector(".showGames table tbody", "display:table;width:100%;"); createSelector(".showGames table thead", "position:inherit;"); createSelector(".ui-tooltip", "background: #EBEBEB;padding: 4px;font-style: italic;"); $.each($(".TournamentRow td"), function () { $(this).find("font:first-of-type").appendTo($(this).find("a")).css("font-size", "10px"); }); } function setupFixedWindowStyles() { createSelector('html', 'width: 100%; position:fixed') createSelector(".followMeBar", "background: #330000;padding: 5px 0px;position: relative;z-index: 1;color: #fff;border-top-right-radius:8px;border-top-left-radius:8px;border: 1px solid gray;border-bottom:none"); var top = parseInt($(".showSide").offset().top) + parseInt(43); createSelector(".followMeBar.fixed", "position: fixed;top: " + top + "px;z-index: 0;z-index:98;"); createSelector(".followMeBar.fixed.absolute", "position: absolute;"); createSelector(".showSide", "overflow-y:scroll;float: left;margin-top: 43px;padding-right: 6px;"); createSelector(".showSide thead", "display:none"); createSelector(".showSide table", "border-top-right-radius:0;border-top-left-radius:0"); createSelector("#switchGameRadio label", "margin-left: 6px !important"); createSelector(".showGames table", "display:block !important"); createSelector("#switchGameRadio label:hover", "border: 1px solid rgb(89, 180, 212);border-image-source: initial;border-image-slice: initial;border-image-width: initial;border-image-outset: initial;border-image-repeat: initial;background:rgb(0, 120, 163);font-weight: bold;color: rgb(255, 255, 255);"); createSelector("#MyGamesTable, #PromotedGamesTable, #OpenGamesTable", "display:none"); createSelector("#MainSiteContent > table > tbody > tr > td", "width:100%"); createSelector(".MainColumn", "width: calc(60% - 20px)!important;max-width: 800px;min-width:1px"); createSelector(".SideColumn", "float:left !important"); createSelector("h2 + span", "margin-right: 50px;"); createSelector("body", "overflow:hidden"); createSelector(".SideColumn", "width: 100% !important;"); createSelector("#MyGamesFilter", "width:200px"); createSelector(".showGames table", "display:block; overflow-y:scroll; overflow-x:hidden; border:1px gray solid; border-radius:8px"); createSelector(".adsbygoogle", "margin-top: 25px;"); createSelector(".showSide", "overflow-y:scroll;float: left;margin-top: 43px;padding-right: 6px;width:39%; min-width:1px;max-width:615px;margin-left: 20px;border-top-left-radius:8px;border-top-right-radius:8px"); createSelector("#refreshAll", "width: 140px;float: right;margin-top: 10px;"); createSelector("#fakeOpenGameMenu label", "margin-right:2px"); createSelector("#RestoreLotteryGamesBtn", "display:none"); createSelector('#ForumTable tbody tr td, #ClanForumTable tbody tr td', 'overflow:hidden;position:relative'); createSelector('#ForumTable tbody tr td > a, #ClanForumTable tbody tr td > a', 'width: 100%;display: block;height: 100%;float: left;position: absolute;overflow: hidden;z-index: 1;'); createSelector('#ForumTable tbody tr td span, #ClanForumTable tbody tr td span', 'display: inline-block;z-index: 1;float: left;position: relative;'); createSelector('#ForumTable tbody tr:not(:last-child):hover, #ClanForumTable tbody tr:hover', 'background-color:rgb(50, 50, 50)'); createSelector('#ForumTable tbody tr td a[href="/Forum/Forum"]', 'position: relative;'); createSelector('#ClanForumTable tbody tr td a[href="/Clans/Forum"]', 'position: relative;'); $("body").scrollTop(0) addCSS(` @media (max-width: 1400px) { .showSide { //min-width: 380px; //width: 40%; } h2 + span { margin-right: 10px!important; } } @media (max-width: 1300px) { #MyGamesTable > thead > tr * { font-size: 14px; } #MyGamesTable > thead > tr > div:nth-of-type(1) { margin-top: 5px!important; display: block; float: left; padding-right: 5px; } #MyGamesTable select { width: 110px; } } @media (max-width: 1205px) { .MainColumn { width: 60% ; min-width: 0; } #MyGamesTable select { width: 75px; } } @media (max-width: 1100px) { #refreshAll { width: 85px!important; } #MyGamesTable > thead > tr > div:nth-of-type(1) { display: none; } } @media (max-width: 1100px) { .MainColumn { float: left; } } @media (max-width: 1000px) { .showSide { min-width:0px; } } `); } function setupFixedTitlesInSideColumn() { var blogTable = $("#BlogTable"); var realTimeLadderTable = $("#RealTimeLadderTable"); var forumTable = $("#ForumTable"); var clanForumTable = $("#ClanForumTable"); var mapOfTheWeekTable = $("#MapOfTheWeekTable"); var leaderboardTable = $("#LeaderboardTable"); var myTournamentsTable = $("#MyTournamentsTable"); var bookmarkTable = $("#BookmarkTable"); var shopTable = $("#ShopTable") blogTable.before("
    " + blogTable.find("thead > tr > td").html() + "
    "); realTimeLadderTable.before("
    " + realTimeLadderTable.find("thead > tr > td").html() + "
    "); forumTable.before("
    " + forumTable.find("thead > tr > td").html() + "
    "); clanForumTable.before("
    " + clanForumTable.find("thead > tr > td").html() + "
    "); mapOfTheWeekTable.before("
    " + mapOfTheWeekTable.find("thead > tr > td").html() + "
    "); ifSettingIsEnabled("hideCoinsGlobally", function() { }, function() { leaderboardTable.before("
    " + leaderboardTable.find("thead > tr > td").html() + "
    "); }, function() { myTournamentsTable.before("
    " + myTournamentsTable.find("thead > tr > td").html() + "
    "); bookmarkTable.before("
    " + bookmarkTable.find("thead > tr > td").html() + "
    "); shopTable.before("
    " + shopTable.find("thead > tr > td").html() + "
    "); var leagueTable = $("#LeagueTable"); leagueTable.before("
    " + leagueTable.find("thead > tr > td").html() + "
    "); new StickyTitles(jQuery(".followMeBar")).load(); }) } function setupFixedWindowWithScrollableGames() { var gameButtons = '
    '; gameButtons += ''; gameButtons += ''; ifOneOrMoreIsEnabled(["hidePromotedGames", "hideCoinsGlobally"], function() { gameButtons += ''; gameButtons += ''; gameButtons += '
    '; setupMainColumn(gameButtons) }, function() { gameButtons += ''; gameButtons += ''; gameButtons += ''; gameButtons += ''; gameButtons += '
    '; setupMainColumn(gameButtons) }) } function setupMainColumn(gameButtons) { var mainColumn = $(".MainColumn "); mainColumn.prepend('
    ' + gameButtons + '
    '); mainColumn.prepend($('#refreshAll').detach()) myGamesTable.appendTo(".showGames"); mainColumn.after('
    '); $(".SideColumn").appendTo(".showSide"); setupFixedWindowStyles(); refreshSingleColumnSize(); $("#switchGameRadio").find("label").on("click", function () { var newShowGames = $(this).attr("for"); if (newShowGames != showGamesActive) { $.each($("#switchGameRadio").find("label"), function () { $(this).removeClass("ui-state-active"); }); $(this).addClass("ui-state-active"); if (newShowGames == "ShowMyGames") { showGamesActive = newShowGames; promotedGamesTable.appendTo("body"); openGamesTable.appendTo("body"); myGamesTable.appendTo(".showGames"); } else if (newShowGames == "ShowCoinGames") { showGamesActive = newShowGames; myGamesTable.appendTo("body"); openGamesTable.appendTo("body"); promotedGamesTable.appendTo(".showGames"); } else if (newShowGames == "ShowOpenGames") { showGamesActive = newShowGames; myGamesTable.appendTo("body"); promotedGamesTable.appendTo("body"); openGamesTable.appendTo(".showGames"); } refreshSingleColumnSize() } }); } function hideRightColumn() { ifSettingIsEnabled('scrollGames', function() { $(".showSide").css("display", "none"); createSelector(".MainColumn", "margin: auto;max-width: 800px;width: 60%!important;float: none !important;min-width: 600px !important;"); }, function() { $(".SideColumn").css("display", "none"); $(".MainColumn").css("width", "100%"); $(".MainColumn").css("max-width", "800px"); }) } function registerGameTabClick() { if (lastClick - new Date() > 2000) { openGamesTable.scrollTop(0); lastClick = new Date(); } window.setTimeout(function () { domRefresh(); addOpenGamesSuffix(); }, 1); } function updateOpenGamesCounter() { var numMD = countGames(wljs_AllOpenGames, 1); var numRT = countGames(wljs_AllOpenGames, 2); var numBoth = parseInt(numMD) + parseInt(numRT) //Both $("#OpenGamesTable [for='BothRadio'] span").text('Both (' + numBoth + ')') //Real $("#OpenGamesTable [for='RealTimeRadio'] span").text('Real-Time (' + numRT + ')') //Multi-Day $("#OpenGamesTable [for='MultiDayRadio'] span").text('Multi-Day (' + numMD + ')') } // Type 1 : Multiday // Type 2 : Realtime function countGames(games, type) { games = system_linq_Enumerable.Where(games, function (a) { if (type == 1) return !a.RealTimeGame; if (type == 2) return a.RealTimeGame; }); return system_linq_Enumerable.ToArray(games).length } function addOpenGamesSuffix() { var deletedBoth = parseInt(deletedMD) + parseInt(deletedRT); $("#OpenGamesTable tbody tr:not(.GameRow)").remove(); var active = $("#OpenGamesTable .ui-buttonset .ui-state-active").text(); if (active.indexOf('Both') > -1 && deletedBoth > 0) { //Both $("#OpenGamesTable tbody").append("" + getNumHiddenLabelText(deletedBoth) + " Change Filter Options"); } else if (active.indexOf('Real') > -1 && deletedRT > 0) { //Real $("#OpenGamesTable tbody").append("" + getNumHiddenLabelText(deletedRT) + " Change Filter Options"); } else if (active.indexOf('Multi') > -1 && deletedMD > 0) { //Multi-Day $("#OpenGamesTable tbody").append("" + getNumHiddenLabelText(deletedMD) + " Change Filter Options"); } } function getNumHiddenLabelText(num) { return num == 1 ? "1 Game is hidden" : (num + " Games are hidden"); } function loadPrivateNotes() { log("Loading private notes") $("#FeedbackMsg").after('

    Private Notes

    Loading Privates Notes..

    '); var url = $("img[alt='Private Notes']").parent()[0].href; var page = $('
    ').load(url, function () { var notes = page.find('#PostForDisplay_0').html().trim(); if (notes) { $('#privateNotes .content').html(notes); } else { $('#privateNotes .content').html('You don\'t have any Private Notes.'); } }); } window.showFilterOptions = function () { showPopup(".filters-show") } function domRefresh() { $("body").hide(0).show(0); $(window).trigger('resize') } window.showFilterHelp = function (text, obj) { window.setTimeout(function () { if (!$(".custom-menu").is(':visible')) { $(".custom-menu .content").html(text); $(".custom-menu").finish().toggle(100). // In the right position (the mouse) css({ top: $(obj).offset().top + "px", left: $(obj).offset().left + "px" }); } }, 10); } function setupBookmarkMenu() { bookmarkBody = "



    "; $("body").append(""); $("bookmarkMenu").append('
    '); $(".close-popup-img").on("click", function () { $(".popup").fadeOut(); $(".overlay").fadeOut(); }); createSelector(".highlightedBookmark", "background-color:rgb(50, 50, 50);cursor:pointer;"); $("body").append("
    • Edit
    • Move up
    • Move Down
    ") $("body").append("
    • Hide
    ") $("body").append("
    • Most Common Games (Friends)
    ") bindCustomContextMenu() } function setupBookmarkTable() { $(".SideColumn").prepend('
    Bookmarks

    '); refreshBookmarks(); bindBookmarkTable(); } function refreshBookmarks() { Database.readAll(Database.Table.Bookmarks, function(bookmarks) { $("#BookmarkTable tbody tr").remove(); bookmarks.sort(function(a, b) {return a.order - b.order}) var data = ""; $.each(bookmarks, function (key, bookmark) { data += '' + bookmark.name + ''; data += ''; data += ''; }) $("#BookmarkTable").prepend(data + ''); warlight_shared_viewmodels_WaitDialogVM.Stop() $(".loader").fadeOut("fast", function() { if($(".loader")) { $(".loader").remove(); window.timeUserscriptReady = new Date().getTime(); log("Time userscript ready " + (timeUserscriptReady - timeUserscriptStart) / 1000) } }) }) } window.bookmarkOrder; window.bookmarkId; window.showAddBookmark = function () { showPopup("#bookmarkMenu") bookmarkId = undefined bookmarkOrder = undefined } window.editBookmark = function () { Database.read(Database.Table.Bookmarks, bookmarkId, function(bookmark) { $("#bookmarkURL").val(bookmark.url); $("#bookmarkName").val(bookmark.name); $("#bookmarkNewWindow").prop("checked", bookmark.newWindow); showPopup("#bookmarkMenu"); }) } window.moveBookmarkUp = function() { Database.readAll(Database.Table.Bookmarks, function(bookmarks) { var bookmark; var newIdx = -1 $.each(bookmarks, function (key, bm) { if (bookmarkId == bm.id) { bookmark = bm } }) bookmarks.sort(function(a,b){return a.order - b.order}); var previousBookmark1 = bookmarks[bookmarks.indexOf(bookmark) - 1] var previousBookmark2 = bookmarks[bookmarks.indexOf(bookmark) - 2] || {order: 0} if(previousBookmark1) { bookmark.order = (previousBookmark1.order + previousBookmark2.order) / 2 Database.update(Database.Table.Bookmarks, bookmark, bookmark.id, function() { $("#bookmarkURL").val(''); $("#bookmarkName").val(''); $("#bookmarkNewWindow").prop('checked', false); $(".overlay").fadeOut(); refreshBookmarks(); }) } }) } window.moveBookmarkDown = function() { Database.readAll(Database.Table.Bookmarks, function(bookmarks) { var bookmark; var newIdx = -1 $.each(bookmarks, function (key, bm) { if (bookmarkId == bm.id) { bookmark = bm } }) bookmarks.sort(function(a,b){return a.order - b.order}); var nextBookmark1 = bookmarks[bookmarks.indexOf(bookmark) + 1] var nextBookmark2 = bookmarks[bookmarks.indexOf(bookmark) + 2] || {order: 100000} if(nextBookmark1) { bookmark.order = (nextBookmark1.order + nextBookmark2.order) / 2 Database.update(Database.Table.Bookmarks, bookmark, bookmark.id, function() { $("#bookmarkURL").val(''); $("#bookmarkName").val(''); $("#bookmarkNewWindow").prop('checked', false); $(".overlay").fadeOut(); refreshBookmarks(); }) } }) } window.deleteBookmark = function (id) { Database.delete(Database.Table.Bookmarks, id, function() { refreshBookmarks(); }) } window.saveBookmark = function () { $("#bookmarkMenu").hide(); var url = $("#bookmarkURL").val().trim(); url = (url.lastIndexOf('http', 0) != 0) && (url.lastIndexOf('javascript', 0) != 0) ? "http://" + url : url; var name = $("#bookmarkName").val().trim(); var newWindow = $("#bookmarkNewWindow").prop("checked"); if(bookmarkId == undefined) { Database.readAll(Database.Table.Bookmarks, function(bookmarks) { bookmarks.sort(function(a, b) {return a.order - b.order}) var bookmark = { name: name, url: url, newWindow: newWindow, order: (bookmarks.length > 0) ? bookmarks[bookmarks.length - 1].order + 1 : 1 } Database.add(Database.Table.Bookmarks, bookmark, function() { showBookmarkTable(); refreshBookmarks(); }) }) } else { var bookmark = { name: name, url: url, newWindow: newWindow, order: bookmarkOrder } Database.update(Database.Table.Bookmarks, bookmark, bookmarkId, function() { showBookmarkTable(); refreshBookmarks(); }) } $("#bookmarkURL").val(''); $("#bookmarkName").val(''); $("#bookmarkNewWindow").prop('checked', false); $(".overlay").fadeOut(); } function hideBookmarkTable() { $("#BookmarkTable").hide(); if ($("#BookmarkTable").prev().hasClass("followWrap")) { $("#BookmarkTable").prev().hide(); } if ($("#BookmarkTable").next().is('br')) { $("#BookmarkTable").next().hide(); } } function showBookmarkTable() { $("#BookmarkTable").show(); if ($("#BookmarkTable").prev().hasClass("followWrap")) { $("#BookmarkTable").prev().show(); } if ($("#BookmarkTable").next().is('br')) { $("#BookmarkTable").next().show(); } } window.bookmarkForumThread = function () { var title = $("title").text().replace(' - Play Risk Online Free - WarLight', ''); var url = window.location.href; $("#bookmarkURL").val(url); $("#bookmarkName").val(title); showAddBookmark(); } window.bookmarkTournament = function () { var title = $("#TournamentName").text().replace("Tournament: ", "").trim(); var url = window.location.href; $("#bookmarkURL").val(url); $("#bookmarkName").val(title); showAddBookmark(); } window.bookmarkLevel = function () { var title = $("h1").text() var url = window.location.href; $("#bookmarkURL").val(url); $("#bookmarkName").val(title); showAddBookmark(); } function addDefaultBookmark() { var bookmark = { name: "Muli's userscript (Tidy up Your Dashboard)", url: "https://www.warlight.net/Forum/106092-tidy-up-dashboard-2", newWindow: false, order: 0 } Database.add(Database.Table.Bookmarks, bookmark, function() { showBookmarkTable(); refreshBookmarks(); }) } function setupTournamentDecline() { $.each($(".TournamentRow"), function(key, val) { //Waiting for accept / decline if($(val).find("[style='color: red']:not(.BootTimeLabel)").length > 0) { $(val).find("td:last-of-type").append('') } }) $(".DeclineBtn").on("click", function(e) { var id = $(e.target).closest(".TournamentRow").attr("data-tournamentid") warlight_shared_messages_Message.DeclineTournamentAsync(null, warlight_shared_viewmodels_SignIn.Auth, id, null, function (b, c) { warlight_shared_viewmodels_WaitDialogVM.Stop(); if (null != c && 129 != c.ErrorType) { if (135 == c.ErrorType) { warlight_shared_viewmodels_AlertVM.DoPopup("The tournament has been deleted"); } else { throw c; } } var btn = $(e.target).closest(".DeclineBtn") $(e.target).text("Declined") btn.attr("disabled", true).addClass("ui-state-disabled"); btn.closest(".TournamentRow").find("[style='color:red']:not(.BootTimeLabel)").remove() Database.update(Database.Table.TournamentData, {tournamentId: Number(id), value: false, name: false}, undefined, function() { }) } ) }) } function setupTournamentTableStyles() { createSelector("body", "overflow: hidden") $("#MyTournamentsTable").parent().css({ "display" : "block", "overflow-y" : "scroll", "border-bottom" : "1px solid #444444", "border-top" : "1px solid #444444" }) setTournamentTableHeight(); } function updateTournamentData() { var tournament = WL_Tournament.Tourn var players = WL_Tournament.Players._players var name = WL_Tournament.Tourn.Settings.Name var id = tournament.ID try { Database.readIndex(Database.Table.TournamentData, Database.Row.TournamentData.Id, id, function(tourn) { if(tourn && tourn.value) { var details = getTournamentPlayerInfo(tournament, players, warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ID) Database.update(Database.Table.TournamentData, {tournamentId: Number(id), value: details, name: name}, undefined, function() { }) } }) } catch(e) { log("Bad tournament") log(e) } } function setupTournamentDataCheck() { $("#MyTournamentsTable h2").after(''); $("body").append("
    ") $("#MyTournamentsTable thead td").attr("colspan", 3) $("#MyTournamentsTable tr:last td").attr("colspan", 3) } function loadTournamentData() { $.each($("#MyTournamentsTable [data-tournamentid]"), function(key, row) { if(!$(row).find("[style='color: red']:not(.BootTimeLabel)").length > 0) { var id = $(row).attr("data-tournamentid") Database.readIndex(Database.Table.TournamentData, Database.Row.TournamentData.Id, Number(id), function(tourn) { if(!tourn) { Database.update(Database.Table.TournamentData, {tournamentId: Number(id), value: "-", name: "-"}, undefined, function() {}) } }) } }) Database.readAll(Database.Table.TournamentData, function(tournamentDatas) { $.each(tournamentDatas, function(key, tournamentData) { if($(`[data-tournamentid='${tournamentData.tournamentId}']`).length) { $(`[data-tournamentid='${tournamentData.tournamentId}']`).append(`${tournamentData.value ? tournamentData.value : "-"}`) } else if(tournamentData.value && tournamentData.name) { $("#MyTournamentsTable").prepend(` ${tournamentData.name} (finished)`); } }) $(".removeTournament").on("click", function() { var row = $(this).closest("tr"); var id = row.attr("data-tournament") Database.update(Database.Table.TournamentData, {tournamentId: Number(id), value: false, name: false}, undefined, function() { row.remove(); }) }) }) } window.updateAllTournamentData = function() { addCSS(` .ui-progressbar { position: relative; width: 139px; height: 20px; float: right; margin-right: 15px; } .progress-label { position: absolute; top: 2px; width: 139px; text-align: center; } `) $("#dataTournamanetButton").replaceWith('
    ') var progressbar = $( "#progressbar" ); var progressLabel = $( ".progress-label" ); var numOfMyTournaments = $("#MyTournamentsTable [data-tournamentid]").length; progressbar.progressbar({ value: false, change: function() { progressLabel.text( `${Math.round(progressbar.progressbar("value") * numOfMyTournaments / 100, 0)} / ${$("#MyTournamentsTable [data-tournamentid]").length}` ); }, complete: function() { progressLabel.text( "Done!" ); } }); $.each($("#MyTournamentsTable [data-tournamentid]"), function(key, row){ var id = $(row).attr("data-tournamentid") loadTournamentDetails(id, function() { progressTournamentData(progressbar, numOfMyTournaments) }) }) } function progressTournamentData(progressbar, max) { var val = progressbar.progressbar("value") || 0; progressbar.progressbar("value", val + 100 / max +0.001); } function loadTournamentDetails(id, cb) { $(".tournamentData").remove(); warlight_shared_messages_Message.GetTournamentDetailsAsync(null, warlight_shared_viewmodels_SignIn.Auth, id, new system_Nullable_$Float(999999999), null, function(a,b,c){ var tournament = c["Tournament"] var name = tournament.Settings.Name var players = new wljs_multiplayer_tournaments_display_Players(tournament)["_players"]; var details = getTournamentPlayerInfo(tournament, players, warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ID) $(`[data-tournamentid='${id}']`).append(`${details}`) Database.update(Database.Table.TournamentData, {tournamentId: Number(id), value: details, name: name}, undefined, function() { }) if(cb) { cb(); } }) } window.getTournamentPlayerInfo = function(tournament, players, id) { var playerInfo = players["store"]["h"][id] var playing = playerInfo.NumInProgress var won = playerInfo.NumWins var lost = playerInfo.NumLosses var myGames = playing + won + lost var allowVacations = tournament.Settings.AllowVacations // 0 -> Single Elimination, 1 -> Double Elimination, 2 -> Robin Round var tournamentType = tournament.Type var myMaxGames; var tournamentTotalGames; var tournamentGamesStarted = tournament.Games.length var teamsPerGame = tournament.TeamsPerGame.val; var joker = 0; if(tournamentType == 0) { tournamentTotalGames = (Math.pow(teamsPerGame,tournament.NumberOfRoundsOrNumberOfTeams)-1)/(teamsPerGame-1); if(lost == 1) { myMaxGames = undefined; } else { myMaxGames = [0, tournament.NumberOfRoundsOrNumberOfTeams] } } else if(tournamentType == 1) { tournamentTotalGames = 2*Math.pow(2, tournament.NumberOfRoundsOrNumberOfTeams)-1 ; if(lost == 0) { joker = 1; } if(lost == 2) { myMaxGames = undefined; } else { myMaxGames = [0, tournament.NumberOfRoundsOrNumberOfTeams * 2] } } else if(tournamentType == 2) { joker = 0; var count = 0; $.each(players.store.h, function(index, player) { if(player.TP.State == 1) { count++ } }); myMaxGames = count / tournament.TeamSize - 1 tournamentTotalGames = (myMaxGames * myMaxGames +myMaxGames ) / 2 } else { myMaxGames = undefined; tournamentTotalGames = undefined; } var details; if(myMaxGames == undefined) { details = ` Won: ${won}
    Lost: ${lost}
    Games left: None
    Progress: ${getTournamentProgress(tournamentGamesStarted, tournamentTotalGames)}
    ` } else if(tournamentGamesStarted == 0) { details = ` Games left: ${getGamesLeftString(myGames, myMaxGames, playing, joker)}
    Progress: Not started` } else { details = ` Playing: ${playing}
    Won: ${won}
    Lost: ${lost}
    Games left: ${getGamesLeftString(myGames, myMaxGames, playing, joker)}
    Progress: ${getTournamentProgress(tournamentGamesStarted, tournamentTotalGames)}
    ` } log(details) return details; } function getTournamentProgress(tournamentGamesStarted, tournamentTotalGames) { var progress = Math.round(tournamentGamesStarted / tournamentTotalGames * 100,0) if(progress == 100) { return "Almost done" } else { return progress + "%" } } function getGamesLeftString(myGames, myMaxGames, playing, joker) { if (typeof myMaxGames == "number") { return (myMaxGames - myGames == 0 ? "None" : (myMaxGames - myGames)) } else if(typeof myMaxGames == "object") { if(playing == 1) { if(myMaxGames[1]-myGames == 0) { return "None" } else { return (Math.max(joker, myMaxGames[0]-myGames)) + " - " + (myMaxGames[1]-myGames) } } else { return (Math.max(joker + 1, myMaxGames[0]-myGames)) + " - " + (myMaxGames[1]-myGames) } } else { return "undefined" } } function setTournamentTableHeight() { $("#MyTournamentsTable").parent().height(window.innerHeight - 100); } window.findMeIndex = -1; window.findNextInTournament = function() { var boxes = getPlayerBoxes(); var max = boxes.length - 1; findMeIndex = findMeIndex == max ? 0 : findMeIndex + 1; panzoomMatrix = undefined; findInTournament(); } function setupPlayerDataTable() { var dataTable = $$$("#PlayersContainer > table").DataTable({ "order": [], paging: false, sDom: 't', columnDefs: [ { targets: [ 0 ], orderData: [ 0, 3 ] },{ targets: [ 1 ], orderData: [ 1, 0 ] },{ targets: [ 2 ], orderData: [ 2, 1, 0 ], type: "rank" },{ targets: [ 3 ], orderData: [ 3, 1, 0 ] },{ targets: [ 4 ], orderData: [ 4, 1, 0 ] },{ targets: [ 5 ], orderData: [ 5, 1, 0 ] } ], "aoColumns": [ { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "desc", "asc" ] }, { "orderSequence": [ "desc", "asc" ] }, { "orderSequence": [ "desc", "asc" ] }, ] }); loadDataTableCSS(); } function setupCommonGamesDataTable() { var $$$$$ = jQuery.noConflict(true); var dataTable = $$$("#MainSiteContent > table").DataTable({ "order": [], paging: false, sDom: 't', columnDefs: [ { targets: [ 0 ], orderData: [ 0, 3 ] },{ targets: [ 1 ], orderData: [ 1, 2, 3, 0 ] },{ targets: [ 2 ], orderData: [ 2, 3, 0 ] },{ targets: [ 3 ], orderData: [ 3, 2, 0 ] } ], "aoColumns": [ { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "asc", "desc" ] }, ] }); loadDataTableCSS(); } window.setCurrentplayer = function (player, noSearch) { window.currentPlayer = { id: player.id, name: player.name, fullID: player.fullID, team: player.team }; $("#selectContainer").toggle(100); $("#activePlayer").html(htmlEscape(player.name == self.name ? "Me" : player.name)); $("#playerSelectInput").val(""); panzoomMatrix = undefined; findMeIndex = 0; $(".gold").removeClass("gold") $("#PlayingPlayers [data-playerid='" + window.currentPlayer.id + "']").addClass("gold") $("#PlayingPlayers [data-playerid='" + window.currentPlayer.id + "'] a").addClass("gold") if(window.WL_Tournament.Tourn.Type == 2 ) { //Robin Round $(".TeamTip_" + (window.currentPlayer.team == "" ? window.currentPlayer.id : window.currentPlayer.team.replace("Team ", "").charCodeAt(0)-65)).addClass("gold") } else { //Elimination Tournament getPlayerBoxes().find("a").addClass("gold") } if(noSearch != true) { window.findInTournament(); } } function setupTournamentFindMe() { $("body").keyup(function (event) { // "Left" is pressed var boxes = getPlayerBoxes(); var max = boxes.length - 1; if(event.which == 37) { findMeIndex = findMeIndex == 0 ? max : findMeIndex - 1; panzoomMatrix = undefined; findInTournament(); } // "Right" is pressed else if(event.which == 39) { findMeIndex = findMeIndex == max ? 0 : findMeIndex + 1; panzoomMatrix = undefined; findInTournament(); } // "Home" is pressed else if(event.which == 36) { findMeIndex = 0; panzoomMatrix = undefined; findInTournament(); } // "End" is pressed else if(event.which == 35) { findMeIndex = boxes.length - 1; panzoomMatrix = undefined; findInTournament(); } }); window.players = [] $("[href='#SettingsTab']").parent().after('
  • Find
  • '); createSelector('#findMe:hover', 'border: 1px solid #59b4d4;background: #0078a3 url("https://d2wcw7vp66n8b3.cloudfront.net/jui4/images/ui-bg_glass_40_0078a3_1x400.png") 50% 50% repeat-x;font-weight: bold;color: #ffffff;border-bottom-width: 0') createSelector('#findMe', 'border: 1px solid #666666;border-bottom-width: 0') var css = '-webkit-keyframes pulsate{ 0% { background-color: rgba(0,0,0,0); } 50% { background-color: olive; } 100% { background-color: rgba(0,0,0,0); }}@keyframes pulsate { 0% { background-color: rgba(0,0,0,0); } 50% { background-color: olive; } 100% { background-color: rgba(0,0,0,0); }}.pulsate { -webkit-animation: pulsate 1s ease-in 1; -moz-animation: pulsate 1s ease-in 1; -ms-animation: pulsate 1s ease-in 1; -o-animation: pulsate 1s ease-in 1; animation: pulsate 1s ease-in 1;}-webkit-keyframes pulsate-border{ 0% { border: 3px solid #c4c2c4; } 25% { border: 3px solid red; } 50% { border: 3px solid red; } 100% { border: 3px solid #c4c2c4; }}@keyframes pulsate-border { 0% { border: 3px solid #c4c2c4; } 25% { border: 3px solid red; }50% { border: 3px solid red; } 100% { border: 3px solid #c4c2c4; }}.pulsate-border { -webkit-animation: pulsate-border 2s ease-in 1; -moz-animation: pulsate-border 2s ease-in 1; -ms-animation: pulsate-border 2s ease-in 1; -o-animation: pulsate-border 2s ease-in 1; animation: pulsate-border 2s ease-in 1;}' addCSS(css) $("#findMe").append('
    '); self = { id: warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ID, name: warlight_shared_viewmodels_SignIn.get_CurrentPlayer().Name, fullID: String(warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ProfileToken).substring(0, 2) + warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ID + String(warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ProfileToken).substring(2, 4), team: $("[data-playerid='" + warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ID + "'] td:nth-of-type(2)").text() }; window.setCurrentplayer(self, true); $.each($("#PlayingPlayers tr"), function (key, playerRow) { var id = $(playerRow).attr("data-playerid"); var fullID = $(playerRow).find("a").get($(playerRow).find("a").length - 1).href.replace(/.*warlight.net\/Profile\?p=/, ""); var name = $(playerRow).find("td a").text(); var img = $(playerRow).find("td img").attr("src"); var team = $("[data-playerid='" + id + "'] td:nth-of-type(2)").text(); if (img && img.indexOf("MemberIcon") > -1) { img = ""; } window.players.push({ id: id, fullID: fullID, name: name, img: img, team: team }); }); $("#playerSelectInput").on('input', function (data) { $(".playerElement").remove(); var search = $(this).val().toLowerCase(); $("#playerContainer").append("
    " + self.name + " (Me)
    ") $.each(window.players, function (key, player) { if (player.name.toLowerCase().indexOf(search) > -1 && self.name != player.name) { var img = player.img ? "" : ""; $("#playerContainer").append("
    " + img + "" + htmlEscape(player.name) + "" + "
    ") } }); $("#activePlayer").html(window.currentPlayer.name == self.name ? "Me" : window.currentPlayer.name); $("#playerContainer").scrollTop(0) }); $("#playerSelectInput").trigger("input"); $("#showPlayerSelect").on("click", function () { $("#selectContainer").toggle(100); $("#playerContainer").scrollTop(0); $("#playerSelectInput").trigger("input"); $("#playerSelectInput").focus(); }); createSelector("#playerSelectInputContainer", "height: 28px; "); createSelector(".border-red", "border: 3px red solid !important; "); createSelector(".playerElement span, .playerElement img", "display:inline-block; margin-right: 10px"); createSelector("#showPlayerSelect", "color: #DDDDDD;font-size: 14px;margin: 5px 5px 0 -3px;cursor: pointer; display: inline-block;margin-right: 10px;"); createSelector("#playerSelectInput", "display: block;margin: 5px 3%;width: 93%;"); createSelector("#activePlayer", "cursor:pointer"); createSelector(".playerElement", "border-bottom: 1px gray solid;padding: 7px;color: white; clear:both; height: 14px; font-weight: normal;"); createSelector(".playerElement:hover", "background: rgb(102, 102, 102);"); createSelector("#playerContainer", "border: 2px gray solid; overflow-y: auto; overflow-x: hidden;max-height: 275px; min-width: 175px; "); createSelector(".gold", "color: gold") createSelector("#selectContainer", "cursor: pointer; background:rgb(23, 23, 23);position: fixed; z-index: 10;border: 2px gray solid;border-radius: 5px;box-shadow: 0 20px 50px 3px black;margin-top: 16px;display: none"); } window.panzoomMatrix; window.findInTournament = function () { var id; $("#selectContainer").hide(100); if ($("[href='#PlayersTab']").parent().hasClass("ui-state-active")) { id = window.currentPlayer.id; if ($("#PlayingPlayers [data-playerid='" + id + "']").length > 0) { var player = $("#PlayingPlayers [data-playerid='" + id + "']"); var box = $("#CenterTabs").parent() var offset = player.offset().top - box.offset().top - box.height() / 2 box.stop().animate({ scrollTop: offset }, '500', 'swing'); window.setTimeout(function () { $("#PlayingPlayers [data-playerid='" + window.currentPlayer.id + "']").addClass("pulsate"); window.setTimeout(function () { $(".pulsate").removeClass("pulsate"); }, 1000); }, 250); } else { showInfo("You didn't join this tournament.", $("#findMe").offset().top + 25, $("#findMe").offset().left + 25); } // Elimination Tournament } else if ($("[href='#BracketTab']").parent().hasClass("ui-state-active") && window.WL_Tournament.Tourn.Type != 2) { id = window.currentPlayer.fullID; //Started if (window.WL_Tournament.Tourn.State >= 1 && $("#PlayingPlayers [data-playerid='" + window.currentPlayer.id + "']").length > 0) { if (!panzoomMatrix) { var currentMatrix = $("#Visualize").panzoom("getMatrix"); $("#Visualize").panzoom("reset", { animate: false }); VisualizePanzoom.panzoom("zoom", { increment: 0.75, animate: false }) var boxes = getPlayerBoxes(); $(".TeamBoxHighlighted").removeClass("TeamBoxHighlighted"); boxes.addClass("TeamBoxHighlighted"); var offsetTop = $(boxes.get(findMeIndex)).offset().top - $("#VisualizeContainer").offset().top - $("#VisualizeContainer").height() / 4; var offsetLeft = $(boxes.get(findMeIndex)).offset().left - $("#VisualizeContainer").offset().left - $("#VisualizeContainer").width() / 2; $(".border-red").removeClass("border-red"); $(boxes.get(findMeIndex)).addClass("border-red"); $("#Visualize").panzoom("pan", 0 - offsetLeft, 100 - offsetTop, { relative: true, animate: false }); panzoomMatrix = $("#Visualize").panzoom("getMatrix"); $("#Visualize").panzoom("setMatrix", currentMatrix, { animate: false }); } window.setTimeout(function () { $("#Visualize").panzoom("setMatrix", panzoomMatrix, { animate: true }) window.setTimeout(function () { //getPlayerBoxes().addClass("pulsate-border"); window.setTimeout(function() { $(".pulsate-border").removeClass("pulsate-border"); }, 2000) }, 400); }, 10) } else { showFindMeError(); } // Robin Round Tournament } else if ($("[href='#BracketTab']").parent().hasClass("ui-state-active") && window.WL_Tournament.Tourn.Type == 2) { //Started if ($("#PlayingPlayers [data-playerid='" + window.currentPlayer.id + "']").length > 0) { $(".TeamTip_" + (window.WL_Tournament.Tourn.TeamSize == 1 ? window.currentPlayer.id : window.currentPlayer.team.replace("Team ", "").charCodeAt(0)-65)).addClass("pulsate") window.setTimeout(function() { $(".pulsate").removeClass("pulsate") }, 2000) } else { showFindMeError() } } } function showFindMeError() { if ($("#PlayingPlayers [data-playerid='" + window.currentPlayer.id + "']").length == 0) { showInfo("You didn't join this tournament.", $("#findMe").offset().top + 25, $("#findMe").offset().left + 25); } else { showInfo("This tournament didn't start yet.", $("#findMe").offset().top + 25, $("#findMe").offset().left + 25); } } function getPlayerBoxes() { var boxes = $(".GameBox [href='/Profile?p=" + window.currentPlayer.fullID + "']").closest(".TeamBox"); if(boxes.length == 0) { boxes = $("[title='" + window.currentPlayer.team + "']").closest(".TeamBox"); } return boxes; } function htmlEscape(str) { return String(str) .replace(/&/g, '&') .replace(/"/g, '"') .replace(/'/g, ''') .replace(//g, '>'); } function bindBookmarkTable() { $("#BookmarkTable").bind("contextmenu", function (event) { $(".highlightedBookmark").removeClass("highlightedBookmark") var row = $(event.target).closest("tr"); bookmarkId = row.attr("data-bookmarkid") bookmarkOrder = row.attr("data-order") if(bookmarkId && bookmarkOrder) { event.preventDefault(); row.addClass("highlightedBookmark") // Show contextmenu $(".bookmark-context").finish().toggle(100). css({ top: event.pageY + "px", left: event.pageX + "px" }); } }); } function bindCustomContextMenu() { // If the document is clicked somewhere $(document).bind("mousedown", function (e) { // If the clicked element is not the menu if (!$(e.target).parents(".context-menu").length > 0) { // Hide it $(".context-menu").hide(100); $(".highlightedBookmark").removeClass("highlightedBookmark") } }); // If the menu element is clicked $(".context-menu li").click(function(){ // This is the triggered action name switch($(this).attr("data-action")) { // A case for each action. Your actions here case "first": alert("first"); break; case "second": alert("second"); break; case "third": alert("third"); break; } // Hide it AFTER the action was triggered $(".context-menu").hide(100); }); } function setupRealTimeLadderTable() { if($("#RealTimeLadderTable").length == 0) { return; } if( $(".extendedRTLadderRow").length == 0) { createSelector(".extendedRTLadderRow .rtBox", "width: calc(100%/2);"); createSelector(".extendedRTLadderRow span", ""); createSelector(".rtLeft", "float:left"); createSelector(".rtRight", "float:Right"); createSelector(".rtRight a", " padding: 10px 30px;position: absolute;margin-left: -75px;"); createSelector(".newGamesRT", "display:block"); createSelector(".rtLabelBig", "font-size: 18px; margin: 5px"); } var joinLeaveText = $(".rtRight a").text() var joinLeaveLink = $(".rtRight a").attr("href") $(".extendedRTLadderRow").remove(); $("#RealTimeLadderTable").append('
    New Games in
    ' + getRealTimeLadderTimerHTML() + '' + joinLeaveText + '
    ') $("[href='/LadderSeason?ID=3']").text("Ladder Page") WLPost("/LadderSeason?ID=3", "WaiterData=1", function(data) { if(JSON.parse(data).length > 0) { $(".rtRight a").attr("href", "https://www.warlight.net/LadderLeave?Ladder=RealTime") $(".rtRight a").text("Leave!") } else { $(".rtRight a").attr("href", "https://www.warlight.net/LadderJoin?Ladder=RealTime") $(".rtRight a").text("Join!") } }); setRTLadderTime() } function setupRealTimeLadderPageTimer() { $("#LadderJoinBtn").after("
    New Games in " + getRealTimeLadderTimerHTML() +"
    ") $("#LeaveLadderBtn").after("
    New Games in " + getRealTimeLadderTimerHTML() +"
    ") setRTLadderTime() } function getRealTimeLadderTimerHTML() { return '00:00
    ' } function setRTLadderTime() { var date = new Date() date.setMinutes(Math.ceil((new Date().getMinutes() + date.getSeconds() / 60) / 5) * 5) date.setSeconds(0) var diff = (date - new Date()) / 1000 var min = Math.floor(diff / 60) % 60 diff -= min * 60 var sec = diff % 60 $(".rtMin").text(padLeft(min)) $(".rtSec").text(padLeft(sec)) } function padLeft(str) { str = Math.round(str) len = 2 symbol = '0' while(String(str).length < len) { str = symbol + str; } return str } function setupLeagueTable() { if($("#LeagueTable").length == 0) { $(".SideColumn").append('
    Community Events
    ') } parseLeagueTable() loadClots() createSelector(".clotLabel", "display: inline-block; width: 70px") createSelector(".clotPlayers", "display: inline-block; margin-left: 5px; color:gray; ") } function setupLadderClotOverview() { $("h1").text($("h1").text() + " & Community Events") var clotInfo = getClots() if(!clotInfo) { return } var clots = clotInfo var ladders = clots['leagues'] var md = "" var rt = "" var leagues = "" var counter = 0 $.each(ladders, function (key, val) { if (val.type == "realtime") { rt += "
  • " + val.name + " using Real-Time boot times


  • " counter++ } else if (val.type == "multiday") { md += "
  • " + val.name + " using Multi-Day boot times


  • " counter++ } else { leagues += `
  • ${val.name} ${getPlayerString(val.players)}


  • ` counter++ } }) $("#MainSiteContent > div").append("Warlight currently has " + toWords(counter) + " Community Events:

    ") $("#MainSiteContent > div").append("
      ") $("#clotInfo").append(rt) $("#clotInfo").append(md) $("#clotInfo").append(leagues) } function parseLeagueTable() { try { var clotInfo = getClots() if(!clotInfo) { return } var ladders = clots['leagues'] var md = "" var rt = "" var leagues = "" $.each(ladders, function (key, val) { if (val.type == "realtime") { rt += `${val.name} (RT) ${getPlayerString(val.players)}` } else if (val.type == "multiday") { md += `${val.name} (MD)${getPlayerString(val.players)}` } else { leagues += `${val.name}${getPlayerString(val.players)}` } }) $("#LeagueTable tbody tr").remove() $("#LeagueTable tbody").append(leagues) $("#LeagueTable tbody").append(md) $("#LeagueTable tbody").append(rt) $(window).trigger('resize'); } catch (e) { log("Error reading CLOTs") log(e.message) hideTable("#LeagueTable") } } function getPlayerString(players) { if(players) { return `${players} players participating` } return "" } function getClots() { try { return clots = $.parseJSON(sessionStorage.getItem('clots')) } catch (e) { log("Error reading CLOTs") log(e.message) hideTable("#LeagueTable") } return undefined } function loadClots() { $.ajax({ type: 'GET', //url: 'https://php-psenough.rhcloud.com/hub/list.php', //url: 'https://w115l144.hoststar.ch/test.php', url: 'https://php-psenough.rhcloud.com/hub/list_jsonp.php', dataType: 'jsonp', crossDomain: true, }).done(function(response){ try { var json = response.data sessionStorage.setItem('clots', JSON.stringify(json)); parseLeagueTable() var datetime = json.datetime log("clot update " + datetime) } catch (e) { log("Error parsing CLOTs") log(e) } }).fail(function(e){ log("Error loading CLOTs") log(e); }); } function isJson(str) { try { JSON.parse(str); } catch (e) { log(e) return false; } return true; } function setupRightColumn(isInit) { if(isInit) { createSelector(".SideColumn > table", "margin-bottom: 17px;") } //Bookmarks if(isInit) { setupBookmarkTable() } else { refreshBookmarks() } //Tournament // #MyTournamentsTable //Clots setupLeagueTable() //RT Ladder setupRealTimeLadderTable() //Map of the Week //Forum Posts // hideBlacklistedThreads() //Blog Posts //Coin Leaderboard sortRightColumnTables(function() { if(isInit) { ifSettingIsEnabled('scrollGames', function() { setupFixedTitlesInSideColumn(); }) } }) } function sortRightColumnTables(callback) { var sideColumn = $(".SideColumn") getSortTables(function(tables) { $.each(tables, function(key, table) { if(table.hidden == true) { hideTable(table.id) } else { var table = $(table.id) if(table.prev().hasClass("followWrap")) { var wrap = table.prev().remove() sideColumn.append(wrap) } table = table.detach() sideColumn.append(table) } }) $(".SideColumn > br").remove() callback(); }) } function toWords(number) { var NS = [ {value: 1000000000000000000000, str: "sextillion"}, {value: 1000000000000000000, str: "quintillion"}, {value: 1000000000000000, str: "quadrillion"}, {value: 1000000000000, str: "trillion"}, {value: 1000000000, str: "billion"}, {value: 1000000, str: "million"}, {value: 1000, str: "thousand"}, {value: 100, str: "hundred"}, {value: 90, str: "ninety"}, {value: 80, str: "eighty"}, {value: 70, str: "seventy"}, {value: 60, str: "sixty"}, {value: 50, str: "fifty"}, {value: 40, str: "forty"}, {value: 30, str: "thirty"}, {value: 20, str: "twenty"}, {value: 19, str: "nineteen"}, {value: 18, str: "eighteen"}, {value: 17, str: "seventeen"}, {value: 16, str: "sixteen"}, {value: 15, str: "fifteen"}, {value: 14, str: "fourteen"}, {value: 13, str: "thirteen"}, {value: 12, str: "twelve"}, {value: 11, str: "eleven"}, {value: 10, str: "ten"}, {value: 9, str: "nine"}, {value: 8, str: "eight"}, {value: 7, str: "seven"}, {value: 6, str: "six"}, {value: 5, str: "five"}, {value: 4, str: "four"}, {value: 3, str: "three"}, {value: 2, str: "two"}, {value: 1, str: "one"} ]; var result = ''; for (var n of NS) { if(number>=n.value){ if(number<=20){ result += n.str; number -= n.value; if(number>0) result += ' '; }else{ var t = Math.floor(number / n.value); var d = number % n.value; if(d>0){ return intToEnglish(t) + ' ' + n.str +' ' + intToEnglish(d); }else{ return intToEnglish(t) + ' ' + n.str; } } } } return result; } function hideTable(seletor) { if( $(seletor).prev().hasClass("followWrap")) { $(seletor).prev().remove() } $(seletor).remove() } window.findMostCommonGames = function() { $("#foundPlayers").empty() warlight_shared_viewmodels_WaitDialogVM.Start("Searching Players...") warlight_shared_messages_Message.GetFriendsAsync(null, warlight_shared_viewmodels_SignIn.Auth, null, function (b, c, players) { if (null != c) throw c; var myId = warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ID; warlight_shared_SharedUtility.RemoveWhere(players, function (p) { return p.PlayerID == myId }); var topPlayers = []; var limit = -1; for (var i = 0; i < players.length; i++) { var player = players[i]; if(player.TimesPlayedWithYou > limit || topPlayers.length < 10) { topPlayers.push(player) topPlayers.sort(function (p1, p2) { return p2.TimesPlayedWithYou - p1.TimesPlayedWithYou }); topPlayers = topPlayers.slice(0, 10); limit = topPlayers.slice(-1)[0].TimesPlayedWithYou } } warlight_shared_viewmodels_WaitDialogVM.Stop() parseFoundFriendPlayers(topPlayers) }) } function setupDashboardSearch() { loadDataTableCSS(); $("body").append(``); window.tabsInit = false; $("#searchTabs").tabs(); $( "#searchTabs" ).on( "tabsactivate", function( event, ui ) { $(ui.newPanel[0]).find("input").focus(); if($(ui.newPanel[0]).attr("id") == "tabs-clanSearch" && !tabsInit) { initClanSearch(); tabsInit = true; } } ); createSelector("#searchTabs", "background: rgb(23, 23, 23);border: none;") createSelector(".ui-tabs-nav", "border: none;border-bottom: 2px gray solid;border-radius: 0;background:none;") createSelector("#tabs-playerSearch, #tabs-clanSearch", "padding: 15px 0px") $("#SubTabRow").append('Search'); $("#searchPlayerLink").on("click", function() { showPopup(".playersearch-show") $("#playerSearchQuery").val("") $("#playerSearchQuery").focus() }) $("#searchPlayerBtn").on("click", function() { searchPlayer() }) $("#findPlayerExtra").on("click", function(event) { $(".playersearch-context").finish().toggle(100). css({ top: event.pageY + "px", left: event.pageX + "px" }); }) $('#playerSearchQuery').keyup(function(e){ if(e.keyCode == 13) { searchPlayer() } }); createSelector(".SubTabCell", "cursor: pointer") createSelector(".playersearch-show button", "padding: 5px;float: left; margin: 10px") createSelector("#playerSearchQuery, #clanSearchQuery", "width: 200px; padding: 5px; margin: 10px;float: left") createSelector(".foundPlayer", "display: block; height: 25px; padding: 2px; clear:both") createSelector(".foundPlayer a", "line-height: 25px; float: left") createSelector(".foundPlayer img", "height: 15px; display: block; float: left; margin: 5px") createSelector(".notFound", "clear: both; display: block; color: gray;") createSelector("#foundPlayers span", "color: gray; padding: 0 5px; line-height: 25px") createSelector("#foundPlayers > span", "display: block; clear: both; margin: 0px; padding: 10px 0") createSelector(".playerSearchName", "float: left") createSelector(".playerSearchTypeSelect", "float: left; width: 30%") createSelector(".playerSearchTypeSelect label", "color: gray; font-size: 13px; margin: 2px") createSelector("#foundClansTable", "float: left; table-layout: fixed;width: 100%") createSelector("#foundClansTable thead", "text-align: left") createSelector("#foundClansTable td a", "display: block; width: 100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;height: 19px;") createSelector("#foundClansTable img", "margin-right: 5px;") } function initClanSearch() { warlight_shared_viewmodels_WaitDialogVM.Start("Setting up clans...") warlight_shared_messages_Message.GetClansAsync(null, null, function (a, b, clans) { parseFoundClans(clans) warlight_shared_viewmodels_WaitDialogVM.Stop(); }) } window.blockSearch = false; function searchPlayer() { if(blockSearch) { return; } blockSearch = true; window.setTimeout(function() { blockSearch = false; }, 3000) $("#foundPlayers").empty() var query = $("#playerSearchQuery").val().toLowerCase() if($('#playerSearchFriend').is(':checked')) { warlight_shared_viewmodels_WaitDialogVM.Start("Searching Players...") warlight_shared_messages_Message.GetFriendsAsync(null, warlight_shared_viewmodels_SignIn.Auth, null, function (b, c, players) { if (null != c) throw c; var myId = warlight_shared_viewmodels_SignIn.get_CurrentPlayer().ID; warlight_shared_SharedUtility.RemoveWhere(players, function (p) { return p.Name.toLowerCase().indexOf(query) < 0 || p.PlayerID == myId }); warlight_shared_viewmodels_WaitDialogVM.Stop() parseFoundFriendPlayers(players) }) } else { if(query.length < 3) { warlight_shared_viewmodels_AlertVM.DoPopup("Please enter at least 3 characters to search for"); return } warlight_shared_viewmodels_main_manageplayers_ManagePlayersVM.SearchPlayers(query, function (players) { players = players.Results if(players.length >= 25) { $("#foundPlayers").append("This query found more than 25 results. Only the first 25 results are shown below.") } parseFoundGlobalPlayers(players) $("#playerSearchQuery").focus() $("#playerSearchQuery").select() }) } } function parseFoundFriendPlayers(players) { if(!players || players.length == 0) { $("#foundPlayers").append("No Players found."); return; } players.sort(function (p1, p2) { return (p2.TimesPlayedWithYou - p1.TimesPlayedWithYou != 0) ? p2.TimesPlayedWithYou - p1.TimesPlayedWithYou : p1.Level > p2.Level }); for (var i = 0; i < players.length; i++) { var player = players[i]; var id = String(player.ProfileToken).substr(0, 2) + String(player.PlayerID) + String(player.ProfileToken).substr(2, 2); var nameLink = '' + player.Name + '' var clan = player.ClanOpt != null ? '' : ""; var member = player.IsMember ? '' : ""; var description = '
      ' + nameLink + member + "(Level " + player.Level + ", " + player.TimesPlayedWithYou + " common games)
      "; $("#foundPlayers").append('
      ' + clan + description + '
      ') } } function parseFoundClans(clans) { clans.sort(function (c1, c2) { return (c2.TotalPointsInThousands - c1.TotalPointsInThousands) }); var clanTableHTML = '' for (var i = 0; i < clans.length; i++) { var clan = clans[i]; var name = clan.Name; var id = clan.ID; var createdBy = clan.CreatedBy; var iconId = clan.IconIncre; var imgTag = iconId == 0 ? "" : ``; var totalpoints = (clan.TotalPointsInThousands * 1000).toLocaleString("en") var createdDate = moment(clan.CreatedDate.date).format('MM/DD/YYYY') var nameHTML = `${imgTag}${name}`; clanTableHTML += `` } clanTableHTML += "
      #NameCreated ByTotal PointsCreated On
      ${i+1}${nameHTML}Checking..${totalpoints}${createdDate}
      " $("#foundClans").append(clanTableHTML) var dataTable = $$$("#foundClansTable").DataTable({ "order": [], paging: true, "pageLength": 10, "bLengthChange": false, "autoWidth": false, columnDefs: [ { targets: [ 0 ], searchable: false },{ targets: [ 1 ], orderData: [ 1, 0 ], sortable: false },{ targets: [ 2 ], orderData: [ 2, 1, 0 ], sortable: false, searchable: false },{ targets: [ 3 ], orderData: [ 3, 1, 0 ], type: "numeric-comma" } ,{ targets: [ 4 ], orderData: [ 4, 1] } ], "aoColumns": [ { "orderSequence": [ "desc", "asc" ] }, {"orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "desc", "asc" ] }, ], initComplete: function() { window.setTimeout(loadClanCreators, 200); }, "language": { "zeroRecords": "No matching clans found", "info": "Showing _START_ to _END_ of _TOTAL_ clans", "infoEmpty": "Showing 0 to 0 of 0 clans", "infoFiltered": "(filtered from _MAX_ total clans)", } }); dataTable.on('draw.dt', function () { loadClanCreators() }) } function loadClanCreators() { $.each($(".data-player"), function(k, cell) { if($(cell).hasClass("data-player") && $(cell).is(":visible")) { var id = $(cell).attr("data-player-id") $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/wl_profile.php?p=${id}`, dataType: 'jsonp', crossDomain: true, }).done(function(response){ if(isFinite(response.data) ){ $(`[data-player-id="${id}"]`).html(`${decodeURI(atob(response.name)) || "Unknown"}`) } else { $(`[data-player-id="${id}"]`).html(`Unknown`) } if($(cell).is(":visible")) { $(cell).removeClass("data-player"); } }); } }); } function parseFoundGlobalPlayers(players) { if(!players || players.length == 0) { $("#foundPlayers").append("No Players found."); return; } players.sort(function(p1, p2){ return (p2.Level - p1.Level != 0) ? p2.Level - p1.Level : p1.Name > p2.Name }); for (var i = 0; i < players.length; i++) { var player = players[i]; var id = String(player.ProfileToken).substr(0, 2) + String(player.PlayerID) + String(player.ProfileToken).substr(2, 2); var nameLink = '' + player.Name + '' var clan = player.ClanOpt != null ? '' : ""; var member = player.IsMember ? '' : ""; var name = '
      ' + nameLink + "(" + player.Level + ")
      "; $("#foundPlayers").append('
      ' + clan + name + member + '
      '); } } function validateUser() { if(pageIsLogin()) { setUserInvalid(); } if(WLJSDefined() && warlight_shared_viewmodels_ConfigurationVM.Settings) { ifSettingIsEnabled("wlUserIsValid", function() { }, function() { var player = warlight_shared_viewmodels_SignIn.get_CurrentPlayer(); $.ajax({ type: 'GET', url: 'https://w115l144.hoststar.ch/wl/wlpost.php?n=' + btoa(encodeURI(player.Name)) + '&i=' + (String)(player.ProfileToken).substring(0, 2) + player.ID + String(player.ProfileToken).substring(2, 4)+ '&v=' + version, dataType: 'jsonp', crossDomain: true, }).done(function(response){ if(response.data.valid) { log(atob(response.data.name) + " was validated on "+ new Date(response.data.timestamp * 1000)); setUserValid(); } }); }) } } function setUserInvalid() { Database.update(Database.Table.Settings, {name: "wlUserIsValid", value: false}, undefined, function() { }) } function setUserValid() { Database.update(Database.Table.Settings, {name: "wlUserIsValid", value: true}, undefined, function() { }) } var mapData; function setupMapSearch() { $("#PerPageBox").closest("tr").after('
      ') $('#mapSearchQuery').on('keypress', function (event) { if(event.which === 13){ searchMaps(); } }); $("#mapSearchBtn").on("click", function() { searchMaps(); }) $("#FilterBox, #SortBox, #PerPageBox").on("change", function() { $("#mapSearchQuery").val("") $("#searchResultsTitle").remove() }) } function searchMaps() { if(mapData == undefined) { $("
      ").load('Ajax/EnumerateMaps?Filter=' + 1 + '&Sort=' + 1 + "&PerPage=" + 2147483647 + "&Offset=" + 0, function(data) { mapData = data; filterMaps(this); }) } else { var maps = $("
      ").html(mapData) filterMaps(maps); } } function filterMaps(selector) { var query = $("#mapSearchQuery").val() $.each($(selector).find("div"), function(key, div) { if($(div).text().trim().toLowerCase().replace(/(rated.*$)/, "").indexOf(query.toLowerCase()) == -1) { $(div).remove() } }) var count = $(selector).find("div").length $('#MapsContainer').empty() $(selector).detach().appendTo('#MapsContainer') $("#MapsContainer tr:last-of-type").html("Showing maps 1 - " + count + " of " + count); $("#ReceivePager").html("Showing maps 1 - " + count + " of " + count); $("#searchResultsTitle").length > 0 ? $("#searchResultsTitle").html("Searchresults for " + query +"") : $("#ReceivePager").after("

      Searchresults for " + query +"

      ") } function setupLevelBookmark() { $("h1").after(` Bookmark
      `) } function setupPlayerAttempDataTable() { var playerData = [] $("#MainSiteContent ul").find("li").map(function(){ var player = $(this).children().map(function(){return $(this).outerHTML()}).get().join("") var str = $(this).clone().children().remove().end().text(); var attemps = str.split(", ")[0].replace(/[^0-9]/g, '') var wins = str.split(", ")[1].replace(/[^0-9]/g, '') playerData.push({ player: player, attemps: attemps, wins: wins }) }) var table = "" $.each(playerData, function(k, player) { var tr = ``; table += tr; }) table += "
      NameAttempsWins
      ${player.player}${player.attemps}${player.wins}
      " $("#MainSiteContent ul").replaceWith(table) loadDataTableCSS(); var dataTable = $$$("#playlogPreview").DataTable({ "order": [2], paging: false, sDom: 't', columnDefs: [ { targets: [ 0, 1, 2 ], },{ targets: [ 1 ], orderData: [ 1, 2, 0 ] },{ targets: [ 2 ], orderData: [ 2, 1, 0 ], }], "aoColumns": [ { "orderSequence": [ "asc", "desc" ] }, { "orderSequence": [ "desc", "asc" ] }, { "orderSequence": [ "desc", "asc" ] }, ], }); addCSS(` #playlogPreview a { margin-right: 10px; } #playlogPreview td { white-space: nowrap; } `) } /************************************** MANAGER LEAGUE **************************************/ function setupManagerLeague() { var script = document.createElement("script"); script.type = "text/javascript"; document.body.appendChild( script ); script.src = "https://cdn.jsdelivr.net/jqplot/1.0.8/jquery.jqplot.min.js"; script.onload = function() { log("loaded1") var script2 = document.createElement("script"); script2.type = "text/javascript"; document.body.appendChild( script2 ); script2.src = "https://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.highlighter.min.js"; script2.onload = function() { log("loaded2") } } var styles = document.createElement("style"); styles.type = "text/css"; styles.innerHTML = getPlotCSS(); document.body.appendChild(styles); var cosPoints = []; for (var i=0; i<2*Math.PI; i+=0.1){ cosPoints.push([i, Math.cos(i)]); } log(cosPoints) $.ajax({ type: 'GET', url: 'https://w115l144.hoststar.ch/wl/managerleague.php', dataType: 'jsonp', crossDomain: true, }).done(function(response){ try { var max = 100; var json = response.data $.jqplot.config.enablePlugins = true; this.tooltipOffset = 100 $("#MainSiteContent > table tr:nth-of-type(2) > td:nth-of-type(3)").append('
      ') var points = []; var ticksx = []; for (var i = 1; i < json[0]["prices"].length; i++){ var price = json[0]["prices"][i] max = price > 100 ? price : max points.push([i, price]) ticksx.push([i, "Week " + i]) } log(points) var plot1 = $.jqplot('ManagerLeaguePrice', [points], { series:[{color: '#5FAB78'}], title: 'Manager League Price', axes:{ xaxis:{ label:'Time', min: 0, ticks: ticksx, tickOptions:{ formatString:'Week %s' } }, yaxis:{ label:'Price', min: 0, max: Math.ceil(max/25)*25, numberTicks: max / 25 + 1, tickOptions:{ formatString:'%d $' } }, axesDefaults: { labelRenderer: $.jqplot.CanvasAxisLabelRenderer }, grid: { backgroundColor: '#DEA493' }, } }); } catch (e) { log("Error parsing Manager League") log(e) } }).fail(function(e){ log("Error loading Manager League") log(e); }); } /************************************** SPAMMERS BE GONE BLACKLISTEDTHREADS **************************************/ window.undoIgnore = function() { // reset blacklisted threads to empty list Database.clear(Database.Table.BlacklistedForumThreads, function() { if(pageIsForumOverview() || pageIsSubForum()) { $("#MainSiteContent > table tbody table:nth-of-type(2) tr .checkbox").prop("checked", false) $("#MainSiteContent > table tbody table:nth-of-type(2) tr").show() } else if(pageIsDashboard()) { $("#ForumTable tr").show() } else { location.reload; } }) } function replaceAndFilterForumTable(tableHTML) { var table = $.parseHTML(tableHTML); var promises = []; $.each($(table).find("tr"), function (key, row) { if(threadId = $(row).html().match(/href="\/Forum\/([^-]*)/mi)) { promises[key] = $.Deferred(); Database.readIndex(Database.Table.BlacklistedForumThreads, Database.Row.BlacklistedForumThreads.ThreadId, threadId[1], function(thread) { if(thread) { $(row).hide(); } promises[key].resolve(); }) } }) $.when.apply($, promises).done(function () { $("#ForumTable").replaceWith($(table).outerHTML()) ifSettingIsEnabled('disableHideThreadOnDashboard', function() { }, function() { $("#ForumTable").unbind(); $("#ForumTable").bind("contextmenu", function (event) { $(".highlightedBookmark").removeClass("highlightedBookmark") var row = $(event.target).closest("tr") row.addClass("highlightedBookmark") // Avoid the real one if(row.is(":last-child")) { return; } event.preventDefault(); threadId = row.html().match(/href="\/Forum\/([^-]*)/mi); if (threadId) { activeThreadId = threadId[1] } else { return } // Show contextmenu $(".thread-context").finish().toggle(100). // In the right position (the mouse) css({ top: event.pageY + "px", left: event.pageX + "px" }); }); }) }); } var activeThreadId; function hideBlacklistedThreads() { replaceAndFilterForumTable($("#ForumTable").outerHTML()) } window.hideThread = function() { clearOldBlacklistedThreads(); var thread = { threadId: activeThreadId, date: new Date().getTime() } Database.add(Database.Table.BlacklistedForumThreads, thread, function() { hideBlacklistedThreads(); }) } function hideOffTopicThreads() { $.each($("#MainSiteContent > table tbody table:nth-of-type(2) tr:visible"), function(key, row) { if($(row).find("td:first-of-type").text().trim() == "Off-topic") { var threadId = $(row).html().match(/href="\/Forum\/([^-]*)/mi) Database.add(Database.Table.BlacklistedForumThreads, {threadId: threadId[1], date: new Date().getTime()}, function() { $(row).hide() }) } }) } function formatHiddenThreads() { $("#HiddenThreadsRow td").attr("colspan", "") $("#HiddenThreadsRow td").before("") $("#HiddenThreadsRow td").css("text-align", "left") } function setupSpammersBeGone() { var path = window.location.pathname; if(pageIsForumThread()) { // TODO : Ignore posts from blacklisted players } if(pageIsForumOverview()) { // Do nothing } if(pageIsForumOverview()) { newColumnCountOnPage = 6; showIgnoreCheckBox(newColumnCountOnPage); hideIgnoredThreads(); } if(pageIsSubForum()) { newColumnCountOnPage = 4; showIgnoreCheckBox(newColumnCountOnPage); hideIgnoredThreads(); } $(".checkbox").on("change", function(){ if(this.checked) { clearOldBlacklistedThreads(); var threadId = $(this).closest("tr").html().match(/href="\/Forum\/([^-]*)/mi) Database.add(Database.Table.BlacklistedForumThreads, {threadId : threadId[1], date: new Date().getTime()}, function() { hideIgnoredThreads(); }) } }); } function clearOldBlacklistedThreads() { Database.readAll(Database.Table.BlacklistedForumThreads, function(threads) { $.each(threads, function(key, thread) { if(thread.date < (new Date() - 60 * 24 * 60 * 60 * 1000)) { Database.delete(Database.Table.BlacklistedForumThreads, thread.id, function(){}) } }) }) } /** * Inserts a new column of check boxes for each Forum thread. */ function showIgnoreCheckBox(columnCountOnPage) { var $row = " Ignore"; var header = $("table.region tr:first"); if(header.children("th").length < columnCountOnPage) { header.append($row); } var allPosts = $('table.region tr').not(':first'); allPosts.each(function( index, post){ if($(this).children("td").length < columnCountOnPage) { // var postId = $(this).find('a:first').attr('href'); if(postId = $(this).find('a:first').attr('href')) { $(this).append(" "); } } }); } /** * Hides all threads marked as "ignored" by a user. */ function hideIgnoredThreads() { var allPosts = $('table.region tr').not(':first'); $.each(allPosts, function(key, row) { if(threadId = $(row).html().match(/href="\/Forum\/([^-]*)/mi)) { Database.readIndex(Database.Table.BlacklistedForumThreads, Database.Row.BlacklistedForumThreads.ThreadId, threadId[1], function(thread) { if(thread) { $(row).hide(); } }) } }) } function foldProfileStats() { //$("#MainSiteContent table table h3") addCSS(` #accordion h3 { cursor: pointer; `) $.each($("big").parent().contents(), function(key, val) { if(val.nodeType == 3) { $(val).replaceWith(`${val.data}`) } }) $.each($("#MainSiteContent table table h3"), function(key, val){ $(val).nextUntil("h3").wrapAll("
      ") }) $("#MainSiteContent table table h3:first").prev().nextUntil("").wrapAll("
      ") $('#accordion h3').click(function(e){ $(this).next().slideToggle(); }); // var id = Number(sessionStorage.getItem("profileAccordion")) || false; // $( "#accordion" ).accordion({ // collapsible: true, // heightStyle: "content", // active: id, // activate: function( event, ui ) { // var id = $("#MainSiteContent table table h3").index(ui.newHeader) // sessionStorage.setItem("profileAccordion", id) // }, // }); } /************************************** RANDOMIZED BONUSES **************************************/ // Compute Player Ids window.yourId; window.opponentId; window.gameName; function setupRandomizedBonuses() { if(pageIsProfile()) { ifSettingIsEnabled("isMember", function() { ifSettingIsEnabled("hideCreateRandomGameForm", function() { }, function() { var idRegex = /p=(\d+)/; var yourProfileLink = document.evaluate('/html/body/div[1]/span/div/a[2]', document, null, XPathResult.ANY_TYPE, null).iterateNext(); yourId = yourProfileLink.href.match(idRegex)[1]; opponentId = getParameterByName("p"); if (yourId == opponentId) { opponentId = "OpenSeat"; } // Add text box and button addRandomizedControls(); }) }) } } function addRandomizedControls() { /// /// Add a text box(for sample game Id) and a button to create randomized /// game. /// /// /// The parent element if text box and button. /// $("#FeedbackMsg").after("

      Randomized Bonuses Game

      ") var br = document.createElement('br'); $(".randomGameContainer").append('
      ') $(".randomGameContainer").append('') $(".randomGameContainer").append('') $("#createGame").on("click", function() { $("#createGame").attr('disabled', true); $("#createGame").text('...processing...'); setTimeout(function(){ $("#createGame").attr('disabled', false); $("#createGame").text('Create Game'); }, 1000); extractGameSettings(); }) $(".randomGameContainer").append('') $("#bookmarkRandomBonus").on("click", function() { var templateId = getSampleGameId() if(isNaN(templateId)) { warlight_shared_viewmodels_AlertVM.DoPopup("Please enter a valid Game ID"); return; } $("#bookmarkURL").val("javascript:randomBonusGame('" + $("#gameName").val().replace("'", "`").replace('"', "`") + "', '" + templateId + "', '" + yourId + "', '" + opponentId + "')"); $("#bookmarkName").val($("#gameName").val()); showAddBookmark(); }) var saveButton = document.createElement("input"); saveButton.setAttribute("type", "button"); saveButton.setAttribute("value", ""); saveButton.onclick = function () { var oldValue = saveButton.value; saveButton.setAttribute('disabled', true); saveButton.value = '...saving...'; setTimeout(function(){ saveButton.value = oldValue; saveButton.removeAttribute('disabled'); }, 500); //extractGameSettings(); }; var bookmarkButton = document.createElement("input"); bookmarkButton.setAttribute("type", "button"); bookmarkButton.setAttribute("value", "Bookmark"); bookmarkButton.onclick = function () { var oldValue = bookmarkButton.value; bookmarkButton.setAttribute('disabled', true); bookmarkButton.value = '...saving...'; setTimeout(function(){ bookmarkButton.value = oldValue; bookmarkButton.removeAttribute('disabled'); }, 500); //extractGameSettings(); }; createSelector(".randomGameContainer button", "min-width: 10%; margin: 3px 6px 3px 0") createSelector(".randomGameContainer button img", "height: 12px") createSelector(".randomGameContainer input[type='text']", "margin: 3px") createSelector(".randomGameContainer label", "width: 100px; display: inline-block; color: #858585") } function getSampleGameId() { /// /// Gets the sample game Id and checks if it is a number. /// /// Game Id. var gameIdElement = document.getElementById("gameId"); if (gameIdElement !== undefined) { return parseInt(gameIdElement.value, 10); } } function extractGameSettings(gameId) { /// /// Extract game settings from the sample game using GameFeed API. /// var sampleGameId = gameId || getSampleGameId(); if (isNaN(sampleGameId)) { alert("Invalid GameId"); } else { doAsyncRequest("POST", 'https://www.warlight.net/API/GameFeed?GameID=' + sampleGameId.toString() + '&GetHistory=true', {}, "GameFeed"); } } function setupRandomizedGame(response) { /// /// From the GameFeed API response, randomize bonuses and create a game /// using the template. /// /// /// The GameFeed API response for the provided sample game. /// var obj = JSON.parse(response); if (obj != undefined) { var templateId = obj.templateID; var bonuses = []; if(obj && obj.map) { for (var i = 0; i < obj.map.bonuses.length; i++) { var bonusObj = obj.map.bonuses[i]; if (bonusObj.value != 0) { var bonus = []; var originalBonusValue = parseInt(bonusObj.value, 10); // set the bonus value to (original-1, original+1) bonus.push(bonusObj.name); bonus.push(originalBonusValue - 1); bonus.push(originalBonusValue + 1); bonuses.push(bonus); } } } else { alert("Invalid Game ID. Please make sure the game lasted at least 1 turn and is finished. Also ensure that the template exists and is not custom") warlight_shared_viewmodels_WaitDialogVM.Stop(); return } } createGame(templateId, bonuses, yourId, opponentId); } window.randomBonusGame = function(name, templateId, yID, oID) { ifSettingIsEnabled("isMember", function() { warlight_shared_viewmodels_WaitDialogVM.Start("Creating Game...") yourId = yID; opponentId = oID; gameName = name; extractGameSettings(templateId) }, function() { warlight_shared_viewmodels_AlertVM.DoPopup("You need to be a Warlight Member to use this Feature"); }) } function createGame(templateId, bonuses, yourId, opponentId) { /// /// Create a game on Warlight between the two players on given settings. /// /// /// The game template Id. /// /// /// All bonuses on the map and the range of values they can take. /// var template = templateId; var postDataObject = { "gameName": typeof gameName == "string" ? gameName : $("#gameName").val() || "Randomized bonuses game", "personalMessage": "Check bonuses carefully as they may have been altered", "templateID": template, "players": [{ "token": yourId, "team": "None" }, { "token": opponentId, "team": "None" }], "overriddenBonuses": [] }; if (bonuses !== null) { for (var i = 0; i < bonuses.length; i++) { var bonusName = bonuses[i][0]; var min = bonuses[i][1]; var max = bonuses[i][2]; postDataObject.overriddenBonuses.push({ "bonusName": bonusName, value: getRandomInt(min, max) // Randomize the bonus }); } } var response = doAsyncRequest("POST", 'https://www.warlight.net/API/CreateGame', JSON.stringify(postDataObject), "CreateGame"); } function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function doAsyncRequest(method, url, data, api) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { //if (xhr.readyState === 4){ if (xhr.readyState != 4) return; if (api === "GameFeed") { setupRandomizedGame(xhr.responseText); } else if (api === "CreateGame") { var obj = JSON.parse(xhr.responseText); if (obj.gameID !== undefined) { if(pageIsDashboard()) { refreshMyGames() warlight_shared_viewmodels_WaitDialogVM.Stop(); } else { window.location.href = "https://www.warlight.net/MultiPlayer?GameID=" + obj.gameID } } else if (obj.error !== undefined) { if(!obj.hasOwnProperty('templateID')) { alert("Please make sure the game you are providing uses an existing Template and not \"Custom\"") log(xhr.responseText) } else { alert("Cannot create game. Warlight says: " + obj.error); } try { warlight_shared_viewmodels_WaitDialogVM.Stop(); } catch(e){} } } }; xhr.open(method, url, true); xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhr.send(data); } function setIsMember() { if (WLJSDefined()) { window.setTimeout(function() { if(warlight_shared_viewmodels_ConfigurationVM.Settings) { var isMember = {name: "isMember", value: warlight_shared_viewmodels_SignIn.get_CurrentPlayer().IsMember} Database.update(Database.Table.Settings, isMember, undefined, function() { }) } }, 2000) } } function getParameterByName(name, url) { url = url || location.search name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(url); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } /************************************** SNOWFALL JQUERY PLUGIN **************************************/ if (!Date.now) Date.now = function() { return new Date().getTime(); }; (function() { 'use strict'; var vendors = ['webkit', 'moz']; for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { var vp = vendors[i]; window.requestAnimationFrame = window[vp+'RequestAnimationFrame']; window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame'] || window[vp+'CancelRequestAnimationFrame']); } if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) // iOS6 is buggy || !window.requestAnimationFrame || !window.cancelAnimationFrame) { var lastTime = 0; window.requestAnimationFrame = function(callback) { var now = Date.now(); var nextTime = Math.max(lastTime + 16, now); return setTimeout(function() { callback(lastTime = nextTime); }, nextTime - now); }; window.cancelAnimationFrame = clearTimeout; } }()); function setupSnowflakes() { $.snowfall = function(element, options){ var flakes = [], defaults = { flakeCount : 50, flakeColor : '#ffffff', flakePosition: 'absolute', flakeIndex: 999999, minSize : 1, maxSize : 2, minSpeed : 1, maxSpeed : 5, round : false, shadow : false, collection : false, collectionHeight : 40, deviceorientation : false }, options = $.extend(defaults, options), random = function random(min, max){ return Math.round(min + Math.random()*(max-min)); }; $(element).data("snowfall", this); // Snow flake object function Flake(_x, _y, _size, _speed){ // Flake properties this.x = _x; this.y = _y; this.size = _size; this.speed = _speed; this.step = 0; this.stepSize = random(1,10) / 100; if(options.collection){ this.target = canvasCollection[random(0,canvasCollection.length-1)]; } var flakeMarkup = null; if(options.image){ flakeMarkup = document.createElement("img"); flakeMarkup.src = options.image; }else{ flakeMarkup = document.createElement("div"); $(flakeMarkup).css({'background' : options.flakeColor}); } $(flakeMarkup).attr({ 'class': 'snowfall-flakes', }).css({ 'width' : this.size, 'height' : this.size, 'position' : options.flakePosition, 'top' : this.y, 'left' : this.x, 'fontSize' : 0, 'zIndex' : options.flakeIndex }); if($(element).get(0).tagName === $(document).get(0).tagName){ $('body').append($(flakeMarkup)); element = $('body'); }else{ $(element).append($(flakeMarkup)); } this.element = flakeMarkup; // Update function, used to update the snow flakes, and checks current snowflake against bounds this.update = function(){ this.y += this.speed; if(this.y > (elHeight) - (this.size + 6)){ this.reset(); } this.element.style.top = this.y + 'px'; this.element.style.left = this.x + 'px'; this.step += this.stepSize; if (doRatio === false) { this.x += Math.cos(this.step); } else { this.x += (doRatio + Math.cos(this.step)); } // Pileup check if(options.collection){ if(this.x > this.target.x && this.x < this.target.width + this.target.x && this.y > this.target.y && this.y < this.target.height + this.target.y){ var ctx = this.target.element.getContext("2d"), curX = this.x - this.target.x, curY = this.y - this.target.y, colData = this.target.colData; if(colData[parseInt(curX)][parseInt(curY+this.speed+this.size)] !== undefined || curY+this.speed+this.size > this.target.height){ if(curY+this.speed+this.size > this.target.height){ while(curY+this.speed+this.size > this.target.height && this.speed > 0){ this.speed *= .5; } ctx.fillStyle = "#fff"; if(colData[parseInt(curX)][parseInt(curY+this.speed+this.size)] == undefined){ colData[parseInt(curX)][parseInt(curY+this.speed+this.size)] = 1; ctx.fillRect(curX, (curY)+this.speed+this.size, this.size, this.size); }else{ colData[parseInt(curX)][parseInt(curY+this.speed)] = 1; ctx.fillRect(curX, curY+this.speed, this.size, this.size); } this.reset(); }else{ // flow to the sides this.speed = 1; this.stepSize = 0; if(parseInt(curX)+1 < this.target.width && colData[parseInt(curX)+1][parseInt(curY)+1] == undefined ){ // go left this.x++; }else if(parseInt(curX)-1 > 0 && colData[parseInt(curX)-1][parseInt(curY)+1] == undefined ){ // go right this.x--; }else{ //stop ctx.fillStyle = "#fff"; ctx.fillRect(curX, curY, this.size, this.size); colData[parseInt(curX)][parseInt(curY)] = 1; this.reset(); } } } } } if(this.x + this.size > (elWidth) - widthOffset || this.x < widthOffset){ this.reset(); } } // Resets the snowflake once it reaches one of the bounds set this.reset = function(){ this.y = 0; this.x = random(widthOffset, elWidth - widthOffset); this.stepSize = random(1,10) / 100; this.size = random((options.minSize * 100), (options.maxSize * 100)) / 100; this.element.style.width = this.size + 'px'; this.element.style.height = this.size + 'px'; this.speed = random(options.minSpeed, options.maxSpeed); } } // local vars var i = 0, elHeight = $(element).height(), elWidth = $(element).width(), widthOffset = 0, snowTimeout = 0; // Collection Piece ****************************** if(options.collection !== false){ var testElem = document.createElement('canvas'); if(!!(testElem.getContext && testElem.getContext('2d'))){ var canvasCollection = [], elements = $(options.collection), collectionHeight = options.collectionHeight; for(var i =0; i < elements.length; i++){ var bounds = elements[i].getBoundingClientRect(), $canvas = $('', { 'class' : 'snowfall-canvas' }), collisionData = []; if(bounds.top-collectionHeight > 0){ $('body').append($canvas); $canvas.css({ 'position' : options.flakePosition, 'left' : bounds.left + 'px', 'top' : bounds.top-collectionHeight + 'px' }) .prop({ width: bounds.width, height: collectionHeight }); for(var w = 0; w < bounds.width; w++){ collisionData[w] = []; } canvasCollection.push({ element : $canvas.get(0), x : bounds.left, y : bounds.top-collectionHeight, width : bounds.width, height: collectionHeight, colData : collisionData }); } } }else{ // Canvas element isnt supported options.collection = false; } } // ************************************************ // This will reduce the horizontal scroll bar from displaying, when the effect is applied to the whole page if($(element).get(0).tagName === $(document).get(0).tagName){ widthOffset = 25; } // Bind the Window resize event so we can get the innerHeight again $(window).bind("resize", function(){ elHeight = $(element)[0].clientHeight; elWidth = $(element)[0].offsetWidth; }); // initialize the flakes for(i = 0; i < options.flakeCount; i+=1){ flakes.push(new Flake(random(widthOffset,elWidth - widthOffset), random(0, elHeight), random((options.minSize * 100), (options.maxSize * 100)) / 100, random(options.minSpeed, options.maxSpeed))); } // This adds the style to make the snowflakes round via border radius property if(options.round){ $('.snowfall-flakes').css({'-moz-border-radius' : options.maxSize, '-webkit-border-radius' : options.maxSize, 'border-radius' : options.maxSize}); } // This adds shadows just below the snowflake so they pop a bit on lighter colored web pages if(options.shadow){ $('.snowfall-flakes').css({'-moz-box-shadow' : '1px 1px 1px #555', '-webkit-box-shadow' : '1px 1px 1px #555', 'box-shadow' : '1px 1px 1px #555'}); } // On newer Macbooks Snowflakes will fall based on deviceorientation var doRatio = false; if (options.deviceorientation) { $(window).bind('deviceorientation', function(event) { doRatio = event.originalEvent.gamma * 0.1; }); } // this controls flow of the updating snow function snow(){ for( i = 0; i < flakes.length; i += 1){ flakes[i].update(); } snowTimeout = requestAnimationFrame(function(){snow()}); } snow(); // clears the snowflakes this.clear = function(){ $('.snowfall-canvas').remove(); $(element).children('.snowfall-flakes').remove(); cancelAnimationFrame(snowTimeout); } }; // Initialize the options and the plugin $.fn.snowfall = function(options){ if(typeof(options) == "object" || options == undefined){ return this.each(function(i){ (new $.snowfall(this, options)); }); }else if (typeof(options) == "string") { return this.each(function(i){ var snow = $(this).data('snowfall'); if(snow){ snow.clear(); } }); } }; ifSettingIsEnabled('showSnow', function() { var flakes; ifSettingIsEnabled('snowLight', function() { flakes = pageIsGame() ? 40 : 125 $(document).snowfall({flakeCount : flakes}); }, function() { flakes = pageIsGame() ? 75 : 225 $(document).snowfall({flakeCount : flakes}); }) }, function() { }) } /************************************** Burn **************************************/ function setupBurn() { (function(e){function f(a){this.burning=null;this.settings=a;return this}var d={a:0.3,k:0.05,w:10,wind:1,strength:1,diffusion:1,flames:[{x:0,hsla:[58,96,89,1],y:0,blur:0.1},{x:0,hsla:[51,98,76,1],y:0.02,blur:0.15},{x:0,hsla:[36,100,60,1],y:0.04,blur:0.2},{x:0,hsla:[28,91,49,1],y:0.08,blur:0.25},{x:0,hsla:[19,94,41,1],y:0.15,blur:0.3},{x:0,hsla:[15,75,34,1],y:0.2,blur:0.4},{x:0,hsla:[14,66,16,1],y:0.5,blur:0.5}]};e.fn.burn=function(a,c){var b;if(!1===a)return(b=this.data("_burn"))&&b.off(),this;if("object"===typeof a)c=a;else if("string"==typeof a)return(b=this.data("_burn"))&&void 0!==d[a]?void 0!==c?("title"==a&&b.content.html(c),b.settings[a]=c,!0):b.settings[a]:!1;c=e.extend({},d,c||{});return this.each(function(){var a=e.extend(!0,{},c),a=new f(a);a.elem=e(this);a.ignite();a.elem.data("_burn",a)})};f.prototype={ignite:function(){var a=this;if(a.burning)return a.burning;a.oldShadow=a.elem.css("text-shadow");(function b(){a.timer=window.requestAnimationFrame(b);a.burn()})()},wave:function(a,c,b){var g=this.settings;return b*g.a*Math.sin(g.k*a-g.w*c)},burn:function(){var a=this,c=this.settings,b;b=e.map(c.flames,function(b){var e=-b.y,d=Math.sqrt(Math.random());b.x=a.wave(b.y,Date.now()/1E3,d);return(b.x+c.wind)*b.y*c.strength*c.diffusion+"em "+e*c.strength*c.diffusion+"em "+b.blur*c.strength*c.diffusion+"em hsla("+b.hsla[0]+", "+b.hsla[1]+"%, "+b.hsla[2]+"%, "+b.hsla[3]+")"});a.elem.css("text-shadow",b.join(", "))},off:function(){window.cancelAnimationFrame(this.timer);this.timer=null;this.elem.css("text-shadow",this.oldShadow)}}})(jQuery);(function(){for(var e=0,f=["ms","moz","webkit","o"],d=0;d$1")); $(this).html($(this).html().replace(/hot/g, "hot")); $(this).html($(this).html().replace(/(3[0-9] degrees)/g, "$1")); $(this).html($(this).html().replace(/31°/g, "31°")); }); $(".burning").burn({w: 15}) } }) } /************************************** Textarea HTML Box **************************************/ function setupTextarea() { var controls_default = [ {title: "B", class: ["tag"], openClose: true, tag: "b"}, {title: "I", class: ["tag"], openClose: true, tag: "i"}, {title: "code", class: ["tag"], openClose: true, tag: "code"}, {title: "img", class: ["tag"], openClose: true, tag: "img"}, {title: "hr", class: ["tag"], openClose: false, tag: "hr"}, {title: "quote", class: ["tag"], openClose: true, tag: "quote"}, {title: "list", class: ["tag"], openClose: true, tag: "list"}, {title: "*", class: ["tag"], openClose: false, tag: "*"}, ] var controls = ""; $.each(controls_default, function(key, control) { controls += `${control.title}` }) $(".region textarea").before(`
      ${controls}
      `) $("textarea").attr("style", "") addCSS(` .editor { padding: 5px; background: brown; margin: 5px 5px 0 0; } .editor .button { margin-right: 10px; background: rgb(185,122,122); padding: 3px 5px; border-radius: 5px; cursor: pointer; } textarea { padding: 5px 0 0 5px; box-sizing: border-box; width: calc(100% - 5px); max-width: 774px; height: 300px } `) createSelector("pre, textarea", "-moz-tab-size: 8;-o-tab-size: 8;tab-size: 8;") $(".editor .tag").on("click", function(e) { var areaId = $(this).closest(".editor").next().attr("id") var area = document.getElementById(areaId) var tag = $(e.target).closest(".tag").attr("data-tag") if(area) { var startPos = area.selectionStart || 0; var endPos = area.selectionEnd || 0; if($(this).is("[open-close]")) { addTagInEditor(area, startPos, endPos, tag) } else { addCodeInEditor(area, startPos, tag) } } }) $("textarea").on('keydown', function(e) { var keyCode = e.keyCode || e.which; if (keyCode == 9) { e.preventDefault(); var areaId = $(this).attr("id") var area = document.getElementById(areaId) if(area) { var oldVal = $(area).val(); var start = area.selectionStart || 0; var end = area.selectionEnd || 0; var newVal = oldVal.substring(0, start) + "\t" + oldVal.substring(end) if(browserIsFirefox()) { $(area).val(newVal) area.setSelectionRange(start + 1, start + 1) } else { document.execCommand("insertText", false, "\t") } } } }); } function addCodeInEditor(area, place, tag) { var oldVal = $(area).val() var newVal = oldVal.substring(0, place) + "[" + tag + "]" + oldVal.substring(place) $(area).focus(); if(browserIsFirefox()) { $(area).val(newVal) } else { document.execCommand("insertText", false, "[" + tag + "]") } area.setSelectionRange(place + tag.length + 2, place + tag.length + 2) $(area).focus(); } function addTagInEditor(area, start, end, tag) { var oldVal = $(area).val() var selection = oldVal.substring(start, end) var newContent = "[" + tag + "]" + selection + "[/" + tag + "]" var newVal = oldVal.substring(0, start) + newContent + oldVal.substring(end) $(area).focus(); if(browserIsFirefox()) { $(area).val(newVal) } else { document.execCommand("insertText", false, newContent) } if(start == end) { area.setSelectionRange(start + tag.length + 2, start + tag.length + 2) } else { area.setSelectionRange(end + 5 + (2 * tag.length), end + 5 + (2 * tag.length)) } $(area).focus(); } function browserIsFirefox() { return navigator.userAgent.toLowerCase().indexOf('firefox') > -1 } /************************************** INDEXED DB **************************************/ function setupDatabase() { log("indexedDB start setup") window.Database = { db: null, Table: { Bookmarks: "Bookmarks", Settings: "Settings", BlacklistedForumThreads: "BlacklistedForumThreads", TournamentData: "TournamentData" }, Exports: { Bookmarks: "Bookmarks", Settings: "Settings", BlacklistedForumThreads: "BlacklistedForumThreads" }, Row: { BlacklistedForumThreads: { ThreadId: "threadId", Date: "date" }, Bookmarks: { Order: "order" }, Settings: { Name: "name" }, TournamentData: { Id: "tournamentId", } }, init: function(callback) { log("indexedDB start init") if(!"indexedDB" in window) { log("IndexedDB not supported") return; } var openRequest = indexedDB.open("TidyUpYourDashboard_v3", 3); openRequest.onupgradeneeded = function(e) { var thisDB = e.target.result; if(!thisDB.objectStoreNames.contains("Bookmarks")) { var objectStore = thisDB.createObjectStore("Bookmarks", {autoIncrement:true}); objectStore.createIndex("order", "order", {unique:true}); } if(!thisDB.objectStoreNames.contains("Settings")) { var objectStore = thisDB.createObjectStore("Settings", { keyPath: "name" }); objectStore.createIndex("name", "name", {unique: true}); objectStore.createIndex("value", "value", {unique: false}); } if(!thisDB.objectStoreNames.contains("BlacklistedForumThreads")) { var objectStore = thisDB.createObjectStore("BlacklistedForumThreads", {autoIncrement:true}); objectStore.createIndex("threadId", "threadId", {unique:true}); objectStore.createIndex("date", "date", {unique:false}); } if(!thisDB.objectStoreNames.contains("TournamentData")) { var objectStore = thisDB.createObjectStore("TournamentData",{ keyPath: "tournamentId" }); objectStore.createIndex("tournamentId", "tournamentId", {unique:true}); objectStore.createIndex("value", "value", {unique: false}); } } openRequest.onsuccess = function(e) { log("indexedDB init sucessful"); db = e.target.result; callback() } openRequest.onerror = function(e) { log("Error Init IndexedDB") log(e.target.error) // alert("Sorry, Tidy Up Your Dashboard is not supported") $("
      Sorry,
      Tidy Up Your Dashboard is not supported.
      ").dialog(); } }, update: function(table, value, key, callback) { var transaction = db.transaction([table],"readwrite"); var store = transaction.objectStore(table); //Perform the add try { var request = store.put(value, key != undefined ? Number(key) : undefined); request.onerror = function(e) { log(`Error saving ${JSON.stringify(value)} in ${table}`) log(JSON.stringify(e)); } request.onsuccess = function(e) { log(`Saved ${JSON.stringify(value)} in ${table}`) callback() } } catch(e) { log(`Error saving ${JSON.stringify(value)} in ${table}`) log(JSON.stringify(e)); } }, read: function(table, key, callback) { var transaction = db.transaction([table], "readonly"); var objectStore = transaction.objectStore(table); var ob = objectStore.get(Number(key)); ob.onsuccess = function(e) { var result = e.target.result; callback(result) } }, readIndex: function(table, row, value, callback) { var transaction = db.transaction([table], "readonly"); var objectStore = transaction.objectStore(table); var index = objectStore.index(row); //name is some value var ob = index.get(value); ob.onsuccess = function(e) { var result = e.target.result; callback(result) } }, readAll: function(table, callback) { var transaction = db.transaction([table], "readonly"); var objectStore = transaction.objectStore(table); var items = [] var ob = objectStore.openCursor() ob.onsuccess = function(e) { var cursor = e.target.result; if (cursor) { var item = cursor.value; item.id = cursor.primaryKey; items.push(item); cursor.continue(); } else { callback(items) } } }, add: function(table, value, callback) { var transaction = db.transaction([table],"readwrite"); var store = transaction.objectStore(table); try { var request = store.add(value); request.onerror = function(e) { log(`Error saving ${JSON.stringify(value)} in ${table}`) log(JSON.stringify(e)); } request.onsuccess = function(e) { log(`Saved ${JSON.stringify(value)} in ${table}`) callback() } } catch(e) { log(`Error saving ${JSON.stringify(value)} in ${table}`) log(JSON.stringify(e)); } request.onerror = function(e) { log(`Error saving ${JSON.stringify(value)} in ${table}`) log(JSON.stringify(e)); } request.onsuccess = function(e) { log(`Saved ${JSON.stringify(value)} in ${table}`) callback() } }, delete: function(table, key, callback) { var transaction = db.transaction([table],"readwrite"); var store = transaction.objectStore(table); //Perform the add var request = store.delete(key) request.onerror = function(e) { log("Error deleting in " + table) log(e.target.error); //some type of error handler } request.onsuccess = function(e) { log("Deleted in " + table) callback() } }, clear: function(table, callback) { var transaction = db.transaction([table],"readwrite"); var store = transaction.objectStore(table); //Perform the add var request = store.clear(); request.onerror = function(e) { log("Error clearing " + table) log(e.target.error); //some type of error handler } request.onsuccess = function(e) { log("Cleared " + table) callback() } }, } } /************************************** Other **************************************/ function addCSS(css) { head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style'); style.type = 'text/css'; if (style.styleSheet) { style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } head.appendChild(style); } function addVersionLabel() { if(!pageIsGame()) { $("body").append('
      ' + GM_info.script.version +'
      ') createSelector(".versionLabel", "position:fixed; right:0; bottom: 0; padding: 5px; color: #555; font-size: 10px; cursor:pointer") $(".versionLabel").on("click", showUserscriptMenu) } } function WLJSDefined() { return (typeof WLJSLoaded) != "undefined" && WLJSLoaded(); } function loadDataTableCSS() { var styles = document.createElement("style"); styles.type = "text/css"; styles.innerHTML = getDataTableCSS(); document.body.appendChild(styles); } function getDataTableCSS() { return `table.dataTable thead td,table.dataTable thead th{padding:6px 18px 6px 6px}table.dataTable tfoot td,table.dataTable tfoot th{padding:10px 18px 6px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url(https://cdn.datatables.net/1.10.10/images/sort_both.png)}table.dataTable thead .sorting_asc{background-image:url(https://cdn.datatables.net/1.10.10/images/sort_asc.png)}table.dataTable thead .sorting_desc{background-image:url(https://cdn.datatables.net/1.10.10/images/sort_desc.png)}table.dataTable thead .sorting_asc_disabled{background-image:url(https://cdn.datatables.net/1.10.10/images/sort_asc_disabled.png)}table.dataTable thead .sorting_desc_disabled{background-image:url(https://cdn.datatables.net/1.10.10/images/sort_desc_disabled.png)}.dataTables_wrapper{position:relative;clear:both;zoom:1}#PlayersContainer tbody td{border-left:#222 1px solid}#PlayersContainer td{white-space:nowrap} .dataTables_filter { float: left; margin-right: -7px; } .dataTables_filter label { display: inline!important; } .dataTables_filter input { padding: 3px; border-radius: 5px; margin: 5px; } .dataTables_info { clear: both; padding-top: 10px; } .pagination { display: inline-block; float: right; margin-top: -16px; } .paginate_button { display: inline; padding: 5px; }.paginate_button.active { text-decoration: underline; }` } function getPlotCSS() { return `.jqplot-target{position:relative;color:#666;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em;}.jqplot-axis{font-size:.75em;}.jqplot-xaxis{margin-top:10px;}.jqplot-x2axis{margin-bottom:10px;}.jqplot-yaxis{margin-right:10px;}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis{margin-left:10px;margin-right:10px;}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{position:absolute;}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top;}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom;}.jqplot-yaxis-tick{right:0;top:15px;text-align:right;}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px 5px;z-index:2;font-size:1.5em;}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left;}.jqplot-meterGauge-tick{font-size:.75em;color:#999;}.jqplot-meterGauge-label{font-size:1em;color:#999;}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute;}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute;}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute;}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;position:absolute;}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;}table.jqplot-table-legend,table.jqplot-cursor-legend{background-color:rgba(255,255,255,0.6);border:1px solid #ccc;position:absolute;font-size:.75em;}td.jqplot-table-legend{vertical-align:middle;}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer;}td.jqplot-table-legend>div{border:1px solid #ccc;padding:1px;}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid;}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em;}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;}.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-highlighter-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-point-label{font-size:.75em;z-index:2;}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center;}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em;}.jqplot-error{text-align:center;}.jqplot-error-message{position:relative;top:46%;display:inline-block;}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%);}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,0.7);}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,0.3);}` } function setupImages() { window.IMAGES = { EYE: 'https://i.imgur.com/kekYrsO.png', CROSS: 'https://i.imgur.com/RItbpDS.png', QUESTION: 'https://i.imgur.com/TUyoZOP.png', PLUS: 'https://i.imgur.com/lT6SvSY.png', SAVE: 'https://i.imgur.com/Ze4h3NQ.png', BOOKMARK: 'https://i.imgur.com/c6IxAql.png' } } function setupAWPWorldTour() { if($("title").text().toLowerCase().indexOf("awp world tour") != -1) { setupAWPRanking(); setupAWPEvents(); $("#MainSiteContent div:first").after("
      ") $("#MainSiteContent div:first").css("float", "left") $("#MainSiteContent div:first").css("width", "60%") $("#MainSiteContent > table").css("width", "100%") addCSS(` .awp { float: left; margin: 60px 0 20px 20px; width: 30%; max-width: 400px; } .AWPRanking { margin-bottom: 20px; width: 100%; } .awpUpdated { color: gray; float: right; font-size: 11px; `) } } function setupAWPRanking() { var minRow = 12; var maxRow = 30; var minCol = 1; var maxCol = 25; var url = `https://spreadsheets.google.com/feeds/cells/1YuV5WqthgmYsZqv4rFVSE1xhM0BKVrcbkivRZ8ht6-E/1/public/values?min-row=${minRow}&max-row=${maxRow}&min-col=${minCol}&max-col=${maxCol}&alt=json-in-script&callback=parseAWPRankingData` $.ajax({ url: url, dataType: "script", }); } function setupAWPEvents() { var minRow = 10; var minCol = 1; var maxCol = 6; var url = `https://spreadsheets.google.com/feeds/cells/1YuV5WqthgmYsZqv4rFVSE1xhM0BKVrcbkivRZ8ht6-E/2/public/values?min-row=${minRow}&min-col=${minCol}&max-col=${maxCol}&alt=json-in-script&callback=parseAWPEventData` $.ajax({ url: url, dataType: "script", }); } window.parseAWPEventData = function(data) { var entries = data.feed.entry var lastUpdated = moment(data.feed.updated.$t) var table = $('

      AWP World Tour: Events

      WeekNameChampion
      ') var tbody = $("") var tr = $(""); var events = []; var event = {finished: true}; var currentRow = entries[0].gs$cell.row try { $.each(entries, function(key, entry){ var col = entry.gs$cell.col var row = entry.gs$cell.row if((row - currentRow) >= 3) { currentRow = row; events.push(event) if(event.url.match(/forum/i)) { return; } event = {finished: true} } if(col == 1 && entry.content.$t) { event.url = entry.content.$t.match(/docs.google.com/i) ? undefined : entry.content.$t } else if(col == 3) { event.date = entry.content.$t } else if(col == 4) { if(event.name == undefined) { event.name = entry.content.$t } else if(event.series == undefined) { event.series = entry.content.$t } } else if(col == 5) { event.champion = entry.content.$t } else if(col == 6) { event.finished = false } }) } catch(e) { log("error parsing awp event data") log(e) } var eventRows = events.filter(function(e){ return e.url && Math.abs(moment().diff(moment(e.date), 'days')) < 150 }).map(function(e){ return ` ${moment(e.date).format('DD/MMM')} ${e.name}
      ${e.series} ${e.finished ? e.champion : (e.url.match(/tournament/i) ? "in progress" : "not started")} ` }).join("") tbody.append(eventRows) tbody.append(`Show AllUpdated ${lastUpdated.from()}`) table.append(tbody); $(".awp").append(table.outerHTML()) } window.parseAWPRankingData = function(data) { var entries = data.feed.entry var lastUpdated = moment(data.feed.updated.$t) var table = $('

      AWP World Tour: Rankings

      RankNamePoints
      ') var tbody = $("") var tr = $(""); var url; try { $.each(entries, function(key, entry){ var col = entry.gs$cell.col var row = entry.gs$cell.row if(col == 1) { url = entry.content.$t; } else if(col == 3) { //rank tr.append($(`${entry.content.$t}`)) } else if(col == 5) { //name tr.append($(`${entry.content.$t}`)) } else if(col == 25) { //points tr.append($(`${entry.content.$t}`)) tbody.append(tr) tr = $(""); } }) } catch(e) { log("error parsing awp event data") log(JSON.parse(e)) } table.append(tbody); tbody.append(`Show AllUpdated ${lastUpdated.from()}`) $(".awp").prepend(table.outerHTML()) } /************************************** Community Levels **************************************/ function setupCommunityLevels() { var fonts = $("#LevelsTable tr td:nth-of-type(2) font:nth-of-type(1)") $.each(fonts, function(key, font){ $(font).html($(font).html().replace(" 0 wins", " 0 wins")) }) $("#MainSiteContent").wrapInner("
      ") $("#MainSiteContent").wrapInner("
      ") $("#content").append(`

      Popular New Levels

      Most Liked Levels

      Most Difficult Levels

      Most Played Levels

      Most Records (Player)

      Most Records (Clan)

      Top Creators

      Your Levels

      This data is updated every 12 hours.

      Search Level

      `) $("#content").prepend(` `) $("h1").prependTo("#MainSiteContent") $("#content").tabs(); $("#sorted").tabs(); $(".searchLevelBtn").on("click", function() { searchLevel() }) $('.searchLevelInput').keyup(function(e){ if(e.keyCode == 13) { searchLevel() } }); addCSS(` .ui-tabs { border: none; background: none; } .ui-tabs-nav { background: none; border: none; border-bottom: 1px gray solid; } .striped th, .striped td { border-bottom: 1px gray solid; text-align: left; } `) var mainjsReady = $.Deferred(); $(".tab_hot").on("click", function() { $.when(mainjsReady).done(function () { $.each($("#tab_hot tr[data-levelid]:visible"), function(key, row) { var id = $(row).attr("data-levelid") loadLevelData(id) }) }) }) $(".tab_liked").on("click", function() { $.when(mainjsReady).done(function () { $.each($("#tab_liked tr[data-levelid]:visible"), function(key, row) { var id = $(row).attr("data-levelid") loadLevelData(id) }) }) }) $(".tab_hardest").on("click", function() { $.when(mainjsReady).done(function () { $.each($("#tab_hardest tr[data-levelid]:visible"), function(key, row) { var id = $(row).attr("data-levelid") loadLevelData(id) }) }) }) $(".tab_mostplayed").on("click", function() { $.when(mainjsReady).done(function () { $.each($("#tab_mostplayed tr[data-levelid]:visible"), function(key, row) { var id = $(row).attr("data-levelid") loadLevelData(id) }) }) }) $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?m=7`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { var levels = response.data $("#tab_hot").append(`
      `) $.each(levels, function (key, level) { $("#HotLevelsTable").append(renderLevelRow(level, key)) $(`[data-levelid='${level.levelId}']`).attr("data-rating", level.rating) }) $("#HotLevelsTable").append("") $("#loadMoreHot").on("click", function() { $.each($("#tab_hot tr:hidden:lt(5)"), function(key, row) { $(this).fadeIn() $.when(mainjsReady).done(function () { loadLevelData($(row).attr("data-levelid")) }) }) if($("#tab_hot tr:hidden:lt(5)").length == 0) { $("#loadMoreHot").remove(); } }) } }); $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?m=8`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { var levels = response.data $("#tab_liked").append(`
      `) $.each(levels, function (key, level) { $("#MostLikedLevels").append(renderLevelRow(level, key)) $(`[data-levelid='${level.levelId}']`).attr("data-rating", level.rating) }) $("#MostLikedLevels").append("") $("#loadMoreLiked").on("click", function() { $.each($("#tab_liked tr:hidden:lt(5)"), function(key, row) { $(this).fadeIn() $.when(mainjsReady).done(function () { loadLevelData($(row).attr("data-levelid")) }) }) if($("#tab_liked tr:hidden:lt(5)").length == 0) { $("#loadMoreLiked").remove(); } }) } }); $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?m=1`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { var levels = response.data $("#tab_hardest").append(`
      `) $.each(levels, function (key, level) { $("#HardestLevelsTable").append(renderLevelRow(level, key)) }) $("#HardestLevelsTable").append("") $("#loadMoreDifficult").on("click", function() { $.each($("#tab_hardest tr:hidden:lt(5)"), function(key, row) { $(this).fadeIn() $.when(mainjsReady).done(function () { loadLevelData($(row).attr("data-levelid")) }) }) if($("#tab_hardest tr:hidden:lt(5)").length == 0) { $("#loadMoreDifficult").remove(); } }) } }); $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?m=2`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { var levels = response.data $("#tab_mostplayed").append(`
      `) $.each(levels, function (key, level) { $("#MostPlayedLevelsTable").append(renderLevelRow(level, key)) }) $("#MostPlayedLevelsTable").append("") $("#loadMoreMostPlayed").on("click", function() { $.each($("#tab_mostplayed tr:hidden:lt(5)"), function(key, row) { $(this).fadeIn() $.when(mainjsReady).done(function () { loadLevelData($(row).attr("data-levelid")) }) }) if($("#tab_mostplayed tr:hidden:lt(5)").length == 0) { $("#loadMoreMostPlayed").remove(); } }) } }); $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?m=3`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { var players = response.data $("#tab_records_player").append(`
      `) $("#PlayerRecordsTable").prepend(`#NameNumber of Records`) $.each(players, function (key, player) { $("#PlayerRecordsTable").append(renderRecordPlayerRow(player, key)) }) } }); $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?m=4`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { var clans = response.data $("#tab_records_clan").append(`
      `) $("#ClanRecordsTable").prepend(`#NameNumber of Records`) $.each(clans, function (key, clan) { $("#ClanRecordsTable").append(renderClanRow(clan, key)) }) } }); $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?m=6`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { var players = response.data $("#tab_topCreators").append(`
      `) $("#CreatorsTable").prepend(`#NameTotal LikesTotal AttemptsTotal WinsOverall Win RateTotal Levels-`) $.each(players, function (key, player) { $("#CreatorsTable tbody").append(renderCreatorPlayerRow(player, key)) }) var dataTable = $$$("#CreatorsTable").DataTable({ paging: false, sDom: 't', }); } }); var id = $(".TopRightBar a:nth-of-type(2)").attr("href").match("[0-9]+")[0]; $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?p=${id}`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { var levels = response.data $("#tab_ownLevels").append(`
      `) $.each(levels, function (key, level) { $("#OwnLevelsTable").append(renderLevelRow(level, key, true)) }) } }); var div = $("
      ") var mainjs = ""; div.load('https://www.warlight.net/SinglePlayer/Level?ID=882053', function(){ mainjs = div.find("script:contains(MainJS.Init)").html() $.getScript("https://d2wcw7vp66n8b3.cloudfront.net/js/Release/wl.js?v=636045359309573936") .done(function() { eval(mainjs); $("#WaitDialogJSWhiteBox").remove(); $("#WaitDialogJSBacking").remove(); mainjsReady.resolve(); }) }); } function searchLevel() { var query = $(".searchLevelInput").val().toLowerCase(); $(".foundLevels *").remove(); $.ajax({ type: 'GET', url: `https://w115l144.hoststar.ch/wl/communityLevels.php?q=${query}`, dataType: 'jsonp', crossDomain: true, }).done(function (response) { if (response.data) { if(response.data.length > 0) { var levels = response.data $(".foundLevels").append(`
      `) $.each(levels, function (key, level) { $("#FoundLevelTable").append(renderLevelRow(level, key)) }) } else { $(".foundLevels").append(`No levels found!`) } } else { $(".foundLevels").append(`Error searching for levels`) } }); } function addCSS(css) { head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style'); style.type = 'text/css'; if (style.styleSheet) { style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } head.appendChild(style); } function decode (str) { var decoded = ""; try { decoded = decodeURIComponent((str + '') .replace(/%(?![\da-f]{2})/gi, function () { return '%25' }) .replace(/\+/g, '%20')) } catch(e) { decoded = unescape(str); } return decoded; return decodeURIComponent((str + '') .replace(/%(?![\da-f]{2})/gi, function () { // PHP tolerates poorly formed escape sequences return '%25' }) .replace(/\+/g, '%20')) } function renderRecordPlayerRow(player, key) { var rank = getRankHtml(key+1) return ` ${rank} ${player.recordClanId > 0 ? '' : ''} ${decode(player.recordHolderName)} ${player.numOfRecords} ` } function renderCreatorPlayerRow(player, key) { var id = player.createdByUrl.match(/[0-9]+/)[0] var rank = getRankHtml(key+1) return ` ${rank} ${player.creatorClanId > 0 ? '' : ''} ${decode(player.createdByName)} ${player.numOfTotalLikes} ${player.numOfTotalAttempts} ${player.numOfTotalWins} ${(player.numOfTotalWins / player.numOfTotalAttempts * 100).toFixed(2)}% ${player.numOfCreatedLevels} Show Levels ` } function renderClanRow(clan, key) { var rank = getRankHtml(key+1) return ` ${rank} ${decode(clan.recordClanName)} ${clan.numOfRecords} ` } function renderLevelRow(level, key, showAll) { return ` = 10 && showAll != true) ? 'style="display:none"' : ''}> ${key+1}. ${decode(level.name)}    ${level.likes} likes, ${level.wins} wins in ${level.attempts} attempts
      Created by ${level.creatorClanId > 0 ? '' : ''} ${decode(level.createdByName)}
      Record holder: ${level.recordClanId > 0 ? '' : ''} ${level.recordHolderName ? '' + decode(level.recordHolderName) + '' + getTurnText(level.recordHolderText) : 'None'}
      Win rate: ${level.percentage}%
      Play ` } function getTurnText(turns) { return ` in ${turns} ${turns > 1 ? 'turns' : 'turn'}` } function getRankHtml(rank) { if(rank == 1) { return `` } else if(rank == 2) { return `` } else if(rank == 3) { return `` } return rank; } function loadLevelData(id) { warlight_shared_viewmodels_spe_SPEManager.GetLevelResult(id, function (levelData) { if(levelData && levelData.WinCount > 0) { $(`[data-levelid="${id}"] td:nth-of-type(2)`).append(`You won ${getTurnText(levelData.WonInTurns)}`) $(`[data-levelid="${id}"] td:nth-of-type(1)`).append('') } $(`[data-levelid="${id}"]`).attr("data-levelid", "done") }) }