Version 0.9: Code comments, bug fixes, three new test files

This commit is contained in:
mmk2410 2015-07-25 09:34:51 +02:00
parent 42404cd9d7
commit 9973ea84e4
17 changed files with 390 additions and 279 deletions

View file

@ -0,0 +1,5 @@
%TITLE: Test the link
%DATE: 24 July 2015
%TAGS: developing, testing
[asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds.com/asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds/asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds](http://asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds.com/asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds)

View file

@ -0,0 +1,7 @@
%TITLE: The Rangitaki logo
%DATE: 24 July 2015
%TAGS: design, artwork, logo
This is the official Rangitaki logo.
![The Rangitaki logo](media/rangitaki.png)

View file

@ -1,5 +1,5 @@
<?php <?php
// Rangitaki Project
// This is the configuration file. You can configure here all necessary (and possible) options without editing the index.php file. // This is the configuration file. You can configure here all necessary (and possible) options without editing the index.php file.
// Every line has an description about what you can change here. Don't delete any strings. You can set your value after the '=' sign and between the apostrophes. // Every line has an description about what you can change here. Don't delete any strings. You can set your value after the '=' sign and between the apostrophes.
// Make sure that every line ends with an semicolon (';'). // Make sure that every line ends with an semicolon (';').

200
index.php
View file

@ -32,22 +32,29 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--> -->
<html> <html>
<?php <?php
include 'config.php'; /**
include './lang/' . $language . ".php"; * Rangitaki PHP Blogging engine
require_once 'res/php/Parsedown.php'; */
require_once 'res/php/ArticleGenerator.php'; // Getting necessary php files
require_once './res/php/BlogListGenerator.php'; require 'config.php'; // Config file (this must be the first line)
$getblog = filter_input(INPUT_GET, "blog"); require './lang/' . $language . ".php"; // Language file
$getarticle = filter_input(INPUT_GET, "article"); require_once 'res/php/Parsedown.php'; // The soul of the beast: Parsedown
$gettag = filter_input(INPUT_GET, "tag"); require_once 'res/php/ArticleGenerator.php'; // The article generator
$url = "http://" . filter_input(INPUT_SERVER, "HTTP_HOST") . filter_input(INPUT_SERVER, "REQUEST_URI"); require_once './res/php/BlogListGenerator.php'; // and the blog list generator
// Getting some variables ($_GET and $_SERVER)
$getblog = filter_input(INPUT_GET, "blog"); // getting the blog variable
$getarticle = filter_input(INPUT_GET, "article"); // getting the article variable
$gettag = filter_input(INPUT_GET, "tag"); // getting the tag variable
$url = "http://" . filter_input(INPUT_SERVER, "HTTP_HOST") . filter_input(INPUT_SERVER, "REQUEST_URI"); // getting the url (used for sharing)
?> ?>
<head> <head>
<title><?php echo $blogtitle; ?></title> <meta charset="utf-8">
<title><?php echo $blogtitle; // Setting the blog article?></title>
<!--Metatags--> <!--Metatags-->
<meta name="author" content="<?php echo $blogauthor; ?>" /> <meta name="author" content="<?php echo $blogauthor; // Setting the blog author ?>" />
<meta name="description" content="<?php echo $blogdescription; ?>" /> <meta name="description" content="<?php echo $blogdescription; // the blog description ?>" />
<!-- Meta tag for responsive ui-->
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' /> <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
<!-- OpenGraph meta tags --> <!-- OpenGraph meta tags -->
<meta property="og:title" content="<?php echo $blogtitle; ?>" /> <meta property="og:title" content="<?php echo $blogtitle; ?>" />
@ -63,173 +70,184 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
<meta name="twitter:description" content="<?php echo $blogdescription; ?>" /> <meta name="twitter:description" content="<?php echo $blogdescription; ?>" />
<meta name="twitter:image" content="<?php echo $favicon; ?>" /> <meta name="twitter:image" content="<?php echo $favicon; ?>" />
<meta name="twitter:url" content="<?php echo $url; ?>" /> <meta name="twitter:url" content="<?php echo $url; ?>" />
<!--CSS files-->
<!--CSS no change needed-->
<link rel="stylesheet" type="text/css" href="res/css/rangitaki.css" /> <link rel="stylesheet" type="text/css" href="res/css/rangitaki.css" />
<link rel="stylesheet" type="text/css" href="themes/<?php echo $theme; ?>.css" /> <link rel="stylesheet" type="text/css" href="themes/<?php echo $theme; // getting the theme stylesheet?>.css" />
<link rel="shortcut icon" type="image/x-icon" href="<?php echo $favicon; ?>" />
<link rel="apple-touch-icon-precomposed" href="<?php echo $favicon; ?>">
<?php <?php
// Checking if the drawer is enabled
if ($nav_drawer == 'no') { if ($nav_drawer == 'no') {
?> // Loading additional stylesheet for disabling the drawer?>
<link rel="stylesheet" type="text/css" href="res/css/no-nav.css" /> <link rel="stylesheet" type="text/css" href="res/css/no-nav.css" />
<?php <?php
} }
?> ?>
<link href='//fonts.googleapis.com/css?family=Roboto:400,500,700,300,400italic,100,100italic,900' rel='stylesheet' type='text/css'> <link href='//fonts.googleapis.com/css?family=Roboto:400,500,700,300,400italic,100,100italic,900' rel='stylesheet' type='text/css'> <!--Font-->
<link rel="stylesheet" href="./res/css/github-gist.css"> <link rel="stylesheet" href="./res/css/github-gist.css"> <!-- stylesheet for code highlighting-->
<!--Favicons-->
<link rel="shortcut icon" type="image/x-icon" href="<?php echo $favicon; ?>" />
<link rel="apple-touch-icon-precomposed" href="<?php echo $favicon; ?>">
<!-- JavaScript Pt. 1: HightlightJS (get and load): Code highlighting-->
<script src="./res/js/highlight.pack.js"></script> <script src="./res/js/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script> <script>hljs.initHighlightingOnLoad();</script>
</head> </head>
<body> <body>
<?php if ($nav_drawer == "yes") { ?> <?php
<div class="overlay"></div> // Checking if the navigation drawer is enabled. If not -> skip it
if ($nav_drawer == "yes") {
?>
<div class="overlay"></div> <!-- Darken the background when fading the drawer in. See also the JS file-->
<div class="nav"> <div class="nav">
<div class="divider"></div> <div class="divider"></div>
<?php <?php
if ($getarticle == "") { $blogs = scandir("./blogs/"); // Getting everything from the blog directory
if (!isset($getarticle) && !isset($gettag) && sizeof($blogs) > 3) { // Checking if not in article or tag view and if there are more the one blog. The 3 is for these three array entries: 'main.md', '.', '..'
echo "<section>"; echo "<section>";
echo "<div class='nav-item-static'>$LANG_Blogs_Of" . " " . "$blogtitle:</div>"; echo "<div class='nav-item-static'>" . $BLOGLANG['Blogs on'] . " $blogtitle:</div>"; // 1. Set localized string 2. Set blogtitle
$blogs = scandir("./blogs/"); foreach ($blogs as $blog) { // iterating through the blogs/ directory
foreach ($blogs as $blog) { if (strlen($blog) >= 3 && substr($blog, -3) == ".md") { // check if filename is larger than three chars and if the file ends with ".md"
if (strlen($blog) >= 3 && substr($blog, -3) == ".md") { if ($getblog == "") { // Run when on main blog
if ($getblog == "") { if ($blog != "main.md") { // excluding main blog
if ($blog != "main.md") { BlogListGenerator::listBlog("./blogs/", $blog, $blogtitle); // creating navigation item
if (empty($blogmainname)) {
$blogmaintitle = $blogtitle;
} else {
$blogmaintitle = $blogmainname;
}
BlogListGenerator::listBlog("./blogs/", $blog, $blogtitle);
} }
} else { } else {
if ($getblog . ".md" != $blog) { if ($getblog . ".md" != $blog) { // Check if $blog is current blog -> this blog will be excluded
// Make sure that the entry has a title, because main.md hasn't one
if (empty($blogmainname)) { if (empty($blogmainname)) {
$blogmaintitle = $blogtitle; $blogmaintitle = $blogtitle;
} else { } else {
$blogmaintitle = $blogmainname; $blogmaintitle = $blogmainname;
} }
BlogListGenerator::listBlog("./blogs/", $blog, $blogmaintitle); BlogListGenerator::listBlog("./blogs/", $blog, $blogmaintitle); // creating navigation item
} }
} }
} }
} }
echo "</section>"; echo "</section>";
} else { } elseif (isset($getarticle) || isset($gettag)) { // If viewing a blog or a tag
?> ?>
<a class="nav-item" onclick="goBack()">Go back</a> <a class="nav-item" onclick="goBack()">Go back</a> <!-- Set a back item instead of the blogs. -->
<?php <?php
} }
if ($bloghome == "yes") { // If a blog home is existend
?> ?>
<div class="divider"></div> <div class="divider"></div>
<a class="nav-item" href="<?php echo $bloghomeurl; ?>"><?php echo $bloghomename; ?></a> <a class="nav-item" href="<?php echo $bloghomeurl; ?>"><?php echo $bloghomename; ?></a>
</div> <?php
<?php }
} ?>
</div> <!-- End of the navigation drawer-->
<?php
} // Endif from line 97; Yes, I really should think about alternative syntax...
// Set blog to "main" if on main blog, else to $getblog. This variable is needed later
if ($getblog == "") { if ($getblog == "") {
$blog = "main"; $blog = "main";
} else { } else {
$blog = $getblog; $blog = $getblog;
} }
?> ?>
<div class="main"> <div class="main"> <!-- Main page with content -->
<div class="header"> <div class="header"> <!-- Action Bar, but since there isn't much action I call it header. One day a search feature would be nice...-->
<img src="./res/img/menu.svg" class="nav-img" /> <img src="./res/img/menu.svg" class="nav-img" /> <!-- Ham,ham,hamburger-->
<nobr><span class="title"><a href="./"><?php echo $blogtitle; ?> <!-- Blog title with subblog title and links to each one-->
<nobr><span class="title"><a href="./"><?php echo $blogtitle; ?><!-- link to main blog-->
<?php <?php
if (empty($getblog)) { if (empty($getblog)) { // if not on a subblog
if (!empty($blogmainname)) { if (!empty($blogmainname)) {
?> echo "" . $blogmainname; // If you see a (square) here : This is not a bug, but a missing sign in your font
<?php
echo $blogmainname;
} }
} else { } else { // On subblog: set also a link to the subblog
?> ?>
</a> </a>
<a href="<?php echo "./?blog=$getblog" ?>"> <a href="<?php echo "./?blog=$getblog" ?>">
<?php <?php
echo BlogListGenerator::getName("./blogs/$getblog.md"); echo BlogListGenerator::getName("./blogs/$getblog.md"); // get the blog name
} }
?> ?>
</a> </a>
</span> </span>
</nobr> </nobr>
<div class="fadeout"></div> <div class="fadeout"></div> <!-- if the blog name is to long (especially on mobile devices), a fadeout fades the test out at the end of the header-->
</div> </div>
<?php <?php
if (file_exists("blogs/$blog.md") && $getarticle == "" && $blogintro == "yes" && $gettag == "") { // Blog Intro text
$file = file_get_contents("blogs/$blog.md"); if (file_exists("blogs/$blog.md") && $getarticle == "" && $blogintro == "yes" && $gettag == "") { // only shown if not in article or tag view and if the blogintro is enabled
$file = $file . "\n"; $file = file_get_contents("blogs/$blog.md"); // get content of the blog file
$file = substr($file, strpos($file, "\n")); $file = $file . "\n"; // add a line break. necessary if the editor didn't make one while saving
if ($file != "" && $file != "\n" && $file != " ") { $file = substr($file, strpos($file, "\n")); // basically removing the first line, which contains the blog title
if ($file != "" && $file != "\n" && $file != " ") { // if the file is now neither empty nor only has a linebreak nor exists of an space
?> ?>
<section class="card"> <section class="card">
<div class="articletext"> <div class="articletext">
<?php <?php // generate the html text from the markdown file
$intro = Parsedown::instance() $intro = Parsedown::instance()
->setBreaksEnabled(true) ->setBreaksEnabled(true) // with linebreaks
->text($file); ->text($file);
echo $intro; echo $intro; // PRINTS THE SH****
?> ?>
</div> </div>
</section> </section>
<?php <?php
} }
} }
$articlesdir = "./articles/$blog/"; $articlesdir = "./articles/$blog/"; // generate a variable with the articles directory
if ($gettag != "") { // TAG VIEW
$articles = scandir($articlesdir, 1); if (isset($gettag)) { // if there's a tag -> tag view
foreach ($articles as $article) { $articles = scandir($articlesdir, 1); // save the content of the directory in the articles variable
$tags = ArticleGenerator::getTags($articlesdir, $article); foreach ($articles as $article) { // iterate through all articles
if (in_array($gettag, $tags)) { $tags = ArticleGenerator::getTags($articlesdir, $article); // get the article tags
if (strlen($article) >= 3 && substr($article, -3) == ".md") { if (in_array($gettag, $tags)) { // if the article has the requested tag
ArticleGenerator::newArticle($articlesdir, $article, $getblog); if (strlen($article) >= 3 && substr($article, -3) == ".md") { // check if the file is a article file
ArticleGenerator::newArticle($articlesdir, $article, $getblog); // generate the article
} }
} }
} }
} else if ($getarticle == "") { } elseif ($getarticle == "") { // NORMAL VIEW if there's no article request -> normal view
$articles = scandir($articlesdir, 1); $articles = scandir($articlesdir, 1); // save the content of the directory in the articles variable
foreach ($articles as $article) { foreach ($articles as $article) { // iterate through this variable
if (strlen($article) >= 3 && substr($article, -3) == ".md") { if (strlen($article) >= 3 && substr($article, -3) == ".md") { // check if the file is a article file
ArticleGenerator::newArticle($articlesdir, $article, $getblog); ArticleGenerator::newArticle($articlesdir, $article, $getblog); // generate the article
} }
} }
} else { } elseif (isset($getarticle)) { // ARTICLE VIEW
ArticleGenerator::newArticle($articlesdir, $getarticle . ".md", $getblog); ArticleGenerator::newArticle($articlesdir, $getarticle . ".md", $getblog); // generate the requested article
include './res/php/SocialBar.php'; include './res/php/Disqus.php'; // include disques
include './res/php/Disqus.php'; } else { // SOMETHING STRANGE: THIS SHOULDN'T HAPPEN
echo "Some error occured, please go back.";
} }
?> ?>
<div class="footer"> <div class="footer">
<?php echo $blogfooter; ?> <?php echo $blogfooter; //print the blog footer?>
</div> </div>
<?php <?php
// show the fab if it's enabled
if ($sharefab == "yes") { if ($sharefab == "yes") {
?> ?>
<div class="fabmenu"> <div class="fabmenu">
<div class="subfab"> <div class="subfab"><!--Email subfab-->
<a href='mailto:?subject=<?php echo $blogtitle; ?>&body=<?php echo $LANG_Check_out_this_blog; ?>: <?php echo $url; ?>' target="blank"> <a href='mailto:?subject=
<?php echo $blogtitle; ?>&body=<?php echo $BLOGLANG['Check out this blog']; ?>: <?php echo $url; ?>'
target="blank">
<img src="./res/img/email.svg" class="subfab-img" /> <img src="./res/img/email.svg" class="subfab-img" />
</a> </a>
</div> </div>
<div class="subfab"> <div class="subfab"><!--twitter subfav-->
<a href='https://twitter.com/intent/tweet?text=<?php echo $LANG_Check_out; ?>: <?php echo $url; ?>&original_referer=' target="blank"> <a href='https://twitter.com/intent/tweet?text=<?php echo $BLOGLANG['Check out']; ?>: <?php echo $url; ?>&original_referer=' target="blank">
<img src="./res/img/twitter.svg" class="subfab-img" /> <img src="./res/img/twitter.svg" class="subfab-img" />
</a> </a>
</div> </div>
<div class="subfab"> <div class="subfab"><!--gplus subfab-->
<a href='https://plus.google.com/share?url=<?php echo $url; ?>&hl=en-US' target="blank"> <a href='https://plus.google.com/share?url=<?php echo $url; ?>&hl=en-US' target="blank">
<img src="./res/img/gplus.svg" class="subfab-img" /> <img src="./res/img/gplus.svg" class="subfab-img" />
</a> </a>
</div> </div>
<div class="subfab"> <div class="subfab"><!--facebook subfab-->
<a href='https://www.facebook.com/sharer/sharer.php?u=<?php echo $url; ?>&t=<?php echo "echo $blogtitle" ?>' target="blank"> <a href='https://www.facebook.com/sharer/sharer.php?u=<?php echo $url; ?>&t=<?php echo "echo $blogtitle" ?>' target="blank">
<img src="./res/img/facebook.svg" class="subfab-img" /> <img src="./res/img/facebook.svg" class="subfab-img" />
</a> </a>
</div> </div>
<div class="fab"> <div class="fab"><!-- share fab-->
<img src="./res/img/share.svg" class="fab-img" alt="Share" /> <img src="./res/img/share.svg" class="fab-img" alt="Share" />
</div> </div>
</div> </div>
@ -237,10 +255,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
} }
?> ?>
</div> </div>
<script src="./res/js/jquery-2.1.4.min.js"></script> <script src="./res/js/jquery-2.1.4.min.js"></script> <!-- include jquery-->
<script src="./res/js/app.js"></script> <script src="./res/js/app.js"></script> <!--include main javascript-->
<?php <?php
include './res/php/GoogleAnalytics.php'; require './res/php/GoogleAnalytics.php'; // include google analytics
?> ?>
</body> </body>
</html> </html>

View file

@ -1,7 +1,9 @@
<?php <?php
// Rangitaki Project
// LANGUAGE: GERMAN // LANGUAGE: GERMAN
$LANG_Blogs_Of = "Blogs auf"; $BLOGLANG = [
$LANG_Check_out_this_blog = "Schau dir diesen Blog an:"; "Blogs on" => "Blogs auf",
$LANG_Check_out = "Schau dir das an:"; "Check out this blog" => "Schau dir diesen Blog an:",
"Check out" => "Schau dir das an:"
];

View file

@ -1,7 +1,9 @@
<?php <?php
// Rangitaki Project
// LANGUAGE: ENGLISH // LANGUAGE: ENGLISH
$LANG_Blogs_Of = "Blogs on"; $BLOGLANG = [
$LANG_Check_out_this_blog = "Check out this blog"; "Blogs on" => "Blogs on",
$LANG_Check_out = "Check out"; "Check out this blog" => "Check out this blog:",
"Check out" => "Check out:",
];

BIN
media/rangitaki.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View file

@ -35,11 +35,11 @@ THE SOFTWARE.
</div> </div>
<div class="main"> <div class="main">
<?php <?php
include '../config.php'; require '../config.php';
if ($rcc == "yes") { if ($rcc == "yes") {
include 'password.php'; include 'password.php';
session_start(); session_start();
if(isset($_POST['passwd'])){ if(isset($_POST['passwd'])) {
$passwd = $_POST['passwd']; $passwd = $_POST['passwd'];
$_SESSION['passwd'] = $_POST['passwd']; $_SESSION['passwd'] = $_POST['passwd'];
} else if(isset($_SESSION['passwd'])) { } else if(isset($_SESSION['passwd'])) {

View file

@ -38,7 +38,7 @@ THE SOFTWARE.
<div class="headline">File Upload</div> <div class="headline">File Upload</div>
<?php <?php
session_start(); session_start();
if($_SESSION['login']){ if($_SESSION['login']) {
if ($_FILES['userfile']['name'] == "") { if ($_FILES['userfile']['name'] == "") {
echo "<p>You have to choose a file!</p>"; echo "<p>You have to choose a file!</p>";
} else { } else {

View file

@ -10,6 +10,7 @@
color: #333333; color: #333333;
overflow-x: auto; overflow-x: auto;
-webkit-text-size-adjust: none; -webkit-text-size-adjust: none;
-ms-text-size-adjust: none;
} }
.hljs-comment, .hljs-comment,

View file

@ -1,4 +1,6 @@
/* /*
Rangitaki Project
The MIT License The MIT License
Copyright 2015 mmk2410. Copyright 2015 mmk2410.
@ -21,32 +23,35 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
*/ */
/* /*
Created on : Jun 18, 2015, 7:07:45 PM Created on : Jun 18, 2015, 7:07:45 PM
Author : mmk2410 Author : mmk2410
*/ */
/*
A stylesheet for overriding the default styles if the navigation drawer is disabled
*/
.nav{ .nav{ /* hide the navigation drawer */
display: none; display: none;
} }
.nav-img{ .nav-img{ /* hide the hamburger icon */
display: none; display: none;
} }
@media screen and (min-width: 1440px) { @media screen and (min-width: 1440px) { /* large devices */
.header { .header { /* full width */
left: 0px; left: 0;
} }
.main{ .main{ /* full width */
margin-left: 0px; margin-left: 0;
width: 100%; width: 100%;
} }
} }
@media screen and (max-width: 720px){ @media screen and (max-width: 720px){ /* small devices */
.title{ .title{ /* move the title more to the left */
left: 25px; left: 25px;
} }
} }

View file

@ -1,4 +1,6 @@
/* /*
Rangitaki Project
The MIT License The MIT License
Copyright 2015 mmk2410. Copyright 2015 mmk2410.
@ -21,7 +23,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
*/ */
/* /*
Created on : Jun 14, 2015, 6:13:38 PM Created on : Jun 14, 2015, 6:13:38 PM
Author : mmk2410 Author : mmk2410
*/ */
@ -29,15 +31,15 @@ THE SOFTWARE.
/* BODY */ /* BODY */
body{ body{
margin-top: 94px; margin-top: 94px; /* Set enough space for the header */
} }
.main{ .main{ /* main content */
height: 100%; height: 100%;
margin-left: 0px; margin-left: 0;
} }
.overlay { .overlay { /* overlay: used for a darker background when the navigation drawer is open */
opacity: 0; opacity: 0;
position: fixed; position: fixed;
top: 0; top: 0;
@ -46,19 +48,20 @@ body{
width: 100%; width: 100%;
z-index: 30; z-index: 30;
height: 100%; height: 100%;
display: none; display: none; /* because the thing is hidden at the beginning and shown with js */
} }
/* HEADER */ /* HEADER */
.header{ .header{
top: 0px; top: 0;
right: 0px; right: 0;
left: 0px; left: 0;
width: 100%; width: 100%;
height: 64px; height: 64px;
position: absolute; position: absolute;
} }
.title{ .title{ /* title in the header */
color: #fff; color: #fff;
font-size: 23px; font-size: 23px;
text-decoration: none; text-decoration: none;
@ -67,20 +70,20 @@ body{
left: 75px; left: 75px;
} }
.title > a{ .title > a{ /* and a a styling */
text-decoration: none; text-decoration: none;
color: #fff; color: #fff;
} }
.fadeout{ .fadeout{ /* a fadeout if the title is to long */
position: absolute; position: absolute;
height: 64px; height: 64px;
top: 0px; top: 0;
right: 0px; right: 0;
width: 40px; width: 40px;
} }
.nav-img{ .nav-img{ /* the hamburger icon */
height: 26px; height: 26px;
padding: 19px; padding: 19px;
cursor: pointer; cursor: pointer;
@ -88,22 +91,21 @@ body{
/* NAV DRAWER */ /* NAV DRAWER */
.nav{ .nav{ /* the main object */
width: 300px; width: 300px;
position: fixed; position: fixed;
height: 100%; height: 100%;
top: 0px; top: 0;
left: -300px; left: -300px;
padding-top: 64px; padding-top: 64px;
z-index: 40; z-index: 40;
} }
.nav-item, .nav-item-static{ .nav-item, .nav-item-static{ /* a nav-item */
text-decoration: none; text-decoration: none;
text-indent: 0; text-indent: 0;
display: inline-block; display: inline-block;
height: 48px; height: 48px;
text-decoration: none;
vertical-align: middle; vertical-align: middle;
width: 284px; width: 284px;
line-height: 48px; line-height: 48px;
@ -111,17 +113,17 @@ body{
transition: background-color 125ms ease-in-out 0ms; transition: background-color 125ms ease-in-out 0ms;
} }
.nav-item{ .nav-item{ /* additional setting for clickable nav items */
cursor: pointer; cursor: pointer;
} }
.divider{ .divider{ /* a simple divider with all options. better than <hr> */
width: 100%; width: 100%;
} }
/* MAIN */ /* MAIN */
.card{ .card{ /* just a card */
margin-right: auto; margin-right: auto;
margin-left: auto; margin-left: auto;
width: 75%; width: 75%;
@ -130,62 +132,70 @@ body{
max-width: 1160px; max-width: 1160px;
} }
.card a{ .card a{ /* and another a styling */
-moz-hyphens: auto;
-epub-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
word-wrap: break-word; /* until here: break long links */
}
.card a:hover{ /* hovered card links; just here to help you create a own theme*/
} }
.card a:hover{ .headline{ /* title in a card */
}
.headline{
display: block; display: block;
padding-bottom: 8px; padding-bottom: 8px;
} }
.card img{ .card img{ /* image in a card*/
max-width: 100%; max-width: 100%; /* regulate width */
max-height: 400px; max-height: 400px; /* regulate height */
display: block; /* centered */
margin-left: auto; /* centerd */
margin-right: auto; /* centred */
} }
.date{ .date{ /* possibility to style the date */
} }
.articletext{ .articletext{ /* posibitlity to style the text */
} }
.author{ .author{ /* styling for the author */
display: block; display: block;
} }
.tag{ .tag{ /* possibility to style the text */
} }
/* FAB */ /* FAB */
.fabmenu{ .fabmenu{ /* surrounds the complete fab menu */
position: fixed; position: fixed;
bottom: 20px; bottom: 20px;
right: 20px; right: 20px;
} }
.fab{ .fab{ /* the main fab (always visible if enabled) */
height: 60px; height: 60px;
width: 60px; width: 60px;
border-radius: 30px; border-radius: 30px;
cursor: pointer; cursor: pointer;
} }
.fab-img{ .fab-img{ /* fab image for the main fab */
width: 28px; width: 28px;
padding: 15px; padding: 15px;
} }
.subfab{ .subfab{ /* a smaller fab in the fab menu */
height: 45px; height: 45px;
width: 45px; width: 45px;
border-radius: 30px; border-radius: 30px;
@ -195,41 +205,41 @@ body{
display: none; display: none;
} }
.subfab-img{ .subfab-img{ /* and the image for it */
width: 22px; width: 22px;
padding: 12px; padding: 12px;
} }
/* FOOTER */ /* FOOTER */
.footer{ .footer{ /* possibility for styling the footer */
} }
.footer a{ .footer a{ /* styling of the footer a */
transition: border-bottom-color 150ms ease-in-out 100ms; transition: border-bottom-color 150ms ease-in-out 100ms;
} }
.footer a:hover{ .footer a:hover{ /* and the hovered one*/
border-bottom-color: #383838; border-bottom-color: #383838;
} }
@media screen and (min-width: 1440px) { @media screen and (min-width: 1440px) { /* make it responsive: large devices */
.nav{ .nav{ /* always show navigation bar */
left: 0px; left: 0;
} }
.nav-img{ .nav-img{ /* always hide navigation bar icon*/
display: none; display: none;
} }
.header{ .header{ /* move header to the right */
left: 300px; left: 300px;
} }
.main{ .main{ /* move main content to the right and limit its width */
margin-left: 300px; margin-left: 300px;
width: calc(100% - 300px); width: calc(100% - 300px);
} }
@ -237,10 +247,10 @@ body{
} }
@media screen and (max-width: 720px){ @media screen and (max-width: 720px){ /* make it responsive: small devices */
.card{ .card{ /* wider cards */
width: 82%; width: 82%;
} }
} }

View file

@ -1,4 +1,6 @@
/* /*
* Rangitaki Project
*
* The MIT License * The MIT License
* *
* Copyright 2015 mmk2410. * Copyright 2015 mmk2410.
@ -22,64 +24,74 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
var main = function () { var main = function () { // main function; called below
var fabActive = false; var fabActive = false; // fab hidden at begin
$('.fabmenu').click(function () { $('.fabmenu').click( // action on fab click
if (!(fabActive)) { function () {
fabFadeIn(); if (!(fabActive)) { // if fab is hidden
fabActive = true; fabFadeIn(); // fade fab in
} else { fabActive = true; // fab = active
fabFadeOut(); } else { // if fab is shown
fabActive = false; fabFadeOut(); // fade fab out
fabActive = false; // fab = hidden
}
} }
}); );
var navOpen = false; var navOpen = false; // nav hidden at begin
$('.nav-img, .overlay').click(function () { $('.nav-img, .overlay').click( // action on hamburger click
if (!(navOpen)) { function () {
openNav(); if (!(navOpen)) { // if nav is hidden
navOpen = true; openNav(); // open the nav drawer
} else { navOpen = true; // nav = open
closeNav(); } else { // if nav is closed
navOpen = false; closeNav(); // close the nav drawer
navOpen = false; // nav = closed
}
} }
}); );
}; };
$(document).ready(main); $(document).ready(main); // run if document is loaded
function goBack() { function goBack() { // go back function
history.go(-1); history.go(-1);
} }
function fabFadeIn() { function fabFadeIn() { // fade fab in
$('.subfab').fadeIn(125); $('.subfab').fadeIn(125); // fade subfabs in
$('.fab-img').fadeOut(60, function callback() { $('.fab-img').fadeOut( // fade fab share image out
$('.fab-img').attr("src", "./res/img/close.svg"); 60, function callback() {
}); $('.fab-img').attr("src", "./res/img/close.svg"); // change to fab close image
$('.fab-img').fadeIn(60); }
);
$('.fab-img').fadeIn(60); // fade fab close image in
} }
function fabFadeOut() { function fabFadeOut() { // fade fab out
$('.subfab').fadeOut(125); $('.subfab').fadeOut(125); // fade subfabs out
$('.fab-img').fadeOut(60, function callback() { $('.fab-img').fadeOut( // fade fab close image out
$('.fab-img').attr("src", "./res/img/share.svg"); 60, function callback() {
}); $('.fab-img').attr("src", "./res/img/share.svg"); // change to fab share image
$('.fab-img').fadeIn(60); }
);
$('.fab-img').fadeIn(60); // fade fab share image in
} }
function openNav() { function openNav() { // fade navigation drawer in
$('.nav').animate({"left": "0px"}, 125); $('.nav').animate({"left": "0px"}, 125); // slide in
$('.overlay').show(); $('.overlay').show(); // set overlay to show ...
$('.overlay').animate({"opacity": "0.4"}, 125); $('.overlay').animate({"opacity": "0.4"}, 125); // ... and fade to a darker transparent color
} }
function closeNav() { function closeNav() { // fade navigation drawer out
$('.nav').animate({"left": "-300px"}, 125); $('.nav').animate({"left": "-300px"}, 125); // slide out
$('.overlay').animate({"opacity": "0.0"}, 125, function () { $('.overlay').animate(
$('.overlay').hide(); {"opacity": "0.0"}, 125, function () { // fade the overlay to complete transparency
}); $('.overlay').hide(); // hide it then
} }
);
}

View file

@ -1,6 +1,7 @@
<?php <?php
/* /*
* Rangitaki Project
*
* The MIT License * The MIT License
* *
* Copyright 2015 mmk2410. * Copyright 2015 mmk2410.
@ -25,65 +26,78 @@
*/ */
/** /**
* Description of ArticleGenerator * The article generator class is a collection of functions for generating the article of markdown
* *
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz> * Since there is no initialize function, I recommend to use the short access syntay
*
* @category Articles
* @package RangitakiPHP
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz>
* @license MIT License
* @link http://marcel-kapfer.de/rangitaki
*/ */
class ArticleGenerator { class ArticleGenerator
{
function newArticle ($directory, $articlefile, $blog) { /**
* A function to create one new article
*
* @param string $directory The directory where the article files are stored
* @param string $articlefile The name of the article file
* @param string $blog The name of the current blog
*/
function newArticle($directory, $articlefile, $blog)
{
$article = file_get_contents($directory . $articlefile); $article = file_get_contents($directory . $articlefile); // get the file
echo "<section class='card'>"; echo "<section class='card'>";
if (substr($article, 0, 6) == "%TITLE") { if (substr($article, 0, 6) == "%TITLE") { // if a title is in the first line
$title = substr($article, 8, strpos($article, "\n") - 8); $title = substr($article, 8, strpos($article, "\n") - 8); // get this title
if ($blog == "") { if ($blog == "") { // if one main blog
$link = "./?article=" . substr($articlefile, 0, -3); $link = "./?article=" . substr($articlefile, 0, -3); // create link to article
} else { } else { // if not on main blog
$link = "./?blog=$blog&article=" . substr($articlefile, 0, -3); $link = "./?blog=$blog&article=" . substr($articlefile, 0, -3); // create link to article at specific blog
} }
echo "<a href='$link' class='headline'>$title</a>"; echo "<a href='$link' class='headline'>$title</a>"; // print link (as a headline)
$article = substr($article, strpos($article, "\n") + 1); $article = substr($article, strpos($article, "\n") + 1); // remove title tag from $article (the variable, not the document)
} }
if (substr($article, 0, 5) == "%DATE") { if (substr($article, 0, 5) == "%DATE") { // if now a date is in the first line
$date = substr($article, 7, strpos($article, "\n") - 7); $date = substr($article, 7, strpos($article, "\n") - 7); // get this date
echo "<span class='date'>$date</span>"; echo "<span class='date'>$date</span>"; // print the date
$article = substr($article, strpos($article, "\n") + 1); $article = substr($article, strpos($article, "\n") + 1); // remove this line
} }
if (substr($article, 0, 7) == "%AUTHOR") { if (substr($article, 0, 7) == "%AUTHOR") { // if a author is now in the first line
$author = substr($article, 9, strpos($article, "\n") - 9); $author = substr($article, 9, strpos($article, "\n") - 9); // get the author
$article = substr($article, strpos($article, "\n") + 1); $article = substr($article, strpos($article, "\n") + 1); // remove the line
} }
if (substr($article, 0, 5) == "%TAGS") { if (substr($article, 0, 5) == "%TAGS") { // if tags are now at the beginning
$tags = substr($article, 7, strpos($article, "\n") - 7); $tags = substr($article, 7, strpos($article, "\n") - 7); // get tags
$tags = explode(", ", $tags); $tags = explode(", ", $tags); // split them into an array
$article = substr($article, strpos($article, "\n") + 1); $article = substr($article, strpos($article, "\n") + 1); // remove this line
} }
//TODO Code detection
echo "<div class='articletext'>"; echo "<div class='articletext'>";
echo Parsedown::instance() echo Parsedown::instance()
->setBreaksEnabled(true) ->setBreaksEnabled(true)
->text($article); ->text($article); // print now the article text as html
echo "</div>"; echo "</div>";
if ($author != "") { if (isset($author)) {
echo "<span class='author'>$author</span>"; echo "<span class='author'>$author</span>"; // print the author
} }
foreach ($tags as $tag) { foreach ($tags as $tag) {
$blogurl = filter_input(INPUT_GET, "blog"); $blogurl = filter_input(INPUT_GET, "blog");
if ($blogurl == "") { if ($blogurl == "") { // on main blog. no ?blog=
echo "<a class='tag' href='./?tag=$tag'>$tag</a> "; echo "<a class='tag' href='./?tag=$tag'>$tag</a> ";
} else { } else { // not on main blog
echo "<a class='tag' href='./?blog=$blog&tag=$tag'>$tag</a> "; echo "<a class='tag' href='./?blog=$blog&tag=$tag'>$tag</a> ";
} }
} }
@ -91,24 +105,32 @@ class ArticleGenerator {
echo "</section>" . "\n"; echo "</section>" . "\n";
} }
function getTags($directory, $articlefile) { /**
$article = file_get_contents($directory . $articlefile); * A function to get an articles tags as an array
if (substr($article, 0, 6) == "%TITLE") { *
* @param string $directory The directory where the article files are stored
* @param string $articlefile The name of the article file
* @return array
*/
function getTags($directory, $articlefile)
{
$article = file_get_contents($directory . $articlefile); // get the article
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1); $article = substr($article, strpos($article, "\n") + 1);
} }
if (substr($article, 0, 5) == "%DATE") { if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1); $article = substr($article, strpos($article, "\n") + 1);
} }
if (substr($article, 0, 7) == "%AUTHOR") { if (substr($article, 0, 7) == "%AUTHOR") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1); $article = substr($article, strpos($article, "\n") + 1);
} }
if (substr($article, 0, 5) == "%TAGS") { if (substr($article, 0, 5) == "%TAGS") { // detect the tags
$tags = substr($article, 7, strpos($article, "\n") - 7); $tags = substr($article, 7, strpos($article, "\n") - 7); // get the tags
$tags = explode(", ", $tags); $tags = explode(", ", $tags); // split them into an array
} }
return $tags; return $tags; // remove that array
} }
} }

View file

@ -1,6 +1,7 @@
<?php <?php
/* /*
* Rangitaki Project
*
* The MIT License * The MIT License
* *
* Copyright 2015 mmk2410. * Copyright 2015 mmk2410.
@ -24,33 +25,56 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
/** /**
* Description of BlogListGenerator * The blog list generator class is a collection of functions for generating blog lists
* * or getting informations about them
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz> *
*/ * Since there is no initialize function, I recommend to use the short access syntay
class BlogListGenerator { *
* @category Blogs
* @package RangitakiPHP
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz>
* @license MIT License
* @link http://marcel-kapfer.de/rangitaki
*/
class BlogListGenerator
{
function listBlog($directory, $blogname, $blogmaintitle) { /**
$blog = file_get_contents($directory . $blogname); * A function to generate a blog nav item
$blog = $blog . "\n"; *
if (substr($blog, 0, 6) == "%TITLE") { * @param string $directory The directory of the blog file
$blog = substr($blog, 8, strpos($blog, "\n") - 8); * @param string $blogname The name of the blog file
if ($blog == "main") { * @param string $blogmaintitle The name of the main blog
echo "<a class='nav-item' href='./'>$blogmaintitle</a>"; */
function listBlog($directory, $blogname, $blogmaintitle)
{
$blog = file_get_contents($directory . $blogname); // get content of the blog file
$blog = $blog . "\n"; // add a line break as a security measurement
if (substr($blog, 0, 6) == "%TITLE") { // check if the first line includes a title
$blog = substr($blog, 8, strpos($blog, "\n") - 8); // grab the title
if ($blog == "main") { // if on main blog
echo "<a class='nav-item' href='./'>$blogmaintitle</a>"; // create a nav item to the main blog
} else { } else {
$link = "./?blog=" . substr($blogname, 0, -3); $link = "./?blog=" . substr($blogname, 0, -3); // create a link to the blog
echo "<a class='nav-item' href='$link'>$blog</a>"; echo "<a class='nav-item' href='$link'>$blog</a>"; // create a nav item to the blog
} }
} }
} }
function getName($file){ /**
$blog = file_get_contents($file); * A function to get the name of a blog
$blog = $blog . "\n"; *
if(substr($blog, 0, 6) == "%TITLE"){ * @param string $file The path of the blog file
$blog = substr($blog, 8, strpos($blog, "\n") - 8); * @return string
return $blog; */
function getName($file)
{
$blog = file_get_contents($file); // get the content of the blog file
$blog = $blog . "\n"; // add a line break as a securit measure
if(substr($blog, 0, 6) == "%TITLE") { // check if first line includes a title
$blog = substr($blog, 8, strpos($blog, "\n") - 8); // grab the title
return $blog; // return it
} }
} }

View file

@ -22,7 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
--> -->
<?php if ($blogdisqus) { ?> <?php if ($blogdisqus) { // check if disqus is enabled ?>
<section class="card"> <section class="card">
<div id="disqus_thread"></div> <div id="disqus_thread"></div>
<script type="text/javascript"> <script type="text/javascript">
@ -40,4 +40,5 @@ THE SOFTWARE.
</script> </script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript> <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
</section> </section>
<?php } ?> <?php
} ?>

View file

@ -1,5 +1,7 @@
<?php <?php
/* /*
* Rangitaki Project
*
* The MIT License * The MIT License
* *
* Copyright 2015 mmk2410. * Copyright 2015 mmk2410.
@ -24,7 +26,7 @@
*/ */
if ($bloganalytics) { if ($bloganalytics) { // check if google analytics is enabled
?> ?>
<script> <script>
@ -47,4 +49,4 @@ if ($bloganalytics) {
<?php <?php
} }
?> ?>