Skip to content

Commit cb9c21e

Browse files
author
杨凯龙
committed
调整:调整目录格式、图片引用模式
1 parent 4c8de99 commit cb9c21e

File tree

11 files changed

+264
-64
lines changed

11 files changed

+264
-64
lines changed

.idea/workspace.xml

Lines changed: 27 additions & 38 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/css/extended/blank.css

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
:root {
2+
--nav-width: 1380px;
3+
--article-width: 650px;
4+
--toc-width: 300px;
5+
}
6+
7+
.toc {
8+
margin: 0 2px 40px 2px;
9+
border: 1px solid var(--border);
10+
background: var(--entry);
11+
border-radius: var(--radius);
12+
padding: 0.4em;
13+
}
14+
15+
.toc-container.wide {
16+
position: absolute;
17+
height: 100%;
18+
border-right: 1px solid var(--border);
19+
left: calc((var(--toc-width) + var(--gap)) * -1);
20+
top: calc(var(--gap) * 2);
21+
width: var(--toc-width);
22+
}
23+
24+
.wide .toc {
25+
position: sticky;
26+
top: var(--gap);
27+
border: unset;
28+
background: unset;
29+
border-radius: unset;
30+
width: 100%;
31+
margin: 0 2px 40px 2px;
32+
}
33+
34+
.toc details summary {
35+
cursor: zoom-in;
36+
margin-inline-start: 20px;
37+
padding: 12px 0;
38+
}
39+
40+
.toc details[open] summary {
41+
font-weight: 500;
42+
}
43+
44+
.toc-container.wide .toc .inner {
45+
margin: 0;
46+
}
47+
48+
.active {
49+
font-size: 110%;
50+
font-weight: 600;
51+
}
52+
53+
.toc ul {
54+
list-style-type: circle;
55+
}
56+
57+
.toc .inner {
58+
margin: 0 0 0 20px;
59+
padding: 0px 15px 15px 20px;
60+
font-size: 16px;
61+
}
62+
63+
.toc li ul {
64+
margin-inline-start: calc(var(--gap) * 0.5);
65+
list-style-type: none;
66+
}
67+
68+
.toc li {
69+
list-style: none;
70+
font-size: 0.95rem;
71+
padding-bottom: 5px;
72+
}
73+
74+
.toc li a:hover {
75+
color: var(--secondary);
76+
}
77+
78+
img:active {
79+
transform: scale(1.35,1.35)
80+
}

content/posts/blog-test.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

content/posts/kernelDataFlow.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ categories= ["网络"]
1313

1414
大体流程如图所示:
1515

16-
![kernelDataFlow_1.png](img/kernelDataFlow_1.png)
16+
![kernelDataFlow_1.png](/img/kernelDataFlow_1.png)
1717

1818
1. 用户进程调用send方法开始发送数据,最终会调用到系统调用`__sys_sendto` 方法。在该方法中:
1919
1. 会根据传入的文件描述符查找内核中的socket对象。
@@ -46,7 +46,7 @@ categories= ["网络"]
4646

4747
大体流程如下:
4848

49-
![kernelDataFlow_2.png](img/kernelDataFlow_2.png)
49+
![kernelDataFlow_2.png](/img/kernelDataFlow_2.png)
5050

5151
当网卡收到数据以后,CPU发起一个中断,以通知CPU有数据到达。当CPU收到中断请求后,会去调用网络驱动注册的中断处理函数,触发软中断。ksoftirqd 检测到有软中断请求到达,开始轮询收包,收到后交由各级协议栈处理。当协议栈处理完并把数据放到接收队列的之后,唤醒用户进程。
5252

hugo.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ params:
2525
disableThemeToggle: false # 在页面标题旁边显示图标以更改主题
2626

2727
ShowReadingTime: true # 显示帖子阅读时间
28-
ShowShareButtons: true # 显示分享按钮添加
28+
ShowShareButtons: false # 显示分享按钮添加
2929
ShowPostNavLinks: true # 在单个帖子下添加上一篇/下一篇帖子建议
3030
ShowBreadCrumbs: true # 面包屑导航
3131
ShowCodeCopyButtons: false #显示复制代码按钮

layouts/partials/toc.html

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
{{- $headers := findRE "<h[1-6].*?>(.|\n])+?</h[1-6]>" .Content -}}
2+
{{- $has_headers := ge (len $headers) 1 -}}
3+
{{- if $has_headers -}}
4+
<aside id="toc-container" class="toc-container wide">
5+
<div class="toc">
6+
<details {{if (.Param "TocOpen") }} open{{ end }}>
7+
<summary accesskey="c" title="(Alt + C)">
8+
<span class="details">{{- i18n "toc" | default "Table of Contents" }}</span>
9+
</summary>
10+
11+
<div class="inner">
12+
{{- $largest := 6 -}}
13+
{{- range $headers -}}
14+
{{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}}
15+
{{- $headerLevel := len (seq $headerLevel) -}}
16+
{{- if lt $headerLevel $largest -}}
17+
{{- $largest = $headerLevel -}}
18+
{{- end -}}
19+
{{- end -}}
20+
21+
{{- $firstHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers 0) 1) 0)) -}}
22+
23+
{{- $.Scratch.Set "bareul" slice -}}
24+
<ul>
25+
{{- range seq (sub $firstHeaderLevel $largest) -}}
26+
<ul>
27+
{{- $.Scratch.Add "bareul" (sub (add $largest .) 1) -}}
28+
{{- end -}}
29+
{{- range $i, $header := $headers -}}
30+
{{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}}
31+
{{- $headerLevel := len (seq $headerLevel) -}}
32+
33+
{{/* get id="xyz" */}}
34+
{{- $id := index (findRE "(id=\"(.*?)\")" $header 9) 0 }}
35+
36+
{{- /* strip id="" to leave xyz, no way to get regex capturing groups in hugo */ -}}
37+
{{- $cleanedID := replace (replace $id "id=\"" "") "\"" "" }}
38+
{{- $header := replaceRE "<h[1-6].*?>((.|\n])+?)</h[1-6]>" "$1" $header -}}
39+
40+
{{- if ne $i 0 -}}
41+
{{- $prevHeaderLevel := index (findRE "[1-6]" (index $headers (sub $i 1)) 1) 0 -}}
42+
{{- $prevHeaderLevel := len (seq $prevHeaderLevel) -}}
43+
{{- if gt $headerLevel $prevHeaderLevel -}}
44+
{{- range seq $prevHeaderLevel (sub $headerLevel 1) -}}
45+
<ul>
46+
{{/* the first should not be recorded */}}
47+
{{- if ne $prevHeaderLevel . -}}
48+
{{- $.Scratch.Add "bareul" . -}}
49+
{{- end -}}
50+
{{- end -}}
51+
{{- else -}}
52+
</li>
53+
{{- if lt $headerLevel $prevHeaderLevel -}}
54+
{{- range seq (sub $prevHeaderLevel 1) -1 $headerLevel -}}
55+
{{- if in ($.Scratch.Get "bareul") . -}}
56+
</ul>
57+
{{/* manually do pop item */}}
58+
{{- $tmp := $.Scratch.Get "bareul" -}}
59+
{{- $.Scratch.Delete "bareul" -}}
60+
{{- $.Scratch.Set "bareul" slice}}
61+
{{- range seq (sub (len $tmp) 1) -}}
62+
{{- $.Scratch.Add "bareul" (index $tmp (sub . 1)) -}}
63+
{{- end -}}
64+
{{- else -}}
65+
</ul>
66+
</li>
67+
{{- end -}}
68+
{{- end -}}
69+
{{- end -}}
70+
{{- end }}
71+
<li>
72+
<a href="#{{- $cleanedID -}}" aria-label="{{- $header | plainify -}}">{{- $header | safeHTML -}}</a>
73+
{{- else }}
74+
<li>
75+
<a href="#{{- $cleanedID -}}" aria-label="{{- $header | plainify -}}">{{- $header | safeHTML -}}</a>
76+
{{- end -}}
77+
{{- end -}}
78+
<!-- {{- $firstHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers 0) 1) 0)) -}} -->
79+
{{- $firstHeaderLevel := $largest }}
80+
{{- $lastHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers (sub (len $headers) 1)) 1) 0)) }}
81+
</li>
82+
{{- range seq (sub $lastHeaderLevel $firstHeaderLevel) -}}
83+
{{- if in ($.Scratch.Get "bareul") (add . $firstHeaderLevel) }}
84+
</ul>
85+
{{- else }}
86+
</ul>
87+
</li>
88+
{{- end -}}
89+
{{- end }}
90+
</ul>
91+
</div>
92+
</details>
93+
</div>
94+
</aside>
95+
<script>
96+
let activeElement;
97+
let elements;
98+
window.addEventListener('DOMContentLoaded', function (event) {
99+
checkTocPosition();
100+
101+
elements = document.querySelectorAll('h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]');
102+
// Make the first header active
103+
activeElement = elements[0];
104+
const id = encodeURI(activeElement.getAttribute('id')).toLowerCase();
105+
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.add('active');
106+
}, false);
107+
108+
window.addEventListener('resize', function(event) {
109+
checkTocPosition();
110+
}, false);
111+
112+
window.addEventListener('scroll', () => {
113+
// Check if there is an object in the top half of the screen or keep the last item active
114+
activeElement = Array.from(elements).find((element) => {
115+
if ((getOffsetTop(element) - window.pageYOffset) > 0 &&
116+
(getOffsetTop(element) - window.pageYOffset) < window.innerHeight/2) {
117+
return element;
118+
}
119+
}) || activeElement
120+
121+
elements.forEach(element => {
122+
const id = encodeURI(element.getAttribute('id')).toLowerCase();
123+
if (element === activeElement){
124+
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.add('active');
125+
} else {
126+
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.remove('active');
127+
}
128+
})
129+
}, false);
130+
131+
const main = parseInt(getComputedStyle(document.body).getPropertyValue('--article-width'), 10);
132+
const toc = parseInt(getComputedStyle(document.body).getPropertyValue('--toc-width'), 10);
133+
const gap = parseInt(getComputedStyle(document.body).getPropertyValue('--gap'), 10);
134+
135+
function checkTocPosition() {
136+
const width = document.body.scrollWidth;
137+
138+
if (width - main - (toc * 2) - (gap * 4) > 0) {
139+
document.getElementById("toc-container").classList.add("wide");
140+
} else {
141+
document.getElementById("toc-container").classList.remove("wide");
142+
}
143+
}
144+
145+
function getOffsetTop(element) {
146+
if (!element.getClientRects().length) {
147+
return 0;
148+
}
149+
let rect = element.getBoundingClientRect();
150+
let win = element.ownerDocument.defaultView;
151+
return rect.top + win.pageYOffset;
152+
}
153+
</script>
154+
{{- end }}

0 commit comments

Comments
 (0)