diff --git a/SaOperationsMgr.sln b/SaOperationsMgr.sln index 8f25474..76b4295 100644 --- a/SaOperationsMgr.sln +++ b/SaOperationsMgr.sln @@ -7,7 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOperationsMgrService", "S EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOperationsMgr", "SaOperationsMgr\SaOperationsMgr.csproj", "{F59F6AEB-6611-4F71-A211-D64F98A1A8AC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOpnMgrCore", "SaOpnMgrCore\SaOpnMgrCore.csproj", "{9EAC4DD6-D3C8-4966-B1BE-B0D2CE17F012}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaOpnMgrCore", "SaOpnMgrCore\SaOpnMgrCore.csproj", "{9EAC4DD6-D3C8-4966-B1BE-B0D2CE17F012}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOpnMgrProcs", "SaOpnMgrProcs\SaOpnMgrProcs.csproj", "{12783700-F1BA-4D24-9B0E-9C8A7C5FF621}" EndProject @@ -25,7 +25,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SacsWinForms", "..\..\Commo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SacsWinOffice", "..\..\Common-C#\Workspace\SacsWinOffice\SacsWinOffice.csproj", "{E9106099-66B4-42DB-AF28-C34CF1AFF2AA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOperationsMgrWeb", "SaOperationsMgrWeb\SaOperationsMgrWeb.csproj", "{BAEA9717-20F8-4519-93CB-19F4B75D5913}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaOperationsMgrWeb", "SaOperationsMgrWeb\SaOperationsMgrWeb.csproj", "{BAEA9717-20F8-4519-93CB-19F4B75D5913}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/SaOperationsMgrWeb/Localisation/OpnProperties.resx b/SaOperationsMgrWeb/Localisation/OpnProperties.resx index 4fdb1b6..64a186f 100644 --- a/SaOperationsMgrWeb/Localisation/OpnProperties.resx +++ b/SaOperationsMgrWeb/Localisation/OpnProperties.resx @@ -1,101 +1,255 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sarand OperationsMgr + + + Cancel + + + Close + + + Login + + + Logout + + + Next page + + + No + + + OK + + + Prev page + + + Refresh + + + Yes + + + Code + + + Status + + + Utility + + + Utilities + + + Login + + + Logout + + + NextDataPage + + + PrevDataPage + + + Refresh + + + Login + + + Code + + + Company + + + Instance + + + Password + + + Status + + + Type + + + User + + + Home + + + Logout + + + Utilities + + + Are you sure that you want to logout? + + + No matching data found. + + + Querying data. please wait ... + + + Invalid credentials supplied. + + + User code must be supplied. + + + Failed to retrieve Security Console. + + + Your session has expired. + + + Unknown session context. + + + Session has expired. + + + Utilities + + + items + + + of + + + Page + + + Utilities + \ No newline at end of file diff --git a/SaOperationsMgrWeb/Resources/OpnProperties.resx b/SaOperationsMgrWeb/Resources/OpnProperties.resx index 4fdb1b6..64a186f 100644 --- a/SaOperationsMgrWeb/Resources/OpnProperties.resx +++ b/SaOperationsMgrWeb/Resources/OpnProperties.resx @@ -1,101 +1,255 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sarand OperationsMgr + + + Cancel + + + Close + + + Login + + + Logout + + + Next page + + + No + + + OK + + + Prev page + + + Refresh + + + Yes + + + Code + + + Status + + + Utility + + + Utilities + + + Login + + + Logout + + + NextDataPage + + + PrevDataPage + + + Refresh + + + Login + + + Code + + + Company + + + Instance + + + Password + + + Status + + + Type + + + User + + + Home + + + Logout + + + Utilities + + + Are you sure that you want to logout? + + + No matching data found. + + + Querying data. please wait ... + + + Invalid credentials supplied. + + + User code must be supplied. + + + Failed to retrieve Security Console. + + + Your session has expired. + + + Unknown session context. + + + Session has expired. + + + Utilities + + + items + + + of + + + Page + + + Utilities + \ No newline at end of file diff --git a/SaOperationsMgrWeb/Resources/Resources.OpnProperties.resx b/SaOperationsMgrWeb/Resources/Resources.OpnProperties.resx index 4fdb1b6..91d8ff3 100644 --- a/SaOperationsMgrWeb/Resources/Resources.OpnProperties.resx +++ b/SaOperationsMgrWeb/Resources/Resources.OpnProperties.resx @@ -1,101 +1,258 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sarand LogisticsMgr + + + Sarand OperationsMgr + + + Cancel + + + Close + + + Login + + + Logout + + + Next page + + + No + + + OK + + + Prev page + + + Refresh + + + Yes + + + Code + + + Status + + + Utility + + + Utilities + + + Login + + + Logout + + + NextDataPage + + + PrevDataPage + + + Refresh + + + Login + + + Code + + + Company + + + Instance + + + Password + + + Status + + + Type + + + User + + + Home + + + Logout + + + Utilities + + + Are you sure that you want to logout? + + + No matching data found. + + + Querying data. please wait ... + + + Invalid credentials supplied. + + + User code must be supplied. + + + Failed to retrieve Security Console. + + + Your session has expired. + + + Unknown session context. + + + Session has expired. + + + Utilities + + + items + + + of + + + Page + + + Utilities + \ No newline at end of file diff --git a/SaOperationsMgrWeb/Resources/SaOperationsMgrWeb.Resources.OpnProperties.resx b/SaOperationsMgrWeb/Resources/SaOperationsMgrWeb.Resources.OpnProperties.resx index 4fdb1b6..64a186f 100644 --- a/SaOperationsMgrWeb/Resources/SaOperationsMgrWeb.Resources.OpnProperties.resx +++ b/SaOperationsMgrWeb/Resources/SaOperationsMgrWeb.Resources.OpnProperties.resx @@ -1,101 +1,255 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sarand OperationsMgr + + + Cancel + + + Close + + + Login + + + Logout + + + Next page + + + No + + + OK + + + Prev page + + + Refresh + + + Yes + + + Code + + + Status + + + Utility + + + Utilities + + + Login + + + Logout + + + NextDataPage + + + PrevDataPage + + + Refresh + + + Login + + + Code + + + Company + + + Instance + + + Password + + + Status + + + Type + + + User + + + Home + + + Logout + + + Utilities + + + Are you sure that you want to logout? + + + No matching data found. + + + Querying data. please wait ... + + + Invalid credentials supplied. + + + User code must be supplied. + + + Failed to retrieve Security Console. + + + Your session has expired. + + + Unknown session context. + + + Session has expired. + + + Utilities + + + items + + + of + + + Page + + + Utilities + \ No newline at end of file diff --git a/SaOperationsMgrWeb/Resources/Sarand.OperationsMgr.Resources.OpnProperties.resx b/SaOperationsMgrWeb/Resources/Sarand.OperationsMgr.Resources.OpnProperties.resx index 4fdb1b6..64a186f 100644 --- a/SaOperationsMgrWeb/Resources/Sarand.OperationsMgr.Resources.OpnProperties.resx +++ b/SaOperationsMgrWeb/Resources/Sarand.OperationsMgr.Resources.OpnProperties.resx @@ -1,101 +1,255 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sarand OperationsMgr + + + Cancel + + + Close + + + Login + + + Logout + + + Next page + + + No + + + OK + + + Prev page + + + Refresh + + + Yes + + + Code + + + Status + + + Utility + + + Utilities + + + Login + + + Logout + + + NextDataPage + + + PrevDataPage + + + Refresh + + + Login + + + Code + + + Company + + + Instance + + + Password + + + Status + + + Type + + + User + + + Home + + + Logout + + + Utilities + + + Are you sure that you want to logout? + + + No matching data found. + + + Querying data. please wait ... + + + Invalid credentials supplied. + + + User code must be supplied. + + + Failed to retrieve Security Console. + + + Your session has expired. + + + Unknown session context. + + + Session has expired. + + + Utilities + + + items + + + of + + + Page + + + Utilities + \ No newline at end of file diff --git a/SaOperationsMgrWeb/SaOperationsMgrWeb.csproj b/SaOperationsMgrWeb/SaOperationsMgrWeb.csproj index 912f3e0..6c26ab7 100644 --- a/SaOperationsMgrWeb/SaOperationsMgrWeb.csproj +++ b/SaOperationsMgrWeb/SaOperationsMgrWeb.csproj @@ -35,4 +35,9 @@ + + + PreserveNewest + + diff --git a/SaOperationsMgrWeb/Views/Shared/OpnLogout.cshtml b/SaOperationsMgrWeb/Views/Shared/OpnLogout.cshtml new file mode 100644 index 0000000..d4d09e3 --- /dev/null +++ b/SaOperationsMgrWeb/Views/Shared/OpnLogout.cshtml @@ -0,0 +1,12 @@ +@model Sarand.OperationsMgr.Web.Models.Model_Base +@inject Sarand.OperationsMgr.Web.App.OpnLocaliser Localiser + +
+
+ @Html.Hidden("SessionIdx", null, new { @id = "" }) + @Html.Hidden("FormAction", @Localiser["form.action.logout"], new { @id = "" }) +
+
+
@Localiser["msg.confirm.logout"]
+
+
\ No newline at end of file diff --git a/SaOperationsMgrWeb/Views/Shared/OpnMessages.cshtml b/SaOperationsMgrWeb/Views/Shared/OpnMessages.cshtml new file mode 100644 index 0000000..caf18d0 --- /dev/null +++ b/SaOperationsMgrWeb/Views/Shared/OpnMessages.cshtml @@ -0,0 +1,33 @@ +@model Sarand.OperationsMgr.Web.Models.Model_Base +@if (Model.HasMessages) +{ +
+ @if (Model.ErrorMessages.Count > 0) + { +
+ @foreach (var message in Model.ErrorMessages) + { +
@message
+ } +
+ } + @if (Model.WarningMessages.Count > 0) + { +
+ @foreach (var message in Model.WarningMessages) + { +
@message
+ } +
+ } + @if (Model.InfoMessages.Count > 0) + { +
+ @foreach (var message in Model.InfoMessages) + { +
@message
+ } +
+ } +
+} diff --git a/SaOperationsMgrWeb/Views/Shared/_Layout.cshtml b/SaOperationsMgrWeb/Views/Shared/_Layout.cshtml index 6f73098..3393d9f 100644 --- a/SaOperationsMgrWeb/Views/Shared/_Layout.cshtml +++ b/SaOperationsMgrWeb/Views/Shared/_Layout.cshtml @@ -1,71 +1,131 @@ +@using Sarand.Core.App +@model Sarand.OperationsMgr.Web.Models.Model_Base +@inject Sarand.OperationsMgr.Web.App.OpnLocaliser Localiser + - - - @ViewData["Title"] - SaOperationsMgrWeb + + + @* IE11 incompatibility eg. 'border-radius' not recognised. Must be at top of head *@ + + + + + + + @ViewData["Title"] - Sarand OperationsMgr + + @* Stylesheets *@ + + + + + + + + + + @foreach (var cssFile in Model.AdditionalFiles_CSS) + { + + } + + @* Scripts *@ + + + + + + + + + + + + @* @RenderSection("scripts", required: false) *@ + + @foreach (var jsFile in Model.AdditionalFiles_JS) + { + + } + @if (SacsSystem.DebugMode) + { + @Html.ApplicationInsightsJavaScript(TelemetryConfiguration) + } - - - - - - - - - -
- @RenderBody() -
-
-

© 2017 - SaOperationsMgrWeb

-
-
- - - - - - - - - - + @* --- H e a d e r --- *@ + + + @* --- B o d y --- *@ +
+ @if (Model.ShowMessagesAtTopOfBody) + { + @await Html.PartialAsync("OpnMessages") + } + @RenderBody() + @await Html.PartialAsync("OpnLogout") +
+ + @* --- F o o t e r --- *@ +
+
@ViewData["CopyrightNotice"]
+
+ +
- @RenderSection("Scripts", required: false) diff --git a/SaOperationsMgrWeb/Views/Utilities/Utilities.cshtml b/SaOperationsMgrWeb/Views/Utilities/Utilities.cshtml new file mode 100644 index 0000000..5d835c3 --- /dev/null +++ b/SaOperationsMgrWeb/Views/Utilities/Utilities.cshtml @@ -0,0 +1,9 @@ +@model Sarand.OperationsMgr.Web.Models.Model_Utilities_Base +@inject Sarand.OperationsMgr.Web.App.OpnLocaliser Localiser +@{ + ViewData["Title"] = Localiser["view.title.utilities"]; +} + +
+ +
diff --git a/SaOperationsMgrWeb/Web/App/SaOperationsMgrWebApp.cs b/SaOperationsMgrWeb/Web/App/SaOperationsMgrWebApp.cs index 92747eb..17a5b5c 100644 --- a/SaOperationsMgrWeb/Web/App/SaOperationsMgrWebApp.cs +++ b/SaOperationsMgrWeb/Web/App/SaOperationsMgrWebApp.cs @@ -1,12 +1,14 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Sarand.Core.Base; +using Sarand.Core.IO; using Sarand.OperationsMgr.Core.App; using Sarand.OperationsMgr.Web.Consoles; using Sarand.OperationsMgr.Win.Dbas.App; using Sarand.Win.Dbas.Base; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading.Tasks; @@ -43,6 +45,49 @@ namespace Sarand.OperationsMgr.Web.App public SaOperationsMgrWebApp (IHostingEnvironment env, IConfigurationSection instanceConfig, String initialLogMessage) { app = this; + OpnSystem_WinDbas.InitStatics(); + ContentRootPath = env.ContentRootPath; + IsDevelopment = env.IsDevelopment(); + + // Locate IIS logs folder. + String logsFolder = null; + String folder = env.ContentRootPath; + DirectoryInfo info = null; + while (logsFolder == null && (info = Directory.GetParent(folder)) != null) + { + folder = info.FullName; + logsFolder = folder + Path.DirectorySeparatorChar + "logs" + Path.DirectorySeparatorChar + "LogFiles"; + if (!Directory.Exists(logsFolder)) + logsFolder = null; + } + + // Configure root logging folder. + if (logsFolder != null) + { + logsFolder = logsFolder + Path.DirectorySeparatorChar + "SaOperationsMgr"; + if (FileUtil.ValidateDirectory(logsFolder, true)) + LoggingRootFolder = logsFolder; + } + + // Initialise properties. + properties = new PropertySet(); + // ToDo Web app - Logging properties - by user session? + properties.AddProperty("Logging", "Folder", LoggingRootFolder); + properties.AddProperty("Logging", "Level", "Info"); + properties.AddProperty("Logging", "ExtendedLogging", ""); + + // Configure logging. + Logger.LogFilenamePrefix = "SLM-Web"; + Logger.LogFolder = properties.GetPropertyValue("Logging", "Folder"); +#if DEBUG + Logger.ConsoleLevel = SaMessageLevel.Trace; +#endif + Logger.LogFileLevel = EnumUtil.StartsWith(properties.GetPropertyValue("Logging", "Level"), SaMessageLevel.Info); + Logger.Info(initialLogMessage, true); + Logger.Info("Logging level: " + Logger.LogFileLevel); + + // Initialise global objects. + InitGlobals(instanceConfig); } public void Dispose () { diff --git a/SaOperationsMgrWeb/Web/Controllers/UtilitiesController-Utilities.cs b/SaOperationsMgrWeb/Web/Controllers/UtilitiesController-Utilities.cs new file mode 100644 index 0000000..370453d --- /dev/null +++ b/SaOperationsMgrWeb/Web/Controllers/UtilitiesController-Utilities.cs @@ -0,0 +1,65 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Sarand.Core.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.OperationsMgr.Web.Controllers +{ + //======================================================================= + // U t i l i t i e s C o n t r o l l e r + //----------------------------------------------------------------------- + // A s s e t s + //======================================================================= + partial class UtilitiesController + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Action - Utilities. + public IActionResult Utilities (Models.Model_Utilities_Utilities model) + { + Logger.Debug(GetType().Name + ".Utilities"); + + if (!ValidSession) + return new RedirectResult(GetRedirectLocation(RedirectLocation.Home_SessionExpired), false); + + ViewData["Title"] = Localiser["view.title.assets.assets"]; + //ViewData["Message"] = "Containers"; + + return View(model); + } + + //------------------------------------------------------------------- + // A j a x - R e s p o n s e D a t a + //------------------------------------------------------------------- + /// Summary Utility information + public class UtilityInfo + { + } + /// Detailed Utility data + public class UtilityData : UtilityInfo + { + } + + //------------------------------------------------------------------- + // A j a x - A s s e t L i s t + //------------------------------------------------------------------- + public class AjaxResponse_UtilityList : AjaxResponse + { + public List Utilities { get; set; } = new List(); + } + // Ajax request. + [HttpGet, HttpPost] + public IActionResult GetUtilityList (Models.Model_Utilities_Utilities model) + { + throw new NotImplementedException(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaOperationsMgrWeb/Web/Controllers/UtilitiesController.cs b/SaOperationsMgrWeb/Web/Controllers/UtilitiesController.cs new file mode 100644 index 0000000..9ddf4fe --- /dev/null +++ b/SaOperationsMgrWeb/Web/Controllers/UtilitiesController.cs @@ -0,0 +1,41 @@ +using Microsoft.AspNetCore.Mvc; +using Sarand.Core.Base; +using Sarand.OperationsMgr.Core.App; +using Sarand.OperationsMgr.Web.App; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.OperationsMgr.Web.Controllers +{ + //======================================================================= + // U t i l i t i e s C o n t r o l l e r + //======================================================================= + public partial class UtilitiesController : Controller_Base + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + public UtilitiesController (OpnLocaliser localiser) : base(localiser) + { + } + + //------------------------------------------------------------------- + // Properties. + + //------------------------------------------------------------------- + // Utilities. + + //------------------------------------------------------------------- + public IActionResult Error () + { + return View(); + } + + //------------------------------------------------------------------- + } + //======================================================================= +} diff --git a/SaOperationsMgrWeb/Web/Models/Model_Utilities_Base.cs b/SaOperationsMgrWeb/Web/Models/Model_Utilities_Base.cs new file mode 100644 index 0000000..461902f --- /dev/null +++ b/SaOperationsMgrWeb/Web/Models/Model_Utilities_Base.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.OperationsMgr.Web.Models +{ + public class Model_Utilities_Base : Model_Base + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + protected Model_Utilities_Base () + { + // Data paging. + DataPageNo = 1; + DataPageLength = 20; + DataItemCount = 0; + DataItemTotal = 0; + } + + //------------------------------------------------------------------- + // Filter properties. + + //------------------------------------------------------------------- + // Form properties. + } +} diff --git a/SaOperationsMgrWeb/Web/Models/Model_Utilities_Utilities.cs b/SaOperationsMgrWeb/Web/Models/Model_Utilities_Utilities.cs new file mode 100644 index 0000000..f9b2e0b --- /dev/null +++ b/SaOperationsMgrWeb/Web/Models/Model_Utilities_Utilities.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Sarand.OperationsMgr.Web.Models +{ + public class Model_Utilities_Utilities : Model_Utilities_Base + { + //------------------------------------------------------------------- + // Data members. + + //------------------------------------------------------------------- + // Construction. + public Model_Utilities_Utilities () + { + // Additional includes. + AdditionalFiles_CSS.Add("css/slm-assets-assets.css"); + AdditionalFiles_JS.Add("js/slm-assets-assets.js"); + } + + //------------------------------------------------------------------- + // Filter properties. + + //------------------------------------------------------------------- + // Form properties. + + //------------------------------------------------------------------- + } +} diff --git a/SaOperationsMgrWeb/appsettings.machine.sarand106.json b/SaOperationsMgrWeb/appsettings.machine.sarand106.json index aeeadd2..31ccda5 100644 --- a/SaOperationsMgrWeb/appsettings.machine.sarand106.json +++ b/SaOperationsMgrWeb/appsettings.machine.sarand106.json @@ -1,4 +1,13 @@ { + "SessionContexts": { + "TestInstance": { + "Instance": "TEST", + "Caption": "Test Instance", + "StockDatabase": { + "Location": "MsSQL:Sarand109\\Sql2014.SaBusinessMgr_Cadix" + } + } + }, "Logging": { "IncludeScopes": false, "LogLevel": { diff --git a/SaOperationsMgrWeb/appsettings.machine.sarand109.json b/SaOperationsMgrWeb/appsettings.machine.sarand109.json index aeeadd2..857dcf9 100644 --- a/SaOperationsMgrWeb/appsettings.machine.sarand109.json +++ b/SaOperationsMgrWeb/appsettings.machine.sarand109.json @@ -1,4 +1,13 @@ { + "SessionContexts": { + "TestInstance": { + "Instance": "TEST", + "Caption": "Test Instance", + "StockDatabase": { + "Location": "MsSQL:Sarand109\\SQL2012EXPRESS.SaBusinessMgr_Cadix" + } + } + }, "Logging": { "IncludeScopes": false, "LogLevel": { diff --git a/SaOperationsMgrWeb/wwwroot/css/jquery-ui.css b/SaOperationsMgrWeb/wwwroot/css/jquery-ui.css new file mode 100644 index 0000000..c464236 --- /dev/null +++ b/SaOperationsMgrWeb/wwwroot/css/jquery-ui.css @@ -0,0 +1,2000 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6 +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} + +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} + +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} + +.ui-helper-clearfix:after { + clear: both; +} + +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} + +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} + + .ui-menu .ui-menu { + position: absolute; + } + + .ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + } + + .ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; + } + + .ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; + } + + .ui-menu .ui-state-focus, + .ui-menu .ui-state-active { + margin: -1px; + } + +/* icon support */ +.ui-menu-icons { + position: relative; +} + + .ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; + } + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} + +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + /* Support: IE <= 11 */ + overflow: visible; +} + + .ui-button, + .ui-button:link, + .ui-button:visited, + .ui-button:hover, + .ui-button:active { + text-decoration: none; + } + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} + +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} + + .ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; + } + + .ui-controlgroup > .ui-controlgroup-item:focus, + .ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; + } + +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} + +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} + +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} + + .ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; + } + +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} + +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} + +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} + +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} + +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} + +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} + +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} + +.ui-checkboxradio-disabled { + pointer-events: none; +} + +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} + + .ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; + } + + .ui-datepicker .ui-datepicker-prev, + .ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; + } + + .ui-datepicker .ui-datepicker-prev-hover, + .ui-datepicker .ui-datepicker-next-hover { + top: 1px; + } + + .ui-datepicker .ui-datepicker-prev { + left: 2px; + } + + .ui-datepicker .ui-datepicker-next { + right: 2px; + } + + .ui-datepicker .ui-datepicker-prev-hover { + left: 1px; + } + + .ui-datepicker .ui-datepicker-next-hover { + right: 1px; + } + + .ui-datepicker .ui-datepicker-prev span, + .ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; + } + + .ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; + } + + .ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; + } + + .ui-datepicker select.ui-datepicker-month, + .ui-datepicker select.ui-datepicker-year { + width: 45%; + } + + .ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; + } + + .ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; + } + + .ui-datepicker td { + border: 0; + padding: 1px; + } + + .ui-datepicker td span, + .ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; + } + + .ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; + } + + .ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; + } + + .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; + } + + /* with multiple calendars */ + .ui-datepicker.ui-datepicker-multi { + width: auto; + } + +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} + + .ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; + } + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} + + .ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; + } + + .ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; + } + + .ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; + } + + .ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; + } + + .ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; + } + + .ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; + } + + .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, + .ui-datepicker-rtl .ui-datepicker-group { + float: right; + } + + .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, + .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; + } + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} + + .ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; + } + + .ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; + } + + .ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; + } + + .ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; + } + + .ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; + } + + .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; + } + + .ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; + } + + .ui-dialog .ui-resizable-n { + height: 2px; + top: 0; + } + + .ui-dialog .ui-resizable-e { + width: 2px; + right: 0; + } + + .ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; + } + + .ui-dialog .ui-resizable-w { + width: 2px; + left: 0; + } + + .ui-dialog .ui-resizable-se, + .ui-dialog .ui-resizable-sw, + .ui-dialog .ui-resizable-ne, + .ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; + } + + .ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; + } + + .ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; + } + + .ui-dialog .ui-resizable-ne { + right: 0; + top: 0; + } + + .ui-dialog .ui-resizable-nw { + left: 0; + top: 0; + } + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} + +.ui-resizable { + position: relative; +} + +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} + +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} + + .ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; + } + + .ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; + } + +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} + +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} + +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} + +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} + + .ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; + } + + .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; + } + +.ui-selectmenu-open { + display: block; +} + +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} + +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} + +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} + +.ui-slider { + position: relative; + text-align: left; +} + + .ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; + } + + .ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; + } + + /* support: IE8 - See #6727 */ + .ui-slider.ui-state-disabled .ui-slider-handle, + .ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; + } + +.ui-slider-horizontal { + height: .8em; +} + + .ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; + } + + .ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; + } + + .ui-slider-horizontal .ui-slider-range-min { + left: 0; + } + + .ui-slider-horizontal .ui-slider-range-max { + right: 0; + } + +.ui-slider-vertical { + width: .8em; + height: 100px; +} + + .ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; + } + + .ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; + } + + .ui-slider-vertical .ui-slider-range-min { + bottom: 0; + } + + .ui-slider-vertical .ui-slider-range-max { + top: 0; + } + +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} + +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} + +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} + +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} + +.ui-spinner-up { + top: 0; +} + +.ui-spinner-down { + bottom: 0; +} + +.ui-tabs { + position: relative; /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} + + .ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; + } + + .ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; + } + + .ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; + } + + .ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; + } + + .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, + .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, + .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; + } + +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} + +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} + +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} + +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} + + .ui-widget .ui-widget { + font-size: 1em; + } + + .ui-widget input, + .ui-widget select, + .ui-widget textarea, + .ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; + } + + .ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; + } + +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} + + .ui-widget-content a { + color: #333333; + } + +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} + + .ui-widget-header a { + color: #333333; + } + + /* Interaction states +----------------------------------*/ + .ui-state-default, + .ui-widget-content .ui-state-default, + .ui-widget-header .ui-state-default, + .ui-button, + /* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ + html .ui-button.ui-state-disabled:hover, + html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; + } + + .ui-state-default a, + .ui-state-default a:link, + .ui-state-default a:visited, + a.ui-button, + a:link.ui-button, + a:visited.ui-button, + .ui-button { + color: #454545; + text-decoration: none; + } + + .ui-state-hover, + .ui-widget-content .ui-state-hover, + .ui-widget-header .ui-state-hover, + .ui-state-focus, + .ui-widget-content .ui-state-focus, + .ui-widget-header .ui-state-focus, + .ui-button:hover, + .ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; + } + + .ui-state-hover a, + .ui-state-hover a:hover, + .ui-state-hover a:link, + .ui-state-hover a:visited, + .ui-state-focus a, + .ui-state-focus a:hover, + .ui-state-focus a:link, + .ui-state-focus a:visited, + a.ui-button:hover, + a.ui-button:focus { + color: #2b2b2b; + text-decoration: none; + } + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} + + .ui-icon-background, + .ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; + } + + .ui-state-active a, + .ui-state-active a:link, + .ui-state-active a:visited { + color: #ffffff; + text-decoration: none; + } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} + +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; +} + +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} + +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} + + .ui-state-error a, + .ui-widget-content .ui-state-error a, + .ui-widget-header .ui-state-error a { + color: #5f3f3f; + } + +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} + +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} + +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter: Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} + +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter: Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} + + .ui-state-disabled .ui-icon { + filter: Alpha(Opacity=35); /* support: IE8 - See #6059 */ + } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} + +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} + +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} + +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} + +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} + +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} + +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} + +.ui-button .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { + background-position: 16px 16px; +} + +.ui-icon-caret-1-n { + background-position: 0 0; +} + +.ui-icon-caret-1-ne { + background-position: -16px 0; +} + +.ui-icon-caret-1-e { + background-position: -32px 0; +} + +.ui-icon-caret-1-se { + background-position: -48px 0; +} + +.ui-icon-caret-1-s { + background-position: -65px 0; +} + +.ui-icon-caret-1-sw { + background-position: -80px 0; +} + +.ui-icon-caret-1-w { + background-position: -96px 0; +} + +.ui-icon-caret-1-nw { + background-position: -112px 0; +} + +.ui-icon-caret-2-n-s { + background-position: -128px 0; +} + +.ui-icon-caret-2-e-w { + background-position: -144px 0; +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} + +.ui-icon-triangle-1-s { + background-position: -65px -16px; +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} + +.ui-icon-arrow-1-s { + background-position: -65px -32px; +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} + +.ui-icon-arrowthick-1-n { + background-position: 1px -48px; +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} + +.ui-icon-arrow-4 { + background-position: 0 -80px; +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} + +.ui-icon-extlink { + background-position: -32px -80px; +} + +.ui-icon-newwin { + background-position: -48px -80px; +} + +.ui-icon-refresh { + background-position: -64px -80px; +} + +.ui-icon-shuffle { + background-position: -80px -80px; +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} + +.ui-icon-folder-open { + background-position: -16px -96px; +} + +.ui-icon-document { + background-position: -32px -96px; +} + +.ui-icon-document-b { + background-position: -48px -96px; +} + +.ui-icon-note { + background-position: -64px -96px; +} + +.ui-icon-mail-closed { + background-position: -80px -96px; +} + +.ui-icon-mail-open { + background-position: -96px -96px; +} + +.ui-icon-suitcase { + background-position: -112px -96px; +} + +.ui-icon-comment { + background-position: -128px -96px; +} + +.ui-icon-person { + background-position: -144px -96px; +} + +.ui-icon-print { + background-position: -160px -96px; +} + +.ui-icon-trash { + background-position: -176px -96px; +} + +.ui-icon-locked { + background-position: -192px -96px; +} + +.ui-icon-unlocked { + background-position: -208px -96px; +} + +.ui-icon-bookmark { + background-position: -224px -96px; +} + +.ui-icon-tag { + background-position: -240px -96px; +} + +.ui-icon-home { + background-position: 0 -112px; +} + +.ui-icon-flag { + background-position: -16px -112px; +} + +.ui-icon-calendar { + background-position: -32px -112px; +} + +.ui-icon-cart { + background-position: -48px -112px; +} + +.ui-icon-pencil { + background-position: -64px -112px; +} + +.ui-icon-clock { + background-position: -80px -112px; +} + +.ui-icon-disk { + background-position: -96px -112px; +} + +.ui-icon-calculator { + background-position: -112px -112px; +} + +.ui-icon-zoomin { + background-position: -128px -112px; +} + +.ui-icon-zoomout { + background-position: -144px -112px; +} + +.ui-icon-search { + background-position: -160px -112px; +} + +.ui-icon-wrench { + background-position: -176px -112px; +} + +.ui-icon-gear { + background-position: -192px -112px; +} + +.ui-icon-heart { + background-position: -208px -112px; +} + +.ui-icon-star { + background-position: -224px -112px; +} + +.ui-icon-link { + background-position: -240px -112px; +} + +.ui-icon-cancel { + background-position: 0 -128px; +} + +.ui-icon-plus { + background-position: -16px -128px; +} + +.ui-icon-plusthick { + background-position: -32px -128px; +} + +.ui-icon-minus { + background-position: -48px -128px; +} + +.ui-icon-minusthick { + background-position: -64px -128px; +} + +.ui-icon-close { + background-position: -80px -128px; +} + +.ui-icon-closethick { + background-position: -96px -128px; +} + +.ui-icon-key { + background-position: -112px -128px; +} + +.ui-icon-lightbulb { + background-position: -128px -128px; +} + +.ui-icon-scissors { + background-position: -144px -128px; +} + +.ui-icon-clipboard { + background-position: -160px -128px; +} + +.ui-icon-copy { + background-position: -176px -128px; +} + +.ui-icon-contact { + background-position: -192px -128px; +} + +.ui-icon-image { + background-position: -208px -128px; +} + +.ui-icon-video { + background-position: -224px -128px; +} + +.ui-icon-script { + background-position: -240px -128px; +} + +.ui-icon-alert { + background-position: 0 -144px; +} + +.ui-icon-info { + background-position: -16px -144px; +} + +.ui-icon-notice { + background-position: -32px -144px; +} + +.ui-icon-help { + background-position: -48px -144px; +} + +.ui-icon-check { + background-position: -64px -144px; +} + +.ui-icon-bullet { + background-position: -80px -144px; +} + +.ui-icon-radio-on { + background-position: -96px -144px; +} + +.ui-icon-radio-off { + background-position: -112px -144px; +} + +.ui-icon-pin-w { + background-position: -128px -144px; +} + +.ui-icon-pin-s { + background-position: -144px -144px; +} + +.ui-icon-play { + background-position: 0 -160px; +} + +.ui-icon-pause { + background-position: -16px -160px; +} + +.ui-icon-seek-next { + background-position: -32px -160px; +} + +.ui-icon-seek-prev { + background-position: -48px -160px; +} + +.ui-icon-seek-end { + background-position: -64px -160px; +} + +.ui-icon-seek-start { + background-position: -80px -160px; +} +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { + background-position: -80px -160px; +} + +.ui-icon-stop { + background-position: -96px -160px; +} + +.ui-icon-eject { + background-position: -112px -160px; +} + +.ui-icon-volume-off { + background-position: -128px -160px; +} + +.ui-icon-volume-on { + background-position: -144px -160px; +} + +.ui-icon-power { + background-position: 0 -176px; +} + +.ui-icon-signal-diag { + background-position: -16px -176px; +} + +.ui-icon-signal { + background-position: -32px -176px; +} + +.ui-icon-battery-0 { + background-position: -48px -176px; +} + +.ui-icon-battery-1 { + background-position: -64px -176px; +} + +.ui-icon-battery-2 { + background-position: -80px -176px; +} + +.ui-icon-battery-3 { + background-position: -96px -176px; +} + +.ui-icon-circle-plus { + background-position: 0 -192px; +} + +.ui-icon-circle-minus { + background-position: -16px -192px; +} + +.ui-icon-circle-close { + background-position: -32px -192px; +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} + +.ui-icon-circle-check { + background-position: -208px -192px; +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} + +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} + +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} + +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .003; + filter: Alpha(Opacity=.3); /* support: IE8 */ +} + +.ui-widget-shadow { + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; +} diff --git a/SaOperationsMgrWeb/wwwroot/css/opn-core.css b/SaOperationsMgrWeb/wwwroot/css/opn-core.css new file mode 100644 index 0000000..84d5b0d --- /dev/null +++ b/SaOperationsMgrWeb/wwwroot/css/opn-core.css @@ -0,0 +1,579 @@ +/* + Application: Sarand OperationsMgr + Stylesheet: Core +*/ + +@charset "UTF-8"; + +@media print { + * { + color: #000000 !important; + background-color: #FFFFFF !important; + } +} + +body { + min-width: 320px; + max-width: 1600px; + margin: auto; + padding: 0px; + font-family: Verdana,Arial,Tahoma,"Sans-Serif"; + font-size: 16px; + line-height: 1.42857em; + text-indent: 0px; + color: #0a0a0a; + background-color: #ffffe5; + page: rotated; + border-width: 0px; +} + +div { + font-family: inherit; + font-size: inherit; +} + +button, input, textarea, select, option { + font-family: inherit; + font-size: 1em; +} + +input, textarea, select { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +/* --- Standard tags --- */ +h1, h2, h3 { + color: #0000B0; +} + +h1 { + font-size: 14px; + font-weight: bold; + margin: 6px 0px 6px 0px; + padding: 0px; +} + +h2 { + font-size: 12px; + font-weight: bold; + margin: 3px 0px 6px 0px; + padding: 0px; +} + +h3 { + font-size: 11px; + font-weight: bold; + margin: 3px 0px 6px 0px; + padding: 0px; +} + +p { + margin: 3px 0px 6px 0px; +} + +hr { + height: 4px; + width: 90%; + text-align: center; + color: #000000; + margin: 4px auto; +} + +a { + font-size: 1em; +} + +img { + border-style: none; +} + +ul { + margin-top: 3px; + margin-bottom: 6px; +} + +table { + margin-top: 0px; + empty-cells: inherit; +} + +td { + vertical-align: top; + padding: 0px; +} + +div, form { + margin: 0px; + padding: 0px; +} + +label { + margin: 0px; +} + +input { + margin: 0px; + padding: 0px 2px 1px 2px; +} + +textarea { + resize: none; +} + +.bold, b { + font-weight: bold !important; +} + +.ul, u { + text-decoration: underline !important; +} + +.italic, i { + font-style: italic !important; +} + +.upper { + text-transform: uppercase !important; +} + +.lower { + text-transform: lowercase !important; +} + +.center { + text-align: center !important; +} + +.right { + text-align: right !important; +} + +.middle { + vertical-align: middle !important; +} + +.bottom { + vertical-align: bottom !important; +} + +.pointer { + cursor: pointer; +} + +.fullwidth { + width: 100%; +} + +.floatl, .floatleft { + float: left; +} + +.floatr, .floatright { + float: right; +} + +.clearl, .clearleft { + clear: left; +} + +.clearr, .clearright { + clear: right; +} + +.clearb, .clearboth { + clear: both; + margin: 0px; + padding: 0px; + width: 0px; + height: 0px; + line-height: 0.0em; + font-size: 0px; +} + +.clear-after:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; +} + +.nowrap { + white-space: nowrap !important; +} + +.spacer { + height: 4px; + font-size: 2px; +} + +.spacer2 { + height: 8px; + font-size: 2px; +} + +.spacer4 { + height: 16px; + font-size: 2px; +} + +.pl4 { + padding-left: 4px; +} + +.pl8 { + padding-left: 8px; +} + +.lastTabSeq { + z-index: 99; +} + +.hidden { + visibility: hidden; +} + +.shadow { + -moz-box-shadow: 2px 2px 3px #ccc; + -webkit-box-shadow: 2px 2px 3px #ccc; + box-shadow: 2px 2px 3px #ccc; /* For IE 8 */ + -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=3,Direction=135,Color='#cccccc')"; /* For IE 5.5 - 7 */ + filter: progid:DXImageTransform.Microsoft.Shadow(Strength=3,Direction=135,Color='#cccccc'); +} + +/* --- Application --- */ +body { + padding-top: 50px !important; + padding-bottom: 0 !important; /* 20px */ +} + +/* Wrapping element */ +/* Set some basic padding to keep content from hitting the edges */ +.body-content { + padding-left: 15px; + padding-right: 15px; +} + +/* Set widths on the form inputs since otherwise they're 100% wide */ +input, select, textarea { + max-width: 280px; +} + +/* Carousel */ +.carousel-caption p { + font-size: 20px; + line-height: 1.4; +} +/* Make .svg files in the carousel display properly in older browsers */ +.carousel-inner .item img[src$=".svg"] { + width: 100%; +} + +/* Hide/rearrange for smaller screens */ +@media screen and (max-width:767px) { + /* Hide captions */ + .carousel-caption { + display: none; + } +} + +/* --- Bootstrap --- */ +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a, +.mob .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #e0e0e0; + font-weight: bold; +} + +.dropdown-menu { + font-size: 1em; +} + +/* --- Tooltip --- */ +.tooltip { + position: fixed +} + + .tooltip.in { + opacity: 1; + } + + .tooltip.top { + margin-top: -0px; + } + + .tooltip.top .tooltip-arrow { + border-top-color: #808080; + } + + .tooltip .tooltip-inner { + min-width: 320px; + max-width: 320px; + color: #404040; + background-color: #FFFFFF; + text-align: left; + border: 1px solid #808080; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: 4px 4px 3px #aaa; + -webkit-box-shadow: 4px 4px 3px #aaa; + box-shadow: 4px 4px 3px #aaa; /* For IE 8 */ + -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=3,Direction=135,Color='#aaaaaa')"; /* For IE 5.5 - 7 */ + filter: progid:DXImageTransform.Microsoft.Shadow(Strength=3,Direction=135,Color='#aaaaaa'); + } + + .tooltip .tooltip-inner .tooltip-caption { + margin-bottom: 4px; + font-weight: bold; + border-bottom: 1px solid #808080; + } + + .tooltip .tooltip-inner .label { + padding-right: 6px; + color: #808080; + } + +/* --- Application Messages --- */ +.opn-msg { + margin: 4px 0; +} + + .opn-msg .err, .opn-msg .wrn, .opn-msg .inf { + margin: 2px 0; + padding: 4px 16px 4px 32px; + background-color: #fefefe; + border-radius: 4px; + } + + .opn-msg .err { + color: red; + border: 1px solid red; + } + + .opn-msg .wrn { + color: #ff6000; + border: 1px solid darkorange; + } + + .opn-msg .inf { + color: darkgreen; + border: 1px solid green; + } + +/* --- Notification --- */ +#opn-notification { + display: none; + position: fixed; + bottom: 0; + right: 0; + min-width: 180px; + margin-right: 12px; + z-index: 1000; + border: 1px solid #808080; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + overflow: hidden; +} + + #opn-notification .content { + background-color: #fbfbfb; + } + + #opn-notification .heading { + background-color: #f0f0f0; + font-weight: bold; + border-bottom: 1px solid #808080; + } + + #opn-notification .heading:after { + content: ""; + display: table; + clear: both; + } + + #opn-notification .title { + float: left; + padding: 4px 8px; + white-space: nowrap; + } + + #opn-notification .close { + float: right; + padding: 4px; + font-weight: bold; + cursor: pointer; + } + + #opn-notification .message { + clear: both; + padding: 8px; + } + +/* --- Modal Please wait --- */ +#opn-please-wait { + display: none; + cursor: progress; + position: fixed; + z-index: 1000; + top: 0; + left: 0; + height: 100%; + width: 100%; + background: rgba(255,255,255,.0) url('../img/icon/opn-please-wait.gif') 50% 50% no-repeat; +} + +/* --- Dialogs --- */ +div.dialog { + display: none; +} + +/* --- Forms --- */ +.opn-form { + margin: 12px auto 6px auto; + background-color: #f8f8f8; + border: 1px solid #808080; + border-radius: 4px; + -moz-box-shadow: 4px 4px 6px #ccc; + -webkit-box-shadow: 4px 4px 6px #ccc; + filter: progid:DXImageTransform.Microsoft.Shadow(Strength=6,Direction=135,Color='#cccccc'); +} + + .opn-form.login { + width: 440px; + } + + .opn-form .caption { + padding: 4px 0; + text-align: center; + font-weight: bold; + color: #fff; + background-color: #404040; + border-bottom: 1px solid #808080; + } + + .opn-form .body { + padding: 12px; + } + +/* --- Controls --- */ +.ui-datepicker-trigger { + margin-left: 4px; + cursor: pointer; +} + +/* --- Page Layout --- */ +#opn-header.navbar-inverse { + background-color: #404040; +} + +#opn-body { + padding: 2px 0; + overflow-y: auto; +} + +#opn-footer { + padding: 0 4px; + font-size: 10px; + color: #e0e0e0; + background-color: #404040; + border-top: solid 1px #b0b0b0; + visibility: hidden; +} + +/* --- Panels --- */ +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + padding: 0px; +} + +/* --- Filter Panel --- */ +.opn-panel-filter { + padding: 4px 4px; + /*border:1px solid blue;*/ +} + + .opn-panel-filter .opn-filter-header { + margin-bottom: 4px; + padding: 2px 8px; + text-align: center; + background-color: aliceblue; + border: 1px solid #808080; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + } + + .opn-panel-filter .opn-label { + padding: 0 8px 0 0; + text-align: right; + } + + .opn-panel-filter .opn-value { + } + + .opn-panel-filter input[type="text"], + .opn-panel-filter select { + width: 96%; + } + + .opn-panel-filter .opn-filter-paging { + display: none; + } + +/* --- Data Panel --- */ +.opn-panel-data { + padding: 4px 4px; + /*border:1px solid purple;*/ +} + + .opn-panel-data .opn-data-header { + margin-bottom: 4px; + background-color: aliceblue; + border: 1px solid #808080; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + } + + .opn-panel-data .opn-data-header .opn-column-header { + padding: 2px 8px; + } + + .opn-panel-data .opn-data-msg { + padding: 4px; + background-color: lightgoldenrodyellow; + border: 1px solid #808080; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + } + + .opn-panel-data .opn-data-content { + overflow-y: auto; + } + + .opn-panel-data .opn-data-item { + } + + .opn-panel-data .opn-data-item { + margin-bottom: 4px; + padding: 6px 4px; + background-color: #fff; + border: 1px solid #808080; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + } + + .opn-panel-data .opn-data-item:hover { + background-color: #e0ffe0; + } + +.opn-data-template { + display: none; +} + +/* --- The End --- */ diff --git a/SaOperationsMgrWeb/wwwroot/js/opn-core.js b/SaOperationsMgrWeb/wwwroot/js/opn-core.js new file mode 100644 index 0000000..0e7e24c --- /dev/null +++ b/SaOperationsMgrWeb/wwwroot/js/opn-core.js @@ -0,0 +1,340 @@ +/* + Application: Sarand OperationsMgr + Javascript: Core + Notes: From a sarand.com original. +*/ + +//------------------------------------------------------------- +// Data members. +var opn = opn || {}; + +//------------------------------------------------------------- +// Utility functions. +opn.checkTextAreaMaxLength = function (ctrl, len) { + if (ctrl == null || ctrl.value == null) return; + if (ctrl.value.length > len) ctrl.value = ctrl.value.substring(0, len); +}; +opn.isDef = function (obj) { + return obj === null || typeof obj == "undefined" ? false : true; +}; +opn.isFn = function (fn) { + return fn != null && typeof fn == typeof Function; +}; +opn.isNumeric = function (n) { + return !isNaN(parseFloat(n)) && isFinite(n); +}; +opn.zeroPad = function (num, count) { + var val = num + ''; + while (val.length < count) val = "0" + val; + return val; +}; +opn.setOddDataRowClass = function (rowSel) { + $(rowSel).addClass(function (index, currentClasses) { + return index % 2 == 1 ? "other" : ""; + }); +}; +opn.toInt = function (value, defaultValue) { + return opn.isNumeric(value) ? parseInt(value, 10) : defaultValue || 0; +} + +//------------------------------------------------------------- +// Security. +opn.redirectHome = function () { + opn.doPleaseWait(); + document.location = opn.urlHome; +} +opn.redirectHomeExp = function () { + opn.doPleaseWait(); + document.location = opn.urlHomeExp; +} +opn.doLogout = function () { + var $dlg = $('#dlgOpnLogout'); + if (!$dlg.hasClass('ui-dialog-content')) { + var optLogout = opn.dlgOpts(); + optLogout.buttons[opn.dlgBtnLogout] = function () { $(this).dialog('close'); opn.onLogout(); }; + optLogout.buttons[opn.dlgBtnCancel] = function () { $(this).dialog('close'); }; + $dlg.dialog(optLogout); + } + $dlg.dialog('open'); +}; +opn.onLogout = function () { + opn.doPleaseWait(); + $('form#frmOpnLogout').submit(); +}; + +//------------------------------------------------------------- +// Data paging. +opn.doPrevDataPage = function (frm) { + var $frm = $(frm); + var $pageNo = $('#ifDataPageNo', $frm); + $pageNo.val(Math.max(1, opn.toInt($pageNo.val()) - 1)); + opn.refreshItemList(); +}; +opn.doNextDataPage = function (frm) { + var $frm = $(frm); + var $pageNo = $('#ifDataPageNo', $frm); + $pageNo.val(opn.toInt($pageNo.val()) + 1); + opn.refreshItemList(); +}; +opn.refreshPaging = function (paging, $paging) { + if (!paging) { + $paging.hide().Hide(); + return; + } + $('#ifDataPageNo', $paging).val(paging ? paging.pageNo : ''); + $('.PageNo', $paging).text(paging ? paging.pageNo : ''); + $('#DataPageCount', $paging).val(paging ? paging.pageCount : ''); + $('.PageCount', $paging).text(paging ? paging.pageCount : ''); + $('#DataItemCount', $paging).val(paging ? paging.itemCount : ''); + $('#DataItemTotal', $paging).val(paging ? paging.itemTotal : ''); + $('.ItemTotal', $paging).text(paging ? paging.itemTotal : ''); + if (paging.paged) $paging.show(); else $paging.hide(); +} + +//------------------------------------------------------------- +// Dialogs. +opn.openDialog = function ($dlg, width) { + $dlg.dialog({ minWidth: null, maxWidth: null, width: Math.min(width || 400, $(window).width() * .90) }).dialog('open'); + return $dlg; +}; +opn.dlgOpts = function () { + return { autoOpen: false, modal: true, show: 'clip', hide: 'clip', minWidth: 320, maxWidth: 480, width: 'auto', resizable: false, draggable: false, closeOnEscape: false, dialogClass: "no-close center-buttons", buttons: {} }; +}; +opn.dlgOptsClose = function () { + var opts = opn.dlgOpts(); + opts.buttons[opn.dlgBtnClose] = function () { $(this).dialog('close'); }; + return opts; +}; +opn.doAlert = function (title, msg, onOk) { + if (!msg) { + msg = title; + title = null; + } + if (!opn.isDef(opn.$dlgAlert)) { + var opt = opn.dlgOpts(); + opt.title = title || opn.dlgTitleAlert; + opt.buttons[opn.dlgBtnOk] = function () { $(this).dialog('close'); if (onOk) onOk(); }; + opn.$dlgAlert = $('
').dialog(opt); + } + $('#dlgAlertMsg').html(msg); + opn.openDialog(opn.$dlgAlert); +}; +opn.doConfirm = function (msg, onOk, onCancel) { + if (!opn.isDef(opn.$dlgConfirm)) { + var opt = opn.dlgOpts(); + opt.title = opn.dlgTitleConfirm; + opn.$dlgConfirm = $('
').dialog(opt); + } + var buttons = opn.$dlgConfirm.dialog('option', 'buttons'); + buttons[opn.dlgBtnYes] = function () { $(this).dialog('close'); if (onOk) onOk(); }; + buttons[opn.dlgBtnNo] = function () { $(this).dialog('close'); if (onCancel) onCancel(); }; + opn.$dlgConfirm.dialog('option', 'buttons', buttons); + $('#dlgConfirmMsg').html(msg); + opn.openDialog(opn.$dlgConfirm); +}; +opn.doProgress = function (msg, delay) { + clearTimeout(opn.toShowProgress); + if (!opn.isDef(opn.$dlgProgress)) { + var opt = opn.dlgOpts(); + opt.title = opn.dlgTitleProgress; + opt.show = { effect: 'fade', duration: 100 }; + opt.hide = { effect: 'fade', duration: 100 }; + opn.$dlgProgress = $('
').dialog(opt); + } + $('#dlgProgressMsg').html(msg); + if (delay > 0) opn.toShowProgress = setTimeout(function () { opn.$dlgProgress.dialog('open'); }, delay); + else opn.$dlgProgress.dialog('open'); +}; +opn.hideProgress = function () { + clearTimeout(opn.toShowProgress); + opn.$dlgProgress.dialog('close'); +}; + +//------------------------------------------------------------- +// Notifications. +opn.showNotification = function (title, msg) { + window.clearTimeout(opn.toNotification); + var $win = $(window); + var $not = $('#opn-notification').hide(); + if (!$not.length) { + $not = $('
✖
'); + $('body').append($not); + } + var $hdr = $('.heading', $not).css({ 'background-color': 'rgba(247,217,0,0.7)' }); + $('.title', $not).html(title); + $('.message', $not).html(msg); + var fbr = $('#opn-footer')[0].getBoundingClientRect(); + var fn = function () { $hdr.delay(2000).animate({ backgroundColor: '#f0f0f0' }, 1000); }; + $not.css({ 'bottom': $win.height() - fbr.top, 'right': $win.width() - fbr.right }).slideDown(500, fn); + opn.toNotification = setTimeout(opn.hideNotification, 6000); +}; +opn.hideNotification = function () { + window.clearTimeout(opn.toNotification); + $('#opn-notification').slideUp(500); +}; +opn.doPleaseWait = function () { + $('#opn-please-wait').show(); +}; +opn.hidePleaseWait = function () { + $('#opn-please-wait').hide(); +}; + +//------------------------------------------------------------- +// Ajax. +opn.doAjaxRequest = function (ajax, url, formId, callback, delay) { + window.clearTimeout(ajax.timeout); + if (url) ajax.url = url; + if (formId) ajax.formId = formId; + if (callback) ajax.callback = callback; + if (!ajax.noWaitIcon) opn.doPleaseWait(); + ajax.timeout = setTimeout(function () { opn.execAjaxRequest(ajax); }, Math.max(50, parseInt(delay || 0, 10))); +}; +opn.execAjaxRequest = function (ajax) { + window.clearTimeout(ajax.timeout); + if (ajax.request) ajax.request.abort(); + var cfgAjax = + { + url: ajax.url, + type: 'POST', + cache: false, + enctype: 'multipart/form-data', + data: ajax.formData || $("#" + ajax.formId).serialize(), + dataType: 'json', + success: function (response, status, jqXHR) { + ajax.status = status; + if (response.notification) + opn.showNotification(response.notification.title, response.notification.message); + if (response.message) + opn.doAlert(response.message.title, response.message.text, function (response) { if (ajax.errFn) ajax.errFn(response); }(response)); + if (response.sessionExpired) + return opn.redirectHomeExp(); + if (response.goHome) + return opn.redirectHome(); + if (ajax.callback) ajax.callback(response); + }, + error: function (jqXHR, status, errorThrown) { + ajax.status = status; + if (status == "abort") return; + return opn.redirectHome(); + }, + complete: function (jqXHR, textStatus) { + if (!ajax.noWaitIcon) opn.hidePleaseWait(); + ajax.complete = true; + } + }; + if (ajax.formData) { + cfgAjax.processData = false, + cfgAjax.contentType = false; + } + //console.log(ajax.formData); + ajax.request = $.ajax(cfgAjax); +}; + +//------------------------------------------------------------- +// Viewport - Desktop or Mobile. +opn.isMob = function () { return $('body.mob').length > 0; }; +opn.onChangeViewport = function (viewport) { + var $body = $('body'); + $body.removeClass('mob dsk'); + if (viewport.is('xs')) $body.addClass('mob'); + else if (viewport.current() != 'unrecognized') $body.addClass('dsk'); +}; +opn.isAutoHeight = function () { return ($(window).width() < 360 || $(window).height() < 560 || opn.isMob()); } +opn.onWinResizePage = function () { }; +opn.onWinResize = function () { + var winH = $(window).height(); + var $pageBody = $('#opn-body'); + var $hdr = $('#opn-header'); + var $ftr = $('#opn-footer'); + //console.log(winH); + //console.log($hdr.outerHeight(true)); + //console.log($ftr.outerHeight(true)); + if (opn.isAutoHeight()) + $pageBody.height('auto'); + else + $pageBody.innerHeight(Math.min(1200, winH - $hdr.outerHeight() - $ftr.outerHeight(true))); + $ftr.css('visibility', 'visible'); + opn.onWinResizePage(); +}; +opn.objBtm = function (sel) { + var $obj = $(sel); + return Math.floor($obj.offset().top + $obj.outerHeight(true)); +}; +opn.innerBtm = function (sel) { + var $obj = $(sel); + return Math.floor($obj.offset().top + $obj.outerHeight() - opn.bottomSurround($obj)); +}; +opn.innerTop = function (sel) { + var $obj = $(sel); + return Math.floor($obj.offset().top + opn.topSurround($obj)); +}; +opn.topSurround = function (sel) { + var $obj = $(sel); + return parseInt($obj.css('margin-top'), 10) + parseInt($obj.css('border-top-width'), 10) + parseInt($obj.css('padding-top'), 10); +}; +opn.bottomSurround = function (sel) { + var $obj = $(sel); + return parseInt($obj.css('margin-bottom'), 10) + parseInt($obj.css('border-bottom-width'), 10) + parseInt($obj.css('padding-bottom'), 10); +}; +opn.marginHeight = function (sel) { + var $obj = $(sel); + return parseInt($obj.css('margin-top'), 10) + parseInt($obj.css('margin-bottom'), 10); +}; +opn.borderHeight = function (sel) { + var $obj = $(sel); + return parseInt($obj.css('border-top-width'), 10) + parseInt($obj.css('border-bottom-width'), 10); +}; + +//------------------------------------------------------------- +// On page load. +$(function () { + //console.log('Page loaded'); + (function ($, viewport) { + var timerResize = 0; + $(window).bind('resize', function (e) { + viewport.changed(function () { opn.onChangeViewport(viewport); }); + clearTimeout(timerResize); + timerResize = setTimeout(opn.onWinResize, 200); + }).trigger('resize'); + })($, ResponsiveBootstrapToolkit); + $('textarea[maxlength]').keyup(function () { + var limit = parseInt($(this).attr('maxlength'), 10); + var text = $(this).val(); + if (text.length > limit) + $(this).val(text.substr(0, limit)); + }); + // Text selection in element. + jQuery.fn.selectText = function () { + /* + this.find('input').each(function() + { + if($(this).prev().length == 0 || !$(this).prev().hasClass('p_copy')) + $('

').insertBefore($(this)); + $(this).prev().html($(this).val()); + }); + */ + var doc = document; + var element = this[0]; + var range; + if (doc.body.createTextRange) { + range = doc.body.createTextRange(); + range.moveToElementText(element); + range.select(); + } + else if (window.getSelection) { + range = doc.createRange(); + range.selectNodeContents(element); + var sel = window.getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + } + }; +}); +$(window).load(function () { + //console.log('Window loaded'); + $(window).trigger('resize'); +}); + +//------------------------------------------------------------- +// T h e E n d +//------------------------------------------------------------- diff --git a/SaOperationsMgrWeb/wwwroot/js/opn-utilities-utilities.js b/SaOperationsMgrWeb/wwwroot/js/opn-utilities-utilities.js new file mode 100644 index 0000000..0000832 --- /dev/null +++ b/SaOperationsMgrWeb/wwwroot/js/opn-utilities-utilities.js @@ -0,0 +1,62 @@ +/* + Application: Sarand OperationsMgr + Javascript: Utilities + Notes: From a sarand.com original. +*/ + +//------------------------------------------------------------- +opn.refreshUtilityList = function (delay) { + var $panel = $('#opn-panel-utilities-utilities'); + var $data = $('.opn-panel-data', $panel); + var $content = $('.opn-data-content', $data); + $('.opn-data-list', $content).empty(); + $('.opn-data-msg', $data).text(opn.msgDataQuerying).show(); + opn.ajaxUtilityList = opn.ajaxUtilityList || {}; + opn.doAjaxRequest(opn.ajaxUtilityList, '/Utilities/GetUtilityList', 'frmFilter', opn.onRefreshUtilityList, delay || 250); +}; +opn.refreshItemList = opn.refreshUtilityList; +opn.onRefreshUtilityList = function (response) { + var $panel = $('#opn-panel-utilities-utilities'); + var $data = $('.opn-panel-data', $panel); + var $content = $('.opn-data-content', $data); + var $msg = $('.opn-data-msg', $data).empty().hide(); + //console.log(response); + opn.refreshPaging(response.paging, $('.opn-panel-filter .opn-filter-paging', $panel)); + + var $list = $('.opn-data-list', $content); + $list.empty(); + if (response.utilities && response.utilities.length) { + var $tmpl = $('.opn-utility-template .opn-data-item', $data); + for (var utilityIdx = 0; utilityIdx < response.utilities.length; utilityIdx++) { + var $utility = $tmpl.clone(); + var utility = response.utilities[utilityIdx]; + $('.code', $utility).text(utility.code); + $('.size', $utility).text(utility.sizeCode); + if (utility.onInstance) + $('.status', $utility).text("Gate-in: " + utility.gateIn); + else + $('.status', $utility).text("Gate-out: " + utility.gateOut); + $list.append($utility); + if (utilityIdx > 12) break; + } + } + else { + $msg.text(opn.msgDataNoneFound).show(); + } +}; + +//------------------------------------------------------------ +$(function () { + $('#ifFilterUtilityCode,#ifFilterUtilitySize').keypress(function (evt) { + if (evt.key === 'Enter') { + $('#pbFilterRefresh').click(); + evt.preventDefault(); + return false; + } + }); + opn.refreshUtilityList(500); +}); + +/* --------------------------- */ +/* T h e E n d */ +/* --------------------------- */ \ No newline at end of file diff --git a/SaOpnMgrCore/Core/App/OpnDfn.cs b/SaOpnMgrCore/Core/App/OpnDfn.cs index a49f764..c64f947 100644 --- a/SaOpnMgrCore/Core/App/OpnDfn.cs +++ b/SaOpnMgrCore/Core/App/OpnDfn.cs @@ -67,6 +67,7 @@ namespace Sarand.OperationsMgr.Core.App public enum Instance { Unknown = 0, + Test = 10, } //------------------------------------------------------------------- diff --git a/SaOpnMgrCore/Core/App/OpnSystem.cs b/SaOpnMgrCore/Core/App/OpnSystem.cs index 3aca8bc..70c9b55 100644 --- a/SaOpnMgrCore/Core/App/OpnSystem.cs +++ b/SaOpnMgrCore/Core/App/OpnSystem.cs @@ -47,7 +47,7 @@ namespace Sarand.OperationsMgr.Core.App // System code utilities. public static Opn.Instance GetInstanceForCode (String instanceCode) { - return Opn.Instance.Unknown; + return Opn.Instance.Test; } public static String GetInstanceCode (Opn.Instance instance) { diff --git a/SaOpnMgrWinDbas/Win/Dbas/Consoles/OpnSecurityConsole_Dbas.cs b/SaOpnMgrWinDbas/Win/Dbas/Consoles/OpnSecurityConsole_Dbas.cs index 4b6c9c8..7a2a41b 100644 --- a/SaOpnMgrWinDbas/Win/Dbas/Consoles/OpnSecurityConsole_Dbas.cs +++ b/SaOpnMgrWinDbas/Win/Dbas/Consoles/OpnSecurityConsole_Dbas.cs @@ -40,7 +40,6 @@ namespace Sarand.OperationsMgr.App.Consoles // Register Security Rights. public override void RegisterSecurityRights () { - throw new NotImplementedException(); } //---------------------------------------------------------------