Bug Fix: Scheduled Task Status Updates

Scheduled Task status is more reliable
This commit is contained in:
Gary Sharp committed 2014-06-02 20:02:48 +10:00
1 parent 5510d34885
commit ea51ba1f88
11 files changed
+184 -128

No files matched your search

@@ -18,20 +18,11 @@ namespace Disco.Services.Tasks
private static Subject<Tuple<string, IEnumerable<ChangedItem>>> taskUpdatesStream = new Subject<Tuple<string, IEnumerable<ChangedItem>>>();
private static IDisposable taskUpdatesStreamSubscription;
internal static void Initialize()
static ScheduledTaskNotificationsHub()
{
if (taskUpdatesStreamSubscription == null)
{
lock (taskUpdatesStream)
{
if (taskUpdatesStreamSubscription == null)
{
taskUpdatesStreamSubscription = taskUpdatesStream
.DelayBuffer(TimeSpan.FromMilliseconds(200))
.Subscribe(BroadcastBufferedEvents);
}
}
}
taskUpdatesStreamSubscription = taskUpdatesStream
.DelayBuffer(TimeSpan.FromMilliseconds(200))
.Subscribe(BroadcastBufferedEvents);
}
internal static void PublishEvent(string TaskSessionId, IEnumerable<ChangedItem> ChangedItems)
@@ -43,16 +34,8 @@ namespace Disco.Services.Tasks
{
var taskSessionId = Context.QueryString["TaskSessionId"];
if (string.IsNullOrEmpty(taskSessionId))
throw new ArgumentNullException("TaskSessionId");
var status = ScheduledTasks.GetTaskStatus(taskSessionId);
if (status == null)
throw new ArgumentException("Invalid ScheduledTask SessionId", "TaskSessionId");
// Send Status:
var currentStatus = ScheduledTaskStatusLive.FromScheduledTaskStatus(status, null);
var currentStatus = GetScheduledTaskLiveStatus(taskSessionId);
Clients.Caller.initializeTaskStatus(currentStatus);
// Add to Group
@@ -85,5 +68,25 @@ namespace Disco.Services.Tasks
}
}
private ScheduledTaskStatusLive GetScheduledTaskLiveStatus(string TaskSessionId)
{
if (string.IsNullOrEmpty(TaskSessionId))
throw new ArgumentNullException("TaskSessionId");
var status = ScheduledTasks.GetTaskStatus(TaskSessionId);
if (status == null)
throw new ArgumentException("Invalid ScheduledTask SessionId", "TaskSessionId");
// Send Status:
return ScheduledTaskStatusLive.FromScheduledTaskStatus(status, null);
}
public ScheduledTaskStatusLive GetStatus()
{
var taskSessionId = Context.QueryString["TaskSessionId"];
return GetScheduledTaskLiveStatus(taskSessionId);
}
}
}
-2
View File
@@ -28,8 +28,6 @@ namespace Disco.Services.Tasks
// Scheduled Cleanup
ScheduledTaskCleanup.Schedule(_TaskScheduler);
ScheduledTaskNotificationsHub.Initialize();
if (InitiallySchedule)
{
// Discover DiscoScheduledTask
@@ -30,6 +30,7 @@
<tr data-bind="visible: FinishedTimestamp() && !TaskExceptionMessage()">
<td class="finishedMessage" data-bind="css: { finishedRedirect: FinishedUrl }">
<span data-bind="text: FinishedMessage"></span>
<i class="fa fa-lg fa-cog fa-spin"></i>
</td>
</tr>
<tr data-bind="visible: TaskExceptionMessage">
@@ -99,6 +100,7 @@
var statusViewModel = function (sessionId) {
var self = this;
self.FullUpdateToken = null;
self.Initialized = ko.observable(false);
self.TimestampParse = function (timestamp) {
@@ -142,6 +144,11 @@
self.Finished = function () {
if (self.FinishedTimestamp()) {
if (self.FinishedUrl() && !self.TaskExceptionMessage()) {
if (self.FullUpdateToken)
window.clearTimeout(self.FullUpdateToken);
$.connection.hub.stop();
if (self.FinishedMessage())
window.setTimeout(function () { window.location.href = self.FinishedUrl(); }, 3000);
else
@@ -151,32 +158,33 @@
}
self.Initialize = function (taskStatus) {
if (!self.Initialized()) {
self.TaskName(taskStatus.TaskName);
self.FinishedUrl(taskStatus.FinishedUrl);
self.TaskName(taskStatus.TaskName);
self.FinishedUrl(taskStatus.FinishedUrl);
self.Progress(taskStatus.Progress);
self.CurrentProcess(taskStatus.CurrentProcess);
self.CurrentDescription(taskStatus.CurrentDescription);
self.Progress(taskStatus.Progress);
self.CurrentProcess(taskStatus.CurrentProcess);
self.CurrentDescription(taskStatus.CurrentDescription);
self.IsRunning(taskStatus.IsRunning);
self.IsRunning(taskStatus.IsRunning);
self.TaskExceptionMessage(taskStatus.TaskExceptionMessage);
self.TaskExceptionMessage(taskStatus.TaskExceptionMessage);
self.FinishedTimestamp(taskStatus.FinishedTimestamp);
self.NextScheduledTimestamp(taskStatus.NextScheduledTimestamp);
self.FinishedTimestamp(taskStatus.FinishedTimestamp);
self.NextScheduledTimestamp(taskStatus.NextScheduledTimestamp);
self.FinishedMessage(taskStatus.FinishedMessage);
self.FinishedMessage(taskStatus.FinishedMessage);
self.Initialized(true);
self.Initialized(true);
self.Finished();
}
self.Finished();
}
self.Update = function (taskStatus) {
if (!self.Initialized())
return;
if (self.FullUpdateToken)
window.clearTimeout(self.FullUpdateToken);
if (taskStatus) {
$.each(taskStatus, function (key, value) {
switch (key) {
@@ -213,6 +221,17 @@
}
});
}
if (!self.FinishedTimestamp())
self.FullUpdateToken = window.setTimeout(self.FullUpdate, 2000);
}
self.FullUpdate = function () {
self.FullUpdateToken = null;
if (!self.FinishedTimestamp())
notificationsHub.server.getStatus()
.done(self.Initialize);
}
}
@@ -131,7 +131,11 @@ WriteLiteral(">\r\n <span");
WriteLiteral(" data-bind=\"text: FinishedMessage\"");
WriteLiteral("></span>\r\n </td>\r\n </tr>\r\n <tr");
WriteLiteral("></span>\r\n <i");
WriteLiteral(" class=\"fa fa-lg fa-cog fa-spin\"");
WriteLiteral("></i>\r\n </td>\r\n </tr>\r\n <tr");
WriteLiteral(" data-bind=\"visible: TaskExceptionMessage\"");
@@ -190,7 +194,7 @@ WriteLiteral(" type=\"text/javascript\"");
WriteLiteral(">\r\n $(function () {\r\n var sessionId = \'");
#line 92 "..\..\Areas\Config\Views\Shared\TaskStatus.cshtml"
#line 93 "..\..\Areas\Config\Views\Shared\TaskStatus.cshtml"
Write(Model);
@@ -198,82 +202,90 @@ WriteLiteral(">\r\n $(function () {\r\n var sessionId = \'");
#line hidden
WriteLiteral("\';\r\n\r\n var view = $(\'#Logging_Task_Status\');\r\n var vm = null;\r\n\r\n " +
" var notificationsHub = null;\r\n\r\n var statusViewModel = function (se" +
"ssionId) {\r\n var self = this;\r\n\r\n self.Initialized = ko.ob" +
"servable(false);\r\n\r\n self.TimestampParse = function (timestamp) {\r\n " +
" if (timestamp) {\r\n if (timestamp.indexOf(\"\\/Dat" +
"e(\") == 0)\r\n return new Date(parseInt(timestamp.substr(6)" +
"));\r\n else\r\n return (new Date()).setIS" +
"O8601(timestamp);\r\n }\r\n return new Date();\r\n " +
" }\r\n self.TimestampFormat = function (timestamp) {\r\n " +
" var addZero = function (v) { v = v + \'\'; if (v.length == 1) v = \'0\' + v; ret" +
"urn v; }\r\n return timestamp.getFullYear() + \'/\' + addZero((1 + ti" +
"mestamp.getMonth())) + \'/\' + addZero(timestamp.getDate()) + \' \' + addZero(timest" +
"amp.getHours()) + \':\' + addZero(timestamp.getMinutes()) + \':\' + addZero(timestam" +
"p.getSeconds());\r\n }\r\n\r\n self.SessionId = sessionId;\r\n " +
" self.TaskName = ko.observable(null);\r\n\r\n self.Progress = ko.o" +
"bservable(0);\r\n self.CurrentProcess = ko.observable(null);\r\n " +
" self.CurrentDescription = ko.observable(null);\r\n\r\n self.IsRunning " +
"= ko.observable(null);\r\n\r\n self.TaskExceptionMessage = ko.observable(" +
"null);\r\n\r\n self.FinishedTimestamp = ko.observable(null);\r\n " +
" self.NextScheduledTimestamp = ko.observable(null)\r\n\r\n self.NextSched" +
"uledTimestampFormatted = ko.computed(function () {\r\n return self." +
"TimestampFormat(self.TimestampParse(self.NextScheduledTimestamp()));\r\n " +
" });\r\n self.FinishedTimestampFormatted = ko.computed(function () {\r\n" +
" return self.TimestampFormat(self.TimestampParse(self.FinishedTim" +
"estamp()));\r\n });\r\n\r\n self.FinishedUrl = ko.observable(nul" +
"l);\r\n self.FinishedMessage = ko.observable(null);\r\n\r\n self" +
".Finished = function () {\r\n if (self.FinishedTimestamp()) {\r\n " +
" if (self.FinishedUrl() && !self.TaskExceptionMessage()) {\r\n " +
" if (self.FinishedMessage())\r\n wind" +
"ow.setTimeout(function () { window.location.href = self.FinishedUrl(); }, 3000);" +
"\r\n else\r\n window.location.href" +
" = self.FinishedUrl();\r\n }\r\n }\r\n }\r" +
"\n\r\n self.Initialize = function (taskStatus) {\r\n if (!s" +
"elf.Initialized()) {\r\n self.TaskName(taskStatus.TaskName);\r\n " +
" self.FinishedUrl(taskStatus.FinishedUrl);\r\n\r\n " +
" self.Progress(taskStatus.Progress);\r\n self.CurrentProcess" +
"(taskStatus.CurrentProcess);\r\n self.CurrentDescription(taskSt" +
"atus.CurrentDescription);\r\n\r\n self.IsRunning(taskStatus.IsRun" +
"ning);\r\n\r\n self.TaskExceptionMessage(taskStatus.TaskException" +
"Message);\r\n\r\n self.FinishedTimestamp(taskStatus.FinishedTimes" +
"tamp);\r\n self.NextScheduledTimestamp(taskStatus.NextScheduled" +
"Timestamp);\r\n\r\n self.FinishedMessage(taskStatus.FinishedMessa" +
"ge);\r\n\r\n self.Initialized(true);\r\n\r\n self." +
"Finished();\r\n }\r\n }\r\n self.Update = functio" +
"n (taskStatus) {\r\n if (!self.Initialized())\r\n " +
"return;\r\n\r\n if (taskStatus) {\r\n $.each(taskSta" +
"tus, function (key, value) {\r\n switch (key) {\r\n " +
" case \'Progress\':\r\n self.Progres" +
"s(value);\r\n break;\r\n c" +
"ase \'CurrentProcess\':\r\n self.CurrentProcess(value" +
");\r\n break;\r\n case \'Cu" +
"rrentDescription\':\r\n self.CurrentDescription(valu" +
"e);\r\n break;\r\n case \'I" +
"sRunning\':\r\n self.IsRunning(value);\r\n " +
" break;\r\n case \'TaskExceptionMessa" +
"ge\':\r\n self.TaskExceptionMessage(value);\r\n " +
" break;\r\n case \'NextScheduled" +
"Timestamp\':\r\n self.NextScheduledTimestamp(value);" +
"\r\n break;\r\n case \'Fini" +
"shedUrl\':\r\n self.FinishedUrl(value);\r\n " +
" break;\r\n case \'FinishedMessage\':" +
"\r\n self.FinishedMessage(value);\r\n " +
" break;\r\n case \'FinishedTimestamp\':\r\n " +
" self.FinishedTimestamp(value);\r\n " +
" window.setTimeout(self.Finished, 1);\r\n " +
" break;\r\n default:\r\n " +
" // Ignore\r\n }\r\n });\r\n " +
" }\r\n }\r\n }\r\n\r\n vm = new statusViewModel(sessionId);\r\n " +
" ko.applyBindings(vm, view[0]);\r\n\r\n // Start Live Connection\r\n " +
" updateWithLive();\r\n\r\n function updateWithLive() {\r\n notific" +
"ationsHub = $.connection.scheduledTaskNotifications;\r\n notificationsH" +
"ub.client.initializeTaskStatus = vm.Initialize;\r\n notificationsHub.cl" +
"ient.updateTaskStatus = vm.Update;\r\n\r\n $.connection.hub.qs = { TaskSe" +
"ssionId: sessionId };\r\n $.connection.hub.error(function (error) {\r\n " +
" alert(\'Live-Status Error: \' + error);\r\n });\r\n\r\n " +
" $.connection.hub.start()\r\n .fail(function (error) {\r\n " +
" alert(\'Live-Status Connection Error: \' + error);\r\n })" +
";\r\n }\r\n\r\n });\r\n</script>\r\n");
"ssionId) {\r\n var self = this;\r\n\r\n self.FullUpdateToken = n" +
"ull;\r\n self.Initialized = ko.observable(false);\r\n\r\n self.T" +
"imestampParse = function (timestamp) {\r\n if (timestamp) {\r\n " +
" if (timestamp.indexOf(\"\\/Date(\") == 0)\r\n re" +
"turn new Date(parseInt(timestamp.substr(6)));\r\n else\r\n " +
" return (new Date()).setISO8601(timestamp);\r\n }\r\n" +
" return new Date();\r\n }\r\n self.TimestampFor" +
"mat = function (timestamp) {\r\n var addZero = function (v) { v = v" +
" + \'\'; if (v.length == 1) v = \'0\' + v; return v; }\r\n return times" +
"tamp.getFullYear() + \'/\' + addZero((1 + timestamp.getMonth())) + \'/\' + addZero(t" +
"imestamp.getDate()) + \' \' + addZero(timestamp.getHours()) + \':\' + addZero(timest" +
"amp.getMinutes()) + \':\' + addZero(timestamp.getSeconds());\r\n }\r\n\r\n " +
" self.SessionId = sessionId;\r\n self.TaskName = ko.observable(" +
"null);\r\n\r\n self.Progress = ko.observable(0);\r\n self.Curren" +
"tProcess = ko.observable(null);\r\n self.CurrentDescription = ko.observ" +
"able(null);\r\n\r\n self.IsRunning = ko.observable(null);\r\n\r\n " +
"self.TaskExceptionMessage = ko.observable(null);\r\n\r\n self.FinishedTim" +
"estamp = ko.observable(null);\r\n self.NextScheduledTimestamp = ko.obse" +
"rvable(null)\r\n\r\n self.NextScheduledTimestampFormatted = ko.computed(f" +
"unction () {\r\n return self.TimestampFormat(self.TimestampParse(se" +
"lf.NextScheduledTimestamp()));\r\n });\r\n self.FinishedTimest" +
"ampFormatted = ko.computed(function () {\r\n return self.TimestampF" +
"ormat(self.TimestampParse(self.FinishedTimestamp()));\r\n });\r\n\r\n " +
" self.FinishedUrl = ko.observable(null);\r\n self.FinishedMessage " +
"= ko.observable(null);\r\n\r\n self.Finished = function () {\r\n " +
" if (self.FinishedTimestamp()) {\r\n if (self.FinishedUrl()" +
" && !self.TaskExceptionMessage()) {\r\n\r\n if (self.FullUpda" +
"teToken)\r\n window.clearTimeout(self.FullUpdateToken);" +
"\r\n $.connection.hub.stop();\r\n\r\n if" +
" (self.FinishedMessage())\r\n window.setTimeout(functio" +
"n () { window.location.href = self.FinishedUrl(); }, 3000);\r\n " +
" else\r\n window.location.href = self.FinishedUrl()" +
";\r\n }\r\n }\r\n }\r\n\r\n self.I" +
"nitialize = function (taskStatus) {\r\n self.TaskName(taskStatus.Ta" +
"skName);\r\n self.FinishedUrl(taskStatus.FinishedUrl);\r\n\r\n " +
" self.Progress(taskStatus.Progress);\r\n self.CurrentProcess(" +
"taskStatus.CurrentProcess);\r\n self.CurrentDescription(taskStatus." +
"CurrentDescription);\r\n\r\n self.IsRunning(taskStatus.IsRunning);\r\n\r" +
"\n self.TaskExceptionMessage(taskStatus.TaskExceptionMessage);\r\n\r\n" +
" self.FinishedTimestamp(taskStatus.FinishedTimestamp);\r\n " +
" self.NextScheduledTimestamp(taskStatus.NextScheduledTimestamp);\r\n\r\n " +
" self.FinishedMessage(taskStatus.FinishedMessage);\r\n\r\n s" +
"elf.Initialized(true);\r\n\r\n self.Finished();\r\n }\r\n " +
" self.Update = function (taskStatus) {\r\n if (!self.Initiali" +
"zed())\r\n return;\r\n\r\n if (self.FullUpdateToken)" +
"\r\n window.clearTimeout(self.FullUpdateToken);\r\n\r\n " +
" if (taskStatus) {\r\n $.each(taskStatus, function (key, val" +
"ue) {\r\n switch (key) {\r\n case " +
"\'Progress\':\r\n self.Progress(value);\r\n " +
" break;\r\n case \'CurrentProcess\':\r\n" +
" self.CurrentProcess(value);\r\n " +
" break;\r\n case \'CurrentDescription\':\r\n " +
" self.CurrentDescription(value);\r\n " +
" break;\r\n case \'IsRunning\':\r\n " +
" self.IsRunning(value);\r\n bre" +
"ak;\r\n case \'TaskExceptionMessage\':\r\n " +
" self.TaskExceptionMessage(value);\r\n " +
" break;\r\n case \'NextScheduledTimestamp\':\r\n " +
" self.NextScheduledTimestamp(value);\r\n " +
" break;\r\n case \'FinishedUrl\':\r\n " +
" self.FinishedUrl(value);\r\n br" +
"eak;\r\n case \'FinishedMessage\':\r\n " +
" self.FinishedMessage(value);\r\n break;\r" +
"\n case \'FinishedTimestamp\':\r\n " +
" self.FinishedTimestamp(value);\r\n window.s" +
"etTimeout(self.Finished, 1);\r\n break;\r\n " +
" default:\r\n // Ignore\r\n " +
" }\r\n });\r\n }\r\n\r\n " +
"if (!self.FinishedTimestamp())\r\n self.FullUpdateToken = windo" +
"w.setTimeout(self.FullUpdate, 2000);\r\n }\r\n\r\n self.FullUpda" +
"te = function () {\r\n self.FullUpdateToken = null;\r\n\r\n " +
" if (!self.FinishedTimestamp())\r\n notificationsHub.server." +
"getStatus()\r\n .done(self.Initialize);\r\n }\r\n " +
" }\r\n\r\n vm = new statusViewModel(sessionId);\r\n ko.applyBindings" +
"(vm, view[0]);\r\n\r\n // Start Live Connection\r\n updateWithLive();\r\n\r" +
"\n function updateWithLive() {\r\n notificationsHub = $.connectio" +
"n.scheduledTaskNotifications;\r\n notificationsHub.client.initializeTas" +
"kStatus = vm.Initialize;\r\n notificationsHub.client.updateTaskStatus =" +
" vm.Update;\r\n\r\n $.connection.hub.qs = { TaskSessionId: sessionId };\r\n" +
" $.connection.hub.error(function (error) {\r\n alert(\'Li" +
"ve-Status Error: \' + error);\r\n });\r\n\r\n $.connection.hub.st" +
"art()\r\n .fail(function (error) {\r\n alert(\'Live" +
"-Status Connection Error: \' + error);\r\n });\r\n }\r\n\r\n });" +
"\r\n</script>\r\n");
}
}
@@ -2797,6 +2797,9 @@
proxies.scheduledTaskNotifications = this.createHubProxy('scheduledTaskNotifications');
proxies.scheduledTaskNotifications.client = { };
proxies.scheduledTaskNotifications.server = {
getStatus: function () {
return proxies.scheduledTaskNotifications.invoke.apply(proxies.scheduledTaskNotifications, $.merge(["GetStatus"], $.makeArray(arguments)));
}
};
proxies.userUpdates = this.createHubProxy('userUpdates');
@@ -1,4 +1,4 @@
(function(n,t,i){"use strict";function p(t,i){var u,f;if(n.isArray(t)){for(u=t.length-1;u>=0;u--)f=t[u],n.type(f)==="string"&&r.transports[f]||(i.log("Invalid transport: "+f+", removing it from the transports list."),t.splice(u,1));t.length===0&&(i.log("No transports remain within the specified transport array."),t=null)}else if(r.transports[t]||t==="auto"){if(t==="auto"&&r._.ieVersion<=8)return["longPolling"]}else i.log("Invalid transport: "+t.toString()+"."),t=null;return t}function w(n){return n==="http:"?80:n==="https:"?443:void 0}function l(n,t){return t.match(/:\d+$/)?t:t+":"+w(n)}function b(t,i){var u=this,r=[];u.tryBuffer=function(i){return t.state===n.signalR.connectionState.connecting?(r.push(i),!0):!1};u.drain=function(){if(t.state===n.signalR.connectionState.connected)while(r.length>0)i(r.shift())};u.clear=function(){r=[]}}var f={nojQuery:"jQuery was not found. Please ensure jQuery is referenced before the SignalR client JavaScript file.",noTransportOnInit:"No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.",errorOnNegotiate:"Error during negotiation request.",stoppedWhileLoading:"The connection was stopped during page load.",stoppedWhileNegotiating:"The connection was stopped during the negotiate request.",errorParsingNegotiateResponse:"Error parsing negotiate response.",protocolIncompatible:"You are using a version of the client that isn't compatible with the server. Client version {0}, server version {1}.",sendFailed:"Send failed.",parseFailed:"Failed at parsing response: {0}",longPollFailed:"Long polling request failed.",eventSourceFailedToConnect:"EventSource failed to connect.",eventSourceError:"Error raised by EventSource",webSocketClosed:"WebSocket closed.",pingServerFailedInvalidResponse:"Invalid ping response when pinging server: '{0}'.",pingServerFailed:"Failed to ping server.",pingServerFailedStatusCode:"Failed to ping server. Server responded with status code {0}, stopping the connection.",pingServerFailedParse:"Failed to parse ping server response, stopping the connection.",noConnectionTransport:"Connection is in an invalid state, there is no transport active.",webSocketsInvalidState:"The Web Socket transport is in an invalid state, transitioning into reconnecting."};if(typeof n!="function")throw new Error(f.nojQuery);var r,h,s=t.document.readyState==="complete",e=n(t),c="__Negotiate Aborted__",u={onStart:"onStart",onStarting:"onStarting",onReceived:"onReceived",onError:"onError",onConnectionSlow:"onConnectionSlow",onReconnecting:"onReconnecting",onReconnect:"onReconnect",onStateChanged:"onStateChanged",onDisconnect:"onDisconnect"},a=function(n,i){if(i!==!1){var r;typeof t.console!="undefined"&&(r="["+(new Date).toTimeString()+"] SignalR: "+n,t.console.debug?t.console.debug(r):t.console.log&&t.console.log(r))}},o=function(t,i,r){return i===t.state?(t.state=r,n(t).triggerHandler(u.onStateChanged,[{oldState:i,newState:r}]),!0):!1},v=function(n){return n.state===r.connectionState.disconnected},y=function(n){var i,u;n._.configuredStopReconnectingTimeout||(u=function(n){n.log("Couldn't reconnect within the configured timeout ("+n.disconnectTimeout+"ms), disconnecting.");n.stop(!1,!1)},n.reconnecting(function(){var n=this;n.state===r.connectionState.reconnecting&&(i=t.setTimeout(function(){u(n)},n.disconnectTimeout))}),n.stateChanged(function(n){n.oldState===r.connectionState.reconnecting&&t.clearTimeout(i)}),n._.configuredStopReconnectingTimeout=!0)};r=function(n,t,i){return new r.fn.init(n,t,i)};r._={defaultContentType:"application/x-www-form-urlencoded; charset=UTF-8",ieVersion:function(){var i,n;return t.navigator.appName==="Microsoft Internet Explorer"&&(n=/MSIE ([0-9]+\.[0-9]+)/.exec(t.navigator.userAgent),n&&(i=t.parseFloat(n[1]))),i}(),error:function(n,t,i){var r=new Error(n);return r.source=t,typeof i!="undefined"&&(r.context=i),r},transportError:function(n,t,r,u){var f=this.error(n,r,u);return f.transport=t?t.name:i,f},format:function(){for(var t=arguments[0],n=0;n<arguments.length-1;n++)t=t.replace("{"+n+"}",arguments[n+1]);return t},firefoxMajorVersion:function(n){var t=n.match(/Firefox\/(\d+)/);return!t||!t.length||t.length<2?0:parseInt(t[1],10)},configurePingInterval:function(i){var f=i._.config,e=function(t){n(i).triggerHandler(u.onError,[t])};f&&!i._.pingIntervalId&&f.pingInterval&&(i._.pingIntervalId=t.setInterval(function(){r.transports._logic.pingServer(i).fail(e)},f.pingInterval))}};r.events=u;r.resources=f;r.ajaxDefaults={processData:!0,timeout:null,async:!0,global:!1,cache:!1};r.changeState=o;r.isDisconnecting=v;r.connectionState={connecting:0,connected:1,reconnecting:2,disconnected:4};r.hub={start:function(){throw new Error("SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/js'><\/script>.");}};e.load(function(){s=!0});r.fn=r.prototype={init:function(t,i,r){var f=n(this);this.url=t;this.qs=i;this._={keepAliveData:{},connectingMessageBuffer:new b(Line truncated
(function(n,t,i){"use strict";function p(t,i){var u,f;if(n.isArray(t)){for(u=t.length-1;u>=0;u--)f=t[u],n.type(f)==="string"&&r.transports[f]||(i.log("Invalid transport: "+f+", removing it from the transports list."),t.splice(u,1));t.length===0&&(i.log("No transports remain within the specified transport array."),t=null)}else if(r.transports[t]||t==="auto"){if(t==="auto"&&r._.ieVersion<=8)return["longPolling"]}else i.log("Invalid transport: "+t.toString()+"."),t=null;return t}function w(n){return n==="http:"?80:n==="https:"?443:void 0}function l(n,t){return t.match(/:\d+$/)?t:t+":"+w(n)}function b(t,i){var u=this,r=[];u.tryBuffer=function(i){return t.state===n.signalR.connectionState.connecting?(r.push(i),!0):!1};u.drain=function(){if(t.state===n.signalR.connectionState.connected)while(r.length>0)i(r.shift())};u.clear=function(){r=[]}}var f={nojQuery:"jQuery was not found. Please ensure jQuery is referenced before the SignalR client JavaScript file.",noTransportOnInit:"No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.",errorOnNegotiate:"Error during negotiation request.",stoppedWhileLoading:"The connection was stopped during page load.",stoppedWhileNegotiating:"The connection was stopped during the negotiate request.",errorParsingNegotiateResponse:"Error parsing negotiate response.",protocolIncompatible:"You are using a version of the client that isn't compatible with the server. Client version {0}, server version {1}.",sendFailed:"Send failed.",parseFailed:"Failed at parsing response: {0}",longPollFailed:"Long polling request failed.",eventSourceFailedToConnect:"EventSource failed to connect.",eventSourceError:"Error raised by EventSource",webSocketClosed:"WebSocket closed.",pingServerFailedInvalidResponse:"Invalid ping response when pinging server: '{0}'.",pingServerFailed:"Failed to ping server.",pingServerFailedStatusCode:"Failed to ping server. Server responded with status code {0}, stopping the connection.",pingServerFailedParse:"Failed to parse ping server response, stopping the connection.",noConnectionTransport:"Connection is in an invalid state, there is no transport active.",webSocketsInvalidState:"The Web Socket transport is in an invalid state, transitioning into reconnecting."};if(typeof n!="function")throw new Error(f.nojQuery);var r,h,s=t.document.readyState==="complete",e=n(t),c="__Negotiate Aborted__",u={onStart:"onStart",onStarting:"onStarting",onReceived:"onReceived",onError:"onError",onConnectionSlow:"onConnectionSlow",onReconnecting:"onReconnecting",onReconnect:"onReconnect",onStateChanged:"onStateChanged",onDisconnect:"onDisconnect"},a=function(n,i){if(i!==!1){var r;typeof t.console!="undefined"&&(r="["+(new Date).toTimeString()+"] SignalR: "+n,t.console.debug?t.console.debug(r):t.console.log&&t.console.log(r))}},o=function(t,i,r){return i===t.state?(t.state=r,n(t).triggerHandler(u.onStateChanged,[{oldState:i,newState:r}]),!0):!1},v=function(n){return n.state===r.connectionState.disconnected},y=function(n){var i,u;n._.configuredStopReconnectingTimeout||(u=function(n){n.log("Couldn't reconnect within the configured timeout ("+n.disconnectTimeout+"ms), disconnecting.");n.stop(!1,!1)},n.reconnecting(function(){var n=this;n.state===r.connectionState.reconnecting&&(i=t.setTimeout(function(){u(n)},n.disconnectTimeout))}),n.stateChanged(function(n){n.oldState===r.connectionState.reconnecting&&t.clearTimeout(i)}),n._.configuredStopReconnectingTimeout=!0)};r=function(n,t,i){return new r.fn.init(n,t,i)};r._={defaultContentType:"application/x-www-form-urlencoded; charset=UTF-8",ieVersion:function(){var i,n;return t.navigator.appName==="Microsoft Internet Explorer"&&(n=/MSIE ([0-9]+\.[0-9]+)/.exec(t.navigator.userAgent),n&&(i=t.parseFloat(n[1]))),i}(),error:function(n,t,i){var r=new Error(n);return r.source=t,typeof i!="undefined"&&(r.context=i),r},transportError:function(n,t,r,u){var f=this.error(n,r,u);return f.transport=t?t.name:i,f},format:function(){for(var t=arguments[0],n=0;n<arguments.length-1;n++)t=t.replace("{"+n+"}",arguments[n+1]);return t},firefoxMajorVersion:function(n){var t=n.match(/Firefox\/(\d+)/);return!t||!t.length||t.length<2?0:parseInt(t[1],10)},configurePingInterval:function(i){var f=i._.config,e=function(t){n(i).triggerHandler(u.onError,[t])};f&&!i._.pingIntervalId&&f.pingInterval&&(i._.pingIntervalId=t.setInterval(function(){r.transports._logic.pingServer(i).fail(e)},f.pingInterval))}};r.events=u;r.resources=f;r.ajaxDefaults={processData:!0,timeout:null,async:!0,global:!1,cache:!1};r.changeState=o;r.isDisconnecting=v;r.connectionState={connecting:0,connected:1,reconnecting:2,disconnected:4};r.hub={start:function(){throw new Error("SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/js'><\/script>.");}};e.load(function(){s=!0});r.fn=r.prototype={init:function(t,i,r){var f=n(this);this.url=t;this.qs=i;this._={keepAliveData:{},connectingMessageBuffer:new b(Line truncated
/*
//# sourceMappingURL=jQuery-SignalR.min.js.map
*/
@@ -2,7 +2,7 @@
"version":3,
"file":"jQuery-SignalR.min.js",
"lineCount":1,
"mappings":"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 truncated
"mappings":"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 truncated
"sources":["/ClientSource/Scripts/Modules/jQuery-SignalR/jquery.signalR-2.0.3.js","/ClientSource/Scripts/Modules/jQuery-SignalR/disco-hubs.js"],
"names":["$","window","undefined","validateTransport","requestedTransport","connection","i","transport","isArray","length","type","signalR","transports","log","splice","_","ieVersion","toString","getDefaultPort","protocol","addDefaultPort","url","match","ConnectingMessageBuffer","drainCallback","that","buffer","tryBuffer","that.tryBuffer","message","state","connectionState","connecting","push","drain","that.drain","connected","shift","clear","that.clear","resources","Error","nojQuery","_connection","_pageLoaded","document","readyState","_pageWindow","_negotiateAbortText","events","msg","logging","m","console","Date","toTimeString","debug","changeState","expectedState","newState","triggerHandler","onStateChanged","isDisconnecting","disconnected","configureStopReconnectingTimeout","stopReconnectingTimeout","onReconnectTimeout","configuredStopReconnectingTimeout","disconnectTimeout","stop","reconnecting","setTimeout","stateChanged","data","oldState","clearTimeout","qs","fn","init","version","matches","navigator","appName","exec","userAgent","parseFloat","error","source","context","e","transportError","name","format","s","arguments","replace","firefoxMajorVersion","parseInt","configurePingInterval","config","onFail","onError","pingIntervalId","pingInterval","setInterval","_logic","pingServer","fail","ajaxDefaults","hub","start","load","prototype","$connection","connectingMessageBuffer","onReceived","getTime","_parseResponse","response","json","parse","JSON","isCrossDomain","against","link","trim","location","indexOf","createElement","href","host","options","callback","initialize","deferred","_deferral","Deferred","parser","onFailed","extend","waitForPageLoad","deferredStartHandler","connection._.deferredStartHandler","bind","promise","resolve","baseUrl","wsProtocol","jsonp","withCredentials","support","cors","contentType","defaultContentType","ajaxDataType","onStart","call","index","noTransportError","noTransportOnInit","reject","transportName","initializationComplete","onFailedTimeoutHandle","totalTransportConnectTimeout","isFirefox11OrGreater","asyncAbort","supportsKeepAlive","keepAliveData","activated","monitorKeepAlive","startHeartbeat","err","errorOnNegotiate","negotiateRequest","onStarting","prepareQueryString","addQs","clientProtocol","ajax","statusText","stoppedWhileNegotiating","success","result","res","protocolError","supportedTransports","errorParsingNegotiateResponse","appRelativeUrl","Url","id","ConnectionId","token","ConnectionToken","webSocketServerUrl","WebSocketServerUrl","DisconnectTimeout","transportConnectTimeout","TransportConnectTimeout","KeepAliveTimeout","timeout","timeoutWarning","keepAliveWarnAt","beatInterval","reconnectWindow","ProtocolVersion","protocolIncompatible","each","key","TryWebSockets","inArray","starting","send","received","errorData","sendData","onDisconnect","connectionSlow","onConnectionSlow","onReconnecting","reconnected","onReconnect","async","notifyServer","deferral","unbind","stoppedWhileLoading","beatHandle","clearInterval","abort","stopMonitoringKeepAlive","messageId","groupsToken","lastMessageAt","lastActiveAt","noConflict","signalR.noConflict","jQuery","beat","monitoring","checkIfAlive","transportLogic","markActive","timeElapsed","lostConnection","userNotified","addConnectionData","connectionData","appender","encodeURIComponent","xhr","pingServerFailedParse","Response","pingServerFailedInvalidResponse","responseText","status","pingServerFailedStatusCode","pingServerFailed","noConnectionTransport","firstChar","param","charAt","getUrl","poll","Math","floor","random","maximizePersistentResponse","minPersistentResponse","C","M","S","D","T","L","G","updateGroups","stringifySend","stringify","ajaxSend","payload","sendFailed","triggerReceived","textStatus","ajaxAbort","tryInitialize","persistentResponse","onInitialized","Initialized","processMessages","minData","markLastMessage","Disconnect","GroupsToken","MessageId","Messages","reconnectKeepAliveUpdate","connection._.keepAliveData.reconnectKeepAliveUpdate","verifyLastActive","isConnectedOrReconnecting","ensureReconnectingState","clearReconnectTimeout","reconnectTimeout","reconnect","reconnectDelay","handleParseFailure","parseFailed","webSockets","socket","ex","webSocketsInvalidState","onSuccess","opened","WebSocket","onopen","connection.socket.onopen","onclose","connection.socket.onclose","event","wasClean","webSocketClosed","reason","onmessage","connection.socket.onmessage","isEmptyObject","close","serverSentEvents","eventSource","EventSource","Message","eventSourceFailedToConnect","OPEN","timeOut","addEventListener","eventPhase","CLOSED","eventSourceError","createFrame","frame","setAttribute","loadPreventer","loadingFixIntervalId","loadingFixInterval","attachedTo","prevent","tempFrame","body","appendChild","removeChild","cancel","foreverFrame","frameId","count","frameLoadHandler","attachEvent","src","connections","connection.onSuccess","receive","cw","frameMessageCount","iframeClearThreshold","contentWindow","conteLine truncated
"names":["$","window","undefined","validateTransport","requestedTransport","connection","i","transport","isArray","length","type","signalR","transports","log","splice","_","ieVersion","toString","getDefaultPort","protocol","addDefaultPort","url","match","ConnectingMessageBuffer","drainCallback","that","buffer","tryBuffer","that.tryBuffer","message","state","connectionState","connecting","push","drain","that.drain","connected","shift","clear","that.clear","resources","Error","nojQuery","_connection","_pageLoaded","document","readyState","_pageWindow","_negotiateAbortText","events","msg","logging","m","console","Date","toTimeString","debug","changeState","expectedState","newState","triggerHandler","onStateChanged","isDisconnecting","disconnected","configureStopReconnectingTimeout","stopReconnectingTimeout","onReconnectTimeout","configuredStopReconnectingTimeout","disconnectTimeout","stop","reconnecting","setTimeout","stateChanged","data","oldState","clearTimeout","qs","fn","init","version","matches","navigator","appName","exec","userAgent","parseFloat","error","source","context","e","transportError","name","format","s","arguments","replace","firefoxMajorVersion","parseInt","configurePingInterval","config","onFail","onError","pingIntervalId","pingInterval","setInterval","_logic","pingServer","fail","ajaxDefaults","hub","start","load","prototype","$connection","connectingMessageBuffer","onReceived","getTime","_parseResponse","response","json","parse","JSON","isCrossDomain","against","link","trim","location","indexOf","createElement","href","host","options","callback","initialize","deferred","_deferral","Deferred","parser","onFailed","extend","waitForPageLoad","deferredStartHandler","connection._.deferredStartHandler","bind","promise","resolve","baseUrl","wsProtocol","jsonp","withCredentials","support","cors","contentType","defaultContentType","ajaxDataType","onStart","call","index","noTransportError","noTransportOnInit","reject","transportName","initializationComplete","onFailedTimeoutHandle","totalTransportConnectTimeout","isFirefox11OrGreater","asyncAbort","supportsKeepAlive","keepAliveData","activated","monitorKeepAlive","startHeartbeat","err","errorOnNegotiate","negotiateRequest","onStarting","prepareQueryString","addQs","clientProtocol","ajax","statusText","stoppedWhileNegotiating","success","result","res","protocolError","supportedTransports","errorParsingNegotiateResponse","appRelativeUrl","Url","id","ConnectionId","token","ConnectionToken","webSocketServerUrl","WebSocketServerUrl","DisconnectTimeout","transportConnectTimeout","TransportConnectTimeout","KeepAliveTimeout","timeout","timeoutWarning","keepAliveWarnAt","beatInterval","reconnectWindow","ProtocolVersion","protocolIncompatible","each","key","TryWebSockets","inArray","starting","send","received","errorData","sendData","onDisconnect","connectionSlow","onConnectionSlow","onReconnecting","reconnected","onReconnect","async","notifyServer","deferral","unbind","stoppedWhileLoading","beatHandle","clearInterval","abort","stopMonitoringKeepAlive","messageId","groupsToken","lastMessageAt","lastActiveAt","noConflict","signalR.noConflict","jQuery","beat","monitoring","checkIfAlive","transportLogic","markActive","timeElapsed","lostConnection","userNotified","addConnectionData","connectionData","appender","encodeURIComponent","xhr","pingServerFailedParse","Response","pingServerFailedInvalidResponse","responseText","status","pingServerFailedStatusCode","pingServerFailed","noConnectionTransport","firstChar","param","charAt","getUrl","poll","Math","floor","random","maximizePersistentResponse","minPersistentResponse","C","M","S","D","T","L","G","updateGroups","stringifySend","stringify","ajaxSend","payload","sendFailed","triggerReceived","textStatus","ajaxAbort","tryInitialize","persistentResponse","onInitialized","Initialized","processMessages","minData","markLastMessage","Disconnect","GroupsToken","MessageId","Messages","reconnectKeepAliveUpdate","connection._.keepAliveData.reconnectKeepAliveUpdate","verifyLastActive","isConnectedOrReconnecting","ensureReconnectingState","clearReconnectTimeout","reconnectTimeout","reconnect","reconnectDelay","handleParseFailure","parseFailed","webSockets","socket","ex","webSocketsInvalidState","onSuccess","opened","WebSocket","onopen","connection.socket.onopen","onclose","connection.socket.onclose","event","wasClean","webSocketClosed","reason","onmessage","connection.socket.onmessage","isEmptyObject","close","serverSentEvents","eventSource","EventSource","Message","eventSourceFailedToConnect","OPEN","timeOut","addEventListener","eventPhase","CLOSED","eventSourceError","createFrame","frame","setAttribute","loadPreventer","loadingFixIntervalId","loadingFixInterval","attachedTo","prevent","tempFrame","body","appendChild","removeChild","cancel","foreverFrame","frameId","count","frameLoadHandler","attachEvent","src","connections","connection.onSuccess","receive","cw","frameMessageCount","iframeClearThreshold","contentWindow","conteLine truncated
}
@@ -101,6 +101,9 @@
proxies.scheduledTaskNotifications = this.createHubProxy('scheduledTaskNotifications');
proxies.scheduledTaskNotifications.client = { };
proxies.scheduledTaskNotifications.server = {
getStatus: function () {
return proxies.scheduledTaskNotifications.invoke.apply(proxies.scheduledTaskNotifications, $.merge(["GetStatus"], $.makeArray(arguments)));
}
};
proxies.userUpdates = this.createHubProxy('userUpdates');
+11 -4
View File
@@ -346,11 +346,18 @@ table.deviceProfileTable th.deviceCount {
#Logging_Task_Status td.progress {
padding: 8px 10px;
}
#Logging_Task_Status td.finishedMessage i {
display: none;
}
#Logging_Task_Status td.finishedRedirect {
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) /*Images/Status/loading.gif*/;
padding-right: 20px;
position: relative;
}
#Logging_Task_Status td.finishedRedirect i {
color: #1e6dab;
position: absolute;
right: 10px;
top: calc(57% - 0.5em);
display: inline-block;
}
#Logging_Task_Status td.exception {
background-color: #FFD8D8;
+15 -4
View File
@@ -291,11 +291,22 @@ table.deviceProfileTable {
padding: 8px 10px;
}
td.finishedMessage {
i {
display: none;
}
}
td.finishedRedirect {
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) /*Images/Status/loading.gif*/;
padding-right: 20px;
position: relative;
i {
color: @StatusInformation;
position: absolute;
right: 10px;
top: calc(~"57% - 0.5em");
display: inline-block;
}
}
td.exception {
+1 -1
View File
@@ -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:#fcfcfc}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4}.tableData>tbody>tr:hover>td{background-color:#fefefe}.tableData>tbody>tr:hover:nth-child(odd)>td{background-color:#fafafa}.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}#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:#fcfcfc}table.expressionsTable>thead>tr>th,table.expressionsTable>tbody>tr>th{background-color:Line truncated
.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:#fcfcfc}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4}.tableData>tbody>tr:hover>td{background-color:#fefefe}.tableData>tbody>tr:hover:nth-child(odd)>td{background-color:#fafafa}.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}#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:#fcfcfc}table.expressionsTable>thead>tr>th,table.expressionsTable>tbody>tr>th{background-color:Line truncated