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.UserHeldDevices
|
|
{
|
|
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/UserHeldDevices/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\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");
|
|
|
|
|
|
#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 for Users</title>\r\n");
|
|
|
|
WriteLiteral(" ");
|
|
|
|
|
|
#line 15 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
|
Write(Html.BundleRenderDeferred());
|
|
|
|
|
|
#line default
|
|
#line hidden
|
|
WriteLiteral("\r\n</head>\r\n<body");
|
|
|
|
WriteAttribute("class", Tuple.Create(" class=\"", 572), Tuple.Create("\"", 625)
|
|
, Tuple.Create(Tuple.Create("", 580), Tuple.Create("theme-", 580), true)
|
|
|
|
#line 17 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
|
, Tuple.Create(Tuple.Create("", 586), Tuple.Create<System.Object, System.Int32>(Model.DefaultTheme
|
|
|
|
#line default
|
|
#line hidden
|
|
, 586), false)
|
|
, Tuple.Create(Tuple.Create(" ", 607), Tuple.Create("status-connecting", 608), 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 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\"");
|
|
|
|
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: 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 var fixedThe" +
|
|
"me = null;\r\n\r\n var $inProcessList = $(\'#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, waitingForUserAct" +
|
|
"ion) {\r\n var self = this;\r\n\r\n self.initialized = f" +
|
|
"alse;\r\n\r\n self.inProcess = ko.observableArray(inProcess);\r\n " +
|
|
" self.readyForReturn = ko.observableArray(readyForReturn);\r\n " +
|
|
" self.waitingForUserAction = ko.observableArray(waitingForUserAction);\r\n\r\n " +
|
|
" self.onRemove = function (element, index, data) {\r\n " +
|
|
" $(element).slideUp(400, function () {\r\n $(this).remo" +
|
|
"ve();\r\n });\r\n }\r\n self.onAdd = " +
|
|
"function (element, index, 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 applyQueryString();\r\n\r\n // Connect to Hub\r\n " +
|
|
" hub = $.connection.noticeboardUpdates;\r\n\r\n // Map Func" +
|
|
"tions\r\n hub.client.updateHeldDeviceForUser = updateHeldDevice;\r\n " +
|
|
" hub.client.setTheme = setTheme;\r\n\r\n $.connection.h" +
|
|
"ub.qs = { Noticeboard: \'");
|
|
|
|
|
|
#line 133 "..\..\Areas\Public\Views\UserHeldDevices\Noticeboard.cshtml"
|
|
Write(Disco.Services.Jobs.Noticeboards.HeldDevicesForUsers.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\UserHeldDevices\Noticeboard.cshtml"
|
|
Write(Url.Action(MVC.Public.UserHeldDevices.UserHeldDevices()));
|
|
|
|
|
|
#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 (UserId, heldDevic" +
|
|
"eItem) {\r\n // Remove Existing\r\n re" +
|
|
"moveItem(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 removeItemFr" +
|
|
"omArray(viewModel.inProcess, UserId);\r\n removeItemFromArray(viewM" +
|
|
"odel.readyForReturn, UserId);\r\n removeItemFromArray(viewModel.wai" +
|
|
"tingForUserAction, UserId);\r\n }\r\n\r\n function addItem(heldD" +
|
|
"eviceItem) {\r\n if (heldDeviceItem !== null &&\r\n " +
|
|
" heldDeviceItem !== undefined &&\r\n includeItem(heldDeviceIte" +
|
|
"m)) {\r\n\r\n var array;\r\n\r\n if (isWaitingForU" +
|
|
"serAction(heldDeviceItem))\r\n array = viewModel.waitingFor" +
|
|
"UserAction;\r\n else if (isReadyForReturn(heldDeviceItem))\r\n " +
|
|
" array = viewModel.readyForReturn;\r\n else" +
|
|
" if (isInProcess(heldDeviceItem))\r\n array = viewModel.inP" +
|
|
"rocess;\r\n\r\n if (array().length === 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(heldDeviceIt" +
|
|
"em);\r\n else\r\n array.splice(ind" +
|
|
"ex, 0, heldDeviceItem);\r\n }\r\n }\r\n }" +
|
|
"\r\n\r\n function rotateArrays() {\r\n rotateArray(viewModel" +
|
|
".inProcess, $inProcessList);\r\n rotateArray(viewModel.readyForRetu" +
|
|
"rn, $readyForReturnList);\r\n rotateArray(viewModel.waitingForUserA" +
|
|
"ction, $waitingForUserActionList);\r\n }\r\n\r\n function schedu" +
|
|
"leRotation() {\r\n rotateArrays();\r\n\r\n window.setTim" +
|
|
"eout(scheduleRotation, rotateSpeed);\r\n }\r\n\r\n function incl" +
|
|
"udeItem(heldDeviceItem) {\r\n if (itemFilters == null || itemFilter" +
|
|
"s.length == 0)\r\n return true;\r\n\r\n return itemF" +
|
|
"ilters.reduce(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 " +
|
|
"(!!fixedTheme)\r\n return;\r\n\r\n var $body = $(doc" +
|
|
"ument.body);\r\n\r\n // Existing classes\r\n var c = $bo" +
|
|
"dy.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\', \'a" +
|
|
"uto\');\r\n\r\n token = window.setTimeout(function () {\r\n " +
|
|
" $body.css(\'cursor\', \'none\');\r\n token = nul" +
|
|
"l;\r\n }, 3500);\r\n });\r\n\r\n }\r\n\r\n " +
|
|
" function applyQueryString() {\r\n var queryStringParameters " +
|
|
"= getQueryStringParameters();\r\n\r\n if (queryStringParameters !== n" +
|
|
"ull) {\r\n var filters = [];\r\n\r\n $.each(quer" +
|
|
"yStringParameters, function (key, value) {\r\n switch (key." +
|
|
"toLowerCase()) {\r\n case \'theme\': // THEME\r\n " +
|
|
" setTheme(value);\r\n fixedThe" +
|
|
"me = value;\r\n break;\r\n " +
|
|
" case \'deviceaddressinclude\': // FILTER: Device Address Include\r\n " +
|
|
" var deviceAddresses = value.split(\",\").map(function (v) { retur" +
|
|
"n v.toLowerCase(); });\r\n if (deviceAddresses.leng" +
|
|
"th > 0) {\r\n filters.push(function (heldDevice" +
|
|
"Item) {\r\n // false if DeviceAddressShortN" +
|
|
"ame is null\r\n if (!heldDeviceItem.DeviceA" +
|
|
"ddressShortName)\r\n return false;\r\n\r\n " +
|
|
" // true if DeviceAddressShortName is incl" +
|
|
"uded\r\n return $.inArray(heldDeviceItem.De" +
|
|
"viceAddressShortName.toLowerCase(), deviceAddresses) >= 0;\r\n " +
|
|
" });\r\n }\r\n " +
|
|
" break;\r\n case \'deviceaddressexclude\': // FILT" +
|
|
"ER: Device 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 " +
|
|
" return $.inArray(heldDeviceItem.DeviceAddressShortName.toLowerCase(), dev" +
|
|
"iceAddresses) < 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) { ret" +
|
|
"urn parseInt(v); });\r\n if (deviceProfiles.length " +
|
|
"> 0) {\r\n filters.push(function (heldDeviceIte" +
|
|
"m) {\r\n // true if DeviceProfileId is incl" +
|
|
"uded\r\n return $.inArray(heldDeviceItem.De" +
|
|
"viceProfileId, deviceProfiles) >= 0;\r\n });\r\n " +
|
|
" }\r\n break;\r\n " +
|
|
" case \'deviceprofileexclude\': // FILTER: Device Profile Exc" +
|
|
"lude\r\n var deviceProfiles = value.split(\",\").map(" +
|
|
"function (v) { return parseInt(v); });\r\n if (devi" +
|
|
"ceProfiles.length > 0) {\r\n filters.push(funct" +
|
|
"ion (heldDeviceItem) {\r\n // true if Devic" +
|
|
"eProfileId is excluded\r\n return $.inArray" +
|
|
"(heldDeviceItem.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 " +
|
|
" // Ignore\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(ko" +
|
|
"Array, element) {\r\n var items = koArray();\r\n\r\n if " +
|
|
"(items.length <= 1)\r\n return 0;\r\n\r\n if (elemen" +
|
|
"t.height() < (element.parent().height() - 30)) {\r\n\r\n if (find" +
|
|
"UnsortedArrayTopIndex(items) !== 0)\r\n koArray.sort(sortFu" +
|
|
"nction);\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.unsh" +
|
|
"ift(item);\r\n }\r\n function removeItemFromArray(koArray, Use" +
|
|
"rId) {\r\n var items = koArray();\r\n for (var i = 0; " +
|
|
"i < items.length; i++) {\r\n if (items[i].UserId == UserId) {\r\n" +
|
|
" koArray.splice(i, 1);\r\n items = k" +
|
|
"oArray();\r\n i--;\r\n }\r\n " +
|
|
"}\r\n }\r\n function findUnsortedArrayTopIndex(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 return 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 = sortFunct" +
|
|
"ion(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 } else {\r\n re" +
|
|
"turn -1;\r\n }\r\n }\r\n function sortFunction(l," +
|
|
" r) {\r\n return l.UserIdFriendly.toLowerCase() == r.UserIdFriendly" +
|
|
".toLowerCase() ? 0 : (l.UserIdFriendly.toLowerCase() < r.UserIdFriendly.toLowerC" +
|
|
"ase() ? -1 : 1)\r\n }\r\n function isInProcess(i) {\r\n " +
|
|
" return !i.ReadyForReturn && !i.WaitingForUserAction;\r\n }\r\n " +
|
|
" function isReadyForReturn(i) {\r\n return i.ReadyForReturn " +
|
|
"&& !i.WaitingForUserAction;\r\n }\r\n function isWaitingForUse" +
|
|
"rAction(i) {\r\n return i.WaitingForUserAction;\r\n }\r\n " +
|
|
" function getQueryStringParameters() {\r\n\r\n if (window.loc" +
|
|
"ation.search.length === 0)\r\n return null;\r\n\r\n " +
|
|
"var params = {};\r\n window.location.search.substr(1).split(\"&\").fo" +
|
|
"rEach(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>\r\n");
|
|
|
|
}
|
|
}
|
|
}
|
|
#pragma warning restore 1591
|