fix theme...
This commit is contained in:
1 parent
dea546ddfa
commit
167f6afe6a
16 files changed
+3036
-26146
No files matched your search
Generated
+2
-44
@@ -4,50 +4,7 @@
|
|||||||
<option name="autoReloadType" value="SELECTIVE" />
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="de9fa6e3-30cd-4bd9-9de2-e5d7f0390fc8" name="更改" comment="">
|
<list default="true" id="de9fa6e3-30cd-4bd9-9de2-e5d7f0390fc8" name="更改" comment="" />
|
||||||
<change afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/_config.butterfly1.yml" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/favicon.ico" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/512.png" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/algolia.svg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/comment_bg.png" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/default_cover.jpg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/favicon.ico" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/loading.gif" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/siteicon/16.png" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/siteicon/32.png" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/siteicon/apple-icon-180.png" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/siteicon/manifest-icon-192.maskable.png" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/img/siteicon/manifest-icon-512.maskable.png" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/js/anzhiyu/ai_abstract.js" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/js/anzhiyu/comment_barrage.js" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/js/anzhiyu/people.js" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/js/anzhiyu/random_friends_post.js" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/public/js/anzhiyu/right_click_menu.js" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/source/categories/index.md" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/source/tags/index.md" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/_config.anzhiyu.yml" beforeDir="false" afterPath="$PROJECT_DIR$/_config.anzhiyu.yml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/_config.butterfly.yml" beforeDir="false" afterPath="$PROJECT_DIR$/_config.butterfly.yml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/_config.yml" beforeDir="false" afterPath="$PROJECT_DIR$/_config.yml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/db.json" beforeDir="false" afterPath="$PROJECT_DIR$/db.json" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/2024/07/30/about/me/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/public/2024/07/30/about/me/index.html" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/2024/07/30/hello-world/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/public/2024/07/30/hello-world/index.html" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/404.html" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/archives/2024/07/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/public/archives/2024/07/index.html" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/archives/2024/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/public/archives/2024/index.html" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/archives/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/public/archives/index.html" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/css/index.css" beforeDir="false" afterPath="$PROJECT_DIR$/public/css/index.css" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/img/404.jpg" beforeDir="false" afterPath="$PROJECT_DIR$/public/img/404.jpg" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/img/avatar.jpg" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/img/favicon.png" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/img/friend_404.gif" beforeDir="false" afterPath="$PROJECT_DIR$/public/img/friend_404.gif" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/public/index.html" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/js/main.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/js/main.js" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/js/search/algolia.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/js/search/algolia.js" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/js/search/local-search.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/js/search/local-search.js" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/js/tw_cn.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/js/tw_cn.js" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/public/js/utils.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/js/utils.js" afterDir="false" />
|
|
||||||
</list>
|
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
@@ -164,6 +121,7 @@
|
|||||||
<workItem from="1722346590186" duration="1768000" />
|
<workItem from="1722346590186" duration="1768000" />
|
||||||
<workItem from="1722385471856" duration="1455000" />
|
<workItem from="1722385471856" duration="1455000" />
|
||||||
<workItem from="1722405691335" duration="3656000" />
|
<workItem from="1722405691335" duration="3656000" />
|
||||||
|
<workItem from="1722472583002" duration="465000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"meta":{"version":1,"warehouse":"5.0.1"},"models":{"Asset":[{"_id":"themes/anzhiyu/source/favicon.ico","path":"favicon.ico","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/css/index.styl","path":"css/index.styl","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/css/var.styl","path":"css/var.styl","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/512.png","path":"img/512.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/algolia.svg","path":"img/algolia.svg","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/404.jpg","path":"img/404.jpg","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/comment_bg.png","path":"img/comment_bg.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/default_cover.jpg","path":"img/default_cover.jpg","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/favicon.ico","path":"img/favicon.ico","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/friend_404.gif","path":"img/friend_404.gif","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/loading.gif","path":"img/loading.gif","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/main.js","path":"js/main.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/tw_cn.js","path":"js/tw_cn.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/utils.js","path":"js/utils.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/16.png","path":"img/siteicon/16.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/32.png","path":"img/siteicon/32.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/apple-icon-180.png","path":"img/siteicon/apple-icon-180.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/manifest-icon-192.maskable.png","path":"img/siteicon/manifest-icon-192.maskable.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/manifest-icon-512.maskable.png","path":"img/siteicon/manifest-icon-512.maskable.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/ai_abstract.js","path":"js/anzhiyu/ai_abstract.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/comment_barrage.js","path":"js/anzhiyu/comment_barrage.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/people.js","path":"js/anzhiyu/people.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/random_friends_post.js","path":"js/anzhiyu/random_friends_post.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/right_click_menu.js","path":"js/anzhiyu/right_click_menu.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/search/algolia.js","path":"js/search/algolia.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/search/local-search.js","path":"js/search/local-search.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/img/404.jpg","path":"img/404.jpg","modified":0,"renderable":1},{"_id":"themes/butterfly/source/css/index.styl","path":"css/index.styl","modified":0,"renderable":1},{"_id":"themes/butterfly/source/css/var.styl","path":"css/var.styl","modified":0,"renderable":1},{"_id":"themes/butterfly/source/img/avatar.jpg","path":"img/avatar.jpg","modified":0,"renderable":1},{"_id":"themes/butterfly/source/img/favicon.png","path":"img/favicon.png","modified":0,"renderable":1},{"_id":"themes/butterfly/source/img/friend_404.gif","path":"img/friend_404.gif","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/main.js","path":"js/main.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/tw_cn.js","path":"js/tw_cn.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/utils.js","path":"js/utils.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/search/algolia.js","path":"js/search/algolia.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/search/local-search.js","path":"js/search/local-search.js","modified":0,"renderable":1}],"Cache":[{"_id":"source/categories/index.md","hash":"49618dce0bee26dfc65f0de1794f01d2967cb7b8","modified":1722407843090},{"_id":"source/_posts/hello-world.md","hash":"7d98d6592de80fdcd2949bd7401cec12afd98cdf","modified":1722328112000},{"_id":"source/_posts/about/me.md","hash":"c41d1d48381a3af370c3b9bac0c54336d65681a4","modified":1722331819972},{"_id":"source/tags/index.md","hash":"1f27b735b6c7d629c8931b5bd3913bdd659f1981","modified":1722385980076},{"_id":"themes/anzhiyu/source/css/_extra/home_top/random-banner.css","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1722332549329},{"_id":"themes/anzhiyu/.gitignore","hash":"d507747699b68b0ec536b91d8be526c71ccf5c74","modified":1722332543447},{"_id":"themes/anzhiyu/LICENSE","hash":"31a3d460bb3c7d98845187c716a30db81c44b615","modified":1722332543457},{"_id":"themes/anzhiyu/README_EN.md","hash":"3b27231432adf2bd180857fc6d3de646dfd444bf","moLine truncated
|
{"meta":{"version":1,"warehouse":"5.0.1"},"models":{"Asset":[{"_id":"themes/anzhiyu/source/favicon.ico","path":"favicon.ico","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/css/index.styl","path":"css/index.styl","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/css/var.styl","path":"css/var.styl","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/512.png","path":"img/512.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/algolia.svg","path":"img/algolia.svg","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/404.jpg","path":"img/404.jpg","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/comment_bg.png","path":"img/comment_bg.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/default_cover.jpg","path":"img/default_cover.jpg","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/favicon.ico","path":"img/favicon.ico","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/friend_404.gif","path":"img/friend_404.gif","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/loading.gif","path":"img/loading.gif","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/main.js","path":"js/main.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/tw_cn.js","path":"js/tw_cn.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/utils.js","path":"js/utils.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/16.png","path":"img/siteicon/16.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/32.png","path":"img/siteicon/32.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/apple-icon-180.png","path":"img/siteicon/apple-icon-180.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/manifest-icon-192.maskable.png","path":"img/siteicon/manifest-icon-192.maskable.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/img/siteicon/manifest-icon-512.maskable.png","path":"img/siteicon/manifest-icon-512.maskable.png","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/ai_abstract.js","path":"js/anzhiyu/ai_abstract.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/comment_barrage.js","path":"js/anzhiyu/comment_barrage.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/people.js","path":"js/anzhiyu/people.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/random_friends_post.js","path":"js/anzhiyu/random_friends_post.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/anzhiyu/right_click_menu.js","path":"js/anzhiyu/right_click_menu.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/search/algolia.js","path":"js/search/algolia.js","modified":0,"renderable":1},{"_id":"themes/anzhiyu/source/js/search/local-search.js","path":"js/search/local-search.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/img/404.jpg","path":"img/404.jpg","modified":0,"renderable":1},{"_id":"themes/butterfly/source/css/index.styl","path":"css/index.styl","modified":0,"renderable":1},{"_id":"themes/butterfly/source/css/var.styl","path":"css/var.styl","modified":0,"renderable":1},{"_id":"themes/butterfly/source/img/avatar.jpg","path":"img/avatar.jpg","modified":0,"renderable":1},{"_id":"themes/butterfly/source/img/favicon.png","path":"img/favicon.png","modified":0,"renderable":1},{"_id":"themes/butterfly/source/img/friend_404.gif","path":"img/friend_404.gif","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/main.js","path":"js/main.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/tw_cn.js","path":"js/tw_cn.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/utils.js","path":"js/utils.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/search/algolia.js","path":"js/search/algolia.js","modified":0,"renderable":1},{"_id":"themes/butterfly/source/js/search/local-search.js","path":"js/search/local-search.js","modified":0,"renderable":1}],"Cache":[{"_id":"source/categories/index.md","hash":"49618dce0bee26dfc65f0de1794f01d2967cb7b8","modified":1722407843090},{"_id":"source/_posts/hello-world.md","hash":"7d98d6592de80fdcd2949bd7401cec12afd98cdf","modified":1722328112000},{"_id":"source/_posts/about/me.md","hash":"c41d1d48381a3af370c3b9bac0c54336d65681a4","modified":1722331819972},{"_id":"source/tags/index.md","hash":"1f27b735b6c7d629c8931b5bd3913bdd659f1981","modified":1722385980076},{"_id":"themes/anzhiyu/source/css/_extra/home_top/random-banner.css","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1722332549329},{"_id":"themes/anzhiyu/.gitignore","hash":"d507747699b68b0ec536b91d8be526c71ccf5c74","modified":1722332543447},{"_id":"themes/anzhiyu/LICENSE","hash":"31a3d460bb3c7d98845187c716a30db81c44b615","modified":1722332543457},{"_id":"themes/anzhiyu/README_EN.md","hash":"3b27231432adf2bd180857fc6d3de646dfd444bf","moLine truncated
|
||||||
+1
-1
@@ -54,7 +54,7 @@
|
|||||||
isHome: false,
|
isHome: false,
|
||||||
isHighlightShrink: true,
|
isHighlightShrink: true,
|
||||||
isToc: false,
|
isToc: false,
|
||||||
postUpdate: '2024-08-01 08:43:54'
|
postUpdate: '2024-08-01 08:46:20'
|
||||||
}</script><script>(win=>{
|
}</script><script>(win=>{
|
||||||
win.saveToLocal = {
|
win.saveToLocal = {
|
||||||
set: (key, value, ttl) => {
|
set: (key, value, ttl) => {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
isHome: false,
|
isHome: false,
|
||||||
isHighlightShrink: true,
|
isHighlightShrink: true,
|
||||||
isToc: false,
|
isToc: false,
|
||||||
postUpdate: '2024-08-01 08:43:54'
|
postUpdate: '2024-08-01 08:46:20'
|
||||||
}</script><script>(win=>{
|
}</script><script>(win=>{
|
||||||
win.saveToLocal = {
|
win.saveToLocal = {
|
||||||
set: (key, value, ttl) => {
|
set: (key, value, ttl) => {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
isHome: false,
|
isHome: false,
|
||||||
isHighlightShrink: true,
|
isHighlightShrink: true,
|
||||||
isToc: false,
|
isToc: false,
|
||||||
postUpdate: '2024-08-01 08:43:54'
|
postUpdate: '2024-08-01 08:46:20'
|
||||||
}</script><script>(win=>{
|
}</script><script>(win=>{
|
||||||
win.saveToLocal = {
|
win.saveToLocal = {
|
||||||
set: (key, value, ttl) => {
|
set: (key, value, ttl) => {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
isHome: false,
|
isHome: false,
|
||||||
isHighlightShrink: true,
|
isHighlightShrink: true,
|
||||||
isToc: false,
|
isToc: false,
|
||||||
postUpdate: '2024-08-01 08:43:54'
|
postUpdate: '2024-08-01 08:46:20'
|
||||||
}</script><script>(win=>{
|
}</script><script>(win=>{
|
||||||
win.saveToLocal = {
|
win.saveToLocal = {
|
||||||
set: (key, value, ttl) => {
|
set: (key, value, ttl) => {
|
||||||
|
|||||||
+1740
-22805
File diff suppressed because it is too large.
Load diff
Binary file not shown.
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 590 KiB After Width: | Height: | Size: 64 KiB |
+2
-2
@@ -54,7 +54,7 @@
|
|||||||
isHome: true,
|
isHome: true,
|
||||||
isHighlightShrink: true,
|
isHighlightShrink: true,
|
||||||
isToc: false,
|
isToc: false,
|
||||||
postUpdate: '2024-08-01 08:43:54'
|
postUpdate: '2024-08-01 08:46:20'
|
||||||
}</script><script>(win=>{
|
}</script><script>(win=>{
|
||||||
win.saveToLocal = {
|
win.saveToLocal = {
|
||||||
set: (key, value, ttl) => {
|
set: (key, value, ttl) => {
|
||||||
@@ -164,4 +164,4 @@ More info: Generating
|
|||||||
Deploy to remote sites1$ hexo deploy
|
Deploy to remote sites1$ hexo deploy
|
||||||
|
|
||||||
More info: Deployment
|
More info: Deployment
|
||||||
</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">shenjianZ</div><div class="author-info__description">一份快捷简便的文档,便于查阅编程的细节</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">2</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">0</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/shenjianz"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/shenjianZ" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:15202078626@163.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">一个简单快捷的文档知识点查阅网站</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2024/07/30/about/me/" title="About me">About me</a><time datetime="2024-07-30T09:25:52.000Z" title="发表于 2024-07-30 17:25:52">2024-07-30</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2024/07/30/hello-world/" title="Hello World">Hello World</a><time datetime="2024-07-30T08:43:29.183Z" title="发表于 2024-07-30 16:43:29">2024-07-30</time></div></div></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/07/"><span class="card-archive-list-date">七月 2024</span><span class="card-archive-list-count">2</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">2</div></div><div class="webinfo-item"><div class="item-name">已运行时间 :</div><div class="item-count" id="runtimeshow" data-publishDate="2024-07-30T16:00:00.000Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2024-08-01T00:43:54.401Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2024 By shenjianZ</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div><div class="footer_custom_text"><span>备案号:豫ICP备2023019300号</span></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js?v=4.13.0"></script><script src="/js/main.js?v=4.13.0"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.33/dist/fancybox/fancybox.umd.min.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanziLine truncated
|
</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">shenjianZ</div><div class="author-info__description">一份快捷简便的文档,便于查阅编程的细节</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">2</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">0</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/shenjianz"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/shenjianZ" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:15202078626@163.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">一个简单快捷的文档知识点查阅网站</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2024/07/30/about/me/" title="About me">About me</a><time datetime="2024-07-30T09:25:52.000Z" title="发表于 2024-07-30 17:25:52">2024-07-30</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2024/07/30/hello-world/" title="Hello World">Hello World</a><time datetime="2024-07-30T08:43:29.183Z" title="发表于 2024-07-30 16:43:29">2024-07-30</time></div></div></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/07/"><span class="card-archive-list-date">七月 2024</span><span class="card-archive-list-count">2</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">2</div></div><div class="webinfo-item"><div class="item-name">已运行时间 :</div><div class="item-count" id="runtimeshow" data-publishDate="2024-07-30T16:00:00.000Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2024-08-01T00:46:20.193Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2024 By shenjianZ</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div><div class="footer_custom_text"><span>备案号:豫ICP备2023019300号</span></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js?v=4.13.0"></script><script src="/js/main.js?v=4.13.0"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.33/dist/fancybox/fancybox.umd.min.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanziLine truncated
|
||||||
+605
-1540
File diff suppressed because it is too large.
Load diff
+119
-134
@@ -1,192 +1,177 @@
|
|||||||
window.addEventListener("load", () => {
|
window.addEventListener('load', () => {
|
||||||
const $searchMask = document.getElementById("search-mask");
|
const $searchMask = document.getElementById('search-mask')
|
||||||
const $searchDialog = document.querySelector("#algolia-search .search-dialog");
|
const $searchDialog = document.querySelector('#algolia-search .search-dialog')
|
||||||
|
|
||||||
const openSearch = () => {
|
const openSearch = () => {
|
||||||
anzhiyu.animateIn($searchMask, "to_show 0.5s");
|
const bodyStyle = document.body.style
|
||||||
$searchDialog.style.display = "block";
|
bodyStyle.width = '100%'
|
||||||
setTimeout(() => {
|
bodyStyle.overflow = 'hidden'
|
||||||
document.querySelector("#algolia-search .ais-SearchBox-input").focus();
|
btf.animateIn($searchMask, 'to_show 0.5s')
|
||||||
}, 100);
|
btf.animateIn($searchDialog, 'titleScale 0.5s')
|
||||||
|
setTimeout(() => { document.querySelector('#algolia-search .ais-SearchBox-input').focus() }, 100)
|
||||||
|
|
||||||
// shortcut: ESC
|
// shortcut: ESC
|
||||||
document.addEventListener("keydown", function f(event) {
|
document.addEventListener('keydown', function f (event) {
|
||||||
if (event.code === "Escape") {
|
if (event.code === 'Escape') {
|
||||||
closeSearch();
|
closeSearch()
|
||||||
document.removeEventListener("keydown", f);
|
document.removeEventListener('keydown', f)
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
|
||||||
fixSafariHeight();
|
fixSafariHeight()
|
||||||
window.addEventListener("resize", fixSafariHeight);
|
window.addEventListener('resize', fixSafariHeight)
|
||||||
};
|
|
||||||
|
|
||||||
// shortcut: shift+S
|
|
||||||
if (anzhiyu_keyboard) {
|
|
||||||
window.addEventListener("keydown", function (event) {
|
|
||||||
if (event.keyCode == 83 && event.shiftKey) {
|
|
||||||
console.info(selectTextNow);
|
|
||||||
if (selectTextNow) {
|
|
||||||
openSearch();
|
|
||||||
const t = document.querySelector("#algolia-search-input > div > form > input");
|
|
||||||
t.value = selectTextNow;
|
|
||||||
t.dispatchEvent(new Event("input"));
|
|
||||||
setTimeout(() => {
|
|
||||||
document.querySelector("#algolia-search-input > div > form > button.ais-SearchBox-submit").click();
|
|
||||||
}, 64);
|
|
||||||
} else {
|
|
||||||
openSearch();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const closeSearch = () => {
|
const closeSearch = () => {
|
||||||
anzhiyu.animateOut($searchDialog, "search_close .5s");
|
const bodyStyle = document.body.style
|
||||||
anzhiyu.animateOut($searchMask, "to_hide 0.5s");
|
bodyStyle.width = ''
|
||||||
window.removeEventListener("resize", fixSafariHeight);
|
bodyStyle.overflow = ''
|
||||||
};
|
btf.animateOut($searchDialog, 'search_close .5s')
|
||||||
|
btf.animateOut($searchMask, 'to_hide 0.5s')
|
||||||
|
window.removeEventListener('resize', fixSafariHeight)
|
||||||
|
}
|
||||||
|
|
||||||
// fix safari
|
// fix safari
|
||||||
const fixSafariHeight = () => {
|
const fixSafariHeight = () => {
|
||||||
if (window.innerWidth < 768) {
|
if (window.innerWidth < 768) {
|
||||||
$searchDialog.style.setProperty("--search-height", window.innerHeight + "px");
|
$searchDialog.style.setProperty('--search-height', window.innerHeight + 'px')
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
const searchClickFn = () => {
|
const searchClickFn = () => {
|
||||||
anzhiyu.addEventListenerPjax(document.querySelector("#search-button > .search"), "click", openSearch);
|
btf.addEventListenerPjax(document.querySelector('#search-button > .search'), 'click', openSearch)
|
||||||
};
|
}
|
||||||
|
|
||||||
const searchFnOnce = () => {
|
const searchFnOnce = () => {
|
||||||
$searchMask.addEventListener("click", closeSearch);
|
$searchMask.addEventListener('click', closeSearch)
|
||||||
document.querySelector("#algolia-search .search-close-button").addEventListener("click", closeSearch);
|
document.querySelector('#algolia-search .search-close-button').addEventListener('click', closeSearch)
|
||||||
};
|
}
|
||||||
|
|
||||||
const algolia = GLOBAL_CONFIG.algolia;
|
const cutContent = content => {
|
||||||
const isAlgoliaValid = algolia.appId && algolia.apiKey && algolia.indexName;
|
if (content === '') return ''
|
||||||
|
|
||||||
|
const firstOccur = content.indexOf('<mark>')
|
||||||
|
|
||||||
|
let start = firstOccur - 30
|
||||||
|
let end = firstOccur + 120
|
||||||
|
let pre = ''
|
||||||
|
let post = ''
|
||||||
|
|
||||||
|
if (start <= 0) {
|
||||||
|
start = 0
|
||||||
|
end = 140
|
||||||
|
} else {
|
||||||
|
pre = '...'
|
||||||
|
}
|
||||||
|
|
||||||
|
if (end > content.length) {
|
||||||
|
end = content.length
|
||||||
|
} else {
|
||||||
|
post = '...'
|
||||||
|
}
|
||||||
|
|
||||||
|
const matchContent = pre + content.substring(start, end) + post
|
||||||
|
return matchContent
|
||||||
|
}
|
||||||
|
|
||||||
|
const algolia = GLOBAL_CONFIG.algolia
|
||||||
|
const isAlgoliaValid = algolia.appId && algolia.apiKey && algolia.indexName
|
||||||
if (!isAlgoliaValid) {
|
if (!isAlgoliaValid) {
|
||||||
return console.error("Algolia setting is invalid!");
|
return console.error('Algolia setting is invalid!')
|
||||||
}
|
}
|
||||||
|
|
||||||
const search = instantsearch({
|
const search = instantsearch({
|
||||||
indexName: algolia.indexName,
|
indexName: algolia.indexName,
|
||||||
/* global algoliasearch */
|
/* global algoliasearch */
|
||||||
searchClient: algoliasearch(algolia.appId, algolia.apiKey),
|
searchClient: algoliasearch(algolia.appId, algolia.apiKey),
|
||||||
searchFunction(helper) {
|
searchFunction (helper) {
|
||||||
if (helper.state.query) {
|
helper.state.query && helper.search()
|
||||||
let innerLoading = '<i class="anzhiyufont anzhiyu-icon-spinner anzhiyu-spin"></i>';
|
}
|
||||||
document.getElementById("algolia-hits").innerHTML = innerLoading;
|
})
|
||||||
helper.search();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const configure = instantsearch.widgets.configure({
|
const configure = instantsearch.widgets.configure({
|
||||||
hitsPerPage: algolia.hits.per_page ?? 5,
|
hitsPerPage: 5
|
||||||
});
|
})
|
||||||
|
|
||||||
const searchBox = instantsearch.widgets.searchBox({
|
const searchBox = instantsearch.widgets.searchBox({
|
||||||
container: "#algolia-search-input",
|
container: '#algolia-search-input',
|
||||||
showReset: false,
|
showReset: false,
|
||||||
showSubmit: false,
|
showSubmit: false,
|
||||||
placeholder: algolia.languages.input_placeholder,
|
placeholder: GLOBAL_CONFIG.algolia.languages.input_placeholder,
|
||||||
showLoadingIndicator: true,
|
showLoadingIndicator: true
|
||||||
searchOnEnterKeyPressOnly: true,
|
})
|
||||||
searchAsYouType: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
const hits = instantsearch.widgets.hits({
|
const hits = instantsearch.widgets.hits({
|
||||||
container: "#algolia-hits",
|
container: '#algolia-hits',
|
||||||
templates: {
|
templates: {
|
||||||
item(data) {
|
item (data) {
|
||||||
const link = data.permalink ? data.permalink : GLOBAL_CONFIG.root + data.path;
|
const link = data.permalink ? data.permalink : (GLOBAL_CONFIG.root + data.path)
|
||||||
const result = data._highlightResult;
|
const result = data._highlightResult
|
||||||
const loadingLogo = document.querySelector("#algolia-hits .anzhiyu-spin");
|
const content = result.contentStripTruncate
|
||||||
if (loadingLogo) {
|
? cutContent(result.contentStripTruncate.value)
|
||||||
loadingLogo.style.display = "none";
|
: result.contentStrip
|
||||||
}
|
? cutContent(result.contentStrip.value)
|
||||||
setTimeout(() => {
|
: result.content
|
||||||
document.querySelector("#algolia-search .ais-SearchBox-input").focus();
|
? cutContent(result.content.value)
|
||||||
}, 200);
|
: ''
|
||||||
return `
|
return `
|
||||||
<a href="${link}" class="algolia-hit-item-link">
|
<a href="${link}" class="algolia-hit-item-link">
|
||||||
<span class="algolia-hits-item-title">${result.title.value || "no-title"}</span>
|
<span class="algolia-hits-item-title">${result.title.value || 'no-title'}</span>
|
||||||
</a>`;
|
<p class="algolia-hit-item-content">${content}</p>
|
||||||
|
</a>`
|
||||||
},
|
},
|
||||||
empty: function (data) {
|
empty: function (data) {
|
||||||
const loadingLogo = document.querySelector("#algolia-hits .anzhiyu-spin");
|
|
||||||
console.info(loadingLogo);
|
|
||||||
if (loadingLogo) {
|
|
||||||
loadingLogo.style.display = "none";
|
|
||||||
}
|
|
||||||
setTimeout(() => {
|
|
||||||
document.querySelector("#algolia-search .ais-SearchBox-input").focus();
|
|
||||||
}, 200);
|
|
||||||
return (
|
return (
|
||||||
'<div id="algolia-hits-empty">' +
|
'<div id="algolia-hits-empty">' +
|
||||||
GLOBAL_CONFIG.algolia.languages.hits_empty.replace(/\$\{query}/, data.query) +
|
GLOBAL_CONFIG.algolia.languages.hits_empty.replace(/\$\{query}/, data.query) +
|
||||||
"</div>"
|
'</div>'
|
||||||
);
|
)
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
cssClasses: {
|
})
|
||||||
item: "algolia-hit-item",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const stats = instantsearch.widgets.stats({
|
const stats = instantsearch.widgets.stats({
|
||||||
container: "#algolia-info > .algolia-stats",
|
container: '#algolia-info > .algolia-stats',
|
||||||
templates: {
|
templates: {
|
||||||
text: function (data) {
|
text: function (data) {
|
||||||
const stats = GLOBAL_CONFIG.algolia.languages.hits_stats
|
const stats = GLOBAL_CONFIG.algolia.languages.hits_stats
|
||||||
.replace(/\$\{hits}/, data.nbHits)
|
.replace(/\$\{hits}/, data.nbHits)
|
||||||
.replace(/\$\{time}/, data.processingTimeMS);
|
.replace(/\$\{time}/, data.processingTimeMS)
|
||||||
return `<hr>${stats}`;
|
return (
|
||||||
},
|
`<hr>${stats}`
|
||||||
},
|
)
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const powerBy = instantsearch.widgets.poweredBy({
|
const powerBy = instantsearch.widgets.poweredBy({
|
||||||
container: "#algolia-info > .algolia-poweredBy",
|
container: '#algolia-info > .algolia-poweredBy'
|
||||||
});
|
})
|
||||||
|
|
||||||
const pagination = instantsearch.widgets.pagination({
|
const pagination = instantsearch.widgets.pagination({
|
||||||
container: "#algolia-pagination",
|
container: '#algolia-pagination',
|
||||||
totalPages: algolia.hits.per_page ?? 5,
|
totalPages: 5,
|
||||||
templates: {
|
templates: {
|
||||||
first: '<i class="anzhiyufont anzhiyu-icon-angle-double-left"></i>',
|
first: '<i class="fas fa-angle-double-left"></i>',
|
||||||
last: '<i class="anzhiyufont anzhiyu-icon-angle-double-right"></i>',
|
last: '<i class="fas fa-angle-double-right"></i>',
|
||||||
previous: '<i class="anzhiyufont anzhiyu-icon-angle-left"></i>',
|
previous: '<i class="fas fa-angle-left"></i>',
|
||||||
next: '<i class="anzhiyufont anzhiyu-icon-angle-right"></i>',
|
next: '<i class="fas fa-angle-right"></i>'
|
||||||
},
|
}
|
||||||
scrollTo: false,
|
})
|
||||||
showFirstLast: false,
|
|
||||||
cssClasses: {
|
|
||||||
root: "pagination",
|
|
||||||
item: "pagination-item",
|
|
||||||
link: "page-number",
|
|
||||||
active: "current",
|
|
||||||
disabled: "disabled-item",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
search.addWidgets([configure, searchBox, hits, stats, powerBy, pagination]); // add the widgets to the instantsearch instance
|
search.addWidgets([configure, searchBox, hits, stats, powerBy, pagination]) // add the widgets to the instantsearch instance
|
||||||
|
|
||||||
search.start();
|
search.start()
|
||||||
|
|
||||||
searchClickFn();
|
searchClickFn()
|
||||||
searchFnOnce();
|
searchFnOnce()
|
||||||
|
|
||||||
window.addEventListener("pjax:complete", () => {
|
window.addEventListener('pjax:complete', () => {
|
||||||
!anzhiyu.isHidden($searchMask) && closeSearch();
|
!btf.isHidden($searchMask) && closeSearch()
|
||||||
searchClickFn();
|
searchClickFn()
|
||||||
});
|
})
|
||||||
|
|
||||||
window.pjax &&
|
window.pjax && search.on('render', () => {
|
||||||
search.on("render", () => {
|
window.pjax.refresh(document.getElementById('algolia-hits'))
|
||||||
window.pjax.refresh(document.getElementById("algolia-hits"));
|
})
|
||||||
});
|
})
|
||||||
});
|
|
||||||
+348
-254
@@ -1,270 +1,364 @@
|
|||||||
window.addEventListener("load", () => {
|
/**
|
||||||
let loadFlag = false;
|
* Refer to hexo-generator-searchdb
|
||||||
let dataObj = [];
|
* https://github.com/next-theme/hexo-generator-searchdb/blob/main/dist/search.js
|
||||||
const $searchMask = document.getElementById("search-mask");
|
* Modified by hexo-theme-butterfly
|
||||||
|
*/
|
||||||
|
|
||||||
|
class LocalSearch {
|
||||||
|
constructor ({
|
||||||
|
path = '',
|
||||||
|
unescape = false,
|
||||||
|
top_n_per_article = 1
|
||||||
|
}) {
|
||||||
|
this.path = path
|
||||||
|
this.unescape = unescape
|
||||||
|
this.top_n_per_article = top_n_per_article
|
||||||
|
this.isfetched = false
|
||||||
|
this.datas = null
|
||||||
|
}
|
||||||
|
|
||||||
|
getIndexByWord (words, text, caseSensitive = false) {
|
||||||
|
const index = []
|
||||||
|
const included = new Set()
|
||||||
|
|
||||||
|
if (!caseSensitive) {
|
||||||
|
text = text.toLowerCase()
|
||||||
|
}
|
||||||
|
words.forEach(word => {
|
||||||
|
if (this.unescape) {
|
||||||
|
const div = document.createElement('div')
|
||||||
|
div.innerText = word
|
||||||
|
word = div.innerHTML
|
||||||
|
}
|
||||||
|
const wordLen = word.length
|
||||||
|
if (wordLen === 0) return
|
||||||
|
let startPosition = 0
|
||||||
|
let position = -1
|
||||||
|
if (!caseSensitive) {
|
||||||
|
word = word.toLowerCase()
|
||||||
|
}
|
||||||
|
while ((position = text.indexOf(word, startPosition)) > -1) {
|
||||||
|
index.push({ position, word })
|
||||||
|
included.add(word)
|
||||||
|
startPosition = position + wordLen
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// Sort index by position of keyword
|
||||||
|
index.sort((left, right) => {
|
||||||
|
if (left.position !== right.position) {
|
||||||
|
return left.position - right.position
|
||||||
|
}
|
||||||
|
return right.word.length - left.word.length
|
||||||
|
})
|
||||||
|
return [index, included]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Merge hits into slices
|
||||||
|
mergeIntoSlice (start, end, index) {
|
||||||
|
let item = index[0]
|
||||||
|
let { position, word } = item
|
||||||
|
const hits = []
|
||||||
|
const count = new Set()
|
||||||
|
while (position + word.length <= end && index.length !== 0) {
|
||||||
|
count.add(word)
|
||||||
|
hits.push({
|
||||||
|
position,
|
||||||
|
length: word.length
|
||||||
|
})
|
||||||
|
const wordEnd = position + word.length
|
||||||
|
|
||||||
|
// Move to next position of hit
|
||||||
|
index.shift()
|
||||||
|
while (index.length !== 0) {
|
||||||
|
item = index[0]
|
||||||
|
position = item.position
|
||||||
|
word = item.word
|
||||||
|
if (wordEnd > position) {
|
||||||
|
index.shift()
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
hits,
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
count: count.size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Highlight title and content
|
||||||
|
highlightKeyword (val, slice) {
|
||||||
|
let result = ''
|
||||||
|
let index = slice.start
|
||||||
|
for (const { position, length } of slice.hits) {
|
||||||
|
result += val.substring(index, position)
|
||||||
|
index = position + length
|
||||||
|
result += `<mark class="search-keyword">${val.substr(position, length)}</mark>`
|
||||||
|
}
|
||||||
|
result += val.substring(index, slice.end)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
getResultItems (keywords) {
|
||||||
|
const resultItems = []
|
||||||
|
this.datas.forEach(({ title, content, url }) => {
|
||||||
|
// The number of different keywords included in the article.
|
||||||
|
const [indexOfTitle, keysOfTitle] = this.getIndexByWord(keywords, title)
|
||||||
|
const [indexOfContent, keysOfContent] = this.getIndexByWord(keywords, content)
|
||||||
|
const includedCount = new Set([...keysOfTitle, ...keysOfContent]).size
|
||||||
|
|
||||||
|
// Show search results
|
||||||
|
const hitCount = indexOfTitle.length + indexOfContent.length
|
||||||
|
if (hitCount === 0) return
|
||||||
|
|
||||||
|
const slicesOfTitle = []
|
||||||
|
if (indexOfTitle.length !== 0) {
|
||||||
|
slicesOfTitle.push(this.mergeIntoSlice(0, title.length, indexOfTitle))
|
||||||
|
}
|
||||||
|
|
||||||
|
let slicesOfContent = []
|
||||||
|
while (indexOfContent.length !== 0) {
|
||||||
|
const item = indexOfContent[0]
|
||||||
|
const { position } = item
|
||||||
|
// Cut out 120 characters. The maxlength of .search-input is 80.
|
||||||
|
const start = Math.max(0, position - 20)
|
||||||
|
const end = Math.min(content.length, position + 100)
|
||||||
|
slicesOfContent.push(this.mergeIntoSlice(start, end, indexOfContent))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort slices in content by included keywords' count and hits' count
|
||||||
|
slicesOfContent.sort((left, right) => {
|
||||||
|
if (left.count !== right.count) {
|
||||||
|
return right.count - left.count
|
||||||
|
} else if (left.hits.length !== right.hits.length) {
|
||||||
|
return right.hits.length - left.hits.length
|
||||||
|
}
|
||||||
|
return left.start - right.start
|
||||||
|
})
|
||||||
|
|
||||||
|
// Select top N slices in content
|
||||||
|
const upperBound = parseInt(this.top_n_per_article, 10)
|
||||||
|
if (upperBound >= 0) {
|
||||||
|
slicesOfContent = slicesOfContent.slice(0, upperBound)
|
||||||
|
}
|
||||||
|
|
||||||
|
let resultItem = ''
|
||||||
|
|
||||||
|
url = new URL(url, location.origin)
|
||||||
|
url.searchParams.append('highlight', keywords.join(' '))
|
||||||
|
|
||||||
|
if (slicesOfTitle.length !== 0) {
|
||||||
|
resultItem += `<div class="local-search-hit-item"><a href="${url.href}"><span class="search-result-title">${this.highlightKeyword(title, slicesOfTitle[0])}</span>`
|
||||||
|
} else {
|
||||||
|
resultItem += `<div class="local-search-hit-item"><a href="${url.href}"><span class="search-result-title">${title}</span>`
|
||||||
|
}
|
||||||
|
|
||||||
|
slicesOfContent.forEach(slice => {
|
||||||
|
resultItem += `<p class="search-result">${this.highlightKeyword(content, slice)}...</p></a>`
|
||||||
|
})
|
||||||
|
|
||||||
|
resultItem += '</div>'
|
||||||
|
resultItems.push({
|
||||||
|
item: resultItem,
|
||||||
|
id: resultItems.length,
|
||||||
|
hitCount,
|
||||||
|
includedCount
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return resultItems
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData () {
|
||||||
|
const isXml = !this.path.endsWith('json')
|
||||||
|
fetch(this.path)
|
||||||
|
.then(response => response.text())
|
||||||
|
.then(res => {
|
||||||
|
// Get the contents from search data
|
||||||
|
this.isfetched = true
|
||||||
|
this.datas = isXml
|
||||||
|
? [...new DOMParser().parseFromString(res, 'text/xml').querySelectorAll('entry')].map(element => ({
|
||||||
|
title: element.querySelector('title').textContent,
|
||||||
|
content: element.querySelector('content').textContent,
|
||||||
|
url: element.querySelector('url').textContent
|
||||||
|
}))
|
||||||
|
: JSON.parse(res)
|
||||||
|
// Only match articles with non-empty titles
|
||||||
|
this.datas = this.datas.filter(data => data.title).map(data => {
|
||||||
|
data.title = data.title.trim()
|
||||||
|
data.content = data.content ? data.content.trim().replace(/<[^>]+>/g, '') : ''
|
||||||
|
data.url = decodeURIComponent(data.url).replace(/\/{2,}/g, '/')
|
||||||
|
return data
|
||||||
|
})
|
||||||
|
// Remove loading animation
|
||||||
|
window.dispatchEvent(new Event('search:loaded'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Highlight by wrapping node in mark elements with the given class name
|
||||||
|
highlightText (node, slice, className) {
|
||||||
|
const val = node.nodeValue
|
||||||
|
let index = slice.start
|
||||||
|
const children = []
|
||||||
|
for (const { position, length } of slice.hits) {
|
||||||
|
const text = document.createTextNode(val.substring(index, position))
|
||||||
|
index = position + length
|
||||||
|
const mark = document.createElement('mark')
|
||||||
|
mark.className = className
|
||||||
|
mark.appendChild(document.createTextNode(val.substr(position, length)))
|
||||||
|
children.push(text, mark)
|
||||||
|
}
|
||||||
|
node.nodeValue = val.substring(index, slice.end)
|
||||||
|
children.forEach(element => {
|
||||||
|
node.parentNode.insertBefore(element, node)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Highlight the search words provided in the url in the text
|
||||||
|
highlightSearchWords (body) {
|
||||||
|
const params = new URL(location.href).searchParams.get('highlight')
|
||||||
|
const keywords = params ? params.split(' ') : []
|
||||||
|
if (!keywords.length || !body) return
|
||||||
|
const walk = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null)
|
||||||
|
const allNodes = []
|
||||||
|
while (walk.nextNode()) {
|
||||||
|
if (!walk.currentNode.parentNode.matches('button, select, textarea, .mermaid')) allNodes.push(walk.currentNode)
|
||||||
|
}
|
||||||
|
allNodes.forEach(node => {
|
||||||
|
const [indexOfNode] = this.getIndexByWord(keywords, node.nodeValue)
|
||||||
|
if (!indexOfNode.length) return
|
||||||
|
const slice = this.mergeIntoSlice(0, node.nodeValue.length, indexOfNode)
|
||||||
|
this.highlightText(node, slice, 'search-keyword')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('load', () => {
|
||||||
|
// Search
|
||||||
|
const { path, top_n_per_article, unescape, languages } = GLOBAL_CONFIG.localSearch
|
||||||
|
const localSearch = new LocalSearch({
|
||||||
|
path,
|
||||||
|
top_n_per_article,
|
||||||
|
unescape
|
||||||
|
})
|
||||||
|
|
||||||
|
const input = document.querySelector('#local-search-input input')
|
||||||
|
const statsItem = document.getElementById('local-search-stats-wrap')
|
||||||
|
const $loadingStatus = document.getElementById('loading-status')
|
||||||
|
const isXml = !path.endsWith('json')
|
||||||
|
|
||||||
|
const inputEventFunction = () => {
|
||||||
|
if (!localSearch.isfetched) return
|
||||||
|
let searchText = input.value.trim().toLowerCase()
|
||||||
|
isXml && (searchText = searchText.replace(/</g, '<').replace(/>/g, '>'))
|
||||||
|
if (searchText !== '') $loadingStatus.innerHTML = '<i class="fas fa-spinner fa-pulse"></i>'
|
||||||
|
const keywords = searchText.split(/[-\s]+/)
|
||||||
|
const container = document.getElementById('local-search-results')
|
||||||
|
let resultItems = []
|
||||||
|
if (searchText.length > 0) {
|
||||||
|
// Perform local searching
|
||||||
|
resultItems = localSearch.getResultItems(keywords)
|
||||||
|
}
|
||||||
|
if (keywords.length === 1 && keywords[0] === '') {
|
||||||
|
container.textContent = ''
|
||||||
|
statsItem.textContent = ''
|
||||||
|
} else if (resultItems.length === 0) {
|
||||||
|
container.textContent = ''
|
||||||
|
const statsDiv = document.createElement('div')
|
||||||
|
statsDiv.className = 'search-result-stats'
|
||||||
|
statsDiv.textContent = languages.hits_empty.replace(/\$\{query}/, searchText)
|
||||||
|
statsItem.innerHTML = statsDiv.outerHTML
|
||||||
|
} else {
|
||||||
|
resultItems.sort((left, right) => {
|
||||||
|
if (left.includedCount !== right.includedCount) {
|
||||||
|
return right.includedCount - left.includedCount
|
||||||
|
} else if (left.hitCount !== right.hitCount) {
|
||||||
|
return right.hitCount - left.hitCount
|
||||||
|
}
|
||||||
|
return right.id - left.id
|
||||||
|
})
|
||||||
|
|
||||||
|
const stats = languages.hits_stats.replace(/\$\{hits}/, resultItems.length)
|
||||||
|
|
||||||
|
container.innerHTML = `<div class="search-result-list">${resultItems.map(result => result.item).join('')}</div>`
|
||||||
|
statsItem.innerHTML = `<hr><div class="search-result-stats">${stats}</div>`
|
||||||
|
window.pjax && window.pjax.refresh(container)
|
||||||
|
}
|
||||||
|
|
||||||
|
$loadingStatus.textContent = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
let loadFlag = false
|
||||||
|
const $searchMask = document.getElementById('search-mask')
|
||||||
|
const $searchDialog = document.querySelector('#local-search .search-dialog')
|
||||||
|
|
||||||
|
// fix safari
|
||||||
|
const fixSafariHeight = () => {
|
||||||
|
if (window.innerWidth < 768) {
|
||||||
|
$searchDialog.style.setProperty('--search-height', window.innerHeight + 'px')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const openSearch = () => {
|
const openSearch = () => {
|
||||||
const bodyStyle = document.body.style;
|
const bodyStyle = document.body.style
|
||||||
bodyStyle.width = "100%";
|
bodyStyle.width = '100%'
|
||||||
bodyStyle.overflow = "hidden";
|
bodyStyle.overflow = 'hidden'
|
||||||
anzhiyu.animateIn($searchMask, "to_show 0.5s");
|
btf.animateIn($searchMask, 'to_show 0.5s')
|
||||||
anzhiyu.animateIn(document.querySelector("#local-search .search-dialog"), "titleScale 0.5s");
|
btf.animateIn($searchDialog, 'titleScale 0.5s')
|
||||||
setTimeout(() => {
|
setTimeout(() => { input.focus() }, 300)
|
||||||
document.querySelector("#local-search-input input").focus();
|
|
||||||
}, 100);
|
|
||||||
if (!loadFlag) {
|
if (!loadFlag) {
|
||||||
search();
|
!localSearch.isfetched && localSearch.fetchData()
|
||||||
loadFlag = true;
|
input.addEventListener('input', inputEventFunction)
|
||||||
|
loadFlag = true
|
||||||
}
|
}
|
||||||
// shortcut: ESC
|
// shortcut: ESC
|
||||||
document.addEventListener("keydown", function f(event) {
|
document.addEventListener('keydown', function f (event) {
|
||||||
if (event.code === "Escape") {
|
if (event.code === 'Escape') {
|
||||||
closeSearch();
|
closeSearch()
|
||||||
document.removeEventListener("keydown", f);
|
document.removeEventListener('keydown', f)
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
};
|
|
||||||
|
fixSafariHeight()
|
||||||
|
window.addEventListener('resize', fixSafariHeight)
|
||||||
|
}
|
||||||
|
|
||||||
const closeSearch = () => {
|
const closeSearch = () => {
|
||||||
const bodyStyle = document.body.style;
|
const bodyStyle = document.body.style
|
||||||
bodyStyle.width = "";
|
bodyStyle.width = ''
|
||||||
bodyStyle.overflow = "";
|
bodyStyle.overflow = ''
|
||||||
anzhiyu.animateOut(document.querySelector("#local-search .search-dialog"), "search_close .5s");
|
btf.animateOut($searchDialog, 'search_close .5s')
|
||||||
anzhiyu.animateOut($searchMask, "to_hide 0.5s");
|
btf.animateOut($searchMask, 'to_hide 0.5s')
|
||||||
};
|
window.removeEventListener('resize', fixSafariHeight)
|
||||||
|
}
|
||||||
|
|
||||||
const searchClickFn = () => {
|
const searchClickFn = () => {
|
||||||
document.querySelector("#search-button > .search").addEventListener("click", openSearch);
|
btf.addEventListenerPjax(document.querySelector('#search-button > .search'), 'click', openSearch)
|
||||||
document.querySelector("#menu-search").addEventListener("click", openSearch);
|
}
|
||||||
};
|
|
||||||
|
|
||||||
const searchClickFnOnce = () => {
|
const searchFnOnce = () => {
|
||||||
document.querySelector("#local-search .search-close-button").addEventListener("click", closeSearch);
|
document.querySelector('#local-search .search-close-button').addEventListener('click', closeSearch)
|
||||||
$searchMask.addEventListener("click", closeSearch);
|
$searchMask.addEventListener('click', closeSearch)
|
||||||
if (GLOBAL_CONFIG.localSearch.preload) dataObj = fetchData(GLOBAL_CONFIG.localSearch.path);
|
if (GLOBAL_CONFIG.localSearch.preload) {
|
||||||
};
|
localSearch.fetchData()
|
||||||
|
|
||||||
// check url is json or not
|
|
||||||
const isJson = url => {
|
|
||||||
const reg = /\.json$/;
|
|
||||||
return reg.test(url);
|
|
||||||
};
|
|
||||||
|
|
||||||
const fetchData = async path => {
|
|
||||||
let data = [];
|
|
||||||
const response = await fetch(path);
|
|
||||||
if (isJson(path)) {
|
|
||||||
data = await response.json();
|
|
||||||
} else {
|
|
||||||
const res = await response.text();
|
|
||||||
const t = await new window.DOMParser().parseFromString(res, "text/xml");
|
|
||||||
const a = await t;
|
|
||||||
|
|
||||||
data = [...a.querySelectorAll("entry")].map(item => {
|
|
||||||
let tagsArr = [];
|
|
||||||
if (item.querySelector("tags") && item.querySelector("tags").getElementsByTagName("tag")) {
|
|
||||||
Array.prototype.forEach.call(item.querySelector("tags").getElementsByTagName("tag"), function (item, index) {
|
|
||||||
tagsArr.push(item.textContent);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
let content = item.querySelector("content") && item.querySelector("content").textContent;
|
|
||||||
let imgReg = /<img.*?(?:>|\/>)/gi; //匹配图片中的img标签
|
|
||||||
let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i; // 匹配图片中的src
|
|
||||||
let arr = content.match(imgReg); //筛选出所有的img
|
|
||||||
|
|
||||||
let srcArr = [];
|
|
||||||
if (arr) {
|
|
||||||
for (let i = 0; i < arr.length; i++) {
|
|
||||||
let src = arr[i].match(srcReg);
|
|
||||||
// 获取图片地址
|
|
||||||
if (!src[1].indexOf("http")) srcArr.push(src[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
title: item.querySelector("title").textContent,
|
|
||||||
content: content,
|
|
||||||
url: item.querySelector("url").textContent,
|
|
||||||
tags: tagsArr,
|
|
||||||
oneImage: srcArr && srcArr[0],
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (response.ok) {
|
localSearch.highlightSearchWords(document.getElementById('article-container'))
|
||||||
const $loadDataItem = document.getElementById("loading-database");
|
}
|
||||||
$loadDataItem.nextElementSibling.style.display = "block";
|
|
||||||
$loadDataItem.remove();
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
|
|
||||||
const search = () => {
|
window.addEventListener('search:loaded', () => {
|
||||||
if (!GLOBAL_CONFIG.localSearch.preload) {
|
const $loadDataItem = document.getElementById('loading-database')
|
||||||
dataObj = fetchData(GLOBAL_CONFIG.localSearch.path);
|
$loadDataItem.nextElementSibling.style.display = 'block'
|
||||||
}
|
$loadDataItem.remove()
|
||||||
const $input = document.querySelector("#local-search-input input");
|
})
|
||||||
const $resultContent = document.getElementById("local-search-results");
|
|
||||||
const $loadingStatus = document.getElementById("loading-status");
|
|
||||||
|
|
||||||
$input.addEventListener("input", function () {
|
searchClickFn()
|
||||||
const keywords = this.value.trim().toLowerCase().split(/[\s]+/);
|
searchFnOnce()
|
||||||
if (keywords[0] !== "")
|
|
||||||
$loadingStatus.innerHTML = '<i class="anzhiyufont anzhiyu-icon-spinner anzhiyu-pulse-icon"></i>';
|
|
||||||
|
|
||||||
$resultContent.innerHTML = "";
|
|
||||||
let str = '<div class="search-result-list">';
|
|
||||||
if (keywords.length <= 0) return;
|
|
||||||
let count = 0;
|
|
||||||
// perform local searching
|
|
||||||
dataObj.then(data => {
|
|
||||||
data.forEach(data => {
|
|
||||||
let isMatch = true;
|
|
||||||
let dataTitle = data.title ? data.title.trim().toLowerCase() : "";
|
|
||||||
let dataTags = data.tags;
|
|
||||||
let oneImage = data.oneImage ?? "";
|
|
||||||
const dataContent = data.content
|
|
||||||
? data.content
|
|
||||||
.trim()
|
|
||||||
.replace(/<[^>]+>/g, "")
|
|
||||||
.toLowerCase()
|
|
||||||
: "";
|
|
||||||
const dataUrl = data.url.startsWith("/") ? data.url : GLOBAL_CONFIG.root + data.url;
|
|
||||||
let indexTitle = -1;
|
|
||||||
let indexContent = -1;
|
|
||||||
let firstOccur = -1;
|
|
||||||
// only match articles with not empty titles and contents
|
|
||||||
if (dataTitle !== "" || dataContent !== "") {
|
|
||||||
keywords.forEach((keyword, i) => {
|
|
||||||
indexTitle = dataTitle.indexOf(keyword);
|
|
||||||
indexContent = dataContent.indexOf(keyword);
|
|
||||||
if (indexTitle < 0 && indexContent < 0) {
|
|
||||||
isMatch = false;
|
|
||||||
} else {
|
|
||||||
if (indexContent < 0) {
|
|
||||||
indexContent = 0;
|
|
||||||
}
|
|
||||||
if (i === 0) {
|
|
||||||
firstOccur = indexContent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
isMatch = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// show search results
|
|
||||||
if (isMatch) {
|
|
||||||
if (firstOccur >= 0) {
|
|
||||||
// cut out 130 characters
|
|
||||||
// let start = firstOccur - 30 < 0 ? 0 : firstOccur - 30
|
|
||||||
// let end = firstOccur + 50 > dataContent.length ? dataContent.length : firstOccur + 50
|
|
||||||
let start = firstOccur - 30;
|
|
||||||
let end = firstOccur + 100;
|
|
||||||
let pre = "";
|
|
||||||
let post = "";
|
|
||||||
|
|
||||||
if (start < 0) {
|
|
||||||
start = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (start === 0) {
|
|
||||||
end = 100;
|
|
||||||
} else {
|
|
||||||
pre = "...";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (end > dataContent.length) {
|
|
||||||
end = dataContent.length;
|
|
||||||
} else {
|
|
||||||
post = "...";
|
|
||||||
}
|
|
||||||
|
|
||||||
let matchContent = dataContent.substring(start, end);
|
|
||||||
|
|
||||||
// highlight all keywords
|
|
||||||
keywords.forEach(keyword => {
|
|
||||||
const regS = new RegExp(keyword, "gi");
|
|
||||||
matchContent = matchContent.replace(regS, '<span class="search-keyword">' + keyword + "</span>");
|
|
||||||
dataTitle = dataTitle.replace(regS, '<span class="search-keyword">' + keyword + "</span>");
|
|
||||||
});
|
|
||||||
|
|
||||||
str += '<div class="local-search__hit-item">';
|
|
||||||
if (oneImage) {
|
|
||||||
str += `<div class="search-left"><img src=${oneImage} alt=${dataTitle} data-fancybox='gallery'>`;
|
|
||||||
} else {
|
|
||||||
str += '<div class="search-left" style="width:0">';
|
|
||||||
}
|
|
||||||
|
|
||||||
str += "</div>";
|
|
||||||
|
|
||||||
if (oneImage) {
|
|
||||||
str +=
|
|
||||||
'<div class="search-right"><a href="' +
|
|
||||||
dataUrl +
|
|
||||||
'" class="search-result-title">' +
|
|
||||||
dataTitle +
|
|
||||||
"</a>";
|
|
||||||
} else {
|
|
||||||
str +=
|
|
||||||
'<div class="search-right" style="width: 100%"><a href="' +
|
|
||||||
dataUrl +
|
|
||||||
'" class="search-result-title">' +
|
|
||||||
dataTitle +
|
|
||||||
"</a>";
|
|
||||||
}
|
|
||||||
|
|
||||||
count += 1;
|
|
||||||
|
|
||||||
if (dataContent !== "") {
|
|
||||||
str +=
|
|
||||||
'<p class="search-result" onclick="pjax.loadUrl(`' +
|
|
||||||
dataUrl +
|
|
||||||
'`)">' +
|
|
||||||
pre +
|
|
||||||
matchContent +
|
|
||||||
post +
|
|
||||||
"</p>";
|
|
||||||
}
|
|
||||||
if (dataTags.length) {
|
|
||||||
str += '<div class="search-result-tags">';
|
|
||||||
|
|
||||||
for (let i = 0; i < dataTags.length; i++) {
|
|
||||||
const element = dataTags[i].trim();
|
|
||||||
|
|
||||||
str +=
|
|
||||||
'<a class="tag-list" href="/tags/' +
|
|
||||||
element +
|
|
||||||
'/" data-pjax-state="" one-link-mark="yes">#' +
|
|
||||||
element +
|
|
||||||
"</a>";
|
|
||||||
}
|
|
||||||
|
|
||||||
str += "</div>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
str += "</div></div>";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (count === 0) {
|
|
||||||
str +=
|
|
||||||
'<div id="local-search__hits-empty">' +
|
|
||||||
GLOBAL_CONFIG.localSearch.languages.hits_empty.replace(/\$\{query}/, this.value.trim()) +
|
|
||||||
"</div>";
|
|
||||||
}
|
|
||||||
str += "</div>";
|
|
||||||
$resultContent.innerHTML = str;
|
|
||||||
if (keywords[0] !== "") $loadingStatus.innerHTML = "";
|
|
||||||
window.pjax && window.pjax.refresh($resultContent);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
searchClickFn();
|
|
||||||
searchClickFnOnce();
|
|
||||||
|
|
||||||
// pjax
|
// pjax
|
||||||
window.addEventListener("pjax:complete", () => {
|
window.addEventListener('pjax:complete', () => {
|
||||||
!anzhiyu.isHidden($searchMask) && closeSearch();
|
!btf.isHidden($searchMask) && closeSearch()
|
||||||
searchClickFn();
|
localSearch.highlightSearchWords(document.getElementById('article-container'))
|
||||||
});
|
searchClickFn()
|
||||||
});
|
})
|
||||||
|
})
|
||||||
+13
-21
@@ -7,7 +7,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
saveToLocal.get(targetEncodingCookie) === undefined
|
saveToLocal.get(targetEncodingCookie) === undefined
|
||||||
? defaultEncoding
|
? defaultEncoding
|
||||||
: Number(saveToLocal.get('translate-chn-cht'))
|
: Number(saveToLocal.get('translate-chn-cht'))
|
||||||
let translateButtonObject, translateRightMenuButtonObject;
|
let translateButtonObject
|
||||||
const isSnackbar = snackbarData !== undefined
|
const isSnackbar = snackbarData !== undefined
|
||||||
|
|
||||||
function setLang () {
|
function setLang () {
|
||||||
@@ -56,12 +56,12 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
currentEncoding = 1
|
currentEncoding = 1
|
||||||
targetEncoding = 2
|
targetEncoding = 2
|
||||||
translateButtonObject.textContent = msgToTraditionalChinese
|
translateButtonObject.textContent = msgToTraditionalChinese
|
||||||
isSnackbar && anzhiyu.snackbarShow(snackbarData.cht_to_chs)
|
isSnackbar && btf.snackbarShow(snackbarData.cht_to_chs)
|
||||||
} else if (targetEncoding === 2) {
|
} else if (targetEncoding === 2) {
|
||||||
currentEncoding = 2
|
currentEncoding = 2
|
||||||
targetEncoding = 1
|
targetEncoding = 1
|
||||||
translateButtonObject.textContent = msgToSimplifiedChinese
|
translateButtonObject.textContent = msgToSimplifiedChinese
|
||||||
isSnackbar && anzhiyu.snackbarShow(snackbarData.chs_to_cht)
|
isSnackbar && btf.snackbarShow(snackbarData.chs_to_cht)
|
||||||
}
|
}
|
||||||
saveToLocal.set(targetEncodingCookie, targetEncoding, 2)
|
saveToLocal.set(targetEncodingCookie, targetEncoding, 2)
|
||||||
setLang()
|
setLang()
|
||||||
@@ -97,24 +97,16 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
function translateInitialization() {
|
function translateInitialization () {
|
||||||
translateButtonObject = document.getElementById('translateLink');
|
translateButtonObject = document.getElementById('translateLink')
|
||||||
translateRightMenuButtonObject = document.getElementById('menu-translate').querySelector('span');
|
if (translateButtonObject) {
|
||||||
|
|
||||||
if (translateButtonObject || translateRightMenuButtonObject) {
|
|
||||||
if (currentEncoding !== targetEncoding) {
|
if (currentEncoding !== targetEncoding) {
|
||||||
const textContent = targetEncoding === 1 ? msgToSimplifiedChinese : msgToTraditionalChinese;
|
translateButtonObject.textContent =
|
||||||
|
targetEncoding === 1
|
||||||
if (translateButtonObject) {
|
? msgToSimplifiedChinese
|
||||||
translateButtonObject.textContent = textContent;
|
: msgToTraditionalChinese
|
||||||
}
|
setLang()
|
||||||
|
setTimeout(translateBody, translateDelay)
|
||||||
if (translateRightMenuButtonObject) {
|
|
||||||
translateRightMenuButtonObject.textContent = textContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
setLang();
|
|
||||||
setTimeout(translateBody, translateDelay);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,4 +119,4 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
|
|
||||||
translateInitialization()
|
translateInitialization()
|
||||||
document.addEventListener('pjax:complete', translateInitialization)
|
document.addEventListener('pjax:complete', translateInitialization)
|
||||||
})
|
})
|
||||||
+201
-1340
File diff suppressed because it is too large.
Load diff
@@ -153,4 +153,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
detectApple()
|
detectApple()
|
||||||
})(window)</script><meta name="generator" content="Hexo 7.3.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/avatar.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">2</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">0</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><hr class="custom-hr"/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page group" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i><span> List</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></li><li><a class="site-page child" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="not-top-img fixed" id="page-header"><nav id="nav"><span id="blog-info"><a href="/" title="QuickReference"><span class="site-name">QuickReference</span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page group" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i><span> List</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></li><li><a class="site-page child" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav></header><main class="layout" id="content-inner"><div id="page"><h1 class="page-title">tags</h1><div class="tag-cloud-list is-center"></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">shenjianZ</div><div class="author-info__description">一份快捷简便的文档,便于查阅编程的细节</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">2</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">0</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/shenjianz"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/shenjianZ" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:15202078626@163.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">一个简单快捷的文档知识点查阅网站</div></div><div class="sticky_layoLine truncated
|
})(window)</script><meta name="generator" content="Hexo 7.3.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/avatar.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">2</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">0</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><hr class="custom-hr"/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page group" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i><span> List</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></li><li><a class="site-page child" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="not-top-img fixed" id="page-header"><nav id="nav"><span id="blog-info"><a href="/" title="QuickReference"><span class="site-name">QuickReference</span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> Archives</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> Tags</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> Categories</span></a></div><div class="menus_item"><a class="site-page group" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i><span> List</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></li><li><a class="site-page child" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> About</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav></header><main class="layout" id="content-inner"><div id="page"><h1 class="page-title">tags</h1><div class="tag-cloud-list is-center"></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">shenjianZ</div><div class="author-info__description">一份快捷简便的文档,便于查阅编程的细节</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">2</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">0</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/shenjianz"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/shenjianZ" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:15202078626@163.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">一个简单快捷的文档知识点查阅网站</div></div><div class="sticky_layoLine truncated
|
||||||
Reference in new issue
Block a user