Base index page fleshed out but now requires polish
This commit is contained in:
parent
6b8e7de31a
commit
7b86e738df
6
frontend/archetypes/default.md
Normal file
6
frontend/archetypes/default.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
---
|
||||
|
7
frontend/config.toml
Normal file
7
frontend/config.toml
Normal file
@ -0,0 +1,7 @@
|
||||
baseURL = 'https://clips.shockrah.xyz/'
|
||||
languageCode = 'en-us'
|
||||
title = "Shockrah's Clips"
|
||||
|
||||
theme = "clippable"
|
||||
|
||||
|
5
frontend/content/_index.md
Normal file
5
frontend/content/_index.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
title: Shockrah's Clips
|
||||
description: Clips I think are kinda kewl
|
||||
image: /favicon.png
|
||||
---
|
10
frontend/public/categories/index.xml
Normal file
10
frontend/public/categories/index.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Categories on Shockrah's Clips</title>
|
||||
<link>https://clips.shockrah.xyz/categories/</link>
|
||||
<description>Recent content in Categories on Shockrah's Clips</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language><atom:link href="https://clips.shockrah.xyz/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||
</channel>
|
||||
</rss>
|
42
frontend/public/css/style.css
Normal file
42
frontend/public/css/style.css
Normal file
@ -0,0 +1,42 @@
|
||||
html, body, div, tag {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
background: #212121;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.content {
|
||||
margin: 0 auto;
|
||||
padding: 0 2em;
|
||||
line-height: 1.6em;
|
||||
color: whitesmoke;
|
||||
}
|
||||
.video-gallery {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.video-block {
|
||||
padding: 1em;
|
||||
width: 400px;
|
||||
line-height: 1em;
|
||||
margin-right: 1em;
|
||||
margin-bottom: 1em;
|
||||
background: #191818;
|
||||
border-radius: 1em;
|
||||
}
|
||||
|
||||
.pure-form {
|
||||
text-align: center;
|
||||
}
|
||||
.pure-img {
|
||||
border-radius: 0.5em;
|
||||
}
|
BIN
frontend/public/favicon.png
Normal file
BIN
frontend/public/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
39
frontend/public/index.html
Normal file
39
frontend/public/index.html
Normal file
@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en"><head>
|
||||
<meta name="generator" content="Hugo 0.88.1" />
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" type="text/css" href="/css/style.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css" integrity="sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w" crossorigin="anonymous">
|
||||
<link rel="shortcut icon" type="image/png" href="/favicon.png"/>
|
||||
|
||||
|
||||
<title>Shockrah's Clips</title>
|
||||
<meta property="og:title" content="Shockrah's Clips">
|
||||
<meta property="og:site_name" content="Shockrah's not-a-blog">
|
||||
|
||||
<meta property="og:url" content="https://clips.shockrah.xyz/">
|
||||
|
||||
|
||||
<meta property="og:description" content="Clips I think are kinda kewl">
|
||||
<meta property="og:type" content="website">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta property="og:image" content="/favicon.png">
|
||||
|
||||
</head>
|
||||
|
||||
<script src="/js/index.js"></script>
|
||||
<body>
|
||||
<div id="layout">
|
||||
<div class="content">
|
||||
<h1>Shockrah's Clips</h1>
|
||||
<p>asdf</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
10
frontend/public/index.xml
Normal file
10
frontend/public/index.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Shockrah's Clips</title>
|
||||
<link>https://clips.shockrah.xyz/</link>
|
||||
<description>Recent content on Shockrah's Clips</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language><atom:link href="https://clips.shockrah.xyz/index.xml" rel="self" type="application/rss+xml" />
|
||||
</channel>
|
||||
</rss>
|
11
frontend/public/sitemap.xml
Normal file
11
frontend/public/sitemap.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
<url>
|
||||
<loc>https://clips.shockrah.xyz/categories/</loc>
|
||||
</url><url>
|
||||
<loc>https://clips.shockrah.xyz/</loc>
|
||||
</url><url>
|
||||
<loc>https://clips.shockrah.xyz/tags/</loc>
|
||||
</url>
|
||||
</urlset>
|
10
frontend/public/tags/index.xml
Normal file
10
frontend/public/tags/index.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Tags on Shockrah's Clips</title>
|
||||
<link>https://clips.shockrah.xyz/tags/</link>
|
||||
<description>Recent content in Tags on Shockrah's Clips</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language><atom:link href="https://clips.shockrah.xyz/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||
</channel>
|
||||
</rss>
|
BIN
frontend/static/favicon.png
Normal file
BIN
frontend/static/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
20
frontend/themes/clippable/LICENSE
Normal file
20
frontend/themes/clippable/LICENSE
Normal file
@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2021 YOUR_NAME_HERE
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
2
frontend/themes/clippable/archetypes/default.md
Normal file
2
frontend/themes/clippable/archetypes/default.md
Normal file
@ -0,0 +1,2 @@
|
||||
+++
|
||||
+++
|
0
frontend/themes/clippable/layouts/404.html
Normal file
0
frontend/themes/clippable/layouts/404.html
Normal file
11
frontend/themes/clippable/layouts/_default/baseof.html
Normal file
11
frontend/themes/clippable/layouts/_default/baseof.html
Normal file
@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
{{- partial "head.html" . -}}
|
||||
<body>
|
||||
{{- partial "header.html" . -}}
|
||||
<div id="content">
|
||||
{{- block "main" . }}{{- end }}
|
||||
</div>
|
||||
{{- partial "footer.html" . -}}
|
||||
</body>
|
||||
</html>
|
14
frontend/themes/clippable/layouts/index.html
Normal file
14
frontend/themes/clippable/layouts/index.html
Normal file
@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
{{- partial "head.html" . -}}
|
||||
<script src="/js/index.js"></script>
|
||||
<body>
|
||||
<div id="layout">
|
||||
<div class="content">
|
||||
<h1>{{ .Title }}</h1>
|
||||
<div class="video-gallery" id="main-container">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
32
frontend/themes/clippable/layouts/partials/head.html
Normal file
32
frontend/themes/clippable/layouts/partials/head.html
Normal file
@ -0,0 +1,32 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" type="text/css" href="/css/style.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css" integrity="sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w" crossorigin="anonymous">
|
||||
<link rel="shortcut icon" type="image/png" href="/favicon.png"/>
|
||||
{{ $title := print .Title }}
|
||||
{{ if .IsHome }}{{ $title = .Site.Title}}{{end}}
|
||||
<title>{{ $title }}</title>
|
||||
<meta property="og:title" content="{{ $title }}">
|
||||
<meta property="og:site_name" content="Shockrah's not-a-blog">
|
||||
{{ $url := .RelPermalink | absURL }}
|
||||
<meta property="og:url" content="{{$url}}">
|
||||
{{ $desc := print .Description }}
|
||||
{{ if .IsHome }}{{ $desc = .Params.Description }}{{end}}
|
||||
<meta property="og:description" content="{{ $desc }}">
|
||||
<meta property="og:type" content="website">
|
||||
{{ $ogvideo := "" }}
|
||||
{{ if .Params.Video }}
|
||||
{{ $ogvideo = .Params.Video }}
|
||||
<meta property="og:video" content="{{ $ogvideo }}">
|
||||
<meta property="og:video:width" content="640">
|
||||
<meta property="og:video:height" content="480">
|
||||
{{ else }}
|
||||
{{ $ogimage := "/favicon.png" }}
|
||||
{{ if .Params.Image }}
|
||||
{{ $ogimage = .Params.Image }}
|
||||
{{ end }}
|
||||
<meta property="og:image" content="{{ $ogimage }}">
|
||||
{{ end }}
|
||||
</head>
|
||||
|
42
frontend/themes/clippable/static/css/style.css
Normal file
42
frontend/themes/clippable/static/css/style.css
Normal file
@ -0,0 +1,42 @@
|
||||
html, body, div, tag {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
background: #212121;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.content {
|
||||
margin: 0 auto;
|
||||
padding: 0 2em;
|
||||
line-height: 1.6em;
|
||||
color: whitesmoke;
|
||||
}
|
||||
.video-gallery {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.video-block {
|
||||
padding: 1em;
|
||||
width: 400px;
|
||||
line-height: 1em;
|
||||
margin-right: 1em;
|
||||
margin-bottom: 1em;
|
||||
background: #191818;
|
||||
border-radius: 1em;
|
||||
}
|
||||
|
||||
.pure-form {
|
||||
text-align: center;
|
||||
}
|
||||
.pure-img {
|
||||
border-radius: 0.5em;
|
||||
}
|
42
frontend/themes/clippable/static/js/index.js
Normal file
42
frontend/themes/clippable/static/js/index.js
Normal file
@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
class Category {
|
||||
constructor(raw) {
|
||||
this.name = raw['name'];
|
||||
this.thumbnail_b64 = raw['thumbnail'];
|
||||
}
|
||||
as_div_str() {
|
||||
let container = document.createElement('div');
|
||||
container.className = 'video-block';
|
||||
let title = document.createElement('h2');
|
||||
title.innerText = this.name;
|
||||
let nail = document.createElement('img');
|
||||
nail.className = 'pure-img';
|
||||
if (!(this.thumbnail_b64 == null || this.thumbnail_b64.length == 0)) {
|
||||
nail.setAttribute('src', `data:image/jpg;base64,${this.thumbnail_b64}`);
|
||||
}
|
||||
container.appendChild(title);
|
||||
container.appendChild(nail);
|
||||
document.getElementById('main-container').appendChild(container);
|
||||
return container;
|
||||
}
|
||||
}
|
||||
function ready_handler(e) {
|
||||
// Only let this make a get request once we're ready on the page
|
||||
if (document.readyState != 'complete') {
|
||||
return e;
|
||||
}
|
||||
// All we do here is basically make a get request to /api/categories
|
||||
const endpoint = 'http://localhost/api/categories';
|
||||
let xml = new XMLHttpRequest();
|
||||
xml.open('GET', endpoint, false); // sync request
|
||||
xml.send(null); // nothing required for stuff
|
||||
if (xml.getResponseHeader('Content-Type') == 'application/json') {
|
||||
let raw = JSON.parse(xml.responseText);
|
||||
for (const cat_raw of raw['categories']) {
|
||||
let cat = new Category(cat_raw);
|
||||
cat.as_div_str();
|
||||
}
|
||||
}
|
||||
return e;
|
||||
}
|
||||
document.addEventListener('readystatechange', ready_handler);
|
21
frontend/themes/clippable/theme.toml
Normal file
21
frontend/themes/clippable/theme.toml
Normal file
@ -0,0 +1,21 @@
|
||||
# theme.toml template for a Hugo theme
|
||||
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
|
||||
|
||||
name = "Clippable"
|
||||
license = "MIT"
|
||||
licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE"
|
||||
description = ""
|
||||
homepage = "http://example.com/"
|
||||
tags = []
|
||||
features = []
|
||||
min_version = "0.41.0"
|
||||
|
||||
[author]
|
||||
name = ""
|
||||
homepage = ""
|
||||
|
||||
# If porting an existing theme
|
||||
[original]
|
||||
name = ""
|
||||
homepage = ""
|
||||
repo = ""
|
51
frontend/ts/index.ts
Normal file
51
frontend/ts/index.ts
Normal file
@ -0,0 +1,51 @@
|
||||
class Category {
|
||||
name: string
|
||||
thumbnail_b64: string|null
|
||||
constructor(raw: any) {
|
||||
this.name = raw['name']
|
||||
this.thumbnail_b64 = raw['thumbnail']
|
||||
}
|
||||
|
||||
public as_div_str() {
|
||||
let container = document.createElement('div')
|
||||
container.className = 'video-block'
|
||||
|
||||
let title = document.createElement('h2')
|
||||
title.innerText = this.name
|
||||
|
||||
let nail = document.createElement('img')
|
||||
nail.className = 'pure-img'
|
||||
if(!(this.thumbnail_b64 == null || this.thumbnail_b64.length == 0)) {
|
||||
nail.setAttribute('src', `data:image/jpg;base64,${this.thumbnail_b64}`)
|
||||
}
|
||||
|
||||
container.appendChild(title)
|
||||
container.appendChild(nail)
|
||||
|
||||
document.getElementById('main-container').appendChild(container)
|
||||
|
||||
return container
|
||||
}
|
||||
}
|
||||
|
||||
function ready_handler(e?: Event) : Event {
|
||||
// Only let this make a get request once we're ready on the page
|
||||
if(document.readyState != 'complete') { return e }
|
||||
|
||||
// All we do here is basically make a get request to /api/categories
|
||||
const endpoint = 'http://localhost/api/categories'
|
||||
let xml = new XMLHttpRequest()
|
||||
|
||||
xml.open('GET', endpoint, false) // sync request
|
||||
xml.send(null) // nothing required for stuff
|
||||
if(xml.getResponseHeader('Content-Type') == 'application/json') {
|
||||
let raw = JSON.parse(xml.responseText)
|
||||
for(const cat_raw of raw['categories']) {
|
||||
let cat = new Category(cat_raw)
|
||||
cat.as_div_str()
|
||||
}
|
||||
}
|
||||
return e
|
||||
}
|
||||
|
||||
document.addEventListener('readystatechange', ready_handler)
|
16
frontend/ts/package.json
Normal file
16
frontend/ts/package.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "ts",
|
||||
"version": "1.0.0",
|
||||
"description": "Frontend scripts built out for clippable's frontend",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"build": "tsc"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "gitlab.com/shockrah/clippable.git"
|
||||
},
|
||||
"author": "shockrah",
|
||||
"license": "GPL-3.0"
|
||||
}
|
27
frontend/ts/tsconfig.json
Normal file
27
frontend/ts/tsconfig.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es6",
|
||||
"module": "commonjs",
|
||||
"outDir": "../themes/clippable/static/js/",
|
||||
"importHelpers": true,
|
||||
/* Strict Type-Checking Options */
|
||||
"strict": true,
|
||||
"strictNullChecks": false,
|
||||
"strictFunctionTypes": true,
|
||||
"noImplicitThis": true,
|
||||
"alwaysStrict": true,
|
||||
|
||||
/* Additional Checks */
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
/*"noUncheckedIndexedAccess": true, */
|
||||
/*"noPropertyAccessFromIndexSignature": true, */
|
||||
|
||||
/* Module Resolution Options */
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user