Initial commit.

Signed-off-by: Andreas Widen <aw@luflow.net>
This commit is contained in:
Andreas Widen 2026-07-27 17:57:03 +02:00
commit a4a5c7daa5
Signed by: hfsoulz
GPG key ID: 5B85F9B5F576A667
1389 changed files with 241399 additions and 0 deletions

47
templates/404.stpl Normal file
View file

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="luflow, HFGE, Free Software, C++, Libre software, Engine, Game Engine, Graphics, 3D, 2D, Programming, Vulkan">
<meta name="description" content="This website is dedicated to free software primarily in the area of graphics engines but also free software in general.">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/elements.css">
<link rel="stylesheet" href="/static/css/breadcrumbs.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/page.css">
<title>Page not found | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<% include!("./partials/404_content.stpl"); %>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Home");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>

48
templates/500.stpl Normal file
View file

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="luflow, HFGE, Free Software, C++, Libre software, Engine, Game Engine, Graphics, 3D, 2D, Programming, Vulkan">
<meta name="description" content="This website is dedicated to free software primarily in the area of graphics engines but also free software in general.">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/elements.css">
<link rel="stylesheet" href="/static/css/breadcrumbs.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/page.css">
<title>500 - Internal Server Error | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<% include!("./partials/500_content.stpl"); %>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Home");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>

View file

@ -0,0 +1,184 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="luflow Blog, <%= self.overview_keywords %>, page <%= self.overview_current_page %>">
<meta name="description" content="<%= self.overview_title %> Page <%= self.overview_current_page %>">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/item-preview.css">
<link rel="stylesheet" href="/static/css/buttons.css">
<link rel="stylesheet" href="/static/css/breadcrumbs.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/page.css">
<link rel="stylesheet" href="/static/css/sidebar.css">
<title><%= self.overview_title %> Page <%= self.overview_current_page %> | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<% include!("./partials/blog_overview_breadcrumbs.stpl"); %>
<main>
<section class="page-post centered-text">
<h2><%= self.overview_title %><span class="page-number-indicator"> (Page <%= self.overview_current_page %> of <%= self.overview_num_pages %>)</span></h2>
<div class="sheet">
<%
if self.overview_type == 1 {
if let Some(indices) = self.topic_blog_indices.get(&self.overview_topic) {
for i in self.overview_offset..self.overview_offset + self.overview_num_posts {
let index = match indices.get(i) {
Some(value) => value,
_ => panic!("Did not find blog post for index: {}", i),
};
let post = match self.blog_posts.get(*index) {
Some(value) => value,
_ => panic!("Did not find blog post for index: {}", i),
};
%>
<a class="item-preview" href="/<%= post.base_dir %>/<%= post.url %>/">
<h3 lang="en"><%= post.title %></h3>
<p class="item-date"><%= post.published.to_string() %></p>
<p class="item-summary" lang="en"><%= post.snippet %></p>
</a>
<%
}
}
} else if self.overview_type == 2 {
if let Some(indices) = self.year_blog_indices.get(&self.overview_year) {
for i in self.overview_offset..self.overview_offset + self.overview_num_posts {
let index = match indices.get(i) {
Some(value) => value,
_ => panic!("Did not find blog post for index: {}", i),
};
let post = match self.blog_posts.get(*index) {
Some(value) => value,
_ => panic!("Did not find blog post for index: {}", i),
};
%>
<a class="item-preview" href="/<%= post.base_dir %>/<%= post.url %>/">
<h3 lang="en"><%= post.title %></h3>
<p class="item-date"><%= post.published.to_string() %></p>
<p class="item-summary" lang="en"><%= post.snippet %></p>
</a>
<%
}
}
} else if self.overview_type == 0 {
for i in self.overview_offset..self.overview_offset + self.overview_num_posts {
let post = match self.blog_posts.get(i) {
Some(value) => value,
_ => panic!("Did not find blog post for index: {}", i),
};
%>
<a class="item-preview" href="/<%= post.base_dir %>/<%= post.url %>/">
<h3 lang="en"><%= post.title %></h3>
<p class="item-date"><%= post.published.to_string() %></p>
<p class="item-summary" lang="en"><%= post.snippet %></p>
</a>
<%
}
} else {
panic!("overview_type: {} is not implemented!", self.overview_type);
}
%>
<nav class="page-selector">
<h3 class="a11y-offset">Page <%= self.overview_current_page %> of <%= self.overview_num_pages %>. Go to another page: </h3>
<%
for i in 1..self.overview_num_pages + 1 {
let mut page_url = format!("/{}/page/{}/", self.base_dir, i);
if self.overview_type == 1 {
page_url = format!("/{}/topic/{}/page/{}/", self.base_dir, self.overview_topic_sanitized, i);
} else if self.overview_type == 2 {
page_url = format!("/{}/year/{}/page/{}/", self.base_dir, self.overview_year, i);
}
let mut button_class = "button-little";
if i == self.overview_current_page {
button_class = "button-little button-little-active";
}
%>
<a class="<%= button_class %>" href="<%= page_url %>"><%= i %></a>
<% } %>
</nav>
</div>
<section class="side-bar">
<h3 class="a11y-offset">Blog menu: </h3>
<ul class="bar-list">
<h4 class="bar-title bar-title-top">Get blog updates</h4>
<li class="bar-item">
<a class="bar-link feed-link" href="/feeds/blog.atom">Atom feed</a>
</li>
</ul>
<ul class="bar-list">
<h4 class="bar-title bar-title-top">Posts by topic</h4>
<%
for (i, topic) in self.topics.iter().enumerate() {
let mut topic_sanitized = String::from("");
if let Some(value) = self.topics_sanitized.get(i) {
topic_sanitized = String::from(value);
}
let mut num_blog_posts_topic = 0;
if let Some(indices) = self.topic_blog_indices.get(topic) {
num_blog_posts_topic = indices.len();
}
let topic_url = format!("/{}/topic/{}/", self.base_dir, topic_sanitized);
%>
<li class="bar-item">
<a class="bar-link" href="<%= topic_url %>"><%= topic %> (<%= num_blog_posts_topic %>)</a>
</li>
<% } %>
</ul>
<ul class="bar-list">
<h4 class="bar-title bar-title-top">Posts by year</h4>
<%
for year in &self.years {
let mut num_blog_posts_year = 0;
if let Some(indices) = self.year_blog_indices.get(year) {
num_blog_posts_year = indices.len();
}
let year_url = format!("/{}/year/{}/", self.base_dir, year);
%>
<li class="bar-item">
<a class="bar-link" href="<%= year_url %>"><%= year %> (<%= num_blog_posts_year %>)</a>
</li>
<% } %>
</ul>
</section>
</section>
</main>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Blog");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>

62
templates/blog_post.stpl Normal file
View file

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="luflow Blog, <%= self.topics_comma_separated %>">
<meta name="description" content="<%= self.snippet %>">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/elements.css">
<link rel="stylesheet" href="/static/css/buttons.css">
<link rel="stylesheet" href="/static/css/breadcrumbs.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/page.css">
<link rel="stylesheet" href="/static/css/post.css">
<link rel="stylesheet" href="/static/highlight/styles/stackoverflow-light.min.css">
<script src="/static/highlight/highlight.min.js"></script>
<title><%= self.title %> | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<% include!("./partials/blog_post_breadcrumbs.stpl"); %>
<main>
<article class="page-post centered-block limit-width" lang="en">
<h2><%= self.title %></h2>
<p class="post-metadata centered-text" lang="en"><%= self.author %> — <%= self.published.to_string() %></p>
<%- self.html %>
<% include!("./partials/blog_post_topic_list.stpl"); %>
<% include!("./partials/blog_post_license_bysa4.0.stpl"); %>
</article>
</main>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<% include!("./partials/script_copy_to_clipboard.stpl"); %>
<% include!("./partials/script_highlight.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Blog");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>

48
templates/contact.stpl Normal file
View file

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="Contact, luflow">
<meta name="description" content="A list of channels to communicate with luflow directly about anything you want.">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/elements.css">
<link rel="stylesheet" href="/static/css/breadcrumbs.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/page.css">
<title>Contact | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<% include!("./partials/contact_breadcrumbs.stpl"); %>
<% include!("./partials/contact_content.stpl"); %>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Contact");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>

48
templates/hfge.stpl Normal file
View file

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="HFGE, luflow, Graphics Engine, Game Engine, 3D game engine, cross platform, Free Software, C++, Libre software, Graphics Programming, Vulkan, Download">
<meta name="description" content="HFGE is a cross platform 3D game engine written in C++ and distributed under the zlib license.">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/elements.css">
<link rel="stylesheet" href="/static/css/breadcrumbs.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/page.css">
<title>About HFGE | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<% include!("./partials/hfge_breadcrumbs.stpl"); %>
<% include!("./partials/hfge_content.stpl"); %>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Projects");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>

85
templates/index.stpl Normal file
View file

@ -0,0 +1,85 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="luflow, HFGE, Free Software, C++, Libre software, Engine, Game Engine, Graphics, 3D, 2D, Programming, Vulkan">
<meta name="description" content="This website is dedicated to free software primarily in the area of graphics engines but also free software in general.">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/elements.css">
<link rel="stylesheet" href="/static/css/item-preview.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/buttons.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/index.css">
<title>HFGE 3D engine, coding and free software | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<main>
<% include!("./partials/index_featured_content.stpl"); %>
<section class="discovery-box">
<h2>Screenshots</h2>
<p class="limit-width centered-block">A few early development screenshots of <a href="/<%= self.hfge_url %>" class="link-yellow">HFGE</a> in action.</p>
<div class="screenshots-box">
<%
for screenshot in &self.screenshots {
%>
<div class="screenshot-preview">
<a href="/<%= screenshot.url %>/">
<img class="responsive-image" src="/<%= screenshot.image_min %>" alt="" />
<span class="screenshot-inset-shadow"></span>
</a>
<p class="screenshot-preview-description"><%= screenshot.title %>
<span class="hidden">.</span>
</p>
</div>
<% } %>
</div>
</section>
<section class="centered-text">
<h2>Latest blog posts</h2>
<%
for blog_post in &self.blog_posts {
%>
<a class="item-preview" href="/<%= self.blog_base_dir %>/<%= blog_post.url %>/">
<h3 lang="en"><%= blog_post.title %></h3>
<p class="item-date"><%= blog_post.published.to_string() %></p>
<p class="item-summary" lang="en"><%= blog_post.snippet %></p>
</a>
<% } %>
<div class="action-box centered-text">
<a class="button-big" href="/<%= self.blog_base_dir %>/">ALL POSTS</a>
</div>
</section>
</main>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Home");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>

View file

@ -0,0 +1,6 @@
<main>
<section class="page centered-block limit-width">
<h2 style="font-size: 12em;">404</h2>
<p>The page you are trying to reach either does not exist, has been removed or you are not authorized to view it.</p>
</section>
</main>

View file

@ -0,0 +1,8 @@
<main>
<section class="page centered-block limit-width">
<h2>Something Went Wrong</h2>
<p class="post-metadata centered-text" lang="en">Were working to fix the problem. Please try again later.</p>
</section>
</main>

View file

@ -0,0 +1,8 @@
<nav class="breadcrumbs">
<h2 class="a11y-offset">Your location:</h2>
<a class="crumb" href="/">Home</a>
<span> > </span>
<a class="crumb" href="/<%= self.base_dir %>/">Blog</a>
<span> > </span>
<a class="crumb crumb-active" href="/<%= self.overview_page_url %>/">Page <%= self.overview_current_page %></a>
</nav>

View file

@ -0,0 +1,8 @@
<nav class="breadcrumbs">
<h2 class="a11y-offset">Your location:</h2>
<a class="crumb" href="/">Home</a>
<span> > </span>
<a class="crumb" href="/<%= self.base_dir %>/">Blog</a>
<span> > </span>
<a class="crumb crumb-active" href="/<%= self.base_dir %>/<%= self.url %>/"><%= self.title %></a>
</nav>

View file

@ -0,0 +1,9 @@
<div class="license" lang="en">
<p>
Unless otherwise stated, blog posts on this site are
copyrighted by their respective authors and published
under the terms of the <a
href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA
4.0 license.</a>
</p>
</div>

View file

@ -0,0 +1,13 @@
<div class="topic-list" lang="en">
<p>Related topics:</p>
<%
for (i, topic) in self.topics.iter().enumerate() {
let mut topic_sanitized = "";
if let Some(value) = self.topics_sanitized.get(i) {
topic_sanitized = value;
}
let topic_sanitized_url = format!("/{}/{}/{}/", self.base_dir, self.topic_base_dir, topic_sanitized);
%>
<a class="button-little" href="<%= topic_sanitized_url %>"><%= topic %></a>
<% } %>
</div>

View file

@ -0,0 +1,6 @@
<nav class="breadcrumbs">
<h2 class="a11y-offset">Your location:</h2>
<a class="crumb" href="/">Home</a>
<span> > </span>
<a class="crumb crumb-active" href="./">Contact</a>
</nav>

View file

@ -0,0 +1,13 @@
<main>
<section class="page centered-block limit-width">
<h2>Contact</h2>
<h3>Email</h3>
<p>Feel free to send your current thoughts to the email address listed below.</p>
<p><a href="mailto:hello@luflow.net">hello@luflow.net</a></p>
<h3>GPG key</h3>
<p>For encrypted communication download: <a href="https://luflow.net/static/gpg/aw-luflow-net-pubkey.asc">https://luflow.net/static/gpg/aw-luflow-net-pubkey.asc</a></p>
<p>Then</p>
<pre><code class="language-sh">gpg --import aw-luflow-net-pubkey.asc</code></pre>
<p>This key is also used for signing Git commits and tags.</p>
</section>
</main>

View file

@ -0,0 +1,4 @@
<footer>
Static website generataor <a class="link-yellow" href="/git/hfsoulz/flow-web.git"> source code</a> is licensed
the <a class="link-yellow" href="https://gnu.org/licenses/agpl-3.0.html">GNU AGPL</a>.
</footer>

View file

@ -0,0 +1,25 @@
<header>
<a href="/" class="branding"></a>
<div class="menuToggle"></div>
<nav>
<ul>
<li><a href="/" id="Home">Home</a></li>
<li><a href="/git/explore/repos/" id="Git">Git</a></li>
<li><a href="#" id="Projects">Projects &#9660;</a>
<ul>
<li><a href="/projects/hfge/">HFGE</a></li>
<li><a href="/blog/flow-web-a-program-that-will-allow-you-to-generate-static-website/">flow-web</a></li>
<li><a href="/blog/flow-rbp-a-library-for-packing-rectangles-into-two-dimensional-finite-bins/">flow-rbp</a></li>
<li><a href="/blog/flow-texpack-a-program-that-will-allow-you-to-generate-texture-atlas/">flow-texpack</a></li>
</ul>
</li>
<li><a href="#" id="Screenshots">Screenshots &#9660;</a>
<ul>
<li><a href="/projects/hfge/screenshots/">HFGE</a></li>
</ul>
</li>
<li><a href="/blog/" id="Blog">Blog</a></li>
<li><a href="/contact/" id="Contact">Contact</a></li>
</ul>
</nav>
</header>

View file

@ -0,0 +1,6 @@
<nav class="breadcrumbs">
<h2 class="a11y-offset">Your location:</h2>
<a class="crumb" href="/">Home</a>
<span> > </span>
<a class="crumb crumb-active" href="./">About HFGE</a>
</nav>

View file

@ -0,0 +1,20 @@
<main>
<section class="page centered-block limit-width">
<h2>About HFGE</h2>
<p>
HFGE is a new cross platform 3D engine currently in
development. HFGE is written in C++ and will initially
support Windows and GNU/Linux platforms. HFGE will use a
modern renderer in the form of Vulkan.
</p>
<p>
HFGE is free / libre software and will be distributed under
the zlib license. This license allows you to use HFGE freely
in any software.
</p>
<p>
More information, downloads and git repoistory will be
available once it's ready for public release.
</p>
</section>
</main>

View file

@ -0,0 +1,20 @@
<section class="featured-content">
<h2 class="a11y-offset">Summary</h2>
<ul>
<li><b>Libre.</b><a class="link-yellow" href="/<%= self.hfge_url %>"> HFGE</a> will be distributed under the zlib license.
This license allows you to use HFGE freely in any software (it respects your freedom).
</li>
<li><b>Vulkan.</b><a class="link-yellow" href="/<%= self.hfge_url %>"> HFGE</a> comes with a modern, low level, low overhead,
cross platform renderer in the form of Vulkan (additional renderers can be added as plugins if needed).
</li>
<li><b>Cross platform.</b><a class="link-yellow" href="/<%= self.hfge_url %>"> HFGE</a> will initially support Windows and
GNU/Linux. More platforms such as Android will be added later on.
</li>
<li><b>Tools.</b><a class="link-yellow" href="/<%= self.hfge_url %>"> HFGE</a> comes with a few useful tools for generating
bitmap fonts, texture atlases, resource archives and a hash checksum tool.
</li>
</ul>
<div class="action-box centered-text">
<a class="button-big button-light" href="/<%= self.hfge_url %>">LEARN MORE</a>
</div>
</section>

View file

@ -0,0 +1,8 @@
<nav class="breadcrumbs">
<h2 class="a11y-offset">Your location:</h2>
<a class="crumb" href="/">Home</a>
<span> > </span>
<a class="crumb" href="/<%= self.screenshots_url %>/">Screenshots</a>
<span> > </span>
<a class="crumb crumb-active" href="./"><%= self.title %></a>
</nav>

View file

@ -0,0 +1,6 @@
<nav class="breadcrumbs">
<h2 class="a11y-offset">Your location:</h2>
<a class="crumb" href="/">Home</a>
<span> > </span>
<a class="crumb crumb-active" href="./"><%= self.title %></a>
</nav>

View file

@ -0,0 +1 @@
<script type="text/javascript" src="/static/scripts/copy-to-clipboard.js"></script>

View file

@ -0,0 +1 @@
<script type="text/javascript" src="/static/scripts/core.js"></script>

View file

@ -0,0 +1 @@
<script>hljs.highlightAll();</script>

73
templates/screenshot.stpl Normal file
View file

@ -0,0 +1,73 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="luflow, <%= self.title %>, Overview">
<meta name="description" content="<%= self.title %>.">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/item-preview.css">
<link rel="stylesheet" href="/static/css/breadcrumbs.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/index.css">
<title><%= self.title %> | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<% include!("./partials/screenshot_breadcrumbs.stpl"); %>
<main>
<section class="light-text centered-text noise-bg">
<h2 class="a11y-offset"><%= self.title %></h2>
<div class="screenshot-viewer">
<img class="responsive-image centered-block" src="/<%= self.image_big %>" alt="<%= self.title %>" />
</div>
<div class="screenshots-box top-shadow-bg">
<%
for screenshot in &self.screenshots {
if self.title == screenshot.title {
continue; // skip currently viewed big:
}
%>
<div class="screenshot-preview">
<a href="/<%= screenshot.url %>/">
<img class="responsive-image" src="/<%= screenshot.image_min %>" alt="" />
<span class="screenshot-inset-shadow"></span>
</a>
<p class="screenshot-preview-description"><%= screenshot.title %>
<span class="hidden">.</span>
</p>
</div>
<% } %>
</div>
</section>
</main>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Screenshots");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>

View file

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE-edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="luflow, <%= self.title %>, Overview">
<meta name="description" content="Overview of all available <%= self.title %>.">
<link type="application/atom+xml" rel="alternate" title="luflow.net — Activity Feed" href="/feeds/blog.atom">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/svg+xml" sizes="any" href="/static/img/icon.svg" />
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/css/breadcrumbs.css">
<link rel="stylesheet" href="/static/css/header.css">
<link rel="stylesheet" href="/static/css/footer.css">
<link rel="stylesheet" href="/static/css/index.css">
<title>Overview of all available <%= self.title %> | luflow.net</title>
</head>
<body>
<div id="content">
<% include!("./partials/header.stpl"); %>
<% include!("./partials/screenshots_breadcrumbs.stpl"); %>
<main>
<section class="light-text centered-text noise-bg">
<div class="screenshots-box top-shadow-bg">
<%
if let Some(screenshots) = self.screenshots.get(&self.title) {
for screenshot in screenshots {
%>
<div class="screenshot-preview">
<a href="/<%= screenshot.url %>/">
<img class="responsive-image" src="/<%= screenshot.image_min %>" alt="" />
<span class="screenshot-inset-shadow"></span>
</a>
<p class="screenshot-preview-description"><%= screenshot.title %>
<span class="hidden">.</span>
</p>
</div>
<%
}
}
%>
</div>
</section>
</main>
<% include!("./partials/footer.stpl"); %>
</div>
<% include!("./partials/script_core.stpl"); %>
<script>
// make menu item active visually:
let menuItem = document.getElementById("Screenshots");
if (menuItem)
{
menuItem.classList.add("menu-item-active");
}
</script>
</body>
</html>