Skip to content

Commit de2fd79

Browse files
authored
Merge pull request #2503 from dotty-staging/topic/dottydoc-scaladays-2k17-2
[scaladays] dottydoc improvements 2
2 parents 1518801 + abc02c9 commit de2fd79

File tree

15 files changed

+288
-99
lines changed

15 files changed

+288
-99
lines changed

doc-tool/resources/_includes/sidebar.html

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,25 @@
66
{% endfor %}
77
</ul>
88

9+
<script>
10+
function clickToc(elem, currentPage) {
11+
var sibling = elem.parentElement.children[1];
12+
if (sibling.style.display === "" || sibling.style.display === "none")
13+
sibling.style.display = "block";
14+
else
15+
sibling.style.display = "";
16+
}
17+
18+
(function() {
19+
var activeEntry = document.querySelector("#active-toc-entry")
20+
21+
while (activeEntry != null && activeEntry.tagName.toLowerCase() === "ul") {
22+
activeEntry.style.display = "block";
23+
activeEntry = activeEntry.parentElement.parentElement;
24+
}
25+
})();
26+
</script>
27+
928
<ul class="index-entities">
1029
{% if docs.size > 0 %}
1130
<li class="index-title">

doc-tool/resources/_layouts/api-page.html

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -175,22 +175,21 @@ <h1 class="section {% if entity.hasVisibleMembers == false %}empty{% endif %}">
175175
{{ member.comment.body }}
176176
</div>
177177
</div>
178-
<script>
179-
180-
function toggleMembersBody(span, arg){
181-
var members = document.getElementById("entity-" + arg);
182-
members.classList.toggle("toggled");
183-
span.innerHTML = (span.innerHTML == "[-]") ? "[+]" : "[-]";
184-
}
185-
186-
function toggleMemberBody(span, sig) {
187-
var longBody = document.getElementById("long-body-" + sig);
188-
longBody.classList.toggle("toggled")
189-
span.innerHTML = (span.innerHTML == "[+]") ? "[-]" : "[+]";
190-
}
191-
</script>
192178
</div><!-- end member -->
193179
{% endfor %}
180+
<script>
181+
function toggleMembersBody(span, arg){
182+
var members = document.getElementById("entity-" + arg);
183+
members.classList.toggle("toggled");
184+
span.innerHTML = (span.innerHTML == "[-]") ? "[+]" : "[-]";
185+
}
186+
187+
function toggleMemberBody(span, sig) {
188+
var longBody = document.getElementById("long-body-" + sig);
189+
longBody.classList.toggle("toggled")
190+
span.innerHTML = (span.innerHTML == "[+]") ? "[-]" : "[+]";
191+
}
192+
</script>
194193
</div>
195194
</div><!-- end entity-container -->
196195
</div>

doc-tool/resources/_layouts/search.html

Lines changed: 62 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ <h1>Member Results</h1>
3333
// Parse parameters from URL:
3434
var parameters = [];
3535
var apiSearch = undefined;
36-
var docs = {{ docs | json }};
36+
var docs = {{ searchableDocs | json }};
3737
(function() {
3838
var pairs = location.search.substring(1).split('&');
3939
for (var i = 0; i < pairs.length; i++) {
@@ -61,7 +61,7 @@ <h1>Member Results</h1>
6161
"docs": docs,
6262
});
6363

64-
var insertEntity = function(entityResultsNode, entityResults) {
64+
var insertEntity = function(entityResultsNode, entityResults, suffix) {
6565
return function(entity, parent) {
6666
var shouldInsert =
6767
parent.kind == "package" &&
@@ -92,41 +92,71 @@ <h1>Member Results</h1>
9292
// Insert into list of results in package, no need to sort -
9393
// already sorted:
9494
var entityUl = entityResults[parent.name];
95-
var entityLi = document.createElement("li");
96-
if (entity.hasCompanion)
97-
entityLi.classList.add("entity-result-li", "with-companion");
98-
else
99-
entityLi.classList.add("entity-result-li");
100-
101-
var companion = !entity.hasCompanion ? "" : (
102-
'<a class="letter-anchor object" href="{{ site.baseurl }}/api/' + entity.companionPath.join('/') + '.html">O</a>'
103-
);
104-
105-
var letter =
106-
'<a class="letter-anchor ' + entity.kind + '" href="{{ site.baseurl }}/api/' + entity.path.join('/') + '.html">' +
107-
entity.kind.charAt(0).toUpperCase() +
108-
'</a>'
109-
110-
entityLi.innerHTML = (
111-
'<div class="entity-kinds">' +
112-
companion +
113-
letter +
114-
'</div>' +
115-
"<a class=\"entity-name\" href=\"{{ site.baseurl }}/api/" + entity.path.join('/') + ".html\">" +
116-
entity.name +
117-
"</a>"
118-
);
119-
entityUl.appendChild(entityLi);
95+
var selector = entity.path.slice(0, entity.path.length - 1).join('-') + '-' + entity.name + '-' + suffix;
96+
var entityLi = document.querySelector('#' + selector);
97+
if (!entityLi) {
98+
entityLi = document.createElement("li");
99+
if (entity.hasCompanion)
100+
entityLi.classList.add("entity-result-li", "with-companion");
101+
else
102+
entityLi.classList.add("entity-result-li");
103+
104+
entityLi.id = selector;
105+
106+
var companion = !entity.hasCompanion ? "" : (
107+
'<a class="letter-anchor object" href="{{ site.baseurl }}/api/' + entity.companionPath.join('/') + '.html">O</a>'
108+
);
109+
110+
var letter =
111+
'<a class="letter-anchor ' + entity.kind + '" href="{{ site.baseurl }}/api/' + entity.path.join('/') + '.html">' +
112+
entity.kind.charAt(0).toUpperCase() +
113+
'</a>'
114+
115+
entityLi.innerHTML = (
116+
'<div class="entity-kinds">' +
117+
companion +
118+
letter +
119+
'</div>' +
120+
"<a class=\"entity-name\" href=\"{{ site.baseurl }}/api/" + entity.path.join('/') + ".html\">" +
121+
entity.name +
122+
"</a>"
123+
);
124+
entityUl.appendChild(entityLi);
125+
}
120126
return entityLi;
121127
}
122128
else {
123-
return undefined;
129+
var path = entity.path.slice(0, entity.path.length - 1)
130+
return document.querySelector('#' + path + '-' + entity.name + '-' + suffix);
124131
}
125132
};
126133
};
127134

128135
var insertMember = function(member, li) {
129-
li.appendChild(document.createTextNode(", " + member.name));
136+
var div = document.createElement("div");
137+
div.classList.add("member-result");
138+
139+
var renderParamList = function(plist) {
140+
var start = plist.isImplicit ? "(implicit " : "(";
141+
var args = plist.list.join(', ');
142+
return start + args + ")";
143+
};
144+
145+
var concatenateStrings = function(acc, str) { return acc + str; };
146+
147+
var paramLists = !member.paramLists ? "" : (
148+
member.paramLists
149+
.map(renderParamList)
150+
.reduce(concatenateStrings, "")
151+
);
152+
153+
div.innerHTML =
154+
'<div class="member-kind">'+ member.kind +'</div>' +
155+
'<div class="member-name">'+ member.name +'</div>' +
156+
'<div class="member-param-lists">' + paramLists + ':</div>' +
157+
'<div class="member-return">'+ member.returnValue +'</div>'
158+
159+
li.appendChild(div);
130160
};
131161

132162
var entityResultsNode = document.getElementById("entity-results");
@@ -135,20 +165,19 @@ <h1>Member Results</h1>
135165
var memberResults = [];
136166

137167
apiSearch.onmessage = function(res) {
168+
var package = res.data.package;
138169
switch(res.data.type) {
139170
case "entityResult": {
140171
var entity = res.data.entity;
141-
var package = res.data.package;
142172
//console.log("got entity: " + entity.name + ", in package: " + package.name);
143-
insertEntity(entityResultsNode, entityResults)(entity, package);
173+
insertEntity(entityResultsNode, entityResults, "entity")(entity, package);
144174
break;
145175
}
146176
case "memberResult": {
147177
var member = res.data.member;
148178
var parent = res.data.parent;
149-
var package = res.data.package;
150179
//console.log("got member: " + member.name + ", in entity: " + parent.name);
151-
var li = insertEntity(memberResultsNode, memberResults)(parent, package);
180+
var li = insertEntity(memberResultsNode, memberResults, "member")(parent, package);
152181
if (li) insertMember(member, li);
153182
break;
154183
}

doc-tool/resources/css/search.css

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,7 @@ div#result-container > div.results {
4747
float: left;
4848
width: 50%;
4949
padding-right: 20px;
50-
min-height: 40px; /** debug */
51-
}
52-
53-
div#entity-results {
54-
background-color: green; /** debug */
55-
}
56-
57-
div#member-results {
58-
background-color: red; /** debug */
50+
overflow: hidden;
5951
}
6052

6153
div.results > h1 {
@@ -134,6 +126,39 @@ div.results li.entity-result-li:hover {
134126
margin-left: 0;
135127
}
136128

129+
div.results li.entity-result-li > div.member-result {
130+
padding-top: 3px;
131+
display: block;
132+
width: 100%;
133+
min-height: 30px;
134+
transition: all 0.2s ease;
135+
margin-left: 105px;
136+
}
137+
138+
div.results li.entity-result-li:hover > div.member-result {
139+
margin-left: 23px;
140+
}
141+
142+
div.results li.entity-result-li > div.member-result > div.member-kind {
143+
margin-right: 5px;
144+
font-weight: 400;
145+
}
146+
147+
div.results li.entity-result-li > div.member-result > div.member-return {
148+
margin-left: 5px;
149+
font-weight: 400;
150+
white-space: nowrap;
151+
}
152+
153+
div.results li.entity-result-li > div.member-result > div.member-kind,
154+
div.results li.entity-result-li > div.member-result > div.member-name,
155+
div.results li.entity-result-li > div.member-result > div.member-param-lists,
156+
div.results li.entity-result-li > div.member-result > div.member-return {
157+
float: left;
158+
line-height: 16px;
159+
display: inline;
160+
}
161+
137162
div.results li.entity-result-li > div.entity-kinds {
138163
float: left;
139164
}

doc-tool/resources/css/sidebar.css

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ ul.toc {
3939
padding-left: 0;
4040
}
4141

42+
ul.toc ul {
43+
padding-left: 0;
44+
}
45+
46+
ul.toc > li,
47+
ul.toc ul > li {
48+
padding-left: 24px;
49+
}
50+
4251
ul.toc > li:hover {
4352
background-color: transparent;
4453
}
@@ -72,10 +81,11 @@ ul.toc > li.logo-li > a {
7281
float: none;
7382
}
7483

75-
ul.toc > li > a {
84+
ul.toc > li > a,
85+
ul.toc li > a.toggle-children {
7686
font-size: 13px;
7787
display: block;
78-
padding: 0 0 0 24px;
88+
padding: 0;
7989
width: 100%;
8090
color: rgba(0, 0, 0, 0.87);
8191
background: transparent;
@@ -84,13 +94,9 @@ ul.toc > li > a {
8494
text-transform: uppercase;
8595
}
8696

87-
ul.toc > li > ul.show {
88-
display: block;
97+
ul.toc > li ul {
8998
list-style-type: none;
9099
font-size: 13px;
91-
}
92-
93-
ul.toc > li > ul.hide {
94100
display: none;
95101
}
96102

doc-tool/resources/js/api-search.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,15 @@ onmessage = function(e) {
4747
var searchRegex = regexForTerm(searchTerm);
4848

4949
var filterPackages = function(entity) {
50-
return entity.kind != "package";
50+
switch(entity.kind) {
51+
case "val":
52+
case "def":
53+
case "type":
54+
case "package":
55+
return false;
56+
default:
57+
return true;
58+
}
5159
};
5260

5361
// look at this higher order function, such syntax:
@@ -78,7 +86,7 @@ onmessage = function(e) {
7886
};
7987

8088
docs.forEach(function(pack) {
81-
pack.children
89+
pack.members
8290
.filter(filterPackages)
8391
.forEach(messageParentIfMatches(pack));
8492
});

doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class DocCompiler extends Compiler {
3333
new LinkCompanions,
3434
new AlternateConstructors,
3535
new SortMembers)),
36+
List(DocMiniTransformations(new RemoveEmptyPackages)),
3637
List(new StatisticsPhase)
3738
)
3839
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dotty.tools
2+
package dottydoc
3+
package core
4+
5+
import dotc.core.Contexts.Context
6+
7+
import transform.DocMiniPhase
8+
import model._
9+
10+
class RemoveEmptyPackages extends DocMiniPhase {
11+
override def transformPackage(implicit ctx: Context) = { case p: Package =>
12+
if (p.members.exists(_.kind != "package")) p
13+
else NonEntity
14+
}
15+
}

doc-tool/src/dotty/tools/dottydoc/core/transform.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ object transform {
5353
pack <- rootPackages(ctx.docbase.packages)
5454
transformed = performPackageTransform(pack)
5555
} yield ctx.docbase.packagesMutable(pack.name) = transformed
56+
57+
ctx.docbase.packagesMutable.foreach { case (key, value) =>
58+
if (value eq NonEntity) ctx.docbase.packagesMutable -= key
59+
}
60+
5661
units
5762
}
5863

0 commit comments

Comments
 (0)