diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8412432 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +test/content/ diff --git a/conf/app.php b/conf/app.php index 99788ef..fac0474 100644 --- a/conf/app.php +++ b/conf/app.php @@ -5,9 +5,14 @@ return array( 'default_timezone' => 'Asia/HonKong', //timezone - 'content_directory' => 'content/', //directory of contents in /www/ - 'theme' => 'manual', //name of theme which is enabled - //when it's empty, use layout and views in directory views/ + //'content_directory' => 'content/', //directory of contents in /www/ + //when it's empty, use layout and views in directory views/ + //'theme' => 'manual', //name of theme which is enabled + + //in developing + 'content_directory' => 'dogs/', //directory of contents in /www/ + 'theme' => 'googleimage', //name of theme which is enabled + 'default_layout' => 'main', //default layout 'error_layout' => 'error', //exception layout, show error title and content diff --git a/lib/DirScanner.php b/lib/DirScanner.php index eadfffe..6908d61 100644 --- a/lib/DirScanner.php +++ b/lib/DirScanner.php @@ -42,6 +42,7 @@ Class DirScanner { 'md', //纯文本 'url', //快捷方式 'jpg', //图片 + 'jpeg', //图片 'png', //图片 'gif', //图片 'ico', //图标 @@ -54,6 +55,7 @@ Class DirScanner { 'md' => 5*1024*1024, //纯文本 'url' => 20*1024, //快捷方式 'jpg' => 500*1024, //图片 + 'jpeg' => 500*1024, //图片 'png' => 500*1024, //图片 'gif' => 500*1024, //图片 'ico' => 50*1024, //图标 @@ -63,6 +65,7 @@ Class DirScanner { ]; protected $securedFileExtensions = [ //开启Nginx防盗链的文件类型 'jpg', //图片 + 'jpeg', //图片 'png', //图片 'gif', //图片 'ico', //图标 @@ -299,6 +302,7 @@ Class DirScanner { 'url' => '/link/', 'm3u8' => '/m3u8/', 'jpg' => "{$webRoot}{$directory}{$filename}.{$extension}", + 'jpeg' => "{$webRoot}{$directory}{$filename}.{$extension}", 'png' => "{$webRoot}{$directory}{$filename}.{$extension}", 'gif' => "{$webRoot}{$directory}{$filename}.{$extension}", 'ico' => "{$webRoot}{$directory}{$filename}.{$extension}", @@ -463,7 +467,7 @@ Class DirScanner { if (empty($this->rootDir)) { $this->rootDir = realpath($dir); } - $this->scanningDirLevel = $this->getScanningLevel($this->rootDir, $dir); + $this->scanningDirLevel = $this->getScanningLevel($this->rootDir, realpath($dir)); $nextLevels = $levels - $this->scanningDirLevel; $files = scandir($dir); diff --git a/test/DirScannerTest.php b/test/DirScannerTest.php index 2b314d9..52673e7 100644 --- a/test/DirScannerTest.php +++ b/test/DirScannerTest.php @@ -3,6 +3,7 @@ * 类 DirScanner 测试 */ require_once __DIR__ . '/../lib/DirScanner.php'; +require_once __DIR__ . '/../plugins/Parsedown.php'; class DirScannerTest extends DirScanner { @@ -66,19 +67,23 @@ $scanner = new DirScannerTest(); //$dirTree = $scanner->scan('./'); //$dirTree = $scanner->scan(__DIR__); -$scanner->setWebRoot('/content/'); -$dirTree = $scanner->scan(__DIR__ . '/content/', 4); -//$dirTree = $scanner->scan(__DIR__ . '/../www/content/', 4); + +//$scanner->setWebRoot('/dogs/'); +//$dirTree = $scanner->scan(__DIR__ . '/../www/dogs/', 4); + +$scanner->setWebRoot('/dogs/'); +$dirTree = $scanner->scan(__DIR__ . '/../www/dogs/', 5); echo "Time cost: {$scanner->scanTimeCost} ms\n"; echo "\n"; -//print_r($dirTree); -//echo "\n"; -//echo "\n"; +print_r($dirTree); +echo "\n"; +echo "\n"; +exit; -$readmeFile = $scanner->getDefaultReadme('favs/'); -//$readmeFile = $scanner->getDefaultReadme(); +//$readmeFile = $scanner->getDefaultReadme('favs/'); +$readmeFile = $scanner->getDefaultReadme(); if (!empty($readmeFile)) { $readme_id = $readmeFile['id']; $readme_titles = $scanner->getMDTitles($readme_id); @@ -87,7 +92,9 @@ if (!empty($readmeFile)) { echo "\n"; echo "\n"; - $html = file_get_contents($readmeFile['realpath']); + $content = file_get_contents($readmeFile['realpath']); + $Parsedown = new Parsedown(); + $html = $Parsedown->text($content); $html = $scanner->fixMDUrls($readmeFile['realpath'], $html); echo "{$html}\n"; echo "\n"; diff --git a/themes/googleimage/controller/SiteController.php b/themes/googleimage/controller/SiteController.php new file mode 100644 index 0000000..630cd06 --- /dev/null +++ b/themes/googleimage/controller/SiteController.php @@ -0,0 +1,37 @@ +setWebRoot(FSC::$app['config']['content_directory']); + $dirTree = $scanner->scan(__DIR__ . '/../../../www/' . FSC::$app['config']['content_directory'], 4); + + //获取目录 + $menus = $scanner->getMenus(); + + $titles = []; + $html = ''; + $readmeFile = $scanner->getDefaultReadme(); + if (!empty($readmeFile)) { + $titles = $scanner->getMDTitles($readmeFile['id']); + + $Parsedown = new Parsedown(); + $content = file_get_contents($readmeFile['realpath']); + $html = $Parsedown->text($content); + $html = $scanner->fixMDUrls($readmeFile['realpath'], $html); + } + + $pageTitle = !empty($titles) ? $titles[0]['name'] : "FileSite.io - 无数据库、基于文件和目录的Markdown文档、网址导航、图书、图片、视频网站PHP开源系统"; + $viewName = 'index'; + $params = compact('menus', 'html'); + return $this->render($viewName, $params, $pageTitle); + } + +} diff --git a/themes/googleimage/views/layout/main.php b/themes/googleimage/views/layout/main.php new file mode 100644 index 0000000..72f5a62 --- /dev/null +++ b/themes/googleimage/views/layout/main.php @@ -0,0 +1,46 @@ + + + + +<?php echo $pageTitle;?> + + + + + + + + + +
+ +
+ + + +
+
+ + + + + + + + + + + diff --git a/themes/googleimage/views/site/index.php b/themes/googleimage/views/site/index.php new file mode 100644 index 0000000..6deec1e --- /dev/null +++ b/themes/googleimage/views/site/index.php @@ -0,0 +1,31 @@ + + +
+ +
+ +
+ + \ No newline at end of file diff --git a/themes/manual/views/layout/main.php b/themes/manual/views/layout/main.php index aba16e0..94ec6d3 100644 --- a/themes/manual/views/layout/main.php +++ b/themes/manual/views/layout/main.php @@ -5,7 +5,7 @@ <?php echo $pageTitle;?> - + diff --git a/www/css/github-markdown-dark.css b/www/css/github-markdown-dark.css new file mode 100644 index 0000000..43dedc0 --- /dev/null +++ b/www/css/github-markdown-dark.css @@ -0,0 +1,941 @@ +.markdown-body { + color-scheme: dark; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + margin: 0; + color: #c9d1d9; + background-color: #0d1117; + font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-bottom; +} + +.markdown-body h1:hover .anchor .octicon-link:before, +.markdown-body h2:hover .anchor .octicon-link:before, +.markdown-body h3:hover .anchor .octicon-link:before, +.markdown-body h4:hover .anchor .octicon-link:before, +.markdown-body h5:hover .anchor .octicon-link:before, +.markdown-body h6:hover .anchor .octicon-link:before { + width: 16px; + height: 16px; + content: ' '; + display: inline-block; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml,"); + mask-image: url("data:image/svg+xml,"); +} + +.markdown-body details, +.markdown-body figcaption, +.markdown-body figure { + display: block; +} + +.markdown-body summary { + display: list-item; +} + +.markdown-body [hidden] { + display: none !important; +} + +.markdown-body a { + background-color: transparent; + color: #58a6ff; + text-decoration: none; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline-width: 0; +} + +.markdown-body abbr[title] { + border-bottom: none; + text-decoration: underline dotted; +} + +.markdown-body b, +.markdown-body strong { + font-weight: 600; +} + +.markdown-body dfn { + font-style: italic; +} + +.markdown-body h1 { + margin: .67em 0; + font-weight: 600; + padding-bottom: .3em; + font-size: 2em; + border-bottom: 1px solid #21262d; +} + +.markdown-body mark { + background-color: rgba(187,128,9,0.15); + color: #c9d1d9; +} + +.markdown-body small { + font-size: 90%; +} + +.markdown-body sub, +.markdown-body sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +.markdown-body sub { + bottom: -0.25em; +} + +.markdown-body sup { + top: -0.5em; +} + +.markdown-body img { + border-style: none; + max-width: 100%; + box-sizing: content-box; + background-color: #0d1117; +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre, +.markdown-body samp { + font-family: monospace,monospace; + font-size: 1em; +} + +.markdown-body figure { + margin: 1em 40px; +} + +.markdown-body hr { + box-sizing: content-box; + overflow: hidden; + background: transparent; + border-bottom: 1px solid #21262d; + height: .25em; + padding: 0; + margin: 24px 0; + background-color: #30363d; + border: 0; +} + +.markdown-body input { + font: inherit; + margin: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.markdown-body [type=button], +.markdown-body [type=reset], +.markdown-body [type=submit] { + -webkit-appearance: button; +} + +.markdown-body [type=button]::-moz-focus-inner, +.markdown-body [type=reset]::-moz-focus-inner, +.markdown-body [type=submit]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +.markdown-body [type=button]:-moz-focusring, +.markdown-body [type=reset]:-moz-focusring, +.markdown-body [type=submit]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +.markdown-body [type=checkbox], +.markdown-body [type=radio] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body [type=number]::-webkit-inner-spin-button, +.markdown-body [type=number]::-webkit-outer-spin-button { + height: auto; +} + +.markdown-body [type=search] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +.markdown-body [type=search]::-webkit-search-cancel-button, +.markdown-body [type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +.markdown-body ::-webkit-input-placeholder { + color: inherit; + opacity: .54; +} + +.markdown-body ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; + display: block; + width: max-content; + max-width: 100%; + overflow: auto; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body details summary { + cursor: pointer; +} + +.markdown-body details:not([open])>*:not(summary) { + display: none !important; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + line-height: 10px; + color: #c9d1d9; + vertical-align: middle; + background-color: #161b22; + border: solid 1px rgba(110,118,129,0.4); + border-bottom-color: rgba(110,118,129,0.4); + border-radius: 6px; + box-shadow: inset 0 -1px 0 rgba(110,118,129,0.4); +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; +} + +.markdown-body h2 { + font-weight: 600; + padding-bottom: .3em; + font-size: 1.5em; + border-bottom: 1px solid #21262d; +} + +.markdown-body h3 { + font-weight: 600; + font-size: 1.25em; +} + +.markdown-body h4 { + font-weight: 600; + font-size: 1em; +} + +.markdown-body h5 { + font-weight: 600; + font-size: .875em; +} + +.markdown-body h6 { + font-weight: 600; + font-size: .85em; + color: #8b949e; +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; + padding: 0 1em; + color: #8b949e; + border-left: .25em solid #30363d; +} + +.markdown-body ul, +.markdown-body ol { + margin-top: 0; + margin-bottom: 0; + padding-left: 2em; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body tt, +.markdown-body code { + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + font-size: 12px; + word-wrap: normal; +} + +.markdown-body .octicon { + display: inline-block; + overflow: visible !important; + vertical-align: text-bottom; + fill: currentColor; +} + +.markdown-body ::placeholder { + color: #484f58; + opacity: 1; +} + +.markdown-body input::-webkit-outer-spin-button, +.markdown-body input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; + appearance: none; +} + +.markdown-body .pl-c { + color: #8b949e; +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: #79c0ff; +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: #d2a8ff; +} + +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { + color: #c9d1d9; +} + +.markdown-body .pl-ent { + color: #7ee787; +} + +.markdown-body .pl-k { + color: #ff7b72; +} + +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { + color: #a5d6ff; +} + +.markdown-body .pl-v, +.markdown-body .pl-smw { + color: #ffa657; +} + +.markdown-body .pl-bu { + color: #f85149; +} + +.markdown-body .pl-ii { + color: #f0f6fc; + background-color: #8e1519; +} + +.markdown-body .pl-c2 { + color: #f0f6fc; + background-color: #b62324; +} + +.markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: #7ee787; +} + +.markdown-body .pl-ml { + color: #f2cc60; +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: bold; + color: #1f6feb; +} + +.markdown-body .pl-mi { + font-style: italic; + color: #c9d1d9; +} + +.markdown-body .pl-mb { + font-weight: bold; + color: #c9d1d9; +} + +.markdown-body .pl-md { + color: #ffdcd7; + background-color: #67060c; +} + +.markdown-body .pl-mi1 { + color: #aff5b4; + background-color: #033a16; +} + +.markdown-body .pl-mc { + color: #ffdfb6; + background-color: #5a1e02; +} + +.markdown-body .pl-mi2 { + color: #c9d1d9; + background-color: #1158c7; +} + +.markdown-body .pl-mdr { + font-weight: bold; + color: #d2a8ff; +} + +.markdown-body .pl-ba { + color: #8b949e; +} + +.markdown-body .pl-sg { + color: #484f58; +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: #a5d6ff; +} + +.markdown-body [data-catalyst] { + display: block; +} + +.markdown-body g-emoji { + font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + font-size: 1em; + font-style: normal !important; + font-weight: 400; + line-height: 1; + vertical-align: -0.075em; +} + +.markdown-body g-emoji img { + width: 1em; + height: 1em; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .absent { + color: #f85149; +} + +.markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre, +.markdown-body details { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body blockquote>:first-child { + margin-top: 0; +} + +.markdown-body blockquote>:last-child { + margin-bottom: 0; +} + +.markdown-body sup>a::before { + content: "["; +} + +.markdown-body sup>a::after { + content: "]"; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #c9d1d9; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1 tt, +.markdown-body h1 code, +.markdown-body h2 tt, +.markdown-body h2 code, +.markdown-body h3 tt, +.markdown-body h3 code, +.markdown-body h4 tt, +.markdown-body h4 code, +.markdown-body h5 tt, +.markdown-body h5 code, +.markdown-body h6 tt, +.markdown-body h6 code { + padding: 0 .2em; + font-size: inherit; +} + +.markdown-body ul.no-list, +.markdown-body ol.no-list { + padding: 0; + list-style-type: none; +} + +.markdown-body ol[type="1"] { + list-style-type: decimal; +} + +.markdown-body ol[type=a] { + list-style-type: lower-alpha; +} + +.markdown-body ol[type=i] { + list-style-type: lower-roman; +} + +.markdown-body div>ol:not([type]) { + list-style-type: decimal; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li>p { + margin-top: 16px; +} + +.markdown-body li+li { + margin-top: .25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: 600; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table th { + font-weight: 600; +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid #30363d; +} + +.markdown-body table tr { + background-color: #0d1117; + border-top: 1px solid #21262d; +} + +.markdown-body table tr:nth-child(2n) { + background-color: #161b22; +} + +.markdown-body table img { + background-color: transparent; +} + +.markdown-body img[align=right] { + padding-left: 20px; +} + +.markdown-body img[align=left] { + padding-right: 20px; +} + +.markdown-body .emoji { + max-width: none; + vertical-align: text-top; + background-color: transparent; +} + +.markdown-body span.frame { + display: block; + overflow: hidden; +} + +.markdown-body span.frame>span { + display: block; + float: left; + width: auto; + padding: 7px; + margin: 13px 0 0; + overflow: hidden; + border: 1px solid #30363d; +} + +.markdown-body span.frame span img { + display: block; + float: left; +} + +.markdown-body span.frame span span { + display: block; + padding: 5px 0 0; + clear: both; + color: #c9d1d9; +} + +.markdown-body span.align-center { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-center>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: center; +} + +.markdown-body span.align-center span img { + margin: 0 auto; + text-align: center; +} + +.markdown-body span.align-right { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-right>span { + display: block; + margin: 13px 0 0; + overflow: hidden; + text-align: right; +} + +.markdown-body span.align-right span img { + margin: 0; + text-align: right; +} + +.markdown-body span.float-left { + display: block; + float: left; + margin-right: 13px; + overflow: hidden; +} + +.markdown-body span.float-left span { + margin: 13px 0 0; +} + +.markdown-body span.float-right { + display: block; + float: right; + margin-left: 13px; + overflow: hidden; +} + +.markdown-body span.float-right>span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: right; +} + +.markdown-body code, +.markdown-body tt { + padding: .2em .4em; + margin: 0; + font-size: 85%; + background-color: rgba(110,118,129,0.4); + border-radius: 6px; +} + +.markdown-body code br, +.markdown-body tt br { + display: none; +} + +.markdown-body del code { + text-decoration: inherit; +} + +.markdown-body pre code { + font-size: 100%; +} + +.markdown-body pre>code { + padding: 0; + margin: 0; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #161b22; + border-radius: 6px; +} + +.markdown-body pre code, +.markdown-body pre tt { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body .csv-data td, +.markdown-body .csv-data th { + padding: 5px; + overflow: hidden; + font-size: 12px; + line-height: 1; + text-align: left; + white-space: nowrap; +} + +.markdown-body .csv-data .blob-num { + padding: 10px 8px 9px; + text-align: right; + background: #0d1117; + border: 0; +} + +.markdown-body .csv-data tr { + border-top: 0; +} + +.markdown-body .csv-data th { + font-weight: 600; + background: #161b22; + border-top: 0; +} + +.markdown-body .footnotes { + font-size: 12px; + color: #8b949e; + border-top: 1px solid #30363d; +} + +.markdown-body .footnotes ol { + padding-left: 16px; +} + +.markdown-body .footnotes li { + position: relative; +} + +.markdown-body .footnotes li:target::before { + position: absolute; + top: -8px; + right: -8px; + bottom: -8px; + left: -24px; + pointer-events: none; + content: ""; + border: 2px solid #1f6feb; + border-radius: 6px; +} + +.markdown-body .footnotes li:target { + color: #c9d1d9; +} + +.markdown-body .footnotes .data-footnote-backref g-emoji { + font-family: monospace; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item label { + font-weight: 400; +} + +.markdown-body .task-list-item.enabled label { + cursor: pointer; +} + +.markdown-body .task-list-item+.task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item .handle { + display: none; +} + +.markdown-body .task-list-item-checkbox { + margin: 0 .2em .25em -1.6em; + vertical-align: middle; +} + +.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { + margin: 0 -1.6em .25em .2em; +} + +.markdown-body ::-webkit-calendar-picker-indicator { + filter: invert(50%); +} diff --git a/www/css/googleimage.css b/www/css/googleimage.css new file mode 100644 index 0000000..e9b029d --- /dev/null +++ b/www/css/googleimage.css @@ -0,0 +1,21 @@ +/* for theme GoogleImage */ +body{background-color:#202124;color: #e8eaed;font-family: Roboto,HelveticaNeue,Arial,sans-serif;font-size: small;margin: 0} +a{color: #aaadb2;text-decoration: none} +.header{padding:10px;position: relative;} +.header .logo{display: inline-block;margin:10px;font-size: 1.86em;color: #e8eaed} +.header .logo img{vertical-align: middle;} +.menu{max-width: 80%;white-space;nowrap;overflow-x:auto;overflow-y: hidden;margin: 0 auto} +.menu a{display: inline-block;line-height: 16px;margin: 0 1px;padding: 16px 12px 12px 10px;text-align: center} +.menu .selected{color: #8ab4f8;border-bottom: 3px solid #8ab4f8;padding: 20px 12px 11px 10px;} +.hr{border-bottom: solid 1px #3c4043;margin-bottom: 11px} +.about{position: absolute;right: 10px;top: 8px;width: 24px;height: 24px;padding: 8px;border-radius: 50%} +.about:hover{background-color: #303134} +.about svg{fill: currentColor;cursor: pointer;} +.modal-mask{display: none;background: rgba(0,0,0,.6);position: fixed;left: 0;right: 0;top: 0;bottom: 0;overflow: hidden;z-index: 9000;} +.modal-about{background: #202124;bottom: 0;overflow-y: auto;position: fixed;right: 0px;top: 0;width: 360px} +.modal-about h3{color: #e8eaed;font-size: 24px;font-weight: 300;margin-top: 0;margin-bottom: 20px;text-align: left;} +.modal-about .modal-head{padding: 20px 24px 0 24px} +.modal-about .btn-close{color: #9aa0a6;cursor: pointer;display: block;float: right;position: relative;top: -45px;} +.modal-about .btn-close svg{fill: currentColor;flex-shrink: 0;} +.modal-body{padding: 10px;background-color: inherit;} +.modal-about .modal-body h1{display: none;} \ No newline at end of file diff --git a/www/css/main.css b/www/css/main.css index b162396..7b79c72 100644 --- a/www/css/main.css +++ b/www/css/main.css @@ -3,3 +3,4 @@ .alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1} .alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc} .alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1} +.footer{margin:3em auto;text-align:center} \ No newline at end of file diff --git a/www/css/manual.css b/www/css/manual.css index f814a05..5daa1ec 100644 --- a/www/css/manual.css +++ b/www/css/manual.css @@ -2,7 +2,6 @@ *,html,body{padding:0:;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"} .indexes{width:22%;position:fixed;top:0;bottom:0;text-align:left;padding:0.5em;overflow-y:auto} .content{margin-left:23.5%;padding:0.5em} -.footer{margin:3em auto;text-align:center} .indexes h1,.indexes h2,.indexes h3,.indexes h4,.indexes h5,.indexes h6{padding:2px 0 3px 5px;font-size:1.2em;font-weight:normal;margin-bottom:0.35em} .indexes h1{display:none} .indexes h2{margin-top:1em;padding-top:4px;padding-bottom:4px;box-shadow:1px 1px 2px 1px rgba(0, 0, 0, 0.1)} diff --git a/www/js/googleimage.js b/www/js/googleimage.js new file mode 100644 index 0000000..e4ce813 --- /dev/null +++ b/www/js/googleimage.js @@ -0,0 +1 @@ +/* for theme GoogleImage */