From 86ada33577786140899c28792c8c26fc68d599c5 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 24 Nov 2021 13:58:57 -0500 Subject: [PATCH 01/11] PRVB --- docs/release-notes/version-3.0.md | 4 ++++ netbox/netbox/settings.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index f76869f6e..f7fbe06ab 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -1,5 +1,9 @@ # NetBox v3.0 +## v3.0.12 (FUTURE) + +--- + ## v3.0.11 (2021-11-24) ### Enhancements diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 8538c1d36..7c205cca4 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -17,7 +17,7 @@ from django.core.validators import URLValidator # Environment setup # -VERSION = '3.0.11' +VERSION = '3.0.12-dev' # Hostname HOSTNAME = platform.node() From 8bb0cba949ca6fd4fe3d48b1cec0153ab1ae4817 Mon Sep 17 00:00:00 2001 From: kkthxbye <> Date: Thu, 25 Nov 2021 08:09:50 +0100 Subject: [PATCH 02/11] Fix #7751 - LDAP: Only get API user from ldap when FIND_GROUP_PERMS is enabled --- netbox/netbox/api/authentication.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/netbox/netbox/api/authentication.py b/netbox/netbox/api/authentication.py index 7f8bee318..5e177bfcb 100644 --- a/netbox/netbox/api/authentication.py +++ b/netbox/netbox/api/authentication.py @@ -29,10 +29,13 @@ class TokenAuthentication(authentication.TokenAuthentication): if settings.REMOTE_AUTH_BACKEND == 'netbox.authentication.LDAPBackend': from netbox.authentication import LDAPBackend ldap_backend = LDAPBackend() - user = ldap_backend.populate_user(token.user.username) - # If the user is found in the LDAP directory use it, if not fallback to the local user - if user: - return user, token + + # Load from LDAP if FIND_GROUP_PERMS is active + if ldap_backend.settings.FIND_GROUP_PERMS: + user = ldap_backend.populate_user(token.user.username) + # If the user is found in the LDAP directory use it, if not fallback to the local user + if user: + return user, token return token.user, token From a0b9ac7bcc195a5cd8e5577a0dff16cb51d9775f Mon Sep 17 00:00:00 2001 From: kkthxbye <> Date: Thu, 25 Nov 2021 12:14:07 +0100 Subject: [PATCH 03/11] UI: Improve performance of the quick filter --- netbox/project-static/dist/netbox.js | Bin 322534 -> 322575 bytes netbox/project-static/dist/netbox.js.map | Bin 310793 -> 310863 bytes netbox/project-static/src/search.ts | 22 ++++++++++++++++------ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 6a60ff56def395459f1244adc618e97ed9a518a2..b8567f0606eb5fb62dc8f125a33623f5466bf28c 100644 GIT binary patch delta 204 zcmaEMUAX^-a6=1Y3)2>6=WDV$DYntE)@k`g8ab&Y3Z)A9X$qN|)gX3`ZRvEGE6gVK zIf}Nnd8IiyYHAueddV57$=RtXwu*+Da9z0|U8(6BrJ9 f7hk~0JKbO}3nydgwCl{0?NZm7w@Y1TIU@o9Lia`2 delta 92 zcmV-i0Hgnp*c0a06M%#PgaWh!L)MoB)B|Ogt=0nw4QwE9W*}u}C}b%qX=az7)B_g; yDJgqoml2==6PF;@0|*Q|Vsd3+Ykg&Gb7dfx{L}*(mlo9nu!r&21Gn+l1RfMlUn58W diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index ba7d8cd2f7dca3b93a9f961f1393011110461af4..c2e1c5b4f3d06367327002e48c1995cdd2b4b000 100644 GIT binary patch delta 169 zcmeDDBXs_cP(ur23)2?n=Xdzr^__KG9UTpvb=)0YGp2LhW)7NeeV5rV$F%?~5vk+t z=;#fUbk1_p@ptt10}_tmAVGhSV1|>9qoboI$cRXtKu5ga6g1QPVr33YS~ s1?lkzvRsRh1%WC(b;2D@opYwoyUQHOXf*xDUFKj$ = []; + for (const row of rows) { // Find the row's checkbox and deselect it, so that it is not accidentally included in form // submissions. @@ -114,19 +117,26 @@ function initTableFilter(): void { if (checkBox !== null) { checkBox.checked = false; } + // Iterate through each row's cell values for (const value of getRowValues(row)) { if (filter.test(value.toLowerCase())) { - // If this row matches the search pattern, but is already hidden, unhide it and stop - // iterating through the rest of the cells. - row.classList.remove('d-none'); + // If this row matches the search pattern, add it to the list. + matchedRows.push(row); break; - } else { - // If none of the cells in this row match the search pattern, hide the row. - row.classList.add('d-none'); } } } + + // Iterate the rows again to set visibility. + // This results in a single reflow instead of one for each row. + for (const row of rows) { + if (matchedRows.indexOf(row) >= 0) { + row.classList.remove('d-none'); + } else { + row.classList.add('d-none'); + } + } } input.addEventListener('keyup', debounce(handleInput, 300)); } From bbdd3804c71bf9f6226c1cee03091559b220d604 Mon Sep 17 00:00:00 2001 From: bluikko <14869000+bluikko@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:06:52 +0700 Subject: [PATCH 04/11] Add multistandard ITA power outlet type --- netbox/dcim/choices.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index 36eb24c96..3616a8e68 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -552,6 +552,7 @@ class PowerOutletTypeChoices(ChoiceSet): TYPE_ITA_M = 'ita-m' TYPE_ITA_N = 'ita-n' TYPE_ITA_O = 'ita-o' + TYPE_ITA_MULTISTANDARD = 'ita-multistandard' # USB TYPE_USB_A = 'usb-a' TYPE_USB_MICROB = 'usb-micro-b' @@ -651,6 +652,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_ITA_M, 'ITA Type M (BS 546)'), (TYPE_ITA_N, 'ITA Type N'), (TYPE_ITA_O, 'ITA Type O'), + (TYPE_ITA_MULTISTANDARD, 'ITA Multistandard'), )), ('USB', ( (TYPE_USB_A, 'USB Type A'), From 83010e278c3046a48368f2c5d7ca6bd3ee38e8ff Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 1 Dec 2021 09:18:31 -0500 Subject: [PATCH 05/11] Add changelog for #7932, #7941 --- docs/release-notes/version-3.0.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index f7fbe06ab..ab32ea434 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -2,6 +2,11 @@ ## v3.0.12 (FUTURE) +### Enhancements + +* [#7932](https://github.com/netbox-community/netbox/issues/7932) - Improve performance of the "quick find" function +* [#7941](https://github.com/netbox-community/netbox/issues/7941) - Add multi-standard ITA power outlet type + --- ## v3.0.11 (2021-11-24) From f1466d6da36a97c37a2df6f3615b8e17fa8e9245 Mon Sep 17 00:00:00 2001 From: Rhys Barrie Date: Thu, 2 Dec 2021 12:27:30 -0500 Subject: [PATCH 06/11] netbox-community/netbox#7885: Linkify VLAN name in VLAN tables --- netbox/ipam/tables/vlans.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/netbox/ipam/tables/vlans.py b/netbox/ipam/tables/vlans.py index ffa6c5f40..a9e3dd48b 100644 --- a/netbox/ipam/tables/vlans.py +++ b/netbox/ipam/tables/vlans.py @@ -95,6 +95,9 @@ class VLANTable(BaseTable): template_code=VLAN_LINK, verbose_name='VID' ) + name = tables.Column( + linkify=True + ) site = tables.Column( linkify=True ) From 1377eda0bafa0d3f3ddb81010edb90480c71bad1 Mon Sep 17 00:00:00 2001 From: Jonathan Senecal Date: Fri, 3 Dec 2021 09:43:42 -0500 Subject: [PATCH 07/11] Add support for L22-30P power port type (#7915) * Add support for L22-30P power port type Fixes #7892 * Add support for L22-30R power outlet type --- netbox/dcim/choices.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index 3616a8e68..d77a51c05 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -312,6 +312,7 @@ class PowerPortTypeChoices(ChoiceSet): TYPE_NEMA_L1560P = 'nema-l15-60p' TYPE_NEMA_L2120P = 'nema-l21-20p' TYPE_NEMA_L2130P = 'nema-l21-30p' + TYPE_NEMA_L2230P = 'nema-l22-30p' # California style TYPE_CS6361C = 'cs6361c' TYPE_CS6365C = 'cs6365c' @@ -417,6 +418,7 @@ class PowerPortTypeChoices(ChoiceSet): (TYPE_NEMA_L1560P, 'NEMA L15-60P'), (TYPE_NEMA_L2120P, 'NEMA L21-20P'), (TYPE_NEMA_L2130P, 'NEMA L21-30P'), + (TYPE_NEMA_L2230P, 'NEMA L22-30P'), )), ('California Style', ( (TYPE_CS6361C, 'CS6361C'), @@ -533,6 +535,7 @@ class PowerOutletTypeChoices(ChoiceSet): TYPE_NEMA_L1560R = 'nema-l15-60r' TYPE_NEMA_L2120R = 'nema-l21-20r' TYPE_NEMA_L2130R = 'nema-l21-30r' + TYPE_NEMA_L2230R = 'nema-l22-30r' # California style TYPE_CS6360C = 'CS6360C' TYPE_CS6364C = 'CS6364C' @@ -631,6 +634,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_NEMA_L1560R, 'NEMA L15-60R'), (TYPE_NEMA_L2120R, 'NEMA L21-20R'), (TYPE_NEMA_L2130R, 'NEMA L21-30R'), + (TYPE_NEMA_L2230R, 'NEMA L22-30R'), )), ('California Style', ( (TYPE_CS6360C, 'CS6360C'), From 97f0414ff301ce24bfbca33f9043e0dbcdba2a10 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 3 Dec 2021 09:51:05 -0500 Subject: [PATCH 08/11] Changelog for #7751, #7885, #7892 --- docs/release-notes/version-3.0.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index ab32ea434..b84f2a3c0 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -4,6 +4,9 @@ ### Enhancements +* [#7751](https://github.com/netbox-community/netbox/issues/7751) - Get API user from LDAP only when `FIND_GROUP_PERMS` is enabled +* [#7885](https://github.com/netbox-community/netbox/issues/7885) - Linkify VLAN name in VLANs table +* [#7892](https://github.com/netbox-community/netbox/issues/7892) - Add L22-30 power port & outlet types * [#7932](https://github.com/netbox-community/netbox/issues/7932) - Improve performance of the "quick find" function * [#7941](https://github.com/netbox-community/netbox/issues/7941) - Add multi-standard ITA power outlet type From 7cb9cedfe1335b00307145312edf73852c8a6444 Mon Sep 17 00:00:00 2001 From: thatmattlove Date: Fri, 3 Dec 2021 16:20:05 -0700 Subject: [PATCH 09/11] Fixes #7823: Properly handle return_url when Save & Continue button is present --- docs/release-notes/version-3.0.md | 1 + netbox/project-static/dist/netbox.js | Bin 322575 -> 322806 bytes netbox/project-static/dist/netbox.js.map | Bin 310863 -> 311094 bytes netbox/project-static/src/forms/elements.ts | 40 +++++++++++++++++- netbox/templates/dcim/interface_edit.html | 2 +- .../virtualization/vminterface_edit.html | 2 +- 6 files changed, 42 insertions(+), 3 deletions(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index b84f2a3c0..9be270999 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -5,6 +5,7 @@ ### Enhancements * [#7751](https://github.com/netbox-community/netbox/issues/7751) - Get API user from LDAP only when `FIND_GROUP_PERMS` is enabled +* [#7823](https://github.com/netbox-community/netbox/issues/7823) - Fix issue where `return_url` is not honored when 'Save & Continue' button is present * [#7885](https://github.com/netbox-community/netbox/issues/7885) - Linkify VLAN name in VLANs table * [#7892](https://github.com/netbox-community/netbox/issues/7892) - Add L22-30 power port & outlet types * [#7932](https://github.com/netbox-community/netbox/issues/7932) - Improve performance of the "quick find" function diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index b8567f0606eb5fb62dc8f125a33623f5466bf28c..c4a8e802d42c5888f200c459000fc7cbadd2e2b8 100644 GIT binary patch delta 5490 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 delta 5384 zcmai2d3Y36w*St(m0i|sBrzcgA#_U-5SX_N z$W=G^ABSu;KVTs&RF4J}1ljGpb1aBC{)9Oa-c!03W@}nsdnFU3|iFGA@dC0&~=v z!>eJox@-7{@UXgOL@t!5S4S*@9MwK@HO$bijr0MStNmASCWIB(`K%fvj7631SgA

Rsag^UCh&4%dvchNJoBCbM>nPhldJ8^F zV;4iK`fjWXYSbBVjZmu|i0guSEjd0OhBoK%1$R}8>Vh$&QKDx|W{~JHNo~BxoR}!8 zZ;Tm(>HKbt1)9{PgiZKtnua0uD&q-2gp~S;tTvFw~?(3?MJ?XaG800hnivuQ=JpLI9nc{Wem8s zVnI^LAdOh)DCua+~ms$f?Jcz!y58DL?z$9rN0+GPKUfwlx~I*oHHmI>>a1du zIn{Vqk3aa1pHyr3itw6xC{W7dMXyOwEqf>e4YWSA89KFLsWAX^v?R+GK%kvV`zr#? zDSVAUD@$JoIoen0X~50M<7?FxYnYZXo#$Y#>a-%LG}U?@pg@~1EhAG(^Z2&Ay-^k7jNc^>V>XuOHqB9s0L?G1zEFYHv*>=^6iEN_42F*2)fBR z>kxFW=Up^{eAXTsM4;^`GN#>6!NZSBYsyi)_l17NvVvm z$}aODtkmQ4_Ct~8DnH5jv=#D2&1%JlP&KD&8s>0K)$5#3aUq}KozzqwzSy-L`r6H3Ky>KZTDBNwambn#<*_{%_!tsyta*E7Pax7Iv`@D zy1^2x_9-nOY7wn%pndH`Eo0jM4v?wd>KKc*V>^c!?Ix+~Ci0A1oPh()(Vb}2^ZF$k zGFX>Z`6K%JR(1mRsQ6X6h?nM70|rnYT(cg5a(2y&J|zu&Zj%v_wq|Xn4|bzBH*6(P zpf23#B(oZ{Ya8>yPiivKCaWpEA;Y9hA-7VgPpWNnx!kye#l1U0{4@Iy?R~^v4FtQk zeaBz?xV#iTU;Xw%p4R))3g8M;_zWC{s4)j7YL&a5^Wz#)_)KF)i#hOSILy?(xeyl1 zwWRRYyKFgMM+U`prtpjEytu5pg9sttX1P;EvH99#KhFn5`;D7V_~f9KI&Uaze+e|w zz;3O@1SS0YF?4R{zg-Y2+7J!hchF$1Gs2poP5d8ZlP&hN!a*l3_VMG*U5;9lBovm}%Xy`vS$5UNN`er72g31*iIS}bM%nvM}S?e^+hyBoG*LQH$0*T_}>K6o%nGV>XVsai3mnE7P0ITZ)D5HqtXI+`{YM@C zX2={o3<_@f_#+@2+1+py`cUIT$6y`7>2oJwyAP2BRxkj;Z0RX@0Y!d!4JNRX(=Y{n zU40t9Bry)z6z_7{E8QMB)8(vn;7QbdCxf^f8_vRC2}LIMQ5tSu{snjwMMu95DG(^d zd5aYj!%8p0N*~cB)F|xuMHs^Z-hdNSbeY+Pb_mfwd;`uTO@YsiWiojT>+O7hyiO1#PyC*+mhb%E)@F=qDTMwI&edV-*!5)zS3DI53m90K##bg-MfBy{)#g%3~^-Aeqzc zW|qgPEUC?dDeC#m^tg?qh zvB(}W4Rx0G5bPC$I=h#VWUry+x))F-baett+Ty<{3@j&*HDworf4n*lgk{sP&CllrZlWFw4}s_)dfrBPO5or0)8yPNbF`HS02zB7Cd*-!2> zoSgQu;Rjp#GReTzS6?Q%KDavU5GnMdQkKA4&eKT3i>#-gOuTJ0+c48lN{p(qpCrSK zLu0`J*%yc|j<`hdVy=I9iQxUg>!PUte1+`r$HA8Cq!EeV2V^R;O#gsf3Pj0~Uy!ed zApQMEvU4QP@ARkFjObS0Lk+YYy@%E#Nf<(VkmQzxszf2{0O?<$YI>Q zG>o-`P;3$U>JZ8sJEBL@WF%ii(m6<`N6{!G^P=d~NHM9|EiW>;_=Oebq*|9dtFpS@ zym5mPFI+ky3@Qpx#kaBRdniDjeMlcu~I^P4nOmOj+h= z`U}bku@o;ry<$8=$CXCD7f* zE`2|iuD_eWfpN6JIK)OJ(+6;o<)_eRz@`5yg{Bc`)%huOvwyIZAxxaFR4ra4yA?-u zW#dHLv-i?y9r8~X=z5c6d_`5c+%>XWbhQ^bI^|UFRJF^g$WG<%9J?vdi|G15I*mn} zpQlr!>#&>CX+b0kl=7YU(Zv5>DZM&_CWb?kzIrZ=H8x{sDUC$2fl_o;WVL0~DAK9( zXcLm>=h6F+T$+b5ima-fE=BTjIW^FcKc6DT*;n(a(aRT9P`i8PLp zNin&S;1#O_X67e|QH3I3tW}0WH z3Ef6bMx#Q`jA7trJ$va<6inMkGtlUgeH5$NtvBiP4AD;?p{D_ytYrrm!uFlvIQHW) zS{c%8GdXy?g>?UMIyk&M`tsxSf-f|&yi;^9lHX3z3sA>4oT2sz$$_^*a~GCmnan%O z1;rvdOiuj%VUq{wcv$4+8ug!Cykn40W({X(6bm^^N3nCKX#qNHJ43B({s1lb|79$w z-F}vaLzO{7BPLWfHpZuR*i2?im0PY{XsNFB$no*1b$ahvN`Pe9*!Jfz;yvfEaw^#T z^K>j5f1XZaPoAS8EaE&JsXua_j`M*ww)0K82a5I5w`eescCTD8TYib&9A07Li)?(B zjc>E@?KZxct-g$)%3wP$)8{emg;!_~$s9EF#TD8ToMAILc^R{M_sF%eJ%6XM`r5Z? z909A2gEZooY2&Rn-p0Otk1~>LQy2W2!1i3llr;3dPw$6p_Q3n}30TNZy-!zxo#kDl zOCXP3yhhuhkV)6+MwrR2U8mWQt&jbH2KXZD#82o{WJNNXt;7fN_kBVukw4&5S_BQO z{8O3;GxZgpQUL;6jO)E|-BQ@at2CT_e1p!1T$b?}ePC#UcWv;N)xsYA3`0)PpZ|=W zUdxVqxHz`f!=)h1PIx%Hqr2I6i?}*)_ip2&Sz8--0_N%uv~y`>h-CbF@q#6`QefMc zkx+eOCx_+WW;eRHhhQ!ny_g%1IL%qiT^)jS>}oDB5NYy8ZWAij2N*ZP=qc|#i3V^y zeGAu*^x!rwDu@)=SigrG&C>cfE3Pf;<8I)`m|pi1SKvct+1Qc2+y#TK+{aB~QGMJ! zZ0>$8mfhHgx@0|fKPLexwXsbva~u3*D}vbE&Gzo&!q}!0+%Q(CagCs`evOM6;j{|z zHb-5(5}WI)k>hy>`$prYV-yn)a1+4A$`5eK;9-9{z%9pH&4^dHC~)c%Uf~)b%w^?0 z)^f9Kd`sO$L?zpOklO@}28m~~&ZYXhWlU9KqMP;U+{)oNQg9S^cQ*YHw-u^c%SkSn zCBMW4u%8ZbNl?kg9_EtAG+NCTZ2u=@U{+75Fu`o!a0DL}oBT=nZM0z{-sq;0~dx z_XoI4R26fE6WG-OE}Xf~pwj3ww;R+X6!_!}cQgvJ*fXDSA0b)#DR<1rn+}$81otTa rZR*FGk8wV1)OHl_xWPS4Dy*#REd>8Z*Kqpg4K52R^z_fTL%#nDy89IP diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index c2e1c5b4f3d06367327002e48c1995cdd2b4b000..b95e6ba02e8321339453db43dad5d8056abef060 100644 GIT binary patch delta 260 zcmX^AM`+tWp@tU57N#xCtB%&^C7L?vL^?X=I_tPPI#xRAI6FEUy6Ct&I{Jc$P>`sv zj=!UGi4%zL3E~IpggQD#>I8$Nfyy(S;mU)7(#|0uH6WIwzfPi~W1>#7qqDgagbx<< zc62Uq(s2Ztrt1k(>I*UxXnL@Yr=v5_JwT>6&`z)+&M6?B-a6rq-Vxi^9c3K9sVl_gyR>lK%0RmG + * Save & Continue + * + * ``` + * + * @param event Click event. + */ +function handleSubmitWithReturnUrl(event: MouseEvent): void { + const element = event.target as HTMLElement; + if (element.tagName === 'BUTTON') { + const button = element as HTMLButtonElement; + const action = button.getAttribute('return-url'); + const form = button.form; + if (form !== null && isTruthy(action)) { + form.action = action; + form.submit(); + } + } +} function handleFormSubmit(event: Event, form: HTMLFormElement): void { // Track the names of each invalid field. @@ -38,6 +66,15 @@ function handleFormSubmit(event: Event, form: HTMLFormElement): void { } } +/** + * Attach event listeners to form buttons with the `return-url` attribute present. + */ +function initReturnUrlSubmitButtons(): void { + for (const button of getElements('button[return-url]')) { + button.addEventListener('click', handleSubmitWithReturnUrl); + } +} + /** * Attach an event listener to each form's submitter (button[type=submit]). When called, the * callback checks the validity of each form field and adds the appropriate Bootstrap CSS class @@ -54,4 +91,5 @@ export function initFormElements(): void { submitter.addEventListener('click', (event: Event) => handleFormSubmit(event, form)); } } + initReturnUrlSubmitButtons(); } diff --git a/netbox/templates/dcim/interface_edit.html b/netbox/templates/dcim/interface_edit.html index 38b22fe5e..317b49a79 100644 --- a/netbox/templates/dcim/interface_edit.html +++ b/netbox/templates/dcim/interface_edit.html @@ -51,7 +51,7 @@ {% block buttons %} Cancel {% if obj.pk %} - + {% else %} diff --git a/netbox/templates/virtualization/vminterface_edit.html b/netbox/templates/virtualization/vminterface_edit.html index b4d097513..7e5b8599c 100644 --- a/netbox/templates/virtualization/vminterface_edit.html +++ b/netbox/templates/virtualization/vminterface_edit.html @@ -46,7 +46,7 @@ {% block buttons %} Cancel {% if obj.pk %} - + {% else %} From 40c6b172f747b1f9cd983a637a96908cb530bd11 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 6 Dec 2021 11:33:00 -0500 Subject: [PATCH 10/11] Fixes #7981: Fix Markdown sanitization regex --- docs/release-notes/version-3.0.md | 6 +++++- netbox/utilities/templatetags/helpers.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index 9be270999..41b366bf2 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -5,12 +5,16 @@ ### Enhancements * [#7751](https://github.com/netbox-community/netbox/issues/7751) - Get API user from LDAP only when `FIND_GROUP_PERMS` is enabled -* [#7823](https://github.com/netbox-community/netbox/issues/7823) - Fix issue where `return_url` is not honored when 'Save & Continue' button is present * [#7885](https://github.com/netbox-community/netbox/issues/7885) - Linkify VLAN name in VLANs table * [#7892](https://github.com/netbox-community/netbox/issues/7892) - Add L22-30 power port & outlet types * [#7932](https://github.com/netbox-community/netbox/issues/7932) - Improve performance of the "quick find" function * [#7941](https://github.com/netbox-community/netbox/issues/7941) - Add multi-standard ITA power outlet type +### Bug Fixes + +* [#7823](https://github.com/netbox-community/netbox/issues/7823) - Fix issue where `return_url` is not honored when 'Save & Continue' button is present +* [#7981](https://github.com/netbox-community/netbox/issues/7981) - Fix Markdown sanitization regex + --- ## v3.0.11 (2021-11-24) diff --git a/netbox/utilities/templatetags/helpers.py b/netbox/utilities/templatetags/helpers.py index 0f3f75bc2..3064cdf38 100644 --- a/netbox/utilities/templatetags/helpers.py +++ b/netbox/utilities/templatetags/helpers.py @@ -51,7 +51,7 @@ def render_markdown(value): value = re.sub(pattern, '[\\1](\\3)', value, flags=re.IGNORECASE) # Sanitize Markdown reference links - pattern = fr'\[(.+)\]:\w?(?!({schemes})).*:(.+)' + pattern = fr'\[(.+)\]:\s*(?!({schemes}))\w*:(.+)' value = re.sub(pattern, '[\\1]: \\3', value, flags=re.IGNORECASE) # Render Markdown From dc6decd404e2d128eeb70161e9b2b34461db9bee Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Mon, 6 Dec 2021 11:54:50 -0500 Subject: [PATCH 11/11] Release v3.0.12 --- .github/ISSUE_TEMPLATE/bug_report.yaml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yaml | 2 +- docs/release-notes/version-3.0.md | 2 +- netbox/netbox/settings.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 4a6dba734..b041c7ff4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v3.0.11 + placeholder: v3.0.12 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 4c3ab0277..0852b4f9b 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v3.0.11 + placeholder: v3.0.12 validations: required: true - type: dropdown diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index 41b366bf2..51ad02395 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -1,6 +1,6 @@ # NetBox v3.0 -## v3.0.12 (FUTURE) +## v3.0.12 (2021-12-06) ### Enhancements diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 7c205cca4..64869fab0 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -17,7 +17,7 @@ from django.core.validators import URLValidator # Environment setup # -VERSION = '3.0.12-dev' +VERSION = '3.0.12' # Hostname HOSTNAME = platform.node()