From a8cad28da7889d211ebebf59f390d8def715b751 Mon Sep 17 00:00:00 2001 From: checktheroads Date: Sat, 17 Apr 2021 18:16:13 -0700 Subject: [PATCH] migrate interface filtering to typescript --- netbox/project-static/dist/netbox.js | Bin 444724 -> 445388 bytes netbox/project-static/dist/netbox.js.map | Bin 1264902 -> 1267155 bytes netbox/project-static/src/netbox.ts | 3 +- netbox/project-static/src/search.ts | 44 +++++++++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index bd8ae108ce9148efe7bab8dc8e3a139e5711e01c..f4ec02d6cd6d016cec6cea203a32ef867ef3d143 100644 GIT binary patch delta 1029 zcmZuwQD|I66y+s(muM_DtxZ_d+TB;0%;3xGRuI}OFR7F?3R=(<6iSLOZ|7~sOx|qf z&5K!cK!3~&J5??d(OFc zHs2k)k7KXZt$JU*zdlg6H{ruiF~8P#3O{PWp2LC5*2_}q#N#p7&%~OkCNQH5s6bFa=y=KbuCcYPE}19UjA)hKmOW)6Q*dc z3Df%|(Vh-eiD}wH;%XDfU|@3j3<>aZ6Gl%8pLv?C>(kPxh&3G_Uz5C;%^Q%I5mU~r zQc^jt^40>8GN02a(&6DM{HqBW!*8es2Te=Tf+rq~(m2#y##wr zXxAWoQ^MqiBypFPa-|>ln7V-$naFNa>I$Qfj2Zo&g zu2USdn~-s8wJ^}(5{YP4c+7-a#N$ASin&IF)@m_kZ$l=t%qnTwaiw|bCIqyqOhSM^ zCqUX?wBV^>E5g5T!`Tt;E4G?)#fak_(=tf3aY5pXU%^}0EZYy^jd%JctRjAU9Tsp& z*(dSHC*a|a%AUhNrtNDueF+}Jw{JoLix=%j@tC&9@ct!u00%z@f>mvwXm5Q3*E;LH zv;}XBxat3W8~l9>9ye`9x8dt?4nY^ei64gEzrfC_0yc`F`e``GB$2x!B#ZR@Td* za!Z-4!qWw;>7j^jd3b$>Tn_uxG0mwd562~m&GtRhf{K81V8TBU=f)A?Dp(3nQp&RG#={fwo0DD1Xca^MSJ+%V;QSBB6YcO;` zFzMV0xOAwIO!>l|@D0=A_+<_5E6V&sy<5xUZb=^F35z80lOzLp)rCckBYOs&SXhTE zI6X@`ao8tRQ35VM_JDJXkt}e>iP;h(1kyPE=gbd+k$+WPq V(Xt=E)gg+nn$W5Oh2O)5{ueB<&(Ht> diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index f74047f4e75ebbc31eb24c7fcc43444a7b6def27..13c4a6bd2254755a80feb739b0c75612c14c5770 100644 GIT binary patch delta 1898 zcmZuxUuauZ7$<3R*QH(4MQ)Ol2k`d0m`ZL5LR;McEWxU8IjC3yMa zACPep9>M)X?CK>UHj%2R9KvOBTAIX4mgCg;8)eyjnc>gV(hOD${3`?JI0Y%5;pq%~ zO%~X-ABE>Tsxm%a;o#{596Y`{_(lHbNs8mortJ%l_Z0V@rb)RJ3^^M_5arKm_} z6|7VgUWs#3Ciq##(>sYLladZ@&GM6D9^N#@)1W|o%>$XkFM~6nEhC+3YDr0R+%A{= z98R5ci#9f0S*P)`Jj4EaJNUxxX?%1<;ZU6Pf?}&~L0#sp;wG5N6u-Ee-M%RV0*8(o zirdrrJGTU(D@4_j0=gi0Yqj z7hegouhzpMhAwn>Y)zSz*aa;|(5#j<2%69h*kHGghb5H;9rYnqZgzjP|kd>ro--0<-Ds z(Zg(QhZtEw@HaGs6q{(2APw21NS07VqrlHZ1=}hkS|SZFhiG=L$7G%g{h(?h~7STykRF^7os@X+C6X!IeN(K(koAAP|&k3j+K-tzJ5UAM1 z0oe}HOsLy5PBZgJ=bMz;dbUc5)2djoY!vs(as;b@piIL&=g8D-`k3qbNo#S#QO~Ba z6-2XEzJ|sSwPOPV=&hy-*OggNp4X^0Xli9Jr&&4XAXfvIO1b!kMNO*wc8gro5Eo*U zOH2Se+`w8P@mQ-utYM1hBX?y&2i4qvcm`E-C6ZgnT1((e9_7I$gXAcL*t&J?Ut0Gq(}X1mDsh6 zTi3E(Yo9f#XK1ZLM(1}m`Ofcp;|$jiTa^V!T%oSYFsyn3y2q7488-ZGcVAaCOSm6w z{9b!6>x_t7*u6X59RZHSe!bthgZ=bTcZltO817-l!$>>3JR%BbXbB7eyS(WnUT+$M z+ZbyJ!TfNaGy}#Sx?j@sV3mZbCVauLZw#~73eFH9*@fOMJ)2_rLDMn`i~JMqZR5Lp z_lbyo7LROW|Nao#>as|-SmZ6@m@(S;t?*X#}$~ F^dBV*Z`%L> delta 215 zcmcb-+P7_%Z$k@X3sVbo3rh>@7Pc$f*fO0>opchnCvIZf&dikIy#4hqwjL&yVy6nH z=@-kGG`W)<9UZN$9i0ok9j7x^G3jkTwx5lSkE_fz!&xWMG0($g`b1eqsp%iivQ1^G zbf3Pkp2=+c-g9i*m>J8amt107$dc>iSh!v7GTU7iCVlsI)*Ea<%nrmHK+FlmTtLhX z#5_RE3&eat%n!r@KrFbO^@h-Am+gwO!WOL4*YgW-ZST<#zN)aj%u{$Z<917L;aOY& Dtk6ux diff --git a/netbox/project-static/src/netbox.ts b/netbox/project-static/src/netbox.ts index 465ecdf9f..1ff0c9ecb 100644 --- a/netbox/project-static/src/netbox.ts +++ b/netbox/project-static/src/netbox.ts @@ -6,7 +6,7 @@ import { initMessageToasts } from './toast'; import { initSpeedSelector, initForms } from './forms'; import { initRackElevation } from './buttons'; import { initClipboard } from './clipboard'; -import { initSearchBar } from './search'; +import { initSearchBar, initInterfaceFilter } from './search'; import { initGenerateKeyPair, initLockUnlock, initGetSessionKey } from './secrets'; import { getElements } from './util'; @@ -24,6 +24,7 @@ const INITIALIZERS = [ initGenerateKeyPair, initLockUnlock, initGetSessionKey, + initInterfaceFilter, ] as (() => void)[]; /** diff --git a/netbox/project-static/src/search.ts b/netbox/project-static/src/search.ts index 20cf0c99a..2f8670053 100644 --- a/netbox/project-static/src/search.ts +++ b/netbox/project-static/src/search.ts @@ -1,3 +1,5 @@ +import { getElements } from './util'; + interface SearchFilterButton extends EventTarget { dataset: { searchValue: string }; } @@ -35,3 +37,45 @@ export function initSearchBar() { } } } + +/** + * Initialize Interface Table Filter Elements. + */ +export function initInterfaceFilter() { + for (const element of getElements('input.interface-filter')) { + /** + * Filter on-page table by input text. + */ + function handleInput(event: Event) { + const target = event.target as HTMLInputElement; + // Create a regex pattern from the input search text to match against. + const filter = new RegExp(target.value); + + // Each row represents an interface and its attributes. + for (const row of getElements('table > tbody > tr')) { + // The data-name attribute's value contains the interface name. + const name = row.getAttribute('data-name'); + + // Find the row's checkbox and deselect it, so that it is not accidentally included in form + // submissions. + const checkBox = row.querySelector('input[type="checkbox"][name="pk"]'); + if (checkBox !== null) { + checkBox.checked = false; + } + + if (typeof name === 'string') { + if (filter.test(name)) { + // If this row matches the search pattern, but is already hidden, unhide it. + if (row.classList.contains('d-none')) { + row.classList.remove('d-none'); + } + } else { + // If this row doesn't match the search pattern, hide it. + row.classList.add('d-none'); + } + } + } + } + element.addEventListener('keyup', handleInput); + } +}