Files
Saxonite/SaxoniteCoreWebAdmin/wwwroot/js/sax-sys-logs.js
T

284 lines
10 KiB
JavaScript

/*
* Admin - System Logs page scripts.
*/
(function (win, doc, undef)
{
"use strict";
let sl = sax.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="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajax.refreshFolders = sax.ajax.refreshFolders || { url: sax.url.base + 'System/Ajax/Logs/GetFolders', formId: sl.$frm.filter.prop('id'), callbackFn: sl.doRefreshFolders };
sax.doAjaxRequest(sax.ajax.refreshFolders, delay || 50);
sl.data.awaitingRefreshFoldersResponse = true;
}
sl.doRefreshFolders = function (response)
{
//sax.debug('doRefreshFolders', response);
delete sl.data.awaitingRefreshFoldersResponse;
sl.clearFilterFolders();
sax.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="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (let itemIdx = 0; itemIdx < items.length; itemIdx++)
$ctrl.cbFolders.append($('<option value="' + items[itemIdx].name + '">' + items[itemIdx].name + '</option>'));
if (sax.data.logFolder) $ctrl.cbFolders.val(sax.data.logFolder);
delete sax.data.logFolder;
$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.table.find('tbody tr').remove();
}
//--------------------------------------------------------------
sl.refreshYears = function (delay)
{
if (!sl.data.awaitingRefreshYearsResponse)
{
sl.clearFiles();
//$pnl.msgs.hide().empty().append($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajax.refreshYears = sax.ajax.refreshYears || { url: sax.url.base + 'System/Ajax/Logs/GetYears', formId: sl.$frm.filter.prop('id'), callbackFn: sl.doRefreshYears };
sax.doAjaxRequest(sax.ajax.refreshYears, delay || 50);
sl.data.awaitingRefreshYearsResponse = true;
}
sl.doRefreshYears = function (response)
{
//sax.debug('doRefreshYears', response);
delete sl.data.awaitingRefreshYearsResponse;
sl.clearFilterYears();
sax.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="sax-message">' + sax.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 (sax.data.logYear) $ctrl.cbYears.val(sax.data.logYear);
delete sax.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="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajax.refreshMonths = sax.ajax.refreshMonths || { url: sax.url.base + 'System/Ajax/Logs/GetMonths', formId: sl.$frm.filter.prop('id'), callbackFn: sl.doRefreshMonths };
sax.doAjaxRequest(sax.ajax.refreshMonths, delay || 50);
sl.data.awaitingRefreshMonthsResponse = true;
}
sl.doRefreshMonths = function (response)
{
//sax.debug('doRefreshMonths', response);
delete sl.data.awaitingRefreshMonthsResponse;
sl.clearFilterMonths();
sax.refreshControlValues(response.controlValues);
$pnl.msgs.hide().empty();
if (!response.success) return;
sax.data.logYear = $ctrl.cbYears.val();
// Months.
var items = response.months;
if (!items.length)
return $pnl.msgs.append($('<div class="sax-message">' + sax.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 (sax.data.logMonth) $ctrl.cbMonths.val(sax.data.logMonth);
if (!$ctrl.cbMonths.val() && items.length) $ctrl.cbMonths.val(items[0].name);
delete sax.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="sax-message">' + sax.msg.dataQuerying + '</div>')).fadeIn(200);
}
sax.ajax.refreshFiles = sax.ajax.refreshFiles || { url: sax.url.base + 'System/Ajax/Logs/GetFiles', formId: sl.$frm.filter.prop('id'), callbackFn: sl.doRefreshFiles };
sax.doAjaxRequest(sax.ajax.refreshFiles, delay || 50);
sl.data.awaitingRefreshFilesResponse = true;
}
sl.doRefreshFiles = function (response)
{
//sax.debug('doRefreshFiles', response);
delete sl.data.awaitingRefreshFilesResponse;
sax.refreshControlValues(response.controlValues);
sl.clearFiles();
let $table = $('table', $pnl.table);
if (!response.success) return;
sax.data.logMonth = $ctrl.cbMonths.val();
// Files.
var items = sl.data.files = response.files||[];
if (!items.length)
return $pnl.msgs.append($('<div class="sax-message">' + sax.msg.dataNoneFound + '</div>')).fadeIn(500);
for (const item of items)
$table.append(sl.populateItem(sl.getFileTemplate(), item));
}
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(sax.formatFileSize(item.size, 2));
return $item;
}
sl.getFileTemplate = function ()
{
return $pnl.tmpls.find('.sax-panel-item.LogFile').clone();
}
//--------------------------------------------------------------
sl.showFile = function (filename, delay)
{
$('.FilterLogFilename', $frm.filter).val(filename);
sl.setFileTitle(filename);
if (!sl.data.awaitingGetFileResponse)
{
sl.setFileData($('<div class="sax-message">' + sax.msg.dataQuerying + '</div>'));
sl.openFileDlg();
}
sax.ajax.getFile = sax.ajax.getFile || { url: sax.url.base + 'System/Ajax/Logs/GetFile', formId: sl.$frm.filter.prop('id'), callbackFn: sl.onShowFile };
sax.doAjaxRequest(sax.ajax.getFile, delay || 50);
sl.data.awaitingGetFileResponse = true;
}
sl.onShowFile = function (response)
{
//sax.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 ()
{
sax.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.items = $('.LogFiles');
$pnl.table = $pnl.items.find('.sax-panel-item-table');
$pnl.msgs = $pnl.table.find('.sax-panel-messages');
$pnl.tmpls = $pnl.items.find('.sax-panel-item-template');
$frm.filter = $('#frmLogsFilter');
$frm.filter.on('click', '.sax-action.sax-results-refresh', function () { sl.refreshFiles(); });
$ctrl.cbFolders = $('#cbFilterLogFolder', $frm.filter).on('change', function () { sl.refreshYears(250); });
$ctrl.cbYears = $('#cbFilterLogYear', $frm.filter).on('change', function () { sl.refreshMonths(250); });
$ctrl.cbMonths = $('#cbFilterLogMonth', $frm.filter).on('change', function () { sl.refreshFiles(250); });
var opt = sax.dlgOpts();
opt.buttons[sax.dlg.btn.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 */