hexo-theme-shokax 0.0.3 → 0.0.4-alpha2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +4 -0
- package/README.md +30 -4
- package/layout/_mixin/breadcrumb.pug +3 -3
- package/layout/_mixin/card.pug +5 -4
- package/layout/_mixin/comment.pug +2 -1
- package/layout/_mixin/postmeta.pug +3 -3
- package/layout/_mixin/segment.pug +2 -2
- package/layout/_mixin/sidebar.pug +4 -4
- package/layout/_mixin/widgets.pug +1 -1
- package/layout/_partials/footer.pug +3 -3
- package/layout/_partials/head/head.pug +1 -0
- package/layout/_partials/header.pug +2 -2
- package/layout/_partials/layout.pug +1 -1
- package/layout/_partials/pagination.pug +1 -1
- package/layout/_partials/post/copyright.pug +2 -2
- package/layout/_partials/post/footer.pug +2 -2
- package/layout/_partials/post/nav.pug +1 -1
- package/layout/_partials/post/post.pug +1 -1
- package/layout/_partials/post/reward.pug +1 -1
- package/layout/_partials/sidebar/menu.pug +2 -2
- package/layout/_partials/sidebar/overview.pug +1 -1
- package/layout/archive.pug +1 -1
- package/layout/category.pug +1 -1
- package/layout/page.pug +1 -1
- package/layout/post.pug +1 -1
- package/layout/tag.pug +1 -1
- package/package.json +1 -1
- package/source/css/_common/components/post/post.styl +5 -0
- package/source/css/_common/components/third-party/valine.styl +4 -0
- package/source/css/_common/scaffolding/base.styl +25 -0
- package/source/js/_app/global.js +6 -11
- package/source/js/_app/library.js +22 -10
- package/source/js/_app/page.js +18 -16
- package/source/js/_app/vue.js +1 -1
    
        package/CONTRIBUTING.md
    CHANGED
    
    | @@ -25,6 +25,10 @@ | |
| 25 25 | 
             
            2. 您愿意接受长时间的等待(一般不超过15天)
         | 
| 26 26 | 
             
            3. 您能够接受因代码质量等问题而提出的疑问,并愿意讨论是否接受更改
         | 
| 27 27 |  | 
| 28 | 
            +
            有关issues的说明:
         | 
| 29 | 
            +
            1. 如果您愿意开发某 issues 的提议功能或修复 bug,建议在对应 issue 下评论说明一下,避免闭门造车和重复造轮子的惨剧
         | 
| 30 | 
            +
            2. 您应该在对应 PR 提交时绑定对应 issue,以便进行统计
         | 
| 31 | 
            +
             | 
| 28 32 | 
             
            ## Github PR
         | 
| 29 33 | 
             
            此处为在使用 Github PR 提交时应注意的事:
         | 
| 30 34 | 
             
            - 默认你对 Git、GitHub 已经有了一定的了解,并且懂得使用 PR(此方面问题可以去讨论区发起 Q&A)
         | 
    
        package/README.md
    CHANGED
    
    | @@ -9,16 +9,33 @@ | |
| 9 9 | 
             
            诞生原因是目前shoka已经两年没有更新了,积压了大量BUG和功能请求。\
         | 
| 10 10 | 
             
            本项目处于高强度开发期,但github仓库版本已基本可用 \
         | 
| 11 11 | 
             
            二次开发与常见问题请看wiki \
         | 
| 12 | 
            -
            `0.0.2-alpha2`开始,`lantern`和`qweather`已迁移为插件 | 
| 13 | 
            -
            插件系统已完工,食用方法见[awesome-shokaX](https://github.com/zkz098/awesome-shokaX)
         | 
| 12 | 
            +
            `0.0.2-alpha2`开始,`lantern`和`qweather`已迁移为插件
         | 
| 14 13 |  | 
| 15 | 
            -
             | 
| 14 | 
            +
            shokaX的社区资源导航和插件仓库为[awesome-shokaX](https://github.com/zkz098/awesome-shokaX)
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ## 💬 和shoka的区别
         | 
| 16 17 | 
             
            原先shoka使用了javascript+Native+nunjucks的技术 \
         | 
| 17 18 | 
             
            而shokaX则使用了typescript+Vue 3+Pug的技术搭配 \
         | 
| 18 19 | 
             
            图标库可能会更换为Font Awesome 6 \
         | 
| 19 20 | 
             
            更改了大量难以访问的CDN链接
         | 
| 20 21 |  | 
| 21 | 
            -
            ##  | 
| 22 | 
            +
            ## ✨ 功能清单 
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            |   功能名称   | 实现状态 |     功能名称     | 实现状态 |
         | 
| 25 | 
            +
            |:--------:|:----:|:------------:|:----:|
         | 
| 26 | 
            +
            |  PWA支持   |  ✅   |    JSD拆分     |  ✅   |
         | 
| 27 | 
            +
            |  注入API   |  ✅   |    社区插件系统    |  ✅   |
         | 
| 28 | 
            +
            |  自定义字体   |  ✅*  |    自定义样式     |  ✅*  |
         | 
| 29 | 
            +
            | 多种评论系统支持 |  ✅   |   用户行为分析支持   |  ✅   |
         | 
| 30 | 
            +
            |  底部备案号   |  ✅   |    自定义页尾     |  ✅*  |
         | 
| 31 | 
            +
            | CSS渐变封面  |  ✅   | typescript支持 |  ✅^  |
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            备注:
         | 
| 34 | 
            +
            - *: 需要使用注入API实现
         | 
| 35 | 
            +
            - ^: 仅page js部分,hexo script未实现
         | 
| 36 | 
            +
             | 
| 37 | 
            +
             | 
| 38 | 
            +
            ## 🔧 如何安装?
         | 
| 22 39 | 
             
            建议使用[ShokaX-CLI](https://github.com/zkz098/shokaX-CLI) ,执行下列命令即可:
         | 
| 23 40 | 
             
            ```bash
         | 
| 24 41 | 
             
            npm i shokax-cli --location=global
         | 
| @@ -27,6 +44,15 @@ SXC install shokaX | |
| 27 44 | 
             
            ```
         | 
| 28 45 | 
             
            后续配置请点[这里](https://www.kaitaku.xyz/webbuild/shokaX/) 查看
         | 
| 29 46 |  | 
| 47 | 
            +
            releases及npm的版本号区别如下:
         | 
| 48 | 
            +
            - x.x.x-alpha版本是早期测试版,部分未经测试环境测试,不能保证正常运行
         | 
| 49 | 
            +
            - x.x.x-beta(目前还没有)是测试版,可以保证正常生成,但可能存在bug
         | 
| 50 | 
            +
            - x.x.x是相对稳定的版本,基本上不存在严重BUG
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            github仓库建议通过右边的 releases 下载,步骤为:
         | 
| 53 | 
            +
            - 点击 Releases 的 Latest 版本
         | 
| 54 | 
            +
            - 下载 Assets 中的 `Source code(zip)`
         | 
| 55 | 
            +
            - 解压即可作为主题使用
         | 
| 30 56 | 
             
            # 许可证
         | 
| 31 57 | 
             
            许可证: BSD-3-Clause \
         | 
| 32 58 | 
             
            [](https://app.fossa.com/projects/git%2Bgithub.com%2Fzkz098%2Fhexo-theme-shokaX?ref=badge_large)
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            mixin BCRender(post, home)
         | 
| 2 2 | 
             
                if home
         | 
| 3 3 | 
             
                    != '<div class="breadcrumb" itemListElement itemscope itemtype="https://schema.org/BreadcrumbList">'
         | 
| 4 | 
            -
                    i(class=" | 
| 4 | 
            +
                    i(class="fa fa-solid fa-house")
         | 
| 5 5 | 
             
                    span
         | 
| 6 6 | 
             
                        a(href=url_for(site.path))
         | 
| 7 7 | 
             
                            != __('menu.home')
         | 
| @@ -10,7 +10,7 @@ mixin BCRender(post, home) | |
| 10 10 | 
             
                if post.categories && post.categories.length
         | 
| 11 11 | 
             
                    - var cat_length = post.categories.length
         | 
| 12 12 | 
             
                    if home
         | 
| 13 | 
            -
                        i(class=" | 
| 13 | 
            +
                        i(class="fa fa-solid fa-angle-right")
         | 
| 14 14 | 
             
                    each cat,index in post.categories.toArray()
         | 
| 15 15 | 
             
                        if home
         | 
| 16 16 | 
             
                            if index===cat_length
         | 
| @@ -29,5 +29,5 @@ mixin BCRender(post, home) | |
| 29 29 | 
             
                            a(href=url_for(cat.path) title=__('post.in')+cat.name)
         | 
| 30 30 | 
             
                                != cat.name
         | 
| 31 31 | 
             
                        if cat_length > 1 && index !== cat_length
         | 
| 32 | 
            -
                            i(class=" | 
| 32 | 
            +
                            i(class="fa fa-solid fa-angle-right")
         | 
| 33 33 | 
             
                != '</div>'
         | 
    
        package/layout/_mixin/card.pug
    CHANGED
    
    | @@ -12,10 +12,11 @@ mixin CardRender(item) | |
| 12 12 | 
             
                                != item.top.name
         | 
| 13 13 | 
             
                    div(class="info")
         | 
| 14 14 | 
             
                        if item.link
         | 
| 15 | 
            -
                            - var postTitleIcon = '<i class=" | 
| 15 | 
            +
                            - var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
         | 
| 16 16 | 
             
                        - var postText = itemname || item.link || __('post.untitled')
         | 
| 17 | 
            +
                        - var tempI = postText + (postTitleIcon || '')
         | 
| 17 18 | 
             
                        div(class="ribbon")
         | 
| 18 | 
            -
                            != _url(item.link ,  | 
| 19 | 
            +
                            != _url(item.link , tempI , {itemprop: 'url', title: postText})
         | 
| 19 20 | 
             
                        div(class="inner")
         | 
| 20 21 | 
             
                            - var len = ''
         | 
| 21 22 | 
             
                            if item.child
         | 
| @@ -30,8 +31,8 @@ mixin CardRender(item) | |
| 30 31 | 
             
                            div(class="meta footer")
         | 
| 31 32 | 
             
                                if item.top
         | 
| 32 33 | 
             
                                    span
         | 
| 33 | 
            -
                                        != _url(item.top.path, '<i class=" | 
| 34 | 
            +
                                        != _url(item.top.path, '<i class="fa fa-solid fa-flag"></i>'+item.top.name, {itemprop: 'url', title: item.top.name})
         | 
| 34 35 | 
             
                                span
         | 
| 35 | 
            -
                                    i(class=" | 
| 36 | 
            +
                                    i(class="fa fa-solid fa-file")
         | 
| 36 37 | 
             
                                    != len
         | 
| 37 38 | 
             
                        != _url(item.path, 'more...', {itemprop: 'url', title: itemname, class: 'btn'})
         | 
| @@ -33,6 +33,7 @@ mixin CommentRender() | |
| 33 33 | 
             
                    else if gt
         | 
| 34 34 | 
             
                        div(class="warp" id="gtcomments")
         | 
| 35 35 | 
             
                        script(type="text/javascript" data-pjax).
         | 
| 36 | 
            +
                            const gproxy = theme.gitalk.proxy || undefined
         | 
| 36 37 | 
             
                            const gitalk = new Gitalk({
         | 
| 37 38 | 
             
                                clientID: '#{theme.gitalk.clientID}',
         | 
| 38 39 | 
             
                                clientSecret: '#{theme.gitalk.clientSecret}',
         | 
| @@ -41,7 +42,7 @@ mixin CommentRender() | |
| 41 42 | 
             
                                admin: #{theme.gitalk.admin},
         | 
| 42 43 | 
             
                                id: location.pathname,      // Ensure uniqueness and length less than 50
         | 
| 43 44 | 
             
                                distractionFreeMode: false,  // Facebook-like distraction free mode
         | 
| 44 | 
            -
                                proxy: "#{ | 
| 45 | 
            +
                                proxy: "#{gproxy}"
         | 
| 45 46 | 
             
                            });
         | 
| 46 47 | 
             
                            gitalk.render("gtcomments")
         | 
| 47 48 | 
             
                    else if gs
         | 
| @@ -5,7 +5,7 @@ mixin PMRender(item, full) | |
| 5 5 | 
             
                    - var create_title = __('post.created') + __('symbol.colon') + full_date(item.date)
         | 
| 6 6 | 
             
                    span(class="item" title=create_title)
         | 
| 7 7 | 
             
                        span(class="icon")
         | 
| 8 | 
            -
                            i(class=" | 
| 8 | 
            +
                            i(class="fa fa-solid fa-calendar-days")
         | 
| 9 9 | 
             
                        if full
         | 
| 10 10 | 
             
                            span(class="text")
         | 
| 11 11 | 
             
                                != __('post.posted')
         | 
| @@ -14,7 +14,7 @@ mixin PMRender(item, full) | |
| 14 14 | 
             
                    if theme.post.count
         | 
| 15 15 | 
             
                        span(class="item" title=__('symbols_count_time.count'))
         | 
| 16 16 | 
             
                            span(class="icon")
         | 
| 17 | 
            -
                                i(class=" | 
| 17 | 
            +
                                i(class="fa fa-solid fa-pen-nib")
         | 
| 18 18 | 
             
                            if full
         | 
| 19 19 | 
             
                                span(class="text")
         | 
| 20 20 | 
             
                                    != __('symbols_count_time.count')
         | 
| @@ -23,7 +23,7 @@ mixin PMRender(item, full) | |
| 23 23 | 
             
                                != __('symbols_count_time.word')
         | 
| 24 24 | 
             
                    span(class="item" title=__('symbols_count_time.time'))
         | 
| 25 25 | 
             
                        span(class="icon")
         | 
| 26 | 
            -
                            i(class=" | 
| 26 | 
            +
                            i(class="fa fa-solid fa-clock")
         | 
| 27 27 | 
             
                        if full
         | 
| 28 28 | 
             
                            span(class="text")
         | 
| 29 29 | 
             
                                != __('symbols_count_time.time')
         | 
| @@ -4,7 +4,7 @@ mixin SMRender(item) | |
| 4 4 | 
             
                - var link1 = item.link || item.path
         | 
| 5 5 | 
             
                - var gradient = theme?.experiments?.gradient
         | 
| 6 6 | 
             
                if item.link
         | 
| 7 | 
            -
                    - var postTitleIcon = '<i class=" | 
| 7 | 
            +
                    - var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
         | 
| 8 8 | 
             
                - var postText = item.title || item.link || __('post.untitled')
         | 
| 9 9 | 
             
                article(class="item")
         | 
| 10 10 | 
             
                    if gradient
         | 
| @@ -27,6 +27,6 @@ mixin SMRender(item) | |
| 27 27 | 
             
                            div(class="meta footer")
         | 
| 28 28 | 
             
                                span
         | 
| 29 29 | 
             
                                    - var lastcat = item.categories.last()
         | 
| 30 | 
            -
                                    != _url(lastcat.path, '<i class=" | 
| 30 | 
            +
                                    != _url(lastcat.path, '<i class="fa fa-solid fa-flag"></i>' + lastcat.name, {itemprop: 'url', title: lastcat.name})
         | 
| 31 31 | 
             
                        != _url(link1, 'more...', {itemprop: 'url', title: postText, class: 'btn'})
         | 
| 32 32 |  | 
| @@ -25,12 +25,12 @@ mixin sidebarRender(display_toc) | |
| 25 25 | 
             
                        li(class="prev pjax")
         | 
| 26 26 | 
             
                            if page && page.prev
         | 
| 27 27 | 
             
                                if prevlink
         | 
| 28 | 
            -
                                    != _url(prevlink, '<i class=" | 
| 28 | 
            +
                                    != _url(prevlink, '<i class="fa fa-solid fa-chevron-left"></i>', {rel: 'prev', title: __('post.prev')})
         | 
| 29 29 | 
             
                        li(class="up")
         | 
| 30 | 
            -
                            i(class=" | 
| 30 | 
            +
                            i(class="fa fa-solid fa-arrow-up")
         | 
| 31 31 | 
             
                        li(class="down")
         | 
| 32 | 
            -
                            i(class=" | 
| 32 | 
            +
                            i(class="fa fa-solid fa-arrow-down")
         | 
| 33 33 | 
             
                        li(class="next pjax")
         | 
| 34 34 | 
             
                            if nextlink
         | 
| 35 | 
            -
                                != _url(nextlink, '<i class=" | 
| 35 | 
            +
                                != _url(nextlink, '<i class="fa fa-solid fa-chevron-right"></i>', {rel: 'next', title: __('post.next')})
         | 
| 36 36 | 
             
                        li(class="percent")
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            mixin field(item)
         | 
| 2 2 | 
             
                if item.link
         | 
| 3 | 
            -
                    - var postTitleIcon = '<i class=" | 
| 3 | 
            +
                    - var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
         | 
| 4 4 | 
             
                li(class="item")
         | 
| 5 5 | 
             
                    +BCRender(item, false)
         | 
| 6 6 | 
             
                    - var postText = item.title || item.link || __('post.untitled')
         | 
| @@ -5,18 +5,18 @@ div(class="status") | |
| 5 5 | 
             
                    span(itemprop="copyrightYear")
         | 
| 6 6 | 
             
                        != copyright_year
         | 
| 7 7 | 
             
                    span(class="with-love")
         | 
| 8 | 
            -
                        i(class=` | 
| 8 | 
            +
                        i(class=`fa fa-solid fa-${ theme.footer.icon.name }`)
         | 
| 9 9 | 
             
                    span(class="author" itemprop="copyrightHolder")
         | 
| 10 10 | 
             
                        != `${author} @ ${ alternate?alternate:title}`
         | 
| 11 11 | 
             
                if theme.footer.count
         | 
| 12 12 | 
             
                    div(class="count")
         | 
| 13 13 | 
             
                        span(class="post-meta-item-icon")
         | 
| 14 | 
            -
                            i(class=" | 
| 14 | 
            +
                            i(class="fa fa-solid fa-chart-area")
         | 
| 15 15 | 
             
                        span(title=__('symbols_count_time.count_total'))
         | 
| 16 16 | 
             
                            != `${ symbolsCountTotal(site) } ${__('symbols_count_time.word')}`
         | 
| 17 17 | 
             
                        span(class="post-meta-divider") |
         | 
| 18 18 | 
             
                        span(class="post-meta-item-icon")
         | 
| 19 | 
            -
                            i(class=" | 
| 19 | 
            +
                            i(class="fa fa-solid fa-coffee")
         | 
| 20 20 | 
             
                        span(title=__('symbols_count_time.time_total'))
         | 
| 21 21 | 
             
                            != symbolsTimeTotal(site, config.symbols_count_time.awl, config.symbols_count_time.wpm, __('symbols_count_time.time_minutes'))
         | 
| 22 22 | 
             
                        //- span(id="timeDate")
         | 
| @@ -33,6 +33,7 @@ link(rel="alternate" type="application/json" title=siteTitle href=feedLink) | |
| 33 33 | 
             
            if fontConfig
         | 
| 34 34 | 
             
                != _vendor_font()
         | 
| 35 35 | 
             
            != _css('app.css')
         | 
| 36 | 
            +
            link(rel="stylesheet" type="text/css" href="https://cdn.staticfile.org/font-awesome/6.2.1/css/all.min.css")
         | 
| 36 37 | 
             
            - var debugVue = theme?.experiments?.debug
         | 
| 37 38 | 
             
            if debugVue
         | 
| 38 39 | 
             
                script(src="https://cdn.staticfile.org/vue/3.2.45/vue.global.js")
         | 
| @@ -11,8 +11,8 @@ nav(id="nav") | |
| 11 11 | 
             
                                != alternate || title
         | 
| 12 12 | 
             
                    ul(class="right" id="rightNav")
         | 
| 13 13 | 
             
                        li(class="item theme" @click="changeThemeByBtn")
         | 
| 14 | 
            -
                            i(class=" | 
| 14 | 
            +
                            i(class="fa fa-solid fa-sunrise")
         | 
| 15 15 | 
             
                        li(class="item search")
         | 
| 16 | 
            -
                            i(class=" | 
| 16 | 
            +
                            i(class="fa fa-solid fa-magnifying-glass")
         | 
| 17 17 | 
             
                        != shokax_inject('rightNav')
         | 
| 18 18 |  | 
| @@ -65,7 +65,7 @@ html(lang=page.language?page.language:config.language, style=theme.grayMode ? 'f | |
| 65 65 | 
             
                                div(class="widgets")
         | 
| 66 66 | 
             
                                    +WRender
         | 
| 67 67 | 
             
                                != partial('_partials/footer.pug', {}, {cache: true})
         | 
| 68 | 
            -
                    - var ccIcon = '<i class=" | 
| 68 | 
            +
                    - var ccIcon = '<i class="fa fa-solid fa-creative-commons"></i>'
         | 
| 69 69 | 
             
                    - var ccText = theme.creative_commons.license.toUpperCase()
         | 
| 70 70 | 
             
                    <script data-config type="text/javascript" >
         | 
| 71 71 | 
             
                        | var LOCAL = {
         | 
| @@ -1,4 +1,4 @@ | |
| 1 1 | 
             
            if page.prev || page.next
         | 
| 2 2 | 
             
                nav(class="pagination")
         | 
| 3 3 | 
             
                    div(class="inner")
         | 
| 4 | 
            -
                        != paginator({prev_text: '<i class=" | 
| 4 | 
            +
                        != paginator({prev_text: '<i class="fa fa-solid fa-angle-left" aria-label="' + __('accessibility.prev_page') + '"></i>',next_text: '<i class="fa fa-solid fa-angle-right" aria-label="' + __('accessibility.next_page') + '"></i>',mid_size : 1,escape   : false})
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            if page.copyright !== false
         | 
| 2 | 
            -
                - var ccIcon = '<i class=" | 
| 2 | 
            +
                - var ccIcon = '<i class="fa fa-brands fa-creative-commons"><em>(CC)</em></i>'
         | 
| 3 3 | 
             
                - var ccText = theme.creative_commons.license.toUpperCase()
         | 
| 4 4 | 
             
                div(id="copyright")
         | 
| 5 5 | 
             
                    ul
         | 
| @@ -7,7 +7,7 @@ if page.copyright !== false | |
| 7 7 | 
             
                            strong
         | 
| 8 8 | 
             
                                != __('post.copyright.author') + __('symbol.colon')
         | 
| 9 9 | 
             
                            != page.author || author
         | 
| 10 | 
            -
                            i(class=" | 
| 10 | 
            +
                            i(class="fa fa-solid fa-at")
         | 
| 11 11 | 
             
                                em @
         | 
| 12 12 | 
             
                            != title
         | 
| 13 13 | 
             
                        li(class="link")
         | 
| @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            div(class="meta")
         | 
| 2 2 | 
             
                if date(post.date) != date(post.updated) || time(post.date) != time(post.updated)
         | 
| 3 3 | 
             
                    span(class="icon")
         | 
| 4 | 
            -
                        i(class=" | 
| 4 | 
            +
                        i(class="fa fa-solid fa-eye")
         | 
| 5 5 | 
             
                    span 此文章已被阅读次数:
         | 
| 6 6 | 
             
                    span(id="twikoo_visitors" class="waline-pageview-count" data-path=post.path) 正在加载...
         | 
| 7 7 | 
             
                    span(class="item")
         | 
| 8 8 | 
             
                        span(class="icon")
         | 
| 9 | 
            -
                            i(class=" | 
| 9 | 
            +
                            i(class="fa fa-solid fa-calendar-check")
         | 
| 10 10 | 
             
                        span(class="text")
         | 
| 11 11 | 
             
                            != __('post.edited')
         | 
| 12 12 | 
             
                        time(title=__('post.modified') + __('symbol.colon') + full_date(post.updated) itemprop="dateModified" datetime=moment(post.updated).format())
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            mixin navpost(item, type)
         | 
| 2 2 | 
             
                - var postText = item.title || item.link || __('post.untitled')
         | 
| 3 3 | 
             
                - var lastcat = item.categories.last()
         | 
| 4 | 
            -
                - var itemlink=`<span class="type">${__('post.' + type)}</span><span class="category"><i class=" | 
| 4 | 
            +
                - var itemlink=`<span class="type">${__('post.' + type)}</span><span class="category"><i class="fa fa-solid fa-flag"></i>${lastcat?.name}</span><h3>${ postText }</h3>`
         | 
| 5 5 | 
             
                != _url(item.path, itemlink, {itemprop: 'url', rel: type, 'data-background-image': _cover(item), title: postText})
         | 
| 6 6 |  | 
| 7 7 | 
             
            div(class="post-nav")
         | 
| @@ -17,7 +17,7 @@ article(itemscope itemtype="http://schema.org/Article" class="post block" lang=t | |
| 17 17 | 
             
                        div(class="tags")
         | 
| 18 18 | 
             
                            each tag in post.tags.toArray()
         | 
| 19 19 | 
             
                                a(href!=url_for(tag.path) rel="tag")
         | 
| 20 | 
            -
                                    i(class=" | 
| 20 | 
            +
                                    i(class="fa fa-solid fa-tag")
         | 
| 21 21 | 
             
                                    != tag.name
         | 
| 22 22 | 
             
                footer
         | 
| 23 23 | 
             
                    != partial('_partials/post/footer.pug')
         | 
| @@ -3,7 +3,7 @@ mixin item(name, path, parent, dropdown, sublist) | |
| 3 3 | 
             
                - var path = path.split('||')
         | 
| 4 4 | 
             
                - var itemURL = path[0].trim()
         | 
| 5 5 | 
             
                - if (!itemURL.startsWith('http')){ itemURL = itemURL.replace('//', '/') }
         | 
| 6 | 
            -
                - var menuIcon = '<i class=" | 
| 6 | 
            +
                - var menuIcon = '<i class="fa fa-solid fa-' + trimn(path[1]) + '"></i>'
         | 
| 7 7 | 
             
                - var menuText = __('menu.' + name).replace('menu.', '')
         | 
| 8 8 | 
             
                if parent
         | 
| 9 9 | 
             
                    li(class="item dropdown")
         | 
| @@ -21,7 +21,7 @@ mixin item(name, path, parent, dropdown, sublist) | |
| 21 21 | 
             
                                    - var menuText = __('menu.' + subname).replace('menu.', '')
         | 
| 22 22 | 
             
                                    if subname == 'default'
         | 
| 23 23 | 
             
                                        - var menuText = __('menu.' + name).replace('menu.', '')
         | 
| 24 | 
            -
                                    - var menuIcon = '<i class=" | 
| 24 | 
            +
                                    - var menuIcon = '<i class="fa fa-solid fa-' + trimn(path[1]) + '"></i>'
         | 
| 25 25 | 
             
                                    li(class="item")
         | 
| 26 26 | 
             
                                        != _url(itemURL, menuIcon + menuText, {rel: 'section'})
         | 
| 27 27 | 
             
                else
         | 
| @@ -32,7 +32,7 @@ nav(class="state") | |
| 32 32 | 
             
            div(class="social")
         | 
| 33 33 | 
             
                each link, name  in theme.social
         | 
| 34 34 | 
             
                    - var sidebarURL = link.split('||')[0].trim()
         | 
| 35 | 
            -
                    - var sidebarIcon = '<i class=" | 
| 35 | 
            +
                    - var sidebarIcon = '<i class="fa fa-solid fa-' + link.split('||')[1].trim() + '"></i>'
         | 
| 36 36 | 
             
                    != _url(sidebarURL, sidebarIcon, {title: sidebarURL, class: 'item ' + name})
         | 
| 37 37 |  | 
| 38 38 | 
             
            != shokax_inject('sidebar')
         | 
    
        package/layout/archive.pug
    CHANGED
    
    | @@ -103,7 +103,7 @@ block content | |
| 103 103 | 
             
                                                    a(href=url_for(cat.path)) #{cat.name}
         | 
| 104 104 | 
             
                                div(class="title")
         | 
| 105 105 | 
             
                                    if post.link
         | 
| 106 | 
            -
                                        - var postTitleIcon = '<i class=" | 
| 106 | 
            +
                                        - var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
         | 
| 107 107 | 
             
                                        - var postText = post.title || post.link
         | 
| 108 108 | 
             
                                        != _url(post.link, postText + postTitleIcon, {class: 'external', itemprop: 'url'})
         | 
| 109 109 | 
             
                                    else
         | 
    
        package/layout/category.pug
    CHANGED
    
    | @@ -53,7 +53,7 @@ block content | |
| 53 53 | 
             
                                ) #{date(post.date, 'MM-DD')}
         | 
| 54 54 | 
             
                            div(class="title")
         | 
| 55 55 | 
             
                                if post.link
         | 
| 56 | 
            -
                                    - var postTitleIcon = '<i class=" | 
| 56 | 
            +
                                    - var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
         | 
| 57 57 | 
             
                                    - var postText = post.title || post.link
         | 
| 58 58 | 
             
                                    != _url(post.link, postText + postTitleIcon, {class: 'external', itemprop: 'url'})
         | 
| 59 59 | 
             
                                else
         | 
    
        package/layout/page.pug
    CHANGED
    
    | @@ -16,7 +16,7 @@ block title | |
| 16 16 | 
             
            block header
         | 
| 17 17 | 
             
                h1(itemprop="name headline")
         | 
| 18 18 | 
             
                    if page.link
         | 
| 19 | 
            -
                        - var postTitleIcon = '<i class=" | 
| 19 | 
            +
                        - var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
         | 
| 20 20 | 
             
                        - var postText = page.title || page.link
         | 
| 21 21 | 
             
                        != _url(page.link, postText + postTitleIcon, {class: 'link external', itemprop: 'url'})
         | 
| 22 22 | 
             
                    else
         | 
    
        package/layout/post.pug
    CHANGED
    
    | @@ -17,7 +17,7 @@ block title | |
| 17 17 | 
             
            block header
         | 
| 18 18 | 
             
                h1(itemprop="name headline")
         | 
| 19 19 | 
             
                    if page.link
         | 
| 20 | 
            -
                        - var postTitleIcon = '<i class=" | 
| 20 | 
            +
                        - var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
         | 
| 21 21 | 
             
                        - var postText = page.title || page.link
         | 
| 22 22 | 
             
                        != _url(page.link, postText + postTitleIcon, {class: 'link external', itemprop: 'url'})
         | 
| 23 23 | 
             
                    else
         | 
    
        package/layout/tag.pug
    CHANGED
    
    | @@ -33,7 +33,7 @@ block content | |
| 33 33 | 
             
                                                    != cat.name
         | 
| 34 34 | 
             
                            div(class="title")
         | 
| 35 35 | 
             
                                if post.link
         | 
| 36 | 
            -
                                    - var postTitleIcon = '<i class=" | 
| 36 | 
            +
                                    - var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
         | 
| 37 37 | 
             
                                    - var postText = post.title || post.link
         | 
| 38 38 | 
             
                                    != _url(post.link, postText + postTitleIcon, {class: 'external', itemprop: 'url'})
         | 
| 39 39 | 
             
                                else
         | 
    
        package/package.json
    CHANGED
    
    
| @@ -145,6 +145,7 @@ input, textarea { | |
| 145 145 | 
             
                src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono@2.242/fonts/webfonts/JetBrainsMono-Regular.woff2") format("woff2");
         | 
| 146 146 | 
             
            }
         | 
| 147 147 |  | 
| 148 | 
            +
            // TODO
         | 
| 148 149 | 
             
            .ic {
         | 
| 149 150 | 
             
              font-family: "ic" !important;
         | 
| 150 151 | 
             
              -webkit-font-smoothing: antialiased;
         | 
| @@ -158,15 +159,39 @@ input, textarea { | |
| 158 159 | 
             
              line-height: 1;
         | 
| 159 160 | 
             
            }
         | 
| 160 161 |  | 
| 162 | 
            +
            .fa {
         | 
| 163 | 
            +
              -webkit-font-smoothing: antialiased;
         | 
| 164 | 
            +
              -moz-osx-font-smoothing: grayscale;
         | 
| 165 | 
            +
              text-align: center;
         | 
| 166 | 
            +
              width: 1.25em;
         | 
| 167 | 
            +
              display: inline-block;
         | 
| 168 | 
            +
              font-style: normal;
         | 
| 169 | 
            +
              font-variant: normal;
         | 
| 170 | 
            +
              text-rendering: auto;
         | 
| 171 | 
            +
              line-height: 1;
         | 
| 172 | 
            +
            }
         | 
| 173 | 
            +
             | 
| 174 | 
            +
            // TODO
         | 
| 161 175 | 
             
            .ic em {
         | 
| 162 176 | 
             
              font-size: 0;
         | 
| 163 177 | 
             
            }
         | 
| 164 178 |  | 
| 179 | 
            +
            .fa em {
         | 
| 180 | 
            +
              font-size: 0;
         | 
| 181 | 
            +
            }
         | 
| 182 | 
            +
             | 
| 183 | 
            +
            // TODO
         | 
| 165 184 | 
             
            .ic-lg {
         | 
| 166 185 | 
             
              font-size: 1.33333em;
         | 
| 167 186 | 
             
              line-height: .75em;
         | 
| 168 187 | 
             
              vertical-align: -.0667em;
         | 
| 169 188 | 
             
            }
         | 
| 189 | 
            +
             | 
| 190 | 
            +
            .fa-lg {
         | 
| 191 | 
            +
              font-size: 1.33333em;
         | 
| 192 | 
            +
              line-height: .75em;
         | 
| 193 | 
            +
              vertical-align: -.0667em;
         | 
| 194 | 
            +
            }
         | 
| 170 195 | 
             
            //.weather {
         | 
| 171 196 | 
             
            //      color: var(--text-color) !important;
         | 
| 172 197 | 
             
            //}
         | 
    
        package/source/js/_app/global.js
    CHANGED
    
    | @@ -25,16 +25,16 @@ let LOCAL_HASH = 0; | |
| 25 25 | 
             
            let LOCAL_URL = window.location.href;
         | 
| 26 26 | 
             
            let pjax;
         | 
| 27 27 | 
             
            const changeTheme = function (type) {
         | 
| 28 | 
            -
                const btn = $dom('.theme . | 
| 28 | 
            +
                const btn = $dom('.theme .fa');
         | 
| 29 29 | 
             
                if (type === 'dark') {
         | 
| 30 30 | 
             
                    HTML.attr('data-theme', type);
         | 
| 31 | 
            -
                    btn.removeClass(' | 
| 32 | 
            -
                    btn.addClass(' | 
| 31 | 
            +
                    btn.removeClass('fa-sunrise');
         | 
| 32 | 
            +
                    btn.addClass('fa-moon-stars');
         | 
| 33 33 | 
             
                }
         | 
| 34 34 | 
             
                else {
         | 
| 35 35 | 
             
                    HTML.attr('data-theme', null);
         | 
| 36 | 
            -
                    btn.removeClass(' | 
| 37 | 
            -
                    btn.addClass(' | 
| 36 | 
            +
                    btn.removeClass('fa-moon-stars');
         | 
| 37 | 
            +
                    btn.addClass('fa-sunrise');
         | 
| 38 38 | 
             
                }
         | 
| 39 39 | 
             
            };
         | 
| 40 40 | 
             
            const autoDarkmode = function () {
         | 
| @@ -43,12 +43,7 @@ const autoDarkmode = function () { | |
| 43 43 | 
             
                        changeTheme('dark');
         | 
| 44 44 | 
             
                    }
         | 
| 45 45 | 
             
                    else {
         | 
| 46 | 
            -
                         | 
| 47 | 
            -
                            changeTheme('dark');
         | 
| 48 | 
            -
                        }
         | 
| 49 | 
            -
                        else {
         | 
| 50 | 
            -
                            changeTheme();
         | 
| 51 | 
            -
                        }
         | 
| 46 | 
            +
                        changeTheme();
         | 
| 52 47 | 
             
                    }
         | 
| 53 48 | 
             
                }
         | 
| 54 49 | 
             
            };
         | 
| @@ -149,7 +149,7 @@ const getScript = function (url, callback, condition) { | |
| 149 149 | 
             
                else {
         | 
| 150 150 | 
             
                    let script = document.createElement('script');
         | 
| 151 151 | 
             
                    script.onload = function (_, isAbort) {
         | 
| 152 | 
            -
                        if (isAbort || !script.readyState | 
| 152 | 
            +
                        if (isAbort || !script.readyState) {
         | 
| 153 153 | 
             
                            console.log("abort!");
         | 
| 154 154 | 
             
                            script.onload = null;
         | 
| 155 155 | 
             
                            script = undefined;
         | 
| @@ -288,15 +288,27 @@ const pjaxScript = function (element) { | |
| 288 288 | 
             
                }
         | 
| 289 289 | 
             
                parent.appendChild(script);
         | 
| 290 290 | 
             
            };
         | 
| 291 | 
            -
            const pageScroll =  | 
| 291 | 
            +
            const pageScroll = (target, offset, complete) => {
         | 
| 292 292 | 
             
                const opt = {
         | 
| 293 | 
            -
                     | 
| 294 | 
            -
                     | 
| 295 | 
            -
                    easing: 'easeInOutQuad',
         | 
| 296 | 
            -
                    scrollTop: offset || (typeof target === 'number' ? target : (target ? target.top() + document.documentElement.scrollTop - siteNavHeight : 0)),
         | 
| 297 | 
            -
                    complete: function () {
         | 
| 298 | 
            -
                        complete && complete();
         | 
| 299 | 
            -
                    }
         | 
| 293 | 
            +
                    left: 0,
         | 
| 294 | 
            +
                    behavior: "smooth"
         | 
| 300 295 | 
             
                };
         | 
| 301 | 
            -
                 | 
| 296 | 
            +
                if (typeof target === "number") {
         | 
| 297 | 
            +
                    opt.top = target;
         | 
| 298 | 
            +
                }
         | 
| 299 | 
            +
                else {
         | 
| 300 | 
            +
                    if (typeof target === 'number') {
         | 
| 301 | 
            +
                        opt.top = offset || target;
         | 
| 302 | 
            +
                    }
         | 
| 303 | 
            +
                    else {
         | 
| 304 | 
            +
                        if (offset || target) {
         | 
| 305 | 
            +
                            opt.top = target.top() + document.documentElement.scrollTop - siteNavHeight;
         | 
| 306 | 
            +
                        }
         | 
| 307 | 
            +
                        else {
         | 
| 308 | 
            +
                            opt.top = 0;
         | 
| 309 | 
            +
                        }
         | 
| 310 | 
            +
                    }
         | 
| 311 | 
            +
                }
         | 
| 312 | 
            +
                scrollTo(opt);
         | 
| 313 | 
            +
                complete && complete();
         | 
| 302 314 | 
             
            };
         | 
    
        package/source/js/_app/page.js
    CHANGED
    
    | @@ -175,7 +175,7 @@ const postBeauty = function () { | |
| 175 175 | 
             
                $dom.each('figure.highlight', function (element) {
         | 
| 176 176 | 
             
                    const code_container = element.child('.code-container');
         | 
| 177 177 | 
             
                    const caption = element.child('figcaption');
         | 
| 178 | 
            -
                    element.insertAdjacentHTML('beforeend', '<div class="operation"><span class="breakline-btn"><i class=" | 
| 178 | 
            +
                    element.insertAdjacentHTML('beforeend', '<div class="operation"><span class="breakline-btn"><i class="fa fa-solid fa-align-left"></i></span><span class="copy-btn"><i class="fa fa-solid fa-clipboard"></i></span><span class="fullscreen-btn"><i class="fa fa-solid fa-expand"></i></span></div>');
         | 
| 179 179 | 
             
                    const copyBtn = element.child('.copy-btn');
         | 
| 180 180 | 
             
                    if (LOCAL.nocopy) {
         | 
| 181 181 | 
             
                        copyBtn.remove();
         | 
| @@ -190,14 +190,14 @@ const postBeauty = function () { | |
| 190 190 | 
             
                                comma = '\n';
         | 
| 191 191 | 
             
                            });
         | 
| 192 192 | 
             
                            clipBoard(code, function (result) {
         | 
| 193 | 
            -
                                target.child('. | 
| 193 | 
            +
                                target.child('.fa').className = result ? 'fa fa-solid fa-check' : 'fa fa-solid fa-times';
         | 
| 194 194 | 
             
                                target.blur();
         | 
| 195 195 | 
             
                                showtip(LOCAL.copyright);
         | 
| 196 196 | 
             
                            });
         | 
| 197 197 | 
             
                        }, { passive: true });
         | 
| 198 198 | 
             
                        copyBtn.addEventListener('mouseleave', function (event) {
         | 
| 199 199 | 
             
                            setTimeout(function () {
         | 
| 200 | 
            -
                                event.target.child('. | 
| 200 | 
            +
                                event.target.child('.fa').className = 'fa fa-solid fa-clipboard';
         | 
| 201 201 | 
             
                            }, 1000);
         | 
| 202 202 | 
             
                        });
         | 
| 203 203 | 
             
                    }
         | 
| @@ -206,11 +206,11 @@ const postBeauty = function () { | |
| 206 206 | 
             
                        const target = event.currentTarget;
         | 
| 207 207 | 
             
                        if (element.hasClass('breakline')) {
         | 
| 208 208 | 
             
                            element.removeClass('breakline');
         | 
| 209 | 
            -
                            target.child('. | 
| 209 | 
            +
                            target.child('.fa').className = 'fa fa-solid fa-align-left';
         | 
| 210 210 | 
             
                        }
         | 
| 211 211 | 
             
                        else {
         | 
| 212 212 | 
             
                            element.addClass('breakline');
         | 
| 213 | 
            -
                            target.child('. | 
| 213 | 
            +
                            target.child('.fa').className = 'fa fa-solid fa-align-justify';
         | 
| 214 214 | 
             
                        }
         | 
| 215 215 | 
             
                    });
         | 
| 216 216 | 
             
                    const fullscreenBtn = element.child('.fullscreen-btn');
         | 
| @@ -218,7 +218,7 @@ const postBeauty = function () { | |
| 218 218 | 
             
                        element.removeClass('fullscreen');
         | 
| 219 219 | 
             
                        element.scrollTop = 0;
         | 
| 220 220 | 
             
                        BODY.removeClass('fullscreen');
         | 
| 221 | 
            -
                        fullscreenBtn.child('. | 
| 221 | 
            +
                        fullscreenBtn.child('.fa').className = 'fa fa-solid fa-expand';
         | 
| 222 222 | 
             
                    };
         | 
| 223 223 | 
             
                    const fullscreenHandle = function (event) {
         | 
| 224 224 | 
             
                        const target = event.currentTarget;
         | 
| @@ -234,7 +234,7 @@ const postBeauty = function () { | |
| 234 234 | 
             
                        else {
         | 
| 235 235 | 
             
                            element.addClass('fullscreen');
         | 
| 236 236 | 
             
                            BODY.addClass('fullscreen');
         | 
| 237 | 
            -
                            fullscreenBtn.child('. | 
| 237 | 
            +
                            fullscreenBtn.child('.fa').className = 'fa fa-solid fa-compress';
         | 
| 238 238 | 
             
                            if (code_container && code_container.find('tr').length > 15) {
         | 
| 239 239 | 
             
                                const showBtn = code_container.child('.show-btn');
         | 
| 240 240 | 
             
                                code_container.style.maxHeight = '';
         | 
| @@ -246,7 +246,7 @@ const postBeauty = function () { | |
| 246 246 | 
             
                    caption && caption.addEventListener('click', fullscreenHandle);
         | 
| 247 247 | 
             
                    if (code_container && code_container.find('tr').length > 15) {
         | 
| 248 248 | 
             
                        code_container.style.maxHeight = '300px';
         | 
| 249 | 
            -
                        code_container.insertAdjacentHTML('beforeend', '<div class="show-btn"><i class=" | 
| 249 | 
            +
                        code_container.insertAdjacentHTML('beforeend', '<div class="show-btn"><i class="fa fa-solid fa-angle-down"></i></div>');
         | 
| 250 250 | 
             
                        const showBtn = code_container.child('.show-btn');
         | 
| 251 251 | 
             
                        const hideCode = function () {
         | 
| 252 252 | 
             
                            code_container.style.maxHeight = '300px';
         | 
| @@ -414,7 +414,7 @@ const algoliaSearch = function (pjax) { | |
| 414 414 | 
             
                if (!siteSearch) {
         | 
| 415 415 | 
             
                    siteSearch = BODY.createChild('div', {
         | 
| 416 416 | 
             
                        id: 'search',
         | 
| 417 | 
            -
                        innerHTML: '<div class="inner"><div class="header"><span class="icon"><i class=" | 
| 417 | 
            +
                        innerHTML: '<div class="inner"><div class="header"><span class="icon"><i class="fa fa-solid fa-magnifying-glass"></i></span><div class="search-input-container"></div><span class="close-btn"><i class="fa fa-solid fa-times-circle"></i></span></div><div class="results"><div class="inner"><div id="search-stats"></div><div id="search-hits"></div><div id="search-pagination"></div></div></div></div>'
         | 
| 418 418 | 
             
                    });
         | 
| 419 419 | 
             
                }
         | 
| 420 420 | 
             
                const search = instantsearch({
         | 
| @@ -459,7 +459,7 @@ const algoliaSearch = function (pjax) { | |
| 459 459 | 
             
                        container: '#search-hits',
         | 
| 460 460 | 
             
                        templates: {
         | 
| 461 461 | 
             
                            item: function (data) {
         | 
| 462 | 
            -
                                const cats = data.categories ? '<span>' + data.categories.join('<i class=" | 
| 462 | 
            +
                                const cats = data.categories ? '<span>' + data.categories.join('<i class="fa fa-solid fa-angle-right"></i>') + '</span>' : '';
         | 
| 463 463 | 
             
                                return '<a href="' + CONFIG.root + data.path + '">' + cats + data._highlightResult.title.value + '</a>';
         | 
| 464 464 | 
             
                            },
         | 
| 465 465 | 
             
                            empty: function (data) {
         | 
| @@ -478,10 +478,10 @@ const algoliaSearch = function (pjax) { | |
| 478 478 | 
             
                        showFirst: false,
         | 
| 479 479 | 
             
                        showLast: false,
         | 
| 480 480 | 
             
                        templates: {
         | 
| 481 | 
            -
                            first: '<i class=" | 
| 482 | 
            -
                            last: '<i class=" | 
| 483 | 
            -
                            previous: '<i class=" | 
| 484 | 
            -
                            next: '<i class=" | 
| 481 | 
            +
                            first: '<i class="fa fa=solid fa-angle-double-left"></i>',
         | 
| 482 | 
            +
                            last: '<i class="fa fa-solid fa-angle-double-right"></i>',
         | 
| 483 | 
            +
                            previous: '<i class="fa fa-solid fa-angle-left"></i>',
         | 
| 484 | 
            +
                            next: '<i class="fa fa-solid fa-angle-right"></i>'
         | 
| 485 485 | 
             
                        },
         | 
| 486 486 | 
             
                        cssClasses: {
         | 
| 487 487 | 
             
                            root: 'pagination',
         | 
| @@ -530,7 +530,7 @@ const domInit = function () { | |
| 530 530 | 
             
                if (!toolBtn) {
         | 
| 531 531 | 
             
                    toolBtn = siteHeader.createChild('div', {
         | 
| 532 532 | 
             
                        id: 'tool',
         | 
| 533 | 
            -
                        innerHTML: '<div class="item player"></div><div class="item contents"><i class=" | 
| 533 | 
            +
                        innerHTML: '<div class="item player"></div><div class="item contents"><i class="fa fa-solid fa-list-ol"></i></div><div class="item chat"><i class="fa fa-solid fa-comments"></i></div><div class="item back-to-top"><i class="fa fa-solid fa-arrow-up"></i><span>0%</span></div>'
         | 
| 534 534 | 
             
                    });
         | 
| 535 535 | 
             
                }
         | 
| 536 536 | 
             
                toolPlayer = toolBtn.child('.player');
         | 
| @@ -618,6 +618,8 @@ const siteInit = function () { | |
| 618 618 | 
             
                });
         | 
| 619 619 | 
             
                siteRefresh(1);
         | 
| 620 620 | 
             
            };
         | 
| 621 | 
            -
            window.addEventListener('DOMContentLoaded', siteInit | 
| 621 | 
            +
            window.addEventListener('DOMContentLoaded', siteInit, {
         | 
| 622 | 
            +
                passive: true
         | 
| 623 | 
            +
            });
         | 
| 622 624 | 
             
            console.log('%c Theme.ShokaX v' + CONFIG.version + ' %c https://github.com/zkz098/hexo-theme-shokaX ', 'color: white; background: #e9546b; padding:5px 0;', 'padding:4px;border:1px solid #e9546b;');
         | 
| 623 625 | 
             
            console.log('%c by kaitaku ' + '%c https://www.kaitaku.xyz', 'color: white; background: #00bfff; padding: 5px 3px;', 'padding: 4px;border:1px solid #00bfff');
         | 
    
        package/source/js/_app/vue.js
    CHANGED
    
    | @@ -5,7 +5,7 @@ Vue.createApp({ | |
| 5 5 | 
             
                methods: {
         | 
| 6 6 | 
             
                    changeThemeByBtn() {
         | 
| 7 7 | 
             
                        let c;
         | 
| 8 | 
            -
                        const btn = $dom('.theme').child('. | 
| 8 | 
            +
                        const btn = $dom('.theme').child('.fa');
         | 
| 9 9 | 
             
                        const neko = BODY.createChild('div', {
         | 
| 10 10 | 
             
                            id: 'neko',
         | 
| 11 11 | 
             
                            innerHTML: '<div class="planet"><div class="sun"></div><div class="moon"></div></div><div class="body"><div class="face"><section class="eyes left"><span class="pupil"></span></section><section class="eyes right"><span class="pupil"></span></section><span class="nose"></span></div></div>'
         |