From 9973ea84e440a34a7ddb4ed34934c000d4ca54b5 Mon Sep 17 00:00:00 2001 From: mmk2410 Date: Sat, 25 Jul 2015 09:34:51 +0200 Subject: [PATCH] Version 0.9: Code comments, bug fixes, three new test files --- .../2015-07-24-Test-the-link.md | 5 + .../2015-07-24-The-Rangitaki-Logo.md | 7 + config.php | 2 +- index.php | 200 ++++++++++-------- lang/de.php | 10 +- lang/en.php | 10 +- media/rangitaki.png | Bin 0 -> 64706 bytes rcc/index.php | 4 +- rcc/uploaded/index.php | 2 +- res/css/github-gist.css | 1 + res/css/no-nav.css | 27 ++- res/css/rangitaki.css | 116 +++++----- res/js/app.js | 100 +++++---- res/php/ArticleGenerator.php | 104 +++++---- res/php/BlogListGenerator.php | 70 ++++-- res/php/Disqus.php | 5 +- res/php/GoogleAnalytics.php | 6 +- 17 files changed, 390 insertions(+), 279 deletions(-) create mode 100644 articles/other-projects/2015-07-24-Test-the-link.md create mode 100644 articles/other-projects/2015-07-24-The-Rangitaki-Logo.md create mode 100644 media/rangitaki.png diff --git a/articles/other-projects/2015-07-24-Test-the-link.md b/articles/other-projects/2015-07-24-Test-the-link.md new file mode 100644 index 0000000..ebdd2cf --- /dev/null +++ b/articles/other-projects/2015-07-24-Test-the-link.md @@ -0,0 +1,5 @@ +%TITLE: Test the link +%DATE: 24 July 2015 +%TAGS: developing, testing + +[asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds.com/asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds/asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds](http://asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds.com/asdfadsfsldhfasdklhflnfkhdaskljfasdhfkhaskldhflaskjdhflkadsjhflkahfds) diff --git a/articles/other-projects/2015-07-24-The-Rangitaki-Logo.md b/articles/other-projects/2015-07-24-The-Rangitaki-Logo.md new file mode 100644 index 0000000..abf5193 --- /dev/null +++ b/articles/other-projects/2015-07-24-The-Rangitaki-Logo.md @@ -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) diff --git a/config.php b/config.php index fb9f092..d5ec092 100644 --- a/config.php +++ b/config.php @@ -1,5 +1,5 @@ - <?php echo $blogtitle; ?> + + <?php echo $blogtitle; // Setting the blog article?> - - + + + @@ -63,173 +70,184 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - + - - - + + // Loading additional stylesheet for disabling the drawer?> - - + + + + + + - -
+ skip it + if ($nav_drawer == "yes") { + ?> +
- + + + + -
-
- - +
+
- setBreaksEnabled(true) + ->setBreaksEnabled(true) // with linebreaks ->text($file); - echo $intro; + echo $intro; // PRINTS THE SH**** ?>
= 3 && substr($article, -3) == ".md") { - ArticleGenerator::newArticle($articlesdir, $article, $getblog); + $articlesdir = "./articles/$blog/"; // generate a variable with the articles directory + // TAG VIEW + if (isset($gettag)) { // if there's a tag -> tag view + $articles = scandir($articlesdir, 1); // save the content of the directory in the articles variable + foreach ($articles as $article) { // iterate through all articles + $tags = ArticleGenerator::getTags($articlesdir, $article); // get the article tags + if (in_array($gettag, $tags)) { // if the article has the requested tag + 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 == "") { - $articles = scandir($articlesdir, 1); - foreach ($articles as $article) { - if (strlen($article) >= 3 && substr($article, -3) == ".md") { - ArticleGenerator::newArticle($articlesdir, $article, $getblog); + } elseif ($getarticle == "") { // NORMAL VIEW if there's no article request -> normal view + $articles = scandir($articlesdir, 1); // save the content of the directory in the articles variable + foreach ($articles as $article) { // iterate through this variable + 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 { - ArticleGenerator::newArticle($articlesdir, $getarticle . ".md", $getblog); - include './res/php/SocialBar.php'; - include './res/php/Disqus.php'; + } elseif (isset($getarticle)) { // ARTICLE VIEW + ArticleGenerator::newArticle($articlesdir, $getarticle . ".md", $getblog); // generate the requested article + include './res/php/Disqus.php'; // include disques + } else { // SOMETHING STRANGE: THIS SHOULDN'T HAPPEN + echo "Some error occured, please go back."; } ?>
-
- + -
- + -
+ -
+ -
+
Share
@@ -237,10 +255,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } ?>
- - + + diff --git a/lang/de.php b/lang/de.php index 9fbafbd..aff3bef 100644 --- a/lang/de.php +++ b/lang/de.php @@ -1,7 +1,9 @@ "Blogs auf", + "Check out this blog" => "Schau dir diesen Blog an:", + "Check out" => "Schau dir das an:" +]; diff --git a/lang/en.php b/lang/en.php index cf54f6d..63b62a6 100644 --- a/lang/en.php +++ b/lang/en.php @@ -1,7 +1,9 @@ "Blogs on", + "Check out this blog" => "Check out this blog:", + "Check out" => "Check out:", +]; diff --git a/media/rangitaki.png b/media/rangitaki.png new file mode 100644 index 0000000000000000000000000000000000000000..b25c364a590afbaa7b4eb6f40d6a50f71f9ddd82 GIT binary patch literal 64706 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 literal 0 HcmV?d00001 diff --git a/rcc/index.php b/rcc/index.php index c0c89e1..ea314ef 100644 --- a/rcc/index.php +++ b/rcc/index.php @@ -35,11 +35,11 @@ THE SOFTWARE.
File Upload
You have to choose a file!

"; } else { diff --git a/res/css/github-gist.css b/res/css/github-gist.css index eb66fd1..6175f68 100644 --- a/res/css/github-gist.css +++ b/res/css/github-gist.css @@ -10,6 +10,7 @@ color: #333333; overflow-x: auto; -webkit-text-size-adjust: none; + -ms-text-size-adjust: none; } .hljs-comment, diff --git a/res/css/no-nav.css b/res/css/no-nav.css index 68af110..e455925 100644 --- a/res/css/no-nav.css +++ b/res/css/no-nav.css @@ -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; } -} \ No newline at end of file +} diff --git a/res/css/rangitaki.css b/res/css/rangitaki.css index 317e742..d81b93a 100644 --- a/res/css/rangitaki.css +++ b/res/css/rangitaki.css @@ -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
*/ 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%; } -} \ No newline at end of file +} diff --git a/res/js/app.js b/res/js/app.js index 7f2e1dc..dd2a42f 100644 --- a/res/js/app.js +++ b/res/js/app.js @@ -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(); - }); -} \ No newline at end of file +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 + } + ); +} diff --git a/res/php/ArticleGenerator.php b/res/php/ArticleGenerator.php index f999756..d5f8847 100644 --- a/res/php/ArticleGenerator.php +++ b/res/php/ArticleGenerator.php @@ -1,6 +1,7 @@ + * Since there is no initialize function, I recommend to use the short access syntay + * + * @category Articles + * @package RangitakiPHP + * @author mmk2410 + * @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 "
"; - 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 "$title"; - $article = substr($article, strpos($article, "\n") + 1); + echo "$title"; // 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 "$date"; - $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 "$date"; // 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 "
"; echo Parsedown::instance() ->setBreaksEnabled(true) - ->text($article); + ->text($article); // print now the article text as html echo "
"; - if ($author != "") { - echo "$author"; + if (isset($author)) { + echo "$author"; // print the author } foreach ($tags as $tag) { $blogurl = filter_input(INPUT_GET, "blog"); - if ($blogurl == "") { + if ($blogurl == "") { // on main blog. no ?blog= echo "$tag "; - } else { + } else { // not on main blog echo "$tag "; } } @@ -91,24 +105,32 @@ class ArticleGenerator { echo "
" . "\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 } } diff --git a/res/php/BlogListGenerator.php b/res/php/BlogListGenerator.php index a2fa242..4259bf3 100644 --- a/res/php/BlogListGenerator.php +++ b/res/php/BlogListGenerator.php @@ -1,6 +1,7 @@ - */ -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 + * @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 "$blogmaintitle"; + /** + * 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 "$blogmaintitle"; // create a nav item to the main blog } else { - $link = "./?blog=" . substr($blogname, 0, -3); - echo "$blog"; + $link = "./?blog=" . substr($blogname, 0, -3); // create a link to the blog + echo "$blog"; // 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 } } diff --git a/res/php/Disqus.php b/res/php/Disqus.php index 880c0f0..c97f89f 100644 --- a/res/php/Disqus.php +++ b/res/php/Disqus.php @@ -22,7 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - +
- \ No newline at end of file + diff --git a/res/php/GoogleAnalytics.php b/res/php/GoogleAnalytics.php index 62dd919..45cd581 100644 --- a/res/php/GoogleAnalytics.php +++ b/res/php/GoogleAnalytics.php @@ -1,5 +1,7 @@