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 @@
4343
4444 /* layout */
4545 .canvas {
46 display: flex;
47 flex-direction: column;
4846 width: 100vw;
4947 height: 100vh;
5048 overflow: hidden;
......@@ -55,21 +53,12 @@
5553 background-color: var(--bg-color);
5654 }
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
7056 .flex-main {
7157 display: flex;
72 overflow-y: hidden;
58 width: 100%;
59 height: 100%;
60 justify-content: center;
61
7362 z-index: 100;
7463 }
7564
......@@ -526,7 +515,6 @@
526515 </style>
527516 </head>
528517 <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>
530518 <div class="flex-main">
531519 <div class="flex-filler"></div>
532520 <div class="flex-left sidebar">
......@@ -541,8 +529,14 @@
541529 </g>
542530 </svg>
543531 </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>
544538 <div id="sectPkgs" class="hidden">
545 <h2><span>Packages</span></h2>
539 <h2><span>Dependencies</span></h2>
546540 <ul id="listPkgs" class="packages"></ul>
547541 </div>
548542 <div id="sectInfo" class="hidden">
......@@ -588,7 +582,6 @@
588582 <div id="sectSearchResults" class="hidden">
589583 <h2>Search Results</h2>
590584 <ul id="listSearchResults"></ul>
591 <p id="sectSearchAllResultsLink" class="hidden"><a href="">show all results</a></p>
592585 </div>
593586 <div id="sectSearchNoResults" class="hidden">
594587 <h2>No Results Found</h2>
lib/docs/main.js+202-238
......@@ -2,6 +2,7 @@
22 var domStatus = document.getElementById("status");
33 var domSectNav = document.getElementById("sectNav");
44 var domListNav = document.getElementById("listNav");
5 var domSectMainPkg = document.getElementById("sectMainPkg");
56 var domSectPkgs = document.getElementById("sectPkgs");
67 var domListPkgs = document.getElementById("listPkgs");
78 var domSectTypes = document.getElementById("sectTypes");
......@@ -35,7 +36,6 @@
3536 var domSectSearchResults = document.getElementById("sectSearchResults");
3637 var domListSearchResults = document.getElementById("listSearchResults");
3738 var domSectSearchNoResults = document.getElementById("sectSearchNoResults");
38 var domSectSearchAllResultsLink = document.getElementById("sectSearchAllResultsLink");
3939 var domSectInfo = document.getElementById("sectInfo");
4040 var domTdTarget = document.getElementById("tdTarget");
4141 var domTdZigVer = document.getElementById("tdZigVer");
......@@ -43,22 +43,11 @@
4343 var domHelpModal = document.getElementById("helpDialog");
4444
4545 var searchTimer = null;
46 var searchTrimResults = true;
4746 var escapeHtmlReplacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" };
4847
4948 var typeKinds = indexTypeKinds();
5049 var typeTypeId = findTypeTypeId();
5150 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
6352 // for each package, is an array with packages to get to this one
6453 var canonPkgPaths = computeCanonicalPackagePaths();
......@@ -94,8 +83,6 @@
9483 var nodesToCallsMap = indexNodesToCalls();
9584
9685 domSearch.addEventListener('keydown', onSearchKeyDown, false);
97 domSectSearchAllResultsLink.addEventListener('click', onClickSearchShowAllResults, false);
98
9986 window.addEventListener('hashchange', onHashChange, false);
10087 window.addEventListener('keydown', onWindowKeyDown, false);
10188 onHashChange();
......@@ -119,6 +106,7 @@
119106 domFnProto.classList.add("hidden");
120107 domSectParams.classList.add("hidden");
121108 domTldDocs.classList.add("hidden");
109 domSectMainPkg.classList.add("hidden");
122110 domSectPkgs.classList.add("hidden");
123111 domSectTypes.classList.add("hidden");
124112 domSectNamespaces.classList.add("hidden");
......@@ -127,7 +115,6 @@
127115 domSectFields.classList.add("hidden");
128116 domSectSearchResults.classList.add("hidden");
129117 domSectSearchNoResults.classList.add("hidden");
130 domSectSearchAllResultsLink.classList.add("hidden");
131118 domSectInfo.classList.add("hidden");
132119 domHdrName.classList.add("hidden");
133120 domSectNav.classList.add("hidden");
......@@ -269,19 +256,15 @@
269256 domFnNoExamples.classList.remove("hidden");
270257 } else if (calls != null) {
271258 if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls);
272 if (fnObj.combined != null) {
273 renderContainer(fnObj.combined, calls.map(function (call) { return zigAnalysis.calls[call].result.value }));
274 }
259 if (fnObj.combined != null) renderContainer(fnObj.combined);
275260
276 var domListFnExamplesFragment = createDomListFragment(calls.length, '<li></li>');
261 resizeDomList(domListFnExamples, calls.length, '<li></li>');
277262
278263 for (var callI = 0; callI < calls.length; callI += 1) {
279 var liDom = domListFnExamplesFragment.children[callI];
264 var liDom = domListFnExamples.children[callI];
280265 liDom.innerHTML = getCallHtml(fnDecl, calls[callI]);
281266 }
282267
283 domListFnExamples.innerHTML = "";
284 domListFnExamples.appendChild(domListFnExamplesFragment);
285268 domFnExamples.classList.remove("hidden");
286269 } else if (instantiations != null) {
287270 // TODO
......@@ -322,7 +305,7 @@
322305 return;
323306 }
324307
325 var domListParamsFragment = createDomListFragment(docCount, '<div></div>');
308 resizeDomList(domListParams, docCount, '<div></div>');
326309 var domIndex = 0;
327310
328311 for (var i = 0; i < fields.length; i += 1) {
......@@ -331,7 +314,7 @@
331314 if (fieldNode.docs == null) {
332315 continue;
333316 }
334 var divDom = domListParamsFragment.children[domIndex];
317 var divDom = domListParams.children[domIndex];
335318 domIndex += 1;
336319 var argTypeIndex = typeObj.args[i];
337320
......@@ -352,15 +335,12 @@
352335 }
353336 divDom.innerHTML = html;
354337 }
355
356 domListParams.innerHTML = "";
357 domListParams.appendChild(domListParamsFragment);
358338 domSectParams.classList.remove("hidden");
359339 }
360340
361341 function renderNav() {
362342 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>');
364344 var list = [];
365345 var hrefPkgNames = [];
366346 var hrefDeclNames = [];
......@@ -380,7 +360,7 @@
380360 }
381361
382362 for (var i = 0; i < list.length; i += 1) {
383 var liDom = domListNavFragment.children[i];
363 var liDom = domListNav.children[i];
384364 var aDom = liDom.children[0];
385365 aDom.textContent = list[i].name;
386366 aDom.setAttribute('href', list[i].link);
......@@ -391,8 +371,6 @@
391371 }
392372 }
393373
394 domListNav.innerHTML = "";
395 domListNav.appendChild(domListNavFragment);
396374 domSectNav.classList.remove("hidden");
397375 }
398376
......@@ -412,7 +390,6 @@
412390 var rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];
413391 var list = [];
414392 for (var key in rootPkg.table) {
415 if (key === "root" && rootIsStd) continue;
416393 var pkgIndex = rootPkg.table[key];
417394 if (zigAnalysis.packages[pkgIndex] == null) continue;
418395 list.push({
......@@ -420,14 +397,27 @@
420397 pkg: pkgIndex,
421398 });
422399 }
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
423413 list.sort(function(a, b) {
424414 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
425415 });
426416
427417 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>');
429419 for (var i = 0; i < list.length; i += 1) {
430 var liDom = domListPkgsFragment.children[i];
420 var liDom = domListPkgs.children[i];
431421 var aDom = liDom.children[0];
432422 aDom.textContent = list[i].name;
433423 aDom.setAttribute('href', navLinkPkg(list[i].pkg));
......@@ -438,8 +428,6 @@
438428 }
439429 }
440430
441 domListPkgs.innerHTML = "";
442 domListPkgs.appendChild(domListPkgsFragment);
443431 domSectPkgs.classList.remove("hidden");
444432 }
445433 }
......@@ -480,34 +468,50 @@
480468 return navLink(curNav.pkgNames, declNamesCopy);
481469 }
482470
483 function createDomListFragment(desiredLen, templateHtml) {
484 var domTemplate = document.createElement("template");
485 domTemplate.innerHTML = templateHtml.repeat(desiredLen);
486 return domTemplate.content;
471 function resizeDomListDl(dlDom, desiredLen) {
472 // add the missing dom entries
473 var i, ev;
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 }
487482 }
488483
489 function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl, thisTypes) {
490 if(thisTypes && thisTypes.includes(typeIndex)){
491 return token('@This', tokenKinds.Builtin, wantHtml) + '()';
484 function resizeDomList(listDom, desiredLen, templateHtml) {
485 // add the missing dom entries
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);
492493 }
494 }
495
496 function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl) {
493497 var typeObj = zigAnalysis.types[typeIndex];
494498 var declNameOk = declCanRepresentTypeKind(typeObj.kind);
495499 if (wantLink) {
496500 var declIndex = getCanonTypeDecl(typeIndex);
497501 var declPath = getCanonDeclPath(declIndex);
498502 if (declPath == null) {
499 return typeName(typeObj, wantHtml, wantLink, fnDecl, linkFnNameDecl, thisTypes);
503 return typeName(typeObj, wantHtml, wantLink, fnDecl, linkFnNameDecl);
500504 }
501505 var name = (wantLink && declCanRepresentTypeKind(typeObj.kind)) ?
502506 declPath.declNames[declPath.declNames.length - 1] :
503 typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl, thisTypes);
507 typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl);
504508 if (wantLink && wantHtml) {
505509 return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + name + '</a>';
506510 } else {
507511 return name;
508512 }
509513 } else {
510 return typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl, thisTypes);
514 return typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl);
511515 }
512516 }
513517
......@@ -545,57 +549,32 @@
545549 return typeIndexName(value, wantHtml, wantLink);
546550 case typeKinds.Fn:
547551 var fnObj = zigAnalysis.fns[value];
548 var declPath = fnObj.decl && getCanonDeclPath(fnObj.decl);
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;
552 return typeIndexName(fnObj.type, wantHtml, wantLink);
565553 case typeKinds.Int:
566 return token(value, tokenKinds.Number, wantHtml);
567 case typeKinds.Optional:
568 if(value === 'null'){
569 return token(value, tokenKinds.Null, wantHtml);
554 if (wantHtml) {
555 return '<span class="tok-number">' + value + '</span>';
570556 } else {
571 console.trace("TODO non-null optional value printing");
572 return "TODO";
557 return value + "";
573558 }
574 case typeKinds.Bool:
575 return token(value, tokenKinds.Null, wantHtml);
576559 default:
577560 console.trace("TODO implement getValueText for this type:", zigAnalysis.typeKinds[typeObj.kind]);
578 return "TODO";
579561 }
580562 }
581563
582 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl, thisTypes) {
564 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl) {
583565 switch (typeObj.kind) {
584566 case typeKinds.Array:
585567 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 }
587573 name += "]";
588 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null, null, thisTypes);
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 += ")";
574 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
596575 return name;
597576 case typeKinds.Optional:
598 return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl, thisTypes);
577 return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
599578 case typeKinds.Pointer:
600579 var name = "";
601580 switch (typeObj.len) {
......@@ -614,48 +593,112 @@
614593 break;
615594 }
616595 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 }
618601 }
619602 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 }
621608 }
622609 if (typeObj.align != null) {
623 name += token('align', tokenKinds.Keyword, wantHtml) + '(';
624 name += token(typeObj.align, tokenKinds.Number, wantHtml);
625
610 if (wantHtml) {
611 name += '<span class="tok-kw">align</span>(';
612 } else {
613 name += "align(";
614 }
615 if (wantHtml) {
616 name += '<span class="tok-number">' + typeObj.align + '</span>';
617 } else {
618 name += typeObj.align;
619 }
626620 if (typeObj.hostIntBytes != null) {
627621 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 }
629627 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 }
631633 }
632634 name += ") ";
633635 }
634 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null, null, thisTypes);
636 name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
635637 return name;
636638 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 }
638644 case typeKinds.Int:
639 var signed = (typeObj.i != null) ? 'i' : 'u';
640 var bits = typeObj[signed];
641 return token(signed + bits, tokenKinds.Type, wantHtml);
645 return '<span class="tok-type">' + typeObj.name + '</span>';
646 // var signed = (typeObj.i != null) ? 'i' : 'u';
647 // var bits = typeObj[signed];
648 // if (wantHtml) {
649 // return '<span class="tok-type">' + signed + bits + '</span>';
650 // } else {
651 // return signed + bits;
652 // }
642653 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 }
644659 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 }
646665 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 }
648671 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 }
650677 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 }
652683 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 }
654689 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 }
656695 case typeKinds.ErrorSet:
657696 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 }
659702 } else {
660703 if (wantHtml) {
661704 return escapeHtml(typeObj.name);
......@@ -665,12 +708,12 @@
665708 }
666709 case typeKinds.ErrorUnion:
667710 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);
669712 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {
670713 // function index parameter supplied and this is the inferred error set of it
671714 return "!" + payloadHtml;
672715 } else {
673 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null, null, thisTypes) + "!" + payloadHtml;
716 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;
674717 }
675718 case typeKinds.Fn:
676719 var payloadHtml = "";
......@@ -716,11 +759,19 @@
716759 }
717760
718761 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 }
720767 }
721768
722769 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 }
724775 }
725776
726777 var paramName = paramNode.name;
......@@ -735,30 +786,24 @@
735786 if (isVarArgs && i === typeObj.args.length - 1) {
736787 payloadHtml += '...';
737788 } 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>';
739792 } else {
740 payloadHtml += token('anytype', tokenKinds.Keyword, wantHtml);
793 payloadHtml += 'var';
741794 }
742795 }
743796 }
744797
745798 payloadHtml += ') ';
746799 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>';
748803 } else {
749 payloadHtml += token('anytype', tokenKinds.Keyword, wantHtml);
804 payloadHtml += 'var';
750805 }
751806 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;
762807 default:
763808 if (wantHtml) {
764809 return escapeHtml(typeObj.name);
......@@ -801,10 +846,10 @@
801846 return operatorCompare(a.err.name.toLowerCase(), b.err.name.toLowerCase());
802847 });
803848
804 var domListFnErrorsFragment = createDomListFragment(errorList.length, "<dt></dt><dd></dd>");
849 resizeDomListDl(domListFnErrors, errorList.length);
805850 for (var i = 0; i < errorList.length; i += 1) {
806 var nameTdDom = domListFnErrorsFragment.children[i * 2 + 0];
807 var descTdDom = domListFnErrorsFragment.children[i * 2 + 1];
851 var nameTdDom = domListFnErrors.children[i * 2 + 0];
852 var descTdDom = domListFnErrors.children[i * 2 + 1];
808853 nameTdDom.textContent = errorList[i].err.name;
809854 var docs = errorList[i].docs;
810855 if (docs != null) {
......@@ -813,8 +858,6 @@
813858 descTdDom.textContent = "";
814859 }
815860 }
816 domListFnErrors.innerHTML = "";
817 domListFnErrors.appendChild(domListFnErrorsFragment);
818861 domTableFnErrors.classList.remove("hidden");
819862 }
820863 domSectFnErrors.classList.remove("hidden");
......@@ -941,7 +984,7 @@
941984 domFnProto.classList.remove("hidden");
942985 }
943986
944 function renderContainer(container, thisTypes) {
987 function renderContainer(container) {
945988 var typesList = [];
946989 var namespacesList = [];
947990 var errSetsList = [];
......@@ -994,56 +1037,50 @@
9941037 }
9951038
9961039 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>');
9981041 for (var i = 0; i < typesList.length; i += 1) {
999 var liDom = domListTypesFragment.children[i];
1042 var liDom = domListTypes.children[i];
10001043 var aDom = liDom.children[0];
10011044 var decl = typesList[i];
10021045 aDom.textContent = decl.name;
10031046 aDom.setAttribute('href', navLinkDecl(decl.name));
10041047 }
1005 domListTypes.innerHTML = "";
1006 domListTypes.appendChild(domListTypesFragment);
10071048 domSectTypes.classList.remove("hidden");
10081049 }
10091050 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>');
10111052 for (var i = 0; i < namespacesList.length; i += 1) {
1012 var liDom = domListNamespacesFragment.children[i];
1053 var liDom = domListNamespaces.children[i];
10131054 var aDom = liDom.children[0];
10141055 var decl = namespacesList[i];
10151056 aDom.textContent = decl.name;
10161057 aDom.setAttribute('href', navLinkDecl(decl.name));
10171058 }
1018 domListNamespaces.innerHTML = "";
1019 domListNamespaces.appendChild(domListNamespacesFragment);
10201059 domSectNamespaces.classList.remove("hidden");
10211060 }
10221061
10231062 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>');
10251064 for (var i = 0; i < errSetsList.length; i += 1) {
1026 var liDom = domListErrSetsFragment.children[i];
1065 var liDom = domListErrSets.children[i];
10271066 var aDom = liDom.children[0];
10281067 var decl = errSetsList[i];
10291068 aDom.textContent = decl.name;
10301069 aDom.setAttribute('href', navLinkDecl(decl.name));
10311070 }
1032 domListErrSets.innerHTML = "";
1033 domListErrSets.appendChild(domListErrSetsFragment);
10341071 domSectErrSets.classList.remove("hidden");
10351072 }
10361073
10371074 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>');
10391076 for (var i = 0; i < fnsList.length; i += 1) {
10401077 var decl = fnsList[i];
1041 var trDom = domListFnsFragment.children[i];
1078 var trDom = domListFns.children[i];
10421079
10431080 var tdFnCode = trDom.children[0];
10441081 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
10481085 var docs = zigAnalysis.astNodes[decl.src].docs;
10491086 if (docs != null) {
......@@ -1052,19 +1089,17 @@
10521089 tdDesc.textContent = "";
10531090 }
10541091 }
1055 domListFns.innerHTML = "";
1056 domListFns.appendChild(domListFnsFragment);
10571092 domSectFns.classList.remove("hidden");
10581093 }
10591094
10601095 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
10631098 var containerNode = zigAnalysis.astNodes[container.src];
10641099 for (var i = 0; i < container.fields.length; i += 1) {
10651100 var field = container.fields[i];
10661101 var fieldNode = zigAnalysis.astNodes[containerNode.fields[i]];
1067 var divDom = domListFieldsFragment.children[i];
1102 var divDom = domListFields.children[i];
10681103
10691104 var html = '<div class="mobile-scroll-container"><pre class="scroll-item">' + escapeHtml(fieldNode.name);
10701105
......@@ -1073,7 +1108,16 @@
10731108 } else {
10741109 html += ": ";
10751110 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 }
10771121 } else {
10781122 html += typeIndexName(field, true, true);
10791123 }
......@@ -1087,17 +1131,15 @@
10871131 }
10881132 divDom.innerHTML = html;
10891133 }
1090 domListFields.innerHTML = "";
1091 domListFields.appendChild(domListFieldsFragment);
10921134 domSectFields.classList.remove("hidden");
10931135 }
10941136
10951137 if (varsList.length !== 0) {
1096 var domListGlobalVarsFragment = createDomListFragment(varsList.length,
1138 resizeDomList(domListGlobalVars, varsList.length,
10971139 '<tr><td><a href="#"></a></td><td></td><td></td></tr>');
10981140 for (var i = 0; i < varsList.length; i += 1) {
10991141 var decl = varsList[i];
1100 var trDom = domListGlobalVarsFragment.children[i];
1142 var trDom = domListGlobalVars.children[i];
11011143
11021144 var tdName = trDom.children[0];
11031145 var tdNameA = tdName.children[0];
......@@ -1116,17 +1158,15 @@
11161158 tdDesc.textContent = "";
11171159 }
11181160 }
1119 domListGlobalVars.innerHTML = "";
1120 domListGlobalVars.appendChild(domListGlobalVarsFragment);
11211161 domSectGlobalVars.classList.remove("hidden");
11221162 }
11231163
11241164 if (valsList.length !== 0) {
1125 var domListValuesFragment = createDomListFragment(valsList.length,
1165 resizeDomList(domListValues, valsList.length,
11261166 '<tr><td><a href="#"></a></td><td></td><td></td></tr>');
11271167 for (var i = 0; i < valsList.length; i += 1) {
11281168 var decl = valsList[i];
1129 var trDom = domListValuesFragment.children[i];
1169 var trDom = domListValues.children[i];
11301170
11311171 var tdName = trDom.children[0];
11321172 var tdNameA = tdName.children[0];
......@@ -1145,8 +1185,6 @@
11451185 tdDesc.textContent = "";
11461186 }
11471187 }
1148 domListValues.innerHTML = "";
1149 domListValues.appendChild(domListValuesFragment);
11501188 domSectValues.classList.remove("hidden");
11511189 }
11521190 }
......@@ -1484,22 +1522,6 @@
14841522 }
14851523 ];
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
15031525 const stack = [];
15041526
15051527 var innerHTML = "";
......@@ -1550,29 +1572,6 @@
15501572 currentRun += innerText[i];
15511573 in_code = true;
15521574 } 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
15761575 var any = false;
15771576 for (var idx = (stack.length > 0 ? -1 : 0); idx < formats.length; idx++) {
15781577 const fmt = idx >= 0 ? formats[idx] : stack[stack.length - 1];
......@@ -1793,7 +1792,7 @@
17931792 if (ev.ctrlKey) name = "Ctrl+" + name;
17941793 return name;
17951794 }
1796
1795
17971796 function onWindowKeyDown(ev) {
17981797 switch (getKeyString(ev)) {
17991798 case "Esc":
......@@ -1825,13 +1824,6 @@
18251824 domHelpModal.focus();
18261825 }
18271826
1828 function onClickSearchShowAllResults(ev) {
1829 ev.preventDefault();
1830 ev.stopPropagation();
1831 searchTrimResults = false;
1832 onHashChange();
1833 }
1834
18351827 function clearAsyncSearch() {
18361828 if (searchTimer != null) {
18371829 clearTimeout(searchTimer);
......@@ -1841,21 +1833,14 @@
18411833
18421834 function startAsyncSearch() {
18431835 clearAsyncSearch();
1844 searchTrimResults = true;
1845 searchTimer = setTimeout(startSearch, 10);
1836 searchTimer = setTimeout(startSearch, 100);
18461837 }
18471838 function startSearch() {
18481839 clearAsyncSearch();
18491840 var oldHash = location.hash;
18501841 var parts = oldHash.split("?");
18511842 var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value);
1852 var newHash = (oldHash === "" ? "#" : 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 }
1843 location.hash = (parts.length === 1) ? (oldHash + newPart2) : (parts[0] + newPart2);
18591844 }
18601845 function getSearchTerms() {
18611846 var list = curNavSearch.trim().split(/[ \r\n\t]+/);
......@@ -1920,38 +1905,25 @@
19201905 }
19211906
19221907 if (matchedItems.length !== 0) {
1908 resizeDomList(domListSearchResults, matchedItems.length, '<li><a href="#"></a></li>');
1909
19231910 matchedItems.sort(function(a, b) {
19241911 var cmp = operatorCompare(b.points, a.points);
19251912 if (cmp != 0) return cmp;
19261913 return operatorCompare(a.decl.name, b.decl.name);
19271914 });
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>');
19371916 for (var i = 0; i < matchedItems.length; i += 1) {
1938 var liDom = domListSearchResultsFragment.children[i];
1917 var liDom = domListSearchResults.children[i];
19391918 var aDom = liDom.children[0];
19401919 var match = matchedItems[i];
19411920 var lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1];
19421921 aDom.textContent = lastPkgName + "." + match.path.declNames.join('.');
19431922 aDom.setAttribute('href', navLink(match.path.pkgNames, match.path.declNames));
19441923 }
1924 renderSearchCursor();
19451925
1946 domListSearchResults.innerHTML = "";
1947 domListSearchResults.appendChild(domListSearchResultsFragment);
19481926 domSectSearchResults.classList.remove("hidden");
1949
1950 if (searchTrimmed) {
1951 domSectSearchAllResultsLink.classList.remove("hidden");
1952 }
1953
1954 renderSearchCursor();
19551927 } else {
19561928 domSectSearchNoResults.classList.remove("hidden");
19571929 }
......@@ -2013,12 +1985,4 @@
20131985 return key;
20141986 }
20151987 }
2016
2017 function token(value, tokenClass, wantHtml){
2018 if(wantHtml){
2019 return '<span class="' + tokenClass + '">' + value + '</span>';
2020 } else {
2021 return value + '';
2022 }
2023 }
20241988})();