diff --git a/www/commands/html_panel-aoc-calendar.php b/www/commands/html_panel-aoc-calendar.php new file mode 100644 index 0000000..fd42fcc --- /dev/null +++ b/www/commands/html_panel-aoc-calendar.php @@ -0,0 +1,16 @@ + intval($_GET['year']), + 'nav' => boolval($_GET['nav']), + 'linkheader' => boolval($_GET['linkheader']), + 'ajax' => boolval($_GET['ajax']), + 'frame' => false, + 'frameid' => strval($_GET['frameid']), +]; +require (__DIR__ . '/../fragments/panel_aoc_calendar.php'); diff --git a/www/data/css/styles.css b/www/data/css/styles.css index 197e1be..61cd5e7 100644 --- a/www/data/css/styles.css +++ b/www/data/css/styles.css @@ -1180,6 +1180,12 @@ html, body { font-weight: bold; } +.aoc_calendar_header_title a { + color: #000000; + font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif; + text-decoration: none; +} + .aoc_calendar_header_link.aoc_prev { flex-grow: 0; padding-left: 0.5em; diff --git a/www/data/css/styles.min.css b/www/data/css/styles.min.css index 8f534c1..e2e9758 100644 --- a/www/data/css/styles.min.css +++ b/www/data/css/styles.min.css @@ -227,6 +227,7 @@ html,body{margin:0;padding:0;height:100%} .aoc_calendar_header{display:flex;flex-direction:row;justify-content:space-between;margin-bottom:.5em;background:#888} .aoc_calendar_header_link{display:flex;color:#000;text-decoration:none} .aoc_calendar_header_title{flex-grow:0;display:flex;color:#000;font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold} +.aoc_calendar_header_title a{color:#000;font-family:Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;text-decoration:none} .aoc_calendar_header_link.aoc_prev{flex-grow:0;padding-left:.5em} .aoc_calendar_header_link.aoc_next{flex-grow:0;padding-right:.5em} .aoc_calendar_header_link.aoc_link_hidden{visibility:hidden} diff --git a/www/data/css/styles_blogview_aoc.scss b/www/data/css/styles_blogview_aoc.scss index 1f980df..0e3ae40 100644 --- a/www/data/css/styles_blogview_aoc.scss +++ b/www/data/css/styles_blogview_aoc.scss @@ -36,6 +36,12 @@ font-weight: bold; } +.aoc_calendar_header_title a { + color: $LAYER2_HEADER_FG; + font-family: $FONT_HEADER; + text-decoration: none; +} + .aoc_calendar_header_link.aoc_prev { flex-grow: 0; padding-left: 0.5em; diff --git a/www/data/javascript/aoc_panel_interactive.js b/www/data/javascript/aoc_panel_interactive.js new file mode 100644 index 0000000..3c90593 --- /dev/null +++ b/www/data/javascript/aoc_panel_interactive.js @@ -0,0 +1,12 @@ +function changeAOCPanel(year, shownav, linkheader, ajax, frameid) +{ + let xhr = new XMLHttpRequest(); + xhr.open('GET', '/api/html::panel_aoc_calendar?year='+year+'&nav='+shownav+'&linkheader='+linkheader+'&ajax='+ajax+'&frameid='+frameid); + xhr.onload = function() + { + if (xhr.status === 200) document.getElementById(frameid).innerHTML = xhr.responseText; + }; + xhr.send(); + + return true; +} \ No newline at end of file diff --git a/www/fragments/blogview_aoc_list.php b/www/fragments/blogview_aoc_list.php index 81c9a0e..4af7a92 100644 --- a/www/fragments/blogview_aoc_list.php +++ b/www/fragments/blogview_aoc_list.php @@ -26,7 +26,7 @@ $year = $post['extras']['aoc:year']; $year, 'nav'=>true]; + $PARAM_AOCCALENDAR = ['year' => $year, 'nav'=>true, 'linkheader'=>false, 'ajax'=>false]; require (__DIR__ . '/../fragments/panel_aoc_calendar.php') ?> diff --git a/www/fragments/panel_aoc.php b/www/fragments/panel_aoc.php index c8eae59..ce70235 100644 --- a/www/fragments/panel_aoc.php +++ b/www/fragments/panel_aoc.php @@ -1,20 +1,20 @@
- Advent of Code + Advent of Code
$year, 'nav'=>false]; + $PARAM_AOCCALENDAR = ['year' => $year, 'nav'=>true, 'linkheader'=>true, 'ajax'=>true]; require (__DIR__ . '/../fragments/panel_aoc_calendar.php') ?> diff --git a/www/fragments/panel_aoc_calendar.php b/www/fragments/panel_aoc_calendar.php index 3cd6490..da5f72c 100644 --- a/www/fragments/panel_aoc_calendar.php +++ b/www/fragments/panel_aoc_calendar.php @@ -2,26 +2,51 @@ global $PARAM_AOCCALENDAR; -$year = $PARAM_AOCCALENDAR['year']; -$shownav = $PARAM_AOCCALENDAR['nav']; +$year = $PARAM_AOCCALENDAR['year']; +$shownav = $PARAM_AOCCALENDAR['nav']; +$linkheader = $PARAM_AOCCALENDAR['linkheader']; +$ajax = $PARAM_AOCCALENDAR['ajax']; +$frame = isset($PARAM_AOCCALENDAR['frame']) ? $PARAM_AOCCALENDAR['frame'] : true; +$frameid = isset($PARAM_AOCCALENDAR['frameid']) ? $PARAM_AOCCALENDAR['frameid'] : ('aoc_frame_' . getRandomToken(16)); $assocdays = AdventOfCode::listSingleYearAssociative($year); $prev_year = $shownav ? AdventOfCode::getPrevYear($year) : null; $next_year = $shownav ? AdventOfCode::getNextYear($year) : null; +if ($ajax) includeAdditionalScript("/data/javascript/aoc_panel_interactive.js", 'defer', true); + ?> -
+'; ?>
<'; - else echo '<'; + if ($prev_year !== null) + { + if ($ajax) + echo '<'; + else + echo '<'; + } + else + { + echo '<'; + } - echo ''.$year.''; + if ($linkheader) echo ''.$year.''; + else echo ''.$year.''; - if ($next_year !== null) echo '>'; - else echo '>'; + if ($next_year !== null) + { + if ($ajax) + echo '>'; + else + echo '>'; + } + else + { + echo '>'; + } ?>
@@ -39,4 +64,4 @@ $next_year = $shownav ? AdventOfCode::getNextYear($year) : null; } ?>
-
+'; ?> diff --git a/www/internals/base.php b/www/internals/base.php index 457ede2..52d2eee 100644 --- a/www/internals/base.php +++ b/www/internals/base.php @@ -405,3 +405,18 @@ function get_client_ip() { else if(isset($_SERVER['REMOTE_ADDR'])) return $_SERVER['REMOTE_ADDR']; else return 'UNKNOWN'; } + +function getRandomToken($length = 32) +{ + try + { + if(!isset($length) || intval($length) <= 8 ) $length = 32; + + if (function_exists('random_bytes')) return bin2hex(random_bytes($length)); + if (function_exists('mcrypt_create_iv')) return bin2hex(mcrypt_create_iv($length, MCRYPT_DEV_URANDOM)); + if (function_exists('openssl_random_pseudo_bytes')) return bin2hex(openssl_random_pseudo_bytes($length)); + } + catch (Exception $e) { throw new InvalidArgumentException($e); } + + throw new InvalidArgumentException("No random"); +} \ No newline at end of file diff --git a/www/pages/api.php b/www/pages/api.php index c19e5c1..883245b 100644 --- a/www/pages/api.php +++ b/www/pages/api.php @@ -25,6 +25,8 @@ $API_COMMANDS = 'alephnote::show' => [ 'src' => __DIR__.'/../commands/alephnote_show.php', 'auth' => 'ajax_secret' ], 'updates::show' => [ 'src' => __DIR__.'/../commands/updates_show.php', 'auth' => 'ajax_secret' ], + + 'html::panel_aoc_calendar' => [ 'src' => __DIR__.'/../commands/html_panel-aoc-calendar.php', 'auth' => 'none' ], ]; $cmd = strtolower($OPTIONS['cmd']); @@ -91,7 +93,7 @@ catch (exception $e) "IP: " . get_client_ip() . "\r\n\r\n" . "ERROR: " . $e . "\r\n\r\n"; - sendMail("Website API call failed", $content, 'virtualadmin@mikescher.de', 'webserver-info@mikescher.com'); + if (isProd()) sendMail("Website API call failed", $content, 'virtualadmin@mikescher.de', 'webserver-info@mikescher.com'); httpDie(500, 'Error.'); } diff --git a/www/pages/main.php b/www/pages/main.php index b9e10d0..1cd4b33 100644 --- a/www/pages/main.php +++ b/www/pages/main.php @@ -24,8 +24,7 @@ - 2018]; include (__DIR__ . '/../fragments/panel_aoc.php'); */ ?> - 2019]; include (__DIR__ . '/../fragments/panel_aoc.php'); ?> +