diff --git a/Disco.Client/Extensions/EnrolExtensions.cs b/Disco.Client/Extensions/EnrolExtensions.cs index 8063c5ef..946c8517 100644 --- a/Disco.Client/Extensions/EnrolExtensions.cs +++ b/Disco.Client/Extensions/EnrolExtensions.cs @@ -41,6 +41,9 @@ namespace Disco.Client.Extensions if (!string.IsNullOrEmpty(enrolResponse.ErrorMessage)) throw new ClientServiceException("Enrolment", enrolResponse.ErrorMessage); + if (enrolResponse.IsPending) + return; + // Offline Domain Join bool requireReboot = enrolResponse.ApplyOfflineDomainJoin(); diff --git a/Disco.Client/Program.cs b/Disco.Client/Program.cs index ef388e68..1603c2a2 100644 --- a/Disco.Client/Program.cs +++ b/Disco.Client/Program.cs @@ -122,17 +122,40 @@ namespace Disco.Client EnrolResponse response = null; // Build Request - Presentation.UpdateStatus("Enrolling Device", "Building enrolment request and preparing to send data to the server.", true, -1); + Presentation.UpdateStatus("Enrolling Device", "Building enrollment request and preparing to send data to the server.", true, -1); request = new Enrol(); request.Build(); - // Send Request - Presentation.UpdateStatus("Enrolling Device", "Sending the enrolment request to the server.", true, -1); - response = request.Post(Program.IsAuthenticated); + var startTime = DateTimeOffset.Now; + do + { + // Send Request + Presentation.UpdateStatus("Enrolling Device", "Sending the enrollment request to the server.", true, -1); + response = request.Post(Program.IsAuthenticated); - // Process Response - Presentation.UpdateStatus("Enrolling Device", "Processing the enrolment response from the server.", true, -1); - response.Process(); + // Process Response + Presentation.UpdateStatus("Enrolling Device", "Processing the enrollment response from the server.", true, -1); + response.Process(); + + if (response.IsPending) + { + request.PendingSessionId = response.SessionId; + request.PendingAuthorization = response.PendingAuthorization; + + // Session Pending + var totalSeconds = (response.PendingTimeout - startTime).TotalSeconds; + var secondsConsumed = (DateTimeOffset.Now - startTime).TotalSeconds; + var progress = (int)((secondsConsumed / totalSeconds) * 100); + + Presentation.UpdateStatus("Pending Device Enrollment Approval", $"Waiting for enrollment session to be approved.{Environment.NewLine}Reason: {response.PendingReason}", true, progress); + System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10)); + } + else + { + // Session Complete + break; + } + } while (true); // Complete return true; diff --git a/Disco.ClientBootstrapper/FormStatus.cs b/Disco.ClientBootstrapper/FormStatus.cs index 191cbec6..c7bdc964 100644 --- a/Disco.ClientBootstrapper/FormStatus.cs +++ b/Disco.ClientBootstrapper/FormStatus.cs @@ -61,7 +61,7 @@ namespace Disco.ClientBootstrapper this.progressBar.Visible = true; if (Progress.HasValue) { - if (Progress.Value > 0) + if (Progress.Value >= 0) { this.progressBar.Value = Math.Min(Progress.Value, 100); this.progressBar.Style = ProgressBarStyle.Continuous; diff --git a/Disco.Data/Configuration/Modules/BootstrapperConfiguration.cs b/Disco.Data/Configuration/Modules/BootstrapperConfiguration.cs index a74522fd..48633c5f 100644 --- a/Disco.Data/Configuration/Modules/BootstrapperConfiguration.cs +++ b/Disco.Data/Configuration/Modules/BootstrapperConfiguration.cs @@ -1,4 +1,5 @@ using Disco.Data.Repository; +using System; namespace Disco.Data.Configuration.Modules { @@ -6,33 +7,24 @@ namespace Disco.Data.Configuration.Modules { public BootstrapperConfiguration(DiscoDataContext Database) : base(Database) { } - public override string Scope - { - get { return "Bootstrapper"; } - } + public override string Scope { get; } = "Bootstrapper"; public string MacSshUsername { - get - { - return this.Get("root"); - } - set - { - this.Set(value); - } + get => Get("root"); + set => Set(value); } public string MacSshPassword { - get - { - return this.GetDeobsfucated(string.Empty); - } - set - { - this.SetObsfucated(value); - } + get => GetDeobsfucated(string.Empty); + set => SetObsfucated(value); + } + + public TimeSpan PendingTimeout + { + get => TimeSpan.FromSeconds(Get(30 * 60)); // 30 minutes default + set => Set((int)value.TotalSeconds); } } } diff --git a/Disco.Models/ClientServices/Enrol.cs b/Disco.Models/ClientServices/Enrol.cs index f8ef91e9..0067850d 100644 --- a/Disco.Models/ClientServices/Enrol.cs +++ b/Disco.Models/ClientServices/Enrol.cs @@ -25,5 +25,8 @@ namespace Disco.Models.ClientServices public List Certificates { get; set; } public List WirelessProfiles { get; set; } + + public string PendingSessionId { get; set; } + public string PendingAuthorization { get; set; } } } diff --git a/Disco.Models/ClientServices/EnrolResponse.cs b/Disco.Models/ClientServices/EnrolResponse.cs index 11da53f6..070b45e0 100644 --- a/Disco.Models/ClientServices/EnrolResponse.cs +++ b/Disco.Models/ClientServices/EnrolResponse.cs @@ -1,4 +1,5 @@ using Disco.Models.ClientServices.EnrolmentInformation; +using System; namespace Disco.Models.ClientServices { @@ -26,5 +27,10 @@ namespace Disco.Models.ClientServices public bool RequireReboot { get; set; } public string ErrorMessage { get; set; } + + public bool IsPending { get; set; } + public string PendingAuthorization { get; set; } + public string PendingReason { get; set; } + public DateTimeOffset PendingTimeout { get; set; } } } diff --git a/Disco.Models/UI/Config/Enrolment/ConfigEnrolmentIndexModel.cs b/Disco.Models/UI/Config/Enrolment/ConfigEnrolmentIndexModel.cs index 77d442e4..ae35bb4f 100644 --- a/Disco.Models/UI/Config/Enrolment/ConfigEnrolmentIndexModel.cs +++ b/Disco.Models/UI/Config/Enrolment/ConfigEnrolmentIndexModel.cs @@ -1,13 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Disco.Models.UI.Config.Enrolment +namespace Disco.Models.UI.Config.Enrolment { public interface ConfigEnrolmentIndexModel : BaseUIModel { string MacSshUsername { get; set; } + int PendingTimeoutMinutes { get; set; } } } diff --git a/Disco.Models/UI/Job/JobIndexModel.cs b/Disco.Models/UI/Job/JobIndexModel.cs index c6fa1da9..76a88111 100644 --- a/Disco.Models/UI/Job/JobIndexModel.cs +++ b/Disco.Models/UI/Job/JobIndexModel.cs @@ -1,4 +1,6 @@ -using Disco.Models.Services.Jobs.JobLists; +using Disco.Models.ClientServices; +using Disco.Models.Services.Jobs.JobLists; +using System.Collections.Generic; namespace Disco.Models.UI.Job { @@ -6,5 +8,6 @@ namespace Disco.Models.UI.Job { JobTableModel MyJobs { get; set; } JobTableModel StaleJobs { get; set; } + List PendingEnrollments { get; set; } } } diff --git a/Disco.Services/Devices/Enrolment/EnrolmentLog.cs b/Disco.Services/Devices/Enrolment/EnrolmentLog.cs index 2e849c05..8c393311 100644 --- a/Disco.Services/Devices/Enrolment/EnrolmentLog.cs +++ b/Disco.Services/Devices/Enrolment/EnrolmentLog.cs @@ -14,6 +14,10 @@ namespace Disco.Services.Devices.Enrolment SessionProgress, SessionDevice, SessionDeviceInfo, + SessionPending, + SessionPendingApproved, + SessionPendingRejected, + SessionContinuing, SessionFinished = 20, SessionDiagnosticInformation, SessionWarning, @@ -43,7 +47,7 @@ namespace Disco.Services.Devices.Enrolment { get { - return "Device Enrolment"; + return "Device Enrollment"; } } public override int ModuleId @@ -77,6 +81,43 @@ namespace Disco.Services.Devices.Enrolment System.Enum.GetName(EnrolmentType.GetType(), EnrolmentType) }); } + public static void LogSessionPending(string SessionId, string HostId, EnrolmentTypes EnrolmentType, string Reason) + { + Log(EventTypeIds.SessionPending, new object[] + { + SessionId, + HostId, + System.Enum.GetName(EnrolmentType.GetType(), EnrolmentType), + Reason + }); + } + public static void LogSessionPendingApproved(string SessionId, string Username, string Reason) + { + Log(EventTypeIds.SessionPendingApproved, new object[] + { + SessionId, + Username, + Reason + }); + } + public static void LogSessionPendingRejected(string SessionId, string Username, string Reason) + { + Log(EventTypeIds.SessionPendingRejected, new object[] + { + SessionId, + Username, + Reason + }); + } + public static void LogSessionContinuing(string SessionId, string HostId, EnrolmentTypes EnrolmentType) + { + Log(EventTypeIds.SessionContinuing, new object[] + { + SessionId, + HostId, + System.Enum.GetName(EnrolmentType.GetType(), EnrolmentType) + }); + } public static void LogSessionDevice(string SessionId, string DeviceSerialNumber, int? DeviceModelId) { Log(EventTypeIds.SessionDevice, new object[] @@ -298,7 +339,7 @@ namespace Disco.Services.Devices.Enrolment Id = (int)EventTypeIds.SessionStarting, ModuleId = _ModuleId, Name = "Session Starting", - Format = "Starting '{2}' Enrolment for {1} (Session# {0})", + Format = "Starting '{2}' Enrollment for {1} (Session# {0})", Severity = 0, UseLive = true, UsePersist = true, @@ -338,6 +379,50 @@ namespace Disco.Services.Devices.Enrolment UseDisplay = true }, new LogEventType + { + Id = (int)EventTypeIds.SessionPending, + ModuleId = _ModuleId, + Name = "Session Pending", + Format = "Pending '{2}' Enrollment for {1} (Session# {0}; Reason: {3})", + Severity = 0, + UseLive = true, + UsePersist = true, + UseDisplay = true + }, + new LogEventType + { + Id = (int)EventTypeIds.SessionPendingApproved, + ModuleId = _ModuleId, + Name = "Session Pending Approved", + Format = "Pending enrollment approved by {1} (Session# {0}; Reason: {2})", + Severity = 0, + UseLive = true, + UsePersist = true, + UseDisplay = true + }, + new LogEventType + { + Id = (int)EventTypeIds.SessionPendingRejected, + ModuleId = _ModuleId, + Name = "Session Pending Rejected", + Format = "Pending enrollment rejected by {1} (Session# {0}; Reason: {2})", + Severity = 0, + UseLive = true, + UsePersist = true, + UseDisplay = true + }, + new LogEventType + { + Id = (int)EventTypeIds.SessionContinuing, + ModuleId = _ModuleId, + Name = "Session Continuing", + Format = "Continuing '{2}' Enrollment for {1} (Session# {0})", + Severity = 0, + UseLive = true, + UsePersist = true, + UseDisplay = true + }, + new LogEventType { Id = (int)EventTypeIds.SessionFinished, ModuleId = _ModuleId, diff --git a/Disco.Services/Devices/Enrolment/WindowsDeviceEnrolment.cs b/Disco.Services/Devices/Enrolment/WindowsDeviceEnrolment.cs index 608df1de..9489e587 100644 --- a/Disco.Services/Devices/Enrolment/WindowsDeviceEnrolment.cs +++ b/Disco.Services/Devices/Enrolment/WindowsDeviceEnrolment.cs @@ -5,15 +5,64 @@ using Disco.Services.Authorization; using Disco.Services.Interop.ActiveDirectory; using Disco.Services.Users; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography; namespace Disco.Services.Devices.Enrolment { public static class WindowsDeviceEnrolment { + private static readonly ConcurrentDictionary pendingEnrolments = new ConcurrentDictionary(); + + private static void CleanupPendingEnrolments() + { + var now = DateTimeOffset.Now; + var expiredEnrolments = pendingEnrolments + .Where(e => e.Value.PendingTimeout < now) + .Select(kvp => kvp.Key).ToList(); + foreach (var expiredEnrolment in expiredEnrolments) + pendingEnrolments.TryRemove(expiredEnrolment, out _); + } + + public static List GetPendingEnrolments() + { + var now = DateTimeOffset.Now; + return pendingEnrolments.Values + .Where(e => e.PendingTimeout > now && e.IsPending) + .ToList(); + } + + public static void ResolvePendingEnrollment(string sessionId, bool approve, string username, string reason) + { + if (!pendingEnrolments.TryGetValue(sessionId, out var enrolResponse)) + throw new InvalidOperationException("The pending session is invalid or has expired"); + if (enrolResponse.PendingTimeout < DateTimeOffset.Now) + { + pendingEnrolments.TryRemove(sessionId, out _); + throw new InvalidOperationException("The pending session has expired"); + } + if (!enrolResponse.IsPending) + return; + + enrolResponse.IsPending = false; + if (approve) + { + enrolResponse.ErrorMessage = null; + EnrolmentLog.LogSessionPendingApproved(sessionId, username, reason); + } + else + { + enrolResponse.ErrorMessage = $"Enrollment rejected"; + EnrolmentLog.LogSessionPendingRejected(sessionId, username, reason); + } + } + public static EnrolResponse Enrol(DiscoDataContext Database, string Username, Enrol Request) { + CleanupPendingEnrolments(); + ADMachineAccount adMachineAccount = null; EnrolResponse response = new EnrolResponse(); @@ -29,14 +78,49 @@ namespace Disco.Services.Devices.Enrolment return domain.GetAvailableDomainController(RequireWritable: true); }); - string sessionId = Guid.NewGuid().ToString("B"); - response.SessionId = sessionId; - - EnrolmentLog.LogSessionStarting(sessionId, Request.SerialNumber, EnrolmentTypes.Normal); - EnrolmentLog.LogSessionDeviceInfo(sessionId, Request); try { + string sessionId; + bool sessionApproved = false; + if (!string.IsNullOrWhiteSpace(Request.PendingSessionId)) + { + if (!pendingEnrolments.TryGetValue(Request.PendingSessionId, out var pendingResponse)) + throw new EnrolmentSafeException("The pending session is invalid or has expired"); + if (pendingResponse.PendingTimeout < DateTimeOffset.Now) + { + pendingEnrolments.TryRemove(Request.PendingSessionId, out _); + throw new EnrolmentSafeException("The pending session has expired"); + } + if (!string.Equals(pendingResponse.PendingAuthorization, Request.PendingAuthorization, StringComparison.Ordinal)) + throw new EnrolmentSafeException("The pending session authorization is incorrect"); + + sessionId = pendingResponse.SessionId; + response = pendingResponse; + + // still pending? + if (response.IsPending) + return response; + + // session rejected? + if (!string.IsNullOrWhiteSpace(response.ErrorMessage)) + throw new EnrolmentSafeException(response.ErrorMessage); + + // session approved; continue + sessionApproved = true; + + EnrolmentLog.LogSessionContinuing(sessionId, Request.SerialNumber, EnrolmentTypes.Normal); + } + else + { + sessionId = Guid.NewGuid().ToString("B"); + response.SessionId = sessionId; + + EnrolmentLog.LogSessionStarting(sessionId, Request.SerialNumber, EnrolmentTypes.Normal); + } + + EnrolmentLog.LogSessionDeviceInfo(sessionId, Request); + if (Request.SerialNumber.Contains("/") || Request.SerialNumber.Contains(@"\")) throw new EnrolmentSafeException(@"The serial number cannot contain '/' or '\' characters."); @@ -50,46 +134,71 @@ namespace Disco.Services.Devices.Enrolment Device RepoDevice = Database.Devices.Include("AssignedUser").Include("DeviceModel").Include("DeviceProfile").Where(d => d.SerialNumber == Request.SerialNumber).FirstOrDefault(); EnrolmentLog.LogSessionProgress(sessionId, 15, "Discovering User/Device Disco ICT Permissions"); - if (isAuthenticated) + if (!sessionApproved) { - if (!authenticatedToken.Has(Claims.Device.Actions.EnrolDevices)) + try { - if (!authenticatedToken.Has(Claims.ComputerAccount)) - throw new EnrolmentSafeException(string.Format("Connection not correctly authenticated (SN: {0}; Auth User: {1})", Request.SerialNumber, authenticatedToken.User.UserId)); - - if (domain == null) - domain = ActiveDirectory.Context.GetDomainByName(Request.DNSDomainName); - - if (!authenticatedToken.User.UserId.Equals(string.Format(@"{0}\{1}$", domain.NetBiosName, Request.ComputerName), StringComparison.OrdinalIgnoreCase)) - throw new EnrolmentSafeException(string.Format("Connection not correctly authenticated (SN: {0}; Auth User: {1})", Request.SerialNumber, authenticatedToken.User.UserId)); - } - } - else - { - if (RepoDevice == null) - { - throw new EnrolmentSafeException(string.Format("Unknown Device Serial Number (SN: '{0}')", Request.SerialNumber)); - } - if (!RepoDevice.AllowUnauthenticatedEnrol) - { - if (RepoDevice.DeviceProfile.AllowUntrustedReimageJobEnrolment) + if (isAuthenticated) { - if (Database.Jobs.Count(j => j.DeviceSerialNumber == RepoDevice.SerialNumber && j.JobTypeId == JobType.JobTypeIds.SImg && !j.ClosedDate.HasValue) == 0) + if (!authenticatedToken.Has(Claims.Device.Actions.EnrolDevices)) { - throw new EnrolmentSafeException(string.Format("Device has no open 'Software - Reimage' job (SN: '{0}')", Request.SerialNumber)); + if (!authenticatedToken.Has(Claims.ComputerAccount)) + throw new EnrolmentSafeException(string.Format("Connection not correctly authenticated (SN: {0}; Auth User: {1})", Request.SerialNumber, authenticatedToken.User.UserId)); + + if (domain == null) + domain = ActiveDirectory.Context.GetDomainByName(Request.DNSDomainName); + + if (!authenticatedToken.User.UserId.Equals(string.Format(@"{0}\{1}$", domain.NetBiosName, Request.ComputerName), StringComparison.OrdinalIgnoreCase)) + throw new EnrolmentSafeException(string.Format("Connection not correctly authenticated (SN: {0}; Auth User: {1})", Request.SerialNumber, authenticatedToken.User.UserId)); } } else { - throw new EnrolmentSafeException(string.Format("Device isn't allowed an Unauthenticated Enrolment (SN: '{0}')", Request.SerialNumber)); + if (RepoDevice == null) + { + throw new EnrolmentSafeException(string.Format("Unknown Device Serial Number (SN: '{0}')", Request.SerialNumber)); + } + if (!RepoDevice.AllowUnauthenticatedEnrol) + { + if (RepoDevice.DeviceProfile.AllowUntrustedReimageJobEnrolment) + { + if (Database.Jobs.Count(j => j.DeviceSerialNumber == RepoDevice.SerialNumber && j.JobTypeId == JobType.JobTypeIds.SImg && !j.ClosedDate.HasValue) == 0) + { + throw new EnrolmentSafeException(string.Format("Device has no open 'Software - Reimage' job (SN: '{0}')", Request.SerialNumber)); + } + } + else + { + throw new EnrolmentSafeException(string.Format("Device isn't allowed an Unauthenticated Enrolment (SN: '{0}')", Request.SerialNumber)); + } + } } } + catch (EnrolmentSafeException ex) + { + response.IsPending = true; + response.PendingReason = ex.Message; + using (var rng = new RNGCryptoServiceProvider()) + { + var authBytes = new byte[33]; // 264 bits (base64-aligned) + rng.GetBytes(authBytes); + response.PendingAuthorization = Convert.ToBase64String(authBytes); + } + response.PendingTimeout = DateTimeOffset.Now.Add(Database.DiscoConfiguration.Bootstrapper.PendingTimeout); + + EnrolmentLog.LogSessionPending(sessionId, Request.SerialNumber, EnrolmentTypes.Normal, response.PendingReason); + + if (pendingEnrolments.TryAdd(sessionId, response)) + return response; + + throw; + } } if (Request.IsPartOfDomain && !string.IsNullOrWhiteSpace(Request.ComputerName)) { EnrolmentLog.LogSessionProgress(sessionId, 20, "Loading Active Directory Computer Account"); - System.Guid? uuidGuid = null; - System.Guid? macAddressGuid = null; + Guid? uuidGuid = null; + Guid? macAddressGuid = null; if (!string.IsNullOrEmpty(Request.Hardware.UUID)) uuidGuid = ADMachineAccount.NetbootGUIDFromUUID(Request.Hardware.UUID); @@ -382,24 +491,26 @@ namespace Disco.Services.Devices.Enrolment } catch (EnrolmentSafeException ex) { - EnrolmentLog.LogSessionError(sessionId, ex); + EnrolmentLog.LogSessionError(response.SessionId, ex); return new EnrolResponse { - SessionId = sessionId, + SessionId = response.SessionId, ErrorMessage = ex.Message }; } catch (Exception ex2) { - EnrolmentLog.LogSessionError(sessionId, ex2); + EnrolmentLog.LogSessionError(response.SessionId, ex2); throw ex2; } finally { - EnrolmentLog.LogSessionFinished(sessionId); + if (!response.IsPending) + EnrolmentLog.LogSessionFinished(response.SessionId); } return response; } + } } diff --git a/Disco.Web/Areas/API/Controllers/EnrollmentController.cs b/Disco.Web/Areas/API/Controllers/EnrollmentController.cs new file mode 100644 index 00000000..eb2ce129 --- /dev/null +++ b/Disco.Web/Areas/API/Controllers/EnrollmentController.cs @@ -0,0 +1,44 @@ +using Disco.Services.Authorization; +using Disco.Services.Devices.Enrolment; +using Disco.Services.Web; +using System; +using System.Web.Mvc; + +namespace Disco.Web.Areas.API.Controllers +{ + public partial class EnrollmentController : AuthorizedDatabaseController + { + [HttpPost] + [ValidateAntiForgeryToken] + [DiscoAuthorize(Claims.Device.Actions.EnrolDevices)] + public virtual ActionResult ResolveSessionPending(string sessionId, bool approve, string reason) + { + WindowsDeviceEnrolment.ResolvePendingEnrollment(sessionId, approve, CurrentUser.UserId, reason); + + return new HttpStatusCodeResult(200); + } + + [HttpPost] + [DiscoAuthorize(Claims.Config.Enrolment.Configure)] + public virtual ActionResult PendingTimeoutMinutes(int PendingTimeoutMinutes) + { + try + { + if (PendingTimeoutMinutes > 0) + { + Database.DiscoConfiguration.Bootstrapper.PendingTimeout = TimeSpan.FromMinutes(PendingTimeoutMinutes); + Database.SaveChanges(); + return Json("OK", JsonRequestBehavior.AllowGet); + } + else + { + throw new Exception("The pending timeout must be greater than zero"); + } + } + catch (Exception ex) + { + return Json($"Error: {ex.Message}"); + } + } + } +} diff --git a/Disco.Web/Areas/Config/Controllers/EnrolmentController.cs b/Disco.Web/Areas/Config/Controllers/EnrolmentController.cs index e9607d1b..11dba6ab 100644 --- a/Disco.Web/Areas/Config/Controllers/EnrolmentController.cs +++ b/Disco.Web/Areas/Config/Controllers/EnrolmentController.cs @@ -13,7 +13,8 @@ namespace Disco.Web.Areas.Config.Controllers { var m = new Models.Enrolment.IndexModel() { - MacSshUsername = Database.DiscoConfiguration.Bootstrapper.MacSshUsername + MacSshUsername = Database.DiscoConfiguration.Bootstrapper.MacSshUsername, + PendingTimeoutMinutes = (int)Database.DiscoConfiguration.Bootstrapper.PendingTimeout.TotalMinutes, }; // UI Extensions diff --git a/Disco.Web/Areas/Config/Models/Enrolment/IndexModel.cs b/Disco.Web/Areas/Config/Models/Enrolment/IndexModel.cs index db12128c..e70f7b42 100644 --- a/Disco.Web/Areas/Config/Models/Enrolment/IndexModel.cs +++ b/Disco.Web/Areas/Config/Models/Enrolment/IndexModel.cs @@ -1,13 +1,10 @@ using Disco.Models.UI.Config.Enrolment; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; namespace Disco.Web.Areas.Config.Models.Enrolment { public class IndexModel : ConfigEnrolmentIndexModel { public string MacSshUsername { get; set; } + public int PendingTimeoutMinutes { get; set; } } } \ No newline at end of file diff --git a/Disco.Web/Areas/Config/Views/Config/Index.cshtml b/Disco.Web/Areas/Config/Views/Config/Index.cshtml index 67c210bf..48219d5b 100644 --- a/Disco.Web/Areas/Config/Views/Config/Index.cshtml +++ b/Disco.Web/Areas/Config/Views/Config/Index.cshtml @@ -84,9 +84,9 @@ } @if (Authorization.Has(Claims.Config.Enrolment.Show)) { - @Html.ActionLinkClass("Enrolment", MVC.Config.Enrolment.Index(), "config") + @Html.ActionLinkClass("Enrollment", MVC.Config.Enrolment.Index(), "config") } diff --git a/Disco.Web/Areas/Config/Views/Config/Index.generated.cs b/Disco.Web/Areas/Config/Views/Config/Index.generated.cs index 0adefcfe..17960f11 100644 --- a/Disco.Web/Areas/Config/Views/Config/Index.generated.cs +++ b/Disco.Web/Areas/Config/Views/Config/Index.generated.cs @@ -592,14 +592,14 @@ WriteLiteral(">"); #line hidden #line 87 "..\..\Areas\Config\Views\Config\Index.cshtml" - Write(Html.ActionLinkClass("Enrolment", MVC.Config.Enrolment.Index(), "config")); + Write(Html.ActionLinkClass("Enrollment", MVC.Config.Enrolment.Index(), "config")); #line default #line hidden #line 87 "..\..\Areas\Config\Views\Config\Index.cshtml" - + #line default @@ -608,8 +608,8 @@ WriteLiteral(" \r\n Configure Enrolment settings including secure cred" + -"entials.\r\n \r\n"); +WriteLiteral(">\r\n Configure Enrollment settings including secure cre" + +"dentials.\r\n \r\n"); #line 91 "..\..\Areas\Config\Views\Config\Index.cshtml" @@ -961,14 +961,14 @@ WriteLiteral(" class=\"fa fa-cloud-download info\""); WriteLiteral(">\r\n
An updated version of Disco is available
\r\n (Model.UpdateResponse.UrlLink +, Tuple.Create(Tuple.Create("", 8220), Tuple.Create(Model.UpdateResponse.UrlLink #line default #line hidden -, 8218), false) +, 8220), false) ); WriteLiteral(" class=\"button small alert\""); diff --git a/Disco.Web/Areas/Config/Views/Enrolment/Index.cshtml b/Disco.Web/Areas/Config/Views/Enrolment/Index.cshtml index 9acc8c80..81fb26d3 100644 --- a/Disco.Web/Areas/Config/Views/Enrolment/Index.cshtml +++ b/Disco.Web/Areas/Config/Views/Enrolment/Index.cshtml @@ -5,20 +5,98 @@ var canConfig = Authorization.Has(Claims.Config.Enrolment.Configure); var canShowStatus = Authorization.Has(Claims.Config.Enrolment.ShowStatus); - ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Enrolment"); + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Enrollment"); }
-

Apple Mac Secure Enrol

- - + + + + +
Username: + + Pending Timeout: @if (canConfig) + + @if (canConfig) { - @Html.TextBoxFor(model => model.MacSshUsername) - @AjaxHelpers.AjaxSave() - @AjaxHelpers.AjaxLoader() - + } + else + { + @TimeSpan.FromMinutes(Model.PendingTimeoutMinutes) + } +
+ + If a device enrollment is not automatically approved it will remain pending until the timeout is reached. + Pending enrollments can be approved manually from the Enrollment Status page. + +
+
+
+

Apple Mac Secure Enroll

+ + + + - -
+ Username: + + @if (canConfig) + { + @Html.TextBoxFor(model => model.MacSshUsername) + @AjaxHelpers.AjaxSave() + @AjaxHelpers.AjaxLoader() + + } else { if (string.IsNullOrEmpty(Model.MacSshUsername)) { - <None Specified> + <None Specified> } else { - @Model.MacSshUsername + @Model.MacSshUsername } }
Password: + + Password: @if (canConfig) + + @if (canConfig) { - - @AjaxHelpers.AjaxSave() - @AjaxHelpers.AjaxLoader() - + } else { - ******** + ******** }
- Instructions: The above credentials must be - able to connect to the requesting Apple Mac client via SSH. Enter/Script the following command: + + Instructions: The above credentials must be + able to connect to the requesting Apple Mac client via SSH. Enter/Script the following command: + - This url will return a JSON response containing basic information about the enrolment.
- This command makes use of cURL (bundled with OSX). Other methods can also trigger a Mac Secure Enrol, + This url will return a JSON response containing basic information about the enrollment.
+ + This command makes use of cURL (bundled with OSX). Other methods can also trigger a Mac Secure Enroll, such as an anchor (<a>) or <script> - tag embedded on the organisation's intranet. + tag embedded on the organisation's intranet. +
@if (canShowStatus && Authorization.Has(Claims.Config.Logging.Show)) { -

Live Enrolment Logging

+

Live Enrollment Logging

@Html.Partial(MVC.Config.Shared.Views.LogEvents, new Disco.Web.Areas.Config.Models.Shared.LogEventsModel() { IsLive = true, @@ -160,6 +244,6 @@ } @if (canShowStatus) { - @Html.ActionLinkButton("Enrolment Status", MVC.Config.Enrolment.Status()) + @Html.ActionLinkButton("Enrollment Status", MVC.Config.Enrolment.Status()) } diff --git a/Disco.Web/Areas/Config/Views/Enrolment/Index.generated.cs b/Disco.Web/Areas/Config/Views/Enrolment/Index.generated.cs index 762552e3..e2e40087 100644 --- a/Disco.Web/Areas/Config/Views/Enrolment/Index.generated.cs +++ b/Disco.Web/Areas/Config/Views/Enrolment/Index.generated.cs @@ -51,7 +51,7 @@ namespace Disco.Web.Areas.Config.Views.Enrolment var canConfig = Authorization.Has(Claims.Config.Enrolment.Configure); var canShowStatus = Authorization.Has(Claims.Config.Enrolment.ShowStatus); - ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Enrolment"); + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Enrollment"); #line default @@ -62,60 +62,238 @@ WriteLiteral(" class=\"form\""); WriteLiteral(" style=\"width: 530px;\""); -WriteLiteral(">\r\n

Apple Mac Secure Enrol

\r\n \r\n \r\n Username:\r\n \r\n \r\n \r\n
"); +WriteLiteral(">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n + If a device enrollment is not automatically approved it will remain pending until the timeout is reached. + Pending enrollments can be approved manually from the Enrollment Status page. + + + +
\r\n Pending Timeout:\r" + +"\n \r\n"); - #line 16 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 17 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + + + #line default + #line hidden + + #line 17 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" if (canConfig) { - - - #line default - #line hidden - - #line 18 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - Write(Html.TextBoxFor(model => model.MacSshUsername)); - - - #line default - #line hidden - - #line 18 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - - + #line default #line hidden #line 19 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - Write(AjaxHelpers.AjaxSave()); + Write(Html.TextBoxFor(model => model.PendingTimeoutMinutes, new { type = "number", min = "1" })); #line default #line hidden #line 19 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - + + + + #line default + #line hidden + + #line 20 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(AjaxHelpers.AjaxSave()); + + + #line default + #line hidden + + #line 20 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + + + + #line default + #line hidden + + #line 21 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(AjaxHelpers.AjaxLoader()); + + + #line default + #line hidden + + #line 21 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + + + + #line default + #line hidden +WriteLiteral(" minutes (default: 30)\r\n"); + +WriteLiteral(" + $(function () { + var $DOM = $('#PendingTimeoutMinutes'); + var $DOMAjaxSave = $DOM.next('.ajaxSave'); + $DOM + .watermark('Minutes') + .focus(function () { $DOM.select() }) + .keydown(function (e) { + $DOMAjaxSave.show(); + if (e.which == 13) { + $(this).blur(); + } + }).blur(function () { + $DOMAjaxSave.hide(); + }) + .change(function () { + $DOMAjaxSave.hide(); + var $ajaxLoading = $DOMAjaxSave.next('.ajaxLoading').show(); + var data = { PendingTimeoutMinutes: parseInt($DOM.val()) }; + if (data.PendingTimeoutMinutes <= 0) { + alert('Pending Timeout must be greater than zero'); + $ajaxLoading.hide(); + return; + } else { + $.ajax({ + url: '"); + + + #line 48 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(Url.Action(MVC.API.Enrollment.PendingTimeoutMinutes())); + + + #line default + #line hidden +WriteLiteral(@"', + dataType: 'json', + method: 'POST', + data: data, + success: function (d) { + if (d == 'OK') { + $ajaxLoading.hide().next('.ajaxOk').show().delay('fast').fadeOut('slow'); + } else { + $ajaxLoading.hide(); + alert('Unable to update pending timeout: ' + d); + } + }, + error: function (jqXHR, textStatus, errorThrown) { + alert('Unable to update pending timeout: ' + textStatus); + $ajaxLoading.hide(); + } + }); + } + }); + }); + +"); + + + #line 69 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + } + else + { + + + #line default + #line hidden + + #line 72 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(TimeSpan.FromMinutes(Model.PendingTimeoutMinutes)); + + + #line default + #line hidden + + #line 72 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + + } + + + #line default + #line hidden +WriteLiteral("
+ +\r\n

Apple Mac Secure Enroll

\r\n \r\n \r\n <" + +"th>\r\n Username:\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n"); + + + #line 94 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" #line default #line hidden - #line 20 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - Write(AjaxHelpers.AjaxLoader()); + #line 94 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + if (canConfig) + { + + + #line default + #line hidden + + #line 96 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(Html.TextBoxFor(model => model.MacSshUsername)); #line default #line hidden - #line 20 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - + #line 96 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + + + + #line default + #line hidden + + #line 97 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(AjaxHelpers.AjaxSave()); #line default #line hidden -WriteLiteral("
Password:\r\n " + -" "); +WriteLiteral("
\r\n " + +" Password:\r\n \r\n"); - #line 78 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 158 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + + + #line default + #line hidden + + #line 158 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" if (canConfig) { #line default #line hidden -WriteLiteral(" \r\n"); - #line 81 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - + #line 161 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line default #line hidden - #line 81 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - Write(AjaxHelpers.AjaxSave()); + #line 161 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(AjaxHelpers.AjaxSave()); #line default #line hidden - #line 81 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - - + #line 161 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + + #line default #line hidden - #line 82 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - Write(AjaxHelpers.AjaxLoader()); + #line 162 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(AjaxHelpers.AjaxLoader()); #line default #line hidden - #line 82 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - + #line 162 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line default #line hidden -WriteLiteral(" url: '"); - #line 103 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 183 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" Write(Url.Action(MVC.API.Bootstrapper.MacSshPassword())); @@ -315,11 +499,11 @@ WriteLiteral(@"', }); }); }); - + "); - #line 122 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 202 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" } else { @@ -327,14 +511,14 @@ WriteLiteral(@"', #line default #line hidden -WriteLiteral(" "); +WriteLiteral(" "); WriteLiteral("********"); WriteLiteral("\r\n"); - #line 126 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 206 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" } @@ -348,14 +532,16 @@ WriteLiteral(">\r\n Instructions: The above credentials must be\r\n " + -" able to connect to the requesting Apple Mac client via \r\n Instructions: The above credentials must " + +"be\r\n able to connect to the requesting Apple Mac client via <" + +"a"); WriteLiteral(" target=\"_blank\""); WriteLiteral(" href=\"http://en.wikipedia.org/wiki/Secure_Shell\""); -WriteLiteral(">SSH. Enter/Script the following command:\r\n SSH. Enter/Script the following command:\r\n \r\n " + +" JSON response containing basic information about the enrolment.
" + -"\r\n JSON response containing basic information about the enrollment.
\r\n This command makes use of \r\n This command makes use of cURL (bundled with OSX). Other methods can also trigger a Mac Secure Enrol,\r" + -"\n such as an anchor (cURL (bundled with OSX). Other methods can also trigger a Mac Secure Enroll," + +"\r\n such as an anchor (<a>) or <script>\r\n tag embedded on the organisation\'s in" + -"tranet.\r\n
\r\n\r\n"); +"tranet.\r\n \r\n
" + +"\r\n\r\n"); - #line 144 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 228 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" if (canShowStatus && Authorization.Has(Claims.Config.Logging.Show)) { #line default #line hidden -WriteLiteral("

Live Enrolment Logging

\r\n"); +WriteLiteral("

Live Enrollment Logging

\r\n"); - #line 147 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 231 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" #line default #line hidden - #line 147 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 231 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" Write(Html.Partial(MVC.Config.Shared.Views.LogEvents, new Disco.Web.Areas.Config.Models.Shared.LogEventsModel() { IsLive = true, @@ -430,7 +617,7 @@ Write(Html.Partial(MVC.Config.Shared.Views.LogEvents, new Disco.Web.Areas.Config #line default #line hidden - #line 154 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 238 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" } @@ -444,13 +631,13 @@ WriteLiteral(" class=\"actionBar\""); WriteLiteral(">\r\n"); - #line 157 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 241 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" #line default #line hidden - #line 157 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 241 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" if (Authorization.Has(Claims.Config.Enrolment.DownloadBootstrapper)) { @@ -458,14 +645,14 @@ WriteLiteral(">\r\n"); #line default #line hidden - #line 159 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 243 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" Write(Html.ActionLinkButton("Download Bootstrapper", MVC.Services.Client.Bootstrapper())); #line default #line hidden - #line 159 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 243 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" } @@ -475,7 +662,7 @@ WriteLiteral(">\r\n"); WriteLiteral(" "); - #line 161 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + #line 245 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" if (canShowStatus) { @@ -483,15 +670,15 @@ WriteLiteral(" "); #line default #line hidden - #line 163 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - Write(Html.ActionLinkButton("Enrolment Status", MVC.Config.Enrolment.Status())); + #line 247 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + Write(Html.ActionLinkButton("Enrollment Status", MVC.Config.Enrolment.Status())); #line default #line hidden - #line 163 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" - + #line 247 "..\..\Areas\Config\Views\Enrolment\Index.cshtml" + } diff --git a/Disco.Web/Areas/Config/Views/Enrolment/Status.cshtml b/Disco.Web/Areas/Config/Views/Enrolment/Status.cshtml index 2790e485..07ca42a3 100644 --- a/Disco.Web/Areas/Config/Views/Enrolment/Status.cshtml +++ b/Disco.Web/Areas/Config/Views/Enrolment/Status.cshtml @@ -1,27 +1,47 @@ @{ Authorization.Require(Claims.Config.Enrolment.ShowStatus); - ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Enrolment", MVC.Config.Enrolment.Index(), "Status"); + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Enrollment", MVC.Config.Enrolment.Index(), "Status"); Html.BundleDeferred("~/ClientScripts/Modules/Knockout"); Html.BundleDeferred("~/ClientScripts/Modules/jQuery-SignalR"); Html.BundleDeferred("~/ClientScripts/Modules/jQuery-Isotope"); }
-

No enrolment sessions today

+

No enrollment sessions today

+
+

+

+
+
+ @using (Html.BeginForm(MVC.API.Enrollment.ResolveSessionPending(), FormMethod.Post)) + { + @Html.AntiForgeryToken(); + +
+ +
+
+ + +
+ } +
+

@@ -48,11 +68,6 @@
-
-

-

-
-
@@ -134,7 +149,9 @@ function sessionViewModel(id) { var self = this; + self.id = id; self.title = ko.observable(id); + self.isPending = ko.observable(false); self.messages = ko.observableArray(); self.console = ko.observableArray(); self.serialNumber = ko.observable(); @@ -187,7 +204,7 @@ self.select = function (e, d) { vm.currentSession(self); hostDialogSessions.dialog('open'); - hostDialogSessions.dialog('option', 'title', 'Device Enrolment: ' + self.title()); + hostDialogSessions.dialog('option', 'title', 'Device Enrollment: ' + self.title()); } } @@ -228,15 +245,38 @@ if (log.Arguments.length >= 10 && log.Arguments[9]) session.deviceModelId(log.Arguments[9]); break; + case 14: // SessionPending + session.isPending(true); + session.messages.unshift(log); + session.progressValue(-1); + session.progressStatus('Pending enrollment approval'); + break; + case 15: // SessionPendingApproved + session.isPending(false); + session.messages.unshift(log); + session.progressValue(-1); + session.progressStatus('Enrollment approval, waiting for client'); + break; + case 16: // SessionPendingRejected + session.isPending(false); + session.messages.unshift(log); + session.progressValue(-1); + session.progressStatus('Enrollment rejected, waiting for client'); + break; + case 17: // SessionContinuing + session.isPending(false); + session.messages.unshift(log); + break; case 20: // SessionFinished session.sessionEnded(true); + session.isPending(false); if (session.hasError()) - session.progressStatus('Enrolment Finished with an Error'); + session.progressStatus('Enrollment Finished with an Error'); else if (session.hasWarning()) - session.progressStatus('Enrolment Finished with a Warning'); + session.progressStatus('Enrollment Finished with a Warning'); else - session.progressStatus('Enrolment Finished Successfully'); + session.progressStatus('Enrollment Finished Successfully'); session.messages.unshift(log); break; case 21: // SessionDiagnosticInformation @@ -357,6 +397,20 @@ } } } + $('#dialogSession').on('click', '#formResolveSessionPending button', function (e) { + const $button = $(this); + const $form = $button.closest('form'); + const body = new FormData($form[0]); + body.append('approve', $button.val()); + fetch($form.attr('action'), { + method: 'POST', + body: body + }).then(function (response) { + if (!response.ok) { + alert('Failed to resolve pending session: ' + response.statusText); + } + }); + }); init(); }); diff --git a/Disco.Web/Areas/Config/Views/Enrolment/Status.generated.cs b/Disco.Web/Areas/Config/Views/Enrolment/Status.generated.cs index 112eec78..ccb42349 100644 --- a/Disco.Web/Areas/Config/Views/Enrolment/Status.generated.cs +++ b/Disco.Web/Areas/Config/Views/Enrolment/Status.generated.cs @@ -48,7 +48,7 @@ namespace Disco.Web.Areas.Config.Views.Enrolment Authorization.Require(Claims.Config.Enrolment.ShowStatus); - ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Enrolment", MVC.Config.Enrolment.Index(), "Status"); + ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Enrollment", MVC.Config.Enrolment.Index(), "Status"); Html.BundleDeferred("~/ClientScripts/Modules/Knockout"); Html.BundleDeferred("~/ClientScripts/Modules/jQuery-SignalR"); Html.BundleDeferred("~/ClientScripts/Modules/jQuery-Isotope"); @@ -66,7 +66,7 @@ WriteLiteral(" id=\"noSessions\""); WriteLiteral(" data-bind=\"visible: noSessions\""); -WriteLiteral(">\r\n

No enrolment sessions today

\r\n \r\n \r\n

No enrollment sessions today

\r\n \r\n \r\n \r\n \r\n \r\n \r\n

\r\n = 0, progressValue: progre" + +"ssValue\""); WriteLiteral(" class=\"sessionProgress\""); @@ -117,6 +124,116 @@ WriteLiteral(" data-bind=\"with: currentSession\""); WriteLiteral(">\r\n \r\n

\r\n

\r\n = 0, progressValue: progre" + +"ssValue\""); + +WriteLiteral(">\r\n \r\n"); + + + #line 31 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + + + #line default + #line hidden + + #line 31 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + using (Html.BeginForm(MVC.API.Enrollment.ResolveSessionPending(), FormMethod.Post)) + { + + + #line default + #line hidden + + #line 33 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + Write(Html.AntiForgeryToken()); + + + #line default + #line hidden + + #line 33 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + ; + + + #line default + #line hidden +WriteLiteral(" \r\n"); + +WriteLiteral(" \r\n \r\n \r\n"); + +WriteLiteral(" \r\n Approve\r\n Reject\r\n \r\n"); + + + #line 42 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n

\r\n

\r\n
\r\n
\r\n \r\n var deviceBaseUrl = '"); - #line 107 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + #line 122 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" Write(Url.Action(MVC.Device.Show())); @@ -318,7 +415,7 @@ WriteLiteral(@"> WriteLiteral("/\'\r\n var deviceModelImageUrl = \'"); - #line 108 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + #line 123 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" Write(Url.Action(MVC.API.DeviceModel.Image())); @@ -327,7 +424,7 @@ WriteLiteral("/\'\r\n var deviceModelImageUrl = \'"); WriteLiteral("/\'\r\n var iconWarningUrl = \'url("); - #line 109 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + #line 124 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" Write(Links.ClientSource.Style.Images.Status.warning32_png); @@ -336,7 +433,7 @@ WriteLiteral("/\'\r\n var iconWarningUrl = \'url("); WriteLiteral(")\';\r\n var iconErrorUrl = \'url("); - #line 110 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + #line 125 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" Write(Links.ClientSource.Style.Images.Status.fail32_png); @@ -352,39 +449,40 @@ WriteLiteral(")\';\r\n\r\n function pageViewModel() {\r\n var "nction (e, d) {\r\n if (self.isotopeInited) {\r\n " + "hostSessions.isotope(\'reloadItems\').isotope({ sortBy: \'original-order\' });\r\n " + " }\r\n };\r\n }\r\n function sessionViewModel(id) " + -"{\r\n var self = this;\r\n\r\n self.title = ko.observable(id);\r\n" + -" self.messages = ko.observableArray();\r\n self.console = ko" + -".observableArray();\r\n self.serialNumber = ko.observable();\r\n " + -" self.sessionDeviceInfo = ko.observable();\r\n self.progressStatus = " + -"ko.observable();\r\n self.progressValue = ko.observable();\r\n " + -" self.startTime = ko.observable();\r\n self.sessionEnded = ko.observabl" + -"e(false);\r\n self.progressbar = null;\r\n self.hasError = ko." + -"observable(false);\r\n self.hasWarning = ko.observable(false);\r\n " + -" self.deviceModelId = ko.observable();\r\n self.deviceModelDescript" + -"ion = ko.computed(function () {\r\n var deviceModelId = self.device" + -"ModelId();\r\n var sessionDeviceInfo = self.sessionDeviceInfo();\r\n " + -" if (deviceModelId) {\r\n var dm = deviceModels[d" + -"eviceModelId];\r\n if (dm) {\r\n if (dm.De" + -"scription)\r\n return dm.Description;\r\n " + -" else\r\n return dm.Manufacturer + \' \' + dm.Mode" + -"l;\r\n }\r\n }\r\n if (sessionDeviceI" + -"nfo) {\r\n return sessionDeviceInfo.Arguments[6] + \' \' + sessio" + -"nDeviceInfo.Arguments[7];\r\n }\r\n });\r\n self." + -"deviceUrl = ko.computed(function () {\r\n var serialNumber = self.s" + -"erialNumber();\r\n if (serialNumber)\r\n return de" + -"viceBaseUrl + serialNumber;\r\n else\r\n return nu" + -"ll;\r\n });\r\n self.deviceModelImageUrl = ko.computed(functio" + -"n () {\r\n var deviceModelImage;\r\n if (self.deviceMo" + -"delId())\r\n deviceModelImage = \'url(\' + deviceModelImageUrl + " + -"self.deviceModelId() + \')\';\r\n else\r\n deviceMod" + -"elImage = \'url(\' + deviceModelImageUrl + \')\';\r\n if (self.hasError" + -"())\r\n return iconErrorUrl + \', \' + deviceModelImage;\r\n " + -" else\r\n if (self.hasWarning())\r\n " + -" return iconWarningUrl + \', \' + deviceModelImage;\r\n else\r\n " + -" return \'none, \' + deviceModelImage;\r\n });\r\n " + -" self.select = function (e, d) {\r\n vm.currentSession(self" + -");\r\n hostDialogSessions.dialog(\'open\');\r\n hostDial" + -"ogSessions.dialog(\'option\', \'title\', \'Device Enrolment: \' + self.title());\r\n " + +"{\r\n var self = this;\r\n\r\n self.id = id;\r\n self.t" + +"itle = ko.observable(id);\r\n self.isPending = ko.observable(false);\r\n " + +" self.messages = ko.observableArray();\r\n self.console = ko." + +"observableArray();\r\n self.serialNumber = ko.observable();\r\n " + +" self.sessionDeviceInfo = ko.observable();\r\n self.progressStatus = k" + +"o.observable();\r\n self.progressValue = ko.observable();\r\n " + +"self.startTime = ko.observable();\r\n self.sessionEnded = ko.observable" + +"(false);\r\n self.progressbar = null;\r\n self.hasError = ko.o" + +"bservable(false);\r\n self.hasWarning = ko.observable(false);\r\n " + +" self.deviceModelId = ko.observable();\r\n self.deviceModelDescripti" + +"on = ko.computed(function () {\r\n var deviceModelId = self.deviceM" + +"odelId();\r\n var sessionDeviceInfo = self.sessionDeviceInfo();\r\n " + +" if (deviceModelId) {\r\n var dm = deviceModels[de" + +"viceModelId];\r\n if (dm) {\r\n if (dm.Des" + +"cription)\r\n return dm.Description;\r\n " + +" else\r\n return dm.Manufacturer + \' \' + dm.Model" + +";\r\n }\r\n }\r\n if (sessionDeviceIn" + +"fo) {\r\n return sessionDeviceInfo.Arguments[6] + \' \' + session" + +"DeviceInfo.Arguments[7];\r\n }\r\n });\r\n self.d" + +"eviceUrl = ko.computed(function () {\r\n var serialNumber = self.se" + +"rialNumber();\r\n if (serialNumber)\r\n return dev" + +"iceBaseUrl + serialNumber;\r\n else\r\n return nul" + +"l;\r\n });\r\n self.deviceModelImageUrl = ko.computed(function" + +" () {\r\n var deviceModelImage;\r\n if (self.deviceMod" + +"elId())\r\n deviceModelImage = \'url(\' + deviceModelImageUrl + s" + +"elf.deviceModelId() + \')\';\r\n else\r\n deviceMode" + +"lImage = \'url(\' + deviceModelImageUrl + \')\';\r\n if (self.hasError(" + +"))\r\n return iconErrorUrl + \', \' + deviceModelImage;\r\n " + +" else\r\n if (self.hasWarning())\r\n " + +" return iconWarningUrl + \', \' + deviceModelImage;\r\n else\r\n " + +" return \'none, \' + deviceModelImage;\r\n });\r\n " + +" self.select = function (e, d) {\r\n vm.currentSession(self)" + +";\r\n hostDialogSessions.dialog(\'open\');\r\n hostDialo" + +"gSessions.dialog(\'option\', \'title\', \'Device Enrollment: \' + self.title());\r\n " + " }\r\n }\r\n\r\n function parseLog(log) {\r\n if (log.Mo" + "duleId === 50 && log.Arguments && log.Arguments.length > 0) {\r\n /" + "/ find session\r\n var sessionId = log.Arguments[0];\r\n " + @@ -413,33 +511,50 @@ WriteLiteral(")\';\r\n\r\n function pageViewModel() {\r\n var "ion.sessionDeviceInfo(log);\r\n if (log.Arguments.lengt" + "h >= 10 && log.Arguments[9])\r\n session.deviceMode" + "lId(log.Arguments[9]);\r\n break;\r\n " + -" case 20: // SessionFinished\r\n session.sessionEnde" + -"d(true);\r\n if (session.hasError())\r\n " + -" session.progressStatus(\'Enrolment Finished with an Error\');\r\n " + -" else\r\n if (session.hasWar" + -"ning())\r\n session.progressStatus(\'Enrolment F" + -"inished with a Warning\');\r\n else\r\n " + -" session.progressStatus(\'Enrolment Finished Successfully\');\r" + -"\n session.messages.unshift(log);\r\n " + -" break;\r\n case 21: // SessionDiagnosticInformatio" + -"n\r\n session.console.push(log);\r\n " + -" break;\r\n case 22: // SessionWarning\r\n " + -" session.hasWarning(true);\r\n session.me" + -"ssages.unshift(log);\r\n break;\r\n " + -" case 23: // SessionError\r\n case 24: // SessionErrorWith" + -"Inner\r\n case 25: // SessionClientError\r\n " + -" session.hasError(true);\r\n session.messages" + -".unshift(log);\r\n break;\r\n defa" + -"ult:\r\n session.messages.unshift(log);\r\n " + -" }\r\n }\r\n }\r\n }\r\n function init() {\r" + -"\n hostDialogSessions.dialog({\r\n modal: true,\r\n " + -" height: 574,\r\n width: 900,\r\n resizable: fa" + -"lse,\r\n autoOpen: false\r\n });\r\n //hostDialog" + -"SessionsProgress.progressbar();\r\n\r\n // Create View Model\r\n " + -" vm = new pageViewModel();\r\n $.ajax({\r\n url: \'"); +" case 14: // SessionPending\r\n session.isPending(tr" + +"ue);\r\n session.messages.unshift(log);\r\n " + +" session.progressValue(-1);\r\n session.pr" + +"ogressStatus(\'Pending enrollment approval\');\r\n break;" + +"\r\n case 15: // SessionPendingApproved\r\n " + +" session.isPending(false);\r\n session.message" + +"s.unshift(log);\r\n session.progressValue(-1);\r\n " + +" session.progressStatus(\'Enrollment approval, waiting for cl" + +"ient\');\r\n break;\r\n case 16: //" + +" SessionPendingRejected\r\n session.isPending(false);\r\n" + +" session.messages.unshift(log);\r\n " + +" session.progressValue(-1);\r\n session.progress" + +"Status(\'Enrollment rejected, waiting for client\');\r\n " + +"break;\r\n case 17: // SessionContinuing\r\n " + +" session.isPending(false);\r\n session.messag" + +"es.unshift(log);\r\n break;\r\n ca" + +"se 20: // SessionFinished\r\n session.sessionEnded(true" + +");\r\n session.isPending(false);\r\n " + +" if (session.hasError())\r\n session.progress" + +"Status(\'Enrollment Finished with an Error\');\r\n else\r\n" + +" if (session.hasWarning())\r\n " + +" session.progressStatus(\'Enrollment Finished with a Warning\');\r\n " + +" else\r\n session." + +"progressStatus(\'Enrollment Finished Successfully\');\r\n " + +" session.messages.unshift(log);\r\n break;\r\n " + +" case 21: // SessionDiagnosticInformation\r\n " + +" session.console.push(log);\r\n break;\r\n " + +" case 22: // SessionWarning\r\n session.hasWa" + +"rning(true);\r\n session.messages.unshift(log);\r\n " + +" break;\r\n case 23: // SessionError\r\n" + +" case 24: // SessionErrorWithInner\r\n " + +" case 25: // SessionClientError\r\n session.hasError(" + +"true);\r\n session.messages.unshift(log);\r\n " + +" break;\r\n default:\r\n " + +" session.messages.unshift(log);\r\n }\r\n }\r\n" + +" }\r\n }\r\n function init() {\r\n hostDialogSessi" + +"ons.dialog({\r\n modal: true,\r\n height: 574,\r\n " + +" width: 900,\r\n resizable: false,\r\n autoOp" + +"en: false\r\n });\r\n //hostDialogSessionsProgress.progressbar" + +"();\r\n\r\n // Create View Model\r\n vm = new pageViewModel();\r\n" + +" $.ajax({\r\n url: \'"); - #line 274 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + #line 314 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" Write(Url.Action(MVC.API.DeviceModel.Index())); @@ -473,7 +588,7 @@ WriteLiteral(@"', url: '"); - #line 299 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + #line 339 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" Write(Url.Action(MVC.API.Logging.RetrieveEvents())); @@ -512,7 +627,7 @@ WriteLiteral(@"', $.connection.hub.qs = { LogModules: '"); - #line 329 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" + #line 369 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" Write(Disco.Services.Devices.Enrolment.EnrolmentLog.Current.LiveLogGroupName); @@ -537,7 +652,15 @@ WriteLiteral("\' };\r\n $.connection.hub.error(onHubFailed);\r\n\r\n " \'Close\': function () {\r\n " + " $(this).dialog(\'destroy\');\r\n }\r\n " + " }\r\n });\r\n }\r\n }" + -"\r\n }\r\n init();\r\n });\r\n\r\n"); +"\r\n }\r\n $(\'#dialogSession\').on(\'click\', \'#formResolveSessionPending" + +" button\', function (e) {\r\n const $button = $(this);\r\n cons" + +"t $form = $button.closest(\'form\');\r\n const body = new FormData($form[" + +"0]);\r\n body.append(\'approve\', $button.val());\r\n fetch($for" + +"m.attr(\'action\'), {\r\n method: \'POST\',\r\n body: body" + +"\r\n }).then(function (response) {\r\n if (!response.ok) {" + +"\r\n alert(\'Failed to resolve pending session: \' + response.sta" + +"tusText);\r\n }\r\n });\r\n });\r\n init();\r\n " + +" });\r\n\r\n"); } } diff --git a/Disco.Web/ClientSource/Style/Config.css b/Disco.Web/ClientSource/Style/Config.css index 84605015..6bf8edc5 100644 --- a/Disco.Web/ClientSource/Style/Config.css +++ b/Disco.Web/ClientSource/Style/Config.css @@ -473,6 +473,10 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.message { #enrolStatus #sessions .session > h3 span.details { font-size: 0.8em; } +#enrolStatus #sessions .session > h3 i { + float: right; + color: #F0A30A; +} #enrolStatus #sessions .session > p.sessionStart { color: #888; font-size: 0.8em; @@ -489,7 +493,6 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.message { background-color: #DFE1F8; } #dialogSession .sessionHeader { - width: 400px; float: left; padding: 0 0 0 134px; background-repeat: no-repeat, no-repeat; @@ -516,7 +519,8 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.message { } #dialogSession .sessionProgress { width: 320px; - float: right; + position: absolute; + right: 1em; text-align: right; } #dialogSession .sessionProgress > p.sessionStart { @@ -528,6 +532,9 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.message { overflow: hidden; margin-bottom: 3px; } +#dialogSession .sessionProgress div.reason { + margin-bottom: 3px; +} #dialogSession .sessionInfoContainer > div { float: left; width: 428px; diff --git a/Disco.Web/ClientSource/Style/Config.less b/Disco.Web/ClientSource/Style/Config.less index c6099643..e4b0f320 100644 --- a/Disco.Web/ClientSource/Style/Config.less +++ b/Disco.Web/ClientSource/Style/Config.less @@ -479,6 +479,11 @@ div.logEventsViewport { span.details { font-size: .8em; } + + i { + float: right; + color: @ThemeAmber; + } } & > p.sessionStart { @@ -504,7 +509,6 @@ div.logEventsViewport { #dialogSession { .sessionHeader { - width: 400px; float: left; padding: 0 0 0 134px; background-repeat: no-repeat, no-repeat; @@ -535,7 +539,8 @@ div.logEventsViewport { .sessionProgress { width: 320px; - float: right; + position: absolute; + right: 1em; text-align: right; & > p.sessionStart { @@ -548,6 +553,10 @@ div.logEventsViewport { overflow: hidden; margin-bottom: 3px; } + + & div.reason { + margin-bottom: 3px; + } } .sessionInfoContainer { diff --git a/Disco.Web/ClientSource/Style/Config.min.css b/Disco.Web/ClientSource/Style/Config.min.css index a34cd212..43aa8116 100644 --- a/Disco.Web/ClientSource/Style/Config.min.css +++ b/Disco.Web/ClientSource/Style/Config.min.css @@ -1 +1 @@ -.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer a.button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatree-node.property span.dynatree-icon{background-position-x:-48px;}table.expressionsTable{border:solid 1px #f4f4f4;border-collapse:collapse;}table.expressionsTable>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}table.expressionsTable>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}table.expressionsTable>thead>tr>th,table.expressionsTable>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}table.expressionsTable>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}table.expressionsTable>tfoot>tr>th,table.expressionsTable>tfoot>tr>td{background-color:#f4f4f4;}table.expressionsTable td.parseError{background-color:#ffd8d8;}#AttachmentType_FilterExpression{width:375px;}#deviceComponents{border:solid 1px #f4f4f4;border-collapse:collapse;}#deviceComponents>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}#deviceComponents>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}#deviceComponents>thead>tr>th,#deviceComponents>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}#deviceComponents>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}#deviceComponents>tfoot>tr>th,#deviceComponents>tfoot>tr>td{background-color:#f4f4f4;}#deviceComponents tr th.actions{width:20px;}#deviceComponents tr input.description{width:300px;}#deviceComponents tr input.cost{width:75px;}#deviceComponents tr i.remove{font-size:1.6em;color:#e51400;cursor:pointer;opacity:.8;}#deviceComponents tr i.remove:hover{opacity:1;}#deviceComponents tr i.fa-list-alt{color:#1e6dab;font-size:1.6em;cursor:pointer;}#deviceComponents tr i.fa-asterisk{color:#fa6800;font-size:1em;left:10px;top:3px;cursor:pointer;}#deviceComponents tr input.updating{background-position:right center;background-repeat:no-repeat;background-image:url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA);}#organisationAddresses{font-size:.9em;}#organisationAddresses tr:not(:last-child){border-bottom:1px dashed #aaa;}#organisationAddresses th{padding:2px;font-weight:600;width:200px;}#organisationAddresses td{padding:2px;vertical-align:middle;}#organisationAddresses tr:nth-child(even){background-color:#fff;}#organisationAddresses i.fa{font-size:1.7em;cursor:pointer;}#organisationAddresses i.fa.delete{color:#e51400;opacity:.8;}#organisationAddresses i.fa.delete:hover{opacity:1;}#organisationAddresses i.fa.edit{color:#1e6dab;}ul#loggingEntries{overflow:auto;max-height:230px;padding-left:20px;}table.deviceProfileTable th.name{width:300px;}table.deviceProfileTable th.type{width:120px;}table.deviceProfileTable th.deviceCount{width:120px;}#configurationDeviceProfileShow #displayComputerNameTemplate{margin:0 0 6px 0;}#configurationDeviceProfileShow #displayOrganisationalUnit{margin:0 0 6px 0;}#dialogComputerNameTemplate #ComputerNameTemplate{box-sizing:border-box;height:48px;width:100%;font-family:Consolas,"Courier New",monospace;}#dialogOrganisationalUnit .enforceOrganisationalUnit{line-height:2.2em;}#dialogOrganisationalUnit .organisationalUnitTree{height:380px;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node{padding:1px;border:0;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node>span.fancytree-icon{background:none;display:inline-block;font-family:FontAwesome;font-size:1.2em;width:14px;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-ico-ef>span.fancytree-icon:before{color:#1e6dab;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-ico-cf>span.fancytree-icon:before{color:#1e6dab;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree ul.fancytree-container>li>span>span.fancytree-icon:before{color:#fa6800;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node.fancytree-selected{font-style:normal;background:none;}#Config_System_AD_SearchScope_Dialog_Loading,#dialogOrganisationalUnit_Loading{text-align:center;padding:40px 0;}#configurationDocumentTemplateExpressionBrowser{padding-right:275px;background-image:url(data:image/png;base64,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);background-position:right top;background-repeat:no-repeat;}#Logging_Task_Status{width:520px;margin:40px auto 60px auto;}#Logging_Task_Status th.process{text-align:left;font-weight:600;background-color:#f4f4f4;min-height:30px;vertical-align:middle;}#Logging_Task_Status td.description{font-size:.9em;min-height:60px;}#Logging_Task_Status td.progress{padding:8px 10px;}#Logging_Task_Status td.finishedMessage i{display:none;}#Logging_Task_Status td.finishedRedirect{position:relative;}#Logging_Task_Status td.finishedRedirect i{color:#1e6dab;position:absolute;right:10px;top:calc(57% - .5em);display:inline-block;}#Logging_Task_Status td.exception{background-color:#ffd8d8;}div.logEventsViewport{border:1px solid #bbb;-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}div.logEventsViewport div.logEventsViewportContainer{overflow-y:auto;overflow-x:hidden;}div.logEventsViewport div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}div.logEventsViewport table.logEventsViewport{padding:0;margin:0;background-color:#bbb;table-layout:fixed;}div.logEventsViewport table.logEventsViewport>thead>tr{background-color:#eee;}div.logEventsViewport table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}div.logEventsViewport table.logEventsViewport>thead>tr>th.icon{width:20px;}div.logEventsViewport table.logEventsViewport>thead>tr>th.timestamp{width:155px;}div.logEventsViewport table.logEventsViewport>thead>tr>th.eventType{width:180px;}div.logEventsViewport table.logEventsViewport>tbody>tr{background-color:#fff;}div.logEventsViewport table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}div.logEventsViewport table.logEventsViewport>tbody>tr>td{padding:2px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.eventType{width:180px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.message{white-space:pre-wrap;}#enrolStatus #sessions .session{width:280px;padding:4px 4px 4px 72px;margin:8px;border:5px solid #efefef;-moz-border-radius:0 20px 0 0;-webkit-border-radius:0 20px 0 0;border-radius:0 20px 0 0;background-color:#f5f5f5;background-repeat:no-repeat,no-repeat;background-position:36px 36px,4px 4px;-moz-background-size:32px,64px;-o-background-size:32px,64px;-webkit-background-size:32px,64px;background-size:32px,64px;min-height:72px;cursor:pointer;}#enrolStatus #sessions .session>h3{padding-bottom:3px;border-bottom:1px dashed #ccc;}#enrolStatus #sessions .session>h3 span.details{font-size:.8em;}#enrolStatus #sessions .session>p.sessionStart{color:#888;font-size:.8em;margin-bottom:2px;}#enrolStatus #sessions .session>p.sessionStatus{font-size:.9em;height:1.6em;overflow:hidden;margin-bottom:3px;}#enrolStatus #sessions .session:hover{border:5px solid #6c7a87;background-color:#dfe1f8;}#dialogSession .sessionHeader{width:400px;float:left;padding:0 0 0 134px;background-repeat:no-repeat,no-repeat;background-position:96px 96px,0 0;-moz-background-size:32px,128px;-o-background-size:32px,128px;-webkit-background-size:32px,128px;background-size:32px,128px;min-height:134px;}#dialogSession .sessionHeader>h2{padding-bottom:0;}#dialogSession .sessionHeader>table{margin-top:4px;}#dialogSession .sessionHeader>table th{width:128px;text-align:right;}#dialogSession .sessionHeader>table td,#dialogSession .sessionHeader>table th{padding:1px 2px;}#dialogSession .sessionProgress{width:320px;float:right;text-align:right;}#dialogSession .sessionProgress>p.sessionStart{color:#888;margin-bottom:2px;}#dialogSession .sessionProgress>p.sessionStatus{height:1.6em;overflow:hidden;margin-bottom:3px;}#dialogSession .sessionInfoContainer>div{float:left;width:428px;overflow:auto;}#dialogSession .sessionInfoContainer .sessionInfoMessages{height:374px;border:1px solid #bbb;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages div.logEventsViewportContainer{overflow:auto;}#dialogSession .sessionInfoContainer .sessionInfoMessages div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport{padding:0;margin:0;background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr{background-color:#eee;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.icon{width:20px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.timestamp{width:155px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.eventType{width:180px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr{background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td{padding:2px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.eventType{width:180px;}#dialogSession .sessionInfoContainer .sessionInfoConsole{margin-left:6px;background-color:#222;color:#0f0;font-family:Consolas,"Courier New",monospace;border:4px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;padding:2px;height:364px;}#Config_DocumentTemplates_Show>div.form>table>tbody>tr>th{width:140px;}#Config_DocumentTemplates_Show #DocumentTemplate_FilterExpression,#Config_DocumentTemplates_Show #DocumentTemplate_OnGenerateExpression,#Config_DocumentTemplates_Show #DocumentTemplate_OnImportAttachmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DocumentTemplates_Show #Config_DocumentTemplates_Scope_Button{margin-top:4px;}#Config_DocumentTemplates_Scope_Dialog div.input{margin:14px 10px 20px;}#Config_DocumentTemplates_TemplatePdf_Dialog div{text-align:center;}#Config_DocumentTemplates_TemplatePdf_Dialog div input{margin:16px 0;}#Config_DocumentTemplates_JobSubTypes{border:1px dashed #d8d8d8;background-color:#fff;padding:4px;margin-top:6px;}#Config_DocumentTemplates_JobSubTypes>h4{margin-bottom:4px;}#Config_DocumentTemplates_JobSubTypes #Config_DocumentTemplates_JobSubTypes_Update{margin-top:4px;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog #Config_DocumentTemplates_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#DocumentTemplate_OnImportUserFlagRules_AddDialog .distribute-evenly{display:flex;justify-content:space-around;margin:1em 0;}#DocumentTemplate_OnImportUserFlagRules_AddDialog textarea{width:99%;}#DocumentTemplate_OnImportUserFlagRules_AddDialog .mt-1{margin-top:1em;}.dialog-bulk-generate .brief{margin:0 0 8px 0;}.dialog-bulk-generate .brief .scopeDescBulkGenerate{font-weight:600;}.dialog-bulk-generate .brief div.examples{margin:8px auto;width:360px;}.dialog-bulk-generate .brief div.examples div{margin:2px 4px 2px 0;width:230px;float:left;}.dialog-bulk-generate .brief div.examples div.example1{width:100px;}.dialog-bulk-generate textarea{width:calc(100% - .5em);height:200px;margin:0 auto;}.dialog-bulk-generate .sub{margin-top:.75em;}#Config_DocumentTemplates_Show_DownloadBulk_Dialog{padding-top:20px;text-align:center;}h1.Config_DocumentTemplates{margin:10px 0 6px;}#Config_DocumentTemplatePackages_Show>div.form>table>tbody>tr>th{width:140px;}#Config_DocumentTemplatePackages_Show #Package_FilterExpression,#Config_DocumentTemplatePackages_Show #Package_OnGenerateExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackages_Scope_Button{margin-top:4px;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List{list-style-type:decimal;list-style-position:inside;background-color:#f2f2f2;border:1px solid #d8d8d8;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li{padding:6px 8px;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li:not(:first-child){border-top:1px dashed #d8d8d8;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li .id{font-family:Consolas,"Courier New",monospace;float:right;}#Config_DocumentTemplatePackages_Scope_Dialog div.input{margin:14px 10px 20px;}#Config_DocumentTemplatePackages_JobSubTypes{border:1px dashed #d8d8d8;background-color:#fff;padding:4px;margin-top:6px;}#Config_DocumentTemplatePackages_JobSubTypes>h4{margin-bottom:4px;}#Config_DocumentTemplatePackages_JobSubTypes #Config_DocumentTemplatePackages_JobSubTypes_Update{margin-top:4px;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog #Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#Config_DocumentTemplatePackages_Templates_Dialog h3{margin-bottom:4px;}#Config_DocumentTemplatePackages_Templates_Dialog>div{width:374px;float:left;}#Config_DocumentTemplatePackages_Templates_Dialog>div:first-child{margin-right:20px;}#Config_DocumentTemplatePackages_Templates_Dialog .templates_connected{min-height:200px;}#Config_DocumentTemplatePackages_Templates_Dialog ol{list-style-type:decimal;padding-left:24px;border:1px solid #d8d8d8;background-color:#f2f2f2;}#Config_DocumentTemplatePackages_Templates_Dialog li{background-color:#fff;border:1px solid #d8d8d8;margin:4px;padding:2px 4px;-moz-box-shadow:0 0 5px rgba(209,209,209,.5);-webkit-box-shadow:0 0 5px rgba(209,209,209,.5);box-shadow:0 0 5px rgba(209,209,209,.5);cursor:default;}#Config_DocumentTemplatePackages_Templates_Dialog li:hover{background-color:#cddbec;border-color:#1e6dab;}#Config_DocumentTemplatePackages_Templates_Dialog li .id{font-family:Consolas,"Courier New",monospace;color:#888;float:right;font-size:.9em;}#importStatus #sessions .session{padding:4px;margin-bottom:10px;border:1px solid #efefef;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#f5f5f5;min-height:72px;}#importStatus #sessions .session .sessionLeftPane{width:48%;float:left;}#importStatus #sessions .session .sessionLeftPane>h3{padding-bottom:3px;border-bottom:1px dashed #ccc;}#importStatus #sessions .session .sessionLeftPane>h3 span.details{font-size:.8em;}#importStatus #sessions .session .sessionRightPane{width:48%;float:right;text-align:right;}#importStatus #sessions .session .sessionRightPane>p.sessionStart{color:#888;font-size:.8em;margin-bottom:2px;}#importStatus #sessions .session .sessionRightPane>p.sessionStatus{font-size:.9em;height:1.6em;overflow:hidden;margin-bottom:3px;}#importStatus #sessions .session .sessionPages>.sessionPage{min-height:56px;min-width:256px;float:left;margin:3px 0 3px 0;padding:170px 0 0 0;background-color:#fff;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border:1px solid #eee;background-repeat:no-repeat;background-position:center top;}#importStatus #sessions .session .sessionPages>.sessionPage>.sessionPageDetails{height:84px;padding:2px 4px 0 4px;background-color:rgba(255,255,255,.8);}#importStatus #sessions .session .sessionPages>.sessionPage>.sessionPageDetails p.sessionStatus{font-size:.9em;height:1.6em;margin-bottom:3px;}#importStatus #sessions .session .sessionInfoMessages{margin-top:6px;border:1px solid #bbb;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages div.logEventsViewportContainer{max-height:220px;overflow:auto;}#importStatus #sessions .session .sessionInfoMessages div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport{padding:0;margin:0;background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr{background-color:#eee;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.icon{width:20px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.timestamp{width:155px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.eventType{width:180px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr{background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td{padding:2px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.eventType{width:180px;}#undetectedPagesContainer #undetectedPages{list-style:none;margin:0;padding:0;}#undetectedPagesContainer #undetectedPages>.undetectedPage{float:left;margin:4px;border:1px solid #f4f4f4;background-color:hsl(0,0%,98.5%);height:256px;width:256px;background-position:top center;background-repeat:no-repeat;cursor:pointer;}#undetectedPagesContainer #undetectedPages>.undetectedPage>.pageDetails{margin-top:232px;height:24px;text-align:center;}#undetectedPagesContainer #undetectedPages>.undetectedPage:hover{border:1px solid #d8d8d8;background-color:#f4f4f4;}#undetectedPageDialog>.pagePreview{height:700px;max-height:700px;background-position:top center;background-repeat:no-repeat;background-size:contain;}#undetectedPageDialog .actions{border-top:1px solid #d1d1d1;padding-top:8px;margin-top:8px;text-align:right;}.deviceBatches #DeviceBatch_PurchaseDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_PurchaseDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_WarrantyDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_WarrantyDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_InsuranceDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_InsuranceDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_Comments{width:570px;height:200px;}.deviceBatches #DeviceBatch_Attachments{border:1px solid #ccc;background-color:#fff;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput{position:relative;height:200px;overflow:auto;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.comments,.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.author,.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon img.loading{display:none;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}.deviceBatches #DeviceBatch_Attachments.cannotAddAttachments div.attachmentOutput{height:250px;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:5px;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action{color:#333;display:block;margin:0 4px 0 0;font-size:1.5em;cursor:pointer;float:right;border:1px solid #fff;padding:.5em;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#plugins .pageMenuArea a>h3{display:inline;color:#335a87;}#plugins .pageMenuArea a>h3:hover{color:#5e8cc2;}#plugins .pageMenuArea .pageMenuBlurb{padding-left:18px;}#plugins .pageMenuArea .pageMenuBlurb i{font-size:.9em;}#plugins #pageMenu td .pageMenuArea:not(:last-child){padding-bottom:5px;margin-bottom:10px;}#plugins #pageMenu td .pageMenuArea>a,#plugins #pageMenu td .pageMenuArea>h3{color:#333;}#plugins #pageMenu td .pageMenuArea>a:hover,#plugins #pageMenu td .pageMenuArea>h3:hover{color:#335a87;}#dialogUninstallPlugins #uninstallPlugin{margin:.5em 0;}#dialogUninstallPlugins #uninstallPluginData{margin:.5em 0;}#dialogUninstallPluginConfirm #uninstallPluginConfirm{text-align:center;margin:1em 0 .5em 0;}#dialogUninstallPluginConfirm #uninstallPluginDataConfirm{margin-top:1em;}#pluginLibraryHeading{float:right;}#pluginLibrary #pluginLibraryGroups{width:900px;margin:0 auto;column-count:2;}#pluginLibrary #pluginLibraryGroups>div{display:inline-block;}#pluginLibrary #pluginLibraryGroups div.form>table{margin:0 10px 10px 4px;width:calc(100% - 14px);}#pluginLibrary .pluginItem .pluginItemBlurb{margin:8px 0 8px 2px;padding:0 4px;border-left:4px solid #d1d1d1;}#pluginLibrary .pluginItem .pluginItemBlurb *{padding:0;margin:0;}#pluginLibrary .pluginItem .pageMenuBlurb i{font-size:.9em;}#pluginLibrary .pluginItem>h2:first-child{min-height:22px;}#pluginLibrary .pluginItem>h2:first-child i{font-size:.9em;padding-right:4px;color:#333;}#pluginLibrary .pluginItem>h2:first-child a{float:right;font-size:12px;}#dialogInstallPlugin div.info-box{margin-top:1em;}#dialogUploadPlugin #pluginFile{margin:1em 0 1em 6px;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node{padding:1px;border:0;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node>span.fancytree-icon{background:none;display:inline-block;font-family:FontAwesome;font-size:1.2em;width:14px;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-ef>span.fancytree-icon:before{color:#9e9e9e;font-size:1em;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-cf>span.fancytree-icon:before{color:#9e9e9e;font-size:1em;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-c>span.fancytree-icon:before{color:#e51400;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-c.fancytree-selected>span.fancytree-icon:before{color:#60a917;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node.fancytree-selected{font-style:normal;background:none;}#Config_AuthRoles_Subjects li,#Config_AuthRoles_Subjects_Update_Dialog_List li{padding:4px 0 4px 4px;}#Config_AuthRoles_Subjects li i.fa-user,#Config_AuthRoles_Subjects_Update_Dialog_List li i.fa-user,#Config_AuthRoles_Subjects li i.fa-users,#Config_AuthRoles_Subjects_Update_Dialog_List li i.fa-users{min-width:22px;}#Config_AuthRoles_Subjects_Update_Dialog{display:none;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li{cursor:pointer;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li:hover{background-color:#f4f4f4;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li:hover .remove{opacity:.8;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove:hover{opacity:1;}#Config_ReportPrefs{margin-top:10px;}#Config_ReportPrefs #Config_ReportPrefs_Preview{float:right;width:150px;height:80px;border:1px solid #444;font-size:4px;color:#fff;overflow:hidden;text-transform:uppercase;}#Config_ReportPrefs #Config_ReportPrefs_Preview .heading{height:6px;padding-left:3px;overflow:hidden;background-color:#333;}#Config_ReportPrefs #Config_ReportPrefs_Preview .column-heading{float:left;width:calc(33% - 4px);padding-left:2px;margin:1px 0 0 2px;}#Config_ReportPrefs #Config_ReportPrefs_Preview .column{height:100%;float:left;width:calc(33% - 2px);margin-left:2px;overflow:hidden;background:rgba(255,255,255,.2);}#Config_ReportPrefs #Config_ReportPrefs_Preview .column span{display:block;height:4px;margin:1px;background-color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default{background:linear-gradient(to bottom,#165180,#1e6dab) left top repeat-x #1e6dab;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default-soft{background:linear-gradient(to bottom,#165180,#1e6dab) left top repeat-x #1e6dab;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green{background:linear-gradient(to bottom,#477c11,#60a917) left top repeat-x #60a917;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green-soft{background:linear-gradient(to bottom,#477c11,#60a917) left top repeat-x #60a917;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green-soft .column span.alert{background-color:#e5cc11;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet{background:linear-gradient(to bottom,#80c,#a0f) left top repeat-x #a0f;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet-soft{background:linear-gradient(to bottom,#80c,#a0f) left top repeat-x #a0f;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta{background:linear-gradient(to bottom,#a50058,#d80073) left top repeat-x #d80073;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta .column span.alert{background-color:#1681b4;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta-soft{background:linear-gradient(to bottom,#a50058,#d80073) left top repeat-x #d80073;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta-soft .column span.alert{background-color:#85cdf0;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson{background:linear-gradient(to bottom,#6f0019,#a20025) left top repeat-x #a20025;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson .column span.alert{background-color:#b0cc22;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson-soft{background:linear-gradient(to bottom,#6f0019,#a20025) left top repeat-x #a20025;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson-soft .column span.alert{background-color:#cee077;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber{background:linear-gradient(to bottom,#bf8208,#f0a30a) left top repeat-x #f0a30a;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber .column span.alert{background-color:#0050ef;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber-soft{background:linear-gradient(to bottom,#bf8208,#f0a30a) left top repeat-x #f0a30a;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber-soft .column span.alert{background-color:#bbd0fb;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown{background:linear-gradient(to bottom,#5c401f,#825a2c) left top repeat-x #825a2c;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown .column span.alert{background-color:#e3c800;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown-soft{background:linear-gradient(to bottom,#5c401f,#825a2c) left top repeat-x #825a2c;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel{background:linear-gradient(to bottom,#4e5d6c,#647689) left top repeat-x #647689;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel-soft{background:linear-gradient(to bottom,#4e5d6c,#647689) left top repeat-x #647689;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs_Builder .report{margin-bottom:10px;}#Config_ReportPrefs_Builder .report ul{margin-left:10px;}#Config_ReportPrefs_Builder .theme{margin-bottom:10px;}#Config_ReportPrefs_Builder .theme>select{margin-left:10px;}#Config_ReportPrefs_Builder .filter>select{margin-left:10px;}#Config_ReportPrefs_Builder .filter div.options{display:none;background-color:#fff;border:1px dashed #ccc;margin-top:4px;margin-left:15px;padding:2px 6px;}#Config_ReportPrefs_Builder .filter div.options .method{margin-top:4px;margin-bottom:8px;}#Config_ReportPrefs_Builder .filter div.options .method label{margin-right:14px;}#Config_ReportPrefs_Builder_Buttonpane{padding-right:.3em;}#Config_ReportPrefs_Builder_Buttonpane textarea{float:left;font-family:Consolas,"Courier New",monospace;color:#333;width:calc(100% - 1.2em - 10px);border:1px solid #ccc;white-space:pre;min-height:0;}#Config_ReportPrefs_Builder_Buttonpane i{float:right;cursor:pointer;margin:.3em .2em 0 0;color:#335a87;}#Config_ReportPrefs_Builder_Buttonpane i:hover{color:#5e8cc2;}#Config_ReportPrefs_Builder_Buttonpane .ui-dialog-buttonset{display:none;}#Config_Location{margin-top:10px;}#Config_Location #Config_Location_Unrestricted,#Config_Location #Config_Location_List,#Config_Location #Config_Location_Optional,#Config_Location #Config_Location_Restricted{display:none;margin-top:6px;}#Config_Location_List_Dialog{display:none;}#Config_Location_List_Dialog #Config_Location_List_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_Location_List_Dialog #Config_Location_List_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_Location_List_Dialog #Config_Location_List_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li{padding:2px 0 2px 4px;cursor:pointer;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li:hover{background-color:#f4f4f4;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li:hover .remove{opacity:.8;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li .remove:hover{opacity:1;}#Config_Location_ListImport_Dialog{display:none;}#Config_Location_ListImport_Dialog #Config_Location_ListImport_Dialog_Overwrite_Container{margin:6px 0;}#Config_Location_ListImport_Dialog #Config_Location_ListImport_Dialog_LocationList{width:100%;height:200px;margin:0 auto;}#Config_JobPref_Expressions{margin-top:10px;}#Config_JobPref_Expressions #OnCreateExpression,#Config_JobPref_Expressions #OnCloseExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_JobQueues_Index i{width:1.28571429em;text-align:center;}#Config_JobQueues_Icon{display:block;margin:0 0 10px 10px;}#Config_JobQueues_Icon_Update_Dialog{display:none;}#Config_JobQueues_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_JobQueues_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_JobQueues_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_JobQueues_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_JobQueues_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_JobQueues_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_JobQueues_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_JobQueues_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_JobQueues_JobSubTypes_Update{margin:8px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog #Config_JobQueues_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_JobQueues_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#Config_JobQueues_Subjects li,#Config_JobQueues_Subjects_Update_Dialog_List li{padding:4px 0 4px 4px;}#Config_JobQueues_Subjects li i.fa-user,#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-user,#Config_JobQueues_Subjects li i.fa-users,#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-users{width:1.28571429em;text-align:center;}#Config_JobQueues_Subjects_Update_Dialog{display:none;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li{cursor:pointer;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover{background-color:#f4f4f4;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover .remove{opacity:.8;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove:hover{opacity:1;}#Config_UserFlags_Show #UserFlag_OnAssignmentExpression,#Config_UserFlags_Show #UserFlag_OnUnassignmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_UserFlags_Index i{width:1.28571429em;text-align:center;}#Config_UserFlags_Icon{display:block;margin:0 0 10px 10px;}#Config_UserFlags_Icon_Update_Dialog{display:none;}#Config_UserFlags_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_UserFlags_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_UserFlags_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_UserFlags_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_UserFlags_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_UserFlags_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_UserFlags_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_UserFlags_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_UserFlags_BulkAssign_ModeDialog>div{margin-top:6px;background-color:#fff;line-height:1.3em;border:1px solid #ddd;}#Config_UserFlags_BulkAssign_ModeDialog>div>div{display:block;padding:4px;cursor:pointer;}#Config_UserFlags_BulkAssign_ModeDialog>div>div:not(:last-child){border-bottom:1px dashed #ddd;}#Config_UserFlags_BulkAssign_ModeDialog>div>div h5{font-size:1.1em;padding:4px 0;}#Config_UserFlags_BulkAssign_ModeDialog>div>div i{margin-right:4px;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.add:hover{background-color:#eeffde;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.add i{color:#60a917;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.override:hover{background-color:#ffe1de;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.override i{color:#e51400;}#Config_UserFlags_BulkAssign_AssignDialog .brief{margin:0 0 8px 0;}#Config_UserFlags_BulkAssign_AssignDialog .brief .scopeDescBulkGenerate{font-weight:600;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples{margin:8px auto;width:300px;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples div{margin:2px 4px 2px 0;width:150px;float:left;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples div.example1{width:100px;}#Config_UserFlags_BulkAssign_AssignDialog div.loading{display:none;padding:40px 0;text-align:center;}#Config_UserFlags_BulkAssign_AssignDialog div.loading i{margin-right:10px;color:#1e6dab;}#Config_UserFlags_BulkAssign_AssignDialog #Config_UserFlags_BulkAssign_AssignDialog_UserIds{height:200px;margin-bottom:8px;}#Config_UserFlags_BulkAssign_AssignDialog textarea{width:calc(100% - .5em);margin:0;}#Config_UserFlags_BulkAssign_AssignDialog.loading>div.loading{display:block;}#Config_UserFlags_BulkAssign_AssignDialog.loading>form{display:none;}#UserFlag_Export #UserFlag_Export_Fields #UserFlag_Export_Fields_Defaults{font-size:.75em;}#UserFlag_Export #UserFlag_Export_Fields th{font-size:1.05em;}#UserFlag_Export #UserFlag_Export_Fields th span{margin-top:4px;font-size:.8em;}#UserFlag_Export_Download_Dialog{padding-top:20px;text-align:center;}#UserFlag_Export_Download_Dialog h4{margin-bottom:30px;}#UserFlag_Export_Download_Dialog a{margin-bottom:20px;}#UserFlag_Export_Exporting{padding-top:50px;text-align:center;}#UserFlag_Export_Exporting i{margin-right:10px;color:#1e6dab;}#Config_DeviceFlags_Show #DeviceFlag_OnAssignmentExpression,#Config_DeviceFlags_Show #DeviceFlag_OnUnassignmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DeviceFlags_Index i{width:1.28571429em;text-align:center;}#Config_DeviceFlags_Icon{display:block;margin:0 0 10px 10px;}#Config_DeviceFlags_Icon_Update_Dialog{display:none;}#Config_DeviceFlags_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_DeviceFlags_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_DeviceFlags_BulkAssign_ModeDialog>div{margin-top:6px;background-color:#fff;line-height:1.3em;border:1px solid #ddd;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div{display:block;padding:4px;cursor:pointer;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div:not(:last-child){border-bottom:1px dashed #ddd;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div h5{font-size:1.1em;padding:4px 0;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div i{margin-right:4px;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.add:hover{background-color:#eeffde;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.add i{color:#60a917;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.override:hover{background-color:#ffe1de;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.override i{color:#e51400;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief{margin:0 0 8px 0;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief .scopeDescBulkGenerate{font-weight:600;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples{margin:8px auto;width:300px;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples div{margin:2px 4px 2px 0;width:150px;float:left;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples div.example1{width:100px;}#Config_DeviceFlags_BulkAssign_AssignDialog div.loading{display:none;padding:40px 0;text-align:center;}#Config_DeviceFlags_BulkAssign_AssignDialog div.loading i{margin-right:10px;color:#1e6dab;}#Config_DeviceFlags_BulkAssign_AssignDialog #Config_DeviceFlags_BulkAssign_AssignDialog_DeviceSerialNumbers{height:200px;margin-bottom:8px;}#Config_DeviceFlags_BulkAssign_AssignDialog textarea{width:calc(100% - .5em);margin:0;}#Config_DeviceFlags_BulkAssign_AssignDialog.loading>div.loading{display:block;}#Config_DeviceFlags_BulkAssign_AssignDialog.loading>form{display:none;}#DeviceFlag_Export #DeviceFlag_Export_Fields #DeviceFlag_Export_Fields_Defaults{font-size:.75em;}#DeviceFlag_Export #DeviceFlag_Export_Fields th{font-size:1.05em;}#DeviceFlag_Export #DeviceFlag_Export_Fields th span{margin-top:4px;font-size:.8em;}#DeviceFlag_Export_Download_Dialog{padding-top:20px;text-align:center;}#DeviceFlag_Export_Download_Dialog h4{margin-bottom:30px;}#DeviceFlag_Export_Download_Dialog a{margin-bottom:20px;}#DeviceFlag_Export_Exporting{padding-top:50px;text-align:center;}#DeviceFlag_Export_Exporting i{margin-right:10px;color:#1e6dab;}#DocumentTemplate_BulkGenerate .actions{padding-bottom:.5em;text-align:right;}#DocumentTemplate_BulkGenerate table{max-width:850px;margin:auto;}#DocumentTemplate_BulkGenerate table tr.when-none{text-align:center;font-style:italic;}.dialog-item-picker{height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}.dialog-item-picker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}.dialog-item-picker>div:hover{background-color:#f4f4f4;}.dialog-item-picker>div.selected,.dialog-item-picker>div.selected:hover{background-color:#eee;}.dialog-item-picker>div.disabled{cursor:not-allowed;background-color:#f4f4f4;} \ No newline at end of file +.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer a.button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatree-node.property span.dynatree-icon{background-position-x:-48px;}table.expressionsTable{border:solid 1px #f4f4f4;border-collapse:collapse;}table.expressionsTable>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}table.expressionsTable>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}table.expressionsTable>thead>tr>th,table.expressionsTable>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}table.expressionsTable>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}table.expressionsTable>tfoot>tr>th,table.expressionsTable>tfoot>tr>td{background-color:#f4f4f4;}table.expressionsTable td.parseError{background-color:#ffd8d8;}#AttachmentType_FilterExpression{width:375px;}#deviceComponents{border:solid 1px #f4f4f4;border-collapse:collapse;}#deviceComponents>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}#deviceComponents>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}#deviceComponents>thead>tr>th,#deviceComponents>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}#deviceComponents>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}#deviceComponents>tfoot>tr>th,#deviceComponents>tfoot>tr>td{background-color:#f4f4f4;}#deviceComponents tr th.actions{width:20px;}#deviceComponents tr input.description{width:300px;}#deviceComponents tr input.cost{width:75px;}#deviceComponents tr i.remove{font-size:1.6em;color:#e51400;cursor:pointer;opacity:.8;}#deviceComponents tr i.remove:hover{opacity:1;}#deviceComponents tr i.fa-list-alt{color:#1e6dab;font-size:1.6em;cursor:pointer;}#deviceComponents tr i.fa-asterisk{color:#fa6800;font-size:1em;left:10px;top:3px;cursor:pointer;}#deviceComponents tr input.updating{background-position:right center;background-repeat:no-repeat;background-image:url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA);}#organisationAddresses{font-size:.9em;}#organisationAddresses tr:not(:last-child){border-bottom:1px dashed #aaa;}#organisationAddresses th{padding:2px;font-weight:600;width:200px;}#organisationAddresses td{padding:2px;vertical-align:middle;}#organisationAddresses tr:nth-child(even){background-color:#fff;}#organisationAddresses i.fa{font-size:1.7em;cursor:pointer;}#organisationAddresses i.fa.delete{color:#e51400;opacity:.8;}#organisationAddresses i.fa.delete:hover{opacity:1;}#organisationAddresses i.fa.edit{color:#1e6dab;}ul#loggingEntries{overflow:auto;max-height:230px;padding-left:20px;}table.deviceProfileTable th.name{width:300px;}table.deviceProfileTable th.type{width:120px;}table.deviceProfileTable th.deviceCount{width:120px;}#configurationDeviceProfileShow #displayComputerNameTemplate{margin:0 0 6px 0;}#configurationDeviceProfileShow #displayOrganisationalUnit{margin:0 0 6px 0;}#dialogComputerNameTemplate #ComputerNameTemplate{box-sizing:border-box;height:48px;width:100%;font-family:Consolas,"Courier New",monospace;}#dialogOrganisationalUnit .enforceOrganisationalUnit{line-height:2.2em;}#dialogOrganisationalUnit .organisationalUnitTree{height:380px;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node{padding:1px;border:0;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node>span.fancytree-icon{background:none;display:inline-block;font-family:FontAwesome;font-size:1.2em;width:14px;}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-ico-ef>span.fancytree-icon:before{color:#1e6dab;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-ico-cf>span.fancytree-icon:before{color:#1e6dab;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree ul.fancytree-container>li>span>span.fancytree-icon:before{color:#fa6800;font-size:1em;content:"";}#dialogOrganisationalUnit .organisationalUnitTree span.fancytree-node.fancytree-selected{font-style:normal;background:none;}#Config_System_AD_SearchScope_Dialog_Loading,#dialogOrganisationalUnit_Loading{text-align:center;padding:40px 0;}#configurationDocumentTemplateExpressionBrowser{padding-right:275px;background-image:url(data:image/png;base64,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);background-position:right top;background-repeat:no-repeat;}#Logging_Task_Status{width:520px;margin:40px auto 60px auto;}#Logging_Task_Status th.process{text-align:left;font-weight:600;background-color:#f4f4f4;min-height:30px;vertical-align:middle;}#Logging_Task_Status td.description{font-size:.9em;min-height:60px;}#Logging_Task_Status td.progress{padding:8px 10px;}#Logging_Task_Status td.finishedMessage i{display:none;}#Logging_Task_Status td.finishedRedirect{position:relative;}#Logging_Task_Status td.finishedRedirect i{color:#1e6dab;position:absolute;right:10px;top:calc(57% - .5em);display:inline-block;}#Logging_Task_Status td.exception{background-color:#ffd8d8;}div.logEventsViewport{border:1px solid #bbb;-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}div.logEventsViewport div.logEventsViewportContainer{overflow-y:auto;overflow-x:hidden;}div.logEventsViewport div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}div.logEventsViewport table.logEventsViewport{padding:0;margin:0;background-color:#bbb;table-layout:fixed;}div.logEventsViewport table.logEventsViewport>thead>tr{background-color:#eee;}div.logEventsViewport table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}div.logEventsViewport table.logEventsViewport>thead>tr>th.icon{width:20px;}div.logEventsViewport table.logEventsViewport>thead>tr>th.timestamp{width:155px;}div.logEventsViewport table.logEventsViewport>thead>tr>th.eventType{width:180px;}div.logEventsViewport table.logEventsViewport>tbody>tr{background-color:#fff;}div.logEventsViewport table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}div.logEventsViewport table.logEventsViewport>tbody>tr>td{padding:2px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.eventType{width:180px;}div.logEventsViewport table.logEventsViewport>tbody>tr>td.message{white-space:pre-wrap;}#enrolStatus #sessions .session{width:280px;padding:4px 4px 4px 72px;margin:8px;border:5px solid #efefef;-moz-border-radius:0 20px 0 0;-webkit-border-radius:0 20px 0 0;border-radius:0 20px 0 0;background-color:#f5f5f5;background-repeat:no-repeat,no-repeat;background-position:36px 36px,4px 4px;-moz-background-size:32px,64px;-o-background-size:32px,64px;-webkit-background-size:32px,64px;background-size:32px,64px;min-height:72px;cursor:pointer;}#enrolStatus #sessions .session>h3{padding-bottom:3px;border-bottom:1px dashed #ccc;}#enrolStatus #sessions .session>h3 span.details{font-size:.8em;}#enrolStatus #sessions .session>h3 i{float:right;color:#f0a30a;}#enrolStatus #sessions .session>p.sessionStart{color:#888;font-size:.8em;margin-bottom:2px;}#enrolStatus #sessions .session>p.sessionStatus{font-size:.9em;height:1.6em;overflow:hidden;margin-bottom:3px;}#enrolStatus #sessions .session:hover{border:5px solid #6c7a87;background-color:#dfe1f8;}#dialogSession .sessionHeader{float:left;padding:0 0 0 134px;background-repeat:no-repeat,no-repeat;background-position:96px 96px,0 0;-moz-background-size:32px,128px;-o-background-size:32px,128px;-webkit-background-size:32px,128px;background-size:32px,128px;min-height:134px;}#dialogSession .sessionHeader>h2{padding-bottom:0;}#dialogSession .sessionHeader>table{margin-top:4px;}#dialogSession .sessionHeader>table th{width:128px;text-align:right;}#dialogSession .sessionHeader>table td,#dialogSession .sessionHeader>table th{padding:1px 2px;}#dialogSession .sessionProgress{width:320px;position:absolute;right:1em;text-align:right;}#dialogSession .sessionProgress>p.sessionStart{color:#888;margin-bottom:2px;}#dialogSession .sessionProgress>p.sessionStatus{height:1.6em;overflow:hidden;margin-bottom:3px;}#dialogSession .sessionProgress div.reason{margin-bottom:3px;}#dialogSession .sessionInfoContainer>div{float:left;width:428px;overflow:auto;}#dialogSession .sessionInfoContainer .sessionInfoMessages{height:374px;border:1px solid #bbb;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages div.logEventsViewportContainer{overflow:auto;}#dialogSession .sessionInfoContainer .sessionInfoMessages div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport{padding:0;margin:0;background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr{background-color:#eee;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.icon{width:20px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.timestamp{width:155px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>thead>tr>th.eventType{width:180px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr{background-color:#fff;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td{padding:2px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}#dialogSession .sessionInfoContainer .sessionInfoMessages table.logEventsViewport>tbody>tr>td.eventType{width:180px;}#dialogSession .sessionInfoContainer .sessionInfoConsole{margin-left:6px;background-color:#222;color:#0f0;font-family:Consolas,"Courier New",monospace;border:4px solid #ccc;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;padding:2px;height:364px;}#Config_DocumentTemplates_Show>div.form>table>tbody>tr>th{width:140px;}#Config_DocumentTemplates_Show #DocumentTemplate_FilterExpression,#Config_DocumentTemplates_Show #DocumentTemplate_OnGenerateExpression,#Config_DocumentTemplates_Show #DocumentTemplate_OnImportAttachmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DocumentTemplates_Show #Config_DocumentTemplates_Scope_Button{margin-top:4px;}#Config_DocumentTemplates_Scope_Dialog div.input{margin:14px 10px 20px;}#Config_DocumentTemplates_TemplatePdf_Dialog div{text-align:center;}#Config_DocumentTemplates_TemplatePdf_Dialog div input{margin:16px 0;}#Config_DocumentTemplates_JobSubTypes{border:1px dashed #d8d8d8;background-color:#fff;padding:4px;margin-top:6px;}#Config_DocumentTemplates_JobSubTypes>h4{margin-bottom:4px;}#Config_DocumentTemplates_JobSubTypes #Config_DocumentTemplates_JobSubTypes_Update{margin-top:4px;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog #Config_DocumentTemplates_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_DocumentTemplates_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#DocumentTemplate_OnImportUserFlagRules_AddDialog .distribute-evenly{display:flex;justify-content:space-around;margin:1em 0;}#DocumentTemplate_OnImportUserFlagRules_AddDialog textarea{width:99%;}#DocumentTemplate_OnImportUserFlagRules_AddDialog .mt-1{margin-top:1em;}.dialog-bulk-generate .brief{margin:0 0 8px 0;}.dialog-bulk-generate .brief .scopeDescBulkGenerate{font-weight:600;}.dialog-bulk-generate .brief div.examples{margin:8px auto;width:360px;}.dialog-bulk-generate .brief div.examples div{margin:2px 4px 2px 0;width:230px;float:left;}.dialog-bulk-generate .brief div.examples div.example1{width:100px;}.dialog-bulk-generate textarea{width:calc(100% - .5em);height:200px;margin:0 auto;}.dialog-bulk-generate .sub{margin-top:.75em;}#Config_DocumentTemplates_Show_DownloadBulk_Dialog{padding-top:20px;text-align:center;}h1.Config_DocumentTemplates{margin:10px 0 6px;}#Config_DocumentTemplatePackages_Show>div.form>table>tbody>tr>th{width:140px;}#Config_DocumentTemplatePackages_Show #Package_FilterExpression,#Config_DocumentTemplatePackages_Show #Package_OnGenerateExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackages_Scope_Button{margin-top:4px;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List{list-style-type:decimal;list-style-position:inside;background-color:#f2f2f2;border:1px solid #d8d8d8;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li{padding:6px 8px;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li:not(:first-child){border-top:1px dashed #d8d8d8;}#Config_DocumentTemplatePackages_Show #Config_DocumentTemplatePackage_List li .id{font-family:Consolas,"Courier New",monospace;float:right;}#Config_DocumentTemplatePackages_Scope_Dialog div.input{margin:14px 10px 20px;}#Config_DocumentTemplatePackages_JobSubTypes{border:1px dashed #d8d8d8;background-color:#fff;padding:4px;margin-top:6px;}#Config_DocumentTemplatePackages_JobSubTypes>h4{margin-bottom:4px;}#Config_DocumentTemplatePackages_JobSubTypes #Config_DocumentTemplatePackages_JobSubTypes_Update{margin-top:4px;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog #Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_DocumentTemplatePackages_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#Config_DocumentTemplatePackages_Templates_Dialog h3{margin-bottom:4px;}#Config_DocumentTemplatePackages_Templates_Dialog>div{width:374px;float:left;}#Config_DocumentTemplatePackages_Templates_Dialog>div:first-child{margin-right:20px;}#Config_DocumentTemplatePackages_Templates_Dialog .templates_connected{min-height:200px;}#Config_DocumentTemplatePackages_Templates_Dialog ol{list-style-type:decimal;padding-left:24px;border:1px solid #d8d8d8;background-color:#f2f2f2;}#Config_DocumentTemplatePackages_Templates_Dialog li{background-color:#fff;border:1px solid #d8d8d8;margin:4px;padding:2px 4px;-moz-box-shadow:0 0 5px rgba(209,209,209,.5);-webkit-box-shadow:0 0 5px rgba(209,209,209,.5);box-shadow:0 0 5px rgba(209,209,209,.5);cursor:default;}#Config_DocumentTemplatePackages_Templates_Dialog li:hover{background-color:#cddbec;border-color:#1e6dab;}#Config_DocumentTemplatePackages_Templates_Dialog li .id{font-family:Consolas,"Courier New",monospace;color:#888;float:right;font-size:.9em;}#importStatus #sessions .session{padding:4px;margin-bottom:10px;border:1px solid #efefef;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#f5f5f5;min-height:72px;}#importStatus #sessions .session .sessionLeftPane{width:48%;float:left;}#importStatus #sessions .session .sessionLeftPane>h3{padding-bottom:3px;border-bottom:1px dashed #ccc;}#importStatus #sessions .session .sessionLeftPane>h3 span.details{font-size:.8em;}#importStatus #sessions .session .sessionRightPane{width:48%;float:right;text-align:right;}#importStatus #sessions .session .sessionRightPane>p.sessionStart{color:#888;font-size:.8em;margin-bottom:2px;}#importStatus #sessions .session .sessionRightPane>p.sessionStatus{font-size:.9em;height:1.6em;overflow:hidden;margin-bottom:3px;}#importStatus #sessions .session .sessionPages>.sessionPage{min-height:56px;min-width:256px;float:left;margin:3px 0 3px 0;padding:170px 0 0 0;background-color:#fff;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border:1px solid #eee;background-repeat:no-repeat;background-position:center top;}#importStatus #sessions .session .sessionPages>.sessionPage>.sessionPageDetails{height:84px;padding:2px 4px 0 4px;background-color:rgba(255,255,255,.8);}#importStatus #sessions .session .sessionPages>.sessionPage>.sessionPageDetails p.sessionStatus{font-size:.9em;height:1.6em;margin-bottom:3px;}#importStatus #sessions .session .sessionInfoMessages{margin-top:6px;border:1px solid #bbb;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages div.logEventsViewportContainer{max-height:220px;overflow:auto;}#importStatus #sessions .session .sessionInfoMessages div.logEventsViewportContainer .logEventsViewportNoLogs{padding-top:20px;text-align:center;font-style:italic;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport{padding:0;margin:0;background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr{background-color:#eee;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th{padding:4px 2px;font-weight:600;border-bottom:1px solid #bbb;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.icon{width:20px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.timestamp{width:155px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>thead>tr>th.eventType{width:180px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr{background-color:#fff;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr:nth-child(even){background-color:#eee;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td{padding:2px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon{width:20px;vertical-align:middle;text-align:center;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i{display:block;font-size:1.2em;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-info-circle{color:#1e6dab;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-triangle{color:#f0a30a;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.icon>i.fa-exclamation-circle{color:#e51400;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.timestamp{width:155px;}#importStatus #sessions .session .sessionInfoMessages table.logEventsViewport>tbody>tr>td.eventType{width:180px;}#undetectedPagesContainer #undetectedPages{list-style:none;margin:0;padding:0;}#undetectedPagesContainer #undetectedPages>.undetectedPage{float:left;margin:4px;border:1px solid #f4f4f4;background-color:hsl(0,0%,98.5%);height:256px;width:256px;background-position:top center;background-repeat:no-repeat;cursor:pointer;}#undetectedPagesContainer #undetectedPages>.undetectedPage>.pageDetails{margin-top:232px;height:24px;text-align:center;}#undetectedPagesContainer #undetectedPages>.undetectedPage:hover{border:1px solid #d8d8d8;background-color:#f4f4f4;}#undetectedPageDialog>.pagePreview{height:700px;max-height:700px;background-position:top center;background-repeat:no-repeat;background-size:contain;}#undetectedPageDialog .actions{border-top:1px solid #d1d1d1;padding-top:8px;margin-top:8px;text-align:right;}.deviceBatches #DeviceBatch_PurchaseDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_PurchaseDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_WarrantyDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_WarrantyDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_InsuranceDetails_Container{padding:5px 0 5px 5px;}.deviceBatches #DeviceBatch_InsuranceDetails{width:570px;height:200px;}.deviceBatches #DeviceBatch_Comments{width:570px;height:200px;}.deviceBatches #DeviceBatch_Attachments{border:1px solid #ccc;background-color:#fff;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput{position:relative;height:200px;overflow:auto;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.comments,.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.author,.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.icon img.loading{display:none;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}.deviceBatches #DeviceBatch_Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}.deviceBatches #DeviceBatch_Attachments.cannotAddAttachments div.attachmentOutput{height:250px;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:5px;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action{color:#333;display:block;margin:0 4px 0 0;font-size:1.5em;cursor:pointer;float:right;border:1px solid #fff;padding:.5em;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}.deviceBatches #DeviceBatch_Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#plugins .pageMenuArea a>h3{display:inline;color:#335a87;}#plugins .pageMenuArea a>h3:hover{color:#5e8cc2;}#plugins .pageMenuArea .pageMenuBlurb{padding-left:18px;}#plugins .pageMenuArea .pageMenuBlurb i{font-size:.9em;}#plugins #pageMenu td .pageMenuArea:not(:last-child){padding-bottom:5px;margin-bottom:10px;}#plugins #pageMenu td .pageMenuArea>a,#plugins #pageMenu td .pageMenuArea>h3{color:#333;}#plugins #pageMenu td .pageMenuArea>a:hover,#plugins #pageMenu td .pageMenuArea>h3:hover{color:#335a87;}#dialogUninstallPlugins #uninstallPlugin{margin:.5em 0;}#dialogUninstallPlugins #uninstallPluginData{margin:.5em 0;}#dialogUninstallPluginConfirm #uninstallPluginConfirm{text-align:center;margin:1em 0 .5em 0;}#dialogUninstallPluginConfirm #uninstallPluginDataConfirm{margin-top:1em;}#pluginLibraryHeading{float:right;}#pluginLibrary #pluginLibraryGroups{width:900px;margin:0 auto;column-count:2;}#pluginLibrary #pluginLibraryGroups>div{display:inline-block;}#pluginLibrary #pluginLibraryGroups div.form>table{margin:0 10px 10px 4px;width:calc(100% - 14px);}#pluginLibrary .pluginItem .pluginItemBlurb{margin:8px 0 8px 2px;padding:0 4px;border-left:4px solid #d1d1d1;}#pluginLibrary .pluginItem .pluginItemBlurb *{padding:0;margin:0;}#pluginLibrary .pluginItem .pageMenuBlurb i{font-size:.9em;}#pluginLibrary .pluginItem>h2:first-child{min-height:22px;}#pluginLibrary .pluginItem>h2:first-child i{font-size:.9em;padding-right:4px;color:#333;}#pluginLibrary .pluginItem>h2:first-child a{float:right;font-size:12px;}#dialogInstallPlugin div.info-box{margin-top:1em;}#dialogUploadPlugin #pluginFile{margin:1em 0 1em 6px;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node{padding:1px;border:0;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node>span.fancytree-icon{background:none;display:inline-block;font-family:FontAwesome;font-size:1.2em;width:14px;}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-ef>span.fancytree-icon:before{color:#9e9e9e;font-size:1em;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-cf>span.fancytree-icon:before{color:#9e9e9e;font-size:1em;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-c>span.fancytree-icon:before{color:#e51400;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-ico-c.fancytree-selected>span.fancytree-icon:before{color:#60a917;content:"";}#Config_AuthRoles_Show #Config_AuthRoles_Claims_Tree span.fancytree-node.fancytree-selected{font-style:normal;background:none;}#Config_AuthRoles_Subjects li,#Config_AuthRoles_Subjects_Update_Dialog_List li{padding:4px 0 4px 4px;}#Config_AuthRoles_Subjects li i.fa-user,#Config_AuthRoles_Subjects_Update_Dialog_List li i.fa-user,#Config_AuthRoles_Subjects li i.fa-users,#Config_AuthRoles_Subjects_Update_Dialog_List li i.fa-users{min-width:22px;}#Config_AuthRoles_Subjects_Update_Dialog{display:none;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li{cursor:pointer;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li:hover{background-color:#f4f4f4;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li:hover .remove{opacity:.8;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove:hover{opacity:1;}#Config_ReportPrefs{margin-top:10px;}#Config_ReportPrefs #Config_ReportPrefs_Preview{float:right;width:150px;height:80px;border:1px solid #444;font-size:4px;color:#fff;overflow:hidden;text-transform:uppercase;}#Config_ReportPrefs #Config_ReportPrefs_Preview .heading{height:6px;padding-left:3px;overflow:hidden;background-color:#333;}#Config_ReportPrefs #Config_ReportPrefs_Preview .column-heading{float:left;width:calc(33% - 4px);padding-left:2px;margin:1px 0 0 2px;}#Config_ReportPrefs #Config_ReportPrefs_Preview .column{height:100%;float:left;width:calc(33% - 2px);margin-left:2px;overflow:hidden;background:rgba(255,255,255,.2);}#Config_ReportPrefs #Config_ReportPrefs_Preview .column span{display:block;height:4px;margin:1px;background-color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default{background:linear-gradient(to bottom,#165180,#1e6dab) left top repeat-x #1e6dab;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default-soft{background:linear-gradient(to bottom,#165180,#1e6dab) left top repeat-x #1e6dab;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-default-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green{background:linear-gradient(to bottom,#477c11,#60a917) left top repeat-x #60a917;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green-soft{background:linear-gradient(to bottom,#477c11,#60a917) left top repeat-x #60a917;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-green-soft .column span.alert{background-color:#e5cc11;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet{background:linear-gradient(to bottom,#80c,#a0f) left top repeat-x #a0f;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet-soft{background:linear-gradient(to bottom,#80c,#a0f) left top repeat-x #a0f;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-violet-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta{background:linear-gradient(to bottom,#a50058,#d80073) left top repeat-x #d80073;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta .column span.alert{background-color:#1681b4;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta-soft{background:linear-gradient(to bottom,#a50058,#d80073) left top repeat-x #d80073;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-magenta-soft .column span.alert{background-color:#85cdf0;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson{background:linear-gradient(to bottom,#6f0019,#a20025) left top repeat-x #a20025;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson .column span.alert{background-color:#b0cc22;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson-soft{background:linear-gradient(to bottom,#6f0019,#a20025) left top repeat-x #a20025;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-crimson-soft .column span.alert{background-color:#cee077;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber{background:linear-gradient(to bottom,#bf8208,#f0a30a) left top repeat-x #f0a30a;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber .column span.alert{background-color:#0050ef;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber-soft{background:linear-gradient(to bottom,#bf8208,#f0a30a) left top repeat-x #f0a30a;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-amber-soft .column span.alert{background-color:#bbd0fb;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown{background:linear-gradient(to bottom,#5c401f,#825a2c) left top repeat-x #825a2c;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown .column span.alert{background-color:#e3c800;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown-soft{background:linear-gradient(to bottom,#5c401f,#825a2c) left top repeat-x #825a2c;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-brown-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel{background:linear-gradient(to bottom,#4e5d6c,#647689) left top repeat-x #647689;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel .column span.alert{background-color:#e51400;color:#fff;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel-soft{background:linear-gradient(to bottom,#4e5d6c,#647689) left top repeat-x #647689;}#Config_ReportPrefs #Config_ReportPrefs_Preview.theme-steel-soft .column span.alert{background-color:#f0e277;color:#000;}#Config_ReportPrefs_Builder .report{margin-bottom:10px;}#Config_ReportPrefs_Builder .report ul{margin-left:10px;}#Config_ReportPrefs_Builder .theme{margin-bottom:10px;}#Config_ReportPrefs_Builder .theme>select{margin-left:10px;}#Config_ReportPrefs_Builder .filter>select{margin-left:10px;}#Config_ReportPrefs_Builder .filter div.options{display:none;background-color:#fff;border:1px dashed #ccc;margin-top:4px;margin-left:15px;padding:2px 6px;}#Config_ReportPrefs_Builder .filter div.options .method{margin-top:4px;margin-bottom:8px;}#Config_ReportPrefs_Builder .filter div.options .method label{margin-right:14px;}#Config_ReportPrefs_Builder_Buttonpane{padding-right:.3em;}#Config_ReportPrefs_Builder_Buttonpane textarea{float:left;font-family:Consolas,"Courier New",monospace;color:#333;width:calc(100% - 1.2em - 10px);border:1px solid #ccc;white-space:pre;min-height:0;}#Config_ReportPrefs_Builder_Buttonpane i{float:right;cursor:pointer;margin:.3em .2em 0 0;color:#335a87;}#Config_ReportPrefs_Builder_Buttonpane i:hover{color:#5e8cc2;}#Config_ReportPrefs_Builder_Buttonpane .ui-dialog-buttonset{display:none;}#Config_Location{margin-top:10px;}#Config_Location #Config_Location_Unrestricted,#Config_Location #Config_Location_List,#Config_Location #Config_Location_Optional,#Config_Location #Config_Location_Restricted{display:none;margin-top:6px;}#Config_Location_List_Dialog{display:none;}#Config_Location_List_Dialog #Config_Location_List_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_Location_List_Dialog #Config_Location_List_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_Location_List_Dialog #Config_Location_List_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li{padding:2px 0 2px 4px;cursor:pointer;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li:hover{background-color:#f4f4f4;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li:hover .remove{opacity:.8;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_Location_List_Dialog #Config_Location_List_Dialog_List li .remove:hover{opacity:1;}#Config_Location_ListImport_Dialog{display:none;}#Config_Location_ListImport_Dialog #Config_Location_ListImport_Dialog_Overwrite_Container{margin:6px 0;}#Config_Location_ListImport_Dialog #Config_Location_ListImport_Dialog_LocationList{width:100%;height:200px;margin:0 auto;}#Config_JobPref_Expressions{margin-top:10px;}#Config_JobPref_Expressions #OnCreateExpression,#Config_JobPref_Expressions #OnCloseExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_JobQueues_Index i{width:1.28571429em;text-align:center;}#Config_JobQueues_Icon{display:block;margin:0 0 10px 10px;}#Config_JobQueues_Icon_Update_Dialog{display:none;}#Config_JobQueues_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_JobQueues_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_JobQueues_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_JobQueues_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_JobQueues_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_JobQueues_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_JobQueues_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_JobQueues_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_JobQueues_JobSubTypes_Update{margin:8px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog #Config_JobQueues_JobSubTypes_Update_Dialog_Types{margin:0 0 8px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes{padding:6px 0;}#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes{background-color:#f2f2f2;border-left:4px solid #d8d8d8;padding:4px 0 4px 8px;margin:4px 0 0 6px;}#Config_JobQueues_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer{font-size:.8em;}#Config_JobQueues_Subjects li,#Config_JobQueues_Subjects_Update_Dialog_List li{padding:4px 0 4px 4px;}#Config_JobQueues_Subjects li i.fa-user,#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-user,#Config_JobQueues_Subjects li i.fa-users,#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-users{width:1.28571429em;text-align:center;}#Config_JobQueues_Subjects_Update_Dialog{display:none;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_ListContainer{height:280px;overflow-y:auto;background-color:#fff;border:1px solid #d8d8d8;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_None{padding-top:15px;display:block;text-align:center;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_AddContainer{padding-top:10px;padding-left:10px;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li{cursor:pointer;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover{background-color:#f4f4f4;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover .remove{opacity:.8;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove{margin-top:2px;padding-right:6px;float:right;cursor:pointer;opacity:0;color:#e51400;font-size:1.3em;}#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove:hover{opacity:1;}#Config_UserFlags_Show #UserFlag_OnAssignmentExpression,#Config_UserFlags_Show #UserFlag_OnUnassignmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_UserFlags_Index i{width:1.28571429em;text-align:center;}#Config_UserFlags_Icon{display:block;margin:0 0 10px 10px;}#Config_UserFlags_Icon_Update_Dialog{display:none;}#Config_UserFlags_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_UserFlags_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_UserFlags_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_UserFlags_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_UserFlags_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_UserFlags_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_UserFlags_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_UserFlags_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_UserFlags_BulkAssign_ModeDialog>div{margin-top:6px;background-color:#fff;line-height:1.3em;border:1px solid #ddd;}#Config_UserFlags_BulkAssign_ModeDialog>div>div{display:block;padding:4px;cursor:pointer;}#Config_UserFlags_BulkAssign_ModeDialog>div>div:not(:last-child){border-bottom:1px dashed #ddd;}#Config_UserFlags_BulkAssign_ModeDialog>div>div h5{font-size:1.1em;padding:4px 0;}#Config_UserFlags_BulkAssign_ModeDialog>div>div i{margin-right:4px;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.add:hover{background-color:#eeffde;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.add i{color:#60a917;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.override:hover{background-color:#ffe1de;}#Config_UserFlags_BulkAssign_ModeDialog>div>div.override i{color:#e51400;}#Config_UserFlags_BulkAssign_AssignDialog .brief{margin:0 0 8px 0;}#Config_UserFlags_BulkAssign_AssignDialog .brief .scopeDescBulkGenerate{font-weight:600;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples{margin:8px auto;width:300px;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples div{margin:2px 4px 2px 0;width:150px;float:left;}#Config_UserFlags_BulkAssign_AssignDialog .brief div.examples div.example1{width:100px;}#Config_UserFlags_BulkAssign_AssignDialog div.loading{display:none;padding:40px 0;text-align:center;}#Config_UserFlags_BulkAssign_AssignDialog div.loading i{margin-right:10px;color:#1e6dab;}#Config_UserFlags_BulkAssign_AssignDialog #Config_UserFlags_BulkAssign_AssignDialog_UserIds{height:200px;margin-bottom:8px;}#Config_UserFlags_BulkAssign_AssignDialog textarea{width:calc(100% - .5em);margin:0;}#Config_UserFlags_BulkAssign_AssignDialog.loading>div.loading{display:block;}#Config_UserFlags_BulkAssign_AssignDialog.loading>form{display:none;}#UserFlag_Export #UserFlag_Export_Fields #UserFlag_Export_Fields_Defaults{font-size:.75em;}#UserFlag_Export #UserFlag_Export_Fields th{font-size:1.05em;}#UserFlag_Export #UserFlag_Export_Fields th span{margin-top:4px;font-size:.8em;}#UserFlag_Export_Download_Dialog{padding-top:20px;text-align:center;}#UserFlag_Export_Download_Dialog h4{margin-bottom:30px;}#UserFlag_Export_Download_Dialog a{margin-bottom:20px;}#UserFlag_Export_Exporting{padding-top:50px;text-align:center;}#UserFlag_Export_Exporting i{margin-right:10px;color:#1e6dab;}#Config_DeviceFlags_Show #DeviceFlag_OnAssignmentExpression,#Config_DeviceFlags_Show #DeviceFlag_OnUnassignmentExpression{height:16px;min-height:16px;overflow:hidden;font-family:Consolas,"Courier New",monospace;}#Config_DeviceFlags_Index i{width:1.28571429em;text-align:center;}#Config_DeviceFlags_Icon{display:block;margin:0 0 10px 10px;}#Config_DeviceFlags_Icon_Update_Dialog{display:none;}#Config_DeviceFlags_Icon_Update_Dialog div.colours{text-align:center;font-size:30px;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i{cursor:pointer;padding:1px;opacity:.9;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i:hover{opacity:1;}#Config_DeviceFlags_Icon_Update_Dialog div.colours i.selected{opacity:1;}#Config_DeviceFlags_Icon_Update_Dialog div.icons{text-align:center;font-size:30px;background-color:#fff;border:1px solid #d1d1d1;margin:6px 0 14px 0;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i{width:1.28571429em;text-align:center;cursor:pointer;padding:4px 0;color:#333;opacity:.6;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i:hover{opacity:.9;color:inherit;}#Config_DeviceFlags_Icon_Update_Dialog div.icons i.selected{opacity:1;color:inherit;}#Config_DeviceFlags_BulkAssign_ModeDialog>div{margin-top:6px;background-color:#fff;line-height:1.3em;border:1px solid #ddd;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div{display:block;padding:4px;cursor:pointer;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div:not(:last-child){border-bottom:1px dashed #ddd;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div h5{font-size:1.1em;padding:4px 0;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div i{margin-right:4px;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.add:hover{background-color:#eeffde;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.add i{color:#60a917;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.override:hover{background-color:#ffe1de;}#Config_DeviceFlags_BulkAssign_ModeDialog>div>div.override i{color:#e51400;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief{margin:0 0 8px 0;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief .scopeDescBulkGenerate{font-weight:600;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples{margin:8px auto;width:300px;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples div{margin:2px 4px 2px 0;width:150px;float:left;}#Config_DeviceFlags_BulkAssign_AssignDialog .brief div.examples div.example1{width:100px;}#Config_DeviceFlags_BulkAssign_AssignDialog div.loading{display:none;padding:40px 0;text-align:center;}#Config_DeviceFlags_BulkAssign_AssignDialog div.loading i{margin-right:10px;color:#1e6dab;}#Config_DeviceFlags_BulkAssign_AssignDialog #Config_DeviceFlags_BulkAssign_AssignDialog_DeviceSerialNumbers{height:200px;margin-bottom:8px;}#Config_DeviceFlags_BulkAssign_AssignDialog textarea{width:calc(100% - .5em);margin:0;}#Config_DeviceFlags_BulkAssign_AssignDialog.loading>div.loading{display:block;}#Config_DeviceFlags_BulkAssign_AssignDialog.loading>form{display:none;}#DeviceFlag_Export #DeviceFlag_Export_Fields #DeviceFlag_Export_Fields_Defaults{font-size:.75em;}#DeviceFlag_Export #DeviceFlag_Export_Fields th{font-size:1.05em;}#DeviceFlag_Export #DeviceFlag_Export_Fields th span{margin-top:4px;font-size:.8em;}#DeviceFlag_Export_Download_Dialog{padding-top:20px;text-align:center;}#DeviceFlag_Export_Download_Dialog h4{margin-bottom:30px;}#DeviceFlag_Export_Download_Dialog a{margin-bottom:20px;}#DeviceFlag_Export_Exporting{padding-top:50px;text-align:center;}#DeviceFlag_Export_Exporting i{margin-right:10px;color:#1e6dab;}#DocumentTemplate_BulkGenerate .actions{padding-bottom:.5em;text-align:right;}#DocumentTemplate_BulkGenerate table{max-width:850px;margin:auto;}#DocumentTemplate_BulkGenerate table tr.when-none{text-align:center;font-style:italic;}.dialog-item-picker{height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}.dialog-item-picker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}.dialog-item-picker>div:hover{background-color:#f4f4f4;}.dialog-item-picker>div.selected,.dialog-item-picker>div.selected:hover{background-color:#eee;}.dialog-item-picker>div.disabled{cursor:not-allowed;background-color:#f4f4f4;} \ No newline at end of file diff --git a/Disco.Web/ClientSource/Style/Job.css b/Disco.Web/ClientSource/Style/Job.css index 89f566fb..c68600fd 100644 --- a/Disco.Web/ClientSource/Style/Job.css +++ b/Disco.Web/ClientSource/Style/Job.css @@ -97,6 +97,32 @@ height: 50px; font-size: 0.6em; } +#layout_PageHeading #pendingEnrollments { + position: relative; + float: right; + border: 1px dashed #ddd; + background-color: #fff; + font-size: 0.6em; + line-height: 1em; + padding: 10px 10px 4px 70px; + text-align: right; + height: 50px; +} +#layout_PageHeading #pendingEnrollments i { + position: absolute; + display: block; + height: 64px; + width: 64px; + vertical-align: middle; + margin-left: -75px; + top: 8px; + font-size: 50px; + color: #e51400; +} +#layout_PageHeading #pendingEnrollments a.button { + font-size: 12px; + margin-top: 8px; +} #Jobs_Index_MyJobs { margin-bottom: 10px; } diff --git a/Disco.Web/ClientSource/Style/Job.less b/Disco.Web/ClientSource/Style/Job.less index c7f87ae6..fd3ccae4 100644 --- a/Disco.Web/ClientSource/Style/Job.less +++ b/Disco.Web/ClientSource/Style/Job.less @@ -25,6 +25,35 @@ height: 50px; font-size: 0.6em; } + + #pendingEnrollments { + position: relative; + float: right; + border: 1px dashed #ddd; + background-color: @white; + font-size: 0.6em; + line-height: 1em; + padding: 10px 10px 4px 70px; + text-align: right; + height: 50px; + + i { + position: absolute; + display: block; + height: 64px; + width: 64px; + vertical-align: middle; + margin-left: -75px; + top: 8px; + font-size: 50px; + color: @ButtonAlertColour; + } + + a.button { + font-size: @FontSizeDefault; + margin-top: 8px; + } + } } #Jobs_Index_MyJobs { diff --git a/Disco.Web/ClientSource/Style/Job.min.css b/Disco.Web/ClientSource/Style/Job.min.css index 30dae768..130220f7 100644 --- a/Disco.Web/ClientSource/Style/Job.min.css +++ b/Disco.Web/ClientSource/Style/Job.min.css @@ -1 +1 @@ -.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#layout_PageHeading #Job_Show_Status{margin-left:20px;display:inline-block;height:50px;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:lighter;font-stretch:condensed;font-size:.7em;text-transform:uppercase;}#layout_PageHeading #Job_Show_Status span.icon{margin-right:6px;}#layout_PageHeading #Job_Show_QueueStatus{display:inline-block;float:right;height:50px;font-size:.6em;}#Jobs_Index_MyJobs{margin-bottom:10px;}#Jobs_Index_MyJobs .jobTable>h3,#Jobs_Index_StaleJobs .jobTable>h3{color:#555;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:normal;font-size:12px;margin:8px 0 20px 20px!important;text-transform:uppercase;}#Job_List{padding-top:20px;}#Job_List>.jobTable>h3{margin:30px 0 50px 20px!important;}#Job_Show #Job_Show_Subjects{table-layout:fixed;}#Job_Show #Job_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div{position:relative;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#Job_Show #Job_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type>h2{text-transform:uppercase;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type>table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_1,#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_2{padding-left:16px;font-weight:600;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_Update{margin-left:16px;font-size:.9em;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_Update_Dialog{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates{padding-bottom:6px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table>tbody>tr>td{vertical-align:middle;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table>tbody>tr>td:first-child{font-weight:600;width:60px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_GenerateDocument_Container{padding-top:4px;}#Job_Show #Job_Show_Subjects #Job_Show_Device>div{padding-left:102px;min-height:100px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Model_Image{position:absolute;left:0;top:0;height:96px;width:96px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details{float:left;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Flags{margin:4px 0;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Flags>i{cursor:default;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Flags>i>.details{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HWar,#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HNWar{float:right;border-left:1px dashed #ddd;padding-left:4px;margin-right:2px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HWar_Details_Button,#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HNWar_Details_Button{font-size:.9em;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table>tbody>tr>td:first-child{width:62px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Photo_Container{float:left;padding-right:4px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Photo{height:auto;max-width:96px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags{margin:4px 0;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags>i{cursor:default;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags>i>.details{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Subjects_Actions>td{padding-top:4px;}#Job_Show #Job_Show_Subjects #Job_Show_Subjects_Actions #Job_Show_Device_Actions{padding-left:111px;}#jobDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:0;padding:0;}#jobDetailTabs #jobDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:0;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#jobDetailTabs #jobDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#jobDetailTabs #jobDetailTabItems>li>a{padding:5px 8px;}#jobDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:0;background-color:#eee;}#jobShowResources #CommentsContainer{padding:0;width:375px;}#jobShowResources #Comments{height:300px;padding:0;border:1px solid #ccc;background-color:#fff;}#jobShowResources #Comments div.commentOutput{height:249px;overflow:auto;background-color:#fafafa;color:#000;}#jobShowResources #Comments div.commentOutput>div{padding:3px;margin:4px 6px;border-bottom:1px solid #ccc;}#jobShowResources #Comments div.commentOutput>div span.author{color:#444;display:block;font-weight:600;font-size:.95em;float:left;}#jobShowResources #Comments div.commentOutput>div span.timestamp{display:block;float:right;font-size:.9em;font-style:italic;}#jobShowResources #Comments div.commentOutput>div div.comment{clear:both;display:block;margin-left:4px;}#jobShowResources #Comments div.commentOutput>div div.comment p{line-height:1.2em;padding-bottom:.2em;}#jobShowResources #Comments div.commentOutput>div div.comment h1,#jobShowResources #Comments div.commentOutput>div div.comment h2,#jobShowResources #Comments div.commentOutput>div div.comment h3,#jobShowResources #Comments div.commentOutput>div div.comment h4,#jobShowResources #Comments div.commentOutput>div div.comment h5{font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:600;font-size:14px;margin:2px 0!important;}#jobShowResources #Comments div.commentOutput>div div.comment hr{margin-top:.2em;}#jobShowResources #Comments div.commentOutput>div div.comment code{font-size:.9em;}#jobShowResources #Comments div.commentOutput>div:hover span.remove{opacity:.5;}#jobShowResources #Comments div.commentOutput>div span.remove{font-size:1.2em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#jobShowResources #Comments div.commentOutput>div span.remove:hover{opacity:1;}#jobShowResources #Comments div.commentOutput>div:last-child{border-bottom:0;}#jobShowResources #Comments.cannotAddLogs div.commentOutput{height:300px;}#jobShowResources #Comments div.commentInput{border-top:1px solid #ccc;height:40px;padding:5px;}#jobShowResources #Comments div.commentInput textarea.commentInput{border:0;padding:0;margin:0;width:325px;height:40px;min-height:40px;overflow:auto;float:left;resize:none;}#jobShowResources #Comments div.commentInput span.action{color:#333;font-size:1.5em;display:block;margin:0;cursor:pointer;float:left;border:1px solid #fff;padding:.5em;}#jobShowResources #Comments div.commentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Comments div.commentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#jobShowResources #Comments div.commentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#jobShowResources #AttachmentsContainer{padding:0;}#jobShowResources #Attachments{position:relative;height:300px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc;background-color:#fff;}#jobShowResources #Attachments div.attachmentOutput{position:relative;height:249px;overflow:auto;}#jobShowResources #Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}#jobShowResources #Attachments div.attachmentOutput>a span.comments,#jobShowResources #Attachments div.attachmentOutput>a span.author,#jobShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#jobShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#jobShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#jobShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#jobShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#jobShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#jobShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#jobShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}#jobShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#jobShowResources #Attachments.cannotAddAttachments div.attachmentOutput{height:300px;}#jobShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:5px;}#jobShowResources #Attachments div.attachmentInput span.action{color:#333;display:block;margin:0 4px 0 0;font-size:1.5em;cursor:pointer;float:right;border:1px solid #fff;padding:.5em;}#jobShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#jobShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#Job_Show_Job_Actions_AddQueue_Dialog{height:400px;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker{position:absolute;width:250px;height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div:hover{background-color:#f4f4f4;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div.selected,#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div.selected:hover{background-color:#eee;}#Job_Show_Job_Actions_AddQueue_Dialog .details{display:none;position:absolute;left:280px;top:30px;}#Job_Show_Job_Actions_AddQueue_Dialog .details h4{margin-bottom:4px;}#Job_Show_Job_Actions_AddQueue_Dialog .details>div{margin:5px 0;}#Job_Show_Job_Actions_AddQueue_Dialog .details select{min-width:270px;}#Job_Show_Job_Actions_AddQueue_Dialog .details textarea{min-width:270px;height:100px;}#jobDetailTab-Queues #jobQueues{border:solid 1px #d8d8d8;border-collapse:collapse;table-layout:fixed;}#jobDetailTab-Queues #jobQueues td{border:solid 1px #d8d8d8;background-color:#fff;}#jobDetailTab-Queues #jobQueues th{background-color:#eee;border:solid 1px #d8d8d8;}#jobDetailTab-Queues #jobQueues i.fa-edit{float:right;margin-top:4px;font-size:1.1em;cursor:pointer;display:none;color:#335a87;}#jobDetailTab-Queues #jobQueues i.fa-edit:hover{color:#5e8cc2;}#jobDetailTab-Queues #jobQueues td:hover i.fa-edit{display:inline-block;}#jobDetailTab-Queues #jobQueues th.name{width:200px;}#jobDetailTab-Queues #jobQueues th.sla{width:130px;}#jobDetailTab-Queues #jobQueues tr.removed td{background-color:#f4f4f4;}#jobDetailTab-Queues #jobQueues td.name{vertical-align:middle;}#jobDetailTab-Queues #jobQueues td.name .fa-stack{line-height:1.6em;}#jobDetailTab-Queues #jobQueues td.added .when,#jobDetailTab-Queues #jobQueues td.removed .when{font-style:italic;margin-top:4px;font-size:.9em;}#jobDetailTab-Queues #jobQueues td.added .commentsRaw,#jobDetailTab-Queues #jobQueues td.removed .commentsRaw{display:none;}#jobDetailTab-Queues #jobQueues td.removed.na{vertical-align:middle;text-align:center;}#jobDetailTab-Queues #jobQueues td.sla{vertical-align:middle;}#jobDetailTab-Queues #jobQueues td.sla.overdue{color:#e51400;}#jobDetailTab-Queues>.none{text-align:center;padding:30px 0;font-style:italic;background-color:#fff;}#Job_Show_Queues_Actions_EditAddedComment_Dialog h4,#Job_Show_Queues_Actions_EditRemovedComment_Dialog h4,#Job_Show_Queues_Actions_EditSla_Dialog h4{margin-bottom:4px;}#Job_Show_Queues_Actions_EditAddedComment_Dialog_Comment{width:280px;}#Job_Show_Queues_Actions_EditRemovedComment_Dialog_Comment{width:280px;}#jobComponents{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobComponents td{border:solid 1px #d8d8d8;background-color:#fff;}#jobComponents th{background-color:#eee;border:solid 1px #d8d8d8;}#jobComponents tr th.actions{width:18px;}#jobComponents tr input.description{width:400px;}#jobComponents tr input.cost{width:150px;}#jobComponents tr span.remove{font-size:1.5em;color:#e51400;cursor:pointer;opacity:.5;}#jobComponents tr span.remove:hover{opacity:1;}#jobComponents tr input.updating{background-position:right center;background-repeat:no-repeat;background-image:url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA);}#jobComponents tr .totalCost{font-weight:600;}#jobWarrantyDetails{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobWarrantyDetails td{border:solid 1px #d8d8d8;background-color:#fff;}#jobWarrantyDetails th{background-color:#eee;border:solid 1px #d8d8d8;}#jobWarrantyDetails tr th{width:200px;text-align:right;}#jobNonWarrantyFinance{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyFinance td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyFinance th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyFinance tr th{width:200px;text-align:right;}#jobNonWarrantyRepairs{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyRepairs td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyRepairs th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyRepairs tr th{width:200px;text-align:right;}#jobNonWarrantyInsurance{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyInsurance td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyInsurance th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyInsurance tr th{width:200px;text-align:right;}#jobNonWarrantyInsurance tr td textarea{width:400px;}#jobFlags{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobFlags td{border:solid 1px #d8d8d8;background-color:#fff;}#jobFlags th{background-color:#eee;border:solid 1px #d8d8d8;}#jobFlags tr th{width:200px;text-align:right;}#warrantyJobForm #warrantyDisclosedInformation table{font-size:.9em;}#warrantyJobForm #warrantyDisclosedInformation table tr:not(:last-child){border-bottom:1px dashed #aaa;}#warrantyJobForm #warrantyDisclosedInformation table th{padding:2px;font-weight:600;width:200px;}#warrantyJobForm #warrantyDisclosedInformation table td{padding:2px;}#warrantyJobFaultDescription #FaultDescription{width:600px;height:250px;}#publishJobAttachments{border:1px solid #ccc;background-color:#fff;position:relative;max-height:249px;overflow:auto;}#publishJobAttachments>a{display:block;float:left;height:48px;width:261px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}#publishJobAttachments>a span.comments,#publishJobAttachments>a span.author,#publishJobAttachments>a span.timestamp{display:block;float:left;width:188px;overflow:hidden;height:16px;}#publishJobAttachments>a span.author{color:#888;width:150px;}#publishJobAttachments>a span.timestamp{color:#888;font-style:italic;}#publishJobAttachments>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#publishJobAttachments>a span.icon img{height:48px;width:48px;}#publishJobAttachments>a span.icon img.loading{display:none;}#publishJobAttachments>a input.select{display:block;float:left;line-height:48px;margin-right:2px;width:20px;}#publishJobAttachments>a:hover{background-color:#ededed;border:1px solid #ccc;}#publishJobAttachments>a:hover span.remove{opacity:.5;}#publishJobAttachments>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}#publishJobAttachments>a span.remove:hover{opacity:1;}#submitDialog{padding-top:50px;text-align:center;}#submitDialog i{margin-right:10px;color:#1e6dab;}#repairJobForm #repairDisclosedInformation table{font-size:.9em;}#repairJobForm #repairDisclosedInformation table tr:not(:last-child){border-bottom:1px dashed #aaa;}#repairJobForm #repairDisclosedInformation table th{padding:2px;font-weight:600;width:200px;}#repairJobForm #repairDisclosedInformation table td{padding:2px;}#repairJobRepairDescription #RepairDescription{width:600px;height:250px;}#createJob_Container{margin:0 -20px;}#createJob_Container img.modelImage{width:64px;height:64px;}#createJob_Container .createJob_Component{margin:0 10px;padding:5px 0;border-bottom:1px dashed #ccc;}#createJob_Container .createJob_Component:last-child{border-bottom:0;}#createJob_Container #createJob_Type{border:1px solid #ccc;background-color:#f2f2f2;padding:2px 4px;}#createJob_Container #createJob_SubTypes{margin:-1px 0 0 20px;border:1px solid #ccc;border-top:0;padding:2px 4px;background-color:#f2f2f2;}#createJob_Container #createJob_SubTypes .createJob_SubType{display:none;}#createJob_Container #createJob_Type li,#createJob_Container #createJob_SubTypes li{margin:2px 0;padding:0 0 0 4px;}#createJob_Container #createJob_Type li i,#createJob_Container #createJob_SubTypes li i{display:none;cursor:default;font-weight:normal;}#createJob_Container #createJob_Type li:hover i,#createJob_Container #createJob_SubTypes li:hover i{display:inline-block;}#createJob_Container #createJob_Type li.highlight,#createJob_Container #createJob_SubTypes li.highlight{background-color:#cddbec;font-weight:600;color:#000;}#createJob_Container #createJob_Type li.highlight i,#createJob_Container #createJob_SubTypes li.highlight i{display:inline-block;}#createJob_Container #createJob_SubTypes.isQuickLog li i{display:none;}#createJob_Container #createJob_CommentsContainer #Comments{width:100%;min-width:500px;}#createJob_Container #createJob_QuickLogAutoCloseContainer h3{margin-bottom:4px;}#createJob_Container #createJob_QuickLogAutoCloseContainer input{margin-left:4px;}#createJob_Container #createJob_QuickLogTaskTimeContainer{display:none;margin:4px 0 0 25px;padding:4px 4px;background-color:#f2f2f2;border-left:4px solid #d8d8d8;}#createJob_Container #createJob_QuickLogTaskTimeContainer h4{display:inline-block;padding-right:10px;}#createJob_Container #createJob_QuickLogTaskTimeContainer label{margin-right:15px;}#createJob_Container #createJob_QuickLogTaskTimeContainer #createJob_TaskTimeOtherMinutesContainer{display:none;}#createJob_Container #createJob_QuickLogTaskTimeContainer #createJob_TaskTimeOtherMinutes{width:50px;}#createJobRedirect h1{margin-top:60px!important;margin-bottom:60px;}#createJobRedirect>div{text-align:right;}#createJobRedirect>div i{margin-right:10px;} \ No newline at end of file +.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#layout_PageHeading #Job_Show_Status{margin-left:20px;display:inline-block;height:50px;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:lighter;font-stretch:condensed;font-size:.7em;text-transform:uppercase;}#layout_PageHeading #Job_Show_Status span.icon{margin-right:6px;}#layout_PageHeading #Job_Show_QueueStatus{display:inline-block;float:right;height:50px;font-size:.6em;}#layout_PageHeading #pendingEnrollments{position:relative;float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#layout_PageHeading #pendingEnrollments i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-75px;top:8px;font-size:50px;color:#e51400;}#layout_PageHeading #pendingEnrollments a.button{font-size:12px;margin-top:8px;}#Jobs_Index_MyJobs{margin-bottom:10px;}#Jobs_Index_MyJobs .jobTable>h3,#Jobs_Index_StaleJobs .jobTable>h3{color:#555;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:normal;font-size:12px;margin:8px 0 20px 20px!important;text-transform:uppercase;}#Job_List{padding-top:20px;}#Job_List>.jobTable>h3{margin:30px 0 50px 20px!important;}#Job_Show #Job_Show_Subjects{table-layout:fixed;}#Job_Show #Job_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div{position:relative;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#Job_Show #Job_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#Job_Show #Job_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type>h2{text-transform:uppercase;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type>table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_1,#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_2{padding-left:16px;font-weight:600;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_Update{margin-left:16px;font-size:.9em;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_SubTypes_Update_Dialog{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates{padding-bottom:6px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table>tbody>tr>td{vertical-align:middle;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Dates table>tbody>tr>td:first-child{font-weight:600;width:60px;}#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_GenerateDocument_Container{padding-top:4px;}#Job_Show #Job_Show_Subjects #Job_Show_Device>div{padding-left:102px;min-height:100px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Model_Image{position:absolute;left:0;top:0;height:96px;width:96px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details{float:left;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Flags{margin:4px 0;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Flags>i{cursor:default;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Flags>i>.details{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HWar,#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HNWar{float:right;border-left:1px dashed #ddd;padding-left:4px;margin-right:2px;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HWar_Details_Button,#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_Details_HNWar_Details_Button{font-size:.9em;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table{table-layout:fixed;}#Job_Show #Job_Show_Subjects #Job_Show_Device #Job_Show_Device_DeviceHeld table>tbody>tr>td:first-child{width:62px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Photo_Container{float:left;padding-right:4px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Photo{height:auto;max-width:96px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags{margin:4px 0;font-size:16px;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags>i{cursor:default;}#Job_Show #Job_Show_Subjects #Job_Show_User #Job_Show_User_Flags>i>.details{display:none;}#Job_Show #Job_Show_Subjects #Job_Show_Subjects_Actions>td{padding-top:4px;}#Job_Show #Job_Show_Subjects #Job_Show_Subjects_Actions #Job_Show_Device_Actions{padding-left:111px;}#jobDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:0;padding:0;}#jobDetailTabs #jobDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:0;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#jobDetailTabs #jobDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#jobDetailTabs #jobDetailTabItems>li>a{padding:5px 8px;}#jobDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:0;background-color:#eee;}#jobShowResources #CommentsContainer{padding:0;width:375px;}#jobShowResources #Comments{height:300px;padding:0;border:1px solid #ccc;background-color:#fff;}#jobShowResources #Comments div.commentOutput{height:249px;overflow:auto;background-color:#fafafa;color:#000;}#jobShowResources #Comments div.commentOutput>div{padding:3px;margin:4px 6px;border-bottom:1px solid #ccc;}#jobShowResources #Comments div.commentOutput>div span.author{color:#444;display:block;font-weight:600;font-size:.95em;float:left;}#jobShowResources #Comments div.commentOutput>div span.timestamp{display:block;float:right;font-size:.9em;font-style:italic;}#jobShowResources #Comments div.commentOutput>div div.comment{clear:both;display:block;margin-left:4px;}#jobShowResources #Comments div.commentOutput>div div.comment p{line-height:1.2em;padding-bottom:.2em;}#jobShowResources #Comments div.commentOutput>div div.comment h1,#jobShowResources #Comments div.commentOutput>div div.comment h2,#jobShowResources #Comments div.commentOutput>div div.comment h3,#jobShowResources #Comments div.commentOutput>div div.comment h4,#jobShowResources #Comments div.commentOutput>div div.comment h5{font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:600;font-size:14px;margin:2px 0!important;}#jobShowResources #Comments div.commentOutput>div div.comment hr{margin-top:.2em;}#jobShowResources #Comments div.commentOutput>div div.comment code{font-size:.9em;}#jobShowResources #Comments div.commentOutput>div:hover span.remove{opacity:.5;}#jobShowResources #Comments div.commentOutput>div span.remove{font-size:1.2em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#jobShowResources #Comments div.commentOutput>div span.remove:hover{opacity:1;}#jobShowResources #Comments div.commentOutput>div:last-child{border-bottom:0;}#jobShowResources #Comments.cannotAddLogs div.commentOutput{height:300px;}#jobShowResources #Comments div.commentInput{border-top:1px solid #ccc;height:40px;padding:5px;}#jobShowResources #Comments div.commentInput textarea.commentInput{border:0;padding:0;margin:0;width:325px;height:40px;min-height:40px;overflow:auto;float:left;resize:none;}#jobShowResources #Comments div.commentInput span.action{color:#333;font-size:1.5em;display:block;margin:0;cursor:pointer;float:left;border:1px solid #fff;padding:.5em;}#jobShowResources #Comments div.commentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Comments div.commentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#jobShowResources #Comments div.commentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#jobShowResources #AttachmentsContainer{padding:0;}#jobShowResources #Attachments{position:relative;height:300px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc;background-color:#fff;}#jobShowResources #Attachments div.attachmentOutput{position:relative;height:249px;overflow:auto;}#jobShowResources #Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}#jobShowResources #Attachments div.attachmentOutput>a span.comments,#jobShowResources #Attachments div.attachmentOutput>a span.author,#jobShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#jobShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#jobShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#jobShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#jobShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#jobShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#jobShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#jobShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}#jobShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#jobShowResources #Attachments.cannotAddAttachments div.attachmentOutput{height:300px;}#jobShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:5px;}#jobShowResources #Attachments div.attachmentInput span.action{color:#333;display:block;margin:0 4px 0 0;font-size:1.5em;cursor:pointer;float:right;border:1px solid #fff;padding:.5em;}#jobShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#jobShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#jobShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#Job_Show_Job_Actions_AddQueue_Dialog{height:400px;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker{position:absolute;width:250px;height:300px;overflow-y:auto;background-color:#fcfcfc;border:1px solid #ccc;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div{background-color:#fff;border-bottom:1px solid #ddd;padding:6px 0 6px 6px;cursor:pointer;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div:hover{background-color:#f4f4f4;}#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div.selected,#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker>div.selected:hover{background-color:#eee;}#Job_Show_Job_Actions_AddQueue_Dialog .details{display:none;position:absolute;left:280px;top:30px;}#Job_Show_Job_Actions_AddQueue_Dialog .details h4{margin-bottom:4px;}#Job_Show_Job_Actions_AddQueue_Dialog .details>div{margin:5px 0;}#Job_Show_Job_Actions_AddQueue_Dialog .details select{min-width:270px;}#Job_Show_Job_Actions_AddQueue_Dialog .details textarea{min-width:270px;height:100px;}#jobDetailTab-Queues #jobQueues{border:solid 1px #d8d8d8;border-collapse:collapse;table-layout:fixed;}#jobDetailTab-Queues #jobQueues td{border:solid 1px #d8d8d8;background-color:#fff;}#jobDetailTab-Queues #jobQueues th{background-color:#eee;border:solid 1px #d8d8d8;}#jobDetailTab-Queues #jobQueues i.fa-edit{float:right;margin-top:4px;font-size:1.1em;cursor:pointer;display:none;color:#335a87;}#jobDetailTab-Queues #jobQueues i.fa-edit:hover{color:#5e8cc2;}#jobDetailTab-Queues #jobQueues td:hover i.fa-edit{display:inline-block;}#jobDetailTab-Queues #jobQueues th.name{width:200px;}#jobDetailTab-Queues #jobQueues th.sla{width:130px;}#jobDetailTab-Queues #jobQueues tr.removed td{background-color:#f4f4f4;}#jobDetailTab-Queues #jobQueues td.name{vertical-align:middle;}#jobDetailTab-Queues #jobQueues td.name .fa-stack{line-height:1.6em;}#jobDetailTab-Queues #jobQueues td.added .when,#jobDetailTab-Queues #jobQueues td.removed .when{font-style:italic;margin-top:4px;font-size:.9em;}#jobDetailTab-Queues #jobQueues td.added .commentsRaw,#jobDetailTab-Queues #jobQueues td.removed .commentsRaw{display:none;}#jobDetailTab-Queues #jobQueues td.removed.na{vertical-align:middle;text-align:center;}#jobDetailTab-Queues #jobQueues td.sla{vertical-align:middle;}#jobDetailTab-Queues #jobQueues td.sla.overdue{color:#e51400;}#jobDetailTab-Queues>.none{text-align:center;padding:30px 0;font-style:italic;background-color:#fff;}#Job_Show_Queues_Actions_EditAddedComment_Dialog h4,#Job_Show_Queues_Actions_EditRemovedComment_Dialog h4,#Job_Show_Queues_Actions_EditSla_Dialog h4{margin-bottom:4px;}#Job_Show_Queues_Actions_EditAddedComment_Dialog_Comment{width:280px;}#Job_Show_Queues_Actions_EditRemovedComment_Dialog_Comment{width:280px;}#jobComponents{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobComponents td{border:solid 1px #d8d8d8;background-color:#fff;}#jobComponents th{background-color:#eee;border:solid 1px #d8d8d8;}#jobComponents tr th.actions{width:18px;}#jobComponents tr input.description{width:400px;}#jobComponents tr input.cost{width:150px;}#jobComponents tr span.remove{font-size:1.5em;color:#e51400;cursor:pointer;opacity:.5;}#jobComponents tr span.remove:hover{opacity:1;}#jobComponents tr input.updating{background-position:right center;background-repeat:no-repeat;background-image:url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA);}#jobComponents tr .totalCost{font-weight:600;}#jobWarrantyDetails{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobWarrantyDetails td{border:solid 1px #d8d8d8;background-color:#fff;}#jobWarrantyDetails th{background-color:#eee;border:solid 1px #d8d8d8;}#jobWarrantyDetails tr th{width:200px;text-align:right;}#jobNonWarrantyFinance{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyFinance td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyFinance th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyFinance tr th{width:200px;text-align:right;}#jobNonWarrantyRepairs{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyRepairs td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyRepairs th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyRepairs tr th{width:200px;text-align:right;}#jobNonWarrantyInsurance{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobNonWarrantyInsurance td{border:solid 1px #d8d8d8;background-color:#fff;}#jobNonWarrantyInsurance th{background-color:#eee;border:solid 1px #d8d8d8;}#jobNonWarrantyInsurance tr th{width:200px;text-align:right;}#jobNonWarrantyInsurance tr td textarea{width:400px;}#jobFlags{border:solid 1px #d8d8d8;border-collapse:collapse;}#jobFlags td{border:solid 1px #d8d8d8;background-color:#fff;}#jobFlags th{background-color:#eee;border:solid 1px #d8d8d8;}#jobFlags tr th{width:200px;text-align:right;}#warrantyJobForm #warrantyDisclosedInformation table{font-size:.9em;}#warrantyJobForm #warrantyDisclosedInformation table tr:not(:last-child){border-bottom:1px dashed #aaa;}#warrantyJobForm #warrantyDisclosedInformation table th{padding:2px;font-weight:600;width:200px;}#warrantyJobForm #warrantyDisclosedInformation table td{padding:2px;}#warrantyJobFaultDescription #FaultDescription{width:600px;height:250px;}#publishJobAttachments{border:1px solid #ccc;background-color:#fff;position:relative;max-height:249px;overflow:auto;}#publishJobAttachments>a{display:block;float:left;height:48px;width:261px;padding:2px;margin:2px;font-size:.95em;border:1px solid #fff;color:#000;text-decoration:none;}#publishJobAttachments>a span.comments,#publishJobAttachments>a span.author,#publishJobAttachments>a span.timestamp{display:block;float:left;width:188px;overflow:hidden;height:16px;}#publishJobAttachments>a span.author{color:#888;width:150px;}#publishJobAttachments>a span.timestamp{color:#888;font-style:italic;}#publishJobAttachments>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#publishJobAttachments>a span.icon img{height:48px;width:48px;}#publishJobAttachments>a span.icon img.loading{display:none;}#publishJobAttachments>a input.select{display:block;float:left;line-height:48px;margin-right:2px;width:20px;}#publishJobAttachments>a:hover{background-color:#ededed;border:1px solid #ccc;}#publishJobAttachments>a:hover span.remove{opacity:.5;}#publishJobAttachments>a span.remove{font-size:1.2em;color:#e51400;margin-left:2px;cursor:pointer;opacity:0;}#publishJobAttachments>a span.remove:hover{opacity:1;}#submitDialog{padding-top:50px;text-align:center;}#submitDialog i{margin-right:10px;color:#1e6dab;}#repairJobForm #repairDisclosedInformation table{font-size:.9em;}#repairJobForm #repairDisclosedInformation table tr:not(:last-child){border-bottom:1px dashed #aaa;}#repairJobForm #repairDisclosedInformation table th{padding:2px;font-weight:600;width:200px;}#repairJobForm #repairDisclosedInformation table td{padding:2px;}#repairJobRepairDescription #RepairDescription{width:600px;height:250px;}#createJob_Container{margin:0 -20px;}#createJob_Container img.modelImage{width:64px;height:64px;}#createJob_Container .createJob_Component{margin:0 10px;padding:5px 0;border-bottom:1px dashed #ccc;}#createJob_Container .createJob_Component:last-child{border-bottom:0;}#createJob_Container #createJob_Type{border:1px solid #ccc;background-color:#f2f2f2;padding:2px 4px;}#createJob_Container #createJob_SubTypes{margin:-1px 0 0 20px;border:1px solid #ccc;border-top:0;padding:2px 4px;background-color:#f2f2f2;}#createJob_Container #createJob_SubTypes .createJob_SubType{display:none;}#createJob_Container #createJob_Type li,#createJob_Container #createJob_SubTypes li{margin:2px 0;padding:0 0 0 4px;}#createJob_Container #createJob_Type li i,#createJob_Container #createJob_SubTypes li i{display:none;cursor:default;font-weight:normal;}#createJob_Container #createJob_Type li:hover i,#createJob_Container #createJob_SubTypes li:hover i{display:inline-block;}#createJob_Container #createJob_Type li.highlight,#createJob_Container #createJob_SubTypes li.highlight{background-color:#cddbec;font-weight:600;color:#000;}#createJob_Container #createJob_Type li.highlight i,#createJob_Container #createJob_SubTypes li.highlight i{display:inline-block;}#createJob_Container #createJob_SubTypes.isQuickLog li i{display:none;}#createJob_Container #createJob_CommentsContainer #Comments{width:100%;min-width:500px;}#createJob_Container #createJob_QuickLogAutoCloseContainer h3{margin-bottom:4px;}#createJob_Container #createJob_QuickLogAutoCloseContainer input{margin-left:4px;}#createJob_Container #createJob_QuickLogTaskTimeContainer{display:none;margin:4px 0 0 25px;padding:4px 4px;background-color:#f2f2f2;border-left:4px solid #d8d8d8;}#createJob_Container #createJob_QuickLogTaskTimeContainer h4{display:inline-block;padding-right:10px;}#createJob_Container #createJob_QuickLogTaskTimeContainer label{margin-right:15px;}#createJob_Container #createJob_QuickLogTaskTimeContainer #createJob_TaskTimeOtherMinutesContainer{display:none;}#createJob_Container #createJob_QuickLogTaskTimeContainer #createJob_TaskTimeOtherMinutes{width:50px;}#createJobRedirect h1{margin-top:60px!important;margin-bottom:60px;}#createJobRedirect>div{text-align:right;}#createJobRedirect>div i{margin-right:10px;} \ No newline at end of file diff --git a/Disco.Web/Controllers/JobController.cs b/Disco.Web/Controllers/JobController.cs index 3f070db1..8f427c55 100644 --- a/Disco.Web/Controllers/JobController.cs +++ b/Disco.Web/Controllers/JobController.cs @@ -4,6 +4,7 @@ using Disco.Models.Services.Jobs.JobLists; using Disco.Models.UI.Job; using Disco.Services; using Disco.Services.Authorization; +using Disco.Services.Devices.Enrolment; using Disco.Services.Jobs; using Disco.Services.Jobs.JobLists; using Disco.Services.Jobs.JobQueues; @@ -46,6 +47,9 @@ namespace Disco.Web.Controllers if (Authorization.Has(Claims.Job.ShowDailyChart)) m.DailyOpenedClosedStatistics = DailyOpenedClosed.Data(Database, true); + if (Authorization.Has(Claims.Device.Actions.EnrolDevices)) + m.PendingEnrollments = WindowsDeviceEnrolment.GetPendingEnrolments(); + // UI Extensions UIExtensions.ExecuteExtensions(this.ControllerContext, m); diff --git a/Disco.Web/Disco.Web.csproj b/Disco.Web/Disco.Web.csproj index 11e08244..1c9bc063 100644 --- a/Disco.Web/Disco.Web.csproj +++ b/Disco.Web/Disco.Web.csproj @@ -208,6 +208,7 @@ + @@ -678,6 +679,9 @@ T4MVC.tt + + T4MVC.tt + T4MVC.tt @@ -1339,30 +1343,30 @@ RazorGenerator _DeviceGroupDocumentBulkGenerate.generated.cs - + RazorGenerator Create.generated.cs - - + + RazorGenerator Export.generated.cs - - + + RazorGenerator Index.generated.cs - - + + RazorGenerator Show.generated.cs - + RazorGenerator Create.generated.cs - + RazorGenerator Export.generated.cs - + RazorGenerator Index.generated.cs @@ -1505,7 +1509,7 @@ Disco-DataTableHelpers.js Always - + @@ -1941,10 +1945,10 @@ RazorGenerator AddOffline.generated.cs - + RazorGenerator _Flags.generated.cs - + RazorGenerator ImportHeaders.generated.cs diff --git a/Disco.Web/Extensions/T4MVC/API.EnrollmentController.generated.cs b/Disco.Web/Extensions/T4MVC/API.EnrollmentController.generated.cs new file mode 100644 index 00000000..6f9fcd81 --- /dev/null +++ b/Disco.Web/Extensions/T4MVC/API.EnrollmentController.generated.cs @@ -0,0 +1,169 @@ +// +// This file was generated by a T4 template. +// Don't change it directly as your change would get overwritten. Instead, make changes +// to the .tt file (i.e. the T4 template) and save it to regenerate this file. + +// Make sure the compiler doesn't complain about missing Xml comments and CLS compliance +// 0108: suppress "Foo hides inherited member Foo. Use the new keyword if hiding was intended." when a controller and its abstract parent are both processed +// 0114: suppress "Foo.BarController.Baz()' hides inherited member 'Qux.BarController.Baz()'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword." when an action (with an argument) overrides an action in a parent controller +#pragma warning disable 1591, 3008, 3009, 0108, 0114 +#region T4MVC + +using System; +using System.Diagnostics; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using System.Web; +using System.Web.Hosting; +using System.Web.Mvc; +using System.Web.Mvc.Ajax; +using System.Web.Mvc.Html; +using System.Web.Routing; +using T4MVC; +namespace Disco.Web.Areas.API.Controllers +{ + public partial class EnrollmentController + { + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public EnrollmentController() { } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected EnrollmentController(Dummy d) { } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToAction(ActionResult result) + { + var callInfo = result.GetT4MVCResult(); + return RedirectToRoute(callInfo.RouteValueDictionary); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToAction(Task taskResult) + { + return RedirectToAction(taskResult.Result); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToActionPermanent(ActionResult result) + { + var callInfo = result.GetT4MVCResult(); + return RedirectToRoutePermanent(callInfo.RouteValueDictionary); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + protected RedirectToRouteResult RedirectToActionPermanent(Task taskResult) + { + return RedirectToActionPermanent(taskResult.Result); + } + + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult ResolveSessionPending() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ResolveSessionPending); + } + [NonAction] + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public virtual System.Web.Mvc.ActionResult PendingTimeoutMinutes() + { + return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.PendingTimeoutMinutes); + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public EnrollmentController Actions { get { return MVC.API.Enrollment; } } + [GeneratedCode("T4MVC", "2.0")] + public readonly string Area = "API"; + [GeneratedCode("T4MVC", "2.0")] + public readonly string Name = "Enrollment"; + [GeneratedCode("T4MVC", "2.0")] + public const string NameConst = "Enrollment"; + [GeneratedCode("T4MVC", "2.0")] + static readonly ActionNamesClass s_actions = new ActionNamesClass(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionNamesClass ActionNames { get { return s_actions; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionNamesClass + { + public readonly string ResolveSessionPending = "ResolveSessionPending"; + public readonly string PendingTimeoutMinutes = "PendingTimeoutMinutes"; + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionNameConstants + { + public const string ResolveSessionPending = "ResolveSessionPending"; + public const string PendingTimeoutMinutes = "PendingTimeoutMinutes"; + } + + + static readonly ActionParamsClass_ResolveSessionPending s_params_ResolveSessionPending = new ActionParamsClass_ResolveSessionPending(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_ResolveSessionPending ResolveSessionPendingParams { get { return s_params_ResolveSessionPending; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_ResolveSessionPending + { + public readonly string sessionId = "sessionId"; + public readonly string approve = "approve"; + public readonly string reason = "reason"; + } + static readonly ActionParamsClass_PendingTimeoutMinutes s_params_PendingTimeoutMinutes = new ActionParamsClass_PendingTimeoutMinutes(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ActionParamsClass_PendingTimeoutMinutes PendingTimeoutMinutesParams { get { return s_params_PendingTimeoutMinutes; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ActionParamsClass_PendingTimeoutMinutes + { + public readonly string PendingTimeoutMinutes = "PendingTimeoutMinutes"; + } + static readonly ViewsClass s_views = new ViewsClass(); + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public ViewsClass Views { get { return s_views; } } + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public class ViewsClass + { + static readonly _ViewNamesClass s_ViewNames = new _ViewNamesClass(); + public _ViewNamesClass ViewNames { get { return s_ViewNames; } } + public class _ViewNamesClass + { + } + } + } + + [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] + public partial class T4MVC_EnrollmentController : Disco.Web.Areas.API.Controllers.EnrollmentController + { + public T4MVC_EnrollmentController() : base(Dummy.Instance) { } + + [NonAction] + partial void ResolveSessionPendingOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string sessionId, bool approve, string reason); + + [NonAction] + public override System.Web.Mvc.ActionResult ResolveSessionPending(string sessionId, bool approve, string reason) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ResolveSessionPending); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "sessionId", sessionId); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "approve", approve); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "reason", reason); + ResolveSessionPendingOverride(callInfo, sessionId, approve, reason); + return callInfo; + } + + [NonAction] + partial void PendingTimeoutMinutesOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int PendingTimeoutMinutes); + + [NonAction] + public override System.Web.Mvc.ActionResult PendingTimeoutMinutes(int PendingTimeoutMinutes) + { + var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.PendingTimeoutMinutes); + ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "PendingTimeoutMinutes", PendingTimeoutMinutes); + PendingTimeoutMinutesOverride(callInfo, PendingTimeoutMinutes); + return callInfo; + } + + } +} + +#endregion T4MVC +#pragma warning restore 1591, 3008, 3009, 0108, 0114 diff --git a/Disco.Web/Extensions/T4MVC/T4MVC.cs b/Disco.Web/Extensions/T4MVC/T4MVC.cs index 43f83097..1ea0e2b7 100644 --- a/Disco.Web/Extensions/T4MVC/T4MVC.cs +++ b/Disco.Web/Extensions/T4MVC/T4MVC.cs @@ -62,6 +62,7 @@ namespace T4MVC public Disco.Web.Areas.API.Controllers.DeviceProfileController DeviceProfile = new Disco.Web.Areas.API.Controllers.T4MVC_DeviceProfileController(); public Disco.Web.Areas.API.Controllers.DocumentTemplateController DocumentTemplate = new Disco.Web.Areas.API.Controllers.T4MVC_DocumentTemplateController(); public Disco.Web.Areas.API.Controllers.DocumentTemplatePackageController DocumentTemplatePackage = new Disco.Web.Areas.API.Controllers.T4MVC_DocumentTemplatePackageController(); + public Disco.Web.Areas.API.Controllers.EnrollmentController Enrollment = new Disco.Web.Areas.API.Controllers.T4MVC_EnrollmentController(); public Disco.Web.Areas.API.Controllers.ExpressionsController Expressions = new Disco.Web.Areas.API.Controllers.T4MVC_ExpressionsController(); public Disco.Web.Areas.API.Controllers.JobController Job = new Disco.Web.Areas.API.Controllers.T4MVC_JobController(); public Disco.Web.Areas.API.Controllers.JobPreferencesController JobPreferences = new Disco.Web.Areas.API.Controllers.T4MVC_JobPreferencesController(); diff --git a/Disco.Web/Models/Job/IndexModel.cs b/Disco.Web/Models/Job/IndexModel.cs index 1b032b55..4e1b3ec2 100644 --- a/Disco.Web/Models/Job/IndexModel.cs +++ b/Disco.Web/Models/Job/IndexModel.cs @@ -1,4 +1,5 @@ -using Disco.Models.Services.Job.Statistics; +using Disco.Models.ClientServices; +using Disco.Models.Services.Job.Statistics; using Disco.Models.Services.Jobs.JobLists; using Disco.Models.UI.Job; using System.Collections.Generic; @@ -9,6 +10,7 @@ namespace Disco.Web.Models.Job { public JobTableModel MyJobs { get; set; } public JobTableModel StaleJobs { get; set; } + public List PendingEnrollments { get; set; } public List DailyOpenedClosedStatistics { get; set; } } diff --git a/Disco.Web/Views/Job/Index.cshtml b/Disco.Web/Views/Job/Index.cshtml index b3d4e0be..f3e64fb9 100644 --- a/Disco.Web/Views/Job/Index.cshtml +++ b/Disco.Web/Views/Job/Index.cshtml @@ -22,7 +22,7 @@
@{ - var jsonData = new HtmlString(Json.Encode(Model.DailyOpenedClosedStatistics)); + var jsonData = new HtmlString(Json.Encode(Model.DailyOpenedClosedStatistics)); } } \ No newline at end of file diff --git a/Disco.Web/Views/Job/Index.generated.cs b/Disco.Web/Views/Job/Index.generated.cs index 2fae8a4e..d1539d15 100644 --- a/Disco.Web/Views/Job/Index.generated.cs +++ b/Disco.Web/Views/Job/Index.generated.cs @@ -131,7 +131,7 @@ WriteLiteral(">\r\n
\r\n"); #line 24 "..\..\Views\Job\Index.cshtml" - var jsonData = new HtmlString(Json.Encode(Model.DailyOpenedClosedStatistics)); + var jsonData = new HtmlString(Json.Encode(Model.DailyOpenedClosedStatistics)); #line default @@ -174,34 +174,34 @@ WriteLiteral(">\r\n (function () {\r\n var cha "top\',\r\n y: 0,\r\n " + " floating: true,\r\n borderWidth: 0,\r\n " + " itemStyle: {\r\n " + -" color: \'#333\',\n fontWeight: \'normal" + -"\'\r\n }\r\n },\r\n " + -" xAxis: {\r\n type" + -": \'datetime\',\r\n tickInterval: 7 * 24 * 3600 *" + -" 1000, // week\r\n tickWidth: 1,\r\n " + -" gridLineWidth: 1,\r\n da" + -"teTimeLabelFormats: {\r\n week: \'%e %b\'\r\n " + -" }\r\n },\r\n " + -" yAxis: [{\r\n title: {" + -"\r\n text: null\r\n " + -" },\r\n labels: {\r\n " + -" enabled: false\r\n },\r\n " + -" min: 0\r\n }, {\r\n " + -" title: {\r\n " + -" text: null\r\n },\r\n " + -" labels: {\r\n enabled: false\r\n" + -" },\r\n min:" + -" 0\r\n }],\r\n series:" + -" [{\r\n name: \'Total Open Jobs\',\r\n " + -" data: dataTotalOpenJobs,\r\n " + -" yAxis: 1\r\n }, {\r\n " + -" name: \'Closed Jobs\',\r\n data: dataClo" + -"sedJobs\r\n }, {\r\n " + -" name: \'Opened Jobs\',\r\n data: dataOpenedJob" + -"s\r\n }],\r\n credits:" + -" {\r\n enabled: false\r\n " + -" }\r\n });\r\n });\r\n " + -" }\r\n chartData = $.parseJSON(\'"); +" color: \'#333\',\r\n fontWeight: \'norma" + +"l\'\r\n }\r\n },\r\n " + +" xAxis: {\r\n typ" + +"e: \'datetime\',\r\n tickInterval: 7 * 24 * 3600 " + +"* 1000, // week\r\n tickWidth: 1,\r\n " + +" gridLineWidth: 1,\r\n d" + +"ateTimeLabelFormats: {\r\n week: \'%e %b\'\r\n " + +" }\r\n },\r\n " + +" yAxis: [{\r\n title: " + +"{\r\n text: null\r\n " + +" },\r\n labels: {\r\n " + +" enabled: false\r\n },\r\n " + +" min: 0\r\n }, {\r\n" + +" title: {\r\n " + +" text: null\r\n },\r\n " + +" labels: {\r\n enabled: false\r" + +"\n },\r\n min" + +": 0\r\n }],\r\n series" + +": [{\r\n name: \'Total Open Jobs\',\r\n " + +" data: dataTotalOpenJobs,\r\n " + +" yAxis: 1\r\n }, {\r\n " + +" name: \'Closed Jobs\',\r\n data: dataCl" + +"osedJobs\r\n }, {\r\n " + +" name: \'Opened Jobs\',\r\n data: dataOpenedJo" + +"bs\r\n }],\r\n credits" + +": {\r\n enabled: false\r\n " + +" }\r\n });\r\n });\r\n " + +" }\r\n chartData = $.parseJSON(\'"); #line 126 "..\..\Views\Job\Index.cshtml" @@ -300,6 +300,53 @@ WriteLiteral("\r\n \r\n"); #line 147 "..\..\Views\Job\Index.cshtml" } + + + #line default + #line hidden + + #line 148 "..\..\Views\Job\Index.cshtml" + if (Model.PendingEnrollments != null && Model.PendingEnrollments.Count > 0 && Authorization.Has(Claims.Device.Actions.EnrolDevices)) +{ + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n
There are device enrollments pending approval.
\r\n " + +" (Url.Action(MVC.Config.Enrolment.Status()) + + #line default + #line hidden +, 6773), false) +); + +WriteLiteral(" class=\"button small alert\""); + +WriteLiteral(" target=\"_blank\""); + +WriteLiteral(">View Enrollments\r\n \r\n"); + +WriteLiteral(" \r\n"); + + + #line 163 "..\..\Views\Job\Index.cshtml" +} #line default #line hidden diff --git a/Disco.sln b/Disco.sln index 03e05cb4..b653e5b8 100644 --- a/Disco.sln +++ b/Disco.sln @@ -137,4 +137,14 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1CCC4DCB-653B-464B-B05D-285032B28DC4} EndGlobalSection + GlobalSection(AutomaticVersions) = postSolution + UpdateAssemblyVersion = True + UpdateAssemblyFileVersion = True + UpdateAssemblyInfoVersion = False + AssemblyVersionSettings = None.None.DateStamp.TimeStamp + AssemblyFileVersionSettings = None.None.DateStamp.TimeStamp + UpdatePackageVersion = False + AssemblyInfoVersionType = SettingsVersion + InheritWinAppVersionFrom = None + EndGlobalSection EndGlobal