From 11f7e3099d603f0391e51a14ee2d172f9c70ee4c Mon Sep 17 00:00:00 2001 From: CroogQT Date: Thu, 5 May 2022 15:01:40 -0700 Subject: [PATCH] fixed text deselection and refactor --- netbox/project-static/dist/netbox.js | Bin 376041 -> 376078 bytes netbox/project-static/dist/netbox.js.map | Bin 345447 -> 345520 bytes .../src/buttons/selectMultiple.ts | 52 +++++++++--------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index b7095fa78873efc9370ca09754b6e9cf3b8641cb..ce2e0efd2ede7b7f41e1b1837cc1373283e0cee2 100644 GIT binary patch delta 1655 zcmaizdr(wW9LMLoyGLn!G?gw+BC*oQu5&YSv>By!1Vuy^L|9*#@p6}iyL&IY?5>ZM z)D%GxMGwnCAS^SbNRh63H7B3VsF{{&Qa&J`X}-&5vYDFBBG&jGg;(D}fF9oUo(4|O&LP)Kh!t%0n}+xR?CqLja% z1?18zANb&;GdEG>D|a>p0lV_<<_5q)BeyUV)7@KI;G%h3y(pmVTV?oZQgbx&6tP*< zVu8}$GDm|%I%>NQ*|cSQF*0dHYZ>M#n_3fr`Sj+FN3bfF+LD2I8l!B1g`QHrzyxLW z&KMw7*}1C|y^>>vVpnMU#V)>mJ>3!1(LL(h5S8#fZXlhm+?&Ix{<4>Zs6P074yT&7 z?^6wN#|l;#TNjD`wBP<^WKyg!r8{if&oEI*KA_id#5so+Uu?TcQT>q< zoaU7ysYp_Wf0?J{IO)-Sm`tY}i{>;-jx`}mdGWXj#O4;Hg02?Iw6Ds*xn4NYN+h=+ zKlw{Hf8EIeFFzSXq4M&nsUWgj$m^~s`=&}qO58$bcPyN}2a@X+tlja*a}65g({F!p z!l#&jT*~Rw1LqfV_+u_m4*%4JMz|F5;s9{^%P(E!+#MYOaNyTEWn?SXpWXl`UU}Ki ziEFNWq~*k$uh+p!<8Rbp3O#q@7{=3$KmUe!h2ET~<@C?rUd!nh-C4rv)7y6sBU#yg zFO%p*w-8U;?&+0*k5&*}x?2#tqJ57?>yV-R{+BllMQTwG)b)g0)%L~OzDQDO1U>;~ zvayj!LzY?#9+WSc+^${&JdKS%VKa*gIty~6n;3>_Mxx=KGiH>b|2l0 z1RLz{B|1)}v6(sRhwNR_*oZ$1g{DpaJ~R zsDTD;`_!<)h2{*8F~h;+d)of0d{=uIaH%8iYc2fjtBW6MGlqm&6G9rlJ*3f>-w)TR z_rpn+>p6d}C(0|u8NKY`IfM@~naz^V>0GqPD-HA5T(aL5?{sG5N(HtOqlqP#kui$} zNiqeTHgA+iG8g?1xPnazgbLxvb-X;{9)mM_}onz?27r%8}Q z0^2iUQ{aiA$L95Uq|#6@oa>&}JS~soR;9c}mxK3z9ZE|}?LH~rTgcZ}z!sH}HzN#u zAtjDNyEnzQ!1SbB95+l%G@1l)_iF1iYNfJB~?{8w;R*+&tS61SMUb#5kBNyiu zTGO>b;KsIZt zAghqaOe@JC_|>G9WHEXtibA$H$7GX?UWtj7EC&HL-UwDU)^3sqBXFx@79tucD9-fV&-bXFrFEz zNd$XX%{}AQ@7IxKTDBob!kHW-L)oPuw{H!SVO-Y{B$K!#rj{&;fQ2=GMjpbV)+w$Qbl&CibSz%yNCs;YV2;Zr^i2ocWmzf delta 1606 zcmZXTdr(wW9LMLoyGNPPXfj=xKmu`)b#4xrHlxlu0`+a}k-<;1m zck2`F?Z?`V`SnPU7u3HB#M4#VlaVC1Z(ju1=>zJ*o7B>fiAZ|3p&v_Vo!f@#6pbkp z$_j*-Je_`_D<+SIw@#(yjgeSRk2M}d8WmYAQsrLe2dtz6O~(*Jn|5SiDgA3l4_3&X zJJW!-s8>rc5~A7+517@+ zmIvBat58bk9x8%?wjHt|gZj5uAX(nsZUENN;f_Zrk*{<{15tE_yblrdocsl1<@dT~ z0E^|W?jcNw3m0sKp5xmJ`SG>1!>yq`${Iw=K0S88Ot&1#4fjqm+b zMGC@<NY?fGKqH(M`l2E-V`hJC8C%%F%sV6-S(TycA`0@c1Cd+1;OsRH{93hSR)$ zA`UTf*q7OAj+373#R|IYR4}LMJk^RsdD3YeNP4&+<~|)Er+!rd&h^rnb|TpY>u8ql z{d$N4-h9>#hy2R9M38*DkUiE>@lCCUSnWdcSS)-$0^+m_DP!@Ri_I!n=(j&wkR$7V z+Q{kCzQHmMfBq%P;h($I0-J2U>BsZ0Fm))+YX14*$ARRzGB*m$^7T2ay5g0D#g{T z9!T_ZlIk(M zr9g`qXf*{|MV*T)EF$l5jPALN_lN0Rqxw;sa!(Le&ZT4JkPzN9D<{vGV>YhUi_f+? z;i;GSKd(ui;m?_sv(PGHV?)vK3v(JR#vI8hWjUm2g2A8@xT90D+7cXATUKtCly4P7 zbwZ&zR1^ghFEj4~O@R0FUF=8|NqH&Pte+N}pPMHI##z@IrwPR@pqeZ~Hp{3cVJKyF z)nqmd>_jzr7sV`o3z>>s#j=I0hi|D_Fql{CjAE!H>dH+;Vvc8SUVX z4VljRYRC<4xaU36s#<4e;T>cOo3&9hj;*OB;mBZhwIuB2WV7xWYstfU)jH)uEeTe! zh+3j$6YI!4q_8J-#Ghr?5ylL4WGd6vbLS}KNj=%5MhWY4b7g~@%w*+m;=_J$lh@c$ zPtLcIyv}v8jbwvABG}o_$U{UZeKOGkvFu_O>EcUGH+dV2*>E>0#9}4wFzFfhFCOe! AJpcdz diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 61469e070456ceeedee6d1878b86d8a63390bc29..9814304071db1bcd00884cef28580bc2cee1a997 100644 GIT binary patch delta 312 zcmX9(yH3ME5EPI50E!eKglr4CZ7jqi6`EZ;Ckr{oK`2U1Lxdof!b_&1a78}gK7p1Z zh?XCr<~O*#G^5q*?9A-nd+&46d+XM^^=_lvT$-EcU?wCOHbNDuoW?*!QwA>R5_n{~ zW!RQo6Pfhvn8^ZjQG5>Q8G$?$$`n+1S|xJC-VHUCz*yOdSCuF3D>kWnjm_zvyacP7 zYT!zb@7Ry_DVSRK8ynv4GfhH;)!O4U)3nwtBa`n65Y(kFDkGm)47||*bdKC@#iqY= spQ-aKB&~4HzKv}&7bj-4FNdOHsH)UQWvJt|LPe#dS;OByiTOzW0i(87L;wH) delta 239 zcmdncE&9Amw4sHug{g(Pg=GtCh5|>ivyQ8yXNmLlUIkV|;Zi3ZcSpy3Fq!G1Jy?_A)d|b zf^;}Lx@LeCxKCGAWOZcnH=O<#Xxa2$MOI6uGN }; -function preventTextHighlight(): void { - return +function removeTextSelection(): void{ + window.getSelection()?.removeAllRanges(); } function updatePreviousPkCheckState(eventTargetElement: HTMLInputElement, state: StateManager): void { state.set('element', eventTargetElement); } -function handlePkCheck(event: _MouseEvent, state: StateManager): void { - const eventTargetElement = event.target as HTMLInputElement; - const previousStateElement = state.get('element'); - updatePreviousPkCheckState(eventTargetElement, state); - //Stop if user is not holding shift key - if(event.shiftKey === false){ - return - } - //If no previous state, store event target element as previous state and return - if (previousStateElement === null) { - return updatePreviousPkCheckState(eventTargetElement, state); - } - const checkboxList = getElements('input[type="checkbox"][name="pk"]'); - let changePkCheckboxState = false; - for(const element of checkboxList){ +function toggleCheckboxRange(eventTargetElement: HTMLInputElement, previousStateElement: HTMLInputElement, elementList: Generator): void{ + let changePkCheckboxState = false + for(let element of elementList){ + //Change loop's current checkbox state to eventTargetElement checkbox state + if(changePkCheckboxState === true){ + element.checked = eventTargetElement.checked; + } //The previously clicked checkbox was above the shift clicked checkbox if(element === previousStateElement){ if(changePkCheckboxState === true){ @@ -34,9 +26,6 @@ function handlePkCheck(event: _MouseEvent, state: StateManager): void { + const eventTargetElement = event.target as HTMLInputElement; + const previousStateElement = state.get('element'); + updatePreviousPkCheckState(eventTargetElement, state); + //Stop if user is not holding shift key + if(!event.shiftKey){ + return + } + removeTextSelection(); + //If no previous state, store event target element as previous state and return + if (previousStateElement === null) { + return updatePreviousPkCheckState(eventTargetElement, state); + } + const checkboxList = getElements('input[type="checkbox"][name="pk"]'); + toggleCheckboxRange(eventTargetElement, previousStateElement, checkboxList) +} + export function initSelectMultiple(): void { const checkboxElements = getElements('input[type="checkbox"][name="pk"]'); for (const element of checkboxElements) { element.addEventListener('click', (event) => { - //Prevents shift+click from selecting table text - document.addEventListener('selectstart', preventTextHighlight) + removeTextSelection() //Stop propogation to avoid event firing multiple times event.stopPropagation(); - //Main logic for multi select handlePkCheck(event, previousPkCheckState); - //Re-enables user's ability to select table text - document.removeEventListener('selectstart', preventTextHighlight) }); } }