@@ -30,11 +30,13 @@ type OIDCConfig = Record<
3030interface Props {
3131 loginPage? : boolean ;
3232 excludeIdps? : string [];
33+ columnDisplay? : boolean ;
3334}
3435
3536const props = withDefaults (defineProps <Props >(), {
3637 loginPage: false ,
3738 excludeIdps : () => [],
39+ columnDisplay: true ,
3840});
3941
4042const { config, isConfigLoaded } = useConfig ();
@@ -188,7 +190,7 @@ function getIdpPreference() {
188190 {{ messageText }}
189191 </BAlert >
190192
191- <BForm id =" externalLogin" :class =" { 'h-100': !messageText, 'd-flex': loginPage }" >
193+ <BForm id =" externalLogin" :class =" { 'h-100': !messageText, 'd-flex': !props.columnDisplay }" >
192194 <!-- OIDC login-->
193195 <div v-if =" cilogonListShow" class =" cilogon" >
194196 <div v-if =" props.loginPage" >
@@ -276,57 +278,48 @@ function getIdpPreference() {
276278 </p >
277279 </div >
278280
279- <VerticalSeparator v-if =" loginPage && cilogonListShow && Object.keys(filteredOIDCIdps).length > 0" >
280- <span v-localize >or</span >
281- </VerticalSeparator >
281+ <template v-if =" cilogonListShow && Object .keys (filteredOIDCIdps ).length > 0 " >
282+ <VerticalSeparator v-if =" !props.columnDisplay" >
283+ <span v-localize >or</span >
284+ </VerticalSeparator >
282285
283- <span
284- v-if =" isConfigLoaded"
285- class =" d-flex flex-column h-100"
286- :class =" loginPage && !messageText ? 'justify-content-center' : ''"
287- style =" row-gap : 1rem " >
286+ <hr v-else class =" w-100" />
287+ </template >
288+
289+ <span v-if =" isConfigLoaded" class =" oidc-idps-grid" >
288290 <div v-for =" (iDPInfo, idp) in filteredOIDCIdps" :key =" idp" >
289- <span v-if =" iDPInfo['icon']" >
290- <BButton
291- variant =" link"
292- class =" d-block p-0 text-decoration-none"
293- :class =" loginPage && !messageText ? 'w-100' : ''"
294- :disabled =" loading"
295- @click =" submitOIDCLogin(idp)" >
296- <img
297- :src =" iDPInfo['icon']"
298- height =" 35"
299- :alt =" `Sign in with ${capitalizeFirstLetter(idp)}`" />
300- </BButton >
301- </span >
302- <span v-else-if =" iDPInfo['custom_button_text']" >
303- <BButton
304- variant =" outline-primary"
305- class =" d-block"
306- :class =" loginPage && !messageText ? 'w-100' : ''"
307- :disabled =" loading"
308- @click =" submitOIDCLogin(idp)" >
309- <i :class =" oIDCIdps[idp]" />
310- Sign in with {{ iDPInfo["custom_button_text"] }}
311- </BButton >
312- </span >
313- <span v-else >
314- <BButton
315- variant =" outline-primary"
316- class =" d-block"
317- :class =" loginPage && !messageText ? 'w-100' : ''"
318- :disabled =" loading"
319- @click =" submitOIDCLogin(idp)" >
320- <i :class =" oIDCIdps[idp]" />
321- Sign in with
322- <span v-if =" iDPInfo['label']" >
323- {{ iDPInfo["label"].charAt(0).toUpperCase() + iDPInfo["label"].slice(1) }}
324- </span >
325- <span v-else >
326- {{ capitalizeFirstLetter(idp) }}
327- </span >
328- </BButton >
329- </span >
291+ <BButton
292+ v-if =" iDPInfo['icon']"
293+ variant =" link"
294+ class =" d-block p-0 text-decoration-none"
295+ :disabled =" loading"
296+ @click =" submitOIDCLogin(idp)" >
297+ <img :src =" iDPInfo['icon']" height =" 35" :alt =" `Sign in with ${capitalizeFirstLetter(idp)}`" />
298+ </BButton >
299+ <BButton
300+ v-else-if =" iDPInfo['custom_button_text']"
301+ variant =" outline-primary"
302+ class =" d-block"
303+ :disabled =" loading"
304+ @click =" submitOIDCLogin(idp)" >
305+ <i :class =" oIDCIdps[idp]" />
306+ Sign in with {{ iDPInfo["custom_button_text"] }}
307+ </BButton >
308+ <BButton
309+ v-else
310+ variant =" outline-primary"
311+ class =" d-block"
312+ :disabled =" loading"
313+ @click =" submitOIDCLogin(idp)" >
314+ <i :class =" oIDCIdps[idp]" />
315+ Sign in with
316+ <span v-if =" iDPInfo['label']" >
317+ {{ iDPInfo["label"].charAt(0).toUpperCase() + iDPInfo["label"].slice(1) }}
318+ </span >
319+ <span v-else >
320+ {{ capitalizeFirstLetter(idp) }}
321+ </span >
322+ </BButton >
330323 </div >
331324 </span >
332325 </BForm >
@@ -337,4 +330,12 @@ function getIdpPreference() {
337330.card-body {
338331 overflow : visible ;
339332}
333+ .oidc-idps-grid {
334+ display : grid ;
335+ grid-template-columns : repeat (auto-fit , minmax (150px , 1fr ));
336+ gap : 0.5rem ;
337+ width : 100% ;
338+ height : 100% ;
339+ justify-items : center ;
340+ }
340341 </style >
0 commit comments