在Windows10上配置Hexo+Github做个人博客
一、安装wget
用于下载(可选)
wget的windows版本下载地址
根据系统及个人需要选择版本,将下载的exe
放到C:\Windows\System32
文件夹里。
二、安装nvm
(可选)
用于管理node
版本nvm
下载地址
1、配置nvm
和node
环境变量下载nvm-setup.zip
nvm
和node
环境变量①win(图标)+r
—>输入sysdm.cpl
—>高级
—>环境变量
—>用户变量path
—>新建
输入%NVM_HOME%
,继续新建
输入%NVM_SYMLINK%
②解压安装,注意安装时路径选择一个是在系统变量
—>新建—>变量名NVM_HOME
,路径D:\Programs\nvm-noinstall
(根据自己解压后放置的目录修改)—>确定后,新建—>变量名NVM_SYMLINK
,路径D:\Program Files\nodejs
(nodejs安装路径)nvm
安装路径,一个是nodejs
路径,路径不能有空格中文。
③在D:\Programs\nvm-noinstall
文件夹新建settings.txt文件,内容如下:1
2root: D:\Programs\nvm
path: D:\Programs\nodejs
④打开终端设置国内安装源
命令如下:1
2PS D:\Programs\nvm> nvm node_mirror https://npm.taobao.org/mirrors/node/
PS D:\Programs\nvm> nvm npm_mirror https://npm.taobao.org/mirrors/npm/
⑤查看可安装版本
命令如下:1
PS D:\Programs\nvm> nvm ls available
结果如图:
安装并使用16.13.1
版本:1
2
3
4
5
6PS D:\Programs\nvm> nvm install 16.13.1
PS D:\Programs\nvm> nvm list
16.13.1
PS D:\Programs\nvm> nvm use 16.13.1
Now using node v16.13.1 (64-bit)
如果不安装nvm
则需要到nodejs
官网下载安装nodejs
三、创建SSH
密钥
1、按照Github
提示,创建SSH
秘钥:
(1)命令:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34PS D:Programs\nvm> mkdir ~/.ssh
PS D:Programs\nvm> cd ~/.ssh
PS C:\Users\XXX\.ssh> ssh-keygen -t rsa -C "邮箱地址"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/用户名/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/用户名/.ssh/id_rsa.
Your public key has been saved in /home/用户名/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:0NY9YEJ+aCViuJzyv**juiZ8 邮箱地址
The key's randomart image is:
+---[RSA 2048]----+
| .o.*o++. |
| .. * B=o |
| o. o o |
| ..o+o * . |
| o*.o So . |
| . =.o. . |
| * .... . . |
| oo.o.. |
| .o= |
+----[SHA256]-----+
PS C:\Users\XXX\.ssh> ls
Directory: C:\Users\XXX\.ssh
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2020-12-13 16:22 2602 id_rsa
-a--- 2020-12-13 16:22 572 id_rsa.pub
-a--- 2020-12-25 16:30 1596 known_hosts
PS C:\Users\XXX\.ssh> cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXoLe6b+9fvDT/L8hcz***************eh+GK4vVv+1dyv9 您注册github的邮箱
(2)打开https://github.com/settings/keys
,点击New SSH key
新增 SSH KEY
,tittle
填入win10
内容如上:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXoLe6b+9fvDT/L8hcz***************eh+GK4vVv+1dyv9 您注册github的邮箱
(3)新建并配置github
仓库
①打开https://github.com/
登录后,在右上角点击+
==>New repository
==>Repository name
输入:XXX.github.io
==>Create repository
②进入新仓库,Add file
==>文件名CNAME
,内容你的域名
(域名需自己注册,没域名就直接用XXX.github.io
访问网页)。
③点击仓库右边Settins
==>网页下方pages
==>Source
选择master
(因为网页文件上传是传到master
分支)==>Custom domain
根据上面你的域名
填写。
关于域名解析在主机运营商处填写,比如WWW
或者@
等,记录值填写XXX.github.io
.
四、安装并配置git
1、安装git
下载地址【注意会自动下载】
你可以使用Git Chocolatey
包自动安装下载地址
2、在电脑上配置git
在终端输入命令:1
2PS C:\Users\XXX\.ssh> git config --global user.name "注册github的用户名"
PS C:\Users\XXX\.ssh> git config --global user.email "注册github的邮箱"
其他命令1
2
3
4
5
6
7
8
9
10
11
12PS C:\Users\XXX\.ssh> git config --global -l # 查看git配置
core.editor="D:\Program Files (x86)\Sublime Text 3\sublime_text.exe" -w
core.autocrlf=false
user.name=你设置的用户名
user.email=你github的邮箱地址
PS C:\Users\XXX\.ssh> ssh -T git@github.com # 查看与git的连接
# 输出
The authenticity of host 'github.com (52.192.72.89)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
Hi owenyk! You've successfully authenticated, but GitHub does not provide shell access.
设置和取消代理:1
2git config --global http.proxy 你的代理地址
git config --global https.proxy 你的代理地址
代理地址中http://
也可以改成sockets5://
,但是区别在于:socks5
不支持通过pubkey
免密登录github
,每次提交代码只能输入用户名和密码,http
可以支持免密登录。
取消代理:1
2git config --global --unset http.proxy
git config --global --unset https.proxy
五、安装hexo
1、安装hexo
命令:
1 | PS C:\Users\XXX\.ssh> npm install -g hexo-cli |
2、创建存放博客的文件夹
1 | PS C:\Users\XXX\.ssh> mkdir E:\WebSites\GitWeb\gitBlog |
文件夹出现1
2
3
4
5
6
7
8.
├── _config.yml #配置文件
├── package.json #应用程序数据
├── scaffolds
├── source #网站内容
| ├── _drafts #草稿
| └── _posts #文章
└── themes #主题
查询相关信息:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32xx > E:\WebSites\GitWeb\gitBlog > 16.13.2 > ♥ 15:29 hexo -V
INFO Validating config
INFO ==================================
███╗ ██╗███████╗██╗ ██╗████████╗
████╗ ██║██╔════╝╚██╗██╔╝╚══██╔══╝
██╔██╗ ██║█████╗ ╚███╔╝ ██║
██║╚██╗██║██╔══╝ ██╔██╗ ██║
██║ ╚████║███████╗██╔╝ ██╗ ██║
╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═╝
========================================
NexT version 8.11.1
Documentation: https://theme-next.js.org
========================================
hexo: 6.1.0
hexo-cli: 4.3.0
os: win32 10.0.19045
node: 16.13.2
v8: 9.4.146.24-node.14
zlib: 1.2.11
brotli: 1.0.9
ares: 1.18.1
modules: 93
nghttp2: 1.45.1
napi: 8
llhttp: 6.0.4
openssl: 1.1.1l+quic
cldr: 39.0
icu: 69.1
tz: 2021a
unicode: 13.0
ngtcp2: 0.1.0-DEV
nghttp3: 0.1.0-DEV
详见:hexo官网
六、安装next[v8.8.2]
主题
1、安装next
Hexo 5.0
或更新版本npm
安装命令:
1 | npm install hexo-theme-next |
或者进入站点根目录后利用git
命令:1
git clone https://github.com/next-theme/hexo-theme-next themes/next
详见:主题介绍NexT
和Hexo
版本的兼容性
Version | Hexo 3.0.0-beta.4或者更早版本 | Hexo 3.0.0-rc.1 ~ 3.9 | Hexo 4.0 ~ 4.2.1 | Hexo 5.0或者更新版 |
---|---|---|---|---|
NexT v0.4.5.1 or 早期 | ✅ | ✅ | ❌ Icon (2) | ❌ Icon (2) |
NexT v0.4.5.2 ~ v7.4.1 | ⚠️ Data Files (1) | ✅ | ❌ Icon (2) | ❌ Icon (2) |
NexT v7.4.2 ~ v8.1.0 | ⚠️ Data Files (1) | ✅ | ✅ | ✅ |
NexT v8.2.0 or 后期 | ⚠️ Nunjucks (3) | ⚠️ Nunjucks (3) | ⚠️ Nunjucks (3) | ✅ |
(1): Hexo 3.0.0-beta.4
或者更早版本不支持数据文件.
(2): 图标可能无法正常显示.
(3): Nunjucks
需要渲染器插件.Next
各版本的仓库
年份 | 版本 | 仓库 |
---|---|---|
2014 ~ 2017 | v5 | https://github.com/iissnan/hexo-theme-next |
2018 ~ 2019 | v6 ~ v7 | https://github.com/theme-next/hexo-theme-next |
2020 | v8 | https://github.com/next-theme/hexo-theme-next |
2、配置主题为next
(1)、复制next
配置到站点根目录并命名为_config.next.yml
,此后修改next
配置修改此文件即可。1
PS E:\WebSites\GitWeb\gitBlog> cp E:\WebSites\GitWeb\gitBlog\node_modules\hexo-theme-next\_config.yml _config.next.yml
(2)、修改站点目录下_config.yml
中主题配置,改为next
:1
2
3
4# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: next
(3)、复制next主题
到站点根目录\themes\
,此后配置修改此主题文件夹
里的文件即可。1
PS E:\WebSites\GitWeb\gitBlog> cp E:\WebSites\GitWeb\gitBlog\node_modules\hexo-theme-next\ \themes\next
七、其他简单美化配置
1、标题链接项目
打开主题配置文件_config.next.yml
,找到如下项目并修改为如下:1
2
3
4
5
6menu:
home: / || fa fa-home
about: /about/ || fa fa-user
tags: /tags/ || fa fa-tags
categories: /categories/ || fa fa-th
archives: /archives/ || fa fa-archive
然后在站点/source/
目录下新建,about
、tags
、categories
、archives
几个文件夹,里面以index.html
命名新建文件:
内容分别如下:1
2
3
4
5
6
7
8
9---
title: about
date: 2020-12-27 08:43:10
comments: false
---
## 关于我
你的内容
Email:xxxx1
2
3
4
5
6---
title: tags
date: 2020-12-27 08:47:54
type: "tags"
comments: false
---1
2
3
4
5
6---
title: categories
date: 2020-12-27 17:15:22
type: categories
comments: false
---1
2
3
4
5
6---
title: archives
date: 2020-12-27 17:15:22
type: archives
comments: false
---
另外若站点图片也存于此站点/source/
目录下,则新建pic
文件夹放入图片,做图片链接即可。
2、安装sitemap
1 | PS E:\WebSites\GitWeb\gitBlog> npm install hexo-generator-sitemap --save |
打开主题配置文件_config.next.yml
,找到如下项目并修改为如下:1
2sitemap:
path: sitemap.xml
3、安装本地搜索
1 | PS E:\WebSites\GitWeb\gitBlog> npm install hexo-generator-searchdb --saved |
打开主题配置文件_config.next.yml
,找到如下项目并修改为如下以启用本地搜索:1
2local_search:
enable: true
打开站点配置添加以下内容:1
2
3
4
5search:
path: search.xml
field: post
content: true
format: html
4、数学公式
第一步: 使用Kramed
代替Marked
hexo
默认的渲染引擎是 marked
,但是 marked
不支持 mathjax
。 kramed
是在 marked
的基础上进行修改。我们在工程目录下执行以下命令来安装 kramed
.1
2npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save
然后,更改<your-project-dir>/node_modules/hexo-renderer-kramed/lib/renderer.js
,更改:1
2
3
4
5// Change inline math rule
function formatText(text) {
// Fit kramed's rule: $$ + \1 + $$
return text.replace(/`\$(.*?)\$`/g, '$$$$$1$$$$');
}
为:1
2
3
4// Change inline math rule
function formatText(text) {
return text;
}
第二步: 停止使用 hexo-math
首先,如果你已经安装 hexo-math
, 请卸载它:1
npm uninstall hexo-math --save
然后安装 hexo-renderer-mathjax
包:1
npm install hexo-renderer-mathjax --save
第三步: 更新 Mathjax
的 CDN
链接(可选)
首先,打开<path-to-your-project>/node_modules/hexo-renderer-mathjax/mathjax.html
然后,把<script>
更改为:<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
第四步: 更改默认转义规则
因为 hexo
默认的转义规则会将一些字符进行转义,比如 _
转为 <em>
, 所以我们需要对默认的规则进行修改.
首先, 打开<path-to-your-project/node_modules/kramed/lib/rules/inline.js
,
然后,把:1
escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,
更改为:1
escape: /^\\([`*\[\]()# +\-.!_>])/,
把1
em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
更改为:1
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
第五步: 开启mathjax
在站点和主题配置_config.yml
、_config.next.yml
中开启 Mathjax
, 找到 mathjax
字段添加如下代码:1
2
3
4
5
6
7math:
# Default (false) will load mathjax / katex script on demand.
# That is it only render those page which has `mathjax: true` in front-matter.
# If you set it to true, it will load mathjax / katex script EVERY PAGE.
every_page: false # 此项关闭,则需要在有mathjax内容的页面表头添加mathjax: true即如下一步。
mathjax:
enable: true
这一步可选,在博客中开启 Mathjax
,, 添加以下内容:1
2
3
4
5
6
title: Testing Mathjax with Hexo
category: Uncategorized
date: 2017/05/03
mathjax: true
关于流程图
需安装插件:flowchart
1
npm i hexo-filter-flowchart --save
在站点根目录:\_config.yml
加入flowchart
支持:
通过以上步骤,我们就可以在 hexo
中使用 Mathjax
来书写数学公式。
5、标签云
安装支持:1
PS E:\WebSites\GitWeb\gitBlog> npm install hexo-tag-cloud --save
开启标签云:swig
用户 (Next
主题在列)
在主题文件夹找到文件 theme/next/layout/_macro/sidebar.swig
, 然后在<aside></aside>
之间添加如下代码:1
2
3
4
5
6
7
8
9
10
11
12{% if site.tags.length > 1 %}
<script type="text/javascript" charset="utf-8" src="/js/tagcloud.js"></script>
<script type="text/javascript" charset="utf-8" src="/js/tagcanvas.js"></script>
<div class="widget-wrap">
<h5 class="widget-title">Tag Cloud</h5>
<div id="myCanvasContainer" class="widget tagcloud">
<canvas width="260" height="280" id="resCanvas" style="width=100%">
{{ list_tags() }}
</canvas>
</div>
</div>
{% endif %}
在站点配置添加以下内容:1
2
3
4
5
6
7# hexo-tag-cloud
tag_cloud:
textFont: Trebuchet MS, Helvetica
textColor: '#333'
textHeight: 25
outlineColor: '#E2E1D1'
maxSpeed: 0.1
最终效果如图:
6、 添加RSS
标签
安装依赖:1
npm install hexo-generator-feed --save
打开主题配置文件_config.next.yml
,找到并增加如下项目:1
2
3social:
...
RSS: /atom.xml || fa fa-rss
打开站点配置文件,添加以下内容:1
2
3
4
5
6
7
8
9
10feed:
type: atom
path: atom.xml
limit: 20
hub:
content:
content_limit: 140
content_limit_delim: " "
order_by: -date
icon: icon.png
7、相关文章推荐
安装推荐文章的插件:1
npm install hexo-related-popular-posts --save
【Next8.13.2配置说明已更新新的插件依赖】插件地址1
2
3# 先卸载后安装
npm uninstall hexo-related-popular-posts -g --save
npm install hexo-related-posts --save-dev打开主题配置文件_config.next.yml
,找到并修改如下项目【已失效】:1
2
3
4
5
6
7
8
9
10related_posts:
enable: true
title: # Custom header, leave empty to use the default one
display_in_home: false #首页不显示
params:
maxCount: 5
#PPMixingRate: 0.0 #相关度
#isDate: false #是否显示日期
#isImage: false #是否显示配图
isExcerpt: false #是否显示摘要
根据新插件说明,配置如下:1
2
3
4related_posts:
enabled: true
title: # Custom header, leave empty to use the default one
display_in_home: false
测试有bug
,其相关推荐列表文章路径不对,会自动加上当前页面路径,造成无法访问。
【2022年11月10日更新】推荐此插件hexo-related-posts-bysk
可解决相关问题:1
npm install hexo-related-posts-bysk --save
在文件 themes/next/layout/_partials/post/post-related.njk
里,替换全部为1
2
3
4
5
6
7
8
9{% set related_post = related_posts_bysk(post, {maxCount: theme.related_posts.max_count, orderBy: theme.related_posts.order_by, order: theme.related_posts.order, excludeTags: theme.related_posts.exclude.tags, excludeCategories: theme.related_posts.exclude.categories}) %}
{% if related_post.length > 0 %}
<div class="popular-posts-header">{{ theme.related_posts.title or __('post.related_posts') }}</div>
<ul class="related-posts">
{% for rl_post in related_post %}
<li class="related-posts-item"><a href="{{ url_for(rl_post.path) }}">{{ rl_post.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
在文件 themes/next/_config.yml
里,重写 related_posts
以下的内容为1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# List related posts, written by Sukwants
# Dependencies: https://github.com/Sukwants/hexo-related-posts-bysk
related_posts:
enable: true
title: # Custom header, leave empty to use the default one
display_in_home: false
max_count: 5
order_by: 'date'
#order: 'positive'
order: 'negative'
exclude:
tags:
#- 'some tags'
categories:
#- 'some categories'
修改 enable
来打开和关闭该功能。
修改 title
来设置显示在相关文章之前的标题。如果没有设置,将使用默认标题。
修改 display_in_home
来决定是否在主页显示相关文章。
修改 max_count
来调整相关文章数量的上限。
修改 order_by
来设置相关文章的排序依据。你可以选择 'date'
,'updated'
,'title'
,'random'
。默认选择为 'date'
.
选择 order
的值,可选值为 'positive'
(升序)和 'negative'
(降序),来设置相关文章的排列顺序。默认选择为 'negative'
.
在 exclude
以下,在 tags
以下列出你不想让它参与文章相关性计算的标签,在 categories
以下列出你不想让它参与的分类。
8、阅读统计
安装阅读时长依赖:1
npm install hexo-symbols-count-time --save
打开主题配置文件_config.next.yml
,找到并增加如下项目:1
2
3
4
5
6symbols_count_time:
separated_meta: true
item_text_post: true
item_text_total: false
awl: 5 # Average Word Length
wpm: 120 # Words Per Minute(每分钟阅读词数)
打开站点配置文件_config.yml
,找到并增加如下项目:1
2
3
4
5
6
7
8symbols_count_time:
#文章内显示
symbols: true
time: true
#网页底部显示
total_symbols: true
total_time: true
wpm: 120
其他优化可参考:使用 Github 空间搭建 Hexo 技术博客——使用NexT优化博客
9、繁简转换
下载cn_tw.js
文件,或者将以下代码保存为cn_tw.js
放在路径hexo站点\themes\next\source\js
下面:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107// 来源网络,感谢作者
var defaultEncoding = 2; // 网站默认语言,1: 繁體中文, 2: 简体中文
var translateDelay = 0; //延迟时间,若不在前, 要设定延迟翻译时间, 如100表示100ms,默认为0
var cookieDomain = "https://tding.top/"; //更改为你的博客网址
var msgToTraditionalChinese = "繁體"; //此处可以更改为你想要显示的文字
var msgToSimplifiedChinese = "简体"; //同上,但两处均不建议更改
var translateButtonId = "translateLink"; //默认互换id
var currentEncoding = defaultEncoding;
var targetEncodingCookie = "targetEncoding" + cookieDomain.replace(/\./g, "");
var targetEncoding = (getCookie(targetEncodingCookie) == null ? defaultEncoding: getCookie(targetEncodingCookie));
var translateButtonObject;
function translateText(txt) {
if (txt == "" || txt == null) return "";
if (currentEncoding == 1 && targetEncoding == 2) return Simplized(txt);
else if (currentEncoding == 2 && targetEncoding == 1) return Traditionalized(txt);
else return txt
}
function translateBody(fobj) {
if (typeof(fobj) == "object") var objs = fobj.childNodes;
else var objs = document.body.childNodes;
for (var i = 0; i < objs.length; i++) {
var obj = objs.item(i);
if ("||BR|HR|TEXTAREA|".indexOf("|" + obj.tagName + "|") > 0 || obj == translateButtonObject) continue;
if (obj.title != "" && obj.title != null) obj.title = translateText(obj.title);
if (obj.alt != "" && obj.alt != null) obj.alt = translateText(obj.alt);
if (obj.tagName == "INPUT" && obj.value != "" && obj.type != "text" && obj.type != "hidden") obj.value = translateText(obj.value);
if (obj.nodeType == 3) obj.data = translateText(obj.data);
else translateBody(obj)
}
}
function translatePage() {
if (targetEncoding == 1) {
currentEncoding = 1;
targetEncoding = 2;
translateButtonObject.innerHTML = msgToTraditionalChinese;
setCookie(targetEncodingCookie, targetEncoding, 7);
translateBody()
} else if (targetEncoding == 2) {
currentEncoding = 2;
targetEncoding = 1;
translateButtonObject.innerHTML = msgToSimplifiedChinese;
setCookie(targetEncodingCookie, targetEncoding, 7);
translateBody()
}
}
function JTPYStr() {
return '万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾鼋鼌鼍鼗鼹齄齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟志制咨只里系范松没尝尝闹面准钟别闲干尽脏拼'
}
function FTPYStr() {
return '萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽黿鼂鼉鞀鼴齇齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜誌製谘隻裡係範鬆冇嚐嘗鬨麵準鐘彆閒乾儘臟拚'
}
function Traditionalized(cc) {
var str = '';
var ss = JTPYStr();
var tt = FTPYStr();
for (var i = 0; i < cc.length; i++) {
if (cc.charCodeAt(i) > 10000 && ss.indexOf(cc.charAt(i)) != -1) str += tt.charAt(ss.indexOf(cc.charAt(i)));
else str += cc.charAt(i)
}
return str
}
function Simplized(cc) {
var str = '';
var ss = JTPYStr();
var tt = FTPYStr();
for (var i = 0; i < cc.length; i++) {
if (cc.charCodeAt(i) > 10000 && tt.indexOf(cc.charAt(i)) != -1) str += ss.charAt(tt.indexOf(cc.charAt(i)));
else str += cc.charAt(i)
}
return str
}
function setCookie(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString()
} else var expires = "";
document.cookie = name + "=" + value + expires + "; path=/"
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length)
}
return null
}
function translateInitilization() {
translateButtonObject = document.getElementById(translateButtonId);
if (translateButtonObject) {
with(translateButtonObject) {
if (typeof(document.all) != "object") {
href = "javascript:translatePage();"
} else {
href = "#";
onclick = new Function("translatePage(); return false;")
}
}
if (currentEncoding != targetEncoding) {
setTimeout("translateBody()", translateDelay);
if (targetEncoding == 1) translateButtonObject.innerHTML = msgToSimplifiedChinese;
else translateButtonObject.innerHTML = msgToTraditionalChinese
}
}
}
将以下代码放入hexo站点\themes\next\layout\_partials\footer.njk
最后。1
2
3
4
5
6
7
8
9
10
11
12
13
14<div class="translate-style">
繁/简:<a id="translateLink" href="javascript:translatePage();">繁体
</a>
</div>
<script type="text/javascript" src="/js/tw_cn.js"></script>
<script type="text/javascript">
var defaultEncoding = 2;
var translateDelay = 0;
var cookieDomain = "https://kaisky.xyz/";
var msgToTraditionalChinese = "繁体";
var msgToSimplifiedChinese = "简体";
var translateButtonId = "translateLink";
translateInitilization();
</script>
10、安装waline
(重点推荐)、livere
(推荐)、utterances
(推荐)及和disqus
评论插件
(1)、安装waline
(重点推荐)评论插件【可匿名评论】
先安装支持:1
npm install @waline/hexo-next --save
部署申请地址.
大体步骤:
①、leancloud
国际版注册账号,记下id
、key
、masterksy
三个参数;
②、在github
上新建一个库;
③、根据上面部署申请地址申请账号,创建实例,连接github
仓库,在实例配置依次添加leancloud
的LEAN_ID
和LEAN_KEY
、LEAN_MASTER_KEY
三项变量和对应值;
④、重新部署实例;
⑤、记录实例的<serverURL>
.
在主题配置中添加如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14# Waline
# For more information: https://waline.js.org, https://github.com/walinejs/waline
waline:
enable: true
dark: 'body.darkmode--activated' # 输入框暗黑模式
serverURL: https://你设置的名称.vercel.app/ # Waline server address url
placeholder: Just go go # Comment box placeholder
avatar: mm # Gravatar style
pageSize: 10 # Pagination size
#lang: # Language, available values: en, zh-cn
# Warning: Do not enable both `waline.visitor` and `leancloud_visitors`.
visitor: true # Article reading statistic
comment_count: true # If false, comment count will only be displayed in post page, not in home page
requiredFields: [] # Set required fields: [nick] | [nick, mail]
【20221106
更新为@waline/hexo-next": "^3.0.1",
后配置有做修改】1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56waline:
# New! Whether enable this plugin
enable: true
dark: 'body.darkmode--activated'
# Waline server address url, you should set this to your own link
# serverURL: https://waline.vercel.app
# serverURL: https://gitblog-waline.vercel.app/
serverURL: https://wg3e9f.deta.dev/
# serverURL: https://gitblog-waline.vercel.app/
# Waline library CDN url, you can set this to your preferred CDN
libUrl: https://unpkg.com/@waline/client@v2/dist/waline.js
# Waline CSS styles CDN url, you can set this to your preferred CDN
cssUrl: https://unpkg.com/@waline/client@v2/dist/waline.css
# Custom locales
locale:
placeholder: Welcome to comment # Comment box placeholder
# If false, comment count will only be displayed in post page, not in home page
commentCount: true
# Pageviews count, Note: You should not enable both `waline.pageview` and `leancloud_visitors`.
pageview: true
# Custom emoji
emoji:
- https://unpkg.com/@waline/emojis@1.0.1/weibo
- https://unpkg.com/@waline/emojis@1.0.1/alus
- https://unpkg.com/@waline/emojis@1.0.1/bilibili
- https://unpkg.com/@waline/emojis@1.0.1/qq
- https://unpkg.com/@waline/emojis@1.0.1/tieba
- https://unpkg.com/@waline/emojis@1.0.1/tw-emoji
# Comment infomation, valid meta are nick, mail and link
meta:
- nick
- mail
- link
# Set required meta field, e.g.: [nick] | [nick, mail]
requiredMeta:
- nick
# Language, available values: en-US, zh-CN, zh-TW, pt-BR, ru-RU, jp-JP
# lang: zh-CN
# Word limit, no limit when setting to 0
# wordLimit: 0
# Whether enable login, can choose from 'enable', 'disable' and 'force'
login: enable
# comment per page
pageSize: 10
【必读】waline/hexo-next配置参考
因为Next主题
对图片添加display: block;
,避免表情包图片独占一行,在主题css
配置路径站点根目录\themes\next\source\css\_common\scaffolding\base.styl
中添加如下内容:1
2
3
4
5
6.vcontent p img {
display: inline;
}
.vpreview p img {
display: inline;
}
配置完成需登录<serverURL>/ui/register
注册管理评论。
(2)、安装livere
及utterances
(推荐)
livere
【用社交账号登录时转链接到韩国站点不稳定】和utterances
(需要github
账户登录)livere
申请livere_uid
地址,livere_uid
在代码管理
—> data-uid="这是这里的代码"
;utterances
在github
增加一个新的仓库,命名xxx仓库
修改主题配置_config.next.yml
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33# Multiple Comment System Support
comments:
# Available values: tabs | buttons
style: buttons
# Choose a comment system to be displayed by default.
# Available values: disqus | disqusjs | changyan | livere | gitalk | utterances
active: waline
# Setting `true` means remembering the comment system selected by the visitor.
storage: true
# Lazyload all comment systems.
lazyload: true
# Modify texts or order for any naves, here are some examples.
nav:
waline:
order: -3
utterances:
order: -2
livere:
text: livere
order: -1
...中间内容省略...
# LiveRe comments system
# You can get your uid from https://livere.com/insight/myCode (General web site)
livere_uid: 你申请的uid # <your_uid>
utterances:
enable: true
repo: uername/xxx仓库 # Github repository name
# Available values: pathname | url | title | og:title
issue_term: pathname
# Available values: github-light | github-dark | preferred-color-scheme | github-dark-orange | icy-dark | dark-blue | photon-dark | boxy-light
theme: preferred-color-scheme
(3)、安装disqus
评论插件【被墙不易登录】
的具体步骤参考Comment Systems介绍。
修改主题配置_config.next.yml
:1
2
3
4
5# Disqus
disqus:
enable: true
shortname: 你在disqus的设置
count: true
最终启用三个评论插件后效果如图:waline
评论:waline
评论【20221106更新后样式】:utterances
评论:livere
评论:
11、添加手动开启、关闭暗黑模式
Next8+
主题原生支持暗黑模式,但是是随着手机而自动调整,可添加手动调整按钮:
(1)、安装 hexo-next-darkmode 插件:
1 | $ npm install hexo-next-darkmode --save |
(2)、修改主题配置
打开主题配置文件,添加如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# Dark Mode
darkmode: false # 这是原生暗黑模式,选择关闭
# Darkmode JS
# For more information: https://github.com/rqh656418510/hexo-next-darkmode, https://github.com/sandoche/Darkmode.js
darkmode_js:
enable: true
bottom: '64px' # default: '32px'
right: '32px' # default: '32px' 按钮显示在右边
left: 'unset' # default: 'unset'
time: '0.5s' # default: '0.3s'
mixColor: 'transparent' # default: '#fff'
backgroundColor: 'transparent' # default: '#fff'
buttonColorDark: '#100f2c' # default: '#100f2c'
buttonColorLight: '#fff' # default: '#fff'
isActivated: false # default false
saveInCookies: true # default: true
label: '🌓' # default: ''
autoMatchOsTheme: true # default: true
libUrl: # Set custom library cdn url for Darkmode.js
(3)、自定义css
配置(可选)
模块的样式配置是站点根目录\node_modules\hexo-next-darkmode\lib\
下darkmode.css
文件,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41.darkmode--activated {
--body-bg-color: #282828;
--content-bg-color: #333;
--card-bg-color: #555;
--text-color: #ccc;
--blockquote-color: #bbb;
--link-color: #ccc;
--link-hover-color: #eee;
--brand-color: #ddd;
--brand-hover-color: #ddd;
--table-row-odd-bg-color: #282828;
--table-row-hover-bg-color: #363636;
--menu-item-bg-color: #555;
--btn-default-bg: #222;
--btn-default-color: #ccc;
--btn-default-border-color: #555;
--btn-default-hover-bg: #666;
--btn-default-hover-color: #ccc;
--btn-default-hover-border-color: #666;
--highlight-background: #282b2e;
--highlight-foreground: #a9b7c6;
--highlight-gutter-background: #34393d;
--highlight-gutter-foreground: #9ca9b6;
}
.darkmode--activated img {
opacity: 0.75;
}
.darkmode--activated img:hover {
opacity: 0.9;
}
.darkmode--activated code {
color: #69dbdc;
background: transparent;
}
button.darkmode-toggle {
z-index: 9999;
}
可根据自己情况修改。
12、 使用Pajx
实现背景音乐全局播放
安装支持:1
npm install hexo-tag-aplayer --save //aplayer播放器
打开主题文件夹\layout
文件夹找到_layout.njk
,在<head>这里添加如下内容</head>
:1
2<!--pjax:防止跳转页面音乐暂停-->
<script src="https://cdn.jsdelivr.net/npm/pjax@0.2.8/pjax.js"></script>
(1)、只用aplayer
插件:
打开主题配置
文件,设置pjax: true
,增加aplayer
配置,配置如下:1
2
3
4pjax: true
aplayer:
enable: true
然后在主题文件夹\layout\_macro\sidebar
配置中<div class="sidebar-inner>根据自己爱好在这里添加如下代码</div>
进行配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56{% if(theme.aplayer.enable) %}
<!-- require APlayer -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/aplayer/1.10.1/APlayer.min.js"></script>
<!--<script src="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js"></script>-->
<script src="https://cdn.jsdelivr.net/npm/color-thief-don@2.0.2/src/color-thief.js"></script>
<div id="aplayer" style="position:absolute;right:0;bottom:0;"></div> //style可以不设置
// 以下为aplayer配置部分
<script>
const ap = new APlayer({
container: document.getElementById('aplayer'),
mini: true,
autoplay: false, //自动播放
listFolded: true, //播放列表默认折叠
listMaxHeight: 90, //播放列表最大高度
order: 'list', //音频循环顺序, 可选值: 'list', 'random'
loop: 'all', //音频循环播放, 可选值: 'all', 'one', 'none'
theme: '#e9e9e9', //切换音频时的主题色,优先级低于audio.theme
preload: 'none', //音频预加载,可选值: 'none', 'metadata', 'auto'
mutex: true, //互斥,阻止多个播放器同时播放,当前播放器播放时暂停其他播放器
lrcType: 3, //歌词格式,可选值:3(LRC文件歌词格式),1(JS字符串歌词格式)
volume: 0.7, //默认音量,请注意播放器会记忆用户设置,用户手动设置音量后默认音量即失效
fixed: false, //吸底模式(fixed:true),迷你模式(mini:true),普通模式(注释此行或者设置fixed:false)
audio: [
{
name: '歌曲名',
artist: '演唱者',
lrc: 'lrc路径/歌曲名.lrc',
cover: '音频封面路径',
url: '音频路径'
},
{
name: '歌曲名',
artist: '演唱者',
lrc: 'lrc路径/歌曲名.lrc',
cover: '音频封面路径',
url: '音频路径'
}
]
});
//实现切换音频时,根据音频的封面图片自适应主题色
const colorThief = new ColorThief();
const setTheme = (index) => {
if (!ap.list.audios[index].theme) {
colorThief.getColorAsync(ap.list.audios[index].cover, function(color) {
ap.theme(`rgb(${color[0]}, ${color[1]}, ${color[2]})`, index);
});
}
};
setTheme(ap.list.index);
ap.on('listswitch', (data) => {
setTheme(data.index);
});
</script>
{% endif %}
以上配置参考:
Hexo + Next 主题实现全局播放背景音乐
(2)、配合MetingJS
打开主题配置
文件,设置pjax: true
,增加aplayer
配置,配置如下:1
2
3
4
5pjax: true
aplayer:
enable: true
meting: true
然后在主题文件夹\layout\_macro\sidebar
配置中<div class="sidebar-inner>根据自己爱好在这里添加如下代码</div>
进行配置【即替换(1)配置的那部分的内容】:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<!-- require APlayer -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/aplayer/1.10.1/APlayer.min.js"></script>
<!--<script src="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js"></script>-->
<script src="https://cdn.jsdelivr.net/npm/color-thief-don@2.0.2/src/color-thief.js"></script>
<!-- require MetingJS-->
<script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script>
<div id="aplayer" style="position:absolute;right:0;bottom:5;">
<meting-js
server="netease"
type="playlist"
id="641900597"
mini="true">
</meting-js>
</div>
设置在<aside><div class="sidebar-inner>放在这里</div></aside>
用网易云音乐列表
的效果如图:
具体设置可参照:
1、aplayer文档
2、MetingJS项目介绍
13、站点字体配置(可选)
(1)、站点根目录\source\_data\
新建文件variables.styl
,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14// Title Font, set it to font family you want.
$font-family-headings = Georgia, sans
// Set it to font family you want.
$font-family-base = "Microsoft YaHei", Verdana, sans-serif
// Code Font.
$code-font-family = "Noto Sans S Chinese Medium","Input Mono", "PT Mono", Consolas, Monaco, Menlo, monospace
// Font size of articles.
$font-size-base = 16px
// Font size of table and code.
$table-font-size = 15px
(2)修改主题配置
文件_config.next.yml
,修改内容如下:1
2
3
4
5
6
7
8
9
10
custom_file_path:
#head: source/_data/head.njk
#header: source/_data/header.njk
#sidebar: source/_data/sidebar.njk
#postMeta: source/_data/post-meta.njk
#postBodyEnd: source/_data/post-body-end.njk
#footer: source/_data/footer.njk
#bodyEnd: source/_data/body-end.njk
variable: source/_data/variables.styl
八、提交到github
安装支持:1
npm install hexo-deployer-git --safe
修改站点目录
下_config.yml
配置:1
2
3
4deploy:
type: git
branch: master
repo: 'https://github.com/用户名/你设置的用户名.github.io.git'
提交命令:1
2sudo hexo generate # hexo g
sudo hexo deploy # hexo d
至此,站点基本配置就完成了。
若报错:1
fatal: unsafe repository ('xxx/xxx/.deploy_git' is owned by someone else)
解决方法
忽略单个目录
哪个目录里有git
,就通过命令行添加哪个目录,多个目录,多次添加。1
2git config --global --add safe.directory D:/www/your-project
git config --global --add safe.directory D:/www/other-project
或者忽略全部目录:1
git config --global --add safe.directory "*"
九、npm
升级命令
1、升级前备份配置
*注意以下命令是基于powershell
在网站根目录
运行
(1)个人CSS配置文件
1 | # 创建备份目录 |
(2)个人布局配置文件
1 | mkdir -p ../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/next/layout/_macro |
(3)改过的模块配置
1 | mkdir -p ../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/node_modules/hexo-renderer-kramed/lib |
2、hexo
相关升级
注意修改package.json
中版本号
(1)升级nodejs
进入博客的根目录
,使用nvm
查询最新版本node
,下载最新版本,并启用该版本1
2
3
4nvm list available
nvm install lts 64
nvm use 18.12.1
Now using node v18.12.1 (64-bit)
(2)Hexo
版本升级
1 | ########### 以下为全局升级 ########### |
(3)next
主题升级
NexT
每个月都会发布新版本。请在更新前阅读更新说明。你可以通过如下命令更新 NexT
。
通过 npm
安装最新版本:1
2$ cd 站点根目录
$ npm install hexo-theme-next@latest
或者通过 git 更新到最新的 master 分支:1
2$ cd themes/next
$ git pull
升级后查询结果:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32hexo -V
INFO Validating config
INFO ==================================
███╗ ██╗███████╗██╗ ██╗████████╗
████╗ ██║██╔════╝╚██╗██╔╝╚══██╔══╝
██╔██╗ ██║█████╗ ╚███╔╝ ██║
██║╚██╗██║██╔══╝ ██╔██╗ ██║
██║ ╚████║███████╗██╔╝ ██╗ ██║
╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═╝
========================================
NexT version 8.13.2
Documentation: https://theme-next.js.org
========================================
hexo: 6.3.0
hexo-cli: 4.3.0
os: win32 10.0.19045
node: 18.12.1
v8: 10.2.154.15-node.12
uv: 1.43.0
zlib: 1.2.11
ares: 1.18.1
modules: 108
nghttp2: 1.47.0
napi: 8
llhttp: 6.0.10
openssl: 3.0.7+quic
cldr: 41.0
icu: 71.1
tz: 2022b
unicode: 14.0
ngtcp2: 0.8.1
nghttp3: 0.7.0
(3)恢复备份文件
批处理去恢复,将以下命令命名为恢复备份文件.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18@echo off
pause
copy ..\gitBlogBck\bck\20221105\themes\next\source\css\_common\scaffolding\base.styl themes\next\source\css\_common\scaffolding\base.styl /y
copy ..\gitBlogBck\bck\20221105\themes\next\source\css\_custom\darkmode.styl themes\next\source\css\_custom\ /y
copy ..\gitBlogBck\bck\20221105\themes\next\source\css\main.styl themes\next\source\css\ /y
copy ..\gitBlogBck\bck\20221105\themes\next\source\js\tw_cn.js themes\next\source\js\ /y
copy ..\gitBlogBck\bck\20221105\themes\next\layout\_macro\sidebar.njk themes\next\layout\_macro\ /y
copy ..\gitBlogBck\bck\20221105\themes\next\layout\_partials\footer.njk themes\next\layout\_partials\ /y
copy ..\gitBlogBck\bck\20221105\themes\next\layout\_scripts\vendors.njk themes\next\layout\_scripts\ /y
copy ..\gitBlogBck\bck\20221105\themes\next\layout\_layout.njk themes\next\layout\ /y
copy ..\gitBlogBck\bck\20221105\node_modules\hexo-renderer-kramed\lib\renderer.js node_modules\hexo-renderer-kramed\lib\ /y
copy ..\gitBlogBck\bck\20221105\node_modules\kramed\lib\rules\inline.js node_modules\kramed\lib\rules\ /y
@echo off
pause
或用powershell
处理,将以下命令命名为恢复备份文件.ps1
1
2
3
4
5
6
7
8
9
10
11
12Copy-Item "../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/themes/next/source/css/_common/scaffolding/base.styl" -Recurse "themes/next/source/css/_common/scaffolding/base.styl" -Force
Copy-Item "../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/themes/next/source/css/_custom/darkmode.styl" -Recurse "themes/next/source/css/_custom/" -Force
Copy-Item ../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/themes/next/source/css/main.styl -Recurse themes/next/source/css/ -Force
Copy-Item ../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/themes/next/source/js/tw_cn.js -Recurse themes/next/source/js/ -Force
Copy-Item "../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/themes/next/layout/_macro/sidebar.njk" -Recurse "themes/next/layout/_macro/" -Force
Copy-Item "../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/themes/next/layout/_partials/footer.njk" -Recurse "themes/next/layout/_partials/" -Force
Copy-Item "../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/themes/next/layout/_scripts/vendors.njk" -Recurse "themes/next/layout/_scripts/" -Force
Copy-Item "../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/themes/next/layout/_layout.njk" -Recurse themes/next/layout/ -Force
cp ../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/node_modules/hexo-renderer-kramed/lib/renderer.js -Recurse node_modules/hexo-renderer-kramed/lib/ -Force
cp ../gitBlogBck/bck/$(Get-Date -Format 'yyyyMMdd')/node_modules/kramed/lib/rules/inline.js -Recurse node_modules/kramed/lib/rules/ -Force
3、升级后出现错误处理
升级后再输入npm
命令时,出现如下错误:1
npm : File D:\Programs\nodejs\npm.ps1 cannot be loaded because running scripts is disabled on this system.
解决:
管理员运行Powershell
然后输入:1
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
其他一些错误处理可参考见在Debian10上配置Hexo+Github做个人博客
一些参考: