1
0
mirror of https://github.com/suk-ws/ph-Bookshelf.git synced 2024-12-05 01:16:53 +08:00

完成前端页面模板,实现侧边栏的 Links 和 Books 生成

- 前端页面的大致样式完成
  - 以 Gitbook 默认样式为基础
  - 删除了插件内容
  - 搜索栏被改为了站点标题
  - 版权(?)声明将 Gitbook 声明为前端,添加 ph-Bookshelf 的声明
  - 为 Gitbook 损坏的 js 功能做出补丁
    - 侧边栏在 600px 以上高度下自动打开
    - 侧边栏伸缩按钮功能
    - *暂时还没有主题功能的实现
- 实现了侧边栏的 简单的 Links 和 Books 生成
  - 只能够进行基础的列表显示
This commit is contained in:
A.C.Sukazyo Eyre 2021-04-26 00:10:50 +08:00
parent 9d86fd5e53
commit 9bb1dd1a75
Signed by: Eyre_S
GPG Key ID: EFB47D98FE082FAD
9 changed files with 179 additions and 19 deletions

6
.htaccess Normal file
View File

@ -0,0 +1,6 @@
# URL Rewrite
RewriteEngine On
RewriteCond $0 !^index.php.*
RewriteCond $0 !^debug.php.*
RewriteCond $0 !^assets.*
RewriteRule .* index.php?p=$0 [QSA]

23
assets/gitbook-fix.js Normal file
View File

@ -0,0 +1,23 @@
const WITH_SUMMARY_CLASS = "with-summary"
var bookRoot;
function summaryOnOrOff () {
if (bookRoot.classList.contains(WITH_SUMMARY_CLASS)) {
bookRoot.classList.remove(WITH_SUMMARY_CLASS);
} else {
bookRoot.classList.add(WITH_SUMMARY_CLASS);
}
}
window.onload = function () {
bookRoot = document.getElementsByClassName("book")[0];
if (window.innerWidth > 600) {
bookRoot.classList.add(WITH_SUMMARY_CLASS);
}
};

105
index.php Normal file
View File

@ -0,0 +1,105 @@
<?php
require_once "./src/Data/SiteMeta.php";
require_once "./src/Data/PageMeta.php";
try {
SiteMeta::load();
PageMeta::$book = SiteMeta::getBookshelf()->getRootBook();
PageMeta::$page = PageMeta::$book->getChilds()->getChilds()[0];
PageMeta::$isMainPage = true;
require "./template/header.php";
?>
<div class="book-summary">
<div id="book-search-input">
<ul id="site-name" class="summary">
<li class="chapter active"><a><?= SiteMeta::getBookshelf()->getSiteName() ?></a></li>
</ul>
</div>
<nav role="navigation">
<ul class="summary">
<?= SiteMeta::getBookshelf()->getHtml(); ?>
<li class="divider"></li>
<li class="chapter active" data-level="1.1" data-path="./"><a href="./">占位主页面</a></li>
<li class="chapter " data-level="1.2" data-path="api/">
<a href="#">占位章节</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="api/color.html"><a href="chp/page.html">占位页面</a></li>
<li class="chapter " data-level="1.2.2" data-path="api/suka-talk.html"><a href="chp/page-other.html">另一个占位页面</a></li>
</ul>
</li>
<li class="chapter " data-level="1.3" data-path="srv-dev.html"><a href="backnote.html">占位后记</a></li>
<li class="divider"></li>
<li><a href="https://github.com/Eyre-S/ph-Bookshelf" target="blank" class="gitbook-link">Generated with ph-Bookshelf</a></li>
<li><a href="https://www.gitbook.com" target="blank" class="gitbook-link">Front-End by GitBook</a></li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<a class="btn pull-left js-toolbar-action" aria-label="" href="#" onclick="summaryOnOrOff()"><i class="fa fa-align-justify"></i></a>
<div class="dropdown pull-left font-settings js-toolbar-action">
<a class="btn toggle-dropdown" aria-label="Font Settings" href="#"><i class="fa fa-font"></i></a>
<div class="dropdown-menu dropdown-right">
<div class="dropdown-caret">
<span class="caret-outer"></span>
<span class="caret-inner"></span>
</div>
<div class="buttons">
<button class="button size-2 font-reduce">A</button>
<button class="button size-2 font-enlarge">A</button>
</div>
<div class="buttons">
<button class="button size-2 ">Serif</button>
<button class="button size-2 ">Sans</button>
</div><div class="buttons">
<button class="button size-3 ">White</button>
<button class="button size-3 ">Sepia</button>
<button class="button size-3 ">Night</button>
</div>
</div>
</div>
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href=".">Workshop Services</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="workshop-services"><a name="workshop-services"
class="anchor-navigation-ex-anchor" href="#workshop-services"><i
class="fa fa-link" aria-hidden="true"></i></a>1. 占位主页面
</h1>
<p>歌德说过一句富有哲理的话,没有人事先了解自己到底有多大的力量,直到他试过以后才知道。这句话语虽然很短,但令我浮想联翩。 在这种困难的抉择下,本人思来想去,寝食难安。 经过上述讨论, 佚名说过一句富有哲理的话,感激每一个新的挑战,因为它会锻造你的意志和品格。这启发了我。</p>
<p>我们都知道,只要有意义,那么就必须慎重考虑。 一般来讲,我们都必须务必慎重的考虑考虑。 本人也是经过了深思熟虑,在每个日日夜夜思考这个问题。 问题的关键究竟为何? 带着这些问题,我们来审视一下占位内容。 就我个人来说,占位内容对我的意义,不能不说非常重大。</p>
<p>鲁巴金曾经说过,读书是在别人思想的帮助下,建立起自己的思想。我希望诸位也能好好地体会这句话。</p>
<font color="dark-yellow">既然如此, 占位内容因何而发生? 经过上述讨论, 占位内容,发生了会如何,不发生又会如何。
`喵~`
我们一般认为,抓住了问题的关键,其他一切则会迎刃而解。
</font>
</section>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
require "./template/footer.php";
} catch (Exception $e) {
echo "<h1>ERROR</h1><p>" . $e->getMessage() . "</p>";
}

View File

@ -24,25 +24,13 @@ class SiteMeta {
public static function getGitbookStylesheetsList (): array {
return array(
"/assets/gitbook/style.css",
"/assets/gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css",
"/assets/gitbook/gitbook-plugin-anchor-navigation-ex/style/plugin.css",
"/assets/gitbook/gitbook-plugin-highlight/website.css",
"/assets/gitbook/gitbook-plugin-search/search.css",
"/assets/gitbook/gitbook-plugin-fontsettings/website.css"
);
}
public static function getGitbookJavascriptList (): array {
return array(
"/assets/gitbook/gitbook.js",
"/assets/gitbook/theme.js",
"/assets/gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js",
"/assets/gitbook/gitbook-plugin-search/search-engine.js",
"/assets/gitbook/gitbook-plugin-search/search.js",
"/assets/gitbook/gitbook-plugin-lunr/lunr.min.js",
"/assets/gitbook/gitbook-plugin-lunr/search-lunr.js",
"/assets/gitbook/gitbook-plugin-sharing/buttons.js",
"/assets/gitbook/gitbook-plugin-fontsettings/fontsettings.js"
"/assets/gitbook-fix.js",
);
}

View File

@ -52,4 +52,8 @@ class Book {
return $this->parent;
}
public function getHtml (): string {
return "<li class='link'><a class='link' href='$this->id'>$this->name</a></li>";
}
}

View File

@ -12,9 +12,9 @@ class BookCollection {
private array $array;
private ?BookCollection $parent;
private function __construct (string $name, array $a, ?BookCollection $parent) {
private function __construct (string $name, ?BookCollection $parent) {
$this->name = $name;
$this->array = $a;
$this->array = array();
$this->parent = $parent;
}
@ -34,7 +34,7 @@ class BookCollection {
else $name = $attrName->nodeValue;
} else throw new Exception("BookCollection (not root) xml data missing attributes");
}
$node = new BookCollection($name, array(), $parent);
$node = new BookCollection($name, $parent);
for ($child = $root->firstChild; $child != null; $child = $child->nextSibling) {
switch ($child->nodeName) {
case "Book":
@ -70,4 +70,14 @@ class BookCollection {
return $this->parent;
}
public function getHtml (): string {
$str = "";
if ($this->name != self::ROOT) $str .= "<li><a class='book-collection' href='#'>$this->name</a><ul class='book-collection'>";
foreach ($this->array as $node) {
$str .= $node->getHtml();
}
if ($this->name != self::ROOT) $str .= "</ul></li>";
return $str;
}
}

View File

@ -70,4 +70,14 @@ class Bookshelf {
return $this->rootBook;
}
public function getHtml (): string {
$str = "<ul id='global-container' class='summary'>";
$str .= $this->links->getHtml();
$str .= "<li class='divider'></li>";
$str .= $this->books->getHtml();
$str .= "</ul>";
// TODO books list
return $str;
}
}

View File

@ -52,4 +52,8 @@ class Link {
return $this->parent;
}
public function getHtml (): string {
return "<li class='link'><a class='link' href='$this->href' target='_blank'>$this->name</a></li>";
}
}

View File

@ -12,9 +12,9 @@ class LinkCollection {
private array $array;
private ?LinkCollection $parent;
private function __construct (string $name, array $a, ?LinkCollection $parent) {
private function __construct (string $name, ?LinkCollection $parent) {
$this->name = $name;
$this->array = $a;
$this->array = array();
$this->parent = $parent;
}
@ -34,7 +34,7 @@ class LinkCollection {
else $name = $attrName->nodeValue;
} else throw new Exception("LinkCollection (not root) xml data missing attributes");
}
$node = new LinkCollection($name, array(), $parent);
$node = new LinkCollection($name, $parent);
for ($child = $root->firstChild; $child != null; $child = $child->nextSibling) {
switch ($child->nodeName) {
case "Link":
@ -70,4 +70,14 @@ class LinkCollection {
return $this->parent;
}
public function getHtml (): string {
$str = "";
if ($this->name != self::ROOT) $str .= "<li><a class='link-collection chapter' href='#'>$this->name</a><ul class='link-collection articles'>";
foreach ($this->array as $node) {
$str .= $node->getHtml();
}
if ($this->name != self::ROOT) $str .= "</ul></li>";
return $str;
}
}