Оптимизация

- Оптимизация JS файлов
- FIX: Исправил Crash, если не было папки logs
- Удалил скомпилированный EXE файл с репозитория исходников.
This commit is contained in:
2025-11-15 23:33:57 +07:00
parent 7c77afabed
commit c1a781a0f5
20 changed files with 411 additions and 736 deletions

View File

@@ -7,9 +7,7 @@ import { api } from '../api/wails.js';
import { isWailsAvailable } from '../utils/helpers.js';
import { $ } from '../utils/dom.js';
/**
* Класс для управления прокси
*/
// Класс для управления прокси
export class ProxyManager {
constructor() {
this.proxiesData = [];
@@ -44,9 +42,7 @@ export class ProxyManager {
];
}
/**
* Загрузить список прокси
*/
// Загрузить список прокси
async load() {
if (isWailsAvailable()) {
this.proxiesData = await api.getProxyList();
@@ -57,9 +53,7 @@ export class ProxyManager {
this.render();
}
/**
* Отрисовать список прокси
*/
// Отрисовать список прокси
render() {
const tbody = $('proxyTable')?.querySelector('tbody');
if (!tbody) return;
@@ -92,9 +86,7 @@ export class ProxyManager {
this.attachEventListeners();
}
/**
* Добавить обработчики событий
*/
// Добавить обработчики событий
attachEventListeners() {
// Кликабельные ссылки
const links = document.querySelectorAll('.clickable-link[data-url]');
@@ -115,9 +107,7 @@ export class ProxyManager {
});
}
/**
* Обработчик действий
*/
// Обработчик действий
handleAction(action, btn) {
const host = btn.getAttribute('data-host');
const index = parseInt(btn.getAttribute('data-index'));
@@ -137,9 +127,7 @@ export class ProxyManager {
}
}
/**
* Открыть ссылку
*/
// Открыть ссылку
openLink(url) {
if (window.runtime?.BrowserOpenURL) {
window.runtime.BrowserOpenURL(url);

View File

@@ -8,9 +8,7 @@ import { $, $$, addClass, removeClass } from '../utils/dom.js';
import { notification } from '../ui/notification.js';
import { sleep, isWailsAvailable } from '../utils/helpers.js';
/**
* Класс для управления сервисами
*/
// Класс для управления сервисами
export class ServicesManager {
constructor() {
this.serverRunning = true;
@@ -40,9 +38,7 @@ export class ServicesManager {
}
}
/**
* Переключить состояние сервера
*/
// Переключить состояние сервера
async toggleServer() {
if (this.serverRunning) {
await this.stopServer();
@@ -51,9 +47,7 @@ export class ServicesManager {
}
}
/**
* Запустить сервер
*/
// Запустить сервер
async startServer() {
this.isOperating = true;
this.controlBtn.disabled = true;
@@ -80,9 +74,7 @@ export class ServicesManager {
this.controlBtn.disabled = false;
}
/**
* Остановить сервер
*/
// Остановить сервер
async stopServer() {
this.isOperating = true;
this.controlBtn.disabled = true;
@@ -100,9 +92,7 @@ export class ServicesManager {
this.controlBtn.disabled = false;
}
/**
* Установить статус сервера
*/
// Установить статус сервера
setServerStatus(isOnline, text) {
this.serverRunning = isOnline;
@@ -117,9 +107,7 @@ export class ServicesManager {
this.statusText.textContent = text;
}
/**
* Установить всем сервисам статус pending
*/
// Установить всем сервисам статус pending
setAllServicesPending(text) {
const badges = $$('.service-card .badge');
badges.forEach(badge => {
@@ -128,9 +116,7 @@ export class ServicesManager {
});
}
/**
* Отрисовать статусы сервисов
*/
// Отрисовать статусы сервисов
renderServices(data) {
const services = [data.http, data.https, data.mysql, data.php, data.proxy];
const cards = $$('.service-card');
@@ -166,9 +152,7 @@ export class ServicesManager {
});
}
/**
* Загрузить статусы сервисов
*/
// Загрузить статусы сервисов
async loadStatus() {
if (isWailsAvailable()) {
const data = await api.getAllServicesStatus();

View File

@@ -10,9 +10,7 @@ import { notification } from '../ui/notification.js';
import { isWailsAvailable } from '../utils/helpers.js';
import { initCustomSelects } from '../ui/custom-select.js';
/**
* Класс для создания новых сайтов
*/
// Класс для создания новых сайтов
export class SiteCreator {
constructor() {
this.aliases = [];
@@ -23,9 +21,7 @@ export class SiteCreator {
};
}
/**
* Открыть страницу создания сайта
*/
// Открыть страницу создания сайта
open() {
// Скрываем все секции
this.hideAllSections();
@@ -43,9 +39,7 @@ export class SiteCreator {
setTimeout(() => initCustomSelects(), 100);
}
/**
* Скрыть все секции
*/
// Скрыть все секции
hideAllSections() {
hide($('sectionServices'));
hide($('sectionSites'));
@@ -55,9 +49,7 @@ export class SiteCreator {
hide($('sectionAddSite'));
}
/**
* Вернуться на главную
*/
// Вернуться на главную
backToMain() {
this.hideAllSections();
show($('sectionServices'));
@@ -65,9 +57,7 @@ export class SiteCreator {
show($('sectionProxy'));
}
/**
* Очистить форму
*/
// Очистить форму
resetForm() {
$('newSiteName').value = '';
$('newSiteHost').value = '';
@@ -107,9 +97,7 @@ export class SiteCreator {
labels.forEach(label => label.classList.remove('file-uploaded'));
}
/**
* Привязать обработчики событий
*/
// Привязать обработчики событий
attachEventListeners() {
const createBtn = $('createSiteBtn');
if (createBtn) {
@@ -120,9 +108,7 @@ export class SiteCreator {
this.setupDragAndDrop();
}
/**
* Настроить Drag & Drop для файлов
*/
// Настроить Drag & Drop для файлов
setupDragAndDrop() {
const fileWrappers = [
{ wrapper: document.querySelector('label[for="certFile"]')?.parentElement, input: $('certFile'), type: 'certificate' },
@@ -171,9 +157,7 @@ export class SiteCreator {
});
}
/**
* Парсить aliases из строки (через запятую)
*/
// Парсить aliases из строки (через запятую)
parseAliases() {
const input = $('newSiteAliasInput');
const value = input?.value.trim();
@@ -190,9 +174,7 @@ export class SiteCreator {
.filter(alias => alias.length > 0);
}
/**
* Переключить видимость блока загрузки сертификатов
*/
// Переключить видимость блока загрузки сертификатов
toggleCertUpload() {
const mode = $('certMode')?.value;
const block = $('certUploadBlock');
@@ -204,9 +186,7 @@ export class SiteCreator {
}
}
/**
* Обработать выбор файла сертификата
*/
// Обработать выбор файла сертификата
handleCertFile(input, certType) {
const file = input.files[0];
const statusId = certType === 'certificate' ? 'certFileStatus' :
@@ -257,9 +237,7 @@ export class SiteCreator {
reader.readAsText(file);
}
/**
* Валидация формы
*/
// Валидация формы
validateForm() {
const name = $('newSiteName')?.value.trim();
const host = $('newSiteHost')?.value.trim();
@@ -296,9 +274,7 @@ export class SiteCreator {
return true;
}
/**
* Создать сайт
*/
// Создать сайт
async createSite() {
if (!this.validateForm()) {
return;

View File

@@ -7,9 +7,7 @@ import { api } from '../api/wails.js';
import { isWailsAvailable } from '../utils/helpers.js';
import { $ } from '../utils/dom.js';
/**
* Класс для управления сайтами
*/
// Класс для управления сайтами
export class SitesManager {
constructor() {
this.sitesData = [];
@@ -41,9 +39,7 @@ export class SitesManager {
];
}
/**
* Загрузить список сайтов
*/
// Загрузить список сайтов
async load() {
if (isWailsAvailable()) {
this.sitesData = await api.getSitesList();
@@ -54,9 +50,7 @@ export class SitesManager {
this.render();
}
/**
* Отрисовать список сайтов
*/
// Отрисовать список сайтов
render() {
const tbody = $('sitesTable')?.querySelector('tbody');
if (!tbody) return;
@@ -88,9 +82,7 @@ export class SitesManager {
this.attachEventListeners();
}
/**
* Добавить обработчики событий
*/
// Добавить обработчики событий
attachEventListeners() {
// Кликабельные ссылки
const links = document.querySelectorAll('.clickable-link[data-url]');
@@ -111,9 +103,7 @@ export class SitesManager {
});
}
/**
* Обработчик действий
*/
// Обработчик действий
async handleAction(action, btn) {
const host = btn.getAttribute('data-host');
const index = parseInt(btn.getAttribute('data-index'));
@@ -136,9 +126,7 @@ export class SitesManager {
}
}
/**
* Открыть ссылку
*/
// Открыть ссылку
openLink(url) {
if (window.runtime?.BrowserOpenURL) {
window.runtime.BrowserOpenURL(url);

View File

@@ -9,9 +9,7 @@ import { notification } from '../ui/notification.js';
import { modal } from '../ui/modal.js';
import { isWailsAvailable } from '../utils/helpers.js';
/**
* Класс для управления vAccess правилами
*/
// Класс для управления vAccess правилами
export class VAccessManager {
constructor() {
this.vAccessHost = '';
@@ -22,9 +20,7 @@ export class VAccessManager {
this.editingField = null;
}
/**
* Открыть редактор vAccess
*/
// Открыть редактор vAccess
async open(host, isProxy) {
this.vAccessHost = host;
this.vAccessIsProxy = isProxy;
@@ -77,9 +73,7 @@ export class VAccessManager {
}
}
/**
* Скрыть все секции
*/
// Скрыть все секции
hideAllSections() {
hide($('sectionServices'));
hide($('sectionSites'));
@@ -88,9 +82,7 @@ export class VAccessManager {
hide($('sectionVAccessEditor'));
}
/**
* Вернуться на главную
*/
// Вернуться на главную
backToMain() {
this.hideAllSections();
show($('sectionServices'));
@@ -98,9 +90,7 @@ export class VAccessManager {
show($('sectionProxy'));
}
/**
* Переключить вкладку
*/
// Переключить вкладку
switchTab(tab) {
const tabs = document.querySelectorAll('.vaccess-tab[data-tab]');
tabs.forEach(t => {
@@ -120,9 +110,7 @@ export class VAccessManager {
}
}
/**
* Сохранить изменения
*/
// Сохранить изменения
async save() {
if (isWailsAvailable()) {
const config = { rules: this.vAccessRules };
@@ -140,9 +128,7 @@ export class VAccessManager {
}
}
/**
* Отрисовать список правил
*/
// Отрисовать список правил
renderRulesList() {
const tbody = $('vAccessTableBody');
const emptyState = $('vAccessEmpty');
@@ -191,9 +177,7 @@ export class VAccessManager {
this.attachRulesEventListeners();
}
/**
* Добавить обработчики событий для правил
*/
// Добавить обработчики событий для правил
attachRulesEventListeners() {
// Drag & Drop
const rows = document.querySelectorAll('#vAccessTableBody tr[draggable]');
@@ -223,9 +207,7 @@ export class VAccessManager {
});
}
/**
* Добавить новое правило
*/
// Добавить новое правило
addRule() {
this.vAccessRules.push({
type: 'Disable',
@@ -240,17 +222,13 @@ export class VAccessManager {
this.renderRulesList();
}
/**
* Удалить правило
*/
// Удалить правило
removeRule(index) {
this.vAccessRules.splice(index, 1);
this.renderRulesList();
}
/**
* Редактировать поле правила
*/
// Редактировать поле правила
editRuleField(index, field) {
const rule = this.vAccessRules[index];
@@ -271,9 +249,7 @@ export class VAccessManager {
}
}
/**
* Показать редактор поля
*/
// Показать редактор поля
showFieldEditor(index, field) {
const rule = this.vAccessRules[index];
const fieldNames = {
@@ -328,9 +304,7 @@ export class VAccessManager {
}, 100);
}
/**
* Добавить значение в поле
*/
// Добавить значение в поле
addFieldValue() {
const input = $('fieldInput');
const value = input?.value.trim();
@@ -346,9 +320,7 @@ export class VAccessManager {
}
}
/**
* Удалить значение из поля
*/
// Удалить значение из поля
removeFieldValue(value) {
if (this.editingField) {
const { index, field } = this.editingField;
@@ -361,9 +333,7 @@ export class VAccessManager {
}
}
/**
* Закрыть редактор поля
*/
// Закрыть редактор поля
closeFieldEditor() {
modal.closeFieldEditor();
this.renderRulesList();