From 8c2a5fc7a4402c2ca58a7180ab4b9990cb55c8a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=97=E6=B1=9F?= Date: Tue, 7 Nov 2023 16:50:43 +0800 Subject: [PATCH] Site updated: 2023-11-07 16:50:43 --- .../index.html" | 371 +- .../index.html" | 432 +- .../index.html" | 359 +- 2022/12/14/pytorch/index.html | 387 +- archives/2022/10/index.html | 305 +- archives/2022/11/index.html | 285 +- archives/2022/12/index.html | 285 +- archives/2022/index.html | 345 +- archives/index.html | 345 +- categories/index.html | 293 +- .../\346\204\237\346\202\237/index.html" | 292 +- .../\350\257\273\344\271\246/index.html" | 292 +- css/index.css | 6142 +++++++++++++++++ css/main.css | 2695 -------- css/noscript.css | 34 - css/var.css | 0 images/apple-touch-icon-next.png | Bin 1544 -> 0 bytes images/avatar.gif | Bin 1785 -> 0 bytes images/baiyexing.jpg | Bin 23478 -> 0 bytes images/favicon-16x16-next.png | Bin 435 -> 0 bytes images/favicon-32x32-next.png | Bin 640 -> 0 bytes images/logo-algolia-nebula-blue-full.svg | 1 - images/logo.svg | 1 - img/404.jpg | Bin 0 -> 16393 bytes img/favicon.png | Bin 0 -> 323 bytes img/friend_404.gif | Bin 0 -> 65097 bytes index.html | 626 +- js/bookmark.js | 56 - js/comments-buttons.js | 25 - js/comments.js | 21 - js/config.js | 66 - js/main.js | 879 +++ js/motion.js | 125 - js/next-boot.js | 75 - js/pjax.js | 34 - js/schedule.js | 138 - js/schemes/muse.js | 60 - js/search/algolia.js | 177 + js/search/local-search.js | 364 + js/third-party/analytics/baidu-analytics.js | 7 - js/third-party/analytics/google-analytics.js | 35 - js/third-party/analytics/growingio.js | 10 - js/third-party/chat/chatra.js | 19 - js/third-party/chat/gitter.js | 5 - js/third-party/chat/tidio.js | 10 - js/third-party/comments/changyan.js | 39 - js/third-party/comments/disqus.js | 41 - js/third-party/comments/disqusjs.js | 18 - js/third-party/comments/gitalk.js | 24 - js/third-party/comments/isso.js | 15 - js/third-party/comments/livere.js | 19 - js/third-party/comments/utterances.js | 17 - js/third-party/fancybox.js | 38 - js/third-party/math/katex.js | 7 - js/third-party/math/mathjax.js | 36 - js/third-party/pace.js | 7 - js/third-party/quicklink.js | 37 - js/third-party/rating.js | 22 - js/third-party/search/algolia-search.js | 130 - js/third-party/search/local-search.js | 99 - js/third-party/statistics/firestore.js | 64 - js/third-party/statistics/lean-analytics.js | 102 - js/third-party/tags/mermaid.js | 32 - js/third-party/tags/pdf.js | 23 - js/tw_cn.js | 122 + js/utils.js | 617 +- tags/index.html | 293 +- .../index.html" | 292 +- "tags/\346\200\273\347\273\223/index.html" | 292 +- "tags/\347\254\224\350\256\260/index.html" | 292 +- .../index.html" | 292 +- 71 files changed, 8235 insertions(+), 10331 deletions(-) create mode 100644 css/index.css delete mode 100644 css/main.css delete mode 100644 css/noscript.css create mode 100644 css/var.css delete mode 100644 images/apple-touch-icon-next.png delete mode 100644 images/avatar.gif delete mode 100644 images/baiyexing.jpg delete mode 100644 images/favicon-16x16-next.png delete mode 100644 images/favicon-32x32-next.png delete mode 100644 images/logo-algolia-nebula-blue-full.svg delete mode 100644 images/logo.svg create mode 100644 img/404.jpg create mode 100644 img/favicon.png create mode 100644 img/friend_404.gif delete mode 100644 js/bookmark.js delete mode 100644 js/comments-buttons.js delete mode 100644 js/comments.js delete mode 100644 js/config.js create mode 100644 js/main.js delete mode 100644 js/motion.js delete mode 100644 js/next-boot.js delete mode 100644 js/pjax.js delete mode 100644 js/schedule.js delete mode 100644 js/schemes/muse.js create mode 100644 js/search/algolia.js create mode 100644 js/search/local-search.js delete mode 100644 js/third-party/analytics/baidu-analytics.js delete mode 100644 js/third-party/analytics/google-analytics.js delete mode 100644 js/third-party/analytics/growingio.js delete mode 100644 js/third-party/chat/chatra.js delete mode 100644 js/third-party/chat/gitter.js delete mode 100644 js/third-party/chat/tidio.js delete mode 100644 js/third-party/comments/changyan.js delete mode 100644 js/third-party/comments/disqus.js delete mode 100644 js/third-party/comments/disqusjs.js delete mode 100644 js/third-party/comments/gitalk.js delete mode 100644 js/third-party/comments/isso.js delete mode 100644 js/third-party/comments/livere.js delete mode 100644 js/third-party/comments/utterances.js delete mode 100644 js/third-party/fancybox.js delete mode 100644 js/third-party/math/katex.js delete mode 100644 js/third-party/math/mathjax.js delete mode 100644 js/third-party/pace.js delete mode 100644 js/third-party/quicklink.js delete mode 100644 js/third-party/rating.js delete mode 100644 js/third-party/search/algolia-search.js delete mode 100644 js/third-party/search/local-search.js delete mode 100644 js/third-party/statistics/firestore.js delete mode 100644 js/third-party/statistics/lean-analytics.js delete mode 100644 js/third-party/tags/mermaid.js delete mode 100644 js/third-party/tags/pdf.js create mode 100644 js/tw_cn.js diff --git "a/2022/10/14/\346\265\205\345\260\235\350\276\204\346\255\242/index.html" "b/2022/10/14/\346\265\205\345\260\235\350\276\204\346\255\242/index.html" index 0726489..f54ab7a 100644 --- "a/2022/10/14/\346\265\205\345\260\235\350\276\204\346\255\242/index.html" +++ "b/2022/10/14/\346\265\205\345\260\235\350\276\204\346\255\242/index.html" @@ -1,341 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -浅尝辄止 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
+extends includes/layout.pug + +block content + #post + if top_img === false + include includes/header/post-info.pug + + article#article-container.post-content!=page.content + include includes/post/post-copyright.pug + .tag_share + if (theme.post_meta.post.tags) + .post-meta__tag-list + each item, index in page.tags.data + a(href=url_for(item.path)).post-meta__tags #[=item.name] + include includes/third-party/share/index.pug - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
- - - -
- - - - - - - -
-

- 浅尝辄止 -

- - -
- - - - -
-

​ 想正儿八经的好好做个个人博客,想分享一些所学所思的专业知识,尽量有点深度的,也当做下笔记,再分享一些读书、生活感悟等。这是第一篇,先说一下学习为什么不能浅尝辄止,平时要注意一下深度。

-

​ 最近在秋招,也没有怎么去投简历,刚刚面了下奈雪,别看是个做奶茶的,视觉算法工资开的很高,年薪40-50w,聊过后是知道视觉方向是面向员工提醒的,比如工作台脏了需要打扫。当时问了很多细节的东西,比如在分类任务上MSEloss和交叉熵的区别,除了梯度下降算法还用过哪些,我寻思除了这个也没用过哪些啊?然后他举个例子说adam有用过吗,我顿时懵了,又把优化器和梯度下降给忘了,之前实习面试就问过,出现这种问题主要有两个原因,一是平时挖掘的不深,二是不能好好住,也是理解不够透,要不为啥记不住。然后问我怎么解决局部最优的问题,我往学习率上答,继续追问学习率大小的影响,我错误的说大的时候有梯度爆炸问题,一下子印象就不好了,其实这些细节问题,刚开始学习深度学习的时候就弄明白了,但是后来用不上给忘记了。反正再学习什么的时候要弄透彻一些,要记录一下

-

​ 除了学习上的,还有平时一些知识积累,记得十一国庆回家,我发小问我这疫情到底是由什么引起的,我又摸棱两可,到底是美国实验室病毒还是自然现象,又问马云为什么去国外,之前也听说过一些说法,但还是记不清了。这些问题多数是因为了解的不透彻,不能形成一个逻辑,导致记不住。为什么说不能浅尝辄止呢,平时生活中听别人聊天,一些话题,都知道给结论,有的知道多一点的能多说一下相关知识,要是再深问一下为什么,就不知道了。也不知道这样是好是坏,好的是不用花太多时间去了解,就能知道个结论,不好的是,浅显的东西大家都知道,咱们就没什么可聊的了,不如自己深挖一些,这样大家聊到不懂的时候,你可以继续再把话题延续一下

-

​ 这样不是为了炫耀,获取知识本身是种快乐,自己往深挖一挖,更快乐。浅的东西大家都知道,无论是聊天还是网络或外出,都容易学到,自己没必要去扩大”浅“的面。

- -
- - - - - - -
-
- - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - + if theme.reward.enable && theme.reward.QR_code + !=partial('includes/post/reward', {}, {cache: true}) + + //- ad + if theme.ad && theme.ad.post + .ads-wrap!=theme.ad.post + + if theme.post_pagination + include includes/pagination.pug + if theme.related_post && theme.related_post.enable + != related_posts(page,site.posts) + + if page.comments !== false && theme.comments && theme.comments.use + - var commentsJsLoad = true + !=partial('includes/third-party/comments/index', {}, {cache: true}) + \ No newline at end of file diff --git "a/2022/10/16/\350\256\244\347\237\245\350\247\211\351\206\222/index.html" "b/2022/10/16/\350\256\244\347\237\245\350\247\211\351\206\222/index.html" index 02b9455..f54ab7a 100644 --- "a/2022/10/16/\350\256\244\347\237\245\350\247\211\351\206\222/index.html" +++ "b/2022/10/16/\350\256\244\347\237\245\350\247\211\351\206\222/index.html" @@ -1,402 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -《认知觉醒》笔记 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
+extends includes/layout.pug + +block content + #post + if top_img === false + include includes/header/post-info.pug + + article#article-container.post-content!=page.content + include includes/post/post-copyright.pug + .tag_share + if (theme.post_meta.post.tags) + .post-meta__tag-list + each item, index in page.tags.data + a(href=url_for(item.path)).post-meta__tags #[=item.name] + include includes/third-party/share/index.pug - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
- - - -
- - - - - - - -
-

- 《认知觉醒》笔记 -

- - -
- - - - -
-

今天在地铁上看简讯,有这样一段话受到了启发,“看电影、刷微博、聚餐、玩手机,看似很轻松,心中却要应对着‘今天又要虚度一天了’的自责和压力。而选择自己喜欢的画画,别人看来辛苦,自己却甘之如饴。而只有在这样乐在其中的状态下,做自己习惯和喜欢的事情,才能不断地向新的高度迈进”。上面的加粗部分很有感触,因为平时下班特别是周末的时候经常有这样的感觉,就说没有做一些有意义的事情,还胡思乱想。这让我不禁又想重读一下《认知觉醒》,也写一下笔记或精华部分,顺带把电脑游戏都卸了,一是最近一段时间都觉得时间很重要不怎玩了,二是看一下自己是否以后再也不触碰这些过于娱乐的事物。

-

第一章《大脑》

-

​ 先讲几个概念,顺便分析一下。以动物进化史为例子讲述了大脑分三部分,分别是理智脑、情绪脑、本能脑,分别主管认知、情绪、本能。从产生的时间上看,理智脑要远远晚于情绪脑和本能脑,而且发育的时间也不同。理智脑虽然高级,但比起本能脑和情绪脑,它的力量实在是太弱小了,除了前面说的时间问题,还有细胞数量以及和心脏的距离原因,这也解释了为什么有些紧急情况理智脑会一片空白。除此之外,理智脑的消耗很大而且速度比较慢。

-

image-20221016215626198

-

-

image-20221016215613126

-

​ 这样就会导致一些我们平时常常遇到的问题,比如明知道这会应该看书刷题还是刷起了视频。由于理智脑相对来说比较弱,人的本能为了生存,大脑们达成的意见是保存体能,对食物进行即时享受,对舒适产生强烈欲望,才不至于被吃掉、被饿死。这就导致了这样两个问题,避难趋易——只做简单和舒适的事,待在舒适区内逃避真正的困难;急于求成——对不能马上看到结果的事往往缺乏耐心。大多数时候我们以为自己在思考,其实都是在对自身的行为和欲望进行合理化。

-

​ 让自己的理智脑加速变强的办法。因为大脑和肌肉一样,遵循用进废退的原则。习惯之所以难以改变,就是因为它是自我巩固的——越用越强,越强越用。要想从既有的习惯中跳出来,最好的方法不是依靠自制力,而是依靠知识,因为单纯地依靠自制力是非常痛苦的事,比如很多人在成长的过程中感到极度痛苦,就是因为他们总是用意志力去对抗本能和情绪,最后把自己搞得精疲力竭,却收效甚微。但知识可以让我们轻松产生新的认知和选择,我觉得更重要的是在别的有意义的事情上找到乐趣。需要提醒的是,让理智脑变强大并不意味着要抹杀本能脑和情绪脑。也没有必要抹杀,因为本能脑强大的运算能力和情绪脑强大的行动能力,是重要的资源,要去感受了解,为己所用,或者让理智脑调动情绪脑和本能脑,感觉这是最高境界。

-
-

(2022年10月17日更)

-

接着说一下焦虑和耐心。

-

​ 无论个体还是群体,人类的安全感都源于自己在某一方面拥有的独特优势:或能力,或财富,或权力,或影响力。焦虑分以下几种:完成焦虑(帮别人、Deadline等种种原因导致时间不够用)

-

定位焦虑(和那些不适合自己、厉害的人比)

-

选择焦虑(犹豫不决被消耗)

-

环境焦虑(家庭工作等不想做却需要花很多时间)

-

难度焦虑(有些问题就是很难不能回避)

-

根源是想同时做很多事,又想立即看到效果,也就是前面说的急于求成。王小波说:人的一切痛苦,本质上都是对自己无能的愤怒。焦虑的本质也契合这一观点:自己的欲望大于能力,又极度缺乏耐心。焦虑就是因为欲望与能力之间差距过大。解决这些问题除了理性分析外最重要的还是耐心。

-

​ 听过很多方法“一万小时定律”21天能养成一个习惯“等,也不是说这些没用,但抱着这种心理去做会很无趣痛苦,甚至最后放弃了。上学阶段我们的耐心得到不断提升,走出校园我们如果不培养,就会停留在一个水平。在培养耐心前需要知道几个规律,时间和收益不是正比而是有一个拐点的、我们需要在舒适区和困难区的中间区去探索,也叫拉伸区,好处就不说了,大家都懂。

-

​ 我们知道这样一个重要关系,改变量﹥行动量﹥思考量﹥学习量,而痛苦程度是相反的,所以我们通常停留在学习阶段,而没有收获,这是最可怕的,可能会越学越焦虑,或投入更多没有必要的时间学习以为能解决问题。这让我想到平时自己也是这样,考研数学和现在刷leecode,总想着多看看把所有知识过一下,没有留下太多思考的时间,这也是缺乏耐心、避难趋易的表现,最后的结果就是一遍下来没咋懂,又来几遍,还是没掌握精髓,还觉得自己努力了。要学什么东西一定要深入底层,不然忙忙碌碌却收获甚微。

-

​ 还又平台期的问题,学习的过程是上升、平台反复的过程,平台期要坚持一下。因此我们不要因自己进步缓慢而沮丧,也不会因别人成长迅速而焦虑。从这个角度看,耐心不是毅力带来的结果,而是具有长远目光的结果。

-

​ 如何拥有耐心呢,面对天性坦然接纳自己、面对诱惑学会延迟满足和奖励自己,这两个都需要和自己温和对话,不要强硬,毕竟是本性。还有就是用理智脑去驱动,看书就是一种享受。

-
-
-

2022年10月19日更

-

第二章《潜意识》

-

​ 模糊的概念,分三种,认知、情绪和行动上的模糊。人与机器的区别,在于机器没有指令什么也干不了,而人没有指令会有潜意识来支配,正是这种潜意识导致人的想法是模糊的,比如你想做一件事却不知不觉拿起了手机。前面说过人的本能是想保存能量所以不会去高消耗的事情,导致人们总是习惯在模糊区打转,在舒适区兜圈,重复做已经掌握的事情,对真正的困难视而不见,还有个很现实的例子,因为解决问题需要动脑,享受幸福也需要动脑平衡各种微妙的关系,而承受痛苦则只需陷在那里不动,这也为社么有的人遭遇挫折萎靡不振,遇到问题一直拖延。然而回避痛苦并不会使痛苦消失,反而会使其转入潜意识,变成模糊的感觉。而具体事件一旦变模糊,其边界就会无限扩大,原本并不困难的小事,也会在模糊的潜意识里变得难以解决。所以模糊一定要消除。可以联系自身的事情想一想。还有一个重要情况,行动力不足的真正原因是选择模糊,而不是环境问题或意志力问题。

-

​ 而解决的办法很简单,就是去一层一层挖掘我们问题的根源,把模糊的点,害怕的点弄明白,去拆解问题,消除认知、情绪和行动上的模糊。

-

2022年10月20日更

-
-

​ 感性这一部分其实不太赞成,有些时候我们确实是凭感觉去做,而且做的很对,但还是比较玄学,培养这方面感觉不是很有必要。但是有一点叫熔断不读书法还不错,就是你读一本书看到触动的地方就不读了,去联想,这样会留下很深刻的影响,比流程式的读完好。去思考为什么触动,这样用感性带动理性,能了解自己。其实我小时候就这样了,当自己被触动就跳出来问自己为什么会有这样的感觉。

-
-
-

第三章 《元认知》

-

​ 元有最高级别的意思。这里讲的是反省自己,有种灵魂出窍的感觉,来监视自己、审视自己。有主动和被动的,被动是我们被批评或犯错之后的反省,主动是没有碰壁之前就知道自我反省。

-

​ 如何获取的呢?静态获取,是从前人经历、读书去反思;自身经历,古人云三省吾身;动态获取,当下,自己在做什么事情,反思自己为什么要这样做,忍不住点开微信,记得审视自己的行为;最牛的冥想,就是监控自己的注意力。

-
-

​ 今天要说的话题是自控力,也是元认知的一种行动表现。当我们漫步街头时,元认知能力弱的人总会被路边的音乐、屏幕广告、叫卖声或突发事件轻易地吸引,而元认知能力强的人则会花那么一两秒去思考这事值不值得关注,同样的在和别人争吵的时候,可以空留两秒去思考要脱口的话。还有看微信消息的时候,每当遇到需要选择的情况时,我们要是能先停留几秒思考一下,就有可能激活自己的理智脑,启用元认知来审视当前的思维,然后做出不一样的选择。高尔基曾经说:每一次克制自己,就意味着比以前更强大。因为每克制自己一次,就相当于进行了一次自我审视和主动控制,相当于进行了一次锻炼。元认知能力要是能经常锻炼,我们理智脑的自控力可不就越来越强大了嘛!

-

​ 另一个概念也不错叫元时间。因为一天24小时看起来每分每秒都一样,但实际上并不相同,有些时间的权重要远远大于其他时间,作者把这些权重大的时间叫作“元时间”,善用这些时间会极大程度地优化后续时间的质量。

-

​ 焦虑的人很少有“元时间”的意识,他们习惯不动脑子、直接行动,喜欢用饱和的行动来感动自己,想与做的时间配比差距悬殊,他们甚至连一丁点儿深入思考的时间都不愿意花,任由本能欲望让自己迷失在自我满足的行动里。要在元时间节点上消除模糊,要在焦虑的时候跳出来思考。

-
-
-

(有五天没更新了。。)
今天要说的是专注力。包括情绪专注和学习专注。

-

​ 我们通常做着A事却想着B事,这种情况可以用元认知观察到,缺少感受的行动,就像是失去灵魂的躯壳,更准确的说,我们的躯壳内装了一个混乱的灵魂,确实是这样。这种情况对我的情绪状态和能力提升会有持续的负面影响。走神让我们要么沉浸过去要么担忧未来,要么幻想不现实的事情,唯独不能活在当下。

-

​ 具体分析为什么这样,要么是觉得当下痛苦要么是当下无聊,于是追求更舒服的事情,而走神是最容易的,这可以联系到前文说过的本性。分心走神的本质就是逃避。

-

​ 具体要怎么做呢?我们要把感受收回来,去体会运动或休息的时候的细微变化。一定要身心合一。

-

​ 对于学习专注,我们不是要强迫自己或感动自己,要懂得深度沉浸,具体做法,1.有明确的目标而不是定义练习多长时间,2.练习时要嫉妒专注,心神合一,3.能获得有效反馈,知道自己存在哪些不足,这个跟专注没太大关系。我的想法是可以找自己没做好专注的原因,4.每天都要在拉伸区练习,要做有难度通过一天努力克服的事情。

-

​ 今天要说的是学习不是一味地努力,要在自己舒适区的边缘去学习,找一个自己能坚持做下去的方式,比单纯按照标准化的时间和方式做更重要。以前一直以为多花时间才能学好、才能达到效果,其实那是因为自己急于求成,想要快速见效,这样反而不容易坚持。

-

​ 距离太远的,我们都把握不住。即使是舒服的事情,有很多时间很多钱,自己都不会很好的利用的。如果没有与之匹配的清醒和定力,绝大多数人最终都会被强大的天性支配,去选择娱乐消遣。在有约束的环境下我们反而效率更高,生活更充实。

-

​ 学习的过程,拆解目标(去模糊)、提炼目标(不能分心走神)、关注点(自我检测)

- -
- - - - - - -
-
- - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - + if theme.reward.enable && theme.reward.QR_code + !=partial('includes/post/reward', {}, {cache: true}) + + //- ad + if theme.ad && theme.ad.post + .ads-wrap!=theme.ad.post + + if theme.post_pagination + include includes/pagination.pug + if theme.related_post && theme.related_post.enable + != related_posts(page,site.posts) + + if page.comments !== false && theme.comments && theme.comments.use + - var commentsJsLoad = true + !=partial('includes/third-party/comments/index', {}, {cache: true}) + \ No newline at end of file diff --git "a/2022/11/02/vscode\345\277\253\346\215\267\351\224\256/index.html" "b/2022/11/02/vscode\345\277\253\346\215\267\351\224\256/index.html" index 9c5b6f6..f54ab7a 100644 --- "a/2022/11/02/vscode\345\277\253\346\215\267\351\224\256/index.html" +++ "b/2022/11/02/vscode\345\277\253\346\215\267\351\224\256/index.html" @@ -1,329 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -vscode快捷键 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
+extends includes/layout.pug + +block content + #post + if top_img === false + include includes/header/post-info.pug + + article#article-container.post-content!=page.content + include includes/post/post-copyright.pug + .tag_share + if (theme.post_meta.post.tags) + .post-meta__tag-list + each item, index in page.tags.data + a(href=url_for(item.path)).post-meta__tags #[=item.name] + include includes/third-party/share/index.pug - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
- - - -
- - - - - - - -
-

- vscode快捷键 -

- - -
- - - - -
-

按钮1:运行/继续 F5,真正的一步一步运行
按钮2:单步跳过(又叫逐过程) F10,按语句单步执行。当有函数时,不会进入函数。
按钮3:单步调试(又叫逐语句) F11:当有函数时,点击这个按钮,会进入这个函数内。
按钮4:单步跳出 ⇧F11:如果有循环,点击该按钮,会执行到循环外面的语句。

- -
- - - - - - -
-
- - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - + if theme.reward.enable && theme.reward.QR_code + !=partial('includes/post/reward', {}, {cache: true}) + + //- ad + if theme.ad && theme.ad.post + .ads-wrap!=theme.ad.post + + if theme.post_pagination + include includes/pagination.pug + if theme.related_post && theme.related_post.enable + != related_posts(page,site.posts) + + if page.comments !== false && theme.comments && theme.comments.use + - var commentsJsLoad = true + !=partial('includes/third-party/comments/index', {}, {cache: true}) + \ No newline at end of file diff --git a/2022/12/14/pytorch/index.html b/2022/12/14/pytorch/index.html index 264d12c..f54ab7a 100644 --- a/2022/12/14/pytorch/index.html +++ b/2022/12/14/pytorch/index.html @@ -1,357 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -pytorch | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
+extends includes/layout.pug + +block content + #post + if top_img === false + include includes/header/post-info.pug + + article#article-container.post-content!=page.content + include includes/post/post-copyright.pug + .tag_share + if (theme.post_meta.post.tags) + .post-meta__tag-list + each item, index in page.tags.data + a(href=url_for(item.path)).post-meta__tags #[=item.name] + include includes/third-party/share/index.pug - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
- - - -
- - - - - - - -
-

- pytorch -

- - -
- - - - -
-

Dataloader出来的矩阵转图像

from PIL import Image

-

images = images.squeeze(0)[0].cpu().numpy().transpose(1,2,0)

-

image= Image.fromarray(np.uint8(images))

-

image.save(‘image.png’)

-

多卡定义全局变量问题

如下面代码所示,如果定义一个count计数器,每个卡执行代码的时候都会从新定义count,这样就导致计算count时会少很多。

-

需要用如下加粗字体的写法。

-

for idx, batch_data in enumerate(test_loader):

-

​ images = batch_data[“imgs”].cuda(non_blocking=True)

-

​ label_id = batch_data[“label”].cuda(non_blocking=True)

-

​ label_id = label_id.reshape(-1)

-

​ x = images.cuda()

-

​ y = label_id.cpu().numpy()

-

​ output = model(x).cpu().numpy()

-

​ output_pred.append([output.argmax()])

-

​ output_targ.append(y)

-

output_pred = np.concatenate(output_pred)

-

output_targ = np.concatenate(output_targ)

-

gather_list_0 = [None for i in range(world_size)]

-

gather_list_1 = [None for i in range(world_size)]

-

distributed.all_gather_object(gather_list_0, output_pred)

-

distributed.all_gather_object(gather_list_1, output_targ)

-

pred = np.concatenate(gather_list_0)

-

targ = np.concatenate(gather_list_1)

-

acc = accuracy_score(pred,targ)

-

return acc

- -
- - - - - - -
-
- - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - + if theme.reward.enable && theme.reward.QR_code + !=partial('includes/post/reward', {}, {cache: true}) + + //- ad + if theme.ad && theme.ad.post + .ads-wrap!=theme.ad.post + + if theme.post_pagination + include includes/pagination.pug + if theme.related_post && theme.related_post.enable + != related_posts(page,site.posts) + + if page.comments !== false && theme.comments && theme.comments.use + - var commentsJsLoad = true + !=partial('includes/third-party/comments/index', {}, {cache: true}) + \ No newline at end of file diff --git a/archives/2022/10/index.html b/archives/2022/10/index.html index dd20334..913dedc 100644 --- a/archives/2022/10/index.html +++ b/archives/2022/10/index.html @@ -1,297 +1,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -归档 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
- 嗯..! 目前共计 4 篇日志。 继续努力。 -
- - -
- 2022 -
- - - - - - -
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + include ./includes/mixins/article-sort.pug + #archive + .article-sort-title= `${_p('page.articles')} - ${getArchiveLength()}` + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html index de1b9f2..913dedc 100644 --- a/archives/2022/11/index.html +++ b/archives/2022/11/index.html @@ -1,277 +1,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -归档 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
- 嗯..! 目前共计 4 篇日志。 继续努力。 -
- - -
- 2022 -
- - - - -
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + include ./includes/mixins/article-sort.pug + #archive + .article-sort-title= `${_p('page.articles')} - ${getArchiveLength()}` + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git a/archives/2022/12/index.html b/archives/2022/12/index.html index 76f6408..913dedc 100644 --- a/archives/2022/12/index.html +++ b/archives/2022/12/index.html @@ -1,277 +1,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -归档 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
- 嗯..! 目前共计 4 篇日志。 继续努力。 -
- - -
- 2022 -
- - - - -
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + include ./includes/mixins/article-sort.pug + #archive + .article-sort-title= `${_p('page.articles')} - ${getArchiveLength()}` + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git a/archives/2022/index.html b/archives/2022/index.html index 06981e8..913dedc 100644 --- a/archives/2022/index.html +++ b/archives/2022/index.html @@ -1,337 +1,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -归档 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
- 嗯..! 目前共计 4 篇日志。 继续努力。 -
- - -
- 2022 -
- - - - - - - - - - -
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + include ./includes/mixins/article-sort.pug + #archive + .article-sort-title= `${_p('page.articles')} - ${getArchiveLength()}` + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git a/archives/index.html b/archives/index.html index 8a1d8e7..913dedc 100644 --- a/archives/index.html +++ b/archives/index.html @@ -1,337 +1,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -归档 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
- 嗯..! 目前共计 4 篇日志。 继续努力。 -
- - -
- 2022 -
- - - - - - - - - - -
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + include ./includes/mixins/article-sort.pug + #archive + .article-sort-title= `${_p('page.articles')} - ${getArchiveLength()}` + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git a/categories/index.html b/categories/index.html index ed46c04..6c810ef 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,273 +1,20 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -categories | DeepShark的博客 - - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
- -

categories -

- - - -
- - - -
-
- 目前共计 2 个分类 -
-
- -
-
- -
- - - -
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + #page + if top_img === false + h1.page-title= page.title + + case page.type + when 'tags' + include includes/page/tags.pug + when 'link' + include includes/page/flink.pug + when 'categories' + include includes/page/categories.pug + default + include includes/page/default-page.pug + + if page.comments !== false && theme.comments && theme.comments.use + - var commentsJsLoad = true + !=partial('includes/third-party/comments/index', {}, {cache: true}) \ No newline at end of file diff --git "a/categories/\346\204\237\346\202\237/index.html" "b/categories/\346\204\237\346\202\237/index.html" index 42c243d..234a0af 100644 --- "a/categories/\346\204\237\346\202\237/index.html" +++ "b/categories/\346\204\237\346\202\237/index.html" @@ -1,278 +1,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -分类: 感悟 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
-

感悟 - 分类 -

-
- - -
- 2022 -
- - - -
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + if theme.category_ui == 'index' + include ./includes/mixins/post-ui.pug + #recent-posts.recent-posts.category_ui + +postUI + include includes/pagination.pug + else + include ./includes/mixins/article-sort.pug + #category + .article-sort-title= _p('page.category') + ' - ' + page.category + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git "a/categories/\350\257\273\344\271\246/index.html" "b/categories/\350\257\273\344\271\246/index.html" index d3ae770..234a0af 100644 --- "a/categories/\350\257\273\344\271\246/index.html" +++ "b/categories/\350\257\273\344\271\246/index.html" @@ -1,278 +1,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -分类: 读书 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
-

读书 - 分类 -

-
- - -
- 2022 -
- - - -
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + if theme.category_ui == 'index' + include ./includes/mixins/post-ui.pug + #recent-posts.recent-posts.category_ui + +postUI + include includes/pagination.pug + else + include ./includes/mixins/article-sort.pug + #category + .article-sort-title= _p('page.category') + ' - ' + page.category + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git a/css/index.css b/css/index.css new file mode 100644 index 0000000..6176ab1 --- /dev/null +++ b/css/index.css @@ -0,0 +1,6142 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +html { + line-height: 1.15; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +main { + display: block +} + +h1 { + font-size: 2em; + margin: .67em 0 +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible +} + +pre { + font-family: monospace, monospace; + font-size: 1em +} + +a { + background-color: transparent +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted +} + +b, +strong { + font-weight: bolder +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +img { + border-style: none +} + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0 +} + +button, +input { + overflow: visible +} + +button, +select { + text-transform: none +} + +[type=button], +[type=reset], +[type=submit], +button { + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0 +} + +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText +} + +fieldset { + padding: .35em .75em .625em +} + +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal +} + +progress { + vertical-align: baseline +} + +textarea { + overflow: auto +} + +[type=checkbox], +[type=radio] { + box-sizing: border-box; + padding: 0 +} + +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit +} + +details { + display: block +} + +summary { + display: list-item +} + +template { + display: none +} + +[hidden] { + display: none +} +.limit-one-line, +#article-container .flink .flink-item-name, +#article-container .flink .flink-item-desc, +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span, +.site-data > a .headline, +#nav #blog-info, +#pagination .prev_info, +#pagination .next_info, +#sidebar #sidebar-menus .menus_items .site-page { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} +.limit-more-line, +.article-sort-item-title, +#recent-posts > .recent-post-item >.recent-post-info > .article-title, +#recent-posts > .recent-post-item >.recent-post-info > .content, +#aside-content .aside-list > .aside-list-item .content > .name, +#aside-content .aside-list > .aside-list-item .content > .title, +#aside-content .aside-list > .aside-list-item .content > .comment, +#post-info .post-title, +.relatedPosts > .relatedPosts-list .content .title, +#article-container figure.gallery-group p, +#article-container figure.gallery-group .gallery-group-name { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; +} +.fontawesomeIcon, +.custom-hr:before, +#post .post-copyright:before, +#post .post-outdate-notice:before, +.note:not(.no-icon)::before, +.search-dialog hr:before { + display: inline-block; + font-weight: 600; + font-family: 'Font Awesome 6 Free'; + text-rendering: auto; + -webkit-font-smoothing: antialiased; +} +.cardHover, +.layout > div:first-child:not(.recent-posts), +#recent-posts > .recent-post-item, +#aside-content .card-widget, +.layout > .recent-posts .pagination > *:not(.space) { + border-radius: 8px; + background: var(--card-bg); + -webkit-box-shadow: var(--card-box-shadow); + box-shadow: var(--card-box-shadow); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.cardHover:hover, +.layout > div:first-child:not(.recent-posts):hover, +#recent-posts > .recent-post-item:hover, +#aside-content .card-widget:hover, +.layout > .recent-posts .pagination > *:not(.space):hover { + -webkit-box-shadow: var(--card-hover-box-shadow); + box-shadow: var(--card-hover-box-shadow); +} +.imgHover, +.article-sort-item-img :first-child, +#recent-posts > .recent-post-item .post_cover .post-bg, +#aside-content .aside-list > .aside-list-item .thumbnail :first-child { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.6s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.6s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.6s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.6s; + transition: filter 375ms ease-in 0.2s, transform 0.6s; + object-fit: cover; +} +.imgHover:hover, +.article-sort-item-img :first-child:hover, +#recent-posts > .recent-post-item .post_cover .post-bg:hover, +#aside-content .aside-list > .aside-list-item .thumbnail :first-child:hover { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.postImgHover:hover .cover, +#pagination .prev-post:hover .cover, +#pagination .next-post:hover .cover, +.relatedPosts > .relatedPosts-list > div:hover .cover { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.postImgHover .cover, +#pagination .prev-post .cover, +#pagination .next-post .cover, +.relatedPosts > .relatedPosts-list > div .cover { + position: absolute; + width: 100%; + height: 100%; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transition: all 0.6s, filter 375ms ease-in 0.2s; + -moz-transition: all 0.6s, filter 375ms ease-in 0.2s; + -o-transition: all 0.6s, filter 375ms ease-in 0.2s; + -ms-transition: all 0.6s, filter 375ms ease-in 0.2s; + transition: all 0.6s, filter 375ms ease-in 0.2s; + object-fit: cover; +} +.list-beauty, +.category-lists ul { + list-style: none; +} +.list-beauty li, +.category-lists ul li { + position: relative; + padding: 0.12em 0.4em 0.12em 1.4em; +} +.list-beauty li:hover:before, +.category-lists ul li:hover:before { + border-color: var(--pseudo-hover); +} +.list-beauty li:before, +.category-lists ul li:before { + position: absolute; + top: 0.67em; + left: 0; + width: 0.43em; + height: 0.43em; + border: 0.215em solid #49b1f5; + border-radius: 0.43em; + background: transparent; + content: ''; + cursor: pointer; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +.custom-hr, +.search-dialog hr { + position: relative; + margin: 40px auto; + border: 2px dashed var(--hr-border); + width: calc(100% - 4px); +} +.custom-hr:hover:before, +.search-dialog hr:hover:before { + left: calc(95% - 20px); +} +.custom-hr:before, +.search-dialog hr:before { + position: absolute; + top: -10px; + left: 5%; + z-index: 1; + color: var(--hr-before-color); + content: '\f0c4'; + font-size: 20px; + line-height: 1; + -webkit-transition: all 1s ease-in-out; + -moz-transition: all 1s ease-in-out; + -o-transition: all 1s ease-in-out; + -ms-transition: all 1s ease-in-out; + transition: all 1s ease-in-out; +} +#content-inner, +#footer { + -webkit-animation: bottom-top 1s; + -moz-animation: bottom-top 1s; + -o-animation: bottom-top 1s; + -ms-animation: bottom-top 1s; + animation: bottom-top 1s; +} +#page-header:not(.full_page) { + -webkit-animation: header-effect 1s; + -moz-animation: header-effect 1s; + -o-animation: header-effect 1s; + -ms-animation: header-effect 1s; + animation: header-effect 1s; +} +#site-title, +#site-subtitle { + -webkit-animation: titleScale 1s; + -moz-animation: titleScale 1s; + -o-animation: titleScale 1s; + -ms-animation: titleScale 1s; + animation: titleScale 1s; +} +#nav.show { + -webkit-animation: headerNoOpacity 1s; + -moz-animation: headerNoOpacity 1s; + -o-animation: headerNoOpacity 1s; + -ms-animation: headerNoOpacity 1s; + animation: headerNoOpacity 1s; +} +canvas:not(#ribbon-canvas), +#web_bg { + -webkit-animation: to_show 4s; + -moz-animation: to_show 4s; + -o-animation: to_show 4s; + -ms-animation: to_show 4s; + animation: to_show 4s; +} +#ribbon-canvas { + -webkit-animation: ribbon_to_show 4s; + -moz-animation: ribbon_to_show 4s; + -o-animation: ribbon_to_show 4s; + -ms-animation: ribbon_to_show 4s; + animation: ribbon_to_show 4s; +} +#sidebar-menus.open > :nth-child(1) { + -webkit-animation: sidebarItem 0.2s; + -moz-animation: sidebarItem 0.2s; + -o-animation: sidebarItem 0.2s; + -ms-animation: sidebarItem 0.2s; + animation: sidebarItem 0.2s; +} +#sidebar-menus.open > :nth-child(2) { + -webkit-animation: sidebarItem 0.4s; + -moz-animation: sidebarItem 0.4s; + -o-animation: sidebarItem 0.4s; + -ms-animation: sidebarItem 0.4s; + animation: sidebarItem 0.4s; +} +#sidebar-menus.open > :nth-child(3) { + -webkit-animation: sidebarItem 0.6s; + -moz-animation: sidebarItem 0.6s; + -o-animation: sidebarItem 0.6s; + -ms-animation: sidebarItem 0.6s; + animation: sidebarItem 0.6s; +} +#sidebar-menus.open > :nth-child(4) { + -webkit-animation: sidebarItem 0.8s; + -moz-animation: sidebarItem 0.8s; + -o-animation: sidebarItem 0.8s; + -ms-animation: sidebarItem 0.8s; + animation: sidebarItem 0.8s; +} +.scroll-down-effects { + -webkit-animation: scroll-down-effect 1.5s infinite; + -moz-animation: scroll-down-effect 1.5s infinite; + -o-animation: scroll-down-effect 1.5s infinite; + -ms-animation: scroll-down-effect 1.5s infinite; + animation: scroll-down-effect 1.5s infinite; +} +.reward-main { + -webkit-animation: donate_effcet 0.3s 0.1s ease both; + -moz-animation: donate_effcet 0.3s 0.1s ease both; + -o-animation: donate_effcet 0.3s 0.1s ease both; + -ms-animation: donate_effcet 0.3s 0.1s ease both; + animation: donate_effcet 0.3s 0.1s ease both; +} +@-moz-keyframes scroll-down-effect { + 0% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } + 50% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -16px); + -moz-transform: translate(0, -16px); + -o-transform: translate(0, -16px); + -ms-transform: translate(0, -16px); + transform: translate(0, -16px); + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } +} +@-webkit-keyframes scroll-down-effect { + 0% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } + 50% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -16px); + -moz-transform: translate(0, -16px); + -o-transform: translate(0, -16px); + -ms-transform: translate(0, -16px); + transform: translate(0, -16px); + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } +} +@-o-keyframes scroll-down-effect { + 0% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } + 50% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -16px); + -moz-transform: translate(0, -16px); + -o-transform: translate(0, -16px); + -ms-transform: translate(0, -16px); + transform: translate(0, -16px); + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } +} +@keyframes scroll-down-effect { + 0% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } + 50% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -16px); + -moz-transform: translate(0, -16px); + -o-transform: translate(0, -16px); + -ms-transform: translate(0, -16px); + transform: translate(0, -16px); + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } +} +@-moz-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes header-effect { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes headerNoOpacity { + 0% { + -webkit-transform: translateY(-50px); + -moz-transform: translateY(-50px); + -o-transform: translateY(-50px); + -ms-transform: translateY(-50px); + transform: translateY(-50px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes bottom-top { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(50px); + -moz-transform: translateY(50px); + -o-transform: translateY(50px); + -ms-transform: translateY(50px); + transform: translateY(50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes bottom-top { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(50px); + -moz-transform: translateY(50px); + -o-transform: translateY(50px); + -ms-transform: translateY(50px); + transform: translateY(50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes bottom-top { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(50px); + -moz-transform: translateY(50px); + -o-transform: translateY(50px); + -ms-transform: translateY(50px); + transform: translateY(50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes bottom-top { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(50px); + -moz-transform: translateY(50px); + -o-transform: translateY(50px); + -ms-transform: translateY(50px); + transform: translateY(50px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-moz-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-webkit-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-o-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-moz-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-webkit-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-o-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-moz-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-webkit-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-o-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-moz-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes sub_menus { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes sub_menus { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes sub_menus { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes sub_menus { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +:root { + --global-font-size: 14px; + --global-bg: #fff; + --font-color: #4c4948; + --hr-border: #a4d8fa; + --hr-before-color: #80c8f8; + --search-bg: #f6f8fa; + --search-input-color: #4c4948; + --search-a-color: #4c4948; + --preloader-bg: #37474f; + --preloader-color: #fff; + --tab-border-color: #f0f0f0; + --tab-botton-bg: #f0f0f0; + --tab-botton-color: #1f2d3d; + --tab-button-hover-bg: #dcdcdc; + --tab-button-active-bg: #fff; + --card-bg: #fff; + --sidebar-bg: #f6f8fa; + --btn-hover-color: #ff7242; + --btn-color: #fff; + --btn-bg: #49b1f5; + --text-bg-hover: rgba(73,177,245,0.7); + --light-grey: #eee; + --dark-grey: #cacaca; + --white: #fff; + --text-highlight-color: #1f2d3d; + --blockquote-color: #6a737d; + --blockquote-bg: rgba(73,177,245,0.1); + --reward-pop: #f5f5f5; + --toc-link-color: #666261; + --card-box-shadow: 0 3px 8px 6px rgba(7,17,27,0.05); + --card-hover-box-shadow: 0 3px 8px 6px rgba(7,17,27,0.09); + --pseudo-hover: #ff7242; + --headline-presudo: #a0a0a0; + --scrollbar-color: #49b1f5; + --default-bg-color: #49b1f5; + --zoom-bg: #fff; + --mark-bg: rgba(0,0,0,0.3); +} +body { + position: relative; + min-height: 100%; + background: var(--global-bg); + color: var(--font-color); + font-size: var(--global-font-size); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; + line-height: 2; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +*::-webkit-scrollbar { + width: 5px; + height: 5px; +} +*::-webkit-scrollbar-thumb { + background: var(--scrollbar-color); +} +*::-webkit-scrollbar-track { + background-color: transparent; +} +* { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-color) transparent; +} +input::placeholder { + color: var(--font-color); +} +h1, +h2, +h3, +h4, +h5, +h6 { + position: relative; + margin: 20px 0 14px; + color: var(--text-highlight-color); + font-weight: bold; +} +h1 code, +h2 code, +h3 code, +h4 code, +h5 code, +h6 code { + font-size: inherit !important; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.table-wrap { + overflow-x: scroll; + margin: 0 0 20px; +} +table { + display: table; + width: 100%; + border-spacing: 0; + border-collapse: collapse; + empty-cells: show; +} +table thead { + background: rgba(153,169,191,0.1); +} +table th, +table td { + padding: 6px 12px; + border: 1px solid var(--light-grey); + vertical-align: middle; +} +*::selection { + background: #00c4b6; + color: #f7f7f7; +} +button { + padding: 0; + outline: 0; + border: none; + background: none; + cursor: pointer; + touch-action: manipulation; +} +a { + color: #99a9bf; + text-decoration: none; + word-wrap: break-word; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + -ms-transition: all 0.2s; + transition: all 0.2s; + overflow-wrap: break-word; +} +a:hover { + color: #49b1f5; +} +.is-center { + text-align: center; +} +.pull-left { + float: left; +} +.pull-right { + float: right; +} +img[src=''], +img:not([src]) { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.img-alt { + margin: -10px 0 10px; + color: #858585; +} +.img-alt:hover { + text-decoration: none !important; +} +blockquote { + margin: 0 0 20px; + padding: 12px 15px; + border-left: 3px solid #49b1f5; + background-color: var(--blockquote-bg); + color: var(--blockquote-color); +} +blockquote footer cite:before { + padding: 0 5px; + content: '—'; +} +blockquote > :last-child { + margin-bottom: 0 !important; +} +:root { + --hl-color: #90a4ae; + --hl-bg: #f6f8fa; + --hltools-bg: #e6ebf1; + --hltools-color: #90a4ae; + --hlnumber-bg: #f6f8fa; + --hlnumber-color: rgba(144,164,174,0.5); + --hlscrollbar-bg: #dce4eb; + --hlexpand-bg: linear-gradient(180deg, rgba(246,248,250,0.6), rgba(246,248,250,0.9)); +} +[data-theme='dark'] { + --hl-color: rgba(255,255,255,0.7); + --hl-bg: #171717; + --hltools-bg: #1a1a1a; + --hltools-color: #90a4ae; + --hlnumber-bg: #171717; + --hlnumber-color: rgba(255,255,255,0.4); + --hlscrollbar-bg: #1f1f1f; + --hlexpand-bg: linear-gradient(180deg, rgba(23,23,23,0.6), rgba(23,23,23,0.9)); +} +figure.highlight table { + scrollbar-color: var(--hlscrollbar-bg) transparent; +} +figure.highlight table::-webkit-scrollbar-thumb { + background: var(--hlscrollbar-bg); +} +figure.highlight pre .deletion { + color: #bf42bf; +} +figure.highlight pre .addition { + color: #105ede; +} +figure.highlight pre .meta { + color: #7c4dff; +} +figure.highlight pre .comment { + color: rgba(149,165,166,0.8); +} +figure.highlight pre .variable, +figure.highlight pre .attribute, +figure.highlight pre .regexp, +figure.highlight pre .ruby .constant, +figure.highlight pre .xml .tag .title, +figure.highlight pre .xml .pi, +figure.highlight pre .xml .doctype, +figure.highlight pre .html .doctype, +figure.highlight pre .css .id, +figure.highlight pre .tag .name, +figure.highlight pre .css .class, +figure.highlight pre .css .pseudo { + color: #e53935; +} +figure.highlight pre .tag { + color: #39adb5; +} +figure.highlight pre .number, +figure.highlight pre .preprocessor, +figure.highlight pre .literal, +figure.highlight pre .params, +figure.highlight pre .constant, +figure.highlight pre .command { + color: #f76d47; +} +figure.highlight pre .built_in { + color: #ffb62c; +} +figure.highlight pre .ruby .class .title, +figure.highlight pre .css .rules .attribute, +figure.highlight pre .string, +figure.highlight pre .value, +figure.highlight pre .inheritance, +figure.highlight pre .header, +figure.highlight pre .ruby .symbol, +figure.highlight pre .xml .cdata, +figure.highlight pre .special, +figure.highlight pre .number, +figure.highlight pre .formula { + color: #91b859; +} +figure.highlight pre .keyword, +figure.highlight pre .title, +figure.highlight pre .css .hexcolor { + color: #39adb5; +} +figure.highlight pre .function, +figure.highlight pre .python .decorator, +figure.highlight pre .python .title, +figure.highlight pre .ruby .function .title, +figure.highlight pre .ruby .title .keyword, +figure.highlight pre .perl .sub, +figure.highlight pre .javascript .title, +figure.highlight pre .coffeescript .title { + color: #6182b8; +} +figure.highlight pre .tag .attr, +figure.highlight pre .javascript .function { + color: #7c4dff; +} +#article-container figure.highlight .line.marked { + background-color: rgba(128,203,196,0.251); +} +#article-container figure.highlight table { + display: block; + overflow: auto; + border: none; +} +#article-container figure.highlight table td { + padding: 0; + border: none; +} +#article-container figure.highlight .gutter pre { + padding-right: 10px; + padding-left: 10px; + background-color: var(--hlnumber-bg); + color: var(--hlnumber-color); + text-align: right; +} +#article-container figure.highlight .code pre { + padding-right: 10px; + padding-left: 10px; + width: 100%; +} +#article-container pre, +#article-container figure.highlight { + overflow: auto; + margin: 0 0 20px; + padding: 0; + background: var(--hl-bg); + color: var(--hl-color); + line-height: 1.6; +} +#article-container pre, +#article-container code { + font-size: var(--global-font-size); + font-family: consolas, Menlo, 'PingFang SC', 'Microsoft YaHei', sans-serif !important; +} +#article-container code { + padding: 2px 4px; + background: rgba(27,31,35,0.05); + color: #f47466; +} +#article-container pre { + padding: 10px 20px; +} +#article-container pre code { + padding: 0; + background: none; + color: var(--hl-color); + text-shadow: none; +} +#article-container figure.highlight { + position: relative; +} +#article-container figure.highlight pre { + margin: 0; + padding: 8px 0; + border: none; +} +#article-container figure.highlight figcaption, +#article-container figure.highlight .caption { + padding: 6px 0 2px 14px; + font-size: var(--global-font-size); + line-height: 1em; +} +#article-container figure.highlight figcaption a, +#article-container figure.highlight .caption a { + float: right; + padding-right: 10px; + color: var(--hl-color); +} +#article-container figure.highlight figcaption a:hover, +#article-container figure.highlight .caption a:hover { + border-bottom-color: var(--hl-color); +} +#article-container figure.highlight.copy-true { + -webkit-user-select: all; + -moz-user-select: all; + -ms-user-select: all; + user-select: all; + -webkit-user-select: all; +} +#article-container figure.highlight.copy-true > table, +#article-container figure.highlight.copy-true > pre { + display: block !important; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#article-container .highlight-tools { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + overflow: hidden; + min-height: 24px; + height: 2.15em; + background: var(--hltools-bg); + color: var(--hltools-color); + font-size: var(--global-font-size); +} +#article-container .highlight-tools.closed ~ * { + display: none; +} +#article-container .highlight-tools.closed .expand { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-transform: rotate(-90deg) !important; + -moz-transform: rotate(-90deg) !important; + -o-transform: rotate(-90deg) !important; + -ms-transform: rotate(-90deg) !important; + transform: rotate(-90deg) !important; +} +#article-container .highlight-tools .expand { + position: absolute; + padding: 0.57em 0.7em; + cursor: pointer; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#article-container .highlight-tools .expand + .code-lang { + left: 1.7em; +} +#article-container .highlight-tools .code-lang { + position: absolute; + left: 14px; + text-transform: uppercase; + font-weight: bold; + font-size: 1.15em; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; +} +#article-container .highlight-tools .copy-notice { + position: absolute; + right: 2.4em; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.4s; + -moz-transition: opacity 0.4s; + -o-transition: opacity 0.4s; + -ms-transition: opacity 0.4s; + transition: opacity 0.4s; +} +#article-container .highlight-tools .copy-button { + position: absolute; + right: 14px; + cursor: pointer; + -webkit-transition: color 0.2s; + -moz-transition: color 0.2s; + -o-transition: color 0.2s; + -ms-transition: color 0.2s; + transition: color 0.2s; +} +#article-container .highlight-tools .copy-button:hover { + color: #49b1f5; +} +#article-container .gutter { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; +} +#article-container .gist table { + width: auto; +} +#article-container .gist table td { + border: none; +} +@-moz-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-webkit-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-o-keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@keyframes code-expand-key { + 0% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } + 50% { + opacity: 0.1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; + filter: alpha(opacity=10); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +.article-sort { + margin-left: 10px; + padding-left: 20px; + border-left: 2px solid #aadafa; +} +.article-sort-title { + position: relative; + margin-left: 10px; + padding-bottom: 20px; + padding-left: 20px; + font-size: 1.72em; +} +.article-sort-title:hover:before { + border-color: var(--pseudo-hover); +} +.article-sort-title:before { + position: absolute; + top: calc(((100% - 36px) / 2)); + left: -9px; + z-index: 1; + width: 10px; + height: 10px; + border: 5px solid #49b1f5; + border-radius: 10px; + background: var(--card-bg); + content: ''; + line-height: 10px; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.article-sort-title:after { + position: absolute; + bottom: 0; + left: 0; + z-index: 0; + width: 2px; + height: 1.5em; + background: #aadafa; + content: ''; +} +.article-sort-item { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 0 0 20px 10px; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.article-sort-item:hover:before { + border-color: var(--pseudo-hover); +} +.article-sort-item:before { + position: absolute; + left: calc(-20px - 17px); + width: 6px; + height: 6px; + border: 3px solid #49b1f5; + border-radius: 6px; + background: var(--card-bg); + content: ''; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.article-sort-item.no-article-cover { + height: 80px; +} +.article-sort-item.no-article-cover .article-sort-item-info { + padding: 0; +} +.article-sort-item.year { + font-size: 1.43em; +} +.article-sort-item.year:hover:before { + border-color: #49b1f5; +} +.article-sort-item.year:before { + border-color: var(--pseudo-hover); +} +.article-sort-item-time { + color: #858585; + font-size: 95%; +} +.article-sort-item-time time { + padding-left: 6px; + cursor: default; +} +.article-sort-item-title { + color: var(--font-color); + font-size: 1.1em; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-line-clamp: 2; +} +.article-sort-item-title:hover { + color: #49b1f5; + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -o-transform: translateX(10px); + -ms-transform: translateX(10px); + transform: translateX(10px); +} +.article-sort-item-img { + overflow: hidden; + width: 80px; + height: 80px; +} +.article-sort-item-info { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 16px; +} +.category-lists .category-title { + font-size: 2.57em; +} +@media screen and (max-width: 768px) { + .category-lists .category-title { + font-size: 2em; + } +} +.category-lists .category-list { + margin-bottom: 0; +} +.category-lists .category-list a { + color: var(--font-color); +} +.category-lists .category-list a:hover { + color: #49b1f5; +} +.category-lists .category-list .category-list-count { + margin-left: 8px; + color: #858585; +} +.category-lists .category-list .category-list-count:before { + content: '('; +} +.category-lists .category-list .category-list-count:after { + content: ')'; +} +.category-lists ul { + padding: 0 0 0 20px; +} +.category-lists ul ul { + padding-left: 4px; +} +.category-lists ul li { + position: relative; + margin: 6px 0; + padding: 0.12em 0.4em 0.12em 1.4em; +} +#body-wrap { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + min-height: 100vh; +} +.layout { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 auto; + -ms-flex: 1 auto; + flex: 1 auto; + margin: 0 auto; + padding: 40px 15px; + max-width: 1200px; + width: 100%; +} +@media screen and (max-width: 900px) { + .layout { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } +} +@media screen and (max-width: 768px) { + .layout { + padding: 20px 5px; + } +} +@media screen and (min-width: 2000px) { + .layout { + max-width: 70%; + } +} +.layout > div:first-child:not(.recent-posts) { + -webkit-align-self: flex-start; + align-self: flex-start; + -ms-flex-item-align: start; + padding: 50px 40px; +} +@media screen and (max-width: 768px) { + .layout > div:first-child:not(.recent-posts) { + padding: 36px 14px; + } +} +.layout > div:first-child { + width: 74%; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +@media screen and (max-width: 900px) { + .layout > div:first-child { + width: 100% !important; + } +} +.layout.hide-aside { + max-width: 1000px; +} +@media screen and (min-width: 2000px) { + .layout.hide-aside { + max-width: 1300px; + } +} +.layout.hide-aside > div { + width: 100% !important; +} +.apple #page-header.full_page { + background-attachment: scroll !important; +} +.apple .recent-post-item, +.apple .avatar-img, +.apple .flink-item-icon { + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +#article-container .flink { + margin-bottom: 20px; +} +#article-container .flink .flink-list { + overflow: auto; + padding: 10px 10px 0; + text-align: center; +} +#article-container .flink .flink-list > .flink-list-item { + position: relative; + float: left; + overflow: hidden; + margin: 15px 7px; + width: calc(100% / 3 - 15px); + height: 90px; + border-radius: 8px; + line-height: 17px; + -webkit-transform: translateZ(0); +} +@media screen and (max-width: 1024px) { + #article-container .flink .flink-list > .flink-list-item { + width: calc(50% - 15px) !important; + } +} +@media screen and (max-width: 600px) { + #article-container .flink .flink-list > .flink-list-item { + width: calc(100% - 15px) !important; + } +} +#article-container .flink .flink-list > .flink-list-item:hover .flink-item-icon { + margin-left: -10px; + width: 0; +} +#article-container .flink .flink-list > .flink-list-item:before { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + background: var(--text-bg-hover); + content: ''; + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + -ms-transition: -ms-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); +} +#article-container .flink .flink-list > .flink-list-item:hover:before, +#article-container .flink .flink-list > .flink-list-item:focus:before, +#article-container .flink .flink-list > .flink-list-item:active:before { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +#article-container .flink .flink-list > .flink-list-item a { + color: var(--font-color); + text-decoration: none; +} +#article-container .flink .flink-list > .flink-list-item a .flink-item-icon { + float: left; + overflow: hidden; + margin: 15px 10px; + width: 60px; + height: 60px; + border-radius: 35px; + -webkit-transition: width 0.3s ease-out; + -moz-transition: width 0.3s ease-out; + -o-transition: width 0.3s ease-out; + -ms-transition: width 0.3s ease-out; + transition: width 0.3s ease-out; +} +#article-container .flink .flink-list > .flink-list-item a .flink-item-icon img { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.3s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.3s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.3s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.3s; + transition: filter 375ms ease-in 0.2s, transform 0.3s; + object-fit: cover; +} +#article-container .flink .flink-list > .flink-list-item a .img-alt { + display: none; +} +#article-container .flink .flink-item-name { + padding: 16px 10px 0 0; + height: 40px; + font-weight: bold; + font-size: 1.43em; +} +#article-container .flink .flink-item-desc { + padding: 16px 10px 16px 0; + height: 50px; + font-size: 0.93em; +} +#article-container .flink .flink-name { + margin-bottom: 5px; + font-weight: bold; + font-size: 1.5em; +} +#recent-posts > .recent-post-item:not(:first-child) { + margin-top: 20px; +} +#recent-posts > .recent-post-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + overflow: hidden; + height: 16.8em; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + height: auto; + } +} +#recent-posts > .recent-post-item:hover img.post-bg { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +#recent-posts > .recent-post-item.ads-wrap { + display: block !important; + height: auto !important; +} +#recent-posts > .recent-post-item .post_cover { + overflow: hidden; + width: 42%; + height: 100%; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item .post_cover { + width: 100%; + height: 230px; + } +} +#recent-posts > .recent-post-item .post_cover.right { + -webkit-box-ordinal-group: 1; + -moz-box-ordinal-group: 1; + -o-box-ordinal-group: 1; + -ms-flex-order: 1; + -webkit-order: 1; + order: 1; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item .post_cover.right { + -webkit-box-ordinal-group: 0; + -moz-box-ordinal-group: 0; + -o-box-ordinal-group: 0; + -ms-flex-order: 0; + -webkit-order: 0; + order: 0; + } +} +#recent-posts > .recent-post-item >.recent-post-info { + padding: 0 40px; + width: 58%; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item >.recent-post-info { + padding: 20px 20px 30px; + width: 100%; + } +} +#recent-posts > .recent-post-item >.recent-post-info.no-cover { + width: 100%; +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item >.recent-post-info.no-cover { + padding: 30px 20px; + } +} +#recent-posts > .recent-post-item >.recent-post-info > .article-title { + color: var(--text-highlight-color); + font-size: 1.55em; + line-height: 1.4; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + -webkit-line-clamp: 2; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-title .sticky { + margin-right: 10px; + color: #ff7242; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} +@media screen and (max-width: 768px) { + #recent-posts > .recent-post-item >.recent-post-info > .article-title { + font-size: 1.43em; + } +} +#recent-posts > .recent-post-item >.recent-post-info > .article-title:hover { + color: #49b1f5; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap { + margin: 6px 0; + color: #858585; + font-size: 0.9em; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .post-meta-date { + cursor: default; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap i { + margin: 0 4px 0 0; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .fa-spinner { + margin: 0; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-label { + padding-right: 4px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-separator { + margin: 0 6px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-link { + margin: 0 4px; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap a { + color: #858585; +} +#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap a:hover { + color: #49b1f5; + text-decoration: underline; +} +#recent-posts > .recent-post-item >.recent-post-info > .content { + -webkit-line-clamp: 2; +} +.tag-cloud-list a { + display: inline-block; + padding: 0 8px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.tag-cloud-list a:hover { + color: #49b1f5 !important; + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +@media screen and (max-width: 768px) { + .tag-cloud-list a { + zoom: 0.85; + } +} +.tag-cloud-title { + font-size: 2.57em; +} +@media screen and (max-width: 768px) { + .tag-cloud-title { + font-size: 2em; + } +} +h1.page-title + .tag-cloud-list { + text-align: left; +} +#aside-content { + width: 26%; +} +@media screen and (min-width: 900px) { + #aside-content { + padding-left: 15px; + } +} +@media screen and (max-width: 900px) { + #aside-content { + width: 100%; + } +} +#aside-content > .card-widget:first-child { + margin-top: 0; +} +@media screen and (max-width: 900px) { + #aside-content > .card-widget:first-child { + margin-top: 20px; + } +} +#aside-content .card-widget { + position: relative; + overflow: hidden; + margin-top: 20px; + padding: 20px 24px; +} +#aside-content .card-info .author-info__name { + font-weight: 500; + font-size: 1.57em; +} +#aside-content .card-info .author-info__description { + margin-top: -0.42em; +} +#aside-content .card-info .card-info-data { + margin: 14px 0 4px; +} +#aside-content .card-info .card-info-social-icons { + margin: 6px 0 -6px; +} +#aside-content .card-info .card-info-social-icons .social-icon { + margin: 0 10px; + color: var(--font-color); + font-size: 1.4em; +} +#aside-content .card-info .card-info-social-icons i { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#aside-content .card-info .card-info-social-icons i:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +#aside-content .card-info #card-info-btn { + display: block; + margin-top: 14px; + background-color: var(--btn-bg); + color: var(--btn-color); + text-align: center; + line-height: 2.4; +} +#aside-content .card-info #card-info-btn:hover { + background-color: var(--btn-hover-color); +} +#aside-content .card-info #card-info-btn span { + padding-left: 10px; +} +#aside-content .item-headline { + padding-bottom: 6px; + font-size: 1.2em; +} +#aside-content .item-headline span { + margin-left: 6px; +} +@media screen and (min-width: 900px) { + #aside-content .sticky_layout { + position: sticky; + position: -webkit-sticky; + top: 20px; + -webkit-transition: top 0.3s; + -moz-transition: top 0.3s; + -o-transition: top 0.3s; + -ms-transition: top 0.3s; + transition: top 0.3s; + } +} +#aside-content .card-tag-cloud a { + display: inline-block; + padding: 0 4px; +} +#aside-content .card-tag-cloud a:hover { + color: #49b1f5 !important; +} +#aside-content .aside-list > span { + display: block; + margin-bottom: 10px; + text-align: center; +} +#aside-content .aside-list > .aside-list-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 6px 0; +} +#aside-content .aside-list > .aside-list-item:first-child { + padding-top: 0; +} +#aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 1px dashed #f5f5f5; +} +#aside-content .aside-list > .aside-list-item:last-child { + padding-bottom: 0; +} +#aside-content .aside-list > .aside-list-item .thumbnail { + overflow: hidden; + width: 4.2em; + height: 4.2em; +} +#aside-content .aside-list > .aside-list-item .content { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-left: 10px; + word-break: break-all; +} +#aside-content .aside-list > .aside-list-item .content > .name { + -webkit-line-clamp: 1; +} +#aside-content .aside-list > .aside-list-item .content > time, +#aside-content .aside-list > .aside-list-item .content > .name { + display: block; + color: #858585; + font-size: 85%; +} +#aside-content .aside-list > .aside-list-item .content > .title, +#aside-content .aside-list > .aside-list-item .content > .comment { + color: var(--font-color); + font-size: 95%; + line-height: 1.5; + -webkit-line-clamp: 2; +} +#aside-content .aside-list > .aside-list-item .content > .title:hover, +#aside-content .aside-list > .aside-list-item .content > .comment:hover { + color: #49b1f5; +} +#aside-content .aside-list > .aside-list-item.no-cover { + min-height: 4.4em; +} +#aside-content .card-archives ul.card-archive-list, +#aside-content .card-categories ul.card-category-list { + margin: 0; + padding: 0; + list-style: none; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding: 3px 10px; + color: var(--font-color); + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover { + padding: 3px 17px; + background-color: var(--text-bg-hover); +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +#aside-content .card-categories .card-category-list.child { + padding: 0 0 0 16px; +} +#aside-content .card-categories .card-category-list > .parent > a.expand i { + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); +} +#aside-content .card-categories .card-category-list > .parent > a.expand + .child { + display: block; +} +#aside-content .card-categories .card-category-list > .parent > a .card-category-list-name { + width: 70% !important; +} +#aside-content .card-categories .card-category-list > .parent > a .card-category-list-count { + width: calc(100% - 70% - 20px); + text-align: right; +} +#aside-content .card-categories .card-category-list > .parent > a i { + float: right; + margin-right: -0.5em; + padding: 0.5em; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); +} +#aside-content .card-webinfo .webinfo .webinfo-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 2px 10px 0; +} +#aside-content .card-webinfo .webinfo .webinfo-item div:first-child { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-right: 20px; +} +@media screen and (min-width: 901px) { + #aside-content #card-toc { + right: 0 !important; + } +} +@media screen and (max-width: 900px) { + #aside-content #card-toc { + position: fixed; + right: 55px; + bottom: 30px; + z-index: 100; + max-width: 380px; + max-height: calc(100% - 60px); + width: calc(100% - 80px); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + -ms-transition: none; + transition: none; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: right bottom; + -moz-transform-origin: right bottom; + -o-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + } + #aside-content #card-toc.open { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +#aside-content #card-toc .toc-percentage { + float: right; + margin-top: -9px; + color: #a9a9a9; + font-style: italic; + font-size: 140%; +} +#aside-content #card-toc .toc-content { + overflow-y: scroll; + overflow-y: overlay; + margin: 0 -24px; + max-height: calc(100vh - 120px); + width: calc(100% + 48px); +} +@media screen and (max-width: 900px) { + #aside-content #card-toc .toc-content { + max-height: calc(100vh - 140px); + } +} +#aside-content #card-toc .toc-content > * { + margin: 0 20px !important; +} +#aside-content #card-toc .toc-content > * > .toc-item > .toc-child { + margin-left: 10px; + padding-left: 10px; + border-left: 1px solid var(--dark-grey); +} +#aside-content #card-toc .toc-content:not(.is-expand) .toc-child { + display: none; +} +@media screen and (max-width: 900px) { + #aside-content #card-toc .toc-content:not(.is-expand) .toc-child { + display: block !important; + } +} +#aside-content #card-toc .toc-content:not(.is-expand) .toc-item.active .toc-child { + display: block; +} +#aside-content #card-toc .toc-content ol, +#aside-content #card-toc .toc-content li { + list-style: none; +} +#aside-content #card-toc .toc-content > ol { + padding: 0 !important; +} +#aside-content #card-toc .toc-content ol { + margin: 0; + padding-left: 18px; +} +#aside-content #card-toc .toc-content .toc-link { + display: block; + margin: 4px 0; + padding: 1px 6px; + color: var(--toc-link-color); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#aside-content #card-toc .toc-content .toc-link:hover { + color: #49b1f5; +} +#aside-content #card-toc .toc-content .toc-link.active { + background: #00c4b6; + color: #fff; +} +#aside-content .sticky_layout:only-child > :first-child { + margin-top: 0; +} +#aside-content .card-more-btn { + float: right; + color: inherit; +} +#aside-content .card-more-btn:hover { + -webkit-animation: more-btn-move 1s infinite; + -moz-animation: more-btn-move 1s infinite; + -o-animation: more-btn-move 1s infinite; + -ms-animation: more-btn-move 1s infinite; + animation: more-btn-move 1s infinite; +} +#aside-content .card-announcement .item-headline i { + color: #f00; +} +.avatar-img { + overflow: hidden; + margin: 0 auto; + width: 110px; + height: 110px; + border-radius: 70px; +} +.avatar-img img { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.3s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.3s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.3s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.3s; + transition: filter 375ms ease-in 0.2s, transform 0.3s; + object-fit: cover; +} +.avatar-img img:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +.site-data { + display: table; + width: 100%; + table-layout: fixed; +} +.site-data > a { + display: table-cell; +} +.site-data > a div { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.site-data > a:hover div { + color: #49b1f5 !important; +} +.site-data > a .headline { + color: var(--font-color); +} +.site-data > a .length-num { + margin-top: -0.32em; + color: var(--text-highlight-color); + font-size: 1.4em; +} +@media screen and (min-width: 900px) { + html.hide-aside .layout { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } + html.hide-aside .layout > .aside-content { + display: none; + } + html.hide-aside .layout > div:first-child { + width: 80%; + } +} +.page .sticky_layout { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +@-moz-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-webkit-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-o-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-moz-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-moz-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-webkit-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-o-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +#post-comment .comment-head { + margin-bottom: 20px; +} +#post-comment .comment-head:after { + display: block; + clear: both; + content: ''; +} +#post-comment .comment-head .comment-headline { + display: inline-block; + vertical-align: middle; + font-weight: 700; + font-size: 1.43em; +} +#post-comment .comment-head .comment-switch { + display: inline-block; + float: right; + margin: 2px auto 0; + padding: 4px 16px; + width: max-content; + border-radius: 8px; + background: #f6f8fa; +} +#post-comment .comment-head .comment-switch .first-comment { + color: #49b1f5; +} +#post-comment .comment-head .comment-switch .second-comment { + color: #ff7242; +} +#post-comment .comment-head .comment-switch #switch-btn { + position: relative; + display: inline-block; + margin: -4px 8px 0; + width: 42px; + height: 22px; + border-radius: 34px; + background-color: #49b1f5; + vertical-align: middle; + cursor: pointer; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; +} +#post-comment .comment-head .comment-switch #switch-btn:before { + position: absolute; + bottom: 4px; + left: 4px; + width: 14px; + height: 14px; + border-radius: 50%; + background-color: #fff; + content: ''; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; +} +#post-comment .comment-wrap > div { + -webkit-animation: tabshow 0.5s; + -moz-animation: tabshow 0.5s; + -o-animation: tabshow 0.5s; + -ms-animation: tabshow 0.5s; + animation: tabshow 0.5s; +} +#post-comment .comment-wrap > div:nth-child(2) { + display: none; +} +#post-comment.move #switch-btn { + background-color: #ff7242; +} +#post-comment.move #switch-btn:before { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -o-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); +} +#post-comment.move .comment-wrap > div:first-child { + display: none; +} +#post-comment.move .comment-wrap > div:last-child { + display: block; +} +#footer { + position: relative; + background-color: #49b1f5; + background-attachment: scroll; + background-position: bottom; + background-size: cover; +} +#footer-wrap { + position: relative; + padding: 40px 20px; + color: var(--light-grey); + text-align: center; +} +#footer-wrap a { + color: var(--light-grey); +} +#footer-wrap a:hover { + text-decoration: underline; +} +#footer-wrap .footer-separator { + margin: 0 4px; +} +#footer-wrap .icp-icon { + padding: 0 4px; + max-height: 1.4em; + width: auto; + vertical-align: text-bottom; +} +#page-header { + position: relative; + width: 100%; + background-color: #49b1f5; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#page-header:not(.not-top-img):before { + position: absolute; + width: 100%; + height: 100%; + background-color: var(--mark-bg); + content: ''; +} +#page-header.full_page { + height: 100vh; + background-attachment: fixed; +} +#page-header.full_page #site-info { + position: absolute; + top: 43%; + padding: 0 10px; + width: 100%; +} +#page-header #site-title, +#page-header #site-subtitle, +#page-header #scroll-down .scroll-down-effects { + text-align: center; + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + line-height: 1.5; +} +#page-header #site-title { + margin: 0; + color: var(--white); + font-size: 1.85em; +} +@media screen and (min-width: 768px) { + #page-header #site-title { + font-size: 2.85em; + } +} +#page-header #site-subtitle { + color: var(--light-grey); + font-size: 1.15em; +} +@media screen and (min-width: 768px) { + #page-header #site-subtitle { + font-size: 1.72em; + } +} +#page-header #site_social_icons { + display: none; + margin: 0 auto; + text-align: center; +} +@media screen and (max-width: 768px) { + #page-header #site_social_icons { + display: block; + } +} +#page-header #site_social_icons .social-icon { + margin: 0 10px; + color: var(--light-grey); + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + font-size: 1.43em; +} +#page-header #scroll-down { + position: absolute; + bottom: 10px; + width: 100%; + cursor: pointer; +} +#page-header #scroll-down .scroll-down-effects { + position: relative; + width: 100%; + color: var(--light-grey); + font-size: 20px; +} +#page-header.not-home-page { + height: 400px; +} +@media screen and (max-width: 768px) { + #page-header.not-home-page { + height: 280px; + } +} +#page-header #page-site-info { + position: absolute; + top: 200px; + padding: 0 10px; + width: 100%; +} +@media screen and (max-width: 768px) { + #page-header #page-site-info { + top: 140px; + } +} +#page-header.post-bg { + height: 400px; +} +@media screen and (max-width: 768px) { + #page-header.post-bg { + height: 360px; + } +} +#page-header #post-info { + position: absolute; + bottom: 100px; + padding: 0 8%; + width: 100%; + text-align: center; +} +@media screen and (max-width: 900px) { + #page-header #post-info { + bottom: 30px; + text-align: left; + } +} +@media screen and (max-width: 768px) { + #page-header #post-info { + bottom: 22px; + padding: 0 22px; + } +} +#page-header.not-top-img { + margin-bottom: 10px; + height: 60px; + background: 0; +} +#page-header.not-top-img #nav { + background: rgba(255,255,255,0.8); + -webkit-box-shadow: 0 5px 6px -5px rgba(133,133,133,0.6); + box-shadow: 0 5px 6px -5px rgba(133,133,133,0.6); +} +#page-header.not-top-img #nav a, +#page-header.not-top-img #nav .site-name { + color: var(--font-color); + text-shadow: none; +} +#page-header.nav-fixed #nav { + position: fixed; + top: -60px; + z-index: 91; + background: rgba(255,255,255,0.8); + -webkit-box-shadow: 0 5px 6px -5px rgba(133,133,133,0.6); + box-shadow: 0 5px 6px -5px rgba(133,133,133,0.6); + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + -moz-transition: -moz-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + -o-transition: -o-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + -ms-transition: -ms-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out; +} +#page-header.nav-fixed #nav #blog-info { + color: var(--font-color); +} +#page-header.nav-fixed #nav #blog-info:hover { + color: #49b1f5; +} +#page-header.nav-fixed #nav #blog-info .site-name { + text-shadow: none; +} +#page-header.nav-fixed #nav a, +#page-header.nav-fixed #nav #toggle-menu { + color: var(--font-color); + text-shadow: none; +} +#page-header.nav-fixed #nav a:hover, +#page-header.nav-fixed #nav #toggle-menu:hover { + color: #49b1f5; +} +#page-header.nav-fixed.fixed #nav { + top: 0; + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#page-header.nav-visible:not(.fixed) #nav { + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; + -webkit-transform: translate3d(0, 100%, 0); + -moz-transform: translate3d(0, 100%, 0); + -o-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); +} +#page-header.nav-visible:not(.fixed) + .layout > .aside-content > .sticky_layout { + top: 70px; + -webkit-transition: top 0.5s; + -moz-transition: top 0.5s; + -o-transition: top 0.5s; + -ms-transition: top 0.5s; + transition: top 0.5s; +} +#page-header.fixed #nav { + position: fixed; +} +#page-header.fixed + .layout > .aside-content > .sticky_layout { + top: 70px; + -webkit-transition: top 0.5s; + -moz-transition: top 0.5s; + -o-transition: top 0.5s; + -ms-transition: top 0.5s; + transition: top 0.5s; +} +#page-header.fixed + .layout #card-toc .toc-content { + max-height: calc(100vh - 170px); +} +#page h1.page-title { + margin: 8px 0 20px; +} +#post > #post-info { + margin-bottom: 30px; +} +#post > #post-info .post-title { + padding-bottom: 4px; + border-bottom: 1px solid var(--light-grey); + color: var(--text-highlight-color); +} +#post > #post-info .post-title .post-edit-link { + float: right; +} +#post > #post-info #post-meta, +#post > #post-info #post-meta a { + color: #78818a; +} +#post-info .post-title { + margin-bottom: 8px; + color: var(--white); + font-weight: normal; + font-size: 2.5em; + line-height: 1.5; + -webkit-line-clamp: 3; +} +@media screen and (max-width: 768px) { + #post-info .post-title { + font-size: 2.1em; + } +} +#post-info .post-title .post-edit-link { + padding-left: 10px; +} +#post-info #post-meta { + color: var(--light-grey); + font-size: 95%; +} +@media screen and (min-width: 768px) { + #post-info #post-meta > .meta-secondline > span:first-child { + display: none; + } +} +@media screen and (max-width: 768px) { + #post-info #post-meta { + font-size: 90%; + } + #post-info #post-meta > .meta-firstline, + #post-info #post-meta > .meta-secondline { + display: inline; + } +} +#post-info #post-meta .post-meta-separator { + margin: 0 5px; +} +#post-info #post-meta .post-meta-icon { + margin-right: 4px; +} +#post-info #post-meta .post-meta-label { + margin-right: 4px; +} +#post-info #post-meta a { + color: var(--light-grey); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +#post-info #post-meta a:hover { + color: #49b1f5; + text-decoration: underline; +} +#nav { + position: absolute; + top: 0; + z-index: 90; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 0 36px; + width: 100%; + height: 60px; + font-size: 1.3em; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +@media screen and (max-width: 768px) { + #nav { + padding: 0 16px; + } +} +#nav.show { + opacity: 1; + -ms-filter: none; + filter: none; +} +#nav #blog-info { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + color: var(--light-grey); +} +#nav #blog-info .site-icon { + margin-right: 6px; + height: 36px; + vertical-align: middle; +} +#nav #toggle-menu { + display: none; + padding: 2px 0 0 6px; + vertical-align: top; +} +#nav #toggle-menu:hover { + color: var(--white); +} +#nav a { + color: var(--light-grey); +} +#nav a:hover { + color: var(--white); +} +#nav .site-name { + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + font-weight: bold; +} +#nav .menus_items { + display: inline; +} +#nav .menus_items .menus_item { + position: relative; + display: inline-block; + padding: 0 0 0 14px; +} +#nav .menus_items .menus_item:hover .menus_item_child { + display: block; +} +#nav .menus_items .menus_item:hover > a > i:last-child { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +#nav .menus_items .menus_item > a > i:last-child { + padding: 4px; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#nav .menus_items .menus_item .menus_item_child { + position: absolute; + right: 0; + display: none; + margin-top: 8px; + padding: 0; + width: max-content; + border-radius: 5px; + background-color: var(--sidebar-bg); + -webkit-box-shadow: 0 5px 20px -4px rgba(0,0,0,0.5); + box-shadow: 0 5px 20px -4px rgba(0,0,0,0.5); + -webkit-animation: sub_menus 0.3s 0.1s ease both; + -moz-animation: sub_menus 0.3s 0.1s ease both; + -o-animation: sub_menus 0.3s 0.1s ease both; + -ms-animation: sub_menus 0.3s 0.1s ease both; + animation: sub_menus 0.3s 0.1s ease both; +} +#nav .menus_items .menus_item .menus_item_child:before { + position: absolute; + top: -8px; + left: 0; + width: 100%; + height: 20px; + content: ''; +} +#nav .menus_items .menus_item .menus_item_child li { + list-style: none; +} +#nav .menus_items .menus_item .menus_item_child li:hover { + background: var(--text-bg-hover); +} +#nav .menus_items .menus_item .menus_item_child li:first-child { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +#nav .menus_items .menus_item .menus_item_child li:last-child { + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} +#nav .menus_items .menus_item .menus_item_child li a { + display: inline-block; + padding: 8px 16px; + width: 100%; + color: var(--font-color) !important; + text-shadow: none !important; +} +#nav.hide-menu #toggle-menu { + display: inline-block !important; +} +#nav.hide-menu #toggle-menu .site-page { + font-size: inherit; +} +#nav.hide-menu .menus_items { + display: none; +} +#nav.hide-menu #search-button span { + display: none; +} +#nav #search-button { + display: inline; + padding: 0 0 0 14px; +} +#nav .site-page { + position: relative; + padding-bottom: 6px; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); + font-size: 0.78em; + cursor: pointer; +} +#nav .site-page:not(.child):after { + position: absolute; + bottom: 0; + left: 0; + z-index: -1; + width: 0; + height: 3px; + background-color: #80c8f8; + content: ''; + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#nav .site-page:not(.child):hover:after { + width: 100%; +} +#pagination .pagination { + margin-top: 20px; + text-align: center; +} +#pagination .page-number.current { + background: #00c4b6; + color: var(--white); +} +#pagination .pagination-info { + position: absolute; + top: 50%; + padding: 20px 40px; + width: 100%; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +#pagination .prev_info, +#pagination .next_info { + color: var(--white); + font-weight: 500; +} +#pagination .next-post .pagination-info { + text-align: right; +} +#pagination .pull-full { + width: 100% !important; +} +#pagination .prev-post .label, +#pagination .next-post .label { + color: var(--light-grey); + text-transform: uppercase; + font-size: 90%; +} +#pagination .prev-post, +#pagination .next-post { + width: 50%; +} +@media screen and (max-width: 768px) { + #pagination .prev-post, + #pagination .next-post { + width: 100%; + } +} +#pagination .prev-post a, +#pagination .next-post a { + position: relative; + display: block; + overflow: hidden; + height: 150px; +} +#pagination.pagination-post { + overflow: hidden; + margin-top: 40px; + width: 100%; + background: #000; +} +.layout > .recent-posts .pagination > * { + display: inline-block; + margin: 0 6px; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; +} +.layout > .recent-posts .pagination > *:not(.space):hover { + background: var(--btn-hover-color); + color: var(--btn-color); +} +.layout > div:not(.recent-posts) .pagination .page-number { + display: inline-block; + margin: 0 4px; + min-width: 24px; + height: 24px; + text-align: center; + line-height: 24px; + cursor: pointer; +} +#article-container { + word-wrap: break-word; + overflow-wrap: break-word; +} +#article-container a { + color: #49b1f5; +} +#article-container a:hover { + text-decoration: underline; +} +#article-container img { + display: block; + margin: 0 auto 20px; + max-width: 100%; + -webkit-transition: filter 375ms ease-in 0.2s; + -moz-transition: filter 375ms ease-in 0.2s; + -o-transition: filter 375ms ease-in 0.2s; + -ms-transition: filter 375ms ease-in 0.2s; + transition: filter 375ms ease-in 0.2s; +} +#article-container p { + margin: 0 0 16px; +} +#article-container iframe { + margin: 0 0 20px; +} +#article-container kbd { + margin: 0 3px; + padding: 3px 5px; + border: 1px solid #b4b4b4; + border-radius: 3px; + background-color: #f8f8f8; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.25), 0 2px 1px 0 rgba(255,255,255,0.6) inset; + box-shadow: 0 1px 3px rgba(0,0,0,0.25), 0 2px 1px 0 rgba(255,255,255,0.6) inset; + color: #34495e; + white-space: nowrap; + font-weight: 600; + font-size: 0.9em; + font-family: Monaco, 'Ubuntu Mono', monospace; + line-height: 1em; +} +#article-container ol ol, +#article-container ul ol, +#article-container ol ul, +#article-container ul ul { + padding-left: 20px; +} +#article-container ol li, +#article-container ul li { + margin: 4px 0; +} +#article-container ol p, +#article-container ul p { + margin: 0 0 8px; +} +#article-container > :last-child { + margin-bottom: 0 !important; +} +#article-container hr { + margin: 20px 0; +} +#post .tag_share:after { + display: block; + clear: both; + content: ''; +} +#post .tag_share .post-meta__tag-list { + display: inline-block; +} +#post .tag_share .post-meta__tags { + display: inline-block; + margin: 8px 8px 8px 0; + padding: 0 12px; + width: fit-content; + border: 1px solid #49b1f5; + border-radius: 12px; + color: #49b1f5; + font-size: 0.85em; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#post .tag_share .post-meta__tags:hover { + background: #49b1f5; + color: var(--white); +} +#post .tag_share .post_share { + display: inline-block; + float: right; + margin: 8px 0 0; + width: fit-content; +} +#post .tag_share .post_share .social-share { + font-size: 0.85em; +} +#post .tag_share .post_share .social-share .social-share-icon { + margin: 0 4px; + width: 1.85em; + height: 1.85em; + font-size: 1.2em; + line-height: 1.85em; +} +#post .post-copyright { + position: relative; + margin: 40px 0 10px; + padding: 10px 16px; + border: 1px solid var(--light-grey); + -webkit-transition: box-shadow 0.3s ease-in-out; + -moz-transition: box-shadow 0.3s ease-in-out; + -o-transition: box-shadow 0.3s ease-in-out; + -ms-transition: box-shadow 0.3s ease-in-out; + transition: box-shadow 0.3s ease-in-out; +} +#post .post-copyright:before { + position: absolute; + top: 2px; + right: 12px; + color: #49b1f5; + content: '\f1f9'; + font-size: 1.3em; +} +#post .post-copyright:hover { + -webkit-box-shadow: 0 0 8px 0 rgba(232,237,250,0.6), 0 2px 4px 0 rgba(232,237,250,0.5); + box-shadow: 0 0 8px 0 rgba(232,237,250,0.6), 0 2px 4px 0 rgba(232,237,250,0.5); +} +#post .post-copyright .post-copyright-meta { + color: #49b1f5; + font-weight: bold; +} +#post .post-copyright .post-copyright-meta i { + margin-right: 3px; +} +#post .post-copyright .post-copyright-info { + padding-left: 6px; +} +#post .post-copyright .post-copyright-info a { + text-decoration: underline; + word-break: break-word; +} +#post .post-copyright .post-copyright-info a:hover { + text-decoration: none; +} +#post .post-outdate-notice { + position: relative; + margin: 0 0 20px; + padding: 0.5em 1.2em; + border-radius: 3px; + background-color: #ffe6e6; + color: #f66; + padding: 0.5em 1em 0.5em 2.6em; + border-left: 5px solid #ff8080; +} +#post .post-outdate-notice:before { + position: absolute; + top: 50%; + left: 0.9em; + color: #ff8080; + content: '\f071'; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} +#post .ads-wrap { + margin: 40px 0; +} +.relatedPosts { + margin-top: 40px; +} +.relatedPosts > .headline { + margin-bottom: 5px; + font-weight: 700; + font-size: 1.43em; +} +.relatedPosts > .relatedPosts-list > div { + position: relative; + display: inline-block; + overflow: hidden; + margin: 3px; + width: calc(33.333% - 6px); + height: 200px; + background: #000; + vertical-align: bottom; +} +@media screen and (max-width: 768px) { + .relatedPosts > .relatedPosts-list > div { + margin: 2px; + width: calc(50% - 4px); + height: 150px; + } +} +@media screen and (max-width: 600px) { + .relatedPosts > .relatedPosts-list > div { + width: calc(100% - 4px); + } +} +.relatedPosts > .relatedPosts-list .content { + position: absolute; + top: 50%; + padding: 0 20px; + width: 100%; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +.relatedPosts > .relatedPosts-list .content .date { + color: var(--light-grey); + font-size: 90%; +} +.relatedPosts > .relatedPosts-list .content .title { + color: var(--white); + -webkit-line-clamp: 2; +} +.post-reward { + position: relative; + margin-top: 80px; + width: 100%; + text-align: center; + pointer-events: none; +} +.post-reward > * { + pointer-events: auto; +} +.post-reward .reward-button { + display: inline-block; + padding: 4px 24px; + background: var(--btn-bg); + color: var(--btn-color); + cursor: pointer; +} +.post-reward .reward-button i { + margin-right: 5px; +} +.post-reward:hover .reward-button { + background: var(--btn-hover-color); +} +.post-reward:hover > .reward-main { + display: block; +} +.post-reward .reward-main { + position: absolute; + bottom: 40px; + left: 0; + z-index: 100; + display: none; + padding: 0 0 15px; + width: 100%; +} +.post-reward .reward-main .reward-all { + display: inline-block; + margin: 0; + padding: 20px 10px; + border-radius: 4px; + background: var(--reward-pop); +} +.post-reward .reward-main .reward-all:before { + position: absolute; + bottom: -10px; + left: 0; + width: 100%; + height: 20px; + content: ''; +} +.post-reward .reward-main .reward-all:after { + position: absolute; + right: 0; + bottom: 2px; + left: 0; + margin: 0 auto; + width: 0; + height: 0; + border-top: 13px solid var(--reward-pop); + border-right: 13px solid transparent; + border-left: 13px solid transparent; + content: ''; +} +.post-reward .reward-main .reward-all .reward-item { + display: inline-block; + padding: 0 8px; + list-style-type: none; + vertical-align: top; +} +.post-reward .reward-main .reward-all .reward-item img { + width: 130px; + height: 130px; +} +.post-reward .reward-main .reward-all .reward-item .post-qr-code-desc { + width: 130px; + color: #858585; +} +#rightside { + position: fixed; + right: -48px; + bottom: 40px; + z-index: 100; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#rightside.rightside-show { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transform: translate(-58px, 0); + -moz-transform: translate(-58px, 0); + -o-transform: translate(-58px, 0); + -ms-transform: translate(-58px, 0); + transform: translate(-58px, 0); +} +#rightside #rightside-config-hide { + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: -webkit-transform 0.4s; + -moz-transition: -moz-transform 0.4s; + -o-transition: -o-transform 0.4s; + -ms-transition: -ms-transform 0.4s; + transition: transform 0.4s; + -webkit-transform: translate(45px, 0); + -moz-transform: translate(45px, 0); + -o-transform: translate(45px, 0); + -ms-transform: translate(45px, 0); + transform: translate(45px, 0); +} +#rightside #rightside-config-hide.show { + height: auto; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} +#rightside #rightside-config-hide.status { + height: auto; + opacity: 1; + -ms-filter: none; + filter: none; +} +#rightside > div > button, +#rightside > div > a { + display: block; + margin-bottom: 5px; + width: 35px; + height: 35px; + border-radius: 5px; + background-color: var(--btn-bg); + color: var(--btn-color); + text-align: center; + font-size: 16px; + line-height: 35px; +} +#rightside > div > button:hover, +#rightside > div > a:hover { + background-color: var(--btn-hover-color); +} +#rightside #mobile-toc-button { + display: none; +} +@media screen and (max-width: 900px) { + #rightside #mobile-toc-button { + display: block; + } +} +@media screen and (max-width: 900px) { + #rightside #hide-aside-btn { + display: none; + } +} +#sidebar #menu-mask { + position: fixed; + z-index: 102; + display: none; + width: 100%; + height: 100%; + background: rgba(0,0,0,0.8); +} +#sidebar #sidebar-menus { + position: fixed; + top: 0; + right: -300px; + z-index: 103; + overflow-x: hidden; + overflow-y: scroll; + padding-left: 5px; + width: 300px; + height: 100%; + background: var(--sidebar-bg); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#sidebar #sidebar-menus.open { + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +#sidebar #sidebar-menus > .avatar-img { + margin: 20px auto; +} +#sidebar #sidebar-menus .sidebar-site-data { + padding: 0 10px; +} +#sidebar #sidebar-menus hr { + margin: 20px auto; +} +#sidebar #sidebar-menus .menus_items { + padding: 0 5px; +} +#sidebar #sidebar-menus .menus_items .site-page { + position: relative; + display: block; + padding: 6px 30px 6px 22px; + color: var(--font-color); + font-size: 1.15em; +} +#sidebar #sidebar-menus .menus_items .site-page:hover { + background: var(--text-bg-hover); +} +#sidebar #sidebar-menus .menus_items .site-page i:first-child { + width: 15%; + text-align: left; +} +#sidebar #sidebar-menus .menus_items .site-page.group > i:last-child { + position: absolute; + top: 0.78em; + right: 13px; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#sidebar #sidebar-menus .menus_items .site-page.group.hide > i:last-child { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +#sidebar #sidebar-menus .menus_items .site-page.group.hide + .menus_item_child { + display: none; +} +#sidebar #sidebar-menus .menus_items .menus_item_child { + margin: 0; + padding-left: 25px; + list-style: none; +} +#vcomment { + font-size: 1.1em; +} +#vcomment .vbtn { + border: none; + background: var(--btn-bg); + color: var(--btn-color); +} +#vcomment .vbtn:hover { + background: var(--btn-hover-color); +} +#vcomment .vimg { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#vcomment .vimg:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +#vcomment .vcards .vcard .vcontent.expand:before, +#vcomment .vcards .vcard .vcontent.expand:after { + z-index: 22; +} +#waline-wrap { + --waline-font-size: 1.1em; + --waline-theme-color: #49b1f5; + --waline-active-color: #ff7242; +} +#waline-wrap .wl-comment-actions > button:not(last-child) { + padding-right: 4px; +} +.fireworks { + position: fixed; + top: 0; + left: 0; + z-index: 9999; + pointer-events: none; +} +.medium-zoom-image--opened { + z-index: 99999 !important; + margin: 0 !important; +} +.medium-zoom-overlay { + z-index: 99999 !important; +} +.mermaid-wrap { + margin: 0 0 20px; + text-align: center; +} +.mermaid-wrap > svg { + height: 100%; +} +.utterances, +.fb-comments iframe { + width: 100% !important; +} +#gitalk-container .gt-meta { + margin: 0 0 0.8em; + padding: 6px 0 16px; +} +.katex-wrap { + overflow: auto; +} +.katex-wrap::-webkit-scrollbar { + display: none; +} +mjx-container { + overflow-x: auto; + overflow-y: hidden; + padding-bottom: 4px; + max-width: 100%; +} +mjx-container[display] { + display: block !important; + min-width: auto !important; +} +mjx-container:not([display]) { + display: inline-grid !important; +} +mjx-assistive-mml { + right: 0; + bottom: 0; +} +.aplayer { + color: #4c4948; +} +#article-container .aplayer { + margin: 0 0 20px; +} +.snackbar-css { + border-radius: 5px !important; +} +.abc-music-sheet { + margin: 0 0 20px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.3s; + -moz-transition: opacity 0.3s; + -o-transition: opacity 0.3s; + -ms-transition: opacity 0.3s; + transition: opacity 0.3s; +} +.abc-music-sheet.abcjs-container { + opacity: 1; + -ms-filter: none; + filter: none; +} +@media screen and (max-width: 768px) { + .fancybox__toolbar__column.is-middle { + display: none; + } +} +#article-container .btn-center { + margin: 0 0 20px; + text-align: center; +} +#article-container .btn-beautify { + display: inline-block; + margin: 0 4px 6px; + padding: 0 15px; + background-color: var(--btn-beautify-color, #777); + color: #fff; + line-height: 2; +} +#article-container .btn-beautify.blue { + --btn-beautify-color: #428bca; +} +#article-container .btn-beautify.pink { + --btn-beautify-color: #ff69b4; +} +#article-container .btn-beautify.red { + --btn-beautify-color: #f00; +} +#article-container .btn-beautify.purple { + --btn-beautify-color: #6f42c1; +} +#article-container .btn-beautify.orange { + --btn-beautify-color: #ff8c00; +} +#article-container .btn-beautify.green { + --btn-beautify-color: #5cb85c; +} +#article-container .btn-beautify:hover { + background-color: var(--btn-hover-color); +} +#article-container .btn-beautify i + span { + margin-left: 6px; +} +#article-container .btn-beautify:not(.block) + .btn-beautify:not(.block) { + margin: 0 4px 20px; +} +#article-container .btn-beautify.block { + display: block; + margin: 0 0 20px; + width: fit-content; + width: -moz-fit-content; +} +#article-container .btn-beautify.block.center { + margin: 0 auto 20px; +} +#article-container .btn-beautify.block.right { + margin: 0 0 20px auto; +} +#article-container .btn-beautify.larger { + padding: 6px 15px; +} +#article-container .btn-beautify:hover { + text-decoration: none; +} +#article-container .btn-beautify.outline { + border: 1px solid transparent; + border-color: var(--btn-beautify-color, #777); + background-color: transparent; + color: var(--btn-beautify-color, #777); +} +#article-container .btn-beautify.outline:hover { + background-color: var(--btn-beautify-color, #777); +} +#article-container .btn-beautify.outline:hover { + color: #fff !important; +} +#article-container figure.gallery-group { + position: relative; + float: left; + overflow: hidden; + margin: 6px 4px; + width: calc(50% - 8px); + height: 250px; + border-radius: 8px; + background: #000; + -webkit-transform: translate3d(0, 0, 0); +} +@media screen and (max-width: 600px) { + #article-container figure.gallery-group { + width: calc(100% - 8px); + } +} +#article-container figure.gallery-group:hover img { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#article-container figure.gallery-group:hover .gallery-group-name::after { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#article-container figure.gallery-group:hover p { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +#article-container figure.gallery-group img { + position: relative; + margin: 0; + max-width: none; + width: calc(100% + 20px); + height: 250px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transition: all 0.3s, filter 375ms ease-in 0.2s; + -moz-transition: all 0.3s, filter 375ms ease-in 0.2s; + -o-transition: all 0.3s, filter 375ms ease-in 0.2s; + -ms-transition: all 0.3s, filter 375ms ease-in 0.2s; + transition: all 0.3s, filter 375ms ease-in 0.2s; + -webkit-transform: translate3d(-10px, 0, 0); + -moz-transform: translate3d(-10px, 0, 0); + -o-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + object-fit: cover; +} +#article-container figure.gallery-group figcaption { + position: absolute; + top: 0; + left: 0; + padding: 30px; + width: 100%; + height: 100%; + color: #fff; + text-transform: uppercase; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; +} +#article-container figure.gallery-group figcaption > a { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +#article-container figure.gallery-group p { + margin: 0; + padding: 8px 0 0; + letter-spacing: 1px; + font-size: 1.1em; + line-height: 1.5; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; + -moz-transition: opacity 0.35s, -moz-transform 0.35s; + -o-transition: opacity 0.35s, -o-transform 0.35s; + -ms-transition: opacity 0.35s, -ms-transform 0.35s; + transition: opacity 0.35s, transform 0.35s; + -webkit-transform: translate3d(100%, 0, 0); + -moz-transform: translate3d(100%, 0, 0); + -o-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + -webkit-line-clamp: 4; +} +#article-container figure.gallery-group .gallery-group-name { + position: relative; + margin: 0; + padding: 8px 0; + font-weight: bold; + font-size: 1.65em; + line-height: 1.5; + -webkit-line-clamp: 2; +} +#article-container figure.gallery-group .gallery-group-name:after { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: #fff; + content: ''; + -webkit-transition: -webkit-transform 0.35s; + -moz-transition: -moz-transform 0.35s; + -o-transition: -o-transform 0.35s; + -ms-transition: -ms-transform 0.35s; + transition: transform 0.35s; + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +#article-container .gallery-group-main { + overflow: auto; + padding: 0 0 16px; +} +#article-container .gallery-container { + margin: 0 0 16px; + text-align: center; +} +#article-container .gallery-container img { + display: initial; + margin: 0; + width: 100%; + height: 100%; +} +#article-container .gallery-container .gallery-data { + display: none; +} +#article-container .gallery-container button { + margin-top: 25px; + padding: 10px; + width: 9em; + border-radius: 5px; + background: var(--btn-bg); + color: var(--btn-color); + font-weight: bold; + font-size: 1.1em; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#article-container .gallery-container button:hover { + background: var(--btn-hover-color); +} +#article-container .loading-container { + display: inline-block; + overflow: hidden; + width: 154px; + height: 154px; +} +#article-container .loading-container .loading-item { + position: relative; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform: translateZ(0) scale(1); + -moz-transform: translateZ(0) scale(1); + -o-transform: translateZ(0) scale(1); + -ms-transform: translateZ(0) scale(1); + transform: translateZ(0) scale(1); + -webkit-transform-origin: 0 0; + -moz-transform-origin: 0 0; + -o-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; +} +#article-container .loading-container .loading-item div { + position: absolute; + width: 30.8px; + height: 30.8px; + border-radius: 50%; + background: #e15b64; + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + -webkit-animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); + -moz-animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); + -o-animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); + -ms-animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); + animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); +} +#article-container .loading-container .loading-item div:nth-child(1) { + background: #f47e60; + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + -webkit-animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; + -moz-animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; + -o-animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; + -ms-animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; + animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; +} +#article-container .loading-container .loading-item div:nth-child(2) { + background: #e15b64; + -webkit-animation-delay: -0.48s; + -moz-animation-delay: -0.48s; + -o-animation-delay: -0.48s; + -ms-animation-delay: -0.48s; + animation-delay: -0.48s; +} +#article-container .loading-container .loading-item div:nth-child(3) { + background: #f47e60; + -webkit-animation-delay: -0.96s; + -moz-animation-delay: -0.96s; + -o-animation-delay: -0.96s; + -ms-animation-delay: -0.96s; + animation-delay: -0.96s; +} +#article-container .loading-container .loading-item div:nth-child(4) { + background: #f8b26a; + -webkit-animation-delay: -1.44s; + -moz-animation-delay: -1.44s; + -o-animation-delay: -1.44s; + -ms-animation-delay: -1.44s; + animation-delay: -1.44s; +} +#article-container .loading-container .loading-item div:nth-child(5) { + background: #abbd81; + -webkit-animation-delay: -1.92s; + -moz-animation-delay: -1.92s; + -o-animation-delay: -1.92s; + -ms-animation-delay: -1.92s; + animation-delay: -1.92s; +} +@-moz-keyframes loading-ball { + 0% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 25% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 50% { + -webkit-transform: translate(9.24px, 61.6px) scale(1); + -moz-transform: translate(9.24px, 61.6px) scale(1); + -o-transform: translate(9.24px, 61.6px) scale(1); + -ms-transform: translate(9.24px, 61.6px) scale(1); + transform: translate(9.24px, 61.6px) scale(1); + } + 75% { + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } +} +@-webkit-keyframes loading-ball { + 0% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 25% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 50% { + -webkit-transform: translate(9.24px, 61.6px) scale(1); + -moz-transform: translate(9.24px, 61.6px) scale(1); + -o-transform: translate(9.24px, 61.6px) scale(1); + -ms-transform: translate(9.24px, 61.6px) scale(1); + transform: translate(9.24px, 61.6px) scale(1); + } + 75% { + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } +} +@-o-keyframes loading-ball { + 0% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 25% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 50% { + -webkit-transform: translate(9.24px, 61.6px) scale(1); + -moz-transform: translate(9.24px, 61.6px) scale(1); + -o-transform: translate(9.24px, 61.6px) scale(1); + -ms-transform: translate(9.24px, 61.6px) scale(1); + transform: translate(9.24px, 61.6px) scale(1); + } + 75% { + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } +} +@keyframes loading-ball { + 0% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 25% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 50% { + -webkit-transform: translate(9.24px, 61.6px) scale(1); + -moz-transform: translate(9.24px, 61.6px) scale(1); + -o-transform: translate(9.24px, 61.6px) scale(1); + -ms-transform: translate(9.24px, 61.6px) scale(1); + transform: translate(9.24px, 61.6px) scale(1); + } + 75% { + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } +} +@-moz-keyframes loading-ball-r { + 0% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(0); + -moz-transform: translate(113.96px, 61.6px) scale(0); + -o-transform: translate(113.96px, 61.6px) scale(0); + -ms-transform: translate(113.96px, 61.6px) scale(0); + transform: translate(113.96px, 61.6px) scale(0); + } +} +@-webkit-keyframes loading-ball-r { + 0% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(0); + -moz-transform: translate(113.96px, 61.6px) scale(0); + -o-transform: translate(113.96px, 61.6px) scale(0); + -ms-transform: translate(113.96px, 61.6px) scale(0); + transform: translate(113.96px, 61.6px) scale(0); + } +} +@-o-keyframes loading-ball-r { + 0% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(0); + -moz-transform: translate(113.96px, 61.6px) scale(0); + -o-transform: translate(113.96px, 61.6px) scale(0); + -ms-transform: translate(113.96px, 61.6px) scale(0); + transform: translate(113.96px, 61.6px) scale(0); + } +} +@keyframes loading-ball-r { + 0% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(0); + -moz-transform: translate(113.96px, 61.6px) scale(0); + -o-transform: translate(113.96px, 61.6px) scale(0); + -ms-transform: translate(113.96px, 61.6px) scale(0); + transform: translate(113.96px, 61.6px) scale(0); + } +} +@-moz-keyframes loading-ball-c { + 0% { + background: #e15b64; + } + 25% { + background: #abbd81; + } + 50% { + background: #f8b26a; + } + 75% { + background: #f47e60; + } + 100% { + background: #e15b64; + } +} +@-webkit-keyframes loading-ball-c { + 0% { + background: #e15b64; + } + 25% { + background: #abbd81; + } + 50% { + background: #f8b26a; + } + 75% { + background: #f47e60; + } + 100% { + background: #e15b64; + } +} +@-o-keyframes loading-ball-c { + 0% { + background: #e15b64; + } + 25% { + background: #abbd81; + } + 50% { + background: #f8b26a; + } + 75% { + background: #f47e60; + } + 100% { + background: #e15b64; + } +} +@keyframes loading-ball-c { + 0% { + background: #e15b64; + } + 25% { + background: #abbd81; + } + 50% { + background: #f8b26a; + } + 75% { + background: #f47e60; + } + 100% { + background: #e15b64; + } +} +blockquote.pullquote { + position: relative; + max-width: 45%; + font-size: 110%; +} +blockquote.pullquote.left { + float: left; + margin: 1em 0.5em 0 0; +} +blockquote.pullquote.right { + float: right; + margin: 1em 0 0 0.5em; +} +.video-container { + position: relative; + overflow: hidden; + margin-bottom: 16px; + padding-top: 56.25%; + height: 0; +} +.video-container iframe { + position: absolute; + top: 0; + left: 0; + margin-top: 0; + width: 100%; + height: 100%; +} +.hide-inline > .hide-button, +.hide-block > .hide-button { + display: inline-block; + padding: 5px 18px; + background: #49b1f5; + color: var(--white); +} +.hide-inline > .hide-button:hover, +.hide-block > .hide-button:hover { + background-color: var(--btn-hover-color); +} +.hide-inline > .hide-button.open, +.hide-block > .hide-button.open { + display: none; +} +.hide-inline > .hide-button.open + div, +.hide-block > .hide-button.open + div { + display: block; +} +.hide-inline > .hide-button.open + span, +.hide-block > .hide-button.open + span { + display: inline; +} +.hide-inline > .hide-content, +.hide-block > .hide-content { + display: none; +} +.hide-inline > .hide-button { + margin: 0 6px; +} +.hide-inline > .hide-content { + margin: 0 6px; +} +.hide-block { + margin: 0 0 16px; +} +.toggle { + margin-bottom: 20px; + border: 1px solid #f0f0f0; +} +.toggle > .toggle-button { + padding: 6px 15px; + background: #f0f0f0; + color: #1f2d3d; + cursor: pointer; +} +.toggle > .toggle-content { + margin: 30px 24px; +} +#article-container .inline-img { + display: inline; + margin: 0 3px; + height: 1.1em; + vertical-align: text-bottom; +} +.hl-label { + padding: 2px 4px; + border-radius: 3px; + color: #fff; +} +.hl-label.default { + background-color: #777; +} +.hl-label.blue { + background-color: #428bca; +} +.hl-label.pink { + background-color: #ff69b4; +} +.hl-label.red { + background-color: #f00; +} +.hl-label.purple { + background-color: #6f42c1; +} +.hl-label.orange { + background-color: #ff8c00; +} +.hl-label.green { + background-color: #5cb85c; +} +.note { + position: relative; + margin: 0 0 20px; + padding: 15px; + border-radius: 3px; +} +.note.icon-padding { + padding-left: 3em; +} +.note > .note-icon { + position: absolute; + top: calc(50% - 0.5em); + left: 0.8em; + font-size: larger; +} +.note.blue:not(.disabled) { + border-left-color: #428bca !important; +} +.note.blue:not(.disabled).modern { + border-left-color: transparent !important; + color: #428bca; +} +.note.blue:not(.disabled):not(.simple) { + background: #e3eef7 !important; +} +.note.blue > .note-icon { + color: #428bca; +} +.note.pink:not(.disabled) { + border-left-color: #ff69b4 !important; +} +.note.pink:not(.disabled).modern { + border-left-color: transparent !important; + color: #ff69b4; +} +.note.pink:not(.disabled):not(.simple) { + background: #ffe9f4 !important; +} +.note.pink > .note-icon { + color: #ff69b4; +} +.note.red:not(.disabled) { + border-left-color: #f00 !important; +} +.note.red:not(.disabled).modern { + border-left-color: transparent !important; + color: #f00; +} +.note.red:not(.disabled):not(.simple) { + background: #ffd9d9 !important; +} +.note.red > .note-icon { + color: #f00; +} +.note.purple:not(.disabled) { + border-left-color: #6f42c1 !important; +} +.note.purple:not(.disabled).modern { + border-left-color: transparent !important; + color: #6f42c1; +} +.note.purple:not(.disabled):not(.simple) { + background: #e9e3f6 !important; +} +.note.purple > .note-icon { + color: #6f42c1; +} +.note.orange:not(.disabled) { + border-left-color: #ff8c00 !important; +} +.note.orange:not(.disabled).modern { + border-left-color: transparent !important; + color: #ff8c00; +} +.note.orange:not(.disabled):not(.simple) { + background: #ffeed9 !important; +} +.note.orange > .note-icon { + color: #ff8c00; +} +.note.green:not(.disabled) { + border-left-color: #5cb85c !important; +} +.note.green:not(.disabled).modern { + border-left-color: transparent !important; + color: #5cb85c; +} +.note.green:not(.disabled):not(.simple) { + background: #e7f4e7 !important; +} +.note.green > .note-icon { + color: #5cb85c; +} +.note.simple { + border: 1px solid #eee; + border-left-width: 5px; +} +.note.modern { + border: 1px solid transparent !important; + background-color: #f5f5f5; + color: #4c4948; +} +.note.flat { + border: initial; + border-left: 5px solid #eee; + background-color: #f9f9f9; + color: #4c4948; +} +.note h2, +.note h3, +.note h4, +.note h5, +.note h6 { + margin-top: 3px; + margin-bottom: 0; + padding-top: 0 !important; + border-bottom: initial; +} +.note p:first-child, +.note ul:first-child, +.note ol:first-child, +.note table:first-child, +.note pre:first-child, +.note blockquote:first-child, +.note img:first-child { + margin-top: 0 !important; +} +.note p:last-child, +.note ul:last-child, +.note ol:last-child, +.note table:last-child, +.note pre:last-child, +.note blockquote:last-child, +.note img:last-child { + margin-bottom: 0 !important; +} +.note .img-alt { + margin: 5px 0 10px; +} +.note:not(.no-icon) { + padding-left: 3em; +} +.note:not(.no-icon)::before { + position: absolute; + top: calc(50% - 0.95em); + left: 0.8em; + font-size: larger; +} +.note.default.flat { + background: #f7f7f7; +} +.note.default.modern { + border-color: #e1e1e1; + background: #f3f3f3; + color: #666; +} +.note.default.modern a:not(.btn) { + color: #666; +} +.note.default.modern a:not(.btn):hover { + color: #454545; +} +.note.default:not(.modern) { + border-left-color: #777; +} +.note.default:not(.modern) h2, +.note.default:not(.modern) h3, +.note.default:not(.modern) h4, +.note.default:not(.modern) h5, +.note.default:not(.modern) h6 { + color: #777; +} +.note.default:not(.no-icon)::before { + content: '\f0a9'; +} +.note.default:not(.no-icon):not(.modern)::before { + color: #777; +} +.note.primary.flat { + background: #f5f0fa; +} +.note.primary.modern { + border-color: #e1c2ff; + background: #f3daff; + color: #6f42c1; +} +.note.primary.modern a:not(.btn) { + color: #6f42c1; +} +.note.primary.modern a:not(.btn):hover { + color: #453298; +} +.note.primary:not(.modern) { + border-left-color: #6f42c1; +} +.note.primary:not(.modern) h2, +.note.primary:not(.modern) h3, +.note.primary:not(.modern) h4, +.note.primary:not(.modern) h5, +.note.primary:not(.modern) h6 { + color: #6f42c1; +} +.note.primary:not(.no-icon)::before { + content: '\f055'; +} +.note.primary:not(.no-icon):not(.modern)::before { + color: #6f42c1; +} +.note.info.flat { + background: #eef7fa; +} +.note.info.modern { + border-color: #b3e5ef; + background: #d9edf7; + color: #31708f; +} +.note.info.modern a:not(.btn) { + color: #31708f; +} +.note.info.modern a:not(.btn):hover { + color: #215761; +} +.note.info:not(.modern) { + border-left-color: #428bca; +} +.note.info:not(.modern) h2, +.note.info:not(.modern) h3, +.note.info:not(.modern) h4, +.note.info:not(.modern) h5, +.note.info:not(.modern) h6 { + color: #428bca; +} +.note.info:not(.no-icon)::before { + content: '\f05a'; +} +.note.info:not(.no-icon):not(.modern)::before { + color: #428bca; +} +.note.success.flat { + background: #eff8f0; +} +.note.success.modern { + border-color: #d0e6be; + background: #dff0d8; + color: #3c763d; +} +.note.success.modern a:not(.btn) { + color: #3c763d; +} +.note.success.modern a:not(.btn):hover { + color: #32562c; +} +.note.success:not(.modern) { + border-left-color: #5cb85c; +} +.note.success:not(.modern) h2, +.note.success:not(.modern) h3, +.note.success:not(.modern) h4, +.note.success:not(.modern) h5, +.note.success:not(.modern) h6 { + color: #5cb85c; +} +.note.success:not(.no-icon)::before { + content: '\f058'; +} +.note.success:not(.no-icon):not(.modern)::before { + color: #5cb85c; +} +.note.warning.flat { + background: #fdf8ea; +} +.note.warning.modern { + border-color: #fae4cd; + background: #fcf4e3; + color: #8a6d3b; +} +.note.warning.modern a:not(.btn) { + color: #8a6d3b; +} +.note.warning.modern a:not(.btn):hover { + color: #714f30; +} +.note.warning:not(.modern) { + border-left-color: #f0ad4e; +} +.note.warning:not(.modern) h2, +.note.warning:not(.modern) h3, +.note.warning:not(.modern) h4, +.note.warning:not(.modern) h5, +.note.warning:not(.modern) h6 { + color: #f0ad4e; +} +.note.warning:not(.no-icon)::before { + content: '\f06a'; +} +.note.warning:not(.no-icon):not(.modern)::before { + color: #f0ad4e; +} +.note.danger.flat { + background: #fcf1f2; +} +.note.danger.modern { + border-color: #ebcdd2; + background: #f2dfdf; + color: #a94442; +} +.note.danger.modern a:not(.btn) { + color: #a94442; +} +.note.danger.modern a:not(.btn):hover { + color: #84333f; +} +.note.danger:not(.modern) { + border-left-color: #d9534f; +} +.note.danger:not(.modern) h2, +.note.danger:not(.modern) h3, +.note.danger:not(.modern) h4, +.note.danger:not(.modern) h5, +.note.danger:not(.modern) h6 { + color: #d9534f; +} +.note.danger:not(.no-icon)::before { + content: '\f056'; +} +.note.danger:not(.no-icon):not(.modern)::before { + color: #d9534f; +} +#article-container .tabs { + position: relative; + margin: 0 0 20px; + border-right: 1px solid var(--tab-border-color); + border-bottom: 1px solid var(--tab-border-color); + border-left: 1px solid var(--tab-border-color); +} +#article-container .tabs > .nav-tabs { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin: 0; + padding: 0; + background: var(--tab-botton-bg); +} +#article-container .tabs > .nav-tabs > .tab { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + -ms-box-flex: 1; + box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + padding: 8px 18px; + border-top: 2px solid var(--tab-border-color); + background: var(--tab-botton-bg); + color: var(--tab-botton-color); + line-height: 2; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; +} +#article-container .tabs > .nav-tabs > .tab i { + width: 1.5em; +} +#article-container .tabs > .nav-tabs > .tab.active { + border-top: 2px solid #49b1f5; + background: var(--tab-button-active-bg); + cursor: default; +} +#article-container .tabs > .nav-tabs > .tab:not(.active):hover { + border-top: 2px solid var(--tab-button-hover-bg); + background: var(--tab-button-hover-bg); +} +#article-container .tabs > .nav-tabs.no-default ~ .tab-to-top { + display: none; +} +#article-container .tabs > .tab-contents .tab-item-content { + position: relative; + display: none; + padding: 36px 24px 10px; +} +@media screen and (max-width: 768px) { + #article-container .tabs > .tab-contents .tab-item-content { + padding: 24px 14px; + } +} +#article-container .tabs > .tab-contents .tab-item-content.active { + display: block; + -webkit-animation: tabshow 0.5s; + -moz-animation: tabshow 0.5s; + -o-animation: tabshow 0.5s; + -ms-animation: tabshow 0.5s; + animation: tabshow 0.5s; +} +#article-container .tabs > .tab-contents .tab-item-content > :last-child { + margin-bottom: 0; +} +#article-container .tabs > .tab-to-top { + padding: 0 16px 10px 0; + width: 100%; + text-align: right; +} +#article-container .tabs > .tab-to-top button { + color: #99a9bf; +} +#article-container .tabs > .tab-to-top button:hover { + color: #49b1f5; +} +@-moz-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +#article-container .timeline { + margin: 0 0 20px 10px; + padding: 14px 20px 5px; + border-left: 2px solid var(--timeline-color, #49b1f5); +} +#article-container .timeline.blue { + --timeline-color: #428bca; + --timeline-bg: rgba(66,139,202, 0.2); +} +#article-container .timeline.pink { + --timeline-color: #ff69b4; + --timeline-bg: rgba(255,105,180, 0.2); +} +#article-container .timeline.red { + --timeline-color: #f00; + --timeline-bg: rgba(255,0,0, 0.2); +} +#article-container .timeline.purple { + --timeline-color: #6f42c1; + --timeline-bg: rgba(111,66,193, 0.2); +} +#article-container .timeline.orange { + --timeline-color: #ff8c00; + --timeline-bg: rgba(255,140,0, 0.2); +} +#article-container .timeline.green { + --timeline-color: #5cb85c; + --timeline-bg: rgba(92,184,92, 0.2); +} +#article-container .timeline .timeline-item { + margin: 0 0 15px; +} +#article-container .timeline .timeline-item:hover .item-circle:before { + border-color: var(--timeline-color, #49b1f5); +} +#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle > p { + font-weight: 600; + font-size: 1.2em; +} +#article-container .timeline .timeline-item.headline .timeline-item-title .item-circle:before { + left: -28px; + border: 4px solid var(--timeline-color, #49b1f5); +} +#article-container .timeline .timeline-item.headline:hover .item-circle:before { + border-color: var(--pseudo-hover); +} +#article-container .timeline .timeline-item .timeline-item-title { + position: relative; +} +#article-container .timeline .timeline-item .item-circle:before { + position: absolute; + top: 50%; + left: -27px; + width: 6px; + height: 6px; + border: 3px solid var(--pseudo-hover); + border-radius: 50%; + background: var(--card-bg); + content: ''; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +#article-container .timeline .timeline-item .item-circle > p { + margin: 0 0 8px; + font-weight: 500; +} +#article-container .timeline .timeline-item .timeline-item-content { + position: relative; + padding: 12px 15px; + border-radius: 8px; + background: var(--timeline-bg, #e4f3fd); + font-size: 0.93em; +} +#article-container .timeline .timeline-item .timeline-item-content > :last-child { + margin-bottom: 0; +} +#article-container .timeline + .timeline { + margin-top: -20px; +} +[data-theme='dark'] { + --global-bg: #0d0d0d; + --font-color: rgba(255,255,255,0.7); + --hr-border: rgba(255,255,255,0.4); + --hr-before-color: rgba(255,255,255,0.7); + --search-bg: #121212; + --search-input-color: rgba(255,255,255,0.7); + --search-a-color: rgba(255,255,255,0.7); + --preloader-bg: #0d0d0d; + --preloader-color: rgba(255,255,255,0.7); + --tab-border-color: #2c2c2c; + --tab-botton-bg: #2c2c2c; + --tab-botton-color: rgba(255,255,255,0.7); + --tab-button-hover-bg: #383838; + --tab-button-active-bg: #121212; + --card-bg: #121212; + --sidebar-bg: #121212; + --btn-hover-color: #787878; + --btn-color: rgba(255,255,255,0.7); + --btn-bg: #1f1f1f; + --text-bg-hover: #383838; + --light-grey: rgba(255,255,255,0.7); + --dark-grey: rgba(255,255,255,0.2); + --white: rgba(255,255,255,0.9); + --text-highlight-color: rgba(255,255,255,0.9); + --blockquote-color: rgba(255,255,255,0.7); + --blockquote-bg: #2c2c2c; + --reward-pop: #2c2c2c; + --toc-link-color: rgba(255,255,255,0.6); + --scrollbar-color: #525252; + --timeline-bg: #1f1f1f; + --zoom-bg: #121212; + --mark-bg: rgba(0,0,0,0.6); +} +[data-theme='dark'] #web_bg:before { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.7); + content: ''; +} +[data-theme='dark'] #article-container code { + background: #2c2c2c; +} +[data-theme='dark'] #article-container pre > code { + background: #171717; +} +[data-theme='dark'] #article-container figure.highlight { + -webkit-box-shadow: none; + box-shadow: none; +} +[data-theme='dark'] #article-container .note code { + background: rgba(27,31,35,0.05); +} +[data-theme='dark'] #article-container .aplayer { + filter: brightness(0.8); +} +[data-theme='dark'] #article-container kbd { + border-color: #696969; + background-color: #525252; + color: #e2f1ff; +} +[data-theme='dark'] #page-header.nav-fixed > #nav, +[data-theme='dark'] #page-header.not-top-img > #nav { + background: rgba(18,18,18,0.8); + -webkit-box-shadow: 0 5px 6px -5px rgba(133,133,133,0); + box-shadow: 0 5px 6px -5px rgba(133,133,133,0); +} +[data-theme='dark'] #post-comment .comment-switch { + background: #2c2c2c !important; +} +[data-theme='dark'] #post-comment .comment-switch #switch-btn { + filter: brightness(0.8); +} +[data-theme='dark'] .note { + filter: brightness(0.8); +} +[data-theme='dark'] .hide-button, +[data-theme='dark'] .btn-beautify, +[data-theme='dark'] .hl-label, +[data-theme='dark'] .post-outdate-notice, +[data-theme='dark'] .error-img, +[data-theme='dark'] #article-container iframe, +[data-theme='dark'] .gist, +[data-theme='dark'] .ads-wrap { + filter: brightness(0.8); +} +[data-theme='dark'] img { + filter: brightness(0.8); +} +[data-theme='dark'] #aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 1px dashed rgba(255,255,255,0.1); +} +[data-theme='dark'] #gitalk-container { + filter: brightness(0.8); +} +[data-theme='dark'] #gitalk-container svg { + fill: rgba(255,255,255,0.9) !important; +} +[data-theme='dark'] #disqusjs #dsqjs:hover, +[data-theme='dark'] #disqusjs #dsqjs:focus, +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-tab-active, +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-no-comment { + color: rgba(255,255,255,0.7); +} +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-order-label { + background-color: #1f1f1f; +} +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-post-body { + color: rgba(255,255,255,0.7); +} +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-post-body code, +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-post-body pre { + background: #2c2c2c; +} +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-post-body blockquote { + color: rgba(255,255,255,0.7); +} +[data-theme='dark'] #artitalk_main #lazy { + background: #121212; +} +[data-theme='dark'] #operare_artitalk .c2 { + background: #121212; +} +@media screen and (max-width: 900px) { + [data-theme='dark'] #card-toc { + background: #1f1f1f; + } +} +.read-mode { + --font-color: #4c4948; + --readmode-light-color: #fff; + --white: #4c4948; + --light-grey: #4c4948; + --gray: #d6dbdf; + --hr-border: #d6dbdf; + --hr-before-color: #b9c2c9; + --highlight-bg: #f7f7f7; + --exit-btn-bg: #c0c0c0; + --exit-btn-color: #fff; + --exit-btn-hover: #8d8d8d; + --pseudo-hover: none; +} +[data-theme='dark'] .read-mode { + --font-color: rgba(255,255,255,0.7); + --readmode-light-color: #0d0d0d; + --white: rgba(255,255,255,0.9); + --light-grey: rgba(255,255,255,0.7); + --gray: rgba(255,255,255,0.7); + --hr-border: rgba(255,255,255,0.5); + --hr-before-color: rgba(255,255,255,0.7); + --highlight-bg: #171717; + --exit-btn-bg: #1f1f1f; + --exit-btn-color: rgba(255,255,255,0.9); + --exit-btn-hover: #525252; +} +.read-mode { + background: var(--readmode-light-color); +} +.read-mode .exit-readmode { + position: fixed; + top: 30px; + right: 30px; + z-index: 100; + width: 40px; + height: 40px; + border-radius: 8px; + background: var(--exit-btn-bg); + color: var(--exit-btn-color); + font-size: 16px; + -webkit-transition: background 0.3s; + -moz-transition: background 0.3s; + -o-transition: background 0.3s; + -ms-transition: background 0.3s; + transition: background 0.3s; +} +@media screen and (max-width: 768px) { + .read-mode .exit-readmode { + top: initial; + bottom: 30px; + } +} +.read-mode .exit-readmode:hover { + background: var(--exit-btn-hover); +} +.read-mode #aside-content { + display: none; +} +.read-mode #page-header.post-bg { + background: none !important; +} +.read-mode #page-header.post-bg:before { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.read-mode #page-header.post-bg > #post-info { + text-align: center; +} +.read-mode #post { + margin: 0 auto; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.read-mode #post:hover { + -webkit-box-shadow: none; + box-shadow: none; +} +.read-mode > canvas { + display: none !important; +} +.read-mode .highlight-tools, +.read-mode #footer, +.read-mode #post > *:not(#post-info):not(.post-content), +.read-mode #nav, +.read-mode .post-outdate-notice, +.read-mode #web_bg, +.read-mode #rightside, +.read-mode .not-top-img { + display: none !important; +} +.read-mode #article-container a { + color: #99a9bf; +} +.read-mode #article-container pre, +.read-mode #article-container .highlight:not(.js-file-line-container) { + background: var(--highlight-bg) !important; +} +.read-mode #article-container pre *, +.read-mode #article-container .highlight:not(.js-file-line-container) * { + color: var(--font-color) !important; +} +.read-mode #article-container figure.highlight { + border-radius: 0 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.read-mode #article-container figure.highlight > :not(.highlight-tools) { + display: block !important; +} +.read-mode #article-container figure.highlight .line:before { + color: var(--font-color) !important; +} +.read-mode #article-container figure.highlight .hljs { + background: var(--highlight-bg) !important; +} +.read-mode #article-container h1, +.read-mode #article-container h2, +.read-mode #article-container h3, +.read-mode #article-container h4, +.read-mode #article-container h5, +.read-mode #article-container h6 { + padding: 0; +} +.read-mode #article-container h1:before, +.read-mode #article-container h2:before, +.read-mode #article-container h3:before, +.read-mode #article-container h4:before, +.read-mode #article-container h5:before, +.read-mode #article-container h6:before { + content: ''; +} +.read-mode #article-container h1:hover, +.read-mode #article-container h2:hover, +.read-mode #article-container h3:hover, +.read-mode #article-container h4:hover, +.read-mode #article-container h5:hover, +.read-mode #article-container h6:hover { + padding: 0; +} +.read-mode #article-container ul:hover:before, +.read-mode #article-container li:hover:before, +.read-mode #article-container ol:hover:before { + -webkit-transform: none !important; + -moz-transform: none !important; + -o-transform: none !important; + -ms-transform: none !important; + transform: none !important; +} +.read-mode #article-container ol:before, +.read-mode #article-container li:before { + background: transparent !important; + color: var(--font-color) !important; +} +.read-mode #article-container ul >li:before { + border-color: var(--gray) !important; +} +.read-mode #article-container .tabs { + border: 2px solid var(--tab-border-color); +} +.read-mode #article-container .tabs > .nav-tabs { + background: transparent; +} +.read-mode #article-container .tabs > .nav-tabs > .tab { + border-top: none !important; +} +.read-mode #article-container .tabs > .tab-contents .tab-item-content.active { + -webkit-animation: none; + -moz-animation: none; + -o-animation: none; + -ms-animation: none; + animation: none; +} +.read-mode #article-container code { + color: var(--font-color); +} +.read-mode #article-container blockquote { + border-color: var(--gray); + background-color: var(--readmode-light-color); +} +.read-mode #article-container kbd { + border: 1px solid var(--gray); + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + color: var(--font-color); +} +.read-mode #article-container .hide-toggle { + border: 1px solid var(--gray) !important; +} +.read-mode #article-container .hide-button, +.read-mode #article-container .btn-beautify, +.read-mode #article-container .hl-label { + border: 1px solid var(--gray) !important; + background: var(--readmode-light-color) !important; + color: var(--font-color) !important; +} +.read-mode #article-container .note { + border: 2px solid var(--gray); + border-left-color: var(--gray) !important; + filter: none; + background-color: var(--readmode-light-color) !important; + color: var(--font-color); +} +.read-mode #article-container .note:before, +.read-mode #article-container .note .note-icon { + color: var(--font-color); +} +.search-dialog { + position: fixed; + top: 10%; + left: 50%; + z-index: 1001; + display: none; + margin-left: -300px; + padding: 20px; + width: 600px; + border-radius: 8px; + background: var(--search-bg); + --search-height: 100vh; +} +@media screen and (max-width: 768px) { + .search-dialog { + top: 0; + left: 0; + margin: 0; + width: 100%; + height: 100%; + border-radius: 0; + } +} +.search-dialog hr { + margin: 20px auto; +} +.search-dialog .search-nav { + margin: 0 0 14px; + color: #49b1f5; + font-size: 1.4em; + line-height: 1; +} +.search-dialog .search-nav .search-dialog-title { + margin-right: 10px; +} +.search-dialog .search-nav .search-close-button { + float: right; + color: #858585; + -webkit-transition: color 0.2s ease-in-out; + -moz-transition: color 0.2s ease-in-out; + -o-transition: color 0.2s ease-in-out; + -ms-transition: color 0.2s ease-in-out; + transition: color 0.2s ease-in-out; +} +.search-dialog .search-nav .search-close-button:hover { + color: #49b1f5; +} +.search-dialog hr { + margin: 20px auto; +} +#search-mask { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + display: none; + background: rgba(0,0,0,0.6); +} diff --git a/css/main.css b/css/main.css deleted file mode 100644 index ffb37eb..0000000 --- a/css/main.css +++ /dev/null @@ -1,2695 +0,0 @@ -:root { - --body-bg-color: #eee; - --content-bg-color: #fff; - --card-bg-color: #f5f5f5; - --text-color: #555; - --blockquote-color: #666; - --link-color: #555; - --link-hover-color: #222; - --brand-color: #fff; - --brand-hover-color: #fff; - --table-row-odd-bg-color: #f9f9f9; - --table-row-hover-bg-color: #f5f5f5; - --menu-item-bg-color: #f5f5f5; - --theme-color: #222; - --btn-default-bg: #fff; - --btn-default-color: #555; - --btn-default-border-color: #555; - --btn-default-hover-bg: #222; - --btn-default-hover-color: #fff; - --btn-default-hover-border-color: #222; - --highlight-background: #f3f3f3; - --highlight-foreground: #444; - --highlight-gutter-background: #e1e1e1; - --highlight-gutter-foreground: #555; - color-scheme: light; -} -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} -body { - margin: 0; -} -main { - display: block; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} -a { - background: transparent; -} -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} -b, -strong { - font-weight: bolder; -} -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sub { - bottom: -0.25em; -} -sup { - top: -0.5em; -} -img { - border-style: none; -} -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} -button, -input { -/* 1 */ - overflow: visible; -} -button, -select { -/* 1 */ - text-transform: none; -} -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} -fieldset { - padding: 0.35em 0.75em 0.625em; -} -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} -progress { - vertical-align: baseline; -} -textarea { - overflow: auto; -} -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} -[type='search'] { - outline-offset: -2px; /* 2 */ - -webkit-appearance: textfield; /* 1 */ -} -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} -::-webkit-file-upload-button { - font: inherit; /* 2 */ - -webkit-appearance: button; /* 1 */ -} -details { - display: block; -} -summary { - display: list-item; -} -template { - display: none; -} -[hidden] { - display: none; -} -::selection { - background: #262a30; - color: #eee; -} -html, -body { - height: 100%; -} -body { - background: var(--body-bg-color); - box-sizing: border-box; - color: var(--text-color); - font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; - font-size: 1em; - line-height: 2; - min-height: 100%; - position: relative; - transition: padding 0.2s ease-in-out; -} -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; - font-weight: bold; - line-height: 1.5; - margin: 30px 0 15px; -} -h1 { - font-size: 1.5em; -} -h2 { - font-size: 1.375em; -} -h3 { - font-size: 1.25em; -} -h4 { - font-size: 1.125em; -} -h5 { - font-size: 1em; -} -h6 { - font-size: 0.875em; -} -p { - margin: 0 0 20px; -} -a { - border-bottom: 1px solid #999; - color: var(--link-color); - cursor: pointer; - outline: 0; - text-decoration: none; - overflow-wrap: break-word; -} -a:hover { - border-bottom-color: var(--link-hover-color); - color: var(--link-hover-color); -} -iframe, -img, -video, -embed { - display: block; - margin-left: auto; - margin-right: auto; - max-width: 100%; -} -hr { - background-image: repeating-linear-gradient(-45deg, #ddd, #ddd 4px, transparent 4px, transparent 8px); - border: 0; - height: 3px; - margin: 40px 0; -} -blockquote { - border-left: 4px solid #ddd; - color: var(--blockquote-color); - margin: 0; - padding: 0 15px; -} -blockquote cite::before { - content: '-'; - padding: 0 5px; -} -dt { - font-weight: bold; -} -dd { - margin: 0; - padding: 0; -} -.table-container { - overflow: auto; -} -table { - border-collapse: collapse; - border-spacing: 0; - font-size: 0.875em; - margin: 0 0 20px; - width: 100%; -} -tbody tr:nth-of-type(odd) { - background: var(--table-row-odd-bg-color); -} -tbody tr:hover { - background: var(--table-row-hover-bg-color); -} -caption, -th, -td { - padding: 8px; -} -th, -td { - border: 1px solid #ddd; - border-bottom: 3px solid #ddd; -} -th { - font-weight: 700; - padding-bottom: 10px; -} -td { - border-bottom-width: 1px; -} -.btn { - background: var(--btn-default-bg); - border: 2px solid var(--btn-default-border-color); - border-radius: 2px; - color: var(--btn-default-color); - display: inline-block; - font-size: 0.875em; - line-height: 2; - padding: 0 20px; - transition: background-color 0.2s ease-in-out; -} -.btn:hover { - background: var(--btn-default-hover-bg); - border-color: var(--btn-default-hover-border-color); - color: var(--btn-default-hover-color); -} -.btn + .btn { - margin: 0 0 8px 8px; -} -.btn .fa-fw { - text-align: left; - width: 1.285714285714286em; -} -.toggle { - line-height: 0; -} -.toggle .toggle-line { - background: #fff; - display: block; - height: 2px; - left: 0; - position: relative; - top: 0; - transition: all 0.4s; - width: 100%; -} -.toggle .toggle-line:not(:first-child) { - margin-top: 3px; -} -.toggle.toggle-arrow .toggle-line:first-child { - left: 50%; - top: 2px; - transform: rotate(45deg); - width: 50%; -} -.toggle.toggle-arrow .toggle-line:last-child { - left: 50%; - top: -2px; - transform: rotate(-45deg); - width: 50%; -} -.toggle.toggle-close .toggle-line:nth-child(2) { - opacity: 0; -} -.toggle.toggle-close .toggle-line:first-child { - top: 5px; - transform: rotate(45deg); -} -.toggle.toggle-close .toggle-line:last-child { - top: -5px; - transform: rotate(-45deg); -} -/*! - Theme: Default - Description: Original highlight.js style - Author: (c) Ivan Sagalaev - Maintainer: @highlightjs/core-team - Website: https://highlightjs.org/ - License: see project LICENSE - Touched: 2021 -*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} -code, -kbd, -figure.highlight, -pre { - background: var(--highlight-background); - color: var(--highlight-foreground); -} -figure.highlight, -pre { - line-height: 1.6; - margin: 0 auto 20px; -} -figure.highlight figcaption, -pre .caption, -pre figcaption { - background: var(--highlight-gutter-background); - color: var(--highlight-foreground); - display: flow-root; - font-size: 0.875em; - line-height: 1.2; - padding: 0.5em; -} -figure.highlight figcaption a, -pre .caption a, -pre figcaption a { - color: var(--highlight-foreground); - float: right; -} -figure.highlight figcaption a:hover, -pre .caption a:hover, -pre figcaption a:hover { - border-bottom-color: var(--highlight-foreground); -} -pre, -code { - font-family: consolas, Menlo, monospace, 'PingFang SC', 'Microsoft YaHei'; -} -code { - border-radius: 3px; - font-size: 0.875em; - padding: 2px 4px; - overflow-wrap: break-word; -} -kbd { - border: 2px solid #ccc; - border-radius: 0.2em; - box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); - font-family: inherit; - padding: 0.1em 0.3em; - white-space: nowrap; -} -figure.highlight { - position: relative; -} -figure.highlight pre { - border: 0; - margin: 0; - padding: 10px 0; -} -figure.highlight table { - border: 0; - margin: 0; - width: auto; -} -figure.highlight td { - border: 0; - padding: 0; -} -figure.highlight .gutter { - -moz-user-select: none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; -} -figure.highlight .gutter pre { - background: var(--highlight-gutter-background); - color: var(--highlight-gutter-foreground); - padding-left: 10px; - padding-right: 10px; - text-align: right; -} -figure.highlight .code pre { - padding-left: 10px; - width: 100%; -} -figure.highlight .marked { - background: rgba(0,0,0,0.3); -} -pre .caption, -pre figcaption { - margin-bottom: 10px; -} -.gist table { - width: auto; -} -.gist table td { - border: 0; -} -pre { - overflow: auto; - padding: 10px; - position: relative; -} -pre code { - background: none; - padding: 0; - text-shadow: none; -} -.blockquote-center { - border-left: 0; - margin: 40px 0; - padding: 0; - position: relative; - text-align: center; -} -.blockquote-center::before, -.blockquote-center::after { - left: 0; - line-height: 1; - opacity: 0.6; - position: absolute; - width: 100%; -} -.blockquote-center::before { - border-top: 1px solid #ccc; - text-align: left; - top: -20px; - content: '\f10d'; - font-family: 'Font Awesome 5 Free'; - font-weight: 900; -} -.blockquote-center::after { - border-bottom: 1px solid #ccc; - bottom: -20px; - text-align: right; - content: '\f10e'; - font-family: 'Font Awesome 5 Free'; - font-weight: 900; -} -.blockquote-center p, -.blockquote-center div { - text-align: center; -} -.group-picture { - margin-bottom: 20px; -} -.group-picture .group-picture-row { - display: flex; - gap: 3px; - margin-bottom: 3px; -} -.group-picture .group-picture-column { - flex: 1; -} -.group-picture .group-picture-column img { - height: 100%; - margin: 0; - object-fit: cover; - width: 100%; -} -.post-body .label { - color: #555; - padding: 0 2px; -} -.post-body .label.default { - background: #f0f0f0; -} -.post-body .label.primary { - background: #efe6f7; -} -.post-body .label.info { - background: #e5f2f8; -} -.post-body .label.success { - background: #e7f4e9; -} -.post-body .label.warning { - background: #fcf6e1; -} -.post-body .label.danger { - background: #fae8eb; -} -.post-body .link-grid { - display: grid; - grid-gap: 1.5rem; - gap: 1.5rem; - grid-template-columns: 1fr 1fr; - margin-bottom: 20px; - padding: 1rem; -} -@media (max-width: 767px) { - .post-body .link-grid { - grid-template-columns: 1fr; - } -} -.post-body .link-grid .link-grid-container { - border: solid #ddd; - box-shadow: 1rem 1rem 0.5rem rgba(0,0,0,0.5); - min-height: 5rem; - min-width: 0; - padding: 0.5rem; - position: relative; - transition: background 0.3s; -} -.post-body .link-grid .link-grid-container:hover { - animation: next-shake 0.5s; - background: var(--card-bg-color); -} -.post-body .link-grid .link-grid-container:active { - box-shadow: 0.5rem 0.5rem 0.25rem rgba(0,0,0,0.5); - transform: translate(0.2rem, 0.2rem); -} -.post-body .link-grid .link-grid-container .link-grid-image { - border: 1px solid #ddd; - border-radius: 50%; - box-sizing: border-box; - height: 5rem; - padding: 3px; - position: absolute; - width: 5rem; -} -.post-body .link-grid .link-grid-container p { - margin: 0 1rem 0 6rem; -} -.post-body .link-grid .link-grid-container p:first-of-type { - font-size: 1.2em; -} -.post-body .link-grid .link-grid-container p:last-of-type { - font-size: 0.8em; - line-height: 1.3rem; - opacity: 0.7; -} -.post-body .link-grid .link-grid-container a { - border: 0; - height: 100%; - left: 0; - position: absolute; - top: 0; - width: 100%; -} -@-moz-keyframes next-shake { - 0% { - transform: translate(1pt, 1pt) rotate(0deg); - } - 10% { - transform: translate(-1pt, -2pt) rotate(-1deg); - } - 20% { - transform: translate(-3pt, 0pt) rotate(1deg); - } - 30% { - transform: translate(3pt, 2pt) rotate(0deg); - } - 40% { - transform: translate(1pt, -1pt) rotate(1deg); - } - 50% { - transform: translate(-1pt, 2pt) rotate(-1deg); - } - 60% { - transform: translate(-3pt, 1pt) rotate(0deg); - } - 70% { - transform: translate(3pt, 1pt) rotate(-1deg); - } - 80% { - transform: translate(-1pt, -1pt) rotate(1deg); - } - 90% { - transform: translate(1pt, 2pt) rotate(0deg); - } - 100% { - transform: translate(1pt, -2pt) rotate(-1deg); - } -} -@-webkit-keyframes next-shake { - 0% { - transform: translate(1pt, 1pt) rotate(0deg); - } - 10% { - transform: translate(-1pt, -2pt) rotate(-1deg); - } - 20% { - transform: translate(-3pt, 0pt) rotate(1deg); - } - 30% { - transform: translate(3pt, 2pt) rotate(0deg); - } - 40% { - transform: translate(1pt, -1pt) rotate(1deg); - } - 50% { - transform: translate(-1pt, 2pt) rotate(-1deg); - } - 60% { - transform: translate(-3pt, 1pt) rotate(0deg); - } - 70% { - transform: translate(3pt, 1pt) rotate(-1deg); - } - 80% { - transform: translate(-1pt, -1pt) rotate(1deg); - } - 90% { - transform: translate(1pt, 2pt) rotate(0deg); - } - 100% { - transform: translate(1pt, -2pt) rotate(-1deg); - } -} -@-o-keyframes next-shake { - 0% { - transform: translate(1pt, 1pt) rotate(0deg); - } - 10% { - transform: translate(-1pt, -2pt) rotate(-1deg); - } - 20% { - transform: translate(-3pt, 0pt) rotate(1deg); - } - 30% { - transform: translate(3pt, 2pt) rotate(0deg); - } - 40% { - transform: translate(1pt, -1pt) rotate(1deg); - } - 50% { - transform: translate(-1pt, 2pt) rotate(-1deg); - } - 60% { - transform: translate(-3pt, 1pt) rotate(0deg); - } - 70% { - transform: translate(3pt, 1pt) rotate(-1deg); - } - 80% { - transform: translate(-1pt, -1pt) rotate(1deg); - } - 90% { - transform: translate(1pt, 2pt) rotate(0deg); - } - 100% { - transform: translate(1pt, -2pt) rotate(-1deg); - } -} -@keyframes next-shake { - 0% { - transform: translate(1pt, 1pt) rotate(0deg); - } - 10% { - transform: translate(-1pt, -2pt) rotate(-1deg); - } - 20% { - transform: translate(-3pt, 0pt) rotate(1deg); - } - 30% { - transform: translate(3pt, 2pt) rotate(0deg); - } - 40% { - transform: translate(1pt, -1pt) rotate(1deg); - } - 50% { - transform: translate(-1pt, 2pt) rotate(-1deg); - } - 60% { - transform: translate(-3pt, 1pt) rotate(0deg); - } - 70% { - transform: translate(3pt, 1pt) rotate(-1deg); - } - 80% { - transform: translate(-1pt, -1pt) rotate(1deg); - } - 90% { - transform: translate(1pt, 2pt) rotate(0deg); - } - 100% { - transform: translate(1pt, -2pt) rotate(-1deg); - } -} -.post-body .note { - border-radius: 3px; - margin-bottom: 20px; - padding: 1em; - position: relative; - border: 1px solid #eee; - border-left-width: 5px; -} -.post-body .note summary { - cursor: pointer; - outline: 0; -} -.post-body .note summary p { - display: inline; -} -.post-body .note h2, -.post-body .note h3, -.post-body .note h4, -.post-body .note h5, -.post-body .note h6 { - border-bottom: initial; - margin: 0; - padding-top: 0; -} -.post-body .note p:first-child, -.post-body .note ul:first-child, -.post-body .note ol:first-child, -.post-body .note table:first-child, -.post-body .note pre:first-child, -.post-body .note blockquote:first-child, -.post-body .note img:first-child { - margin-top: 0; -} -.post-body .note p:last-child, -.post-body .note ul:last-child, -.post-body .note ol:last-child, -.post-body .note table:last-child, -.post-body .note pre:last-child, -.post-body .note blockquote:last-child, -.post-body .note img:last-child { - margin-bottom: 0; -} -.post-body .note.default { - border-left-color: #777; -} -.post-body .note.default h2, -.post-body .note.default h3, -.post-body .note.default h4, -.post-body .note.default h5, -.post-body .note.default h6 { - color: #777; -} -.post-body .note.primary { - border-left-color: #6f42c1; -} -.post-body .note.primary h2, -.post-body .note.primary h3, -.post-body .note.primary h4, -.post-body .note.primary h5, -.post-body .note.primary h6 { - color: #6f42c1; -} -.post-body .note.info { - border-left-color: #428bca; -} -.post-body .note.info h2, -.post-body .note.info h3, -.post-body .note.info h4, -.post-body .note.info h5, -.post-body .note.info h6 { - color: #428bca; -} -.post-body .note.success { - border-left-color: #5cb85c; -} -.post-body .note.success h2, -.post-body .note.success h3, -.post-body .note.success h4, -.post-body .note.success h5, -.post-body .note.success h6 { - color: #5cb85c; -} -.post-body .note.warning { - border-left-color: #f0ad4e; -} -.post-body .note.warning h2, -.post-body .note.warning h3, -.post-body .note.warning h4, -.post-body .note.warning h5, -.post-body .note.warning h6 { - color: #f0ad4e; -} -.post-body .note.danger { - border-left-color: #d9534f; -} -.post-body .note.danger h2, -.post-body .note.danger h3, -.post-body .note.danger h4, -.post-body .note.danger h5, -.post-body .note.danger h6 { - color: #d9534f; -} -.post-body .tabs { - margin-bottom: 20px; -} -.post-body .tabs, -.tabs-comment { - padding-top: 10px; -} -.post-body .tabs ul.nav-tabs, -.tabs-comment ul.nav-tabs { - background: var(--content-bg-color); - display: flex; - display: flex; - flex-wrap: wrap; - justify-content: center; - margin: 0; - padding: 0; - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 5; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs, - .tabs-comment ul.nav-tabs { - display: block; - margin-bottom: 5px; - } -} -.post-body .tabs ul.nav-tabs li.tab, -.tabs-comment ul.nav-tabs li.tab { - border-bottom: 1px solid #ddd; - border-left: 1px solid transparent; - border-right: 1px solid transparent; - border-radius: 0 0 0 0; - border-top: 3px solid transparent; - flex-grow: 1; - list-style-type: none; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs li.tab, - .tabs-comment ul.nav-tabs li.tab { - border-bottom: 1px solid transparent; - border-left: 3px solid transparent; - border-right: 1px solid transparent; - border-top: 1px solid transparent; - } -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs li.tab, - .tabs-comment ul.nav-tabs li.tab { - border-radius: 0; - } -} -.post-body .tabs ul.nav-tabs li.tab a, -.tabs-comment ul.nav-tabs li.tab a { - border-bottom: initial; - display: block; - line-height: 1.8; - padding: 0.25em 0.75em; - text-align: center; - transition: all 0.2s ease-out; -} -.post-body .tabs ul.nav-tabs li.tab a i, -.tabs-comment ul.nav-tabs li.tab a i { - width: 1.285714285714286em; -} -.post-body .tabs ul.nav-tabs li.tab.active, -.tabs-comment ul.nav-tabs li.tab.active { - border-bottom-color: transparent; - border-left-color: #ddd; - border-right-color: #ddd; - border-top-color: #fc6423; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs li.tab.active, - .tabs-comment ul.nav-tabs li.tab.active { - border-bottom-color: #ddd; - border-left-color: #fc6423; - border-right-color: #ddd; - border-top-color: #ddd; - } -} -.post-body .tabs ul.nav-tabs li.tab.active a, -.tabs-comment ul.nav-tabs li.tab.active a { - cursor: default; -} -.post-body .tabs .tab-content, -.tabs-comment .tab-content { - border: 1px solid #ddd; - border-radius: 0 0 0 0; - border-top-color: transparent; -} -@media (max-width: 413px) { - .post-body .tabs .tab-content, - .tabs-comment .tab-content { - border-radius: 0; - border-top-color: #ddd; - } -} -.post-body .tabs .tab-content .tab-pane, -.tabs-comment .tab-content .tab-pane { - padding: 20px 20px 0; -} -.post-body .tabs .tab-content .tab-pane:not(.active), -.tabs-comment .tab-content .tab-pane:not(.active) { - display: none; -} -.pagination .prev, -.pagination .next, -.pagination .page-number, -.pagination .space { - display: inline-block; - margin: -1px 10px 0; - padding: 0 10px; -} -@media (max-width: 767px) { - .pagination .prev, - .pagination .next, - .pagination .page-number, - .pagination .space { - margin: 0 5px; - } -} -.pagination .page-number.current { - background: #ccc; - border-color: #ccc; - color: var(--content-bg-color); -} -.pagination { - border-top: 1px solid #eee; - margin: 120px 0 0; - text-align: center; -} -.pagination .prev, -.pagination .next, -.pagination .page-number { - border-bottom: 0; - border-top: 1px solid #eee; - transition: border-color 0.2s ease-in-out; -} -.pagination .prev:hover, -.pagination .next:hover, -.pagination .page-number:hover { - border-top-color: var(--link-hover-color); -} -@media (max-width: 767px) { - .pagination { - border-top: 0; - } - .pagination .prev, - .pagination .next, - .pagination .page-number { - border-bottom: 1px solid #eee; - border-top: 0; - } - .pagination .prev:hover, - .pagination .next:hover, - .pagination .page-number:hover { - border-bottom-color: var(--link-hover-color); - } -} -.pagination .space { - margin: 0; - padding: 0; -} -.comments { - margin-top: 60px; - overflow: hidden; -} -.comment-button-group { - display: flex; - display: flex; - flex-wrap: wrap; - justify-content: center; - justify-content: center; - margin: 1em 0; -} -.comment-button-group .comment-button { - margin: 0.1em 0.2em; -} -.comment-button-group .comment-button.active { - background: var(--btn-default-hover-bg); - border-color: var(--btn-default-hover-border-color); - color: var(--btn-default-hover-color); -} -.comment-position { - display: none; -} -.comment-position.active { - display: block; -} -.tabs-comment { - margin-top: 4em; - padding-top: 0; -} -.tabs-comment .comments { - margin-top: 0; - padding-top: 0; -} -.headband { - background: var(--theme-color); - height: 3px; -} -@media (max-width: 991px) { - .headband { - display: none; - } -} -.header { - background: transparent; -} -.header-inner { - margin: 0 auto; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .header-inner { - width: 1160px; - } -} -@media (min-width: 1600px) { - .header-inner { - width: 73%; - } -} -.site-brand-container { - display: flex; - flex-shrink: 0; - padding: 0 10px; -} -.use-motion .header, -.use-motion .site-brand-container .toggle { - opacity: 0; -} -.site-meta { - flex-grow: 1; - text-align: center; -} -@media (max-width: 767px) { - .site-meta { - text-align: center; - } -} -.custom-logo-image { - margin-top: 20px; -} -@media (max-width: 991px) { - .custom-logo-image { - display: none; - } -} -.brand { - border-bottom: 0; - color: var(--brand-color); - display: inline-block; - padding: 0 40px; -} -.brand:hover { - color: var(--brand-hover-color); -} -.site-title { - font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; - font-size: 1.375em; - font-weight: normal; - line-height: 1.5; - margin: 0; -} -.site-subtitle { - color: #ddd; - font-size: 0.8125em; - margin: 10px 0; -} -.use-motion .site-title, -.use-motion .site-subtitle, -.use-motion .custom-logo-image { - opacity: 0; - position: relative; - top: -10px; -} -.site-nav-toggle, -.site-nav-right { - display: none; -} -@media (max-width: 767px) { - .site-nav-toggle, - .site-nav-right { - display: flex; - flex-direction: column; - justify-content: center; - } -} -.site-nav-toggle .toggle, -.site-nav-right .toggle { - color: var(--text-color); - padding: 10px; - width: 22px; -} -.site-nav-toggle .toggle .toggle-line, -.site-nav-right .toggle .toggle-line { - background: var(--text-color); - border-radius: 1px; -} -@media (max-width: 767px) { - .site-nav { - --scroll-height: 0; - height: 0; - overflow: hidden; - transition: height 0.2s ease-in-out; - } - body:not(.site-nav-on) .site-nav .animated { - animation: none; - } - body.site-nav-on .site-nav { - height: var(--scroll-height); - } -} -.menu { - margin: 0; - padding: 1em 0; - text-align: center; -} -.menu-item { - display: inline-block; - list-style: none; - margin: 0 10px; -} -@media (max-width: 767px) { - .menu-item { - display: block; - margin-top: 10px; - } - .menu-item.menu-item-search { - display: none; - } -} -.menu-item a { - border-bottom: 0; - display: block; - font-size: 0.8125em; - transition: border-color 0.2s ease-in-out; -} -.menu-item a:hover, -.menu-item a.menu-item-active { - background: var(--menu-item-bg-color); -} -.menu-item .fa, -.menu-item .fab, -.menu-item .far, -.menu-item .fas { - margin-right: 8px; -} -.menu-item .badge { - display: inline-block; - font-weight: bold; - line-height: 1; - margin-left: 0.35em; - margin-top: 0.35em; - text-align: center; - white-space: nowrap; -} -@media (max-width: 767px) { - .menu-item .badge { - float: right; - margin-left: 0; - } -} -.use-motion .menu-item { - visibility: hidden; -} -.sidebar-inner { - color: #999; - max-height: calc(100vh - 24px); - padding: 18px 10px; - text-align: center; - display: flex; - flex-direction: column; - justify-content: center; -} -.site-overview-item:not(:first-child) { - margin-top: 10px; -} -.cc-license .cc-opacity { - border-bottom: 0; - opacity: 0.7; -} -.cc-license .cc-opacity:hover { - opacity: 0.9; -} -.cc-license img { - display: inline-block; -} -.site-author-image { - border: 1px solid #eee; - max-width: 120px; - padding: 2px; -} -.site-author-name { - color: var(--text-color); - font-weight: 600; - margin: 0; -} -.site-description { - color: #999; - font-size: 0.8125em; - margin-top: 0; -} -.links-of-author a { - font-size: 0.8125em; -} -.links-of-author .fa, -.links-of-author .fab, -.links-of-author .far, -.links-of-author .fas { - margin-right: 2px; -} -.sidebar .sidebar-button:not(:first-child) { - margin-top: 15px; -} -.sidebar .sidebar-button button { - background: transparent; - color: #fc6423; - cursor: pointer; - line-height: 2; - padding: 0 15px; - border: 1px solid #fc6423; - border-radius: 4px; -} -.sidebar .sidebar-button button:hover { - background: #fc6423; - color: #fff; -} -.sidebar .sidebar-button button .fa, -.sidebar .sidebar-button button .fab, -.sidebar .sidebar-button button .far, -.sidebar .sidebar-button button .fas { - margin-right: 5px; -} -.links-of-blogroll { - font-size: 0.8125em; -} -.links-of-blogroll-title { - font-size: 0.875em; - font-weight: 600; - margin-top: 0; -} -.links-of-blogroll-list { - list-style: none; - margin: 0; - padding: 0; -} -.sidebar-dimmer { - display: none; -} -@media (max-width: 991px) { - .sidebar-dimmer { - background: #000; - display: block; - height: 100%; - left: 0; - opacity: 0; - position: fixed; - top: 0; - transition: visibility 0.4s, opacity 0.4s; - visibility: hidden; - width: 100%; - z-index: 10; - } - .sidebar-active .sidebar-dimmer { - opacity: 0.7; - visibility: visible; - } -} -.sidebar-nav { - display: none; - margin: 0; - padding-bottom: 20px; - padding-left: 0; -} -.sidebar-nav-active .sidebar-nav { - display: block; -} -.sidebar-nav li { - border-bottom: 1px solid transparent; - color: var(--text-color); - cursor: pointer; - display: inline-block; - font-size: 0.875em; -} -.sidebar-nav li.sidebar-nav-overview { - margin-left: 10px; -} -.sidebar-nav li:hover { - color: #fc6423; -} -.sidebar-toc-active .sidebar-nav-toc, -.sidebar-overview-active .sidebar-nav-overview { - border-bottom-color: #fc6423; - color: #fc6423; -} -.sidebar-toc-active .sidebar-nav-toc:hover, -.sidebar-overview-active .sidebar-nav-overview:hover { - color: #fc6423; -} -.sidebar-panel-container { - flex: 1; - overflow-x: hidden; - overflow-y: auto; -} -.sidebar-panel { - display: none; -} -.sidebar-overview-active .site-overview-wrap { - display: flex; - flex-direction: column; - justify-content: center; -} -.sidebar-toc-active .post-toc-wrap { - display: block; -} -.sidebar-toggle { - bottom: 45px; - height: 12px; - padding: 6px 5px; - width: 14px; - background: #222; - cursor: pointer; - opacity: 0.6; - position: fixed; - z-index: 30; - right: 30px; -} -@media (max-width: 991px) { - .sidebar-toggle { - right: 20px; - } -} -.sidebar-toggle:hover { - opacity: 0.8; -} -@media (max-width: 991px) { - .sidebar-toggle { - opacity: 0.8; - } -} -.sidebar-toggle:hover .toggle-line { - background: #fc6423; -} -@media (any-hover: hover) { - body:not(.sidebar-active) .sidebar-toggle:hover .toggle-line:first-child { - left: 50%; - top: 2px; - transform: rotate(45deg); - width: 50%; - } - body:not(.sidebar-active) .sidebar-toggle:hover .toggle-line:last-child { - left: 50%; - top: -2px; - transform: rotate(-45deg); - width: 50%; - } -} -.sidebar-active .sidebar-toggle .toggle-line:nth-child(2) { - opacity: 0; -} -.sidebar-active .sidebar-toggle .toggle-line:first-child { - top: 5px; - transform: rotate(45deg); -} -.sidebar-active .sidebar-toggle .toggle-line:last-child { - top: -5px; - transform: rotate(-45deg); -} -.post-toc { - font-size: 0.875em; -} -.post-toc ol { - list-style: none; - margin: 0; - padding: 0 2px 5px 10px; - text-align: left; -} -.post-toc ol > ol { - padding-left: 0; -} -.post-toc ol a { - transition: all 0.2s ease-in-out; -} -.post-toc .nav-item { - line-height: 1.8; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.post-toc .nav .nav-child { - display: none; -} -.post-toc .nav .active > .nav-child { - display: block; -} -.post-toc .nav .active-current > .nav-child { - display: block; -} -.post-toc .nav .active-current > .nav-child > .nav-item { - display: block; -} -.post-toc .nav .active > a { - border-bottom-color: #fc6423; - color: #fc6423; -} -.post-toc .nav .active-current > a { - color: #fc6423; -} -.post-toc .nav .active-current > a:hover { - color: #fc6423; -} -.site-state { - display: flex; - flex-wrap: wrap; - justify-content: center; - line-height: 1.4; -} -.site-state-item { - padding: 0 15px; -} -.site-state-item a { - border-bottom: 0; - display: block; -} -.site-state-item-count { - display: block; - font-size: 1em; - font-weight: 600; -} -.site-state-item-name { - color: #999; - font-size: 0.8125em; -} -.footer { - color: #999; - font-size: 0.875em; - padding: 20px 0; -} -.footer.footer-fixed { - bottom: 0; - left: 0; - position: absolute; - right: 0; -} -.footer-inner { - box-sizing: border-box; - text-align: center; - display: flex; - flex-direction: column; - justify-content: center; - margin: 0 auto; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .footer-inner { - width: 1160px; - } -} -@media (min-width: 1600px) { - .footer-inner { - width: 73%; - } -} -.use-motion .footer { - opacity: 0; -} -.languages { - display: inline-block; - font-size: 1.125em; - position: relative; -} -.languages .lang-select-label span { - margin: 0 0.5em; -} -.languages .lang-select { - height: 100%; - left: 0; - opacity: 0; - position: absolute; - top: 0; - width: 100%; -} -.with-love { - color: #f00; - display: inline-block; - margin: 0 5px; -} -.busuanzi-count #busuanzi_container_site_uv { - display: none; -} -.busuanzi-count #busuanzi_container_site_pv { - display: none; -} -@-moz-keyframes icon-animate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@-webkit-keyframes icon-animate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@-o-keyframes icon-animate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@keyframes icon-animate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -.noscript-warning { - background-color: #f55; - color: #fff; - font-family: sans-serif; - font-size: 1rem; - font-weight: bold; - left: 0; - position: fixed; - text-align: center; - top: 0; - width: 100%; - z-index: 50; -} -.back-to-top { - font-size: 12px; - bottom: -100px; - box-sizing: border-box; - color: #fff; - padding: 0 6px; - transition: bottom 0.2s ease-in-out; - background: #222; - cursor: pointer; - opacity: 0.6; - position: fixed; - z-index: 30; - right: 30px; - width: 24px; -} -.back-to-top span { - display: none; -} -@media (max-width: 991px) { - .back-to-top { - right: 20px; - } -} -.back-to-top:hover { - opacity: 0.8; -} -@media (max-width: 991px) { - .back-to-top { - opacity: 0.8; - } -} -.back-to-top:hover { - color: #fc6423; -} -.back-to-top.back-to-top-on { - bottom: 30px; -} -.rtl.post-body p, -.rtl.post-body a, -.rtl.post-body h1, -.rtl.post-body h2, -.rtl.post-body h3, -.rtl.post-body h4, -.rtl.post-body h5, -.rtl.post-body h6, -.rtl.post-body li, -.rtl.post-body ul, -.rtl.post-body ol { - direction: rtl; - font-family: UKIJ Ekran; -} -.rtl.post-title { - font-family: UKIJ Ekran; -} -.post-button { - margin-top: 40px; - text-align: center; -} -.use-motion .post-block, -.use-motion .pagination, -.use-motion .comments { - visibility: hidden; -} -.use-motion .post-header { - visibility: hidden; -} -.use-motion .post-body { - visibility: hidden; -} -.use-motion .collection-header { - visibility: hidden; -} -.posts-collapse .post-content { - margin-bottom: 35px; - margin-left: 35px; - position: relative; -} -@media (max-width: 767px) { - .posts-collapse .post-content { - margin-left: 0; - margin-right: 0; - } -} -.posts-collapse .post-content .collection-title { - font-size: 1.125em; - position: relative; -} -.posts-collapse .post-content .collection-title::before { - background: #999; - border: 1px solid #fff; - margin-left: -6px; - margin-top: -4px; - position: absolute; - top: 50%; - border-radius: 50%; - content: ' '; - height: 10px; - width: 10px; -} -.posts-collapse .post-content .collection-year { - font-size: 1.5em; - font-weight: bold; - margin: 60px 0; - position: relative; -} -.posts-collapse .post-content .collection-year::before { - background: #bbb; - margin-left: -4px; - margin-top: -4px; - position: absolute; - top: 50%; - border-radius: 50%; - content: ' '; - height: 8px; - width: 8px; -} -.posts-collapse .post-content .collection-header { - display: block; - margin-left: 20px; -} -.posts-collapse .post-content .collection-header small { - color: #bbb; - margin-left: 5px; -} -.posts-collapse .post-content .post-header { - border-bottom: 1px dashed #ccc; - margin: 30px 2px 0; - padding-left: 15px; - position: relative; - transition: border 0.2s ease-in-out; -} -.posts-collapse .post-content .post-header::before { - background: #bbb; - border: 1px solid #fff; - left: -6px; - position: absolute; - top: 0.75em; - transition: background 0.2s ease-in-out; - border-radius: 50%; - content: ' '; - height: 6px; - width: 6px; -} -.posts-collapse .post-content .post-header:hover { - border-bottom-color: #666; -} -.posts-collapse .post-content .post-header:hover::before { - background: #222; -} -.posts-collapse .post-content .post-meta-container { - display: inline; - font-size: 0.75em; - margin-right: 10px; -} -.posts-collapse .post-content .post-title { - display: inline; -} -.posts-collapse .post-content .post-title a { - border-bottom: 0; - color: var(--link-color); -} -.posts-collapse .post-content .post-title .fa-external-link-alt { - font-size: 0.875em; - margin-left: 5px; -} -.posts-collapse .post-content::before { - background: #f5f5f5; - content: ' '; - height: 100%; - margin-left: -2px; - position: absolute; - top: 1.25em; - width: 4px; -} -.post-body { - font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; - overflow-wrap: break-word; -} -@media (min-width: 1200px) { - .post-body { - font-size: 1.125em; - } -} -@media (min-width: 992px) { - .post-body { - text-align: justify; - } -} -@media (max-width: 991px) { - .post-body { - text-align: justify; - } -} -.post-body h1 .header-anchor, -.post-body h2 .header-anchor, -.post-body h3 .header-anchor, -.post-body h4 .header-anchor, -.post-body h5 .header-anchor, -.post-body h6 .header-anchor, -.post-body h1 .headerlink, -.post-body h2 .headerlink, -.post-body h3 .headerlink, -.post-body h4 .headerlink, -.post-body h5 .headerlink, -.post-body h6 .headerlink { - border-bottom-style: none; - color: inherit; - float: right; - font-size: 0.875em; - margin-left: 10px; - opacity: 0; -} -.post-body h1 .header-anchor::before, -.post-body h2 .header-anchor::before, -.post-body h3 .header-anchor::before, -.post-body h4 .header-anchor::before, -.post-body h5 .header-anchor::before, -.post-body h6 .header-anchor::before, -.post-body h1 .headerlink::before, -.post-body h2 .headerlink::before, -.post-body h3 .headerlink::before, -.post-body h4 .headerlink::before, -.post-body h5 .headerlink::before, -.post-body h6 .headerlink::before { - content: '\f0c1'; - font-family: 'Font Awesome 5 Free'; - font-weight: 900; -} -.post-body h1:hover .header-anchor, -.post-body h2:hover .header-anchor, -.post-body h3:hover .header-anchor, -.post-body h4:hover .header-anchor, -.post-body h5:hover .header-anchor, -.post-body h6:hover .header-anchor, -.post-body h1:hover .headerlink, -.post-body h2:hover .headerlink, -.post-body h3:hover .headerlink, -.post-body h4:hover .headerlink, -.post-body h5:hover .headerlink, -.post-body h6:hover .headerlink { - opacity: 0.5; -} -.post-body h1:hover .header-anchor:hover, -.post-body h2:hover .header-anchor:hover, -.post-body h3:hover .header-anchor:hover, -.post-body h4:hover .header-anchor:hover, -.post-body h5:hover .header-anchor:hover, -.post-body h6:hover .header-anchor:hover, -.post-body h1:hover .headerlink:hover, -.post-body h2:hover .headerlink:hover, -.post-body h3:hover .headerlink:hover, -.post-body h4:hover .headerlink:hover, -.post-body h5:hover .headerlink:hover, -.post-body h6:hover .headerlink:hover { - opacity: 1; -} -.post-body .exturl .fa { - font-size: 0.875em; - margin-left: 4px; -} -.post-body .image-caption, -.post-body img + figcaption, -.post-body .fancybox + figcaption { - color: #999; - font-size: 0.875em; - font-weight: bold; - line-height: 1; - margin: -15px auto 15px; - text-align: center; -} -.post-body iframe, -.post-body img, -.post-body video, -.post-body embed { - margin-bottom: 20px; -} -.post-body .video-container { - height: 0; - margin-bottom: 20px; - overflow: hidden; - padding-top: 75%; - position: relative; - width: 100%; -} -.post-body .video-container iframe, -.post-body .video-container object, -.post-body .video-container embed { - height: 100%; - left: 0; - margin: 0; - position: absolute; - top: 0; - width: 100%; -} -.post-gallery { - display: flex; - min-height: 200px; -} -.post-gallery .post-gallery-image { - flex: 1; -} -.post-gallery .post-gallery-image:not(:first-child) { - clip-path: polygon(40px 0, 100% 0, 100% 100%, 0 100%); - margin-left: -20px; -} -.post-gallery .post-gallery-image:not(:last-child) { - margin-right: -20px; -} -.post-gallery .post-gallery-image img { - height: 100%; - object-fit: cover; - opacity: 1; - width: 100%; -} -.posts-expand .post-gallery { - margin-bottom: 60px; -} -.posts-collapse .post-gallery { - margin: 15px 0; -} -.posts-expand .post-header { - font-size: 1.125em; - margin-bottom: 60px; - text-align: center; -} -.posts-expand .post-title { - font-size: 1.5em; - font-weight: normal; - margin: initial; - overflow-wrap: break-word; -} -.posts-expand .post-title-link { - border-bottom: 0; - color: var(--link-color); - display: inline-block; - position: relative; -} -.posts-expand .post-title-link::before { - background: var(--link-color); - bottom: 0; - content: ''; - height: 2px; - left: 0; - position: absolute; - transform: scaleX(0); - transition: transform 0.2s ease-in-out; - width: 100%; -} -.posts-expand .post-title-link:hover::before { - transform: scaleX(1); -} -.posts-expand .post-title-link .fa-external-link-alt { - font-size: 0.875em; - margin-left: 5px; -} -.post-sticky-flag { - display: inline-block; - margin-right: 8px; - transform: rotate(30deg); -} -.posts-expand .post-meta-container { - color: #999; - font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; - font-size: 0.75em; - margin-top: 3px; -} -.posts-expand .post-meta-container .post-description { - font-size: 0.875em; - margin-top: 2px; -} -.posts-expand .post-meta-container time { - border-bottom: 1px dashed #999; -} -.post-meta { - display: flex; - flex-wrap: wrap; - justify-content: center; -} -:not(.post-meta-break) + .post-meta-item::before { - content: '|'; - margin: 0 0.5em; -} -.post-meta-item-icon { - margin-right: 3px; -} -@media (max-width: 991px) { - .post-meta-item-text { - display: none; - } -} -.post-meta-break { - flex-basis: 100%; - height: 0; -} -#busuanzi_container_page_pv { - display: none; -} -.post-nav { - border-top: 1px solid #eee; - display: flex; - gap: 30px; - justify-content: space-between; - margin-top: 1em; - padding: 10px 5px 0; -} -.post-nav-item { - flex: 1; -} -.post-nav-item a { - border-bottom: 0; - display: block; - font-size: 0.875em; - line-height: 1.6; -} -.post-nav-item a:active { - top: 2px; -} -.post-nav-item .fa { - font-size: 0.75em; -} -.post-nav-item:first-child .fa { - margin-right: 5px; -} -.post-nav-item:last-child { - text-align: right; -} -.post-nav-item:last-child .fa { - margin-left: 5px; -} -.post-footer { - display: flex; - flex-direction: column; - justify-content: center; -} -.post-eof { - background: #ccc; - height: 1px; - margin: 80px auto 60px; - width: 8%; -} -.post-block:last-of-type .post-eof { - display: none; -} -.post-tags { - margin-top: 40px; - text-align: center; -} -.post-tags a { - display: inline-block; - font-size: 0.8125em; -} -.post-tags a:not(:last-child) { - margin-right: 10px; -} -.post-widgets { - border-top: 1px solid #eee; - margin-top: 15px; - text-align: center; -} -.wpac-rating-container { - height: 20px; - line-height: 20px; - margin-top: 10px; - padding-top: 6px; - text-align: center; -} -.social-like { - display: flex; - font-size: 0.875em; - justify-content: center; - text-align: center; -} -.reward-container { - margin: 1em 0 0; - padding: 1em 0; - text-align: center; -} -.reward-container button { - background: transparent; - color: #fc6423; - cursor: pointer; - line-height: 2; - padding: 0 15px; - border: 2px solid #fc6423; - border-radius: 2px; - outline: 0; - transition: all 0.2s ease-in-out; - vertical-align: text-top; -} -.reward-container button:hover { - background: #fc6423; - color: #fff; -} -.post-reward { - display: none; - padding-top: 20px; -} -.post-reward.active { - display: block; -} -.post-reward div { - display: inline-block; -} -.post-reward div span { - display: block; -} -.post-reward img { - display: inline-block; - margin: 0.8em 2em 0; - max-width: 100%; - width: 180px; -} -@-moz-keyframes next-roll { - from { - transform: rotateZ(30deg); - } - to { - transform: rotateZ(-30deg); - } -} -@-webkit-keyframes next-roll { - from { - transform: rotateZ(30deg); - } - to { - transform: rotateZ(-30deg); - } -} -@-o-keyframes next-roll { - from { - transform: rotateZ(30deg); - } - to { - transform: rotateZ(-30deg); - } -} -@keyframes next-roll { - from { - transform: rotateZ(30deg); - } - to { - transform: rotateZ(-30deg); - } -} -.category-all-page .category-all-title { - text-align: center; -} -.category-all-page .category-all { - margin-top: 20px; -} -.category-all-page .category-list { - list-style: none; - margin: 0; - padding: 0; -} -.category-all-page .category-list-item { - margin: 5px 10px; -} -.category-all-page .category-list-count { - color: #bbb; -} -.category-all-page .category-list-count::before { - content: ' ('; -} -.category-all-page .category-list-count::after { - content: ') '; -} -.category-all-page .category-list-child { - padding-left: 10px; -} -.event-list hr { - background: #222; - margin: 20px 0 45px; -} -.event-list hr::after { - background: #222; - color: #fff; - content: 'NOW'; - display: inline-block; - font-weight: bold; - padding: 0 5px; -} -.event-list .event { - --event-background: #222; - --event-foreground: #bbb; - --event-title: #fff; - background: var(--event-background); - padding: 15px; -} -.event-list .event .event-summary { - border-bottom: 0; - color: var(--event-title); - margin: 0; - padding: 0 0 0 35px; - position: relative; -} -.event-list .event .event-summary::before { - animation: dot-flash 1s alternate infinite ease-in-out; - background: var(--event-title); - left: 0; - margin-top: -6px; - position: absolute; - top: 50%; - border-radius: 50%; - content: ' '; - height: 12px; - width: 12px; -} -.event-list .event:nth-of-type(odd) .event-summary::before { - animation-delay: 0.5s; -} -.event-list .event:not(:last-child) { - margin-bottom: 20px; -} -.event-list .event .event-relative-time { - color: var(--event-foreground); - display: inline-block; - font-size: 12px; - font-weight: normal; - padding-left: 12px; -} -.event-list .event .event-details { - color: var(--event-foreground); - display: block; - line-height: 18px; - padding: 6px 0 6px 35px; -} -.event-list .event .event-details::before { - color: var(--event-foreground); - display: inline-block; - margin-right: 9px; - width: 14px; - font-family: 'Font Awesome 5 Free'; - font-weight: 900; -} -.event-list .event .event-details.event-location::before { - content: '\f041'; -} -.event-list .event .event-details.event-duration::before { - content: '\f017'; -} -.event-list .event .event-details.event-description::before { - content: '\f024'; -} -.event-list .event-past { - --event-background: #f5f5f5; - --event-foreground: #999; - --event-title: #222; -} -@-moz-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@-webkit-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@-o-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -ul.breadcrumb { - font-size: 0.75em; - list-style: none; - margin: 1em 0; - padding: 0 2em; - text-align: center; -} -ul.breadcrumb li { - display: inline; -} -ul.breadcrumb li:not(:first-child)::before { - content: '/\00a0'; - font-weight: normal; - padding: 0.5em; -} -ul.breadcrumb li:last-child { - font-weight: bold; -} -.tag-cloud { - text-align: center; -} -.tag-cloud a { - display: inline-block; - margin: 10px; -} -.tag-cloud-0 { - border-bottom-color: #aaa; - color: #aaa; -} -.tag-cloud-1 { - border-bottom-color: #9a9a9a; - color: #9a9a9a; -} -.tag-cloud-2 { - border-bottom-color: #8b8b8b; - color: #8b8b8b; -} -.tag-cloud-3 { - border-bottom-color: #7c7c7c; - color: #7c7c7c; -} -.tag-cloud-4 { - border-bottom-color: #6c6c6c; - color: #6c6c6c; -} -.tag-cloud-5 { - border-bottom-color: #5d5d5d; - color: #5d5d5d; -} -.tag-cloud-6 { - border-bottom-color: #4e4e4e; - color: #4e4e4e; -} -.tag-cloud-7 { - border-bottom-color: #3e3e3e; - color: #3e3e3e; -} -.tag-cloud-8 { - border-bottom-color: #2f2f2f; - color: #2f2f2f; -} -.tag-cloud-9 { - border-bottom-color: #202020; - color: #202020; -} -.tag-cloud-10 { - border-bottom-color: #111; - color: #111; -} -.use-motion .animated { - animation-fill-mode: none; - visibility: inherit; -} -.use-motion .sidebar .animated { - animation-fill-mode: both; -} -.header-inner { - background: var(--content-bg-color); - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); - width: 240px; -} -@media (max-width: 991px) { - .header-inner { - border-radius: initial; - width: auto; - } -} -.main { - align-items: stretch; - display: flex; - justify-content: space-between; - margin: 0 auto; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .main { - width: 1160px; - } -} -@media (min-width: 1600px) { - .main { - width: 73%; - } -} -@media (max-width: 991px) { - .main { - display: block; - width: auto; - } -} -.main-inner { - border-radius: initial; - box-sizing: border-box; - width: calc(100% - 252px); -} -@media (max-width: 991px) { - .main-inner { - border-radius: initial; - width: 100%; - } -} -.footer-inner { - padding-left: 252px; -} -@media (max-width: 991px) { - .footer-inner { - padding-left: 0; - padding-right: 0; - width: auto; - } -} -.site-brand-container { - background: var(--theme-color); -} -@media (max-width: 991px) { - .site-nav-on .site-brand-container { - box-shadow: 0 0 16px rgba(0,0,0,0.5); - } -} -.site-meta { - padding: 20px 0; -} -.brand { - padding: 0; -} -.site-subtitle { - margin: 10px 10px 0; -} -@media (min-width: 768px) and (max-width: 991px) { - .site-nav-toggle, - .site-nav-right { - display: flex; - flex-direction: column; - justify-content: center; - } -} -.site-nav-toggle .toggle, -.site-nav-right .toggle { - color: #fff; -} -.site-nav-toggle .toggle .toggle-line, -.site-nav-right .toggle .toggle-line { - background: #fff; -} -@media (min-width: 768px) and (max-width: 991px) { - .site-nav { - --scroll-height: 0; - height: 0; - overflow: hidden; - transition: height 0.2s ease-in-out; - } - body:not(.site-nav-on) .site-nav .animated { - animation: none; - } - body.site-nav-on .site-nav { - height: var(--scroll-height); - } -} -.menu .menu-item { - display: block; - margin: 0; -} -.menu .menu-item a { - padding: 5px 20px; - position: relative; - text-align: left; - transition-property: background-color; -} -@media (max-width: 991px) { - .menu .menu-item.menu-item-search { - display: none; - } -} -.menu .menu-item .badge { - background: #ccc; - border-radius: 10px; - color: var(--content-bg-color); - float: right; - padding: 2px 5px; - text-shadow: 1px 1px 0 rgba(0,0,0,0.1); -} -.main-menu .menu-item-active::after { - background: #bbb; - border-radius: 50%; - content: ' '; - height: 6px; - margin-top: -3px; - position: absolute; - right: 15px; - top: 50%; - width: 6px; -} -.sub-menu { - margin: 0; - padding: 6px 0; -} -.sub-menu .menu-item { - display: inline-block; -} -.sub-menu .menu-item a { - background: transparent; - margin: 5px 10px; - padding: initial; -} -.sub-menu .menu-item a:hover { - background: transparent; - color: #fc6423; -} -.sub-menu .menu-item-active { - border-bottom-color: #fc6423; - color: #fc6423; -} -.sub-menu .menu-item-active:hover { - border-bottom-color: #fc6423; -} -.sidebar { - margin-top: 12px; - position: -webkit-sticky; - position: sticky; - top: 12px; - width: 240px; - visibility: hidden; -} -@media (max-width: 991px) { - .sidebar { - display: none; - } -} -.sidebar-toggle { - display: none; -} -.sidebar-inner { - background: var(--content-bg-color); - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - box-sizing: border-box; - color: var(--text-color); -} -.site-state-item { - padding: 0 10px; -} -.sidebar .sidebar-button { - border-bottom: 1px dotted #ccc; - border-top: 1px dotted #ccc; -} -.sidebar .sidebar-button button { - border: 0; - color: #fc6423; - display: block; - width: 100%; -} -.sidebar .sidebar-button button:hover { - background: none; - border: 0; - color: #e34603; -} -.links-of-author { - display: flex; - flex-wrap: wrap; - justify-content: center; -} -.links-of-author-item { - margin: 5px 0 0; - width: 50%; -} -.links-of-author-item a { - box-sizing: border-box; - display: inline-block; - max-width: 100%; - overflow: hidden; - padding: 0 5px; - text-overflow: ellipsis; - white-space: nowrap; -} -.links-of-author-item a { - border-bottom: 0; - border-radius: 4px; - display: block; -} -.links-of-author-item a:hover { - background: var(--body-bg-color); -} -.main-inner > .sub-menu, -.main-inner > .post-block, -.main-inner > .tabs-comment, -.main-inner > .comments, -.main-inner > .pagination { - background: var(--content-bg-color); - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); -} -.main-inner > .sub-menu:not(:first-child):not(.sub-menu), -.main-inner > .post-block:not(:first-child):not(.sub-menu), -.main-inner > .tabs-comment:not(:first-child):not(.sub-menu), -.main-inner > .comments:not(:first-child):not(.sub-menu), -.main-inner > .pagination:not(:first-child):not(.sub-menu) { - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin-top: 12px; -} -@media (min-width: 768px) and (max-width: 991px) { - .main-inner > .sub-menu:not(:first-child):not(.sub-menu), - .main-inner > .post-block:not(:first-child):not(.sub-menu), - .main-inner > .tabs-comment:not(:first-child):not(.sub-menu), - .main-inner > .comments:not(:first-child):not(.sub-menu), - .main-inner > .pagination:not(:first-child):not(.sub-menu) { - margin-top: 10px; - } -} -@media (max-width: 767px) { - .main-inner > .sub-menu:not(:first-child):not(.sub-menu), - .main-inner > .post-block:not(:first-child):not(.sub-menu), - .main-inner > .tabs-comment:not(:first-child):not(.sub-menu), - .main-inner > .comments:not(:first-child):not(.sub-menu), - .main-inner > .pagination:not(:first-child):not(.sub-menu) { - margin-top: 8px; - } -} -.post-block, -.comments { - padding: 40px; -} -.post-eof { - display: none; -} -.pagination { - border-top: initial; - padding: 10px 0; -} -.post-body h1, -.post-body h2 { - border-bottom: 1px solid #eee; -} -.post-body h3 { - border-bottom: 1px dotted #eee; -} -@media (min-width: 768px) and (max-width: 991px) { - .main-inner { - padding: 10px; - } - .posts-expand .post-button { - margin-top: 20px; - } - .post-block { - padding: 20px; - } - .comments { - padding: 10px 20px; - } -} -@media (max-width: 767px) { - .main-inner { - padding: 8px; - } - .posts-expand .post-button { - margin: 12px 0; - } - .post-block { - padding: 12px; - } - .comments { - padding: 10px 12px; - } -} diff --git a/css/noscript.css b/css/noscript.css deleted file mode 100644 index f86f014..0000000 --- a/css/noscript.css +++ /dev/null @@ -1,34 +0,0 @@ -body { - margin-top: 2rem; -} -.use-motion .menu-item, -.use-motion .sidebar, -.use-motion .post-block, -.use-motion .pagination, -.use-motion .comments, -.use-motion .post-header, -.use-motion .post-body, -.use-motion .collection-header { - visibility: visible; -} -.use-motion .header, -.use-motion .site-brand-container .toggle, -.use-motion .footer { - opacity: initial; -} -.use-motion .site-title, -.use-motion .site-subtitle, -.use-motion .custom-logo-image { - opacity: initial; - top: initial; -} -.use-motion .logo-line { - transform: scaleX(1); -} -.search-pop-overlay, -.sidebar-nav { - display: none; -} -.sidebar-panel { - display: block; -} diff --git a/css/var.css b/css/var.css new file mode 100644 index 0000000..e69de29 diff --git a/images/apple-touch-icon-next.png b/images/apple-touch-icon-next.png deleted file mode 100644 index 86a0d1d33bc2ae8a0416ebba67d1bbb60aa29c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1544 zcmV+j2KV`iP)Px#OHfQyMIs_1FE20E)zv2_C(h2!$jHdT!ovUm|GT@p zWo2de_xJq#{8d#|IyyQ>M@Qx533`J9dBE>4W{r{KFjMLpp4N$2iMRJCGfPM7@le{)BPzVgz zp?ByVdWYVj|4-=tUS5SkR}Te{-Fr#UrxsqJ9+ed6YY9KmoXq6n^B9DRMwF@T2u)qH z!=wh-sAdPH_8fFy0-I1d68Zp);!FTtdweUZc2nr)?5^hh99w*FOU z@NYFT^!v%iPrGly0Q*+sLVtesYh+the|AET4WK8lR^dv1IZ-3FhAuiK5V|-?gf2#j z&_yW`x^K3G&OKl4kP$$ih@p!?B6M+)2(4Rz(6$=G6WT(;6uP)cgkEi(xI(Yi7`D(w zo(Y6r>FyarFV`4e&^@lk@PfWf|DSeM5}?agV`>aDXt-c%3^!*Ij0g0Q8X5*mjbRC$9oB0MOK51O_53LU8p`RzcozW; zx3wC>721@58xhdzx?E$}LW9xpjUu4UhOZO>Z8Us+D+1bR_}&sQXJ}B}yadb|8fraT zV|YUw4WF(>KpPF;mjp}*eTo5XG<+u!&}PFoihwq!uhI`XPYZ1{e1FDs0nqR?Ym5YF zqv0DwK${KUMFjNpqb>9(0vg8Y^d$otmiJc}L#s|8wD~Z~fHtQu8PG6DgwAq-&}PFY z1KMo(WI!7YpAcwxN`zJiV(2pgG_<|npE+y^Z8UsBppAx42(;Po$$&N*J{izP!?y+W zi2YsL=fkK`KXsymhWcmL#_y-S*Y&V_u#us^S9pDvbMSkxv7uidoc36Qa`CQ+5AC^d z=CTJ%0ZkrQ=v?t(E_)>OCL8YaU+nX$$--iAUNb;m^jBG2!5*5enU|exmY3aQcv=O- znjO}ft-yw2|VZs2g-W`Epf@n*5gsJ2LLtC^nFlq8+?%Xc!{Z3_|hFI~!oeU$ep z%4jE9Y9n1{ah68@W{++)8|fc~HIM4)QycHpg}3P<_K$M$L~}7jBXs?6bDwjvo+I;D zsoi}398La6+~*osM@45l#ptQ6MrZFz597*no3v)ffsUEletxWeW~`A+ntYvaeQj?e z*kSqGXZsrrhZ>IsxH$({IR{z11zkG`GR^j$#{%z41lp5(Ne#glJc5nj-BUaKR!X?# zzN6F-<0?&z;|30?9q0Z}oHG*G)Q)s%Db~RbjMU)mp-u&Dmm0zkF~o9eRh}p?ByVnjn4wmEZ*c=^{+H00012dQ@0+Qek%>aB^>E zX>4U6ba`-PAZc)PV*mhnoa6Eg2ys>@D9TUE%t_@^00ScnE@KN5BNI!L6ay0=M1VBI uWCJ6!R3OXP)X2ol#2my2%YaCrN-hBE7ZG&wLN%2D0000`v diff --git a/images/avatar.gif b/images/avatar.gif deleted file mode 100644 index 3b5d744b17ae541e331e9296640f0418d4e7c821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1785 zcmc(eiCfYK1Au>kC}AoSube4(tj%1XGs-IqwL{J4`&#nMW_^ZNl2cuo5V((w@KF|BSr-Dy?Ci?Qibx<>SXfwIUgogbVv$IpPzd>aHjAZHDkmh84Xt*5 zetu+ln8)SL&&~0%H{C|LeZF5GCnaWl}%00$Q845^9#jbGjmg0YYZq% z1HxF_nwpz|7kNflF9N9Q5iJvD0w&0S9`em0*f}BgKh?c=3?YfFSYWEn(AG8D&f9}T zF|^Ozg(s2g21~=--BqP2;U+HbKfJ-6t^Mpd+Vd(rH9aPG>VjZaYzrEFkzM1W4W*?PEbt7_?0ObX=R3 zfm*vF0T2e?IaX0s7omGCFNR2kL@?w2C0yDOh`J7v?|JOT+#U{?U0_{uqpk}`=r+VP zC12fo8O3{HxoZwDCgwbOZNi&VzKT}`9?t!=AVtC=y%<;l+psDMv*su+IEO5Q?TgN0 z=&H7$Gf?L=qqi5`@bimQ^6tFqKOeh&ck{=aiDvo7nlqFv&4wkwGeO}maQB{~k%?ck zE7Cdok^c8R9AM5IP1JJ)~Cz5Sv{>KNvX5%lB* z9%4%%UT_Wehfmg@gc%I&MaBNNZg03yUt|q!t%QXZJ9njhaoqbXT&%>qob*i$7vJ9{ z<5xiO5wWzi1105!#^PQCsto8sM4BepmIPkI5zoZ?*-1r_m8zst+M_T+_C9c`BdGyZ z()dMh4bJ_{K1iXtN>KzH?;xb$$ACsu8o5!>Fp}gw-jJ7^zUL{9PKe8II{SSj5atkhyp)&z8{9L0;5~dN8IV%e^8!Cm#@R*x{T5QR+y!yez%{*GTHhd}S&e?yi8`c_py&b`IA#{jM67?2A- z96X6KMj50BNJHBI?9Zj78OXyk^6Q>ufCnUfBpmb@X3fgX_M_S)8KAM>*1*t+*UyZc z^4w;`mO~qzDlqH`0`+#Ffh1i?m ztGf;Harv-B6uCo0TB=_qclsj^84AC_7^!(v;Oi5;Kl$z+X{K*fpE(N zWyVw!0PLHXpb*M(Bl@dIQsB%LhJP-?;tE={h{Y(QpYjdD9`hDbfEiJN) znh_Ry7j#5m>=)N|?3XDh_r1_zMIHc&wJ0=9`=ky7CuDT$ia(uo`t1DDrGgKeCI{e@ z{!P0)EBNAc7g6Tp|0X`9!<~%Y?miKrA{MDPqrRMh1+NgBt?oT@PRlxMyn2}v=_`HO z`{&U{yA!^h75UlWQ#)`T_pCemHpYGaJuhRu^ZY~){h#)L$)<4Zd(gT$0zX0)xk sj2>F=QOaOm@==$w^6D`S!9xiV>IXt*{ozi=Q1Vaehf=%aC;;&N3lE276aWAK diff --git a/images/baiyexing.jpg b/images/baiyexing.jpg deleted file mode 100644 index 591db1ac78be247ce7ad77924a00e1080ca31fe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23478 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 diff --git a/images/logo-algolia-nebula-blue-full.svg b/images/logo-algolia-nebula-blue-full.svg deleted file mode 100644 index 886c422..0000000 --- a/images/logo-algolia-nebula-blue-full.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/logo.svg b/images/logo.svg deleted file mode 100644 index 0f2b8d8..0000000 --- a/images/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/img/404.jpg b/img/404.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bab3c3f20a1e04b7e611f1b8e1d28357009007d GIT binary patch literal 16393 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 literal 0 HcmV?d00001 diff --git a/img/favicon.png b/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..862ebe85838eb999f7c19e80c498ebf286110f7e GIT binary patch literal 323 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index d378e73..2655cb4 100644 --- a/index.html +++ b/index.html @@ -1,621 +1,7 @@ - - - - - - +extends includes/layout.pug - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -DeepShark的博客 - - - - - - - - - - -

- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - -
- - - -
- - - - - - - -
-

- -

- - -
- - - - -
-

Dataloader出来的矩阵转图像

from PIL import Image

-

images = images.squeeze(0)[0].cpu().numpy().transpose(1,2,0)

-

image= Image.fromarray(np.uint8(images))

-

image.save(‘image.png’)

-

多卡定义全局变量问题

如下面代码所示,如果定义一个count计数器,每个卡执行代码的时候都会从新定义count,这样就导致计算count时会少很多。

-

需要用如下加粗字体的写法。

-

for idx, batch_data in enumerate(test_loader):

-

​ images = batch_data[“imgs”].cuda(non_blocking=True)

-

​ label_id = batch_data[“label”].cuda(non_blocking=True)

-

​ label_id = label_id.reshape(-1)

-

​ x = images.cuda()

-

​ y = label_id.cpu().numpy()

-

​ output = model(x).cpu().numpy()

-

​ output_pred.append([output.argmax()])

-

​ output_targ.append(y)

-

output_pred = np.concatenate(output_pred)

-

output_targ = np.concatenate(output_targ)

-

gather_list_0 = [None for i in range(world_size)]

-

gather_list_1 = [None for i in range(world_size)]

-

distributed.all_gather_object(gather_list_0, output_pred)

-

distributed.all_gather_object(gather_list_1, output_targ)

-

pred = np.concatenate(gather_list_0)

-

targ = np.concatenate(gather_list_1)

-

acc = accuracy_score(pred,targ)

-

return acc

- - -
- - - - - -
-
- -
-
-
- - - - - - - -
- - - -
- - - - - - - -
-

- -

- - -
- - - - -
-

按钮1:运行/继续 F5,真正的一步一步运行
按钮2:单步跳过(又叫逐过程) F10,按语句单步执行。当有函数时,不会进入函数。
按钮3:单步调试(又叫逐语句) F11:当有函数时,点击这个按钮,会进入这个函数内。
按钮4:单步跳出 ⇧F11:如果有循环,点击该按钮,会执行到循环外面的语句。

- - -
- - - - - -
-
- -
-
-
- - - - - - - -
- - - -
- - - - - - - -
-

- -

- - -
- - - - -
-

今天在地铁上看简讯,有这样一段话受到了启发,“看电影、刷微博、聚餐、玩手机,看似很轻松,心中却要应对着‘今天又要虚度一天了’的自责和压力。而选择自己喜欢的画画,别人看来辛苦,自己却甘之如饴。而只有在这样乐在其中的状态下,做自己习惯和喜欢的事情,才能不断地向新的高度迈进”。上面的加粗部分很有感触,因为平时下班特别是周末的时候经常有这样的感觉,就说没有做一些有意义的事情,还胡思乱想。这让我不禁又想重读一下《认知觉醒》,也写一下笔记或精华部分,顺带把电脑游戏都卸了,一是最近一段时间都觉得时间很重要不怎玩了,二是看一下自己是否以后再也不触碰这些过于娱乐的事物。

-

第一章《大脑》

-

​ 先讲几个概念,顺便分析一下。以动物进化史为例子讲述了大脑分三部分,分别是理智脑、情绪脑、本能脑,分别主管认知、情绪、本能。从产生的时间上看,理智脑要远远晚于情绪脑和本能脑,而且发育的时间也不同。理智脑虽然高级,但比起本能脑和情绪脑,它的力量实在是太弱小了,除了前面说的时间问题,还有细胞数量以及和心脏的距离原因,这也解释了为什么有些紧急情况理智脑会一片空白。除此之外,理智脑的消耗很大而且速度比较慢。

-

image-20221016215626198

-

-

image-20221016215613126

-

​ 这样就会导致一些我们平时常常遇到的问题,比如明知道这会应该看书刷题还是刷起了视频。由于理智脑相对来说比较弱,人的本能为了生存,大脑们达成的意见是保存体能,对食物进行即时享受,对舒适产生强烈欲望,才不至于被吃掉、被饿死。这就导致了这样两个问题,避难趋易——只做简单和舒适的事,待在舒适区内逃避真正的困难;急于求成——对不能马上看到结果的事往往缺乏耐心。大多数时候我们以为自己在思考,其实都是在对自身的行为和欲望进行合理化。

-

​ 让自己的理智脑加速变强的办法。因为大脑和肌肉一样,遵循用进废退的原则。习惯之所以难以改变,就是因为它是自我巩固的——越用越强,越强越用。要想从既有的习惯中跳出来,最好的方法不是依靠自制力,而是依靠知识,因为单纯地依靠自制力是非常痛苦的事,比如很多人在成长的过程中感到极度痛苦,就是因为他们总是用意志力去对抗本能和情绪,最后把自己搞得精疲力竭,却收效甚微。但知识可以让我们轻松产生新的认知和选择,我觉得更重要的是在别的有意义的事情上找到乐趣。需要提醒的是,让理智脑变强大并不意味着要抹杀本能脑和情绪脑。也没有必要抹杀,因为本能脑强大的运算能力和情绪脑强大的行动能力,是重要的资源,要去感受了解,为己所用,或者让理智脑调动情绪脑和本能脑,感觉这是最高境界。

-
-

(2022年10月17日更)

-

接着说一下焦虑和耐心。

-

​ 无论个体还是群体,人类的安全感都源于自己在某一方面拥有的独特优势:或能力,或财富,或权力,或影响力。焦虑分以下几种:完成焦虑(帮别人、Deadline等种种原因导致时间不够用)

-

定位焦虑(和那些不适合自己、厉害的人比)

-

选择焦虑(犹豫不决被消耗)

-

环境焦虑(家庭工作等不想做却需要花很多时间)

-

难度焦虑(有些问题就是很难不能回避)

-

根源是想同时做很多事,又想立即看到效果,也就是前面说的急于求成。王小波说:人的一切痛苦,本质上都是对自己无能的愤怒。焦虑的本质也契合这一观点:自己的欲望大于能力,又极度缺乏耐心。焦虑就是因为欲望与能力之间差距过大。解决这些问题除了理性分析外最重要的还是耐心。

-

​ 听过很多方法“一万小时定律”21天能养成一个习惯“等,也不是说这些没用,但抱着这种心理去做会很无趣痛苦,甚至最后放弃了。上学阶段我们的耐心得到不断提升,走出校园我们如果不培养,就会停留在一个水平。在培养耐心前需要知道几个规律,时间和收益不是正比而是有一个拐点的、我们需要在舒适区和困难区的中间区去探索,也叫拉伸区,好处就不说了,大家都懂。

-

​ 我们知道这样一个重要关系,改变量﹥行动量﹥思考量﹥学习量,而痛苦程度是相反的,所以我们通常停留在学习阶段,而没有收获,这是最可怕的,可能会越学越焦虑,或投入更多没有必要的时间学习以为能解决问题。这让我想到平时自己也是这样,考研数学和现在刷leecode,总想着多看看把所有知识过一下,没有留下太多思考的时间,这也是缺乏耐心、避难趋易的表现,最后的结果就是一遍下来没咋懂,又来几遍,还是没掌握精髓,还觉得自己努力了。要学什么东西一定要深入底层,不然忙忙碌碌却收获甚微。

-

​ 还又平台期的问题,学习的过程是上升、平台反复的过程,平台期要坚持一下。因此我们不要因自己进步缓慢而沮丧,也不会因别人成长迅速而焦虑。从这个角度看,耐心不是毅力带来的结果,而是具有长远目光的结果。

-

​ 如何拥有耐心呢,面对天性坦然接纳自己、面对诱惑学会延迟满足和奖励自己,这两个都需要和自己温和对话,不要强硬,毕竟是本性。还有就是用理智脑去驱动,看书就是一种享受。

-
-
-

2022年10月19日更

-

第二章《潜意识》

-

​ 模糊的概念,分三种,认知、情绪和行动上的模糊。人与机器的区别,在于机器没有指令什么也干不了,而人没有指令会有潜意识来支配,正是这种潜意识导致人的想法是模糊的,比如你想做一件事却不知不觉拿起了手机。前面说过人的本能是想保存能量所以不会去高消耗的事情,导致人们总是习惯在模糊区打转,在舒适区兜圈,重复做已经掌握的事情,对真正的困难视而不见,还有个很现实的例子,因为解决问题需要动脑,享受幸福也需要动脑平衡各种微妙的关系,而承受痛苦则只需陷在那里不动,这也为社么有的人遭遇挫折萎靡不振,遇到问题一直拖延。然而回避痛苦并不会使痛苦消失,反而会使其转入潜意识,变成模糊的感觉。而具体事件一旦变模糊,其边界就会无限扩大,原本并不困难的小事,也会在模糊的潜意识里变得难以解决。所以模糊一定要消除。可以联系自身的事情想一想。还有一个重要情况,行动力不足的真正原因是选择模糊,而不是环境问题或意志力问题。

-

​ 而解决的办法很简单,就是去一层一层挖掘我们问题的根源,把模糊的点,害怕的点弄明白,去拆解问题,消除认知、情绪和行动上的模糊。

-

2022年10月20日更

-
-

​ 感性这一部分其实不太赞成,有些时候我们确实是凭感觉去做,而且做的很对,但还是比较玄学,培养这方面感觉不是很有必要。但是有一点叫熔断不读书法还不错,就是你读一本书看到触动的地方就不读了,去联想,这样会留下很深刻的影响,比流程式的读完好。去思考为什么触动,这样用感性带动理性,能了解自己。其实我小时候就这样了,当自己被触动就跳出来问自己为什么会有这样的感觉。

-
-
-

第三章 《元认知》

-

​ 元有最高级别的意思。这里讲的是反省自己,有种灵魂出窍的感觉,来监视自己、审视自己。有主动和被动的,被动是我们被批评或犯错之后的反省,主动是没有碰壁之前就知道自我反省。

-

​ 如何获取的呢?静态获取,是从前人经历、读书去反思;自身经历,古人云三省吾身;动态获取,当下,自己在做什么事情,反思自己为什么要这样做,忍不住点开微信,记得审视自己的行为;最牛的冥想,就是监控自己的注意力。

-
-

​ 今天要说的话题是自控力,也是元认知的一种行动表现。当我们漫步街头时,元认知能力弱的人总会被路边的音乐、屏幕广告、叫卖声或突发事件轻易地吸引,而元认知能力强的人则会花那么一两秒去思考这事值不值得关注,同样的在和别人争吵的时候,可以空留两秒去思考要脱口的话。还有看微信消息的时候,每当遇到需要选择的情况时,我们要是能先停留几秒思考一下,就有可能激活自己的理智脑,启用元认知来审视当前的思维,然后做出不一样的选择。高尔基曾经说:每一次克制自己,就意味着比以前更强大。因为每克制自己一次,就相当于进行了一次自我审视和主动控制,相当于进行了一次锻炼。元认知能力要是能经常锻炼,我们理智脑的自控力可不就越来越强大了嘛!

-

​ 另一个概念也不错叫元时间。因为一天24小时看起来每分每秒都一样,但实际上并不相同,有些时间的权重要远远大于其他时间,作者把这些权重大的时间叫作“元时间”,善用这些时间会极大程度地优化后续时间的质量。

-

​ 焦虑的人很少有“元时间”的意识,他们习惯不动脑子、直接行动,喜欢用饱和的行动来感动自己,想与做的时间配比差距悬殊,他们甚至连一丁点儿深入思考的时间都不愿意花,任由本能欲望让自己迷失在自我满足的行动里。要在元时间节点上消除模糊,要在焦虑的时候跳出来思考。

-
-
-

(有五天没更新了。。)
今天要说的是专注力。包括情绪专注和学习专注。

-

​ 我们通常做着A事却想着B事,这种情况可以用元认知观察到,缺少感受的行动,就像是失去灵魂的躯壳,更准确的说,我们的躯壳内装了一个混乱的灵魂,确实是这样。这种情况对我的情绪状态和能力提升会有持续的负面影响。走神让我们要么沉浸过去要么担忧未来,要么幻想不现实的事情,唯独不能活在当下。

-

​ 具体分析为什么这样,要么是觉得当下痛苦要么是当下无聊,于是追求更舒服的事情,而走神是最容易的,这可以联系到前文说过的本性。分心走神的本质就是逃避。

-

​ 具体要怎么做呢?我们要把感受收回来,去体会运动或休息的时候的细微变化。一定要身心合一。

-

​ 对于学习专注,我们不是要强迫自己或感动自己,要懂得深度沉浸,具体做法,1.有明确的目标而不是定义练习多长时间,2.练习时要嫉妒专注,心神合一,3.能获得有效反馈,知道自己存在哪些不足,这个跟专注没太大关系。我的想法是可以找自己没做好专注的原因,4.每天都要在拉伸区练习,要做有难度通过一天努力克服的事情。

-

​ 今天要说的是学习不是一味地努力,要在自己舒适区的边缘去学习,找一个自己能坚持做下去的方式,比单纯按照标准化的时间和方式做更重要。以前一直以为多花时间才能学好、才能达到效果,其实那是因为自己急于求成,想要快速见效,这样反而不容易坚持。

-

​ 距离太远的,我们都把握不住。即使是舒服的事情,有很多时间很多钱,自己都不会很好的利用的。如果没有与之匹配的清醒和定力,绝大多数人最终都会被强大的天性支配,去选择娱乐消遣。在有约束的环境下我们反而效率更高,生活更充实。

-

​ 学习的过程,拆解目标(去模糊)、提炼目标(不能分心走神)、关注点(自我检测)

- - -
- - - - - -
-
- -
-
-
- - - - - - - -
- - - -
- - - - - - - -
-

- -

- - -
- - - - -
-

​ 想正儿八经的好好做个个人博客,想分享一些所学所思的专业知识,尽量有点深度的,也当做下笔记,再分享一些读书、生活感悟等。这是第一篇,先说一下学习为什么不能浅尝辄止,平时要注意一下深度。

-

​ 最近在秋招,也没有怎么去投简历,刚刚面了下奈雪,别看是个做奶茶的,视觉算法工资开的很高,年薪40-50w,聊过后是知道视觉方向是面向员工提醒的,比如工作台脏了需要打扫。当时问了很多细节的东西,比如在分类任务上MSEloss和交叉熵的区别,除了梯度下降算法还用过哪些,我寻思除了这个也没用过哪些啊?然后他举个例子说adam有用过吗,我顿时懵了,又把优化器和梯度下降给忘了,之前实习面试就问过,出现这种问题主要有两个原因,一是平时挖掘的不深,二是不能好好住,也是理解不够透,要不为啥记不住。然后问我怎么解决局部最优的问题,我往学习率上答,继续追问学习率大小的影响,我错误的说大的时候有梯度爆炸问题,一下子印象就不好了,其实这些细节问题,刚开始学习深度学习的时候就弄明白了,但是后来用不上给忘记了。反正再学习什么的时候要弄透彻一些,要记录一下

-

​ 除了学习上的,还有平时一些知识积累,记得十一国庆回家,我发小问我这疫情到底是由什么引起的,我又摸棱两可,到底是美国实验室病毒还是自然现象,又问马云为什么去国外,之前也听说过一些说法,但还是记不清了。这些问题多数是因为了解的不透彻,不能形成一个逻辑,导致记不住。为什么说不能浅尝辄止呢,平时生活中听别人聊天,一些话题,都知道给结论,有的知道多一点的能多说一下相关知识,要是再深问一下为什么,就不知道了。也不知道这样是好是坏,好的是不用花太多时间去了解,就能知道个结论,不好的是,浅显的东西大家都知道,咱们就没什么可聊的了,不如自己深挖一些,这样大家聊到不懂的时候,你可以继续再把话题延续一下

-

​ 这样不是为了炫耀,获取知识本身是种快乐,自己往深挖一挖,更快乐。浅的东西大家都知道,无论是聊天还是网络或外出,都容易学到,自己没必要去扩大”浅“的面。

- - -
- - - - - -
-
- -
-
-
- - - - - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - - +block content + include ./includes/mixins/post-ui.pug + #recent-posts.recent-posts + +postUI + include includes/pagination.pug \ No newline at end of file diff --git a/js/bookmark.js b/js/bookmark.js deleted file mode 100644 index 8e3ae6a..0000000 --- a/js/bookmark.js +++ /dev/null @@ -1,56 +0,0 @@ -/* global CONFIG */ - -document.addEventListener('DOMContentLoaded', () => { - 'use strict'; - - const doSaveScroll = () => { - localStorage.setItem('bookmark' + location.pathname, window.scrollY); - }; - - const scrollToMark = () => { - let top = localStorage.getItem('bookmark' + location.pathname); - top = parseInt(top, 10); - // If the page opens with a specific hash, just jump out - if (!isNaN(top) && location.hash === '') { - // Auto scroll to the position - window.anime({ - targets : document.scrollingElement, - duration : 200, - easing : 'linear', - scrollTop: top - }); - } - }; - // Register everything - const init = function(trigger) { - // Create a link element - const link = document.querySelector('.book-mark-link'); - // Scroll event - window.addEventListener('scroll', () => link.classList.toggle('book-mark-link-fixed', window.scrollY === 0), { passive: true }); - // Register beforeunload event when the trigger is auto - if (trigger === 'auto') { - // Register beforeunload event - window.addEventListener('beforeunload', doSaveScroll); - document.addEventListener('pjax:send', doSaveScroll); - } - // Save the position by clicking the icon - link.addEventListener('click', () => { - doSaveScroll(); - window.anime({ - targets : link, - duration: 200, - easing : 'linear', - top : -30, - complete: () => { - setTimeout(() => { - link.style.top = ''; - }, 400); - } - }); - }); - scrollToMark(); - document.addEventListener('pjax:success', scrollToMark); - }; - - init(CONFIG.bookmark.save); -}); diff --git a/js/comments-buttons.js b/js/comments-buttons.js deleted file mode 100644 index 505c21b..0000000 --- a/js/comments-buttons.js +++ /dev/null @@ -1,25 +0,0 @@ -/* global CONFIG */ - -(function() { - const commentButton = document.querySelectorAll('.comment-button'); - commentButton.forEach(element => { - const commentClass = element.classList[2]; - element.addEventListener('click', () => { - commentButton.forEach(active => active.classList.toggle('active', active === element)); - document.querySelectorAll('.comment-position').forEach(active => active.classList.toggle('active', active.classList.contains(commentClass))); - if (CONFIG.comments.storage) { - localStorage.setItem('comments_active', commentClass); - } - }); - }); - let { activeClass } = CONFIG.comments; - if (CONFIG.comments.storage) { - activeClass = localStorage.getItem('comments_active') || activeClass; - } - if (activeClass) { - const activeButton = document.querySelector(`.comment-button.${activeClass}`); - if (activeButton) { - activeButton.click(); - } - } -})(); diff --git a/js/comments.js b/js/comments.js deleted file mode 100644 index 4045e8c..0000000 --- a/js/comments.js +++ /dev/null @@ -1,21 +0,0 @@ -/* global CONFIG */ - -window.addEventListener('tabs:register', () => { - let { activeClass } = CONFIG.comments; - if (CONFIG.comments.storage) { - activeClass = localStorage.getItem('comments_active') || activeClass; - } - if (activeClass) { - const activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`); - if (activeTab) { - activeTab.click(); - } - } -}); -if (CONFIG.comments.storage) { - window.addEventListener('tabs:click', event => { - if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return; - const commentClass = event.target.classList[1]; - localStorage.setItem('comments_active', commentClass); - }); -} diff --git a/js/config.js b/js/config.js deleted file mode 100644 index caa0075..0000000 --- a/js/config.js +++ /dev/null @@ -1,66 +0,0 @@ -if (!window.NexT) window.NexT = {}; - -(function() { - const className = 'next-config'; - - const staticConfig = {}; - let variableConfig = {}; - - const parse = text => JSON.parse(text || '{}'); - - const update = name => { - const targetEle = document.querySelector(`.${className}[data-name="${name}"]`); - if (!targetEle) return; - const parsedConfig = parse(targetEle.text); - if (name === 'main') { - Object.assign(staticConfig, parsedConfig); - } else { - variableConfig[name] = parsedConfig; - } - }; - - update('main'); - - window.CONFIG = new Proxy({}, { - get(overrideConfig, name) { - let existing; - if (name in staticConfig) { - existing = staticConfig[name]; - } else { - if (!(name in variableConfig)) update(name); - existing = variableConfig[name]; - } - - // For unset override and mixable existing - if (!(name in overrideConfig) && typeof existing === 'object') { - // Get ready to mix. - overrideConfig[name] = {}; - } - - if (name in overrideConfig) { - const override = overrideConfig[name]; - - // When mixable - if (typeof override === 'object' && typeof existing === 'object') { - // Mix, proxy changes to the override. - return new Proxy({ ...existing, ...override }, { - set(target, prop, value) { - target[prop] = value; - override[prop] = value; - return true; - } - }); - } - - return override; - } - - // Only when not mixable and override hasn't been set. - return existing; - } - }); - - document.addEventListener('pjax:success', () => { - variableConfig = {}; - }); -})(); diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000..a22b57f --- /dev/null +++ b/js/main.js @@ -0,0 +1,879 @@ +document.addEventListener('DOMContentLoaded', function () { + let headerContentWidth, $nav + let mobileSidebarOpen = false + + const adjustMenu = init => { + const getAllWidth = ele => { + return Array.from(ele).reduce((width, i) => width + i.offsetWidth, 0) + } + + if (init) { + const blogInfoWidth = getAllWidth(document.querySelector('#blog-info > a').children) + const menusWidth = getAllWidth(document.getElementById('menus').children) + headerContentWidth = blogInfoWidth + menusWidth + $nav = document.getElementById('nav') + } + + const hideMenuIndex = window.innerWidth <= 768 || headerContentWidth > $nav.offsetWidth - 120 + $nav.classList.toggle('hide-menu', hideMenuIndex) + } + + // 初始化header + const initAdjust = () => { + adjustMenu(true) + $nav.classList.add('show') + } + + // sidebar menus + const sidebarFn = { + open: () => { + btf.sidebarPaddingR() + document.body.style.overflow = 'hidden' + btf.animateIn(document.getElementById('menu-mask'), 'to_show 0.5s') + document.getElementById('sidebar-menus').classList.add('open') + mobileSidebarOpen = true + }, + close: () => { + const $body = document.body + $body.style.overflow = '' + $body.style.paddingRight = '' + btf.animateOut(document.getElementById('menu-mask'), 'to_hide 0.5s') + document.getElementById('sidebar-menus').classList.remove('open') + mobileSidebarOpen = false + } + } + + /** + * 首頁top_img底下的箭頭 + */ + const scrollDownInIndex = () => { + const handleScrollToDest = () => { + btf.scrollToDest(document.getElementById('content-inner').offsetTop, 300) + } + + const $scrollDownEle = document.getElementById('scroll-down') + $scrollDownEle && btf.addEventListenerPjax($scrollDownEle, 'click', handleScrollToDest) + } + + /** + * 代碼 + * 只適用於Hexo默認的代碼渲染 + */ + const addHighlightTool = () => { + const highLight = GLOBAL_CONFIG.highlight + if (!highLight) return + + const { highlightCopy, highlightLang, highlightHeightLimit, plugin } = highLight + const isHighlightShrink = GLOBAL_CONFIG_SITE.isHighlightShrink + const isShowTool = highlightCopy || highlightLang || isHighlightShrink !== undefined + const $figureHighlight = plugin === 'highlighjs' ? document.querySelectorAll('figure.highlight') : document.querySelectorAll('pre[class*="language-"]') + + if (!((isShowTool || highlightHeightLimit) && $figureHighlight.length)) return + + const isPrismjs = plugin === 'prismjs' + const highlightShrinkClass = isHighlightShrink === true ? 'closed' : '' + const highlightShrinkEle = isHighlightShrink !== undefined ? '' : '' + const highlightCopyEle = highlightCopy ? '
' : '' + + const copy = (text, ctx) => { + if (document.queryCommandSupported && document.queryCommandSupported('copy')) { + document.execCommand('copy') + if (GLOBAL_CONFIG.Snackbar !== undefined) { + btf.snackbarShow(GLOBAL_CONFIG.copy.success) + } else { + const prevEle = ctx.previousElementSibling + prevEle.textContent = GLOBAL_CONFIG.copy.success + prevEle.style.opacity = 1 + setTimeout(() => { prevEle.style.opacity = 0 }, 700) + } + } else { + if (GLOBAL_CONFIG.Snackbar !== undefined) { + btf.snackbarShow(GLOBAL_CONFIG.copy.noSupport) + } else { + ctx.previousElementSibling.textContent = GLOBAL_CONFIG.copy.noSupport + } + } + } + + // click events + const highlightCopyFn = ele => { + const $buttonParent = ele.parentNode + $buttonParent.classList.add('copy-true') + const selection = window.getSelection() + const range = document.createRange() + const preCodeSelector = isPrismjs ? 'pre code' : 'table .code pre' + range.selectNodeContents($buttonParent.querySelectorAll(`${preCodeSelector}`)[0]) + selection.removeAllRanges() + selection.addRange(range) + const text = selection.toString() + copy(text, ele.lastChild) + selection.removeAllRanges() + $buttonParent.classList.remove('copy-true') + } + + const highlightShrinkFn = ele => { + ele.classList.toggle('closed') + } + + const highlightToolsFn = function (e) { + const $target = e.target.classList + if ($target.contains('expand')) highlightShrinkFn(this) + else if ($target.contains('copy-button')) highlightCopyFn(this) + } + + const expandCode = function () { + this.classList.toggle('expand-done') + } + + const createEle = (lang, item, service) => { + const fragment = document.createDocumentFragment() + + if (isShowTool) { + const hlTools = document.createElement('div') + hlTools.className = `highlight-tools ${highlightShrinkClass}` + hlTools.innerHTML = highlightShrinkEle + lang + highlightCopyEle + btf.addEventListenerPjax(hlTools, 'click', highlightToolsFn) + fragment.appendChild(hlTools) + } + + if (highlightHeightLimit && item.offsetHeight > highlightHeightLimit + 30) { + const ele = document.createElement('div') + ele.className = 'code-expand-btn' + ele.innerHTML = '' + btf.addEventListenerPjax(ele, 'click', expandCode) + fragment.appendChild(ele) + } + + if (service === 'hl') { + item.insertBefore(fragment, item.firstChild) + } else { + item.parentNode.insertBefore(fragment, item) + } + } + + if (isPrismjs) { + $figureHighlight.forEach(item => { + if (highlightLang) { + const langName = item.getAttribute('data-language') || 'Code' + const highlightLangEle = `
${langName}
` + btf.wrap(item, 'figure', { class: 'highlight' }) + createEle(highlightLangEle, item) + } else { + btf.wrap(item, 'figure', { class: 'highlight' }) + createEle('', item) + } + }) + } else { + $figureHighlight.forEach(item => { + if (highlightLang) { + let langName = item.getAttribute('class').split(' ')[1] + if (langName === 'plain' || langName === undefined) langName = 'Code' + const highlightLangEle = `
${langName}
` + createEle(highlightLangEle, item, 'hl') + } else { + createEle('', item, 'hl') + } + }) + } + } + + /** + * PhotoFigcaption + */ + const addPhotoFigcaption = () => { + document.querySelectorAll('#article-container img').forEach(item => { + const altValue = item.title || item.alt + if (!altValue) return + const ele = document.createElement('div') + ele.className = 'img-alt is-center' + ele.textContent = altValue + item.insertAdjacentElement('afterend', ele) + }) + } + + /** + * Lightbox + */ + const runLightbox = () => { + btf.loadLightbox(document.querySelectorAll('#article-container img:not(.no-lightbox)')) + } + + /** + * justified-gallery 圖庫排版 + */ + + const fetchUrl = async (url) => { + const response = await fetch(url) + return await response.json() + } + + const runJustifiedGallery = (item, data, isButton = false, tabs) => { + const dataLength = data.length + + const ig = new InfiniteGrid.JustifiedInfiniteGrid(item, { + gap: 5, + isConstantSize: true, + sizeRange: [150, 600], + useResizeObserver: true, + observeChildren: true, + useTransform: true + // useRecycle: false + }) + + if (tabs) { + btf.addGlobalFn('igOfTabs', () => { ig.destroy() }, false, tabs) + } + + const replaceDq = str => str.replace(/"/g, '"') // replace double quotes to " + + const getItems = (nextGroupKey, count) => { + const nextItems = [] + const startCount = (nextGroupKey - 1) * count + + for (let i = 0; i < count; ++i) { + const num = startCount + i + if (num >= dataLength) { + break + } + + const item = data[num] + const alt = item.alt ? `alt="${replaceDq(item.alt)}"` : '' + const title = item.title ? `title="${replaceDq(item.title)}"` : '' + + nextItems.push(`
+ +
`) + } + return nextItems + } + + const buttonText = GLOBAL_CONFIG.infinitegrid.buttonText + const addButton = item => { + const button = document.createElement('button') + button.textContent = buttonText + + const buttonFn = e => { + e.target.removeEventListener('click', buttonFn) + e.target.remove() + btf.setLoading.add(item) + appendItem(ig.getGroups().length + 1, 10) + } + + button.addEventListener('click', buttonFn) + item.insertAdjacentElement('afterend', button) + } + + const appendItem = (nextGroupKey, count) => { + ig.append(getItems(nextGroupKey, count), nextGroupKey) + } + + const maxGroupKey = Math.ceil(dataLength / 10) + + const completeFn = e => { + const { updated, isResize, mounted } = e + if (!updated.length || !mounted.length || isResize) { + return + } + + btf.loadLightbox(item.querySelectorAll('img:not(.medium-zoom-image)')) + + if (ig.getGroups().length === maxGroupKey) { + btf.setLoading.remove(item) + ig.off('renderComplete', completeFn) + return + } + + if (isButton) { + btf.setLoading.remove(item) + addButton(item) + } + } + + const requestAppendFn = btf.debounce(e => { + const nextGroupKey = (+e.groupKey || 0) + 1 + appendItem(nextGroupKey, 10) + + if (nextGroupKey === maxGroupKey) { + ig.off('requestAppend', requestAppendFn) + } + }, 300) + + btf.setLoading.add(item) + ig.on('renderComplete', completeFn) + + if (isButton) { + appendItem(1, 10) + } else { + ig.on('requestAppend', requestAppendFn) + ig.renderItems() + } + + btf.addGlobalFn('justifiedGallery', () => { ig.destroy() }) + } + + const addJustifiedGallery = async (ele, tabs = false) => { + const init = async () => { + for (const item of ele) { + if (btf.isHidden(item)) continue + if (tabs && item.classList.contains('loaded')) { + item.querySelector('.gallery-items').innerHTML = '' + const button = item.querySelector(':scope > button') + const loadingContainer = item.querySelector(':scope > .loading-container') + button && button.remove() + loadingContainer && loadingContainer.remove() + } + + const isButton = item.getAttribute('data-button') === 'true' + const text = item.firstElementChild.textContent + item.classList.add('loaded') + const content = item.getAttribute('data-type') === 'url' ? await fetchUrl(text) : JSON.parse(text) + runJustifiedGallery(item.lastElementChild, content, isButton, tabs) + } + } + + if (typeof InfiniteGrid === 'function') { + init() + } else { + await getScript(`${GLOBAL_CONFIG.infinitegrid.js}`) + init() + } + } + + /** + * rightside scroll percent + */ + const rightsideScrollPercent = currentTop => { + const scrollPercent = btf.getScrollPercent(currentTop, document.body) + const goUpElement = document.getElementById('go-up') + + if (scrollPercent < 95) { + goUpElement.classList.add('show-percent') + goUpElement.querySelector('.scroll-percent').textContent = scrollPercent + } else { + goUpElement.classList.remove('show-percent') + } + } + + /** + * 滾動處理 + */ + const scrollFn = () => { + const $rightside = document.getElementById('rightside') + const innerHeight = window.innerHeight + 56 + let initTop = 0 + const $header = document.getElementById('page-header') + const isChatBtn = typeof chatBtn !== 'undefined' + const isShowPercent = GLOBAL_CONFIG.percent.rightside + + // 當滾動條小于 56 的時候 + if (document.body.scrollHeight <= innerHeight) { + $rightside.classList.add('rightside-show') + return + } + + // find the scroll direction + const scrollDirection = currentTop => { + const result = currentTop > initTop // true is down & false is up + initTop = currentTop + return result + } + + let flag = '' + const scrollTask = btf.throttle(() => { + const currentTop = window.scrollY || document.documentElement.scrollTop + const isDown = scrollDirection(currentTop) + if (currentTop > 56) { + if (flag === '') { + $header.classList.add('nav-fixed') + $rightside.classList.add('rightside-show') + } + + if (isDown) { + if (flag !== 'down') { + $header.classList.remove('nav-visible') + isChatBtn && window.chatBtn.hide() + flag = 'down' + } + } else { + if (flag !== 'up') { + $header.classList.add('nav-visible') + isChatBtn && window.chatBtn.show() + flag = 'up' + } + } + } else { + flag = '' + if (currentTop === 0) { + $header.classList.remove('nav-fixed', 'nav-visible') + } + $rightside.classList.remove('rightside-show') + } + + isShowPercent && rightsideScrollPercent(currentTop) + + if (document.body.scrollHeight <= innerHeight) { + $rightside.classList.add('rightside-show') + } + }, 300) + + btf.addEventListenerPjax(window, 'scroll', scrollTask, { passive: true }) + } + + /** + * toc,anchor + */ + const scrollFnToDo = () => { + const isToc = GLOBAL_CONFIG_SITE.isToc + const isAnchor = GLOBAL_CONFIG.isAnchor + const $article = document.getElementById('article-container') + + if (!($article && (isToc || isAnchor))) return + + let $tocLink, $cardToc, autoScrollToc, $tocPercentage, isExpand + + if (isToc) { + const $cardTocLayout = document.getElementById('card-toc') + $cardToc = $cardTocLayout.querySelector('.toc-content') + $tocLink = $cardToc.querySelectorAll('.toc-link') + $tocPercentage = $cardTocLayout.querySelector('.toc-percentage') + isExpand = $cardToc.classList.contains('is-expand') + + // toc元素點擊 + const tocItemClickFn = e => { + const target = e.target.closest('.toc-link') + if (!target) return + + e.preventDefault() + btf.scrollToDest(btf.getEleTop(document.getElementById(decodeURI(target.getAttribute('href')).replace('#', ''))), 300) + if (window.innerWidth < 900) { + $cardTocLayout.classList.remove('open') + } + } + + btf.addEventListenerPjax($cardToc, 'click', tocItemClickFn) + + autoScrollToc = item => { + const activePosition = item.getBoundingClientRect().top + const sidebarScrollTop = $cardToc.scrollTop + if (activePosition > (document.documentElement.clientHeight - 100)) { + $cardToc.scrollTop = sidebarScrollTop + 150 + } + if (activePosition < 100) { + $cardToc.scrollTop = sidebarScrollTop - 150 + } + } + } + + // find head position & add active class + const $articleList = $article.querySelectorAll('h1,h2,h3,h4,h5,h6') + let detectItem = '' + const findHeadPosition = top => { + if (top === 0) { + return false + } + + let currentId = '' + let currentIndex = '' + + $articleList.forEach((ele, index) => { + if (top > btf.getEleTop(ele) - 80) { + const id = ele.id + currentId = id ? '#' + encodeURI(id) : '' + currentIndex = index + } + }) + + if (detectItem === currentIndex) return + + if (isAnchor) btf.updateAnchor(currentId) + + detectItem = currentIndex + + if (isToc) { + $cardToc.querySelectorAll('.active').forEach(i => { i.classList.remove('active') }) + + if (currentId === '') { + return + } + + const currentActive = $tocLink[currentIndex] + currentActive.classList.add('active') + + setTimeout(() => { + autoScrollToc(currentActive) + }, 0) + + if (isExpand) return + let parent = currentActive.parentNode + + for (; !parent.matches('.toc'); parent = parent.parentNode) { + if (parent.matches('li')) parent.classList.add('active') + } + } + } + + // main of scroll + const tocScrollFn = btf.throttle(() => { + const currentTop = window.scrollY || document.documentElement.scrollTop + if (isToc && GLOBAL_CONFIG.percent.toc) { + $tocPercentage.textContent = btf.getScrollPercent(currentTop, $article) + } + findHeadPosition(currentTop) + }, 100) + + btf.addEventListenerPjax(window, 'scroll', tocScrollFn, { passive: true }) + } + + const handleThemeChange = mode => { + const globalFn = window.globalFn || {} + const themeChange = globalFn.themeChange || {} + if (!themeChange) { + return + } + + Object.keys(themeChange).forEach(key => { + const themeChangeFn = themeChange[key] + if (['disqus', 'disqusjs'].includes(key)) { + setTimeout(() => themeChangeFn(mode), 300) + } else { + themeChangeFn(mode) + } + }) + } + + /** + * Rightside + */ + const rightSideFn = { + readmode: () => { // read mode + const $body = document.body + $body.classList.add('read-mode') + const newEle = document.createElement('button') + newEle.type = 'button' + newEle.className = 'fas fa-sign-out-alt exit-readmode' + $body.appendChild(newEle) + + const clickFn = () => { + $body.classList.remove('read-mode') + newEle.remove() + newEle.removeEventListener('click', clickFn) + } + + newEle.addEventListener('click', clickFn) + }, + darkmode: () => { // switch between light and dark mode + const willChangeMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'light' : 'dark' + if (willChangeMode === 'dark') { + activateDarkMode() + GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night) + } else { + activateLightMode() + GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day) + } + saveToLocal.set('theme', willChangeMode, 2) + handleThemeChange(willChangeMode) + }, + 'rightside-config': item => { // Show or hide rightside-hide-btn + const hideLayout = item.firstElementChild + if (hideLayout.classList.contains('show')) { + hideLayout.classList.add('status') + setTimeout(() => { + hideLayout.classList.remove('status') + }, 300) + } + + hideLayout.classList.toggle('show') + }, + 'go-up': () => { // Back to top + btf.scrollToDest(0, 500) + }, + 'hide-aside-btn': () => { // Hide aside + const $htmlDom = document.documentElement.classList + const saveStatus = $htmlDom.contains('hide-aside') ? 'show' : 'hide' + saveToLocal.set('aside-status', saveStatus, 2) + $htmlDom.toggle('hide-aside') + }, + 'mobile-toc-button': item => { // Show mobile toc + const tocEle = document.getElementById('card-toc') + tocEle.style.transition = 'transform 0.3s ease-in-out' + tocEle.classList.toggle('open') + tocEle.addEventListener('transitionend', () => { + tocEle.style.transition = '' + }, { once: true }) + }, + 'chat-btn': () => { // Show chat + window.chatBtnFn() + }, + translateLink: () => { // switch between traditional and simplified chinese + window.translateFn.translatePage() + } + } + + document.getElementById('rightside').addEventListener('click', function (e) { + const $target = e.target.closest('[id]') + if ($target && rightSideFn[$target.id]) { + rightSideFn[$target.id](this) + } + }) + + /** + * menu + * 側邊欄sub-menu 展開/收縮 + */ + const clickFnOfSubMenu = () => { + const handleClickOfSubMenu = e => { + const target = e.target.closest('.site-page.group') + if (!target) return + target.classList.toggle('hide') + } + + document.querySelector('#sidebar-menus .menus_items').addEventListener('click', handleClickOfSubMenu) + } + + /** + * 手机端目录点击 + */ + const openMobileMenu = () => { + const handleClick = () => { sidebarFn.open() } + btf.addEventListenerPjax(document.getElementById('toggle-menu'), 'click', handleClick) + } + + /** + * 複製時加上版權信息 + */ + const addCopyright = () => { + const { limitCount, languages } = GLOBAL_CONFIG.copyright + + const handleCopy = (e) => { + e.preventDefault() + const copyFont = window.getSelection(0).toString() + let textFont = copyFont + if (copyFont.length > limitCount) { + textFont = `${copyFont}\n\n\n${languages.author}\n${languages.link}${window.location.href}\n${languages.source}\n${languages.info}` + } + if (e.clipboardData) { + return e.clipboardData.setData('text', textFont) + } else { + return window.clipboardData.setData('text', textFont) + } + } + + document.body.addEventListener('copy', handleCopy) + } + + /** + * 網頁運行時間 + */ + const addRuntime = () => { + const $runtimeCount = document.getElementById('runtimeshow') + if ($runtimeCount) { + const publishDate = $runtimeCount.getAttribute('data-publishDate') + $runtimeCount.textContent = `${btf.diffDate(publishDate)} ${GLOBAL_CONFIG.runtime}` + } + } + + /** + * 最後一次更新時間 + */ + const addLastPushDate = () => { + const $lastPushDateItem = document.getElementById('last-push-date') + if ($lastPushDateItem) { + const lastPushDate = $lastPushDateItem.getAttribute('data-lastPushDate') + $lastPushDateItem.textContent = btf.diffDate(lastPushDate, true) + } + } + + /** + * table overflow + */ + const addTableWrap = () => { + const $table = document.querySelectorAll('#article-container table') + if (!$table.length) return + + $table.forEach(item => { + if (!item.closest('.highlight')) { + btf.wrap(item, 'div', { class: 'table-wrap' }) + } + }) + } + + /** + * tag-hide + */ + const clickFnOfTagHide = () => { + const hideButtons = document.querySelectorAll('#article-container .hide-button') + if (!hideButtons.length) return + const handleClick = function (e) { + const $this = this + $this.classList.add('open') + const $fjGallery = $this.nextElementSibling.querySelectorAll('.gallery-container') + $fjGallery.length && addJustifiedGallery($fjGallery) + } + + hideButtons.forEach(item => { + item.addEventListener('click', handleClick, { once: true }) + }) + } + + const tabsFn = () => { + const navTabsElement = document.querySelectorAll('#article-container .tabs') + if (!navTabsElement.length) return + + const removeAndAddActiveClass = (elements, detect) => { + Array.from(elements).forEach(element => { + element.classList.remove('active') + if (element === detect || element.id === detect) { + element.classList.add('active') + } + }) + } + + const addTabNavEventListener = (item, isJustifiedGallery) => { + const navClickHandler = function (e) { + const target = e.target.closest('button') + if (target.classList.contains('active')) return + removeAndAddActiveClass(this.children, target) + this.classList.remove('no-default') + const tabId = target.getAttribute('data-href') + const tabContent = this.nextElementSibling + removeAndAddActiveClass(tabContent.children, tabId) + if (isJustifiedGallery) { + btf.removeGlobalFnEvent('igOfTabs', this) + const justifiedGalleryItems = tabContent.querySelectorAll(`:scope > #${tabId} .gallery-container`) + justifiedGalleryItems.length && addJustifiedGallery(justifiedGalleryItems, this) + } + } + btf.addEventListenerPjax(item.firstElementChild, 'click', navClickHandler) + } + + const addTabToTopEventListener = item => { + const btnClickHandler = (e) => { + const target = e.target.closest('button') + if (!target) return + btf.scrollToDest(btf.getEleTop(item), 300) + } + btf.addEventListenerPjax(item.lastElementChild, 'click', btnClickHandler) + } + + navTabsElement.forEach(item => { + const isJustifiedGallery = !!item.querySelectorAll('.gallery-container') + addTabNavEventListener(item, isJustifiedGallery) + addTabToTopEventListener(item) + }) + } + + const toggleCardCategory = () => { + const cardCategory = document.querySelector('#aside-cat-list.expandBtn') + if (!cardCategory) return + + const handleToggleBtn = (e) => { + const target = e.target + if (target.nodeName === 'I') { + e.preventDefault() + target.parentNode.classList.toggle('expand') + } + } + btf.addEventListenerPjax(cardCategory, 'click', handleToggleBtn, true) + } + + const switchComments = () => { + const switchBtn = document.getElementById('switch-btn') + if (!switchBtn) return + let switchDone = false + const commentContainer = document.getElementById('post-comment') + const handleSwitchBtn = () => { + commentContainer.classList.toggle('move') + if (!switchDone) { + switchDone = true + loadOtherComment() + } + } + btf.addEventListenerPjax(switchBtn, 'click', handleSwitchBtn) + } + + const addPostOutdateNotice = () => { + const { limitDay, messagePrev, messageNext, position } = GLOBAL_CONFIG.noticeOutdate + const diffDay = btf.diffDate(GLOBAL_CONFIG_SITE.postUpdate) + if (diffDay >= limitDay) { + const ele = document.createElement('div') + ele.className = 'post-outdate-notice' + ele.textContent = `${messagePrev} ${diffDay} ${messageNext}` + const $targetEle = document.getElementById('article-container') + if (position === 'top') { + $targetEle.insertBefore(ele, $targetEle.firstChild) + } else { + $targetEle.appendChild(ele) + } + } + } + + const lazyloadImg = () => { + window.lazyLoadInstance = new LazyLoad({ + elements_selector: 'img', + threshold: 0, + data_src: 'lazy-src' + }) + } + + const relativeDate = function (selector) { + selector.forEach(item => { + const timeVal = item.getAttribute('datetime') + item.textContent = btf.diffDate(timeVal, true) + item.style.display = 'inline' + }) + } + + const unRefreshFn = function () { + window.addEventListener('resize', () => { + adjustMenu(false) + mobileSidebarOpen && btf.isHidden(document.getElementById('toggle-menu')) && sidebarFn.close() + }) + + document.getElementById('menu-mask').addEventListener('click', e => { sidebarFn.close() }) + + clickFnOfSubMenu() + GLOBAL_CONFIG.islazyload && lazyloadImg() + GLOBAL_CONFIG.copyright !== undefined && addCopyright() + + if (GLOBAL_CONFIG.autoDarkmode) { + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => { + if (saveToLocal.get('theme') !== undefined) return + e.matches ? handleThemeChange('dark') : handleThemeChange('light') + }) + } + } + + window.refreshFn = function () { + initAdjust() + + if (GLOBAL_CONFIG_SITE.isPost) { + GLOBAL_CONFIG.noticeOutdate !== undefined && addPostOutdateNotice() + GLOBAL_CONFIG.relativeDate.post && relativeDate(document.querySelectorAll('#post-meta time')) + } else { + GLOBAL_CONFIG.relativeDate.homepage && relativeDate(document.querySelectorAll('#recent-posts time')) + GLOBAL_CONFIG.runtime && addRuntime() + addLastPushDate() + toggleCardCategory() + } + + scrollFnToDo() + GLOBAL_CONFIG_SITE.isHome && scrollDownInIndex() + addHighlightTool() + GLOBAL_CONFIG.isPhotoFigcaption && addPhotoFigcaption() + scrollFn() + + btf.removeGlobalFnEvent('justifiedGallery') + const galleryContainer = document.querySelectorAll('#article-container .gallery-container') + galleryContainer.length && addJustifiedGallery(galleryContainer) + + runLightbox() + addTableWrap() + clickFnOfTagHide() + tabsFn() + switchComments() + openMobileMenu() + } + + refreshFn() + unRefreshFn() +}) diff --git a/js/motion.js b/js/motion.js deleted file mode 100644 index faaab32..0000000 --- a/js/motion.js +++ /dev/null @@ -1,125 +0,0 @@ -/* global NexT, CONFIG */ - -NexT.motion = {}; - -NexT.motion.integrator = { - queue: [], - init : function() { - this.queue = []; - return this; - }, - add: function(fn) { - const sequence = fn(); - if (CONFIG.motion.async) this.queue.push(sequence); - else this.queue = this.queue.concat(sequence); - return this; - }, - bootstrap: function() { - if (!CONFIG.motion.async) this.queue = [this.queue]; - this.queue.forEach(sequence => { - const timeline = window.anime.timeline({ - duration: 200, - easing : 'linear' - }); - sequence.forEach(item => { - if (item.deltaT) timeline.add(item, item.deltaT); - else timeline.add(item); - }); - }); - } -}; - -NexT.motion.middleWares = { - header: function() { - const sequence = []; - - function getMistLineSettings(targets) { - sequence.push({ - targets, - scaleX : [0, 1], - duration: 500, - deltaT : '-=200' - }); - } - - function pushToSequence(targets, sequenceQueue = false) { - sequence.push({ - targets, - opacity: 1, - top : 0, - deltaT : sequenceQueue ? '-=200' : '-=0' - }); - } - - pushToSequence('.header'); - CONFIG.scheme === 'Mist' && getMistLineSettings('.logo-line'); - CONFIG.scheme === 'Muse' && pushToSequence('.custom-logo-image'); - pushToSequence('.site-title'); - pushToSequence('.site-brand-container .toggle', true); - pushToSequence('.site-subtitle'); - (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') && pushToSequence('.custom-logo-image'); - - document.querySelectorAll('.menu-item').forEach(targets => { - sequence.push({ - targets, - complete: () => targets.classList.add('animated', 'fadeInDown'), - deltaT : '-=200' - }); - }); - - return sequence; - }, - - subMenu: function() { - const subMenuItem = document.querySelectorAll('.sub-menu .menu-item'); - if (subMenuItem.length > 0) { - subMenuItem.forEach(element => { - element.classList.add('animated'); - }); - } - return []; - }, - - postList: function() { - const sequence = []; - const { post_block, post_header, post_body, coll_header } = CONFIG.motion.transition; - - function animate(animation, selector) { - if (!animation) return; - document.querySelectorAll(selector).forEach(targets => { - sequence.push({ - targets, - complete: () => targets.classList.add('animated', animation), - deltaT : '-=100' - }); - }); - } - - animate(post_block, '.post-block, .pagination, .comments'); - animate(coll_header, '.collection-header'); - animate(post_header, '.post-header'); - animate(post_body, '.post-body'); - - return sequence; - }, - - sidebar: function() { - const sidebar = document.querySelector('.sidebar'); - const sidebarTransition = CONFIG.motion.transition.sidebar; - // Only for Pisces | Gemini. - if (sidebarTransition && (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini')) { - return [{ - targets : sidebar, - complete: () => sidebar.classList.add('animated', sidebarTransition) - }]; - } - return []; - }, - - footer: function() { - return [{ - targets: document.querySelector('.footer'), - opacity: 1 - }]; - } -}; diff --git a/js/next-boot.js b/js/next-boot.js deleted file mode 100644 index 6262daa..0000000 --- a/js/next-boot.js +++ /dev/null @@ -1,75 +0,0 @@ -/* global NexT, CONFIG */ - -NexT.boot = {}; - -NexT.boot.registerEvents = function() { - - NexT.utils.registerScrollPercent(); - NexT.utils.registerCanIUseTag(); - - // Mobile top menu bar. - document.querySelector('.site-nav-toggle .toggle').addEventListener('click', event => { - event.currentTarget.classList.toggle('toggle-close'); - const siteNav = document.querySelector('.site-nav'); - if (!siteNav) return; - siteNav.style.setProperty('--scroll-height', siteNav.scrollHeight + 'px'); - document.body.classList.toggle('site-nav-on'); - }); - - document.querySelectorAll('.sidebar-nav li').forEach((element, index) => { - element.addEventListener('click', () => { - NexT.utils.activateSidebarPanel(index); - }); - }); - - window.addEventListener('hashchange', () => { - const tHash = location.hash; - if (tHash !== '' && !tHash.match(/%\S{2}/)) { - const target = document.querySelector(`.tabs ul.nav-tabs li a[href="${tHash}"]`); - target && target.click(); - } - }); -}; - -NexT.boot.refresh = function() { - - /** - * Register JS handlers by condition option. - * Need to add config option in Front-End at 'scripts/helpers/next-config.js' file. - */ - CONFIG.prism && window.Prism.highlightAll(); - CONFIG.mediumzoom && window.mediumZoom('.post-body :not(a) > img, .post-body > img', { - background: 'var(--content-bg-color)' - }); - CONFIG.lazyload && window.lozad('.post-body img').observe(); - CONFIG.pangu && window.pangu.spacingPage(); - - CONFIG.exturl && NexT.utils.registerExtURL(); - NexT.utils.registerCopyCode(); - NexT.utils.registerTabsTag(); - NexT.utils.registerActiveMenuItem(); - NexT.utils.registerLangSelect(); - NexT.utils.registerSidebarTOC(); - NexT.utils.registerPostReward(); - NexT.utils.wrapTableWithBox(); - NexT.utils.registerVideoIframe(); -}; - -NexT.boot.motion = function() { - // Define Motion Sequence & Bootstrap Motion. - if (CONFIG.motion.enable) { - NexT.motion.integrator - .add(NexT.motion.middleWares.header) - .add(NexT.motion.middleWares.postList) - .add(NexT.motion.middleWares.sidebar) - .add(NexT.motion.middleWares.footer) - .bootstrap(); - } - NexT.utils.updateSidebarPosition(); -}; - -document.addEventListener('DOMContentLoaded', () => { - NexT.boot.registerEvents(); - NexT.boot.refresh(); - NexT.boot.motion(); -}); diff --git a/js/pjax.js b/js/pjax.js deleted file mode 100644 index da61136..0000000 --- a/js/pjax.js +++ /dev/null @@ -1,34 +0,0 @@ -/* global NexT, CONFIG, Pjax */ - -const pjax = new Pjax({ - selectors: [ - 'head title', - 'script[type="application/json"]', - '.main-inner', - '.post-toc-wrap', - '.languages', - '.pjax' - ], - analytics: false, - cacheBust: false, - scrollTo : !CONFIG.bookmark.enable -}); - -document.addEventListener('pjax:success', () => { - pjax.executeScripts(document.querySelectorAll('script[data-pjax]')); - NexT.boot.refresh(); - // Define Motion Sequence & Bootstrap Motion. - if (CONFIG.motion.enable) { - NexT.motion.integrator - .init() - .add(NexT.motion.middleWares.subMenu) - .add(NexT.motion.middleWares.postList) - .bootstrap(); - } - if (CONFIG.sidebar.display !== 'remove') { - const hasTOC = document.querySelector('.post-toc'); - document.querySelector('.sidebar-inner').classList.toggle('sidebar-nav-active', hasTOC); - NexT.utils.activateSidebarPanel(hasTOC ? 0 : 1); - NexT.utils.updateSidebarPosition(); - } -}); diff --git a/js/schedule.js b/js/schedule.js deleted file mode 100644 index 8f0c26c..0000000 --- a/js/schedule.js +++ /dev/null @@ -1,138 +0,0 @@ -/* global CONFIG */ - -// https://developers.google.com/calendar/api/v3/reference/events/list -(function() { - // Initialization - const calendar = { - orderBy : 'startTime', - showLocation: false, - offsetMax : 72, - offsetMin : 4, - showDeleted : false, - singleEvents: true, - maxResults : 250 - }; - - // Read config form theme config file - Object.assign(calendar, CONFIG.calendar); - - const now = new Date(); - const timeMax = new Date(); - const timeMin = new Date(); - - timeMax.setHours(now.getHours() + calendar.offsetMax); - timeMin.setHours(now.getHours() - calendar.offsetMin); - - // Build URL - const params = { - key : calendar.api_key, - orderBy : calendar.orderBy, - timeMax : timeMax.toISOString(), - timeMin : timeMin.toISOString(), - showDeleted : calendar.showDeleted, - singleEvents: calendar.singleEvents, - maxResults : calendar.maxResults - }; - - const request_url = new URL(`https://www.googleapis.com/calendar/v3/calendars/${calendar.calendar_id}/events`); - Object.entries(params).forEach(param => request_url.searchParams.append(...param)); - - function getRelativeTime(current, previous) { - const msPerMinute = 60 * 1000; - const msPerHour = msPerMinute * 60; - const msPerDay = msPerHour * 24; - const msPerMonth = msPerDay * 30; - const msPerYear = msPerDay * 365; - - let elapsed = current - previous; - const tense = elapsed > 0 ? ' ago' : ' later'; - - elapsed = Math.abs(elapsed); - - if (elapsed < msPerHour) { - return Math.round(elapsed / msPerMinute) + ' minutes' + tense; - } else if (elapsed < msPerDay) { - return Math.round(elapsed / msPerHour) + ' hours' + tense; - } else if (elapsed < msPerMonth) { - return 'about ' + Math.round(elapsed / msPerDay) + ' days' + tense; - } else if (elapsed < msPerYear) { - return 'about ' + Math.round(elapsed / msPerMonth) + ' months' + tense; - } - - return 'about ' + Math.round(elapsed / msPerYear) + ' years' + tense; - } - - function buildEventDOM(tense, event, start, end) { - const durationFormat = { - weekday: 'short', - hour : '2-digit', - minute : '2-digit' - }; - const relativeTime = tense === 'now' ? 'NOW' : getRelativeTime(now, start); - const duration = start.toLocaleTimeString([], durationFormat) + ' - ' + end.toLocaleTimeString([], durationFormat); - - let location = ''; - if (calendar.showLocation && event.location) { - location = `${event.location}`; - } - let description = ''; - if (event.description) { - description = `${event.description}`; - } - - const eventContent = `
-

- ${event.summary} - ${relativeTime} -

- ${location} - ${duration} - ${description} -
`; - return eventContent; - } - - function fetchData() { - const eventList = document.querySelector('.event-list'); - if (!eventList) return; - - fetch(request_url.href).then(response => { - return response.json(); - }).then(data => { - if (data.items.length === 0) { - eventList.innerHTML = '
'; - return; - } - // Clean the event list - eventList.innerHTML = ''; - let prevEnd = 0; // used to decide where to insert an
- const utc = new Date().getTimezoneOffset() * 60000; - - data.items.forEach(event => { - // Parse data - const start = new Date(event.start.dateTime || (new Date(event.start.date).getTime() + utc)); - const end = new Date(event.end.dateTime || (new Date(event.end.date).getTime() + utc)); - - let tense = 'now'; - if (end < now) { - tense = 'past'; - } else if (start > now) { - tense = 'future'; - } - - if (tense === 'future' && prevEnd < now) { - eventList.insertAdjacentHTML('beforeend', '
'); - } - - eventList.insertAdjacentHTML('beforeend', buildEventDOM(tense, event, start, end)); - prevEnd = end; - }); - }); - } - - fetchData(); - const fetchDataTimer = setInterval(fetchData, 60000); - document.addEventListener('pjax:send', () => { - clearInterval(fetchDataTimer); - }); -})(); diff --git a/js/schemes/muse.js b/js/schemes/muse.js deleted file mode 100644 index 15f9dbe..0000000 --- a/js/schemes/muse.js +++ /dev/null @@ -1,60 +0,0 @@ -/* global CONFIG */ - -document.addEventListener('DOMContentLoaded', () => { - - const isRight = CONFIG.sidebar.position === 'right'; - - const sidebarToggleMotion = { - mouse: {}, - init : function() { - window.addEventListener('mousedown', this.mousedownHandler.bind(this)); - window.addEventListener('mouseup', this.mouseupHandler.bind(this)); - document.querySelector('.sidebar-dimmer').addEventListener('click', this.clickHandler.bind(this)); - document.querySelector('.sidebar-toggle').addEventListener('click', this.clickHandler.bind(this)); - window.addEventListener('sidebar:show', this.showSidebar); - window.addEventListener('sidebar:hide', this.hideSidebar); - }, - mousedownHandler: function(event) { - this.mouse.X = event.pageX; - this.mouse.Y = event.pageY; - }, - mouseupHandler: function(event) { - const deltaX = event.pageX - this.mouse.X; - const deltaY = event.pageY - this.mouse.Y; - const clickingBlankPart = Math.hypot(deltaX, deltaY) < 20 && event.target.matches('.main'); - // Fancybox has z-index property, but medium-zoom does not, so the sidebar will overlay the zoomed image. - if (clickingBlankPart || event.target.matches('img.medium-zoom-image')) { - this.hideSidebar(); - } - }, - clickHandler: function() { - document.body.classList.contains('sidebar-active') ? this.hideSidebar() : this.showSidebar(); - }, - showSidebar: function() { - document.body.classList.add('sidebar-active'); - const animateAction = isRight ? 'fadeInRight' : 'fadeInLeft'; - document.querySelectorAll('.sidebar .animated').forEach((element, index) => { - element.style.animationDelay = (100 * index) + 'ms'; - element.classList.remove(animateAction); - setTimeout(() => { - // Trigger a DOM reflow - element.classList.add(animateAction); - }); - }); - }, - hideSidebar: function() { - document.body.classList.remove('sidebar-active'); - } - }; - if (CONFIG.sidebar.display !== 'remove') sidebarToggleMotion.init(); - - function updateFooterPosition() { - const footer = document.querySelector('.footer'); - const containerHeight = document.querySelector('.header').offsetHeight + document.querySelector('.main').offsetHeight + footer.offsetHeight; - footer.classList.toggle('footer-fixed', containerHeight <= window.innerHeight); - } - - updateFooterPosition(); - window.addEventListener('resize', updateFooterPosition); - window.addEventListener('scroll', updateFooterPosition, { passive: true }); -}); diff --git a/js/search/algolia.js b/js/search/algolia.js new file mode 100644 index 0000000..9ce7b0e --- /dev/null +++ b/js/search/algolia.js @@ -0,0 +1,177 @@ +window.addEventListener('load', () => { + const $searchMask = document.getElementById('search-mask') + const $searchDialog = document.querySelector('#algolia-search .search-dialog') + + const openSearch = () => { + const bodyStyle = document.body.style + bodyStyle.width = '100%' + bodyStyle.overflow = 'hidden' + btf.animateIn($searchMask, 'to_show 0.5s') + btf.animateIn($searchDialog, 'titleScale 0.5s') + setTimeout(() => { document.querySelector('#algolia-search .ais-SearchBox-input').focus() }, 100) + + // shortcut: ESC + document.addEventListener('keydown', function f (event) { + if (event.code === 'Escape') { + closeSearch() + document.removeEventListener('keydown', f) + } + }) + + fixSafariHeight() + window.addEventListener('resize', fixSafariHeight) + } + + const closeSearch = () => { + const bodyStyle = document.body.style + bodyStyle.width = '' + bodyStyle.overflow = '' + btf.animateOut($searchDialog, 'search_close .5s') + btf.animateOut($searchMask, 'to_hide 0.5s') + window.removeEventListener('resize', fixSafariHeight) + } + + // fix safari + const fixSafariHeight = () => { + if (window.innerWidth < 768) { + $searchDialog.style.setProperty('--search-height', window.innerHeight + 'px') + } + } + + const searchClickFn = () => { + btf.addEventListenerPjax(document.querySelector('#search-button > .search'), 'click', openSearch) + } + + const searchFnOnce = () => { + $searchMask.addEventListener('click', closeSearch) + document.querySelector('#algolia-search .search-close-button').addEventListener('click', closeSearch) + } + + const cutContent = content => { + if (content === '') return '' + + const firstOccur = content.indexOf('') + + 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) { + return console.error('Algolia setting is invalid!') + } + + const search = instantsearch({ + indexName: algolia.indexName, + /* global algoliasearch */ + searchClient: algoliasearch(algolia.appId, algolia.apiKey), + searchFunction (helper) { + helper.state.query && helper.search() + } + }) + + const configure = instantsearch.widgets.configure({ + hitsPerPage: 5 + }) + + const searchBox = instantsearch.widgets.searchBox({ + container: '#algolia-search-input', + showReset: false, + showSubmit: false, + placeholder: GLOBAL_CONFIG.algolia.languages.input_placeholder, + showLoadingIndicator: true + }) + + const hits = instantsearch.widgets.hits({ + container: '#algolia-hits', + templates: { + item (data) { + const link = data.permalink ? data.permalink : (GLOBAL_CONFIG.root + data.path) + const result = data._highlightResult + const content = result.contentStripTruncate + ? cutContent(result.contentStripTruncate.value) + : result.contentStrip + ? cutContent(result.contentStrip.value) + : result.content + ? cutContent(result.content.value) + : '' + return ` + + ${result.title.value || 'no-title'} +

${content}

+
` + }, + empty: function (data) { + return ( + '
' + + GLOBAL_CONFIG.algolia.languages.hits_empty.replace(/\$\{query}/, data.query) + + '
' + ) + } + } + }) + + const stats = instantsearch.widgets.stats({ + container: '#algolia-info > .algolia-stats', + templates: { + text: function (data) { + const stats = GLOBAL_CONFIG.algolia.languages.hits_stats + .replace(/\$\{hits}/, data.nbHits) + .replace(/\$\{time}/, data.processingTimeMS) + return ( + `
${stats}` + ) + } + } + }) + + const powerBy = instantsearch.widgets.poweredBy({ + container: '#algolia-info > .algolia-poweredBy' + }) + + const pagination = instantsearch.widgets.pagination({ + container: '#algolia-pagination', + totalPages: 5, + templates: { + first: '', + last: '', + previous: '', + next: '' + } + }) + + search.addWidgets([configure, searchBox, hits, stats, powerBy, pagination]) // add the widgets to the instantsearch instance + + search.start() + + searchClickFn() + searchFnOnce() + + window.addEventListener('pjax:complete', () => { + !btf.isHidden($searchMask) && closeSearch() + searchClickFn() + }) + + window.pjax && search.on('render', () => { + window.pjax.refresh(document.getElementById('algolia-hits')) + }) +}) diff --git a/js/search/local-search.js b/js/search/local-search.js new file mode 100644 index 0000000..0eecff6 --- /dev/null +++ b/js/search/local-search.js @@ -0,0 +1,364 @@ +/** + * Refer to hexo-generator-searchdb + * https://github.com/next-theme/hexo-generator-searchdb/blob/main/dist/search.js + * 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 += `${val.substr(position, length)}` + } + 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 += `
${this.highlightKeyword(title, slicesOfTitle[0])}` + } else { + resultItem += `' + 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, '>')) + if (searchText !== '') $loadingStatus.innerHTML = '' + 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 = `
${resultItems.map(result => result.item).join('')}
` + statsItem.innerHTML = `
${stats}
` + 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 bodyStyle = document.body.style + bodyStyle.width = '100%' + bodyStyle.overflow = 'hidden' + btf.animateIn($searchMask, 'to_show 0.5s') + btf.animateIn($searchDialog, 'titleScale 0.5s') + setTimeout(() => { input.focus() }, 300) + if (!loadFlag) { + !localSearch.isfetched && localSearch.fetchData() + input.addEventListener('input', inputEventFunction) + loadFlag = true + } + // shortcut: ESC + document.addEventListener('keydown', function f (event) { + if (event.code === 'Escape') { + closeSearch() + document.removeEventListener('keydown', f) + } + }) + + fixSafariHeight() + window.addEventListener('resize', fixSafariHeight) + } + + const closeSearch = () => { + const bodyStyle = document.body.style + bodyStyle.width = '' + bodyStyle.overflow = '' + btf.animateOut($searchDialog, 'search_close .5s') + btf.animateOut($searchMask, 'to_hide 0.5s') + window.removeEventListener('resize', fixSafariHeight) + } + + const searchClickFn = () => { + btf.addEventListenerPjax(document.querySelector('#search-button > .search'), 'click', openSearch) + } + + const searchFnOnce = () => { + document.querySelector('#local-search .search-close-button').addEventListener('click', closeSearch) + $searchMask.addEventListener('click', closeSearch) + if (GLOBAL_CONFIG.localSearch.preload) { + localSearch.fetchData() + } + localSearch.highlightSearchWords(document.getElementById('article-container')) + } + + window.addEventListener('search:loaded', () => { + const $loadDataItem = document.getElementById('loading-database') + $loadDataItem.nextElementSibling.style.display = 'block' + $loadDataItem.remove() + }) + + searchClickFn() + searchFnOnce() + + // pjax + window.addEventListener('pjax:complete', () => { + !btf.isHidden($searchMask) && closeSearch() + localSearch.highlightSearchWords(document.getElementById('article-container')) + searchClickFn() + }) +}) diff --git a/js/third-party/analytics/baidu-analytics.js b/js/third-party/analytics/baidu-analytics.js deleted file mode 100644 index c10e7d0..0000000 --- a/js/third-party/analytics/baidu-analytics.js +++ /dev/null @@ -1,7 +0,0 @@ -/* global _hmt */ - -if (!window._hmt) window._hmt = []; - -document.addEventListener('pjax:success', () => { - _hmt.push(['_trackPageview', location.pathname]); -}); diff --git a/js/third-party/analytics/google-analytics.js b/js/third-party/analytics/google-analytics.js deleted file mode 100644 index 2cd128f..0000000 --- a/js/third-party/analytics/google-analytics.js +++ /dev/null @@ -1,35 +0,0 @@ -/* global CONFIG, dataLayer, gtag */ - -if (!CONFIG.google_analytics.only_pageview) { - if (CONFIG.hostname === location.hostname) { - window.dataLayer = window.dataLayer || []; - window.gtag = function() { - dataLayer.push(arguments); - }; - gtag('js', new Date()); - gtag('config', CONFIG.google_analytics.tracking_id); - - document.addEventListener('pjax:success', () => { - gtag('event', 'page_view', { - page_location: location.href, - page_path : location.pathname, - page_title : document.title - }); - }); - } -} else { - const sendPageView = () => { - if (CONFIG.hostname !== location.hostname) return; - const uid = localStorage.getItem('uid') || (Math.random() + '.' + Math.random()); - localStorage.setItem('uid', uid); - navigator.sendBeacon('https://www.google-analytics.com/collect', new URLSearchParams({ - v : 1, - tid: CONFIG.google_analytics.tracking_id, - cid: uid, - t : 'pageview', - dp : encodeURIComponent(location.pathname) - })); - }; - document.addEventListener('pjax:complete', sendPageView); - sendPageView(); -} diff --git a/js/third-party/analytics/growingio.js b/js/third-party/analytics/growingio.js deleted file mode 100644 index 0460833..0000000 --- a/js/third-party/analytics/growingio.js +++ /dev/null @@ -1,10 +0,0 @@ -/* global CONFIG, gio */ - -if (!window.gio) { - window.gio = function() { - (window.gio.q = window.gio.q || []).push(arguments); - }; -} - -gio('init', `${CONFIG.growingio_analytics}`, {}); -gio('send'); diff --git a/js/third-party/chat/chatra.js b/js/third-party/chat/chatra.js deleted file mode 100644 index e495b8e..0000000 --- a/js/third-party/chat/chatra.js +++ /dev/null @@ -1,19 +0,0 @@ -/* global CONFIG, Chatra */ - -(function() { - if (CONFIG.chatra.embed) { - window.ChatraSetup = { - mode : 'frame', - injectTo: CONFIG.chatra.embed - }; - } - - window.ChatraID = CONFIG.chatra.id; - - const chatButton = document.querySelector('.sidebar-button button'); - if (chatButton) { - chatButton.addEventListener('click', () => { - Chatra('openChat', true); - }); - } -})(); diff --git a/js/third-party/chat/gitter.js b/js/third-party/chat/gitter.js deleted file mode 100644 index 2b26d05..0000000 --- a/js/third-party/chat/gitter.js +++ /dev/null @@ -1,5 +0,0 @@ -/* global CONFIG */ - -((window.gitter = {}).chat = {}).options = { - room: CONFIG.gitter.room -}; diff --git a/js/third-party/chat/tidio.js b/js/third-party/chat/tidio.js deleted file mode 100644 index bffb918..0000000 --- a/js/third-party/chat/tidio.js +++ /dev/null @@ -1,10 +0,0 @@ -/* global tidioChatApi */ - -(function() { - const chatButton = document.querySelector('.sidebar-button button'); - if (chatButton) { - chatButton.addEventListener('click', () => { - tidioChatApi.open(); - }); - } -})(); diff --git a/js/third-party/comments/changyan.js b/js/third-party/comments/changyan.js deleted file mode 100644 index 18a1be4..0000000 --- a/js/third-party/comments/changyan.js +++ /dev/null @@ -1,39 +0,0 @@ -/* global NexT, CONFIG */ - -document.addEventListener('page:loaded', () => { - const { appid, appkey } = CONFIG.changyan; - const mainJs = 'https://cy-cdn.kuaizhan.com/upload/changyan.js'; - const countJs = `https://cy-cdn.kuaizhan.com/upload/plugins/plugins.list.count.js?clientId=${appid}`; - - // Get the number of comments - setTimeout(() => { - return NexT.utils.getScript(countJs, { - attributes: { - async: true, - id : 'cy_cmt_num' - } - }); - }, 0); - - // When scroll to comment section - if (CONFIG.page.comments && !CONFIG.page.isHome) { - NexT.utils.loadComments('#SOHUCS') - .then(() => { - return NexT.utils.getScript(mainJs, { - attributes: { - async: true - } - }); - }) - .then(() => { - window.changyan.api.config({ - appid, - conf: appkey - }); - }) - .catch(error => { - // eslint-disable-next-line no-console - console.error('Failed to load Changyan', error); - }); - } -}); diff --git a/js/third-party/comments/disqus.js b/js/third-party/comments/disqus.js deleted file mode 100644 index 381c26f..0000000 --- a/js/third-party/comments/disqus.js +++ /dev/null @@ -1,41 +0,0 @@ -/* global NexT, CONFIG, DISQUS */ - -document.addEventListener('page:loaded', () => { - - if (CONFIG.disqus.count) { - const loadCount = () => { - NexT.utils.getScript(`https://${CONFIG.disqus.shortname}.disqus.com/count.js`, { - attributes: { id: 'dsq-count-scr' } - }); - }; - - // defer loading until the whole page loading is completed - window.addEventListener('load', loadCount, false); - } - - if (CONFIG.page.comments) { - // `disqus_config` should be a global variable - // See https://help.disqus.com/en/articles/1717084-javascript-configuration-variables - window.disqus_config = function() { - this.page.url = CONFIG.page.permalink; - this.page.identifier = CONFIG.page.path; - this.page.title = CONFIG.page.title; - if (CONFIG.disqus.i18n.disqus !== 'disqus') { - this.language = CONFIG.disqus.i18n.disqus; - } - }; - NexT.utils.loadComments('#disqus_thread').then(() => { - if (window.DISQUS) { - DISQUS.reset({ - reload: true, - config: window.disqus_config - }); - } else { - NexT.utils.getScript(`https://${CONFIG.disqus.shortname}.disqus.com/embed.js`, { - attributes: { dataset: { timestamp: '' + +new Date() } } - }); - } - }); - } - -}); diff --git a/js/third-party/comments/disqusjs.js b/js/third-party/comments/disqusjs.js deleted file mode 100644 index df5f36c..0000000 --- a/js/third-party/comments/disqusjs.js +++ /dev/null @@ -1,18 +0,0 @@ -/* global NexT, CONFIG, DisqusJS */ - -document.addEventListener('page:loaded', () => { - if (!CONFIG.page.comments) return; - - NexT.utils.loadComments('#disqus_thread') - .then(() => NexT.utils.getScript(CONFIG.disqusjs.js, { condition: window.DisqusJS })) - .then(() => { - window.dsqjs = new DisqusJS({ - api : CONFIG.disqusjs.api || 'https://disqus.com/api/', - apikey : CONFIG.disqusjs.apikey, - shortname : CONFIG.disqusjs.shortname, - url : CONFIG.page.permalink, - identifier: CONFIG.page.path, - title : CONFIG.page.title - }); - }); -}); diff --git a/js/third-party/comments/gitalk.js b/js/third-party/comments/gitalk.js deleted file mode 100644 index 08d07f4..0000000 --- a/js/third-party/comments/gitalk.js +++ /dev/null @@ -1,24 +0,0 @@ -/* global NexT, CONFIG, Gitalk */ - -document.addEventListener('page:loaded', () => { - if (!CONFIG.page.comments) return; - - NexT.utils.loadComments('.gitalk-container') - .then(() => NexT.utils.getScript(CONFIG.gitalk.js, { - condition: window.Gitalk - })) - .then(() => { - const gitalk = new Gitalk({ - clientID : CONFIG.gitalk.client_id, - clientSecret : CONFIG.gitalk.client_secret, - repo : CONFIG.gitalk.repo, - owner : CONFIG.gitalk.github_id, - admin : [CONFIG.gitalk.admin_user], - id : CONFIG.gitalk.path_md5, - proxy : CONFIG.gitalk.proxy, - language : CONFIG.gitalk.language || window.navigator.language, - distractionFreeMode: CONFIG.gitalk.distraction_free_mode - }); - gitalk.render(document.querySelector('.gitalk-container')); - }); -}); diff --git a/js/third-party/comments/isso.js b/js/third-party/comments/isso.js deleted file mode 100644 index 2c70601..0000000 --- a/js/third-party/comments/isso.js +++ /dev/null @@ -1,15 +0,0 @@ -/* global NexT, CONFIG */ - -document.addEventListener('page:loaded', () => { - if (!CONFIG.page.comments) return; - - NexT.utils.loadComments('#isso-thread') - .then(() => NexT.utils.getScript(`${CONFIG.isso}js/embed.min.js`, { - attributes: { - dataset: { - isso: `${CONFIG.isso}` - } - }, - parentNode: document.querySelector('#isso-thread') - })); -}); diff --git a/js/third-party/comments/livere.js b/js/third-party/comments/livere.js deleted file mode 100644 index c4bcd2e..0000000 --- a/js/third-party/comments/livere.js +++ /dev/null @@ -1,19 +0,0 @@ -/* global NexT, CONFIG, LivereTower */ - -document.addEventListener('page:loaded', () => { - if (!CONFIG.page.comments) return; - - NexT.utils.loadComments('#lv-container').then(() => { - window.livereOptions = { - refer: CONFIG.page.path.replace(/index\.html$/, '') - }; - - if (typeof LivereTower === 'function') return; - - NexT.utils.getScript('https://cdn-city.livere.com/js/embed.dist.js', { - attributes: { - async: true - } - }); - }); -}); diff --git a/js/third-party/comments/utterances.js b/js/third-party/comments/utterances.js deleted file mode 100644 index 332ee05..0000000 --- a/js/third-party/comments/utterances.js +++ /dev/null @@ -1,17 +0,0 @@ -/* global NexT, CONFIG */ - -document.addEventListener('page:loaded', () => { - if (!CONFIG.page.comments) return; - - NexT.utils.loadComments('.utterances-container') - .then(() => NexT.utils.getScript('https://utteranc.es/client.js', { - attributes: { - async : true, - crossOrigin : 'anonymous', - 'repo' : CONFIG.utterances.repo, - 'issue-term': CONFIG.utterances.issue_term, - 'theme' : CONFIG.utterances.theme - }, - parentNode: document.querySelector('.utterances-container') - })); -}); diff --git a/js/third-party/fancybox.js b/js/third-party/fancybox.js deleted file mode 100644 index bb436ab..0000000 --- a/js/third-party/fancybox.js +++ /dev/null @@ -1,38 +0,0 @@ -document.addEventListener('page:loaded', () => { - - /** - * Wrap images with fancybox. - */ - document.querySelectorAll('.post-body :not(a) > img, .post-body > img').forEach(element => { - const $image = $(element); - const imageLink = $image.attr('data-src') || $image.attr('src'); - const $imageWrapLink = $image.wrap(``).parent('a'); - if ($image.is('.post-gallery img')) { - $imageWrapLink.attr('data-fancybox', 'gallery').attr('rel', 'gallery'); - } else if ($image.is('.group-picture img')) { - $imageWrapLink.attr('data-fancybox', 'group').attr('rel', 'group'); - } else { - $imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default'); - } - - const imageTitle = $image.attr('title') || $image.attr('alt'); - if (imageTitle) { - // Do not append image-caption if pandoc has already created a figcaption - if (!$imageWrapLink.next('figcaption').length) { - $imageWrapLink.append(`

${imageTitle}

`); - } - // Make sure img title tag will show correctly in fancybox - $imageWrapLink.attr('title', imageTitle).attr('data-caption', imageTitle); - } - }); - - $.fancybox.defaults.hash = false; - $('.fancybox').fancybox({ - loop : true, - helpers: { - overlay: { - locked: false - } - } - }); -}); diff --git a/js/third-party/math/katex.js b/js/third-party/math/katex.js deleted file mode 100644 index ad745b1..0000000 --- a/js/third-party/math/katex.js +++ /dev/null @@ -1,7 +0,0 @@ -/* global NexT, CONFIG */ - -document.addEventListener('page:loaded', () => { - if (!CONFIG.enableMath) return; - - NexT.utils.getScript(CONFIG.katex.copy_tex_js).catch(() => {}); -}); diff --git a/js/third-party/math/mathjax.js b/js/third-party/math/mathjax.js deleted file mode 100644 index fe4d448..0000000 --- a/js/third-party/math/mathjax.js +++ /dev/null @@ -1,36 +0,0 @@ -/* global NexT, CONFIG, MathJax */ - -document.addEventListener('page:loaded', () => { - if (!CONFIG.enableMath) return; - - if (typeof MathJax === 'undefined') { - window.MathJax = { - tex: { - inlineMath: { '[+]': [['$', '$']] }, - tags : CONFIG.mathjax.tags - }, - options: { - renderActions: { - insertedScript: [200, () => { - document.querySelectorAll('mjx-container').forEach(node => { - const target = node.parentNode; - if (target.nodeName.toLowerCase() === 'li') { - target.parentNode.classList.add('has-jax'); - } - }); - }, '', false] - } - } - }; - NexT.utils.getScript(CONFIG.mathjax.js, { - attributes: { - defer: true - } - }); - } else { - MathJax.startup.document.state(0); - MathJax.typesetClear(); - MathJax.texReset(); - MathJax.typesetPromise(); - } -}); diff --git a/js/third-party/pace.js b/js/third-party/pace.js deleted file mode 100644 index c22d59f..0000000 --- a/js/third-party/pace.js +++ /dev/null @@ -1,7 +0,0 @@ -/* global Pace */ - -Pace.options.restartOnPushState = false; - -document.addEventListener('pjax:send', () => { - Pace.restart(); -}); diff --git a/js/third-party/quicklink.js b/js/third-party/quicklink.js deleted file mode 100644 index 2543ad1..0000000 --- a/js/third-party/quicklink.js +++ /dev/null @@ -1,37 +0,0 @@ -/* global CONFIG, quicklink */ - -(function() { - if (typeof CONFIG.quicklink.ignores === 'string') { - const ignoresStr = `[${CONFIG.quicklink.ignores}]`; - CONFIG.quicklink.ignores = JSON.parse(ignoresStr); - } - - let resetFn = null; - - const onRefresh = () => { - if (resetFn) resetFn(); - if (!CONFIG.quicklink.enable) return; - - let ignoresArr = CONFIG.quicklink.ignores || []; - if (!Array.isArray(ignoresArr)) { - ignoresArr = [ignoresArr]; - } - - resetFn = quicklink.listen({ - timeout : CONFIG.quicklink.timeout, - priority: CONFIG.quicklink.priority, - ignores : [ - uri => uri.includes('#'), - uri => uri === CONFIG.quicklink.url, - ...ignoresArr - ] - }); - }; - - if (CONFIG.quicklink.delay) { - window.addEventListener('load', onRefresh); - document.addEventListener('pjax:success', onRefresh); - } else { - document.addEventListener('page:loaded', onRefresh); - } -})(); diff --git a/js/third-party/rating.js b/js/third-party/rating.js deleted file mode 100644 index fc61a3a..0000000 --- a/js/third-party/rating.js +++ /dev/null @@ -1,22 +0,0 @@ -/* global CONFIG, WPac */ - -(function() { - const widgets = [{ - widget: 'Rating', - id : CONFIG.rating.id, - el : 'wpac-rating', - color : CONFIG.rating.color - }]; - - document.addEventListener('page:loaded', () => { - if (!CONFIG.page.isPost) return; - - const newWidgets = widgets.map(widget => ({ ...widget })); - - if (window.WPac) { - WPac.init(newWidgets); - } else { - window.wpac_init = newWidgets; - } - }); -})(); diff --git a/js/third-party/search/algolia-search.js b/js/third-party/search/algolia-search.js deleted file mode 100644 index 12a554c..0000000 --- a/js/third-party/search/algolia-search.js +++ /dev/null @@ -1,130 +0,0 @@ -/* global instantsearch, algoliasearch, CONFIG, pjax */ - -document.addEventListener('DOMContentLoaded', () => { - const { indexName, appID, apiKey, hits } = CONFIG.algolia; - - const search = instantsearch({ - indexName, - searchClient : algoliasearch(appID, apiKey), - searchFunction: helper => { - if (document.querySelector('.search-input').value) { - helper.search(); - } - } - }); - - if (typeof pjax === 'object') { - search.on('render', () => { - pjax.refresh(document.querySelector('.algolia-hits')); - }); - } - - // Registering Widgets - search.addWidgets([ - instantsearch.widgets.configure({ - hitsPerPage: hits.per_page || 10 - }), - - instantsearch.widgets.searchBox({ - container : '.search-input-container', - placeholder : CONFIG.i18n.placeholder, - // Hide default icons of algolia search - showReset : false, - showSubmit : false, - showLoadingIndicator: false, - cssClasses : { - input: 'search-input' - } - }), - - instantsearch.widgets.stats({ - container: '.algolia-stats', - templates: { - text: data => { - const stats = CONFIG.i18n.hits_time - .replace('${hits}', data.nbHits) - .replace('${time}', data.processingTimeMS); - return `${stats} - Algolia`; - } - }, - cssClasses: { - text: 'search-stats' - } - }), - - instantsearch.widgets.hits({ - container : '.algolia-hits', - escapeHTML: false, - templates : { - item: data => { - const { title, excerpt, excerptStrip, contentStripTruncate } = data._highlightResult; - let result = `${title.value}`; - const content = excerpt || excerptStrip || contentStripTruncate; - if (content && content.value) { - const div = document.createElement('div'); - div.innerHTML = content.value; - result += `

${div.textContent.substring(0, 100)}...

`; - } - return result; - }, - empty: data => { - return `
- ${CONFIG.i18n.empty.replace('${query}', data.query)} -
`; - } - }, - cssClasses: { - list: 'search-result-list' - } - }), - - instantsearch.widgets.pagination({ - container: '.algolia-pagination', - scrollTo : false, - showFirst: false, - showLast : false, - templates: { - first : '', - last : '', - previous: '', - next : '' - }, - cssClasses: { - list : ['pagination', 'algolia-pagination'], - item : 'pagination-item', - link : 'page-number', - selectedItem: 'current', - disabledItem: 'disabled-item' - } - }) - ]); - - search.start(); - - // Handle and trigger popup window - document.querySelectorAll('.popup-trigger').forEach(element => { - element.addEventListener('click', () => { - document.body.classList.add('search-active'); - setTimeout(() => document.querySelector('.search-input').focus(), 500); - }); - }); - - // Monitor main search box - const onPopupClose = () => { - document.body.classList.remove('search-active'); - }; - - document.querySelector('.search-pop-overlay').addEventListener('click', event => { - if (event.target === document.querySelector('.search-pop-overlay')) { - onPopupClose(); - } - }); - document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); - document.addEventListener('pjax:success', onPopupClose); - window.addEventListener('keyup', event => { - if (event.key === 'Escape') { - onPopupClose(); - } - }); -}); diff --git a/js/third-party/search/local-search.js b/js/third-party/search/local-search.js deleted file mode 100644 index 92a264d..0000000 --- a/js/third-party/search/local-search.js +++ /dev/null @@ -1,99 +0,0 @@ -/* global CONFIG, pjax, LocalSearch */ - -document.addEventListener('DOMContentLoaded', () => { - if (!CONFIG.path) { - // Search DB path - console.warn('`hexo-generator-searchdb` plugin is not installed!'); - return; - } - const localSearch = new LocalSearch({ - path : CONFIG.path, - top_n_per_article: CONFIG.localsearch.top_n_per_article, - unescape : CONFIG.localsearch.unescape - }); - - const input = document.querySelector('.search-input'); - - const inputEventFunction = () => { - if (!localSearch.isfetched) return; - const searchText = input.value.trim().toLowerCase(); - const keywords = searchText.split(/[-\s]+/); - const container = document.querySelector('.search-result-container'); - let resultItems = []; - if (searchText.length > 0) { - // Perform local searching - resultItems = localSearch.getResultItems(keywords); - } - if (keywords.length === 1 && keywords[0] === '') { - container.classList.add('no-result'); - container.innerHTML = '
'; - } else if (resultItems.length === 0) { - container.classList.add('no-result'); - container.innerHTML = '
'; - } 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 = CONFIG.i18n.hits.replace('${hits}', resultItems.length); - - container.classList.remove('no-result'); - container.innerHTML = `
${stats}
-
-
    ${resultItems.map(result => result.item).join('')}
`; - if (typeof pjax === 'object') pjax.refresh(container); - } - }; - - localSearch.highlightSearchWords(document.querySelector('.post-body')); - if (CONFIG.localsearch.preload) { - localSearch.fetchData(); - } - - if (CONFIG.localsearch.trigger === 'auto') { - input.addEventListener('input', inputEventFunction); - } else { - document.querySelector('.search-icon').addEventListener('click', inputEventFunction); - input.addEventListener('keypress', event => { - if (event.key === 'Enter') { - inputEventFunction(); - } - }); - } - window.addEventListener('search:loaded', inputEventFunction); - - // Handle and trigger popup window - document.querySelectorAll('.popup-trigger').forEach(element => { - element.addEventListener('click', () => { - document.body.classList.add('search-active'); - // Wait for search-popup animation to complete - setTimeout(() => input.focus(), 500); - if (!localSearch.isfetched) localSearch.fetchData(); - }); - }); - - // Monitor main search box - const onPopupClose = () => { - document.body.classList.remove('search-active'); - }; - - document.querySelector('.search-pop-overlay').addEventListener('click', event => { - if (event.target === document.querySelector('.search-pop-overlay')) { - onPopupClose(); - } - }); - document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); - document.addEventListener('pjax:success', () => { - localSearch.highlightSearchWords(document.querySelector('.post-body')); - onPopupClose(); - }); - window.addEventListener('keyup', event => { - if (event.key === 'Escape') { - onPopupClose(); - } - }); -}); diff --git a/js/third-party/statistics/firestore.js b/js/third-party/statistics/firestore.js deleted file mode 100644 index b06dbb1..0000000 --- a/js/third-party/statistics/firestore.js +++ /dev/null @@ -1,64 +0,0 @@ -/* global CONFIG, firebase */ - -firebase.initializeApp({ - apiKey : CONFIG.firestore.apiKey, - projectId: CONFIG.firestore.projectId -}); - -(function() { - const getCount = (doc, increaseCount) => { - // IncreaseCount will be false when not in article page - return doc.get().then(d => { - // Has no data, initialize count - let count = d.exists ? d.data().count : 0; - // If first view this article - if (increaseCount) { - // Increase count - count++; - doc.set({ - count - }); - } - return count; - }); - }; - - const appendCountTo = el => { - return count => { - el.innerText = count; - }; - }; - - const db = firebase.firestore(); - const articles = db.collection(CONFIG.firestore.collection); - - document.addEventListener('page:loaded', () => { - - if (CONFIG.page.isPost) { - // Fix issue #118 - // https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent - const title = document.querySelector('.post-title').textContent.trim(); - const doc = articles.doc(title); - let increaseCount = CONFIG.hostname === location.hostname; - if (localStorage.getItem(title)) { - increaseCount = false; - } else { - // Mark as visited - localStorage.setItem(title, true); - } - getCount(doc, increaseCount).then(appendCountTo(document.querySelector('.firestore-visitors-count'))); - } else if (CONFIG.page.isHome) { - const promises = [...document.querySelectorAll('.post-title')].map(element => { - const title = element.textContent.trim(); - const doc = articles.doc(title); - return getCount(doc); - }); - Promise.all(promises).then(counts => { - const metas = document.querySelectorAll('.firestore-visitors-count'); - counts.forEach((val, idx) => { - appendCountTo(metas[idx])(val); - }); - }); - } - }); -})(); diff --git a/js/third-party/statistics/lean-analytics.js b/js/third-party/statistics/lean-analytics.js deleted file mode 100644 index b5d4205..0000000 --- a/js/third-party/statistics/lean-analytics.js +++ /dev/null @@ -1,102 +0,0 @@ -/* global CONFIG */ -/* eslint-disable no-console */ - -(function() { - const leancloudSelector = url => { - url = encodeURI(url); - return document.getElementById(url).querySelector('.leancloud-visitors-count'); - }; - - const addCount = Counter => { - const visitors = document.querySelector('.leancloud_visitors'); - const url = decodeURI(visitors.id); - const title = visitors.dataset.flagTitle; - - Counter('get', `/classes/Counter?where=${encodeURIComponent(JSON.stringify({ url }))}`) - .then(response => response.json()) - .then(({ results }) => { - if (results.length > 0) { - const counter = results[0]; - leancloudSelector(url).innerText = counter.time + 1; - Counter('put', '/classes/Counter/' + counter.objectId, { - time: { - '__op' : 'Increment', - 'amount': 1 - } - }) - .catch(error => { - console.error('Failed to save visitor count', error); - }); - } else if (CONFIG.leancloud_visitors.security) { - leancloudSelector(url).innerText = 'Counter not initialized! More info at console err msg.'; - console.error('ATTENTION! LeanCloud counter has security bug, see how to solve it here: https://github.com/theme-next/hexo-leancloud-counter-security. \n However, you can still use LeanCloud without security, by setting `security` option to `false`.'); - } else { - Counter('post', '/classes/Counter', { title, url, time: 1 }) - .then(response => response.json()) - .then(() => { - leancloudSelector(url).innerText = 1; - }) - .catch(error => { - console.error('Failed to create', error); - }); - } - }) - .catch(error => { - console.error('LeanCloud Counter Error', error); - }); - }; - - const showTime = Counter => { - const visitors = document.querySelectorAll('.leancloud_visitors'); - const entries = [...visitors].map(element => { - return decodeURI(element.id); - }); - - Counter('get', `/classes/Counter?where=${encodeURIComponent(JSON.stringify({ url: { '$in': entries } }))}`) - .then(response => response.json()) - .then(({ results }) => { - for (const url of entries) { - const target = results.find(item => item.url === url); - leancloudSelector(url).innerText = target ? target.time : 0; - } - }) - .catch(error => { - console.error('LeanCloud Counter Error', error); - }); - }; - - const { app_id, app_key, server_url } = CONFIG.leancloud_visitors; - const fetchData = api_server => { - const Counter = (method, url, data) => { - return fetch(`${api_server}/1.1${url}`, { - method, - headers: { - 'X-LC-Id' : app_id, - 'X-LC-Key' : app_key, - 'Content-Type': 'application/json' - }, - body: JSON.stringify(data) - }); - }; - if (CONFIG.page.isPost) { - if (CONFIG.hostname !== location.hostname) return; - addCount(Counter); - } else if (document.querySelectorAll('.post-title-link').length >= 1) { - showTime(Counter); - } - }; - - const api_server = app_id.slice(-9) === '-MdYXbMMI' ? `https://${app_id.slice(0, 8).toLowerCase()}.api.lncldglobal.com` : server_url; - - document.addEventListener('page:loaded', () => { - if (api_server) { - fetchData(api_server); - } else { - fetch(`https://app-router.leancloud.cn/2/route?appId=${app_id}`) - .then(response => response.json()) - .then(({ api_server }) => { - fetchData(`https://${api_server}`); - }); - } - }); -})(); diff --git a/js/third-party/tags/mermaid.js b/js/third-party/tags/mermaid.js deleted file mode 100644 index 9623dc5..0000000 --- a/js/third-party/tags/mermaid.js +++ /dev/null @@ -1,32 +0,0 @@ -/* global NexT, CONFIG, mermaid */ - -document.addEventListener('page:loaded', () => { - const mermaidElements = document.querySelectorAll('.mermaid'); - if (mermaidElements.length) { - NexT.utils.getScript(CONFIG.mermaid.js, { - condition: window.mermaid - }).then(() => { - mermaidElements.forEach(element => { - const newElement = document.createElement('div'); - newElement.innerHTML = element.innerHTML; - newElement.className = element.className; - const parent = element.parentNode; - // Fix issue #347 - // Support mermaid inside backtick code block - if (parent.matches('pre')) { - parent.parentNode.replaceChild(newElement, parent); - } else { - parent.replaceChild(newElement, element); - } - }); - mermaid.initialize({ - theme : CONFIG.darkmode && window.matchMedia('(prefers-color-scheme: dark)').matches ? CONFIG.mermaid.theme.dark : CONFIG.mermaid.theme.light, - logLevel : 4, - flowchart: { curve: 'linear' }, - gantt : { axisFormat: '%m/%d/%Y' }, - sequence : { actorMargin: 50 } - }); - mermaid.init(); - }); - } -}); diff --git a/js/third-party/tags/pdf.js b/js/third-party/tags/pdf.js deleted file mode 100644 index 7e82891..0000000 --- a/js/third-party/tags/pdf.js +++ /dev/null @@ -1,23 +0,0 @@ -/* global NexT, CONFIG, PDFObject */ - -document.addEventListener('page:loaded', () => { - if (document.querySelectorAll('.pdf-container').length) { - NexT.utils.getScript(CONFIG.pdf.object_url, { - condition: window.PDFObject - }).then(() => { - document.querySelectorAll('.pdf-container').forEach(element => { - PDFObject.embed(element.dataset.target, element, { - pdfOpenParams: { - navpanes : 0, - toolbar : 0, - statusbar: 0, - pagemode : 'thumbs', - view : 'FitH' - }, - PDFJS_URL: CONFIG.pdf.url, - height : element.dataset.height - }); - }); - }); - } -}); diff --git a/js/tw_cn.js b/js/tw_cn.js new file mode 100644 index 0000000..15d8d15 --- /dev/null +++ b/js/tw_cn.js @@ -0,0 +1,122 @@ +document.addEventListener('DOMContentLoaded', function () { + const { defaultEncoding, translateDelay, msgToTraditionalChinese, msgToSimplifiedChinese } = GLOBAL_CONFIG.translate + const snackbarData = GLOBAL_CONFIG.Snackbar + let currentEncoding = defaultEncoding + const targetEncodingCookie = 'translate-chn-cht' + let targetEncoding = + saveToLocal.get(targetEncodingCookie) === undefined + ? defaultEncoding + : Number(saveToLocal.get('translate-chn-cht')) + let translateButtonObject + const isSnackbar = snackbarData !== undefined + + function setLang () { + document.documentElement.lang = targetEncoding === 1 ? 'zh-TW' : 'zh-CN' + } + + 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) { + let objs + if (typeof fobj === 'object') objs = fobj.childNodes + else objs = document.body.childNodes + for (let i = 0; i < objs.length; i++) { + const obj = objs.item(i) + if ( + '||BR|HR|'.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.placeholder !== '' && obj.placeholder != null) { obj.placeholder = translateText(obj.placeholder) } + 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.textContent = msgToTraditionalChinese + isSnackbar && btf.snackbarShow(snackbarData.cht_to_chs) + } else if (targetEncoding === 2) { + currentEncoding = 2 + targetEncoding = 1 + translateButtonObject.textContent = msgToSimplifiedChinese + isSnackbar && btf.snackbarShow(snackbarData.chs_to_cht) + } + saveToLocal.set(targetEncodingCookie, targetEncoding, 2) + setLang() + translateBody() + } + + function JTPYStr () { + return '万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾龙历志制一台皋准复猛钟注范签' + } + function FTPYStr () { + return '萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽龍歷誌製壹臺臯準復勐鐘註範籤' + } + function Traditionalized (cc) { + let str = '' + const ss = JTPYStr() + const tt = FTPYStr() + for (let 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) { + let str = '' + const ss = JTPYStr() + const tt = FTPYStr() + for (let 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 translateInitialization () { + translateButtonObject = document.getElementById('translateLink') + if (translateButtonObject) { + if (currentEncoding !== targetEncoding) { + translateButtonObject.textContent = + targetEncoding === 1 + ? msgToSimplifiedChinese + : msgToTraditionalChinese + setLang() + setTimeout(translateBody, translateDelay) + } + } + } + + window.translateFn = { + translatePage, + Traditionalized, + Simplized + } + + translateInitialization() + document.addEventListener('pjax:complete', translateInitialization) +}) diff --git a/js/utils.js b/js/utils.js index 0a0665b..2c8242c 100644 --- a/js/utils.js +++ b/js/utils.js @@ -1,399 +1,296 @@ -/* global NexT, CONFIG */ - -HTMLElement.prototype.wrap = function(wrapper) { - this.parentNode.insertBefore(wrapper, this); - this.parentNode.removeChild(this); - wrapper.appendChild(this); -}; - -(function() { - const onPageLoaded = () => document.dispatchEvent( - new Event('page:loaded', { - bubbles: true - }) - ); - - if (document.readyState === 'loading') { - document.addEventListener('readystatechange', onPageLoaded, { once: true }); - } else { - onPageLoaded(); - } - document.addEventListener('pjax:success', onPageLoaded); -})(); - -NexT.utils = { - - registerExtURL: function() { - document.querySelectorAll('span.exturl').forEach(element => { - const link = document.createElement('a'); - // https://stackoverflow.com/questions/30106476/using-javascripts-atob-to-decode-base64-doesnt-properly-decode-utf-8-strings - link.href = decodeURIComponent(atob(element.dataset.url).split('').map(c => { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }).join('')); - link.rel = 'noopener external nofollow noreferrer'; - link.target = '_blank'; - link.className = element.className; - link.title = element.title; - link.innerHTML = element.innerHTML; - element.parentNode.replaceChild(link, element); - }); +const btf = { + debounce: (func, wait = 0, immediate = false) => { + let timeout + return (...args) => { + const later = () => { + timeout = null + if (!immediate) func(...args) + } + const callNow = immediate && !timeout + clearTimeout(timeout) + timeout = setTimeout(later, wait) + if (callNow) func(...args) + } }, - /** - * One-click copy code support. - */ - registerCopyCode: function() { - let figure = document.querySelectorAll('figure.highlight'); - if (figure.length === 0) figure = document.querySelectorAll('pre:not(.mermaid)'); - figure.forEach(element => { - element.querySelectorAll('.code .line span').forEach(span => { - span.classList.forEach(name => { - span.classList.replace(name, `hljs-${name}`); - }); - }); - if (!CONFIG.copycode) return; - element.insertAdjacentHTML('beforeend', '
'); - const button = element.querySelector('.copy-btn'); - button.addEventListener('click', () => { - const lines = element.querySelector('.code') || element.querySelector('code'); - const code = lines.innerText; - if (navigator.clipboard) { - // https://caniuse.com/mdn-api_clipboard_writetext - navigator.clipboard.writeText(code).then(() => { - button.querySelector('i').className = 'fa fa-check-circle fa-fw'; - }, () => { - button.querySelector('i').className = 'fa fa-times-circle fa-fw'; - }); - } else { - const ta = document.createElement('textarea'); - ta.style.top = window.scrollY + 'px'; // Prevent page scrolling - ta.style.position = 'absolute'; - ta.style.opacity = '0'; - ta.readOnly = true; - ta.value = code; - document.body.append(ta); - ta.select(); - ta.setSelectionRange(0, code.length); - ta.readOnly = false; - const result = document.execCommand('copy'); - button.querySelector('i').className = result ? 'fa fa-check-circle fa-fw' : 'fa fa-times-circle fa-fw'; - ta.blur(); // For iOS - button.blur(); - document.body.removeChild(ta); + throttle: function (func, wait, options = {}) { + let timeout, context, args + let previous = 0 + + const later = () => { + previous = options.leading === false ? 0 : new Date().getTime() + timeout = null + func.apply(context, args) + if (!timeout) context = args = null + } + + const throttled = (...params) => { + const now = new Date().getTime() + if (!previous && options.leading === false) previous = now + const remaining = wait - (now - previous) + context = this + args = params + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout) + timeout = null } - }); - element.addEventListener('mouseleave', () => { - setTimeout(() => { - button.querySelector('i').className = 'fa fa-copy fa-fw'; - }, 300); - }); - }); + previous = now + func.apply(context, args) + if (!timeout) context = args = null + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining) + } + } + + return throttled }, - wrapTableWithBox: function() { - document.querySelectorAll('table').forEach(element => { - const box = document.createElement('div'); - box.className = 'table-container'; - element.wrap(box); - }); + sidebarPaddingR: () => { + const innerWidth = window.innerWidth + const clientWidth = document.body.clientWidth + const paddingRight = innerWidth - clientWidth + if (innerWidth !== clientWidth) { + document.body.style.paddingRight = paddingRight + 'px' + } }, - registerVideoIframe: function() { - document.querySelectorAll('iframe').forEach(element => { - const supported = [ - 'www.youtube.com', - 'player.vimeo.com', - 'player.youku.com', - 'player.bilibili.com', - 'www.tudou.com' - ].some(host => element.src.includes(host)); - if (supported && !element.parentNode.matches('.video-container')) { - const box = document.createElement('div'); - box.className = 'video-container'; - element.wrap(box); - const width = Number(element.width); - const height = Number(element.height); - if (width && height) { - box.style.paddingTop = (height / width * 100) + '%'; - } - } - }); + snackbarShow: (text, showAction = false, duration = 2000) => { + const { position, bgLight, bgDark } = GLOBAL_CONFIG.Snackbar + const bg = document.documentElement.getAttribute('data-theme') === 'light' ? bgLight : bgDark + Snackbar.show({ + text, + backgroundColor: bg, + showAction, + duration, + pos: position, + customClass: 'snackbar-css' + }) }, - registerScrollPercent: function() { - const backToTop = document.querySelector('.back-to-top'); - const readingProgressBar = document.querySelector('.reading-progress-bar'); - // For init back to top in sidebar if page was scrolled after page refresh. - window.addEventListener('scroll', () => { - if (backToTop || readingProgressBar) { - const contentHeight = document.body.scrollHeight - window.innerHeight; - const scrollPercent = contentHeight > 0 ? Math.min(100 * window.scrollY / contentHeight, 100) : 0; - if (backToTop) { - backToTop.classList.toggle('back-to-top-on', Math.round(scrollPercent) >= 5); - backToTop.querySelector('span').innerText = Math.round(scrollPercent) + '%'; - } - if (readingProgressBar) { - readingProgressBar.style.setProperty('--progress', scrollPercent.toFixed(2) + '%'); + diffDate: (d, more = false) => { + const dateNow = new Date() + const datePost = new Date(d) + const dateDiff = dateNow.getTime() - datePost.getTime() + const minute = 1000 * 60 + const hour = minute * 60 + const day = hour * 24 + const month = day * 30 + const { dateSuffix } = GLOBAL_CONFIG + + if (!more) return parseInt(dateDiff / day) + + const monthCount = dateDiff / month + const dayCount = dateDiff / day + const hourCount = dateDiff / hour + const minuteCount = dateDiff / minute + + if (monthCount > 12) return datePost.toISOString().slice(0, 10) + if (monthCount >= 1) return `${parseInt(monthCount)} ${dateSuffix.month}` + if (dayCount >= 1) return `${parseInt(dayCount)} ${dateSuffix.day}` + if (hourCount >= 1) return `${parseInt(hourCount)} ${dateSuffix.hour}` + if (minuteCount >= 1) return `${parseInt(minuteCount)} ${dateSuffix.min}` + return dateSuffix.just + }, + + loadComment: (dom, callback) => { + if ('IntersectionObserver' in window) { + const observerItem = new IntersectionObserver((entries) => { + if (entries[0].isIntersecting) { + callback() + observerItem.disconnect() } + }, { threshold: [0] }) + observerItem.observe(dom) + } else { + callback() + } + }, + + scrollToDest: (pos, time = 500) => { + const currentPos = window.pageYOffset + const isNavFixed = document.getElementById('page-header').classList.contains('fixed') + if (currentPos > pos || isNavFixed) pos = pos - 70 + + if ('scrollBehavior' in document.documentElement.style) { + window.scrollTo({ + top: pos, + behavior: 'smooth' + }) + return + } + + let start = null + pos = +pos + window.requestAnimationFrame(function step (currentTime) { + start = !start ? currentTime : start + const progress = currentTime - start + if (currentPos < pos) { + window.scrollTo(0, ((pos - currentPos) * progress / time) + currentPos) + } else { + window.scrollTo(0, currentPos - ((currentPos - pos) * progress / time)) } - if (!Array.isArray(NexT.utils.sections)) return; - let index = NexT.utils.sections.findIndex(element => { - return element && element.getBoundingClientRect().top > 10; - }); - if (index === -1) { - index = NexT.utils.sections.length - 1; - } else if (index > 0) { - index--; + if (progress < time) { + window.requestAnimationFrame(step) + } else { + window.scrollTo(0, pos) } - this.activateNavByIndex(index); - }, { passive: true }); - - backToTop && backToTop.addEventListener('click', () => { - window.anime({ - targets : document.scrollingElement, - duration : 500, - easing : 'linear', - scrollTop: 0 - }); - }); + }) }, - /** - * Tabs tag listener (without twitter bootstrap). - */ - registerTabsTag: function() { - // Binding `nav-tabs` & `tab-content` by real time permalink changing. - document.querySelectorAll('.tabs ul.nav-tabs .tab').forEach(element => { - element.addEventListener('click', event => { - event.preventDefault(); - // Prevent selected tab to select again. - if (element.classList.contains('active')) return; - const nav = element.parentNode; - // Add & Remove active class on `nav-tabs` & `tab-content`. - [...nav.children].forEach(target => { - target.classList.toggle('active', target === element); - }); - // https://stackoverflow.com/questions/20306204/using-queryselector-with-ids-that-are-numbers - const tActive = document.getElementById(element.querySelector('a').getAttribute('href').replace('#', '')); - [...tActive.parentNode.children].forEach(target => { - target.classList.toggle('active', target === tActive); - }); - // Trigger event - tActive.dispatchEvent(new Event('tabs:click', { - bubbles: true - })); - if (!CONFIG.stickytabs) return; - const offset = nav.parentNode.getBoundingClientRect().top + window.scrollY + 10; - window.anime({ - targets : document.scrollingElement, - duration : 500, - easing : 'linear', - scrollTop: offset - }); - }); - }); - - window.dispatchEvent(new Event('tabs:register')); + animateIn: (ele, text) => { + ele.style.display = 'block' + ele.style.animation = text }, - registerCanIUseTag: function() { - // Get responsive height passed from iframe. - window.addEventListener('message', ({ data }) => { - if (typeof data === 'string' && data.includes('ciu_embed')) { - const featureID = data.split(':')[1]; - const height = data.split(':')[2]; - document.querySelector(`iframe[data-feature=${featureID}]`).style.height = parseInt(height, 10) + 5 + 'px'; - } - }, false); + animateOut: (ele, text) => { + ele.addEventListener('animationend', function f () { + ele.style.display = '' + ele.style.animation = '' + ele.removeEventListener('animationend', f) + }) + ele.style.animation = text }, - registerActiveMenuItem: function() { - document.querySelectorAll('.menu-item a[href]').forEach(target => { - const isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', ''); - const isSubPath = !CONFIG.root.startsWith(target.pathname) && location.pathname.startsWith(target.pathname); - target.classList.toggle('menu-item-active', target.hostname === location.hostname && (isSamePath || isSubPath)); - }); + wrap: (selector, eleType, options) => { + const createEle = document.createElement(eleType) + for (const [key, value] of Object.entries(options)) { + createEle.setAttribute(key, value) + } + selector.parentNode.insertBefore(createEle, selector) + createEle.appendChild(selector) }, - registerLangSelect: function() { - const selects = document.querySelectorAll('.lang-select'); - selects.forEach(sel => { - sel.value = CONFIG.page.lang; - sel.addEventListener('change', () => { - const target = sel.options[sel.selectedIndex]; - document.querySelectorAll('.lang-select-label span').forEach(span => { - span.innerText = target.text; - }); - // Disable Pjax to force refresh translation of menu item - window.location.href = target.dataset.href; - }); - }); + isHidden: ele => ele.offsetHeight === 0 && ele.offsetWidth === 0, + + getEleTop: ele => { + let actualTop = ele.offsetTop + let current = ele.offsetParent + + while (current !== null) { + actualTop += current.offsetTop + current = current.offsetParent + } + + return actualTop }, - registerSidebarTOC: function() { - this.sections = [...document.querySelectorAll('.post-toc li a.nav-link')].map(element => { - const target = document.getElementById(decodeURI(element.getAttribute('href')).replace('#', '')); - // TOC item animation navigate. - element.addEventListener('click', event => { - event.preventDefault(); - const offset = target.getBoundingClientRect().top + window.scrollY; - window.anime({ - targets : document.scrollingElement, - duration : 500, - easing : 'linear', - scrollTop: offset, - complete : () => { - history.pushState(null, document.title, element.href); + loadLightbox: ele => { + const service = GLOBAL_CONFIG.lightbox + + if (service === 'mediumZoom') { + mediumZoom(ele, { background: 'var(--zoom-bg)' }) + } + + if (service === 'fancybox') { + Array.from(ele).forEach(i => { + if (i.parentNode.tagName !== 'A') { + const dataSrc = i.dataset.lazySrc || i.src + const dataCaption = i.title || i.alt || '' + btf.wrap(i, 'a', { href: dataSrc, 'data-fancybox': 'gallery', 'data-caption': dataCaption, 'data-thumb': dataSrc }) + } + }) + + if (!window.fancyboxRun) { + Fancybox.bind('[data-fancybox]', { + Hash: false, + Thumbs: { + showOnStart: false + }, + Images: { + Panzoom: { + maxScale: 4 + } + }, + Carousel: { + transition: 'slide' + }, + Toolbar: { + display: { + left: ['infobar'], + middle: [ + 'zoomIn', + 'zoomOut', + 'toggle1to1', + 'rotateCCW', + 'rotateCW', + 'flipX', + 'flipY' + ], + right: ['slideshow', 'thumbs', 'close'] + } } - }); - }); - return target; - }); + }) + window.fancyboxRun = true + } + } }, - registerPostReward: function() { - const button = document.querySelector('.reward-container button'); - if (!button) return; - button.addEventListener('click', () => { - document.querySelector('.post-reward').classList.toggle('active'); - }); + setLoading: { + add: ele => { + const html = ` +
+
+
+
+
+ ` + ele.insertAdjacentHTML('afterend', html) + }, + remove: ele => { + ele.nextElementSibling.remove() + } }, - activateNavByIndex: function(index) { - const target = document.querySelectorAll('.post-toc li a.nav-link')[index]; - if (!target || target.classList.contains('active-current')) return; - - document.querySelectorAll('.post-toc .active').forEach(element => { - element.classList.remove('active', 'active-current'); - }); - target.classList.add('active', 'active-current'); - let parent = target.parentNode; - while (!parent.matches('.post-toc')) { - if (parent.matches('li')) parent.classList.add('active'); - parent = parent.parentNode; + updateAnchor: (anchor) => { + if (anchor !== window.location.hash) { + if (!anchor) anchor = location.pathname + const title = GLOBAL_CONFIG_SITE.title + window.history.replaceState({ + url: location.href, + title + }, title, anchor) } - // Scrolling to center active TOC element if TOC content is taller then viewport. - const tocElement = document.querySelector('.sidebar-panel-container'); - if (!tocElement.parentNode.classList.contains('sidebar-toc-active')) return; - window.anime({ - targets : tocElement, - duration : 200, - easing : 'linear', - scrollTop: tocElement.scrollTop - (tocElement.offsetHeight / 2) + target.getBoundingClientRect().top - tocElement.getBoundingClientRect().top - }); }, - updateSidebarPosition: function() { - if (window.innerWidth < 992 || CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') return; - // Expand sidebar on post detail page by default, when post has a toc. - const hasTOC = document.querySelector('.post-toc'); - let display = CONFIG.page.sidebar; - if (typeof display !== 'boolean') { - // There's no definition sidebar in the page front-matter. - display = CONFIG.sidebar.display === 'always' || (CONFIG.sidebar.display === 'post' && hasTOC); - } - if (display) { - window.dispatchEvent(new Event('sidebar:show')); - } + getScrollPercent: (currentTop, ele) => { + const docHeight = ele.clientHeight + const winHeight = document.documentElement.clientHeight + const headerHeight = ele.offsetTop + const contentMath = (docHeight > winHeight) ? (docHeight - winHeight) : (document.documentElement.scrollHeight - winHeight) + const scrollPercent = (currentTop - headerHeight) / (contentMath) + const scrollPercentRounded = Math.round(scrollPercent * 100) + const percentage = (scrollPercentRounded > 100) ? 100 : (scrollPercentRounded <= 0) ? 0 : scrollPercentRounded + return percentage }, - activateSidebarPanel: function(index) { - const duration = 200; - const sidebar = document.querySelector('.sidebar-inner'); - const panel = document.querySelector('.sidebar-panel-container'); - const activeClassName = ['sidebar-toc-active', 'sidebar-overview-active']; + addGlobalFn: (key, fn, name = false, parent = window) => { + const globalFn = parent.globalFn || {} + const keyObj = globalFn[key] || {} - if (sidebar.classList.contains(activeClassName[index])) return; + if (name && keyObj[name]) return - window.anime({ - duration, - targets : panel, - easing : 'linear', - opacity : 0, - translateY: [0, -20], - complete : () => { - // Prevent adding TOC to Overview if Overview was selected when close & open sidebar. - sidebar.classList.replace(activeClassName[1 - index], activeClassName[index]); - window.anime({ - duration, - targets : panel, - easing : 'linear', - opacity : [0, 1], - translateY: [-20, 0] - }); - } - }); + name = name || Object.keys(keyObj).length + keyObj[name] = fn + globalFn[key] = keyObj + parent.globalFn = globalFn }, - getScript: function(src, options = {}, legacyCondition) { - if (typeof options === 'function') { - return this.getScript(src, { - condition: legacyCondition - }).then(options); - } - const { - condition = false, - attributes: { - id = '', - async = false, - defer = false, - crossOrigin = '', - dataset = {}, - ...otherAttributes - } = {}, - parentNode = null - } = options; - return new Promise((resolve, reject) => { - if (condition) { - resolve(); - } else { - const script = document.createElement('script'); - - if (id) script.id = id; - if (crossOrigin) script.crossOrigin = crossOrigin; - script.async = async; - script.defer = defer; - Object.assign(script.dataset, dataset); - Object.entries(otherAttributes).forEach(([name, value]) => { - script.setAttribute(name, String(value)); - }); - - script.onload = resolve; - script.onerror = reject; - - if (typeof src === 'object') { - const { url, integrity } = src; - script.src = url; - if (integrity) { - script.integrity = integrity; - script.crossOrigin = 'anonymous'; - } - } else { - script.src = src; - } - (parentNode || document.head).appendChild(script); - } - }); + addEventListenerPjax: (ele, event, fn, option = false) => { + ele.addEventListener(event, fn, option) + btf.addGlobalFn('pjax', () => { + ele.removeEventListener(event, fn, option) + }) }, - loadComments: function(selector, legacyCallback) { - if (legacyCallback) { - return this.loadComments(selector).then(legacyCallback); - } - return new Promise(resolve => { - const element = document.querySelector(selector); - if (!CONFIG.comments.lazyload || !element) { - resolve(); - return; - } - const intersectionObserver = new IntersectionObserver((entries, observer) => { - const entry = entries[0]; - if (!entry.isIntersecting) return; - - resolve(); - observer.disconnect(); - }); - intersectionObserver.observe(element); - }); + removeGlobalFnEvent: (key, parent = window) => { + const { globalFn = {} } = parent + const keyObj = globalFn[key] || {} + const keyArr = Object.keys(keyObj) + if (!keyArr.length) return + keyArr.forEach(i => { + keyObj[i]() + }) + delete parent.globalFn[key] } -}; +} diff --git a/tags/index.html b/tags/index.html index ed803d2..6c810ef 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1,273 +1,20 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -tags | DeepShark的博客 - - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
- -

tags -

- - - -
- - - -
-
- 目前共计 4 个标签 -
- -
- -
- - - -
- - - - - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + #page + if top_img === false + h1.page-title= page.title + + case page.type + when 'tags' + include includes/page/tags.pug + when 'link' + include includes/page/flink.pug + when 'categories' + include includes/page/categories.pug + default + include includes/page/default-page.pug + + if page.comments !== false && theme.comments && theme.comments.use + - var commentsJsLoad = true + !=partial('includes/third-party/comments/index', {}, {cache: true}) \ No newline at end of file diff --git "a/tags/\345\255\246\344\271\240\346\226\271\346\263\225/index.html" "b/tags/\345\255\246\344\271\240\346\226\271\346\263\225/index.html" index 86e426f..9f99658 100644 --- "a/tags/\345\255\246\344\271\240\346\226\271\346\263\225/index.html" +++ "b/tags/\345\255\246\344\271\240\346\226\271\346\263\225/index.html" @@ -1,278 +1,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -标签: 学习方法 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
-

学习方法 - 标签 -

-
- - -
- 2022 -
- - - -
-
- - - - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + if theme.tag_ui == 'index' + include ./includes/mixins/post-ui.pug + #recent-posts.recent-posts + +postUI + include includes/pagination.pug + else + include ./includes/mixins/article-sort.pug + #tag + .article-sort-title= _p('page.tag') + ' - ' + page.tag + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git "a/tags/\346\200\273\347\273\223/index.html" "b/tags/\346\200\273\347\273\223/index.html" index c514154..9f99658 100644 --- "a/tags/\346\200\273\347\273\223/index.html" +++ "b/tags/\346\200\273\347\273\223/index.html" @@ -1,278 +1,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -标签: 总结 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
-

总结 - 标签 -

-
- - -
- 2022 -
- - - -
-
- - - - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + if theme.tag_ui == 'index' + include ./includes/mixins/post-ui.pug + #recent-posts.recent-posts + +postUI + include includes/pagination.pug + else + include ./includes/mixins/article-sort.pug + #tag + .article-sort-title= _p('page.tag') + ' - ' + page.tag + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git "a/tags/\347\254\224\350\256\260/index.html" "b/tags/\347\254\224\350\256\260/index.html" index 5331757..9f99658 100644 --- "a/tags/\347\254\224\350\256\260/index.html" +++ "b/tags/\347\254\224\350\256\260/index.html" @@ -1,278 +1,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -标签: 笔记 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
-

笔记 - 标签 -

-
- - -
- 2022 -
- - - -
-
- - - - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + if theme.tag_ui == 'index' + include ./includes/mixins/post-ui.pug + #recent-posts.recent-posts + +postUI + include includes/pagination.pug + else + include ./includes/mixins/article-sort.pug + #tag + .article-sort-title= _p('page.tag') + ' - ' + page.tag + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file diff --git "a/tags/\350\257\273\345\220\216\346\204\237/index.html" "b/tags/\350\257\273\345\220\216\346\204\237/index.html" index ca57d5f..9f99658 100644 --- "a/tags/\350\257\273\345\220\216\346\204\237/index.html" +++ "b/tags/\350\257\273\345\220\216\346\204\237/index.html" @@ -1,278 +1,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -标签: 读后感 | DeepShark的博客 - - - - - - - - - - -
- -
-
-
- - -
- - - -

DeepShark的博客

- -
-

deepshark的博客

-
- - -
- - - - - - - - -
- - - - - - - - -
- - -
- - 0% -
- - - - -
- - - - - -
-
-
-

读后感 - 标签 -

-
- - -
- 2022 -
- - - -
-
- - - - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - - +extends includes/layout.pug + +block content + if theme.tag_ui == 'index' + include ./includes/mixins/post-ui.pug + #recent-posts.recent-posts + +postUI + include includes/pagination.pug + else + include ./includes/mixins/article-sort.pug + #tag + .article-sort-title= _p('page.tag') + ' - ' + page.tag + +articleSort(page.posts) + include includes/pagination.pug \ No newline at end of file