Initial commit.
Signed-off-by: Andreas Widen <aw@luflow.net>
This commit is contained in:
commit
a4a5c7daa5
1389 changed files with 241399 additions and 0 deletions
47
templates/404.stpl
Normal file
47
templates/404.stpl
Normal 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
48
templates/500.stpl
Normal 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>
|
||||
|
||||
|
||||
|
||||
184
templates/blog_overview.stpl
Normal file
184
templates/blog_overview.stpl
Normal 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
62
templates/blog_post.stpl
Normal 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
48
templates/contact.stpl
Normal 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
48
templates/hfge.stpl
Normal 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
85
templates/index.stpl
Normal 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>
|
||||
|
||||
6
templates/partials/404_content.stpl
Normal file
6
templates/partials/404_content.stpl
Normal 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>
|
||||
8
templates/partials/500_content.stpl
Normal file
8
templates/partials/500_content.stpl
Normal 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">We’re working to fix the problem. Please try again later.</p>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
|
||||
8
templates/partials/blog_overview_breadcrumbs.stpl
Normal file
8
templates/partials/blog_overview_breadcrumbs.stpl
Normal 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>
|
||||
8
templates/partials/blog_post_breadcrumbs.stpl
Normal file
8
templates/partials/blog_post_breadcrumbs.stpl
Normal 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>
|
||||
9
templates/partials/blog_post_license_bysa4.0.stpl
Normal file
9
templates/partials/blog_post_license_bysa4.0.stpl
Normal 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>
|
||||
13
templates/partials/blog_post_topic_list.stpl
Normal file
13
templates/partials/blog_post_topic_list.stpl
Normal 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>
|
||||
6
templates/partials/contact_breadcrumbs.stpl
Normal file
6
templates/partials/contact_breadcrumbs.stpl
Normal 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>
|
||||
13
templates/partials/contact_content.stpl
Normal file
13
templates/partials/contact_content.stpl
Normal 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>
|
||||
4
templates/partials/footer.stpl
Normal file
4
templates/partials/footer.stpl
Normal 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>
|
||||
25
templates/partials/header.stpl
Normal file
25
templates/partials/header.stpl
Normal 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 ▼</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 ▼</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>
|
||||
6
templates/partials/hfge_breadcrumbs.stpl
Normal file
6
templates/partials/hfge_breadcrumbs.stpl
Normal 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>
|
||||
20
templates/partials/hfge_content.stpl
Normal file
20
templates/partials/hfge_content.stpl
Normal 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>
|
||||
20
templates/partials/index_featured_content.stpl
Normal file
20
templates/partials/index_featured_content.stpl
Normal 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>
|
||||
8
templates/partials/screenshot_breadcrumbs.stpl
Normal file
8
templates/partials/screenshot_breadcrumbs.stpl
Normal 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>
|
||||
6
templates/partials/screenshots_breadcrumbs.stpl
Normal file
6
templates/partials/screenshots_breadcrumbs.stpl
Normal 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>
|
||||
1
templates/partials/script_copy_to_clipboard.stpl
Normal file
1
templates/partials/script_copy_to_clipboard.stpl
Normal file
|
|
@ -0,0 +1 @@
|
|||
<script type="text/javascript" src="/static/scripts/copy-to-clipboard.js"></script>
|
||||
1
templates/partials/script_core.stpl
Normal file
1
templates/partials/script_core.stpl
Normal file
|
|
@ -0,0 +1 @@
|
|||
<script type="text/javascript" src="/static/scripts/core.js"></script>
|
||||
1
templates/partials/script_highlight.stpl
Normal file
1
templates/partials/script_highlight.stpl
Normal file
|
|
@ -0,0 +1 @@
|
|||
<script>hljs.highlightAll();</script>
|
||||
73
templates/screenshot.stpl
Normal file
73
templates/screenshot.stpl
Normal 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>
|
||||
|
||||
68
templates/screenshots.stpl
Normal file
68
templates/screenshots.stpl
Normal 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>
|
||||
Loading…
Reference in a new issue