Files
BusinessMgr-2019/SaBusinessMgrCoreWebControl/wwwroot/js/sbc-sys-logs.js
T
2025-11-20 17:17:57 +00:00

293 lines
11 KiB
JavaScript

/*
* Admin - System Logs page scripts.
*/
(function (win, doc, undef)
{
"use strict";
let sl = sbc.sysLogs = { data: {}, $pnl: {}, $frm: {}, $ctrl: {}, $dlg: {} };
let $pnl = sl.$pnl; let $frm = sl.$frm; let $ctrl = sl.$ctrl; let $dlg = sl.$dlg;
//--------------------------------------------------------------
sl.refreshFolders = function (delay)
{
if (!sl.data.awaitingRefreshFoldersResponse)
{
sl.clearFiles();
//$pnl.msgs.hide().empty().append($('<div class="sbc-message">' + sbc.msg.dataQuerying + '</div>')).fadeIn(200);
}
sbc.ajax.refreshFolders = sbc.ajax.refreshFolders || { url: sbc.url.base + 'System/Ajax/Logs/GetFolders', formSel: sl.$frm.filter, $msgs: $pnl.msgs, callbackFn: sl.doRefreshFolders };
sbc.doAjaxRequest(sbc.ajax.refreshFolders, delay || 50);
sl.data.awaitingRefreshFoldersResponse = true;
}
sl.doRefreshFolders = function (response)
{
//sbc.debug('doRefreshFolders', response);
delete sl.data.awaitingRefreshFoldersResponse;
sl.clearFilterFolders();
sbc.refreshControlValues(response.controlValues);
$pnl.msgs.hide().empty();
if (!response.success) return;
// Folders.
var items = response.folders;
if (!items.length)
return $pnl.msgs.append($('<div class="sbc-message">' + sbc.msg.dataNoneFound + '</div>')).fadeIn(500);
for (const item of items)
$ctrl.cbFolders.append($('<option value="' + item.name + '">' + item.name + '</option>'));
if (sbc.data.logFolder) $ctrl.cbFolders.val(sbc.data.logFolder);
if (!$ctrl.cbFolders.val()) $ctrl.cbFolders.val(items[0].name);
delete sbc.data.logFolder;
if ($ctrl.cbFolders.val()) $ctrl.cbFolders.trigger('change');
}
//--------------------------------------------------------------
sl.clearFilterFolders = function ()
{
sl.clearFilterYears();
$('option', $ctrl.cbFolders).remove();
}
sl.clearFilterYears = function ()
{
sl.clearFilterMonths();
$('option', $ctrl.cbYears).remove();
}
sl.clearFilterMonths = function ()
{
sl.clearFiles();
$('option', $ctrl.cbMonths).remove();
}
sl.clearFiles = function ()
{
$pnl.msgs.hide().empty();
$pnl.list.find('tbody tr').remove();
}
//--------------------------------------------------------------
sl.refreshYears = function (delay)
{
if (!sl.data.awaitingRefreshYearsResponse)
{
sl.clearFiles();
//$pnl.msgs.hide().empty().append($('<div class="sbc-message">' + sbc.msg.dataQuerying + '</div>')).fadeIn(200);
}
sbc.ajax.refreshYears = sbc.ajax.refreshYears || { url: sbc.url.base + 'System/Ajax/Logs/GetYears', formSel: sl.$frm.filter, callbackFn: sl.doRefreshYears };
sbc.doAjaxRequest(sbc.ajax.refreshYears, delay || 50);
sl.data.awaitingRefreshYearsResponse = true;
}
sl.doRefreshYears = function (response)
{
//sbc.debug('doRefreshYears', response);
delete sl.data.awaitingRefreshYearsResponse;
sl.clearFilterYears();
sbc.refreshControlValues(response.controlValues);
$pnl.msgs.hide().empty();
if (!response.success) return;
// Years.
var items = response.years;
if (!items.length)
return $pnl.msgs.append($('<div class="sbc-message">' + sbc.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$ctrl.cbYears.append($('<option value="' + items[itemIdx].name + '">' + items[itemIdx].name + '</option>'));
if (sbc.data.logYear) $ctrl.cbYears.val(sbc.data.logYear);
delete sbc.data.logYear;
if ($ctrl.cbYears.val()) $ctrl.cbYears.trigger('change');
}
//--------------------------------------------------------------
sl.refreshMonths = function (delay)
{
if (!sl.data.awaitingRefreshMonthsResponse)
{
sl.clearFiles();
//$pnl.msgs.hide().empty().append($('<div class="sbc-message">' + sbc.msg.dataQuerying + '</div>')).fadeIn(200);
}
sbc.ajax.refreshMonths = sbc.ajax.refreshMonths || { url: sbc.url.base + 'System/Ajax/Logs/GetMonths', formSel: sl.$frm.filter, callbackFn: sl.doRefreshMonths };
sbc.doAjaxRequest(sbc.ajax.refreshMonths, delay || 50);
sl.data.awaitingRefreshMonthsResponse = true;
}
sl.doRefreshMonths = function (response)
{
//sbc.debug('doRefreshMonths', response);
delete sl.data.awaitingRefreshMonthsResponse;
sl.clearFilterMonths();
sbc.refreshControlValues(response.controlValues);
$pnl.msgs.hide().empty();
if (!response.success) return;
sbc.data.logYear = $ctrl.cbYears.val();
// Months.
var items = response.months;
if (!items.length)
return $pnl.msgs.append($('<div class="sbc-message">' + sbc.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$ctrl.cbMonths.append($('<option value="' + items[itemIdx].name + '">' + items[itemIdx].name + '</option>'));
if (sbc.data.logMonth) $ctrl.cbMonths.val(sbc.data.logMonth);
if (!$ctrl.cbMonths.val() && items.length) $ctrl.cbMonths.val(items[0].name);
delete sbc.data.logMonth;
if ($ctrl.cbMonths.val()) $ctrl.cbMonths.trigger('change');
}
//--------------------------------------------------------------
sl.refreshFiles = function (delay)
{
if (!sl.data.awaitingRefreshFilesResponse)
{
sl.clearFiles();
//$pnl.msgs.hide().empty().append($('<div class="sbc-message">' + sbc.msg.dataQuerying + '</div>')).fadeIn(200);
}
sbc.ajax.refreshFiles = sbc.ajax.refreshFiles || { url: sbc.url.base + 'System/Ajax/Logs/GetFiles', formSel: sl.$frm.filter, callbackFn: sl.doRefreshFiles };
sbc.doAjaxRequest(sbc.ajax.refreshFiles, delay || 50);
sl.data.awaitingRefreshFilesResponse = true;
}
sl.doRefreshFiles = function (response)
{
//sbc.debug('doRefreshFiles', response);
delete sl.data.awaitingRefreshFilesResponse;
sl.clearFiles();
sbc.refreshControlValues(response.controlValues);
if (!response.success) return;
sbc.data.logMonth = $ctrl.cbMonths.val();
// Files.
var items = response.files;
sl.data.files = response.files;
if (!(items || []).length)
return $pnl.msgs.append($('<div class="sbc-message">' + sbc.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$pnl.list.append(sl.populateItem(sl.getFileTemplate(), items[itemIdx]));
$pnl.list.fadeIn(50);
}
sl.populateItem = function ($item, item)
{
if (!item) return $item;
$item.off('click').on('click', function () { sl.showFile(item.name) });
$('.Filename', $item).text(item.name);
$('.Updated', $item).text(item.updateFmt);
$('.Size', $item).text(sbc.formatFileSize(item.size, 2));
return $item;
}
sl.getFileTemplate = function ()
{
return $('.sbc-panel-item-template .sbc-panel-item.LogFile', $pnl.results).clone();
}
//--------------------------------------------------------------
sl.showFile = function (filename, delay)
{
$('.FilterLogFilename', $frm.filter).val(filename);
sl.setFileTitle(filename);
if (!sl.data.awaitingGetFileResponse)
{
sl.setFileData($('<div class="sbc-message">' + sbc.msg.dataQuerying + '</div>'));
sl.openFileDlg();
}
sbc.ajax.getFile = sbc.ajax.getFile || { url: sbc.url.base + 'System/Ajax/Logs/GetFile', formSel: sl.$frm.filter, callbackFn: sl.onShowFile };
sbc.doAjaxRequest(sbc.ajax.getFile, delay || 50);
sl.data.awaitingGetFileResponse = true;
}
sl.onShowFile = function (response)
{
//sbc.debug('doGetFiles', response);
delete sl.data.awaitingGetFileResponse;
$pnl.msgs.hide().empty();
if (!response.success) return;
// Configure file action buttons.
let files = sl.data.files;
let filename = response.file.name;
$ctrl.filePrev.prop('disabled', (files || []).length < 2 || !filename || files[0].name == filename);
$ctrl.fileNext.prop('disabled', (files || []).length < 2 || !filename || files[files.length - 1].name == filename);
// Display table details.
sl.setFileTitle(filename || response.popupTitle);
$('.LogFilename', $dlg.file).val(filename);
sl.setFileData(response.file.html);
sl.openFileDlg();
}
sl.openFileDlg = function ()
{
sbc.openDialog($dlg.file, $(win).width(), $(win).height());
}
sl.setFileTitle = function (filename)
{
$dlg.file.dialog('option', 'title', "File: " + filename);
}
sl.setFileData = function (data)
{
$('.FileData', $dlg.file).html(data);
}
//--------------------------------------------------------------
sl.onCreateLogFileDlg = function ()
{
let $btnPane = $('#dlgLogFile + div.ui-dialog-buttonpane');
$pnl.logFileActions = $('<div id="LogFileActions" style="float:left;">');
$ctrl.filePrev = $('<button type="button" class="ui-button ui-corner-all ui-widget">').prop('value', 'LogFilePrev').text('Prev').on('click', sl.prevLogFile);
$ctrl.fileNext = $('<button type="button" class="ui-button ui-corner-all ui-widget">').prop('value', 'LogFileNext').text('Next').on('click', sl.nextLogFile);
$btnPane.append($pnl.logFileActions.append($ctrl.filePrev).append($ctrl.fileNext));
}
sl.prevLogFile = function ()
{
let files = sl.data.files;
if ((files || []).length < 2) return;
let filename = $('.LogFilename', $dlg.file).val();
let filenamePrev = files[files.length - 1].name;
for (let fileIdx = 0; fileIdx < files.length; fileIdx++)
{
let filenameNext = files[fileIdx].name;
if (filenameNext == filename)
{
sl.showFile(filenamePrev);
return;
}
filenamePrev = filenameNext;
}
}
sl.nextLogFile = function ()
{
let files = sl.data.files;
if ((files || []).length < 2) return;
let filename = $('.LogFilename', $dlg.file).val();
let filenameNext = files[0].name;
for (let fileIdx = files.length - 1; fileIdx >= 0; fileIdx--)
{
let filenamePrev = files[fileIdx].name;
if (filenamePrev == filename)
{
sl.showFile(filenameNext);
return;
}
filenameNext = filenamePrev;
}
}
//--------------------------------------------------------------
$(function ()
{
$pnl.logFiles = $('.LogFiles');
$pnl.filter = $pnl.logFiles.find('.sbc-panel-filter');
$pnl.results = $pnl.logFiles.find('.sbc-panel-results');
$pnl.msgs = $pnl.results.find('.sbc-panel-messages')
$pnl.list = $pnl.results.find('table.sbc-item-list')
$pnl.filter.on('click', '.sbc-action.sbc-results-refresh', function () { sl.refreshFiles(); });
$('.sbc-input').on('input', function () { sbc.clearControlError(this); });
$frm.filter = $('#frmLogsFilter');
$ctrl.cbFolders = $frm.filter.find('#cbFilterLogFolder').on('change', function () { sl.refreshYears(250); });
$ctrl.cbYears = $frm.filter.find('#cbFilterLogYear').on('change', function () { sl.refreshMonths(250); });
$ctrl.cbMonths = $frm.filter.find('#cbFilterLogMonth').on('change', function () { sl.refreshFiles(250); });
$('.icon-year-prev').on('click', () => { sbc.offsetSelectedOption($ctrl.cbYears, -1) });
$('.icon-year-next').on('click', () => { sbc.offsetSelectedOption($ctrl.cbYears, 1) });
$('.icon-month-prev').on('click', () => { sbc.offsetSelectedOption($ctrl.cbMonths, -1) });
$('.icon-month-next').on('click', () => { sbc.offsetSelectedOption($ctrl.cbMonths, 1) });
var opt = sbc.dlgOpts();
opt.buttons[sbc.lbl.close] = function () { $(this).dialog('close'); sl.setFileData(); };
opt.create = sl.onCreateLogFileDlg;
$dlg.file = $('#dlgLogFile').dialog(opt);
setTimeout(sl.refreshFolders, 250);
});
}(window, window.document));
/* The End */