Skip to content

Commit 685cca6

Browse files
committed
ui: add buttons to update the URL with the current filters
Add buttons to update URL from currently set filters. This is very useful when filtered down list needs to be shared over email. Signed-off-by: Jakub Kicinski <[email protected]>
1 parent f207196 commit 685cca6

File tree

4 files changed

+121
-0
lines changed

4 files changed

+121
-0
lines changed

ui/contest.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@
9393
</div>
9494
<div class="column-small">
9595
<span id="filter-info"></span>
96+
<br /><br />
97+
<p>
98+
<a href="#" id="update-url-button" class="nipa-button">Update URL</a>
99+
</p>
96100
</div>
97101
</div>
98102
<div class="row-small">

ui/contest.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,61 @@ function reload_data(event)
276276
});
277277
}
278278

279+
function update_url_from_filters()
280+
{
281+
const result_filter = {
282+
"pass": document.getElementById("pass").checked,
283+
"skip": document.getElementById("skip").checked,
284+
"warn": document.getElementById("warn").checked,
285+
"fail": document.getElementById("fail").checked
286+
};
287+
const branch_filter = document.getElementById("branch").value;
288+
const exec_filter = document.getElementById("executor").value;
289+
const remote_filter = document.getElementById("remote").value;
290+
const test_filter = document.getElementById("test").value;
291+
const pw_n = document.getElementById("pw-n").checked;
292+
const pw_y = document.getElementById("pw-y").checked;
293+
const ld_cases = document.getElementById("ld-cases").checked;
294+
295+
// Create new URL with current filters
296+
const currentUrl = new URL(window.location.href);
297+
298+
// Clear existing filter parameters
299+
const filterParams = ['pass', 'skip', 'warn', 'fail', 'branch', 'executor',
300+
'remote', 'test', 'pw-n', 'pw-y', 'ld-cases'];
301+
filterParams.forEach(param => currentUrl.searchParams.delete(param));
302+
303+
// Add current filter states to URL
304+
if (!result_filter.pass)
305+
currentUrl.searchParams.set('pass', '0');
306+
if (!result_filter.skip)
307+
currentUrl.searchParams.set('skip', '0');
308+
if (!result_filter.warn)
309+
currentUrl.searchParams.set('warn', '0');
310+
if (!result_filter.fail)
311+
currentUrl.searchParams.set('fail', '0');
312+
313+
if (branch_filter)
314+
currentUrl.searchParams.set('branch', branch_filter);
315+
if (exec_filter)
316+
currentUrl.searchParams.set('executor', exec_filter);
317+
if (remote_filter)
318+
currentUrl.searchParams.set('remote', remote_filter);
319+
if (test_filter)
320+
currentUrl.searchParams.set('test', test_filter);
321+
322+
if (!pw_n)
323+
currentUrl.searchParams.set('pw-n', '0');
324+
if (!pw_y)
325+
currentUrl.searchParams.set('pw-y', '0');
326+
327+
if (ld_cases)
328+
currentUrl.searchParams.set('ld-cases', '1');
329+
330+
// Update the browser URL without reloading the page
331+
window.history.pushState({}, '', currentUrl.toString());
332+
}
333+
279334
function embedded_mode() {
280335
$('#loading-fieldset').hide();
281336
$('#sitemap').hide();
@@ -313,6 +368,11 @@ function do_it()
313368
document.getElementById("ld_cnt").value = 1;
314369
}
315370

371+
$('#update-url-button').on('click', function (e) {
372+
e.preventDefault();
373+
update_url_from_filters();
374+
});
375+
316376
nipa_sort_cb = results_update;
317377

318378
/*

ui/flakes.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@
6969
<label for="sort-streak">current streak</label>
7070
</div>
7171
</fieldset>
72+
<p>
73+
<a href="#" id="update-url-button" class="nipa-button">Update URL</a>
74+
</p>
7275
</div>
7376
</div>
7477
<div class="row-small">

ui/flakes.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,55 @@ function remotes_loaded(data_raw)
209209
loaded_one();
210210
}
211211

212+
function update_url_from_filters()
213+
{
214+
const tn_needle = document.getElementById("tn-needle").value;
215+
const min_flip = document.getElementById("min-flip").value;
216+
const pw_n = document.getElementById("pw-n").checked;
217+
const pw_y = document.getElementById("pw-y").checked;
218+
const sort_streak = document.getElementById("sort-streak").checked;
219+
const br_cnt = document.getElementById("br-cnt").value;
220+
const br_pfx = document.getElementById("br-pfx").value;
221+
const ld_remote = document.getElementById("ld-remote").value;
222+
const ld_cases = document.getElementById("ld-cases").checked;
223+
224+
// Create new URL with current filters
225+
const currentUrl = new URL(window.location.href);
226+
227+
// Clear existing filter parameters
228+
const filterParams = ['tn-needle', 'min-flip', 'pw-n', 'pw-y', 'sort-flips',
229+
'sort-streak', 'br-cnt', 'br-pfx',
230+
'ld-remote', 'ld-cases'];
231+
filterParams.forEach(param => currentUrl.searchParams.delete(param));
232+
233+
// Add current filter states to URL
234+
if (tn_needle)
235+
currentUrl.searchParams.set('tn-needle', tn_needle);
236+
if (min_flip && min_flip !== '1')
237+
currentUrl.searchParams.set('min-flip', min_flip);
238+
239+
if (!pw_n)
240+
currentUrl.searchParams.set('pw-n', '0');
241+
if (!pw_y)
242+
currentUrl.searchParams.set('pw-y', '0');
243+
244+
if (sort_streak)
245+
currentUrl.searchParams.set('sort-streak', '1');
246+
247+
if (br_cnt && br_cnt !== '100')
248+
currentUrl.searchParams.set('br-cnt', br_cnt);
249+
if (br_pfx)
250+
currentUrl.searchParams.set('br-pfx', br_pfx);
251+
if (ld_remote)
252+
currentUrl.searchParams.set('ld-remote', ld_remote);
253+
254+
if (ld_cases)
255+
currentUrl.searchParams.set('ld-cases', '1');
256+
257+
// Update the browser URL without reloading the page
258+
window.history.pushState({}, '', currentUrl.toString());
259+
}
260+
212261
function reload_data()
213262
{
214263
const format_l2 = document.getElementById("ld-cases");
@@ -238,6 +287,11 @@ function do_it()
238287
nipa_filters_enable(results_update, "fl-pw");
239288
nipa_input_set_from_url("ld-pw");
240289

290+
$('#update-url-button').on('click', function (e) {
291+
e.preventDefault();
292+
update_url_from_filters();
293+
});
294+
241295
/*
242296
* Please remember to keep these assets in sync with `scripts/ui_assets.sh`
243297
*/

0 commit comments

Comments
 (0)