您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Trophymanager: transfer statistics of all seasons, the most expensive players, the most successful trades, revenue from the academy... A gift for Vasco Vitkovice and Tirana Smokers. In addition, the script also saves data for for TMVN League Transfer script (http://greasyfork.icu/en/scripts/416755).
当前为
// ==UserScript== // @name TMVN Club Transfer // @namespace https://trophymanager.com // @version 10 // @description Trophymanager: transfer statistics of all seasons, the most expensive players, the most successful trades, revenue from the academy... A gift for Vasco Vitkovice and Tirana Smokers. In addition, the script also saves data for for TMVN League Transfer script (http://greasyfork.icu/en/scripts/416755). // @include https://trophymanager.com/club/* // @include https://trophymanager.com/club/*/ // @exclude https://trophymanager.com/club/ // @exclude https://trophymanager.com/club/*/squad/ // @grant none // ==/UserScript== (function () { 'use strict'; const APPLICATION_PARAM = { DEFAULT_TOP_COUNT: 10, TOP_COUNT_LOCAL_STORAGE_KEY: "TMVN_CLUB_TRANSFER_TOP_COUNT", DEFAULT_SHOW_MODE: "11111", SHOW_MODE_LOCAL_STORAGE_KEY: "TMVN_CLUB_TRANSFER_SHOW_MODE", SEASON_SHOW: 2 } const CLASS_NAME = { SUMMARY_TRANSFER: 'tmvn_club_transfer_script_classname_summary_transfer', ACADEMY_REVENUE: 'tmvn_club_transfer_script_classname_academy_revenue' } const CONTROL_ID = { INPUT_SHOW_MODE: 'tmvn_club_transfer_script_input_show_mode', BUTTON_SHOW_MODE: 'tmvn_club_transfer_script_button_show_mode_set', INPUT_TOP_COUNT: 'tmvn_club_transfer_script_input_top_count', BUTTON_TOP_COUNT: 'tmvn_club_transfer_script_button_top_count_set', BUTTON_SHOW_ALL_SUMMARY_TRANSFER: 'tmvn_club_transfer_script_button_show_all_summary_transfer', BUTTON_SHOW_ALL_ACADEMY_REVENUE: 'tmvn_club_transfer_script_button_show_all_academy_revenue' } const APPLICATION_COLOR = { AVERAGE: 'Aqua', TOTAL: 'Yellow' } var topCount; var boughtArr = []; var soldArr = []; var tradeArr = []; var academySoldMap = new Map(); var academySummary = []; var transferSummary = []; var playerMap = new Map(); var loadCount = 0; var loadDone = false; var clubId = location.href.split('/')[4]; var seasonIds = []; $.ajaxSetup({ async: false }); $.ajax('https://trophymanager.com/history/club/transfers/' + clubId, { type: "GET", dataType: 'html', crossDomain: true, success: function (response) { let comboSeason = $('#stats_season', response)[0].options; for (let i = 0; i < comboSeason.length; i++) { seasonIds.push(comboSeason[i].value); } }, error: function (e) {} }); $.ajaxSetup({ async: true }); if (clubId != "" && seasonIds.length > 0) { seasonIds.forEach((seasonId) => { $.ajax('https://trophymanager.com/history/club/transfers/' + clubId + '/' + seasonId, { type: "GET", dataType: 'html', crossDomain: true, success: function (response) { let tbl = $('.zebra.hover', response); if (tbl.length != 2) { return; } let trBuy = $('tr', tbl[0]); let playerId, playerName, price; for (let i = 1; i < trBuy.length; i++) { let td = $('td', trBuy[i]); if (td.length < 4) continue; let a = $('a', td[0]); if (a.length == 0) continue; playerName = a[0].innerText; playerId = a[0].getAttribute('player_link'); price = td[3].innerText.replace(/,/g, ''); setMap(playerId, playerName, seasonId, price, 1); } let trSell = $('tr', tbl[1]); for (let i = 1; i < trSell.length; i++) { let td = $('td', trSell[i]); if (td.length < 4) continue; let a = $('a', td[0]); if (a.length == 0) continue; playerName = a[0].innerText; playerId = a[0].getAttribute('player_link'); price = td[3].innerText.replace(/,/g, ''); setMap(playerId, playerName, seasonId, price, 2); } let tdArr = $('.zebra.hover td', response); if (tdArr.length >= 3) { var bought, sold, balance, quantity, average; bought = Math.round(tdArr[tdArr.length - 3].children[0].innerText.replace(/,/g, '')); sold = Math.round(tdArr[tdArr.length - 2].children[0].innerText.replace(/,/g, '')); balance = sold - bought; if (bought > 0 && sold > 0) { quantity = (tdArr.length - 3) / 4; } else if ((bought == 0 && sold > 0) || (bought > 0 && sold == 0)) { quantity = Math.round((tdArr.length - 4) / 4); //bug when has sell/buy players but all prices = 0 --> round and accept wrong result } else if (bought == 0 && sold == 0) { quantity = 0; } if (quantity == 0) { average = '0.0'; } else { average = ((sold + bought) / quantity).toFixed(1); } transferSummary.push({ Season: seasonId, Bought: bought, Sold: sold, Balance: balance, Quantity: quantity, Average: average }); } loadCount++; if (loadCount >= seasonIds.length) { loadDone = true; } }, error: function (e) {} }); }); } var myInterval = setInterval(append, 1000); function append() { if (!loadDone) { return; } clearInterval(myInterval); processPlayer(); boughtArr.sort((a, b) => parseFloat(b.Price) - parseFloat(a.Price)); soldArr.sort((a, b) => parseFloat(b.Price) - parseFloat(a.Price)); tradeArr.sort((a, b) => parseFloat(b.Profit) - parseFloat(a.Profit)); transferSummary.sort(function (a, b) { return b.Season - a.Season }); //order an object array processAcademy(); if (!(boughtArr.length == 0 && soldArr.length == 0 && tradeArr.length == 0)) { present(); } try { $('.banner_placeholder.rectangle')[0].parentNode.removeChild($('.banner_placeholder.rectangle')[0]); } catch (err) {} } //buyOrSell: 1 - buy, 2 - sell function setMap(playerId, playerName, seasonId, price, buyOrSell) { let player; if (playerMap.has(playerId)) { player = playerMap.get(playerId); player.Transaction.push({ SeasonBS: seasonId + '.' + buyOrSell, Price: price }); try { if (player.Name.trim() == '') { player.Name = playerName; //fix bug of TM not show playername } } catch (e) {} } else { player = { Id: playerId, Name: playerName, Transaction: [{ SeasonBS: seasonId + '.' + buyOrSell, Price: price } ] } playerMap.set(playerId, player); } } function processPlayer() { for (let[key, value]of playerMap) { value.Transaction.sort((a, b) => parseFloat(a.SeasonBS) - parseFloat(b.SeasonBS)); let waitSellForTrade = false; let buyForTrade; value.Transaction.forEach(tran => { let temp = tran.SeasonBS.split('.'); if (temp[1] == 1) { boughtArr.push({ Id: value.Id, Name: value.Name, Season: temp[0], Price: tran.Price }); waitSellForTrade = true; buyForTrade = tran.Price; } else { if (waitSellForTrade) { tradeArr.push({ Id: value.Id, Name: value.Name, Buy: buyForTrade, Sell: tran.Price, Profit: (tran.Price - buyForTrade).toFixed(1) }); soldArr.push({ Id: value.Id, Name: value.Name, Season: temp[0], Price: tran.Price, YoungAcademy: false }); } else { soldArr.push({ Id: value.Id, Name: value.Name, Season: temp[0], Price: tran.Price, YoungAcademy: true }); if (academySoldMap.has(temp[0])) { let academySoldSeasonData = academySoldMap.get(temp[0]); academySoldSeasonData.Quantity++; academySoldSeasonData.Sold += parseFloat(tran.Price); academySoldMap.set(temp[0], academySoldSeasonData); } else { academySoldMap.set(temp[0], { Quantity: 1, Sold: parseFloat(tran.Price) }); } } waitSellForTrade = false; } }); } } function processAcademy() { seasonIds.forEach((seasonId) => { if (academySoldMap.has(seasonId)) { let season = academySoldMap.get(seasonId); let seasonAverage = (Math.round(season.Sold) / season.Quantity).toFixed(1); academySummary.push({ Season: seasonId, Quantity: season.Quantity, Sold: Math.round(season.Sold), Average: seasonAverage }); } else { academySummary.push({ Season: seasonId, Quantity: 0, Sold: 0, Average: '0.0' }); } }); } function present() { let clubTransfer = "<div class=\"box\">" + "<div class=\"box_head\">" + "<h2 class=\"std\">Club Transfer (M)</h2>" + "</div>" + "<div class=\"box_body\">" + "<div class=\"box_shadow\"></div>" + "<h3>TOP BOUGHT</h3>" + "<div id=\"topBought_content\" class=\"content_menu\"></div>" + "<h3>TOP SOLD</h3>" + "<div id=\"topSold_content\" class=\"content_menu\"></div>" + "<h3>TOP TRADE PROFIT</h3>" + "<div id=\"topTrade_content\" class=\"content_menu\"></div>" + "<h3>SUMMARY TRANSFER</h3>" + "<div id=\"summaryTransfer_content\" class=\"content_menu\"></div>" + "<h3>ACADEMY REVENUE</h3>" + "<div id=\"academyRevenue_content\" class=\"content_menu\"></div>" + "<h3>CONFIG</h3>" + "<span style='display: inline-block;'><input id='" + CONTROL_ID.INPUT_SHOW_MODE + "' type='text' class='embossed' style='min-width: 100px; line-height: 100%; padding: 3px 3px 4px 3px;' placeholder='Show mode'></span>" + "<span id='" + CONTROL_ID.BUTTON_SHOW_MODE + "' class='button' style='margin-left: 3px;'><span class='button_border'>Set Show Mode</span></span>" + "<span style='display: inline-block;'><input id='" + CONTROL_ID.INPUT_TOP_COUNT + "' type='text' class='embossed' style='min-width: 100px; line-height: 100%; padding: 3px 3px 4px 3px;' placeholder='Top count'></span>" + "<span id='" + CONTROL_ID.BUTTON_TOP_COUNT + "' class='button' style='margin-left: 3px;'><span class='button_border'>Set Top Count</span></span>" + "</div>" + "<div class=\"box_footer\">" + "<div></div>" + "</div>" + "</div>"; $(".column3_a").append(clubTransfer); document.getElementById(CONTROL_ID.BUTTON_SHOW_MODE).addEventListener('click', (e) => { setShowMode(); }); let showMode = localStorage.getItem(APPLICATION_PARAM.SHOW_MODE_LOCAL_STORAGE_KEY); if (showMode == null || showMode == "") { showMode = APPLICATION_PARAM.DEFAULT_SHOW_MODE; } $('#' + CONTROL_ID.INPUT_SHOW_MODE).val(showMode); document.getElementById(CONTROL_ID.BUTTON_TOP_COUNT).addEventListener('click', (e) => { setTopCount(); }); topCount = localStorage.getItem(APPLICATION_PARAM.TOP_COUNT_LOCAL_STORAGE_KEY); if (topCount == null || topCount == "") { topCount = APPLICATION_PARAM.DEFAULT_TOP_COUNT; } $('#' + CONTROL_ID.INPUT_TOP_COUNT).val(topCount); let invidualMode = showMode.split(""); if (invidualMode[0] == "1") { showTopBought(); } if (invidualMode[1] == "1") { showTopSold(); } if (invidualMode[2] == "1") { showTopTradeProfit(); } if (invidualMode[3] == "1") { showSummaryTransfer(); } if (invidualMode[4] == "1") { showAcademyRevenue(); } } function showTopBought() { if (boughtArr.length > 0) { var topBought_content = "<table>" + "<tr style='color:Orange;'><th align='right'>#</th><th>Player</th><th align='right'>SS</th><th align='right'>Price</th></tr>"; let rowCount = 0; for (let i = 0; i < boughtArr.length && i < topCount; i++) { rowCount++; let classOdd = ""; if ((rowCount % 2) == 1) { classOdd = "class='odd'"; } topBought_content += '<tr ' + classOdd + '><td align="right">' + (i + 1) + '. ' + '</td><td>' + '<span onclick = \"window.open(\'https:\/\/trophymanager.com\/players\/' + boughtArr[i].Id + '\')\">' + boughtArr[i].Name + '</span>' + '</td><td align="right">' + boughtArr[i].Season + '</td><td align="right">' + boughtArr[i].Price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td></tr>'; } topBought_content += "</table>"; $("#topBought_content").append(topBought_content); } } function showTopSold() { if (soldArr.length > 0) { var topSold_content = "<table>" + "<tr style='color:Orange;'><th align='right'>#</th><th>Player</th><th align='right'>SS</th><th align='right'>Price</th></tr>"; let rowCount = 0; for (let i = 0; i < soldArr.length && i < topCount; i++) { rowCount++; let classOdd = ""; if ((rowCount % 2) == 1) { classOdd = "class='odd'"; } if (soldArr[i].YoungAcademy) { topSold_content += "<tr style='color:Yellow;' " + classOdd + ">"; } else { topSold_content += "<tr " + classOdd + ">"; } topSold_content += '<td align="right">' + (i + 1) + '. ' + '</td><td>' + '<span onclick = \"window.open(\'https:\/\/trophymanager.com\/players\/' + soldArr[i].Id + '\')\">' + soldArr[i].Name + '</span>' + '</td><td align="right">' + soldArr[i].Season + '</td><td align="right">' + soldArr[i].Price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td></tr>'; } topSold_content += "</table>"; $("#topSold_content").append(topSold_content); } } function showTopTradeProfit() { if (tradeArr.length > 0) { var topTrade_content = "<table>" + "<tr style='color:Orange;'><th align='right'>#</th><th>Player</th><th align='right'>Buy</th><th align='right'>Sell</th><th align='right'>Profit</th></tr>"; let rowCount = 0; for (let i = 0; i < tradeArr.length && i < topCount; i++) { rowCount++; let classOdd = ""; if ((rowCount % 2) == 1) { classOdd = "class='odd'"; } topTrade_content += '<tr ' + classOdd + '><td align="right">' + (i + 1) + '. ' + '</td><td>' + '<span onclick = \"window.open(\'https:\/\/trophymanager.com\/players\/' + tradeArr[i].Id + '\')\">' + tradeArr[i].Name + '</span>' + '</td><td align="right">' + tradeArr[i].Buy.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + tradeArr[i].Sell.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + tradeArr[i].Profit.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td></tr>'; } topTrade_content += "</table>"; $("#topTrade_content").append(topTrade_content); } } function showSummaryTransfer() { let summaryTransfer_content = "<table>" + "<tr style='color:Orange;'><th align='right'>SS</th><th align='right'>Buy</th><th align='right'>Sell</th><th align='right'>+-</th><th align='right'>#</th><th align='right'>Avg</th></tr>"; let totalBought = 0, totalSold = 0, totalQuantity = 0; let rowCount = 0; let seasonTrArr = []; transferSummary.forEach((summary) => { rowCount++; let trClass = "", display = ""; if (rowCount <= APPLICATION_PARAM.SEASON_SHOW) { if ((rowCount % 2) == 1) { trClass = "class='odd'"; } } else { display = "style='display:none'"; if ((rowCount % 2) == 1) { trClass = "class='odd " + CLASS_NAME.SUMMARY_TRANSFER + "'"; } else { trClass = "class='" + CLASS_NAME.SUMMARY_TRANSFER + "'"; } } let seasonTr = '<tr ' + trClass + ' ' + display + '><td align="right">' + summary.Season + '</td><td align="right">' + summary.Bought.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + summary.Sold.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + summary.Balance.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + summary.Quantity + '</td><td align="right">' + summary.Average.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td></tr>'; seasonTrArr.push(seasonTr); totalBought += summary.Bought; totalSold += summary.Sold; totalQuantity += summary.Quantity; }); summaryTransfer_content += '<tr class="odd" style="color:' + APPLICATION_COLOR.AVERAGE + ';"><td align="right">Average</td><td align="right">' + (totalBought / transferSummary.length).toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + (totalSold / transferSummary.length).toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + (Math.round(totalSold / transferSummary.length) - Math.round(totalBought / transferSummary.length)).toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + (totalQuantity / transferSummary.length).toFixed(0) + '</td><td align="right">' + (totalQuantity > 0 ? ((totalSold + totalBought) / totalQuantity).toFixed(1).replace(/\B(?=(\d{3})+(?!\d))/g, ",") : 0) + '</td></tr>'; summaryTransfer_content += '<tr style="color:' + APPLICATION_COLOR.TOTAL + ';"><td align="right">Total</td><td align="right">' + totalBought.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + totalSold.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + (totalSold - totalBought).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + totalQuantity.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + '</td></tr>'; seasonTrArr.forEach((seasonTr) => { summaryTransfer_content += seasonTr; }); if (rowCount > APPLICATION_PARAM.SEASON_SHOW) { let buttonLabel = "Show all season " + seasonIds[seasonIds.length - 1] + " - " + seasonIds[0]; summaryTransfer_content += "<tr align='center'><td colspan='6'>" + "<span id='" + CONTROL_ID.BUTTON_SHOW_ALL_SUMMARY_TRANSFER + "' class='button' style='margin-left: 3px;'><span class='button_border'>" + buttonLabel + "</span></span>" + "</td></tr>"; } summaryTransfer_content += "</table>"; $("#summaryTransfer_content").append(summaryTransfer_content); if (rowCount > APPLICATION_PARAM.SEASON_SHOW) { document.getElementById(CONTROL_ID.BUTTON_SHOW_ALL_SUMMARY_TRANSFER).addEventListener('click', (e) => { showAll(CLASS_NAME.SUMMARY_TRANSFER, CONTROL_ID.BUTTON_SHOW_ALL_SUMMARY_TRANSFER); }); } localStorage.setItem(clubId + "_AVERAGE_TRANSFER", JSON.stringify({ "Time": new Date(), "Bought": Number((totalBought / transferSummary.length).toFixed(0)), "Sold": Number((totalSold / transferSummary.length).toFixed(0)), "Balance": Math.round(totalSold / transferSummary.length) - Math.round(totalBought / transferSummary.length), "Quantity": Number((totalQuantity / transferSummary.length).toFixed(0)), "Average": totalQuantity > 0 ? Number(((totalSold + totalBought) / totalQuantity).toFixed(1)) : 0, "SeasonCount": transferSummary.length })); } function showAcademyRevenue() { let academyRevenue_content = "<table>" + "<tr style='color:Orange;'><th align='right'>SS</th><th align='right'>Sell</th><th align='right'>#</th><th align='right'>Avg</th></tr>"; let totalSold = 0, totalQuantity = 0; let rowCount = 0; let seasonTrArr = []; academySummary.forEach((summary) => { rowCount++; let trClass = "", display = ""; if (rowCount <= APPLICATION_PARAM.SEASON_SHOW) { if ((rowCount % 2) == 1) { trClass = "class='odd'"; } } else { display = "style='display:none'"; if ((rowCount % 2) == 1) { trClass = "class='odd " + CLASS_NAME.ACADEMY_REVENUE + "'"; } else { trClass = "class='" + CLASS_NAME.ACADEMY_REVENUE + "'"; } } let seasonTr = '<tr ' + trClass + ' ' + display + '><td align="right">' + summary.Season + '</td><td align="right">' + summary.Sold.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + summary.Quantity + '</td><td align="right">' + summary.Average.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td></tr>'; seasonTrArr.push(seasonTr); totalSold += summary.Sold; totalQuantity += summary.Quantity; }); academyRevenue_content += '<tr class="odd" style="color:' + APPLICATION_COLOR.AVERAGE + ';"><td align="right">Average</td><td align="right">' + (totalSold / academySummary.length).toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + (totalQuantity / academySummary.length).toFixed(0) + '</td><td align="right">' + (totalQuantity > 0 ? (totalSold / totalQuantity).toFixed(1).replace(/\B(?=(\d{3})+(?!\d))/g, ",") : 0) + '</td></tr>'; academyRevenue_content += '<tr style="color:' + APPLICATION_COLOR.TOTAL + ';"><td align="right">Total</td><td align="right">' + totalSold.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + totalQuantity.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '</td><td align="right">' + '</td></tr>'; seasonTrArr.forEach((seasonTr) => { academyRevenue_content += seasonTr; }); if (rowCount > APPLICATION_PARAM.SEASON_SHOW) { let buttonLabel = "Show all season " + seasonIds[seasonIds.length - 1] + " - " + seasonIds[0]; academyRevenue_content += "<tr align='center'><td colspan='4'>" + "<span id='" + CONTROL_ID.BUTTON_SHOW_ALL_ACADEMY_REVENUE + "' class='button' style='margin-left: 3px;'><span class='button_border'>" + buttonLabel + "</span></span>" + "</td></tr>"; } academyRevenue_content += "</table>"; $("#academyRevenue_content").append(academyRevenue_content); if (rowCount > APPLICATION_PARAM.SEASON_SHOW) { document.getElementById(CONTROL_ID.BUTTON_SHOW_ALL_ACADEMY_REVENUE).addEventListener('click', (e) => { showAll(CLASS_NAME.ACADEMY_REVENUE, CONTROL_ID.BUTTON_SHOW_ALL_ACADEMY_REVENUE); }); } } function showAll(className, controlId) { let trArr = $('.' + className); for (let i = 0; i < trArr.length; i++) { trArr[i].style = 'display:""'; } $('#' + controlId)[0].style = 'display:none'; } function setShowMode() { let showMode = $('#' + CONTROL_ID.INPUT_SHOW_MODE)[0].value; if (showMode == '') { localStorage.removeItem(APPLICATION_PARAM.SHOW_MODE_LOCAL_STORAGE_KEY); } else if (!isValidShowMode(showMode)) { alert('Allowable show mode value has the form XXXXX where X is 0 or 1'); } else { localStorage.setItem(APPLICATION_PARAM.SHOW_MODE_LOCAL_STORAGE_KEY, showMode); alert('Set successful, please refresh'); } } function isValidShowMode(mode) { let arr = mode.split(''); if (arr.length != 5) return false; for (let i = 0; i < arr.length; i++) { if (arr[i] != '0' && arr[i] != '1') { return false; } } return true; } function setTopCount() { let topCount = $('#' + CONTROL_ID.INPUT_TOP_COUNT)[0].value; if (topCount == '') { localStorage.removeItem(APPLICATION_PARAM.TOP_COUNT_LOCAL_STORAGE_KEY); } else if (isNaN(topCount) || topCount <= 0) { alert('Top count must be positive integer'); } else { localStorage.setItem(APPLICATION_PARAM.TOP_COUNT_LOCAL_STORAGE_KEY, topCount); alert('Set successful, please refresh'); } } })();