Build initial index page
This commit is contained in:
parent
b8b8b1af18
commit
5b7341c905
7 changed files with 122 additions and 17 deletions
40
Actions/Index.php
Normal file
40
Actions/Index.php
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Sandpiper\Actions;
|
||||||
|
|
||||||
|
use \Yosymfony\Toml\Toml;
|
||||||
|
|
||||||
|
use \SBRL\Utilities\SimpleXmlWriter;
|
||||||
|
|
||||||
|
class index extends \Sandpiper\AbstractAction
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle() {
|
||||||
|
global $settings;
|
||||||
|
|
||||||
|
$writer = new SimpleXmlWriter();
|
||||||
|
$writer->add_xslt("/theme/project-list.xslt");
|
||||||
|
$writer->open("index");
|
||||||
|
$writer->addtag("data_dir", [], $settings->get("data_dir"));
|
||||||
|
$writer->open("places");
|
||||||
|
|
||||||
|
foreach($settings->get("places") as $next_place) {
|
||||||
|
$writer->open("place");
|
||||||
|
$writer->addtag("name", [], $next_place["name"]);
|
||||||
|
$writer->addtag("dirname", [], slugify($next_place["name"]));
|
||||||
|
$writer->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
$writer->closeall();
|
||||||
|
|
||||||
|
header("content-type: application/xml");
|
||||||
|
header("content-length: " . strlen($writer->render()));
|
||||||
|
header("etag: " . sha1($writer->render()));
|
||||||
|
|
||||||
|
exit($writer->render());
|
||||||
|
}
|
||||||
|
}
|
|
@ -59,7 +59,7 @@ class Report extends \Sandpiper\AbstractAction
|
||||||
if(!file_exists($report_filename)) {
|
if(!file_exists($report_filename)) {
|
||||||
$writer = new \SBRL\Utilities\SimpleXmlWriter(); // It's started automagically
|
$writer = new \SBRL\Utilities\SimpleXmlWriter(); // It's started automagically
|
||||||
$writer->prettyprint = true;
|
$writer->prettyprint = true;
|
||||||
$writer->add_xslt("/theme/stack_traces.xslt");
|
$writer->add_xslt("/theme/stack-traces.xslt");
|
||||||
$writer->open("error_info");
|
$writer->open("error_info");
|
||||||
$writer->addtag("project_name", [], $place["name"]); // For aesthetic purposes
|
$writer->addtag("project_name", [], $place["name"]); // For aesthetic purposes
|
||||||
$writer->addtag("summary", [], $new_report->summary);
|
$writer->addtag("summary", [], $new_report->summary);
|
||||||
|
@ -97,7 +97,7 @@ class Report extends \Sandpiper\AbstractAction
|
||||||
$writer = new SimpleXmlWriter();
|
$writer = new SimpleXmlWriter();
|
||||||
$writer->prettyprint = true;
|
$writer->prettyprint = true;
|
||||||
|
|
||||||
$writer->add_xslt("/theme/error_index.xslt");
|
$writer->add_xslt("/theme/error-index.xslt");
|
||||||
$writer->open("errors_index");
|
$writer->open("errors_index");
|
||||||
$writer->addtag("project_name", [], $place["name"]);
|
$writer->addtag("project_name", [], $place["name"]);
|
||||||
$writer->open("error_list");
|
$writer->open("error_list");
|
||||||
|
|
10
index.php
10
index.php
|
@ -21,12 +21,12 @@ function send_error($code, $message) {
|
||||||
header("content-type: text/plain");
|
header("content-type: text/plain");
|
||||||
exit("$message\n");
|
exit("$message\n");
|
||||||
}
|
}
|
||||||
|
$action = $_GET["action"] ?? "Index";
|
||||||
if(empty($_GET["action"]))
|
|
||||||
send_error(400, "No action specified.");
|
|
||||||
|
|
||||||
$action = $_GET["action"];
|
|
||||||
|
|
||||||
$handler_name = "Sandpiper\\Actions\\$action";
|
$handler_name = "Sandpiper\\Actions\\$action";
|
||||||
|
|
||||||
|
if(!class_exists($handler_name))
|
||||||
|
send_error(404, "Unknown action $handler_name.");
|
||||||
|
|
||||||
$handler = new $handler_name();
|
$handler = new $handler_name();
|
||||||
$handler->handle();
|
$handler->handle();
|
||||||
|
|
|
@ -12,8 +12,11 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Sandpiper - <xsl:value-of select="/errors_index/project_name" /></h1>
|
<h1>Sandpiper - <xsl:value-of select="/errors_index/project_name" /></h1>
|
||||||
<div class="project-list">
|
|
||||||
<div class="project-list-header">
|
<a class="back-button-main" href="../../../">« Back</a>
|
||||||
|
|
||||||
|
<div class="error-list">
|
||||||
|
<div class="error-list-header">
|
||||||
<span>Error</span>
|
<span>Error</span>
|
||||||
<span>Last Updated</span>
|
<span>Last Updated</span>
|
||||||
<span>Reports</span>
|
<span>Reports</span>
|
|
@ -39,7 +39,38 @@ pre {
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
.project-list
|
.back-button-main {
|
||||||
|
grid-column-start: side-right;
|
||||||
|
grid-row-start: header;
|
||||||
|
|
||||||
|
justify-self: center;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
.project-list {
|
||||||
|
grid-column-start: main;
|
||||||
|
grid-row-start: main;
|
||||||
|
|
||||||
|
justify-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-list > a {
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
margin: 1em;
|
||||||
|
padding: 1em 2em;
|
||||||
|
background: hsl(202, 76%, 50%);
|
||||||
|
|
||||||
|
color: inherit;
|
||||||
|
font-size: 2em;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
.error-list
|
||||||
{
|
{
|
||||||
grid-column-start: main;
|
grid-column-start: main;
|
||||||
grid-row-start: main;
|
grid-row-start: main;
|
||||||
|
@ -52,7 +83,7 @@ pre {
|
||||||
background: hsla(22, 76%, 50%, 0.68);
|
background: hsla(22, 76%, 50%, 0.68);
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-list-header > span {
|
.error-list-header > span {
|
||||||
display: table-cell;
|
display: table-cell;
|
||||||
|
|
||||||
margin: 0.25em 0;
|
margin: 0.25em 0;
|
||||||
|
@ -61,26 +92,26 @@ pre {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-list > a, .project-list > div {
|
.error-list > a, .error-list > div {
|
||||||
display: table-row;
|
display: table-row;
|
||||||
}
|
}
|
||||||
.project-list > a {
|
.error-list > a {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
.project-list > a > span {
|
.error-list > a > span {
|
||||||
display: table-cell;
|
display: table-cell;
|
||||||
padding: 0.5em 0;
|
padding: 0.5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-list .summary {
|
.error-list .summary {
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
.project-list .last-updated {
|
.error-list .last-updated {
|
||||||
width: 10%;
|
width: 10%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-list .reports-count {
|
.error-list .reports-count {
|
||||||
width: 3em;
|
width: 3em;
|
||||||
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
29
theme/project-list.xslt
Normal file
29
theme/project-list.xslt
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||||
|
<xsl:output method="html" encoding="utf-8" indent="yes" />
|
||||||
|
<xsl:template match="/">
|
||||||
|
<!-- <xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text> -->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>Sandpiper</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/theme/main.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Sandpiper</h1>
|
||||||
|
|
||||||
|
<div class="project-list">
|
||||||
|
<xsl:for-each select="/index/places/place">
|
||||||
|
<a>
|
||||||
|
<xsl:attribute name="href"><xsl:value-of select="/index/data_dir" />/places/<xsl:value-of select="dirname" />/index.xml</xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:value-of select="name" />
|
||||||
|
</a>
|
||||||
|
</xsl:for-each>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:transform>
|
|
@ -19,6 +19,8 @@
|
||||||
<h2><xsl:value-of select="/error_info/summary" /></h2>
|
<h2><xsl:value-of select="/error_info/summary" /></h2>
|
||||||
<h1>Sandpiper - <xsl:value-of select="/error_info/project_name" /></h1>
|
<h1>Sandpiper - <xsl:value-of select="/error_info/project_name" /></h1>
|
||||||
|
|
||||||
|
<a class="back-button-main" href="index.xml">« Back</a>
|
||||||
|
|
||||||
<div class="report-list">
|
<div class="report-list">
|
||||||
|
|
||||||
<xsl:for-each select="/error_info/reports/report">
|
<xsl:for-each select="/error_info/reports/report">
|
Reference in a new issue