Skip to content

Commit b4a542c

Browse files
vdoc: implement advanced search on mobile layout (vlang#8176)
1 parent 73fd439 commit b4a542c

4 files changed

Lines changed: 55 additions & 38 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- Colorize and improve failing tests output.
1616
- Fix `go` with a generic function: `go test<string>(c, 'abcd')`.
1717
- Add comptime `x := $embed_file('v.png') println(x.len) println(ptr_str(x.data()))`, for embedding files into binaries.
18+
- Advanced vdoc search on mobile layout.
1819

1920
## V 0.2.1
2021
*30 Dec 2020*

cmd/tools/vdoc/html.v

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,18 @@ const (
3939
<header class="doc-nav hidden">
4040
<div class="heading-container">
4141
<div class="heading">
42-
<input type="text" id="search" placeholder="Search... (beta)" autocomplete="off">
43-
<div class="module">{{ head_name }}</div>
44-
<div class="toggle-version-container">
45-
<span>{{ version }}</span>
46-
<div id="dark-mode-toggle" role="switch" aria-checked="false" aria-label="Toggle dark mode">{{ light_icon }}{{ dark_icon }}</div>
42+
<div class="info">
43+
<div class="module">{{ head_name }}</div>
44+
<div class="toggle-version-container">
45+
<span>{{ version }}</span>
46+
<div id="dark-mode-toggle" role="switch" aria-checked="false" aria-label="Toggle dark mode">{{ light_icon }}{{ dark_icon }}</div>
47+
</div>
48+
{{ menu_icon }}
4749
</div>
48-
{{ menu_icon }}
50+
<input type="text" id="search" placeholder="Search... (beta)" autocomplete="off">
4951
</div>
5052
</div>
51-
<nav class="search"></nav>
53+
<nav class="search hidden"></nav>
5254
<nav class="content hidden">
5355
<ul>
5456
{{ toc_links }}

cmd/tools/vdoc/resources/doc.css

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,6 @@ body {
149149
fill: #fff;
150150
fill: var(--menu-toggle-icon-color);
151151
}
152-
.doc-nav #toggle-menu:active {
153-
background-color: #00000044;
154-
background-color: var(--menu-toggle-icon-hover-color);
155-
border-radius: 5rem;
156-
}
157152
.doc-nav > .heading-container {
158153
position: relative;
159154
/* IE11 */
@@ -165,31 +160,35 @@ body {
165160
z-index: 10;
166161
}
167162
.doc-nav > .heading-container > .heading {
163+
display: flex;
164+
flex-direction: column;
165+
}
166+
.doc-nav > .heading-container > .heading > .info {
168167
display: flex;
169168
padding: 0 1rem;
170169
height: 56px;
171170
}
172-
.doc-nav > .heading-container > .heading > .module {
171+
.doc-nav > .heading-container > .heading > .info > .module {
173172
font-size: 1.6rem;
174173
font-weight: 500;
175174
margin: 0;
176175
}
177-
.doc-nav > .heading-container > .heading > .toggle-version-container {
176+
.doc-nav > .heading-container > .heading > .info > .toggle-version-container {
178177
display: flex;
179178
align-items: center;
180179
}
181-
.doc-nav > .heading-container > .heading > .toggle-version-container > #dark-mode-toggle {
180+
.doc-nav > .heading-container > .heading > .info > .toggle-version-container > #dark-mode-toggle {
182181
cursor: pointer;
183182
fill: #fff;
184183
display: flex;
185184
visibility: hidden;
186185
}
187-
.doc-nav > .heading-container > .heading > .toggle-version-container > #dark-mode-toggle > svg {
186+
.doc-nav > .heading-container > .heading > .info > .toggle-version-container > #dark-mode-toggle > svg {
188187
width: 1.2rem;
189188
height: 1.2rem;
190189
}
191190
.doc-nav > .heading-container > .heading > #search {
192-
margin-top: 1rem;
191+
margin: 0.6rem 1.2rem 1rem 1.2rem;
193192
border: none;
194193
border-radius: 0.2rem;
195194
padding: 0.5rem 1rem;
@@ -198,8 +197,6 @@ body {
198197
background-color: var(--menu-search-background-color);
199198
color: #fff;
200199
color: var(--menu-search-text-color);
201-
margin-left: -0.6rem;
202-
margin-right: -0.6rem;
203200
}
204201
.doc-nav > .heading-container > .heading > #search::placeholder {
205202
color: #edf2f7;
@@ -265,7 +262,7 @@ body {
265262
.doc-nav > .content a:hover {
266263
text-decoration: underline;
267264
}
268-
.doc-nav .search {
265+
.doc-nav .search.hidden {
269266
display: none;
270267
}
271268
.doc-nav .search li {
@@ -619,17 +616,20 @@ pre {
619616
.doc-nav.hidden {
620617
height: auto;
621618
}
622-
.doc-nav > .heading-container > .heading {
619+
.doc-nav.hidden #search {
620+
display: none;
621+
}
622+
.doc-nav .search.mobile-hidden {
623+
display: none;
624+
}
625+
.doc-nav > .heading-container > .heading > .info {
623626
align-items: center;
624627
}
625-
.doc-nav > .heading-container > .heading > .toggle-version-container {
628+
.doc-nav > .heading-container > .heading > .info > .toggle-version-container {
626629
flex-grow: 1;
627630
padding: 0 1rem;
628631
justify-content: space-between;
629632
}
630-
.doc-nav > .heading-container > .heading > #search {
631-
display: none;
632-
}
633633
}
634634

635635
@media (min-width: 1024px) {
@@ -642,19 +642,19 @@ pre {
642642
.doc-nav #toggle-menu {
643643
display: none;
644644
}
645-
.doc-nav > .heading-container > .heading {
645+
.doc-nav > .heading-container > .heading > .info {
646646
height: auto;
647-
padding: 1rem 2rem;
647+
padding: 1rem 2rem 0 2rem;
648648
flex-direction: column-reverse;
649649
justify-content: center;
650650
}
651-
.doc-nav > .heading-container > .heading > .toggle-version-container {
651+
.doc-nav > .heading-container > .heading > .info > .toggle-version-container {
652652
align-items: center;
653653
margin-bottom: 0.2rem;
654654
display: flex;
655655
flex-direction: row-reverse;
656656
}
657-
.doc-nav > .heading-container > .heading > .toggle-version-container > #dark-mode-toggle {
657+
.doc-nav > .heading-container > .heading > .info > .toggle-version-container > #dark-mode-toggle {
658658
margin-right: auto;
659659
}
660660
.doc-nav .content.show,

cmd/tools/vdoc/resources/doc.js

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,20 @@ function setupScrollSpy() {
5353
function setupMobileToggle() {
5454
var toggle = document.getElementById('toggle-menu');
5555
toggle.addEventListener('click', function(ev) {
56-
document.querySelectorAll('.doc-nav').forEach(function(el) {
57-
el.classList.toggle('hidden');
58-
});
59-
document.querySelectorAll('.doc-nav .content').forEach(function(el) {
60-
el.classList.toggle('hidden');
61-
el.classList.toggle('show');
62-
});
56+
var docNav = document.querySelector('.doc-nav');
57+
var isHidden = docNav.classList.contains('hidden');
58+
docNav.classList.toggle('hidden');
59+
var search = document.querySelector('.doc-nav > .search');
60+
console.log(search);
61+
var searchHasResults = search.classList.contains('has-results');
62+
if (isHidden && searchHasResults) {
63+
search.classList.remove('mobile-hidden');
64+
} else {
65+
search.classList.add('mobile-hidden');
66+
}
67+
var content = document.querySelector('.doc-nav .content');
68+
content.classList.toggle('hidden');
69+
content.classList.toggle('show');
6370
});
6471
}
6572

@@ -87,12 +94,19 @@ function setupSearch() {
8794
if (searchValue === '') {
8895
// reset to default
8996
menu.style.display = '';
90-
search.style.display = '';
97+
if (!search.classList.contains('hidden')) {
98+
search.classList.add('hidden');
99+
search.classList.remove('has-results');
100+
}
91101
} else if (searchValue.length > 2) {
92102
// search for less than 3 characters can display too much results
93103
search.innerHTML = '';
94104
menu.style.display = 'none';
95-
search.style.display = 'block';
105+
if (search.classList.contains('hidden')) {
106+
search.classList.remove('hidden');
107+
search.classList.remove('mobile-hidden');
108+
search.classList.add('has-results');
109+
}
96110
// cache length for performance
97111
var foundModule = false;
98112
var searchModuleIndexLength = searchModuleIndex.length;

0 commit comments

Comments
 (0)