Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 31 additions & 27 deletions src/app/pages/sponsor-detail/sponsor-detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,40 +13,44 @@
</div>
</div>

<div class="ion-padding-horizontal sponsor-name">
<h1>{{ sponsor?.name }}</h1>
<span *ngIf="sponsor?.level" class="level-badge">{{ sponsor?.level }}</span>
</div>
<ion-card class="sponsor-info-card">
<ion-card-content>
<h1>{{ sponsor?.name }}</h1>
<span *ngIf="sponsor?.level" class="level-badge">{{ sponsor?.level }}</span>

<div *ngIf="sponsor?.booth_number" class="ion-padding-horizontal sponsor-booth">
<ion-icon name="location-outline"></ion-icon>
<span>Expo Hall Booth {{ sponsor?.booth_number }}</span>
</div>
<div *ngIf="sponsor?.booth_number || sponsor?.job_fair_table_number" class="sponsor-locations">
<ion-chip *ngIf="sponsor?.booth_number" outline="true" color="primary">
<ion-icon name="storefront-outline"></ion-icon>
<ion-label>Expo Booth {{ sponsor?.booth_number }}</ion-label>
</ion-chip>
<ion-chip *ngIf="sponsor?.job_fair_table_number" outline="true" color="tertiary">
<ion-icon name="people-outline"></ion-icon>
<ion-label>Job Fair Table {{ sponsor?.job_fair_table_number }}</ion-label>
</ion-chip>
</div>

<div *ngIf="sponsor?.description" class="ion-padding-horizontal sponsor-description">
<p [innerHtml]="sponsor?.description"></p>
</div>
<p *ngIf="sponsor?.description" class="sponsor-desc" [innerHtml]="sponsor?.description"></p>

<div *ngIf="sponsor?.external_url" class="ion-padding-horizontal sponsor-website">
<ion-button expand="block" fill="outline" (click)="openUrl(sponsor.external_url)">
<ion-icon name="globe-outline" slot="start"></ion-icon>
Visit Website
</ion-button>
</div>
<ion-button *ngIf="sponsor?.external_url" expand="block" (click)="openUrl(sponsor.external_url)">
<ion-icon name="globe-outline" slot="start"></ion-icon>
Visit Website
</ion-button>
</ion-card-content>
</ion-card>

<div *ngIf="jobListings.length > 0" class="ion-padding-horizontal sponsor-jobs">
<h2>Open Positions</h2>
<div *ngFor="let listing of jobListings" class="listing-card">
<ion-list *ngIf="listing.roles?.length > 0" class="roles-list" lines="none">
<ion-card *ngIf="jobListings.length > 0" class="jobs-card">
<ion-card-header>
<ion-card-title>Open Positions</ion-card-title>
</ion-card-header>
<ion-card-content>
<ion-list *ngFor="let listing of jobListings" lines="none">
<ion-item *ngFor="let role of listing.roles" class="role-item" [button]="!!role.url" (click)="openUrl(role.url)" [detail]="!!role.url">
<ion-icon name="briefcase-outline" slot="start" color="medium" class="role-icon"></ion-icon>
<ion-label class="role-label">
<span class="role-title">{{ role.title }}</span>
</ion-label>
<ion-icon name="briefcase-outline" slot="start" color="primary"></ion-icon>
<ion-label class="ion-text-wrap">{{ role.title }}</ion-label>
</ion-item>
</ion-list>
</div>
</div>
</ion-card-content>
</ion-card>

<div style="height: 80px"></div>
</ion-content>
122 changes: 36 additions & 86 deletions src/app/pages/sponsor-detail/sponsor-detail.scss
Original file line number Diff line number Diff line change
@@ -1,23 +1,14 @@
/*
* Sponsor Hero
*/

ion-header {
background: #3B3EA9;

&::after {
display: none;
}
&::after { display: none; }
}

ion-toolbar {
--background: transparent;
--border-color: transparent;
}

ion-toolbar ion-button,
ion-toolbar ion-back-button,
ion-toolbar ion-menu-button {
ion-toolbar ion-back-button {
--color: #ffffff;
}

Expand All @@ -26,7 +17,7 @@ ion-toolbar ion-menu-button {
display: flex;
align-items: center;
justify-content: center;
padding: 24px 32px 40px;
padding: 16px 32px 48px;
}

.sponsor-logo-container {
Expand All @@ -36,28 +27,32 @@ ion-toolbar ion-menu-button {
display: flex;
align-items: center;
justify-content: center;
max-width: 280px;
max-width: 260px;
width: 100%;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25);
}

.sponsor-logo {
max-width: 100%;
max-height: 120px;
max-height: 100px;
object-fit: contain;
}

/*
* Sponsor Info
*/
.sponsor-info-card {
margin: -24px 16px 8px;
border-radius: 16px;
box-shadow: 0 4px 16px rgba(16, 17, 54, 0.1);
position: relative;
z-index: 1;

.sponsor-name {
padding-top: 24px;
text-align: center;
ion-card-content {
text-align: center;
padding: 20px;
}

h1 {
margin: 0 0 8px;
font-size: 1.6rem;
margin: 0 0 6px;
font-size: 1.4rem;
font-weight: 700;
}
}
Expand All @@ -66,85 +61,40 @@ ion-toolbar ion-menu-button {
display: inline-block;
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.8px;
letter-spacing: 0.08em;
padding: 3px 12px;
border-radius: 4px;
background: var(--ion-color-step-100, rgba(255, 255, 255, 0.1));
color: var(--ion-color-step-600, rgba(255, 255, 255, 0.6));
border-radius: 99px;
background: #5833E9;
color: #ffffff;
font-weight: 600;
}

.sponsor-booth {
.sponsor-locations {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 6px;
padding-top: 16px;
font-size: 0.9rem;
opacity: 0.7;

ion-icon {
font-size: 1.1rem;
}
}

.sponsor-description {
padding-top: 20px;

p {
font-size: 0.95rem;
line-height: 1.6;
margin: 0;
}
margin-top: 12px;
}

.sponsor-website {
padding-top: 24px;

ion-button {
--border-radius: 10px;
--border-color: var(--ion-color-primary);
--color: var(--ion-color-primary);
font-weight: 600;
letter-spacing: 0.3px;
}
.sponsor-desc {
text-align: left;
font-size: 0.9rem;
line-height: 1.6;
margin: 12px 0 8px;
color: var(--ion-text-color);
}

/*
* Job Listings
*/

.sponsor-jobs {
padding-top: 32px;
.jobs-card {
margin: 0 16px;
border-radius: 16px;

h2 {
font-size: 1.15rem;
font-weight: 700;
margin: 0 0 12px;
ion-card-title {
font-size: 1.1rem;
}
}

.listing-card {
padding: 0;
}

.roles-list {
background: transparent;
padding: 0;

ion-item {
--background: transparent;
--padding-start: 0;
--padding-end: 0;
--min-height: 44px;
--background: transparent;
}
}

.role-icon {
font-size: 16px;
margin-right: 8px;
}

.role-title {
font-size: 0.9rem;
}
54 changes: 28 additions & 26 deletions src/app/pages/sponsors/sponsors.page.html
Original file line number Diff line number Diff line change
@@ -1,36 +1,38 @@
<ion-header class="ion-no-border">
<ion-toolbar>
<ion-buttons slot="start">
<ion-menu-button [color]="liveUpdateService.needsUpdate ? 'primary' : 'medium'"></ion-menu-button>
<ion-badge *ngIf="liveUpdateService.needsUpdate" size=sm>1</ion-badge>
<ion-menu-button></ion-menu-button>
</ion-buttons>
<ion-title>Sponsors</ion-title>
</ion-toolbar>
</ion-header>

<ion-content fullscreen="true">
<ion-header collapse="condense">
<ion-toolbar>
<ion-title size="large">Sponsors</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<div class="sponsors-hero">
<ion-icon name="heart" class="sponsors-hero-icon"></ion-icon>
<h1>Our Sponsors</h1>
<p>PyCon US wouldn't be possible without them</p>
</div>

<ion-grid>
<ion-row *ngFor="let sponsorLevel of sponsors | keyvalue : levelOrder">
<ion-col size-xl="3" size-md="4" size-sm="6" size-xs="12" *ngFor="let sponsor of sponsorLevel.value" [hidden]="sponsor.hide">
<ion-card button="true" [routerLink]="'/app/tabs/sponsors/sponsor-detail/' + getSponsorSlug(sponsor.name)">
<div style="text-align: center; width: 100%; padding-top: 2em;">
<img style="min-width: 128px; max-width: 33%; max-height: 33%;" [src]="sponsor.logo_url" [alt]="sponsor.name + ' logo'" />
</div>
<ion-card-header>
<ion-card-title>{{sponsor.name}}</ion-card-title>
<ion-card-subtitle>{{sponsor.level}}</ion-card-subtitle>
</ion-card-header>
<ion-card-content>
<ion-text *ngIf="sponsor?.booth_number"><b>Expo Hall Booth</b>: {{sponsor.booth_number}}</ion-text>
</ion-card-content>
</ion-card>
</ion-col>
</ion-row>
</ion-grid>
<ion-list *ngFor="let sponsorLevel of sponsors | keyvalue : levelOrder" lines="full">
<ion-list-header>
<ion-label>{{ sponsorLevel.key }}</ion-label>
</ion-list-header>

<ion-item *ngFor="let sponsor of sponsorLevel.value"
[hidden]="sponsor.hide"
button="true"
[routerLink]="'/app/tabs/sponsors/sponsor-detail/' + getSponsorSlug(sponsor.name)"
detail="true">
<div slot="start" class="sponsor-logo-thumb">
<img [src]="sponsor.logo_url" [alt]="sponsor.name + ' logo'" />
</div>
<ion-label>
<h2>{{ sponsor.name }}</h2>
<p *ngIf="sponsor?.booth_number">Expo Booth {{ sponsor.booth_number }}</p>
</ion-label>
</ion-item>
</ion-list>

<div style="height: 80px"></div>
</ion-content>
64 changes: 60 additions & 4 deletions src/app/pages/sponsors/sponsors.page.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,61 @@
.sponsor-logo {
background-color: #FFFFFF;
padding: 2vw;
border-radius: 5px;
ion-header {
background: linear-gradient(180deg, #3B3EA9 0%, #3B3EA9 100%);
&::after { display: none; }
}

ion-toolbar {
--background: transparent;
--border-color: transparent;
--color: #ffffff;
}

ion-toolbar ion-menu-button {
--color: #ffffff;
}

.sponsors-hero {
display: flex;
flex-direction: column;
align-items: center;
padding: 16px 24px 32px;
background: linear-gradient(180deg, #3B3EA9 23.5%, #101136 53.29%);
color: #fff;
text-align: center;

.sponsors-hero-icon {
font-size: 40px;
color: #DD04D2;
margin-bottom: 10px;
}

h1 {
margin: 0;
font-size: 1.6rem;
font-weight: 700;
}

p {
margin: 6px 0 0;
font-size: 0.9rem;
opacity: 0.8;
}
}

.sponsor-logo-thumb {
width: 48px;
height: 48px;
background: #fff;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
padding: 6px;
margin-inline-end: 12px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);

img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
}
Loading