Add officer images
|
@ -1,7 +1,9 @@
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import {Component} from "react";
|
import {Component} from "react";
|
||||||
|
|
||||||
interface AvailabilityProps {}
|
interface AvailabilityProps {
|
||||||
|
checkUrl: string;
|
||||||
|
}
|
||||||
interface AvailabilityState {
|
interface AvailabilityState {
|
||||||
available: boolean;
|
available: boolean;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +15,9 @@ export default class Availability extends Component<AvailabilityProps, Availabil
|
||||||
available: false
|
available: false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
private checkAvailable() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
return <div className="availability">
|
return <div className="availability">
|
||||||
|
|
|
@ -15,8 +15,8 @@ export default class Carousel extends Component<CarouselProps, CarouselState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private scrollToNext(e: MouseEvent) {
|
private scrollToNext(e: MouseEvent) {
|
||||||
let elem = (this.state.innerRef as any).current;
|
let elem = (this.state.innerRef as any).current as HTMLDivElement;
|
||||||
elem.scrollTo({left: elem.scrollWidth, behavior: "smooth"})
|
elem.scrollBy({left: elem.parentElement.getBoundingClientRect().width, behavior: "smooth"})
|
||||||
}
|
}
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
|
|
24
src/public/components/Officer.tsx
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import * as React from "react";
|
||||||
|
import {Component} from "react";
|
||||||
|
|
||||||
|
interface OfficerProps {
|
||||||
|
name: string;
|
||||||
|
position: string;
|
||||||
|
photo: string;
|
||||||
|
}
|
||||||
|
interface OfficerState {}
|
||||||
|
|
||||||
|
export default class Officer extends Component<OfficerProps, OfficerState> {
|
||||||
|
constructor(props: OfficerProps) {
|
||||||
|
super(props);
|
||||||
|
this.state = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return <div className="officer">
|
||||||
|
<img className="officer-image" src={this.props.photo}></img>
|
||||||
|
<span className="officer-name">{this.props.name}</span>
|
||||||
|
<span className="officer-position">{this.props.position}</span>
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,7 +21,7 @@ export default class TopNav extends React.Component<TopNavProps, TopNavState> {
|
||||||
|
|
||||||
return <div className="top-nav">
|
return <div className="top-nav">
|
||||||
<div className="nav-container">
|
<div className="nav-container">
|
||||||
<img className="logo" src={this.props.image} alt={this.props.alt}></img>
|
<img className="logo" srcSet={`${this.props.image} 2x`} alt={this.props.alt}></img>
|
||||||
{navLinks}
|
{navLinks}
|
||||||
</div>
|
</div>
|
||||||
<div className="bottom-bar"></div>
|
<div className="bottom-bar"></div>
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
|
|
||||||
|
|
||||||
/* Color vars should go here */
|
/* Color vars should go here */
|
||||||
:root {
|
:root {
|
||||||
--dark-blue: #00629b;
|
--dark-blue: #00629b;
|
||||||
|
@ -7,8 +5,12 @@
|
||||||
--sky-blue: #6ab7ff;
|
--sky-blue: #6ab7ff;
|
||||||
--grey: #c4d2e3;
|
--grey: #c4d2e3;
|
||||||
--black: #1f1f1f;
|
--black: #1f1f1f;
|
||||||
--white: #eeeeee;
|
--white: #F2F6FF;
|
||||||
--accent: #ffe419;
|
--accent: #FFCD00;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root {
|
||||||
|
background-color: var(--white);
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
|
@ -44,13 +46,15 @@ body {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.logo {
|
.logo {
|
||||||
width: 10em;
|
width: 20em;
|
||||||
height: auto;
|
height: auto;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
|
margin-left: 1em;
|
||||||
|
image-rendering: -webkit-optimize-contrast;
|
||||||
}
|
}
|
||||||
.nav-link {
|
.nav-link {
|
||||||
color: var(--white);
|
color: var(--white);
|
||||||
font-size: 1.6em;
|
font-size: 1.5em;
|
||||||
margin-left: 0.75em;
|
margin-left: 0.75em;
|
||||||
margin-right: 0.75em;
|
margin-right: 0.75em;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -86,6 +90,10 @@ body {
|
||||||
.row-group {
|
.row-group {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: baseline;
|
||||||
|
justify-content: space-between;
|
||||||
|
column-gap: 2.5em;
|
||||||
}
|
}
|
||||||
.section-title {
|
.section-title {
|
||||||
color: var(--med-blue);
|
color: var(--med-blue);
|
||||||
|
@ -120,11 +128,11 @@ body {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
background: linear-gradient(270deg, white, transparent)
|
background: linear-gradient(270deg, var(--white), transparent)
|
||||||
}
|
}
|
||||||
.carousel::before {
|
.carousel::before {
|
||||||
left: 0;
|
left: 0;
|
||||||
background: linear-gradient(90deg, white, transparent);
|
background: linear-gradient(90deg, var(--white), transparent);
|
||||||
}
|
}
|
||||||
.carousel-next {
|
.carousel-next {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -152,9 +160,11 @@ body {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: var(--med-blue);
|
color: var(--med-blue);
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
.carousel-item a:hover {
|
.carousel-item a:hover {
|
||||||
color: var(--sky-blue);
|
color: var(--sky-blue);
|
||||||
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
.carousel-item a:active {
|
.carousel-item a:active {
|
||||||
color: var(--dark-blue)
|
color: var(--dark-blue)
|
||||||
|
@ -162,6 +172,9 @@ body {
|
||||||
.description-text {
|
.description-text {
|
||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
}
|
}
|
||||||
|
.carousel-item img {
|
||||||
|
max-width: 20em;
|
||||||
|
}
|
||||||
/* Image slideshow styles */
|
/* Image slideshow styles */
|
||||||
.slideshow-image {
|
.slideshow-image {
|
||||||
width: 22em;
|
width: 22em;
|
||||||
|
@ -182,6 +195,7 @@ body {
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
color: white;
|
color: white;
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.link-button:hover {
|
.link-button:hover {
|
||||||
background-color: var(--sky-blue);
|
background-color: var(--sky-blue);
|
||||||
|
@ -190,6 +204,31 @@ body {
|
||||||
background-color: var(--dark-blue);
|
background-color: var(--dark-blue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.officer {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 1em 0;
|
||||||
|
width: 10em;
|
||||||
|
}
|
||||||
|
.officer-image {
|
||||||
|
aspect-ratio: 1 / 1;
|
||||||
|
max-width: 10em;
|
||||||
|
max-height: 10em;
|
||||||
|
}
|
||||||
|
.officer-name {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.2em;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 0.15em;
|
||||||
|
}
|
||||||
|
.officer-position {
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 1.1em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
/* Responsive queries go here */
|
/* Responsive queries go here */
|
||||||
@media screen and (max-width: 760px) {
|
@media screen and (max-width: 760px) {
|
||||||
|
|
||||||
|
|
BIN
src/public/img/IEEEUCSD.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
src/public/img/IMG_0217_cropped.jpg
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
src/public/img/abby.jpg
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
src/public/img/brigette.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
src/public/img/clyde.jpg
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
src/public/img/danny.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
src/public/img/darin.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 83 KiB |
BIN
src/public/img/ieeeucsdlogo.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
src/public/img/ieeeucsdlogowhite.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
src/public/img/jason.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
src/public/img/jiawen.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
src/public/img/kevin.jpg
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
src/public/img/owen.jpg
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
src/public/img/parth.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
src/public/img/sarp.jpg
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
src/public/img/sunny.jpg
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
src/public/img/tasnia.jpg
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
src/public/img/thanh.jpg
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
src/public/img/victor.jpg
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
src/public/img/vuong.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
|
@ -6,6 +6,8 @@ import ImageGallery from "./components/ImageSlideshow";
|
||||||
import Carousel from "./components/Carousel";
|
import Carousel from "./components/Carousel";
|
||||||
import CarouselItem from "./components/CarouselItem";
|
import CarouselItem from "./components/CarouselItem";
|
||||||
import ButtonLink from "./components/ButtonLink";
|
import ButtonLink from "./components/ButtonLink";
|
||||||
|
import Availability from "./components/Availability";
|
||||||
|
import Officer from "./components/Officer";
|
||||||
|
|
||||||
// The links that are on the top nav bar that link to a lowercase version of their page
|
// The links that are on the top nav bar that link to a lowercase version of their page
|
||||||
const ACTIVE_PAGES: string[] = ["About","Events","Officers","Projects","Resources","Sponsors"];
|
const ACTIVE_PAGES: string[] = ["About","Events","Officers","Projects","Resources","Sponsors"];
|
||||||
|
@ -42,6 +44,104 @@ const EVENTS = [{
|
||||||
location: "/"
|
location: "/"
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
const officers = [{
|
||||||
|
name: "Sarp User",
|
||||||
|
position: "Chair",
|
||||||
|
photo: "img/sarp.jpg"
|
||||||
|
},{
|
||||||
|
name: "Parth Desai",
|
||||||
|
position: "Vice Chair Finance",
|
||||||
|
photo: "img/parth.jpg"
|
||||||
|
},{
|
||||||
|
name: "Derek Cantor",
|
||||||
|
position: "Vice Chair Internal",
|
||||||
|
photo: "img/derek.jpg"
|
||||||
|
},{
|
||||||
|
name: "Clyde Baron Rapinan",
|
||||||
|
position: "Vice Chair Events",
|
||||||
|
photo: "img/clyde.jpg"
|
||||||
|
},{
|
||||||
|
name: "Danny Vo",
|
||||||
|
position: "Vice Chair Projects",
|
||||||
|
photo: "img/danny.jpg"
|
||||||
|
},{
|
||||||
|
name: "Nick Petrone",
|
||||||
|
position: "Webmaster",
|
||||||
|
photo: "img/nick.jpg"
|
||||||
|
},{
|
||||||
|
name: "Jiawen Yu",
|
||||||
|
position: "Technical Chair",
|
||||||
|
photo: "img/jiawen.jpg"
|
||||||
|
},{
|
||||||
|
name: "Victor Ku",
|
||||||
|
position: "Technical Chair",
|
||||||
|
photo: "img/victor.jpg"
|
||||||
|
},{
|
||||||
|
name: "Sunny Chu",
|
||||||
|
position: "Technical Chair",
|
||||||
|
photo: "img/sunny.jpg"
|
||||||
|
},{
|
||||||
|
name: "Samyak Karnavat",
|
||||||
|
position: "Social Chair",
|
||||||
|
photo: "img/samyak.jpg"
|
||||||
|
},{
|
||||||
|
name: "Tasnia Jamal",
|
||||||
|
position: "Social Chair",
|
||||||
|
photo: "img/tasnia.jpg"
|
||||||
|
},{
|
||||||
|
name: "Hector Montenegro",
|
||||||
|
position: "Robocup Soccer Chair",
|
||||||
|
photo: "img/hector.jpg"
|
||||||
|
},{
|
||||||
|
name: "Zhiqiang Pi",
|
||||||
|
position: "Quarterly Projects Chair",
|
||||||
|
photo: "img/zhiqiang.jpg"
|
||||||
|
},{
|
||||||
|
name: "Kevin Chang",
|
||||||
|
position: "Quarterly Projects Chair",
|
||||||
|
photo: "img/kevin.jpg"
|
||||||
|
},{
|
||||||
|
name: "Benjamin Tang",
|
||||||
|
position: "Project Space Chair",
|
||||||
|
photo: "img/benjamin.jpg"
|
||||||
|
},{
|
||||||
|
name: "Narek Boghozian",
|
||||||
|
position: "Project Drive Chair",
|
||||||
|
photo: "img/narek.jpg"
|
||||||
|
},{
|
||||||
|
name: "Jason Liang",
|
||||||
|
position: "Professional Chair",
|
||||||
|
photo: "img/jason.jpg"
|
||||||
|
},{
|
||||||
|
name: "Vuong Bui",
|
||||||
|
position: "Professional Chair",
|
||||||
|
photo: "img/vuong.jpg"
|
||||||
|
},{
|
||||||
|
name: "Thanh Tong",
|
||||||
|
position: "PR Chair - Graphics",
|
||||||
|
photo: "img/thanh.jpg"
|
||||||
|
},{
|
||||||
|
name: "Abby Hackbarth",
|
||||||
|
position: "PR Chair - Graphics",
|
||||||
|
photo: "img/abby.jpg"
|
||||||
|
},{
|
||||||
|
name: "Brigette Hacia",
|
||||||
|
position: "PR Chair - Marketing",
|
||||||
|
photo: "img/brigette.jpg"
|
||||||
|
},{
|
||||||
|
name: "Darin Tsui",
|
||||||
|
position: "Outreach Chair",
|
||||||
|
photo: "img/darin.jpg"
|
||||||
|
},{
|
||||||
|
name: "Soyon Kim",
|
||||||
|
position: "Outreach Chair",
|
||||||
|
photo: "img/soyon.jpg"
|
||||||
|
},{
|
||||||
|
name: "Niklas Chang",
|
||||||
|
position: "Events Coordinator",
|
||||||
|
photo: "img/niklas.jpg"
|
||||||
|
}];
|
||||||
|
|
||||||
interface MainProps {}
|
interface MainProps {}
|
||||||
interface MainState {}
|
interface MainState {}
|
||||||
|
|
||||||
|
@ -52,15 +152,12 @@ class Main extends React.Component<MainProps, MainState> {
|
||||||
}
|
}
|
||||||
public render() {
|
public render() {
|
||||||
return <>
|
return <>
|
||||||
<TopNav names={ACTIVE_PAGES} links={ACTIVE_PAGES.map(e=>"#" + e.toLowerCase())} image="img/logo.png" alt="IEEE at UCSD Logo"></TopNav>
|
<TopNav names={ACTIVE_PAGES} links={ACTIVE_PAGES.map(e=>"#" + e.toLowerCase())} image="img/IEEEUCSD.png" alt="IEEE at UCSD Logo"></TopNav>
|
||||||
<HorizontalSection title="About" link="about:blank" id="about">
|
<HorizontalSection title="About" link="about:blank" id="about">
|
||||||
<ImageGallery urls={TEAM_PHOTOS} alt="Team photos" delay={8000}></ImageGallery>
|
<ImageGallery urls={TEAM_PHOTOS} alt="Team photos" delay={8000}></ImageGallery>
|
||||||
<span className="description-text">
|
<span className="description-text">
|
||||||
This is the about IEEE text that should describe all about our organization.
|
<strong>We are dedicated to helping develop students into professional Engineers</strong><br/><br/>
|
||||||
This text should be a succinct summary of what we're all about. Lorem, ipsum dolor
|
As an organization, we strive to provide opportunities to students both at UC San Diego and in the larger STEM community to gain hands-on experience with autonomous robotics and its various disciplines. Throughout the year, we host dozens of events and workshops to teach skills not frequently taught in the classroom, as well as outreach events for students looking to give back to the STEM community. We also provide professional development and other resources to help students achieve their true potential as they develop into professional engineers.
|
||||||
sit amet consectetur adipisicing elit. Soluta voluptate eligendi vero enim, qui
|
|
||||||
fugiat eveniet consectetur quis, quas deleniti perferendis minus commodi ducimus
|
|
||||||
ipsum necessitatibus voluptates sed dolor neque?
|
|
||||||
</span>
|
</span>
|
||||||
</HorizontalSection>
|
</HorizontalSection>
|
||||||
<HorizontalSection title="Events" link="about:blank" id="events">
|
<HorizontalSection title="Events" link="about:blank" id="events">
|
||||||
|
@ -78,8 +175,12 @@ class Main extends React.Component<MainProps, MainState> {
|
||||||
ipsum necessitatibus voluptates sed dolor neque?
|
ipsum necessitatibus voluptates sed dolor neque?
|
||||||
</span>
|
</span>
|
||||||
<br/>
|
<br/>
|
||||||
|
<Availability checkUrl="/">Check all availability</Availability>
|
||||||
<ButtonLink url="about:blank">Check all availability</ButtonLink>
|
<ButtonLink url="about:blank">Check all availability</ButtonLink>
|
||||||
</HorizontalSection>
|
</HorizontalSection>
|
||||||
|
<HorizontalSection title="Officers" link="about:blank" id="officers" row={true}>
|
||||||
|
{officers.map(o=><Officer name={o.name} position={o.position} photo={o.photo} key={o.name}></Officer>)}
|
||||||
|
</HorizontalSection>
|
||||||
</>;
|
</>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|