initial rewrite

This commit is contained in:
LBlend committed 2021-06-22 04:06:22 +02:00
1 parent 75bbe14fa1
commit 2d2bb4999e
46 files changed
+15089 -20288

No files matched your search

-7
View File
@@ -1,7 +0,0 @@
/**
* Implement Gatsby's Browser APIs in this file.
*
* See: https://www.gatsbyjs.com/docs/browser-apis/
*/
// You can delete this file if you're not using it
+23 -10
View File
@@ -1,11 +1,17 @@
module.exports = {
siteMetadata: {
title: `Gatsby Default Starter`,
description: `Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.`,
author: `@gatsbyjs`,
title: `UiO Gaming`,
description: `En hobbyforening som ønsker skape et sosialt miljø rundt gaming og E-sport på UiO!`,
author: `@uiogaming`,
},
plugins: [
`gatsby-plugin-react-helmet`,
{
resolve: "gatsby-plugin-manifest",
options: {
icon: "src/images/logo.jpg",
},
},
`gatsby-plugin-image`,
{
resolve: `gatsby-source-filesystem`,
@@ -17,18 +23,25 @@ module.exports = {
`gatsby-transformer-sharp`,
`gatsby-plugin-sharp`,
{
resolve: `gatsby-plugin-manifest`,
resolve: `gatsby-source-sanity`,
options: {
name: `gatsby-starter-default`,
short_name: `starter`,
projectId: `mmqlu667`,
dataset: `production`,
watchMode: true,
},
},
{
resolve: `gatsby-plugin-manifest`,
options: {
name: `UiO Gaming`,
short_name: `uiogaming.no`,
start_url: `/`,
background_color: `#663399`,
theme_color: `#663399`,
background_color: `#171520`,
theme_color: `#E2231A`,
display: `minimal-ui`,
icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site.
icon: `src/images/logo.jpg`, // This path is relative to the root of the site.
},
},
`gatsby-plugin-gatsby-cloud`,
// this (optional) plugin enables Progressive Web App + Offline functionality
// To learn more, visit: https://gatsby.dev/offline
// `gatsby-plugin-offline`,
+30 -6
View File
@@ -1,7 +1,31 @@
/**
* Implement Gatsby's Node APIs in this file.
*
* See: https://www.gatsbyjs.com/docs/node-apis/
*/
const path = require("path")
// You can delete this file if you're not using it
module.exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions
const blogTemplate = path.resolve("./src/components/blogPost.js")
const result = await graphql(`
query {
allSanityPost {
nodes {
_id
slug {
current
}
}
}
}
`)
const posts = result.data.allSanityPost.nodes
posts.forEach(post => {
const path = `/blog/${post.slug.current}`
createPage({
path,
component: blogTemplate,
context: {
id: post._id,
},
})
})
}
-7
View File
@@ -1,7 +0,0 @@
/**
* Implement Gatsby's SSR (Server Side Rendering) APIs in this file.
*
* See: https://www.gatsbyjs.com/docs/ssr-apis/
*/
// You can delete this file if you're not using it
-19486
View File
File diff suppressed because it is too large. Load diff
+13 -14
View File
@@ -1,31 +1,30 @@
{
"name": "gatsby-starter-default",
"name": "uiogaming.no",
"private": true,
"description": "A simple starter to get up and developing quickly with Gatsby",
"description": "UiO Gaming Website",
"version": "0.1.0",
"author": "Kyle Mathews <mathews.kyle@gmail.com>",
"author": "LBlend <lblend@protonmail.com",
"dependencies": {
"@sanity/block-content-to-react": "^3.0.0",
"gatsby": "^3.4.1",
"gatsby-plugin-gatsby-cloud": "^2.4.1",
"gatsby-plugin-image": "^1.4.0",
"gatsby-plugin-manifest": "^3.4.0",
"gatsby-plugin-offline": "^4.4.0",
"gatsby-plugin-react-helmet": "^4.4.0",
"gatsby-plugin-sharp": "^3.4.1",
"gatsby-source-filesystem": "^3.4.0",
"gatsby-transformer-sharp": "^3.4.0",
"gatsby-plugin-sharp": "^3.7.1",
"gatsby-source-filesystem": "^3.7.1",
"gatsby-source-sanity": "^7.0.4",
"gatsby-transformer-sharp": "^3.7.1",
"prop-types": "^15.7.2",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-helmet": "^6.1.0"
"react-helmet": "^6.1.0",
"react-icons": "^4.2.0",
"sharp": "^0.28.3"
},
"devDependencies": {
"prettier": "2.2.1"
},
"keywords": [
"gatsby"
],
"license": "0BSD",
"scripts": {
"build": "gatsby build",
"develop": "gatsby develop",
@@ -37,9 +36,9 @@
},
"repository": {
"type": "git",
"url": "https://github.com/gatsbyjs/gatsby-starter-default"
"url": "https://github.com/UiO-Gaming/uiogaming.no"
},
"bugs": {
"url": "https://github.com/gatsbyjs/gatsby/issues"
"url": "https://github.com/UiO-Gaming/uiogaming.no/issues"
}
}
+85
View File
@@ -0,0 +1,85 @@
import * as React from "react"
import * as styles from "./blogPost.module.css"
import { graphql } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
import PortableText from "@sanity/block-content-to-react"
import urlBuilder from "@sanity/image-url"
export const query = graphql`
query($id: String!) {
sanityPost(_id: { eq: $id }) {
_createdAt(formatString: "DD. MMMM, YYYY", locale: "nb_NO")
title
author {
name
image {
asset {
gatsbyImageData(width: 64, height: 64)
}
}
}
mainImage {
asset {
gatsbyImageData
}
}
excerpt
body {
children {
_key
_type
text
marks
}
_type
list
style
}
}
}
`
const urlFor = source =>
urlBuilder({ projectId: "mmqlu667", dataset: "production" }).image(source)
const serializer = {
types: {
mainImage: props => (
<figure>
<img src={urlFor(props.node.asset).width(600).url()} />
<figcaption>{props.node.caption}</figcaption>
</figure>
),
},
}
const BlogPost = ({ data }) => {
return (
<div className={styles.container}>
<article>
<header>
<p className={styles.published}>{data.sanityPost._createdAt}</p>
<GatsbyImage
image={data.sanityPost.mainImage.asset.gatsbyImageData}
className={styles.headerImage}
/>
<h1>{data.sanityPost.title}</h1>
<p>{data.sanityPost.excerpt}</p>
<div className={styles.author}>
<GatsbyImage
image={data.sanityPost.author.image.asset.gatsbyImageData}
/>
<p>{data.sanityPost.author.name}</p>
</div>
</header>
<div className={styles.content}>
<PortableText blocks={data.sanityPost.body} serializer={serializer} />
</div>
</article>
</div>
)
}
export default BlogPost
+43
View File
@@ -0,0 +1,43 @@
.container {
display: grid;
place-items: center;
}
.article {
display: grid;
place-items: center;
padding: 3rem 1rem;
}
.header {
border-bottom: var(--blog-header-divider);
padding-bottom: 1rem;
margin-bottom: 3rem;
}
.headerImage {
max-height: 75vh;
margin: 1rem 0;
max-width: 1280px;
}
h1 {
font-size: 3rem;
line-height: 1;
padding: 1.5rem 0;
}
.content {
max-width: 60ch;
}
.published {
font-weight: 100;
}
.author {
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
gap: 0.5em;
font-weight: 100;
}
.author img {
border-radius: 50%;
border: 2px solid white;
}
View File
Whitespace-only changes.
View File
Whitespace-only changes.
-42
View File
@@ -1,42 +0,0 @@
import * as React from "react"
import PropTypes from "prop-types"
import { Link } from "gatsby"
const Header = ({ siteTitle }) => (
<header
style={{
background: `rebeccapurple`,
marginBottom: `1.45rem`,
}}
>
<div
style={{
margin: `0 auto`,
maxWidth: 960,
padding: `1.45rem 1.0875rem`,
}}
>
<h1 style={{ margin: 0 }}>
<Link
to="/"
style={{
color: `white`,
textDecoration: `none`,
}}
>
{siteTitle}
</Link>
</h1>
</div>
</header>
)
Header.propTypes = {
siteTitle: PropTypes.string,
}
Header.defaultProps = {
siteTitle: ``,
}
export default Header
+16
View File
@@ -0,0 +1,16 @@
import * as React from "react"
import * as styles from "./button.module.css"
const Button = () => (
<a
href="https://discord.uiogaming.no"
target="_blank"
rel="noreferrer"
className={styles.button}
>
Bli med!
</a>
)
export default Button
+13
View File
@@ -0,0 +1,13 @@
.button {
font-size: 2rem;
background-color: var(--main-color);
padding: 0.5em 1em;
border-radius: 999em;
color: var(--text-color);
}
.button:hover {
color: white;
background-color: rgb(255, 62, 52);
}
-597
View File
@@ -1,597 +0,0 @@
html {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
font: 112.5%/1.45em georgia, serif, sans-serif;
box-sizing: border-box;
overflow-y: scroll;
}
body {
margin: 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: hsla(0, 0%, 0%, 0.8);
font-family: georgia, serif;
font-weight: normal;
word-wrap: break-word;
font-kerning: normal;
-moz-font-feature-settings: "kern", "liga", "clig", "calt";
-ms-font-feature-settings: "kern", "liga", "clig", "calt";
-webkit-font-feature-settings: "kern", "liga", "clig", "calt";
font-feature-settings: "kern", "liga", "clig", "calt";
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
main,
menu,
nav,
section,
summary {
display: block;
}
audio,
canvas,
progress,
video {
display: inline-block;
}
audio:not([controls]) {
display: none;
height: 0;
}
progress {
vertical-align: baseline;
}
[hidden],
template {
display: none;
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
a:active,
a:hover {
outline-width: 0;
}
abbr[title] {
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
cursor: help;
text-decoration: none;
}
b,
strong {
font-weight: inherit;
font-weight: bolder;
}
dfn {
font-style: italic;
}
h1 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 2.25rem;
line-height: 1.1;
}
mark {
background-color: #ff0;
color: #000;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
img {
border-style: none;
max-width: 100%;
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
svg:not(:root) {
overflow: hidden;
}
code,
kbd,
pre,
samp {
font-family: monospace;
font-size: 1em;
}
figure {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
hr {
box-sizing: content-box;
overflow: visible;
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: calc(1.45rem - 1px);
background: hsla(0, 0%, 0%, 0.2);
border: none;
height: 1px;
}
button,
input,
optgroup,
select,
textarea {
font: inherit;
margin: 0;
}
optgroup {
font-weight: 700;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
[type="reset"],
[type="submit"],
button,
html [type="button"] {
-webkit-appearance: button;
}
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner,
button::-moz-focus-inner {
border-style: none;
padding: 0;
}
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring,
button:-moz-focusring {
outline: 1px dotted ButtonText;
}
fieldset {
border: 1px solid silver;
padding: 0.35em 0.625em 0.75em;
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
legend {
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal;
}
textarea {
overflow: auto;
}
[type="checkbox"],
[type="radio"] {
box-sizing: border-box;
padding: 0;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-input-placeholder {
color: inherit;
opacity: 0.54;
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit;
}
* {
box-sizing: inherit;
}
*:before {
box-sizing: inherit;
}
*:after {
box-sizing: inherit;
}
h2 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 1.62671rem;
line-height: 1.1;
}
h3 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 1.38316rem;
line-height: 1.1;
}
h4 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 1rem;
line-height: 1.1;
}
h5 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 0.85028rem;
line-height: 1.1;
}
h6 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 0.78405rem;
line-height: 1.1;
}
hgroup {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
ul {
margin-left: 1.45rem;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
list-style-position: outside;
list-style-image: none;
}
ol {
margin-left: 1.45rem;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
list-style-position: outside;
list-style-image: none;
}
dl {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
dd {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
p {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
pre {
margin-left: 0;
margin-right: 0;
margin-top: 0;
margin-bottom: 1.45rem;
font-size: 0.85rem;
line-height: 1.42;
background: hsla(0, 0%, 0%, 0.04);
border-radius: 3px;
overflow: auto;
word-wrap: normal;
padding: 1.45rem;
}
table {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
font-size: 1rem;
line-height: 1.45rem;
border-collapse: collapse;
width: 100%;
}
blockquote {
margin-left: 1.45rem;
margin-right: 1.45rem;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
form {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
noscript {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
iframe {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
address {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
b {
font-weight: bold;
}
strong {
font-weight: bold;
}
dt {
font-weight: bold;
}
th {
font-weight: bold;
}
li {
margin-bottom: calc(1.45rem / 2);
}
ol li {
padding-left: 0;
}
ul li {
padding-left: 0;
}
li > ol {
margin-left: 1.45rem;
margin-bottom: calc(1.45rem / 2);
margin-top: calc(1.45rem / 2);
}
li > ul {
margin-left: 1.45rem;
margin-bottom: calc(1.45rem / 2);
margin-top: calc(1.45rem / 2);
}
blockquote *:last-child {
margin-bottom: 0;
}
li *:last-child {
margin-bottom: 0;
}
p *:last-child {
margin-bottom: 0;
}
li > p {
margin-bottom: calc(1.45rem / 2);
}
code {
font-size: 0.85rem;
line-height: 1.45rem;
}
kbd {
font-size: 0.85rem;
line-height: 1.45rem;
}
samp {
font-size: 0.85rem;
line-height: 1.45rem;
}
abbr {
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
cursor: help;
}
acronym {
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
cursor: help;
}
thead {
text-align: left;
}
td,
th {
text-align: left;
border-bottom: 1px solid hsla(0, 0%, 0%, 0.12);
font-feature-settings: "tnum";
-moz-font-feature-settings: "tnum";
-ms-font-feature-settings: "tnum";
-webkit-font-feature-settings: "tnum";
padding-left: 0.96667rem;
padding-right: 0.96667rem;
padding-top: 0.725rem;
padding-bottom: calc(0.725rem - 1px);
}
th:first-child,
td:first-child {
padding-left: 0;
}
th:last-child,
td:last-child {
padding-right: 0;
}
tt,
code {
background-color: hsla(0, 0%, 0%, 0.04);
border-radius: 3px;
font-family: "SFMono-Regular", Consolas, "Roboto Mono", "Droid Sans Mono",
"Liberation Mono", Menlo, Courier, monospace;
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
}
pre code {
background: none;
line-height: 1.42;
}
code:before,
code:after,
tt:before,
tt:after {
letter-spacing: -0.2em;
content: " ";
}
pre code:before,
pre code:after,
pre tt:before,
pre tt:after {
content: "";
}
@media only screen and (max-width: 480px) {
html {
font-size: 100%;
}
}
+1 -33
View File
@@ -7,43 +7,11 @@
import * as React from "react"
import PropTypes from "prop-types"
import { useStaticQuery, graphql } from "gatsby"
import Header from "./header"
import "./layout.css"
const Layout = ({ children }) => {
const data = useStaticQuery(graphql`
query SiteTitleQuery {
site {
siteMetadata {
title
}
}
}
`)
return (
<>
<Header siteTitle={data.site.siteMetadata?.title || `Title`} />
<div
style={{
margin: `0 auto`,
maxWidth: 960,
padding: `0 1.0875rem 1.45rem`,
}}
>
<main>{children}</main>
<footer
style={{
marginTop: `2rem`,
}}
>
© {new Date().getFullYear()}, Built with
{` `}
<a href="https://www.gatsbyjs.com">Gatsby</a>
</footer>
</div>
<main>{children}</main>
</>
)
}
+57
View File
@@ -0,0 +1,57 @@
import * as React from "react"
import * as styles from "./about.module.css"
import { graphql, useStaticQuery } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
import Button from "../items/button"
const About = () => {
const data = useStaticQuery(graphql`
query {
logo: file(relativePath: { eq: "styret.jpg" }) {
childImageSharp {
gatsbyImageData(
placeholder: BLURRED
transformOptions: { fit: CONTAIN }
width: 650
)
}
}
}
`)
return (
<section>
<div className={styles.container}>
<div className="no-mobile">
<GatsbyImage
image={data.logo.childImageSharp.gatsbyImageData}
alt="6 styremedlemmer på rekke i det fine været"
/>
</div>
<div>
<h2 className="left-section-header">Hvem er vi?</h2>
<div>
<p>
UiO Gaming er en forening med hovedfokus på å danne et
inkluderende fellesskap rundt videospill og E-sport. Hos oss er
det enkelt å skaffe seg venner, ettersom alle har felles
interesser. Vi arrangerer ukentlige spillkvelder og fysiske
sosiale arrangementer, som for eksempel brettspillkvelder og
sosiale sammenkomster. Vår hovedkanal er en aktiv Discord-server
hvor man kan møte nye folk med felles interesser og game med andre
studenter.
</p>
<div className={styles.joinSection}>
<h3>Interessert?</h3>
<Button />
</div>
</div>
</div>
</div>
</section>
)
}
export default About
+25
View File
@@ -0,0 +1,25 @@
.container {
display: grid;
place-items: center;
gap: 10rem;
}
.textContent {
display: grid;
place-items: center;
}
.joinSection {
margin: 3.5rem 0;
font-size: 2rem;
}
.joinSection h3 {
margin-bottom: 2rem;
}
@media (min-width: 60em) {
.container {
grid-template-columns: 1fr 1fr;
gap: 3rem;
}
}
+69
View File
@@ -0,0 +1,69 @@
import * as React from "react"
import * as styles from "./blog.module.css"
import { Link, graphql, useStaticQuery } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
const Blog = () => {
const data = useStaticQuery(graphql`
query {
allSanityPost(limit: 3, sort: { fields: _createdAt, order: DESC }) {
edges {
node {
_createdAt(formatString: "D. MMMM Y", locale: "nb_NO")
slug {
current
}
title
excerpt
author {
name
image {
asset {
gatsbyImageData(width: 50, height: 50)
}
}
}
}
}
}
}
`)
return (
<section>
<h2>Bloggen</h2>
<div className={styles.container}>
{data.allSanityPost.edges.map(({ node: post }) => (
<div className={styles.card}>
<p className={styles.published}>
<time>{post._createdAt}</time>
</p>
<h3 className={styles.header}>
<Link
to={"blog/" + post.slug.current}
className={styles.link + " no-styling-link"}
>
{post.title}
</Link>
</h3>
<p>{post.excerpt}</p>
<div className={styles.author}>
<GatsbyImage
image={post.author.image.asset.gatsbyImageData}
className={styles.authorImage}
alt={"Forfatteren av innlegget, " + post.author.name}
/>
<p>{post.author.name}</p>
</div>
</div>
))}
<Link to="/blog" className={styles.allBlogPosts}>
Se alle blogginnlegg
</Link>
</div>
</section>
)
}
export default Blog
+42
View File
@@ -0,0 +1,42 @@
.container {
display: grid;
gap: 5rem;
justify-content: center;
}
.card {
display: grid;
gap: 1rem;
justify-content: stretch;
max-width: 80ch;
}
.published {
font-weight: 100;
}
.header {
font-size: 2.25rem;
}
.author {
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
gap: 0.5em;
font-weight: 100;
}
.authorImage {
border-radius: 50%;
border: 2px solid white;
}
.link {
text-decoration: underline;
text-decoration-color: var(--link-color);
}
.link:hover {
text-decoration-color: var(--link-color-hover);
}
.allBlogPosts {
place-self: center;
}
+59
View File
@@ -0,0 +1,59 @@
import * as React from "react"
import * as styles from "./boardMembers.module.css"
import { graphql, useStaticQuery } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
const BoardMembers = () => {
const data = useStaticQuery(graphql`
query {
allSanityAuthor(
filter: { boardMember: { eq: true } }
sort: { fields: order }
) {
edges {
node {
boardMember
email
name
role
image {
asset {
gatsbyImageData(width: 256, height: 256)
}
}
bio
}
}
}
}
`)
return (
<section>
<h2>Styret</h2>
<div className={styles.container}>
{data.allSanityAuthor.edges.map(({ node: member }) => (
<article className={styles.card}>
<div className={styles.header}>
<GatsbyImage
image={member.image.asset.gatsbyImageData}
className={styles.headerImage}
/>
<div className={styles.info}>
<h3>{member.name}</h3>
<p>{member.role}</p>
</div>
</div>
<p>{member.bio}</p>
<div className={styles.footer}>
<p className="text-center">{member.email}</p>
</div>
</article>
))}
</div>
</section>
)
}
export default BoardMembers
@@ -0,0 +1,84 @@
.container {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
justify-content: space-evenly;
gap: 7rem;
word-break: break-word;
}
.card {
box-shadow: var(--shadow);
background-color: var(--main-background-color);
border-radius: 2.5rem;
padding: 3rem 2rem;
width: 27ch;
display: flex;
flex-direction: column;
}
@media (min-width: 400px) {
.card {
width: 30ch;
}
}
@media (min-width: 500px) {
.card {
width: 35ch;
}
}
.card > p {
margin: 2rem 0;
}
.header {
display: flex;
flex-direction: column;
gap: 1rem;
align-items: center;
justify-content: space-evenly;
}
.headerImage {
border-radius: 50%;
border: 5px solid white;
/* box-shadow: inset 0 0 10px #000000; */
}
.info {
border-bottom: var(--card-section-divider);
width: 100%;
color: var(--text-color);
text-align: center;
}
.info > p {
font-weight: 100;
font-size: 1.25rem;
margin: 0.5rem 0;
}
.info > h3 {
margin: 0.5rem 0;
}
.footer {
border-top: var(--card-section-divider);
width: 100%;
font-size: 1.1rem;
}
.footer > p {
margin-top: 2rem;
margin-bottom: 0;
word-wrap: break-word;
}
@media (min-width: 60em) {
.header {
flex-direction: row;
}
.info {
text-align: left;
}
.footer {
font-size: 1.25rem;
}
}
+76
View File
@@ -0,0 +1,76 @@
import * as React from "react"
import * as styles from "./contact.module.css"
import {
FaYoutube,
FaTwitch,
FaFacebook,
FaGithub,
FaDiscord,
FaAt,
FaInstagram,
} from "react-icons/fa"
const Contact = () => (
<section>
<h2 className="section-center-header">Finn oss</h2>
<div className={styles.container}>
<div className={styles.item}>
<FaAt />
<a
href="mailto:styret.uiogaming@gmail.com"
target="_blank"
rel="noreferrer"
>
E-post
</a>
</div>
<div className={styles.item}>
<FaDiscord />
<a href="https://discord.uiogaming.no" target="_blank" rel="noreferrer">
Discord
</a>
</div>
<div className={styles.item}>
<FaFacebook />
<a
href="https://facebook.uiogaming.no"
target="_blank"
rel="noreferrer"
>
Facebook
</a>
</div>
<div className={styles.item}>
<FaInstagram />
<a
href="https://instagram.uiogaming.no"
target="_blank"
rel="noreferrer"
>
Instagram
</a>
</div>
<div className={styles.item}>
<FaYoutube />
<a href="https://youtube.uiogaming.no" target="_blank" rel="noreferrer">
YouTube
</a>
</div>
<div className={styles.item}>
<FaTwitch />
<a href="https://twitch.uiogaming.no" target="_blank" rel="noreferrer">
Twitch
</a>
</div>
<div className={styles.item}>
<FaGithub />
<a href="https://github.uiogaming.no" target="_blank" rel="noreferrer">
GitHub
</a>
</div>
</div>
</section>
)
export default Contact
@@ -0,0 +1,16 @@
.container {
display: grid;
gap: 1rem;
justify-content: center;
}
.item {
display: flex;
gap: 0.5rem;
align-items: center;
}
.left {
justify-self: end;
}
.right {
justify-self: start;
}
+72
View File
@@ -0,0 +1,72 @@
import * as React from "react"
import * as styles from "./events.module.css"
import { Link, graphql, useStaticQuery } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
import { FaMapMarkerAlt, FaCalendarAlt } from "react-icons/fa"
const Events = () => {
const data = useStaticQuery(graphql`
query {
placeholder: file(relativePath: { eq: "event.jpg" }) {
childImageSharp {
gatsbyImageData(
placeholder: BLURRED
transformOptions: { fit: COVER }
width: 650
)
}
}
allSanityEvent(limit: 2, sort: { fields: date, order: ASC }) {
edges {
node {
title
location
date(locale: "nb_NO", formatString: "dddd D. MMM Y")
slug {
current
}
description
}
}
}
}
`)
return (
<section className={styles.stretch}>
<div className={styles.container}>
<h2 className={styles.sectionHeader}>Hva skjer?</h2>
<div className={styles.events}>
{data.allSanityEvent.edges.map(({ node: event }) => (
<Link to={"event/" + event.slug.current}>
<article className={styles.card}>
<h3>{event.title}</h3>
<div>
<div>
<FaMapMarkerAlt />
<p>{event.location}</p>
</div>
<div>
<FaCalendarAlt />
<p>{event.date}</p>
</div>
</div>
<p>{event.description}</p>
</article>
</Link>
))}
</div>
<div className={"no-mobile " + styles.image}>
<GatsbyImage
image={data.placeholder.childImageSharp.gatsbyImageData}
alt="Medlemmer som spiller kubb"
/>
</div>
</div>
</section>
)
}
export default Events
+65
View File
@@ -0,0 +1,65 @@
.stretch {
justify-content: stretch;
}
.container {
display: grid;
place-items: center;
gap: 3rem;
grid-template-rows: auto 1fr;
}
.sectionHeader {
grid-column: 1;
grid-row: 1;
place-self: center;
}
.events {
display: grid;
width: 100%;
gap: 3rem;
}
.events > *,
*:hover {
color: white;
}
.events > h2 {
justify-self: center;
}
.card {
display: grid;
box-shadow: var(--shadow);
background-color: var(--main-background-color);
padding: 1.5em;
border-top: 4px solid var(--main-color);
}
.card > h3 {
margin-bottom: 0.5em;
}
.card > div {
font-weight: 100;
margin-bottom: 1em;
}
.card > div * {
display: flex;
align-items: baseline;
margin-right: 0.5em;
}
.image {
grid-row: 1 / -1;
}
@media (min-width: 60em) {
.stretch {
justify-content: center;
}
.container {
grid-template-columns: 1fr 1fr;
}
.sectionHeader {
margin-bottom: 0.5em;
}
.card {
padding: 2em;
}
}
+68
View File
@@ -0,0 +1,68 @@
import * as React from "react"
import * as styles from "./footer.module.css"
import { graphql, useStaticQuery } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
const Footer = () => {
const data = useStaticQuery(graphql`
query {
logo: file(relativePath: { eq: "logo.jpg" }) {
childImageSharp {
gatsbyImageData(
placeholder: BLURRED
transformOptions: { fit: COVER }
width: 256
)
}
}
}
`)
return (
<footer>
<div className={styles.footer}>
<div>
<GatsbyImage
image={data.logo.childImageSharp.gatsbyImageData}
alt="UiO Gaming logo"
/>
</div>
<div className={styles.links}>
<ul className="remove-bullets">
<li>
<a href="https://vedtekter.uiogaming.no" rel="noreferrer">
Vedtekter
</a>
</li>
<li>
<a href="https://innmelding.uiogaming.no" rel="noreferrer">
Bli medlem
</a>
</li>
<li>
<a
href="https://github.com/UiO-Gaming/uiogaming-website/"
rel="noreferrer"
>
Kildekode
</a>
</li>
<li>
<a href="https://admin.uiogaming.no" rel="noreferrer">
Adminområdet
</a>
</li>
</ul>
</div>
<div className={styles.orgInfo}>
<p>Orgnr.: 925 719 153</p>
<p>Nettsiden er utviklet og driftet av foreningen</p>
</div>
</div>
</footer>
)
}
export default Footer
+35
View File
@@ -0,0 +1,35 @@
footer {
background-color: var(--footer-color);
padding: 10rem 3rem;
display: grid;
place-items: center;
}
.footer {
display: grid;
place-items: center;
gap: 2rem;
grid-template-rows: auto;
}
.orgInfo {
text-align: center;
}
.orgInfo * {
margin: 1rem 0;
}
.links * {
margin: 0.75rem 0;
}
@media (min-width: 70em) {
.footer {
grid-template-columns: 1fr 1fr 2fr;
}
.orgInfo {
text-align: left;
}
.links {
justify-self: start;
}
}
+38
View File
@@ -0,0 +1,38 @@
import * as React from "react"
import * as styles from "./header.module.css"
import { graphql, useStaticQuery } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
const Header = () => {
const data = useStaticQuery(graphql`
query {
placeholder: file(relativePath: { eq: "logo.jpg" }) {
childImageSharp {
gatsbyImageData(
placeholder: BLURRED
transformOptions: { fit: CONTAIN }
width: 256
)
}
}
}
`)
return (
<header id="hjem" className={styles.container}>
<GatsbyImage
image={data.placeholder.childImageSharp.gatsbyImageData}
alt="UiO Gaming logo"
/>
<h1>UiO Gaming</h1>
<p>
En hobbyforening som ønsker skape et sosialt miljø rundt gaming og
E-sport på UiO
</p>
</header>
)
}
export default Header
+23
View File
@@ -0,0 +1,23 @@
.container {
background-image: url("https://lblend.moe/temp/uiogaming/assets/img/keyboard.jpg"); /* Placeholder image */
background-repeat: no-repeat;
background-size: cover;
clip-path: polygon(0% 0%, 100% 0%, 100% 90%, 0% 100%);
padding: 1rem;
padding-bottom: 10vh;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 1em;
max-width: none;
text-align: center;
}
.container > p {
max-width: 40ch;
}
+1 -1
View File
@@ -74,7 +74,7 @@ function Seo({ description, lang, meta, title }) {
}
Seo.defaultProps = {
lang: `en`,
lang: `no`,
meta: [],
description: ``,
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

+230
View File
@@ -0,0 +1,230 @@
/* ===== Variables ===== */
:root {
--main-color: rgb(226, 35, 26);
--main-background-color: rgb(22, 20, 31);
--secondary-background-color: rgb(44, 53, 69);
--footer-color: rgb(12, 12, 15);
--header-color: rgb(255, 255, 255);
--text-color: rgb(228, 228, 228);
--light-text-color: rgb(190, 190, 190);
--link-color: rgb(226, 35, 26);
--link-color-hover: rgb(255, 157, 160);
--main-font: "Roboto", sans-serif;
--card-section-divider: 2px solid rgba(128, 128, 128, 0.5);
--blog-header-divider: 1px solid rgba(128, 128, 128, 0.25);
--shadow: 0 6px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.2);
--desktop: 60em;
}
/* ===== RESET ===== */
*,
*::before,
*::after {
box-sizing: border-box;
}
body,
h1,
h2,
h3,
h4,
p,
figure,
blockquote,
dl,
dd {
margin: 0;
}
ul[role="list"],
ol[role="list"] {
list-style: none;
}
html:focus-within {
scroll-behavior: smooth;
}
body {
min-height: 100vh;
text-rendering: optimizeSpeed;
line-height: 1.5;
}
a:not([class]) {
text-decoration-skip-ink: auto;
}
img,
picture {
max-width: 100%;
display: block;
}
input,
button,
textarea,
select {
font: inherit;
}
@media (prefers-reduced-motion: reduce) {
html:focus-within {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
/* ===== Base styling ===== */
@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,400;0,900;1,100;1,400;1,900&display=swap");
::-webkit-scrollbar {
width: 0.5em;
}
::-webkit-scrollbar-thumb {
background-color: var(--link-color);
border-radius: 999rem;
}
::-webkit-scrollbar-thumb:hover {
background-color: var(--link-color-hover);
}
::selection {
background-color: var(--main-color);
}
a::selection {
color: blue;
}
body {
font-family: var(--main-font);
font-size: 1.35rem;
font-weight: 400;
line-height: 1.6;
background-color: var(--main-background-color);
color: var(--text-color);
scrollbar-color: var(--link-color) var(--main-background-color);
scrollbar-width: thin;
}
h1,
h2,
h3,
h4,
p {
max-width: 60ch;
}
h1,
h2,
h3,
h4 {
color: var(--header-color);
}
h2,
h3 {
font-weight: 900;
line-height: 1.1;
}
a {
color: var(--main-color);
text-decoration: none;
}
a:hover {
color: var(--link-color-hover);
}
img {
display: block;
max-width: 100%;
}
section > div,
article {
max-width: 1920px;
}
footer > div {
max-width: 1440px;
}
section {
padding: 7em 1.5em;
display: grid;
justify-content: center;
}
section:nth-child(2n + 1) {
background-color: var(--secondary-background-color);
}
section h2 {
font-size: 3.25rem;
text-decoration: underline;
text-decoration-color: var(--main-color);
margin-bottom: 2em;
text-align: center;
justify-self: center;
}
@media (min-width: 60em) {
section {
padding: 10em 5em;
}
}
/* ===== Helper classes ===== */
.content-box {
box-sizing: content-box;
}
.text-center {
text-align: center;
}
.remove-bullets {
list-style: none;
padding: 0;
}
.no-styling-link {
color: inherit;
}
.no-styling-link:hover {
color: inherit;
}
.left-section-header {
margin-bottom: 1em;
}
.no-mobile {
display: none;
}
@media (min-width: 60em) {
.no-mobile {
display: block;
}
.left-section-header {
text-align: left;
justify-self: start;
margin-bottom: 0.5em;
}
}
/* ===== Page specific ===== */
.center {
height: 100vh;
display: grid;
place-content: center;
place-items: center;
}
+14 -2
View File
@@ -1,13 +1,25 @@
import * as React from "react"
import { Link } from "gatsby"
import "../index.css"
import Layout from "../components/layout"
import Seo from "../components/seo"
const NotFoundPage = () => (
<Layout>
<Seo title="404: Not found" />
<h1>404: Not Found</h1>
<p>You just hit a route that doesn&#39;t exist... the sadness.</p>
<div className="center">
<h1>404: Siden finnes ikke</h1>
<p>
Du har nådd en blindvei, men ikke på Blindern{" "}
<span role="img" aria-label="eyes">
👀
</span>
</p>
<Link to="/">Tilbake til hjemmesiden</Link>
</div>
</Layout>
)
+57
View File
@@ -0,0 +1,57 @@
import * as React from "react"
import "../index.css"
import Layout from "../components/layout"
import Seo from "../components/seo"
import { graphql, Link } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
export const query = graphql`
query {
allSanityPost {
edges {
node {
title
_createdAt(formatString: "DD. MMMM, YYYY", locale: "nb_NO")
_id
slug {
current
}
excerpt
author {
name
image {
asset {
gatsbyImageData
}
}
}
}
}
}
}
`
const BlogPage = ({ data }) => (
<Layout>
<Seo title="Blog" />
<div className="container">
{data.allSanityPost.edges.map(post => (
<article>
<p>{post.node._createdAt}</p>
<Link to={post.node.slug.current}>
<h2>{post.node.title}</h2>
</Link>
<div>
<GatsbyImage image={post.node.author.image.asset.gatsbyImageData} />
<p>{post.node.author.name}</p>
</div>
<p>{post.node.excerpt}</p>
</article>
))}
</div>
</Layout>
)
export default BlogPage
+17 -17
View File
@@ -1,28 +1,28 @@
import * as React from "react"
import { Link } from "gatsby"
import { StaticImage } from "gatsby-plugin-image"
import "../index.css"
import Layout from "../components/layout"
import Seo from "../components/seo"
import Header from "../components/sections/header"
import About from "../components/sections/about"
import Events from "../components/sections/events"
import Blog from "../components/sections/blog"
import BoardMembers from "../components/sections/boardMembers"
import Contact from "../components/sections/contact"
import Footer from "../components/sections/footer"
const IndexPage = () => (
<Layout>
<Seo title="Home" />
<h1>Hi people</h1>
<p>Welcome to your new Gatsby site.</p>
<p>Now go build something great.</p>
<StaticImage
src="../images/gatsby-astronaut.png"
width={300}
quality={95}
formats={["AUTO", "WEBP", "AVIF"]}
alt="A Gatsby astronaut"
style={{ marginBottom: `1.45rem` }}
/>
<p>
<Link to="/page-2/">Go to page 2</Link> <br />
<Link to="/using-typescript/">Go to "Using TypeScript"</Link>
</p>
<Header />
<About />
<Events />
<Blog />
<BoardMembers />
<Contact />
<Footer />
</Layout>
)
-16
View File
@@ -1,16 +0,0 @@
import * as React from "react"
import { Link } from "gatsby"
import Layout from "../components/layout"
import Seo from "../components/seo"
const SecondPage = () => (
<Layout>
<Seo title="Page two" />
<h1>Hi from the second page</h1>
<p>Welcome to page 2</p>
<Link to="/">Go back to the homepage</Link>
</Layout>
)
export default SecondPage
-50
View File
@@ -1,50 +0,0 @@
// If you don't want to use TypeScript you can delete this file!
import * as React from "react"
import { PageProps, Link, graphql } from "gatsby"
import Layout from "../components/layout"
import Seo from "../components/seo"
type DataProps = {
site: {
buildTime: string
}
}
const UsingTypescript: React.FC<PageProps<DataProps>> = ({ data, path }) => (
<Layout>
<Seo title="Using TypeScript" />
<h1>Gatsby supports TypeScript by default!</h1>
<p>
This means that you can create and write <em>.ts/.tsx</em> files for your
pages, components etc. Please note that the <em>gatsby-*.js</em> files
(like gatsby-node.js) currently don't support TypeScript yet.
</p>
<p>
For type checking you'll want to install <em>typescript</em> via npm and
run <em>tsc --init</em> to create a <em>.tsconfig</em> file.
</p>
<p>
You're currently on the page "{path}" which was built on{" "}
{data.site.buildTime}.
</p>
<p>
To learn more, head over to our{" "}
<a href="https://www.gatsbyjs.com/docs/typescript/">
documentation about TypeScript
</a>
.
</p>
<Link to="/">Go back to the homepage</Link>
</Layout>
)
export default UsingTypescript
export const query = graphql`
{
site {
buildTime(formatString: "YYYY-MM-DD hh:mm a z")
}
}
`
+31
View File
@@ -0,0 +1,31 @@
const express = require("express")
const { exec } = require("child_process")
const cors = require("cors")
const app = express()
const port = 9001
app.use(express.json())
const corsOptions = cors({ origin: "https://uiogaming.no" })
app.get("/", (req, res) => {
res.send("API is running! Yeet!")
})
app.post("/build", corsOptions, (req, res) => {
exec("cd ../ && gatsby build", (error, stdout, stderr) => {
if (error) {
console.log(stderr.message)
console.log(error.message)
return
}
console.log(stdout)
})
res.send("Success!")
})
app.listen(port, () => {
console.log(`LIVE! http://localhost:${port}`)
})
+388
View File
@@ -0,0 +1,388 @@
{
"name": "webhook-api",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
}
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"requires": {
"safe-buffer": "5.1.2"
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
"body-parser": "1.19.0",
"content-disposition": "0.5.3",
"content-type": "~1.0.4",
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "~1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.5",
"qs": "6.7.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.1.2",
"send": "0.17.1",
"serve-static": "1.14.1",
"setprototypeof": "1.1.1",
"statuses": "~1.5.0",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
}
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
}
},
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.1",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.0"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.47.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
"integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw=="
},
"mime-types": {
"version": "2.1.30",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
"integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
"requires": {
"mime-db": "1.47.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"requires": {
"ee-first": "1.1.1"
}
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"proxy-addr": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
"integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
"requires": {
"forwarded": "~0.1.2",
"ipaddr.js": "1.9.1"
}
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
"destroy": "~1.0.4",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "~1.7.2",
"mime": "1.6.0",
"ms": "2.1.1",
"on-finished": "~2.3.0",
"range-parser": "~1.2.1",
"statuses": "~1.5.0"
},
"dependencies": {
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
}
}
},
"serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.17.1"
}
},
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
}
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
}
}
}
+17
View File
@@ -0,0 +1,17 @@
{
"name": "webhook-api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.17.1"
}
}
+13381
View File
File diff suppressed because it is too large. Load diff