1
- # https://www.mkdocs.org/dev-guide/plugins/#events
1
+ from bs4 import BeautifulSoup
2
2
3
3
4
+ # https://www.mkdocs.org/dev-guide/plugins/#events
4
5
def on_page_markdown (markdown , page , config , files ):
5
6
page_edit_url = page .meta .get ("edit_url" )
6
7
page .edit_url = str (page_edit_url ) if page_edit_url else None
8
+
9
+
10
+ def on_page_content (html , page , config , files ):
11
+ # 修改 tags 页每个 tag 的 id 属性值
12
+ is_cn_tag_page = page .abs_url == '/leetcode/tags/'
13
+ if is_cn_tag_page :
14
+ soup = BeautifulSoup (html , "html.parser" )
15
+ h2_tags = soup .find_all ("h2" )
16
+ for tag in h2_tags :
17
+ span_tag = tag .find ("span" , class_ = "md-tag" )
18
+ if span_tag :
19
+ tag ["id" ] = span_tag .text .strip ()
20
+ # 重新排序每个 tag 下的问题列表
21
+ ul_tags = soup .find_all ("ul" )
22
+ for ul_tag in ul_tags :
23
+ li_tags = ul_tag .find_all ("li" )
24
+ li_tags .sort (key = lambda x : int (x .text .split ('.' )[0 ].strip ()))
25
+ ul_tag .clear ()
26
+ for li_tag in li_tags :
27
+ ul_tag .append (li_tag )
28
+ html = str (soup )
29
+
30
+ return html
31
+
32
+
33
+ def on_page_context (context , page , config , nav ):
34
+ # 修改每个问题顶部 tags 的跳转链接
35
+ is_cn_problem_page = (page .edit_url or '' ).endswith ('README.md' )
36
+ has_tag = 'tags' in context
37
+ if is_cn_problem_page and has_tag :
38
+ for tag in context ['tags' ]:
39
+ tag ['url' ] = f'tags/#{ tag ["name" ]} '
40
+ return context
41
+
42
+
43
+ def on_post_page (output , page , config ):
44
+ # 修改 tags 页的左侧导航链接
45
+ is_cn_tag_page = page .abs_url == '/leetcode/tags/'
46
+ if is_cn_tag_page :
47
+ soup = BeautifulSoup (output , "html.parser" )
48
+ nav_tag = soup .find ("nav" , class_ = "md-nav md-nav--secondary" )
49
+ if nav_tag :
50
+ ul_tag = nav_tag .find ("ul" , class_ = "md-nav__list" )
51
+ if ul_tag :
52
+ for li_tag in ul_tag .find_all ("li" , class_ = "md-nav__item" ):
53
+ a_tag = li_tag .find ("a" , class_ = "md-nav__link" )
54
+ if a_tag :
55
+ span_tag = a_tag .find ("span" , class_ = "md-ellipsis" )
56
+ if span_tag :
57
+ tag_name = span_tag .text .strip ()
58
+ a_tag ["href" ] = f"#{ tag_name } "
59
+ output = str (soup )
60
+ return output
0 commit comments