diff --git a/www/src/db_handler/post.php b/www/src/db_handler/post.php index 5e339e4..a61504f 100644 --- a/www/src/db_handler/post.php +++ b/www/src/db_handler/post.php @@ -6,8 +6,6 @@ class Post implements ArrayAccess { private $content_html; private $content_markdown; - private $site_defaults; - public $data; public $html_data; @@ -66,14 +64,12 @@ class Post implements ArrayAccess { $this->content_html = null; $this->content_markdown = null; - - $this->site_defaults = $site_defaults; if(!isset($post_data) or !isset($post_data['id'])) { $post_data = $this->_generate_404($post_data); } - $data = $post_data; + $data = array_merge($site_defaults, $post_data); if($data['path'] == '') { $data['path'] = '/'; @@ -127,11 +123,7 @@ class Post implements ArrayAccess { return $this->data[$name]; } - if(is_null($this->site_defaults)) { - throw new RuntimeException("Post site defaults have not been set properly!"); - } - - return $this->site_defaults[$name] ?? null; + return null; } public function offsetGet($offset) : mixed { @@ -141,9 +133,6 @@ class Post implements ArrayAccess { if(isset($this->data[$offset])) { return true; } - if(isset($this->site_defaults[$offset])) { - return true; - } return !is_null($this->offsetGet($offset)); } @@ -179,7 +168,7 @@ class Post implements ArrayAccess { } public function to_array($options = []) { - $out_data = array_merge($this->site_defaults, $this->data); + $out_data = $this->data; if(isset($options['markdown'])) { $out_data['markdown'] = $this->get_markdown(); diff --git a/www/src/dbtest.php b/www/src/dbtest.php index ffbc378..01c795a 100644 --- a/www/src/dbtest.php +++ b/www/src/dbtest.php @@ -61,6 +61,8 @@ $db_connection->execute_query("DELETE FROM posts;"); $sql_adapter = new MySQLHandler($db_connection, $SERVER_HOST); $adapter = new PostHandler($sql_adapter); +$adapter->site_defaults = []; + $sql_adapter->debugging = true; function test_accounce($title) { @@ -127,15 +129,23 @@ test_accounce("Setting post markdown..."); $sql_adapter->set_postdata([ 'path' => '/testing/markdowntest', 'markdown' => 'Inline markdown test should work...', - 'title' => "A Markdown Test" + 'title' => "A Markdown Test", + 'brief' => "The dragons explore markdown, sort of properly... Maybe.", + 'tags' => ['one', 'two', 'three', 'sexee'] ]); $post = $sql_adapter->get_postdata('/testing/markdowntest'); var_dump($sql_adapter->get_post_markdown($post['id'])); $sql_adapter->set_post_markdown($post['id'], ' - This is one hell of a cute test! + +This is one hell of a cute test! + > Just checking in... + +{{ +template: fragments/blog/card.html +}} ' ); var_dump($sql_adapter->get_post_markdown($post['id'])); diff --git a/www/src/dergdown.php b/www/src/dergdown.php index 0405127..1f8dbcd 100644 --- a/www/src/dergdown.php +++ b/www/src/dergdown.php @@ -1,22 +1,97 @@ highlighter = new Highlighter(); + $this->highlighter = null; + $this->BlockTypes['{'] []= 'DergInsert'; + + $this->dergInsertRenderer = null; + } + + public function setDergRenderer($dergRenderer) { + $this->dergInsertRenderer = $dergRenderer; + } + + protected function blockDergInsert($Line, $currentBlock) { + if (preg_match('/^{{\s?(.*)$/', $Line['body'], $match)) { + return array( + 'text' => $match[1] ?? '' + ); + } + } + + protected function blockDergInsertContinue($Line, $Block) { + if(isset($Block['complete'])) { + return; + } + + if(preg_match('/(.*)}}/', $Line['body'], $match)) { + $Block['text'] .= "\n" . $match[1]; + $Block['complete'] = true; + return $Block; + } + + $Block['text'] .= "\n" . $Line['body']; + + return $Block; + } + + protected function blockDergInsertComplete($Block) { + try { + $parsed_data = Yaml::parse($Block['text']); + } + catch (Exception $ex) { + return array( + 'markup' => ' +
+

Error in a dergen template!

+ YAML could not be parsed properly:
+ + ' . $ex->getMessage() . '
' + ); + } + + try { + if(!isset($this->dergInsertRenderer)) { + throw new Exception("No Dergen Renderer was set!"); + } + + $render_output = $this->dergInsertRenderer->dergRender($parsed_data); + } catch (Exception $ex) { + return array( + 'markup' => ' +
+

Error in a dergen template!

+ Rendering engine threw an error:
+ + ' . $ex->getMessage() . '
' + ); + } + + return array( + 'markup' => $render_output + ); } protected function blockFencedCodeComplete($block) - { + { if (! isset($block['element']['text']['attributes'])) { return $block; } + if(!isset($this->highlighter)) { + $this->highlighter = new Highlighter(); + } + $code = $block['element']['text']['text']; $languageClass = $block['element']['text']['attributes']['class']; $language = explode('-', $languageClass); diff --git a/www/src/serve/ajax.php b/www/src/serve/ajax.php index 679afe0..1746732 100644 --- a/www/src/serve/ajax.php +++ b/www/src/serve/ajax.php @@ -21,6 +21,8 @@ if(isset($REQUEST_QUERY['page'])) { $ajax_args['fa'] = $FONT_AWESOME_ARRAY; $ajax_args['page'] ??= $SITE_CONFIG['site_defaults']; -echo $twig->render('/ajax/' . $AJAX_REQUEST_TEMPLATE, $ajax_args); +$ajax_args['post'] ??= $ajax_args['page']; + +echo $twig->render($AJAX_REQUEST_TEMPLATE, $ajax_args); ?> \ No newline at end of file diff --git a/www/src/setup/db.php b/www/src/setup/db.php index 70b3d88..30a7357 100644 --- a/www/src/setup/db.php +++ b/www/src/setup/db.php @@ -29,14 +29,27 @@ $sql_adapter = new MySQLHandler($db_connection, $SERVER_HOST); $adapter = new PostHandler($sql_adapter); require_once 'dergdown.php'; +require_once 'setup/derg_insert.php'; -function dergdown_to_html($text) { +function dergdown_to_html($post) { + $DergInsert = new DergInsertRenderer($post); $Parsedown = new Dergdown(); + $Parsedown->setDergRenderer($DergInsert); - return $Parsedown->text($text); + $markdown = $post->markdown; + + if($markdown == '') { + $markdown = ' +{{ +template: fragments/directory/inline.html +}} +'; + } + + return $Parsedown->text($markdown); } function post_to_html($post) { - return dergdown_to_html($post->markdown); + return dergdown_to_html($post); } $adapter->markdown_engine = "post_to_html"; diff --git a/www/src/setup/derg_insert.php b/www/src/setup/derg_insert.php new file mode 100644 index 0000000..8051a3e --- /dev/null +++ b/www/src/setup/derg_insert.php @@ -0,0 +1,43 @@ +twig = $twig; + $this->post = $post; + $this->postAdapter = $adapter; + } + + public function dergRender($renderConfig) { + global $FONT_AWESOME_ARRAY; + + if(!isset($renderConfig['template'])) { + throw new Exception("No template type given!"); + } + + $template = $renderConfig['template']; + + $args = [ + 'post' => $this->post, + 'page' => $this->post, + 'fa' => $FONT_AWESOME_ARRAY + ]; + + if(isset($renderConfig['post'])) { + $args['post'] = $this->postAdapter->get_post($renderConfig['post']); + } + if(isset($renderConfig['page'])) { + $args['page'] = $this->postAdapter->get_post($renderConfig['page']); + } + + return $this->twig->render($template, $args); + } +} + +?> \ No newline at end of file diff --git a/www/static/banner.js b/www/static/banner.js index 3da66de..b3101df 100644 --- a/www/static/banner.js +++ b/www/static/banner.js @@ -1,6 +1,8 @@ const BANNER_TIME = 600 * 1000.0 -const BANNER_ANIMATION = "opacity 0.8s linear, transform 0.1s linear" +// const BANNER_ANIMATION = "opacity 0.8s linear, transform 0.1s linear" +const BANNER_ANIMATION = "opacity 0.8s linear" + class BannerHandler { constructor(banner_container, banner_image, banner_link) { @@ -32,7 +34,7 @@ class BannerHandler { console.log("Starting tick") - this.bannerUpdateTimer = setInterval(() => { this.updateTick() }, 100); + this.bannerUpdateTimer = setInterval(() => { this.updateTick() }, 1000); } stopUpdateTick() { if(this.bannerUpdateTimer === null) { diff --git a/www/templates/ajax/compact_filelist/listing.html b/www/templates/ajax/compact_filelist/listing.html deleted file mode 100644 index ccdc7c9..0000000 --- a/www/templates/ajax/compact_filelist/listing.html +++ /dev/null @@ -1,4 +0,0 @@ - -{% for post in page.child_posts %} -{{ include('ajax/compact_filelist/entry.html') }} -{% endfor %} \ No newline at end of file diff --git a/www/templates/fragments/article_blop.html b/www/templates/fragments/blog/card.html similarity index 93% rename from www/templates/fragments/article_blop.html rename to www/templates/fragments/blog/card.html index 0000271..f084f0a 100644 --- a/www/templates/fragments/article_blop.html +++ b/www/templates/fragments/blog/card.html @@ -1,5 +1,4 @@ -
@@ -16,7 +15,7 @@ - {{post.excerpt}} + {{ post.brief }}
diff --git a/www/templates/fragments/blog/listing.html b/www/templates/fragments/blog/listing.html new file mode 100644 index 0000000..e69de29 diff --git a/www/templates/fragments/decoration/blog_header.html b/www/templates/fragments/decoration/blog_header.html new file mode 100644 index 0000000..7dd4d48 --- /dev/null +++ b/www/templates/fragments/decoration/blog_header.html @@ -0,0 +1,10 @@ + +
+

+ {{ post.title }} +

+ + {% if post.authors %} + Written by {{ post.authors }} + {% endif %} +
\ No newline at end of file diff --git a/www/templates/fragments/filepath_bar.html b/www/templates/fragments/decoration/navbar.html similarity index 96% rename from www/templates/fragments/filepath_bar.html rename to www/templates/fragments/decoration/navbar.html index f4a43a2..854a30c 100644 --- a/www/templates/fragments/filepath_bar.html +++ b/www/templates/fragments/decoration/navbar.html @@ -61,7 +61,7 @@
.. - {{ include('ajax/compact_filelist/listing.html') }} + {{ include('fragments/directory/compact/listing.html') }} diff --git a/www/templates/ajax/compact_filelist/entry.html b/www/templates/fragments/directory/compact/entry.html similarity index 87% rename from www/templates/ajax/compact_filelist/entry.html rename to www/templates/fragments/directory/compact/entry.html index 6c63345..be4ca6d 100644 --- a/www/templates/ajax/compact_filelist/entry.html +++ b/www/templates/fragments/directory/compact/entry.html @@ -6,7 +6,7 @@