From 03390815afbb544297cca9b7990f84ed4e4dcb44 Mon Sep 17 00:00:00 2001 From: checktheroads Date: Mon, 19 Apr 2021 16:59:56 -0700 Subject: [PATCH] migrate table config to typescript & update templates --- netbox/project-static/dist/jobs.js | Bin 123102 -> 124289 bytes netbox/project-static/dist/jobs.js.map | Bin 372742 -> 374583 bytes netbox/project-static/dist/netbox.js | Bin 445388 -> 452438 bytes netbox/project-static/dist/netbox.js.map | Bin 1267155 -> 1280924 bytes netbox/project-static/src/netbox.ts | 2 + netbox/project-static/src/tableConfig.ts | 115 ++++++++++++++++++ .../templates/dcim/device/consoleports.html | 1 - .../dcim/device/consoleserverports.html | 1 - netbox/templates/dcim/device/devicebays.html | 4 - netbox/templates/dcim/device/frontports.html | 1 - netbox/templates/dcim/device/interfaces.html | 1 - netbox/templates/dcim/device/inventory.html | 3 - .../templates/dcim/device/poweroutlets.html | 1 - netbox/templates/dcim/device/powerports.html | 1 - netbox/templates/dcim/device/rearports.html | 1 - netbox/templates/generic/object_list.html | 4 - .../virtualization/virtualmachine.html | 4 - .../virtualmachine/interfaces.html | 1 - 18 files changed, 117 insertions(+), 23 deletions(-) create mode 100644 netbox/project-static/src/tableConfig.ts diff --git a/netbox/project-static/dist/jobs.js b/netbox/project-static/dist/jobs.js index fb8621ff6cc528db7edd432c548b6bd658b1eed2..b22aed341601d6b4d3d014db13bbc9304200d689 100644 GIT binary patch delta 2447 zcmZ8j-ESP#71yb&7)TtdL`jWJmGwy2cbc2Y?$%DoZf;v+oDbCEm3OI-j336ccf8jb z&n$EAINq*TE~={bp@;{n-lrmj#1jvI0ELHE0;x%;LmEsz3sNfnfIjdKpq@LkyS91R z**W)o+}}CBbIv^cbnulMgTMO_-v8%jgYxxe6f5a8Tsa%ZQOwr*A|Y#Wq8cr>)E6yt zH6vrc7G2^YTknhArkLk1CtNDFyjxgtmDgaGc8kt)^^7Yyn>NCUG&EXQBB{td+srg+v>E}PRQufmbS#r~P};wT7e5u53YP`%0n?kQfMYbp_il2!DJS3yDZ%FV0b zz<{8M{_Yx#4hWX$C$GaW2t9QjCa7n(BQ}<&F7rCR2;CrPwN>0|hZ`GV5(JDTPRvyj z<9nk2bRAxJ+D}5y#K;N4?RIvUllXsQ!%Kgg>2E^pPG1#Y+WMPM;E4Y7hj4hGY{uNJ z>)~r~c>rznU#`K=k99pw$FbXT{5V=gH#;7r{`++}w!dYBYi^wLnSO5@hKDZN<$jbv zKk^wY?lOXFQ4K4lt7JQA5S8u?N@$vQz5aV^iX-pLjX+&Kr>@&l|L6P6etyL9xyui=TudMI-ZeeovbVNL(`CLDt${mJ7n zsz163FTuJ#^l$jX;Bp2@|Mw1@hE@IUHjED=K)Y>Vr6@73Mr6^f*P! zdxL=a&PpUgV!ebo5vIEoC;ES1z~PfY?-Ip)iYW6;tU6b&2rLoicKa>rvv*+Pknd#2 zecPhmzYQag`rYdm^{u;bZU~9o@9L_4WgBt_tJu96R#Igd6$X^u{_8^^dgM!(NGpG| z2ZJt?m|B(T+RO!uD*fhNkVDgkjNNq2XHMsLoX%%XpVDXVg8OJ{etx!QrKXRs7#{YG zYngFv$GDam7Y0oqARi4Ef3s=m_rmv!%zVQ6kwdS)|(vpWc9cc%xY^&58~8NG<-rW5zf zoo)u4d+;;Ix7&UclXBUXmj!Mj;yXBX*N{}EUF>#B;(W>Ia3=L@_i)ll{qa3`3Vi+W z9vuClU;%mkjjf~l;C*=Hr(N?YDjeBk_-VsFk}%;Q>Fso+VO0Ig`!KSJ{pGB=L4vcm zoyBB@@AX(;Ouc?jb!DfsUg(M^OFh*yd*r83o`NczqQ0Z@2o8q>Vx6*|#d~tZtn$5X zJk#sfp3NCl@o`xB4lX_+8>Dci*9yf_c>Fl^^-mta!~q{CQ`E$D)cIdA1QskHijk2X)T3GDh9tlX~bR~A#>}pd(FRjWL!9BiHjB@5rGPfH_;wZ|# z6E?@kaUf-Woo0gQWw%_NPL@L?kY`eeJE;3z;F)xF3_u6xGHMY)luZ|sMa<2PRk+tG WOs%?IqB@UtXdB1+mDYcN5B?vMIaZkf delta 2174 zcmaKt-)~e!6vs0vG!d#n0#bNzdlO(rhRbf7mUh=sumTU7P}v$x$_8ie&h1Wn_ukF? z*mm7+st-Q+U}7Y3o-pwrATiNkOw^dDL_muWL8!s#qYozh2hP2B@3w%tFPnSj%$e^w z=W}M>zA|w4n}N4J1)qGo(!^}383`rbI+e$ShyU}e9@)JzGNF^hUjmGIns^gJpkXGMnBOGn=m#Cs-4#VtpYdsdQ1`CxW3w>Ydi6{tW zB2qTzzXJ-$i%)$ITrjLLCv3LdZd9Yd<%$WaB2j^;Gz>!mHQ|O{0=s}VZ(aiXu|%DS z4CgT=vg`AZ20^={M7t9%FNZn^2;r_^N(=kV4Y&$+m_ILpBb!@P#a6^?x%>t%&%FF2 z;46N-j1>-Xgelf(_&A}sZnOe5!qTSQqJd^zk1DSYJ=967kV}FpYv}SMhZh8ts5mX6 z2A9m1N=8A8S(B^kEQIz5w5~FUQxqQ@*lZ?$0%uR__|u0p5n{WBoscal2eS=Z_(MKP z`iYZkdN8%fpe&Lod)ZCZVI^vLV#zX)5H+q3dAB?g<>a@sdT~v%{C0 zDE4|t%^TOj@Cxnr77F=nC5td(x6aEb%(fOrV!<)DiQv$U7OaM&LeRF$W%6&aSywP# zstQIIy1fHA(e8Z2L+G3dow#d98Zaz@`$ z+O4JaZY`zVDr}1ZlGwvO4sa9Ka69hS^okz|Th6#+l!R(k2&phSY5({oC8lsYZj=KR1=TyC<4;(;}D9C4Z1&<)?5jmT$VBh`~Dww*o*<@i2 zdbpgl5&8&~dWo}@6qB)sF_}JDwwzR>TDwU93zw*ym1iuje~{JxAz+#$_;+CTuM^Y! zA7VyhVs^b8+{ep07Pai)2V)$nt483Uefwa|Dv*jQEoUrp2%G5}V2IW-{e{s75gWt7 z{fH$gwzHFh6fx-3n4&yzc$jN%0BoWMnECn^7#ixZ_;D(>-PE~%=tRm?J7a1xVQO%0 z!~8EMM49j!7zF9un|FT&^w9!!ZQV;^*4IM9KAwI@-K<2kf5kiI?8kwn)7*3M2PVVc(4X^g^&xt)0#sVIzFJt}YWOP_-=`$D+PX07u5(q{e5woFC2A%=si(jsRN5I7$cR?`l57EW?lK=n! diff --git a/netbox/project-static/dist/jobs.js.map b/netbox/project-static/dist/jobs.js.map index 668867504f3393ad396d1ac5d9d19e1ee2e9823f..d3fe6c62ce64e83a7901d678db66ee52e4dd1cd8 100644 GIT binary patch delta 2987 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 delta 2862 zcmaJ@Yit}>71kuVw;`!X(%5Mnr|o7%oICc-ba(xTy_@U2nnXfHak6fTFb2l6cfDhe zXEt-^+TPl$q+rw^RjanDI1&O?`Bexa6j4|tq=@`LpwfaUlq!Tr62e2MKia=Y2+r)Q zb}G7mX6MYg=lPxU-QWMJ=S}Fjv}&wwSlzg~>2-37<;z?ym4h%+R>@W;!!QU%p)GRN zM5v=uMO50N85x~WVR0gulfEdm#dg^}Eu-VMl42gNGtzZrq5Tby94otz*^w<~)(TI0 za$fq85_4^-a>Bs#CIXR%j7cJ*nB*b6@6c=D_7RV0?g|MXT%|jcxqZwRObgfY}4(7YYau{kqW)V>qBfuC^WFwEsxCxRD`lV14ZFDW-v?eamAH>i&7yKw2- zbT|CxO`0<_1mC0Gd)?rS%N8@2qp-59!GDXg9@mUYVX&C6tN3fFBpO+#D`dan zzDKk4B2J^0xSOyh%3lc?ERFXbJV`ddzcw<8seB*8M33xY6&OfP{G?$CauDinW z^JHA^B$wug@nU)I(Wz%uSJG@Da0`i)SvA*WSccUMNf`zBVTL?nRN$dc(Y^3NhD;hI z_{;$LYR7zRveBo+G@Sh%P2S&nXVb!i9fM^5j%G(%RlpXU86;1RMWVz^F6+1u1H33B zr^G_OJTIeCP{<}vpPWeYlC%plRN3X^XAhpppF33tbTS)N;lvP0(t)g7WIoIdk?xIw z@Zp&ulE?>^>pPw(^o8l4fTd^iHa}Lf%VkF!AZVPEC z1V21KO!nmLYV&(K)lz8L&7g%@75FU+=}a7%ZXV}8oE;{e59>9N46l#G6&k)WO!jYe z+fIhz>HLhJ-CO>fQ^V&yuY>Vk{``@FMqk znHP8^F8(-N%MyAquD>mOxtMt3+~av^hfZnS4()lxwZKUcXQpSR6Iqyl=wdN_Gp7%` zmM8t0sFc(F{iYHTb0_r_&zRg1YBDv&i}*-Saoe)XW$71~!}ECBpJ7GQ%&o8b>7kD{ zef&%wyFMKhDp~vgH9x4fN;DJ~*=w}FjA_U1A1;4P`v=w+z16)G_ux-M#3%PxwfJdrtH{p1%_~0TN3%|`WWf#YblMQu!wV{t)lC@$Y<%%W+O70tl!_yHT-vs z9Ki1?3d#((E7v?uh)+%qarBWM<(bUX)S5k=ubn$WHW<%bIYw$%j?uUG849Wn?dj5O z0!CNSsUVzJ!h!EPbj%29?>V&FFkHCaM>6n+S)@7 zsa9i+xCJiears}HcEX}h59|nVbF_h;!}|^#eU~QS*FN2{8LvMcf=j_|pN`kwQ1qod z6mQT8qX<8_LGQpyM7QJr%P(%oARS*_AYZG!bd&zm0A3+|$jlwD(VO^q`p@)1d>G%S zU)mD~u^=Wju0uC!Z1>}K$ftQ8cK(I_220t#$;@DdnsbJE76M1dH@-G+ivnYDzYpA^ zKc*l4PXM`1zX`@Ix_67@eoN~Yx9N|JGF-evpEdHet$(G=z}LaM^e{dy+@-U|4E*sf zO{Hh>>V_?k<18WHEQ*C(>F{EUUrNX?^-^CDi<70P+y!Pr;^(v*&i{@60M6f_+iR)6 H(_Z6$%l5rX diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 13c4a6bd2254755a80feb739b0c75612c14c5770..3d34dd8475cb25f31a56b75f67c15524b8806c70 100644 GIT binary patch delta 10272 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 delta 1868 zcmb7EO>7%g5Z12!HmTbr8z+vNwv??}$w}EZ|4DI6=zHtU#&I3Tj`Pzd7q{NTP7^1! z-PUatC8$E-fJ7uvM?x)y8wdnJ0`^d;f(CJ+hgJv#2MVYM6n=`@D+ico$8lQVz+raZ z&YL&$&G*f|tI+?|yTO$MW0$+fmb%9TG!e~ab&uI^erap-4TCT*9)trP5`e$15(1Tr zk^`<^!&S;d9GiR#odU7zw8IZ?<-|Js2yOSnPdB9CtAG4iYt1c6D*`C{Nm*?|n`G(? zqm-%v{xImIWda8gyYhmhf zN@MCIqXWYQWI7%4A-sMall1wD*@rSrO)~0(Us_3{ZTOrI!bgaEVFYu9=;#zH#vv4) zaxWtA^Q|;1rajKTeLUl6Z!sKwdH4vDs)PK2_;lU_#pX`*7s)bBJUcN_JchdlMW4Q2 zWg@j+1!-j*y^o`x*g%i%@uPm8E?8g)$p~X$g5_Ag72!0v+sUEIX|_>xmg%5$5tq%N zbMQkuX%JDL?oRR)40n=a)yA;`984U;Oudo3R97m*`jTAEAj5X}4FNxTZ7ZKuJM6T)5 z&alG3VQoH5of?E%NUPYT<^MhS;#u->wbox4#XS2XG@)59d&!!u{P1C_rG3*{{+d{t zJ4&p%qf+vDu_s=*IMCw;Wl@sxPi|S1YDGh{?#_|>0^E5 zKa-YiVy?&f`b8-sZo_{TsUG6P60q7{lJ?m^xk~J|z8tgeE=wytj;x;0)EJ%X^})mK zcsqE%6Su;>PlPH+-4dRL&@G|r%9<3g57B1B!rSOKn~;NJzf14i&oG*?wmy))w+o4- zwMP#+M}x0U2tmES#3FG*=esf%q)v#%p+07%w^3~JOg`V zdArixFrHGBv*~HClF6o%sY!J_)#z0Q(z7#39t~AH<=yaht?YqoE_plU(TXx-W)rh< zui`QEs0UAQU&4&V&2+}ATv9xv2eiRRPjvRQneup*EPpHWg*dqFl6Ttq8h&=k-@uJJ z*&{^Zew}<7K6lG4&{Qv%SMZdNBdyFIk35Ec-*~FKVKa6m9?QnON_0~Pkxd<_A2>VV zcD;NQz$NbvKheuTXmF#Mle6&)|EsV0#>3+&_|+x9Bu<-fzE0j_PfjQe&|fF-XlP1g zXQn-kjmo7$NkuW!>DjdMoRT&(2Q%4N_G~7KvcR2jhYR}L@-7jRAu|SCa?2fCVwrVu zAncZ1oF=yw*&$b#EzR$h(W#ebmoU3K<-c8wI-CK2@d&fF5 UU(+mFZ!FXd2$uLl&FhZ80n#=u9RL6T diff --git a/netbox/project-static/src/netbox.ts b/netbox/project-static/src/netbox.ts index 1ff0c9ecb..94ad562a9 100644 --- a/netbox/project-static/src/netbox.ts +++ b/netbox/project-static/src/netbox.ts @@ -8,6 +8,7 @@ import { initRackElevation } from './buttons'; import { initClipboard } from './clipboard'; import { initSearchBar, initInterfaceFilter } from './search'; import { initGenerateKeyPair, initLockUnlock, initGetSessionKey } from './secrets'; +import { initTableConfig } from './tableConfig'; import { getElements } from './util'; const INITIALIZERS = [ @@ -25,6 +26,7 @@ const INITIALIZERS = [ initLockUnlock, initGetSessionKey, initInterfaceFilter, + initTableConfig, ] as (() => void)[]; /** diff --git a/netbox/project-static/src/tableConfig.ts b/netbox/project-static/src/tableConfig.ts new file mode 100644 index 000000000..f2403b14f --- /dev/null +++ b/netbox/project-static/src/tableConfig.ts @@ -0,0 +1,115 @@ +import { createToast } from './toast'; +import { getElements, apiPatch, hasError, getSelectedOptions } from './util'; + +/** + * Mark each option element in the selected columns element as 'selected' so they are submitted to + * the API. + */ +function saveTableConfig() { + for (const element of getElements('select[name="columns"] option')) { + element.selected = true; + } +} + +/** + * Delete all selected columns, which reverts the user's preferences to the default column set. + */ +function resetTableConfig() { + for (const element of getElements('select[name="columns"]')) { + element.value = ''; + } +} + +/** + * Add columns to the table config select element. + */ +function addColumns(event: Event) { + for (const selectedOption of getElements('#id_available_columns > option')) { + if (selectedOption.selected) { + for (const selected of getElements('#id_columns')) { + selected.appendChild(selectedOption.cloneNode(true)); + } + selectedOption.remove(); + } + } + event.preventDefault(); +} + +/** + * Remove columns from the table config select element. + */ +function removeColumns(event: Event) { + for (const selectedOption of getElements('#id_columns > option')) { + if (selectedOption.selected) { + for (const available of getElements('#id_available_columns')) { + available.appendChild(selectedOption.cloneNode(true)); + } + selectedOption.remove(); + } + } + event.preventDefault(); +} + +/** + * Submit form configuration to the NetBox API. + */ +async function submitFormConfig(formConfig: Dict) { + return await apiPatch('/api/users/config/', formConfig); +} + +/** + * Handle table config form submission. Sends the selected columns to the NetBox API to update + * the user's table configuration preferences. + */ +function handleSubmit(event: Event) { + event.preventDefault(); + + const element = event.currentTarget as HTMLFormElement; + + // Get all the selected options from any select element in the form. + const options = getSelectedOptions(element); + + // Create an object mapping the select element's name to all selected options for that element. + const formData: Dict> = Object.assign( + {}, + ...options.map(opt => ({ [opt.name]: opt.options })), + ); + // Create an array from the dot-separated config path. E.g. tables.DevicePowerOutletTable becomes + // ['tables', 'DevicePowerOutletTable'] + const path = element.getAttribute('data-config-root')?.split('.') ?? []; + + // Create an object mapping the configuration path to the select element names, which contain the + // selection options. E.g. {tables: {DevicePowerOutletTable: {columns: ['label', 'type']}}} + const data = path.reduceRight>((value, key) => ({ [key]: value }), formData); + + // Submit the resulting object to the API to update the user's preferences for this table. + submitFormConfig(data).then(res => { + if (hasError(res)) { + const toast = createToast('danger', 'Error Updating Table Configuration', res.error); + toast.show(); + } else { + location.reload(); + } + }); +} + +/** + * Initialize table configuration elements. + */ +export function initTableConfig() { + for (const element of getElements('#save_tableconfig')) { + element.addEventListener('click', saveTableConfig); + } + for (const element of getElements('#reset_tableconfig')) { + element.addEventListener('click', resetTableConfig); + } + for (const element of getElements('#add_columns')) { + element.addEventListener('click', addColumns); + } + for (const element of getElements('#remove_columns')) { + element.addEventListener('click', removeColumns); + } + for (const element of getElements('form.userconfigform')) { + element.addEventListener('submit', handleSubmit); + } +} diff --git a/netbox/templates/dcim/device/consoleports.html b/netbox/templates/dcim/device/consoleports.html index 5214047e6..b74c6a84a 100644 --- a/netbox/templates/dcim/device/consoleports.html +++ b/netbox/templates/dcim/device/consoleports.html @@ -52,5 +52,4 @@ {% block javascript %} - {% endblock %} diff --git a/netbox/templates/dcim/device/consoleserverports.html b/netbox/templates/dcim/device/consoleserverports.html index de53184f9..a09b4b1ad 100644 --- a/netbox/templates/dcim/device/consoleserverports.html +++ b/netbox/templates/dcim/device/consoleserverports.html @@ -52,5 +52,4 @@ {% block javascript %} - {% endblock %} diff --git a/netbox/templates/dcim/device/devicebays.html b/netbox/templates/dcim/device/devicebays.html index 7af01a9c6..b36473f2c 100644 --- a/netbox/templates/dcim/device/devicebays.html +++ b/netbox/templates/dcim/device/devicebays.html @@ -46,7 +46,3 @@ {% include 'inc/paginator.html' with paginator=devicebay_table.paginator page=devicebay_table.page %} {% table_config_form devicebay_table %} {% endblock %} - -{% block javascript %} - -{% endblock %} diff --git a/netbox/templates/dcim/device/frontports.html b/netbox/templates/dcim/device/frontports.html index dd6c54e57..eed0d1f79 100644 --- a/netbox/templates/dcim/device/frontports.html +++ b/netbox/templates/dcim/device/frontports.html @@ -52,5 +52,4 @@ {% block javascript %} - {% endblock %} diff --git a/netbox/templates/dcim/device/interfaces.html b/netbox/templates/dcim/device/interfaces.html index 7913782e8..dbf26fb85 100644 --- a/netbox/templates/dcim/device/interfaces.html +++ b/netbox/templates/dcim/device/interfaces.html @@ -56,5 +56,4 @@ {% block javascript %} - {% endblock %} diff --git a/netbox/templates/dcim/device/inventory.html b/netbox/templates/dcim/device/inventory.html index e328aa6d3..992ce93a0 100644 --- a/netbox/templates/dcim/device/inventory.html +++ b/netbox/templates/dcim/device/inventory.html @@ -47,6 +47,3 @@ {% table_config_form inventoryitem_table %} {% endblock %} -{% block javascript %} - -{% endblock %} diff --git a/netbox/templates/dcim/device/poweroutlets.html b/netbox/templates/dcim/device/poweroutlets.html index 5656c4f3a..6a28513bf 100644 --- a/netbox/templates/dcim/device/poweroutlets.html +++ b/netbox/templates/dcim/device/poweroutlets.html @@ -52,5 +52,4 @@ {% block javascript %} - {% endblock %} diff --git a/netbox/templates/dcim/device/powerports.html b/netbox/templates/dcim/device/powerports.html index bc0bd3350..352691dcf 100644 --- a/netbox/templates/dcim/device/powerports.html +++ b/netbox/templates/dcim/device/powerports.html @@ -52,5 +52,4 @@ {% block javascript %} - {% endblock %} diff --git a/netbox/templates/dcim/device/rearports.html b/netbox/templates/dcim/device/rearports.html index 25c2415ad..35aec0b14 100644 --- a/netbox/templates/dcim/device/rearports.html +++ b/netbox/templates/dcim/device/rearports.html @@ -52,5 +52,4 @@ {% block javascript %} - {% endblock %} diff --git a/netbox/templates/generic/object_list.html b/netbox/templates/generic/object_list.html index d94de4e04..28d136e63 100644 --- a/netbox/templates/generic/object_list.html +++ b/netbox/templates/generic/object_list.html @@ -99,7 +99,3 @@ {% table_config_form table table_name="ObjectTable" %} {% endblock %} - -{% block javascript %} - -{% endblock %} diff --git a/netbox/templates/virtualization/virtualmachine.html b/netbox/templates/virtualization/virtualmachine.html index 953bd481e..4df6f156f 100644 --- a/netbox/templates/virtualization/virtualmachine.html +++ b/netbox/templates/virtualization/virtualmachine.html @@ -212,7 +212,3 @@ {% include 'secrets/inc/private_key_modal.html' %} {% endblock %} - -{% block javascript %} - -{% endblock %} diff --git a/netbox/templates/virtualization/virtualmachine/interfaces.html b/netbox/templates/virtualization/virtualmachine/interfaces.html index dd85f5541..269fc32bc 100644 --- a/netbox/templates/virtualization/virtualmachine/interfaces.html +++ b/netbox/templates/virtualization/virtualmachine/interfaces.html @@ -51,5 +51,4 @@ {% block javascript %} - {% endblock %}