v1.3.0 Restructure Saxonite workspace and upgrade to .NET 10 (#1)
Move Saxonite’s projects into a dedicated `Workspace` folder and align the solution with .NET 10 and the current Common workspace. Update encryption integration, test project structure and coverage, and repository guidance and upgrade notes. - Relocate application and library projects while retaining Git rename history. - Split tests into Admin, Online, and Shared projects; add representative behavioral and serialization tests. - Update Common integration, application version, and repository documentation. Application version: 1.3.0 Reviewed-on: #1 Co-authored-by: andy <andy@sarand.com>
This commit was merged in pull request #1.
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
@model Model_System
|
||||
@inject SaxLocaliser Localiser
|
||||
@{
|
||||
ViewData["Title"] = "System - Database";
|
||||
}
|
||||
|
||||
<div class="sax-panel DatabaseTables">
|
||||
|
||||
<script type="text/javascript">
|
||||
</script>
|
||||
|
||||
<div class="sax-panel-data sax-flex">
|
||||
|
||||
@* Filter form - wrap header to include paging controls. *@
|
||||
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmDbTableFilter", @class = "sax-form", @onSubmit = "return false;" }))
|
||||
{
|
||||
|
||||
@* Header - Page caption, paging controls, actions. *@
|
||||
<div class="sax-panel-header">
|
||||
<div class="row">
|
||||
<div class="col"><div class="sax-panel-caption">@Localiser["system.caption.database"]</div></div>
|
||||
<div class="fixed row">
|
||||
<div class="sax-action sax-results-refresh"><img src="~/img/action/refresh24.png" alt="@(Localiser["label.refresh"])" title="@(Localiser["label.refresh"])" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Filter Panel *@
|
||||
<div class="sax-panel-filter">
|
||||
<div class="row">
|
||||
<div class="col-sm-5 col-md-3 sax-label text-left text-sm-right">@Localiser["label.instance"]</div>
|
||||
<div class="col-sm-7 col-md-3 mb-sm-1 mb-md-0">@Html.DropDownListFor(model => model.DatabaseFilter.Instance, Model.GetDatabases(), new { @id = "cbDatabaseFilterInstance", @class = "DatabaseFilterInstance" })</div>
|
||||
<div class="col-sm-5 col-md-3 sax-label text-left text-sm-right">@Localiser["label.search"]</div>
|
||||
<div class="col-sm-7 col-md-3">@Html.TextBoxFor(model => model.DatabaseFilter.Search, new { @id = "ifDatabaseFilterSearch", @class = "DatabaseFilterSearch", @maxlength = "32" })</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* Item list *@
|
||||
<div class="sax-panel-item-table sax-flex">
|
||||
<table class="sax-item-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="width50pc pl-2">@Localiser["label.table"]</th>
|
||||
<th class="width15pc center">@Localiser["label.rows"]</th>
|
||||
<th class="width15pc center">@Localiser["label.columns"]</th>
|
||||
<th class="width15pc center">@Localiser["label.indices"]</th>
|
||||
<th class="width5pc center"></th>
|
||||
</tr>
|
||||
<tr><td colspan="6"><div class="sax-panel-messages"></div></td></tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@* Element templates *@
|
||||
<div class="sax-panel-item-template">
|
||||
|
||||
@* Item row template - table is ignored. *@
|
||||
<table>
|
||||
<tr class="sax-row-item DatabaseTable">
|
||||
<td class="TableName pl-1"></td>
|
||||
<td class="RowCount center"></td>
|
||||
<td class="ColumnCount center"></td>
|
||||
<td class="IndexCount center"></td>
|
||||
<td class="Actions">
|
||||
<div class="right">
|
||||
@* Burger menu *@
|
||||
<ul class="nav navbar-nav navbar-light navbar-right sax-burger">
|
||||
<li class="dropdown-toggle caret-off">
|
||||
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="sax-ellipsis-dot"></span><span class="sax-ellipsis-dot"></span><span class="sax-ellipsis-dot"></span></a>
|
||||
<ul class="dropdown-menu dropdown-menu-right sax-dropdown-menu">@* Menu items will be inserted here. *@</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@* Item burger dropdown template - ul is ignored *@
|
||||
<ul class="sax-dropdown-menu DatabaseTable">
|
||||
<li class="sax-dropdown-item sax-action"><div class="sax-label">XXX</div></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmDbTableName", @onSubmit = "return false;" }))
|
||||
{
|
||||
@Html.HiddenFor(model => model.DatabaseTable.Instance, new { @class = "DatabaseTableInstance" })
|
||||
@Html.HiddenFor(model => model.DatabaseTable.Name, new { @class = "DatabaseTableName" })
|
||||
}
|
||||
|
||||
<style>
|
||||
#dlgDbTable tr.sax-heading td
|
||||
{
|
||||
color: #606060;
|
||||
background-color: #f0f0f0;
|
||||
border-top: 1px solid #808080;
|
||||
border-bottom: 1px solid #808080;
|
||||
}
|
||||
</style>
|
||||
<div id="dlgDbTable" class="sax-panel-item-template">
|
||||
<div class="">
|
||||
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmDbTable", @onSubmit = "return false;" }))
|
||||
{
|
||||
@Html.HiddenFor(model => model.DatabaseTable.Instance, new { @class = "DatabaseTableInstance" })
|
||||
@Html.HiddenFor(model => model.DatabaseTable.Name, new { @class = "DatabaseTableName" })
|
||||
}
|
||||
<table class="fullwidth">
|
||||
<tr>
|
||||
<td class="right pt2 pr8">Properties:</td>
|
||||
<td>
|
||||
<table class="sax-striped TableProperties">
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right pt2 pr8">Columns:</td>
|
||||
<td>
|
||||
<table class="sax-striped TableColumns fullwidth">
|
||||
<tr class="sax-heading">
|
||||
<td class="width10pc right pl8 pr8">Pos</td>
|
||||
<td class="width50pc pl8 pr8">Name</td>
|
||||
<td class="width50pc center">Format</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="right pt2 pr8">Indices:</td>
|
||||
<td>
|
||||
<table class="sax-striped TableIndices fullwidth">
|
||||
<tr class="sax-heading">
|
||||
<td class="width50pc pl8 pr8">Name</td>
|
||||
<td class="width20pc center pl8 pr8">Unique</td>
|
||||
<td class="width20pc pl8 pr8">Columns</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="sax-panel-item-template">
|
||||
<table>
|
||||
<tr class="TableProperty">
|
||||
<td class="sax-label Label right pl8 pr8"></td>
|
||||
<td class="Value pl8 pr8"></td>
|
||||
</tr>
|
||||
<tr class="TableColumn">
|
||||
<td class="Pos right pl8 pr8"></td>
|
||||
<td class="Name pl8 pr8"></td>
|
||||
<td class="Format center pl8 pr8"></td>
|
||||
</tr>
|
||||
<tr class="TableIndex">
|
||||
<td class="Name pl8 pr16"></td>
|
||||
<td class="Unique center"></td>
|
||||
<td class="Columns pl8 pr8"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,125 @@
|
||||
@model Model_System
|
||||
@inject SaxLocaliser Localiser
|
||||
@{
|
||||
ViewData["Title"] = "System - Logs";
|
||||
}
|
||||
|
||||
<style>
|
||||
#dlgLogFile .FileData
|
||||
{
|
||||
font-family: Courier New, Courier, monospace;
|
||||
font-size: 10px;
|
||||
color: slategray;
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#dlgLogFile .FileData .tab
|
||||
{
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
#dlgLogFile .FileData .tab2
|
||||
{
|
||||
padding-left: 32px;
|
||||
}
|
||||
|
||||
#dlgLogFile .FileData .err
|
||||
{
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
#dlgLogFile .FileData .wrn
|
||||
{
|
||||
color: darkorange;
|
||||
}
|
||||
|
||||
#dlgLogFile .FileData .inf
|
||||
{
|
||||
color: darkGreen;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="sax-panel LogFiles">
|
||||
|
||||
<div class="sax-panel-data sax-flex">
|
||||
|
||||
@* Filter form - wrap header to include paging controls. *@
|
||||
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmLogsFilter", @class = "sax-form", @onSubmit = "return false;" }))
|
||||
{
|
||||
|
||||
@* Header - Page caption, paging controls, actions. *@
|
||||
<div class="sax-panel-header">
|
||||
<div class="row">
|
||||
<div class="col"><div class="sax-panel-caption">@Localiser["system.caption.logs"]</div></div>
|
||||
<div class="fixed row">
|
||||
<div class="sax-action sax-results-refresh"><img src="~/img/action/refresh24.png" alt="@(Localiser["label.refresh"])" title="@(Localiser["label.refresh"])" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Filter Panel *@
|
||||
<div class="sax-panel-filter">
|
||||
<input type="hidden" name="LogsFilter.Filename" class="FilterLogFilename" />
|
||||
<div class="row">
|
||||
<div class="col-sm-12 row">
|
||||
<div class="col-sm-4 col-md-3 sax-label text-left text-sm-right" style="padding-top:2px;">@Localiser["label.root.folder"]</div>
|
||||
<div class="col-sm-8 col-md-9 sax-value mb-1 bold">@(Model.LoggingRootFolder)</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-4 row">
|
||||
<div class="col-sm-4 col-md-5 sax-label text-left text-sm-right">@Localiser["label.folder"]</div>
|
||||
<div class="col-sm-8 col-md-7 mb-1"><div style="max-width:200px;"><select id="cbFilterLogFolder" name="LogsFilter.Folder" class="FilterLogFolder"></select></div></div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-4 row">
|
||||
<div class="col-sm-4 col-md-5 sax-label text-left text-sm-right">@Localiser["label.year"]</div>
|
||||
<div class="col-sm-8 col-md-7 mb-1"><div style="max-width:200px;"><select id="cbFilterLogYear" name="LogsFilter.Year" class="FilterLogYear"></select></div></div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-4 row">
|
||||
<div class="col-sm-4 col-md-5 sax-label text-left text-sm-right">@Localiser["label.month"]</div>
|
||||
<div class="col-sm-8 col-md-7"><div style="max-width:200px;"><select id="cbFilterLogMonth" name="LogsFilter.Month" class="FilterLogMonth"></select></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
}
|
||||
|
||||
@* Log file list. *@
|
||||
<div class="sax-panel-item-table sax-flex">
|
||||
<table class="sax-item-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="pl-2">@Localiser["label.file"]</th>
|
||||
<th class="center">@Localiser["label.updated"]</th>
|
||||
<th class="center">@Localiser["label.size"]</th>
|
||||
</tr>
|
||||
<tr><td colspan="6"><div class="sax-panel-messages"></div></td></tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@* Log file template. *@
|
||||
<table class="sax-panel-item-template">
|
||||
<tr class="sax-panel-item LogFile pointer">
|
||||
<td><div class="Filename pl-2 pt-1"></div></td>
|
||||
<td><div class="Updated center"></div></td>
|
||||
<td><div class="Size center"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="dlgLogFile" class="sax-dialog">
|
||||
<form>
|
||||
<input type="hidden" class="LogFilename" />
|
||||
</form>
|
||||
<div class="sax-data FileData"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
sax.data.logFolder = '@(Localiser.EscapeJavascriptText(Model.LogsFilter.Folder))';
|
||||
sax.data.logYear = '@(Localiser.EscapeJavascriptText(Model.LogsFilter.Year))';
|
||||
sax.data.logMonth = '@(Localiser.EscapeJavascriptText(Model.LogsFilter.Month))';
|
||||
</script>
|
||||
Reference in New Issue
Block a user