-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
jquery.signalR.knockout.utils.js
83 lines (64 loc) · 2.46 KB
/
jquery.signalR.knockout.utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.md in the project root for license information.
/*global window:false */
/// <reference path="../Microsoft.AspNet.SignalR.Client.JS/Scripts/jquery-1.6.4.js" />
/// <reference path="Scripts/knockout-2.2.1.debug.js" />
(function ($, undefined) {
"use strict";
// Utils is loaded first so we check if everything exists here and set up the "namespace"
if (typeof ($) !== "function" || typeof ($.signalR) !== "function") {
throw new Error("SignalR-Knockout: SignalR not found. Please ensure signalR.js is referenced before the signalR.knockout.js file.");
}
var signalR = $.signalR,
utils;
signalR.knockout = {};
signalR.knockout._utils = utils = {
koPeek: function (x) {
// Maybe we could call x(), but I don't want to create an unintended dependency
return x.peek();
},
koUpdate: function (x, newValue) {
// TODO: We shouldn't have to make this check. Look into why we do.
if (window.ko.isWriteableObservable(x)) {
return x(newValue);
}
},
identity: function (x) {
return x;
},
isPrimitive: function (value) {
return (typeof value !== "object" && typeof value !== "function") || value === null;
},
getTag: function (value) {
return utils.isPrimitive(value) ? undefined : value._tag;
},
eachPublic: function (object, f) {
if (utils.isPrimitive(object)) {
return object;
}
return $.each(object, function (key, value) {
// Don't iterate over properties that are conventionally "private"
if (typeof key === "string" && key[0] === "_") {
return;
}
f(key, value);
});
},
mapPublic: function (object, f) {
if (utils.isPrimitive(object)) {
return object;
}
var copy = $.isArray(object) ? [] : {};
utils.eachPublic(object, function (key, value) {
copy[key] = f(value);
});
return copy;
},
keys: function (object) {
var result = [];
$.each(object, function (key) {
result.push(key);
});
return result;
}
};
}(window.jQuery));