Compare commits

...

122 Commits
main ... main

Author SHA1 Message Date
Shahan Nedadahandeh 91f7add822 Added afterhours and EOT event (#532) 6 days ago
Max Erenberg 7e5466e2bc always remove tmpdir in deploy.sh (#530) 2 weeks ago
Amy Wang 3fe5696dd1 Add Alt-Tab (#528) 2 weeks ago
Shahan Nedadahandeh 9590050d10 Added hiring news and other events (#526) 3 weeks ago
Shahan Nedadahandeh 9e153763f5 Added alt-tab news (#525) 4 weeks ago
Shahan Nedadahandeh e92297d1b3 Add code party 2 event (#524) 4 weeks ago
Amy Wang e3c011c7bf Fix typo (#522) 1 month ago
Amy Wang 4514eb8917 Add Karaoke event and 2023 Class Profile Mailing List news (#519) 2 months ago
Amy Wang 284b90b2fe Update Annie's headshot (#517) 2 months ago
Shahan Nedadahandeh 80795cbb7e Add Rico AMA event (#516) 2 months ago
Amy Wang 4795da482c Add 2023 internship repo (#515) 2 months ago
Amy Wang 6b8d6b0918 Fix VP role (#514) 2 months ago
Amy Wang 6f547908e3 Add librarian (#513) 2 months ago
Shahan Nedadahandeh e36ef5113f Updated exec blurbs (#511) 2 months ago
Beihao Zhou 6fcf793855 Add CSC Kickoff Event News (#510) 2 months ago
Amy Wang dd410b374f Update Meet the Team page for Fall 2022 (#508) 2 months ago
Shahan Nedadahandeh f280ecc9db Add code party event (#509) 2 months ago
Shahan Nedadahandeh 529cf6119c Add project program news (#507) 2 months ago
Shahan Nedadahandeh d74ea51ab1 Update project program image (#506) 2 months ago
Shahan Nedadahandeh 210004a286 Changed project program kickoff room number (#505) 2 months ago
Amy Wang 192dcc2356 Update Project Program event time (#504) 2 months ago
Amy Wang 7176815506 Add Amy's image (#501) 2 months ago
Shahan Nedadahandeh 8b09dcfa47 Added project program event (#503) 3 months ago
Amy Wang 80f618f1e8 Appoint office manager (#502) 3 months ago
Amy Wang dd8babc3f6 Add appointed positions news (#498) 3 months ago
Raymond Li 6d844b2c3c Fix typo (#499) 3 months ago
Raymond Li 7a3ba134c1 New term ~~new~~ revised intro 3 months ago
Amy Wang 9e75ab1c25 Add Fall 2022 Election Results (#497) 3 months ago
Mark Chiu bccbffded5 Add CSC BOT event (#496) 3 months ago
Mark Chiu d411433f4b Add First Year Orientation & Fall 2022 Elections to events (#494) 3 months ago
Mark Chiu 9c5a4d8050 Add bootcamp resume review & mock interviews signup event (#493) 3 months ago
Jared He 558bdae40b Add news "[CSC] Fall 2022 Election Nominations + New Services (Nextcloud, Shlink)" (#492) 3 months ago
Amy Wang 94156adfd2 Fix exec fetching and add events (#491) 3 months ago
Amy Wang f5072d38fd Add Code Party 3 (#490) 4 months ago
Aditya Thakral be308f6249 Create members.json api (#489) 4 months ago
Raymond Li 8e0e446fd9 Update Leo in syscom/termcom (#488) 4 months ago
Shahan Nedadahandeh 8c43ed47b2 Remove warning about emails being lost (#487) 4 months ago
Amy Wang 6e31d572ba Add warning about emails being lost (#486) 4 months ago
Amy Wang 82cf6a7872 Update Fall 2022 hiring deadline (#484) 4 months ago
Jared He c509757975 Make recent images square (#483) 4 months ago
Amy Wang 72723df9eb Add Fall 2022 hiring news (#482) 5 months ago
Jared He f4fbfa254a Add events (#481) 5 months ago
Amy Wang 0a30564750 Update team name to Community Representatives (#478) 5 months ago
Raymond Li 7f9706a1b5 Update the MUA (#473) 5 months ago
Shahan Nedadahandeh 13c6a0fb91 Added afterhours event (#477) 5 months ago
Amy Wang 0a3222a9ce Update Anton Mosunov Prof Talk room (#476) 5 months ago
Shahan Nedadahandeh e88283bc64 Added CTF and Code party events (#475) 5 months ago
Amy Wang e7ca161e76 Fix Andrew Wang Photos (#471) 5 months ago
Amy Wang 14ef810ad9 Image Optimization - Create new ImagePool for each batch (#470) 5 months ago
Aditya Thakral 767e32511d Add some docs about architecture (#459) 6 months ago
Aditya Thakral 44af493832 Do not use index: as metadata for OrganizedContent (#468) 6 months ago
Amy Wang 0f0a25596d Add temporary Eden blurb (#467) 6 months ago
Jared He e1af564621 Redesign and update 'Meet the Team' data (#452) 6 months ago
Max Erenberg d0cc21f406 Add section for cloud accounts (#462) 6 months ago
Shahan Nedadahandeh ad6e02685d Added code party scream event and csc update warning (#463) 6 months ago
Mark Chiu 07b4b77e0c Add Movie Night Event Spring 2022 (#460) 6 months ago
Mark Chiu f631f4013f Implement dark theme (Closes #287) (#407) 6 months ago
Amy Wang 443925190e Improve image optimization run-time and memory usage (#457) 6 months ago
Amy Wang e336bed2aa Add Haley's Blurb (#455) 6 months ago
Raymond Li a2f0a20929 Update my blurb (#454) 6 months ago
Neil Parikh 49925d4cfa Bondfire date change (#453) 7 months ago
Shahan Nedadahandeh f12ffbb925 Add endDate to events (#446) 7 months ago
b38peng c665be281a Add Bondfire event (#447) 7 months ago
Amy Wang fac62e8772 Add Sat's blurb (#440) 7 months ago
Amy Wang 0c94c4b3fb Add CxC Summit and Bonnie's exec blurb (#439) 7 months ago
Aditya Thakral c395dcbcd6 Add myself as an alumni (#438) 7 months ago
Amy Wang a1f418e608 Fix Meet the Team page blurbs and exec images (#435) 7 months ago
Amy Wang aece9ce761 Add S22 elections results (#433) 7 months ago
Amy Wang 180622a71b Add Spring 2022 Elections (#432) 7 months ago
Amy Wang 7be1adb860 Add Spring 2022 Bootcamp mentor application news (#431) 7 months ago
Amy Wang af69b0ab98 Update Get Involved page membership instructions (#429) 7 months ago
Neil Parikh 419a3dd3c6 regen website 8 months ago
Beihao Zhou 08405cabee Add EOT event (#421) 8 months ago
Beihao Zhou 672a4ce013 s22-hiring-news (#420) 8 months ago
Shahan Nedadahandeh c13b6a98f9 Added custom 404 page (#410) 9 months ago
Shahan Nedadahandeh 174ddff299 Addec unix101-1 recording to tech talks (#415) 9 months ago
Amy Wang e74e2279b4 Add Code Party Event (#419) 9 months ago
Jared He 0f1e8b7e81 Link from [term] to [term]/[event] (#412) 9 months ago
Jared He b0ca27416c Add Unix 101 FS/Perms & vim event (#416) 9 months ago
Beihao Zhou bb073136b0 Use LDAP API to fetch executive members' name (Closes #376) (#396) 9 months ago
Shahan Nedadahandeh dd911c12ea added Unix-101-1 event (#411) 9 months ago
Neil Parikh d85016e2cc Empty commit to regen website 9 months ago
Aditya Thakral 4982b86de9 Docs for how pages work (#391) 9 months ago
Beihao Zhou d04115fb12 Separate Teams on Meet the Team page (Close #346) (#404) 9 months ago
Amy Wang 328a2041fa Add Project Program Kick-off, Valentine's Day Speed-Friending, and Tesla Coffee Chat events (#408) 9 months ago
Mark Chiu 31c81f8620 Add Multiple News Items on Homepage and Single News Item Page (Closes #281) (#390) 10 months ago
Shahan Nedadahandeh bb78a3d53d Warning Header (Closes #205) (#394) 10 months ago
Raymond Li 4aaa112822
Merge branch 'main' of csclub.uwaterloo.ca:www/www-new 10 months ago
Raymond Li 17ff0e9b7a
Create SeshanRavikumar.jpg 10 months ago
Raymond Li 73d88f5a46 Remove Paypal (#399) 10 months ago
Raymond Li 2a93c9029a Replace Paypal with commented WUSA store 10 months ago
Raymond Li e285cb0553 Remove Paypal 10 months ago
Beihao Zhou 78c751fce0 Add news for winter 2022 election results (Closes #380) (#383) 10 months ago
Raymond Li b9cd0f6b66 Waive w22 fees (#395) 10 months ago
Amy Wang fc9236f128 Change Discord Mod to Discord (#393) 10 months ago
Mark Chiu 39cece999c Update Meet The Team page for Winter 2022 (Closes #382) (#388) 11 months ago
Amy Wang 84144c10ab Add Afterhours and BOT events (#389) 11 months ago
Renovate Bot d6509b1bfa Update dependency @next/mdx to v11.1.3 (#143) 11 months ago
Renovate Bot dcba1a8cd9 Update npm to v8 (#340) 11 months ago
Renovate Bot cd660a523e Update dependency postcss-preset-env to v7 (#360) 11 months ago
Jared He 2264e60852 Add Term Type (#361) 11 months ago
Amy Wang ff0594eac7 Mobile TeamMemberCard fixes (#368) 11 months ago
Beihao Zhou fdb6bb1ccf Sort Members by name instead of userid (Fixes #371) (#384) 11 months ago
Shahan Nedadahandeh d11aa814ce Fixed logo centering on home page (#386) 11 months ago
Beihao Zhou 92b2e64f5b Add Bootcamp Resume Critique + Mock Interviews to Events (Close #375) (#385) 11 months ago
Mark Chiu 02bb095263 add emily's name & face to the meet our team page (#378) 11 months ago
Beihao Zhou 4af820f150 Update Beihao's name and photo on team page (#377) 11 months ago
Shahan Nedadahandeh e4c0d37337 Added bootcamp mentor signup to news (Jan2022) (Closes #374) (#381) 11 months ago
Shahan Nedadahandeh 8f244bf627 Added Shahan's name and photo to the team page (#379) 11 months ago
Amy Wang 523c4de481 Add Fall 2021 EOT event (#373) 11 months ago
Max Erenberg b98e91af9f run CI 1 year ago
Jared He deaa623d8e Add title to Members page (#366) 1 year ago
Amy Wang 2c2d8abd6a Add Yanni's blurb (#367) 1 year ago
Jared He e6315cf906 Generate members list (#354) 1 year ago
Amy Wang 85e5080012 Update Meet the Team page for Fall 2021 (#363) 1 year ago
Amy Wang fa8cff4a36 Add Winter 2022 hiring news (#362) 1 year ago
Jared He e2ff165a39 Add Tesla event (and other old ones) (#358) 1 year ago
c29wan 56d52a5de6 fix h2,h3,h4 sizing in markdown files (#341) 1 year ago
Max Erenberg d585c4a1af add Fireside Chat event 1 year ago
Amy Wang aae5c9adef Image Optimization Script (#348) 1 year ago
Max Erenberg 041dfac2f2 fix typo in Yanni's username 1 year ago
k4tu 77f385e2cb Update Kallen Tu bio. (#353) 1 year ago
  1. 23
      .drone.yml
  2. 7
      .eslintrc.js
  3. 9
      .gitignore
  4. 6
      .vscode/settings.json
  5. 18
      README.md
  6. 2
      components/ArchivePage.module.css
  7. 4
      components/ArchivePage.tsx
  8. 1
      components/Bubble.module.css
  9. 4
      components/Button.module.css
  10. 4
      components/EventCard.module.css
  11. 29
      components/EventCard.tsx
  12. 4
      components/EventDescriptionCard.module.css
  13. 13
      components/EventDescriptionCard.tsx
  14. 33
      components/EventSetting.tsx
  15. 4
      components/Footer.module.css
  16. 14
      components/Footer.tsx
  17. 4
      components/Link.module.css
  18. 20
      components/MiniEventCard.module.css
  19. 32
      components/MiniEventCard.tsx
  20. 10
      components/Navbar.module.css
  21. 71
      components/Navbar.tsx
  22. 8
      components/NewsCard.module.css
  23. 11
      components/NewsCard.tsx
  24. 10
      components/OrganizedContent.module.css
  25. 4
      components/OrganizedContent/Header.module.css
  26. 2
      components/SocialLinks.module.css
  27. 10
      components/SocialLinks.tsx
  28. 6
      components/Table.module.css
  29. 12
      components/TeamMember.module.css
  30. 4
      components/TeamMember.tsx
  31. 66
      components/TeamMemberCard.module.css
  32. 71
      components/TeamMemberCard.tsx
  33. 75
      components/Theme.tsx
  34. 12
      components/WarningHeader.module.css
  35. 61
      components/WarningHeader.tsx
  36. 14
      content/about/code-of-conduct/ORDER.json
  37. 1
      content/about/code-of-conduct/additional-information.md
  38. 1
      content/about/code-of-conduct/addressing-grievances.md
  39. 1
      content/about/code-of-conduct/confidentiality.md
  40. 1
      content/about/code-of-conduct/consequences-of-inappropriate-behaviour.md
  41. 1
      content/about/code-of-conduct/contact-information.md
  42. 1
      content/about/code-of-conduct/expected-behaviour.md
  43. 1
      content/about/code-of-conduct/experiencing-unacceptable-behaviour.md
  44. 1
      content/about/code-of-conduct/license-information-and-attribution.md
  45. 1
      content/about/code-of-conduct/purpose.md
  46. 1
      content/about/code-of-conduct/revision.md
  47. 1
      content/about/code-of-conduct/scope-and-spaces.md
  48. 1
      content/about/code-of-conduct/unacceptable-behaviour.md
  49. 16
      content/about/constitution/ORDER.json
  50. 1
      content/about/constitution/amendments-and-procedures.md
  51. 1
      content/about/constitution/code-of-conduct.md
  52. 1
      content/about/constitution/committees.md
  53. 1
      content/about/constitution/dissolution.md
  54. 1
      content/about/constitution/duties-of-officers.md
  55. 1
      content/about/constitution/executive-council.md
  56. 1
      content/about/constitution/finances.md
  57. 1
      content/about/constitution/meetings.md
  58. 1
      content/about/constitution/membership.md
  59. 1
      content/about/constitution/name.md
  60. 1
      content/about/constitution/officers.md
  61. 1
      content/about/constitution/purpose.md
  62. 1
      content/about/constitution/revision.md
  63. 1
      content/about/constitution/use-of-club-resources.md
  64. 2
      content/events/1994/fall/ACM-Style-Programming-Contest.md
  65. 2
      content/events/1994/fall/CSC-Elections.md
  66. 2
      content/events/1994/fall/Exploring-the-Internet.md
  67. 2
      content/events/1994/fall/Game-Theory.md
  68. 2
      content/events/1994/fall/Movie-Outing-Brainstorm.md
  69. 2
      content/events/1994/fall/Prograph-Picture-the-Future.md
  70. 2
      content/events/1994/fall/SIGGRAPH-Video-Night.md
  71. 2
      content/events/1994/fall/UNIX-I-Tutorial.md
  72. 2
      content/events/1994/fall/UNIX-II-Tutorial.md
  73. 2
      content/events/1999/fall/Calculational-Mathematics.md
  74. 2
      content/events/1999/fall/Ctrl-D.md
  75. 2
      content/events/1999/fall/GDB,-Purify-Tutorial.md
  76. 2
      content/events/1999/fall/Homebrew-Processors-and-Integrated-Systems-in-FPGAs.md
  77. 2
      content/events/1999/fall/Living-Laboratories-The-Future-Computing-Environments-at-Georgia-Tech.md
  78. 2
      content/events/1999/fall/Open-Q&A-session.md
  79. 2
      content/events/1999/fall/Proofs-and-Programs.md
  80. 2
      content/events/2000/fall/CSC-Elections.md
  81. 2
      content/events/2000/fall/Realising-the-Next-Generation-Internet.md
  82. 2
      content/events/2000/fall/SIGGraph-Video-Night.md
  83. 2
      content/events/2000/spring/Ctrl-D.md
  84. 2
      content/events/2000/winter/Enterprise-Java-APIs-and-Implementing-a-Web-Portal-(1).md
  85. 2
      content/events/2000/winter/Enterprise-Java-APIs-and-Implementing-a-Web-Portal.md
  86. 2
      content/events/2001/spring/ACM-Style-programming-contest.md
  87. 2
      content/events/2001/winter/ACM-Style-programming-contest.md
  88. 2
      content/events/2001/winter/Executive-elections.md
  89. 2
      content/events/2001/winter/Meeting-#2.md
  90. 2
      content/events/2001/winter/Meeting-#3.md
  91. 2
      content/events/2001/winter/Meeting-#4.md
  92. 2
      content/events/2001/winter/Meeting-#5.md
  93. 2
      content/events/2002/fall/A-GNU-Approach-to-Virtual-Memory-Management-in-a-Multiserver-Operating-System.md
  94. 2
      content/events/2002/fall/Automatic-Memory-Management-and-Garbage-Collection.md
  95. 2
      content/events/2002/fall/Business-Meeting.md
  96. 2
      content/events/2002/fall/Debian-in-the-Enterprise.md
  97. 2
      content/events/2002/fall/F02-elections.md
  98. 2
      content/events/2002/fall/GNULinux-InstallFest-with-KW-LUG-and-UW-DIG.md
  99. 2
      content/events/2002/fall/GNULinux-on-HPPA.md
  100. 2
      content/events/2002/fall/Metaprogramming-GPUs.md
  101. Some files were not shown because too many files have changed in this diff Show More

@ -23,25 +23,40 @@ steps:
commands:
- npm run lint
- name: build
- name: optimize-images
image: node:16
depends_on:
- install-deps
commands:
- npm run build:web
- npm run build:images
- name: generate-calendar
image: node:16
depends_on:
- install-deps
commands:
- npm run generate:calendar
- npm run build:calendar
- name: generate-api
image: node:16
depends_on:
- install-deps
commands:
- npm run build:api
- name: build
image: node:16
depends_on:
- optimize-images
commands:
- USE_LDAP=true npm run build:web
- name: export
image: node:16
depends_on:
- build
- generate-api
- generate-calendar
- build
commands:
- npm run export

@ -17,7 +17,12 @@ module.exports = {
],
plugins: ["@typescript-eslint", "react", "react-hooks", "prettier"],
rules: {
"prettier/prettier": "error",
'prettier/prettier': [
'error',
{
'endOfLine': 'lf',
}
],
"import/first": "error",
"import/order": [

9
.gitignore vendored

@ -25,4 +25,11 @@ yarn-debug.log*
yarn-error.log*
# Calendar is automatically generated
/public/events.ics
/public/events.ics
# Images should be optimized
/public/images
# APIs should be automatically generated, schema should be checked in
/public/api/*
!/public/api/schema

@ -40,7 +40,11 @@
"files.eol": "\n",
"[markdown]": {
"editor.wordWrap": "on",
"editor.quickSuggestions": false,
"editor.quickSuggestions": {
"comments": "off",
"strings": "off",
"other": "off"
},
"editor.tabSize": 4
}
}

@ -1,6 +1,13 @@
# Development
# README
## Dependencies
## Documentation
- [Architecture and Folder Structure](docs/architecture.md)
- [Everything about pages](docs/pages.md)
## Development
### Dependencies
Make sure that you have `node` >= 14 and `npm` >= 7. Node 14 ships with npm v6,
so if you're using node 14, you would need to upgrade npm. Alternatively you
@ -8,19 +15,20 @@ could also upgrade to node 16, which ships with npm 7.
How to upgrade npm: `npm i -g npm`
## Local
### Local
- `npm install` to install project dependencies
- `npm run build:images` to optimize images for the first time after cloning
- `npm run dev` to run the dev server (http://localhost:3000)
## Production
### Production
- `npm install` to install project dependencies
- `npm run build` to generate html/css/js
- `npm run export` to move the built files (along with assets in the public directory) to the `/out` directory
- Use your favourite web server to host the files in the `/out` directory. (A very simple one would be `python -m http.server` - not sure if it should actually be used for production :P)
# Deploy
## Deploy
- `groups` (make sure you're in the `www` group)
- `curl -o- https://git.csclub.uwaterloo.ca/www/www-new/raw/branch/main/deploy.sh | bash` (run on `caffeine`)

@ -3,7 +3,7 @@
}
.page > h1 {
border-bottom: calc(1rem / 16) solid var(--primary-heading);
border-bottom: calc(1rem / 16) solid var(--border);
padding-bottom: 1rem;
}

@ -1,6 +1,6 @@
import React from "react";
import { capitalize } from "@/utils";
import { capitalize, Term } from "@/utils";
import { Link } from "./Link";
import {
@ -16,7 +16,7 @@ export interface Props {
type: "news" | "events";
items: {
year: string;
terms: string[];
terms: Term[];
}[];
}

@ -6,7 +6,6 @@
.bubble {
--border-radius: calc(5000rem / 16);
display: flex;
flex-direction: row;
position: absolute;

@ -2,8 +2,8 @@
.link {
font-family: "Poppins", "sans-serif";
border-radius: calc(20rem / 16);
background-color: var(--primary-accent);
color: var(--primary-background);
background-color: var(--button-background);
color: var(--text-light);
border: none;
outline: none;
transition-duration: 0.3s;

@ -31,6 +31,10 @@
margin-bottom: 0;
}
.content > h1 a {
color: var(--primary-heading);
}
.content,
.content > h2 {
font-weight: 400;

@ -10,7 +10,8 @@ import styles from "./EventCard.module.css";
interface EventCardProps {
name: string;
short: string;
date: Date;
startDate: Date;
endDate?: Date;
online: boolean;
location: string;
poster?: string;
@ -18,18 +19,27 @@ interface EventCardProps {
permaLink: string;
showDescription?: boolean;
children: ReactNode;
year: number;
term: string;
slug: string;
titleLinked: boolean;
}
export function EventCard({
permaLink,
name,
date,
startDate,
endDate,
online,
location,
poster,
registerLink,
children,
showDescription = false,
year,
term,
slug,
titleLinked,
}: EventCardProps) {
return (
<article className={styles.card}>
@ -54,9 +64,20 @@ export function EventCard({
showDescription ? styles.mobileShowDescriptionContent : "",
].join(" ")}
>
<h1>{name}</h1>
<h1>
{titleLinked ? (
<Link href={`/events/${year}/${term}/${slug}`}>{name}</Link>
) : (
name
)}
</h1>
<h2>
<EventSetting date={date} online={online} location={location} />
<EventSetting
startDate={startDate}
endDate={endDate}
online={online}
location={location}
/>
</h2>
{!showDescription && (
<Link href={permaLink}>

@ -4,7 +4,7 @@
max-width: calc(540rem / 16);
padding: calc(24rem / 16);
border-radius: calc(20rem / 16);
background-color: var(--primary-background);
background-color: var(--card-background);
}
.poster {
@ -38,7 +38,7 @@
.setting {
margin: 0;
color: var(--primary-accent);
color: var(--link);
font-size: calc(14rem / 16);
font-weight: 600;
}

@ -13,7 +13,8 @@ interface Props {
short: string;
online: boolean;
location: string;
date: Date;
startDate: Date;
endDate?: Date;
poster?: string;
registerLink?: string;
permaLink: string;
@ -34,7 +35,8 @@ export function EventDescriptionCard({
poster,
name,
short,
date,
startDate,
endDate,
online,
registerLink,
permaLink,
@ -48,7 +50,12 @@ export function EventDescriptionCard({
<div className={styles.details}>
<h1 className={styles.name}>{name}</h1>
<h2 className={styles.setting}>
<EventSetting date={date} online={online} location={location} />
<EventSetting
startDate={startDate}
endDate={endDate}
online={online}
location={location}
/>
</h2>
<p className={styles.desc}>{short}</p>
<Link href={permaLink}>Learn more</Link>

@ -3,30 +3,51 @@ import React from "react";
import styles from "./EventSetting.module.css";
interface Props {
date: Date;
startDate: Date;
endDate?: Date;
online: boolean;
location: string;
}
export function EventSetting(props: Props) {
const date = props.date.toLocaleDateString("en-US", {
const date = props.startDate.toLocaleDateString("en-US", {
day: "numeric",
month: "long",
year: "numeric",
});
const time = props.date.toLocaleTimeString("en-US", {
const time = props.startDate.toLocaleTimeString("en-US", {
hour: "numeric",
minute: "numeric",
timeZoneName: "short",
});
const endDate =
props.endDate?.toLocaleDateString("en-US", {
day: "numeric",
month: "long",
year: "numeric",
}) ?? "";
const location = props.online ? `Online - ${props.location}` : props.location;
const separator = <span className={styles.separator}> | </span>;
return (
<div className={styles.container}>
<time dateTime={props.date.toISOString()}>{date}</time>
{separator}
<span>{time}</span>
{!props.endDate || date == endDate ? (
// Single day event
<>
<time dateTime={props.startDate.toISOString()}>{date}</time>
{separator}
<span>{time}</span>
</>
) : (
// Multi day event
<span>
<time dateTime={props.startDate.toISOString()}>{date}</time>
<span> - </span>
<time dateTime={props.startDate.toISOString()}>{endDate}</time>
</span>
)}
{separator}
{location}
</div>

@ -1,6 +1,6 @@
.footer {
box-sizing: border-box;
background: var(--primary-heading);
background: var(--footer-background);
padding: 1rem 0;
width: 100%;
}
@ -17,7 +17,7 @@
}
.text {
color: var(--primary-background);
color: var(--text-light);
font-style: normal;
text-align: center;
}

@ -1,11 +1,15 @@
import Link from "next/link";
import React from "react";
import { Button } from "./Button";
import { SocialLinks } from "./SocialLinks";
import { useThemeContext } from "./Theme";
import styles from "./Footer.module.css";
export function Footer() {
const themeContext = useThemeContext();
return (
<footer className={styles.footer}>
<div className={styles.container}>
@ -15,6 +19,16 @@ export function Footer() {
<a className={styles.email}>exec@csclub.uwaterloo.ca</a>
</Link>
</div>
<Button
size="small"
onClick={() =>
themeContext?.theme.name === "dark"
? themeContext?.setTheme("light")
: themeContext?.setTheme("dark")
}
>
Toggle Theme
</Button>
<SocialLinks color="white" size="small" />
</div>
</footer>

@ -1,5 +1,5 @@
.link {
color: var(--primary-accent);
color: var(--link);
transition-duration: 0.3s;
text-decoration: none;
white-space: normal;
@ -7,5 +7,5 @@
}
.link:hover {
color: var(--secondary-accent);
color: var(--link-hover);
}

@ -2,10 +2,11 @@
box-sizing: border-box;
position: relative;
padding: calc(20rem / 16);
color: var(--text);
}
.card:nth-child(odd) {
background-color: var(--secondary-accent-light);
.darkBg {
background-color: var(--dark-card-background);
}
.name {
@ -14,6 +15,10 @@
margin: 0;
}
.name a {
color: var(--primary-heading);
}
.nameSpacer {
width: calc(140rem / 16);
}
@ -57,6 +62,17 @@
fill: var(--primary-accent);
}
.card h1,
.card h2,
.card h3,
.card h4 {
font-size: calc(18rem / 16);
margin-top: calc(24rem / 16);
margin-bottom: calc(8rem / 16);
color: var(--mini-event-card-text);
}
@media only screen and (max-width: calc(768rem / 16)) {
.details {
bottom: 0;

@ -1,36 +1,54 @@
import React, { ReactNode } from "react";
import { EventSetting } from "./EventSetting";
import { Link } from "./Link";
import styles from "./MiniEventCard.module.css";
interface Props {
interface MiniEventCardProps {
name: string;
description: ReactNode;
short: string;
online: boolean;
location: string;
date: Date;
startDate: Date;
endDate?: Date;
background: "dark-bg" | "normal-bg";
year: number;
term: string;
slug: string;
}
export const MiniEventCard: React.FC<Props> = ({
export const MiniEventCard: React.FC<MiniEventCardProps> = ({
name,
short,
description,
location,
date,
startDate,
endDate,
online,
background,
year,
term,
slug,
}) => {
const cardBackground =
background === "dark-bg" ? `${styles.darkBg} ${styles.card}` : styles.card;
return (
<details className={styles.card}>
<details className={cardBackground}>
<summary>
<div onClick={(event) => event.preventDefault()}>
<h2 className={styles.name}>
<div>{name}</div>
<Link href={`/events/${year}/${term}/${slug}`}>{name}</Link>
<div className={styles.nameSpacer}></div>
</h2>
<div className={styles.info}>
<EventSetting date={date} location={location} online={online} />
<EventSetting
startDate={startDate}
endDate={endDate}
location={location}
online={online}
/>
</div>
<p className={styles.shortDescription}>{short}</p>
</div>

@ -63,7 +63,7 @@
}
.navMenu a {
color: var(--primary-heading);
color: var(--primary-text);
text-decoration: none;
}
@ -219,6 +219,14 @@
cursor: pointer;
}
.icon line {
stroke: var(--icon);
}
.icon path {
fill: var(--icon);
}
.navMobileBackground {
position: fixed;
visibility: hidden;

@ -32,6 +32,10 @@ const menu: Menu = [
name: "Meet the Team",
route: "/about/team",
},
{
name: "Members",
route: "/about/members",
},
{
name: "Constitution",
route: "/about/constitution",
@ -94,7 +98,7 @@ const menu: Menu = [
},
{
name: "Internships",
route: "https://github.com/uwcsc/winter2022-internships",
route: "https://github.com/uwcsc/2023-internships",
},
],
},
@ -116,7 +120,7 @@ export function Navbar() {
className={styles.hamburger}
onClick={() => dispatch({ type: "open", route: router.pathname })}
>
<Image src="/images/hamburger.svg" alt="Menu" />
<HamburgerSvg />
</button>
<div
className={
@ -259,7 +263,7 @@ function NavItem(props: NavItemProps) {
}
onClick={() => props.onToggle(props.route)}
>
<Image src="/images/dropdown-icon.svg" alt="Dropdown Icon" />
<DropdownSvg />
</button>
<ul
className={
@ -344,3 +348,64 @@ function getMainRoute(route: string) {
}
return "/" + route.split("/")[1];
}
function HamburgerSvg() {
return (
<svg
width="30"
height="23"
viewBox="0 0 30 23"
className={styles.icon}
xmlns="http://www.w3.org/2000/svg"
>
<line
x1="28"
y1="2"
x2="2"
y2="2"
stroke="#2A2A62"
strokeWidth="4"
strokeLinecap="round"
strokeLinejoin="round"
/>
<line
x1="28"
y1="11.375"
x2="2"
y2="11.375"
stroke="#2A2A62"
strokeWidth="4"
strokeLinecap="round"
strokeLinejoin="round"
/>
<line
x1="28"
y1="20.75"
x2="2"
y2="20.75"
stroke="#2A2A62"
strokeWidth="4"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
}
function DropdownSvg() {
return (
<svg
width="14"
height="9"
viewBox="0 0 14 9"
fill="none"
className={styles.icon}
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M7.75593 8.12713C7.35716 8.58759 6.64284 8.58759 6.24407 8.12713L0.638743 1.65465C0.0778675 1.00701 0.537921 0 1.39467 0L12.6053 0C13.4621 0 13.9221 1.00701 13.3613 1.65465L7.75593 8.12713Z"
fill="#2A2A62"
/>
</svg>
);
}

@ -1,23 +1,26 @@
.card {
padding: calc(30rem / 16) calc(40rem / 16);
max-width: calc(524rem / 16);