b1575fa321
Dialogs (with a refresh option) appear whenever the SignalR client disconnects or encounters an error. Nonsensical error messages replaced. Page refresh technique changed to allow for urls containing fragment hashes.
447 lines
25 KiB
C#
447 lines
25 KiB
C#
#pragma warning disable 1591
|
|
//------------------------------------------------------------------------------
|
|
// <auto-generated>
|
|
// This code was generated by a tool.
|
|
// Runtime Version:4.0.30319.34014
|
|
//
|
|
// Changes to this file may cause incorrect behavior and will be lost if
|
|
// the code is regenerated.
|
|
// </auto-generated>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace Disco.Web.Areas.Public.Views.HeldDevices
|
|
{
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Web;
|
|
using System.Web.Helpers;
|
|
using System.Web.Mvc;
|
|
using System.Web.Mvc.Ajax;
|
|
using System.Web.Mvc.Html;
|
|
using System.Web.Routing;
|
|
using System.Web.Security;
|
|
using System.Web.UI;
|
|
using System.Web.WebPages;
|
|
using Disco.BI.Extensions;
|
|
using Disco.Models.Repository;
|
|
using Disco.Services;
|
|
using Disco.Services.Authorization;
|
|
using Disco.Services.Web;
|
|
using Disco.Web;
|
|
using Disco.Web.Extensions;
|
|
|
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
|
|
[System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Public/Views/HeldDevices/Noticeboard.cshtml")]
|
|
public partial class Noticeboard : Disco.Services.Web.WebViewPage<Disco.Web.Areas.Public.Models.UserHeldDevices.NoticeboardModel>
|
|
{
|
|
public Noticeboard()
|
|
{
|
|
}
|
|
public override void Execute()
|
|
{
|
|
|
|
#line 2 "..\..\Areas\Public\Views\HeldDevices\Noticeboard.cshtml"
|
|
|
|
Layout = null;
|
|
Html.BundleDeferred("~/ClientScripts/Modules/Knockout");
|
|
Html.BundleDeferred("~/ClientScripts/Modules/jQuery-SignalR");
|
|
Html.BundleDeferred("~/ClientScripts/Core");
|
|
Html.BundleDeferred("~/Style/Public/HeldDevicesNoticeboard");
|
|
|
|
|
|
#line default
|
|
#line hidden
|
|
WriteLiteral("\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta");
|
|
|
|
WriteLiteral(" charset=\"utf-8\"");
|
|
|
|
WriteLiteral(" />\r\n <meta");
|
|
|
|
WriteLiteral(" http-equiv=\"X-UA-Compatible\"");
|
|
|
|
WriteLiteral(" content=\"IE=edge\"");
|
|
|
|
WriteLiteral(" />\r\n <title>Disco ICT - Held Devices</title>\r\n");
|
|
|
|
WriteLiteral(" ");
|
|
|
|
|
|
#line 15 "..\..\Areas\Public\Views\HeldDevices\Noticeboard.cshtml"
|
|
Write(Html.BundleRenderDeferred());
|
|
|
|
|
|
#line default
|
|
#line hidden
|
|
WriteLiteral("\r\n</head>\r\n<body");
|
|
|
|
WriteAttribute("class", Tuple.Create(" class=\"", 562), Tuple.Create("\"", 615)
|
|
, Tuple.Create(Tuple.Create("", 570), Tuple.Create("theme-", 570), true)
|
|
|
|
#line 17 "..\..\Areas\Public\Views\HeldDevices\Noticeboard.cshtml"
|
|
, Tuple.Create(Tuple.Create("", 576), Tuple.Create<System.Object, System.Int32>(Model.DefaultTheme
|
|
|
|
#line default
|
|
#line hidden
|
|
, 576), false)
|
|
, Tuple.Create(Tuple.Create(" ", 597), Tuple.Create("status-connecting", 598), true)
|
|
);
|
|
|
|
WriteLiteral(">\r\n <div");
|
|
|
|
WriteLiteral(" id=\"page\"");
|
|
|
|
WriteLiteral(">\r\n <header");
|
|
|
|
WriteLiteral(" id=\"header\"");
|
|
|
|
WriteLiteral(">\r\n <div");
|
|
|
|
WriteLiteral(" id=\"heading\"");
|
|
|
|
WriteLiteral(">Held Devices</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\"");
|
|
|
|
WriteLiteral(">\r\n <div");
|
|
|
|
WriteLiteral(" id=\"inProcess\"");
|
|
|
|
WriteLiteral(" class=\"list\"");
|
|
|
|
WriteLiteral(">\r\n <h3>In Process (<span");
|
|
|
|
WriteLiteral(" data-bind=\"text: inProcess().length\"");
|
|
|
|
WriteLiteral("></span>)\r\n </h3>\r\n <div");
|
|
|
|
WriteLiteral(" class=\"content\"");
|
|
|
|
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>Ready for Return (<span");
|
|
|
|
WriteLiteral(" data-bind=\"text: readyForReturn().length\"");
|
|
|
|
WriteLiteral("></span>)\r\n </h3>\r\n <div");
|
|
|
|
WriteLiteral(" class=\"content\"");
|
|
|
|
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>Waiting for User Action (<span");
|
|
|
|
WriteLiteral(" data-bind=\"text: waitingForUserAction().length\"");
|
|
|
|
WriteLiteral("></span>)\r\n </h3>\r\n <div");
|
|
|
|
WriteLiteral(" class=\"content\"");
|
|
|
|
WriteLiteral(">\r\n <!-- ko if: waitingForUserAction().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: waitingForUserAction, aft" +
|
|
"erAdd: onAdd, beforeRemove: onRemove }\"");
|
|
|
|
WriteLiteral("></ul>\r\n </div>\r\n </div>\r\n <footer");
|
|
|
|
WriteLiteral(" id=\"footer\"");
|
|
|
|
WriteLiteral(">\r\n </footer>\r\n </section>\r\n </div>\r\n <script");
|
|
|
|
WriteLiteral(" type=\"text/html\"");
|
|
|
|
WriteLiteral(" id=\"item-template\"");
|
|
|
|
WriteLiteral(">\r\n <li data-bind=\"css: { alert: IsAlert }\">\r\n <span data-bind=" +
|
|
"\"text: DeviceDescription\"></span>\r\n <!-- ko if: !ReadyForReturn && Es" +
|
|
"timatedReturnTimeUnixEpoc -->\r\n <span class=\"small\">(Expected <span d" +
|
|
"ata-bind=\"livestamp: EstimatedReturnTimeUnixEpoc\"></span>)</span>\r\n <" +
|
|
"!-- /ko -->\r\n <!-- ko if: WaitingForUserAction -->\r\n <span" +
|
|
" class=\"small\">(Since <span data-bind=\"livestamp: WaitingForUserActionSinceUnixE" +
|
|
"poc\"></span>)</span>\r\n <!-- /ko -->\r\n <!-- ko if: ReadyFor" +
|
|
"Return && !WaitingForUserAction -->\r\n <span class=\"small\">(Ready <spa" +
|
|
"n data-bind=\"livestamp: ReadyForReturnSinceUnixEpoc\"></span>)</span>\r\n " +
|
|
" <!-- /ko -->\r\n </li>\r\n </script>\r\n <script>\r\n ko.bindingHa" +
|
|
"ndlers.livestamp = {\r\n init: function (element, valueAccessor, allBin" +
|
|
"dings, viewModel, bindingContext) {\r\n var value = valueAccessor()" +
|
|
";\r\n var valueUnwrapped = ko.unwrap(value);\r\n\r\n if " +
|
|
"(valueUnwrapped)\r\n $(element).livestamp(valueUnwrapped);\r\n " +
|
|
" else\r\n $(element).livestamp(\'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 var fixedTheme = null;\r\n\r\n " +
|
|
" var $inProcessList = $(\'#inProcess\').find(\'ul\');\r\n var $readyForRe" +
|
|
"turnList = $(\'#readyForReturn\').find(\'ul\');\r\n var $waitingForUserActi" +
|
|
"onList = $(\'#waitingForUserAction\').find(\'ul\');\r\n\r\n function noticebo" +
|
|
"ardViewModel(inProcess, readyForReturn, waitingForUserAction) {\r\n " +
|
|
" var self = this;\r\n\r\n self.initialized = false;\r\n\r\n " +
|
|
" self.inProcess = ko.observableArray(inProcess);\r\n self.readyFor" +
|
|
"Return = ko.observableArray(readyForReturn);\r\n self.waitingForUse" +
|
|
"rAction = ko.observableArray(waitingForUserAction);\r\n\r\n self.onRe" +
|
|
"move = function (element, index, data) {\r\n $(element).slideUp" +
|
|
"(400, function () {\r\n $(this).remove();\r\n " +
|
|
" });\r\n }\r\n self.onAdd = function (element, inde" +
|
|
"x, data) {\r\n if (self.initialized)\r\n $" +
|
|
"(element).hide().slideDown(400);\r\n }\r\n }\r\n\r\n " +
|
|
" function init() {\r\n monitorMouseMove();\r\n applyQ" +
|
|
"ueryString();\r\n\r\n // Connect to Hub\r\n hub = $.conn" +
|
|
"ection.noticeboardUpdates;\r\n\r\n // Map Functions\r\n " +
|
|
"hub.client.updateHeldDevice = updateHeldDevice;\r\n hub.client.setT" +
|
|
"heme = setTheme;\r\n\r\n $.connection.hub.qs = { Noticeboard: \'");
|
|
|
|
|
|
#line 133 "..\..\Areas\Public\Views\HeldDevices\Noticeboard.cshtml"
|
|
Write(Disco.Services.Jobs.Noticeboards.HeldDevices.Name);
|
|
|
|
|
|
#line default
|
|
#line hidden
|
|
WriteLiteral(@"' };
|
|
$.connection.hub.error(connectionError);
|
|
$.connection.hub.disconnected(connectionError);
|
|
$.connection.hub.reconnected(connectionError);
|
|
|
|
// Start Connection
|
|
$.connection.hub.start().fail(connectionError).done(loadData);
|
|
}
|
|
|
|
// Called after SignalR is connected
|
|
function loadData() {
|
|
$.getJSON('");
|
|
|
|
|
|
#line 144 "..\..\Areas\Public\Views\HeldDevices\Noticeboard.cshtml"
|
|
Write(Url.Action(MVC.Public.HeldDevices.HeldDevices()));
|
|
|
|
|
|
#line default
|
|
#line hidden
|
|
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 }\r\n\r\n // Called b" +
|
|
"y SignalR\r\n function updateHeldDevice(updates) {\r\n if " +
|
|
"(viewModel) {\r\n\r\n $.each(updates, function (deviceSerialNumbe" +
|
|
"r, heldDeviceItem) {\r\n // Remove Existing\r\n " +
|
|
" removeItem(deviceSerialNumber);\r\n\r\n // Add Item" +
|
|
"\r\n addItem(heldDeviceItem);\r\n });\r\n " +
|
|
" }\r\n }\r\n\r\n function removeItem(deviceSerialNum" +
|
|
"ber) {\r\n removeItemFromArray(viewModel.inProcess, deviceSerialNum" +
|
|
"ber);\r\n removeItemFromArray(viewModel.readyForReturn, deviceSeria" +
|
|
"lNumber);\r\n removeItemFromArray(viewModel.waitingForUserAction, d" +
|
|
"eviceSerialNumber);\r\n }\r\n\r\n function addItem(heldDeviceIte" +
|
|
"m) {\r\n if (heldDeviceItem !== null &&\r\n heldDe" +
|
|
"viceItem !== undefined &&\r\n includeItem(heldDeviceItem)) {\r\n\r" +
|
|
"\n var array;\r\n\r\n if (isWaitingForUserActio" +
|
|
"n(heldDeviceItem))\r\n array = viewModel.waitingForUserActi" +
|
|
"on;\r\n else if (isReadyForReturn(heldDeviceItem))\r\n " +
|
|
" array = viewModel.readyForReturn;\r\n else if (isI" +
|
|
"nProcess(heldDeviceItem))\r\n array = viewModel.inProcess;\r" +
|
|
"\n\r\n if (array().length === 0) {\r\n arra" +
|
|
"y.push(heldDeviceItem);\r\n } else {\r\n v" +
|
|
"ar index = findSortedInsertIndex(array, heldDeviceItem);\r\n " +
|
|
" if (index === -1)\r\n array.push(heldDeviceItem);\r\n " +
|
|
" else\r\n array.splice(index, 0, h" +
|
|
"eldDeviceItem);\r\n }\r\n }\r\n }\r\n\r\n " +
|
|
" function rotateArrays() {\r\n rotateArray(viewModel.inProce" +
|
|
"ss, $inProcessList);\r\n rotateArray(viewModel.readyForReturn, $rea" +
|
|
"dyForReturnList);\r\n rotateArray(viewModel.waitingForUserAction, $" +
|
|
"waitingForUserActionList);\r\n }\r\n\r\n function scheduleRotati" +
|
|
"on() {\r\n rotateArrays();\r\n\r\n window.setTimeout(sch" +
|
|
"eduleRotation, 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.r" +
|
|
"educe(function (previousValue, currentValue, index, array) {\r\n " +
|
|
" if (previousValue === false)\r\n return false;\r\n " +
|
|
" return currentValue(heldDeviceItem);\r\n }, true);\r\n " +
|
|
" }\r\n\r\n function setTheme(theme) {\r\n if (!!fixed" +
|
|
"Theme)\r\n return;\r\n\r\n var $body = $(document.bo" +
|
|
"dy);\r\n\r\n // Existing classes\r\n var c = $body.attr(" +
|
|
"\'class\').split(\' \');\r\n // Remove existing theme\r\n " +
|
|
"c = $.grep(c, function (i) { return (i.indexOf(\'theme-\') !== 0) });\r\n\r\n " +
|
|
" c.push(\'theme-\' + theme);\r\n\r\n $body.attr(\'class\', c.join(\'" +
|
|
" \'));\r\n }\r\n\r\n function monitorMouseMove() {\r\n " +
|
|
" var token = null,\r\n $body = $(document.body);\r\n\r\n " +
|
|
" $body.mousemove(function () {\r\n if (!!token)\r\n " +
|
|
" window.clearTimeout(token);\r\n else if ($body." +
|
|
"css(\'cursor\') == \'none\')\r\n $body.css(\'cursor\', \'auto\');\r\n" +
|
|
"\r\n token = window.setTimeout(function () {\r\n " +
|
|
" $body.css(\'cursor\', \'none\');\r\n token = null;\r\n " +
|
|
" }, 3500);\r\n });\r\n\r\n }\r\n\r\n f" +
|
|
"unction applyQueryString() {\r\n var queryStringParameters = getQue" +
|
|
"ryStringParameters();\r\n\r\n if (queryStringParameters !== null) {\r\n" +
|
|
" var filters = [];\r\n\r\n $.each(queryStringP" +
|
|
"arameters, function (key, value) {\r\n switch (key.toLowerC" +
|
|
"ase()) {\r\n case \'theme\': // THEME\r\n " +
|
|
" setTheme(value);\r\n fixedTheme = val" +
|
|
"ue;\r\n break;\r\n case \'d" +
|
|
"eviceaddressinclude\': // FILTER: Device Address Include\r\n " +
|
|
" var deviceAddresses = value.split(\",\").map(function (v) { return v.toLo" +
|
|
"werCase(); });\r\n if (deviceAddresses.length > 0) " +
|
|
"{\r\n filters.push(function (heldDeviceItem) {\r" +
|
|
"\n // false if DeviceAddressShortName is n" +
|
|
"ull\r\n if (!heldDeviceItem.DeviceAddressSh" +
|
|
"ortName)\r\n return false;\r\n\r\n " +
|
|
" // true if DeviceAddressShortName is included\r\n " +
|
|
" return $.inArray(heldDeviceItem.DeviceAddr" +
|
|
"essShortName.toLowerCase(), deviceAddresses) >= 0;\r\n " +
|
|
" });\r\n }\r\n " +
|
|
"break;\r\n case \'deviceaddressexclude\': // FILTER: Devi" +
|
|
"ce Address Exclude\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 " +
|
|
" // true if DeviceAddressShortName is null\r\n " +
|
|
" if (!heldDeviceItem.DeviceAddressShortName)\r\n " +
|
|
" return true;\r\n\r\n // true " +
|
|
"if DeviceAddressShortName is excluded\r\n r" +
|
|
"eturn $.inArray(heldDeviceItem.DeviceAddressShortName.toLowerCase(), deviceAddre" +
|
|
"sses) < 0;\r\n });\r\n " +
|
|
" }\r\n break;\r\n case" +
|
|
" \'deviceprofileinclude\': // FILTER: Device Profile Include\r\n " +
|
|
" var deviceProfiles = value.split(\",\").map(function (v) { return pars" +
|
|
"eInt(v); });\r\n if (deviceProfiles.length > 0) {\r\n" +
|
|
" filters.push(function (heldDeviceItem) {\r\n " +
|
|
" // true if DeviceProfileId is included\r\n " +
|
|
" return $.inArray(heldDeviceItem.DeviceProf" +
|
|
"ileId, deviceProfiles) >= 0;\r\n });\r\n " +
|
|
" }\r\n break;\r\n " +
|
|
" case \'deviceprofileexclude\': // FILTER: Device Profile Exclude\r\n " +
|
|
" var deviceProfiles = value.split(\",\").map(function" +
|
|
" (v) { return parseInt(v); });\r\n if (deviceProfil" +
|
|
"es.length > 0) {\r\n filters.push(function (hel" +
|
|
"dDeviceItem) {\r\n // true if DeviceProfile" +
|
|
"Id is excluded\r\n return $.inArray(heldDev" +
|
|
"iceItem.DeviceProfileId, deviceProfiles) < 0;\r\n " +
|
|
" });\r\n }\r\n break" +
|
|
";\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\r\n function connectionError() {\r\n try {" +
|
|
"\r\n $(\'body\').addClass(\'status-error\');\r\n $" +
|
|
".connection.hub.stop();\r\n } catch (e) {\r\n // I" +
|
|
"gnore\r\n }\r\n\r\n window.setTimeout(function () {\r\n " +
|
|
" window.location.reload(true);\r\n }, 10000);\r\n " +
|
|
" }\r\n\r\n // Helpers\r\n function rotateArray(koArray, e" +
|
|
"lement) {\r\n var items = koArray();\r\n\r\n if (items.l" +
|
|
"ength <= 1)\r\n return 0;\r\n\r\n if (element.height" +
|
|
"() < (element.parent().height() - 30)) {\r\n\r\n if (findUnsorted" +
|
|
"ArrayTopIndex(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, deviceSeria" +
|
|
"lNumber) {\r\n var items = koArray();\r\n for (var i =" +
|
|
" 0; i < items.length; i++) {\r\n if (items[i].DeviceSerialNumbe" +
|
|
"r == deviceSerialNumber) {\r\n koArray.splice(i, 1);\r\n " +
|
|
" items = koArray();\r\n i--;\r\n " +
|
|
" }\r\n }\r\n }\r\n function findUnsortedA" +
|
|
"rrayTopIndex(items) {\r\n // Only one Item\r\n if (ite" +
|
|
"ms.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 return i;" +
|
|
"\r\n }\r\n\r\n return 0;\r\n }\r\n fun" +
|
|
"ction findSortedInsertIndex(koArray, heldDeviceItem) {\r\n var item" +
|
|
"s = 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 < startIndex; " +
|
|
"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 } el" +
|
|
"se {\r\n return -1;\r\n }\r\n }\r\n " +
|
|
" function sortFunction(l, r) {\r\n return l.DeviceDescription.to" +
|
|
"LowerCase() == r.DeviceDescription.toLowerCase() ? 0 : (l.DeviceDescription.toLo" +
|
|
"werCase() < r.DeviceDescription.toLowerCase() ? -1 : 1)\r\n }\r\n " +
|
|
" function isInProcess(i) {\r\n return !i.ReadyForReturn && !i.Wa" +
|
|
"itingForUserAction;\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.W" +
|
|
"aitingForUserAction;\r\n }\r\n function getQueryStringParamete" +
|
|
"rs() {\r\n\r\n if (window.location.search.length === 0)\r\n " +
|
|
" return null;\r\n\r\n var params = {};\r\n window" +
|
|
".location.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>");
|
|
|
|
}
|
|
}
|
|
}
|
|
#pragma warning restore 1591
|