Update: SignalR 2.0.3 Migration; Noticeboards
Migrate all SignalR 1.x Persistent Connections to SignalR 2.x Hubs. Abstracts ScheduledTaskStatus with core interface and adds a Mock for optional status reporting. Noticeboards rewritten (with new theme) to be more resilient and accurate.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.34011
|
||||
// Runtime Version:4.0.30319.34014
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
@@ -47,6 +47,7 @@ namespace Disco.Web.Areas.Public.Views.UserHeldDevices
|
||||
#line 1 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
|
||||
Layout = null;
|
||||
Html.BundleDeferred("~/ClientScripts/Modules/Knockout");
|
||||
Html.BundleDeferred("~/ClientScripts/Modules/jQuery-SignalR");
|
||||
Html.BundleDeferred("~/ClientScripts/Core");
|
||||
Html.BundleDeferred("~/Style/Public/HeldDevicesNoticeboard");
|
||||
@@ -64,26 +65,58 @@ WriteLiteral(" http-equiv=\"X-UA-Compatible\"");
|
||||
|
||||
WriteLiteral(" content=\"IE=edge\"");
|
||||
|
||||
WriteLiteral(" />\r\n <title>Disco - Technician Held Devices for Users</title>\r\n");
|
||||
WriteLiteral(" />\r\n <title>Disco ICT - Held Devices for Users</title>\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 13 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
#line 14 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
Write(Html.BundleRenderDeferred());
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n</head>\r\n<body>\r\n <div");
|
||||
WriteLiteral("\r\n</head>\r\n<body");
|
||||
|
||||
WriteLiteral(" class=\"status-connecting\"");
|
||||
|
||||
WriteLiteral(">\r\n <div");
|
||||
|
||||
WriteLiteral(" id=\"page\"");
|
||||
|
||||
WriteLiteral(">\r\n <header");
|
||||
|
||||
WriteLiteral(" id=\"mainHeader\"");
|
||||
WriteLiteral(" id=\"header\"");
|
||||
|
||||
WriteLiteral(">\r\n Technician Held Devices for Users\r\n </header>\r\n <section");
|
||||
WriteLiteral(">\r\n <div");
|
||||
|
||||
WriteLiteral(" id=\"heading\"");
|
||||
|
||||
WriteLiteral(">Held Devices for Users</div>\r\n <div");
|
||||
|
||||
WriteLiteral(" id=\"statusConnecting\"");
|
||||
|
||||
WriteLiteral("><i");
|
||||
|
||||
WriteLiteral(" class=\"fa fa-cog fa-spin\"");
|
||||
|
||||
WriteLiteral("></i><span>connecting...</span></div>\r\n <div");
|
||||
|
||||
WriteLiteral(" id=\"statusError\"");
|
||||
|
||||
WriteLiteral("><i");
|
||||
|
||||
WriteLiteral(" class=\"fa fa-cog fa-spin\"");
|
||||
|
||||
WriteLiteral("></i><span>disconnected, reconnecting...</span></div>\r\n <div");
|
||||
|
||||
WriteLiteral(" id=\"credits\"");
|
||||
|
||||
WriteLiteral(">\r\n powered by Disco ICT <i");
|
||||
|
||||
WriteLiteral(" title=\"Disco ICT - Jobs\"");
|
||||
|
||||
WriteLiteral("></i>\r\n </div>\r\n </header>\r\n <section");
|
||||
|
||||
WriteLiteral(" id=\"mainSection\"");
|
||||
|
||||
@@ -93,402 +126,288 @@ WriteLiteral(" id=\"inProcess\"");
|
||||
|
||||
WriteLiteral(" class=\"list\"");
|
||||
|
||||
WriteLiteral(">\r\n <h3>\r\n In Process <span");
|
||||
WriteLiteral(">\r\n <h3>In Process (<span");
|
||||
|
||||
WriteLiteral(" id=\"inProcessCount\"");
|
||||
WriteLiteral(" data-bind=\"text: inProcess().length\"");
|
||||
|
||||
WriteLiteral("></span>\r\n </h3>\r\n <div");
|
||||
WriteLiteral("></span>)\r\n </h3>\r\n <div");
|
||||
|
||||
WriteLiteral(" class=\"content\"");
|
||||
|
||||
WriteLiteral(">\r\n <ul>\r\n </ul>\r\n </div>\r\n " +
|
||||
" </div>\r\n <div");
|
||||
WriteLiteral(">\r\n <!-- ko if: inProcess().length == 0 -->\r\n " +
|
||||
" <div");
|
||||
|
||||
WriteLiteral(" class=\"noContent\"");
|
||||
|
||||
WriteLiteral("><None></div>\r\n <!-- /ko -->\r\n <ul");
|
||||
|
||||
WriteLiteral(" data-bind=\"template: { name: \'item-template\', foreach: inProcess, afterRender: o" +
|
||||
"nAdd, beforeRemove: onRemove }\"");
|
||||
|
||||
WriteLiteral("></ul>\r\n </div>\r\n </div>\r\n <div");
|
||||
|
||||
WriteLiteral(" id=\"readyForReturn\"");
|
||||
|
||||
WriteLiteral(" class=\"list\"");
|
||||
|
||||
WriteLiteral(">\r\n <h3>\r\n Ready for Return <span");
|
||||
WriteLiteral(">\r\n <h3>Ready for Return (<span");
|
||||
|
||||
WriteLiteral(" id=\"readyForReturnCount\"");
|
||||
WriteLiteral(" data-bind=\"text: readyForReturn().length\"");
|
||||
|
||||
WriteLiteral("></span>\r\n </h3>\r\n <div");
|
||||
WriteLiteral("></span>)\r\n </h3>\r\n <div");
|
||||
|
||||
WriteLiteral(" class=\"content\"");
|
||||
|
||||
WriteLiteral(">\r\n <ul>\r\n </ul>\r\n </div>\r\n " +
|
||||
" </div>\r\n <div");
|
||||
WriteLiteral(">\r\n <!-- ko if: readyForReturn().length == 0 -->\r\n " +
|
||||
" <div");
|
||||
|
||||
WriteLiteral(" class=\"noContent\"");
|
||||
|
||||
WriteLiteral("><None></div>\r\n <!-- /ko -->\r\n <ul");
|
||||
|
||||
WriteLiteral(" data-bind=\"template: { name: \'item-template\', foreach: readyForReturn, afterRend" +
|
||||
"er: onAdd, beforeRemove: onRemove }\"");
|
||||
|
||||
WriteLiteral("></ul>\r\n </div>\r\n </div>\r\n <div");
|
||||
|
||||
WriteLiteral(" id=\"waitingForUserAction\"");
|
||||
|
||||
WriteLiteral(" class=\"list\"");
|
||||
|
||||
WriteLiteral(">\r\n <h3>\r\n Waiting for User Action <span");
|
||||
WriteLiteral(">\r\n <h3>Waiting for User Action (<span");
|
||||
|
||||
WriteLiteral(" id=\"waitingForUserActionCount\"");
|
||||
WriteLiteral(" data-bind=\"text: waitingForUserAction().length\"");
|
||||
|
||||
WriteLiteral("></span>\r\n </h3>\r\n <div");
|
||||
WriteLiteral("></span>)\r\n </h3>\r\n <div");
|
||||
|
||||
WriteLiteral(" class=\"content\"");
|
||||
|
||||
WriteLiteral(">\r\n <ul>\r\n </ul>\r\n </div>\r\n " +
|
||||
" </div>\r\n </section>\r\n <footer>\r\n </footer>\r\n " +
|
||||
"</div>\r\n <script");
|
||||
WriteLiteral(">\r\n <!-- ko if: waitingForUserAction().length == 0 -->\r\n " +
|
||||
" <div");
|
||||
|
||||
WriteLiteral(" type=\"text/javascript\"");
|
||||
WriteLiteral(" class=\"noContent\"");
|
||||
|
||||
WriteLiteral(">\r\n // Resizing\r\n $(function () {\r\n var $inProcess = $(\'" +
|
||||
"#inProcess\');\r\n var $inProcessContent = $inProcess.find(\'.content\');\r" +
|
||||
"\n var $inProcessHeader = $inProcess.find(\'.h3\');\r\n var $re" +
|
||||
"adyForReturn = $(\'#readyForReturn\');\r\n var $readyForReturnContent = $" +
|
||||
"readyForReturn.find(\'.content\');\r\n var $readyForReturnHeader = $ready" +
|
||||
"ForReturn.find(\'.h3\');\r\n var $waitingForUserAction = $(\'#waitingForUs" +
|
||||
"erAction\');\r\n var $waitingForUserActionContent = $waitingForUserActio" +
|
||||
"n.find(\'.content\');\r\n var $waitingForUserActionHeader = $waitingForUs" +
|
||||
"erAction.find(\'.h3\');\r\n var $mainSection = $(\'#mainSection\');\r\n " +
|
||||
" var $mainHeader = $(\'#mainHeader\');\r\n var $mainFooter = $(\'#mai" +
|
||||
"nFooter\');\r\n\r\n var onResize = function () {\r\n var widt" +
|
||||
"h = $mainSection.width();\r\n var height = $(window).height() - $ma" +
|
||||
"inHeader.outerHeight() - $mainFooter.outerHeight() - 25;\r\n\r\n $inP" +
|
||||
"rocess.height(height);\r\n $inProcess.width((width * .28) - 11);\r\n " +
|
||||
" $inProcessContent.height(height - $inProcessHeader.outerHeight() " +
|
||||
"- 56);\r\n\r\n $readyForReturn.height(height);\r\n $read" +
|
||||
"yForReturn.width((width * .36) - 11);\r\n $readyForReturnContent.he" +
|
||||
"ight(height - $readyForReturnHeader.outerHeight() - 56);\r\n\r\n $wai" +
|
||||
"tingForUserAction.height(height);\r\n $waitingForUserAction.width((" +
|
||||
"width * .36) - 11);\r\n $waitingForUserActionContent.height(height " +
|
||||
"- $waitingForUserActionHeader.outerHeight() - 56);\r\n };\r\n\r\n " +
|
||||
" $(window).resize(onResize);\r\n onResize();\r\n });\r\n </scrip" +
|
||||
"t>\r\n <script");
|
||||
WriteLiteral("><None></div>\r\n <!-- /ko -->\r\n <ul");
|
||||
|
||||
WriteLiteral(" type=\"text/javascript\"");
|
||||
WriteLiteral(" data-bind=\"template: { name: \'item-template\', foreach: waitingForUserAction, aft" +
|
||||
"erAdd: onAdd, beforeRemove: onRemove }\"");
|
||||
|
||||
WriteLiteral(@">
|
||||
// Hide Mouse Mouse
|
||||
$(function () {
|
||||
var mouseVisible = true;
|
||||
var mouseHideToken;
|
||||
var documentBody = $('body');
|
||||
WriteLiteral("></ul>\r\n </div>\r\n </div>\r\n <footer");
|
||||
|
||||
var hideMouse = function () {
|
||||
if (mouseVisible) {
|
||||
documentBody.css('cursor', 'none');
|
||||
mouseVisible = false;
|
||||
}
|
||||
};
|
||||
var showMouse = function () {
|
||||
if (!mouseVisible) {
|
||||
documentBody.css('cursor', 'auto');
|
||||
mouseVisible = true;
|
||||
}
|
||||
};
|
||||
WriteLiteral(" id=\"footer\"");
|
||||
|
||||
$(document).mousemove(function () {
|
||||
showMouse();
|
||||
if (mouseHideToken)
|
||||
window.clearTimeout(mouseHideToken);
|
||||
mouseHideToken = window.setTimeout(hideMouse, 2000);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script");
|
||||
WriteLiteral(">\r\n </footer>\r\n </section>\r\n </div>\r\n <script");
|
||||
|
||||
WriteLiteral(" type=\"text/javascript\"");
|
||||
WriteLiteral(" type=\"text/html\"");
|
||||
|
||||
WriteLiteral(">\r\n $(function () {\r\n var models = {};\r\n var modelsI" +
|
||||
"nProcessSorted = [];\r\n var modelsInProcessCount = 0;\r\n var" +
|
||||
" modelsReadyForReturnSorted = [];\r\n var modelsReadyForReturnCount = 0" +
|
||||
";\r\n var modelsWaitingForUserActionSorted = [];\r\n var model" +
|
||||
"sWaitingForUserActionCount = 0;\r\n var $inProcess = $(\'#inProcess\');\r\n" +
|
||||
" var $inProcessContent = $inProcess.find(\'.content ul\');\r\n " +
|
||||
" var $readyForReturn = $(\'#readyForReturn\');\r\n var $readyForReturnCon" +
|
||||
"tent = $readyForReturn.find(\'.content ul\');\r\n var $waitingForUserActi" +
|
||||
"on = $(\'#waitingForUserAction\');\r\n var $waitingForUserActionContent =" +
|
||||
" $waitingForUserAction.find(\'.content ul\');\r\n var modelsInProcessInde" +
|
||||
"xOffset = 0;\r\n var scrollInProcessToken = null;\r\n var mode" +
|
||||
"lsReadyForReturnIndexOffset = 0;\r\n var scrollReadyForReturnToken = nu" +
|
||||
"ll;\r\n var modelsWaitingForUserActionIndexOffset = 0;\r\n var" +
|
||||
" scrollWaitingForUserActionToken = null;\r\n var scrollSpeed = 3000;\r\n " +
|
||||
" var persistantConnection = null;\r\n var filterDeviceAddress" +
|
||||
"Include;\r\n var filterDeviceAddressExclude;\r\n var filterDev" +
|
||||
"iceProfileInclude;\r\n var filterDeviceProfileExclude;\r\n \r\n " +
|
||||
" var getParameterByName = function (name) {\r\n name = na" +
|
||||
"me.replace(/[\\[]/, \"\\\\\\[\").replace(/[\\]]/, \"\\\\\\]\");\r\n var regexS " +
|
||||
"= \"[\\\\?&]\" + name + \"=([^&#]*)\";\r\n var regex = new RegExp(regexS)" +
|
||||
";\r\n var results = regex.exec(window.location.search);\r\n " +
|
||||
" if (results == null)\r\n return \"\";\r\n else" +
|
||||
"\r\n return decodeURIComponent(results[1].replace(/\\+/g, \" \"));" +
|
||||
"\r\n }\r\n\r\n var buildFilters = function () {\r\n " +
|
||||
" var deviceAddressInclude = getParameterByName(\'deviceAddressInclude\');\r\n " +
|
||||
" if (deviceAddressInclude) {\r\n filterDeviceAddressInc" +
|
||||
"lude = {};\r\n var split = deviceAddressInclude.split(\",\");\r\n " +
|
||||
" for (var i = 0; i < split.length; i++) {\r\n " +
|
||||
" filterDeviceAddressInclude[split[i].toLowerCase()] = true;\r\n " +
|
||||
" }\r\n } else {\r\n var deviceAddressExclude = " +
|
||||
"getParameterByName(\'deviceAddressExclude\');\r\n if (deviceAddre" +
|
||||
"ssExclude) {\r\n filterDeviceAddressExclude = {};\r\n " +
|
||||
" var split = deviceAddressExclude.split(\",\");\r\n " +
|
||||
" for (var i = 0; i < split.length; i++) {\r\n filt" +
|
||||
"erDeviceAddressExclude[split[i].toLowerCase()] = true;\r\n " +
|
||||
"}\r\n } else {\r\n var deviceProfileInclud" +
|
||||
"e = getParameterByName(\'deviceProfileInclude\');\r\n if (dev" +
|
||||
"iceProfileInclude) {\r\n filterDeviceProfileInclude = {" +
|
||||
"};\r\n var deviceProfileIncludeSplit = deviceProfileInc" +
|
||||
"lude.split(\",\");\r\n for (var i = 0; i < deviceProfileI" +
|
||||
"ncludeSplit.length; i++) {\r\n filterDeviceProfileI" +
|
||||
"nclude[parseInt(deviceProfileIncludeSplit[i])] = true;\r\n " +
|
||||
" }\r\n } else {\r\n var deviceP" +
|
||||
"rofileExclude = getParameterByName(\'deviceProfileExclude\');\r\n " +
|
||||
" if (deviceProfileExclude) {\r\n filterDevi" +
|
||||
"ceProfileExclude = {};\r\n var deviceProfileExclude" +
|
||||
"Split = deviceProfileExclude.split(\",\");\r\n for (v" +
|
||||
"ar i = 0; i < deviceProfileExcludeSplit.length; i++) {\r\n " +
|
||||
" filterDeviceProfileExclude[parseInt(deviceProfileExcludeSplit[i])] =" +
|
||||
" true;\r\n }\r\n }\r\n " +
|
||||
" }\r\n }\r\n }\r\n }\r\n " +
|
||||
" var calculateFilter = function (model) {\r\n if (model) {" +
|
||||
"\r\n if (filterDeviceAddressInclude) {\r\n " +
|
||||
" return (filterDeviceAddressInclude[model.DeviceAddress.toLowerCase()] == true)\r" +
|
||||
"\n }\r\n if (filterDeviceAddressExclude) {\r\n " +
|
||||
" return (!filterDeviceAddressExclude[model.DeviceAddress.t" +
|
||||
"oLowerCase()])\r\n }\r\n if (filterDeviceProfi" +
|
||||
"leInclude) {\r\n return (filterDeviceProfileInclude[model.D" +
|
||||
"eviceProfileId] == true)\r\n }\r\n if (filterD" +
|
||||
"eviceProfileExclude) {\r\n return (!filterDeviceProfileExcl" +
|
||||
"ude[model.DeviceProfileId])\r\n }\r\n return t" +
|
||||
"rue;\r\n }\r\n return false;\r\n }\r\n\r\n " +
|
||||
" var sortModels = function () {\r\n modelsInProcessSorted = [];" +
|
||||
"\r\n modelsReadyForReturnSorted = [];\r\n modelsWaitin" +
|
||||
"gForUserActionSorted = [];\r\n var modelSortFunc = function (a, b) " +
|
||||
"{\r\n if (a.UserId.toUpperCase() == b.UserId.toUpperCase()) {\r\n" +
|
||||
" return 0;\r\n } else {\r\n " +
|
||||
" if (a.UserId.toUpperCase() < b.UserId.toUpperCase()) {\r\n " +
|
||||
" return -1\r\n } else {\r\n " +
|
||||
" return 1\r\n }\r\n }\r\n " +
|
||||
" };\r\n for (var key in models) {\r\n var model =" +
|
||||
" models[key];\r\n if (model) {\r\n if (mod" +
|
||||
"el.WaitingForUserAction) {\r\n modelsWaitingForUserActi" +
|
||||
"onSorted.push(model);\r\n } else {\r\n " +
|
||||
" if (model.ReadyForReturn) {\r\n modelsReadyFor" +
|
||||
"ReturnSorted.push(model);\r\n } else {\r\n " +
|
||||
" modelsInProcessSorted.push(model);\r\n " +
|
||||
" }\r\n }\r\n }\r\n }\r\n " +
|
||||
" modelsReadyForReturnSorted = modelsReadyForReturnSorted.sort(modelSortF" +
|
||||
"unc);\r\n modelsInProcessSorted = modelsInProcessSorted.sort(modelS" +
|
||||
"ortFunc);\r\n modelsWaitingForUserActionSorted = modelsWaitingForUs" +
|
||||
"erActionSorted.sort(modelSortFunc);\r\n\r\n if (modelsInProcessSorted" +
|
||||
".length != modelsInProcessCount) {\r\n modelsInProcessCount = m" +
|
||||
"odelsInProcessSorted.length;\r\n $(\'#inProcessCount\').text(\'(\' " +
|
||||
"+ modelsInProcessCount + \')\');\r\n }\r\n if (modelsRea" +
|
||||
"dyForReturnSorted.length != modelsReadyForReturnCount) {\r\n mo" +
|
||||
"delsReadyForReturnCount = modelsReadyForReturnSorted.length;\r\n " +
|
||||
" $(\'#readyForReturnCount\').text(\'(\' + modelsReadyForReturnCount + \')\');\r\n " +
|
||||
" }\r\n if (modelsWaitingForUserActionSorted.length != mode" +
|
||||
"lsWaitingForUserActionCount) {\r\n modelsWaitingForUserActionCo" +
|
||||
"unt = modelsWaitingForUserActionSorted.length;\r\n $(\'#waitingF" +
|
||||
"orUserActionCount\').text(\'(\' + modelsWaitingForUserActionCount + \')\');\r\n " +
|
||||
" }\r\n\r\n };\r\n\r\n var scrollReadyForReturn = function (" +
|
||||
") {\r\n $readyForReturnContent.find(\'li\').last().detach().prependTo" +
|
||||
"($readyForReturnContent).hide().slideDown(\'slow\');\r\n modelsReadyF" +
|
||||
"orReturnIndexOffset++;\r\n if (modelsReadyForReturnIndexOffset >= m" +
|
||||
"odelsReadyForReturnSorted.length) {\r\n modelsReadyForReturnInd" +
|
||||
"exOffset = 0;\r\n }\r\n scrollReadyForReturnToken = wi" +
|
||||
"ndow.setTimeout(scrollReadyForReturn, scrollSpeed);\r\n };\r\n " +
|
||||
" var updateScrollReadyForReturn = function () {\r\n var containerHe" +
|
||||
"ight = $readyForReturn.find(\'.content\').height();\r\n var contentHe" +
|
||||
"ight = $readyForReturnContent.height();\r\n if (containerHeight >= " +
|
||||
"contentHeight && scrollReadyForReturnToken) {\r\n window.clearT" +
|
||||
"imeout(scrollReadyForReturnToken);\r\n return;\r\n " +
|
||||
" }\r\n if (containerHeight < contentHeight && scrollReadyForReturnT" +
|
||||
"oken == null) {\r\n scrollReadyForReturnToken = window.setTimeo" +
|
||||
"ut(scrollReadyForReturn, scrollSpeed);\r\n }\r\n };\r\n " +
|
||||
" var scrollInProcess = function () {\r\n $inProcessContent.fi" +
|
||||
"nd(\'li\').last().detach().prependTo($inProcessContent).hide().slideDown(\'slow\');\r" +
|
||||
"\n modelsInProcessIndexOffset++;\r\n if (modelsInProc" +
|
||||
"essIndexOffset >= modelsInProcessSorted.length) {\r\n modelsInP" +
|
||||
"rocessIndexOffset = 0;\r\n }\r\n scrollInProcessToken " +
|
||||
"= window.setTimeout(scrollInProcess, scrollSpeed);\r\n };\r\n " +
|
||||
"var updateScrollInProcess = function () {\r\n var containerHeight =" +
|
||||
" $inProcess.find(\'.content\').height();\r\n var contentHeight = $inP" +
|
||||
"rocessContent.height();\r\n if (containerHeight >= contentHeight &&" +
|
||||
" scrollInProcessToken) {\r\n window.clearTimeout(scrollInProces" +
|
||||
"sToken);\r\n return;\r\n }\r\n if (co" +
|
||||
"ntainerHeight < contentHeight && scrollInProcessToken == null) {\r\n " +
|
||||
" scrollInProcessToken = window.setTimeout(scrollInProcess, scrollSpeed);\r\n " +
|
||||
" }\r\n };\r\n var scrollWaitingForUserAction = f" +
|
||||
"unction () {\r\n $waitingForUserActionContent.find(\'li\').last().det" +
|
||||
"ach().prependTo($waitingForUserActionContent).hide().slideDown(\'slow\');\r\n " +
|
||||
" modelsInProcessIndexOffset++;\r\n if (modelsWaitingForUser" +
|
||||
"ActionIndexOffset >= modelsWaitingForUserActionSorted.length) {\r\n " +
|
||||
" modelsWaitingForUserActionIndexOffset = 0;\r\n }\r\n " +
|
||||
" scrollWaitingForUserActionToken = window.setTimeout(scrollWaitingForUserActi" +
|
||||
"on, scrollSpeed);\r\n };\r\n var updateScrollWaitingForUserAct" +
|
||||
"ion = function () {\r\n var containerHeight = $waitingForUserAction" +
|
||||
".find(\'.content\').height();\r\n var contentHeight = $waitingForUser" +
|
||||
"ActionContent.height();\r\n if (containerHeight >= contentHeight &&" +
|
||||
" scrollWaitingForUserActionToken) {\r\n window.clearTimeout(scr" +
|
||||
"ollWaitingForUserActionToken);\r\n return;\r\n }\r\n" +
|
||||
" if (containerHeight < contentHeight && scrollWaitingForUserActio" +
|
||||
"nToken == null) {\r\n scrollWaitingForUserActionToken = window." +
|
||||
"setTimeout(scrollWaitingForUserAction, scrollSpeed);\r\n }\r\n " +
|
||||
" };\r\n\r\n var modelInsertIndex = function (model) {\r\n " +
|
||||
" sortModels();\r\n var findIndex = function (model, array, offset)" +
|
||||
" {\r\n for (var i = 0; i < array.length; i++) {\r\n " +
|
||||
" if (model.UserId == array[i].UserId) {\r\n va" +
|
||||
"r index = i + offset;\r\n if (index > (array.length - 1" +
|
||||
")) {\r\n index = index - (array.length - 1);\r\n " +
|
||||
" }\r\n return index;\r\n " +
|
||||
" }\r\n };\r\n };\r\n if (" +
|
||||
"model.WaitingForUserAction) {\r\n return findIndex(model, model" +
|
||||
"sWaitingForUserActionSorted, modelsWaitingForUserActionIndexOffset);\r\n " +
|
||||
" } else {\r\n if (model.ReadyForReturn) {\r\n " +
|
||||
" return findIndex(model, modelsReadyForReturnSorted, modelsReadyForRetur" +
|
||||
"nIndexOffset);\r\n } else {\r\n return fin" +
|
||||
"dIndex(model, modelsInProcessSorted, modelsInProcessIndexOffset);\r\n " +
|
||||
" }\r\n }\r\n }\r\n var modelInsert = functi" +
|
||||
"on (model) {\r\n var index = modelInsertIndex(model);\r\n " +
|
||||
" var insertTo = function (model, host) {\r\n var hostLi = ho" +
|
||||
"st.children(\'li\');\r\n if (hostLi.length == 0 || hostLi.length " +
|
||||
"< index) {\r\n host.append(model.htmlLi);\r\n " +
|
||||
" } else {\r\n if (index == 0) {\r\n " +
|
||||
" host.prepend(model.htmlLi);\r\n } else {\r\n " +
|
||||
" $(hostLi.get(index - 1)).after(model.htmlLi);\r\n " +
|
||||
" }\r\n }\r\n }\r\n if (model.Wa" +
|
||||
"itingForUserAction) {\r\n insertTo(model, $waitingForUserAction" +
|
||||
"Content);\r\n window.setTimeout(updateScrollWaitingForUserActio" +
|
||||
"n, 100);\r\n } else {\r\n if (model.ReadyForReturn" +
|
||||
") {\r\n insertTo(model, $readyForReturnContent);\r\n " +
|
||||
" window.setTimeout(updateScrollReadyForReturn, 100);\r\n " +
|
||||
" } else {\r\n insertTo(model, $inProcessContent);\r\n " +
|
||||
" window.setTimeout(updateScrollInProcess, 100);\r\n " +
|
||||
" }\r\n }\r\n }\r\n\r\n var removeModel = " +
|
||||
"function (model) {\r\n if (model) {\r\n model.html" +
|
||||
"Li.slideUp(\'fast\', function () {\r\n model.htmlLi.remove();" +
|
||||
"\r\n });\r\n }\r\n };\r\n\r\n var " +
|
||||
"processModel = function (id, model, init) {\r\n if (!calculateFilte" +
|
||||
"r(model)) {\r\n removeModel(models[id]);\r\n d" +
|
||||
"elete models[id];\r\n sortModels();\r\n } else {\r\n" +
|
||||
" var existing = models[id];\r\n models[id] =" +
|
||||
" model;\r\n\r\n // Add\r\n model.htmlContent = $" +
|
||||
"(\'<div>\').text(model.UserId + \' - \' + model.UserDisplayName);\r\n " +
|
||||
" if (!model.ReadyForReturn && model.EstimatedReturnTime) {\r\n " +
|
||||
" model.htmlContent.append($(\'<span class=\"small\">\').text(\' (Expected: \' + m" +
|
||||
"odel.EstimatedReturnTime + \')\'));\r\n }\r\n if" +
|
||||
" (model.WaitingForUserAction) {\r\n model.htmlContent.appen" +
|
||||
"d($(\'<span class=\"small\">\').text(\' (Since \' + model.WaitingForUserActionSince + " +
|
||||
"\')\'));\r\n } else {\r\n if (model.ReadyFor" +
|
||||
"Return && model.ReadyForReturnSince) {\r\n model.htmlCo" +
|
||||
"ntent.append($(\'<span class=\"small\">\').text(\' (Ready \' + model.ReadyForReturnSin" +
|
||||
"ce + \')\'));\r\n }\r\n }\r\n\r\n " +
|
||||
" if (existing) {\r\n if (existing.ReadyForReturn != mod" +
|
||||
"el.ReadyForReturn || existing.WaitingForUserAction != model.WaitingForUserAction" +
|
||||
") {\r\n removeModel(existing);\r\n " +
|
||||
" model.htmlLi = $(\'<li>\').html(model.htmlContent).data(\'ModelId\', id).hide()" +
|
||||
";\r\n modelInsert(model);\r\n " +
|
||||
"if (init) {\r\n model.htmlLi.fadeIn();\r\n " +
|
||||
" } else {\r\n model.htmlLi.slideDow" +
|
||||
"n();\r\n }\r\n } else {\r\n " +
|
||||
" model.htmlLi = existing.htmlLi;\r\n " +
|
||||
"model.htmlLi.slideUp(\'fast\', function () {\r\n mode" +
|
||||
"l.htmlLi.html(model.htmlContent).slideDown();\r\n });\r\n" +
|
||||
" }\r\n } else {\r\n " +
|
||||
" model.htmlLi = $(\'<li>\').html(model.htmlContent).data(\'ModelId\', id).hide();\r\n " +
|
||||
" modelInsert(model);\r\n if (init) {\r" +
|
||||
"\n model.htmlLi.fadeIn();\r\n } e" +
|
||||
"lse {\r\n model.htmlLi.slideDown(\'slow\');\r\n " +
|
||||
" }\r\n }\r\n if (model.htmlLi && mo" +
|
||||
"del.IsAlert) {\r\n model.htmlLi.addClass(\'alert\');\r\n " +
|
||||
" }\r\n }\r\n };\r\n\r\n var updatedMode" +
|
||||
"l = function (id) {\r\n var userId = id.toString();\r\n\r\n " +
|
||||
" $.ajax({\r\n dataType: \'json\',\r\n url: \'");
|
||||
WriteLiteral(" id=\"item-template\"");
|
||||
|
||||
WriteLiteral(">\r\n <li data-bind=\"css: { alert: IsAlert }\">\r\n <span data-bind=" +
|
||||
"\"text: UserIdFriendly + \' - \' + UserDisplayName\"></span>\r\n <!-- ko if" +
|
||||
": !ReadyForReturn && EstimatedReturnTimeUnixEpoc -->\r\n <span class=\"s" +
|
||||
"mall\">(Expected <span data-bind=\"livestamp: EstimatedReturnTimeUnixEpoc\"></span>" +
|
||||
")</span>\r\n <!-- /ko -->\r\n <!-- ko if: WaitingForUserAction" +
|
||||
" -->\r\n <span class=\"small\">(Since <span data-bind=\"livestamp: Waiting" +
|
||||
"ForUserActionSinceUnixEpoc\"></span>)</span>\r\n <!-- /ko -->\r\n " +
|
||||
" <!-- ko if: ReadyForReturn && !WaitingForUserAction -->\r\n <span cl" +
|
||||
"ass=\"small\">(Ready <span data-bind=\"livestamp: ReadyForReturnSinceUnixEpoc\"></sp" +
|
||||
"an>)</span>\r\n <!-- /ko -->\r\n </li>\r\n </script>\r\n <script" +
|
||||
">\r\n ko.bindingHandlers.livestamp = {\r\n init: function (element" +
|
||||
", valueAccessor, allBindings, viewModel, bindingContext) {\r\n var " +
|
||||
"value = valueAccessor();\r\n var valueUnwrapped = ko.unwrap(value);" +
|
||||
"\r\n\r\n if (valueUnwrapped)\r\n $(element).livestam" +
|
||||
"p(valueUnwrapped);\r\n else\r\n $(element).livesta" +
|
||||
"mp(\'destroy\');\r\n }\r\n };\r\n </script>\r\n <script>\r\n " +
|
||||
"$(function () {\r\n var hub;\r\n var viewModel;\r\n\r\n " +
|
||||
" var rotateSpeed = 3000;\r\n var itemFilters;\r\n\r\n var $inPro" +
|
||||
"cessList = $(\'#inProcess\').find(\'ul\');\r\n var $readyForReturnList = $(" +
|
||||
"\'#readyForReturn\').find(\'ul\');\r\n var $waitingForUserActionList = $(\'#" +
|
||||
"waitingForUserAction\').find(\'ul\');\r\n\r\n function noticeboardViewModel(" +
|
||||
"inProcess, readyForReturn, waitingForUserAction) {\r\n var self = t" +
|
||||
"his;\r\n\r\n self.initialized = false;\r\n\r\n self.inProc" +
|
||||
"ess = ko.observableArray(inProcess);\r\n self.readyForReturn = ko.o" +
|
||||
"bservableArray(readyForReturn);\r\n self.waitingForUserAction = ko." +
|
||||
"observableArray(waitingForUserAction);\r\n\r\n self.onRemove = functi" +
|
||||
"on (element, index, data) {\r\n $(element).slideUp(400, functio" +
|
||||
"n () {\r\n $(this).remove();\r\n });\r\n " +
|
||||
" }\r\n self.onAdd = function (element, index, data) {\r\n " +
|
||||
" if (self.initialized)\r\n $(element).hid" +
|
||||
"e().slideDown(400);\r\n }\r\n }\r\n\r\n function in" +
|
||||
"it() {\r\n // Connect to Hub\r\n hub = $.connection.no" +
|
||||
"ticeboardUpdates;\r\n\r\n // Map Functions\r\n hub.clien" +
|
||||
"t.updateHeldDeviceForUser = updateHeldDevice;\r\n\r\n $.connection.hu" +
|
||||
"b.qs = { Noticeboard: \'");
|
||||
|
||||
|
||||
#line 435 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
Write(Url.Action(MVC.Public.UserHeldDevices.UserHeldDevice()));
|
||||
#line 127 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
Write(Disco.Services.Jobs.Noticeboards.HeldDevicesForUsers.Name);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(@"',
|
||||
data: { id: userId },
|
||||
success: function (data) {
|
||||
processModel(userId, data, false);
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown){
|
||||
if (textStatus == 'parsererror') // null Result
|
||||
processModel(userId, null, false);
|
||||
}
|
||||
})
|
||||
};
|
||||
WriteLiteral(@"' };
|
||||
$.connection.hub.error(connectionError);
|
||||
$.connection.hub.disconnected(connectionError);
|
||||
$.connection.hub.reconnected(connectionError);
|
||||
|
||||
var connectionError = function () {
|
||||
if (persistantConnection) {
|
||||
persistantConnection.stop();
|
||||
persistantConnection = null;
|
||||
window.setTimeout(function () {
|
||||
window.location.href = '");
|
||||
// Start Connection
|
||||
$.connection.hub.start().fail(connectionError).done(loadData);
|
||||
}
|
||||
|
||||
// Called after SignalR is connected
|
||||
function loadData() {
|
||||
$.getJSON('");
|
||||
|
||||
|
||||
#line 452 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
Write(Url.Action(MVC.Public.UserHeldDevices.Noticeboard()));
|
||||
#line 138 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
Write(Url.Action(MVC.Public.UserHeldDevices.UserHeldDevices()));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\';\r\n }, 10000);\r\n }\r\n }\r\n\r\n " +
|
||||
" var init = function () {\r\n buildFilters();\r\n pe" +
|
||||
"rsistantConnection = $.connection(\'");
|
||||
|
||||
|
||||
#line 459 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
Write(Url.Content("~/Public/UserHeldDevices/Notifications"));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\');\r\n persistantConnection.received(updatedModel);\r\n " +
|
||||
" persistantConnection.error(connectionError);\r\n persistantConnec" +
|
||||
"tion.start(function () {\r\n $.getJSON(\'");
|
||||
|
||||
|
||||
#line 463 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
Write(Url.Action(MVC.Public.UserHeldDevices.UserHeldDevices()));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(@"', null, function (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
processModel(data[i].UserId, data[i], true);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
init();
|
||||
|
||||
});
|
||||
</script>
|
||||
<div");
|
||||
|
||||
WriteLiteral(" id=\"mainFooter\"");
|
||||
|
||||
WriteLiteral(">\r\n <img");
|
||||
|
||||
WriteLiteral(" style=\"width: 34px; height: 34px; margin-top: -5px; margin-bottom: -12px;\"");
|
||||
|
||||
WriteAttribute("src", Tuple.Create(" src=\"", 22642), Tuple.Create("\"", 22692)
|
||||
|
||||
#line 475 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 22648), Tuple.Create<System.Object, System.Int32>(Links.ClientSource.Style.Images.Heading_png
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 22648), false)
|
||||
);
|
||||
|
||||
WriteLiteral(" alt=\"Disco Logo\"");
|
||||
|
||||
WriteLiteral(" />\r\n powered by Disco\r\n </div>\r\n</body>\r\n</html>\r\n");
|
||||
WriteLiteral("\', null, function (data) {\r\n\r\n var inProcess = [];\r\n " +
|
||||
" var readyForReturn = [];\r\n var waitingForUserAction" +
|
||||
" = [];\r\n\r\n data.filter(function (heldDeviceItem) {\r\n " +
|
||||
" return includeItem(heldDeviceItem)\r\n }).forEac" +
|
||||
"h(function (heldDeviceItem) {\r\n if (isWaitingForUserActio" +
|
||||
"n(heldDeviceItem))\r\n waitingForUserAction.push(heldDe" +
|
||||
"viceItem);\r\n else if (isReadyForReturn(heldDeviceItem))\r\n" +
|
||||
" readyForReturn.push(heldDeviceItem);\r\n " +
|
||||
" else if (isInProcess(heldDeviceItem))\r\n inP" +
|
||||
"rocess.push(heldDeviceItem);\r\n });\r\n\r\n inP" +
|
||||
"rocess.sort(sortFunction);\r\n readyForReturn.sort(sortFunction" +
|
||||
");\r\n waitingForUserAction.sort(sortFunction);\r\n\r\n " +
|
||||
" viewModel = new noticeboardViewModel(inProcess, readyForReturn, waitingF" +
|
||||
"orUserAction);\r\n\r\n ko.applyBindings(viewModel);\r\n " +
|
||||
" viewModel.initialized = true;\r\n\r\n $(\'body\').removeCla" +
|
||||
"ss(\'status-connecting\');\r\n\r\n window.setTimeout(scheduleRotati" +
|
||||
"on, rotateSpeed);\r\n });\r\n buildFilters();\r\n " +
|
||||
" }\r\n\r\n // Called by SignalR\r\n function updateHeldDevic" +
|
||||
"e(updates) {\r\n if (viewModel) {\r\n\r\n $.each(upd" +
|
||||
"ates, function (UserId, heldDeviceItem) {\r\n // Remove Exi" +
|
||||
"sting\r\n removeItem(UserId);\r\n\r\n //" +
|
||||
" Add Item\r\n addItem(heldDeviceItem);\r\n " +
|
||||
" });\r\n }\r\n }\r\n\r\n function removeItem(UserId" +
|
||||
") {\r\n removeItemFromArray(viewModel.inProcess, UserId);\r\n " +
|
||||
" removeItemFromArray(viewModel.readyForReturn, UserId);\r\n " +
|
||||
"removeItemFromArray(viewModel.waitingForUserAction, UserId);\r\n }\r\n\r\n " +
|
||||
" function addItem(heldDeviceItem) {\r\n if (heldDeviceIte" +
|
||||
"m !== null &&\r\n heldDeviceItem !== undefined &&\r\n " +
|
||||
" includeItem(heldDeviceItem)) {\r\n\r\n var array;\r\n\r\n " +
|
||||
" if (isWaitingForUserAction(heldDeviceItem))\r\n " +
|
||||
" array = viewModel.waitingForUserAction;\r\n else if (isRea" +
|
||||
"dyForReturn(heldDeviceItem))\r\n array = viewModel.readyFor" +
|
||||
"Return;\r\n else if (isInProcess(heldDeviceItem))\r\n " +
|
||||
" array = viewModel.inProcess;\r\n\r\n if (array().leng" +
|
||||
"th === 0) {\r\n array.push(heldDeviceItem);\r\n " +
|
||||
" } else {\r\n var index = findSortedInsertIndex(array," +
|
||||
" heldDeviceItem);\r\n if (index === -1)\r\n " +
|
||||
" array.push(heldDeviceItem);\r\n else\r\n " +
|
||||
" array.splice(index, 0, heldDeviceItem);\r\n }\r" +
|
||||
"\n }\r\n }\r\n\r\n function rotateArrays() {\r\n " +
|
||||
" rotateArray(viewModel.inProcess, $inProcessList);\r\n r" +
|
||||
"otateArray(viewModel.readyForReturn, $readyForReturnList);\r\n rota" +
|
||||
"teArray(viewModel.waitingForUserAction, $waitingForUserActionList);\r\n " +
|
||||
" }\r\n\r\n function scheduleRotation() {\r\n rotateArrays();" +
|
||||
"\r\n\r\n window.setTimeout(scheduleRotation, rotateSpeed);\r\n " +
|
||||
" }\r\n\r\n function includeItem(heldDeviceItem) {\r\n if (" +
|
||||
"itemFilters == null || itemFilters.length == 0)\r\n return true" +
|
||||
";\r\n\r\n return itemFilters.reduce(function (previousValue, currentV" +
|
||||
"alue, index, array) {\r\n if (previousValue === false)\r\n " +
|
||||
" return false;\r\n return currentValue(heldDevi" +
|
||||
"ceItem);\r\n }, true);\r\n }\r\n\r\n function build" +
|
||||
"Filters() {\r\n var filters = [];\r\n var queryStringP" +
|
||||
"arameters = getQueryStringParameters();\r\n\r\n if (queryStringParame" +
|
||||
"ters !== null) {\r\n $.each(queryStringParameters, function (ke" +
|
||||
"y, value) {\r\n switch (key.toLowerCase()) {\r\n " +
|
||||
" case \'deviceaddressinclude\':\r\n var" +
|
||||
" deviceAddresses = value.split(\",\").map(function (v) { return v.toLowerCase(); }" +
|
||||
");\r\n if (deviceAddresses.length > 0) {\r\n " +
|
||||
" filters.push(function (heldDeviceItem) {\r\n " +
|
||||
" // false if DeviceAddressShortName is null\r\n " +
|
||||
" if (!heldDeviceItem.DeviceAddressShortName)\r\n " +
|
||||
" return false;\r\n\r\n " +
|
||||
" // true if DeviceAddressShortName is included\r\n " +
|
||||
" return $.inArray(heldDeviceItem.DeviceAddressShortName" +
|
||||
".toLowerCase(), deviceAddresses) >= 0;\r\n });\r" +
|
||||
"\n }\r\n break;\r\n " +
|
||||
" case \'deviceaddressexclude\':\r\n " +
|
||||
" var deviceAddresses = value.split(\",\").map(function (v) { return v.toLower" +
|
||||
"Case(); });\r\n if (deviceAddresses.length > 0) {\r\n" +
|
||||
" filters.push(function (heldDeviceItem) {\r\n " +
|
||||
" // true if DeviceAddressShortName is null\r" +
|
||||
"\n if (!heldDeviceItem.DeviceAddressShortN" +
|
||||
"ame)\r\n return true;\r\n\r\n " +
|
||||
" // true if DeviceAddressShortName is excluded\r\n " +
|
||||
" return $.inArray(heldDeviceItem.DeviceAddressSh" +
|
||||
"ortName.toLowerCase(), deviceAddresses) < 0;\r\n " +
|
||||
" });\r\n }\r\n break;" +
|
||||
"\r\n case \'deviceprofileinclude\':\r\n " +
|
||||
" var deviceProfiles = value.split(\",\");\r\n " +
|
||||
" if (deviceProfiles.length > 0) {\r\n filter" +
|
||||
"s.push(function (heldDeviceItem) {\r\n // t" +
|
||||
"rue if DeviceProfileId is included\r\n retu" +
|
||||
"rn $.inArray(heldDeviceItem.DeviceProfileId, deviceProfiles) >= 0;\r\n " +
|
||||
" });\r\n }\r\n " +
|
||||
" break;\r\n case \'deviceprofileexclude\':" +
|
||||
"\r\n var deviceProfiles = value.split(\",\");\r\n " +
|
||||
" if (deviceProfiles.length > 0) {\r\n " +
|
||||
" filters.push(function (heldDeviceItem) {\r\n " +
|
||||
" // true if DeviceProfileId is excluded\r\n " +
|
||||
" return $.inArray(heldDeviceItem.DeviceProfileId, deviceProfile" +
|
||||
"s) < 0;\r\n });\r\n " +
|
||||
" }\r\n break;\r\n }\r\n " +
|
||||
" });\r\n }\r\n\r\n if (filters.length > 0)\r\n " +
|
||||
" itemFilters = filters;\r\n else\r\n " +
|
||||
" itemFilters = null;\r\n }\r\n\r\n function connectionError(" +
|
||||
") {\r\n try {\r\n $(\'body\').addClass(\'status-error" +
|
||||
"\');\r\n $.connection.hub.stop();\r\n } catch (e) {" +
|
||||
"\r\n // Ignore\r\n }\r\n\r\n window.set" +
|
||||
"Timeout(function () {\r\n window.location.href = window.locatio" +
|
||||
"n.href;\r\n }, 10000);\r\n }\r\n\r\n // Helpers\r\n " +
|
||||
" function rotateArray(koArray, element) {\r\n var items = " +
|
||||
"koArray();\r\n\r\n if (items.length <= 1)\r\n return" +
|
||||
" 0;\r\n\r\n if (element.height() < (element.parent().height() - 30)) " +
|
||||
"{\r\n\r\n if (findUnsortedArrayTopIndex(items) !== 0)\r\n " +
|
||||
" koArray.sort(sortFunction);\r\n\r\n // Don\'t rotate" +
|
||||
" if small & sorted correctly\r\n return;\r\n }\r\n\r\n" +
|
||||
" // Move Last Item to Top\r\n var item = koArray.pop" +
|
||||
"();\r\n koArray.unshift(item);\r\n }\r\n function" +
|
||||
" removeItemFromArray(koArray, UserId) {\r\n var items = koArray();\r" +
|
||||
"\n for (var i = 0; i < items.length; i++) {\r\n i" +
|
||||
"f (items[i].UserId == UserId) {\r\n koArray.splice(i, 1);\r\n" +
|
||||
" items = koArray();\r\n i--;\r\n " +
|
||||
" }\r\n }\r\n }\r\n function findUnso" +
|
||||
"rtedArrayTopIndex(items) {\r\n // Only one Item\r\n if" +
|
||||
" (items.length <= 1)\r\n return 0;\r\n\r\n for (var " +
|
||||
"i = 1; i < items.length; i++) {\r\n var s = sortFunction(items[" +
|
||||
"i - 1], items[i]);\r\n if (s > 0)\r\n retu" +
|
||||
"rn i;\r\n }\r\n\r\n return 0;\r\n }\r\n " +
|
||||
" function findSortedInsertIndex(koArray, heldDeviceItem) {\r\n var" +
|
||||
" items = koArray();\r\n var startIndex = findUnsortedArrayTopIndex(" +
|
||||
"items);\r\n for (var i = startIndex; i < items.length; i++) {\r\n " +
|
||||
" var s = sortFunction(heldDeviceItem, items[i]);\r\n " +
|
||||
" if (s <= 0)\r\n return i;\r\n }\r\n " +
|
||||
" if (startIndex !== 0) {\r\n for (var i = 0; i < startIn" +
|
||||
"dex; i++) {\r\n var s = sortFunction(heldDeviceItem, items[" +
|
||||
"i]);\r\n if (s <= 0)\r\n return i;" +
|
||||
"\r\n }\r\n return startIndex;\r\n " +
|
||||
" } else {\r\n return -1;\r\n }\r\n }\r\n " +
|
||||
" function sortFunction(l, r) {\r\n return l.UserIdFriendly." +
|
||||
"toLowerCase() == r.UserIdFriendly.toLowerCase() ? 0 : (l.UserIdFriendly.toLowerC" +
|
||||
"ase() < r.UserIdFriendly.toLowerCase() ? -1 : 1)\r\n }\r\n fun" +
|
||||
"ction isInProcess(i) {\r\n return !i.ReadyForReturn && !i.WaitingFo" +
|
||||
"rUserAction;\r\n }\r\n function isReadyForReturn(i) {\r\n " +
|
||||
" return i.ReadyForReturn && !i.WaitingForUserAction;\r\n }\r\n " +
|
||||
" function isWaitingForUserAction(i) {\r\n return i.WaitingF" +
|
||||
"orUserAction;\r\n }\r\n function getQueryStringParameters() {\r" +
|
||||
"\n\r\n if (window.location.search.length === 0)\r\n " +
|
||||
" return null;\r\n\r\n var params = {};\r\n window.locati" +
|
||||
"on.search.substr(1).split(\"&\").forEach(function (pair) {\r\n if" +
|
||||
" (pair === \"\") return;\r\n var parts = pair.split(\"=\");\r\n " +
|
||||
" params[parts[0]] = parts[1] && decodeURIComponent(parts[1].replace" +
|
||||
"(/\\+/g, \" \"));\r\n });\r\n return params;\r\n " +
|
||||
" }\r\n\r\n init();\r\n });\r\n </script>\r\n</body>\r\n</html>");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user