1
0
mirror of https://github.com/suk-ws/ph-Bookshelf.git synced 2024-12-05 09:26:52 +08:00

连接旧后端(取消书目录内的 Segment 支持)

This commit is contained in:
A.C.Sukazyo Eyre 2021-11-22 22:53:02 +08:00
parent 669c3034a3
commit 40f6ebcfdf
Signed by: Eyre_S
GPG Key ID: EFB47D98FE082FAD
15 changed files with 102 additions and 115 deletions

View File

@ -3,15 +3,10 @@
require_once "./src/Data/SiteMeta.php"; require_once "./src/Data/SiteMeta.php";
require_once "./src/Data/PageMeta.php"; require_once "./src/Data/PageMeta.php";
require_once "./src/Utils/ParsedownExtend.php";
require_once "./src/Utils/PageParse.php"; require_once "./src/Utils/PageParse.php";
require_once "./src/Utils/RequestNotExistException.php"; require_once "./src/Utils/RequestNotExistException.php";
require_once "./constant.php";
$parser = new ParsedownExtend();
$parser->setMarkupEscaped(false);
$parser->setSafeMode(false);
try { try {
@ -60,7 +55,9 @@ try {
require "./template/header.php"; require "./template/header.php";
require "./template/demo.html"; require "./template/nav.php";
require "./template/main.php";
require "./template/footer.php"; require "./template/footer.php";

View File

@ -55,6 +55,7 @@ class SiteMeta {
} }
public static function getCustomScriptContent (string $id): string { public static function getCustomScriptContent (string $id): string {
if (!file_exists("./data/$id.js")) return "";
return file_get_contents("./data/$id.js"); return file_get_contents("./data/$id.js");
} }

View File

@ -1,5 +1,6 @@
<?php <?php
require_once "./src/Data/PageMeta.php";
require_once "./src/Element/BookCollection.php"; require_once "./src/Element/BookCollection.php";
require_once "./src/Element/BookContent/BookContented.php"; require_once "./src/Element/BookContent/BookContented.php";
@ -54,7 +55,7 @@ class Book {
} }
public function getHtml (): string { public function getHtml (): string {
return "<li id='book/$this->id' book-id='$this->id' class='link link-book" . (PageMeta::$book->getId()==$this->id?" active":"") . "'><a class='link' " . (PageMeta::$book->getId()==$this->id?"":" href='/$this->id'") . ">$this->name</a></li>"; return "<a id='book/$this->id' book-id='$this->id' class='no-style menu-item" . (PageMeta::$book->getId()==$this->id?" current":"") . "' href='/$this->id'" . ">$this->name</a>";
} }
/** /**

View File

@ -1,5 +1,6 @@
<?php <?php
require_once "./src/Data/PageMeta.php";
require_once "./src/Element/Book.php"; require_once "./src/Element/Book.php";
class BookCollection { class BookCollection {
@ -72,11 +73,11 @@ class BookCollection {
public function getHtml (): string { public function getHtml (): string {
$str = ""; $str = "";
if ($this->name != self::ROOT) $str .= "<li class='book-collection fold" . ($this->getBook(PageMeta::$book->getId())==null?"":" on") . "'><a class='book-collection'>$this->name<i class='exc-trigger fa'></i></a><ul class='book-collection summary'>"; if ($this->name != self::ROOT) $str .= "<div class='menu-item-parent" . ($this->getBook(PageMeta::$book->getId())==null?"":" active") . "'><a class='no-style menu-item'>$this->name</a><div class='children'>";
foreach ($this->array as $node) { foreach ($this->array as $node) {
$str .= $node->getHtml(); $str .= $node->getHtml();
} }
if ($this->name != self::ROOT) $str .= "</ul></li>"; if ($this->name != self::ROOT) $str .= "</div></div>";
return $str; return $str;
} }

View File

@ -64,7 +64,7 @@ class BookContented {
} }
public function getSummaryHtml (): string { public function getSummaryHtml (): string {
return "<div id='in-book-nav-container'>" . $this->childs->getSummaryHtml() . "</div>"; return $this->childs->getSummaryHtml();
} }
public function getPage (string $id): ?Page { public function getPage (string $id): ?Page {

View File

@ -66,11 +66,11 @@ class Chapter {
public function getSummaryHtml (): string { public function getSummaryHtml (): string {
$str = ""; $str = "";
if ($this->parent != null) $str .= "<li class='chapter fold" . ($this->getPage(PageMeta::$page->getId())==null?"":" on") . "'><a class='page-chapter'>$this->name<i class='exc-trigger fa'></i></a><ul class='page-chapter summary'>"; if ($this->parent != null) $str .= "<div class='menu-item-parent" . ($this->getPage(PageMeta::$page->getId())==null?"":" active") . "'><a class='no-style menu-item' href='javascript:'>$this->name</a><div class='children'>";
foreach ($this->childs as $node) { foreach ($this->childs as $node) {
$str .= $node->getSummaryHtml(); $str .= $node->getSummaryHtml();
} }
if ($this->parent != null) $str .= "</ul></li>"; if ($this->parent != null) $str .= "</div></div>";
return $str; return $str;
} }

View File

@ -1,22 +1,19 @@
<?php <?php
require_once "./src/Data/PageMeta.php";
require_once "./src/Element/BookContent/Chapter.php"; require_once "./src/Element/BookContent/Chapter.php";
require_once "./src/Element/BookContent/Segment.php";
class Page { class Page {
private string $id; private string $id;
private string $name; private string $name;
/** @var Segment[] */
private array $segues;
private Chapter $parent; private Chapter $parent;
public function __construct (string $id, string $name, Chapter $parent, array $childs = array()) { public function __construct (string $id, string $name, Chapter $parent) {
$this->id = $id; $this->id = $id;
$this->name = $name; $this->name = $name;
$this->parent = $parent; $this->parent = $parent;
$this->segues = $childs;
} }
/** /**
@ -40,9 +37,6 @@ class Page {
throw new Exception("Book xml data missing attributes"); throw new Exception("Book xml data missing attributes");
for ($child = $xmlData->firstChild;$child != null ; $child = $child->nextSibling) { for ($child = $xmlData->firstChild;$child != null ; $child = $child->nextSibling) {
switch ($child->nodeName) { switch ($child->nodeName) {
case "Segment":
array_push($node->segues, Segment::parse($child, $node));
break;
case "#text": case "#text":
break; break;
default: default:
@ -60,37 +54,31 @@ class Page {
return $this->name; return $this->name;
} }
/**
* @return Segment[]
*/
public function getSegments (): array {
return $this->segues;
}
public function getParent (): Chapter { public function getParent (): Chapter {
return $this->parent; return $this->parent;
} }
public function getSummaryHtml (): string { public function getSummaryHtml (): string {
$str = // $str =
"<li id='page/$this->id' page-id='$this->id' class='page-contented chapter link-page " . // "<li id='page/$this->id' page-id='$this->id' class='page-contented chapter link-page " .
(PageMeta::$page->getId()==$this->id?" active":"") . // (PageMeta::$page->getId()==$this->id?" active":"") .
"'><a class='page-contented' " . // "'><a class='page-contented' " .
( // (
PageMeta::$page->getId()==$this->id ? // PageMeta::$page->getId()==$this->id ?
"" : // "" :
"href='/".PageMeta::$book->getId()."/".$this->id."' " // "href='/".PageMeta::$book->getId()."/".$this->id."' "
) . // ) .
">$this->name</a>"; // ">$this->name</a>";
if (sizeof($this->segues) > 0) { // if (sizeof($this->segues) > 0) {
$str .= "<ul class='page-contented summary'>"; // $str .= "<ul class='page-contented summary'>";
foreach ($this->segues as $node) { // foreach ($this->segues as $node) {
$str .= $node->getSummaryHtml(); // $str .= $node->getSummaryHtml();
} // }
$str .= "</ul>"; // $str .= "</ul>";
} // }
$str .= "</li>"; // $str .= "</li>";
return $str; // return $str;
return "<a id='page/$this->id' page-id='$this->id' class='no-style menu-item" . (PageMeta::$page->getId()==$this->id?" current":"") . "' href='/".PageMeta::$book->getId()."/$this->id'" . ">$this->name</a>";
} }
public function getMarkdownContent (): string { public function getMarkdownContent (): string {

View File

@ -1,56 +0,0 @@
<?php
require_once "./src/Element/BookContent/Page.php";
class Segment {
private string $id;
private string $name;
private Page $parent;
public function __construct (string $id, string $name, Page $parent) {
$this->id = $id;
$this->name = $name;
$this->parent = $parent;
}
/**
* @param DOMNode $xmlData
* @param Page $parent
* @return Segment
* @throws Exception
*/
public static function parse (DOMNode $xmlData, Page $parent): Segment {
if ($xmlData->hasAttributes()) {
$attrName = $xmlData->attributes->getNamedItem("name");
$attrId = $xmlData->attributes->getNamedItem("id");
if ($attrName == null)
if ($attrId == null) throw new Exception("Segment xml data missing attribute \"name\"");
else throw new Exception("Segment xml data with id \"$attrId->nodeValue\" missing attribute \"name\"");
else $name = $attrName->nodeValue;
if ($attrId == null) throw new Exception("Segment xml data named \"$name\" missing attribute \"id\"");
else $id = $attrId->nodeValue;
} else
throw new Exception("Segment xml data missing attributes");
if ($xmlData->hasChildNodes())
throw new Exception("Segment xml named \"$name\" have some children which are not supported");
return new Segment($id, $name, $parent);
}
public function getId (): string {
return $this->id;
}
public function getName (): string {
return $this->name;
}
public function getParent (): Page {
return $this->parent;
}
public function getSummaryHtml (): string {
return "<li class='page-segment chapter'><a href='" . (PageMeta::$page->getId()==$this->parent->getId()?"":"/".PageMeta::$book->getId()."/".$this->parent->getId()."") . "#$this->id'>$this->name</a></li>";
}
}

View File

@ -70,16 +70,6 @@ class Bookshelf {
return $this->rootBook; return $this->rootBook;
} }
public function getHtml (): string {
$str = $this->links->getHtml();
$str .= "<li class='divider block-start'></li><div class='summary-container" . (PageMeta::$isMainPage?" on":"") . "'>";
$str .= $this->books->getHtml();
$str .= "</div><li class='divider block-end'></li>";
$str .= PageMeta::$book->getSummaryHtml();
$str .= "";
return $str;
}
public function getBook (string $id): ?Book { public function getBook (string $id): ?Book {
return $this->books->getBook($id); return $this->books->getBook($id);
} }

View File

@ -53,7 +53,7 @@ class Link {
} }
public function getHtml (): string { public function getHtml (): string {
return "<li class='link'><a class='link' href='$this->href' target='_blank'>$this->name</a></li>"; return "<a class='no-style menu-item' href='$this->href' target='_blank'>$this->name</a>";
} }
} }

View File

@ -72,11 +72,11 @@ class LinkCollection {
public function getHtml (): string { public function getHtml (): string {
$str = ""; $str = "";
if ($this->name != self::ROOT) $str .= "<li class='link-collection fold'><a class='link-collection chapter'>$this->name<i class='exc-trigger fa'></i></a><ul class='link-collection articles'>"; if ($this->name != self::ROOT) $str .= "<div class='menu-item-parent'><a class='no-style menu-item' href='javascript:'>$this->name</a><div class='children'>";
foreach ($this->array as $node) { foreach ($this->array as $node) {
$str .= $node->getHtml(); $str .= $node->getHtml();
} }
if ($this->name != self::ROOT) $str .= "</ul></li>"; if ($this->name != self::ROOT) $str .= "</div></div>";
return $str; return $str;
} }

8
template/main.php Normal file
View File

@ -0,0 +1,8 @@
<main id="main">
<div id="page-tools">
<button id="sidebar-show"></button>
</div>
<article id="article">
<?php require "./template/raw-article.php" ?>
</article>
</main>

40
template/nav.php Normal file
View File

@ -0,0 +1,40 @@
<?php require_once "./src/Data/SiteMeta.php" ?>
<?php require_once "./src/Data/PageMeta.php" ?>
<div id="nav-container" class="prevent-animation"><nav id="sidebar">
<noscript id="noscript-warn">For now, javascript must be enabled to view this site!!</noscript>
<address id="site-title"><?= SiteMeta::getBookshelf()->getSiteName() ?></address>
<div id="menu-container" class="menu-container sidebar-card">
<div id="menu-metas" class="menu">
<div class="menu-item-parent">
<a class="no-style menu-item" href="javascript:">Links</a>
<div class="children">
<?= SiteMeta::getBookshelf()->getLinks()->getHtml() ?>
</div>
</div>
<div class="menu-item-parent">
<a class="no-style menu-item" href="javascript:">Books</a>
<div class="children">
<?= SiteMeta::getBookshelf()->getBooks()->getHtml() ?>
</div>
</div>
</div>
<div id="menu-pages" class="menu">
<?= PageMeta::$book->getSummaryHtml() ?>
</div>
<div id="menu-about" class="menu">
<!-- <a class="no-style menu-item" href="https://sukazyo.cc" target="_blank">-->
<!-- <span>hosted by Sukazyo Workshop</span><br>-->
<!-- <small>&nbsp;| @author A.C.Sukazyo Eyre</small><br>-->
<!-- <small>&nbsp;<object><a class="no-style" href="https://laple.me/">| @author Lapis Apple</a></object></small><br>-->
<!-- <small>&nbsp;| @author github contributors&~&</small><br>-->
<!-- <small>&nbsp;| CC BY-NC-SA</small><br>-->
<!-- <small>&nbsp;| CC statement just for testing</small>-->
<!-- </a>-->
<a class="no-style menu-item" href="https://github.com/suk-ws/ph-Bookshelf" target="_blank">
<span>published with ph-Bookshelf</span><br>
<small><?=SiteMeta::getProgramVersion()?></small><br>
<small>with BreadCardUI</small>
</a>
</div>
</div>
</nav></div>

12
template/raw-article.php Normal file
View File

@ -0,0 +1,12 @@
<?php
require_once "./src/Utils/ParsedownExtend.php";
require_once "./src/Data/PageMeta.php";
$parser = new ParsedownExtend();
$parser->setMarkupEscaped(false);
$parser->setSafeMode(false);
echo "<h1 id='phb-page-".PageMeta::$page->getId()."'>".PageMeta::$page->getName()."</h1>\n";
echo $parser->text(PageMeta::$page->getMarkdownContent());

View File

@ -0,0 +1,5 @@
<?php
require_once "./src/Data/PageMeta.php";
PageMeta::$page->getSummaryHtml();