Init rewrite
23
.gitignore
vendored
@ -1,23 +0,0 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
27655
package-lock.json
generated
46
package.json
@ -1,46 +0,0 @@
|
||||
{
|
||||
"name": "grasscutters-web",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^6.1.1",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.1.1",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.1.1",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.1.1",
|
||||
"@fortawesome/react-fontawesome": "^0.1.18",
|
||||
"@testing-library/jest-dom": "^5.16.4",
|
||||
"@testing-library/react": "^13.1.1",
|
||||
"@testing-library/user-event": "^13.5.0",
|
||||
"axios": "^0.27.2",
|
||||
"react": "^18.0.0",
|
||||
"react-cookie": "^4.1.1",
|
||||
"react-dom": "^18.0.0",
|
||||
"react-router-dom": "^6.3.0",
|
||||
"react-scripts": "5.0.1",
|
||||
"web-vitals": "^2.1.4"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,43 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="description"
|
||||
content="A private server software for a Certain Anime Game"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>Grasscutters</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 9.4 KiB |
@ -1,25 +0,0 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
206
src/App.css
@ -1,206 +0,0 @@
|
||||
@font-face {
|
||||
font-family: "Michroma";
|
||||
src: url("./fonts/Michroma/Michroma-Regular.ttf");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
src: url("./fonts/Roboto/Roboto-Regular.ttf");
|
||||
}
|
||||
|
||||
body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-family: "Roboto";
|
||||
background-color: #333;
|
||||
color: white;
|
||||
}
|
||||
|
||||
div.App {
|
||||
position:fixed;
|
||||
width:100%;
|
||||
height:100%;
|
||||
top:0px;
|
||||
left:0px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
#portal {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
div.center {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
nav {
|
||||
height: 45px;
|
||||
width: 100%;
|
||||
background-color: #333;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
nav div.title {
|
||||
float: left;
|
||||
width: 30%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
nav div.title h1 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 10px;
|
||||
padding-right: 100px;
|
||||
|
||||
float: right;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
nav div.title h1 a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
nav div.nav-links {
|
||||
float: left;
|
||||
width: 65%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
nav div.nav-links ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
nav div.nav-links ul li {
|
||||
float: left;
|
||||
transition: 0.2s ease;
|
||||
}
|
||||
|
||||
nav div.nav-links ul li a {
|
||||
transition: 0.2s ease;
|
||||
|
||||
float: left;
|
||||
color: #f2f2f2;
|
||||
text-align: center;
|
||||
padding: 14px 16px;
|
||||
text-decoration: none;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
nav div.nav-links ul li:hover a {
|
||||
background-color: #ddd;
|
||||
color: black;
|
||||
}
|
||||
|
||||
nav div.social {
|
||||
float: left;
|
||||
width: 5%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
nav div.social ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
nav div.social ul li {
|
||||
float: left;
|
||||
transition: 0.2s ease;
|
||||
}
|
||||
|
||||
nav div.social ul li a {
|
||||
transition: 0.2s ease;
|
||||
|
||||
float: left;
|
||||
color: #f2f2f2;
|
||||
text-align: center;
|
||||
padding: 14px 16px;
|
||||
text-decoration: none;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
nav div.social ul li:hover a {
|
||||
background-color: #ddd;
|
||||
color: black;
|
||||
}
|
||||
|
||||
/*******************/
|
||||
/*******Modal*******/
|
||||
/*******************/
|
||||
|
||||
div.modal {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background-color: #222;
|
||||
padding: 25px;
|
||||
z-index: 10000;
|
||||
color: white;
|
||||
pointer-events: all;
|
||||
border-radius: 10px;
|
||||
border-width: 0px;
|
||||
border-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
div.modal input[type="button"] {
|
||||
padding: 8px 0px;
|
||||
width: calc(100% - 40px);
|
||||
margin: 30px 20px 10px 20px;
|
||||
|
||||
font-family: "Michroma";
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
|
||||
background-color: #4caf50;
|
||||
color: white;
|
||||
|
||||
border: 0px;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
div.modalOverlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
z-index: 9999;
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
/*******************/
|
||||
/*****Error 404*****/
|
||||
/*******************/
|
||||
|
||||
div.E404 {
|
||||
padding: 40px;
|
||||
}
|
||||
|
||||
div.E404 a {
|
||||
color: cyan;
|
||||
}
|
||||
|
||||
div#copyright-notice {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
border-top: 5px solid #f9cb26;
|
||||
text-align: center;
|
||||
}
|
23
src/App.js
@ -1,23 +0,0 @@
|
||||
import React from "react";
|
||||
import "./App.css";
|
||||
import Home from "./Pages/Home";
|
||||
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
|
||||
import Error404 from "./Pages/Error404";
|
||||
import { CookiesProvider } from "react-cookie";
|
||||
import Copyright from "./Components/Copyright";
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<CookiesProvider>
|
||||
<Router>
|
||||
<div className="App">
|
||||
<Routes>
|
||||
<Route exact path="/" element={<Home />} />
|
||||
<Route path="*" element={<Error404/>} />
|
||||
</Routes>
|
||||
<Copyright />
|
||||
</div>
|
||||
</Router>
|
||||
</CookiesProvider>
|
||||
);
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
import React from 'react'
|
||||
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
|
||||
|
||||
export default function ClickableFontAwesome(props) {
|
||||
return (
|
||||
<p><a href={props.href}><FontAwesomeIcon icon={props.icon} /></a></p>
|
||||
)
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
import React from 'react'
|
||||
|
||||
export default function Copyright() {
|
||||
return (
|
||||
<div id="copyright-notice">
|
||||
<p> © Grasscutter Team 2022 </p>
|
||||
</div>
|
||||
)
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
.downloadButton {
|
||||
position: relative;
|
||||
|
||||
font-family: "Roboto";
|
||||
padding: 10px 10px;
|
||||
border: 0;
|
||||
border-radius: 6px;
|
||||
margin-right: 20px;
|
||||
background-color: red;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.downloadButton .download {
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.downloadButton .dropdownButton {
|
||||
float: right;
|
||||
|
||||
padding: 0px 12px;
|
||||
|
||||
height: 35px;
|
||||
margin-left: 12px;
|
||||
|
||||
/*border-left: 1px solid rgba(255, 255, 255, 0.75);*/
|
||||
}
|
||||
|
||||
.dropdownContent {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
|
||||
margin-top: 30px;
|
||||
background-color: inherit;
|
||||
width: 100%;
|
||||
|
||||
border-bottom-right-radius: 15px;
|
||||
border-bottom-left-radius: 15px;
|
||||
|
||||
display: none;
|
||||
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.dropdownContent:hover {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.dropdownContent .dropdownItem {
|
||||
padding: 10px;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.75);
|
||||
}
|
||||
|
||||
.dropdownContent .dropdownItem p {
|
||||
font-size: 11px;
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
import { faAngleDown } from '@fortawesome/free-solid-svg-icons'
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
|
||||
import React, { useRef } from 'react'
|
||||
import axios from 'axios'
|
||||
import "./DownloadButton.css"
|
||||
|
||||
export default function DownloadButton(props) {
|
||||
|
||||
const hoverRef = useRef(null);
|
||||
|
||||
function onDropDownHover(e) {
|
||||
hoverRef.current.style.display = "block";
|
||||
}
|
||||
|
||||
function onDropDownLeave(e) {
|
||||
hoverRef.current.style.display = null;
|
||||
}
|
||||
|
||||
function onLinkClick(e, url, newTab) {
|
||||
e.preventDefault();
|
||||
if(newTab) {
|
||||
window.open(url, '_blank');
|
||||
} else {
|
||||
window.location.href = url;
|
||||
}
|
||||
}
|
||||
|
||||
function downloadGithubRelease(e, path) {
|
||||
e.preventDefault();
|
||||
if(props.githubUseLatest) {
|
||||
axios.get(`https://api.github.com/repos/${path}/releases/latest`).then(res => {
|
||||
if(res.data) {
|
||||
window.location.href = res.data.assets[0].browser_download_url;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
axios.get(`https://api.github.com/repos/${path}/releases`).then(res => {
|
||||
if(res.data) {
|
||||
window.location.href = res.data[0].assets[0].browser_download_url;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="downloadButton" style={{backgroundColor: props.color }}>
|
||||
<div className="download" onClick={ (e) => { props.githubPath ? downloadGithubRelease(e, props.githubPath) : onLinkClick(e, props.url, false) }}>
|
||||
<p> {props.name} </p>
|
||||
</div>
|
||||
{ props.dropdown ?
|
||||
<div className="dropdownButton" onMouseOver={onDropDownHover} onMouseLeave={onDropDownLeave}>
|
||||
<FontAwesomeIcon icon={faAngleDown} />
|
||||
</div>
|
||||
: null
|
||||
}
|
||||
{ props.dropdown ?
|
||||
<div className="dropdownContent" ref={hoverRef}>
|
||||
{
|
||||
props.dropdown.map((item, index) => {
|
||||
return (
|
||||
<div className='dropdownItem' key={index} onClick={ (e) => onLinkClick(e, item.url, true) }>
|
||||
<p> {item.name} </p>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
}
|
||||
</div>
|
||||
: null
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
import React from "react";
|
||||
import { faGithub } from "@fortawesome/free-brands-svg-icons";
|
||||
import { faGlobe } from "@fortawesome/free-solid-svg-icons";
|
||||
|
||||
import ClickableFontAwesome from "../ClickableFontAwesome";
|
||||
|
||||
export default function TeamMember(props) {
|
||||
return (
|
||||
<div className="member">
|
||||
<div className="content">
|
||||
<img src={props.picture} alt={props.name} />
|
||||
<div className="info">
|
||||
<p className={!props.links ? "center" : null}>
|
||||
{props.name}
|
||||
{props.badge ? (
|
||||
<span className="team-badge" style={{ backgroundColor: props.badgeColor }}>
|
||||
{props.badge}
|
||||
</span>
|
||||
) : null}
|
||||
</p>
|
||||
{props.links ? (
|
||||
<div className="links">
|
||||
{props.website ? <ClickableFontAwesome icon={faGlobe} href={props.website} /> : null}
|
||||
{props.github ? <ClickableFontAwesome icon={faGithub} href={`https://github.com/${props.github}`} /> : null}
|
||||
</div>
|
||||
) : null}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
export default class Error404 extends Component {
|
||||
componentDidMount() {
|
||||
document.title = "Grasscutters - 404"
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="E404">
|
||||
<h1>Error 404</h1>
|
||||
<p>The page your looking for couldn't be found</p>
|
||||
<p>Yeah.. I can't be bothered to style this...</p>
|
||||
<br />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
@ -1,308 +0,0 @@
|
||||
.landing {
|
||||
font-family: "Michroma";
|
||||
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background-color: #111;
|
||||
}
|
||||
|
||||
.landing .background {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
background: url(../img/teyvat2.png) no-repeat center center fixed; /* src: https://www.reddit.com/r/Genshin_Impact/comments/s6dpa6/sunset_over_teyvat_panoramic_made_by_me/ */
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
|
||||
filter: blur(6px);
|
||||
-webkit-filter: blur(6px);
|
||||
}
|
||||
|
||||
.landing .content {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.landing .content .logo {
|
||||
height: 300px;
|
||||
width: 300px;
|
||||
float: left;
|
||||
fill: #f9cb25;
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
.landing .content .text {
|
||||
margin-left: 25px;
|
||||
margin-top: 0px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.landing .content .text h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.landing .content .text p {
|
||||
margin: 0;
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
.landing .content .text .links {
|
||||
margin-top: 15px;
|
||||
width: 100%;
|
||||
height: 45px;
|
||||
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
}
|
||||
|
||||
.landing .content .text .links p {
|
||||
padding: 0;
|
||||
padding-top: 5px;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.landing .scroll {
|
||||
position: absolute;
|
||||
top: 96%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
|
||||
color: white;
|
||||
opacity: 25%;
|
||||
width: 100%;
|
||||
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.landing .scroll p {
|
||||
float: left;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin-top: 15px;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.landing .scroll .arrow {
|
||||
float: left;
|
||||
position: relative;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
.landing .scroll .arrow svg {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
animation: arrowbounce;
|
||||
animation-duration: 3s;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: ease-in-out;
|
||||
}
|
||||
|
||||
@keyframes arrowbounce {
|
||||
0% { top: 58% }
|
||||
50% { top: 42% }
|
||||
100% { top: 58% }
|
||||
}
|
||||
|
||||
.team {
|
||||
width: 100%;
|
||||
padding-bottom: 26px;
|
||||
}
|
||||
|
||||
.team h1 {
|
||||
margin-top: 30px;
|
||||
margin-left: 40px;
|
||||
text-align: center;
|
||||
font-family: "Michroma";
|
||||
}
|
||||
|
||||
.team .grid {
|
||||
display: grid;
|
||||
grid-template-columns: auto auto auto auto;
|
||||
margin: 0px 40px;
|
||||
}
|
||||
|
||||
.team .member {
|
||||
display: inline-grid;
|
||||
height: 60px;
|
||||
margin: 14px 10px;
|
||||
}
|
||||
|
||||
.team .member .content {
|
||||
font-size: 23px;
|
||||
height: 60px;
|
||||
/*line-height: 60px;*/
|
||||
float: left;
|
||||
}
|
||||
|
||||
.team .member .content img {
|
||||
border-radius: 50%;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.team .member .content .info {
|
||||
float: left;
|
||||
width: calc(100% - 80px);
|
||||
height: 100%;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.team .member .content .info p {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.team .member .content .info p.center {
|
||||
line-height: 60px;
|
||||
}
|
||||
|
||||
.team .member .content .info p span.team-badge {
|
||||
color: black;
|
||||
margin-left: 8px;
|
||||
background-color: #f9cb25;
|
||||
padding: 3px 5px;
|
||||
font-size: 10px;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 50px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.team .member .content .info .links {
|
||||
background-color: red;
|
||||
|
||||
}
|
||||
|
||||
.team .member .content .info .links p {
|
||||
float: left;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
padding-right: 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.team .member .content .info .links p a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
text-decoration-color: none;
|
||||
}
|
||||
|
||||
@media (max-width: 1250px) {
|
||||
.team .grid {
|
||||
grid-template-columns: auto auto auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1040px) {
|
||||
|
||||
.team .grid {
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.team {
|
||||
height: initial;
|
||||
}
|
||||
|
||||
.team .grid {
|
||||
display: table;
|
||||
margin: 0 auto;
|
||||
grid-template-columns: none;
|
||||
}
|
||||
|
||||
.team .grid .member {
|
||||
display: block;
|
||||
margin-bottom: 26px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 630px) and (orientation:portrait) {
|
||||
.landing .content .text .links {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 850px) and (orientation:portrait) {
|
||||
.landing .content {
|
||||
display: block;
|
||||
width: 90%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.landing .content .logo {
|
||||
float: initial;
|
||||
}
|
||||
|
||||
.landing .content .text {
|
||||
margin-left: 0px;
|
||||
margin-top: 25px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-height: 700px) and (orientation:portrait) {
|
||||
.landing .content .logo {
|
||||
height: 250px;
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
.landing .scroll p {
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.landing .scroll i {
|
||||
font-size: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-height: 630px) and (orientation:portrait) {
|
||||
.landing .content .logo {
|
||||
height: 175px;
|
||||
width: 175px;
|
||||
}
|
||||
|
||||
.landing .content .text {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.landing .content .text .links {
|
||||
padding-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-height: 450px) and (orientation:landscape) {
|
||||
.landing .content .text h1 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.landing .content .text p {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.landing .content .logo {
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
}
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
import "./Home.css";
|
||||
//import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
//import { faAngleDown } from "@fortawesome/free-solid-svg-icons";
|
||||
import TeamMember from "../Components/Home/TeamMember";
|
||||
|
||||
import Logo from "../img/grasscutter-icon.png";
|
||||
|
||||
import MeledyPF from "../img/team/Meledy.webp";
|
||||
import MagixPF from "../img/team/Magix.png";
|
||||
import BenjPF from "../img/team/Benj.png";
|
||||
import LunaticPF from "../img/team/Lunatic.webp";
|
||||
import memetrollsXDPF from "../img/team/MemetrollsXD.webp";
|
||||
import MlgmXyysdPF from "../img/team/MlgmXyysd.webp";
|
||||
import SpikeHDPF from "../img/team/SpikeHD.webp";
|
||||
import YazawaziPF from "../img/team/Yazawazi.webp";
|
||||
import AlteriPF from "../img/team/Alteri.png";
|
||||
import BirdulonPF from "../img/team/Birdulon.png";
|
||||
import ShigetokiPF from "../img/team/Shigetoki.png";
|
||||
import ExZorkPF from "../img/team/ExZork.png";
|
||||
import NitroPF from "../img/team/Nitro.png";
|
||||
import AyyLmaoPF from "../img/team/AyyLmao.png";
|
||||
import Akka0PF from "../img/team/Akka0.jpg";
|
||||
import XhaoYiranPF from "../img/team/xhaoyiran.png";
|
||||
import TukanDevPF from "../img/team/TukanDev.png";
|
||||
import GanyusLeftHornPF from "../img/team/GanyusLeftHorn.jpg";
|
||||
|
||||
import React from "react";
|
||||
import DownloadButton from "../Components/Home/DownloadButton";
|
||||
|
||||
import "./Home.css"
|
||||
|
||||
class Home extends React.Component {
|
||||
componentDidMount() {
|
||||
document.title = "Grasscutters"
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="Home">
|
||||
<div className="landing">
|
||||
<div className="background" />
|
||||
<div className="content">
|
||||
<img className="logo" src={Logo} alt="grasscutter logo" />
|
||||
<div className="text">
|
||||
<h1>Grasscutter</h1>
|
||||
<p>A private server software for a Certain Anime Game</p>
|
||||
<div className="links">
|
||||
<DownloadButton name="Download Grasscutter" githubPath="Grasscutters/Grasscutter" githubUseLatest={true} color="greenyellow" dropdown={ [
|
||||
{
|
||||
name: "Stable Releases",
|
||||
url: "https://github.com/Grasscutters/Grasscutter/releases"
|
||||
},
|
||||
{
|
||||
name: "Development Builds",
|
||||
url: "https://jenkins.4benj.com/job/Grasscutters/job/Grasscutter/"
|
||||
},
|
||||
{
|
||||
name: "Source Code",
|
||||
url: "https://github.com/Grasscutters/Grasscutter"
|
||||
}
|
||||
]} />
|
||||
<DownloadButton name="Download Cultivation" githubPath="Grasscutters/Cultivation" githubUseLatest={false} color="yellow" dropdown={ [
|
||||
{
|
||||
name: "Releases",
|
||||
url: "https://github.com/Grasscutters/Cultivation/releases"
|
||||
},
|
||||
{
|
||||
name: "Source Code",
|
||||
url: "https://github.com/Grasscutters/Cultivation"
|
||||
}
|
||||
]} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="scroll" id="scroll-down">
|
||||
{/*
|
||||
<div className="arrow">
|
||||
<FontAwesomeIcon icon={faAngleDown} />
|
||||
</div>
|
||||
<p> SCROLL FOR MORE </p>
|
||||
<div className="arrow">
|
||||
<FontAwesomeIcon icon={faAngleDown} />
|
||||
</div>
|
||||
*/}
|
||||
<p> MORE COMING SOON </p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="team">
|
||||
<h1> Meet the Team </h1>
|
||||
<div className="grid">
|
||||
<TeamMember picture={MeledyPF} name="Meledy" links={true} github="Melledy" badge="CREATOR" badgeColor="#f9cb25" />
|
||||
<TeamMember picture={MagixPF} name="Magix" links={true} github="KingRainbow44" website="https://magix.lol" />
|
||||
<TeamMember picture={BenjPF} name="Benj" links={true} github="4Benj" website="https://4benj.com" />
|
||||
<TeamMember picture={LunaticPF} name="Lunatic" links={true} github="lunaticwhat" website="https://lunatic.moe" />
|
||||
<TeamMember picture={memetrollsXDPF} name="memetrollsXD" links={true} github="memetrollsXD" />
|
||||
<TeamMember picture={MlgmXyysdPF} name="MlgmXyysd" links={true} github="MlgmXyysd" />
|
||||
<TeamMember picture={SpikeHDPF} name="SpikeHD" links={true} github="SpikeHD" />
|
||||
<TeamMember picture={YazawaziPF} name="Yazawazi" links={true} github="Yazawazi" />
|
||||
<TeamMember picture={AlteriPF} name="Alteri" links={true} github="alt3ri" website="https://alt3ri.com" />
|
||||
<TeamMember picture={BirdulonPF} name="Birdulon" links={true} github="Birdulon" />
|
||||
<TeamMember picture={ExZorkPF} name="ExZork" links={true} github="exzork" />
|
||||
<TeamMember picture={AyyLmaoPF} name="Ayy Lmao" links={true} github="lilmayofuksu" />
|
||||
<TeamMember picture={TukanDevPF} name="TukanDev" links={true} github="TukanDev" website="https://tukandev.com" />
|
||||
<TeamMember picture={XhaoYiranPF} name="赵怡然(zhaoyiran)" links={true} github="zhaodice" />
|
||||
<TeamMember picture={Akka0PF} name="Akka0" links={true} github="Akka0" />
|
||||
<TeamMember picture={GanyusLeftHornPF} name="GanyusLeftHorn" links={true} github="GanyusLeftHorn" />
|
||||
<TeamMember picture={NitroPF} name="Nitro" links={true} github="nitrog0d" badge="MELON" badgeColor="#ff3b6a" />
|
||||
<TeamMember picture={ShigetokiPF} name="茂刻shigetoki" links={false} badge="ARTIST" badgeColor="#9b59b6" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Home;
|
@ -1,94 +0,0 @@
|
||||
Copyright (c) 2011, Vernon Adams (vern@newtypography.co.uk),
|
||||
with Reserved Font Name Michroma.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
Before Width: | Height: | Size: 185 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 280 KiB |
Before Width: | Height: | Size: 290 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 2.0 MiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 348 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 676 KiB |
Before Width: | Height: | Size: 294 B |
Before Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 949 KiB |
Before Width: | Height: | Size: 431 KiB |
@ -1,13 +0,0 @@
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
||||
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
||||
sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
||||
monospace;
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
import React from 'react';
|
||||
import App from './App';
|
||||
|
||||
import { createRoot } from 'react-dom/client';
|
||||
const container = document.getElementById('root');
|
||||
const root = createRoot(container);
|
||||
root.render(<App />);
|
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
|
Before Width: | Height: | Size: 2.6 KiB |