对话框 msgbox

1
2
3
4
5
6
7
8
{% msgbox title %}
{% msgguest name,avatar %}
对话内容
{% endmsgguest %}
{% msgadmin name,avatar %}
对话内容
{% endmsgadmin %}
{% endmsgbox %}
  1. title: 聊天窗标题
  2. name:对话框姓名,访客方块默认为”noname”,博主方块默认为读取hexo站点配置文件中的author作为博主名称。
  3. avatar:对话框头像,访客方块默认读取butterfly主题配置文件中的error_img.flink作为图片链接。博主方块默认读取butterfly主题配置文件中的avatar.img作为图片链接

案例并非真实

神奇的妙妙屋🧸
xl

markdown还有比typora更好用的吗?

神奇

vscode党加一

Fomalhaut🥝|fomal.cc

markdown我用typora

青葱|ciraosindex.top

我顶Atom

冰卡诺|zfe.one

我用石墨

冰卡诺|zfe.one

神奇

我就知道会有这个

陈殇|blog.chen-shang.top

冰老师用铅笔?

青葱|ciraosindex.top

大佬,就是不一样

xl

大佬,就是不一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{% msgbox "神奇的妙妙屋🧸" %}
{% msgguest "xl","https://gcore.jsdelivr.net/gh/zykjofficial/zykjofficial.github.io@master/img/avatar.png" %}
markdown还有比typora更好用的吗?
{% endmsgguest %}
{% msgadmin %}
vscode党加一
{% endmsgadmin %}
{% msgguest "Fomalhaut🥝|fomal.cc", "https://www.fomal.cc/assets/head.jpg" %}
markdown我用typora
{% endmsgguest %}
{% msgguest "青葱|ciraosindex.top","https://npm.elemecdn.com/akilar-friends@latest/avatar/www.itciraos.cn.jpg" %}
我顶Atom
{% endmsgguest %}
{% msgguest "冰卡诺|zfe.one","https://npm.elemecdn.com/akilar-friends@latest/avatar/zfe.space.jpg" %}
我用石墨
{% endmsgguest %}
{% msgguest "冰卡诺|zfe.one","https://npm.elemecdn.com/akilar-friends@latest/avatar/zfe.space.jpg" %}
![](https://akilar.top/assets/1671589422883.png)
{% endmsgguest %}
{% msgadmin %}
我就知道会有这个
{% endmsgadmin %}
{% msgguest "陈殇|blog.chen-shang.top","https://npm.elemecdn.com/akilar-friends@latest/avatar/weikecc.top.jpg" %}
冰老师用铅笔?
{% endmsgguest %}
{% msgguest "青葱|ciraosindex.top","https://npm.elemecdn.com/akilar-friends@latest/avatar/www.itciraos.cn.jpg" %}
大佬,就是不一样
{% endmsgguest %}
{% msgguest "xl","https://gcore.jsdelivr.net/gh/zykjofficial/zykjofficial.github.io@master/img/avatar.png" %}
大佬,就是不一样
{% endmsgguest %}
{% endmsgbox %}

魔改步骤

  1. 新建[Blogroot]\themes\butterfly\scripts\tag\msgbox.js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    /**
    {% msgbox title %}
    {% msgguest name,avatar %}
    对话内容
    {% endmsgguest %}
    {% msgadmin name,avatar %}
    对话内容
    {% endmsgadmin %}
    {% endmsgbox %}
    */

    'use strict'

    const urlFor = require('hexo-util').url_for.bind(hexo)

    function msgbox (args, content) {
    return `<div class="msgbox"><div class="mag-box-title">${args}</div><div class="msgbox-chat-content">${hexo.render.renderSync({ text: content, engine: 'markdown' }).split('\n').join('')}</div>
    <div class="mag-box-input-main"><i class="fa-solid fa-microphone"></i><input class="mag-box-input" type="text" name="fname" /><i class="fa-solid fa-face-smile"></i><i class="fa-solid fa-circle-plus"></i></div></div>`
    }

    function msgguest (args, content) {
    args = args.join(' ').split(',')
    let guestname = args[0]?args[0].trim():'noname' //默认无名
    let guestavatar = args[1]?args[1].trim():hexo.theme.config.error_img.flink //默认友链错误头像

    return `<div class="msgguest msg-main"><div class="msg-avatar-box"><img class="msg-avatar no-lightbox" title="${guestname}" src="${guestavatar}"/></div><div class="msg-content"><div class="msg-name">${guestname}</div><div class="msg-content-text">${hexo.render.renderSync({ text: content, engine: 'markdown' }).split('\n').join('')}</div></div></div>`
    }
    function msgadmin (args, content) {
    args = args.join(' ').split(',')
    let adminname = args[0]?args[0].trim():hexo.config.author //默认作者
    let adminavatar = args[1]?args[1].trim():hexo.theme.config.avatar.img //默认作者头像

    return `<div class="msgadmin msg-main"><div class="msg-avatar-box"><img class="msg-avatar no-lightbox" title="${adminname}" src="${adminavatar}"/></div><div class="msg-content"><div class="msg-name">${adminname}</div><div class="msg-content-text">${hexo.render.renderSync({ text: content, engine: 'markdown' }).split('\n').join('')}</div></div></div>`
    }


    hexo.extend.tag.register('msgbox', msgbox, { ends: true })
    hexo.extend.tag.register('msgguest', msgguest, { ends: true })
    hexo.extend.tag.register('msgadmin', msgadmin, { ends: true })
  2. 新建文件[Blogroot]\themes\butterfly\source\css\_tags\msgbox.styl

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    //default color:
    :root
    --msgbox-border-color: #888888
    --msgbox-border-background: #ffffff
    --msgbox-chat-background: rgba(255,255,255,0.7)
    --msgbox-name-color: #888888
    --guest-font-color: #000000
    --guest-background-color: #cbcbcb
    --admin-font-color: #ffffff
    --admin-background-color: #12b7f5
    [data-theme="dark"]
    --msgbox-border-color: #ffffff
    --msgbox-border-background: #000000
    --msgbox-chat-background: rgba(22,22,22,0.5)
    --msgbox-name-color: #888888
    --guest-font-color: #e3e8e9
    --guest-background-color: #303646
    --admin-font-color: #ffffff
    --admin-background-color: darken(#12b7f5,0.8)

    .msgbox
    display: flex
    flex-direction: column
    border-radius: 10px;
    overflow: hidden;
    position: relative
    flex-wrap: nowrap
    width: 100%
    height: auto
    .mag-box-title
    color: var(--msgbox-border-color)
    width: 100%;
    height: 50px;
    background: var(--msgbox-border-background)
    display: flex;
    align-items: center;
    justify-content: center;
    .mag-box-input-main
    width: 100%;
    height: 50px;
    color: var(--msgbox-border-color)
    background: var(--msgbox-border-background);
    display: flex;
    align-items: center;
    flex-direction: row;
    input.mag-box-input
    border-radius: 15px;
    height: 30px;
    width: calc(100% - 90px);
    padding: 0px 20px;
    &:focus-visible
    outline: none
    i.fa-solid
    width: 30px;
    display: flex;
    align-items: center;
    justify-content: center;
    .msgbox-chat-content
    padding: 20px 20px
    box-shadow: 0px 0px 0.5px var(--msgbox-border-color) inset
    max-height: 50vh
    overflow-y: scroll
    background: var(--msgbox-chat-background)
    &::-webkit-scrollbar
    width: 0
    .msg-main
    width: 100%
    height: auto
    display: flex
    flex-direction: row
    flex-wrap: nowrap
    margin: 0 0 25px 0
    .msg-avatar-box
    width: 30px
    min-width: 30px
    img.msg-avatar
    border-radius: 50%
    width: 30px
    height: 30px
    position: relative
    .img-alt
    display: none
    .msg-content
    width: 90%
    display: flex
    flex-direction: column
    flex-wrap: nowrap
    .msg-name
    font-size: 12px
    color: var(--msgbox-name-color)
    line-height: 1em
    height: 1.5em
    .msg-content-text
    border-radius: 8px
    width: auto
    max-width: calc(100% - 30px)
    padding: 5px 5px 0px 20px
    clip-path: polygon(0 15px,10px 16px,10px 5px,15px 0,100% 0,100% 100%,15px 100%,10px calc(100% - 5px),10px 25px)
    &>p
    margin: 0 0 0!important
    img
    border-radius: 6px
    &.msgguest
    .msg-avatar-box
    img.msg-avatar
    top: 0
    right: 0
    .msg-content
    align-items: flex-start
    .msg-name
    margin-left: 15px
    .msg-content-text
    background: var(--guest-background-color)
    color: var(--guest-font-color)
    &.msgadmin
    flex-direction: row-reverse
    .msg-avatar-box
    img.msg-avatar
    top: 0
    left: 0
    .msg-content
    align-items: flex-end
    .msg-name
    margin-right: 15px
    .msg-content-text
    background: var(--admin-background-color)
    color: var(--admin-font-color)
    padding: 5px 20px 0px 5px
    clip-path: polygon(100% 15px,calc(100% - 10px) 16px,calc(100% - 10px) 5px,calc(100% - 15px) 0,0 0,0 100%,calc(100% - 15px) 100%,calc(100% - 10px) calc(100% - 5px),calc(100% - 10px) 25px)
    max-width: calc(100% - 30px)
    @media screen and (max-width:496px)
    .msgbox
    .msgbox-chat-content
    .msg-main
    &.msgadmin
    flex-direction: row
    .msg-avatar-box
    img.msg-avatar
    top: 0
    right: 0
    .msg-content
    align-items: flex-start
    .msg-name
    margin-left: 15px
    .msg-content-text
    padding: 5px 5px 0px 20px
    clip-path: polygon(0 15px,10px 16px,10px 5px,15px 0,100% 0,100% 100%,15px 100%,10px calc(100% - 5px),10px 25px)
    max-width: calc(100% - 30px)