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

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

View file

@ -1,4 +1,6 @@
/*
Rangitaki Project
The MIT License
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
THE SOFTWARE.
*/
/*
/*
Created on : Jun 18, 2015, 7:07:45 PM
Author : mmk2410
*/
/*
A stylesheet for overriding the default styles if the navigation drawer is disabled
*/
.nav{
.nav{ /* hide the navigation drawer */
display: none;
}
.nav-img{
.nav-img{ /* hide the hamburger icon */
display: none;
}
@media screen and (min-width: 1440px) {
.header {
left: 0px;
@media screen and (min-width: 1440px) { /* large devices */
.header { /* full width */
left: 0;
}
.main{
margin-left: 0px;
.main{ /* full width */
margin-left: 0;
width: 100%;
}
}
@media screen and (max-width: 720px){
.title{
@media screen and (max-width: 720px){ /* small devices */
.title{ /* move the title more to the left */
left: 25px;
}
}
}

View file

@ -1,4 +1,6 @@
/*
Rangitaki Project
The MIT License
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
THE SOFTWARE.
*/
/*
/*
Created on : Jun 14, 2015, 6:13:38 PM
Author : mmk2410
*/
@ -29,15 +31,15 @@ THE SOFTWARE.
/* BODY */
body{
margin-top: 94px;
margin-top: 94px; /* Set enough space for the header */
}
.main{
.main{ /* main content */
height: 100%;
margin-left: 0px;
margin-left: 0;
}
.overlay {
.overlay { /* overlay: used for a darker background when the navigation drawer is open */
opacity: 0;
position: fixed;
top: 0;
@ -46,19 +48,20 @@ body{
width: 100%;
z-index: 30;
height: 100%;
display: none;
display: none; /* because the thing is hidden at the beginning and shown with js */
}
/* HEADER */
.header{
top: 0px;
right: 0px;
left: 0px;
top: 0;
right: 0;
left: 0;
width: 100%;
height: 64px;
position: absolute;
}
.title{
.title{ /* title in the header */
color: #fff;
font-size: 23px;
text-decoration: none;
@ -67,20 +70,20 @@ body{
left: 75px;
}
.title > a{
.title > a{ /* and a a styling */
text-decoration: none;
color: #fff;
}
.fadeout{
.fadeout{ /* a fadeout if the title is to long */
position: absolute;
height: 64px;
top: 0px;
right: 0px;
top: 0;
right: 0;
width: 40px;
}
.nav-img{
.nav-img{ /* the hamburger icon */
height: 26px;
padding: 19px;
cursor: pointer;
@ -88,22 +91,21 @@ body{
/* NAV DRAWER */
.nav{
.nav{ /* the main object */
width: 300px;
position: fixed;
height: 100%;
top: 0px;
top: 0;
left: -300px;
padding-top: 64px;
z-index: 40;
}
.nav-item, .nav-item-static{
.nav-item, .nav-item-static{ /* a nav-item */
text-decoration: none;
text-indent: 0;
display: inline-block;
height: 48px;
text-decoration: none;
vertical-align: middle;
width: 284px;
line-height: 48px;
@ -111,17 +113,17 @@ body{
transition: background-color 125ms ease-in-out 0ms;
}
.nav-item{
.nav-item{ /* additional setting for clickable nav items */
cursor: pointer;
}
.divider{
.divider{ /* a simple divider with all options. better than <hr> */
width: 100%;
}
/* MAIN */
.card{
.card{ /* just a card */
margin-right: auto;
margin-left: auto;
width: 75%;
@ -130,62 +132,70 @@ body{
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{
.headline{ /* title in a card */
display: block;
padding-bottom: 8px;
}
.card img{
max-width: 100%;
max-height: 400px;
.card img{ /* image in a card*/
max-width: 100%; /* regulate width */
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;
}
.tag{
.tag{ /* possibility to style the text */
}
/* FAB */
.fabmenu{
.fabmenu{ /* surrounds the complete fab menu */
position: fixed;
bottom: 20px;
right: 20px;
right: 20px;
}
.fab{
.fab{ /* the main fab (always visible if enabled) */
height: 60px;
width: 60px;
border-radius: 30px;
cursor: pointer;
}
.fab-img{
.fab-img{ /* fab image for the main fab */
width: 28px;
padding: 15px;
}
.subfab{
.subfab{ /* a smaller fab in the fab menu */
height: 45px;
width: 45px;
border-radius: 30px;
@ -195,41 +205,41 @@ body{
display: none;
}
.subfab-img{
.subfab-img{ /* and the image for it */
width: 22px;
padding: 12px;
}
/* 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;
}
.footer a:hover{
.footer a:hover{ /* and the hovered one*/
border-bottom-color: #383838;
}
@media screen and (min-width: 1440px) {
@media screen and (min-width: 1440px) { /* make it responsive: large devices */
.nav{
left: 0px;
.nav{ /* always show navigation bar */
left: 0;
}
.nav-img{
.nav-img{ /* always hide navigation bar icon*/
display: none;
}
.header{
.header{ /* move header to the right */
left: 300px;
}
.main{
.main{ /* move main content to the right and limit its width */
margin-left: 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%;
}
}
}

View file

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

View file

@ -1,6 +1,7 @@
<?php
/*
* Rangitaki Project
*
* The MIT License
*
* 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'>";
if (substr($article, 0, 6) == "%TITLE") {
$title = substr($article, 8, strpos($article, "\n") - 8);
if ($blog == "") {
$link = "./?article=" . substr($articlefile, 0, -3);
} else {
$link = "./?blog=$blog&article=" . substr($articlefile, 0, -3);
if (substr($article, 0, 6) == "%TITLE") { // if a title is in the first line
$title = substr($article, 8, strpos($article, "\n") - 8); // get this title
if ($blog == "") { // if one main blog
$link = "./?article=" . substr($articlefile, 0, -3); // create link to article
} else { // if not on main blog
$link = "./?blog=$blog&article=" . substr($articlefile, 0, -3); // create link to article at specific blog
}
echo "<a href='$link' class='headline'>$title</a>";
$article = substr($article, strpos($article, "\n") + 1);
echo "<a href='$link' class='headline'>$title</a>"; // print link (as a headline)
$article = substr($article, strpos($article, "\n") + 1); // remove title tag from $article (the variable, not the document)
}
if (substr($article, 0, 5) == "%DATE") {
$date = substr($article, 7, strpos($article, "\n") - 7);
echo "<span class='date'>$date</span>";
$article = substr($article, strpos($article, "\n") + 1);
if (substr($article, 0, 5) == "%DATE") { // if now a date is in the first line
$date = substr($article, 7, strpos($article, "\n") - 7); // get this date
echo "<span class='date'>$date</span>"; // print the date
$article = substr($article, strpos($article, "\n") + 1); // remove this line
}
if (substr($article, 0, 7) == "%AUTHOR") {
$author = substr($article, 9, strpos($article, "\n") - 9);
$article = substr($article, strpos($article, "\n") + 1);
if (substr($article, 0, 7) == "%AUTHOR") { // if a author is now in the first line
$author = substr($article, 9, strpos($article, "\n") - 9); // get the author
$article = substr($article, strpos($article, "\n") + 1); // remove the line
}
if (substr($article, 0, 5) == "%TAGS") {
$tags = substr($article, 7, strpos($article, "\n") - 7);
$tags = explode(", ", $tags);
$article = substr($article, strpos($article, "\n") + 1);
if (substr($article, 0, 5) == "%TAGS") { // if tags are now at the beginning
$tags = substr($article, 7, strpos($article, "\n") - 7); // get tags
$tags = explode(", ", $tags); // split them into an array
$article = substr($article, strpos($article, "\n") + 1); // remove this line
}
//TODO Code detection
echo "<div class='articletext'>";
echo Parsedown::instance()
->setBreaksEnabled(true)
->text($article);
->text($article); // print now the article text as html
echo "</div>";
if ($author != "") {
echo "<span class='author'>$author</span>";
if (isset($author)) {
echo "<span class='author'>$author</span>"; // print the author
}
foreach ($tags as $tag) {
$blogurl = filter_input(INPUT_GET, "blog");
if ($blogurl == "") {
if ($blogurl == "") { // on main blog. no ?blog=
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> ";
}
}
@ -91,24 +105,32 @@ class ArticleGenerator {
echo "</section>" . "\n";
}
function getTags($directory, $articlefile) {
$article = file_get_contents($directory . $articlefile);
if (substr($article, 0, 6) == "%TITLE") {
/**
* A function to get an articles tags as an array
*
* @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);
}
if (substr($article, 0, 5) == "%DATE") {
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
$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);
}
if (substr($article, 0, 5) == "%TAGS") {
$tags = substr($article, 7, strpos($article, "\n") - 7);
$tags = explode(", ", $tags);
if (substr($article, 0, 5) == "%TAGS") { // detect the tags
$tags = substr($article, 7, strpos($article, "\n") - 7); // get the tags
$tags = explode(", ", $tags); // split them into an array
}
return $tags;
return $tags; // remove that array
}
}

View file

@ -1,6 +1,7 @@
<?php
/*
* Rangitaki Project
*
* The MIT License
*
* Copyright 2015 mmk2410.
@ -24,33 +25,56 @@
* THE SOFTWARE.
*/
/**
* Description of BlogListGenerator
*
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz>
*/
class BlogListGenerator {
/**
* The blog list generator class is a collection of functions for generating blog lists
* or getting informations about them
*
* Since there is no initialize function, I recommend to use the short access syntay
*
* @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);
$blog = $blog . "\n";
if (substr($blog, 0, 6) == "%TITLE") {
$blog = substr($blog, 8, strpos($blog, "\n") - 8);
if ($blog == "main") {
echo "<a class='nav-item' href='./'>$blogmaintitle</a>";
/**
* A function to generate a blog nav item
*
* @param string $directory The directory of the blog file
* @param string $blogname The name of the blog file
* @param string $blogmaintitle The name of the main blog
*/
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 {
$link = "./?blog=" . substr($blogname, 0, -3);
echo "<a class='nav-item' href='$link'>$blog</a>";
$link = "./?blog=" . substr($blogname, 0, -3); // create a link to the blog
echo "<a class='nav-item' href='$link'>$blog</a>"; // create a nav item to the blog
}
}
}
function getName($file){
$blog = file_get_contents($file);
$blog = $blog . "\n";
if(substr($blog, 0, 6) == "%TITLE"){
$blog = substr($blog, 8, strpos($blog, "\n") - 8);
return $blog;
/**
* A function to get the name of a blog
*
* @param string $file The path of the blog file
* @return string
*/
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.
-->
<?php if ($blogdisqus) { ?>
<?php if ($blogdisqus) { // check if disqus is enabled ?>
<section class="card">
<div id="disqus_thread"></div>
<script type="text/javascript">
@ -40,4 +40,5 @@ THE SOFTWARE.
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
</section>
<?php } ?>
<?php
} ?>

View file

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