Skip to content

Commit de9d6e6

Browse files
committed
fix(xref): enable empty-term browsing in search UI
- Remove required attribute from term input - Allow form submission when specs are provided without a term - Use entry.term for cite generation when search term is empty - Include 'term' in requested fields so browse results have term data - Fall back to entry.spec for shortname display - Auto-open Advanced Search when URL has specs/types/for params - Remove options.includes guard from select() so URL-driven selections work before metadata options are loaded
1 parent b87e457 commit de9d6e6

2 files changed

Lines changed: 16 additions & 9 deletions

File tree

static/xref/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<form action="/xref" id="xref-search" name="xref-search" method="post">
1414
<div class="field">
1515
<label for="term">Terms, concept, or WebIDL</label>
16-
<input name="term" placeholder="event target, EventTarget" autocomplete="off" aria-autocomplete="list" required autofocus/>
16+
<input name="term" placeholder="event target, EventTarget" autocomplete="off" aria-autocomplete="list" autofocus/>
1717
</div>
1818
<div class="field advanced" hidden>
1919
<label for="specs">Specification(s) short name</label>

static/xref/script.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ class OptionSelector extends HTMLInputElement {
5252
}
5353

5454
select(value) {
55-
const { selectedValues, elSelections, options } = this;
56-
if (value === '' || selectedValues.has(value) || !options.includes(value)) {
55+
const { selectedValues, elSelections } = this;
56+
if (value === '' || selectedValues.has(value)) {
5757
return;
5858
}
5959

@@ -84,7 +84,7 @@ const specStatusType = {
8484

8585
let metadata;
8686
const options = {
87-
fields: ['shortname', 'spec', 'uri', 'type', 'for', 'status'],
87+
fields: ['shortname', 'spec', 'uri', 'type', 'for', 'status', 'term'],
8888
spec_type: ['draft', 'snapshot'],
8989
all: true,
9090
};
@@ -114,7 +114,7 @@ function getFormData() {
114114

115115
async function handleSubmit() {
116116
const data = getFormData();
117-
if (data.term === '') return;
117+
if (data.term === '' && !data.specs) return;
118118

119119
const params = new URLSearchParams(Object.entries(data));
120120
history.replaceState(null, null, `?${params}`);
@@ -137,15 +137,16 @@ async function handleSubmit() {
137137
}
138138

139139
function renderResults(entries, query) {
140-
const { term } = query;
141-
caption.innerText = `Searched for "${term}".`;
140+
const { term: searchTerm } = query;
141+
caption.innerText = searchTerm ? `Searched for "${searchTerm}".` : `Browsing spec definitions.`;
142142
if (!entries.length) {
143143
output.innerHTML = `<tr><td colspan="4">No results found.</td></tr>`;
144144
return;
145145
}
146146

147147
let html = '';
148148
for (const entry of entries) {
149+
const term = searchTerm || entry.term || '';
149150
const specInfo = metadata.specs[entry.status][entry.spec];
150151
const link = new URL(entry.uri, specInfo.url).href;
151152
const title = escapeHTML(specInfo.title);
@@ -160,7 +161,7 @@ function renderResults(entries, query) {
160161
let row = `
161162
<tr>
162163
<td><a href="${link}">${title}</a></td>
163-
<td>${entry.shortname}</td>
164+
<td>${entry.shortname || entry.spec || ''}</td>
164165
<td>${entry.type}</td>
165166
<td>${cite}</td>
166167
</tr>`;
@@ -286,6 +287,7 @@ async function ready() {
286287
});
287288

288289
const { searchParams } = new URL(window.location.href);
290+
const hasAdvancedParams = searchParams.has('specs') || searchParams.has('types') || searchParams.has('for');
289291
for (const [field, value] of searchParams) {
290292
switch (field) {
291293
case 'term':
@@ -298,7 +300,12 @@ async function ready() {
298300
break;
299301
}
300302
}
301-
if (searchParams.has('term')) {
303+
if (hasAdvancedParams) {
304+
form.advanced.checked = true;
305+
form.querySelectorAll('.advanced').forEach(el => { el.hidden = false; });
306+
localStorage.setItem('showAdvanced', 'yes');
307+
}
308+
if (searchParams.has('term') || hasAdvancedParams) {
302309
handleSubmit();
303310
}
304311

0 commit comments

Comments
 (0)