mirror of
https://github.com/MeiK2333/github-style.git
synced 2025-10-13 04:42:56 +00:00
添加 readme,修改 bug
This commit is contained in:
24
README.md
24
README.md
@@ -1,20 +1,13 @@
|
|||||||
# github-style
|
# github-style
|
||||||
|
|
||||||
像素级抄袭 GitHub。
|
已知问题
|
||||||
|
|
||||||
目前完成:
|
- 提交热力图的标签显示没有完全对齐
|
||||||
|
- 多个可点击元素点击后会出现蓝色的边框
|
||||||
|
|
||||||
- header 栏(还没有移动端的样式切换)
|
TODO
|
||||||
- light/dark 模式切换
|
|
||||||
|
|
||||||
TODO:
|
- 移动端适配
|
||||||
|
|
||||||
- 根据当前页面切换 `selected` 的菜单项。
|
|
||||||
|
|
||||||
已知问题:
|
|
||||||
|
|
||||||
- 因为没有服务器,无法在页面加载前就确定 light/dark 模式,因此需要尽早在 JS 中确认 theme。
|
|
||||||
- light/dark 切换按钮点击时会出现蓝色边框。
|
|
||||||
|
|
||||||
## Init hugo site
|
## Init hugo site
|
||||||
|
|
||||||
@@ -38,6 +31,13 @@ cd themes/github-style
|
|||||||
git pull
|
git pull
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Setup readme
|
||||||
|
|
||||||
|
```bash
|
||||||
|
hugo new readme.md
|
||||||
|
echo '`Hello World!`' > content/readme.md
|
||||||
|
```
|
||||||
|
|
||||||
## Setup About page
|
## Setup About page
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
23
config.template.toml
Normal file
23
config.template.toml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
baseURL = "https://meik2333.com/"
|
||||||
|
languageCode = "zh-cn"
|
||||||
|
title = "MeiK's blog"
|
||||||
|
theme = "github-style"
|
||||||
|
pygmentsCodeFences = true
|
||||||
|
googleAnalytics = "UA-123456-789"
|
||||||
|
|
||||||
|
[params]
|
||||||
|
contributions = "post"
|
||||||
|
author = "MeiK"
|
||||||
|
github = "MeiK2333"
|
||||||
|
description = "In solitude, where we are least alone."
|
||||||
|
twitter = "MeiK2333"
|
||||||
|
email = "meik2333@gmail.com"
|
||||||
|
utterances = "MeiK2333/MeiK2333.github.io"
|
||||||
|
facebook = "MeiK2333"
|
||||||
|
url = "https://meik2333.com"
|
||||||
|
keywords = "blog, google analytics"
|
||||||
|
rss = true
|
||||||
|
lastmod = true
|
||||||
|
|
||||||
|
[frontmatter]
|
||||||
|
lastmod = ["lastmod", ":fileModTime", ":default"]
|
@@ -1,11 +0,0 @@
|
|||||||
{{ define "content" }}
|
|
||||||
<div class="application-main " data-commit-hovercards-enabled>
|
|
||||||
<main>
|
|
||||||
<div class="container-xl clearfix px-3 mt-4">
|
|
||||||
|
|
||||||
{{ partial "user-profile.html" . }}
|
|
||||||
|
|
||||||
{{ partial "about.html" .}}
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
{{end }}
|
|
@@ -1,39 +0,0 @@
|
|||||||
{{ $mainSections := .Site.Params.mainSections | default (slice "post") }}
|
|
||||||
{{ $section := where .Site.RegularPages "Section" "in" $mainSections }}
|
|
||||||
{{ $section_count := len $section }}
|
|
||||||
{{ $n_posts := $.Param "recent_posts_number" | default 6 }}
|
|
||||||
<div class="col-lg-9 col-md-8 col-12 float-md-left pl-md-2">
|
|
||||||
<div class="UnderlineNav width-full user-profile-nav top-0 is-placeholder"
|
|
||||||
style="visibility: hidden; display: none; height: 56px;"></div>
|
|
||||||
<div class="UnderlineNav width-full user-profile-nav js-sticky top-0"
|
|
||||||
style="position: static; top: 0px; left: 330.5px; width: 911.5px;">
|
|
||||||
<nav class="UnderlineNav-body" aria-label="User profile">
|
|
||||||
<a aria-current="page" class="UnderlineNav-item mr-0 mr-md-1 mr-lg-3 " href="{{ .Site.BaseURL }}">
|
|
||||||
Overview
|
|
||||||
</a>
|
|
||||||
<a class="UnderlineNav-item mr-0 mr-md-1 mr-lg-3 " href="{{ absURL "posts/" }}">
|
|
||||||
Posts
|
|
||||||
<span class="Counter hide-lg hide-md hide-sm">
|
|
||||||
{{ $section_count}}
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
<a class="UnderlineNav-item mr-0 mr-md-1 mr-lg-3 selected" href="{{ absURL "about/" }}">
|
|
||||||
About
|
|
||||||
</a>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="position-relative">
|
|
||||||
<div class="container-lg clearfix new-discussion-timeline experiment-repo-nav p-responsive">
|
|
||||||
<div class="repository-content ">
|
|
||||||
<div class="Box mt-3 position-relative">
|
|
||||||
<div id="readme" class="Box-body readme blob instapaper_body js-code-block-container">
|
|
||||||
<article class="markdown-body entry-content p-3 p-md-6" itemprop="text">
|
|
||||||
{{- .Content -}}
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -9,7 +9,6 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<!-- TODO: fix theme -->
|
|
||||||
<div class="Header-item Header-item--full">
|
<div class="Header-item Header-item--full">
|
||||||
<div class="Header-search">
|
<div class="Header-search">
|
||||||
<form target="_blank" action="https://www.google.com/search" accept-charset="UTF-8" method="get"
|
<form target="_blank" action="https://www.google.com/search" accept-charset="UTF-8" method="get"
|
||||||
|
@@ -19,7 +19,8 @@
|
|||||||
</svg>
|
</svg>
|
||||||
Overview
|
Overview
|
||||||
</a>
|
</a>
|
||||||
<a class="UnderlineNav-item {{ if .IsSection }} selected {{ end }}{{ if eq .Type "tags" }} selected {{ end }}" href="/post/">
|
<a class="UnderlineNav-item {{ if .IsSection }} selected {{ end }}{{ if eq .Type "tags" }} selected {{ end }}"
|
||||||
|
href="/post/">
|
||||||
<svg class="octicon octicon-repo UnderlineNav-octicon hide-sm" height="16" viewBox="0 0 16 16"
|
<svg class="octicon octicon-repo UnderlineNav-octicon hide-sm" height="16" viewBox="0 0 16 16"
|
||||||
version="1.1" width="16">
|
version="1.1" width="16">
|
||||||
<path fill-rule="evenodd"
|
<path fill-rule="evenodd"
|
||||||
|
@@ -8,10 +8,31 @@
|
|||||||
{{ $section = where .Site.RegularPages "Section" "in" (slice "post") }}
|
{{ $section = where .Site.RegularPages "Section" "in" (slice "post") }}
|
||||||
{{ $section_title = "Popular posts" }}
|
{{ $section_title = "Popular posts" }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
<!-- TODO: about me -->
|
|
||||||
<div class="flex-shrink-0 col-12 col-md-9 mb-4 mb-md-0">
|
<div class="flex-shrink-0 col-12 col-md-9 mb-4 mb-md-0">
|
||||||
<div>
|
<div>
|
||||||
<div class="position-relative">
|
<div class="position-relative">
|
||||||
|
{{ with .Site.GetPage "/readme" }}
|
||||||
|
<div class="Box mt-4">
|
||||||
|
<div class="Box-body p-4">
|
||||||
|
<div class="d-flex flex-justify-between">
|
||||||
|
<div class="text-mono text-small mb-3">
|
||||||
|
<svg class="octicon octicon-octoface" viewBox="0 0 16 16" version="1.1" width="16" height="16">
|
||||||
|
<path fill-rule="evenodd"
|
||||||
|
d="M1.326 1.973a1.2 1.2 0 011.49-.832c.387.112.977.307 1.575.602.586.291 1.243.71 1.7 1.296.022.027.042.056.061.084A13.22 13.22 0 018 3c.67 0 1.289.037 1.861.108l.051-.07c.457-.586 1.114-1.004 1.7-1.295a9.654 9.654 0 011.576-.602 1.2 1.2 0 011.49.832c.14.493.356 1.347.479 2.29.079.604.123 1.28.07 1.936.541.977.773 2.11.773 3.301C16 13 14.5 15 8 15s-8-2-8-5.5c0-1.034.238-2.128.795-3.117-.08-.712-.034-1.46.052-2.12.122-.943.34-1.797.479-2.29zM8 13.065c6 0 6.5-2 6-4.27C13.363 5.905 11.25 5 8 5s-5.363.904-6 3.796c-.5 2.27 0 4.27 6 4.27z">
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
d="M4 8a1 1 0 012 0v1a1 1 0 01-2 0V8zm2.078 2.492c-.083-.264.146-.492.422-.492h3c.276 0 .505.228.422.492C9.67 11.304 8.834 12 8 12c-.834 0-1.669-.696-1.922-1.508zM10 8a1 1 0 112 0v1a1 1 0 11-2 0V8z">
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
README<span class="text-gray-light">.md</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<article class="markdown-body entry-content container-lg f5">
|
||||||
|
{{- .Content -}}
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<div class="js-pinned-items-reorder-container">
|
<div class="js-pinned-items-reorder-container">
|
||||||
<h2 class="f4 mb-2 text-normal">
|
<h2 class="f4 mb-2 text-normal">
|
||||||
@@ -115,7 +136,6 @@
|
|||||||
Post activity
|
Post activity
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<!-- TODO: fix me, 点击时出现蓝色边框 -->
|
|
||||||
<div id="posts-activity">
|
<div id="posts-activity">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,78 +1,82 @@
|
|||||||
<!-- TODO -->
|
<div>
|
||||||
<div class="application-main " data-commit-hovercards-enabled="">
|
|
||||||
<div itemscope="" itemtype="http://schema.org/SoftwareSourceCode" class="">
|
|
||||||
<main>
|
<main>
|
||||||
<div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav pt-0 pt-lg-4 ">
|
<div class="gisthead pagehead bg-gray-light pb-0 pt-3 mb-4">
|
||||||
<div class="repohead-details-container clearfix container-lg p-responsive d-none d-lg-block">
|
<div class="px-0">
|
||||||
<div class="mb-3 d-flex">
|
<div class="mb-3 d-flex px-3 px-md-3 px-lg-5">
|
||||||
<h1 class="public css-truncate float-none flex-auto width-fit pl-0">
|
<div class="flex-auto min-width-0 width-fit mr-3">
|
||||||
<a class="avatar mr-1" href="{{ absURL "about/" }}">
|
<div class="d-flex">
|
||||||
{{ with $.Site.Params.avatar }}
|
<div class="d-none d-md-block">
|
||||||
<img src="{{ $.Site.Params.avatar }}" width="26" height="26">
|
<a class="avatar mr-2 flex-shrink-0" href="{{ .Site.BaseURL }}">
|
||||||
{{ else }}
|
<img class=" avatar-user"
|
||||||
<img src="{{ "images/avatar.png" | absURL }}" width="26" height="26">
|
src="{{ with $.Site.Params.avatar }}{{ $.Site.Params.avatar }}{{ else }}{{ "images/avatar.png" | absURL }}{{ end }}"
|
||||||
{{ end }}
|
width="32" height="32"></a>
|
||||||
</a>
|
</div>
|
||||||
<span class="author"><a href="{{ .Site.BaseURL }}">{{ .Site.Params.author }}</a></span>
|
<div class="d-flex flex-column">
|
||||||
<span class="path-divider">/</span>
|
<h1 class="break-word f3 text-normal mb-md-0 mb-1">
|
||||||
<strong itemprop="name" class="css-truncate-target" style="max-width: 410px"><a
|
<span class="author">
|
||||||
|
<a href="{{ .Site.BaseURL }}">{{ .Site.Params.author }}</a></span><span
|
||||||
|
class="path-divider">/</span><strong class="css-truncate-target mr-1" style="max-width: 410px"><a
|
||||||
href="{{ .Permalink }}">{{ .Title }}</a></strong>
|
href="{{ .Permalink }}">{{ .Title }}</a></strong>
|
||||||
|
|
||||||
<div class="d-block text-small text-gray">
|
|
||||||
Created <time-ago datetime="{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}"
|
|
||||||
class="no-wrap">
|
|
||||||
Mon, 02 Jan 2006 15:04:05 -0700</time-ago>
|
|
||||||
<span class="file-info-divider"></span>
|
|
||||||
Modified <time-ago datetime="{{ .Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}" class="no-wrap">
|
|
||||||
Mon, 02 Jan 2006 15:04:05 -0700</time-ago>
|
|
||||||
</div>
|
|
||||||
</h1>
|
</h1>
|
||||||
|
<div class="note m-0">
|
||||||
|
Created <relative-time datetime="{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}"
|
||||||
|
class="no-wrap">
|
||||||
|
{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}</relative-time>
|
||||||
|
|
||||||
|
{{ if .Site.Params.lastmod }}
|
||||||
|
<span class="file-info-divider"></span>
|
||||||
|
Modified <relative-time datetime="{{ .Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}"
|
||||||
|
class="no-wrap">
|
||||||
|
{{ .Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}</relative-time>
|
||||||
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="container-lg clearfix new-discussion-timeline experiment-repo-nav p-responsive">
|
</div>
|
||||||
<div class="repository-content ">
|
</div>
|
||||||
<div class="Box mt-3 position-relative">
|
</div>
|
||||||
<div class="Box-header py-2 d-flex flex-column flex-shrink-0 flex-md-row flex-md-items-center">
|
</div>
|
||||||
|
|
||||||
|
<div class="container-lg px-3 new-discussion-timeline">
|
||||||
|
<div class="repository-content gist-content">
|
||||||
|
<div>
|
||||||
|
<div class="js-gist-file-update-container js-task-list-container file-box">
|
||||||
|
<div id="file-pytest" class="file my-2">
|
||||||
|
<div class="file-header d-flex flex-md-items-center flex-items-start">
|
||||||
|
<div class="file-info d-flex flex-md-items-center flex-items-start flex-order-1 flex-auto">
|
||||||
<div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1 mt-2 mt-md-0">
|
<div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1 mt-2 mt-md-0">
|
||||||
{{ countwords .Content }} Words
|
{{ countwords .Content }} Words
|
||||||
<!-- <span class="file-info-divider"></span>
|
<!-- <span class="file-info-divider"></span>
|
||||||
{{ .ReadingTime }} min -->
|
{{ .ReadingTime }} min -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="file-actions flex-order-2 pt-0">
|
||||||
|
{{ with .Params.tags }}
|
||||||
|
{{ range $tag := . }}
|
||||||
|
<a class="muted-link mr-3" href="{{ relURL (print "/tags/" . | urlize) }}">
|
||||||
|
<svg class="octicon octicon-tag" viewBox="0 0 16 16" version="1.1" width="16" height="16">
|
||||||
|
<path fill-rule="evenodd"
|
||||||
|
d="M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z">
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
{{ $tag }}
|
||||||
|
</a>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="readme" class="Box-body readme blob instapaper_body js-code-block-container">
|
|
||||||
<article class="markdown-body entry-content p-3 p-md-6" itemprop="text">
|
<div class="Box-body px-5 pb-5">
|
||||||
|
<article class="markdown-body entry-content container-lg">
|
||||||
{{- .Content -}}
|
{{- .Content -}}
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
{{ if .Site.Params.utterances }}
|
|
||||||
<div class="utterances"></div>
|
|
||||||
<!-- <script src="https://utteranc.es/client.js"
|
|
||||||
repo="{{ .Site.Params.utterances }}"
|
|
||||||
issue-term="title"
|
|
||||||
theme="github-light"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
async>
|
|
||||||
</script> -->
|
|
||||||
<script>
|
|
||||||
var systemThemeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
||||||
var systemTheme = systemThemeMediaQuery.matches ? 'dark' : 'light';
|
|
||||||
var utterancesTheme = systemTheme === 'dark' ? 'github-dark' : 'github-light';
|
|
||||||
var utterancesScript = document.createElement('script');
|
|
||||||
utterancesScript.src = 'https://utteranc.es/client.js';
|
|
||||||
utterancesScript.setAttribute('repo', '{{ .Site.Params.utterances }}');
|
|
||||||
utterancesScript.setAttribute('issue-term', 'title');
|
|
||||||
utterancesScript.setAttribute('theme', utterancesTheme);
|
|
||||||
utterancesScript.setAttribute('crossorigin', 'anonymous');
|
|
||||||
utterancesScript.setAttribute('async', '');
|
|
||||||
document.querySelector('.utterances').appendChild(utterancesScript);
|
|
||||||
</script>
|
|
||||||
<noscript>Please enable JavaScript to view the comments</noscript>
|
|
||||||
{{ end }}
|
|
@@ -54,11 +54,10 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- TODO: format date -->
|
Created
|
||||||
Updated
|
<relative-time datetime="{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}" class="no-wrap"
|
||||||
<relative-time datetime="{{ .Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}" class="no-wrap"
|
title="{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}">
|
||||||
title="{{ .Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}">
|
{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}
|
||||||
{{ .Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}
|
|
||||||
</relative-time>
|
</relative-time>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -3,17 +3,30 @@
|
|||||||
<div class="gutter-condensed gutter-lg flex-column flex-md-row d-flex">
|
<div class="gutter-condensed gutter-lg flex-column flex-md-row d-flex">
|
||||||
<div class="flex-shrink-0 col-12 col-md-3 mb-4 mb-md-0">
|
<div class="flex-shrink-0 col-12 col-md-3 mb-4 mb-md-0">
|
||||||
<div class="h-card mt-md-n5">
|
<div class="h-card mt-md-n5">
|
||||||
|
<div class="user-profile-sticky-bar js-user-profile-sticky-bar d-none d-md-block" id="headerStuck">
|
||||||
|
<div class="user-profile-mini-vcard d-table">
|
||||||
|
<span class="user-profile-mini-avatar d-table-cell v-align-middle lh-condensed-ultra pr-2">
|
||||||
|
{{ with $.Site.Params.avatar }}
|
||||||
|
<img class="rounded-1 avatar-user" height="32" width="32" src="{{ $.Site.Params.avatar }}">
|
||||||
|
{{ else }}
|
||||||
|
<img class="rounded-1 avatar-user" height="32" width="32" src="{{ "images/avatar.png" | absURL }}">
|
||||||
|
{{ end }}
|
||||||
|
</span>
|
||||||
|
<span class="d-table-cell v-align-middle lh-condensed">
|
||||||
|
<strong>{{ .Site.Params.author }}</strong>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="clearfix d-flex d-md-block flex-items-center mb-4 mb-md-0">
|
<div class="clearfix d-flex d-md-block flex-items-center mb-4 mb-md-0">
|
||||||
<div class="position-relative d-inline-block col-2 col-md-12 mr-3 mr-md-0 flex-shrink-0" style="z-index:4;">
|
<div class="position-relative d-inline-block col-2 col-md-12 mr-3 mr-md-0 flex-shrink-0" style="z-index:4;">
|
||||||
<!-- TODO: 页面上移后的样式变化 -->
|
|
||||||
{{ with $.Site.Params.avatar }}
|
{{ with $.Site.Params.avatar }}
|
||||||
<a href="{{ $.Site.Params.avatar }}">
|
<a href="{{ $.Site.Params.avatar }}">
|
||||||
<img style="height:auto;" alt="Avatar" width="260" height="260"
|
<img style="height:auto;" alt="Avatar" width="260" height="260" id="headerImg"
|
||||||
class="avatar avatar-user width-full border bg-white" src="{{ $.Site.Params.avatar }}">
|
class="avatar avatar-user width-full border bg-white" src="{{ $.Site.Params.avatar }}">
|
||||||
</a>
|
</a>
|
||||||
{{ else }}
|
{{ else }}
|
||||||
<a href="{{ "images/avatar.png" | absURL }}">
|
<a href="{{ "images/avatar.png" | absURL }}">
|
||||||
<img style="height:auto;" alt="Avatar" width="260" height="260"
|
<img style="height:auto;" alt="Avatar" width="260" height="260" id="headerImg"
|
||||||
class="avatar avatar-user width-full border bg-white" src="{{ "images/avatar.png" | absURL }}">
|
class="avatar avatar-user width-full border bg-white" src="{{ "images/avatar.png" | absURL }}">
|
||||||
</a>
|
</a>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@@ -97,7 +110,7 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if .Site.Params.rss }}
|
{{ if .Site.Params.rss }}
|
||||||
<a class="avatar-group-item" href="{{ "posts/index.xml" | absURL }}">
|
<a class="avatar-group-item" href="{{ "/index.xml" | absURL }}">
|
||||||
<img alt="@rss" width="32" height="32" src="{{ "images/rss.png" | absURL }}" class="avatar">
|
<img alt="@rss" width="32" height="32" src="{{ "images/rss.png" | absURL }}" class="avatar">
|
||||||
</a>
|
</a>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
@@ -38,14 +38,13 @@ body {
|
|||||||
|
|
||||||
.Header-search {
|
.Header-search {
|
||||||
max-width: 272px;
|
max-width: 272px;
|
||||||
|
width: 100%;
|
||||||
transition: .2s ease-in-out;
|
transition: .2s ease-in-out;
|
||||||
transition-property: max-width, padding-bottom, padding-top;
|
transition-property: max-width, padding-bottom, padding-top;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Header-search:focus-within {
|
.Header-search:focus-within {
|
||||||
max-width: 544px;
|
max-width: 544px;
|
||||||
transition: .2s ease-in-out;
|
|
||||||
transition-property: max-width, padding-bottom, padding-top;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.Header-search-label {
|
.Header-search-label {
|
||||||
|
@@ -4,6 +4,7 @@ const now = new Date();
|
|||||||
let contributions;
|
let contributions;
|
||||||
|
|
||||||
(() => {
|
(() => {
|
||||||
|
setRelativeTime();
|
||||||
const dom = document.querySelector('#contributions');
|
const dom = document.querySelector('#contributions');
|
||||||
if (!dom) {
|
if (!dom) {
|
||||||
return;
|
return;
|
||||||
@@ -260,7 +261,6 @@ function svgTip(elem, count, dateStr) {
|
|||||||
} else {
|
} else {
|
||||||
svgElem.innerHTML = `<strong>No posts</strong> on ${dateFmt}`;
|
svgElem.innerHTML = `<strong>No posts</strong> on ${dateFmt}`;
|
||||||
}
|
}
|
||||||
// TODO: 计算位置
|
|
||||||
svgElem.style.top = `${rect.top - 50}px`;
|
svgElem.style.top = `${rect.top - 50}px`;
|
||||||
svgElem.style.left = `${rect.left - 78}px`;
|
svgElem.style.left = `${rect.left - 78}px`;
|
||||||
svgElem.style.display = 'block';
|
svgElem.style.display = 'block';
|
||||||
@@ -288,3 +288,46 @@ function getCoords(elem) {
|
|||||||
|
|
||||||
return { top: Math.round(top), left: Math.round(left) };
|
return { top: Math.round(top), left: Math.round(left) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function relativeTime(dateStr) {
|
||||||
|
const now = new Date();
|
||||||
|
const date = new Date(dateStr);
|
||||||
|
const diff = Math.floor((now.getTime() - date.getTime()) / 1000);
|
||||||
|
const seconds = Math.floor(diff);
|
||||||
|
const minutes = Math.floor(diff / 60);
|
||||||
|
const hours = Math.floor(diff / 60 / 60);
|
||||||
|
const days = Math.floor(diff / 60 / 60 / 24);
|
||||||
|
if (seconds < 60) {
|
||||||
|
return `${seconds} seconds ago`;
|
||||||
|
}
|
||||||
|
if (minutes < 60) {
|
||||||
|
return `${minutes} minutes ago`;
|
||||||
|
}
|
||||||
|
if (hours < 24) {
|
||||||
|
return `${hours} hours ago`;
|
||||||
|
}
|
||||||
|
if (days < 30) {
|
||||||
|
return `${days} days ago`;
|
||||||
|
}
|
||||||
|
if (date.getFullYear() == now.getFullYear()) {
|
||||||
|
return `${date.getDate()} ${months[date.getMonth()]}`;
|
||||||
|
}
|
||||||
|
return `${date.getDate()} ${months[date.getMonth()]} ${date.getFullYear()}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setRelativeTime() {
|
||||||
|
document.querySelectorAll('relative-time').forEach(elem => {
|
||||||
|
const dateStr = elem.getAttribute('datetime');
|
||||||
|
elem.innerHTML = relativeTime(dateStr);
|
||||||
|
elem.setAttribute('title', new Date(dateStr).toLocaleString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
window.onscroll = function (e) {
|
||||||
|
const headerImg = document.querySelector('#headerImg');
|
||||||
|
if (headerImg.getBoundingClientRect().bottom <= 0) {
|
||||||
|
document.querySelector('#headerStuck').classList.add('is-stuck');
|
||||||
|
} else {
|
||||||
|
document.querySelector('#headerStuck').classList.remove('is-stuck');
|
||||||
|
}
|
||||||
|
};
|
Reference in New Issue
Block a user