Fossil SCM
add quickfilter to reports, which allow to filter list for typed in text
Commit
a3fe792b2c05cbe37bd4826b4af7f7cea818e98cc752ee49519c00be9a668103
Parent
9b04bf63ebbd2b7…
1 file changed
+19
-1
+19
-1
| --- src/report.c | ||
| +++ src/report.c | ||
| @@ -1224,18 +1224,36 @@ | ||
| 1224 | 1224 | blob_reset(&src); |
| 1225 | 1225 | @ <br> |
| 1226 | 1226 | } |
| 1227 | 1227 | output_color_key(zClrKey, 1, |
| 1228 | 1228 | "border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"report\""); |
| 1229 | + @ <input type="text" id="quickfilter" placeholder="filter ticket list..." style="display: none"> | |
| 1229 | 1230 | @ <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'> | |
| 1231 | 1232 | sState.rn = rn; |
| 1232 | 1233 | sState.nCount = 0; |
| 1233 | 1234 | report_restrict_sql(&zErr1); |
| 1234 | 1235 | db_exec_readonly(g.db, zSql, generate_html, &sState, &zErr2); |
| 1235 | 1236 | report_unrestrict_sql(); |
| 1236 | 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> | |
| 1237 | 1255 | if( zErr1 ){ |
| 1238 | 1256 | @ <p class="reportError">Error: %h(zErr1)</p> |
| 1239 | 1257 | }else if( zErr2 ){ |
| 1240 | 1258 | @ <p class="reportError">Error: %h(zErr2)</p> |
| 1241 | 1259 | } |
| 1242 | 1260 |
| --- 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 |