').addClass("hide"),$("body").prepend(this.$overlay)),this.$overlay.addClass("overlay"))},buildHeader:function(){this.opts.header&&this.$header.html(this.opts.header)},load:function(t){this.buildModal(),this.buildOverlay(),this.buildHeader(),this.opts.url?this.buildContent():this.open(t)},open:function(t){t&&t.preventDefault(),this.isOpened()||(this.detect.isMobile()&&(this.opts.width="96%"),this.opts.overlay&&this.$overlay.removeClass("hide"),this.$target.removeClass("hide"),this.$modal.removeClass("hide"),this.enableEvents(),this.findActions(),this.resize(),$(window).on("resize."+this.namespace,$.proxy(this.resize,this)),this.detect.isDesktop()&&this.utils.disableBodyScroll(),this.$modal.find("input[type=text],input[type=url],input[type=email]").on("keydown."+this.namespace,$.proxy(this.handleEnter,this)),this.callback("open"),this.$modal.animation(this.opts.animationOpen,$.proxy(this.onOpened,this)))},close:function(t){if(this.$modal&&this.isOpened()){if(t){if(this.shouldNotBeClosed(t.target))return;t.preventDefault()}this.callback("close"),this.disableEvents(),this.$modal.animation(this.opts.animationClose,$.proxy(this.onClosed,this)),this.opts.overlay&&this.$overlay.animation(this.opts.animationClose)}},onOpened:function(){this.$modal.addClass("open"),this.callback("opened"),$.modalcurrent=this},onClosed:function(){this.callback("closed"),this.$target.addClass("hide"),this.$modal.removeClass("open"),this.detect.isDesktop()&&this.utils.enableBodyScroll(),this.$body.css("height",""),$.modalcurrent=null},isOpened:function(){return this.$modal.hasClass("open")},getData:function(){var e=new t.FormData(this);return e.set(""),e.get()},buildContent:function(){$.ajax({url:this.opts.url+"?"+(new Date).getTime(),cache:!1,type:"post",data:this.getData(),success:$.proxy(function(t){this.$body.html(t),this.open()},this)})},buildWidth:function(){var t=this.opts.width,e="2%",s="2%",i=t.match(/%$/);parseInt(this.opts.width)>$(window).width()&&!i?t="96%":i||(e="16px",s="16px"),this.$modal.css({width:t,"margin-top":e,"margin-bottom":s})},buildPosition:function(){if("center"===this.opts.position){var t=$(window).height(),e=this.$modal.outerHeight(),s=t/2-e/2+"px";this.detect.isMobile()?s="2%":e>t&&(s="16px"),this.$modal.css("margin-top",s)}},buildHeight:function(){var t=$(window).height();if(this.opts.maxHeight){var e=parseInt(this.$body.css("padding-top"))+parseInt(this.$body.css("padding-bottom")),s=parseInt(this.$modal.css("margin-top"))+parseInt(this.$modal.css("margin-bottom")),i=t-this.$header.innerHeight()-e-s;this.$body.height(i)}else this.opts.height!==!1&&this.$body.css("height",this.opts.height);var n=this.$modal.outerHeight();n>t&&(this.opts.animationOpen="show",this.opts.animationClose="hide")},resize:function(){this.buildWidth(),this.buildPosition(),this.buildHeight()},enableEvents:function(){this.$close.on("click."+this.namespace,$.proxy(this.close,this)),$(document).on("keyup."+this.namespace,$.proxy(this.handleEscape,this)),this.$target.on("click."+this.namespace,$.proxy(this.close,this))},disableEvents:function(){this.$close.off("."+this.namespace),$(document).off("."+this.namespace),this.$target.off("."+this.namespace),$(window).off("."+this.namespace)},findActions:function(){this.$body.find('[data-action="modal-close"]').on("mousedown."+this.namespace,$.proxy(this.close,this))},setHeader:function(t){this.$header.html(t)},setContent:function(t){this.$body.html(t)},setWidth:function(t){this.opts.width=t,this.resize()},getModal:function(){return this.$modal},getBody:function(){return this.$body},getHeader:function(){return this.$header},handleEnter:function(t){13===t.which&&(t.preventDefault(),this.close(!1))},handleEscape:function(t){return 27===t.which?this.close(!1):!0},shouldNotBeClosed:function(t){return"modal-close"===$(t).attr("data-action")||t===this.$close[0]?!1:0!==$(t).closest(".modal").length}},t.Modal.inherits(t),t.Plugin.create("Modal"),t.Plugin.autoload("Modal")}(Kube);
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/components/ASFConfig.vue b/docs/WebConfigGenerator/src/components/ASFConfig.vue
new file mode 100644
index 000000000..0257c6cec
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/ASFConfig.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/BotConfig.vue b/docs/WebConfigGenerator/src/components/BotConfig.vue
new file mode 100644
index 000000000..d4e8a6115
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/BotConfig.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/Home.vue b/docs/WebConfigGenerator/src/components/Home.vue
new file mode 100644
index 000000000..20c1b237d
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/Home.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/CheckboxGroup.vue b/docs/WebConfigGenerator/src/components/fields/CheckboxGroup.vue
new file mode 100644
index 000000000..14f68ee61
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/CheckboxGroup.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/InputCheckbox.vue b/docs/WebConfigGenerator/src/components/fields/InputCheckbox.vue
new file mode 100644
index 000000000..4930d9a68
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/InputCheckbox.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/InputFlag.vue b/docs/WebConfigGenerator/src/components/fields/InputFlag.vue
new file mode 100644
index 000000000..a921ae261
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/InputFlag.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/InputMap.vue b/docs/WebConfigGenerator/src/components/fields/InputMap.vue
new file mode 100644
index 000000000..076e5ad1c
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/InputMap.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/InputNumber.vue b/docs/WebConfigGenerator/src/components/fields/InputNumber.vue
new file mode 100644
index 000000000..c500141e4
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/InputNumber.vue
@@ -0,0 +1,32 @@
+
+
+
+
+ {{ errors.join(' ') }}
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/InputPassword.vue b/docs/WebConfigGenerator/src/components/fields/InputPassword.vue
new file mode 100644
index 000000000..ce0e30b04
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/InputPassword.vue
@@ -0,0 +1,31 @@
+
+
+
+
+ {{ errors.join(' ') }}
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/InputSelect.vue b/docs/WebConfigGenerator/src/components/fields/InputSelect.vue
new file mode 100644
index 000000000..a8af101b5
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/InputSelect.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/InputSet.vue b/docs/WebConfigGenerator/src/components/fields/InputSet.vue
new file mode 100644
index 000000000..bd68f12e7
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/InputSet.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/fields/InputText.vue b/docs/WebConfigGenerator/src/components/fields/InputText.vue
new file mode 100644
index 000000000..08201ade6
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/fields/InputText.vue
@@ -0,0 +1,31 @@
+
+
+
+
+ {{ errors.join(' ') }}
+
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/mixin/Config.vue b/docs/WebConfigGenerator/src/components/mixin/Config.vue
new file mode 100644
index 000000000..7602e6495
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/mixin/Config.vue
@@ -0,0 +1,89 @@
+
+
+
diff --git a/docs/WebConfigGenerator/src/components/mixin/Input.vue b/docs/WebConfigGenerator/src/components/mixin/Input.vue
new file mode 100644
index 000000000..48b21d541
--- /dev/null
+++ b/docs/WebConfigGenerator/src/components/mixin/Input.vue
@@ -0,0 +1,26 @@
+
diff --git a/docs/WebConfigGenerator/src/i18n.js b/docs/WebConfigGenerator/src/i18n.js
new file mode 100644
index 000000000..f978b6f6c
--- /dev/null
+++ b/docs/WebConfigGenerator/src/i18n.js
@@ -0,0 +1,46 @@
+const defaultLocale = 'strings';
+const nameRegex = /\.\/(\S+)\.json/i;
+
+function getLocale(validLocales) {
+ const language = navigator.language; // If the browser doesn't support this, it will not support other page elements as well
+ if (!language) return defaultLocale; // If the browser doesn't provide the language - return default locale
+ if (language.length !== 2) return validLocales.includes(language) ? language : defaultLocale; // If the language is in `xx-XX` format, check if it's valid
+ if (validLocales.includes(`${language}-${language.toUpperCase()}`)) return `${language}-${language.toUpperCase()}`; // If the language is two letter code, check if corresponding 5 letter code is a valid locale
+
+ const languageRegex = new RegExp(`${language}\-\\\S\\\S`); // Create a regex to match `xx-**` where `*` is a wildcard
+
+ for (const validLocale of validLocales) {
+ if (languageRegex.test(validLocale)) return validLocale; // Check if the locale matches the regex, if so, return it
+ }
+
+ return defaultLocale; // If no match found, return default locale
+}
+
+function loadLocales() {
+ const locales = {};
+ const defaultLanguageFile = `./${defaultLocale}.json`;
+ const languages = require.context('./locale/', false, /\.json/);
+
+ locales[defaultLocale] = languages(defaultLanguageFile);
+
+ for (const lang of languages.keys()) {
+ if (lang === defaultLanguageFile) continue; // Already loaded.
+
+ const languageName = lang.match(nameRegex)[1];
+ const language = languages(lang);
+
+ for (const key in language) {
+ if (!language.hasOwnProperty(key)) continue;
+ if (language[key] === '') language[key] = locales[defaultLocale][key];
+ }
+
+ locales[languageName] = language;
+ }
+
+ return locales;
+}
+
+const messages = loadLocales();
+const locale = getLocale(Object.keys(messages));
+
+export default { messages, locale };
diff --git a/docs/WebConfigGenerator/src/locale/README.md b/docs/WebConfigGenerator/src/locale/README.md
new file mode 100644
index 000000000..bc3696d51
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/README.md
@@ -0,0 +1,3 @@
+This directory contains ASF strings for display and localization purposes.
+
+All strings used by ASF can be found in main `strings.json` file, and that's also the only file that should be modified - all other files are managed automatically and should not be touched. Please visit **[localization](https://github.com/JustArchi/ArchiSteamFarm/wiki/Localization)** section on the wiki if you want to improve translation of other files.
diff --git a/docs/WebConfigGenerator/src/locale/ar-SA.json b/docs/WebConfigGenerator/src/locale/ar-SA.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/ar-SA.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/bg-BG.json b/docs/WebConfigGenerator/src/locale/bg-BG.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/bg-BG.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/cs-CZ.json b/docs/WebConfigGenerator/src/locale/cs-CZ.json
new file mode 100644
index 000000000..7f931059f
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/cs-CZ.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Přepnout rozšířené nastavení",
+ "button.download": "Stáhnout",
+ "home.topic": "ASF Config Generator je jednoduchý nástroj napsaný v jazyce JavaScript, který pomáhá při vytváření konfiguračních souborů do ASF. Stažené vygenerované soubory s nastavením přesuň do složky
config, která se nachází v hlavní složce ASF. Pro plnou dokumentaci přejdi na
wiki. Doufáme, že tento nástroj bude pro tebe užitečný.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Domovská stránka",
+ "schema.access": "Přístup",
+ "schema.advanced": "Pokročilé",
+ "schema.basic": "Základní",
+ "schema.bot.SteamLogin.description": "Steam přihlašovací jméno",
+ "schema.bot.SteamPassword.description": "Steam přihlašovací heslo",
+ "schema.bot.name": "Jméno",
+ "schema.bot.name.description": "Jméno bota",
+ "schema.community": "Komunita",
+ "schema.connection": "Připojení",
+ "schema.customization": "Vlastní nastavení",
+ "schema.farming": "Farmím",
+ "schema.generic.steamid64": "Vaše SteamID64",
+ "schema.misc": "Různé",
+ "schema.performance": "Výkon",
+ "schema.remote_access": "Vzdálený přístup",
+ "schema.security": "Zabezpečení",
+ "schema.trading": "Obchodování",
+ "schema.updates": "Aktualizace",
+ "static.add": "Přidat"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/da-DK.json b/docs/WebConfigGenerator/src/locale/da-DK.json
new file mode 100644
index 000000000..e25024cfc
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/da-DK.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Vis avancerede indstillinger",
+ "button.download": "Download",
+ "home.topic": "ASF Config Generator er et lille nyttigt værktøj kodet i JavaScript, som hjælper dig med at oprette dine ASF konfigurationsfiler. Efter download af den genererede konfiguration, flyt den til
config-mappen inde i ASFs hovedmappe. For fuld dokumentation henvises til vores
wiki. Vi håber at vores værktøj vil være nyttigt for dig.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Hjem",
+ "schema.access": "Adgang",
+ "schema.advanced": "Avanceret",
+ "schema.basic": "Basis",
+ "schema.bot.SteamLogin.description": "Dit Steam brugernavn",
+ "schema.bot.SteamPassword.description": "Dit Steam kodeord",
+ "schema.bot.name": "Navn",
+ "schema.bot.name.description": "Bottens navn",
+ "schema.community": "Fællesskab",
+ "schema.connection": "Forbindelse",
+ "schema.customization": "Brugertilpasning",
+ "schema.farming": "Farming",
+ "schema.generic.steamid64": "Dit SteamID64",
+ "schema.misc": "Diverse",
+ "schema.performance": "Ydelse",
+ "schema.remote_access": "Fjernadgang",
+ "schema.security": "Sikkerhed",
+ "schema.trading": "Handel",
+ "schema.updates": "Opdateringer",
+ "static.add": "Tilføj"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/de-AT.json b/docs/WebConfigGenerator/src/locale/de-AT.json
new file mode 100644
index 000000000..2ac9a355e
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/de-AT.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Erweiterte Einstellungen aktivieren",
+ "button.download": "Herunterladen",
+ "home.topic": "Der ASF Config Generator ist ein kleines in JavaScript geschriebenes Hilfsprogramm, welches dir hilft deine ASF Konfigurations Dateien zu erstellen. Nach dem Herunterladen der generierten Config, verschiebe diese in den
Config-Ordner im ASF Hauptverzeichnis. Für die komplette Dokumentation beziehe dich auf unser
Wiki. Wir hoffen, dass unser Hilfsprogramm nützlich für dich sein wird.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Startseite",
+ "schema.access": "Zugang",
+ "schema.advanced": "Erweitert",
+ "schema.basic": "Grundlage",
+ "schema.bot.SteamLogin.description": "Deine Steam-Konto Anmeldedaten",
+ "schema.bot.SteamPassword.description": "Dein Steam-Konto Passwort",
+ "schema.bot.name": "Name",
+ "schema.bot.name.description": "Name des Bots",
+ "schema.community": "Gruppe",
+ "schema.connection": "Verbindung",
+ "schema.customization": "Personalisierung",
+ "schema.farming": "Sammeln",
+ "schema.generic.steamid64": "Deine SteamID64",
+ "schema.misc": "Sonstiges",
+ "schema.performance": "Sammelprozess",
+ "schema.remote_access": "Fernzugriff",
+ "schema.security": "Sicherheit",
+ "schema.trading": "Handel",
+ "schema.updates": "Aktualisierungen",
+ "static.add": "Hinzufügen"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/de-DE.json b/docs/WebConfigGenerator/src/locale/de-DE.json
new file mode 100644
index 000000000..de5a5186f
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/de-DE.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Erweiterte Einstellungen aktivieren",
+ "button.download": "Herunterladen",
+ "home.topic": "Der ASF Config Generator ist ein kleines in JavaScript geschriebenes Hilfsprogramm, welches dir hilft deine ASF Konfigurations Dateien zu erstellen. Nach dem Herunterladen der generierten Datei, verschiebe diese in den
Config-Ordner im ASF Hauptverzeichnis. Für die komplette Dokumentation beziehe dich auf unser
Wiki. Wir hoffen, dass unser Hilfsprogramm nützlich für dich sein wird.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Startseite",
+ "schema.access": "Zugang",
+ "schema.advanced": "Erweitert",
+ "schema.basic": "Standard",
+ "schema.bot.SteamLogin.description": "Deine Steam-Konto Anmeldedaten",
+ "schema.bot.SteamPassword.description": "Dein Steam-Konto Passwort",
+ "schema.bot.name": "Name",
+ "schema.bot.name.description": "Name des Bots",
+ "schema.community": "Gruppe",
+ "schema.connection": "Verbindung",
+ "schema.customization": "Personalisierung",
+ "schema.farming": "Sammeln",
+ "schema.generic.steamid64": "Deine SteamID64",
+ "schema.misc": "Sonstiges",
+ "schema.performance": "Sammelprozess",
+ "schema.remote_access": "Fernzugriff",
+ "schema.security": "Sicherheit",
+ "schema.trading": "Handel",
+ "schema.updates": "Aktualisierungen",
+ "static.add": "Hinzufügen"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/el-GR.json b/docs/WebConfigGenerator/src/locale/el-GR.json
new file mode 100644
index 000000000..b2ba27ec1
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/el-GR.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "Δημιουργός ρυθμίσεων ASF",
+ "button.advanced": "Εναλλαγή ρυθμίσεων για προχωρημένους",
+ "button.download": "Λήψη",
+ "home.topic": "Ο δημιουργός ρυθμίσεων ASF είναι ένα μικρό βοηθητικό εργαλείο γραμμένο σε JavaScript που σας βοηθά να δημιουργήσετε τα αρχεία ρυθμίσεων για το ASF. Μετά τη λήψη του αρχείου που θα δημιουργηθεί, μετακινήστε το στον φάκελο
config εντός του κυρίου φακέλου του ASF. Για πλήρη τεκμηρίωση ανατρέξτε στο
wiki μας. Ελπίζουμε να σας φανεί χρήσιμο το εργαλείο μας.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Αρχική",
+ "schema.access": "Πρόσβαση",
+ "schema.advanced": "Για προχωρημένους",
+ "schema.basic": "ΒΑΣΙΚΑ",
+ "schema.bot.SteamLogin.description": "Το όνομα χρήστη του λογαριασμού Steam σας",
+ "schema.bot.SteamPassword.description": "Ο κωδικός πρόσβασης του λογαριασμού Steam σας",
+ "schema.bot.name": "Όνομα",
+ "schema.bot.name.description": "Όνομα του bot",
+ "schema.community": "Κοινότητα",
+ "schema.connection": "ΣΥΝΔΕΣΗ",
+ "schema.customization": "Προσαρμογή",
+ "schema.farming": "Συλλογή καρτών",
+ "schema.generic.steamid64": "Το SteamID64 σας",
+ "schema.misc": "ΔΙΑΦΟΡΑ",
+ "schema.performance": "ΕΠΙΔΟΣΕΙΣ",
+ "schema.remote_access": "ΑΠΟΜΑΚΡΥΣΜΕΝΗ ΠΡΟΣΒΑΣΗ",
+ "schema.security": "ΑΣΦΑΛΕΙΑ",
+ "schema.trading": "ΑΝΤΑΛΛΑΓΕΣ",
+ "schema.updates": "ΕΝΗΜΕΡΩΣΕΙΣ",
+ "static.add": "Προσθήκη"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/es-ES.json b/docs/WebConfigGenerator/src/locale/es-ES.json
new file mode 100644
index 000000000..2b517ea8d
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/es-ES.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "Generador de Configuración de ASF",
+ "button.advanced": "Cambiar la configuración avanzada",
+ "button.download": "Descarga",
+ "home.topic": "El Generador de Configuración de ASF es una pequeña y útil herramienta escrita en JavaScript, que te ayuda a crear tus archivos de configuración de ASF. Después de descargar el archivo de configuración, muévelo a la carpeta
config dentro del directorio principal de ASF. Para ver la documentación completa, consulta nuestra
wiki. Esperamos que nuestra herramienta te sea útil.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Inicio",
+ "schema.access": "Acceso",
+ "schema.advanced": "Avanzado",
+ "schema.basic": "Básico",
+ "schema.bot.SteamLogin.description": "Nombre de usuario de tu cuenta de Steam",
+ "schema.bot.SteamPassword.description": "Contraseña de tu cuenta de Steam",
+ "schema.bot.name": "Nombre",
+ "schema.bot.name.description": "Nombre del bot",
+ "schema.community": "Comunidad",
+ "schema.connection": "Conexión",
+ "schema.customization": "Personalización",
+ "schema.farming": "Recolección",
+ "schema.generic.steamid64": "Tu SteamID64",
+ "schema.misc": "Extras",
+ "schema.performance": "Rendimiento",
+ "schema.remote_access": "Acceso remoto",
+ "schema.security": "Seguridad",
+ "schema.trading": "Intercambios",
+ "schema.updates": "Actualizaciones",
+ "static.add": "Añadir"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/fi-FI.json b/docs/WebConfigGenerator/src/locale/fi-FI.json
new file mode 100644
index 000000000..0dc77726f
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/fi-FI.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Asetusten-luontityökalu",
+ "button.advanced": "Näytä tai piilota kehittyneet asetukset",
+ "button.download": "Lataa",
+ "home.topic": "ASF Asetusten-luontityökalu on pienit JavaScriptillä luotu työkalu, joka helpottaa ASF asetus-tiedoston luomisessa. Luodun tiedoston lataamisen jälkeen, siirrä tiedosto
config kansioon ASF:n pääkansiossa. Täyttä dokumentaatiota varten tarkista
wiki. Toivomme että tämä työkalu on hyödyllinen sinulle.",
+ "link.asf": "ASF",
+ "link.bot": "Botti",
+ "link.home": "Aloitus",
+ "schema.access": "Käyttöoikeus",
+ "schema.advanced": "Kehittyneet",
+ "schema.basic": "Perus",
+ "schema.bot.SteamLogin.description": "Steam-tunnuksesi",
+ "schema.bot.SteamPassword.description": "Steam-salasanasi",
+ "schema.bot.name": "Nimi",
+ "schema.bot.name.description": "Botin nimi",
+ "schema.community": "Yhteisö",
+ "schema.connection": "Yhteys",
+ "schema.customization": "Mukauttaminen",
+ "schema.farming": "Farmaus",
+ "schema.generic.steamid64": "SteamID64-koodisi",
+ "schema.misc": "Sekalaiset",
+ "schema.performance": "Tehokkuus",
+ "schema.remote_access": "Etähallinta",
+ "schema.security": "Turvallisuus",
+ "schema.trading": "Vaihtaminen",
+ "schema.updates": "Päivitykset",
+ "static.add": "Lisää"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/fr-CH.json b/docs/WebConfigGenerator/src/locale/fr-CH.json
new file mode 100644
index 000000000..d9cfe822e
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/fr-CH.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Activer/désactiver les paramètres avancé",
+ "button.download": "Téléchargement",
+ "home.topic": "ASF Config Generator est un petit outil écrit en JavaScript, qui vous permet de créer vos fichier de configuration ASF. Après avoir téléchargé le fichier de configuration généré, déplacez le vers
config dans le répertoire ASF principal. Pour trouver la documentation complète, reportez-vous à notre
wiki. Nous espérons que cet outil vous sera utile.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Accueil",
+ "schema.access": "Accès",
+ "schema.advanced": "Avancé",
+ "schema.basic": "Basique",
+ "schema.bot.SteamLogin.description": "Votre identifiant de compte Steam",
+ "schema.bot.SteamPassword.description": "Mot de passe de votre compte Steam",
+ "schema.bot.name": "Nom",
+ "schema.bot.name.description": "Nom du bot",
+ "schema.community": "Communauté",
+ "schema.connection": "Connexion",
+ "schema.customization": "Personnalisation",
+ "schema.farming": "Farming",
+ "schema.generic.steamid64": "Votre SteamID64",
+ "schema.misc": "Divers",
+ "schema.performance": "Performances",
+ "schema.remote_access": "Accès à distance",
+ "schema.security": "Sécurité",
+ "schema.trading": "Échange",
+ "schema.updates": "Mises à jour",
+ "static.add": "Ajouter"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/fr-FR.json b/docs/WebConfigGenerator/src/locale/fr-FR.json
new file mode 100644
index 000000000..d9cfe822e
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/fr-FR.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Activer/désactiver les paramètres avancé",
+ "button.download": "Téléchargement",
+ "home.topic": "ASF Config Generator est un petit outil écrit en JavaScript, qui vous permet de créer vos fichier de configuration ASF. Après avoir téléchargé le fichier de configuration généré, déplacez le vers
config dans le répertoire ASF principal. Pour trouver la documentation complète, reportez-vous à notre
wiki. Nous espérons que cet outil vous sera utile.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Accueil",
+ "schema.access": "Accès",
+ "schema.advanced": "Avancé",
+ "schema.basic": "Basique",
+ "schema.bot.SteamLogin.description": "Votre identifiant de compte Steam",
+ "schema.bot.SteamPassword.description": "Mot de passe de votre compte Steam",
+ "schema.bot.name": "Nom",
+ "schema.bot.name.description": "Nom du bot",
+ "schema.community": "Communauté",
+ "schema.connection": "Connexion",
+ "schema.customization": "Personnalisation",
+ "schema.farming": "Farming",
+ "schema.generic.steamid64": "Votre SteamID64",
+ "schema.misc": "Divers",
+ "schema.performance": "Performances",
+ "schema.remote_access": "Accès à distance",
+ "schema.security": "Sécurité",
+ "schema.trading": "Échange",
+ "schema.updates": "Mises à jour",
+ "static.add": "Ajouter"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/he-IL.json b/docs/WebConfigGenerator/src/locale/he-IL.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/he-IL.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/hi-IN.json b/docs/WebConfigGenerator/src/locale/hi-IN.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/hi-IN.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/hu-HU.json b/docs/WebConfigGenerator/src/locale/hu-HU.json
new file mode 100644
index 000000000..c64613dae
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/hu-HU.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generátor",
+ "button.advanced": "Haladó beállítások",
+ "button.download": "Letöltés",
+ "home.topic": "Az ASF Config Generátor egy JavaScriptben íródott segédeszköz, ami segít neked elkészíteni az ASF-hez szükséges config fáljokat. Miután letöltötted a generált configot, helyezd át a
config mappába az ASF fő könyvtárán belül. A teljes dokumentációt erről a
wikin találod. Reméljük hasznos lesz az eszköz számodra.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Főoldal",
+ "schema.access": "Hozzáférés",
+ "schema.advanced": "Haladó beállítások",
+ "schema.basic": "Alap",
+ "schema.bot.SteamLogin.description": "Steam fiókod felhasználóneve",
+ "schema.bot.SteamPassword.description": "Steam fiókod jelszava",
+ "schema.bot.name": "Név",
+ "schema.bot.name.description": "Bot neve",
+ "schema.community": "Közösségi",
+ "schema.connection": "Kapcsolat",
+ "schema.customization": "Testreszabás",
+ "schema.farming": "Farmolás",
+ "schema.generic.steamid64": "A SteamID64-d",
+ "schema.misc": "Egyebek",
+ "schema.performance": "Teljesítmény",
+ "schema.remote_access": "Távoli elérés",
+ "schema.security": "Biztonság",
+ "schema.trading": "Kereskedés",
+ "schema.updates": "Frissítések",
+ "static.add": "Hozzáadás"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/id-ID.json b/docs/WebConfigGenerator/src/locale/id-ID.json
new file mode 100644
index 000000000..bf8af1ab1
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/id-ID.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Gnerator",
+ "button.advanced": "Beralih pengaturan lanjutan",
+ "button.download": "Unduhan",
+ "home.topic": "ASF Config generator adalah alat untilitas kecil yang ditulis di JavaScripe, yang membantu anda membuat konfigurasi berkas ASF anda. setelah mengunduh konfigurasi yang dihasilkan, pindahkan ke folder
config folder utama dalam direktor ASF. Untuk dokumentasi lebih lihatlah pada
wiki. Kami harap alat kami akan berguna bagi anda.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Rumah",
+ "schema.access": "Akses",
+ "schema.advanced": "Lanjutan",
+ "schema.basic": "Dasar",
+ "schema.bot.SteamLogin.description": "Masuk ke akun Steam kamu",
+ "schema.bot.SteamPassword.description": "Kata sandi akun Steam kamu",
+ "schema.bot.name": "Nama",
+ "schema.bot.name.description": "Nama dari bot",
+ "schema.community": "Komunitas",
+ "schema.connection": "Koneksi",
+ "schema.customization": "Kustomisasi",
+ "schema.farming": "Pertanian",
+ "schema.generic.steamid64": "Kamu SteamID64",
+ "schema.misc": "Misc",
+ "schema.performance": "Kinerja",
+ "schema.remote_access": "Akses jauh",
+ "schema.security": "Keamanan",
+ "schema.trading": "Perdagangan",
+ "schema.updates": "Pembaruan",
+ "static.add": "Menambahkan"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/it-IT.json b/docs/WebConfigGenerator/src/locale/it-IT.json
new file mode 100644
index 000000000..254556b4e
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/it-IT.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "Generatore Configurazioni ASF",
+ "button.advanced": "Attiva/disattiva impostazioni avanzate",
+ "button.download": "Scarica",
+ "home.topic": "Il Generatoratore Configurazioni ASF è una piccola utility scritta in JavaScript, che ti aiuta a creare i tuoi file di configurazione di ASF. Dopo aver scaricato la configurazione generata, spostala nella cartella
config nella directory principale di ASF. Per la documentazione completa riferisciti alla nostra
wiki. Speriamo che questo strumento vi sia utile.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Homepage",
+ "schema.access": "Accesso",
+ "schema.advanced": "Avanzate",
+ "schema.basic": "Di base",
+ "schema.bot.SteamLogin.description": "Login del tuo account Steam",
+ "schema.bot.SteamPassword.description": "Password del tuo account Steam",
+ "schema.bot.name": "Nome",
+ "schema.bot.name.description": "Nome del bot",
+ "schema.community": "Comunità",
+ "schema.connection": "Connessione",
+ "schema.customization": "Personalizzazione",
+ "schema.farming": "Farming",
+ "schema.generic.steamid64": "Il tuo SteamID64",
+ "schema.misc": "Varie",
+ "schema.performance": "Prestazioni",
+ "schema.remote_access": "Accesso remoto",
+ "schema.security": "Sicurezza",
+ "schema.trading": "Scambi",
+ "schema.updates": "Aggiornamenti",
+ "static.add": "Aggiungi"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/ja-JP.json b/docs/WebConfigGenerator/src/locale/ja-JP.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/ja-JP.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/ko-KR.json b/docs/WebConfigGenerator/src/locale/ko-KR.json
new file mode 100644
index 000000000..bf63a2513
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/ko-KR.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF 설정 생성기",
+ "button.advanced": "고급 설정 보이기",
+ "button.download": "다운로드",
+ "home.topic": "ASF 설정 생성기는 ASF 설정 파일을 만들 수 있도록 JavaScript로 작성된 작은 유틸리티 도구입니다. 생성된 설정 파일을 다운로드한 후, ASF 주 경로 안에 있는
config 폴더 안에 넣어주세요. 더 많은 정보를 보고 싶다면 위키를 참고해주세요. 저희 도구가 당신에게 유용하길 바랍니다.",
+ "link.asf": "ASF",
+ "link.bot": "봇",
+ "link.home": "홈",
+ "schema.access": "접근",
+ "schema.advanced": "고급",
+ "schema.basic": "기본",
+ "schema.bot.SteamLogin.description": "당신의 스팀 계정 로그인",
+ "schema.bot.SteamPassword.description": "당신의 스팀 계정 비밀번호",
+ "schema.bot.name": "이름",
+ "schema.bot.name.description": "봇의 이름",
+ "schema.community": "커뮤니티",
+ "schema.connection": "연결",
+ "schema.customization": "사용자 지정",
+ "schema.farming": "농사",
+ "schema.generic.steamid64": "당신의 SteamID64",
+ "schema.misc": "기타",
+ "schema.performance": "성능",
+ "schema.remote_access": "원격 접근",
+ "schema.security": "보안",
+ "schema.trading": "거래",
+ "schema.updates": "업데이트",
+ "static.add": "추가"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/lt-LT.json b/docs/WebConfigGenerator/src/locale/lt-LT.json
new file mode 100644
index 000000000..d5bfa5608
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/lt-LT.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Įjungti/išjungti papildomus parametrus",
+ "button.download": "Parsisiųsti",
+ "home.topic": "ASF Config Generator yra maža Javascript parašyta programa, kuri padeda kurti ASF konfigūracijos failus. Atsisiuntę sugeneruotą konfigūracijos failą, perkelkite jį į aplanką config , esantį pagrindiniame ASF aplanke. Norėdami gauti visą dokumentaciją, žr. wiki . Tikimės, kad šis įrankis jums naudingas.",
+ "link.asf": "ASF",
+ "link.bot": "Botas",
+ "link.home": "Pradžia",
+ "schema.access": "Prieiga",
+ "schema.advanced": "Papildoma",
+ "schema.basic": "Pagrindinis",
+ "schema.bot.SteamLogin.description": "Jūsų Steam paskyros prisijungimo vardas",
+ "schema.bot.SteamPassword.description": "Jūsų Steam paskyros slaptažodis",
+ "schema.bot.name": "Pavadinimas",
+ "schema.bot.name.description": "Boto pavadinimas",
+ "schema.community": "Bendruomenė",
+ "schema.connection": "Ryšys",
+ "schema.customization": "Koregavimas",
+ "schema.farming": "Kortelių rinkimas",
+ "schema.generic.steamid64": "Jūsų SteamID64",
+ "schema.misc": "Įvairūs",
+ "schema.performance": "Efektyvumas",
+ "schema.remote_access": "Nuotolinė prieiga",
+ "schema.security": "Saugumas",
+ "schema.trading": "Mainai",
+ "schema.updates": "Atnaujinimai",
+ "static.add": "Pridėti"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/nl-BE.json b/docs/WebConfigGenerator/src/locale/nl-BE.json
new file mode 100644
index 000000000..443c1b8a9
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/nl-BE.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Geavanceerde instellingen in-/uitschakelen",
+ "button.download": "Download",
+ "home.topic": "ASF Config Generator is een klein hulpprogramma geschreven in Javascript dat helpt om configuratiebestanden te maken. Nadat je het gegenereerde configuratiebestand hebt gedownload, verplaats je het naar de config map in de ASF hoofdmap. Voor volledige documentatie verwijzen we je naar wiki. We hopen dat dit hulpprogramma nuttig voor je is.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Homepagina",
+ "schema.access": "Toegang",
+ "schema.advanced": "Geavanceerd",
+ "schema.basic": "Basis",
+ "schema.bot.SteamLogin.description": "Je Steam gebruikersnaam",
+ "schema.bot.SteamPassword.description": "Je Steam wachtwoord",
+ "schema.bot.name": "Naam",
+ "schema.bot.name.description": "Naam van de bot",
+ "schema.community": "Community",
+ "schema.connection": "Verbinding",
+ "schema.customization": "Aanpassingen",
+ "schema.farming": "Farming",
+ "schema.generic.steamid64": "Je SteamID64",
+ "schema.misc": "Diversen",
+ "schema.performance": "Uitvoering",
+ "schema.remote_access": "Toegang op afstand",
+ "schema.security": "Beveiliging",
+ "schema.trading": "Ruilhandel",
+ "schema.updates": "Updates",
+ "static.add": "Toevoegen"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/nl-NL.json b/docs/WebConfigGenerator/src/locale/nl-NL.json
new file mode 100644
index 000000000..443c1b8a9
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/nl-NL.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Geavanceerde instellingen in-/uitschakelen",
+ "button.download": "Download",
+ "home.topic": "ASF Config Generator is een klein hulpprogramma geschreven in Javascript dat helpt om configuratiebestanden te maken. Nadat je het gegenereerde configuratiebestand hebt gedownload, verplaats je het naar de config map in de ASF hoofdmap. Voor volledige documentatie verwijzen we je naar wiki. We hopen dat dit hulpprogramma nuttig voor je is.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Homepagina",
+ "schema.access": "Toegang",
+ "schema.advanced": "Geavanceerd",
+ "schema.basic": "Basis",
+ "schema.bot.SteamLogin.description": "Je Steam gebruikersnaam",
+ "schema.bot.SteamPassword.description": "Je Steam wachtwoord",
+ "schema.bot.name": "Naam",
+ "schema.bot.name.description": "Naam van de bot",
+ "schema.community": "Community",
+ "schema.connection": "Verbinding",
+ "schema.customization": "Aanpassingen",
+ "schema.farming": "Farming",
+ "schema.generic.steamid64": "Je SteamID64",
+ "schema.misc": "Diversen",
+ "schema.performance": "Uitvoering",
+ "schema.remote_access": "Toegang op afstand",
+ "schema.security": "Beveiliging",
+ "schema.trading": "Ruilhandel",
+ "schema.updates": "Updates",
+ "static.add": "Toevoegen"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/no-NO.json b/docs/WebConfigGenerator/src/locale/no-NO.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/no-NO.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/pl-PL.json b/docs/WebConfigGenerator/src/locale/pl-PL.json
new file mode 100644
index 000000000..e4b1325ca
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/pl-PL.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "Generator ustawień ASF",
+ "button.advanced": "Przełącz ustawienia zaawansowane",
+ "button.download": "Pobierz",
+ "home.topic": "Generator ustawień ASF to małe narzędzie napisane w języku JavaScript, które ułatwia Ci tworzenie plików konfiguracyjnych dla ASF. Po ściągnięciu wygenerowanego pliku, przenieś go do folderu config wewnątrz głównego folderu ASF. Zajrzyj na nasze wiki po pełną dokumentację. Mamy nadzieję, że nasze narzędzie okaże się dla Ciebie przydatne.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Strona główna",
+ "schema.access": "Dostęp",
+ "schema.advanced": "Zaawansowane",
+ "schema.basic": "Podstawowe",
+ "schema.bot.SteamLogin.description": "Twój login do konta Steam",
+ "schema.bot.SteamPassword.description": "Twoje hasło do konta Steam",
+ "schema.bot.name": "Nazwa",
+ "schema.bot.name.description": "Nazwa bota",
+ "schema.community": "Społeczność",
+ "schema.connection": "Połączenie",
+ "schema.customization": "Dostosowywanie",
+ "schema.farming": "Farmienie",
+ "schema.generic.steamid64": "Twój identyfikator SteamID64",
+ "schema.misc": "Różne",
+ "schema.performance": "Wydajność",
+ "schema.remote_access": "Dostęp zdalny",
+ "schema.security": "Zabezpieczenia",
+ "schema.trading": "Handel",
+ "schema.updates": "Aktualizacje",
+ "static.add": "Dodaj"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/pt-BR.json b/docs/WebConfigGenerator/src/locale/pt-BR.json
new file mode 100644
index 000000000..0f79627d2
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/pt-BR.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "Gerador de configuração do ASF",
+ "button.advanced": "Alternar configurações avançadas",
+ "button.download": "Baixar",
+ "home.topic": "O gerador de configuração do ASF é uma ferramenta de utilidade pequena escrita em JavaScript, que ajuda você a criar os seus arquivos de configuração do ASF. Depois de baixar a configuração gerada, mova-a para a pasta config dentro do diretório principal do ASF. Para obter a documentação completa, consulte a nossa wiki. Esperamos que a nossa ferramenta seja útil para você.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Início",
+ "schema.access": "Acesso",
+ "schema.advanced": "Avançado",
+ "schema.basic": "Básico",
+ "schema.bot.SteamLogin.description": "Nome de usuário da conta Steam",
+ "schema.bot.SteamPassword.description": "Senha da conta Steam",
+ "schema.bot.name": "Nome",
+ "schema.bot.name.description": "Nome do bot",
+ "schema.community": "Comunidade",
+ "schema.connection": "Conexão",
+ "schema.customization": "Personalização",
+ "schema.farming": "Coleta",
+ "schema.generic.steamid64": "Seu ID Steam de 64 bits",
+ "schema.misc": "Diversos",
+ "schema.performance": "Desempenho",
+ "schema.remote_access": "Acesso remoto",
+ "schema.security": "Segurança",
+ "schema.trading": "Troca",
+ "schema.updates": "Atualizações",
+ "static.add": "Adicionar"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/pt-PT.json b/docs/WebConfigGenerator/src/locale/pt-PT.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/pt-PT.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/ro-RO.json b/docs/WebConfigGenerator/src/locale/ro-RO.json
new file mode 100644
index 000000000..fa0e11613
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/ro-RO.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "Generator de configurații ASF",
+ "button.advanced": "Comută setările avansate",
+ "button.download": "Descarcă",
+ "home.topic": "Generatorul de configurații ASF este un instrument utilitar mic scris în JavaScript care te ajută să îți creezi fișierele de configurare ASF. După descărcarea configurației generate, mut-o în folderul config înăuntrul directorului principal ASF. Pentru documentație completă consultă wiki-ul nostru. Sperăm că instrumentul nostru îți va fi util.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Pagina principală",
+ "schema.access": "Acces",
+ "schema.advanced": "Avansat",
+ "schema.basic": "De bază",
+ "schema.bot.SteamLogin.description": "Numele de autentificare al contului tău Steam",
+ "schema.bot.SteamPassword.description": "Parola contului tău Steam",
+ "schema.bot.name": "Nume",
+ "schema.bot.name.description": "Numele botului",
+ "schema.community": "Comunitate",
+ "schema.connection": "Conexiune",
+ "schema.customization": "Personalizare",
+ "schema.farming": "Farmare",
+ "schema.generic.steamid64": "SteamID64-ul tău",
+ "schema.misc": "Diverse",
+ "schema.performance": "Performanță",
+ "schema.remote_access": "Acces de la distanță",
+ "schema.security": "Securitate",
+ "schema.trading": "Realizarea de schimburi",
+ "schema.updates": "Actualizări",
+ "static.add": "Adaugă"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/ru-RU.json b/docs/WebConfigGenerator/src/locale/ru-RU.json
new file mode 100644
index 000000000..061402de7
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/ru-RU.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "Генератор конфигураций для ASF",
+ "button.advanced": "Отображение расширенных настроек",
+ "button.download": "Скачать",
+ "home.topic": "Генератор конфигураций для ASF - это небольшая утилита, написанная на JavaScript, которая позволяет создавать файлы конфигурации ASF. После загрузки созданного файла конфигурации, переместите его в папку config внутри основной папки ASF. Полная документация доступна в нашей wiki. Мы надеемся, что наш инструмент будет полезным для вас.",
+ "link.asf": "ASF",
+ "link.bot": "Бот",
+ "link.home": "Главная",
+ "schema.access": "Доступ",
+ "schema.advanced": "Расширенные настройки",
+ "schema.basic": "Основные настройки",
+ "schema.bot.SteamLogin.description": "Логин от вашего аккаунта Steam",
+ "schema.bot.SteamPassword.description": "Пароль от вашего аккаунта Steam",
+ "schema.bot.name": "Имя",
+ "schema.bot.name.description": "Название бота",
+ "schema.community": "Сообщество",
+ "schema.connection": "Соединение",
+ "schema.customization": "Дополнительные возможности",
+ "schema.farming": "Фарм",
+ "schema.generic.steamid64": "Ваш SteamID64",
+ "schema.misc": "Прочее",
+ "schema.performance": "Производительность",
+ "schema.remote_access": "Удаленный доступ",
+ "schema.security": "Безопасность",
+ "schema.trading": "Торговля",
+ "schema.updates": "Обновления",
+ "static.add": "Добавить"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/sk-SK.json b/docs/WebConfigGenerator/src/locale/sk-SK.json
new file mode 100644
index 000000000..4569d3f65
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/sk-SK.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Zobraziť rozšírené možnosti",
+ "button.download": "Stiahnuť",
+ "home.topic": "ASF Config Generator je jednoduchý nástroj napísaný v jazyku JavaScript, ktorý pomáha pri vytváraní konfiguračných súborov do ASF. Po stiahnutí vygenerovaného súboru je nutné presunúť ho do priečinka config, ktorý sa nachádza vo vnútri hlavného ASF priečinka. Pre plnú dokumentáciu klikni na wiki. Dúfame, že tento tool pre teba bude užitočný.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Domovská stránka",
+ "schema.access": "Prístup",
+ "schema.advanced": "Rozšírené",
+ "schema.basic": "Základné",
+ "schema.bot.SteamLogin.description": "Steam prihlasovacie meno",
+ "schema.bot.SteamPassword.description": "Steam prihlasovacie heslo",
+ "schema.bot.name": "Meno",
+ "schema.bot.name.description": "Meno bota",
+ "schema.community": "Komunita",
+ "schema.connection": "Pripojenie",
+ "schema.customization": "Vlastné nastavenie",
+ "schema.farming": "Farmenie",
+ "schema.generic.steamid64": "Tvoj SteamID64",
+ "schema.misc": "Rôzne",
+ "schema.performance": "Výkon",
+ "schema.remote_access": "Vzdialený prístup",
+ "schema.security": "Zabezpečenie",
+ "schema.trading": "Obchodovanie",
+ "schema.updates": "Aktualizácie",
+ "static.add": "Pridať"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/sr-CS.json b/docs/WebConfigGenerator/src/locale/sr-CS.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/sr-CS.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/strings.json b/docs/WebConfigGenerator/src/locale/strings.json
new file mode 100644
index 000000000..05a0d5034
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/strings.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Toggle advanced settings",
+ "button.download": "Download",
+ "home.topic": "ASF Config Generator is a small utility tool written in JavaScript, that helps you create your ASF configuration files. After downloading the generated config, move it to config folder inside ASF main directory. For full documentation refer to our wiki. We hope that our tool will be useful for you.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Home",
+ "schema.access": "Access",
+ "schema.advanced": "Advanced",
+ "schema.basic": "Basic",
+ "schema.bot.SteamLogin.description": "Your Steam account login",
+ "schema.bot.SteamPassword.description": "Your Steam account password",
+ "schema.bot.name": "Name",
+ "schema.bot.name.description": "Name of the bot",
+ "schema.community": "Community",
+ "schema.connection": "Connection",
+ "schema.customization": "Customization",
+ "schema.farming": "Farming",
+ "schema.generic.steamid64": "Your SteamID64",
+ "schema.misc": "Misc",
+ "schema.performance": "Performance",
+ "schema.remote_access": "Remote access",
+ "schema.security": "Security",
+ "schema.trading": "Trading",
+ "schema.updates": "Updates",
+ "static.add": "Add"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/sv-SE.json b/docs/WebConfigGenerator/src/locale/sv-SE.json
new file mode 100644
index 000000000..e236d3625
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/sv-SE.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "",
+ "button.advanced": "",
+ "button.download": "",
+ "home.topic": "",
+ "link.asf": "",
+ "link.bot": "",
+ "link.home": "",
+ "schema.access": "",
+ "schema.advanced": "",
+ "schema.basic": "",
+ "schema.bot.SteamLogin.description": "",
+ "schema.bot.SteamPassword.description": "",
+ "schema.bot.name": "",
+ "schema.bot.name.description": "",
+ "schema.community": "",
+ "schema.connection": "",
+ "schema.customization": "",
+ "schema.farming": "",
+ "schema.generic.steamid64": "",
+ "schema.misc": "",
+ "schema.performance": "",
+ "schema.remote_access": "",
+ "schema.security": "",
+ "schema.trading": "",
+ "schema.updates": "",
+ "static.add": ""
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/tr-TR.json b/docs/WebConfigGenerator/src/locale/tr-TR.json
new file mode 100644
index 000000000..37c5e053c
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/tr-TR.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Yapılandırma Oluşturucu",
+ "button.advanced": "Gelişmiş ayarları aç/kapat",
+ "button.download": "İndir",
+ "home.topic": "ASF Yapılandırma Oluşturucu, ASF yapılandırma dosyalarınızı oluşturmanıza yardımcı olan, JavaScript ile yazılmış küçük bir yardımcı araçtır. Oluşturulan yapılandırmayı indirdikten sonra, ASF ana dizininin içindeki config klasörüne taşıyın. Tam belgelendirme için vikimize bakın. Umarız aracımız sizin için kullanışlı olur.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Ana sayfa",
+ "schema.access": "Erişim",
+ "schema.advanced": "Gelişmiş",
+ "schema.basic": "Temel",
+ "schema.bot.SteamLogin.description": "Steam hesabı kullanıcı adınız",
+ "schema.bot.SteamPassword.description": "Steam hesabı parolanız",
+ "schema.bot.name": "İsim",
+ "schema.bot.name.description": "Botun ismi",
+ "schema.community": "Topluluk",
+ "schema.connection": "Bağlantı",
+ "schema.customization": "Özelleştirme",
+ "schema.farming": "İşleme",
+ "schema.generic.steamid64": "SteamID64 kimliğiniz",
+ "schema.misc": "Çeşitli",
+ "schema.performance": "Performans",
+ "schema.remote_access": "Uzaktan erişim",
+ "schema.security": "Güvenlik",
+ "schema.trading": "Takas",
+ "schema.updates": "Güncellemeler",
+ "static.add": "Ekle"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/uk-UA.json b/docs/WebConfigGenerator/src/locale/uk-UA.json
new file mode 100644
index 000000000..1aece39b7
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/uk-UA.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "Генератор конфігурацій ASF",
+ "button.advanced": "Відображення додаткових налаштувань",
+ "button.download": "Скачати",
+ "home.topic": "Генератор конфігурацій ASF це невеличка утиліта, написана на JavaScript, яка допоможе вам створити власні файли конфігурації ASF. Після скачування згенерованої конфігурації, перемістить ії до папки config що знаходиться в основній папці ASF. Повну документацію можна подивитися у нашій wiki. Сподіваємось цей інструмент буде для вас корисним.",
+ "link.asf": "ASF",
+ "link.bot": "Бот",
+ "link.home": "Головна",
+ "schema.access": "Доступ",
+ "schema.advanced": "Додаткові налаштування",
+ "schema.basic": "Основні налаштування",
+ "schema.bot.SteamLogin.description": "Логін від вашого акаунта Steam",
+ "schema.bot.SteamPassword.description": "Пароль від вашого акаунта Steam",
+ "schema.bot.name": "Ім'я",
+ "schema.bot.name.description": "Ім'я бота",
+ "schema.community": "Спільнота",
+ "schema.connection": "З'єднання",
+ "schema.customization": "Додаткові можливості",
+ "schema.farming": "Вибивання карток",
+ "schema.generic.steamid64": "Ваш SteamID64",
+ "schema.misc": "Інше",
+ "schema.performance": "Продуктивність",
+ "schema.remote_access": "Дистанційний доступ",
+ "schema.security": "Безпека",
+ "schema.trading": "Обміни",
+ "schema.updates": "Оновлення",
+ "static.add": "Додати"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/vi-VN.json b/docs/WebConfigGenerator/src/locale/vi-VN.json
new file mode 100644
index 000000000..240e7dfb5
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/vi-VN.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF Config Generator",
+ "button.advanced": "Hiển thị cài đặt nâng cao",
+ "button.download": "Tải về",
+ "home.topic": "ASF Config Generator là một công cụ được viết bằng JavaScript, giúp bạn tạo file cài đặt cho ASF. Sau khi tải về file.json, hãy chuyển nó đến thư mục config trong thư mục gốc của ASF. Để xem toàn bộ hướng dẫn về ASF, hãy truy cập trang wiki. Hy vọng công cụ này sẽ giúp bạn trong việc tuỳ chỉnh ASF.",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "Trang chủ",
+ "schema.access": "Truy cập",
+ "schema.advanced": "Nâng cao",
+ "schema.basic": "Cơ bản",
+ "schema.bot.SteamLogin.description": "Tài khoản Steam",
+ "schema.bot.SteamPassword.description": "Mật khẩu Steam",
+ "schema.bot.name": "Tên",
+ "schema.bot.name.description": "Tên của tài khoản bot",
+ "schema.community": "Cộng đồng",
+ "schema.connection": "Kết nối",
+ "schema.customization": "Tuỳ chỉnh",
+ "schema.farming": "Farming",
+ "schema.generic.steamid64": "ID64 tài khoản Steam chính của bạn",
+ "schema.misc": "Linh tinh",
+ "schema.performance": "Hiệu năng",
+ "schema.remote_access": "Truy cập từ xa",
+ "schema.security": "Bảo mật",
+ "schema.trading": "Giao dịch",
+ "schema.updates": "Các cập nhật",
+ "static.add": "Thêm"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/zh-CN.json b/docs/WebConfigGenerator/src/locale/zh-CN.json
new file mode 100644
index 000000000..794dbb6dd
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/zh-CN.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF 配置文件生成器",
+ "button.advanced": "切换高级设置",
+ "button.download": "下载",
+ "home.topic": "ASF 配置文件生成器是以 JavaScript 写成,用于帮你创建你的 ASF 配置文件的小实用工具。在下载生成的配置文件后,请将它移动到 ASF 根目录下的 config 文件夹。对于完整文档,请参考我们的维基页面。我们希望这一工具能对您有帮助。",
+ "link.asf": "ASF",
+ "link.bot": "机器人",
+ "link.home": "首页",
+ "schema.access": "访问",
+ "schema.advanced": "高级",
+ "schema.basic": "基本",
+ "schema.bot.SteamLogin.description": "你的 Steam 账户用户名",
+ "schema.bot.SteamPassword.description": "你的 Steam 账户密码",
+ "schema.bot.name": "名称",
+ "schema.bot.name.description": "机器人名称",
+ "schema.community": "社区",
+ "schema.connection": "连接",
+ "schema.customization": "自定义",
+ "schema.farming": "挂卡",
+ "schema.generic.steamid64": "你的 SteamID64位ID",
+ "schema.misc": "杂项",
+ "schema.performance": "性能",
+ "schema.remote_access": "远程访问",
+ "schema.security": "安全",
+ "schema.trading": "交易",
+ "schema.updates": "更新",
+ "static.add": "新增"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/locale/zh-TW.json b/docs/WebConfigGenerator/src/locale/zh-TW.json
new file mode 100644
index 000000000..ae9ef93d4
--- /dev/null
+++ b/docs/WebConfigGenerator/src/locale/zh-TW.json
@@ -0,0 +1,28 @@
+{
+ "app.name": "ASF 設定檔產生器",
+ "button.advanced": "切換到進階設定",
+ "button.download": "下載",
+ "home.topic": "ASF 設定檔產生器是一款採用 JavaScript 編寫的小型工具,可幫助您創建 ASF 設定文件。下載產生的設定檔後,將設定檔存放到 ASF 目錄下的 config 資料夾中。有關完整的使用說明,請參閱我們的 wiki,希望我們的工具對您有幫助!",
+ "link.asf": "ASF",
+ "link.bot": "Bot",
+ "link.home": "首頁",
+ "schema.access": "權限",
+ "schema.advanced": "進階",
+ "schema.basic": "基本",
+ "schema.bot.SteamLogin.description": "您的 Steam 帳號",
+ "schema.bot.SteamPassword.description": "您的 Steam 密碼",
+ "schema.bot.name": "名稱",
+ "schema.bot.name.description": "Bot 名稱",
+ "schema.community": "社群",
+ "schema.connection": "連接",
+ "schema.customization": "自訂",
+ "schema.farming": "掛卡",
+ "schema.generic.steamid64": "您的 SteamID64",
+ "schema.misc": "其他",
+ "schema.performance": "性能",
+ "schema.remote_access": "遠端存取",
+ "schema.security": "安全性",
+ "schema.trading": "交易",
+ "schema.updates": "更新",
+ "static.add": "新增"
+}
\ No newline at end of file
diff --git a/docs/WebConfigGenerator/src/main.js b/docs/WebConfigGenerator/src/main.js
new file mode 100644
index 000000000..da2c69e8e
--- /dev/null
+++ b/docs/WebConfigGenerator/src/main.js
@@ -0,0 +1,29 @@
+// The Vue build version to load with the `import` command
+// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
+import Vue from 'vue';
+import VueI18n from 'vue-i18n';
+
+import App from './App.vue';
+import i18nSettings from './i18n.js';
+import router from './router';
+
+Vue.config.productionTip = false;
+
+Vue.use(VueI18n);
+
+console.log(i18nSettings);
+
+const i18n = new VueI18n(i18nSettings);
+
+/* eslint-disable no-new */
+new Vue({
+ el: '#app',
+ router,
+ i18n,
+ template: '',
+ components: { App }
+});
+
+if ('serviceWorker' in navigator) {
+ navigator.serviceWorker.register('service-worker.js');
+}
diff --git a/docs/WebConfigGenerator/src/router/index.js b/docs/WebConfigGenerator/src/router/index.js
new file mode 100644
index 000000000..ca01c776a
--- /dev/null
+++ b/docs/WebConfigGenerator/src/router/index.js
@@ -0,0 +1,28 @@
+import ASFConfig from '@/components/ASFConfig';
+import BotConfig from '@/components/BotConfig';
+import Home from '@/components/Home';
+
+import Vue from 'vue';
+import Router from 'vue-router';
+
+Vue.use(Router);
+
+export default new Router({
+ routes: [
+ {
+ path: '/',
+ name: 'Home',
+ component: Home
+ },
+ {
+ path: '/asf',
+ name: 'ASFConfig',
+ component: ASFConfig
+ },
+ {
+ path: '/bot',
+ name: 'BotConfig',
+ component: BotConfig
+ }
+ ]
+});
diff --git a/docs/WebConfigGenerator/src/schema.js b/docs/WebConfigGenerator/src/schema.js
new file mode 100644
index 000000000..310ca5123
--- /dev/null
+++ b/docs/WebConfigGenerator/src/schema.js
@@ -0,0 +1,2553 @@
+import Validators from './validators';
+
+export default {
+ 'V3.1.0.9+': {
+ asf: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ label: 'SteamOwnerID',
+ field: 's_SteamOwnerID',
+ placeholder: '0',
+ type: 'InputText',
+ description: 'schema.generic.steamid64',
+ validator: Validators.steamid
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'Statistics',
+ label: 'Statistics',
+ defaultValue: true
+ },
+ {
+ label: 'Blacklist',
+ field: 'Blacklist',
+ type: 'InputSet',
+ validator: Validators.uint
+ },
+ {
+ label: 'CurrentCulture',
+ field: 'CurrentCulture',
+ type: 'InputText',
+ placeholder: 'en-US'
+ },
+ {
+ label: 'MaxTradeHoldDuration',
+ field: 'MaxTradeHoldDuration',
+ placeholder: 15,
+ type: 'InputNumber',
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.updates',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'AutoRestart',
+ label: 'AutoRestart',
+ defaultValue: true
+ },
+ {
+ label: 'UpdateChannel',
+ field: 'UpdateChannel',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Stable' },
+ { value: 2, name: 'Experimental' }
+ ],
+ defaultValue: 1
+ },
+ {
+ label: 'UpdatePeriod',
+ field: 'UpdatePeriod',
+ type: 'InputNumber',
+ placeholder: 24,
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.remote_access',
+ advanced: true,
+ fields: [
+ {
+ label: 'IPCPassword',
+ field: 'IPCPassword',
+ placeholder: '',
+ type: 'InputPassword'
+ },
+ {
+ label: 'IPCPrefixes',
+ field: 'IPCPrefixes',
+ type: 'InputSet'
+ },
+ {
+ label: 'Headless',
+ field: 'Headless',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ }
+ ]
+ },
+ {
+ legend: 'schema.connection',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'SteamProtocols',
+ field: 'SteamProtocols',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'TCP' },
+ { value: 2, name: 'UDP' },
+ { value: 4, name: 'WebSocket' }
+ ],
+ defaultValue: 0,
+ advanced: true
+ },
+ {
+ label: 'ConnectionTimeout',
+ field: 'ConnectionTimeout',
+ placeholder: 60,
+ type: 'InputNumber',
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'ConfirmationsLimiterDelay',
+ field: 'ConfirmationsLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'FarmingDelay',
+ field: 'FarmingDelay',
+ type: 'InputNumber',
+ placeholder: 15,
+ validator: Validators.byte
+ },
+ {
+ label: 'GiftsLimiterDelay',
+ field: 'GiftsLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 1,
+ validator: Validators.byte
+ },
+ {
+ label: 'IdleFarmingPeriod',
+ field: 'IdleFarmingPeriod',
+ type: 'InputNumber',
+ placeholder: 8,
+ validator: Validators.byte
+ },
+ {
+ label: 'InventoryLimiterDelay',
+ field: 'InventoryLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ },
+ {
+ label: 'LoginLimiterDelay',
+ field: 'LoginLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'MaxFarmingTime',
+ field: 'MaxFarmingTime',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'OptimizationMode',
+ field: 'OptimizationMode',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'MaxPerformance' },
+ { value: 1, name: 'MinMemoryUsage' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.advanced',
+ advanced: true,
+ fields: [
+ {
+ label: 'Debug',
+ field: 'Debug',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ },
+ {
+ label: 'BackgroundGCPeriod',
+ field: 'BackgroundGCPeriod',
+ type: 'InputNumber',
+ placeholder: 0,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ],
+ bot: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ type: 'InputText',
+ label: 'Name',
+ field: 'name',
+ required: true,
+ description: 'schema.bot.name.description'
+ },
+ {
+ type: 'InputText',
+ label: 'SteamLogin',
+ field: 'SteamLogin',
+ description: 'schema.bot.SteamLogin.description'
+ },
+ {
+ type: 'InputPassword',
+ label: 'SteamPassword',
+ field: 'SteamPassword',
+ description: 'schema.bot.SteamPassword.description'
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Enabled',
+ field: 'Enabled',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IsBotAccount',
+ field: 'IsBotAccount',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Paused',
+ field: 'Paused',
+ defaultValue: false,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.security',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'PasswordFormat',
+ field: 'PasswordFormat',
+ options: [
+ { value: 0, name: 'PlainText' },
+ { value: 1, name: 'AES' },
+ { value: 2, name: 'ProtectedDataForCurrentUser' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'UseLoginKeys',
+ field: 'UseLoginKeys',
+ defaultValue: true,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.access',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputMap',
+ label: 'SteamUserPermissions',
+ field: 'SteamUserPermissions',
+ keyPlaceholder: 'SteamID64',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'FamilySharing' },
+ { value: 2, name: 'Operator' },
+ { value: 3, name: 'Master' }
+ ],
+ defaultValue: 0,
+ keyValidator: Validators.steamid
+ },
+ {
+ type: 'InputText',
+ label: 'SteamParentalPIN',
+ field: 'SteamParentalPIN',
+ placeholder: 0,
+ validator: Validators.parentalPIN
+ }
+ ]
+ },
+ {
+ legend: 'schema.community',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ label: 'HandleOfflineMessages',
+ field: 'HandleOfflineMessages',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.trading',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamTradeToken',
+ field: 'SteamTradeToken',
+ validator: Validators.tradeToken
+ },
+ {
+ type: 'InputFlag',
+ label: 'TradingPreferences',
+ field: 'TradingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'AcceptDonations' },
+ { value: 2, name: 'SteamTradeMatcher' },
+ { value: 4, name: 'MatchEverything' },
+ { value: 8, name: 'DontAcceptBotTrades' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'LootableTypes',
+ field: 'LootableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'MatchableTypes',
+ field: 'MatchableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AcceptGifts',
+ field: 'AcceptGifts',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'DismissInventoryNotifications',
+ field: 'DismissInventoryNotifications',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.farming',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'FarmingOrder',
+ field: 'FarmingOrder',
+ options: [
+ { value: 0, name: 'Unordered' },
+ { value: 1, name: 'AppIDsAscending' },
+ { value: 2, name: 'AppIDsDescending' },
+ { value: 3, name: 'CardDropsAscending' },
+ { value: 4, name: 'CardDropsDescending' },
+ { value: 5, name: 'HoursAscending' },
+ { value: 6, name: 'HoursDescending' },
+ { value: 7, name: 'NamesAscending' },
+ { value: 8, name: 'NamesDescending' },
+ { value: 9, name: 'Random' },
+ { value: 10, name: 'BadgeLevelsAscending' },
+ { value: 11, name: 'BadgeLevelsDescending' },
+ { value: 12, name: 'RedeemDateTimesAscending' },
+ { value: 13, name: 'RedeemDateTimesDescending' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputNumber',
+ label: 'SendTradePeriod',
+ field: 'SendTradePeriod',
+ placeholder: 0,
+ validator: Validators.byte
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AutoSteamSaleEvent',
+ field: 'AutoSteamSaleEvent',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IdlePriorityQueueOnly',
+ field: 'IdlePriorityQueueOnly',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IdleRefundableGames',
+ field: 'IdleRefundableGames',
+ defaultValue: true
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'FarmOffline',
+ field: 'FarmOffline',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'SendOnFarmingFinished',
+ field: 'SendOnFarmingFinished',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'ShutdownOnFarmingFinished',
+ field: 'ShutdownOnFarmingFinished',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.customization',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamMasterClanID',
+ field: 's_SteamMasterClanID',
+ placeholder: 0,
+ validator: Validators.masterClan
+ },
+ {
+ type: 'InputSet',
+ label: 'GamesPlayedWhileIdle',
+ field: 'GamesPlayedWhileIdle',
+ validator: Validators.uint
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileFarming',
+ field: 'CustomGamePlayedWhileFarming'
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileIdle',
+ field: 'CustomGamePlayedWhileIdle'
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'RedeemingPreferences',
+ field: 'RedeemingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Forwarding' },
+ { value: 2, name: 'Distributing' },
+ { value: 4, name: 'KeepMissingGames' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'HoursUntilCardDrops',
+ field: 'HoursUntilCardDrops',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ]
+ },
+ 'V3.0.5.8-V3.1.0.1': {
+ asf: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ label: 'SteamOwnerID',
+ field: 's_SteamOwnerID',
+ placeholder: '0',
+ type: 'InputText',
+ description: 'schema.generic.steamid64',
+ validator: Validators.steamid
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'Statistics',
+ label: 'Statistics',
+ defaultValue: true
+ },
+ {
+ label: 'Blacklist',
+ field: 'Blacklist',
+ type: 'InputSet',
+ validator: Validators.uint
+ },
+ {
+ label: 'CurrentCulture',
+ field: 'CurrentCulture',
+ type: 'InputText',
+ placeholder: 'en-US'
+ },
+ {
+ label: 'MaxTradeHoldDuration',
+ field: 'MaxTradeHoldDuration',
+ placeholder: 15,
+ type: 'InputNumber',
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.updates',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'AutoRestart',
+ label: 'AutoRestart',
+ defaultValue: true
+ },
+ {
+ label: 'UpdateChannel',
+ field: 'UpdateChannel',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Stable' },
+ { value: 2, name: 'Experimental' }
+ ],
+ defaultValue: 1
+ },
+ {
+ label: 'UpdatePeriod',
+ field: 'UpdatePeriod',
+ type: 'InputNumber',
+ placeholder: 24,
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.remote_access',
+ advanced: true,
+ fields: [
+ {
+ label: 'IPCHost',
+ field: 'IPCHost',
+ placeholder: '127.0.0.1',
+ type: 'InputText'
+ },
+ {
+ label: 'IPCPassword',
+ field: 'IPCPassword',
+ placeholder: '',
+ type: 'InputPassword'
+ },
+ {
+ label: 'IPCPort',
+ field: 'IPCPort',
+ placeholder: 1242,
+ type: 'InputNumber',
+ validator: Validators.ushort
+ },
+ {
+ label: 'Headless',
+ field: 'Headless',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ }
+ ]
+ },
+ {
+ legend: 'schema.connection',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'SteamProtocols',
+ field: 'SteamProtocols',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'TCP' },
+ { value: 2, name: 'UDP' },
+ { value: 4, name: 'WebSocket' }
+ ],
+ defaultValue: 0,
+ advanced: true
+ },
+ {
+ label: 'ConnectionTimeout',
+ field: 'ConnectionTimeout',
+ placeholder: 60,
+ type: 'InputNumber',
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'ConfirmationsLimiterDelay',
+ field: 'ConfirmationsLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'FarmingDelay',
+ field: 'FarmingDelay',
+ type: 'InputNumber',
+ placeholder: 15,
+ validator: Validators.byte
+ },
+ {
+ label: 'GiftsLimiterDelay',
+ field: 'GiftsLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 1,
+ validator: Validators.byte
+ },
+ {
+ label: 'IdleFarmingPeriod',
+ field: 'IdleFarmingPeriod',
+ type: 'InputNumber',
+ placeholder: 8,
+ validator: Validators.byte
+ },
+ {
+ label: 'InventoryLimiterDelay',
+ field: 'InventoryLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ },
+ {
+ label: 'LoginLimiterDelay',
+ field: 'LoginLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'MaxFarmingTime',
+ field: 'MaxFarmingTime',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'OptimizationMode',
+ field: 'OptimizationMode',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'MaxPerformance' },
+ { value: 1, name: 'MinMemoryUsage' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.advanced',
+ advanced: true,
+ fields: [
+ {
+ label: 'Debug',
+ field: 'Debug',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ },
+ {
+ label: 'BackgroundGCPeriod',
+ field: 'BackgroundGCPeriod',
+ type: 'InputNumber',
+ placeholder: 0,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ],
+ bot: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ type: 'InputText',
+ label: 'Name',
+ field: 'name',
+ required: true,
+ description: 'schema.bot.name.description'
+ },
+ {
+ type: 'InputText',
+ label: 'SteamLogin',
+ field: 'SteamLogin',
+ description: 'schema.bot.SteamLogin.description'
+ },
+ {
+ type: 'InputPassword',
+ label: 'SteamPassword',
+ field: 'SteamPassword',
+ description: 'schema.bot.SteamPassword.description'
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Enabled',
+ field: 'Enabled',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IsBotAccount',
+ field: 'IsBotAccount',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Paused',
+ field: 'Paused',
+ defaultValue: false,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.security',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'PasswordFormat',
+ field: 'PasswordFormat',
+ options: [
+ { value: 0, name: 'PlainText' },
+ { value: 1, name: 'AES' },
+ { value: 2, name: 'ProtectedDataForCurrentUser' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'UseLoginKeys',
+ field: 'UseLoginKeys',
+ defaultValue: true,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.access',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputMap',
+ label: 'SteamUserPermissions',
+ field: 'SteamUserPermissions',
+ keyPlaceholder: 'SteamID64',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'FamilySharing' },
+ { value: 2, name: 'Operator' },
+ { value: 3, name: 'Master' }
+ ],
+ defaultValue: 0,
+ keyValidator: Validators.steamid
+ },
+ {
+ type: 'InputText',
+ label: 'SteamParentalPIN',
+ field: 'SteamParentalPIN',
+ placeholder: 0,
+ validator: Validators.parentalPIN
+ }
+ ]
+ },
+ {
+ legend: 'schema.community',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ label: 'HandleOfflineMessages',
+ field: 'HandleOfflineMessages',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.trading',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamTradeToken',
+ field: 'SteamTradeToken',
+ validator: Validators.tradeToken
+ },
+ {
+ type: 'InputFlag',
+ label: 'TradingPreferences',
+ field: 'TradingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'AcceptDonations' },
+ { value: 2, name: 'SteamTradeMatcher' },
+ { value: 4, name: 'MatchEverything' },
+ { value: 8, name: 'DontAcceptBotTrades' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'LootableTypes',
+ field: 'LootableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'MatchableTypes',
+ field: 'MatchableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AcceptGifts',
+ field: 'AcceptGifts',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'DismissInventoryNotifications',
+ field: 'DismissInventoryNotifications',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.farming',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'FarmingOrder',
+ field: 'FarmingOrder',
+ options: [
+ { value: 0, name: 'Unordered' },
+ { value: 1, name: 'AppIDsAscending' },
+ { value: 2, name: 'AppIDsDescending' },
+ { value: 3, name: 'CardDropsAscending' },
+ { value: 4, name: 'CardDropsDescending' },
+ { value: 5, name: 'HoursAscending' },
+ { value: 6, name: 'HoursDescending' },
+ { value: 7, name: 'NamesAscending' },
+ { value: 8, name: 'NamesDescending' },
+ { value: 9, name: 'Random' },
+ { value: 10, name: 'BadgeLevelsAscending' },
+ { value: 11, name: 'BadgeLevelsDescending' },
+ { value: 12, name: 'RedeemDateTimesAscending' },
+ { value: 13, name: 'RedeemDateTimesDescending' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputNumber',
+ label: 'SendTradePeriod',
+ field: 'SendTradePeriod',
+ placeholder: 0,
+ validator: Validators.byte
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AutoSteamSaleEvent',
+ field: 'AutoSteamSaleEvent',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IdleRefundableGames',
+ field: 'IdleRefundableGames',
+ defaultValue: true
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'FarmOffline',
+ field: 'FarmOffline',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'SendOnFarmingFinished',
+ field: 'SendOnFarmingFinished',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'ShutdownOnFarmingFinished',
+ field: 'ShutdownOnFarmingFinished',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.customization',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamMasterClanID',
+ field: 's_SteamMasterClanID',
+ placeholder: 0,
+ validator: Validators.masterClan
+ },
+ {
+ type: 'InputSet',
+ label: 'GamesPlayedWhileIdle',
+ field: 'GamesPlayedWhileIdle',
+ validator: Validators.uint
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileFarming',
+ field: 'CustomGamePlayedWhileFarming'
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileIdle',
+ field: 'CustomGamePlayedWhileIdle'
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'RedeemingPreferences',
+ field: 'RedeemingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Forwarding' },
+ { value: 2, name: 'Distributing' },
+ { value: 4, name: 'KeepMissingGames' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'HoursUntilCardDrops',
+ field: 'HoursUntilCardDrops',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ]
+ },
+ 'V3.0.5.0-V3.0.5.5': {
+ asf: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ label: 'SteamOwnerID',
+ field: 's_SteamOwnerID',
+ placeholder: '0',
+ type: 'InputText',
+ description: 'schema.generic.steamid64',
+ validator: Validators.steamid
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'Statistics',
+ label: 'Statistics',
+ defaultValue: true
+ },
+ {
+ label: 'Blacklist',
+ field: 'Blacklist',
+ type: 'InputSet',
+ validator: Validators.uint
+ },
+ {
+ label: 'CurrentCulture',
+ field: 'CurrentCulture',
+ type: 'InputText',
+ placeholder: 'en-US'
+ },
+ {
+ label: 'MaxTradeHoldDuration',
+ field: 'MaxTradeHoldDuration',
+ placeholder: 15,
+ type: 'InputNumber',
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.updates',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'AutoRestart',
+ label: 'AutoRestart',
+ defaultValue: true
+ },
+ {
+ label: 'UpdateChannel',
+ field: 'UpdateChannel',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Stable' },
+ { value: 2, name: 'Experimental' }
+ ],
+ defaultValue: 1
+ },
+ {
+ label: 'UpdatePeriod',
+ field: 'UpdatePeriod',
+ type: 'InputNumber',
+ placeholder: 24,
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.remote_access',
+ advanced: true,
+ fields: [
+ {
+ label: 'IPCHost',
+ field: 'IPCHost',
+ placeholder: '127.0.0.1',
+ type: 'InputText'
+ },
+ {
+ label: 'IPCPassword',
+ field: 'IPCPassword',
+ placeholder: '',
+ type: 'InputPassword'
+ },
+ {
+ label: 'IPCPort',
+ field: 'IPCPort',
+ placeholder: 1242,
+ type: 'InputNumber',
+ validator: Validators.ushort
+ },
+ {
+ label: 'Headless',
+ field: 'Headless',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ }
+ ]
+ },
+ {
+ legend: 'schema.connection',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'SteamProtocols',
+ field: 'SteamProtocols',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'TCP' },
+ { value: 2, name: 'UDP' },
+ { value: 4, name: 'WebSocket' }
+ ],
+ defaultValue: 0,
+ advanced: true
+ },
+ {
+ label: 'ConnectionTimeout',
+ field: 'ConnectionTimeout',
+ placeholder: 60,
+ type: 'InputNumber',
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'FarmingDelay',
+ field: 'FarmingDelay',
+ type: 'InputNumber',
+ placeholder: 15,
+ validator: Validators.byte
+ },
+ {
+ label: 'GiftsLimiterDelay',
+ field: 'GiftsLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 1,
+ validator: Validators.byte
+ },
+ {
+ label: 'IdleFarmingPeriod',
+ field: 'IdleFarmingPeriod',
+ type: 'InputNumber',
+ placeholder: 8,
+ validator: Validators.byte
+ },
+ {
+ label: 'InventoryLimiterDelay',
+ field: 'InventoryLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ },
+ {
+ label: 'LoginLimiterDelay',
+ field: 'LoginLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'MaxFarmingTime',
+ field: 'MaxFarmingTime',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'OptimizationMode',
+ field: 'OptimizationMode',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'MaxPerformance' },
+ { value: 1, name: 'MinMemoryUsage' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.advanced',
+ advanced: true,
+ fields: [
+ {
+ label: 'Debug',
+ field: 'Debug',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ },
+ {
+ label: 'BackgroundGCPeriod',
+ field: 'BackgroundGCPeriod',
+ type: 'InputNumber',
+ placeholder: 0,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ],
+ bot: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ type: 'InputText',
+ label: 'Name',
+ field: 'name',
+ required: true,
+ description: 'schema.bot.name.description'
+ },
+ {
+ type: 'InputText',
+ label: 'SteamLogin',
+ field: 'SteamLogin',
+ description: 'schema.bot.SteamLogin.description'
+ },
+ {
+ type: 'InputPassword',
+ label: 'SteamPassword',
+ field: 'SteamPassword',
+ description: 'schema.bot.SteamPassword.description'
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Enabled',
+ field: 'Enabled',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IsBotAccount',
+ field: 'IsBotAccount',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Paused',
+ field: 'Paused',
+ defaultValue: false,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.security',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'PasswordFormat',
+ field: 'PasswordFormat',
+ options: [
+ { value: 0, name: 'PlainText' },
+ { value: 1, name: 'AES' },
+ { value: 2, name: 'ProtectedDataForCurrentUser' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'UseLoginKeys',
+ field: 'UseLoginKeys',
+ defaultValue: true,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.access',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputMap',
+ label: 'SteamUserPermissions',
+ field: 'SteamUserPermissions',
+ keyPlaceholder: 'SteamID64',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'FamilySharing' },
+ { value: 2, name: 'Operator' },
+ { value: 3, name: 'Master' }
+ ],
+ defaultValue: 0,
+ keyValidator: Validators.steamid
+ },
+ {
+ type: 'InputText',
+ label: 'SteamParentalPIN',
+ field: 'SteamParentalPIN',
+ placeholder: 0,
+ validator: Validators.parentalPIN
+ }
+ ]
+ },
+ {
+ legend: 'schema.community',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ label: 'HandleOfflineMessages',
+ field: 'HandleOfflineMessages',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.trading',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamTradeToken',
+ field: 'SteamTradeToken',
+ validator: Validators.tradeToken
+ },
+ {
+ type: 'InputFlag',
+ label: 'TradingPreferences',
+ field: 'TradingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'AcceptDonations' },
+ { value: 2, name: 'SteamTradeMatcher' },
+ { value: 4, name: 'MatchEverything' },
+ { value: 8, name: 'DontAcceptBotTrades' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'LootableTypes',
+ field: 'LootableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'MatchableTypes',
+ field: 'MatchableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AcceptGifts',
+ field: 'AcceptGifts',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'DismissInventoryNotifications',
+ field: 'DismissInventoryNotifications',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.farming',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'FarmingOrder',
+ field: 'FarmingOrder',
+ options: [
+ { value: 0, name: 'Unordered' },
+ { value: 1, name: 'AppIDsAscending' },
+ { value: 2, name: 'AppIDsDescending' },
+ { value: 3, name: 'CardDropsAscending' },
+ { value: 4, name: 'CardDropsDescending' },
+ { value: 5, name: 'HoursAscending' },
+ { value: 6, name: 'HoursDescending' },
+ { value: 7, name: 'NamesAscending' },
+ { value: 8, name: 'NamesDescending' },
+ { value: 9, name: 'Random' },
+ { value: 10, name: 'BadgeLevelsAscending' },
+ { value: 11, name: 'BadgeLevelsDescending' },
+ { value: 12, name: 'RedeemDateTimesAscending' },
+ { value: 13, name: 'RedeemDateTimesDescending' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputNumber',
+ label: 'SendTradePeriod',
+ field: 'SendTradePeriod',
+ placeholder: 0,
+ validator: Validators.byte
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AutoDiscoveryQueue',
+ field: 'AutoDiscoveryQueue',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IdleRefundableGames',
+ field: 'IdleRefundableGames',
+ defaultValue: true
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'FarmOffline',
+ field: 'FarmOffline',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'SendOnFarmingFinished',
+ field: 'SendOnFarmingFinished',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'ShutdownOnFarmingFinished',
+ field: 'ShutdownOnFarmingFinished',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.customization',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamMasterClanID',
+ field: 's_SteamMasterClanID',
+ placeholder: 0,
+ validator: Validators.masterClan
+ },
+ {
+ type: 'InputSet',
+ label: 'GamesPlayedWhileIdle',
+ field: 'GamesPlayedWhileIdle',
+ validator: Validators.uint
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileFarming',
+ field: 'CustomGamePlayedWhileFarming'
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileIdle',
+ field: 'CustomGamePlayedWhileIdle'
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'RedeemingPreferences',
+ field: 'RedeemingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Forwarding' },
+ { value: 2, name: 'Distributing' },
+ { value: 4, name: 'KeepMissingGames' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'HoursUntilCardDrops',
+ field: 'HoursUntilCardDrops',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ]
+ },
+ 'V3.0.3.7-V3.0.4.8': {
+ asf: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ label: 'SteamOwnerID',
+ field: 's_SteamOwnerID',
+ placeholder: '0',
+ type: 'InputText',
+ description: 'schema.generic.steamid64',
+ validator: Validators.steamid
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'Statistics',
+ label: 'Statistics',
+ defaultValue: true,
+ advanced: true
+ },
+ {
+ label: 'Blacklist',
+ field: 'Blacklist',
+ type: 'InputSet',
+ validator: Validators.uint
+ },
+ {
+ label: 'CurrentCulture',
+ field: 'CurrentCulture',
+ type: 'InputText',
+ placeholder: 'en-US',
+ advanced: true
+ },
+ {
+ label: 'MaxTradeHoldDuration',
+ field: 'MaxTradeHoldDuration',
+ placeholder: 15,
+ type: 'InputNumber',
+ advanced: true,
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.updates',
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'AutoUpdates',
+ label: 'AutoUpdates',
+ defaultValue: true
+ },
+ {
+ type: 'InputCheckbox',
+ field: 'AutoRestart',
+ label: 'AutoRestart',
+ defaultValue: true,
+ advanced: true
+ },
+ {
+ label: 'UpdateChannel',
+ field: 'UpdateChannel',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Stable' },
+ { value: 2, name: 'Experimental' }
+ ],
+ defaultValue: 1,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.remote_access',
+ advanced: true,
+ fields: [
+ {
+ label: 'IPCHost',
+ field: 'IPCHost',
+ placeholder: '127.0.0.1',
+ type: 'InputText'
+ },
+ {
+ label: 'IPCPort',
+ field: 'IPCPort',
+ placeholder: 1242,
+ type: 'InputNumber',
+ validator: Validators.ushort
+ },
+ {
+ label: 'Headless',
+ field: 'Headless',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ }
+ ]
+ },
+ {
+ legend: 'schema.connection',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'SteamProtocols',
+ field: 'SteamProtocols',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'TCP' },
+ { value: 2, name: 'UDP' },
+ { value: 4, name: 'WebSocket' }
+ ],
+ defaultValue: 0,
+ advanced: true
+ },
+ {
+ label: 'ConnectionTimeout',
+ field: 'ConnectionTimeout',
+ placeholder: 60,
+ type: 'InputNumber',
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'FarmingDelay',
+ field: 'FarmingDelay',
+ type: 'InputNumber',
+ placeholder: 15,
+ validator: Validators.byte
+ },
+ {
+ label: 'GiftsLimiterDelay',
+ field: 'GiftsLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 1,
+ validator: Validators.byte
+ },
+ {
+ label: 'IdleFarmingPeriod',
+ field: 'IdleFarmingPeriod',
+ type: 'InputNumber',
+ placeholder: 8,
+ validator: Validators.byte
+ },
+ {
+ label: 'InventoryLimiterDelay',
+ field: 'InventoryLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ },
+ {
+ label: 'LoginLimiterDelay',
+ field: 'LoginLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'MaxFarmingTime',
+ field: 'MaxFarmingTime',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'OptimizationMode',
+ field: 'OptimizationMode',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'MaxPerformance' },
+ { value: 1, name: 'MinMemoryUsage' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.advanced',
+ advanced: true,
+ fields: [
+ {
+ label: 'Debug',
+ field: 'Debug',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ },
+ {
+ label: 'BackgroundGCPeriod',
+ field: 'BackgroundGCPeriod',
+ type: 'InputNumber',
+ placeholder: 0,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ],
+ bot: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ type: 'InputText',
+ label: 'Name',
+ field: 'name',
+ required: true,
+ description: 'schema.bot.name.description'
+ },
+ {
+ type: 'InputText',
+ label: 'SteamLogin',
+ field: 'SteamLogin',
+ description: 'schema.bot.SteamLogin.description'
+ },
+ {
+ type: 'InputPassword',
+ label: 'SteamPassword',
+ field: 'SteamPassword',
+ description: 'schema.bot.SteamPassword.description'
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Enabled',
+ field: 'Enabled',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IsBotAccount',
+ field: 'IsBotAccount',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Paused',
+ field: 'Paused',
+ defaultValue: false,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.security',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'PasswordFormat',
+ field: 'PasswordFormat',
+ options: [
+ { value: 0, name: 'PlainText' },
+ { value: 1, name: 'AES' },
+ { value: 2, name: 'ProtectedDataForCurrentUser' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.access',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputMap',
+ label: 'SteamUserPermissions',
+ field: 'SteamUserPermissions',
+ keyPlaceholder: 'SteamID64',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'FamilySharing' },
+ { value: 2, name: 'Operator' },
+ { value: 3, name: 'Master' }
+ ],
+ defaultValue: 0,
+ keyValidator: Validators.steamid
+ },
+ {
+ type: 'InputText',
+ label: 'SteamParentalPIN',
+ field: 'SteamParentalPIN',
+ placeholder: 0,
+ validator: Validators.parentalPIN
+ }
+ ]
+ },
+ {
+ legend: 'schema.community',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ label: 'HandleOfflineMessages',
+ field: 'HandleOfflineMessages',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.trading',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamTradeToken',
+ field: 'SteamTradeToken',
+ validator: Validators.tradeToken
+ },
+ {
+ type: 'InputFlag',
+ label: 'TradingPreferences',
+ field: 'TradingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'AcceptDonations' },
+ { value: 2, name: 'SteamTradeMatcher' },
+ { value: 4, name: 'MatchEverything' },
+ { value: 8, name: 'DontAcceptBotTrades' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'LootableTypes',
+ field: 'LootableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'MatchableTypes',
+ field: 'MatchableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AcceptGifts',
+ field: 'AcceptGifts',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'DismissInventoryNotifications',
+ field: 'DismissInventoryNotifications',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.farming',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'FarmingOrder',
+ field: 'FarmingOrder',
+ options: [
+ { value: 0, name: 'Unordered' },
+ { value: 1, name: 'AppIDsAscending' },
+ { value: 2, name: 'AppIDsDescending' },
+ { value: 3, name: 'CardDropsAscending' },
+ { value: 4, name: 'CardDropsDescending' },
+ { value: 5, name: 'HoursAscending' },
+ { value: 6, name: 'HoursDescending' },
+ { value: 7, name: 'NamesAscending' },
+ { value: 8, name: 'NamesDescending' },
+ { value: 9, name: 'Random' },
+ { value: 10, name: 'BadgeLevelsAscending' },
+ { value: 11, name: 'BadgeLevelsDescending' },
+ { value: 12, name: 'RedeemDateTimesAscending' },
+ { value: 13, name: 'RedeemDateTimesDescending' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputNumber',
+ label: 'SendTradePeriod',
+ field: 'SendTradePeriod',
+ placeholder: 0,
+ validator: Validators.byte
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AutoDiscoveryQueue',
+ field: 'AutoDiscoveryQueue',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IdleRefundableGames',
+ field: 'IdleRefundableGames',
+ defaultValue: true
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'FarmOffline',
+ field: 'FarmOffline',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'SendOnFarmingFinished',
+ field: 'SendOnFarmingFinished',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'ShutdownOnFarmingFinished',
+ field: 'ShutdownOnFarmingFinished',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.customization',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamMasterClanID',
+ field: 's_SteamMasterClanID',
+ placeholder: 0,
+ validator: Validators.masterClan
+ },
+ {
+ type: 'InputSet',
+ label: 'GamesPlayedWhileIdle',
+ field: 'GamesPlayedWhileIdle',
+ validator: Validators.uint
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileFarming',
+ field: 'CustomGamePlayedWhileFarming'
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileIdle',
+ field: 'CustomGamePlayedWhileIdle'
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'RedeemingPreferences',
+ field: 'RedeemingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Forwarding' },
+ { value: 2, name: 'Distributing' },
+ { value: 4, name: 'KeepMissingGames' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'HoursUntilCardDrops',
+ field: 'HoursUntilCardDrops',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ]
+ },
+ 'V3.0.1.6-V3.0.3.6': {
+ asf: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ label: 'SteamOwnerID',
+ field: 's_SteamOwnerID',
+ placeholder: '0',
+ type: 'InputText',
+ description: 'schema.generic.steamid64',
+ validator: Validators.steamid
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'Statistics',
+ label: 'Statistics',
+ defaultValue: true,
+ advanced: true
+ },
+ {
+ label: 'Blacklist',
+ field: 'Blacklist',
+ type: 'InputSet',
+ validator: Validators.uint
+ },
+ {
+ label: 'CurrentCulture',
+ field: 'CurrentCulture',
+ type: 'InputText',
+ placeholder: 'en-US',
+ advanced: true
+ },
+ {
+ label: 'MaxTradeHoldDuration',
+ field: 'MaxTradeHoldDuration',
+ placeholder: 15,
+ type: 'InputNumber',
+ advanced: true,
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.updates',
+ fields: [
+ {
+ type: 'InputCheckbox',
+ field: 'AutoUpdates',
+ label: 'AutoUpdates',
+ defaultValue: true
+ },
+ {
+ type: 'InputCheckbox',
+ field: 'AutoRestart',
+ label: 'AutoRestart',
+ defaultValue: true,
+ advanced: true
+ },
+ {
+ label: 'UpdateChannel',
+ field: 'UpdateChannel',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Stable' },
+ { value: 2, name: 'Experimental' }
+ ],
+ defaultValue: 1,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.remote_access',
+ advanced: true,
+ fields: [
+ {
+ label: 'IPCHost',
+ field: 'IPCHost',
+ placeholder: '127.0.0.1',
+ type: 'InputText'
+ },
+ {
+ label: 'IPCPort',
+ field: 'IPCPort',
+ placeholder: 1242,
+ type: 'InputNumber',
+ validator: Validators.ushort
+ },
+ {
+ label: 'Headless',
+ field: 'Headless',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ }
+ ]
+ },
+ {
+ legend: 'schema.connection',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'SteamProtocols',
+ field: 'SteamProtocols',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'TCP' },
+ { value: 2, name: 'UDP' },
+ { value: 4, name: 'WebSocket' }
+ ],
+ defaultValue: 0,
+ advanced: true
+ },
+ {
+ label: 'ConnectionTimeout',
+ field: 'ConnectionTimeout',
+ placeholder: 60,
+ type: 'InputNumber',
+ validator: Validators.byte
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ label: 'FarmingDelay',
+ field: 'FarmingDelay',
+ type: 'InputNumber',
+ placeholder: 15,
+ validator: Validators.byte
+ },
+ {
+ label: 'GiftsLimiterDelay',
+ field: 'GiftsLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 1,
+ validator: Validators.byte
+ },
+ {
+ label: 'IdleFarmingPeriod',
+ field: 'IdleFarmingPeriod',
+ type: 'InputNumber',
+ placeholder: 8,
+ validator: Validators.byte
+ },
+ {
+ label: 'InventoryLimiterDelay',
+ field: 'InventoryLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 3,
+ validator: Validators.byte
+ },
+ {
+ label: 'LoginLimiterDelay',
+ field: 'LoginLimiterDelay',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'MaxFarmingTime',
+ field: 'MaxFarmingTime',
+ type: 'InputNumber',
+ placeholder: 10,
+ validator: Validators.byte
+ },
+ {
+ label: 'OptimizationMode',
+ field: 'OptimizationMode',
+ type: 'InputSelect',
+ options: [
+ { value: 0, name: 'MaxPerformance' },
+ { value: 1, name: 'MinMemoryUsage' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.advanced',
+ advanced: true,
+ fields: [
+ {
+ label: 'Debug',
+ field: 'Debug',
+ defaultValue: false,
+ type: 'InputCheckbox'
+ },
+ {
+ label: 'BackgroundGCPeriod',
+ field: 'BackgroundGCPeriod',
+ type: 'InputNumber',
+ placeholder: 0,
+ validator: Validators.byte
+ }
+ ]
+ }
+ ],
+ bot: [
+ {
+ legend: 'schema.basic',
+ fields: [
+ {
+ type: 'InputText',
+ label: 'Name',
+ field: 'name',
+ required: true,
+ description: 'schema.bot.name.description'
+ },
+ {
+ type: 'InputText',
+ label: 'SteamLogin',
+ field: 'SteamLogin',
+ description: 'schema.bot.SteamLogin.description'
+ },
+ {
+ type: 'InputPassword',
+ label: 'SteamPassword',
+ field: 'SteamPassword',
+ description: 'schema.bot.SteamPassword.description'
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Enabled',
+ field: 'Enabled',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IsBotAccount',
+ field: 'IsBotAccount',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'Paused',
+ field: 'Paused',
+ defaultValue: false,
+ advanced: true
+ }
+ ]
+ },
+ {
+ legend: 'schema.security',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'PasswordFormat',
+ field: 'PasswordFormat',
+ options: [
+ { value: 0, name: 'PlainText' },
+ { value: 1, name: 'AES' },
+ { value: 2, name: 'ProtectedDataForCurrentUser' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.access',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputMap',
+ label: 'SteamUserPermissions',
+ field: 'SteamUserPermissions',
+ keyPlaceholder: 'SteamID64',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'FamilySharing' },
+ { value: 2, name: 'Operator' },
+ { value: 3, name: 'Master' }
+ ],
+ defaultValue: 0,
+ keyValidator: Validators.steamid
+ },
+ {
+ type: 'InputText',
+ label: 'SteamParentalPIN',
+ field: 'SteamParentalPIN',
+ placeholder: 0,
+ validator: Validators.parentalPIN
+ }
+ ]
+ },
+ {
+ legend: 'schema.community',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ label: 'HandleOfflineMessages',
+ field: 'HandleOfflineMessages',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.trading',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamTradeToken',
+ field: 'SteamTradeToken',
+ validator: Validators.tradeToken
+ },
+ {
+ type: 'InputFlag',
+ label: 'TradingPreferences',
+ field: 'TradingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'AcceptDonations' },
+ { value: 2, name: 'SteamTradeMatcher' },
+ { value: 4, name: 'MatchEverything' },
+ { value: 8, name: 'DontAcceptBotTrades' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'LootableTypes',
+ field: 'LootableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputSet',
+ label: 'MatchableTypes',
+ field: 'MatchableTypes',
+ values: [
+ { value: 0, name: 'Unknown' },
+ { value: 1, name: 'BoosterPack' },
+ { value: 2, name: 'Emoticon' },
+ { value: 3, name: 'FoilTradingCard' },
+ { value: 4, name: 'ProfileBackground' },
+ { value: 5, name: 'TradingCard' },
+ { value: 6, name: 'SteamGems' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AcceptGifts',
+ field: 'AcceptGifts',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'DismissInventoryNotifications',
+ field: 'DismissInventoryNotifications',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.farming',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputSelect',
+ label: 'FarmingOrder',
+ field: 'FarmingOrder',
+ options: [
+ { value: 0, name: 'Unordered' },
+ { value: 1, name: 'AppIDsAscending' },
+ { value: 2, name: 'AppIDsDescending' },
+ { value: 3, name: 'CardDropsAscending' },
+ { value: 4, name: 'CardDropsDescending' },
+ { value: 5, name: 'HoursAscending' },
+ { value: 6, name: 'HoursDescending' },
+ { value: 7, name: 'NamesAscending' },
+ { value: 8, name: 'NamesDescending' },
+ { value: 9, name: 'Random' },
+ { value: 10, name: 'BadgeLevelsAscending' },
+ { value: 11, name: 'BadgeLevelsDescending' },
+ { value: 12, name: 'RedeemDateTimesAscending' },
+ { value: 13, name: 'RedeemDateTimesDescending' }
+ ],
+ defaultValue: 0
+ },
+ {
+ type: 'InputNumber',
+ label: 'SendTradePeriod',
+ field: 'SendTradePeriod',
+ placeholder: 0,
+ validator: Validators.byte
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'AutoDiscoveryQueue',
+ field: 'AutoDiscoveryQueue',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'IdleRefundableGames',
+ field: 'IdleRefundableGames',
+ defaultValue: true
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'FarmOffline',
+ field: 'FarmOffline',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'SendOnFarmingFinished',
+ field: 'SendOnFarmingFinished',
+ defaultValue: false
+ },
+ {
+ type: 'InputCheckbox',
+ label: 'ShutdownOnFarmingFinished',
+ field: 'ShutdownOnFarmingFinished',
+ defaultValue: false
+ }
+ ]
+ },
+ {
+ legend: 'schema.customization',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputText',
+ label: 'SteamMasterClanID',
+ field: 's_SteamMasterClanID',
+ placeholder: 0,
+ validator: Validators.masterClan
+ },
+ {
+ type: 'InputSet',
+ label: 'GamesPlayedWhileIdle',
+ field: 'GamesPlayedWhileIdle',
+ validator: Validators.uint
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileFarming',
+ field: 'CustomGamePlayedWhileFarming'
+ },
+ {
+ type: 'InputText',
+ label: 'CustomGamePlayedWhileIdle',
+ field: 'CustomGamePlayedWhileIdle'
+ }
+ ]
+ },
+ {
+ legend: 'schema.misc',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputFlag',
+ label: 'RedeemingPreferences',
+ field: 'RedeemingPreferences',
+ values: [
+ { value: 0, name: 'None' },
+ { value: 1, name: 'Forwarding' },
+ { value: 2, name: 'Distributing' },
+ { value: 4, name: 'KeepMissingGames' }
+ ],
+ defaultValue: 0
+ }
+ ]
+ },
+ {
+ legend: 'schema.performance',
+ advanced: true,
+ fields: [
+ {
+ type: 'InputCheckbox',
+ label: 'CardDropsRestricted',
+ field: 'CardDropsRestricted',
+ defaultValue: true
+ }
+ ]
+ }
+ ]
+ }
+};
diff --git a/docs/WebConfigGenerator/src/validators.js b/docs/WebConfigGenerator/src/validators.js
new file mode 100644
index 000000000..26bb8fb80
--- /dev/null
+++ b/docs/WebConfigGenerator/src/validators.js
@@ -0,0 +1,113 @@
+import { isArray, isNil, isNumber, isString } from 'lodash';
+
+function checkEmpty(value, required) {
+ if (isNil(value) || value === '') {
+ if (required) return ['Field required!'];
+ else return [];
+ }
+
+ return null;
+}
+
+function limitedNumber(min, max) {
+ return function(value, schema) {
+ const emptyError = checkEmpty(value, schema.required);
+ if (!isNil(emptyError)) return emptyError;
+
+ const err = [];
+
+ value = parseInt(value, 10);
+
+ if (!isNumber(value) || isNaN(value)) {
+ err.push('Not a valid number!');
+ } else {
+ if (value > max) err.push('Value too big!');
+ else if (value < min) err.push('Value too small!');
+ }
+
+ return err;
+ };
+}
+
+function limitedString(min, max) {
+ return function(value, schema) {
+ const emptyError = checkEmpty(value, schema.required);
+ if (!isNil(emptyError)) return emptyError;
+
+ const err = [];
+
+ if (!isString(value)) {
+ err.push('Not a valid string!');
+ } else {
+ if (value.length > max) err.push('Text too long!');
+ else if (value.length < min) err.push('Text too short!');
+ }
+
+ return err;
+ };
+}
+
+export default {
+ required(value, schema) {
+ const emptyError = checkEmpty(value, schema.required);
+ if (!isNil(emptyError)) return emptyError;
+ return [];
+ },
+ string(value, schema) {
+ const emptyError = checkEmpty(value, schema.required);
+ if (!isNil(emptyError)) return emptyError;
+
+ const err = [];
+
+ if (!isString(value)) err.push('This is not a text!');
+
+ return err;
+ },
+ steamid(value, schema) {
+ const emptyError = checkEmpty(value, schema.required);
+ if (!isNil(emptyError)) return emptyError;
+
+ const err = [];
+
+ const re = /^[1-9][0-9]{16}$/;
+ if (!re.test(value)) err.push('This is not a valid steamid!');
+
+ return err;
+ },
+ masterClan(value, schema) {
+ const emptyError = checkEmpty(value, schema.required);
+ if (!isNil(emptyError)) return emptyError;
+
+ const err = [];
+
+ const re = /^[1-9][0-9]{17}$/;
+ if (!re.test(value)) err.push('This is not a valid clan id!');
+
+ return err;
+ },
+ parentalPIN(value, schema) {
+ const emptyError = checkEmpty(value, schema.required);
+ if (!isNil(emptyError)) return emptyError;
+
+ const err = [];
+
+ if (!isString(value)) {
+ err.push('Not a valid string!');
+ } else {
+ if (value.length > 4) err.push('Text too long!');
+ else if (value.length < 4) err.push('Text too short!');
+ }
+
+ value = parseInt(value, 10);
+
+ if (!isNumber(value) || isNaN(value)) {
+ err.push('Not a valid number!');
+ }
+
+ return err;
+ },
+ tradeToken: limitedString(8, 8),
+ byte: limitedNumber(0, 255),
+ ushort: limitedNumber(0, 65535),
+ uint: limitedNumber(0, 4294967295)
+};
diff --git a/docs/WebConfigGenerator/static/.gitkeep b/docs/WebConfigGenerator/static/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/docs/WebConfigGenerator/static/logo-192.png b/docs/WebConfigGenerator/static/logo-192.png
new file mode 100644
index 000000000..c452adf5d
Binary files /dev/null and b/docs/WebConfigGenerator/static/logo-192.png differ
diff --git a/docs/WebConfigGenerator/static/logo-512.png b/docs/WebConfigGenerator/static/logo-512.png
new file mode 100644
index 000000000..dfe5d6f6a
Binary files /dev/null and b/docs/WebConfigGenerator/static/logo-512.png differ
diff --git a/docs/WebConfigGenerator/static/logo.png b/docs/WebConfigGenerator/static/logo.png
new file mode 100644
index 000000000..928175258
Binary files /dev/null and b/docs/WebConfigGenerator/static/logo.png differ
diff --git a/docs/WebConfigGenerator/static/manifest.json b/docs/WebConfigGenerator/static/manifest.json
new file mode 100644
index 000000000..1c35ac3ca
--- /dev/null
+++ b/docs/WebConfigGenerator/static/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "ASF config generator",
+ "short_name": "asf-config",
+ "icons": [
+ {
+ "src": "/static/logo.png",
+ "sizes": "184x184",
+ "type": "image/png"
+ },
+ {
+ "src": "/static/logo-192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/static/logo-512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "start_url": "/",
+ "display": "fullscreen",
+ "orientation": "portrait",
+ "background_color": "#12100E",
+ "theme_color": "#12100E"
+}
\ No newline at end of file
diff --git a/docs/build.sh b/docs/build.sh
new file mode 100644
index 000000000..0bec8f9ee
--- /dev/null
+++ b/docs/build.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+set -eu
+
+SOURCE="WebConfigGenerator" # Relative to script directory
+OUTPUT="${SOURCE}/dist" # Relative to script directory
+
+cd "$(dirname "$(readlink -f "$0")")"
+
+git pull
+
+npm install --prefix "$SOURCE"
+npm run build --prefix "$SOURCE"
+
+while read FILE; do
+ rm -f "$FILE"
+done < <(find . -mindepth 1 -maxdepth 1 -type l)
+
+while read FILE; do
+ ln -s "$FILE" .
+done < <(find "$OUTPUT" -mindepth 1 -maxdepth 1)
+
+git reset
+git add -A -f "$OUTPUT"
+git commit -m "WebConfigGenerator build"
+git push