yard 0.9.39 → 0.9.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -1
- data/README.md +18 -21
- data/docs/GettingStarted.md +41 -15
- data/docs/Tags.md +5 -5
- data/docs/WhatsNew.md +59 -7
- data/docs/templates/default/yard_tags/html/setup.rb +1 -1
- data/lib/yard/autoload.rb +17 -0
- data/lib/yard/cli/diff.rb +7 -2
- data/lib/yard/code_objects/proxy.rb +1 -1
- data/lib/yard/handlers/processor.rb +1 -0
- data/lib/yard/handlers/rbs/attribute_handler.rb +43 -0
- data/lib/yard/handlers/rbs/base.rb +38 -0
- data/lib/yard/handlers/rbs/constant_handler.rb +18 -0
- data/lib/yard/handlers/rbs/method_handler.rb +327 -0
- data/lib/yard/handlers/rbs/mixin_handler.rb +20 -0
- data/lib/yard/handlers/rbs/namespace_handler.rb +26 -0
- data/lib/yard/handlers/ruby/attribute_handler.rb +7 -4
- data/lib/yard/handlers/ruby/constant_handler.rb +1 -0
- data/lib/yard/i18n/locale.rb +1 -1
- data/lib/yard/i18n/pot_generator.rb +1 -1
- data/lib/yard/parser/rbs/rbs_parser.rb +325 -0
- data/lib/yard/parser/rbs/statement.rb +75 -0
- data/lib/yard/parser/ruby/ruby_parser.rb +51 -1
- data/lib/yard/parser/source_parser.rb +3 -2
- data/lib/yard/registry_resolver.rb +7 -0
- data/lib/yard/server/library_version.rb +1 -1
- data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +208 -12
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +1 -17
- data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -2
- data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +3 -3
- data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +2 -3
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +22 -16
- data/lib/yard/tags/directives.rb +7 -0
- data/lib/yard/tags/library.rb +3 -3
- data/lib/yard/tags/types_explainer.rb +2 -1
- data/lib/yard/templates/helpers/base_helper.rb +1 -1
- data/lib/yard/templates/helpers/html_helper.rb +15 -4
- data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +6 -1
- data/lib/yard/templates/helpers/markup/hybrid_markdown.rb +2147 -0
- data/lib/yard/templates/helpers/markup_helper.rb +4 -2
- data/lib/yard/version.rb +1 -1
- data/po/ja.po +82 -82
- data/templates/default/fulldoc/html/css/style.css +31 -0
- data/templates/default/fulldoc/html/full_list.erb +4 -4
- data/templates/default/fulldoc/html/js/app.js +566 -321
- data/templates/default/fulldoc/html/js/full_list.js +340 -213
- data/templates/default/layout/html/headers.erb +1 -1
- data/templates/default/layout/html/layout.erb +2 -1
- data/templates/default/method/html/header.erb +3 -3
- data/templates/default/module/html/defines.erb +3 -3
- data/templates/default/module/html/inherited_methods.erb +1 -0
- data/templates/default/module/html/method_summary.erb +8 -0
- data/templates/default/module/setup.rb +20 -0
- data/templates/default/onefile/html/layout.erb +3 -4
- data/templates/guide/fulldoc/html/js/app.js +57 -26
- data/templates/guide/layout/html/layout.erb +9 -11
- metadata +13 -4
|
@@ -1,245 +1,372 @@
|
|
|
1
1
|
(function() {
|
|
2
|
+
var clicked = null;
|
|
3
|
+
var searchTimeout = null;
|
|
4
|
+
var searchCache = [];
|
|
5
|
+
var caseSensitiveMatch = false;
|
|
6
|
+
var ignoreKeyCodeMin = 8;
|
|
7
|
+
var ignoreKeyCodeMax = 46;
|
|
8
|
+
var commandKey = 91;
|
|
2
9
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var caseSensitiveMatch = false;
|
|
7
|
-
var ignoreKeyCodeMin = 8;
|
|
8
|
-
var ignoreKeyCodeMax = 46;
|
|
9
|
-
var commandKey = 91;
|
|
10
|
+
function query(selector, root) {
|
|
11
|
+
return (root || document).querySelector(selector);
|
|
12
|
+
}
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
return
|
|
13
|
-
|
|
14
|
+
function queryAll(selector, root) {
|
|
15
|
+
return Array.prototype.slice.call(
|
|
16
|
+
(root || document).querySelectorAll(selector)
|
|
17
|
+
);
|
|
18
|
+
}
|
|
14
19
|
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
if (
|
|
18
|
-
|
|
20
|
+
function isVisible(element) {
|
|
21
|
+
if (!element) return false;
|
|
22
|
+
if (window.getComputedStyle(element).display === "none") return false;
|
|
23
|
+
if (element.parentElement && element.parentElement !== document.body) {
|
|
24
|
+
return isVisible(element.parentElement);
|
|
19
25
|
}
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
$('#full_list li').on('click', function(evt) {
|
|
31
|
-
$('#full_list li').removeClass('clicked');
|
|
32
|
-
$clicked = $(this);
|
|
33
|
-
$clicked.addClass('clicked');
|
|
34
|
-
evt.stopPropagation();
|
|
35
|
-
|
|
36
|
-
if (window.origin === "null") {
|
|
37
|
-
if (evt.target.tagName === 'A') return true;
|
|
38
|
-
|
|
39
|
-
var elem = $clicked.find('> .item .object_link a')[0];
|
|
40
|
-
var e = evt.originalEvent;
|
|
41
|
-
var newEvent = new MouseEvent(evt.originalEvent.type);
|
|
42
|
-
newEvent.initMouseEvent(e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);
|
|
43
|
-
elem.dispatchEvent(newEvent);
|
|
44
|
-
evt.preventDefault();
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
RegExp.escape = function(text) {
|
|
30
|
+
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
function ready(callback) {
|
|
34
|
+
if (document.readyState === "loading") {
|
|
35
|
+
document.addEventListener("DOMContentLoaded", callback, { once: true });
|
|
45
36
|
} else {
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
url = new URL(url, window.location.href).href;
|
|
49
|
-
} catch { }
|
|
50
|
-
window.top.postMessage({ action: "navigate", url: url }, "*");
|
|
37
|
+
callback();
|
|
51
38
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
evt.stopPropagation();
|
|
60
|
-
evt.preventDefault();
|
|
61
|
-
$(this).parent().parent().toggleClass('collapsed');
|
|
62
|
-
$(this).attr('aria-expanded', function (i, attr) {
|
|
63
|
-
return attr == 'true' ? 'false' : 'true'
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function escapeShortcut() {
|
|
42
|
+
document.addEventListener("keydown", function(event) {
|
|
43
|
+
if (event.key === "Escape") {
|
|
44
|
+
window.parent.postMessage("navEscape", "*");
|
|
45
|
+
}
|
|
64
46
|
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function clearSearchTimeout() {
|
|
50
|
+
clearTimeout(searchTimeout);
|
|
51
|
+
searchTimeout = null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function setClicked(item) {
|
|
55
|
+
queryAll("#full_list li.clicked").forEach(function(node) {
|
|
56
|
+
node.classList.remove("clicked");
|
|
57
|
+
});
|
|
58
|
+
clicked = item;
|
|
59
|
+
if (clicked) clicked.classList.add("clicked");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function pathForItem(item) {
|
|
63
|
+
if (!item || !item.id || item.id.indexOf("object_") !== 0) return null;
|
|
64
|
+
return item.id.substring("object_".length);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function enableLinks() {
|
|
68
|
+
queryAll("#full_list li").forEach(function(item) {
|
|
69
|
+
var itemRow = item.querySelector(":scope > .item");
|
|
70
|
+
|
|
71
|
+
if (!itemRow) return;
|
|
72
|
+
|
|
73
|
+
itemRow.addEventListener("click", function(event) {
|
|
74
|
+
var targetLink;
|
|
75
|
+
var mouseEvent;
|
|
76
|
+
var url;
|
|
77
|
+
|
|
78
|
+
if (
|
|
79
|
+
event.defaultPrevented ||
|
|
80
|
+
event.button !== 0 ||
|
|
81
|
+
event.metaKey ||
|
|
82
|
+
event.ctrlKey ||
|
|
83
|
+
event.shiftKey ||
|
|
84
|
+
event.altKey
|
|
85
|
+
) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
setClicked(item);
|
|
90
|
+
event.stopPropagation();
|
|
91
|
+
targetLink = event.target.closest("a");
|
|
92
|
+
|
|
93
|
+
if (window.origin === "null") {
|
|
94
|
+
if (targetLink) return true;
|
|
95
|
+
|
|
96
|
+
targetLink = item.querySelector(":scope > .item .object_link a");
|
|
97
|
+
if (!targetLink) return false;
|
|
98
|
+
mouseEvent = new MouseEvent("click", {
|
|
99
|
+
bubbles: true,
|
|
100
|
+
cancelable: true,
|
|
101
|
+
view: event.view || window,
|
|
102
|
+
detail: event.detail,
|
|
103
|
+
screenX: event.screenX,
|
|
104
|
+
screenY: event.screenY,
|
|
105
|
+
clientX: event.clientX,
|
|
106
|
+
clientY: event.clientY,
|
|
107
|
+
ctrlKey: event.ctrlKey,
|
|
108
|
+
shiftKey: event.shiftKey,
|
|
109
|
+
altKey: event.altKey,
|
|
110
|
+
metaKey: event.metaKey,
|
|
111
|
+
button: event.button,
|
|
112
|
+
buttons: event.buttons,
|
|
113
|
+
relatedTarget: event.relatedTarget
|
|
114
|
+
});
|
|
115
|
+
targetLink.dispatchEvent(mouseEvent);
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
} else {
|
|
118
|
+
if (!targetLink || !targetLink.matches(".object_link a")) {
|
|
119
|
+
targetLink = item.querySelector(":scope > .item .object_link a");
|
|
120
|
+
}
|
|
121
|
+
if (!targetLink) return false;
|
|
122
|
+
|
|
123
|
+
event.preventDefault();
|
|
124
|
+
url = targetLink.getAttribute("href");
|
|
125
|
+
try {
|
|
126
|
+
url = new URL(url, window.location.href).href;
|
|
127
|
+
} catch (error) {}
|
|
128
|
+
window.top.postMessage(
|
|
129
|
+
{ action: "navigate", url: url, path: pathForItem(item) },
|
|
130
|
+
"*"
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function toggleItem(toggle) {
|
|
139
|
+
var item = toggle.parentElement.parentElement;
|
|
140
|
+
var expanded = item.classList.contains("collapsed");
|
|
141
|
+
|
|
142
|
+
item.classList.toggle("collapsed");
|
|
143
|
+
toggle.setAttribute("aria-expanded", expanded ? "true" : "false");
|
|
65
144
|
highlight();
|
|
66
|
-
}
|
|
145
|
+
}
|
|
67
146
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
$(this).parent().parent().toggleClass('collapsed');
|
|
75
|
-
$(this).attr('aria-expanded', function (i, attr) {
|
|
76
|
-
return attr == 'true' ? 'false' : 'true'
|
|
147
|
+
function enableToggles() {
|
|
148
|
+
queryAll("#full_list a.toggle").forEach(function(toggle) {
|
|
149
|
+
toggle.addEventListener("click", function(event) {
|
|
150
|
+
event.stopPropagation();
|
|
151
|
+
event.preventDefault();
|
|
152
|
+
toggleItem(toggle);
|
|
77
153
|
});
|
|
78
|
-
highlight();
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
154
|
|
|
83
|
-
function
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
155
|
+
toggle.addEventListener("keypress", function(event) {
|
|
156
|
+
if (event.key !== "Enter") return;
|
|
157
|
+
event.stopPropagation();
|
|
158
|
+
event.preventDefault();
|
|
159
|
+
toggleItem(toggle);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function populateSearchCache() {
|
|
165
|
+
queryAll("#full_list li .item").forEach(function(node) {
|
|
166
|
+
var link = query(".object_link a", node);
|
|
167
|
+
if (!link) return;
|
|
168
|
+
|
|
88
169
|
searchCache.push({
|
|
89
|
-
node:
|
|
90
|
-
link:
|
|
91
|
-
name:
|
|
92
|
-
fullName:
|
|
170
|
+
node: node,
|
|
171
|
+
link: link,
|
|
172
|
+
name: link.textContent,
|
|
173
|
+
fullName: link.getAttribute("title").split(" ")[0]
|
|
93
174
|
});
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function enableSearch() {
|
|
179
|
+
var input = query("#search input");
|
|
180
|
+
var fullList = query("#full_list");
|
|
181
|
+
|
|
182
|
+
if (!input || !fullList) return;
|
|
183
|
+
|
|
184
|
+
input.addEventListener("keyup", function(event) {
|
|
185
|
+
if (ignoredKeyPress(event)) return;
|
|
186
|
+
if (input.value === "") {
|
|
187
|
+
clearSearch();
|
|
188
|
+
} else {
|
|
189
|
+
performSearch(input.value);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
fullList.insertAdjacentHTML(
|
|
194
|
+
"afterend",
|
|
195
|
+
"<div id='noresults' role='status' style='display: none'></div>"
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function ignoredKeyPress(event) {
|
|
200
|
+
return (
|
|
201
|
+
(event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax) ||
|
|
202
|
+
event.keyCode === commandKey
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function clearSearch() {
|
|
207
|
+
clearSearchTimeout();
|
|
208
|
+
queryAll("#full_list .found").forEach(function(node) {
|
|
209
|
+
var link = query(".object_link a", node);
|
|
210
|
+
node.classList.remove("found");
|
|
211
|
+
link.textContent = link.textContent;
|
|
212
|
+
});
|
|
213
|
+
query("#full_list").classList.remove("insearch");
|
|
214
|
+
query("#content").classList.remove("insearch");
|
|
215
|
+
if (clicked) {
|
|
216
|
+
var current = clicked.parentElement;
|
|
217
|
+
while (current) {
|
|
218
|
+
if (current.tagName === "LI") current.classList.remove("collapsed");
|
|
219
|
+
if (current.id === "full_list") break;
|
|
220
|
+
current = current.parentElement;
|
|
221
|
+
}
|
|
94
222
|
}
|
|
95
|
-
|
|
96
|
-
}
|
|
223
|
+
highlight();
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function performSearch(searchString) {
|
|
227
|
+
clearSearchTimeout();
|
|
228
|
+
query("#full_list").classList.add("insearch");
|
|
229
|
+
query("#content").classList.add("insearch");
|
|
230
|
+
query("#noresults").textContent = "";
|
|
231
|
+
query("#noresults").style.display = "none";
|
|
232
|
+
partialSearch(searchString, 0);
|
|
233
|
+
}
|
|
97
234
|
|
|
98
|
-
function
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
235
|
+
function partialSearch(searchString, offset) {
|
|
236
|
+
var lastRowClass = "";
|
|
237
|
+
var i;
|
|
238
|
+
|
|
239
|
+
for (i = offset; i < Math.min(offset + 50, searchCache.length); i += 1) {
|
|
240
|
+
var item = searchCache[i];
|
|
241
|
+
var searchName =
|
|
242
|
+
searchString.indexOf("::") !== -1 ? item.fullName : item.name;
|
|
243
|
+
var matchRegexp = new RegExp(
|
|
244
|
+
buildMatchString(searchString),
|
|
245
|
+
caseSensitiveMatch ? "" : "i"
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
if (!searchName.match(matchRegexp)) {
|
|
249
|
+
item.node.classList.remove("found");
|
|
250
|
+
item.link.textContent = item.link.textContent;
|
|
251
|
+
} else {
|
|
252
|
+
item.node.classList.add("found");
|
|
253
|
+
if (lastRowClass) item.node.classList.remove(lastRowClass);
|
|
254
|
+
item.node.classList.add(lastRowClass === "r1" ? "r2" : "r1");
|
|
255
|
+
lastRowClass = item.node.classList.contains("r1") ? "r1" : "r2";
|
|
256
|
+
item.link.innerHTML = item.name.replace(matchRegexp, "<strong>$&</strong>");
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if (i === searchCache.length) {
|
|
261
|
+
searchDone();
|
|
103
262
|
} else {
|
|
104
|
-
|
|
263
|
+
searchTimeout = setTimeout(function() {
|
|
264
|
+
partialSearch(searchString, i);
|
|
265
|
+
}, 0);
|
|
105
266
|
}
|
|
106
|
-
}
|
|
267
|
+
}
|
|
107
268
|
|
|
108
|
-
|
|
109
|
-
|
|
269
|
+
function searchDone() {
|
|
270
|
+
var found = queryAll("#full_list li").filter(isVisible).length;
|
|
110
271
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
(event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax) ||
|
|
114
|
-
(event.keyCode == commandKey)
|
|
115
|
-
) {
|
|
116
|
-
return true;
|
|
117
|
-
} else {
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
272
|
+
searchTimeout = null;
|
|
273
|
+
highlight();
|
|
121
274
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
$link.text($link.text());
|
|
127
|
-
});
|
|
128
|
-
$('#full_list, #content').removeClass('insearch');
|
|
129
|
-
$clicked.parents().removeClass('collapsed');
|
|
130
|
-
highlight();
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function performSearch(searchString) {
|
|
134
|
-
clearSearchTimeout();
|
|
135
|
-
$('#full_list, #content').addClass('insearch');
|
|
136
|
-
$('#noresults').text('').hide();
|
|
137
|
-
partialSearch(searchString, 0);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function partialSearch(searchString, offset) {
|
|
141
|
-
var lastRowClass = '';
|
|
142
|
-
var i = null;
|
|
143
|
-
for (i = offset; i < Math.min(offset + 50, searchCache.length); i++) {
|
|
144
|
-
var item = searchCache[i];
|
|
145
|
-
var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name);
|
|
146
|
-
var matchString = buildMatchString(searchString);
|
|
147
|
-
var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i");
|
|
148
|
-
if (searchName.match(matchRegexp) == null) {
|
|
149
|
-
item.node.removeClass('found');
|
|
150
|
-
item.link.text(item.link.text());
|
|
275
|
+
if (found === 0) {
|
|
276
|
+
query("#noresults").textContent = "No results were found.";
|
|
277
|
+
} else {
|
|
278
|
+
query("#noresults").textContent = "There are " + found + " results.";
|
|
151
279
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
280
|
+
query("#noresults").style.display = "block";
|
|
281
|
+
query("#content").classList.remove("insearch");
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function buildMatchString(searchString) {
|
|
285
|
+
var regexSearchString;
|
|
286
|
+
|
|
287
|
+
caseSensitiveMatch = /[A-Z]/.test(searchString);
|
|
288
|
+
regexSearchString = RegExp.escape(searchString);
|
|
289
|
+
if (caseSensitiveMatch) {
|
|
290
|
+
regexSearchString +=
|
|
291
|
+
"|" +
|
|
292
|
+
searchString
|
|
293
|
+
.split("")
|
|
294
|
+
.map(function(character) {
|
|
295
|
+
return RegExp.escape(character);
|
|
296
|
+
})
|
|
297
|
+
.join(".+?");
|
|
157
298
|
}
|
|
299
|
+
return regexSearchString;
|
|
158
300
|
}
|
|
159
|
-
if(i == searchCache.length) {
|
|
160
|
-
searchDone();
|
|
161
|
-
} else {
|
|
162
|
-
searchTimeout = setTimeout(function() {
|
|
163
|
-
partialSearch(searchString, i);
|
|
164
|
-
}, 0);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
function searchDone() {
|
|
169
|
-
searchTimeout = null;
|
|
170
|
-
highlight();
|
|
171
|
-
var found = $('#full_list li:visible').size();
|
|
172
|
-
if (found === 0) {
|
|
173
|
-
$('#noresults').text('No results were found.');
|
|
174
|
-
} else {
|
|
175
|
-
// This is read out to screen readers
|
|
176
|
-
$('#noresults').text('There are ' + found + ' results.');
|
|
177
|
-
}
|
|
178
|
-
$('#noresults').show();
|
|
179
|
-
$('#content').removeClass('insearch');
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
function buildMatchString(searchString, event) {
|
|
183
|
-
caseSensitiveMatch = searchString.match(/[A-Z]/) != null;
|
|
184
|
-
var regexSearchString = RegExp.escape(searchString);
|
|
185
|
-
if (caseSensitiveMatch) {
|
|
186
|
-
regexSearchString += "|" +
|
|
187
|
-
$.map(searchString.split(''), function(e) { return RegExp.escape(e); }).
|
|
188
|
-
join('.+?');
|
|
189
|
-
}
|
|
190
|
-
return regexSearchString;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
function highlight() {
|
|
194
|
-
$('#full_list li:visible').each(function(n) {
|
|
195
|
-
$(this).removeClass('even odd').addClass(n % 2 == 0 ? 'odd' : 'even');
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
function isInView(element) {
|
|
200
|
-
const rect = element.getBoundingClientRect();
|
|
201
|
-
const windowHeight =
|
|
202
|
-
window.innerHeight || document.documentElement.clientHeight;
|
|
203
|
-
return rect.left >= 0 && rect.bottom <= windowHeight;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Expands the tree to the target element and its immediate
|
|
208
|
-
* children.
|
|
209
|
-
*/
|
|
210
|
-
function expandTo(path) {
|
|
211
|
-
var $target = $(document.getElementById('object_' + path));
|
|
212
|
-
$target.addClass('clicked');
|
|
213
|
-
$target.removeClass('collapsed');
|
|
214
|
-
$target.parentsUntil('#full_list', 'li').removeClass('collapsed');
|
|
215
|
-
|
|
216
|
-
$target.find('a.toggle').attr('aria-expanded', 'true')
|
|
217
|
-
$target.parentsUntil('#full_list', 'li').each(function(i, el) {
|
|
218
|
-
$(el).find('> div > a.toggle').attr('aria-expanded', 'true');
|
|
219
|
-
});
|
|
220
301
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
302
|
+
function highlight() {
|
|
303
|
+
queryAll("#full_list li")
|
|
304
|
+
.filter(isVisible)
|
|
305
|
+
.forEach(function(item, index) {
|
|
306
|
+
item.classList.remove("even");
|
|
307
|
+
item.classList.remove("odd");
|
|
308
|
+
item.classList.add(index % 2 === 0 ? "odd" : "even");
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
function isInView(element) {
|
|
313
|
+
var rect = element.getBoundingClientRect();
|
|
314
|
+
var windowHeight =
|
|
315
|
+
window.innerHeight || document.documentElement.clientHeight;
|
|
316
|
+
return rect.left >= 0 && rect.bottom <= windowHeight;
|
|
224
317
|
}
|
|
225
|
-
}
|
|
226
318
|
|
|
227
|
-
function
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
319
|
+
function expandTo(path) {
|
|
320
|
+
var target = document.getElementById("object_" + path);
|
|
321
|
+
|
|
322
|
+
if (!target) return;
|
|
323
|
+
|
|
324
|
+
setClicked(target);
|
|
325
|
+
target.classList.remove("collapsed");
|
|
326
|
+
|
|
327
|
+
var current = target.parentElement;
|
|
328
|
+
while (current && current.id !== "full_list") {
|
|
329
|
+
if (current.tagName === "LI") current.classList.remove("collapsed");
|
|
330
|
+
current = current.parentElement;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
queryAll("a.toggle", target).forEach(function(toggle) {
|
|
334
|
+
toggle.setAttribute("aria-expanded", "true");
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
current = target.parentElement;
|
|
338
|
+
while (current && current.id !== "full_list") {
|
|
339
|
+
if (current.tagName === "LI") {
|
|
340
|
+
var toggle = current.querySelector(":scope > div > a.toggle");
|
|
341
|
+
if (toggle) toggle.setAttribute("aria-expanded", "true");
|
|
342
|
+
}
|
|
343
|
+
current = current.parentElement;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if (!isInView(target)) {
|
|
347
|
+
window.scrollTo(
|
|
348
|
+
window.scrollX,
|
|
349
|
+
target.getBoundingClientRect().top + window.scrollY - 250
|
|
350
|
+
);
|
|
351
|
+
highlight();
|
|
352
|
+
}
|
|
231
353
|
}
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
354
|
|
|
235
|
-
|
|
355
|
+
function windowEvents(event) {
|
|
356
|
+
var msg = event.data;
|
|
357
|
+
if (msg.action === "expand") {
|
|
358
|
+
expandTo(msg.path);
|
|
359
|
+
}
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
236
362
|
|
|
237
|
-
|
|
238
|
-
escapeShortcut();
|
|
239
|
-
enableLinks();
|
|
240
|
-
enableToggles();
|
|
241
|
-
populateSearchCache();
|
|
242
|
-
enableSearch();
|
|
243
|
-
});
|
|
363
|
+
window.addEventListener("message", windowEvents, false);
|
|
244
364
|
|
|
365
|
+
ready(function() {
|
|
366
|
+
escapeShortcut();
|
|
367
|
+
enableLinks();
|
|
368
|
+
enableToggles();
|
|
369
|
+
populateSearchCache();
|
|
370
|
+
enableSearch();
|
|
371
|
+
});
|
|
245
372
|
})();
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<% end %>
|
|
8
8
|
</title>
|
|
9
9
|
<% stylesheets.each do |stylesheet| %>
|
|
10
|
-
<link rel="stylesheet" href="<%= mtime_url(stylesheet) %>" type="text/css"
|
|
10
|
+
<link rel="stylesheet" href="<%= mtime_url(stylesheet) %>" type="text/css">
|
|
11
11
|
<% end %>
|
|
12
12
|
<%= erb :script_setup %>
|
|
13
13
|
<% javascripts.each do |javascript| %>
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
12
|
<div id="main" tabindex="-1">
|
|
13
|
+
<div id="main_progress" aria-hidden="true"></div>
|
|
13
14
|
<div id="header">
|
|
14
15
|
<%= erb(:breadcrumb) %>
|
|
15
16
|
<%= erb(:search) %>
|
|
@@ -21,4 +22,4 @@
|
|
|
21
22
|
<%= erb(:footer) %>
|
|
22
23
|
</div>
|
|
23
24
|
</body>
|
|
24
|
-
</html>
|
|
25
|
+
</html>
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
<dl>
|
|
4
4
|
<dt class="">Defined in:</dt>
|
|
5
5
|
<dd class="">
|
|
6
|
-
<%= object.file %><% if object.files.size > 1 %><span class="defines">,<br
|
|
7
|
-
<%= object.files[1..-1].map {|f| f.first }.join(",<br
|
|
6
|
+
<%= object.file %><% if object.files.size > 1 %><span class="defines">,<br>
|
|
7
|
+
<%= object.files[1..-1].map {|f| f.first }.join(",<br> ") %></div>
|
|
8
8
|
<% end %>
|
|
9
9
|
</dd>
|
|
10
10
|
</dl>
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
<div id="method_details">
|
|
15
15
|
<%= yieldall :index => 0 %>
|
|
16
16
|
</div>
|
|
17
|
-
</div>
|
|
17
|
+
</div>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<%= object.file ? object.file : '(unknown)' %><% if object.files.size > 1 %><span class="defines">,<br
|
|
2
|
-
<%= object.files[1..-1].map {|f| f.first }.join(",<br
|
|
3
|
-
<% end %>
|
|
1
|
+
<%= object.file ? object.file : '(unknown)' %><% if object.files.size > 1 %><span class="defines">,<br>
|
|
2
|
+
<%= object.files[1..-1].map {|f| f.first }.join(",<br> ") %></span>
|
|
3
|
+
<% end %>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
<% meths = prune_method_listing(superclass.meths(:included => false, :inherited => false)) %>
|
|
6
6
|
<% meths.reject! {|m| object.child(:scope => m.scope, :name => m.name) != nil } %>
|
|
7
7
|
<% meths.reject! {|m| m.is_alias? || m.is_attribute? } %>
|
|
8
|
+
<% meths.reject! {|m| m.group && object.groups && object.groups.include?(m.group) } %>
|
|
8
9
|
<% next if meths.size == 0 %>
|
|
9
10
|
<% if method_listing.size == 0 && !found_method %><h2>Method Summary</h2><% end %>
|
|
10
11
|
<% found_method = true %>
|
|
@@ -10,5 +10,13 @@
|
|
|
10
10
|
<%= yieldall :item => meth %>
|
|
11
11
|
<% end %>
|
|
12
12
|
</ul>
|
|
13
|
+
<% (inherited_methods_by_group[name] || {}).each do |superclass, meths| %>
|
|
14
|
+
<h3 class="inherited">Methods <%= superclass.type == :class ? 'inherited' : 'included' %> from <%= linkify superclass %></h3>
|
|
15
|
+
<p class="inherited"><%= meths.sort_by {|o| o.name.to_s }.map {|m|
|
|
16
|
+
mname = m.name(true)
|
|
17
|
+
mname = mname.gsub(/^#/, '') if superclass.type == :module && object.class_mixins.include?(superclass)
|
|
18
|
+
linkify(m, mname)
|
|
19
|
+
}.join(", ") %></p>
|
|
20
|
+
<% end %>
|
|
13
21
|
<% end %>
|
|
14
22
|
<% end %>
|
|
@@ -104,6 +104,26 @@ def inherited_constant_list
|
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
+
def inherited_methods_by_group
|
|
108
|
+
return @inherited_meths_by_group if defined?(@inherited_meths_by_group)
|
|
109
|
+
@inherited_meths_by_group = {}
|
|
110
|
+
return @inherited_meths_by_group unless object.groups
|
|
111
|
+
|
|
112
|
+
object.inheritance_tree(true)[1..-1].each do |superclass|
|
|
113
|
+
next if superclass.is_a?(YARD::CodeObjects::Proxy)
|
|
114
|
+
next if options.embed_mixins.size > 0 && options.embed_mixins_match?(superclass) != false
|
|
115
|
+
meths = prune_method_listing(superclass.meths(:included => false, :inherited => false))
|
|
116
|
+
meths.reject! {|m| object.child(:scope => m.scope, :name => m.name) != nil }
|
|
117
|
+
meths.reject! {|m| m.is_alias? || m.is_attribute? }
|
|
118
|
+
meths.each do |m|
|
|
119
|
+
next unless m.group && object.groups.include?(m.group)
|
|
120
|
+
(@inherited_meths_by_group[m.group] ||= {})[superclass] ||= []
|
|
121
|
+
@inherited_meths_by_group[m.group][superclass] << m
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
@inherited_meths_by_group
|
|
125
|
+
end
|
|
126
|
+
|
|
107
127
|
def docstring_full(obj)
|
|
108
128
|
docstring = obj.tags(:overload).size == 1 && obj.docstring.empty? ?
|
|
109
129
|
obj.tag(:overload).docstring : obj.docstring
|