From 632c3ef1eefd3fe24f0a781fd1a22e04ece91be6 Mon Sep 17 00:00:00 2001
From: Narendra Singh Rathore <29217-NarendraR@users.noreply.drupalcode.org>
Date: Wed, 21 Aug 2024 14:51:35 +0000
Subject: [PATCH] Issue #3467911 by narendrar, phenaproxima, chrisfromredfin:
 Refactor URL construction to use window.location instead of Drupal.url

---
 sveltejs/public/build/bundle.js              | Bin 302849 -> 302727 bytes
 sveltejs/public/build/bundle.js.map          | Bin 280427 -> 280298 bytes
 sveltejs/src/App.svelte                      |   3 ++-
 sveltejs/src/Filter.svelte                   |   3 ++-
 sveltejs/src/ModulePage.svelte               |   5 +++--
 sveltejs/src/Project/ActionButton.svelte     |   6 ++----
 sveltejs/src/Project/AddInstallButton.svelte |  20 +++++++------------
 sveltejs/src/Project/Project.svelte          |   4 ++--
 sveltejs/src/ProjectBrowser.svelte           |   5 ++---
 sveltejs/src/constants.js                    |   3 ++-
 10 files changed, 22 insertions(+), 27 deletions(-)

diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js
index ec94da1cc9c8ba37f4f428c77239e165d9d0b92f..a02e401a38171b2ce7c54a58b1c78de9f10f0d15 100644
GIT binary patch
delta 1282
zcmaJ=YfO`86wW#CX%VDc>ZQbT=^`54pd$TR+j5CGoSV9#GJlY`@l~jTt1XlgMp)yB
z8yBbYqsz`*HeFma!lFn>Jek=Lek}73gk@ouxGc;cCJW0<c1dQo#eKz?Kp?(<-kdz=
zea>^9bKdSTYws7<>)!4YJF04T)*n2u*HPin3%fd+!;O&+XDHGTh&4yT&X#B-7HNot
z;#;;X1)Cymv3OxuW3;^`5ULHvV$I>BZO)cJtjT#e&=x!x4LP21EQcmj_C<q7nqQBD
zo+#=r$S_Jj7Gf|aK7O;nay-)59tzecbL0AGclURBP&!(7VZs8QQTx@(ReYAPkZW#$
zcXVcaIz4?MMPg*q4*JQdNtv32%<cSgF<Rw;1#?xFGY}3(+QSXOP1W<dd2=@YAY?^d
z$&od9$Cju$XO^SIm~CD}$$A;)^F<fh<faR6(GqYYf9l26GVaAuSO&c0$F;ViG>36g
zlV_paB=^R=Kub%gQ-4wlSCnB|&XZD#L6?Ctd}F;y^ZHADJdp!7zWyhqN=ZHbL*S93
zM(iMy$Ln{w7NEDAuzUq*Vrs?I72uN0P8=rm_+&hef0+#6#!2ia*ecum@Hn8`E5rTx
zRXVx--p%~*G_8MB<nnv?mI*bV6n%(iElXV3z;lCWmy{v&CKiLxMyvT)g|bUeg^HVb
zU>%hw^jRz4*+VPkP_>%F<sanAz%C`W#PnU_WA$neXgu}_RPpV1lua^p^*-QM4+n-Z
z2i!anP<80i=0nyFs}cTt5VD0D6qdm@Njb0P$Y}nLi|RlMx_q*0NOdak%EVQ5PZ{1_
z8BxU+rTMja=j8sFdM;CyJPvE7)I)+&srg2A*%zz*_BW-;%KPeGCAj7HVu}&p+^;PB
zpItfl$K5KMuer%AL#6Z+8Up&=^b|lTLmsS>F%M0nF@XUeeNM)`w~}_7!NW$pmS44~
zLf%(PBs0}?o|MNB^HL?*<jf0{o4Hs-(qqs$w_N3OsD!e`R7d-Bz{OQ}m50x?lG8A+
zHA?Ha;1Fc-Y#NyP*H&7S{1E(_Kq{9+>C2^@se0L?wT|<|XPC#=2GJ}#+UNqvFEQ%D
zOzo9Ti?+SLgWPhfgDxdK4R%ps()3d&=<Aeu{UiPOwDk27C%bl>q8TKge_M$>I8Anw
zNi+OjuyWknOIG=}2h6}(-$S{)*a!I_@-8WpG4Y>!)CQhCM{o1<moY;UAJ7$)XFsAb
F_#cxqphW-x

delta 1298
zcma)+ZA_b06vuPVJ#DwrN>*CRU~^^Q+9EA|d*GqaZpOX%mT5F08l9!1xTzHilrXZ%
zU}!qf7-JL8hRl^k$%2`oX|n4F?Ibh%Fk^>Nvn*!17eiu<#P~+yV&+pi4cp@4{c`i<
zf9|>G{LcSAiH{9KS;LGxl>Bt4q-b+@Z!8>j_I5{Y$<*LF-AkR3-e`L$7LM<>XI33J
zzm~Z(KOCLaGb!`_iC_r@=edRcLa3(fNhW8u%+Bd_%W_zgmAMMA+J^%<5y-LPO<KRD
zAXmG^BX@z58>`*Ua7RaHZ%13Z?H`FoSHT6HqQq_1`#WRLw?}Bw0A=D;0|YrJM^BsJ
z8*?(WsG>KEm^xpDNxb6#vwHdEtu*TeiP^;;UO0ufC^GmJ<(do`cAK(+F8QIf%wDUt
zC~IYYE$@kDW!P|cI2MccTkjZC73=JYhyF((Wt%{wU=nAVU|*F=a``=t<UR`)u`2}E
zkjbJg0)41zaQVI7f^dB|G_PRwqPYuJuHceiCS3yU#7EIUpEsh0q61(ONBf}#p}{Q{
zUxwdRO88I1FoNjyyS?=DFc`%f2cd;wy{mA(Mi@rnZ5?Y6AB;gprIFlzpWV_t)()j&
zU;=vdx1qX+)=xu)LNYK7a?)H^Qvg*{XK9P?dD^#Q$w{p=6ySA~-VY^II|voxVt_xU
zrimH0oxZh$n&uux6{RY%n$A53da||R6GFR%?}9rgT-eG>>45{VPF&i?Uorpdg>s67
z_@hiB$Ghx4`tUVw7P?k`h=JEbq2sKK)zhgke@fY&J<e8>XD3gq3w2XynynVU?c~s;
zKwmt<e?;aJSC8?>HQ;lJhH2i<S))jw;PYIebSTXodIi3ZCQZyNzRU8h#av-l_}rM|
z*O7U}#xMEaikr!uS>Qee+Mf%2KB!!9*@1B+(Zcm~af)jx^#WH>%!zd(<-zm7JYtW8
zl}yPsUXNEn*#{c&qkQhBAU>pC8vmf4%i@#Gcnp^c3Ix$C_C1Jeif?7;E)2z*AByp<
z_l)ARC$Xc9`N(~R*Hf$uoz(LTyEnOMQBCK%&~)=Nqwl-$tL4oU^5o5Xp&QS#8z9AG
z91lXdw8QpamXP~U645@K;xw0KTCrv?R-n?UydS^NFiB_=csk!{ZUnyut?X}b+w-r{
zLg_K65_7NPFN%*F71lFj;2<f12JvEosTrkyWzCcw2aVXC#Bw!_Ug7I$^e~Q)oc~#!
doabwWYa9>5jV@{}(avy$W{bE{T%N!w_BV$Ns80X@

diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map
index b45b4630b052b9bfd62de5184e40fbb6f6629225..824e39092505c97f2c56c6852c77d3739ad2722c 100644
GIT binary patch
delta 1917
zcma)6ZERCj7|uEG>1eyIEBlm{u_D{}Sm|I6X0tGNdfU|jV~jBZaf5artQ}oj+Kzo?
zf<Z$j84L+~Rn#RIFa%JD;)#g_Sd4K-CvibZ(6Ap)6Ep-Ben2#OZ<lS|Tnznj(|gbJ
zywCeS&wKB$N9Nz{n}6UV(k<<`@oLAenk^em>rAff?sl)gG0<-D1sdEDZ@_N}h60g5
zL%`RQpa0)OPaquW$?k3pwFTY2>ZVA<>u(NQg6@dNQtu8o)r5SeJkwmK3S@JrX}7nd
zhq!Q$M3(4f?a5B$l6c)tvJzSYjcvZBT?)F#B|ekLcsky*P_5Q92{qvn2U&mzG}MHx
zoupPQttIz#y4Yg4*h`GWB}%-+RHvCFn(^ozQXr0gPTrk213qw*EW*YSk}eL8kWFm%
zSuQ4wk`%o7EivMiQKH7d5t1nCMoBN34K1JjAUDe$4Ej1<=32jL>KEIpteuPB+$7qJ
z|Hr5so5GP$pwlImd`DU}(?bb)sNJgBx;bbWCq_{<PI6bMCk?<OVUmy5OuA59OQcW3
z3=-Z;qDw?lGJPj=iXhIeq9@feVcV^=5Q=O47;L8{c;Rni5aU*QYUSK1o!Chm@V91q
za&hd??#5QHKYt?XaDII#&>n7biL)NMf;<84p_e|d!>neiiSM3cE7Zcdk3OI?yLNWc
z6(ZD0OQ`syn<l-OT*Y~n*~z)nEO9QG9h^JxrAv^CrytNnHhmiyly4h2Z$R=P&Cn?S
zq71yzM^gu0rwmKKpei&BQ%3id<9!{Z>lL;+DxlQHx<@nv|9M397(YxkB#23m>DMG8
z#vaq5RMxhBjUBI@k(D<l!$R@B0TQ(kTJJ=|LCD3iR#-0FMp&lR?%-0FEm{_TKM%>c
z=_=^rCsnw)0IP~v3U1y43>Te%1nj*EDdMjjc!kR4>T&)`S;930OuW4eF7L#ReN->p
zhaihi%xy?zD)jvViFmFT_F>IknktH3h3gd0=vk`J_d$fho(;S4SU+Tl!K3g7Wku_Y
z?D)Y?kcBV21{YPu<=ojNtjA#((kc{}xZ*3HvSO8lnF!0{isey44pD{h2YqTTV4h?y
z#4LoRam8*fMauBln=q6mv+Ad6ar3j20$#hhlJiRJm*d+egZ$Ix%eF*O%0*G#62ot{
zE4|HivUZwNTr3Y&UM7rh!8j#df($|!NSkOo1y|Hy-B78FpCKyGK>=AX*C>1K<~?>a
zp`4{F3>wuAUhOFpx6Xq!k6E294qW{ym~ivQ@Fx~rhB{&w{g>fJj<HkXj*f}AC!E}C
zQ`&9dydB-^m=OmqfgZ1&2c5Wo8-4_1pzH|=acGd3T7<_S!dNx0X%WfeaGZ$ueunI1
z(ki}s1h;f?&unY4nJaMQ0%YRCAxITJ#Ie!1Ib$uf;cx=8#LEUde2(Z#rEF-n$kVg4
zX`};hX0sN;MQIK*Xh@@|vanul(kdITUoFMt5tvxu(jrJu$$552!fa(PtD;-A74K|^
zbbMICP*cvOt<k-j*jxDpRpnN2UJ+X=>Q!ut8@MwliQCUHPUfw(NgkWWj)pJg+4{#o
zm0ljhEsS!T<!c@u2tyj)w}58A0$S`}4oO&g8g>Ysjjf^7*@Yz<mWKP^2aPyvXWOX0
W$mX}1Ym^U)@@YYSn5G~&nde`>s$W|G

delta 1684
zcma)6e@xV67~lIo?{RSa5WM5(p_~L9hX=w8kXXih-|vNRokS!>GXfmQuMiGUp)^~y
zMJ~1BdR%B><<dee2fl4u6I)|#IZT&rnhV;nR;%Uu$JDmo_j@<w4_4hD@80kGd_JG&
zc|Omx`{nhxU-!iA8Yj<b7^xF$q#o$+ZtTqK4|HbZxiXT5KAl7omv~YqbBP%DBH1Z!
zY$U%&MJ)h2ai)#fsnaFywh_nEm^MQS@Z@G{7WGr)pxL$ny0Ob){2DO-3R#XB(<Cw6
z9ei|&(rL1uB`kt=I1GFip1DkHmJr_IaEa;5<P1q!l%djuSZBW__ocYzX)3aS;#8$%
zIU2jWI|rQqj>@<H2OtYauMo3x;^-CfY=n?bG@BOhf8QJ_yVv@~Ig*uwTmL4xA~%+<
zg@yJuVB-a1!`)W8L=NIDD}8&JC@-M<!xtC+sf6BtPuTtd{WBLQW=Riz*h=><)O8xV
zs@SL6XbxFCbflfGi^6j*%0%imdYdjpHDLN6&7rOxc=DJmd~lG)(r|Zr&|5L|Jhkq`
z1Gi`tiWab8&mEd>Dy`sJD;~N-FOY!fxJ%E+LvLjv@<Nt?-`OBlG%bZC7U-+=VR990
z7hj}8wk27T20d;s=iKdAM>Xfw?i$W(@RJn~k6%wwOKOpa^CFL1Q}OwuROM^;iV`Qh
zPocZA30It!g#3PB;x89W)SEYO?)AB=#rUh>q)CRfU-7kI5_OZ0c=I(F0(CiT2dmh-
z8z!moIs1zIY~BNXlx!1M_rV0ET|Rtc7``#d%v(LGiwxDZw@Yl^4_^UJw1Cy3^@b|#
z#}`JxiI3((n5B+;TXlCc=gl~#vuyG10r-*{c(c}Q^n^P`z-53<jocg1acl(6XDLfP
zZePfqQ1#`UmrIT|patDnqY`DCYPh#p$H^%gA6F!MD+)$SYq+*O^xUCy-k}>L^&CRm
zR!a2B5V};^TG6hHTL)o|(p8ms^9Uro`6)yTIto=l2E=3U!Dr#L^$`&_27Y2R5vjF>
zYU$8%*9c_cOfgvS<6K~-I=*4GE<QRAnwhq)6Mu|DfROcK(`mSvDUI~5_Tcn2NWrUn
z!4gxaI^CoW*`yzPF3E}Jb%8mO4}@Ip@!(_;v*PdwSTTPBqQpzz!*yUv34832fDe8E
z*%AL=qwEKW5vOLLk4cT{CS$5hdKnNob1+QA*&C2)4c}7xges{VV|B3OOc_Lo=-Y5S
zDy+D+-Q)J-;S;b-Tn}SEhlQqE9h~a5XqFe8Y8@{x*2Iz+b}2#rh5neq+KDFonJhMf
zw21mVHe?Cw(0Eg^hR@g_X{lzUQzDwXSMGnW2jf<;G~gw=NGoA4oA9?S(&Dr#SRST!
zu+@V{*Rm7L&$Y*qBuj_Zj#4w8YJudWAV0V)Qjp6b`*?YQF5Y>FagtaecT8@liUhqk
zZZ(+qIV43G6PX`Iq_KNzBw(|KD>%y#Wt<(OR14s2CbOZtN>1g_7{p-dn5xdgB7{X}
MwUiWM<HKy|A2l%nssI20

diff --git a/sveltejs/src/App.svelte b/sveltejs/src/App.svelte
index 005f3f679..591a3a407 100644
--- a/sveltejs/src/App.svelte
+++ b/sveltejs/src/App.svelte
@@ -3,6 +3,7 @@
   import ModulePage from './ModulePage.svelte';
   import Loading from './Loading.svelte';
   import { activeTab } from './stores';
+  import { BASE_URL } from './constants';
 
   const matches = window.location.pathname.match(
     /\/admin\/modules\/browse\/(.+)/,
@@ -35,7 +36,7 @@
 {#if !projectId}
   <ProjectBrowser />
 {:else}
-  {#await load(Drupal.url(`drupal-org-proxy/project?id=${projectId}`))}
+  {#await load(`${BASE_URL}drupal-org-proxy/project?id=${projectId}`)}
     {#if loading}
       <Loading />
     {/if}
diff --git a/sveltejs/src/Filter.svelte b/sveltejs/src/Filter.svelte
index a53a6e2b3..b77d70d83 100644
--- a/sveltejs/src/Filter.svelte
+++ b/sveltejs/src/Filter.svelte
@@ -6,6 +6,7 @@
     activeTab,
   } from './stores';
   import { normalizeOptions, shallowCompare } from './util';
+  import { BASE_URL } from './constants';
 
   const { Drupal } = window;
   const dispatch = createEventDispatcher();
@@ -124,7 +125,7 @@
   }
 
   async function fetchAllCategories() {
-    const response = await fetch(Drupal.url('drupal-org-proxy/categories'));
+    const response = await fetch(`${BASE_URL}drupal-org-proxy/categories`);
     if (response.ok) {
       return response.json();
     }
diff --git a/sveltejs/src/ModulePage.svelte b/sveltejs/src/ModulePage.svelte
index f16f24258..244cda18e 100644
--- a/sveltejs/src/ModulePage.svelte
+++ b/sveltejs/src/ModulePage.svelte
@@ -6,6 +6,7 @@
   import { moduleCategoryFilter, page } from './stores';
   import ProjectIcon from './Project/ProjectIcon.svelte';
   import { numberFormatter } from './util';
+  import { BASE_URL } from './constants';
 
   // eslint-disable-next-line import/no-mutable-exports,import/prefer-default-export
   export let project;
@@ -14,7 +15,7 @@
   function filterByCategory(id) {
     $moduleCategoryFilter = [id];
     $page = 0;
-    window.location.href = Drupal.url('admin/modules/browse');
+    window.location.href = `${BASE_URL}admin/modules/browse`;
   }
 
   onMount(() => {
@@ -27,7 +28,7 @@
   });
 </script>
 
-<a class="action-link" href={Drupal.url('admin/modules/browse')}>
+<a class="action-link" href={`${BASE_URL}admin/modules/browse`}>
   <span aria-hidden="true">&#9001&#xA0</span>
   {Drupal.t('Back to Browsing')}
 </a>
diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte
index 963f314c0..98e94f05a 100644
--- a/sveltejs/src/Project/ActionButton.svelte
+++ b/sveltejs/src/Project/ActionButton.svelte
@@ -1,6 +1,6 @@
 <script>
   import { onMount } from 'svelte';
-  import { PACKAGE_MANAGER } from '../constants';
+  import { BASE_URL, PACKAGE_MANAGER } from '../constants';
   import Loading from '../Loading.svelte';
   import { openPopup, getCommandsPopupMessage } from '../popup';
   import AddInstallButton from './AddInstallButton.svelte';
@@ -32,9 +32,7 @@
    *   Return is not used, but is a promise due to this being async.
    */
   const showStatus = async (initiate = false) => {
-    const url = Drupal.url(
-      `admin/modules/project_browser/install_in_progress/${project.id}`,
-    );
+    const url = `${BASE_URL}admin/modules/project_browser/install_in_progress/${project.id}`;
 
     //
     /**
diff --git a/sveltejs/src/Project/AddInstallButton.svelte b/sveltejs/src/Project/AddInstallButton.svelte
index c5ab0edf1..b18c5a444 100644
--- a/sveltejs/src/Project/AddInstallButton.svelte
+++ b/sveltejs/src/Project/AddInstallButton.svelte
@@ -1,6 +1,6 @@
 <script>
   import { openPopup } from '../popup';
-  import { PACKAGE_MANAGER } from '../constants';
+  import { BASE_URL, PACKAGE_MANAGER } from '../constants';
   import ProjectButtonBase from './ProjectButtonBase.svelte';
 
   export let project;
@@ -59,9 +59,7 @@
    */
   async function activateProject() {
     loading = true;
-    const url = Drupal.url(
-      `admin/modules/project_browser/activate/${project.id}`,
-    );
+    const url = `${BASE_URL}admin/modules/project_browser/activate/${project.id}`;
     const installResponse = await fetch(url);
     if (!installResponse.ok) {
       handleError(installResponse);
@@ -99,9 +97,7 @@
      */
     async function doRequests() {
       loading = true;
-      const beginInstallUrl = Drupal.url(
-        `admin/modules/project_browser/install-begin/${project.id}`,
-      );
+      const beginInstallUrl = `${BASE_URL}admin/modules/project_browser/install-begin/${project.id}`;
       const beginInstallResponse = await fetch(beginInstallUrl);
       if (!beginInstallResponse.ok) {
         await handleError(beginInstallResponse);
@@ -112,12 +108,10 @@
         // with their own endpoint. When one stage completes, the next one is
         // requested.
         const installSteps = [
-          Drupal.url(
-            `admin/modules/project_browser/install-require/${project.id}`,
-          ),
-          Drupal.url('admin/modules/project_browser/install-apply'),
-          Drupal.url('admin/modules/project_browser/install-post_apply'),
-          Drupal.url('admin/modules/project_browser/install-destroy'),
+          `${BASE_URL}admin/modules/project_browser/install-require/${project.id}`,
+          `${BASE_URL}admin/modules/project_browser/install-apply`,
+          `${BASE_URL}admin/modules/project_browser/install-post_apply`,
+          `${BASE_URL}admin/modules/project_browser/install-destroy`,
         ];
 
         // eslint-disable-next-line no-restricted-syntax,guard-for-in
diff --git a/sveltejs/src/Project/Project.svelte b/sveltejs/src/Project/Project.svelte
index 79370b574..6232328eb 100644
--- a/sveltejs/src/Project/Project.svelte
+++ b/sveltejs/src/Project/Project.svelte
@@ -7,7 +7,7 @@
   import Categories from './Categories.svelte';
   import ProjectIcon from './ProjectIcon.svelte';
   import { focusedElement, mediaQueryValues } from '../stores';
-  import { FULL_MODULE_PATH } from '../constants';
+  import { BASE_URL, FULL_MODULE_PATH } from '../constants';
 
   const { Drupal } = window;
 
@@ -33,7 +33,7 @@
       <a
         id="{project.project_machine_name}_title"
         class="pb-project__link"
-        href={Drupal.url(`admin/modules/browse/${project.id}`)}
+        href={`${BASE_URL}admin/modules/browse/${project.id}`}
         rel="noreferrer">{project.title}</a
       >
     </h3>
diff --git a/sveltejs/src/ProjectBrowser.svelte b/sveltejs/src/ProjectBrowser.svelte
index 8bf58aa2f..648f03c41 100644
--- a/sveltejs/src/ProjectBrowser.svelte
+++ b/sveltejs/src/ProjectBrowser.svelte
@@ -28,6 +28,7 @@
     ALL_VALUES_ID,
     DEFAULT_SOURCE_ID,
     CURRENT_SOURCES_KEYS,
+    BASE_URL,
     FULL_MODULE_PATH,
     SORT_OPTIONS,
     ACTIVE_PLUGINS,
@@ -102,9 +103,7 @@
       );
     }
 
-    const url = Drupal.url(
-      `drupal-org-proxy/project?${searchParams.toString()}`,
-    );
+    const url = `${BASE_URL}drupal-org-proxy/project?${searchParams.toString()}`;
 
     const res = await fetch(url);
     if (res.ok) {
diff --git a/sveltejs/src/constants.js b/sveltejs/src/constants.js
index f2aace5f4..c70fba462 100644
--- a/sveltejs/src/constants.js
+++ b/sveltejs/src/constants.js
@@ -14,7 +14,8 @@ export const DEFAULT_SOURCE_ID =
   drupalSettings.project_browser.default_plugin_id;
 export const CURRENT_SOURCES_KEYS =
   drupalSettings.project_browser.current_sources_keys;
-export const FULL_MODULE_PATH = Drupal.url(drupalSettings.project_browser.module_path);
+export const BASE_URL = `${window.location.protocol}//${window.location.host}${drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix}`;
+export const FULL_MODULE_PATH = `${BASE_URL}${drupalSettings.project_browser.module_path}`;
 export const DARK_COLOR_SCHEME =
   matchMedia('(forced-colors: active)').matches &&
   matchMedia('(prefers-color-scheme: dark)').matches;
-- 
GitLab