initial commit

This commit is contained in:
2022-12-16 09:53:19 +07:00
commit c33dabd024
11 changed files with 4212 additions and 0 deletions

2
.dockerignore Normal file
View File

@@ -0,0 +1,2 @@
/.parcel-cache/
/node_modules/

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
/.parcel-cache/
/dist/
/node_modules/

15
Dockerfile Normal file
View File

@@ -0,0 +1,15 @@
FROM node:18.12.1-alpine as build
COPY package.json /opt/neko/
COPY package-lock.json /opt/neko/
WORKDIR /opt/neko
RUN npm ci --no-dev
COPY src /opt/neko/src
RUN npm run-script build
FROM nginx:1.23.2 as runtume
COPY ./nginx/templates /etc/nginx/templates
COPY --from=build /opt/neko/dist /opt/neko/dist

View File

@@ -0,0 +1,17 @@
server {
listen *:80;
root /opt/neko/dist;
index index.html;
client_max_body_size 100m;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
sendfile off;
location / {
root /opt/neko/dist;
index index.html;
}
}

4076
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

18
package.json Normal file
View File

@@ -0,0 +1,18 @@
{
"name": "parcel-example-neko",
"version": "1.0.0",
"description": "Test project",
"source": "src/index.html",
"scripts": {
"start": "parcel",
"build": "parcel build"
},
"author": "dannc",
"license": "ISC",
"dependencies": {
"parcel": "2.8.2",
"process": "0.11.10",
"react": "18.2.0",
"react-dom": "18.2.0"
}
}

0
readme.md Normal file
View File

15
src/index.html Normal file
View File

@@ -0,0 +1,15 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8"/>
<title>nekos.best integration</title>
<link rel="stylesheet" href="styles/styles.css" />
<script type="module" src="js/app.js"></script>
</head>
<body>
<h1>Hello, World!</h1>
<div id="nekos-container"></div>
</body>
</html>

53
src/js/Nekos.jsx Normal file
View File

@@ -0,0 +1,53 @@
import { useEffect, useState } from 'react';
/**
* @param {function} setNeko
*/
const getNeko = ({ setNeko }) => {
fetch('https://nekos.best/api/v2/neko')
.then((response) => response.json())
.then((json) => setNeko(json.results[0]));
};
const nekoBlockStyles = {
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
};
/**
* @link https://docs.nekos.best/index.html
* @returns {JSX.Element}
* @constructor
*/
const Nekos = () => {
/**
* neko object example:
* {
* "artist_href":"https://www.pixiv.net/en/users/47065875",
* "artist_name":"かえで",
* "source_url":"https://www.pixiv.net/en/artworks/88682108",
* "url":"https://nekos.best/api/v2/neko/0427.png"
* }
*/
const [neko, setNeko] = useState(null);
useEffect(() => {
getNeko({ setNeko });
}, [setNeko]);
return (
<div>
{(neko === null) && (<p>загрузка ...</p>)}
{neko && (
<div style={nekoBlockStyles}>
<img src={String(neko.url)} width="500px" alt="neko" />
<a href={neko.artist_href}>artist: {neko.artist_name}</a>
</div>
)}
</div>
);
};
export default Nekos;

9
src/js/app.js Normal file
View File

@@ -0,0 +1,9 @@
import { createRoot } from "react-dom/client";
import Nekos from './Nekos';
window.document.addEventListener('DOMContentLoaded', () => {
const container = document.getElementById('nekos-container');
const root = createRoot(container);
root.render(<Nekos />)
});

4
src/styles/styles.css Normal file
View File

@@ -0,0 +1,4 @@
h1 {
color: hotpink;
font-family: cursive;
}