Let constructors be searched on the docs, and allow collapsing types

This commit is contained in:
Lonami Exo 2017-07-08 13:28:23 +02:00
parent 5061e22c66
commit 4563875ab5
3 changed files with 102 additions and 44 deletions

View File

@ -433,20 +433,26 @@ def generate_documentation(scheme_file):
layer = TLParser.find_layer(scheme_file) layer = TLParser.find_layer(scheme_file)
types = set() types = set()
methods = [] methods = []
constructors = []
for tlobject in tlobjects: for tlobject in tlobjects:
if tlobject.is_function: if tlobject.is_function:
methods.append(tlobject) methods.append(tlobject)
else:
constructors.append(tlobject)
types.add(tlobject.result) types.add(tlobject.result)
types = sorted(types) types = sorted(types)
methods = sorted(methods, key=lambda m: m.name) methods = sorted(methods, key=lambda m: m.name)
constructors = sorted(constructors, key=lambda c: c.name)
request_names = ', '.join('"' + get_class_name(m) + '"' for m in methods) request_names = ', '.join('"' + get_class_name(m) + '"' for m in methods)
type_names = ', '.join('"' + get_class_name(t) + '"' for t in types) type_names = ', '.join('"' + get_class_name(t) + '"' for t in types)
constructor_names = ', '.join('"' + get_class_name(t) + '"' for t in constructors)
request_urls = ', '.join('"' + get_create_path_for(m) + '"' for m in methods) request_urls = ', '.join('"' + get_create_path_for(m) + '"' for m in methods)
type_urls = ', '.join('"' + get_path_for_type(t) + '"' for t in types) type_urls = ', '.join('"' + get_path_for_type(t) + '"' for t in types)
constructor_urls = ', '.join('"' + get_create_path_for(t) + '"' for t in constructors)
replace_dict = { replace_dict = {
'type_count': len(types), 'type_count': len(types),
@ -456,8 +462,10 @@ def generate_documentation(scheme_file):
'request_names': request_names, 'request_names': request_names,
'type_names': type_names, 'type_names': type_names,
'constructor_names': constructor_names,
'request_urls': request_urls, 'request_urls': request_urls,
'type_urls': type_urls 'type_urls': type_urls,
'constructor_urls': constructor_urls
} }
with open('../res/core.html') as infile: with open('../res/core.html') as infile:

View File

@ -19,7 +19,21 @@
placeholder="Search for requests and types…" /> placeholder="Search for requests and types…" />
<div id="searchDiv"> <div id="searchDiv">
<table id="searchTable"></table>
<details open><summary class="title">Methods (<span id="methodsCount">0</span>)</summary>
<ul id="methodsList" class="together">
</ul>
</details>
<details open><summary class="title">Types (<span id="typesCount">0</span>)</summary>
<ul id="typesList" class="together">
</ul>
</details>
<details><summary class="title">Constructors (<span id="constructorsCount">0</span>)</summary>
<ul id="constructorsList" class="together">
</ul>
</details>
</div> </div>
<div id="contentDiv"> <div id="contentDiv">
@ -196,19 +210,65 @@ messages = result.messages</pre>
contentDiv = document.getElementById("contentDiv"); contentDiv = document.getElementById("contentDiv");
searchDiv = document.getElementById("searchDiv"); searchDiv = document.getElementById("searchDiv");
searchBox = document.getElementById("searchBox"); searchBox = document.getElementById("searchBox");
searchTable = document.getElementById("searchTable");
// Search lists
methodsList = document.getElementById("methodsList");
methodsCount = document.getElementById("methodsCount");
typesList = document.getElementById("typesList");
typesCount = document.getElementById("typesCount");
constructorsList = document.getElementById("constructorsList");
constructorsCount = document.getElementById("constructorsCount");
try { try {
requests = [{request_names}]; requests = [{request_names}];
types = [{type_names}]; types = [{type_names}];
constructors = [{constructor_names}];
requestsu = [{request_urls}]; requestsu = [{request_urls}];
typesu = [{type_urls}]; typesu = [{type_urls}];
constructorsu = [{constructor_urls}];
} catch (e) { } catch (e) {
requests = []; requests = [];
types = []; types = [];
requetsu = []; constructors = [];
requestsu = [];
typesu = []; typesu = [];
constructorsu = [];
}
// Given two input arrays "original" and "original urls" and a query,
// return a pair of arrays with matching "query" elements from "original".
//
// TODO Perhaps return an array of pairs instead a pair of arrays (for cache).
function getSearchArray(original, originalu, query) {
var destination = [];
var destinationu = [];
for (var i = 0; i < original.length; ++i) {
if (original[i].toLowerCase().indexOf(query) != -1) {
destination.push(original[i]);
destinationu.push(originalu[i]);
}
}
return [destination, destinationu];
}
// Modify "countSpan" and "resultList" accordingly based on the elements
// given as [[elements], [element urls]] (both with the same length)
function buildList(countSpan, resultList, foundElements) {
var result = "";
for (var i = 0; i < foundElements[0].length; ++i) {
result += '<li>';
result += '<a href="' + foundElements[1][i] + '">';
result += foundElements[0][i];
result += '</a></li>';
}
countSpan.innerHTML = "" + foundElements[0].length;
resultList.innerHTML = result;
} }
function updateSearch() { function updateSearch() {
@ -217,46 +277,16 @@ function updateSearch() {
searchDiv.style.display = ""; searchDiv.style.display = "";
var query = searchBox.value.toLowerCase(); var query = searchBox.value.toLowerCase();
var foundRequests = [];
var foundRequestsu = [];
for (var i = 0; i < requests.length; ++i) {
if (requests[i].toLowerCase().indexOf(query) != -1) {
foundRequests.push(requests[i]);
foundRequestsu.push(requestsu[i]);
}
}
var foundTypes = []; var foundRequests = getSearchArray(requests, requestsu, query);
var foundTypesu = []; var foundTypes = getSearchArray(types, typesu, query);
for (var i = 0; i < types.length; ++i) { var foundConstructors = getSearchArray(
if (types[i].toLowerCase().indexOf(query) != -1) { constructors, constructorsu, query
foundTypes.push(types[i]); );
foundTypesu.push(typesu[i]);
}
}
var top = foundRequests.length > foundTypes.length ? buildList(methodsCount, methodsList, foundRequests);
foundRequests.length : foundTypes.length; buildList(typesCount, typesList, foundTypes);
buildList(constructorsCount, constructorsList, foundConstructors);
result = "";
for (var i = 0; i <= top; ++i) {
result += "<tr><td>";
if (i < foundRequests.length) {
result +=
'<a href="'+foundRequestsu[i]+'">'+foundRequests[i]+'</a>';
}
result += "</td><td>";
if (i < foundTypes.length) {
result +=
'<a href="'+foundTypesu[i]+'">'+foundTypes[i]+'</a>';
}
result += "</td></tr>";
}
searchTable.innerHTML = result;
} else { } else {
contentDiv.style.display = ""; contentDiv.style.display = "";
searchDiv.style.display = "none"; searchDiv.style.display = "none";

View File

@ -52,7 +52,7 @@ table td {
margin: 0 8px -2px 0; margin: 0 8px -2px 0;
} }
h1 { h1, summary.title {
font-size: 24px; font-size: 24px;
} }
@ -137,6 +137,26 @@ button:hover {
color: #fff; color: #fff;
} }
/* https://www.w3schools.com/css/css_navbar.asp */
ul.together {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
ul.together li {
float: left;
}
ul.together li a {
display: block;
border-radius: 8px;
background: #f0f4f8;
padding: 4px 8px;
margin: 8px;
}
/* https://stackoverflow.com/a/30810322 */ /* https://stackoverflow.com/a/30810322 */
.invisible { .invisible {
left: 0; left: 0;
@ -153,7 +173,7 @@ button:hover {
} }
@media (max-width: 640px) { @media (max-width: 640px) {
h1 { h1, summary.title {
font-size: 18px; font-size: 18px;
} }
h3 { h3 {