forked from meteor/meteor
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi-box.js
More file actions
107 lines (89 loc) · 2.79 KB
/
api-box.js
File metadata and controls
107 lines (89 loc) · 2.79 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
var apiData = function (longname) {
var root = DocsData;
_.each(longname.split("."), function (pathSegment) {
root = root[pathSegment];
});
if (! root) {
console.log("API Data not found: " + longname);
}
return root;
};
var typeLink = function (displayName, id) {
return "<a href='#" + id + "'>" + displayName + "</a>";
};
var toOrSentence = function (array) {
if (array.length === 1) {
return array[0];
} else if (array.length === 2) {
return array.join(" or ");
}
return _.initial(array).join(", ") + ", or " + _.last(array);
};
Template.autoApiBox.helpers({
apiData: apiData,
typeNames: function (nameList) {
// change names if necessary
nameList = _.map(nameList, function (name) {
if (name === "function") {
return "Function";
} else if (name === "EJSONable" || name === "EJSON") {
return typeLink("EJSON-able Object", "ejson");
} else if (name === "Tracker.Computation") {
return typeLink("Tracker.Computation", "tracker_computation");
} else if (name === "MongoSelector") {
return [
typeLink("Mongo Selector", "selectors"),
typeLink("Object ID", "mongo_object_id"),
"String"
];
} else if (name === "MongoModifier") {
return typeLink("Mongo Modifier", "modifiers");
} else if (name === "MongoSortSpecifier") {
return typeLink("Mongo Sort Specifier", "sortspecifiers");
} else if (name === "MongoFieldSpecifier") {
return typeLink("Mongo Field Specifier", "fieldspecifiers");
} else if (name === "JSONCompatible") {
return "JSON-compatible Object";
}
return name;
});
nameList = _.flatten(nameList);
return toOrSentence(nameList);
},
signature: function () {
var signature;
var beforeParens;
if (this.scope === "instance") {
beforeParens = "<em>" + apiData(this.memberof).instancename + "</em>." + this.name;
} else if (this.kind === "class") {
beforeParens = "new " + this.longname;
} else {
beforeParens = this.longname;
}
signature = beforeParens;
// if it is a function, and therefore has arguments
if (_.contains(["function", "class"], this.kind)) {
var params = this.params;
var paramNames = _.map(params, function (param) {
if (param.optional) {
return "[" + param.name + "]";
}
return param.name;
});
signature += "(" + paramNames.join(", ") + ")";
}
return signature;
},
link: function () {
if (nameToId[this.longname]) {
return nameToId[this.longname];
}
// fallback
return this.longname.replace(".", "-");
},
paramsNoOptions: function () {
return _.reject(this.params, function (param) {
return param.name === "options";
});
}
});