authorgravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2022-01-29 20:13:10+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:10-07:00
log38281c8ed421b8febadb2d4e05291fcf4a871ccc
tree2412f9fb5ee438763dc8b2ae72f1ffc5a2d9518b
parent75d39a97a29a4dee905a4c2b1f06444312be3a77

autodoc: add declval support to docs js


2 files changed, 213 insertions(+), 256 deletions(-)

lib/docs/index.html+11-18
...@@ -43,8 +43,6 @@...@@ -43,8 +43,6 @@
4343
44 /* layout */44 /* layout */
45 .canvas {45 .canvas {
46 display: flex;
47 flex-direction: column;
48 width: 100vw;46 width: 100vw;
49 height: 100vh;47 height: 100vh;
50 overflow: hidden;48 overflow: hidden;
...@@ -55,21 +53,12 @@...@@ -55,21 +53,12 @@
55 background-color: var(--bg-color);53 background-color: var(--bg-color);
56 }54 }
5755
58 .banner {
59 background-color: darkred;
60 text-align: center;
61 color: white;
62 padding: 15px 5px;
63 }
64
65 .banner a {
66 color: bisque;
67 text-decoration: underline;
68 }
69
70 .flex-main {56 .flex-main {
71 display: flex;57 display: flex;
72 overflow-y: hidden;58 width: 100%;
59 height: 100%;
60 justify-content: center;
61
73 z-index: 100;62 z-index: 100;
74 }63 }
7564
...@@ -526,7 +515,6 @@...@@ -526,7 +515,6 @@
526 </style>515 </style>
527 </head>516 </head>
528 <body class="canvas">517 <body class="canvas">
529 <div class="banner">These docs are experimental. <a href="https://kristoff.it/blog/zig-new-relationship-llvm/">Progress depends on the self-hosted compiler</a>, <a href="https://github.com/ziglang/zig/wiki/How-to-read-the-standard-library-source-code">consider reading the stdlib source in the meantime</a>.</div>
530 <div class="flex-main">518 <div class="flex-main">
531 <div class="flex-filler"></div>519 <div class="flex-filler"></div>
532 <div class="flex-left sidebar">520 <div class="flex-left sidebar">
...@@ -541,8 +529,14 @@...@@ -541,8 +529,14 @@
541 </g>529 </g>
542 </svg>530 </svg>
543 </div>531 </div>
532 <div id="sectMainPkg" class="hidden">
533 <h2><span>Main Package</span></h2>
534 <ul class="packages">
535 <li><a id="mainPkg" class="" href=""></a></li>
536 </ul>
537 </div>
544 <div id="sectPkgs" class="hidden">538 <div id="sectPkgs" class="hidden">
545 <h2><span>Packages</span></h2>539 <h2><span>Dependencies</span></h2>
546 <ul id="listPkgs" class="packages"></ul>540 <ul id="listPkgs" class="packages"></ul>
547 </div>541 </div>
548 <div id="sectInfo" class="hidden">542 <div id="sectInfo" class="hidden">
...@@ -588,7 +582,6 @@...@@ -588,7 +582,6 @@
588 <div id="sectSearchResults" class="hidden">582 <div id="sectSearchResults" class="hidden">
589 <h2>Search Results</h2>583 <h2>Search Results</h2>
590 <ul id="listSearchResults"></ul>584 <ul id="listSearchResults"></ul>
591 <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
592 </div>585 </div>
593 <div id="sectSearchNoResults" class="hidden">586 <div id="sectSearchNoResults" class="hidden">
594 <h2>No Results Found</h2>587 <h2>No Results Found</h2>
lib/docs/main.js+202-238
...@@ -2,6 +2,7 @@...@@ -2,6 +2,7 @@
2 var domStatus = document.getElementById("status");2 var domStatus = document.getElementById("status");
3 var domSectNav = document.getElementById("sectNav");3 var domSectNav = document.getElementById("sectNav");
4 var domListNav = document.getElementById("listNav");4 var domListNav = document.getElementById("listNav");
5 var domSectMainPkg = document.getElementById("sectMainPkg");
5 var domSectPkgs = document.getElementById("sectPkgs");6 var domSectPkgs = document.getElementById("sectPkgs");
6 var domListPkgs = document.getElementById("listPkgs");7 var domListPkgs = document.getElementById("listPkgs");
7 var domSectTypes = document.getElementById("sectTypes");8 var domSectTypes = document.getElementById("sectTypes");
...@@ -35,7 +36,6 @@...@@ -35,7 +36,6 @@
35 var domSectSearchResults = document.getElementById("sectSearchResults");36 var domSectSearchResults = document.getElementById("sectSearchResults");
36 var domListSearchResults = document.getElementById("listSearchResults");37 var domListSearchResults = document.getElementById("listSearchResults");
37 var domSectSearchNoResults = document.getElementById("sectSearchNoResults");38 var domSectSearchNoResults = document.getElementById("sectSearchNoResults");
38 var domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");
39 var domSectInfo = document.getElementById("sectInfo");39 var domSectInfo = document.getElementById("sectInfo");
40 var domTdTarget = document.getElementById("tdTarget");40 var domTdTarget = document.getElementById("tdTarget");
41 var domTdZigVer = document.getElementById("tdZigVer");41 var domTdZigVer = document.getElementById("tdZigVer");
...@@ -43,22 +43,11 @@...@@ -43,22 +43,11 @@
43 var domHelpModal = document.getElementById("helpDialog");43 var domHelpModal = document.getElementById("helpDialog");
4444
45 var searchTimer = null;45 var searchTimer = null;
46 var searchTrimResults = true;
47 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };46 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };
4847
49 var typeKinds = indexTypeKinds();48 var typeKinds = indexTypeKinds();
50 var typeTypeId = findTypeTypeId();49 var typeTypeId = findTypeTypeId();
51 var pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 };50 var pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 };
52 var tokenKinds = {
53 Keyword: 'tok-kw',
54 String: 'tok-str',
55 Builtin: 'tok-builtin',
56 Comment: 'tok-comment',
57 Function: 'tok-fn',
58 Null: 'tok-null',
59 Number: 'tok-number',
60 Type: 'tok-type',
61 };
6251
63 // for each package, is an array with packages to get to this one52 // for each package, is an array with packages to get to this one
64 var canonPkgPaths = computeCanonicalPackagePaths();53 var canonPkgPaths = computeCanonicalPackagePaths();
...@@ -94,8 +83,6 @@...@@ -94,8 +83,6 @@
94 var nodesToCallsMap = indexNodesToCalls();83 var nodesToCallsMap = indexNodesToCalls();
9584
96 domSearch.addEventListener('keydown', onSearchKeyDown, false);85 domSearch.addEventListener('keydown', onSearchKeyDown, false);
97 domSectSearchAllResultsLink.addEventListener('click', onClickSearchShowAllResults, false);
98
99 window.addEventListener('hashchange', onHashChange, false);86 window.addEventListener('hashchange', onHashChange, false);
100 window.addEventListener('keydown', onWindowKeyDown, false);87 window.addEventListener('keydown', onWindowKeyDown, false);
101 onHashChange();88 onHashChange();
...@@ -119,6 +106,7 @@...@@ -119,6 +106,7 @@
119 domFnProto.classList.add("hidden");106 domFnProto.classList.add("hidden");
120 domSectParams.classList.add("hidden");107 domSectParams.classList.add("hidden");
121 domTldDocs.classList.add("hidden");108 domTldDocs.classList.add("hidden");
109 domSectMainPkg.classList.add("hidden");
122 domSectPkgs.classList.add("hidden");110 domSectPkgs.classList.add("hidden");
123 domSectTypes.classList.add("hidden");111 domSectTypes.classList.add("hidden");
124 domSectNamespaces.classList.add("hidden");112 domSectNamespaces.classList.add("hidden");
...@@ -127,7 +115,6 @@...@@ -127,7 +115,6 @@
127 domSectFields.classList.add("hidden");115 domSectFields.classList.add("hidden");
128 domSectSearchResults.classList.add("hidden");116 domSectSearchResults.classList.add("hidden");
129 domSectSearchNoResults.classList.add("hidden");117 domSectSearchNoResults.classList.add("hidden");
130 domSectSearchAllResultsLink.classList.add("hidden");
131 domSectInfo.classList.add("hidden");118 domSectInfo.classList.add("hidden");
132 domHdrName.classList.add("hidden");119 domHdrName.classList.add("hidden");
133 domSectNav.classList.add("hidden");120 domSectNav.classList.add("hidden");
...@@ -269,19 +256,15 @@...@@ -269,19 +256,15 @@
269 domFnNoExamples.classList.remove("hidden");256 domFnNoExamples.classList.remove("hidden");
270 } else if (calls != null) {257 } else if (calls != null) {
271 if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls);258 if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls);
272 if (fnObj.combined != null) {259 if (fnObj.combined != null) renderContainer(fnObj.combined);
273 renderContainer(fnObj.combined, calls.map(function (call) { return zigAnalysis.calls[call].result.value }));
274 }
275260
276 var domListFnExamplesFragment = createDomListFragment(calls.length, '<li></li>');261 resizeDomList(domListFnExamples, calls.length, '<li></li>');
277262
278 for (var callI = 0; callI < calls.length; callI += 1) {263 for (var callI = 0; callI < calls.length; callI += 1) {
279 var liDom = domListFnExamplesFragment.children[callI];264 var liDom = domListFnExamples.children[callI];
280 liDom.innerHTML = getCallHtml(fnDecl, calls[callI]);265 liDom.innerHTML = getCallHtml(fnDecl, calls[callI]);
281 }266 }
282267
283 domListFnExamples.innerHTML = "";
284 domListFnExamples.appendChild(domListFnExamplesFragment);
285 domFnExamples.classList.remove("hidden");268 domFnExamples.classList.remove("hidden");
286 } else if (instantiations != null) {269 } else if (instantiations != null) {
287 // TODO270 // TODO
...@@ -322,7 +305,7 @@...@@ -322,7 +305,7 @@
322 return;305 return;
323 }306 }
324307
325 var domListParamsFragment = createDomListFragment(docCount, '<div></div>');308 resizeDomList(domListParams, docCount, '<div></div>');
326 var domIndex = 0;309 var domIndex = 0;
327310
328 for (var i = 0; i < fields.length; i += 1) {311 for (var i = 0; i < fields.length; i += 1) {
...@@ -331,7 +314,7 @@...@@ -331,7 +314,7 @@
331 if (fieldNode.docs == null) {314 if (fieldNode.docs == null) {
332 continue;315 continue;
333 }316 }
334 var divDom = domListParamsFragment.children[domIndex];317 var divDom = domListParams.children[domIndex];
335 domIndex += 1;318 domIndex += 1;
336 var argTypeIndex = typeObj.args[i];319 var argTypeIndex = typeObj.args[i];
337320
...@@ -352,15 +335,12 @@...@@ -352,15 +335,12 @@
352 }335 }
353 divDom.innerHTML = html;336 divDom.innerHTML = html;
354 }337 }
355
356 domListParams.innerHTML = "";
357 domListParams.appendChild(domListParamsFragment);
358 domSectParams.classList.remove("hidden");338 domSectParams.classList.remove("hidden");
359 }339 }
360340
361 function renderNav() {341 function renderNav() {
362 var len = curNav.pkgNames.length + curNav.declNames.length;342 var len = curNav.pkgNames.length + curNav.declNames.length;
363 var domListNavFragment = createDomListFragment(len, '<li><a href="#"></a></li>');343 resizeDomList(domListNav, len, '<li><a href="#"></a></li>');
364 var list = [];344 var list = [];
365 var hrefPkgNames = [];345 var hrefPkgNames = [];
366 var hrefDeclNames = [];346 var hrefDeclNames = [];
...@@ -380,7 +360,7 @@...@@ -380,7 +360,7 @@
380 }360 }
381361
382 for (var i = 0; i < list.length; i += 1) {362 for (var i = 0; i < list.length; i += 1) {
383 var liDom = domListNavFragment.children[i];363 var liDom = domListNav.children[i];
384 var aDom = liDom.children[0];364 var aDom = liDom.children[0];
385 aDom.textContent = list[i].name;365 aDom.textContent = list[i].name;
386 aDom.setAttribute('href', list[i].link);366 aDom.setAttribute('href', list[i].link);
...@@ -391,8 +371,6 @@...@@ -391,8 +371,6 @@
391 }371 }
392 }372 }
393373
394 domListNav.innerHTML = "";
395 domListNav.appendChild(domListNavFragment);
396 domSectNav.classList.remove("hidden");374 domSectNav.classList.remove("hidden");
397 }375 }
398376
...@@ -412,7 +390,6 @@...@@ -412,7 +390,6 @@
412 var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];390 var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];
413 var list = [];391 var list = [];
414 for (var key in rootPkg.table) {392 for (var key in rootPkg.table) {
415 if (key === "root" && rootIsStd) continue;
416 var pkgIndex = rootPkg.table[key];393 var pkgIndex = rootPkg.table[key];
417 if (zigAnalysis.packages[pkgIndex] == null) continue;394 if (zigAnalysis.packages[pkgIndex] == null) continue;
418 list.push({395 list.push({
...@@ -420,14 +397,27 @@...@@ -420,14 +397,27 @@
420 pkg: pkgIndex,397 pkg: pkgIndex,
421 });398 });
422 }399 }
400
401 {
402 var aDom = domSectMainPkg.children[1].children[0].children[0];
403 aDom.textContent = zigAnalysis.params.rootName;
404 aDom.setAttribute('href', navLinkPkg(zigAnalysis.rootPkg));
405 if (zigAnalysis.params.rootName === curNav.pkgNames[0]) {
406 aDom.classList.add("active");
407 } else {
408 aDom.classList.remove("active");
409 }
410 domSectMainPkg.classList.remove("hidden");
411 }
412
423 list.sort(function(a, b) {413 list.sort(function(a, b) {
424 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());414 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
425 });415 });
426416
427 if (list.length !== 0) {417 if (list.length !== 0) {
428 var domListPkgsFragment = createDomListFragment(list.length, '<li><a href="#"></a></li>');418 resizeDomList(domListPkgs, list.length, '<li><a href="#"></a></li>');
429 for (var i = 0; i < list.length; i += 1) {419 for (var i = 0; i < list.length; i += 1) {
430 var liDom = domListPkgsFragment.children[i];420 var liDom = domListPkgs.children[i];
431 var aDom = liDom.children[0];421 var aDom = liDom.children[0];
432 aDom.textContent = list[i].name;422 aDom.textContent = list[i].name;
433 aDom.setAttribute('href', navLinkPkg(list[i].pkg));423 aDom.setAttribute('href', navLinkPkg(list[i].pkg));
...@@ -438,8 +428,6 @@...@@ -438,8 +428,6 @@
438 }428 }
439 }429 }
440430
441 domListPkgs.innerHTML = "";
442 domListPkgs.appendChild(domListPkgsFragment);
443 domSectPkgs.classList.remove("hidden");431 domSectPkgs.classList.remove("hidden");
444 }432 }
445 }433 }
...@@ -480,34 +468,50 @@...@@ -480,34 +468,50 @@
480 return navLink(curNav.pkgNames, declNamesCopy);468 return navLink(curNav.pkgNames, declNamesCopy);
481 }469 }
482470
483 function createDomListFragment(desiredLen, templateHtml) {471 function resizeDomListDl(dlDom, desiredLen) {
484 var domTemplate = document.createElement("template");472 // add the missing dom entries
485 domTemplate.innerHTML = templateHtml.repeat(desiredLen);473 var i, ev;
486 return domTemplate.content;474 for (i = dlDom.childElementCount / 2; i < desiredLen; i += 1) {
475 dlDom.insertAdjacentHTML('beforeend', '<dt></dt><dd></dd>');
476 }
477 // remove extra dom entries
478 while (desiredLen < dlDom.childElementCount / 2) {
479 dlDom.removeChild(dlDom.lastChild);
480 dlDom.removeChild(dlDom.lastChild);
481 }
487 }482 }
488483
489 function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl, thisTypes) {484 function resizeDomList(listDom, desiredLen, templateHtml) {
490 if(thisTypes && thisTypes.includes(typeIndex)){485 // add the missing dom entries
491 return token('@This', tokenKinds.Builtin, wantHtml) + '()';486 var i, ev;
487 for (i = listDom.childElementCount; i < desiredLen; i += 1) {
488 listDom.insertAdjacentHTML('beforeend', templateHtml);
489 }
490 // remove extra dom entries
491 while (desiredLen < listDom.childElementCount) {
492 listDom.removeChild(listDom.lastChild);
492 }493 }
494 }
495
496 function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl) {
493 var typeObj = zigAnalysis.types[typeIndex];497 var typeObj = zigAnalysis.types[typeIndex];
494 var declNameOk = declCanRepresentTypeKind(typeObj.kind);498 var declNameOk = declCanRepresentTypeKind(typeObj.kind);
495 if (wantLink) {499 if (wantLink) {
496 var declIndex = getCanonTypeDecl(typeIndex);500 var declIndex = getCanonTypeDecl(typeIndex);
497 var declPath = getCanonDeclPath(declIndex);501 var declPath = getCanonDeclPath(declIndex);
498 if (declPath == null) {502 if (declPath == null) {
499 return typeName(typeObj, wantHtml, wantLink, fnDecl, linkFnNameDecl, thisTypes);503 return typeName(typeObj, wantHtml, wantLink, fnDecl, linkFnNameDecl);
500 }504 }
501 var name = (wantLink && declCanRepresentTypeKind(typeObj.kind)) ?505 var name = (wantLink && declCanRepresentTypeKind(typeObj.kind)) ?
502 declPath.declNames[declPath.declNames.length - 1] :506 declPath.declNames[declPath.declNames.length - 1] :
503 typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl, thisTypes);507 typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl);
504 if (wantLink && wantHtml) {508 if (wantLink && wantHtml) {
505 return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + name + '</a>';509 return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + name + '</a>';
506 } else {510 } else {
507 return name;511 return name;
508 }512 }
509 } else {513 } else {
510 return typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl, thisTypes);514 return typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl);
511 }515 }
512 }516 }
513517
...@@ -545,57 +549,32 @@...@@ -545,57 +549,32 @@
545 return typeIndexName(value, wantHtml, wantLink);549 return typeIndexName(value, wantHtml, wantLink);
546 case typeKinds.Fn:550 case typeKinds.Fn:
547 var fnObj = zigAnalysis.fns[value];551 var fnObj = zigAnalysis.fns[value];
548 var declPath = fnObj.decl && getCanonDeclPath(fnObj.decl);552 return typeIndexName(fnObj.type, wantHtml, wantLink);
549 var fnName = declPath ? declPath.declNames.join('.') : '(unknown)';
550
551 if (!wantHtml) {
552 return fnName;
553 }
554
555 var str = '<span class="tok-fn">';
556 if (wantLink && declPath != null) {
557 str += '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">';
558 str += escapeHtml(fnName);
559 str += '</a>';
560 } else {
561 str += escapeHtml(fnName);
562 }
563 str += '</span>';
564 return str;
565 case typeKinds.Int:553 case typeKinds.Int:
566 return token(value, tokenKinds.Number, wantHtml);554 if (wantHtml) {
567 case typeKinds.Optional:555 return '<span class="tok-number">' + value + '</span>';
568 if(value === 'null'){
569 return token(value, tokenKinds.Null, wantHtml);
570 } else {556 } else {
571 console.trace("TODO non-null optional value printing");557 return value + "";
572 return "TODO";
573 }558 }
574 case typeKinds.Bool:
575 return token(value, tokenKinds.Null, wantHtml);
576 default:559 default:
577 console.trace("TODO implement getValueText for this type:", zigAnalysis.typeKinds[typeObj.kind]);560 console.trace("TODO implement getValueText for this type:", zigAnalysis.typeKinds[typeObj.kind]);
578 return "TODO";
579 }561 }
580 }562 }
581563
582 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl, thisTypes) {564 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl) {
583 switch (typeObj.kind) {565 switch (typeObj.kind) {
584 case typeKinds.Array:566 case typeKinds.Array:
585 var name = "[";567 var name = "[";
586 name += token(typeObj.len, tokenKinds.Number, wantHtml);568 if (wantHtml) {
569 name += '<span class="tok-number">' + typeObj.len + '</span>';
570 } else {
571 name += typeObj.len;
572 }
587 name += "]";573 name += "]";
588 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null, null, thisTypes);574 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
589 return name;
590 case typeKinds.Vector:
591 var name = "Vector(";
592 name += token(typeObj.len, tokenKinds.Number, wantHtml);
593 name += ", ";
594 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null, null, thisTypes);
595 name += ")";
596 return name;575 return name;
597 case typeKinds.Optional:576 case typeKinds.Optional:
598 return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl, thisTypes);577 return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
599 case typeKinds.Pointer:578 case typeKinds.Pointer:
600 var name = "";579 var name = "";
601 switch (typeObj.len) {580 switch (typeObj.len) {
...@@ -614,48 +593,112 @@...@@ -614,48 +593,112 @@
614 break;593 break;
615 }594 }
616 if (typeObj['const']) {595 if (typeObj['const']) {
617 name += token('const', tokenKinds.Keyword, wantHtml) + ' ';596 if (wantHtml) {
597 name += '<span class="tok-kw">const</span> ';
598 } else {
599 name += "const ";
600 }
618 }601 }
619 if (typeObj['volatile']) {602 if (typeObj['volatile']) {
620 name += token('volatile', tokenKinds.Keyword, wantHtml) + ' ';603 if (wantHtml) {
604 name += '<span class="tok-kw">volatile</span> ';
605 } else {
606 name += "volatile ";
607 }
621 }608 }
622 if (typeObj.align != null) {609 if (typeObj.align != null) {
623 name += token('align', tokenKinds.Keyword, wantHtml) + '(';610 if (wantHtml) {
624 name += token(typeObj.align, tokenKinds.Number, wantHtml);611 name += '<span class="tok-kw">align</span>(';
625612 } else {
613 name += "align(";
614 }
615 if (wantHtml) {
616 name += '<span class="tok-number">' + typeObj.align + '</span>';
617 } else {
618 name += typeObj.align;
619 }
626 if (typeObj.hostIntBytes != null) {620 if (typeObj.hostIntBytes != null) {
627 name += ":";621 name += ":";
628 name += token(typeObj.bitOffsetInHost, tokenKinds.Number, wantHtml);622 if (wantHtml) {
623 name += '<span class="tok-number">' + typeObj.bitOffsetInHost + '</span>';
624 } else {
625 name += typeObj.bitOffsetInHost;
626 }
629 name += ":";627 name += ":";
630 name += token(typeObj.hostIntBytes, tokenKinds.Number, wantHtml);628 if (wantHtml) {
629 name += '<span class="tok-number">' + typeObj.hostIntBytes + '</span>';
630 } else {
631 name += typeObj.hostIntBytes;
632 }
631 }633 }
632 name += ") ";634 name += ") ";
633 }635 }
634 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null, null, thisTypes);636 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
635 return name;637 return name;
636 case typeKinds.Float:638 case typeKinds.Float:
637 return token('f' + typeObj.bits, tokenKinds.Type, wantHtml);639 if (wantHtml) {
640 return '<span class="tok-type">f' + typeObj.bits + '</span>';
641 } else {
642 return "f" + typeObj.bits;
643 }
638 case typeKinds.Int:644 case typeKinds.Int:
639 var signed = (typeObj.i != null) ? 'i' : 'u';645 return '<span class="tok-type">' + typeObj.name + '</span>';
640 var bits = typeObj[signed];646 // var signed = (typeObj.i != null) ? 'i' : 'u';
641 return token(signed + bits, tokenKinds.Type, wantHtml);647 // var bits = typeObj[signed];
648 // if (wantHtml) {
649 // return '<span class="tok-type">' + signed + bits + '</span>';
650 // } else {
651 // return signed + bits;
652 // }
642 case typeKinds.ComptimeInt:653 case typeKinds.ComptimeInt:
643 return token('comptime_int', tokenKinds.Type, wantHtml);654 if (wantHtml) {
655 return '<span class="tok-type">comptime_int</span>';
656 } else {
657 return "comptime_int";
658 }
644 case typeKinds.ComptimeFloat:659 case typeKinds.ComptimeFloat:
645 return token('comptime_float', tokenKinds.Type, wantHtml);660 if (wantHtml) {
661 return '<span class="tok-type">comptime_float</span>';
662 } else {
663 return "comptime_float";
664 }
646 case typeKinds.Type:665 case typeKinds.Type:
647 return token('type', tokenKinds.Type, wantHtml);666 if (wantHtml) {
667 return '<span class="tok-type">type</span>';
668 } else {
669 return "type";
670 }
648 case typeKinds.Bool:671 case typeKinds.Bool:
649 return token('bool', tokenKinds.Type, wantHtml);672 if (wantHtml) {
673 return '<span class="tok-type">bool</span>';
674 } else {
675 return "bool";
676 }
650 case typeKinds.Void:677 case typeKinds.Void:
651 return token('void', tokenKinds.Type, wantHtml);678 if (wantHtml) {
679 return '<span class="tok-type">void</span>';
680 } else {
681 return "void";
682 }
652 case typeKinds.EnumLiteral:683 case typeKinds.EnumLiteral:
653 return token('(enum literal)', tokenKinds.Type, wantHtml);684 if (wantHtml) {
685 return '<span class="tok-type">(enum literal)</span>';
686 } else {
687 return "(enum literal)";
688 }
654 case typeKinds.NoReturn:689 case typeKinds.NoReturn:
655 return token('noreturn', tokenKinds.Type, wantHtml);690 if (wantHtml) {
691 return '<span class="tok-type">noreturn</span>';
692 } else {
693 return "noreturn";
694 }
656 case typeKinds.ErrorSet:695 case typeKinds.ErrorSet:
657 if (typeObj.errors == null) {696 if (typeObj.errors == null) {
658 return token('anyerror', tokenKinds.Type, wantHtml);697 if (wantHtml) {
698 return '<span class="tok-type">anyerror</span>';
699 } else {
700 return "anyerror";
701 }
659 } else {702 } else {
660 if (wantHtml) {703 if (wantHtml) {
661 return escapeHtml(typeObj.name);704 return escapeHtml(typeObj.name);
...@@ -665,12 +708,12 @@...@@ -665,12 +708,12 @@
665 }708 }
666 case typeKinds.ErrorUnion:709 case typeKinds.ErrorUnion:
667 var errSetTypeObj = zigAnalysis.types[typeObj.err];710 var errSetTypeObj = zigAnalysis.types[typeObj.err];
668 var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null, null, thisTypes);711 var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null);
669 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {712 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {
670 // function index parameter supplied and this is the inferred error set of it713 // function index parameter supplied and this is the inferred error set of it
671 return "!" + payloadHtml;714 return "!" + payloadHtml;
672 } else {715 } else {
673 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null, null, thisTypes) + "!" + payloadHtml;716 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;
674 }717 }
675 case typeKinds.Fn:718 case typeKinds.Fn:
676 var payloadHtml = "";719 var payloadHtml = "";
...@@ -716,11 +759,19 @@...@@ -716,11 +759,19 @@
716 }759 }
717760
718 if (paramNode.noalias) {761 if (paramNode.noalias) {
719 payloadHtml += token('noalias', tokenKinds.Keyword, wantHtml) + ' ';762 if (wantHtml) {
763 payloadHtml += '<span class="tok-kw">noalias</span> ';
764 } else {
765 payloadHtml += 'noalias ';
766 }
720 }767 }
721768
722 if (paramNode.comptime) {769 if (paramNode.comptime) {
723 payloadHtml += token('comptime', tokenKinds.Keyword, wantHtml) + ' ';770 if (wantHtml) {
771 payloadHtml += '<span class="tok-kw">comptime</span> ';
772 } else {
773 payloadHtml += 'comptime ';
774 }
724 }775 }
725776
726 var paramName = paramNode.name;777 var paramName = paramNode.name;
...@@ -735,30 +786,24 @@...@@ -735,30 +786,24 @@
735 if (isVarArgs && i === typeObj.args.length - 1) {786 if (isVarArgs && i === typeObj.args.length - 1) {
736 payloadHtml += '...';787 payloadHtml += '...';
737 } else if (argTypeIndex != null) {788 } else if (argTypeIndex != null) {
738 payloadHtml += typeIndexName(argTypeIndex, wantHtml, wantSubLink, null, null, thisTypes);789 payloadHtml += typeIndexName(argTypeIndex, wantHtml, wantSubLink);
790 } else if (wantHtml) {
791 payloadHtml += '<span class="tok-kw">var</span>';
739 } else {792 } else {
740 payloadHtml += token('anytype', tokenKinds.Keyword, wantHtml);793 payloadHtml += 'var';
741 }794 }
742 }795 }
743 }796 }
744797
745 payloadHtml += ') ';798 payloadHtml += ') ';
746 if (typeObj.ret != null) {799 if (typeObj.ret != null) {
747 payloadHtml += typeIndexName(typeObj.ret, wantHtml, wantSubLink, fnDecl, null, thisTypes);800 payloadHtml += typeIndexName(typeObj.ret, wantHtml, wantSubLink, fnDecl);
801 } else if (wantHtml) {
802 payloadHtml += '<span class="tok-kw">var</span>';
748 } else {803 } else {
749 payloadHtml += token('anytype', tokenKinds.Keyword, wantHtml);804 payloadHtml += 'var';
750 }805 }
751 return payloadHtml;806 return payloadHtml;
752 case typeKinds.Frame:
753 var fnObj = zigAnalysis.fns[typeObj.fn];
754 return '@Frame(' + getValueText(fnObj.type, typeObj.fn, wantHtml, wantSubLink) + ')';
755 case typeKinds.AnyFrame:
756 var name = token('anyframe', tokenKinds.Keyword, wantHtml);
757 if (typeObj.result) {
758 name += "->";
759 name += typeIndexName(typeObj.result, wantHtml, wantSubLink, null, null, thisTypes);
760 }
761 return name;
762 default:807 default:
763 if (wantHtml) {808 if (wantHtml) {
764 return escapeHtml(typeObj.name);809 return escapeHtml(typeObj.name);
...@@ -801,10 +846,10 @@...@@ -801,10 +846,10 @@
801 return operatorCompare(a.err.name.toLowerCase(), b.err.name.toLowerCase());846 return operatorCompare(a.err.name.toLowerCase(), b.err.name.toLowerCase());
802 });847 });
803848
804 var domListFnErrorsFragment = createDomListFragment(errorList.length, "<dt></dt><dd></dd>");849 resizeDomListDl(domListFnErrors, errorList.length);
805 for (var i = 0; i < errorList.length; i += 1) {850 for (var i = 0; i < errorList.length; i += 1) {
806 var nameTdDom = domListFnErrorsFragment.children[i * 2 + 0];851 var nameTdDom = domListFnErrors.children[i * 2 + 0];
807 var descTdDom = domListFnErrorsFragment.children[i * 2 + 1];852 var descTdDom = domListFnErrors.children[i * 2 + 1];
808 nameTdDom.textContent = errorList[i].err.name;853 nameTdDom.textContent = errorList[i].err.name;
809 var docs = errorList[i].docs;854 var docs = errorList[i].docs;
810 if (docs != null) {855 if (docs != null) {
...@@ -813,8 +858,6 @@...@@ -813,8 +858,6 @@
813 descTdDom.textContent = "";858 descTdDom.textContent = "";
814 }859 }
815 }860 }
816 domListFnErrors.innerHTML = "";
817 domListFnErrors.appendChild(domListFnErrorsFragment);
818 domTableFnErrors.classList.remove("hidden");861 domTableFnErrors.classList.remove("hidden");
819 }862 }
820 domSectFnErrors.classList.remove("hidden");863 domSectFnErrors.classList.remove("hidden");
...@@ -941,7 +984,7 @@...@@ -941,7 +984,7 @@
941 domFnProto.classList.remove("hidden");984 domFnProto.classList.remove("hidden");
942 }985 }
943986
944 function renderContainer(container, thisTypes) {987 function renderContainer(container) {
945 var typesList = [];988 var typesList = [];
946 var namespacesList = [];989 var namespacesList = [];
947 var errSetsList = [];990 var errSetsList = [];
...@@ -994,56 +1037,50 @@...@@ -994,56 +1037,50 @@
994 }1037 }
9951038
996 if (typesList.length !== 0) {1039 if (typesList.length !== 0) {
997 var domListTypesFragment = createDomListFragment(typesList.length, '<li><a href="#"></a></li>');1040 resizeDomList(domListTypes, typesList.length, '<li><a href="#"></a></li>');
998 for (var i = 0; i < typesList.length; i += 1) {1041 for (var i = 0; i < typesList.length; i += 1) {
999 var liDom = domListTypesFragment.children[i];1042 var liDom = domListTypes.children[i];
1000 var aDom = liDom.children[0];1043 var aDom = liDom.children[0];
1001 var decl = typesList[i];1044 var decl = typesList[i];
1002 aDom.textContent = decl.name;1045 aDom.textContent = decl.name;
1003 aDom.setAttribute('href', navLinkDecl(decl.name));1046 aDom.setAttribute('href', navLinkDecl(decl.name));
1004 }1047 }
1005 domListTypes.innerHTML = "";
1006 domListTypes.appendChild(domListTypesFragment);
1007 domSectTypes.classList.remove("hidden");1048 domSectTypes.classList.remove("hidden");
1008 }1049 }
1009 if (namespacesList.length !== 0) {1050 if (namespacesList.length !== 0) {
1010 var domListNamespacesFragment = createDomListFragment(namespacesList.length, '<li><a href="#"></a></li>');1051 resizeDomList(domListNamespaces, namespacesList.length, '<li><a href="#"></a></li>');
1011 for (var i = 0; i < namespacesList.length; i += 1) {1052 for (var i = 0; i < namespacesList.length; i += 1) {
1012 var liDom = domListNamespacesFragment.children[i];1053 var liDom = domListNamespaces.children[i];
1013 var aDom = liDom.children[0];1054 var aDom = liDom.children[0];
1014 var decl = namespacesList[i];1055 var decl = namespacesList[i];
1015 aDom.textContent = decl.name;1056 aDom.textContent = decl.name;
1016 aDom.setAttribute('href', navLinkDecl(decl.name));1057 aDom.setAttribute('href', navLinkDecl(decl.name));
1017 }1058 }
1018 domListNamespaces.innerHTML = "";
1019 domListNamespaces.appendChild(domListNamespacesFragment);
1020 domSectNamespaces.classList.remove("hidden");1059 domSectNamespaces.classList.remove("hidden");
1021 }1060 }
10221061
1023 if (errSetsList.length !== 0) {1062 if (errSetsList.length !== 0) {
1024 var domListErrSetsFragment = createDomListFragment(errSetsList.length, '<li><a href="#"></a></li>');1063 resizeDomList(domListErrSets, errSetsList.length, '<li><a href="#"></a></li>');
1025 for (var i = 0; i < errSetsList.length; i += 1) {1064 for (var i = 0; i < errSetsList.length; i += 1) {
1026 var liDom = domListErrSetsFragment.children[i];1065 var liDom = domListErrSets.children[i];
1027 var aDom = liDom.children[0];1066 var aDom = liDom.children[0];
1028 var decl = errSetsList[i];1067 var decl = errSetsList[i];
1029 aDom.textContent = decl.name;1068 aDom.textContent = decl.name;
1030 aDom.setAttribute('href', navLinkDecl(decl.name));1069 aDom.setAttribute('href', navLinkDecl(decl.name));
1031 }1070 }
1032 domListErrSets.innerHTML = "";
1033 domListErrSets.appendChild(domListErrSetsFragment);
1034 domSectErrSets.classList.remove("hidden");1071 domSectErrSets.classList.remove("hidden");
1035 }1072 }
10361073
1037 if (fnsList.length !== 0) {1074 if (fnsList.length !== 0) {
1038 var domListFnsFragment = createDomListFragment(fnsList.length, '<tr><td></td><td></td></tr>');1075 resizeDomList(domListFns, fnsList.length, '<tr><td></td><td></td></tr>');
1039 for (var i = 0; i < fnsList.length; i += 1) {1076 for (var i = 0; i < fnsList.length; i += 1) {
1040 var decl = fnsList[i];1077 var decl = fnsList[i];
1041 var trDom = domListFnsFragment.children[i];1078 var trDom = domListFns.children[i];
10421079
1043 var tdFnCode = trDom.children[0];1080 var tdFnCode = trDom.children[0];
1044 var tdDesc = trDom.children[1];1081 var tdDesc = trDom.children[1];
10451082
1046 tdFnCode.innerHTML = typeIndexName(decl.type, true, true, decl, navLinkDecl(decl.name), thisTypes);1083 tdFnCode.innerHTML = typeIndexName(decl.type, true, true, decl, navLinkDecl(decl.name));
10471084
1048 var docs = zigAnalysis.astNodes[decl.src].docs;1085 var docs = zigAnalysis.astNodes[decl.src].docs;
1049 if (docs != null) {1086 if (docs != null) {
...@@ -1052,19 +1089,17 @@...@@ -1052,19 +1089,17 @@
1052 tdDesc.textContent = "";1089 tdDesc.textContent = "";
1053 }1090 }
1054 }1091 }
1055 domListFns.innerHTML = "";
1056 domListFns.appendChild(domListFnsFragment);
1057 domSectFns.classList.remove("hidden");1092 domSectFns.classList.remove("hidden");
1058 }1093 }
10591094
1060 if (container.fields != null && container.fields.length !== 0) {1095 if (container.fields != null && container.fields.length !== 0) {
1061 var domListFieldsFragment = createDomListFragment(container.fields.length, '<div></div>');1096 resizeDomList(domListFields, container.fields.length, '<div></div>');
10621097
1063 var containerNode = zigAnalysis.astNodes[container.src];1098 var containerNode = zigAnalysis.astNodes[container.src];
1064 for (var i = 0; i < container.fields.length; i += 1) {1099 for (var i = 0; i < container.fields.length; i += 1) {
1065 var field = container.fields[i];1100 var field = container.fields[i];
1066 var fieldNode = zigAnalysis.astNodes[containerNode.fields[i]];1101 var fieldNode = zigAnalysis.astNodes[containerNode.fields[i]];
1067 var divDom = domListFieldsFragment.children[i];1102 var divDom = domListFields.children[i];
10681103
1069 var html = '<div class="mobile-scroll-container"><pre class="scroll-item">' + escapeHtml(fieldNode.name);1104 var html = '<div class="mobile-scroll-container"><pre class="scroll-item">' + escapeHtml(fieldNode.name);
10701105
...@@ -1073,7 +1108,16 @@...@@ -1073,7 +1108,16 @@
1073 } else {1108 } else {
1074 html += ": ";1109 html += ": ";
1075 if (typeof(field) === 'object') {1110 if (typeof(field) === 'object') {
1076 html += '<span class="tok-kw">var</span>';1111 if (field.failure === true) {
1112 html += '<span class="tok-kw" style="color:red;">#FAILURE#</span>';
1113 } else if ("decl_ref" in field) {
1114 var name = zigAnalysis.decls[field.decl_ref].name;
1115 html += '<a href="'+navLinkDecl(name)+'">';
1116 html += '<span class="tok-kw" style="color:lightblue;">'+ name +'</span>';
1117 html += '</a>';
1118 } else {
1119 html += '<span class="tok-kw">var</span>';
1120 }
1077 } else {1121 } else {
1078 html += typeIndexName(field, true, true);1122 html += typeIndexName(field, true, true);
1079 }1123 }
...@@ -1087,17 +1131,15 @@...@@ -1087,17 +1131,15 @@
1087 }1131 }
1088 divDom.innerHTML = html;1132 divDom.innerHTML = html;
1089 }1133 }
1090 domListFields.innerHTML = "";
1091 domListFields.appendChild(domListFieldsFragment);
1092 domSectFields.classList.remove("hidden");1134 domSectFields.classList.remove("hidden");
1093 }1135 }
10941136
1095 if (varsList.length !== 0) {1137 if (varsList.length !== 0) {
1096 var domListGlobalVarsFragment = createDomListFragment(varsList.length,1138 resizeDomList(domListGlobalVars, varsList.length,
1097 '<tr><td><a href="#"></a></td><td></td><td></td></tr>');1139 '<tr><td><a href="#"></a></td><td></td><td></td></tr>');
1098 for (var i = 0; i < varsList.length; i += 1) {1140 for (var i = 0; i < varsList.length; i += 1) {
1099 var decl = varsList[i];1141 var decl = varsList[i];
1100 var trDom = domListGlobalVarsFragment.children[i];1142 var trDom = domListGlobalVars.children[i];
11011143
1102 var tdName = trDom.children[0];1144 var tdName = trDom.children[0];
1103 var tdNameA = tdName.children[0];1145 var tdNameA = tdName.children[0];
...@@ -1116,17 +1158,15 @@...@@ -1116,17 +1158,15 @@
1116 tdDesc.textContent = "";1158 tdDesc.textContent = "";
1117 }1159 }
1118 }1160 }
1119 domListGlobalVars.innerHTML = "";
1120 domListGlobalVars.appendChild(domListGlobalVarsFragment);
1121 domSectGlobalVars.classList.remove("hidden");1161 domSectGlobalVars.classList.remove("hidden");
1122 }1162 }
11231163
1124 if (valsList.length !== 0) {1164 if (valsList.length !== 0) {
1125 var domListValuesFragment = createDomListFragment(valsList.length,1165 resizeDomList(domListValues, valsList.length,
1126 '<tr><td><a href="#"></a></td><td></td><td></td></tr>');1166 '<tr><td><a href="#"></a></td><td></td><td></td></tr>');
1127 for (var i = 0; i < valsList.length; i += 1) {1167 for (var i = 0; i < valsList.length; i += 1) {
1128 var decl = valsList[i];1168 var decl = valsList[i];
1129 var trDom = domListValuesFragment.children[i];1169 var trDom = domListValues.children[i];
11301170
1131 var tdName = trDom.children[0];1171 var tdName = trDom.children[0];
1132 var tdNameA = tdName.children[0];1172 var tdNameA = tdName.children[0];
...@@ -1145,8 +1185,6 @@...@@ -1145,8 +1185,6 @@
1145 tdDesc.textContent = "";1185 tdDesc.textContent = "";
1146 }1186 }
1147 }1187 }
1148 domListValues.innerHTML = "";
1149 domListValues.appendChild(domListValuesFragment);
1150 domSectValues.classList.remove("hidden");1188 domSectValues.classList.remove("hidden");
1151 }1189 }
1152 }1190 }
...@@ -1484,22 +1522,6 @@...@@ -1484,22 +1522,6 @@
1484 }1522 }
1485 ];1523 ];
14861524
1487 // Links, images and inner links don't use the same marker to wrap their content.
1488 const linksFormat = [
1489 {
1490 prefix: "[",
1491 regex: /\[([^\]]*)\]\(([^\)]*)\)/,
1492 urlIndex: 2, // Index in the match that contains the link URL
1493 textIndex: 1 // Index in the match that contains the link text
1494 },
1495 {
1496 prefix: "h",
1497 regex: /http[s]?:\/\/[^\s]+/,
1498 urlIndex: 0,
1499 textIndex: 0
1500 }
1501 ];
1502
1503 const stack = [];1525 const stack = [];
15041526
1505 var innerHTML = "";1527 var innerHTML = "";
...@@ -1550,29 +1572,6 @@...@@ -1550,29 +1572,6 @@
1550 currentRun += innerText[i];1572 currentRun += innerText[i];
1551 in_code = true;1573 in_code = true;
1552 } else {1574 } else {
1553 var foundMatches = false;
1554
1555 for (var j = 0; j < linksFormat.length; j++) {
1556 const linkFmt = linksFormat[j];
1557
1558 if (linkFmt.prefix == innerText[i]) {
1559 var remaining = innerText.substring(i);
1560 var matches = remaining.match(linkFmt.regex);
1561
1562 if (matches) {
1563 flushRun();
1564 innerHTML += ' <a href="' + matches[linkFmt.urlIndex] + '">' + matches[linkFmt.textIndex] + '</a> ';
1565 i += matches[0].length; // Skip the fragment we just consumed
1566 foundMatches = true;
1567 break;
1568 }
1569 }
1570 }
1571
1572 if (foundMatches) {
1573 continue;
1574 }
1575
1576 var any = false;1575 var any = false;
1577 for (var idx = (stack.length > 0 ? -1 : 0); idx < formats.length; idx++) {1576 for (var idx = (stack.length > 0 ? -1 : 0); idx < formats.length; idx++) {
1578 const fmt = idx >= 0 ? formats[idx] : stack[stack.length - 1];1577 const fmt = idx >= 0 ? formats[idx] : stack[stack.length - 1];
...@@ -1793,7 +1792,7 @@...@@ -1793,7 +1792,7 @@
1793 if (ev.ctrlKey) name = "Ctrl+" + name;1792 if (ev.ctrlKey) name = "Ctrl+" + name;
1794 return name;1793 return name;
1795 }1794 }
17961795
1797 function onWindowKeyDown(ev) {1796 function onWindowKeyDown(ev) {
1798 switch (getKeyString(ev)) {1797 switch (getKeyString(ev)) {
1799 case "Esc":1798 case "Esc":
...@@ -1825,13 +1824,6 @@...@@ -1825,13 +1824,6 @@
1825 domHelpModal.focus();1824 domHelpModal.focus();
1826 }1825 }
18271826
1828 function onClickSearchShowAllResults(ev) {
1829 ev.preventDefault();
1830 ev.stopPropagation();
1831 searchTrimResults = false;
1832 onHashChange();
1833 }
1834
1835 function clearAsyncSearch() {1827 function clearAsyncSearch() {
1836 if (searchTimer != null) {1828 if (searchTimer != null) {
1837 clearTimeout(searchTimer);1829 clearTimeout(searchTimer);
...@@ -1841,21 +1833,14 @@...@@ -1841,21 +1833,14 @@
18411833
1842 function startAsyncSearch() {1834 function startAsyncSearch() {
1843 clearAsyncSearch();1835 clearAsyncSearch();
1844 searchTrimResults = true;1836 searchTimer = setTimeout(startSearch, 100);
1845 searchTimer = setTimeout(startSearch, 10);
1846 }1837 }
1847 function startSearch() {1838 function startSearch() {
1848 clearAsyncSearch();1839 clearAsyncSearch();
1849 var oldHash = location.hash;1840 var oldHash = location.hash;
1850 var parts = oldHash.split("?");1841 var parts = oldHash.split("?");
1851 var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value);1842 var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value);
1852 var newHash = (oldHash === "" ? "#" : parts[0]) + newPart2;1843 location.hash = (parts.length === 1) ? (oldHash + newPart2) : (parts[0] + newPart2);
1853 // create a history entry only once per search
1854 if (parts.length === 1) {
1855 location.assign(newHash);
1856 } else {
1857 location.replace(newHash);
1858 }
1859 }1844 }
1860 function getSearchTerms() {1845 function getSearchTerms() {
1861 var list = curNavSearch.trim().split(/[ \r\n\t]+/);1846 var list = curNavSearch.trim().split(/[ \r\n\t]+/);
...@@ -1920,38 +1905,25 @@...@@ -1920,38 +1905,25 @@
1920 }1905 }
19211906
1922 if (matchedItems.length !== 0) {1907 if (matchedItems.length !== 0) {
1908 resizeDomList(domListSearchResults, matchedItems.length, '<li><a href="#"></a></li>');
1909
1923 matchedItems.sort(function(a, b) {1910 matchedItems.sort(function(a, b) {
1924 var cmp = operatorCompare(b.points, a.points);1911 var cmp = operatorCompare(b.points, a.points);
1925 if (cmp != 0) return cmp;1912 if (cmp != 0) return cmp;
1926 return operatorCompare(a.decl.name, b.decl.name);1913 return operatorCompare(a.decl.name, b.decl.name);
1927 });1914 });
19281915
1929 var searchTrimmed = false
1930 var searchTrimResultsMaxItems = 200
1931 if (searchTrimResults && matchedItems.length > searchTrimResultsMaxItems) {
1932 matchedItems = matchedItems.slice(0, searchTrimResultsMaxItems)
1933 searchTrimmed = true
1934 }
1935
1936 var domListSearchResultsFragment = createDomListFragment(matchedItems.length, '<li><a href="#"></a></li>');
1937 for (var i = 0; i < matchedItems.length; i += 1) {1916 for (var i = 0; i < matchedItems.length; i += 1) {
1938 var liDom = domListSearchResultsFragment.children[i];1917 var liDom = domListSearchResults.children[i];
1939 var aDom = liDom.children[0];1918 var aDom = liDom.children[0];
1940 var match = matchedItems[i];1919 var match = matchedItems[i];
1941 var lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1];1920 var lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1];
1942 aDom.textContent = lastPkgName + "." + match.path.declNames.join('.');1921 aDom.textContent = lastPkgName + "." + match.path.declNames.join('.');
1943 aDom.setAttribute('href', navLink(match.path.pkgNames, match.path.declNames));1922 aDom.setAttribute('href', navLink(match.path.pkgNames, match.path.declNames));
1944 }1923 }
1924 renderSearchCursor();
19451925
1946 domListSearchResults.innerHTML = "";
1947 domListSearchResults.appendChild(domListSearchResultsFragment);
1948 domSectSearchResults.classList.remove("hidden");1926 domSectSearchResults.classList.remove("hidden");
1949
1950 if (searchTrimmed) {
1951 domSectSearchAllResultsLink.classList.remove("hidden");
1952 }
1953
1954 renderSearchCursor();
1955 } else {1927 } else {
1956 domSectSearchNoResults.classList.remove("hidden");1928 domSectSearchNoResults.classList.remove("hidden");
1957 }1929 }
...@@ -2013,12 +1985,4 @@...@@ -2013,12 +1985,4 @@
2013 return key;1985 return key;
2014 }1986 }
2015 }1987 }
2016
2017 function token(value, tokenClass, wantHtml){
2018 if(wantHtml){
2019 return '<span class="' + tokenClass + '">' + value + '</span>';
2020 } else {
2021 return value + '';
2022 }
2023 }
2024})();1988})();