diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..aa468d8
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,11 @@
+image: php:7.0
+
+before_script:
+ - bash ci/docker_install.sh > /dev/null
+
+stages:
+ - test
+
+test:
+ script:
+ - phpunit tests/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 32a0eb5..289259b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,15 @@
- [S] release are always compared to the previous [S] release.
+## Version 1.5.0 (2016-08-03) [S]
+
+ - **[FEATURE]** Ability to only show post excerpts on overview pages
+ - **[FIX]** Fixed twitter username not specified in connfig.yaml
+ - **[FIX]** Fixed wrong OpenGraph meta tags
+ - **[CODE]** Further improved code style
+ - **[CODE]** Added unit tests for Config.php and ArticleGenerator.php
+ - **[NOTE]** If you have own language file, please update them. See also the upgrade guide
+
## Version 1.4.4 (2016-06-03) [S]
- **[FIX]** Error when trying to create a feed
diff --git a/bin/init.php b/bin/init.php
index f38a892..58b1c5d 100644
--- a/bin/init.php
+++ b/bin/init.php
@@ -39,6 +39,8 @@ $themes = getDir('./themes');
$yaml["design"]["theme"] = get("Which theme would you like to use? (" . $themes . ")", $yaml["design"]["theme"], "material-light");
$yaml["design"]["pagination"] =
get("Which posts should be displayed on one page (0 to disable)", $yaml["design"]["pagination"], "0");
+$yaml["design"]["excerpt"] =
+ getBool("Should be overview pages only show a excerpt of the full posts? (on/off)", $yaml["design"]["excerpt"], "off");
$yaml["design"]["favicon"] = get("URL to your favicon", $yaml["design"]["favicon"], "https://example.com/fav.ico");
// rcc
@@ -49,6 +51,9 @@ $yaml["rcc"]["api"] = "off";
$langs = getDir('./lang');
$yaml["language"] = get("Choose a language (" . $langs . ")", $yaml["language"], "en");
+// social media
+$yaml["social"]["twitter"] = get("Your Twitter username:", $yaml["social"]["twitter"], "");
+
$config->writeConfig($yaml);
function get($question, $value, $default)
diff --git a/ci/docker_install.sh b/ci/docker_install.sh
new file mode 100644
index 0000000..f1fe43b
--- /dev/null
+++ b/ci/docker_install.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Only install dependencies for Docker
+[[ ! -e /.dockerenv ]] && [[ ! -e /.dockerinit ]] && exit 0
+
+set -xe
+
+# Install git
+apt-get update -yqq
+apt-get install git -yqq
+
+# Install phpunit
+curl -o /usr/local/bin/phpunit https://phar.phpunit.de/phpunit.phar
+chmod +x /usr/local/bin/phpunit
+
diff --git a/config.yaml b/config.yaml
index eb983bc..bd59180 100644
--- a/config.yaml
+++ b/config.yaml
@@ -12,12 +12,16 @@ blog:
footer: "Rangitaki 2016 \n gitlab.com/mmk2410/rangitaki"
url: 'https://example.com/blog/'
design:
+ excerpt: "off"
fab: 'on'
drawer: 'on'
theme: material-light
pagination: 0
+ excerpt: 'off'
favicon: 'http://example.com/res/img/favicon.png'
rcc:
rcc: 'on'
api: 'on'
language: en
+social:
+ twitter: ''
diff --git a/index.php b/index.php
index 9829d37..9b90e2d 100644
--- a/index.php
+++ b/index.php
@@ -114,10 +114,9 @@ $feedurl = $config["blog"]["url"] . "/feed/" . $blog . ".atom";
-
-
+
@@ -194,7 +193,9 @@ if ($config["design"]["drawer"] == "on") {
if ($navblog != "main.md") { // excluding main blog
// creating navigation item
BlogListGenerator::listBlog(
- "./blogs/", $navblog, $config["blog"]["title"]
+ "./blogs/",
+ $navblog,
+ $config["blog"]["title"]
);
}
} else {
@@ -203,7 +204,9 @@ if ($config["design"]["drawer"] == "on") {
if ($getblog . ".md" != $navblog) {
// creating navigation item
BlogListGenerator::listBlog(
- "./blogs/", $navblog, $blogmaintitle
+ "./blogs/",
+ $navblog,
+ $blogmaintitle
);
}
}
@@ -319,7 +322,11 @@ if ($config["design"]["drawer"] == "on") {
if (strlen($article) >= 3 && substr($article, -3) == ".md") {
// generate the article
ArticleGenerator::newArticle(
- $articlesdir, $article, $getblog
+ $articlesdir,
+ $article,
+ $getblog,
+ $config["design"]["excerpt"],
+ $BLOGLANG["Read More"]
);
}
}
@@ -337,12 +344,20 @@ if ($config["design"]["drawer"] == "on") {
if ($config["design"]["pagination"]) {
if ($posts_amount < $pag_max && $posts_amount >= $pag_min) {
ArticleGenerator::newArticle(
- $articlesdir, $article, $getblog
+ $articlesdir,
+ $article,
+ $getblog,
+ $config["design"]["excerpt"],
+ $BLOGLANG["Read More"]
);
}
} else {
ArticleGenerator::newArticle(
- $articlesdir, $article, $getblog
+ $articlesdir,
+ $article,
+ $getblog,
+ $config["design"]["excerpt"],
+ $BLOGLANG["Read More"]
);
}
}
@@ -354,7 +369,11 @@ if ($config["design"]["drawer"] == "on") {
} elseif (isset($getarticle)) { // ARTICLE VIEW
// generate the requested article
ArticleGenerator::newArticle(
- $articlesdir, $getarticle . ".md", $getblog
+ $articlesdir,
+ $getarticle . ".md",
+ $getblog,
+ 'off',
+ $BLOGLANG["Read More"]
);
include './res/php/Disqus.php'; // include disques
} else { // SOMETHING STRANGE: THIS SHOULDN'T HAPPEN
@@ -417,14 +436,14 @@ if ($config["design"]["drawer"] == "on") {
";
- }
+if (file_exists("./extensions")) {
+ $extensions = scandir('./extensions');
+ foreach ($extensions as $extension) {
+ if (substr($extension, -3) == ".js") {
+ echo "";
}
}
+}
?>
"Schau dir das an:",
"Next Page" => "Nächste Seite",
"Previous Page" => "Vorherige Seite",
+ "Read More" => "Weiterlesen",
];
diff --git a/lang/en.php b/lang/en.php
index 0ae409a..c87a8df 100644
--- a/lang/en.php
+++ b/lang/en.php
@@ -8,4 +8,5 @@ $BLOGLANG = [
"Check out" => "Check out:",
"Next Page" => "Next Page",
"Previous Page" => "Previous Page",
+ "Read More" => "Read More",
];
diff --git a/package.json b/package.json
index 9f99af3..59d46ae 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rangitaki",
- "version": "1.4.4",
+ "version": "1.5.0",
"description": "A simple PHP blogging engine without any database dependencies",
"main": "index.php",
"scripts": {
diff --git a/res/css/rangitaki.css b/res/css/rangitaki.css
index 58fe6aa..3f92068 100644
--- a/res/css/rangitaki.css
+++ b/res/css/rangitaki.css
@@ -1,3 +1,3 @@
-body{margin-top:94px}.main{height:100%;margin-left:0}.overlay{opacity:0;position:fixed;top:0;left:0;background-color:black;width:100%;z-index:30;height:100%;display:none}.header{top:0;right:0;left:0;width:100%;height:64px;position:absolute}.title{color:#fff;font-size:23px;text-decoration:none;line-height:64px;vertical-align:middle;left:75px}.title>a{text-decoration:none;color:#fff}.fadeout{position:absolute;height:64px;top:0;right:0;width:40px}.nav-img{height:26px;padding:19px;cursor:pointer}.nav{width:300px;position:fixed;height:100%;top:0;left:-301px;z-index:40}.nav-item,.nav-item-static{text-decoration:none;text-indent:0;display:inline-block;height:48px;vertical-align:middle;width:284px;line-height:48px;padding-left:16px;transition:background-color 125ms ease-in-out 0ms}.nav-close{cursor:pointer}.nav-close-img{height:35px;padding:12px}.nav-item{cursor:pointer}.divider{width:100%}.card{margin-right:auto;margin-left:auto;width:75%;padding:24px;margin-bottom:40px;max-width:1160px}.card a{-moz-hyphens:auto;-epub-hyphens:auto;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;word-wrap:break-word}.headline{display:block;padding-bottom:8px}.card img{max-width:100%;max-height:400px;display:block;margin-left:auto;margin-right:auto}.author{display:block}.fabmenu{position:fixed;bottom:20px;right:20px}.fab{height:60px;width:60px;border-radius:30px;cursor:pointer}.fab-img{width:28px;padding:15px}.subfab{height:45px;width:45px;border-radius:30px;margin-right:auto;margin-left:auto;margin-bottom:25px;display:none}.subfab-img{width:22px;padding:12px}.pag_buttons{margin-right:auto;margin-left:auto;width:calc(75% + 48px);margin-bottom:80px;max-width:1160px;text-align:right}.button{text-decoration:none;color:#fff;line-height:36px;min-width:64px;text-align:center;height:36px;padding:8px;margin-top:4px;margin-bottom:5px;cursor:pointer}.pag_next{margin-left:8px}.footer a{transition:border-bottom-color 150ms ease-in-out 100ms}.footer a:hover{border-bottom-color:#383838}@media screen and (min-width: 1440px){.nav{left:0;padding-top:64px}.nav-close-img{display:none}.nav-close{display:none}.nav-img{display:none}.header{left:300px}.main{margin-left:300px;width:calc(100% - 300px)}}@media screen and (max-width: 720px){.card{width:82%}.pag_buttons{width:calc(82% + 48px)}}
+body{margin-top:94px}.main{height:100%;margin-left:0}.overlay{opacity:0;position:fixed;top:0;left:0;background-color:black;width:100%;z-index:30;height:100%;display:none}.header{top:0;right:0;left:0;width:100%;height:64px;position:absolute}.title{color:#fff;font-size:23px;text-decoration:none;line-height:64px;vertical-align:middle;left:75px}.title>a{text-decoration:none;color:#fff}.fadeout{position:absolute;height:64px;top:0;right:0;width:40px}.nav-img{height:26px;padding:19px;cursor:pointer}.nav{width:300px;position:fixed;height:100%;top:0;left:-301px;z-index:40}.nav-item,.nav-item-static{text-decoration:none;text-indent:0;display:inline-block;height:48px;vertical-align:middle;width:284px;line-height:48px;padding-left:16px;transition:background-color 125ms ease-in-out 0ms}.nav-close{cursor:pointer}.nav-close-img{height:35px;padding:12px}.nav-item{cursor:pointer}.divider{width:100%}.card{margin-right:auto;margin-left:auto;width:75%;padding:24px;margin-bottom:40px;max-width:1160px}.card a{-moz-hyphens:auto;-epub-hyphens:auto;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;word-wrap:break-word}.headline{display:block;padding-bottom:8px}.card img{max-width:100%;max-height:400px;display:block;margin-left:auto;margin-right:auto}.author{display:block}.readmore{padding:12px 0 25px 0}.fabmenu{position:fixed;bottom:20px;right:20px}.fab{height:60px;width:60px;border-radius:30px;cursor:pointer}.fab-img{width:28px;padding:15px}.subfab{height:45px;width:45px;border-radius:30px;margin-right:auto;margin-left:auto;margin-bottom:25px;display:none}.subfab-img{width:22px;padding:12px}.pag_buttons{margin-right:auto;margin-left:auto;width:calc(75% + 48px);margin-bottom:80px;max-width:1160px;text-align:right}.button{text-decoration:none;color:#fff;line-height:36px;min-width:64px;text-align:center;height:36px;padding:8px;margin-top:4px;margin-bottom:5px;cursor:pointer}.pag_next{margin-left:8px}.footer a{transition:border-bottom-color 150ms ease-in-out 100ms}.footer a:hover{border-bottom-color:#383838}@media screen and (min-width: 1440px){.nav{left:0;padding-top:64px}.nav-close-img{display:none}.nav-close{display:none}.nav-img{display:none}.header{left:300px}.main{margin-left:300px;width:calc(100% - 300px)}}@media screen and (max-width: 720px){.card{width:82%}.pag_buttons{width:calc(82% + 48px)}}
/*# sourceMappingURL=rangitaki.css.map */
diff --git a/res/css/rangitaki.css.map b/res/css/rangitaki.css.map
index c02a79c..db79c3a 100644
--- a/res/css/rangitaki.css.map
+++ b/res/css/rangitaki.css.map
@@ -1 +1 @@
-{"version":3,"file":"rangitaki.css","sources":["rangitaki.sass"],"sourcesContent":["/*\n * Rangitaki Project\n *\n * The MIT License\n *\n * Copyright 2015 mmk2410.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * A stylesheet for overriding the default styles if the navigation drawer is disabled\n */\n\n/* BODY */\n\nbody {\n margin-top: 94px; }\n\n.main {\n height: 100%;\n margin-left: 0; }\n\n.overlay {\n opacity: 0;\n position: fixed;\n top: 0;\n left: 0;\n background-color: black;\n width: 100%;\n z-index: 30;\n height: 100%;\n display: none; }\n\n/* HEADER */\n.header {\n top: 0;\n right: 0;\n left: 0;\n width: 100%;\n height: 64px;\n position: absolute; }\n\n.title {\n color: #fff;\n font-size: 23px;\n text-decoration: none;\n line-height: 64px;\n vertical-align: middle;\n left: 75px; }\n\n.title > a {\n text-decoration: none;\n color: #fff; }\n\n.fadeout {\n position: absolute;\n height: 64px;\n top: 0;\n right: 0;\n width: 40px; }\n\n.nav-img {\n height: 26px;\n padding: 19px;\n cursor: pointer; }\n\n/* NAV DRAWER */\n\n.nav {\n width: 300px;\n position: fixed;\n height: 100%;\n top: 0;\n left: -301px;\n z-index: 40; }\n\n.nav-item, .nav-item-static {\n text-decoration: none;\n text-indent: 0;\n display: inline-block;\n height: 48px;\n vertical-align: middle;\n width: 284px;\n line-height: 48px;\n padding-left: 16px;\n transition: background-color 125ms ease-in-out 0ms; }\n\n.nav-close {\n cursor: pointer; }\n\n.nav-close-img {\n height: 35px;\n padding: 12px; }\n\n.nav-item {\n cursor: pointer; }\n\n.divider {\n width: 100%; }\n\n/* MAIN */\n\n.card {\n margin-right: auto;\n margin-left: auto;\n width: 75%;\n padding: 24px;\n margin-bottom: 40px;\n max-width: 1160px; }\n\n.card a {\n -moz-hyphens: auto;\n -epub-hyphens: auto;\n -ms-hyphens: auto;\n -webkit-hyphens: auto;\n hyphens: auto;\n word-wrap: break-word; }\n\n.card a:hover {}\n\n.headline {\n display: block;\n padding-bottom: 8px; }\n\n.card img {\n max-width: 100%;\n max-height: 400px;\n display: block;\n margin-left: auto;\n margin-right: auto; }\n\n.date {}\n\n.articletext {}\n\n.author {\n display: block; }\n\n.tag {}\n\n/* FAB */\n\n.fabmenu {\n position: fixed;\n bottom: 20px;\n right: 20px; }\n\n.fab {\n height: 60px;\n width: 60px;\n border-radius: 30px;\n cursor: pointer; }\n\n.fab-img {\n width: 28px;\n padding: 15px; }\n\n.subfab {\n height: 45px;\n width: 45px;\n border-radius: 30px;\n margin-right: auto;\n margin-left: auto;\n margin-bottom: 25px;\n display: none; }\n\n.subfab-img {\n width: 22px;\n padding: 12px; }\n\n/* BUTTON */\n\n.pag_buttons {\n margin-right: auto;\n margin-left: auto;\n width: calc(75% + 48px);\n margin-bottom: 80px;\n max-width: 1160px;\n text-align: right; }\n\n.button {\n text-decoration: none;\n color: #fff;\n line-height: 36px;\n min-width: 64px;\n text-align: center;\n height: 36px;\n padding: 8px;\n margin-top: 4px;\n margin-bottom: 5px;\n cursor: pointer; }\n\n.pag_next {\n margin-left: 8px; }\n\n/* FOOTER */\n\n.footer {}\n\n.footer a {\n transition: border-bottom-color 150ms ease-in-out 100ms; }\n\n.footer a:hover {\n border-bottom-color: #383838; }\n\n@media screen and (min-width: 1440px) {\n\n .nav {\n left: 0;\n padding-top: 64px; }\n\n .nav-close-img {\n display: none; }\n\n .nav-close {\n display: none; }\n\n .nav-img {\n display: none; }\n\n .header {\n left: 300px; }\n\n .main {\n margin-left: 300px;\n width: calc(100% - 300px); } }\n\n@media screen and (max-width: 720px) {\n\n .card {\n width: 82%; }\n\n .pag_buttons {\n width: calc(82% + 48px); } }\n"],"mappings":"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","names":[]}
\ No newline at end of file
+{"version":3,"file":"rangitaki.css","sources":["rangitaki.sass"],"sourcesContent":["/*\n * Rangitaki Project\n *\n * The MIT License\n *\n * Copyright 2015 mmk2410.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * A stylesheet for overriding the default styles if the navigation drawer is disabled\n */\n\n/* BODY */\n\nbody {\n margin-top: 94px; }\n\n.main {\n height: 100%;\n margin-left: 0; }\n\n.overlay {\n opacity: 0;\n position: fixed;\n top: 0;\n left: 0;\n background-color: black;\n width: 100%;\n z-index: 30;\n height: 100%;\n display: none; }\n\n/* HEADER */\n.header {\n top: 0;\n right: 0;\n left: 0;\n width: 100%;\n height: 64px;\n position: absolute; }\n\n.title {\n color: #fff;\n font-size: 23px;\n text-decoration: none;\n line-height: 64px;\n vertical-align: middle;\n left: 75px; }\n\n.title > a {\n text-decoration: none;\n color: #fff; }\n\n.fadeout {\n position: absolute;\n height: 64px;\n top: 0;\n right: 0;\n width: 40px; }\n\n.nav-img {\n height: 26px;\n padding: 19px;\n cursor: pointer; }\n\n/* NAV DRAWER */\n\n.nav {\n width: 300px;\n position: fixed;\n height: 100%;\n top: 0;\n left: -301px;\n z-index: 40; }\n\n.nav-item, .nav-item-static {\n text-decoration: none;\n text-indent: 0;\n display: inline-block;\n height: 48px;\n vertical-align: middle;\n width: 284px;\n line-height: 48px;\n padding-left: 16px;\n transition: background-color 125ms ease-in-out 0ms; }\n\n.nav-close {\n cursor: pointer; }\n\n.nav-close-img {\n height: 35px;\n padding: 12px; }\n\n.nav-item {\n cursor: pointer; }\n\n.divider {\n width: 100%; }\n\n/* MAIN */\n\n.card {\n margin-right: auto;\n margin-left: auto;\n width: 75%;\n padding: 24px;\n margin-bottom: 40px;\n max-width: 1160px; }\n\n.card a {\n -moz-hyphens: auto;\n -epub-hyphens: auto;\n -ms-hyphens: auto;\n -webkit-hyphens: auto;\n hyphens: auto;\n word-wrap: break-word; }\n\n.card a:hover {}\n\n.headline {\n display: block;\n padding-bottom: 8px; }\n\n.card img {\n max-width: 100%;\n max-height: 400px;\n display: block;\n margin-left: auto;\n margin-right: auto; }\n\n.date {}\n\n.articletext {}\n\n.author {\n display: block; }\n\n.tag {}\n\n.readmore {\n padding: 12px 0 25px 0; }\n\n/* FAB */\n\n.fabmenu {\n position: fixed;\n bottom: 20px;\n right: 20px; }\n\n.fab {\n height: 60px;\n width: 60px;\n border-radius: 30px;\n cursor: pointer; }\n\n.fab-img {\n width: 28px;\n padding: 15px; }\n\n.subfab {\n height: 45px;\n width: 45px;\n border-radius: 30px;\n margin-right: auto;\n margin-left: auto;\n margin-bottom: 25px;\n display: none; }\n\n.subfab-img {\n width: 22px;\n padding: 12px; }\n\n/* BUTTON */\n\n.pag_buttons {\n margin-right: auto;\n margin-left: auto;\n width: calc(75% + 48px);\n margin-bottom: 80px;\n max-width: 1160px;\n text-align: right; }\n\n.button {\n text-decoration: none;\n color: #fff;\n line-height: 36px;\n min-width: 64px;\n text-align: center;\n height: 36px;\n padding: 8px;\n margin-top: 4px;\n margin-bottom: 5px;\n cursor: pointer; }\n\n.pag_next {\n margin-left: 8px; }\n\n/* FOOTER */\n\n.footer {}\n\n.footer a {\n transition: border-bottom-color 150ms ease-in-out 100ms; }\n\n.footer a:hover {\n border-bottom-color: #383838; }\n\n@media screen and (min-width: 1440px) {\n\n .nav {\n left: 0;\n padding-top: 64px; }\n\n .nav-close-img {\n display: none; }\n\n .nav-close {\n display: none; }\n\n .nav-img {\n display: none; }\n\n .header {\n left: 300px; }\n\n .main {\n margin-left: 300px;\n width: calc(100% - 300px); } }\n\n@media screen and (max-width: 720px) {\n\n .card {\n width: 82%; }\n\n .pag_buttons {\n width: calc(82% + 48px); } }\n"],"mappings":"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","names":[]}
\ No newline at end of file
diff --git a/res/php/ArticleGenerator.php b/res/php/ArticleGenerator.php
index f259c9d..6d48b99 100644
--- a/res/php/ArticleGenerator.php
+++ b/res/php/ArticleGenerator.php
@@ -59,7 +59,7 @@ class ArticleGenerator
*
* @return Null
*/
- function newArticle($directory, $articlefile, $blog)
+ function newArticle($directory, $articlefile, $blog, $excerpt, $readmore)
{
$article = file_get_contents($directory . $articlefile); // get the file
@@ -96,12 +96,39 @@ class ArticleGenerator
echo "
";
+ // print only a excerpt of the post
+ // with at least 200 characters if possible.
+ if ( $excerpt == 'on' ) {
+ $emptyline = strpos($article, "\n\n");
+ if ( $emptyline !== false ) {
+ if ( $emptyline < 200) {
+ $emptyline2 = strpos($article, "\n\n", $emptyline);
+ if ( $emptyline2 !== false ) {
+ $article = substr($article, 0, $emptyline2);
+ } else {
+ $article = substr($article, 0, $emptyline);
+ }
+ } else {
+ $article = substr($article, 0, $emptyline);
+ }
+ } else {
+ // correct $excerpt for use in line 127.
+ $excerpt = 'off';
+ }
+ }
+
echo Parsedown::instance()
->setBreaksEnabled(true)
->text($article); // print now the article text as html
echo "
";
+
+ if ( $excerpt == 'on' ) {
+ echo "";
+ }
+
+
if (isset($author)) {
echo "$author"; // print the author
}
@@ -196,15 +223,15 @@ class ArticleGenerator
*/
static function getSummary($directory, $articlefile)
{
- $text = getText($directory, $articlefile);
+ $text = ArticleGenerator::getText($directory, $articlefile);
- $pos = stripos($text, ".");
+ $pos = stripos($text, "\n\n");
- if ($pos) {
- $offset = $pos + 1;
+ if ($pos !== false) {
+ $offset = $pos;
$pos = stripos($text, ".", $offset);
$summary = substr($text, 0, $pos) . ".";
- return $summary;
+ return trim($summary);
} else {
return $text;
}
@@ -275,6 +302,10 @@ class ArticleGenerator
public function getArray($directory, $articlefile)
{
$article = file_get_contents($directory . $articlefile);
+ $title = "";
+ $date = "";
+ $author = "";
+ $tags = array();
if (substr($article, 0, 6) == "%TITLE") { // get and remove the title
$title = substr($article, 8, strpos($article, "\n") - 8);
diff --git a/src/sass/rangitaki.sass b/src/sass/rangitaki.sass
index 030aa3f..5accff0 100644
--- a/src/sass/rangitaki.sass
+++ b/src/sass/rangitaki.sass
@@ -153,6 +153,9 @@ body
.tag
+.readmore
+ padding: 12px 0 25px 0
+
/* FAB */
.fabmenu
diff --git a/tests/ArticleGeneratorTest.php b/tests/ArticleGeneratorTest.php
new file mode 100644
index 0000000..48af00d
--- /dev/null
+++ b/tests/ArticleGeneratorTest.php
@@ -0,0 +1,91 @@
+ "The Rangitaki logo 2",
+ "date" => "24 July 2015",
+ "tags" => array(
+ "design", "artwork", "logo",
+ ),
+ "author" => "",
+ "text" => "
+This is the official Rangitaki logo.
+
+![The Rangitaki logo](media/example.png)
+
+It is saved in the example blog directory.
+",
+ ];
+
+ $this->assertEquals(
+ $result,
+ ArticleGenerator::getArray("articles/example/", "2015-07-25-example.md")
+ );
+ }
+
+ public function testGetText()
+ {
+ $result = "
+This is the official Rangitaki logo.
+
+![The Rangitaki logo](media/example.png)
+
+It is saved in the example blog directory.
+";
+ $this->assertEquals(
+ $result,
+ ArticleGenerator::getText("articles/example/", "2015-07-25-example.md")
+ );
+ }
+
+ public function testGetAuthor()
+ {
+ $result = "";
+ $this->assertEquals(
+ $result,
+ ArticleGenerator::getAuthor("articles/example/", "2015-07-25-example.md")
+ );
+ }
+
+ public function testGetSummary()
+ {
+ $result = "This is the official Rangitaki logo.";
+ $this->assertEquals(
+ $result,
+ ArticleGenerator::getSummary("articles/example/", "2015-07-25-example.md")
+ );
+ }
+
+ public function testGetTags()
+ {
+ $result = [ "design", "artwork", "logo" ];
+ $this->assertEquals(
+ $result,
+ ArticleGenerator::getTags("articles/example/", "2015-07-25-example.md")
+ );
+ }
+
+ public function testGetDate()
+ {
+ $result = "24 July 2015";
+ $this->assertEquals(
+ $result,
+ ArticleGenerator::getDate("articles/example/", "2015-07-25-example.md")
+ );
+ }
+
+ public function testGetTitle()
+ {
+ $result = "The Rangitaki logo 2";
+ $this->assertEquals(
+ $result,
+ ArticleGenerator::getTitle("articles/example/", "2015-07-25-example.md")
+ );
+ }
+}
diff --git a/tests/BlogListGeneratorTest.php b/tests/BlogListGeneratorTest.php
new file mode 100644
index 0000000..6c883a2
--- /dev/null
+++ b/tests/BlogListGeneratorTest.php
@@ -0,0 +1,17 @@
+assertEquals("Example", BlogListGenerator::getName("blogs/example.md"));
+ }
+
+ public function testGetArticleAmount()
+ {
+ $this->assertEquals(5, BlogListGenerator::getArticleAmount("example"));
+ }
+}
diff --git a/tests/ConfigTest.php b/tests/ConfigTest.php
new file mode 100644
index 0000000..5ac88d3
--- /dev/null
+++ b/tests/ConfigTest.php
@@ -0,0 +1,83 @@
+ array(
+ "title" => "Example Blog",
+ "author" => "John",
+ "description" => "A short description of your blog",
+ "home" => "on",
+ "homeurl" => "../",
+ "homename" => "Home",
+ "mainname" => "",
+ "intro" => "on",
+ "disqus" => "rangitaki",
+ "analytics" => "",
+ "footer" =>
+ "Rangitaki 2016 \n gitlab.com/mmk2410/rangitaki", "url" => "https://example.com/blog/",
+ ),
+ "design" => array(
+ "fab" => "on",
+ "drawer" => "on",
+ "theme" => "material-light",
+ "pagination" => 0,
+ "favicon" => "http://example.com/res/img/favicon.png",
+ ),
+ "rcc" => array(
+ "rcc" => "on",
+ "api" => "on",
+ ),
+ "language" => "en",
+ ];
+
+ $configParser = new Config("./config.yaml", "./vendor/autoload.php");
+ $this->assertEquals($config, $configParser->getConfig());
+ }
+
+ public function testWriteReadConfig()
+ {
+ $changedConfig = [
+ "blog" => array(
+ "title" => "Examples Blog",
+ "author" => "Wilson O'Sullivan",
+ "description" => "A long description of your blog",
+ "home" => "on",
+ "homeurl" => "../",
+ "homename" => "Exit",
+ "mainname" => "",
+ "intro" => "on",
+ "disqus" => "",
+ "analytics" => "",
+ "footer" =>
+ "pBlog 1102
+ \n gitlab.com/mmk2410/rangitaki", "url" => "https://example.com/blog/",
+ ),
+ "design" => array(
+ "fab" => "off",
+ "drawer" => "off",
+ "theme" => "material-dark",
+ "pagination" => "-1",
+ "favicon" => "http://sample.com/res/img/favicon.png",
+ ),
+ "rcc" => array(
+ "rcc" => "on",
+ "api" => "off",
+ ),
+ "language" => "en",
+ ];
+ $configParser = new Config("/tmp/config-test.yaml", "./vendor/autoload.php");
+ $configParser->writeConfig($changedConfig);
+ $this->assertEquals($changedConfig, $configParser->getConfig());
+ }
+}
diff --git a/themes/nextDESIGN.css b/themes/nextDESIGN.css
index ee57971..6080917 100644
--- a/themes/nextDESIGN.css
+++ b/themes/nextDESIGN.css
@@ -1,207 +1,3 @@
-body {
- font-family: "Fira Sans", sans-serif;
- background: #f0f0f0;
- color: #383838;
- margin: 130px 0 0
-}
-
-::selection, ::-moz-selection {
- color: #f0f0f0;
- background-color: #4CAF50
-}
-
-.header {
- height: 55px;
- background-color: #4CAF50;
- position: fixed;
- box-shadow: 2px 0 2px 2px rgba(62, 62, 62, 0.45)
-}
-
-.title {
- line-height: 55px;
- color: #fff;
- position: absolute;
- left: 0;
- margin-left: calc(20% + 24px)
-}
-
-.title > a {
- color: #fff;
- text-decoration: none
-}
-
-.fadeout {
- height: 55px;
- background: -moz-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #4CAF50 100%);
- background: -webkit-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #4CAF50 100%);
- background: -o-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #4CAF50 100%);
- background: -ms-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #4CAF50 100%);
- background: linear-gradient(to right, rgba(30, 87, 153, 0) 0%, #4CAF50 100%)
-}
-
-.nav-img {
- padding: 14px 19px
-}
-
-.nav {
- background-color: #fff;
- border-right: 1px solid #e0e0e0
-}
-
-.nav-item, .nav-item-static {
- color: #383838
-}
-
-.nav-item {
- font-weight: 600
-}
-
-.nav-item:hover {
- color: #4CAF50
-}
-
-.nav-item:active {
- background-color: #e2e2e2
-}
-
-.divider {
- border-bottom: 1px solid #e0e0e0
-}
-
-.card {
- background: none;
- border-radius: 0;
- box-shadow: none;
- margin: 0 20% 100px;
- width: auto
-}
-
-.card a {
- color: #4CAF50;
- text-decoration: none;
- border-bottom: 1px solid transparent;
- transition: border-bottom-color 150ms ease-in-out 100ms
-}
-
-.card a:hover {
- border-bottom-color: #4CAF50
-}
-
-.headline {
- font-size: 30px;
- line-height: 50px;
- color: #383838 !important;
- text-decoration: none;
- border-bottom: none !important
-}
-
-.headline:hover {
- color: #4CAF50 !important
-}
-
-.date {
- font-size: 13px
-}
-
-.articletext {
- margin-top: 30px;
- font-size: 16px;
- line-height: 30px
-}
-
-.author, .tag {
- font-size: 13px
-}
-
-.fab {
- background-color: #4CAF50;
- box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
-}
-
-.subfab {
- background-color: #fff;
- box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
-}
-
-.button {
- color: #4CAF50;
- border-bottom: 1px solid transparent;
- margin: 0;
- min-width: 0;
- padding: 0;
- line-height: 16px;
- height: 16px;
- transition-property: border-bottom-color;
- transition-delay: 50ms;
- transition-duration: 125ms;
- transition-timing-function: ease;
- -moz-transition-property: border-bottom-color;
- -moz-transition-delay: 50ms;
- -moz-transition-duration: 125ms;
- -moz-transition-timing-function: ease;
- -webkit-transition-property: border-bottom-color;
- -webkit-transition-delay: 50ms;
- -webkit-transition-duration: 125ms;
- -webkit-transition-timing-function: ease
-}
-
-.button:hover {
- border-bottom-color: #4CAF50
-}
-
-.pag_prev {
- float: left
-}
-
-.button:last-child {
- float: none
-}
-
-.footer {
- text-align: center;
- height: 60px;
- background-color: #2D2D2D;
- line-height: 60px;
- width: 100%;
- color: #fff
-}
-
-.footer a {
- color: #fff;
- text-decoration: none;
- border-bottom: 1px solid transparent
-}
-
-.footer a:hover {
- border-bottom-color: #fff
-}
-
-.hljs {
- background: none
-}
-
-@media screen and (min-width: 1440px) {
- .title {
- margin-left: calc(20% - 40px)
- }
-
- .nav {
- padding-top: 55px
- }
-}
-
-@media screen and (max-width: 800px) {
- body {
- margin-top: 80px
- }
-
- .title {
- margin-left: 20%
- }
-
- .card {
- margin: 0 5% 100px
- }
-}
+body{font-family:"Fira Sans",sans-serif;background:#f0f0f0;color:#383838;margin:130px 0 0}::selection,::-moz-selection{color:#f0f0f0;background-color:#4CAF50}.header{height:55px;background-color:#4CAF50;position:fixed;box-shadow:2px 0 2px 2px rgba(62,62,62,0.45)}.title{line-height:55px;color:#fff;position:absolute;left:0;margin-left:calc(20% + 24px)}.title>a{color:#fff;text-decoration:none}.fadeout{height:55px;background:-moz-linear-gradient(left, rgba(30,87,153,0) 0%, #4CAF50 100%);background:-webkit-linear-gradient(left, rgba(30,87,153,0) 0%, #4CAF50 100%);background:-o-linear-gradient(left, rgba(30,87,153,0) 0%, #4CAF50 100%);background:-ms-linear-gradient(left, rgba(30,87,153,0) 0%, #4CAF50 100%);background:linear-gradient(to right, rgba(30,87,153,0) 0%, #4CAF50 100%)}.nav-img{padding:14px 19px}.nav{background-color:#fff;border-right:1px solid #e0e0e0}.nav-item,.nav-item-static{color:#383838}.nav-item{font-weight:600}.nav-item:hover{color:#4CAF50}.nav-item:active{background-color:#e2e2e2}.divider{border-bottom:1px solid #e0e0e0}.card{background:none;border-radius:0;box-shadow:none;margin:0 20% 100px;width:auto}.card a{color:#4CAF50;text-decoration:none;border-bottom:1px solid transparent;transition:border-bottom-color 150ms ease-in-out 100ms}.card a:hover{border-bottom-color:#4CAF50}.headline{font-size:30px;line-height:50px;color:#383838 !important;text-decoration:none;border-bottom:none !important}.headline:hover{color:#4CAF50 !important}.date{font-size:13px}.articletext{margin-top:30px;font-size:16px;line-height:30px}.author,.tag{font-size:13px}.fab{background-color:#4CAF50;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.subfab{background-color:#fff;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.button{color:#4CAF50;border-bottom:1px solid transparent;margin:0;min-width:0;padding:0;line-height:16px;height:16px;transition-property:border-bottom-color;transition-delay:50ms;transition-duration:125ms;transition-timing-function:ease;-moz-transition-property:border-bottom-color;-moz-transition-delay:50ms;-moz-transition-duration:125ms;-moz-transition-timing-function:ease;-webkit-transition-property:border-bottom-color;-webkit-transition-delay:50ms;-webkit-transition-duration:125ms;-webkit-transition-timing-function:ease}.button:hover{border-bottom-color:#4CAF50}.pag_prev{float:left}.button:last-child{float:none}.footer{text-align:center;height:60px;background-color:#2D2D2D;line-height:60px;width:100%;color:#fff}.footer a{color:#fff;text-decoration:none;border-bottom:1px solid transparent}.footer a:hover{border-bottom-color:#fff}.hljs{background:none}@media screen and (min-width: 1440px){.title{margin-left:calc(20% - 40px)}.nav{padding-top:55px}}@media screen and (max-width: 800px){body{margin-top:80px}.title{margin-left:20%}.card{margin:0 5% 100px}}
/*# sourceMappingURL=nextDESIGN.css.map */
diff --git a/themes/nextDESIGN.css.map b/themes/nextDESIGN.css.map
index 2a0deda..6a3b922 100644
--- a/themes/nextDESIGN.css.map
+++ b/themes/nextDESIGN.css.map
@@ -1,12 +1 @@
-{
- "version": 3,
- "file": "nextDESIGN.css",
- "sources": [
- "nextDESIGN.sass"
- ],
- "sourcesContent": [
- "/*\n *The MIT License\n *\n *Copyright 2015 mmk2410.\n *\n *Permission is hereby granted, free of charge, to any person obtaining a copy\n *of this software and associated documentation files (the \"Software\"), to deal\n *in the Software without restriction, including without limitation the rights\n *to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *copies of the Software, and to permit persons to whom the Software is\n *furnished to do so, subject to the following conditions:\n *\n *The above copyright notice and this permission notice shall be included in\n *all copies or substantial portions of the Software.\n *\n *THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n *THE SOFTWARE. */\n/*\n * Created on : Jun 18, 2015, 6:39:37 PM\n * Author : mmk2410 */\n\n$font: \"Fira Sans\", sans-serif;\n\n$background: #f0f0f0;\n$text-color: #383838;\n$primary-color: #4CAF50;\n$header-shadow: rgba(62, 62, 62, 0.45);\n$white: #FFFFFF;\n$fadeout-color: rgba(30, 87, 153, 0);\n$border: #e0e0e0;\n$active-color: #e2e2e2;\n$fab-shadow: rgba(62, 62, 62, 0.3);\n$footer-background: #2D2D2D;\n\nbody {\n font-family: $font;\n background: $background;\n color: $text-color;\n margin: 130px 0 0; }\n\n::selection, ::-moz-selection {\n color: $background;\n background-color: $primary-color; }\n\n.header {\n height: 55px;\n background-color: $primary-color;\n position: fixed;\n box-shadow: 2px 0 2px 2px $header-shadow; }\n\n.title {\n line-height: 55px;\n color: $white;\n position: absolute;\n left: 0;\n margin-left: calc(20% + 24px);\n > a {\n color: $white;\n text-decoration: none; } }\n\n.fadeout {\n height: 55px;\n background: -moz-linear-gradient(left, $fadeout-color 0%, $primary-color 100%);\n background: -webkit-linear-gradient(left, $fadeout-color 0%, $primary-color 100%);\n background: -o-linear-gradient(left, $fadeout-color 0%, $primary-color 100%);\n background: -ms-linear-gradient(left, $fadeout-color 0%, $primary-color 100%);\n background: linear-gradient(to right, $fadeout-color 0%, $primary-color 100%); }\n\n.nav-img {\n padding: 14px 19px; }\n\n.nav {\n background-color: $white;\n border-right: 1px solid $border; }\n\n.nav-item, .nav-item-static {\n color: $text-color; }\n\n.nav-item {\n font-weight: 600;\n &:hover {\n color: $primary-color; }\n &:active {\n background-color: $active-color; } }\n\n.divider {\n border-bottom: 1px solid $border; }\n\n.card {\n background: none;\n border-radius: 0;\n box-shadow: none;\n margin: 0 20% 100px;\n width: auto;\n a {\n color: $primary-color;\n text-decoration: none;\n border-bottom: 1px solid transparent;\n transition: border-bottom-color 150ms ease-in-out 100ms;\n &:hover {\n border-bottom-color: #4CAF50; } } }\n\n.headline {\n font-size: 30px;\n line-height: 50px;\n color: #383838 !important;\n text-decoration: none;\n border-bottom: none !important;\n &:hover {\n color: #4CAF50 !important; } }\n\n.date {\n font-size: 13px; }\n\n.articletext {\n margin-top: 30px;\n font-size: 16px;\n line-height: 30px; }\n\n.author, .tag {\n font-size: 13px; }\n\n.fab {\n background-color: $primary-color;\n box-shadow: 0 1px 1.5px 1.5px $fab-shadow; }\n\n.subfab {\n background-color: $white;\n box-shadow: 0 1px 1.5px 1.5px $fab-shadow; }\n\n.button {\n color: $primary-color;\n border-bottom: 1px solid transparent;\n margin: 0;\n min-width: 0;\n padding: 0;\n line-height: 16px;\n height: 16px;\n transition-property: border-bottom-color;\n transition-delay: 50ms;\n transition-duration: 125ms;\n transition-timing-function: ease;\n -moz-transition-property: border-bottom-color;\n -moz-transition-delay: 50ms;\n -moz-transition-duration: 125ms;\n -moz-transition-timing-function: ease;\n -webkit-transition-property: border-bottom-color;\n -webkit-transition-delay: 50ms;\n -webkit-transition-duration: 125ms;\n -webkit-transition-timing-function: ease;\n &:hover {\n border-bottom-color: $primary-color; } }\n\n.pag_prev {\n float: left; }\n\n.button:last-child {\n float: none; }\n\n.footer {\n text-align: center;\n height: 60px;\n background-color: $footer-background;\n line-height: 60px;\n width: 100%;\n color: $white;\n a {\n color: $white;\n text-decoration: none;\n border-bottom: 1px solid transparent;\n &:hover {\n border-bottom-color: $white; } } }\n\n.hljs {\n background: none; }\n\n@media screen and (min-width: 1440px) {\n .title {\n margin-left: calc(20% - 40px); }\n .nav {\n padding-top: 55px; } }\n\n@media screen and (max-width: 800px) {\n body {\n margin-top: 80px; }\n .title {\n margin-left: 20%; }\n .card {\n margin: 0 5% 100px; } }\n"
- ],
- "mappings": "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",
- "names": []
-}
\ No newline at end of file
+{"version":3,"file":"nextDESIGN.css","sources":["nextDESIGN.sass"],"sourcesContent":["/*\n *The MIT License\n *\n *Copyright 2015 mmk2410.\n *\n *Permission is hereby granted, free of charge, to any person obtaining a copy\n *of this software and associated documentation files (the \"Software\"), to deal\n *in the Software without restriction, including without limitation the rights\n *to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *copies of the Software, and to permit persons to whom the Software is\n *furnished to do so, subject to the following conditions:\n *\n *The above copyright notice and this permission notice shall be included in\n *all copies or substantial portions of the Software.\n *\n *THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n *THE SOFTWARE. */\n/*\n * Created on : Jun 18, 2015, 6:39:37 PM\n * Author : mmk2410 */\n\n$font: \"Fira Sans\", sans-serif;\n\n$background: #f0f0f0;\n$text-color: #383838;\n$primary-color: #4CAF50;\n$header-shadow: rgba(62, 62, 62, 0.45);\n$white: #FFFFFF;\n$fadeout-color: rgba(30, 87, 153, 0);\n$border: #e0e0e0;\n$active-color: #e2e2e2;\n$fab-shadow: rgba(62, 62, 62, 0.3);\n$footer-background: #2D2D2D;\n\nbody {\n font-family: $font;\n background: $background;\n color: $text-color;\n margin: 130px 0 0; }\n\n::selection, ::-moz-selection {\n color: $background;\n background-color: $primary-color; }\n\n.header {\n height: 55px;\n background-color: $primary-color;\n position: fixed;\n box-shadow: 2px 0 2px 2px $header-shadow; }\n\n.title {\n line-height: 55px;\n color: $white;\n position: absolute;\n left: 0;\n margin-left: calc(20% + 24px);\n > a {\n color: $white;\n text-decoration: none; } }\n\n.fadeout {\n height: 55px;\n background: -moz-linear-gradient(left, $fadeout-color 0%, $primary-color 100%);\n background: -webkit-linear-gradient(left, $fadeout-color 0%, $primary-color 100%);\n background: -o-linear-gradient(left, $fadeout-color 0%, $primary-color 100%);\n background: -ms-linear-gradient(left, $fadeout-color 0%, $primary-color 100%);\n background: linear-gradient(to right, $fadeout-color 0%, $primary-color 100%); }\n\n.nav-img {\n padding: 14px 19px; }\n\n.nav {\n background-color: $white;\n border-right: 1px solid $border; }\n\n.nav-item, .nav-item-static {\n color: $text-color; }\n\n.nav-item {\n font-weight: 600;\n &:hover {\n color: $primary-color; }\n &:active {\n background-color: $active-color; } }\n\n.divider {\n border-bottom: 1px solid $border; }\n\n.card {\n background: none;\n border-radius: 0;\n box-shadow: none;\n margin: 0 20% 100px;\n width: auto;\n a {\n color: $primary-color;\n text-decoration: none;\n border-bottom: 1px solid transparent;\n transition: border-bottom-color 150ms ease-in-out 100ms;\n &:hover {\n border-bottom-color: #4CAF50; } } }\n\n.headline {\n font-size: 30px;\n line-height: 50px;\n color: #383838 !important;\n text-decoration: none;\n border-bottom: none !important;\n &:hover {\n color: #4CAF50 !important; } }\n\n.date {\n font-size: 13px; }\n\n.articletext {\n margin-top: 30px;\n font-size: 16px;\n line-height: 30px; }\n\n.author, .tag {\n font-size: 13px; }\n\n.fab {\n background-color: $primary-color;\n box-shadow: 0 1px 1.5px 1.5px $fab-shadow; }\n\n.subfab {\n background-color: $white;\n box-shadow: 0 1px 1.5px 1.5px $fab-shadow; }\n\n.button {\n color: $primary-color;\n border-bottom: 1px solid transparent;\n margin: 0;\n min-width: 0;\n padding: 0;\n line-height: 16px;\n height: 16px;\n transition-property: border-bottom-color;\n transition-delay: 50ms;\n transition-duration: 125ms;\n transition-timing-function: ease;\n -moz-transition-property: border-bottom-color;\n -moz-transition-delay: 50ms;\n -moz-transition-duration: 125ms;\n -moz-transition-timing-function: ease;\n -webkit-transition-property: border-bottom-color;\n -webkit-transition-delay: 50ms;\n -webkit-transition-duration: 125ms;\n -webkit-transition-timing-function: ease;\n &:hover {\n border-bottom-color: $primary-color; } }\n\n.pag_prev {\n float: left; }\n\n.button:last-child {\n float: none; }\n\n.footer {\n text-align: center;\n height: 60px;\n background-color: $footer-background;\n line-height: 60px;\n width: 100%;\n color: $white;\n a {\n color: $white;\n text-decoration: none;\n border-bottom: 1px solid transparent;\n &:hover {\n border-bottom-color: $white; } } }\n\n.hljs {\n background: none; }\n\n@media screen and (min-width: 1440px) {\n .title {\n margin-left: calc(20% - 40px); }\n .nav {\n padding-top: 55px; } }\n\n@media screen and (max-width: 800px) {\n body {\n margin-top: 80px; }\n .title {\n margin-left: 20%; }\n .card {\n margin: 0 5% 100px; } }\n"],"mappings":"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","names":[]}
\ No newline at end of file
diff --git a/update-scripts/1-4-4_1-5-0.sh b/update-scripts/1-4-4_1-5-0.sh
new file mode 100755
index 0000000..db7ad6e
--- /dev/null
+++ b/update-scripts/1-4-4_1-5-0.sh
@@ -0,0 +1,84 @@
+#!/bin/bash
+# Update script for Rangitaki from version 1.4.4 to 1.5.0
+
+version="1.5.0"
+new="./rbe-new"
+
+echo -n "Downloading version $version from GitLab... "
+git clone -q https://gitlab.com/mmk2410/rangitaki.git "$new"
+
+if [[ $1 == "--debug" ]]; then
+ cd $new
+ git checkout -q master
+ cd ../
+fi
+echo "done"
+
+echo -n "Updating ressources... "
+rm -rf ./res/
+mv $new/res/ ./
+echo "done"
+
+echo -n "Updating languages... "
+rm -rf ./lang/de.php
+rm -rf ./lang/en.php
+mv $new/lang/* ./lang/
+echo "done"
+
+echo -n "Updating source files... "
+rm ./src/sass/rangitaki.sass
+mv $new/src/sass/rangitaki.sass ./src/sass/
+echo "done"
+
+echo -n "Updating core... "
+rm ./index.php
+mv $new/index.php ./
+echo "done"
+
+echo -n "Updating binaries... "
+rm -rf ./bin
+mv $new/bin/ ./
+echo "done"
+
+echo -n "Updating themes... "
+rm ./themes/material-light.css*
+rm ./themes/material-dark.css*
+rm ./themes/background-img.css*
+rm ./themes/nextDESIGN.css*
+mv $new/themes/* ./themes/
+echo "done"
+
+echo -n "Updating npm... "
+mv $new/package.json ./
+echo "done"
+
+echo -n 'Updating config script... '
+echo "social:" >> ./config.yaml
+echo " twitter: ''" >> ./config.yaml
+sed -i "s/design:/design:\n excerpt: 'off'/" config.yaml
+echo "done"
+
+echo -n "Updating Changelog... "
+
+if [ -f ./CHANGELOG.txt ]; then
+ rm CHANGELOG.txt
+fi
+
+mv $new/CHANGELOG.md ./
+echo "done"
+
+echo -n "Cleaning up... "
+if [[ $1 != "--debug" ]]; then
+ echo -n "Cleaning up... "
+ rm -rf $new
+ echo "done"
+fi
+
+if [ -d "./update-scripts" ]; then
+ echo -n "Remove obsolete update scripts folder... "
+ rm -rf "./update-scripts"
+ echo "done"
+fi
+
+echo "Your Rangitaki installation is updated to version $version"
+echo "Run php ./bin/init.php to use set the values for the new features."