page rendering, part 1

to complete page rendering, the default theme needed to be converted to
use blade templating. rather than update the theme kit as a seperate
progress, it will be integrated into this codebase so themes can be
developed and tested in app.

the basics for the theme kit are in place, so now conversion of the
defualt theme can be completed.

once the that is done, it can then be used to complete the rendering
engine to export HTML files
This commit is contained in:
ro 2024-03-14 16:58:11 -06:00
parent 950ca6f7ea
commit a5583debbd
No known key found for this signature in database
GPG key ID: 29B551CDBD4D3B50
38 changed files with 881 additions and 1003 deletions

4
.gitignore vendored
View file

@ -48,8 +48,8 @@ public/assets/images/*
content/* content/*
!content/themes !content/themes
content/themes/* content/themes/*
!content/themes/fipamo-default !content/themes/fipamo-default-v2
!content/themes/fipamo-default/* !content/themes/fipamo-default-v2/*
*.DS_Store *.DS_Store
*.codekit3 *.codekit3

View file

@ -0,0 +1,114 @@
<?php
namespace App\Http\Controllers\Theming;
use App\Http\Controllers\Controller;
use App\Interfaces\PageRepositoryInterface;
use App\Services\AuthService;
use App\Services\ThemeService;
use App\Services\SortingService;
class ThemeController extends Controller
{
protected PageRepositoryInterface $pages;
protected AuthService $auth;
protected ThemeService $themes;
protected SortingService $sort;
public function __construct(
PageRepositoryInterface $pageRepository,
AuthService $authService,
ThemeService $themeService,
SortingService $sortService,
) {
$this->pages = $pageRepository;
$this->auth = $authService;
$this->themes = $themeService;
$this->sort = $sortService;
$theme = $this->themes->getCurrentTheme();
$themeTestImagePath = '../public/theme/images/global/';
$themeTestCSSPath = '../public/theme/css/theme/';
$themeTestScriptsPath = '../public/theme/scripts/theme/';
//TODO: Create assset service class to handle moving theme assets around
//move assets to public for testing
foreach (
new \DirectoryIterator('../content/themes/' . $theme . '/assets/images/global/') as $file
) {
if ($file->isDot()) {
continue;
}
//make theme directory if not present
if (!is_dir($themeTestImagePath)) {
mkdir($themeTestImagePath, 0755, true);
}
if (!is_file($themeTestImagePath . $file->getFileName())) {
copy(
'../content/themes/' .
$theme .
'/assets/images/global/' .
$file->getFileName(),
$themeTestImagePath . $file->getFileName()
);
} else {
//image is already there, so chill
}
//print $file->getFilename() . "\n";
}
//clear test theme css and script directories
$styles = glob($themeTestCSSPath . '*'); // get all file names
foreach ($styles as $file) { // iterate files
if (is_file($file)) {
unlink($file); // delete file
}
}
$scripts = glob($themeTestScriptsPath . '*'); // get all file names
foreach ($scripts as $file) { // iterate files
if (is_file($file)) {
unlink($file); // delete file
}
}
//
//copy theme assets to public
$newcss = glob('../content/themes/' . $theme . '/assets/css/*');
if (!is_dir($themeTestCSSPath)) {
mkdir($themeTestCSSPath, 0755, true);
}
foreach ($newcss as $file) { // iterate files
if (is_file($file)) {
$path = explode('/', $file);
copy($file, $themeTestCSSPath . $path[6]);
}
}
$newjs = glob('../content/themes/' . $theme . '/assets/scripts/*');
if (!is_dir($themeTestScriptsPath)) {
mkdir($themeTestScriptsPath, 0755, true);
}
foreach ($newjs as $file) { // iterate files
if (is_file($file)) {
$path = explode('/', $file);
copy($file, $themeTestScriptsPath . $path[6]);
}
}
}
public function getView($view)
{
if ($this->auth::status()) {
$page = $this->pages->getById('09E5A362-BA31-4AE2-9DEE-C93DFBE005C3')->first();
$options = $this->sort->page($page);
return view('fipamo-default-v2.base', [
"debug" => "true",
"theme" => 'fipamo-default-v2',
"status" => $this->auth::status(),
"title" => "THEME PAGE",
"page" => $page,
"info" => $options['info'],
]);
} else {
return redirect('dashboard/start');
}
}
}

View file

@ -57,7 +57,14 @@ class FipamoServiceProvider extends ServiceProvider
}); });
$this->app->bind(RenderService::class, function ($app) { $this->app->bind(RenderService::class, function ($app) {
return new RenderService(); return new RenderService(
new SortingService(
new SettingsService(new DocService()),
new ContentService(),
new StringService(),
),
new SettingsService(new DocService())
);
}); });
$this->app->bind(SortingService::class, function ($app) { $this->app->bind(SortingService::class, function ($app) {

View file

@ -4,7 +4,49 @@ namespace App\Services;
class RenderService class RenderService
{ {
public function __construct() private $sort;
private $settings;
private $pageInfo;
private $menu;
private $background;
public function __construct(SortingService $sortingService, SettingsService $settingsService)
{ {
$this->sort = $sortingService;
$this->settings = $settingsService;
}
public function tag()
{
$list = $this->sort->tags();
foreach ($list as $item) {
$template = 'tags.twig';
$pageOptions = [
'title' => 'Pages Tagged as ' . $item['tag_name'],
'background' => $this->pageInfo['image'],
'tag_list' => $item['pages'],
'info' => $this->pageInfo,
'menu' => $this->menu,
'media' => [['file' => $this->pageInfo['image'], 'type' => trim(pathinfo($this->pageInfo['image'], PATHINFO_EXTENSION))]],
];
$html = $this->twig->render($template, $pageOptions);
$location = '../public/tags/' . $item['slug'] . '.html';
//if tags folder doesn't exist, make it
if (!is_dir('../public/tags')) {
mkdir('../public/tags', 0755, true);
} else {
}
if (!is_file($location)) {
file_put_contents($location, $html);
} else {
($new = fopen($location, 'w')) or die('Unable to open file!');
fwrite($new, $html);
fclose($new);
}
}
} }
} }

View file

@ -223,7 +223,7 @@ class SortingService
'files' => $page['docs'], 'files' => $page['docs'],
]; ];
} }
var_dump($pageOptions); //var_dump($pageOptions);
//return $pageOptions; return $pageOptions;
} }
} }

View file

@ -19,6 +19,11 @@ class ThemeService
} }
} }
public function getCurrentTheme()
{
return $this->settings->getGlobal()['theme'];
}
public function getThemes() public function getThemes()
{ {
return $this->themes; return $this->themes;

View file

@ -15,6 +15,7 @@ return [
'paths' => [ 'paths' => [
resource_path('views'), resource_path('views'),
realpath(base_path('content/themes')),
], ],
/* /*

View file

@ -0,0 +1,37 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<article>
<h1>{{ title }}</h1>
<div role="archives">
{% for item in archives %}
<div role="archive-item">
<h2>{{ item.year }}</h2>
{% for data in item.year_data %}
<div role="archive-month">
<h3>{{ data.full_month }}</h3>
{% for page in data.pages %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/"~item.year~"/"~data.month~"/"~page.slug }}">{{ page.title }}</a><br/>
{% else %}
<a href="{{ "/"~item.year~"/"~data.month~"/"~page.slug~".html" }}">{{ page.title }}</a><br/>
{% endif %}
{% else %}
<a href="{{ "/"~item.year~"/"~data.month~"/"~page.slug~".html" }}">{{ page.title }}</a><br/>
{% endif %}
{% endfor %}
</div>
{% endfor %}
</div>
{% endfor %}
</div>
</article>
{% endblock %}

View file

@ -0,0 +1,9 @@
/* BASE COLORS */
:root {
--primary: #1d3040;
--secondary: #fc6399;
--tertiary: #f5ab35;
--highlight: #63fcc6ff;
--white: #ebe5d4;
--black: #32302f;
}

View file

@ -0,0 +1,202 @@
html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
font: 400 1.2em/1.4em var(--base-type);
}
html body {
background: var(--white);
margin: 0;
padding: 0;
perspective: 1px;
transform-style: preserve-3d;
height: 100%;
width: 100%;
overflow-y: scroll;
overflow-x: hidden;
}
/* GLOBALS */
a {
color: var(--primary);
text-decoration: none;
border-bottom: 1px solid var(--secondary);
transition: all 0.2s linear;
}
a:hover {
border-bottom: 1px solid var(--highlight);
}
sup {
background: var(--black);
color: var(--white);
padding: 3px;
border-radius: 3px;
}
pre,
code {
background: var(--black);
color: var(--highlight);
border-radius: 3px;
padding: 3px;
}
/* HEADER */
header {
background: var(--primary);
height: 90%;
width: 100%;
border-top: var(--white) 3px solid;
}
/* HEADER -> Slideshow */
header > div[role="slide-show"] {
width: 100%;
height: 90%;
position: absolute;
}
header > div[role="slide-show"] > div[role="slide"] {
transition: all 0.7s linear;
width: 100%;
height: 100%;
position: absolute;
}
.hide {
opacity: 0;
}
.show {
opacity: 1;
}
header > div[role="slide-show"] > div[role="slide"] > video {
width: 100%;
height: 100%;
object-fit: cover;
}
/* HEADER -> Navigation */
nav {
width: 97%;
margin: 10px auto;
display: grid;
grid-template-columns: 50% 50%;
z-index: 1000;
position: relative;
color: var(--primary);
}
nav img {
width: 50px;
border-bottom: none;
}
nav div[role="nav-right"] {
margin-left: auto;
margin-right: 0;
}
nav a[role="home-link"] {
border-bottom: none;
}
nav a[role="menu-link"] {
background: var(--secondary);
margin-bottom: 14px;
padding: 3px;
border-radius: 2px;
display: inline-block;
font-size: 0.8em;
border-bottom: none;
}
/* MAIN CONTENT */
main {
z-index: 2;
background: var(--white);
line-height: 30px;
font-weight: lighter;
width: 100%;
color: var(--black);
}
main > article {
position: relative;
background: var(--white);
vertical-align: top;
color: var(--black);
padding: 0 15%;
}
main > article > div[role="archives"] {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
column-gap: 10px;
margin-bottom: 20px;
}
main article div[role="archives"] h1,
main article div[role="archives"] h2,
main article div[role="archives"] h3 {
color: var(--primary);
}
main > section {
background: var(--primary);
display: grid;
grid-template-columns: 50% 50%;
padding: 0 15%;
max-width: 1000px;
color: var(--secondary);
}
main > section > div {
padding-bottom: 20px;
}
main > section[role="page-meta"] > div a {
color: var(--white);
}
/* FOOTER */
footer {
background: var(--highlight);
padding: 30px 15%;
color: var(--primary);
}
/* RESPONSIVE */
@media only screen and (max-width: 640px) {
main > article {
padding: 0 10%;
}
main > section {
padding: 0 10%;
}
footer {
background: var(--highlight);
padding: 30px 10%;
}
}
@media only screen and (max-width: 480px) {
main > section {
display: inline-grid;
grid-template-columns: 50%;
width: 100%;
}
}

View file

@ -0,0 +1,3 @@
@import url("color.css");
@import url("typography.css");
@import url("frame.css");

View file

@ -0,0 +1,29 @@
:root {
--base-type: helvetica, arial, sans-serif;
--mono-type: "Lucida Console", monaco, monospace;
}
h1,
h2,
h3 {
color: var(--white);
}
h1 {
font-size: 2em;
font-weight: 700;
}
h2 {
font-size: 1.8em;
font-weight: 600;
}
h3 {
font-size: 1.5em;
font-weight: 500;
}
main > article > h1 {
color: var(--primary);
}

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View file

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 1 MiB

View file

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 202 KiB

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 462 462" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1.58717,0,0,1.58717,-403.964,-376.506)">
<g transform="matrix(1,0,0,1,200.753,94.1743)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(252,99,153);"/>
</g>
<g transform="matrix(1,0,0,1,200.753,201.192)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(252,99,153);"/>
</g>
<g transform="matrix(1,0,0,1,307.732,201.192)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(252,99,153);"/>
</g>
<g transform="matrix(1,0,0,1,414.761,201.192)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(171,183,183);"/>
</g>
<g transform="matrix(1,0,0,1,200.753,308.228)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(252,99,153);"/>
</g>
<g transform="matrix(1,0,0,1,307.732,308.228)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(171,183,183);"/>
</g>
<g transform="matrix(1,0,0,1,414.761,308.228)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(171,183,183);"/>
</g>
<g transform="matrix(1,0,0,1,414.761,94.1743)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(252,99,153);"/>
</g>
<g transform="matrix(6.12323e-17,1,-1,6.12323e-17,581.547,183.453)">
<circle cx="92.268" cy="181.547" r="38.502" style="fill:rgb(252,99,153);"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,27 @@
export default class Base {
//--------------------------
// constructor
//--------------------------
constructor() {
this.currentSlide = 0;
this.slides = document.querySelectorAll('[role="slide"]');
//alert('FRESH');
this.start();
}
start() {
if (this.slides.length > 1) {
this.slideInterval = setInterval(() => {
this.slides[this.currentSlide].className = 'hide';
this.currentSlide = (this.currentSlide + 1) % this.slides.length;
this.slides[this.currentSlide].className = 'show';
}, 3000);
}
}
//--------------------------
// methods
//--------------------------
//--------------------------
// event handlers
//--------------------------
}

View file

@ -0,0 +1,9 @@
import Base from "./Base.js";
document.addEventListener(
"DOMContentLoaded",
function () {
var base = new Base();
},
false
);

View file

@ -0,0 +1,103 @@
<!DOCTYPE html>
@php
if(isset($debug))
{
$assetPath = '/theme/';
}else{
$assetPath = '/assets/';
}
@endphp
<html>
<head>
<title>
@yield('title')
</title>
<meta charset="UTF-8"/>
<meta name='viewport' content='width=device-width, initial-scale=1.0'/>
<meta name="keywords" content="{{ $info['keywords'] }}"/>
<meta name="description" content="{{$info['description']}} "/>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta property="og:image" content="{{$info["image"]}}"/>
<meta name="twitter:image" content="{{$info["image"]}}"/>
<link rel="stylesheet" type="text/css" href="{{ $assetPath."css/theme/start.css" }}">
</head>
<body>
<header>
<div role="slide-show">
@if(count($page['media'])>1)
@foreach($page['media'] as $item)
@if($item['type'] == "mp4")
<div id="{{$loop->index}}" role="slide">
<video controls autoplay muted>
<source src="{{$item['file']}}" type="video/mp4">
Please get a better browser. They're free.
</video>
</div>
@else
<div id="{{$loop->index}}"role='slide' class="slide hide" style="background: url({{ $item['file'] }}) no-repeat center center / cover"></div>
@endif
@endforeach
@else
@if($page['media'] != '')
@if($page['media']['type'] == "mp4")
<div id="0" role="slide">
<video controls autoplay muted>
<source src="{{$page['media'][0]['file']}}" type="video/mp4">
Please get a better browser. They're free.
</video>
</div>
@else
<div id="0" role="slide" style="background: url({{ $page['media'][0]['file'] }}) no-repeat center center / cover"></div>
@endif
@endif
@endif
</div>
<nav>
<div class="left">
<a href="/" class="logo-link">
<img id="logo" src="{{ $assetPath."/images/global/the-logo.svg" }}"/>
</a>
</div>
<div class="right">
@if(isset($menu))
@foreach($media as $link)
@if(isset($dynamicRender))
@if($dynamicRender == 'true')
<a href="{{"/".$link['slug']}}" class="menu-link">{{link['title']}}</a><br/>
@else
<a href="{{"/".$link['slug'].".html"}}" class="menu-link">{{link['link']}}</a><br/>
@endif
@else
<a href="{{"/".$link['slug'].".html"}}" class="menu-link">{{link['tilte']}}</a><br/>
@endif
@endforeach
@endif
</div>
</nav>
</header>
<div id="main-content" class="container">
CONTAINTER BOY BOY
</div>
<footer>
<div class="inner">
@if(isset($dynamicRender))
@if($dynamicRender == 'true')
<a href="/archives">Archives</a><br/>
@else
<a href="/archives.html">Archives</a><br/>
@endif
@else
<a href="/archives.html">Archives</a><br/>
@endif
© 2020 By Fipamo
</div>
</footer>
<script src="{{ $assetPath."scripts/theme/ThemeStart.js" }}" type="module"></script>
</body>
</html>

View file

@ -0,0 +1,110 @@
<!DOCTYPE html>
{% if debug is defined %}
{% set assetPath = theme~'/assets/' %}
{% else %}
{% set assetPath = '/assets/' %}
{% endif %}
<html>
<head>
<title>
{% block title %}
{{ title }}
{% endblock %}
</title>
<meta charset="UTF-8"/>
<meta name="theme-color" content="#fc6399"/>
<meta name='viewport' content='width=device-width, initial-scale=1.0'/>
<meta name="keywords" content="{{ info['keywords'] }}"/>
<meta name="description" content="{{ info['description'] }} "/>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta property="og:image" content="{{ info["image"] }}"/>
<meta name="twitter:image" content="{{ info["image"] }}"/>
<link rel="stylesheet" type="text/css" href="{{ assetPath~"css/start.css?=ffgfg" }}">
</head>
<body>
<header>
<div role="slide-show">
{% if media|length > 1 %}
{% for item in media %}
{% if item.type == "mp4" %}
<div id="{{ loop.index0 }}" role="slide">
<video controls autoplay muted>
<source src="{{ item.file }}" type="video/mp4">
Please get a better browser. They're free.
</video>
</div>
{% else %}
<div id="{{ loop.index0 }}" role="slide" class="hide" style="background: url({{ item.file }}) no-repeat center center / cover"></div>
{% endif %}
{% endfor %}
{% else %}
{% if media[0] != '' %}
{% if media[0].type == "mp4" %}
<div id="0" role="slide">
<video controls autoplay muted>
<source src="{{ media[0].file }}" type="video/mp4">
Please get a better browser. They're free.
</video>
</div>
{% else %}
<div id="0" role="slide" style="background: url({{ media[0].file }}) no-repeat center center / cover"></div>
{% endif %}
{% else %}
{% endif %}
{% endif %}
</div>
<nav>
{% apply spaceless %}
<div role="nav-left">
<a href="/" role="home-link">
<img id="logo" src="{{ assetPath~"/images/global/the-logo.svg" }}"/>
</a>
</div>
<div role="nav-right">
{% if menu is defined %}
{% for link in menu %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/"~link.slug }}" role="menu-link">{{ link.title }}</a><br/>
{% else %}
<a href="{{ "/"~link.slug~".html" }}" role="menu-link">{{ link.title }}</a><br/>
{% endif %}
{% else %}
<a href="{{ "/"~link.slug~".html" }}" role="menu-link">{{ link.title }}</a><br/>
{% endif %}
{% endfor %}
{% endif %}
</div>
{% endapply %}
</nav>
</header>
<main>
{% apply spaceless %}
{% block mainContent %}{% endblock %}
{% endapply %}
</main>
<footer>
<div class="inner">
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="/archives">Archives</a><br/>
{% else %}
<a href="/archives.html">Archives</a><br/>
{% endif %}
{% else %}
<a href="/archives.html">Archives</a><br/>
{% endif %}
© 2022 Fipamo
</div>
</footer>
<script src="{{ assetPath~"scripts/ThemeStart.js" }}" type="module"></script>
</body>
</html>

View file

@ -0,0 +1,57 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<article>
<h1>{{ title }}</h1>
<p>{{ content | raw }}</p>
</article>
<section role="page-meta">
<div>
<h2>RECENT</h2>
{% for item in recent %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/"~item.path~"/"~item.slug }}">
{{ item.title }}
</a><br/>
{% else %}
<a href="{{ "/"~item.path~"/"~item.slug~".html" }}">
{{ item.title }}
</a><br/>
{% endif %}
{% else %}
<a href="{{ "/"~item.path~"/"~item.slug~".html" }}">
{{ item.title }}
</a><br/>
{% endif %}
{% endfor %}
</div>
<div>
<h2>FEATURED</h2>
{% for item in featured %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/"~item.path~"/"~item.slug }}">
{{ item.title }}
</a><br/>
{% else %}
<a href="{{ "/"~item.path~"/"~item.slug~".html" }}">
{{ item.title }}
</a><br/>
{% endif %}
{% else %}
<a href="{{ "/"~item.path~"/"~item.slug~".html" }}">
{{ item.title }}
</a><br/>
{% endif %}
{% endfor %}
</div>
</section>
{% endblock %}

View file

@ -0,0 +1,57 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<article>
<h1>{{ title }}</h1>
<p>{{ content | raw }}</p>
</article>
<section role="page-meta">
<div>
<h2>Files</h2>
{% for doc in files %}
{% if doc.type != "mp3" %}
{% set path = doc.file|split('/') %}
<a href="{{ doc.file }}">{{ path[6] }}</a>
{% endif %}
{% endfor %}
</div>
<div>
<h2>Sounds</h2>
{% for doc in files %}
{% if doc.type == "mp3" %}
<audio controls>
<source src="{{ doc.file }}" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
{% endif %}
{% endfor %}
</div>
<div>
<h2>Info</h2>
{{ meta['who'] }}
dropped this
{{ meta['when'] }}<br/>
</div>
<div>
<h2>Tags</h2>
{% for tag in meta['tags'] %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/tags/"~tag.slug }}">{{ tag.label }}</a>
{% else %}
<a href="{{ "/tags/"~tag.slug~".html" }}">{{ tag.label }}</a>
{% endif %}
{% else %}
<a href="{{ "/tags/"~tag.slug~".html" }}">{{ tag.label }}</a>
{% endif %}
{% endfor %}
</div>
</section>
{% endblock %}

View file

@ -0,0 +1,23 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<article>
<h1>{{ title }}</h1>
{% for tag in tag_list %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/"~tag.path~"/"~tag.slug }}">{{ tag.title }}</a><br/>
{% else %}
<a href="{{ "/"~tag.path~"/"~tag.slug~".html" }}">{{ tag.title }}</a><br/>
{% endif %}
{% else %}
<a href="{{ "/"~tag.path~"/"~tag.slug~".html" }}">{{ tag.title }}</a><br/>
{% endif %}
{% endfor %}
</article>
{% endblock %}

View file

@ -1,45 +0,0 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<section>
<div class="page-title">
<span>{{title}}</span>
</div>
</section>
<article>
<div class="page">
{% for item in archives %}
<div class="archive-item">
<span class="year">
{{item.year}}
</span>
{% for data in item.year_data %}
<div class="archive-month">
<span class="month">
{{data.full_month}}
</span>
{% for page in data.pages %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/"~item.year~"/"~data.month~"/"~page.slug }}">{{page.title}}</a><br />
{% else %}
<a href="{{ "/"~item.year~"/"~data.month~"/"~page.slug~".html" }}">{{page.title}}</a><br />
{% endif %}
{% else %}
<a href="{{ "/"~item.year~"/"~data.month~"/"~page.slug~".html" }}">{{page.title}}</a><br />
{% endif %}
{% endfor %}
</div>
{% endfor %}
</div>
{% endfor %}
</div>
</article>
{% endblock %}

View file

@ -1,600 +0,0 @@
h1, h2, h3 {
color: #ebe5d4;
}
h1 {
font-size: 2em;
font-weight: 400;
}
h2 {
font-size: 1.75em;
font-weight: 400;
}
h3 {
font-size: 1.5em;
font-weight: 300;
}
html {
line-height: 1.15;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body {
margin: 0;
}
article,
aside,
footer,
header,
nav,
section {
display: block;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
line-height: 1em;
}
figcaption,
figure,
main {
display: block;
}
figure {
margin: 1em 40px;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
pre {
font-family: monospace, monospace;
font-size: 1em;
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
a:active,
a:hover {
outline-width: 0;
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
text-decoration: underline dotted;
}
b,
strong {
font-weight: inherit;
font-weight: bolder;
}
kbd,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
dfn {
font-style: italic;
}
mark {
background-color: #ff0;
color: #000;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 60%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.55em;
background: #151d26;
color: #151d26;
border-radius: 2px;
padding: 0 2px 0 2px;
margin: 0 2px 0 0;
}
audio,
video {
display: inline-block;
}
audio:not([controls]) {
display: none;
height: 0;
}
img {
border-style: none;
}
svg:not(:root) {
overflow: hidden;
}
button,
input,
optgroup,
select,
textarea {
font-family: sans-serif;
font-size: 100%;
line-height: 1.15;
margin: 0;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
button, html [type=button],
[type=reset],
[type=submit] {
-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 #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
legend {
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal;
}
progress {
display: inline-block;
vertical-align: baseline;
}
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-file-upload-button {
-webkit-appearance: button;
font: inherit;
}
details,
menu {
display: block;
}
summary {
display: list-item;
}
canvas {
display: inline-block;
}
template {
display: none;
}
[hidden] {
display: none;
}
form {
display: inline-block;
}
form a {
color: #151d26;
}
form p {
background: #e8c33e;
color: #151d26;
padding: 5px;
display: block;
border-radius: 5px;
text-align: left;
}
input[type=email], input[type=password], input[type=text] {
border: 0;
border-radius: 5px;
padding: 5px;
margin: 10px 5px 0 0;
font: 18px Helvetica, Arial, sans-serif;
display: inline-block;
background: #151d26;
color: #e8c33e;
}
textarea {
border: 0;
border-radius: 3px;
color: #ebe5d4;
font: 15px Helvetica, Arial, sans-serif;
background: #151d26;
}
button, input[type=submit] {
background: #7ED07E;
color: #151d26;
font: 20px Helvetica, Arial, sans-serif;
border-radius: 5px;
position: relative;
cursor: pointer;
border: 0;
padding: 10px 0 5px 0;
transition: all 0.3s linear;
}
select {
font: 14px Helvetica, Arial, sans-serif;
border: 1px solid #FC6399;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
color: #151d26;
}
::-webkit-input-placeholder {
font: 25px Helvetica, Arial, sans-serif;
color: #ebe5d4;
}
:-moz-placeholder {
/* Firefox 18- */
font: 25px Helvetica, Arial, sans-serif;
color: #ebe5d4;
}
::-moz-placeholder {
/* Firefox 19+ */
font: 15px Helvetica, Arial, sans-serif;
color: #ebe5d4;
}
:-ms-input-placeholder {
font: 25px Helvetica, Arial, sans-serif;
color: #ebe5d4;
}
html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
font: 400 1.2em/1.4em Helvetica, Arial, sans-serif;
}
html body {
background: #ebe5d4;
margin: 0;
padding: 0;
perspective: 1px;
transform-style: preserve-3d;
height: 100%;
width: 100%;
overflow-y: scroll;
overflow-x: hidden;
}
html body a {
color: #151d26;
text-decoration: none;
border-bottom: 1px solid #7ED07E;
}
html body a:hover {
border-bottom: 1px solid #FC6399;
}
html body code {
background: #32302f;
color: #7ED07E;
border-radius: 3px;
padding: 3px;
}
html body pre {
background: #32302f;
color: #7ED07E;
border-radius: 3px;
padding: 3px;
}
html body code {
color: #FC6399;
background: none;
}
html body svg.icons {
width: 25px;
fill: #ebe5d4;
}
html body header {
background: #151d26;
height: 90%;
width: 100%;
border-top: #ebe5d4 3px solid;
}
html body header #media {
width: 100%;
height: 90%;
position: absolute;
}
html body header #media .slide {
transition: all 0.7s linear;
width: 100%;
height: 100%;
position: absolute;
}
html body header #media .hide {
opacity: 0;
}
html body header #media .show {
opacity: 1;
}
html body header #media video {
width: 100%;
height: 100%;
object-fit: cover;
}
html body header nav {
width: 97%;
margin: 10px auto;
z-index: 1000;
position: relative;
color: #151d26;
}
html body header nav .left, html body header nav .right {
width: 50%;
display: inline-block;
vertical-align: top;
}
html body header nav .left a.logo-link {
border-bottom: none;
margin: 0 0 20px 0;
display: block;
}
html body header nav .left a.logo-link #logo {
width: 50px;
border-bottom: none;
}
html body header nav .right {
text-align: right;
}
html body header nav .right a.menu-link {
background: #FC6399;
margin-bottom: 4px;
padding: 3px;
border-radius: 2px;
display: inline-block;
font-size: 0.8em;
border-bottom: none;
}
html body header nav .right a.menu-link:hover {
background: #FC6399;
}
html body .container {
z-index: 2;
background: #ebe5d4;
line-height: 30px;
font-weight: lighter;
width: 100%;
color: #32302f;
}
html body .container article {
position: relative;
width: 80%;
height: 80%;
max-width: 840px;
background: #ebe5d4;
vertical-align: top;
color: #32302f;
margin: 0 auto;
}
html body .container article .index, html body .container article .page {
padding: 0 0 15px 0;
}
html body .container article .index img, html body .container article .page img {
display: block;
width: 100%;
}
html body .container article .index h1, html body .container article .index h2, html body .container article .page h1, html body .container article .page h2 {
color: #151d26;
}
html body .container article .index p, html body .container article .page p {
font: 300 1.25em/1.6em Helvetica, Arial, sans-serif;
}
html body .container article .index .page_files .page_doc a, html body .container article .page .page_files .page_doc a {
background: #32302f;
border-radius: 3px;
color: #ebe5d4;
padding: 3px;
margin: 0 5px 0 0;
}
html body .container article .index .meta, html body .container article .page .meta {
font: 500 0.8em/1.3em Helvetica, Arial, sans-serif;
padding: 5px 0 0 0;
border-top: 1px solid #151d26;
background: #ebe5d4;
}
html body .container article .index .meta a, html body .container article .page .meta a {
font-size: 0.8em;
font-weight: 400;
}
html body .container article .index .archive-item, html body .container article .page .archive-item {
padding: 15px 0 20px 0;
}
html body .container article .index .archive-item span.year, html body .container article .page .archive-item span.year {
font-size: 1.5em;
font-weight: 500;
padding: 5px;
display: block;
color: #151d26;
}
html body .container article .index .archive-item .archive-month, html body .container article .page .archive-item .archive-month {
display: inline-block;
vertical-align: top;
width: 30%;
padding: 5px;
}
html body .container article .index .archive-item .archive-month span.month, html body .container article .page .archive-item .archive-month span.month {
color: #FC6399;
font-size: 1.5em;
font-weight: 300;
padding: 5px;
display: block;
}
html body .container section {
padding: 0 0 20px 0;
background: #151d26;
}
html body .container section a {
color: #ebe5d4;
}
html body .container section .index-lists, html body .container section .page-title {
max-width: 840px;
width: 80%;
margin: 0 auto;
padding: 20px 0 0 0;
}
html body .container section .index-lists span, html body .container section .page-title span {
font-size: 2em;
color: #FC6399;
font-weight: 400;
width: 80%;
margin: 0 auto;
padding: 20px 0 0 0;
}
html body .container section .index-lists .recent, html body .container section .index-lists .featured, html body .container section .page-title .recent, html body .container section .page-title .featured {
display: inline-block;
width: 50%;
vertical-align: top;
}
html body .container section .index-lists label, html body .container section .page-title label {
background: #32302f;
color: #ebe5d4;
font-size: 1.5em;
line-height: 1.3;
}
html body footer {
background: #ebe5d4;
padding: 10px;
color: #151d26;
font-size: 0.8em;
font-weight: 600;
height: 100px;
}
html body footer .inner {
margin: 20px auto;
width: 80%;
max-width: 840px;
}
html body footer .inner a {
color: #FC6399;
}
html body header nav {
width: 98%;
}
html body header span {
font-size: 2.5em;
}
html body header .container article .index .archive-item .archive-month, html body header .container article .page .archive-item .archive-month {
width: 45%;
}
html body header nav {
width: 96%;
}
html body header .container article .index, html body header .container article .page {
margin: 0;
}
html body header .container article .index p, html body header .container article .page p {
font: 300 1em/1.6em Helvetica, Arial, sans-serif;
}
html body header .container section .index-lists .recent, html body header .container section .index-lists .featured {
width: 100% !important;
}
html body header nav {
width: 95%;
}
html body .container article .index, html body .container article .page {
margin: 0;
}
html body .container article .index p, html body .container article .page p {
font: 300 0.9em/1.7em Helvetica, Arial, sans-serif;
}
html body .container article .index .archive-item .archive-month, html body .container article .page .archive-item .archive-month {
width: 95%;
}
/*# sourceMappingURL=base.css.map */

View file

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["../../../styles/_typography.sass","../../../styles/_normalize.sass","../../../styles/_colors.sass","../../../styles/_forms.sass","../../../styles/_structure.sass"],"names":[],"mappings":"AAGA;EACI;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AChBJ;EACI;EACA;EACA;;;AAEJ;EACI;;;AAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;EAMI;;;AAEJ;EACI;EACA;EACA;;;AAEJ;AAAA;AAAA;EAGI;;;AAEJ;EACI;;;AAEJ;EACI;EACA;EACA;;;AAEJ;EACI;EACA;;;AACJ;EACI;EACA;;;AAEJ;AAAA;EAEI;;;AAEJ;EACI;EACA;EACA;;;AAEJ;AAAA;EAEI;EACA;;;AAGJ;AAAA;EAEI;EACA;;;AAEJ;EACI;;;AAEJ;EACI;EACA;;;AAEJ;EACI;;;AAEJ;AAAA;EAEI;EACA;EACA;EACA;;;AAEJ;EACI;;;AAEJ;EACI;EACA,YCnFM;EDoFN,OCpFM;EDqFN;EACA;EACA;;;AAEJ;AAAA;EAEI;;;AAGA;EACI;EACA;;;AAER;EACI;;;AAGA;EACI;;;AAER;AAAA;AAAA;AAAA;AAAA;EAKI;EACA;EACA;EACA;;;AAEJ;AAAA;EAEI;;;AAEJ;AAAA;EAEI;;;AAEJ;AAAA;AAAA;EAGI;;;AAEJ;AAAA;AAAA;AAAA;EAII;EACA;;;AAEJ;AAAA;AAAA;AAAA;EAII;;;AAEJ;EACI;EACA;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;;;AAEJ;AAAA;EAEI;EACA;;;AAEJ;AAAA;EAEI;;;AAEJ;EACI;EACA;;;AAEJ;AAAA;EAEI;;;AAEJ;EACI;EACA;;;AAEJ;AAAA;EAEI;;;AAEJ;EACI;;;AAEJ;EACI;;;AAEJ;EACI;;;AAEJ;EACI;;;AEpMJ;EACI;;AACA;EACI,ODHE;;ACIN;EACI,YDHI;ECIJ,ODNE;ECOF;EACA;EACA;EACA;;;AAER;EACI;EACA;EACA;EACA;EACA;EACA;EACA,YDnBM;ECoBN,ODlBQ;;;ACoBZ;EACI;EACA;EACA,ODrBK;ECsBL;EACA,YD3BM;;;AC6BV;EACI,YD3BS;EC4BT,OD/BM;ECgCN;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACI;EACA;EACA;EACA;EACA;EACA,OD9CM;;;ACgDV;EACI;EACA,OD9CK;;;ACgDT;AACI;EACA;EACA,ODnDK;;;ACqDT;AACI;EACA;EACA,ODxDK;;;AC0DT;EACI;EACA,OD5DK;;;AEJT;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE,YFLK;EEML;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE,OFpBI;EEqBJ;EACA;;AAEA;EACE;;AAEJ;EACE,YFvBG;EEwBH,OF1BO;EE2BP;EACA;;AAEF;EACE,YF7BG;EE8BH,OFhCO;EEiCP;EACA;;AACF;EACE,OFtCO;EEuCP;;AAEF;EACE;EACA,MFxCG;;AE0CL;EACE,YF/CI;EEgDJ;EACA;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AACF;EACE;;AACF;EACE;;AACF;EACE;EACA;EACA;;AACJ;EACE;EACA;EACA;EACA;EACA,OFzEE;;AE0EF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AACA;EACE;EACA;;AACN;EACE;;AACA;EACE,YFxFC;EEyFD;EACA;EACA;EACA;EACA;EACA;;AACA;EACE,YFhGD;;AEkGT;EACE;EACA,YFjGG;EEkGH;EACA;EACA;EAEA,OFrGG;;AEsGH;EACE;EACA;EACA;EACA;EAEA,YF7GC;EE8GD;EACA,OF9GC;EE+GD;;AAGA;EACE;;AACA;EACE;EACA;;AACF;EACE,OF7HF;;AE8HA;EACE;;AAIE;EACE,YF/HP;EEgIO;EACA,OFlIP;EEmIO;EACA;;AACN;EACE;EACA;EACA;EACA,YFzIH;;AE0IG;EACE;EACA;;AAEJ;EACE;;AACA;EACE;EACA;EACA;EACA;EACA,OFzJJ;;AE0JE;EACE;EACA;EACA;EACA;;AACA;EACE,OF/JH;EEgKG;EACA;EACA;EACA;;AACV;EACE;EACA,YFvKE;;AEwKF;EACE,OFrKD;;AEsKD;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA,OFjLC;EEkLD;EACA;EACA;EACA;;AACF;EACE;EACA;EACA;;AACF;EACE,YFvLH;EEwLG,OFzLH;EE0LG;EACA;;AAER;EACE,YF9LG;EE+LH;EACA,OFpMI;EEqMJ;EACA;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE,OF5MG;;AEkNP;EACE;;AACF;EACE;;AAKM;EACE;;AAIV;EACE;;AAGE;EACE;;AACA;EACE;;AAGF;EACE;;AAIR;EACE;;AAGA;EACE;;AACA;EACE;;AAEA;EACE","file":"base.css"}

View file

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 486 678" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g id="Logo" transform="matrix(1.36867,0,0,1.36867,-351.696,-71.9183)">
<g transform="matrix(2.31599,0,0,2.31599,218.53,-99.4797)">
<path d="M93.67,140.92L93.67,140.921C105.569,140.921 115.216,150.567 115.216,162.467L115.216,172.724L115.216,172.724L115.216,182.262C115.216,194.161 105.569,203.808 93.669,203.808C81.976,203.217 74.12,195.969 72.237,184.474L72.282,182.737L72.282,162.467L72.205,160.847C72.775,149.587 82.728,141.121 93.67,140.92Z" style="fill:rgb(252,99,153);fill-rule:nonzero;"/>
</g>
<g transform="matrix(2.31599,0,0,2.31599,218.53,-437.697)">
<path d="M93.67,211.678L93.67,211.678C105.569,211.678 115.216,221.324 115.216,233.224L115.216,243.481L115.216,243.481L115.216,253.019C115.216,264.919 105.569,274.565 93.669,274.565C81.976,273.975 74.12,266.726 72.237,255.232L72.282,253.495L72.282,233.224L72.205,231.604C72.775,220.344 82.728,211.878 93.67,211.678Z" style="fill:rgb(252,99,153);fill-rule:nonzero;"/>
</g>
<g transform="matrix(2.31599,0,0,2.31599,218.53,241.338)">
<path d="M93.67,69.288L93.67,69.288C105.569,69.288 115.216,78.934 115.216,90.834L115.216,101.091L115.216,101.091L115.216,110.629C115.216,122.528 105.569,132.175 93.669,132.175C81.976,131.584 74.12,124.336 72.237,112.842L72.282,111.105L72.282,90.834L72.205,89.214C72.775,77.954 82.728,69.488 93.67,69.288Z" style="fill:rgb(171,183,183);fill-rule:nonzero;"/>
</g>
<g transform="matrix(2.31599,0,0,2.31599,218.53,-104.112)">
<path d="M38.059,142.92L38.059,142.921C49.958,142.921 59.605,152.567 59.605,164.467L59.605,174.724L59.605,174.724L59.605,184.262C59.605,196.161 49.958,205.808 38.058,205.808C26.365,205.217 18.509,197.969 16.626,186.474L16.671,184.737L16.671,164.467L16.594,162.847C17.164,151.587 27.117,143.121 38.059,142.92Z" style="fill:rgb(252,99,153);fill-rule:nonzero;"/>
</g>
<g transform="matrix(2.31599,0,0,2.31599,218.53,-104.112)">
<path d="M148.331,142.92L148.331,142.921C160.23,142.921 169.877,152.567 169.877,164.467L169.877,174.724L169.877,174.724L169.877,184.262C169.877,196.161 160.23,205.808 148.331,205.808C136.637,205.217 128.782,197.969 126.898,186.474L126.943,184.737L126.943,164.467L126.867,162.847C127.436,151.587 137.389,143.121 148.331,142.92Z" style="fill:rgb(171,183,183);fill-rule:nonzero;"/>
</g>
<g transform="matrix(2.31599,0,0,2.31599,218.53,-437.697)">
<path d="M38.059,211.678L38.059,211.678C49.958,211.678 59.605,221.324 59.605,233.224L59.605,243.481L59.605,243.481L59.605,253.019C59.605,264.919 49.958,274.565 38.058,274.565C26.365,273.975 18.509,266.726 16.626,255.232L16.671,253.495L16.671,233.224L16.594,231.604C17.164,220.344 27.117,211.878 38.059,211.678Z" style="fill:rgb(252,99,153);fill-rule:nonzero;"/>
</g>
<g transform="matrix(2.31599,0,0,2.31599,218.53,-437.697)">
<path d="M148.331,211.678L148.331,211.678C160.23,211.678 169.877,221.324 169.877,233.224L169.877,243.481L169.877,243.481L169.877,253.019C169.877,264.919 160.23,274.565 148.331,274.565C136.637,273.975 128.782,266.726 126.898,255.232L126.943,253.495L126.943,233.224L126.867,231.604C127.436,220.344 137.389,211.878 148.331,211.678Z" style="fill:rgb(252,99,153);fill-rule:nonzero;"/>
</g>
<g transform="matrix(2.31599,0,0,2.31599,218.53,241.338)">
<path d="M38.059,69.288L38.059,69.288C49.958,69.288 59.605,78.934 59.605,90.834L59.605,101.091L59.605,101.091L59.605,110.629C59.605,122.528 49.958,132.175 38.058,132.175C26.365,131.584 18.509,124.336 16.626,112.842L16.671,111.105L16.671,90.834L16.594,89.214C17.164,77.954 27.117,69.488 38.059,69.288Z" style="fill:rgb(252,99,153);fill-rule:nonzero;"/>
</g>
<g transform="matrix(2.31599,0,0,2.31599,218.53,241.338)">
<path d="M148.331,69.288L148.331,69.288C160.23,69.288 169.877,78.934 169.877,90.834L169.877,101.091L169.877,101.091L169.877,110.629C169.877,122.528 160.23,132.175 148.331,132.175C136.637,131.584 128.782,124.336 126.898,112.842L126.943,111.105L126.943,90.834L126.867,89.214C127.436,77.954 137.389,69.488 148.331,69.288Z" style="fill:rgb(171,183,183);fill-rule:nonzero;"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

View file

@ -1,2 +0,0 @@
(()=>{class e{constructor(){this.currentSlide=0,this.slides=document.querySelectorAll("#media .slide"),this.start()}start(){this.slides.length>1&&(this.slideInterval=setInterval((()=>{this.slides[this.currentSlide].className="slide hide",this.currentSlide=(this.currentSlide+1)%this.slides.length,this.slides[this.currentSlide].className="slide show"}),3e3))}}document.addEventListener("DOMContentLoaded",(function(){new e}),!1)})();
//# sourceMappingURL=ThemeStart.js.map

View file

@ -1 +0,0 @@
{"mappings":"4BAKIA,KAAKC,aAAe,EACpBD,KAAKE,OAASC,SAASC,iBAAiB,iBACxCJ,KAAKK,QAEPA,QACML,KAAKE,OAAOI,OAAS,IACvBN,KAAKO,cAAgBC,aAAW,KAC9BR,KAAKE,OAAOF,KAAKC,cAAcQ,UAAY,aAC3CT,KAAKC,cAAgBD,KAAKC,aAAe,GAAKD,KAAKE,OAAOI,OAC1DN,KAAKE,OAAOF,KAAKC,cAAcQ,UAAY,eAC1C,OCbTN,SAASO,iBACP,oBACA,WACa,IAAIC,KAEjB","sources":["src/themes/theme-fipamo-default/com/Base.js","src/themes/theme-fipamo-default/com/ThemeStart.js"],"sourcesContent":["export default class Base {\n //--------------------------\n // constructor\n //--------------------------\n constructor() {\n this.currentSlide = 0;\n this.slides = document.querySelectorAll(\"#media .slide\");\n this.start();\n }\n start() {\n if (this.slides.length > 1) {\n this.slideInterval = setInterval(() => {\n this.slides[this.currentSlide].className = \"slide hide\";\n this.currentSlide = (this.currentSlide + 1) % this.slides.length;\n this.slides[this.currentSlide].className = \"slide show\";\n }, 3000);\n }\n }\n //--------------------------\n // methods\n //--------------------------\n\n //--------------------------\n // event handlers\n //--------------------------\n}\n","import Base from \"./Base.js\";\n\ndocument.addEventListener(\n \"DOMContentLoaded\",\n function () {\n var base = new Base();\n },\n false\n);\n"],"names":["this","currentSlide","slides","document","querySelectorAll","start","length","slideInterval","setInterval","className","addEventListener","$b8d4b81eabebe07b$export$2e2bcd8739ae039"],"version":3,"file":"ThemeStart.js.map"}

View file

@ -1,112 +0,0 @@
<!DOCTYPE html>
{% if debug is defined %}
{% set assetPath = '/src/themes/theme-'~theme~'/'~theme~'/assets/' %}
{% else %}
{% set assetPath = '/assets/' %}
{% endif %}
<html>
<head>
<title>
{% block title %}
{{ title }}
{% endblock %}
</title>
<meta charset="UTF-8"/>
<meta name='viewport' content='width=device-width, initial-scale=1.0'/>
<meta name="keywords" content="{{ info['keywords'] }}"/>
<meta name="description" content="{{info['description']}} "/>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta property="og:image" content="{{info["image"]}}"/>
<meta name="twitter:image" content="{{info["image"]}}"/>
<link rel="stylesheet" type="text/css" href="{{ assetPath~"css/base.css?=dfvbghh" }}">
</head>
<body>
<!--
<header style="background: url({{ background }}) no-repeat center center; background-size: cover">
-->
<header>
<div id="media">
{% if media|length > 1 %}
{% for item in media %}
{% if item.type == "mp4"%}
<div id="{{loop.index0}}" class="slide">
<video controls autoplay muted>
<source src="{{item.file}}" type="video/mp4">
Please get a better browser. They're free.
</video>
</div>
{% else %}
<div id="{{loop.index0}}" class="slide hide" style="background: url({{ item.file }}) no-repeat center center / cover"></div>
{% endif %}
{% endfor %}
{% else %}
{% if media[0] != '' %}
{% if media[0].type == "mp4"%}
<div id="0" class="slide">
<video controls autoplay muted>
<source src="{{media[0].file}}" type="video/mp4">
Please get a better browser. They're free.
</video>
</div>
{% else %}
<div id="0" class="slide" style="background: url({{ media[0].file }}) no-repeat center center / cover"></div>
{% endif %}
{% else %}
{% endif %}
{% endif %}
</div>
<nav>
{% apply spaceless %}
<div class="left">
<a href="/" class="logo-link">
<img id="logo" src="{{ assetPath~"/images/global/the-logo.svg" }}"/>
</a>
</div>
<div class="right">
{% if menu is defined %}
{% for link in menu %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{"/"~link.slug}}" class="menu-link">{{link.title}}</a><br/>
{% else %}
<a href="{{"/"~link.slug~".html"}}" class="menu-link">{{link.title}}</a><br/>
{% endif %}
{% else %}
<a href="{{"/"~link.slug~".html"}}" class="menu-link">{{link.title}}</a><br/>
{% endif %}
{% endfor %}
{% endif %}
</div>
{% endapply %}
</nav>
</header>
<div id="main-content" class="container">
{% apply spaceless %}
{% block mainContent %}{% endblock %}
{% endapply %}
</div>
<footer>
<div class="inner">
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="/archives">Archives</a><br/>
{% else %}
<a href="/archives.html">Archives</a><br/>
{% endif %}
{% else %}
<a href="/archives.html">Archives</a><br/>
{% endif %}
© 2020 By Fipamo
</div>
</footer>
<script src="{{ assetPath~"scripts/ThemeStart.js" }}" type="text/javascript"></script>
</body>
</html>

View file

@ -1,51 +0,0 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<article>
<div class="index">
<h2>{{title}}</h2>
<p>{{ content | raw }}</p>
</div>
</article>
<section>
<div class="index-lists">
<div class="recent">
<span>RECENT</span><br />
{% for item in recent %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/"~item.path~"/"~item.slug}}"> {{item.title}} </a><br />
{% else %}
<a href="{{ "/"~item.path~"/"~item.slug~".html" }}"> {{item.title}} </a><br />
{% endif %}
{% else %}
<a href="{{ "/"~item.path~"/"~item.slug~".html" }}"> {{item.title}} </a><br />
{% endif %}
{% endfor %}
</div>
<div class="featured">
<span>FEATURED</span><br />
{% for item in featured %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/"~item.path~"/"~item.slug}}"> {{item.title}} </a><br />
{% else %}
<a href="{{ "/"~item.path~"/"~item.slug~".html" }}"> {{item.title}} </a><br />
{% endif %}
{% else %}
<a href="{{ "/"~item.path~"/"~item.slug~".html" }}"> {{item.title}} </a><br />
{% endif %}
{% endfor %}
</div>
</div>
</section>
{% endblock %}

View file

@ -1,60 +0,0 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<section>
<div class="page-title">
<span>{{title}}</span><br>
This is a custom temlate
</div>
</section>
<article>
<div class="page">
<p>{{content | raw}}</p>
<div>
<div class="page_files">
<div class="page_doc">
<strong>Files</strong><br/>
{% for doc in files %}
{% if doc.type != "mp3" %}
{% set path = doc.file|split('/') %}
<a href="{{doc.file}}">{{path[6]}}</a>
{% endif %}
{% endfor %}
</div>
<div class="page_sounds">
<strong>Sounds</strong><br/>
{% for doc in files %}
{% if doc.type == "mp3" %}
<audio controls>
<source src="{{doc.file}}" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
{% endif %}
{% endfor %}
</div>
</div>
<br/>
{{meta['who']}} dropped this {{ meta['when'] }}<br />
<strong>tags: </strong>
{% for tag in meta['tags'] %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/tags/"~tag.slug }}">{{ tag.label }}</a>
{% else %}
<a href="{{ "/tags/"~tag.slug~".html" }}">{{ tag.label }}</a>
{% endif %}
{% else %}
<a href="{{ "/tags/"~tag.slug~".html" }}">{{ tag.label }}</a>
{% endif %}
{% endfor %}
</div>
</div>
</article>
{% endblock %}

View file

@ -1,62 +0,0 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<section>
<div class="page-title">
<span>{{title}}</span>
</div>
</section>
<article>
<div class="page">
<p>{{content | raw}}</p>
<div>
<div class="page_files">
<div class="page_doc">
<strong>Files</strong><br/>
{% for doc in files %}
{% if doc.type != "mp3" %}
{% set path = doc.file|split('/') %}
<a href="{{doc.file}}">{{path[6]}}</a>
{% endif %}
{% endfor %}
</div>
<div class="page_sounds">
<strong>Sounds</strong><br/>
{% for doc in files %}
{% if doc.type == "mp3" %}
<audio controls>
<source src="{{doc.file}}" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
{% endif %}
{% endfor %}
</div>
</div>
<br/>
{{meta['who']}}
dropped this
{{ meta['when'] }}<br/>
<strong>tags:
</strong>
{% for tag in meta['tags'] %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{ "/tags/"~tag.slug }}">{{ tag.label }}</a>
{% else %}
<a href="{{ "/tags/"~tag.slug~".html" }}">{{ tag.label }}</a>
{% endif %}
{% else %}
<a href="{{ "/tags/"~tag.slug~".html" }}">{{ tag.label }}</a>
{% endif %}
{% endfor %}
</div>
</div>
</article>
{% endblock %}

View file

@ -1,30 +0,0 @@
{% extends "frame.twig" %}
{% block title %}
{{ title }}
{% endblock %}
{% block mainContent %}
<section>
<div class="page-title">
<span>{{title}}</span>
</div>
</section>
<article>
<div class="page">
{% for tag in tag_list %}
{% if dynamicRender is defined %}
{% if dynamicRender == 'true' %}
<a href="{{"/"~tag.path~"/"~tag.slug}}">{{tag.title}}</a><br />
{% else %}
<a href="{{"/"~tag.path~"/"~tag.slug~".html"}}">{{tag.title}}</a><br />
{% endif %}
{% else %}
<a href="{{"/"~tag.path~"/"~tag.slug~".html"}}">{{tag.title}}</a><br />
{% endif %}
{% endfor %}
</div>
</article>
{% endblock %}

View file

@ -3,6 +3,7 @@
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Dash\IndexController; use App\Http\Controllers\Dash\IndexController;
use App\Http\Controllers\Dash\AuthController; use App\Http\Controllers\Dash\AuthController;
use App\Http\Controllers\Theming\ThemeController;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -32,3 +33,9 @@ Route::group(['prefix' => 'dashboard', 'middleware' => 'member.check'], function
Route::get("/page/{mode}/{uuid}", [IndexController::class, 'page']); Route::get("/page/{mode}/{uuid}", [IndexController::class, 'page']);
Route::get("/logout", [AuthController::class, 'exit']); Route::get("/logout", [AuthController::class, 'exit']);
}); });
//theming
Route::group(['prefix' => 'theme', 'middleware' => 'member.check'], function () {
Route::get("/view/{view?}", [ThemeController::class, 'getView']);
});