IPC GUI Update Nr.10 (#858)

* Typo

* Include every line in commit

* Add tooltips to buttons

* Add "disconnected"-Bot Status Button in left sidebar

* Fix bug in totalTimeRemaining

* Misc

* Implement "GET, DELETE /Api/GamesToRedeemInBackground/{Bot}" Part1

* Misc

* Misc

* Misc

* Use modified adminlte.min.js

* Remove "expandOnHover" from left sidebar

* Fix

* Add build variant to footer

* Remove tooltips

* Change auto scroll icon

* Cleanup

* Add live search for dropdowns

* Misc

* Misc

* Add wiki parser for commands

* Misc

* Add nightmode support for new dropdowns

* Fix
This commit is contained in:
SKANKHUNTER
2018-07-31 20:43:27 +02:00
committed by Łukasz Domeradzki
parent 97f826b7e2
commit d10b60eadf
11 changed files with 262 additions and 207 deletions

File diff suppressed because one or more lines are too long

View File

@@ -102,8 +102,7 @@ button.bot-resumed:hover {
margin-right: 0px; margin-right: 0px;
} }
.info-overview { .info-overview {
pointer-events: none;
cursor: default; cursor: default;
} }
@@ -191,8 +190,11 @@ button.bot-resumed:hover {
height: 250px !important; height: 250px !important;
} }
} }
.sidebar-menu li.header { .sidebar-menu li.header {
text-transform: uppercase; text-transform: uppercase;
} }
.lockscreen-image{left:-5px} .lockscreen-image{
left:-5px
}

View File

@@ -52,7 +52,7 @@
</div> </div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/js/adminlte.min.js"></script> <script src="js/adminlte.min.js"></script>
<script> <script>
$(function () { $(function () {
'use strict'; 'use strict';

1
ArchiSteamFarm/www/js/adminlte.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
//#region Setup //#region Setup
const tmpIPCPassword = get('IPCPassword'); const tmpIPCPassword = get('IPCPassword'),
vGUI = '0.1';
if (tmpIPCPassword) { if (tmpIPCPassword) {
$.ajaxSetup({ $.ajaxSetup({
@@ -30,11 +31,12 @@ $.ajax({
url: '/Api/ASF', url: '/Api/ASF',
type: 'GET', type: 'GET',
success: function (data) { success: function (data) {
var ver = data['Result'].Version, var v = data['Result'].Version,
verNr = ver.Major + '.' + ver.Minor + '.' + ver.Build + '.' + ver.Revision; vNr = v.Major + '.' + v.Minor + '.' + v.Build + '.' + v.Revision,
build = data['Result'].BuildVariant;
$('#version').text(verNr); $('#version').text(vNr + ' - ' + build + ' - ' + vGUI);
$('#changelog').attr('href', 'https://github.com/JustArchi/ArchiSteamFarm/releases/tag/' + verNr); $('#changelog').attr('href', 'https://github.com/JustArchi/ArchiSteamFarm/releases/tag/' + vNr);
} }
}); });
//#endregion Footer //#endregion Footer
@@ -42,6 +44,7 @@ $.ajax({
//#region Bot Status Buttons //#region Bot Status Buttons
function displayBotStatus() { function displayBotStatus() {
var offline = 0, var offline = 0,
disconnected = 0,
online = 0, online = 0,
farming = 0; farming = 0;
@@ -54,13 +57,18 @@ function displayBotStatus() {
for (var i = 0; i < json.length; i++) { for (var i = 0; i < json.length; i++) {
var obj = json[i], var obj = json[i],
KeepRunning = obj.KeepRunning, KeepRunning = obj.KeepRunning,
TimeRemaining = obj.CardsFarmer.TimeRemaining; TimeRemaining = obj.CardsFarmer.TimeRemaining,
SteamID = obj.SteamID;
if (KeepRunning === false) { if (KeepRunning === false) {
offline++; offline++;
} else { } else {
if (TimeRemaining === '00:00:00') { if (TimeRemaining === '00:00:00') {
online++; if (SteamID === 0) {
disconnected++;
} else {
online++;
}
} else { } else {
farming++; farming++;
} }
@@ -68,6 +76,12 @@ function displayBotStatus() {
} }
$('#offlineBots').text(offline); $('#offlineBots').text(offline);
if (disconnected > 0) {
$('#disconnectedBots').show();
$('#disconnectedBots').text(disconnected);
} else {
$('#disconnectedBots').hide();
}
$('#onlineBots').text(online); $('#onlineBots').text(online);
$('#farmingBots').text(farming); $('#farmingBots').text(farming);
} }
@@ -129,8 +143,6 @@ window.setInterval(function () { displayUptime(); }, 60000);
//#region Commands Page //#region Commands Page
var $cmdInput = $('#commandInput'); var $cmdInput = $('#commandInput');
function fillCommand(cmd) { $cmdInput.val(cmd + ' '); }
function fillBots(bot) { $cmdInput.val($cmdInput.val() + bot); }
function getDateAndTime() { function getDateAndTime() {
var date = new Date(); var date = new Date();
@@ -228,7 +240,7 @@ function generateConfigHTML(mode) {
switch (value) { switch (value) {
case 'System.Boolean': case 'System.Boolean':
checkBoxes += '<div class="">' checkBoxes += '<div class="">'
+ '<button title="Toggle ' + key + '" type="button" data-type="' + value + '" class="btn btn-box-tool text-grey" id="' + key + '">' + '<button type="button" data-type="' + value + '" class="btn btn-box-tool text-grey" id="' + key + '">'
+ '<i id="ico' + key + '" class="fas fa-toggle-on fa-2x fa-fw fa-rotate-180" ></i ></button>' + '<i id="ico' + key + '" class="fas fa-toggle-on fa-2x fa-fw fa-rotate-180" ></i ></button>'
+ readableKey + readableKey
+ '</div>'; + '</div>';
@@ -852,17 +864,19 @@ $(function () {
src: '../img/flags/' + tmpLangCode + '.gif' src: '../img/flags/' + tmpLangCode + '.gif'
}); });
//rework this whole part (add saving "never show again")
//fix translation not working
if (tmpLangMissing > 0) { if (tmpLangMissing > 0) {
var percentage = (tmpLangMissing * 100 / tmpLangTotal).toFixed(0), var percentage = (tmpLangMissing * 100 / tmpLangTotal).toFixed(0),
//infoText = $.i18n('global-language-info', percentage); //Fix this //infoText = $.i18n('global-language-info', percentage); //Fix this
infoText = percentage + "% of this language is not translated!"; infoText = percentage + "% of this language is not translated!";
$('#languageInfo').html('<div class="alert alert-warning alert-dismissible">' $('#languageInfo').html('<div class="alert alert-warning alert-dismissible">'
+ '<button data-i18n="title-global-never" title="Never show again" type="button" class="close" data-dismiss="alert" aria-hidden="true">x</button>' //+ '<button title="Never show again" type="button" class="close" data-dismiss="alert" aria-hidden="true">x</button>'
+ infoText + infoText
+ '</div>'); + '</div>');
} else { } else {
$('#languageInfo').text(''); $('#languageInfo').text('');
} }
$('#languages').collapse('hide'); $('#languages').collapse('hide');
} }
@@ -919,7 +933,7 @@ $(function () {
// Boxed Layout // Boxed Layout
+ '<div class="form-group hidden-xs hidden-sm">' + '<div class="form-group hidden-xs hidden-sm">'
+ '<label class="control-sidebar-subheading">' + '<label class="control-sidebar-subheading">'
+ '<button data-i18n="title-global-boxed" title="Toggle boxed layout" type="button" class="btn btn-box-tool pull-right text-grey" id="toggleBoxed"><i id="iconBoxed" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button>' + '<button type="button" class="btn btn-box-tool pull-right text-grey" id="toggleBoxed"><i id="iconBoxed" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button>'
+ '<i class="far fa-square fa-fw"></i> <span data-i18n="global-boxed">Boxed Layout</span>' + '<i class="far fa-square fa-fw"></i> <span data-i18n="global-boxed">Boxed Layout</span>'
+ '</label>' + '</label>'
+ '<p data-i18n="global-boxed-description">Toggle the boxed layout</p>' + '<p data-i18n="global-boxed-description">Toggle the boxed layout</p>'
@@ -927,7 +941,7 @@ $(function () {
// Nightmode // Nightmode
+ '<div class="form-group">' + '<div class="form-group">'
+ '<label class="control-sidebar-subheading">' + '<label class="control-sidebar-subheading">'
+ '<button data-i18n="title-global-nightmode" title="Toggle nightmode" type="button" class="btn btn-box-tool pull-right text-grey" id="toggleNightmode"><i id="iconNightmode" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button>' + '<button type="button" class="btn btn-box-tool pull-right text-grey" id="toggleNightmode"><i id="iconNightmode" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button>'
+ '<i class="fas fa-moon fa-fw"></i> <span data-i18n="global-nightmode">Nightmode</span>' + '<i class="fas fa-moon fa-fw"></i> <span data-i18n="global-nightmode">Nightmode</span>'
+ '</label>' + '</label>'
+ '<p data-i18n="global-nightmode-description">Toggle the nightmode</p>' + '<p data-i18n="global-nightmode-description">Toggle the nightmode</p>'
@@ -969,14 +983,14 @@ $(function () {
var language = availableLanguages[i], var language = availableLanguages[i],
langCode = (language === 'strings') ? 'us' : language.substr(language.length - 2).toLowerCase(); langCode = (language === 'strings') ? 'us' : language.substr(language.length - 2).toLowerCase();
$languagesList.append('<button data-i18n="title-global-language" title="Change language" type="button" class="btn btn-box-tool language" data-locale="' + language + '"><img src="../img/flags/' + langCode + '.gif" alt="' + langCode + '"></button>'); $languagesList.append('<button type="button" class="btn btn-box-tool language" data-locale="' + language + '"><img src="../img/flags/' + langCode + '.gif" alt="' + langCode + '"></button>');
} }
$layoutSettings.append('<h4 class="control-sidebar-heading" data-i18n="global-language">Language</h4>' $layoutSettings.append('<h4 class="control-sidebar-heading" data-i18n="global-language">Language</h4>'
+ '<div id="languageInfo"></div>' + '<div id="languageInfo"></div>'
+ '<div class="form-group">' + '<div class="form-group">'
+ '<label class="control-sidebar-subheading">' + '<label class="control-sidebar-subheading">'
+ '<button data-i18n="title-global-language" title="Change language" type="button" class="btn btn-box-tool pull-right" data-toggle="collapse" data-target="#languages"><span data-i18n="global-change">Change</span> <i class="fas fa-caret-down"></i></button>' + '<button type="button" class="btn btn-box-tool pull-right" data-toggle="collapse" data-target="#languages"><span data-i18n="global-change-language">Change language</span> <i class="fas fa-caret-down"></i></button>'
+ '<img id="currentLanguage" src="../img/flags/us.gif" alt="us">' + '<img id="currentLanguage" src="../img/flags/us.gif" alt="us">'
+ '</label>' + '</label>'
+ '</div>' + '</div>'

View File

@@ -22,8 +22,10 @@
"bots-pause-success": "<$1> has been paused.", "bots-pause-success": "<$1> has been paused.",
"bots-recover-files": "You will not be able to recover any bot files!", "bots-recover-files": "You will not be able to recover any bot files!",
"bots-redeem-button": "Add keys!", "bots-redeem-button": "Add keys!",
"bots-redeem-confirm": "$1 {{PLURAL:$1|Key|Keys}} have been added to <$2> background redeemer.", "bots-redeem-confirm": "$1 {{PLURAL:$1|Key has|Keys have}} been added to <$2> background redeemer.",
"bots-redeem-title": "Enter keys!", "bots-redeem-title": "Background games redeemer",
"bots-redeem-add-title": "Add keys",
"bots-redeem-view-title": "View keys",
"bots-resume-success": "<$1> has been resumed.", "bots-resume-success": "<$1> has been resumed.",
"bots-simple": "Simple farming info", "bots-simple": "Simple farming info",
"bots-start-success": "<$1> has been started.", "bots-start-success": "<$1> has been started.",
@@ -52,7 +54,7 @@
"global-bots": "Bots", "global-bots": "Bots",
"global-boxed": "Boxed Layout", "global-boxed": "Boxed Layout",
"global-boxed-description": "Toggle the boxed layout", "global-boxed-description": "Toggle the boxed layout",
"global-change": "Change", "global-change-language": "Change language",
"global-changelog": "Changelog", "global-changelog": "Changelog",
"global-commands": "Commands", "global-commands": "Commands",
"global-config": "Config", "global-config": "Config",
@@ -82,23 +84,6 @@
"placeholder-auth": "Type your password...", "placeholder-auth": "Type your password...",
"placeholder-commands": "Type command...", "placeholder-commands": "Type command...",
"placeholder-generator": "Name", "placeholder-generator": "Name",
"title-bots-delete": "Toggle delete button", "title-commands": "Commands",
"title-bots-delete-this": "Delete this bot", "title-bots": "Bots"
"title-bots-games": "Add keys to GamesToRedeemInBackground",
"title-bots-key": "Toggle key button",
"title-bots-more": "Show more infos",
"title-bots-offline": "Toggle offline bots",
"title-bots-inactive": "Toggle inactive bots",
"title-bots-online": "Toggle online bots",
"title-bots-refresh": "Refresh content",
"title-bots-simple": "Toggle simple farming info",
"title-commands-auto-clear": "Toggle auto clear",
"title-commands-send": "Send command",
"title-commands-show-all-bots": "Show all bots",
"title-commands-show-all-commands": "Show all commands",
"title-global-boxed": "Toggle boxed layout",
"title-global-language": "Change language",
"title-global-never": "Never show again",
"title-global-nightmode": "Toggle nightmode",
"title-log-auto-scroll": "Toggle auto scroll"
} }

View File

@@ -53,6 +53,7 @@
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span> <i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status"> <span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small> <small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small> <small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small> <small class="label pull-right bg-olive" id="farmingBots">0</small>
</span> </span>
@@ -65,16 +66,16 @@
<li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li> <li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li> <li class="header" data-i18n="global-information">Information</li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span> <i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small> <small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span> </span>
</a> </a>
</li> </li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span> <i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small> <small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
@@ -110,20 +111,20 @@
<span data-i18n="bots-hide">Hide bots</span> <span class="fas fa-caret-down"></span> <span data-i18n="bots-hide">Hide bots</span> <span class="fas fa-caret-down"></span>
</button> </button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><button data-i18n="title-bots-online" title="Toggle online bots" type="button" class="btn btn-box-tool text-grey" id="chkHideOnlineBots"><i id="iconHideOnlineBots" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-hide-online">Online bots</span></li> <li><button type="button" class="btn btn-box-tool text-grey" id="chkHideOnlineBots"><i id="iconHideOnlineBots" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-hide-online">Online bots</span></li>
<li><button data-i18n="title-bots-inactive" title="Toggle inactive bots" type="button" class="btn btn-box-tool text-grey" id="chkHideInactiveBots"><i id="iconHideInactiveBots" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-hide-inactive">Inactive bots</span></li> <li><button type="button" class="btn btn-box-tool text-grey" id="chkHideInactiveBots"><i id="iconHideInactiveBots" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-hide-inactive">Inactive bots</span></li>
<li><button data-i18n="title-bots-offline" title="Toggle offline bots" type="button" class="btn btn-box-tool text-grey" id="chkHideOfflineBots"><i id="iconHideOfflineBots" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-hide-offline">Offline bots</span></li> <li><button type="button" class="btn btn-box-tool text-grey" id="chkHideOfflineBots"><i id="iconHideOfflineBots" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-hide-offline">Offline bots</span></li>
</ul> </ul>
</div> </div>
<button data-i18n="title-bots-refresh" title="Refresh content" type="button" class="btn btn-box-tool" id="btnRefreshContent"><i class="fas fa-sync"></i></button> <button type="button" class="btn btn-box-tool" id="btnRefreshContent"><i class="fas fa-sync"></i></button>
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"> <button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
<i class="fas fa-wrench"></i> <i class="fas fa-wrench"></i>
</button> </button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><button data-i18n="title-bots-key" title="Toggle key button" type="button" class="btn btn-box-tool text-grey" id="chkShowKeyButton"><i id="iconShowKeyButton" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-key">Show key button</span></li> <li><button type="button" class="btn btn-box-tool text-grey" id="chkShowKeyButton"><i id="iconShowKeyButton" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-key">Show key button</span></li>
<li><button data-i18n="title-bots-delete" title="Toggle delete button" type="button" class="btn btn-box-tool text-grey" id="chkShowDeleteButton"><i id="iconShowDeleteButton" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-delete">Show delete button</span></li> <li><button type="button" class="btn btn-box-tool text-grey" id="chkShowDeleteButton"><i id="iconShowDeleteButton" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-delete">Show delete button</span></li>
<li><button data-i18n="title-bots-simple" title="Toggle simple farming info" type="button" class="btn btn-box-tool text-grey" id="chkSimpleFarmingInfo"><i id="iconSimpleFarmingInfo" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-simple">Simple farming info</span></li> <li><button type="button" class="btn btn-box-tool text-grey" id="chkSimpleFarmingInfo"><i id="iconSimpleFarmingInfo" class="fas fa-toggle-on fa-2x fa-rotate-180"></i></button><span data-i18n="bots-simple">Simple farming info</span></li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -156,7 +157,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/js/adminlte.min.js"></script> <script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/humanize-duration/3.12.1/humanize-duration.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/humanize-duration/3.12.1/humanize-duration.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
@@ -382,14 +383,14 @@
var json = data['Result'], var json = data['Result'],
steamAvatarBaseURL = 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/', steamAvatarBaseURL = 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/',
steamAvatarDefault = 'fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg', steamAvatarDefault = 'fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg',
steamGameBaseURL = 'http://cdn.edgecast.steamstatic.com/steam/apps/', steamGameBaseURL = 'https://steamcdn-a.akamaihd.net/steam/apps/',
totalGamesRemaining = 0, totalGamesRemaining = 0,
totalTimeRemaining = '00:00:00', totalTimeRemaining = 0,
totalCardsRemaining = 0, totalCardsRemaining = 0,
farmingIsActive = false; farmingIsActive = false;
var deleteBotHTML = tmpShowDeleteButton === 'true' ? '<button data-i18n="title-bots-delete-this" title="Delete this bot" type="button" class="btn btn-box-tool" data-command="deleteBot"><i class="far fa-trash-alt"></i></button>' : ''; var deleteBotHTML = tmpShowDeleteButton === 'true' ? '<button type="button" class="btn btn-box-tool" data-command="deleteBot"><i class="far fa-trash-alt"></i></button>' : '';
var redeemGamesHTML = tmpShowKeyButton === 'true' ? '<button data-i18n="title-bots-games" title="Add keys to GamesToRedeemInBackground" type="button" class="btn btn-box-tool" data-command="redeemGames"><i class="fas fa-key"></i></button>' : ''; var redeemGamesHTML = tmpShowKeyButton === 'true' ? '<button type="button" class="btn btn-box-tool" data-command="redeemGames"><i class="fas fa-key"></i></button>' : '';
for (var i = 0; i < json.length; i++) { for (var i = 0; i < json.length; i++) {
var obj = json[i], var obj = json[i],
@@ -420,13 +421,13 @@
if (KeepRunning === false) { // Bot is offline if (KeepRunning === false) { // Bot is offline
if (tmpHideOfflineBots === 'true') continue; if (tmpHideOfflineBots === 'true') continue;
boxColorHTML = 'box-gray'; boxColorHTML = 'box-gray';
startOrStopHTML = '<button title="Start <' + BotName + '>" type="button" class="btn btn-box-tool bot-stopped" data-command="startBot"><i class="fas fa-power-off"></i></button>'; startOrStopHTML = '<button type="button" class="btn btn-box-tool bot-stopped" data-command="startBot"><i class="fas fa-power-off"></i></button>';
} else { // Bot is online } else { // Bot is online
if (tmpHideOnlineBots === 'true') continue; if (tmpHideOnlineBots === 'true') continue;
boxColorHTML = 'box-warning'; boxColorHTML = 'box-warning';
startOrStopHTML = '<button title="Stop <' + BotName + '>" type="button" class="btn btn-box-tool bot-started" data-command="stopBot"><i class="fas fa-power-off"></i></button>'; startOrStopHTML = '<button type="button" class="btn btn-box-tool bot-started" data-command="stopBot"><i class="fas fa-power-off"></i></button>';
var TimeRemaining = obj.CardsFarmer.TimeRemaining; var TimeRemaining = moment.duration(obj.CardsFarmer.TimeRemaining).asMilliseconds();
if (SteamID === 0) { // Bot is not connected to steam if (SteamID === 0) { // Bot is not connected to steam
boxColorHTML = 'box-danger'; boxColorHTML = 'box-danger';
@@ -435,7 +436,7 @@
+ '<img src="' + avatarHTML + '">' + '<img src="' + avatarHTML + '">'
+ '</a>'; + '</a>';
if (TimeRemaining !== '00:00:00') { // Bot is farming if (TimeRemaining !== 0) { // Bot is farming
var GamesToFarm = obj.CardsFarmer.GamesToFarm, var GamesToFarm = obj.CardsFarmer.GamesToFarm,
CurrentGamesFarming = obj.CardsFarmer.CurrentGamesFarming, CurrentGamesFarming = obj.CardsFarmer.CurrentGamesFarming,
allGamesFarmingAppID = [], allGamesFarmingAppID = [],
@@ -459,7 +460,7 @@
totalGamesRemaining += GamesToFarm.length; totalGamesRemaining += GamesToFarm.length;
expandBoxHTML = '<button data-i18n="title-bots-more" title="Show more infos" type="button" class="btn btn-box-tool" data-widget="collapse" id="collapse-trigger"><i class="fas fa-plus"></i></button>' expandBoxHTML = '<button type="button" class="btn btn-box-tool" data-widget="collapse" id="collapse-trigger"><i class="fas fa-plus"></i></button>'
if (IsPlayingPossible) { if (IsPlayingPossible) {
if (Paused) { if (Paused) {
@@ -487,9 +488,7 @@
allGamesHTML = '<p class="text-center no-margin">' + $.i18n('bots-in-use') + '</p>'; allGamesHTML = '<p class="text-center no-margin">' + $.i18n('bots-in-use') + '</p>';
} }
TimeRemaining = moment.duration(TimeRemaining).asMilliseconds(); boxBodyHTML = '<div class="box-body" id="' + BotName + '" style="display:none;">'
boxBodyHTML = '<div class="box-body" id="' + BotName + '" style="display: none;">'
+ '<div class="row">' + '<div class="row">'
+ '<div class="col-lg-8 col-md-8 col-sm-8 col-xs-8">' + '<div class="col-lg-8 col-md-8 col-sm-8 col-xs-8">'
+ '<span class="pull-left"><i class="far fa-clock"></i> ' + humanizeDuration(TimeRemaining) + '</span>' + '<span class="pull-left"><i class="far fa-clock"></i> ' + humanizeDuration(TimeRemaining) + '</span>'
@@ -506,15 +505,15 @@
} }
if (Paused) { if (Paused) {
pauseOrResumeHTML = '<button title="Resume <' + BotName + '>" type="button" class="btn btn-box-tool bot-paused" data-command="resumeBot"><i class="fas fa-pause"></i></button>'; pauseOrResumeHTML = '<button type="button" class="btn btn-box-tool bot-paused" data-command="resumeBot"><i class="fas fa-pause"></i></button>';
} else { } else {
pauseOrResumeHTML = '<button title="Pause <' + BotName + '>" type="button" class="btn btn-box-tool bot-resumed" data-command="pauseBot"><i class="fas fa-pause"></i></button>'; pauseOrResumeHTML = '<button type="button" class="btn btn-box-tool bot-resumed" data-command="pauseBot"><i class="fas fa-pause"></i></button>';
} }
} }
$('#botRow').append('<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">' $('#botRow').append('<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">'
+ '<div class="box ' + boxColorHTML + ' collapsed-box" id="bot-box-' + BotName + '">' + '<div class="box ' + boxColorHTML + ' collapsed-box" id="bot-box-' + BotName + '">'
+ '<div class="box-header with-border botHeader ui-widget-content">' + '<div class="box-header with-border botHeader">'
+ profileHTML + profileHTML
+ '<h3 class="box-title botTitle">' + BotName + '</h3>' + '<h3 class="box-title botTitle">' + BotName + '</h3>'
+ '<div class="box-tools pull-right botTools" id="' + BotName + '">' + '<div class="box-tools pull-right botTools" id="' + BotName + '">'
@@ -524,8 +523,8 @@
+ deleteBotHTML + deleteBotHTML
+ expandBoxHTML + expandBoxHTML
+ '</div>' + '</div>'
+ boxBodyHTML
+ '</div>' + '</div>'
+ boxBodyHTML
+ '</div>' + '</div>'
+ '</div>'); + '</div>');
@@ -659,14 +658,33 @@
break; break;
case 'redeemGames': case 'redeemGames':
var bgrHTML = '<div class="nav-tabs-custom">'
+ '<ul class="nav nav-tabs nav-justified">'
+ '<li class="active"><a href="#addKeys" data-toggle="tab" aria-expanded="true">' + $.i18n('bots-redeem-add-title') + '</a></li>'
+ '<li class=""><a href="#viewKeys" data-toggle="tab" aria-expanded="false">' + $.i18n('bots-redeem-view-title') + '</a></li>'
+ '</ul>'
+ '<div class="tab-content">'
+ '<div class="tab-pane active" id="addKeys">'
+ '<p class="lead text-muted" style="display: block;">' + $.i18n('bots-syntax') + '</p>'
+ '<textarea id="gamesToRedeemInBackground"></textarea>'
+ '<div class="input-group">'
+ '<span class="input-group-addon" id="delimiter-text">' + $.i18n('bots-delimiter') + '</span>'
+ '<input type="text" class="form-control" id="delimiter" value="' + tmpDelimiter + '" aria-describedby="delimiter-text">'
+ '</div>'
+ '</div>'
+ '<div class="tab-pane" id="viewKeys">'
+ '<div class="alert alert-warning">'
+ '<h4><i class="fas fa-info-circle"></i> Not implemented</h4>'
+ 'This feature is currently being developed.'
+ '</div>'
+ '<textarea id="gamesToRedeemInBackground"></textarea>' //rename id
+ '</div>'
+ '</div>'
+ '</div>';
swal({ swal({
title: $.i18n('bots-redeem-title'), title: $.i18n('bots-redeem-title'),
text: '<p class="lead text-muted" style="display: block;">' + $.i18n('bots-syntax') + '</p>' text: bgrHTML,
+ '<textarea id="gamesToRedeemInBackground"></textarea>'
+ '<div class="input-group">'
+ '<span class="input-group-addon" id="delimiter-text">' + $.i18n('bots-delimiter') + '</span>'
+ '<input type="text" class="form-control" id="delimiter" value="' + tmpDelimiter + '" aria-describedby="delimiter-text">'
+ '</div>',
html: true, html: true,
customClass: 'swal-wide', customClass: 'swal-wide',
showCancelButton: true, showCancelButton: true,
@@ -725,6 +743,17 @@
$('.overlay').remove(); $('.overlay').remove();
}); });
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href")
if (target === '#viewKeys') {
//load unused keys here
$(".confirm").text('Copy unused keys!');
} else {
$(".confirm").text('Add keys!');
}
});
break; break;
} }
}) })
@@ -759,8 +788,6 @@
+ '</div>' + '</div>'
+ '</div>'); + '</div>');
totalTimeRemaining = moment.duration(totalTimeRemaining).asMilliseconds();
$('#totalGamesRemaining').text(totalGamesRemaining); $('#totalGamesRemaining').text(totalGamesRemaining);
$('#totalTimeRemaining').text(humanizeDuration(totalTimeRemaining)); $('#totalTimeRemaining').text(humanizeDuration(totalTimeRemaining));
$('#totalCardsRemaining').text(totalCardsRemaining); $('#totalCardsRemaining').text(totalCardsRemaining);

View File

@@ -12,6 +12,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/css/AdminLTE.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/css/bootstrap-select.min.css">
<link rel="stylesheet" href="../css/_all-skins.min.css"> <link rel="stylesheet" href="../css/_all-skins.min.css">
<link rel="stylesheet" href="../css/app.css"> <link rel="stylesheet" href="../css/app.css">
<link rel="stylesheet" href="../css/_nightmode.min.css"> <link rel="stylesheet" href="../css/_nightmode.min.css">
@@ -52,6 +53,7 @@
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span> <i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status"> <span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small> <small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small> <small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small> <small class="label pull-right bg-olive" id="farmingBots">0</small>
</span> </span>
@@ -64,16 +66,16 @@
<li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li> <li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li> <li class="header" data-i18n="global-information">Information</li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span> <i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small> <small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span> </span>
</a> </a>
</li> </li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span> <i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small> <small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
@@ -109,34 +111,26 @@
<i class="fas fa-wrench"></i> <i class="fas fa-wrench"></i>
</button> </button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><button data-i18n="title-commands-auto-clear" title="Toggle auto clear" type="button" class="btn btn-box-tool text-olive" id="chkAutoClear"><i id="iconAutoClear" class="fas fa-toggle-on fa-2x"></i></button><span data-i18n="commands-auto-clear">Auto clear</span></li> <li><button type="button" class="btn btn-box-tool text-olive" id="chkAutoClear"><i id="iconAutoClear" class="fas fa-toggle-on fa-2x"></i></button><span data-i18n="commands-auto-clear">Auto clear</span></li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
<div class="box-body"> <div class="box-body">
<div class="box-content-commands"></div> <div class="box-content-commands"></div>
<input type="text" class="form-control" id="commandSent" disabled> <input id="commandSent" type="text" class="form-control" disabled>
</div> </div>
<div class="box-footer"> <div class="box-footer">
<div class="input-group"> <div class="input-group">
<div class="input-group-btn hidden-xs" id="cmdsDropDownBox"> <div id="commandsDropDownBox" class="input-group-btn hidden-xs">
<button data-i18n="title-commands-show-all-commands" title="Show all commands" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> <select id="commandsDropDown" class="form-control selectpicker" data-dropup-auto="false" data-size="7" data-live-search="true" data-i18n="title-commands" title="Commands"></select>
<span data-i18n="global-commands">Commands</span> </div>
<span class="fas fa-caret-down" id="iconCmdsDropDownBox"></span> <div class="input-group-btn hidden-xs">
</button> <select id="botsDropDown" class="form-control selectpicker" data-dropup-auto="false" data-size="7" data-live-search="true" data-i18n="title-bots" title="Bots"></select>
<ul class="dropdown-menu scrollable-menu" id="commandsDropDown"></ul> </div>
</div> <input id="commandInput" type="text" class="form-control" data-i18n="placeholder-commands" placeholder="Type command...">
<div class="input-group-btn hidden-xs" id="botsDropDownBox"> <div class="input-group-btn">
<button data-i18n="title-commands-show-all-bots" title="Show all bots" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> <button type="button" class="btn btn-default" id="sendCommand"><i class="far fa-paper-plane"></i></button>
<span data-i18n="global-bots">Bots</span>
<span class="fas fa-caret-down" id="iconBotsDropDownBox"></span>
</button>
<ul class="dropdown-menu scrollable-menu" id="botsDropDown"></ul>
</div>
<input id="commandInput" type="text" class="form-control" data-i18n="placeholder-commands" placeholder="Type command...">
<div class="input-group-btn">
<button data-i18n="title-commands-send" title="Send command" type="button" class="btn btn-default" id="sendCommand"><i class="far fa-paper-plane"></i></button>
</div> </div>
</div> </div>
</div> </div>
@@ -167,7 +161,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/js/adminlte.min.js"></script> <script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
@@ -175,6 +169,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.parser.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.parser.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.bidi.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.emitter.bidi.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/js/bootstrap-select.min.js"></script>
<script src="../js/utils.js"></script> <script src="../js/utils.js"></script>
<script src="../js/i18n.js"></script> <script src="../js/i18n.js"></script>
<script src="../js/app.js"></script> <script src="../js/app.js"></script>
@@ -186,24 +181,8 @@
var $chkAutoClear = $('#chkAutoClear'), var $chkAutoClear = $('#chkAutoClear'),
$commandInput = $('#commandInput'), $commandInput = $('#commandInput'),
$cmdsDropDownBox = $('#cmdsDropDownBox'),
$botsDropDownBox = $('#botsDropDownBox'),
$botsDropDown = $("#botsDropDown"), $botsDropDown = $("#botsDropDown"),
$commandsDropDown = $("#commandsDropDown"); $commandsDropDown = $("#commandsDropDown");
var myCommands = { // For the future: Make this dynamic
'addlicense': 'Activates given appIDs (Steam Network) or subIDs (Steam Store) on given bot instances (free games only).',
'redeem': 'Redeems given cd-keys on given bot instances.',
'2faok': 'Accepts all pending 2FA confirmations for given bot instances.',
'2fa': 'Generates temporary 2FA token for given bot instances.',
'loot': 'Sends all MatchableTypes items of given bot instances to Master user defined in their SteamUserPermissions (with lowest steamID if more than one).',
'play': 'Switches to manual farming - launches given AppIDs on given bot instances, optionally also with custom GameName. Use !resume for returning to automatic farming.',
'start': 'Starts given bot instances.',
'stop': 'Stops given bot instances.',
'pause': 'Permanently pauses automatic cards farming module of given bot instances. ASF will not attempt to farm current account in this session, unless you manually !resume it, or restart the process. Also called sticky pause.',
'resume': 'Resumes automatic farming of given bot instances. Also see !pause, !play.',
'restart': 'Restarts ASF process.'
};
var keyCount = 0, var keyCount = 0,
prevCommand = (JSON.parse(get('prevCommand')) === null) ? [] : JSON.parse(get('prevCommand')); prevCommand = (JSON.parse(get('prevCommand')) === null) ? [] : JSON.parse(get('prevCommand'));
@@ -220,12 +199,37 @@
prevCommand.push(cmd); prevCommand.push(cmd);
} }
store('prevCommand', JSON.stringify(prevCommand.slice(-20))); // Only save the last 20 commands store('prevCommand', JSON.stringify(prevCommand.slice(-20)));
prevCommand = (JSON.parse(get('prevCommand')) === null) ? [] : JSON.parse(get('prevCommand')); prevCommand = (JSON.parse(get('prevCommand')) === null) ? [] : JSON.parse(get('prevCommand'));
sendCommand(); sendCommand();
e.preventDefault(); e.preventDefault();
}); });
$commandsDropDown.on('changed.bs.select', function (e) {
$cmdInput.val($commandsDropDown.val() + ' ');
var elements = document.getElementById("commandsDropDown").options; // dirty... find a better solution
for(var i = 0; i < elements.length; i++){
elements[i].selected = false;
}
$commandsDropDown.selectpicker('render');
});
$botsDropDown.on('changed.bs.select', function (e) {
var bot = $botsDropDown.val(),
oldText = $cmdInput.val();
$cmdInput.val(oldText + bot);
var elements = document.getElementById("botsDropDown").options; // dirty... find a better solution
for(var i = 0; i < elements.length; i++){
elements[i].selected = false;
}
$botsDropDown.selectpicker('render');
});
//#region Merge to one function //#region Merge to one function
$(document).keydown(function (e) { $(document).keydown(function (e) {
@@ -284,19 +288,16 @@
$('.box-content-commands').css('height', tmpCommandHeight + 'px'); $('.box-content-commands').css('height', tmpCommandHeight + 'px');
if (shouldDropUp()) { if (shouldDropUp()) {
$cmdsDropDownBox.addClass('dropup'); $commandsDropDown.addClass('dropup');
$botsDropDownBox.addClass('dropup'); $botsDropDown.addClass('dropup');
$('#iconCmdsDropDownBox').removeClass('fa-caret-down'); $commandsDropDown.selectpicker('refresh');
$('#iconCmdsDropDownBox').addClass('fa-caret-up'); $botsDropDown.selectpicker('refresh');
$('#iconBotsDropDownBox').removeClass('fa-caret-down');
$('#iconBotsDropDownBox').addClass('fa-caret-up');
} else { } else {
$cmdsDropDownBox.removeClass('dropup'); $commandsDropDown.removeClass('dropup');
$botsDropDownBox.removeClass('dropup'); $botsDropDown.removeClass('dropup');
$('#iconCmdsDropDownBox').removeClass('fa-caret-up'); $('.bootstrap-select').removeClass('dropup');
$('#iconCmdsDropDownBox').addClass('fa-caret-down'); $commandsDropDown.selectpicker('refresh');
$('#iconBotsDropDownBox').removeClass('fa-caret-up'); $botsDropDown.selectpicker('refresh');
$('#iconBotsDropDownBox').addClass('fa-caret-down');
} }
} else { } else {
$('.box-content-commands').css('height', 400 + 'px'); $('.box-content-commands').css('height', 400 + 'px');
@@ -321,59 +322,105 @@
store('commandHeight', currentHeight); store('commandHeight', currentHeight);
if (shouldDropUp()) { if (shouldDropUp()) {
$cmdsDropDownBox.addClass('dropup'); $commandsDropDown.addClass('dropup');
$botsDropDownBox.addClass('dropup'); $botsDropDown.addClass('dropup');
$('#iconCmdsDropDownBox').removeClass('fa-caret-down'); $commandsDropDown.selectpicker('refresh');
$('#iconCmdsDropDownBox').addClass('fa-caret-up'); $botsDropDown.selectpicker('refresh');
$('#iconBotsDropDownBox').removeClass('fa-caret-down');
$('#iconBotsDropDownBox').addClass('fa-caret-up');
} else { } else {
$cmdsDropDownBox.removeClass('dropup'); $commandsDropDown.removeClass('dropup');
$botsDropDownBox.removeClass('dropup'); $botsDropDown.removeClass('dropup');
$('#iconCmdsDropDownBox').removeClass('fa-caret-up'); $('.bootstrap-select').removeClass('dropup');
$('#iconCmdsDropDownBox').addClass('fa-caret-down'); $commandsDropDown.selectpicker('refresh');
$('#iconBotsDropDownBox').removeClass('fa-caret-up'); $botsDropDown.selectpicker('refresh');
$('#iconBotsDropDownBox').addClass('fa-caret-down');
} }
}); });
$('.box-footer').ready(function () { $('.box-footer').ready(function () {
for (var cmd in myCommands) { // Fill drop down with all commands var cachedCommands = get('cachedCommands'),
if (myCommands.hasOwnProperty(cmd)) { cachedDate = get('cachedCommandsDate'),
$commandsDropDown.append('<li><a href="javascript:void(0)" id="' + cmd + '" onclick="fillCommand(\'' + cmd + '\')">' + cmd + '</a></li>'); today = new Date().toLocaleDateString();
if (cachedCommands && today == cachedDate) {
var myCommands = cachedCommands.split(',');
for (var i = 0; i < myCommands.length; i++) {
$commandsDropDown.append('<option title="Commands">' + myCommands[i] + '</option>');
}
$('.overlay').remove();
$commandsDropDown.selectpicker('refresh');
} else {
$('#commandsDropDownBox').append('<div class="overlay bot-box-loading"><i class="fas fa-sync fa-spin"></i></div>');
$.ajax({
url: '/Api/WWW/Send',
type: 'POST',
data: JSON.stringify({ "URL": "https://github.com/JustArchi/ArchiSteamFarm/wiki/Commands" }),
contentType: 'application/json',
success: function (data) {
var htmlString = data['Result'],
doc = new DOMParser().parseFromString(htmlString,'text/html'),
result = doc.evaluate('//table[1]/tbody//td[1]', doc, null, XPathResult.ANY_TYPE, null),
myCommands = [],
xres;
while (xres = result.iterateNext()) {
var str = xres.innerText;
if (/\s/.test(str)) {
myCommands.push(str.substr(0,str.indexOf(' ')));
} else {
myCommands.push(str);
}
}
store('cachedCommands', myCommands);
store('cachedCommandsDate', new Date().toLocaleDateString());
for (var i = 0; i < myCommands.length; i++) {
$commandsDropDown.append('<option title="Commands">' + myCommands[i] + '</option>');
}
$('.overlay').remove();
$commandsDropDown.selectpicker('refresh');
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR.status + ' ' + errorThrown + ' - ' + jqXHR.responseJSON['Message'])
}
});
}
$('#' + cmd) $botsDropDown.append('<option title="Bots">ASF</option>');
.mouseenter(function () {
$commandInput.attr('placeholder', myCommands[this.id]); // ToDo: Find a better solution for where to display description
})
.mouseleave(function () {
$commandInput.attr('placeholder', $.i18n('placeholder-commands'));
});
}
}
$botsDropDown.append('<li><a href="javascript:void(0)" onclick="fillBots(\'ASF\')">ASF</a></li>'); // Fill with default value $.ajax({
$.ajax({ // Fill drop down with all bots + ASF
url: '/Api/Bot/ASF', url: '/Api/Bot/ASF',
type: 'GET', type: 'GET',
success: function (data) { success: function (data) {
var json = data['Result']; var json = data['Result'];
$botsDropDown.append('<li class="divider"></li>'); $botsDropDown.append('<option data-divider="true"></option>');
for (var i = 0; i < json.length; i++) { for (var i = 0; i < json.length; i++) {
var obj = json[i], var obj = json[i],
botName = obj.BotName; botName = obj.BotName;
$botsDropDown.append('<li><a href="javascript:void(0)" onclick="fillBots(\'' + botName + '\')">' + botName + '</a></li>'); $botsDropDown.append('<option title="Bots">' + botName + '</option>');
} }
$botsDropDown.selectpicker('refresh');
} }
}); });
}); });
function shouldDropUp() { function shouldDropUp() {
return 220 > $('.content-wrapper').height() - ( $('.content-header').height() + $('.content').height() ); var wrapper = $('.content-wrapper').height(),
header = $('.content-header').height(),
mainHeader = $('.main-header').height(),
box = $('.box').height(),
total = wrapper - (header + box + mainHeader),
dropdown = 236;
return dropdown > total;
} }
}) })
</script> </script>

View File

@@ -52,6 +52,7 @@
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span> <i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status"> <span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small> <small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small> <small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small> <small class="label pull-right bg-olive" id="farmingBots">0</small>
</span> </span>
@@ -64,16 +65,16 @@
<li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li> <li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li> <li class="header" data-i18n="global-information">Information</li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span> <i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small> <small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span> </span>
</a> </a>
</li> </li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span> <i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small> <small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
@@ -149,7 +150,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/js/adminlte.min.js"></script> <script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
@@ -177,21 +178,6 @@
} }
}); });
}); });
$('#saveButton').click(function (e) {
swal({
title: 'Are you sure?',
text: 'The config will be updated and the bot will be restarted!',
type: 'warning',
showCancelButton: true,
confirmButtonClass: 'btn-danger',
confirmButtonText: 'Yes, update config!',
closeOnConfirm: false,
showLoaderOnConfirm: true
}, function () { prepareConfigForSaving(); });
e.preventDefault();
});
}) })
</script> </script>
</body> </body>

View File

@@ -52,6 +52,7 @@
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span> <i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status"> <span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small> <small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small> <small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small> <small class="label pull-right bg-olive" id="farmingBots">0</small>
</span> </span>
@@ -64,16 +65,16 @@
<li class="active"><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li> <li class="active"><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li> <li class="header" data-i18n="global-information">Information</li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span> <i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small> <small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span> </span>
</a> </a>
</li> </li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span> <i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small> <small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
@@ -154,7 +155,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/js/adminlte.min.js"></script> <script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
@@ -174,12 +175,6 @@
$('.box-content-config').ready(function () { $('.box-content-config').ready(function () {
loadPageContentGenerator(); loadPageContentGenerator();
}); });
$('#downloadButton').click(function (e) {
prepareConfigForDownload();
e.preventDefault();
});
}) })
</script> </script>
</body> </body>

View File

@@ -52,6 +52,7 @@
<i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span> <i class="fas fa-users fa-fw"></i> <span data-i18n="global-bots">Bots</span>
<span class="pull-right-container bot-status"> <span class="pull-right-container bot-status">
<small class="label pull-right bg-gray" id="offlineBots">0</small> <small class="label pull-right bg-gray" id="offlineBots">0</small>
<small class="label pull-right bg-red" id="disconnectedBots" style="display:none;">0</small>
<small class="label pull-right bg-yellow" id="onlineBots">0</small> <small class="label pull-right bg-yellow" id="onlineBots">0</small>
<small class="label pull-right bg-olive" id="farmingBots">0</small> <small class="label pull-right bg-olive" id="farmingBots">0</small>
</span> </span>
@@ -64,16 +65,16 @@
<li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li> <li><a href="generator.html"><i class="far fa-copy fa-fw"></i> <span data-i18n="global-generator">Generator</span></a></li>
<li class="header" data-i18n="global-information">Information</li> <li class="header" data-i18n="global-information">Information</li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span> <i class="fas fa-tachometer-alt fa-fw"></i> <span data-i18n="global-ram-usage">RAM Usage</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small> <small class="label pull-right bg-blue" id="ramUsage">0.00 MB</small>
</span> </span>
</a> </a>
</li> </li>
<li class="info-overview"> <li>
<a> <a class="info-overview" href="javascript:void(0)">
<i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span> <i class="far fa-clock fa-fw"></i> <span data-i18n="global-uptime">Uptime</span>
<span class="pull-right-container"> <span class="pull-right-container">
<small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small> <small class="label pull-right bg-blue" id="uptime">0d 0h 0m</small>
@@ -104,7 +105,7 @@
<i class="far fa-file-alt"></i> <i class="far fa-file-alt"></i>
<h3 class="box-title" data-i18n="global-log">Log</h3> <h3 class="box-title" data-i18n="global-log">Log</h3>
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button data-i18n="title-log-auto-scroll" title="Toggle auto scroll" type="button" class="btn btn-box-tool text-olive" id="toggleAutoScroll"><i class="fas fa-toggle-on fa-2x"></i></button> <button type="button" class="btn btn-box-tool text-olive" id="toggleAutoScroll"><i class="fas fa-sync"></i></button>
</div> </div>
</div> </div>
<div class="box-body"> <div class="box-body">
@@ -139,7 +140,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-sweetalert/1.0.1/sweetalert.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.2/js/adminlte.min.js"></script> <script src="../js/adminlte.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.messagestore.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.i18n/1.0.4/jquery.i18n.fallbacks.min.js"></script>
@@ -172,7 +173,7 @@
ws.onopen = function (event) { ws.onopen = function (event) {
$('.overlay').remove(); $('.overlay').remove();
$('.box-content-log').text(''); // Clear log $('.box-content-log').text('');
}; };
ws.onmessage = function (event) { ws.onmessage = function (event) {
@@ -182,7 +183,7 @@
}; };
ws.onclose = function (event) { ws.onclose = function (event) {
if (event.code !== 1000) { // Code 1000 means that the connection was closed normally if (event.code !== 1000) { // 1000 = connection was closed normally
swal({ swal({
title: $.i18n('global-error-title'), title: $.i18n('global-error-title'),
text: $.i18n('log-event-code', event.code), text: $.i18n('log-event-code', event.code),
@@ -199,14 +200,12 @@
startWebSocket(); startWebSocket();
$('#toggleAutoScroll').removeClass('text-grey'); $('#toggleAutoScroll').removeClass('text-grey');
$('#toggleAutoScroll').addClass('text-olive'); $('#toggleAutoScroll').addClass('text-olive');
$('#toggleAutoScroll').html('<i class="fas fa-toggle-on fa-2x"></i>'); $('#toggleAutoScroll').blur();
$('#toggleAutoScroll').blur();
} else if (ws.readyState === ws.OPEN) { } else if (ws.readyState === ws.OPEN) {
ws.close(); ws.close();
$('#toggleAutoScroll').removeClass('text-olive'); $('#toggleAutoScroll').removeClass('text-olive');
$('#toggleAutoScroll').addClass('text-grey'); $('#toggleAutoScroll').addClass('text-grey');
$('#toggleAutoScroll').html('<i class="fas fa-toggle-on fa-2x fa-rotate-180"></i>'); $('#toggleAutoScroll').blur();
$('#toggleAutoScroll').blur();
} }
}); });
@@ -218,8 +217,7 @@
ws.close(); ws.close();
$('#toggleAutoScroll').removeClass('text-olive'); $('#toggleAutoScroll').removeClass('text-olive');
$('#toggleAutoScroll').addClass('text-grey'); $('#toggleAutoScroll').addClass('text-grey');
$('#toggleAutoScroll').html('<i class="fas fa-toggle-on fa-2x fa-rotate-180"></i>'); $('#toggleAutoScroll').blur();
$('#toggleAutoScroll').blur();
} }
} }