summaryrefslogtreecommitdiffstats
path: root/target/doc/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'target/doc/main.js')
-rw-r--r--target/doc/main.js398
1 files changed, 270 insertions, 128 deletions
diff --git a/target/doc/main.js b/target/doc/main.js
index f688be8..3c115e2 100644
--- a/target/doc/main.js
+++ b/target/doc/main.js
@@ -49,6 +49,13 @@
var themesWidth = null;
+ if (!String.prototype.startsWith) {
+ String.prototype.startsWith = function(searchString, position) {
+ position = position || 0;
+ return this.indexOf(searchString, position) === position;
+ };
+ }
+
function hasClass(elem, className) {
if (elem && className && elem.className) {
var elemClass = elem.className;
@@ -96,14 +103,6 @@
}
}
- function onEach(arr, func) {
- if (arr && arr.length > 0 && func) {
- for (var i = 0; i < arr.length; i++) {
- func(arr[i]);
- }
- }
- }
-
function isHidden(elem) {
return (elem.offsetParent === null)
}
@@ -247,49 +246,59 @@
}
}
- function handleShortcut(ev) {
- if (document.activeElement.tagName === "INPUT")
- return;
+ function handleEscape(ev, help) {
+ hideModal();
+ var search = document.getElementById("search");
+ if (!hasClass(help, "hidden")) {
+ displayHelp(false, ev);
+ } else if (!hasClass(search, "hidden")) {
+ ev.preventDefault();
+ addClass(search, "hidden");
+ removeClass(document.getElementById("main"), "hidden");
+ }
+ defocusSearchBar();
+ }
+ function handleShortcut(ev) {
// Don't interfere with browser shortcuts
- if (ev.ctrlKey || ev.altKey || ev.metaKey)
+ if (ev.ctrlKey || ev.altKey || ev.metaKey) {
return;
+ }
var help = document.getElementById("help");
- switch (getVirtualKey(ev)) {
- case "Escape":
- hideModal();
- var search = document.getElementById("search");
- if (!hasClass(help, "hidden")) {
- displayHelp(false, ev);
- } else if (!hasClass(search, "hidden")) {
- ev.preventDefault();
- addClass(search, "hidden");
- removeClass(document.getElementById("main"), "hidden");
+ if (document.activeElement.tagName === "INPUT") {
+ switch (getVirtualKey(ev)) {
+ case "Escape":
+ handleEscape(ev, help);
+ break;
}
- defocusSearchBar();
- break;
+ } else {
+ switch (getVirtualKey(ev)) {
+ case "Escape":
+ handleEscape(ev, help);
+ break;
- case "s":
- case "S":
- displayHelp(false, ev);
- hideModal();
- ev.preventDefault();
- focusSearchBar();
- break;
+ case "s":
+ case "S":
+ displayHelp(false, ev);
+ hideModal();
+ ev.preventDefault();
+ focusSearchBar();
+ break;
- case "+":
- case "-":
- ev.preventDefault();
- toggleAllDocs();
- break;
+ case "+":
+ case "-":
+ ev.preventDefault();
+ toggleAllDocs();
+ break;
- case "?":
- if (ev.shiftKey) {
- hideModal();
- displayHelp(true, ev);
+ case "?":
+ if (ev.shiftKey) {
+ hideModal();
+ displayHelp(true, ev);
+ }
+ break;
}
- break;
}
}
@@ -297,9 +306,9 @@
document.onkeydown = handleShortcut;
document.onclick = function(ev) {
if (hasClass(ev.target, 'collapse-toggle')) {
- collapseDocs(ev.target);
+ collapseDocs(ev.target, "toggle");
} else if (hasClass(ev.target.parentNode, 'collapse-toggle')) {
- collapseDocs(ev.target.parentNode);
+ collapseDocs(ev.target.parentNode, "toggle");
} else if (ev.target.tagName === 'SPAN' && hasClass(ev.target.parentNode, 'line-numbers')) {
var prev_id = 0;
@@ -1162,6 +1171,10 @@
return h1.innerHTML;
}
+ function pathSplitter(path) {
+ return '<span>' + path.replace(/::/g, '::</span><span>');
+ }
+
function addTab(array, query, display) {
var extraStyle = '';
if (display === false) {
@@ -1216,7 +1229,7 @@
output += '<tr class="' + type + ' result"><td>' +
'<a href="' + href + '">' +
- displayPath + '<span class="' + type + '">' +
+ pathSplitter(displayPath) + '<span class="' + type + '">' +
name + '</span></a></td><td>' +
'<a href="' + href + '">' +
'<span class="desc">' + escape(item.desc) +
@@ -1465,36 +1478,38 @@
// Draw a convenient sidebar of known crates if we have a listing
if (rootPath === '../') {
var sidebar = document.getElementsByClassName('sidebar-elems')[0];
- var div = document.createElement('div');
- div.className = 'block crate';
- div.innerHTML = '<h3>Crates</h3>';
- var ul = document.createElement('ul');
- div.appendChild(ul);
-
- var crates = [];
- for (var crate in rawSearchIndex) {
- if (!rawSearchIndex.hasOwnProperty(crate)) {
- continue;
+ if (sidebar) {
+ var div = document.createElement('div');
+ div.className = 'block crate';
+ div.innerHTML = '<h3>Crates</h3>';
+ var ul = document.createElement('ul');
+ div.appendChild(ul);
+
+ var crates = [];
+ for (var crate in rawSearchIndex) {
+ if (!rawSearchIndex.hasOwnProperty(crate)) {
+ continue;
+ }
+ crates.push(crate);
}
- crates.push(crate);
- }
- crates.sort();
- for (var i = 0; i < crates.length; ++i) {
- var klass = 'crate';
- if (crates[i] === window.currentCrate) {
- klass += ' current';
+ crates.sort();
+ for (var i = 0; i < crates.length; ++i) {
+ var klass = 'crate';
+ if (crates[i] === window.currentCrate) {
+ klass += ' current';
+ }
+ var link = document.createElement('a');
+ link.href = '../' + crates[i] + '/index.html';
+ link.title = rawSearchIndex[crates[i]].doc;
+ link.className = klass;
+ link.textContent = crates[i];
+
+ var li = document.createElement('li');
+ li.appendChild(link);
+ ul.appendChild(li);
}
- var link = document.createElement('a');
- link.href = '../' + crates[i] + '/index.html';
- link.title = rawSearchIndex[crates[i]].doc;
- link.className = klass;
- link.textContent = crates[i];
-
- var li = document.createElement('li');
- li.appendChild(link);
- ul.appendChild(li);
+ sidebar.appendChild(div);
}
- sidebar.appendChild(div);
}
}
@@ -1563,14 +1578,31 @@
window.initSidebarItems = initSidebarItems;
window.register_implementors = function(imp) {
- var list = document.getElementById('implementors-list');
+ var implementors = document.getElementById('implementors-list');
+ var synthetic_implementors = document.getElementById('synthetic-implementors-list');
+
var libs = Object.getOwnPropertyNames(imp);
for (var i = 0; i < libs.length; ++i) {
if (libs[i] === currentCrate) { continue; }
var structs = imp[libs[i]];
+
+ struct_loop:
for (var j = 0; j < structs.length; ++j) {
+ var struct = structs[j];
+
+ var list = struct.synthetic ? synthetic_implementors : implementors;
+
+ if (struct.synthetic) {
+ for (var k = 0; k < struct.types.length; k++) {
+ if (window.inlined_types.has(struct.types[k])) {
+ continue struct_loop;
+ }
+ window.inlined_types.add(struct.types[k]);
+ }
+ }
+
var code = document.createElement('code');
- code.innerHTML = structs[j];
+ code.innerHTML = struct.text;
var x = code.getElementsByTagName('a');
for (var k = 0; k < x.length; k++) {
@@ -1614,81 +1646,155 @@
function toggleAllDocs() {
var toggle = document.getElementById("toggle-all-docs");
if (hasClass(toggle, "will-expand")) {
+ updateLocalStorage("rustdoc-collapse", "false");
removeClass(toggle, "will-expand");
onEveryMatchingChild(toggle, "inner", function(e) {
e.innerHTML = labelForToggleButton(false);
});
toggle.title = "collapse all docs";
- onEach(document.getElementsByClassName("docblock"), function(e) {
- e.style.display = 'block';
- });
- onEach(document.getElementsByClassName("toggle-label"), function(e) {
- e.style.display = 'none';
- });
- onEach(document.getElementsByClassName("toggle-wrapper"), function(e) {
- removeClass(e, "collapsed");
- });
onEach(document.getElementsByClassName("collapse-toggle"), function(e) {
- onEveryMatchingChild(e, "inner", function(i_e) {
- i_e.innerHTML = labelForToggleButton(false);
- });
+ collapseDocs(e, "show");
});
} else {
+ updateLocalStorage("rustdoc-collapse", "true");
addClass(toggle, "will-expand");
onEveryMatchingChild(toggle, "inner", function(e) {
e.innerHTML = labelForToggleButton(true);
});
toggle.title = "expand all docs";
- onEach(document.getElementsByClassName("docblock"), function(e) {
- e.style.display = 'none';
- });
- onEach(document.getElementsByClassName("toggle-label"), function(e) {
- e.style.display = 'inline-block';
- });
- onEach(document.getElementsByClassName("toggle-wrapper"), function(e) {
- addClass(e, "collapsed");
- });
+
onEach(document.getElementsByClassName("collapse-toggle"), function(e) {
- onEveryMatchingChild(e, "inner", function(i_e) {
- i_e.innerHTML = labelForToggleButton(true);
- });
+ collapseDocs(e, "hide");
});
}
}
- function collapseDocs(toggle) {
+ function collapseDocs(toggle, mode) {
if (!toggle || !toggle.parentNode) {
return;
}
- var relatedDoc = toggle.parentNode.nextElementSibling;
- if (hasClass(relatedDoc, "stability")) {
- relatedDoc = relatedDoc.nextElementSibling;
- }
- if (hasClass(relatedDoc, "docblock")) {
- if (!isHidden(relatedDoc)) {
- relatedDoc.style.display = 'none';
- onEach(toggle.childNodes, function(e) {
- if (hasClass(e, 'toggle-label')) {
+
+ function adjustToggle(arg) {
+ return function(e) {
+ if (hasClass(e, 'toggle-label')) {
+ if (arg) {
e.style.display = 'inline-block';
+ } else {
+ e.style.display = 'none';
}
- if (hasClass(e, 'inner')) {
- e.innerHTML = labelForToggleButton(true);
+ }
+ if (hasClass(e, 'inner')) {
+ e.innerHTML = labelForToggleButton(arg);
+ }
+ };
+ };
+
+ if (!hasClass(toggle.parentNode, "impl")) {
+ var relatedDoc = toggle.parentNode.nextElementSibling;
+ if (hasClass(relatedDoc, "stability")) {
+ relatedDoc = relatedDoc.nextElementSibling;
+ }
+ if (hasClass(relatedDoc, "docblock")) {
+ var action = mode;
+ if (action === "toggle") {
+ if (hasClass(relatedDoc, "hidden-by-usual-hider")) {
+ action = "show";
+ } else {
+ action = "hide";
}
- });
- addClass(toggle.parentNode, 'collapsed');
- } else {
- relatedDoc.style.display = 'block';
- removeClass(toggle.parentNode, 'collapsed');
- onEach(toggle.childNodes, function(e) {
- if (hasClass(e, 'toggle-label')) {
- e.style.display = 'none';
+ }
+ if (action === "hide") {
+ addClass(relatedDoc, "hidden-by-usual-hider");
+ onEach(toggle.childNodes, adjustToggle(true));
+ addClass(toggle.parentNode, 'collapsed');
+ } else if (action === "show") {
+ removeClass(relatedDoc, "hidden-by-usual-hider");
+ removeClass(toggle.parentNode, 'collapsed');
+ onEach(toggle.childNodes, adjustToggle(false));
+ }
+ }
+ } else {
+ // we are collapsing the impl block
+ function implHider(addOrRemove) {
+ return function(n) {
+ var is_method = hasClass(n, "method");
+ if (is_method || hasClass(n, "type")) {
+ if (is_method === true) {
+ if (addOrRemove) {
+ addClass(n, "hidden-by-impl-hider");
+ } else {
+ removeClass(n, "hidden-by-impl-hider");
+ }
+ }
+ var ns = n.nextElementSibling;
+ while (true) {
+ if (ns && (
+ hasClass(ns, "docblock") ||
+ hasClass(ns, "stability"))) {
+ if (addOrRemove) {
+ addClass(ns, "hidden-by-impl-hider");
+ } else {
+ removeClass(ns, "hidden-by-impl-hider");
+ }
+ ns = ns.nextElementSibling;
+ continue;
+ }
+ break;
+ }
}
- if (hasClass(e, 'inner')) {
- e.innerHTML = labelForToggleButton(false);
+ }
+ }
+
+ var relatedDoc = toggle.parentNode;
+ var docblock = relatedDoc.nextElementSibling;
+
+ while (!hasClass(relatedDoc, "impl-items")) {
+ relatedDoc = relatedDoc.nextElementSibling;
+ }
+
+ if (!relatedDoc && !hasClass(docblock, "docblock")) {
+ return;
+ }
+
+ // Hide all functions, but not associated types/consts
+
+ var action = mode;
+ if (action === "toggle") {
+ if (hasClass(relatedDoc, "fns-now-collapsed") ||
+ hasClass(docblock, "hidden-by-impl-hider")) {
+ action = "show";
+ } else {
+ action = "hide";
+ }
+ }
+
+ if (action === "show") {
+ removeClass(relatedDoc, "fns-now-collapsed");
+ removeClass(docblock, "hidden-by-usual-hider");
+ onEach(toggle.childNodes, adjustToggle(false));
+ onEach(relatedDoc.childNodes, implHider(false));
+ } else if (action === "hide") {
+ addClass(relatedDoc, "fns-now-collapsed");
+ addClass(docblock, "hidden-by-usual-hider");
+ onEach(toggle.childNodes, adjustToggle(true));
+ onEach(relatedDoc.childNodes, implHider(true));
+ }
+ }
+ }
+
+ function autoCollapseAllImpls() {
+ // Automatically minimize all non-inherent impls
+ onEach(document.getElementsByClassName('impl'), function(n) {
+ // inherent impl ids are like 'impl' or impl-<number>'
+ var inherent = (n.id.match(/^impl(?:-\d+)?$/) !== null);
+ if (!inherent) {
+ onEach(n.childNodes, function(m) {
+ if (hasClass(m, "collapse-toggle")) {
+ collapseDocs(m, "hide");
}
});
}
- }
+ });
}
var x = document.getElementById('toggle-all-docs');
@@ -1700,32 +1806,55 @@
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}
+ function checkIfThereAreMethods(elems) {
+ var areThereMethods = false;
+
+ onEach(elems, function(e) {
+ if (hasClass(e, "method")) {
+ areThereMethods = true;
+ return true;
+ }
+ });
+ return areThereMethods;
+ }
+
var toggle = document.createElement('a');
toggle.href = 'javascript:void(0)';
toggle.className = 'collapse-toggle';
- toggle.innerHTML = "[<span class='inner'>"+labelForToggleButton(false)+"</span>]";
+ toggle.innerHTML = "[<span class='inner'>" + labelForToggleButton(false) + "</span>]";
var func = function(e) {
var next = e.nextElementSibling;
+ if (hasClass(e, 'impl') && next && hasClass(next, 'docblock')) {
+ next = next.nextElementSibling;
+ }
if (!next) {
return;
}
- if (hasClass(next, 'docblock') ||
- (hasClass(next, 'stability') &&
- hasClass(next.nextElementSibling, 'docblock'))) {
+ if ((checkIfThereAreMethods(next.childNodes) || hasClass(e, 'method')) &&
+ (hasClass(next, 'docblock') ||
+ hasClass(e, 'impl') ||
+ (hasClass(next, 'stability') &&
+ hasClass(next.nextElementSibling, 'docblock')))) {
insertAfter(toggle.cloneNode(true), e.childNodes[e.childNodes.length - 1]);
}
}
onEach(document.getElementsByClassName('method'), func);
+ onEach(document.getElementsByClassName('impl'), func);
onEach(document.getElementsByClassName('impl-items'), function(e) {
onEach(e.getElementsByClassName('associatedconstant'), func);
});
- function createToggle() {
+ function createToggle(otherMessage) {
var span = document.createElement('span');
span.className = 'toggle-label';
span.style.display = 'none';
- span.innerHTML = '&nbsp;Expand&nbsp;description';
+ if (!otherMessage) {
+ span.innerHTML = '&nbsp;Expand&nbsp;description';
+ } else {
+ span.innerHTML = otherMessage;
+ span.style.fontSize = '20px';
+ }
var mainToggle = toggle.cloneNode(true);
mainToggle.appendChild(span);
@@ -1738,7 +1867,14 @@
onEach(document.getElementById('main').getElementsByClassName('docblock'), function(e) {
if (e.parentNode.id === "main") {
- e.parentNode.insertBefore(createToggle(), e);
+ var otherMessage;
+ if (hasClass(e, "type-decl")) {
+ otherMessage = '&nbsp;Show&nbsp;type&nbsp;declaration';
+ }
+ e.parentNode.insertBefore(createToggle(otherMessage), e);
+ if (otherMessage) {
+ collapseDocs(e.previousSibling.childNodes[0], "toggle");
+ }
}
});
@@ -1764,6 +1900,8 @@
}
})
+ autoCollapseAllImpls();
+
function createToggleWrapper() {
var span = document.createElement('span');
span.className = 'toggle-label';
@@ -1804,7 +1942,7 @@
onEach(document.getElementById('main').getElementsByTagName('pre'), function(e) {
onEach(e.getElementsByClassName('attributes'), function(i_e) {
i_e.parentNode.insertBefore(createToggleWrapper(), i_e);
- collapseDocs(i_e.previousSibling.childNodes[0]);
+ collapseDocs(i_e.previousSibling.childNodes[0], "toggle");
});
});
@@ -1890,6 +2028,10 @@
window.onresize = function() {
hideSidebar();
};
+
+ if (getCurrentValue("rustdoc-collapse") === "true") {
+ toggleAllDocs();
+ }
}());
// Sets the focus on the search bar at the top of the page