Fossil SCM

add quickfilter to reports, which allow to filter list for typed in text

jkosche 2025-03-25 21:01 quickfilter
Commit a3fe792b2c05cbe37bd4826b4af7f7cea818e98cc752ee49519c00be9a668103
1 file changed +19 -1
+19 -1
--- src/report.c
+++ src/report.c
@@ -1224,18 +1224,36 @@
12241224
blob_reset(&src);
12251225
@ <br>
12261226
}
12271227
output_color_key(zClrKey, 1,
12281228
"border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"report\"");
1229
+ @ <input type="text" id="quickfilter" placeholder="filter ticket list..." style="display: none">
12291230
@ <table border="1" cellpadding="2" cellspacing="0" class="report sortable"
1230
- @ data-column-types='' data-init-sort='0'>
1231
+ @ id="ticketlist" data-column-types='' data-init-sort='0'>
12311232
sState.rn = rn;
12321233
sState.nCount = 0;
12331234
report_restrict_sql(&zErr1);
12341235
db_exec_readonly(g.db, zSql, generate_html, &sState, &zErr2);
12351236
report_unrestrict_sql();
12361237
@ </tbody></table>
1238
+ @
1239
+ @ <script nonce="%h(style_nonce())">
1240
+ @ const quickfilter = document.getElementById('quickfilter');
1241
+ @ const ticketlist = document.querySelectorAll('#ticketlist tbody tr');
1242
+ @
1243
+ @ document.addEventListener('DOMContentLoaded', function(){
1244
+ @ if (ticketlist.length > 5) quickfilter.style.display = '';
1245
+ @ });
1246
+ @
1247
+ @ quickfilter.addEventListener('input', function (){
1248
+ @ const filter = quickfilter.value.toLowerCase().trim();
1249
+ @ ticketlist.forEach(function(row){
1250
+ @ const rowText = row.textContent.toLowerCase().trim();
1251
+ @ row.style.display = rowText.includes(filter) ? 'table-row' : 'none';
1252
+ @ });
1253
+ @ });
1254
+ @ </script>
12371255
if( zErr1 ){
12381256
@ <p class="reportError">Error: %h(zErr1)</p>
12391257
}else if( zErr2 ){
12401258
@ <p class="reportError">Error: %h(zErr2)</p>
12411259
}
12421260
--- src/report.c
+++ src/report.c
@@ -1224,18 +1224,36 @@
1224 blob_reset(&src);
1225 @ <br>
1226 }
1227 output_color_key(zClrKey, 1,
1228 "border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"report\"");
 
1229 @ <table border="1" cellpadding="2" cellspacing="0" class="report sortable"
1230 @ data-column-types='' data-init-sort='0'>
1231 sState.rn = rn;
1232 sState.nCount = 0;
1233 report_restrict_sql(&zErr1);
1234 db_exec_readonly(g.db, zSql, generate_html, &sState, &zErr2);
1235 report_unrestrict_sql();
1236 @ </tbody></table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1237 if( zErr1 ){
1238 @ <p class="reportError">Error: %h(zErr1)</p>
1239 }else if( zErr2 ){
1240 @ <p class="reportError">Error: %h(zErr2)</p>
1241 }
1242
--- src/report.c
+++ src/report.c
@@ -1224,18 +1224,36 @@
1224 blob_reset(&src);
1225 @ <br>
1226 }
1227 output_color_key(zClrKey, 1,
1228 "border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"report\"");
1229 @ <input type="text" id="quickfilter" placeholder="filter ticket list..." style="display: none">
1230 @ <table border="1" cellpadding="2" cellspacing="0" class="report sortable"
1231 @ id="ticketlist" data-column-types='' data-init-sort='0'>
1232 sState.rn = rn;
1233 sState.nCount = 0;
1234 report_restrict_sql(&zErr1);
1235 db_exec_readonly(g.db, zSql, generate_html, &sState, &zErr2);
1236 report_unrestrict_sql();
1237 @ </tbody></table>
1238 @
1239 @ <script nonce="%h(style_nonce())">
1240 @ const quickfilter = document.getElementById('quickfilter');
1241 @ const ticketlist = document.querySelectorAll('#ticketlist tbody tr');
1242 @
1243 @ document.addEventListener('DOMContentLoaded', function(){
1244 @ if (ticketlist.length > 5) quickfilter.style.display = '';
1245 @ });
1246 @
1247 @ quickfilter.addEventListener('input', function (){
1248 @ const filter = quickfilter.value.toLowerCase().trim();
1249 @ ticketlist.forEach(function(row){
1250 @ const rowText = row.textContent.toLowerCase().trim();
1251 @ row.style.display = rowText.includes(filter) ? 'table-row' : 'none';
1252 @ });
1253 @ });
1254 @ </script>
1255 if( zErr1 ){
1256 @ <p class="reportError">Error: %h(zErr1)</p>
1257 }else if( zErr2 ){
1258 @ <p class="reportError">Error: %h(zErr2)</p>
1259 }
1260

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button