├── public
├── favicon.ico
└── index.html
├── src
├── assets
│ └── logo.png
├── components
│ ├── EmojiPicker
│ │ ├── index.js
│ │ ├── Helper.vue
│ │ ├── Emoji.vue
│ │ ├── VSvg.vue
│ │ ├── Categories.vue
│ │ ├── VEmojiPicker.vue
│ │ ├── EmojiList.vue
│ │ └── data
│ │ │ ├── _emojis.js
│ │ │ └── _icons.js
│ ├── index.js
│ ├── CommentLoading.vue
│ ├── Pagination.vue
│ ├── Comment.vue
│ ├── CommentEditor.vue
│ └── CommentNode.vue
├── main.js
├── api
│ ├── option.js
│ └── comment.js
├── App.vue
├── utils
│ ├── service.js
│ └── util.js
└── styles
│ └── global.scss
├── babel.config.js
├── cdn
└── img
│ ├── emoji
│ ├── 2018new_han_org.png
│ ├── 2018new_ku_org.png
│ ├── 2018new_ok_org.png
│ ├── 2018new_tu_org.png
│ ├── 2018new_xu_org.png
│ ├── 2018new_zan_org.png
│ ├── 2018new_aini_org.png
│ ├── 2018new_bishi_org.png
│ ├── 2018new_bizui_org.png
│ ├── 2018new_dalian_org.png
│ ├── 2018new_ding_org.png
│ ├── 2018new_doge02_org.png
│ ├── 2018new_erha_org.png
│ ├── 2018new_good_org.png
│ ├── 2018new_haha_thumb.png
│ ├── 2018new_haixiu_org.png
│ ├── 2018new_heng_thumb.png
│ ├── 2018new_huaxin_org.png
│ ├── 2018new_jiyan_org.png
│ ├── 2018new_keai_org.png
│ ├── 2018new_kelian_org.png
│ ├── 2018new_kun_thumb.png
│ ├── 2018new_kuxiao_org.png
│ ├── 2018new_leimu_org.png
│ ├── 2018new_nu_thumb.png
│ ├── 2018new_qian_thumb.png
│ ├── 2018new_shayan_org.png
│ ├── 2018new_sikao_org.png
│ ├── 2018new_wabi_thumb.png
│ ├── 2018new_wu_thumb.png
│ ├── 2018new_xixi_thumb.png
│ ├── 2018new_ye_thumb.png
│ ├── 2018new_yun_thumb.png
│ ├── 2018new_zuoyi_org.png
│ ├── 2018new_baibai_thumb.png
│ ├── 2018new_beishang_org.png
│ ├── 2018new_chanzui_org.png
│ ├── 2018new_chigua_thumb.png
│ ├── 2018new_chijing_org.png
│ ├── 2018new_dahaqian_org.png
│ ├── 2018new_guolai_thumb.png
│ ├── 2018new_huaixiao_org.png
│ ├── 2018new_hufen02_org.png
│ ├── 2018new_kulou_thumb.png
│ ├── 2018new_ningwen_org.png
│ ├── 2018new_qinqin_thumb.png
│ ├── 2018new_shuai_thumb.png
│ ├── 2018new_touxiao_org.png
│ ├── 2018new_weiqu_thumb.png
│ ├── 2018new_wenhao_thumb.png
│ ├── 2018new_woshou_thumb.png
│ ├── 2018new_xiaoku_thumb.png
│ ├── 2018new_yinxian_org.png
│ ├── 2018new_zhouma_thumb.png
│ ├── 2018new_chongjing_org.png
│ ├── 2018new_guzhang_thumb.png
│ ├── 2018new_heixian_thumb.png
│ ├── 2018new_kouzhao_thumb.png
│ ├── 2018new_landelini_org.png
│ ├── 2018new_miaomiao_thumb.png
│ ├── 2018new_quantou_thumb.png
│ ├── 2018new_shengbing_thumb.png
│ ├── 2018new_shiwang_thumb.png
│ ├── 2018new_shuijiao_thumb.png
│ ├── 2018new_taikaixin_org.png
│ ├── 2018new_tianping_thumb.png
│ ├── 2018new_weixioa02_org.png
│ ├── 2018new_xiaoerbuyu_org.png
│ ├── 2018new_zhuakuang_org.png
│ ├── 2018new_youhengheng_thumb.png
│ ├── 2018new_zuohengheng_thumb.png
│ └── 2018new_bingbujiandan_thumb.png
│ └── background
│ └── comment_bg.webp
├── dist
└── demo.html
├── .gitignore
├── README.md
└── package.json
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/src/assets/logo.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_han_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_han_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_ku_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_ku_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_ok_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_ok_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_tu_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_tu_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_xu_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_xu_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_zan_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_zan_org.png
--------------------------------------------------------------------------------
/src/components/EmojiPicker/index.js:
--------------------------------------------------------------------------------
1 | import VEmojiPicker from "./VEmojiPicker";
2 |
3 | export default VEmojiPicker;
4 |
--------------------------------------------------------------------------------
/cdn/img/background/comment_bg.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/background/comment_bg.webp
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_aini_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_aini_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_bishi_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_bishi_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_bizui_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_bizui_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_dalian_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_dalian_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_ding_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_ding_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_doge02_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_doge02_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_erha_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_erha_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_good_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_good_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_haha_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_haha_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_haixiu_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_haixiu_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_heng_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_heng_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_huaxin_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_huaxin_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_jiyan_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_jiyan_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_keai_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_keai_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_kelian_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_kelian_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_kun_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_kun_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_kuxiao_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_kuxiao_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_leimu_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_leimu_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_nu_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_nu_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_qian_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_qian_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_shayan_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_shayan_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_sikao_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_sikao_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_wabi_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_wabi_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_wu_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_wu_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_xixi_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_xixi_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_ye_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_ye_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_yun_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_yun_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_zuoyi_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_zuoyi_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_baibai_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_baibai_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_beishang_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_beishang_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_chanzui_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_chanzui_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_chigua_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_chigua_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_chijing_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_chijing_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_dahaqian_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_dahaqian_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_guolai_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_guolai_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_huaixiao_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_huaixiao_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_hufen02_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_hufen02_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_kulou_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_kulou_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_ningwen_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_ningwen_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_qinqin_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_qinqin_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_shuai_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_shuai_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_touxiao_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_touxiao_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_weiqu_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_weiqu_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_wenhao_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_wenhao_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_woshou_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_woshou_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_xiaoku_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_xiaoku_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_yinxian_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_yinxian_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_zhouma_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_zhouma_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_chongjing_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_chongjing_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_guzhang_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_guzhang_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_heixian_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_heixian_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_kouzhao_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_kouzhao_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_landelini_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_landelini_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_miaomiao_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_miaomiao_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_quantou_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_quantou_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_shengbing_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_shengbing_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_shiwang_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_shiwang_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_shuijiao_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_shuijiao_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_taikaixin_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_taikaixin_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_tianping_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_tianping_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_weixioa02_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_weixioa02_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_xiaoerbuyu_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_xiaoerbuyu_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_zhuakuang_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_zhuakuang_org.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_youhengheng_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_youhengheng_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_zuohengheng_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_zuohengheng_thumb.png
--------------------------------------------------------------------------------
/cdn/img/emoji/2018new_bingbujiandan_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cetr/halo-comment-yu/HEAD/cdn/img/emoji/2018new_bingbujiandan_thumb.png
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App.vue'
3 |
4 | Vue.config.productionTip = false
5 |
6 | new Vue({
7 | render: h => h(App),
8 | }).$mount('#app')
9 |
--------------------------------------------------------------------------------
/src/components/EmojiPicker/Helper.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
--------------------------------------------------------------------------------
/dist/demo.html:
--------------------------------------------------------------------------------
1 |
halo-comment demo
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 |
4 | # local env files
5 | .env.local
6 | .env.*.local
7 |
8 | # Log files
9 | npm-debug.log*
10 | yarn-debug.log*
11 | yarn-error.log*
12 |
13 | # Editor directories and files
14 | .idea
15 | .vscode
16 | *.suo
17 | *.ntvs*
18 | *.njsproj
19 | *.sln
20 | *.sw?
21 |
--------------------------------------------------------------------------------
/src/api/option.js:
--------------------------------------------------------------------------------
1 | import service from '@/utils/service'
2 |
3 | const baseUrl = '/api/content/options'
4 |
5 | const optionApi = {}
6 |
7 | optionApi.list = () => {
8 | return service({
9 | url: `${baseUrl}/comment`,
10 | method: 'get'
11 | })
12 | }
13 |
14 | export default optionApi
--------------------------------------------------------------------------------
/src/components/EmojiPicker/Emoji.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
17 |
18 |
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | > 适用于 Halo 的评论组件
4 |
5 | ### 示例
6 |
7 | [留言板](https://coor.top/message)
8 |
9 | ### 使用指南
10 |
11 | 1. 进入Halo博客后台 -> 系统 -> 博客设置 -> 评论设置
12 |
13 | 2. 将 `评论模块 JS` 修改为:
14 |
15 | ```
16 | https://unpkg.com/halo-comment-yu@latest/dist/halo-comment.min.js
17 | 或
18 | https://www.unpkg.com/halo-comment-yu@latest/dist/halo-comment.min.js
19 | ```
20 |
21 | 3. 保存
22 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
30 |
--------------------------------------------------------------------------------
/src/components/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import CommentEditor from './CommentEditor'
3 | import CommentNode from './CommentNode'
4 | import CommentLoading from './CommentLoading'
5 | import Pagination from './Pagination'
6 |
7 | const _components = {
8 | CommentEditor,
9 | CommentNode,
10 | CommentLoading,
11 | Pagination
12 | }
13 |
14 | const components = {}
15 |
16 | Object.keys(_components).forEach(key => {
17 | components[key] = Vue.component(key, _components[key])
18 | })
19 |
20 | export default components
21 |
--------------------------------------------------------------------------------
/src/components/EmojiPicker/VSvg.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
30 |
31 |
33 |
--------------------------------------------------------------------------------
/src/api/comment.js:
--------------------------------------------------------------------------------
1 | import service from '@/utils/service'
2 | const baseUrl = '/api/content'
3 |
4 | const commentApi = {}
5 |
6 | commentApi.createComment = (target, comment) => {
7 | return service({
8 | url: `${baseUrl}/${target}/comments`,
9 | method: 'post',
10 | data: comment
11 | })
12 | }
13 |
14 | commentApi.listComments = (target, targetId, view = 'tree_view', pagination) => {
15 | return service({
16 | url: `${baseUrl}/${target}/${targetId}/comments/${view}`,
17 | params: pagination,
18 | method: 'get'
19 | })
20 | }
21 |
22 | export default commentApi
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | halo-comment-normal
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/components/CommentLoading.vue:
--------------------------------------------------------------------------------
1 |
2 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/components/EmojiPicker/Categories.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
46 |
47 |
49 |
--------------------------------------------------------------------------------
/src/utils/service.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 | require('promise.prototype.finally').shim();
3 |
4 | const service = axios.create({
5 | baseURL: process.env.NODE_ENV === 'production' ? '' : 'http://localhost:8090',
6 | timeout: 5000,
7 | withCredentials: true
8 | })
9 |
10 | service.interceptors.request.use(
11 | config => {
12 | return config
13 | },
14 | error => {
15 | return Promise.reject(error)
16 | }
17 | )
18 |
19 | service.interceptors.response.use(
20 | response => {
21 | return response
22 | },
23 | error => {
24 |
25 | if (axios.isCancel(error)) {
26 | return Promise.reject(error)
27 | }
28 |
29 | const response = error.response
30 | const data = response ? response.data : null
31 |
32 | if (data) {
33 | if (data.status === 400) {
34 | // TODO handle 400 status error
35 | } else if (data.status === 401) {
36 | // TODO Handle 401 status error
37 | } else if (data.status === 403) {
38 | // TODO handle 403 status error
39 | } else if (data.status === 404) {
40 | // TODO handle 404 status error
41 | } else if (data.status === 500) {
42 | // TODO handle 500 status error
43 | }
44 | } else {
45 | // TODO Server unavailable
46 | }
47 | return Promise.reject(error)
48 | }
49 | )
50 |
51 | export default service
52 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "halo-comment-yu",
3 | "version": "v1.5.7",
4 | "main": "dist/halo-comment.min.js",
5 | "private": false,
6 | "files": [
7 | "dist",
8 | "cdn"
9 | ],
10 | "scripts": {
11 | "serve": "vue-cli-service serve",
12 | "build": "vue-cli-service build",
13 | "build:wc": "cross-env vue-cli-service build --target wc --name halo-comment 'src/components/Comment.vue'"
14 | },
15 | "dependencies": {
16 | "autosize": "^5.0.1",
17 | "axios": "^0.27.2",
18 | "marked": "^2.1.3",
19 | "md5": "^2.3.0",
20 | "promise.prototype.finally": "^3.1.3",
21 | "ua-parser-js": "^0.7.31",
22 | "viewerjs": "^1.10.5",
23 | "vue": "^2.7.7"
24 | },
25 | "devDependencies": {
26 | "@vue/cli-plugin-babel": "^5.0.8",
27 | "@vue/cli-plugin-eslint": "^5.0.8",
28 | "@vue/cli-service": "^5.0.8",
29 | "babel-eslint": "^10.1.0",
30 | "core-js": "^3.23.4",
31 | "cross-env": "^7.0.3",
32 | "eslint": "^7.32.0",
33 | "eslint-plugin-vue": "^7.20.0",
34 | "sass": "^1.53.0",
35 | "sass-loader": "^12.6.0",
36 | "vue-template-compiler": "^2.7.7"
37 | },
38 | "eslintConfig": {
39 | "root": true,
40 | "env": {
41 | "node": true
42 | },
43 | "extends": [
44 | "plugin:vue/essential",
45 | "eslint:recommended"
46 | ],
47 | "rules": {
48 | "no-console": "off"
49 | },
50 | "parserOptions": {
51 | "parser": "babel-eslint"
52 | }
53 | },
54 | "browserslist": [
55 | "> 1%",
56 | "last 2 versions"
57 | ],
58 | "description": "适用于 Halo 的评论组件",
59 | "repository": {
60 | "type": "git",
61 | "url": "git+https://github.com/cetr/halo-comment-yu.git"
62 | },
63 | "author": "知雨",
64 | "license": "ISC",
65 | "bugs": {
66 | "url": "https://github.com/cetr/halo-comment-yu/issues"
67 | },
68 | "homepage": "https://github.com/cetr/halo-comment-yu#readme"
69 | }
70 |
--------------------------------------------------------------------------------
/src/components/EmojiPicker/VEmojiPicker.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
15 |
16 |
17 |
18 |
80 |
81 |
83 |
--------------------------------------------------------------------------------
/src/components/EmojiPicker/EmojiList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
13 |
19 | {{ category_name == 'undefined' ? '' : category_name }}
20 |
21 |
25 |
31 |
32 |
33 |
34 |
38 |
44 |
45 |
46 |
47 |
48 |
49 |
113 |
114 |
116 |
--------------------------------------------------------------------------------
/src/utils/util.js:
--------------------------------------------------------------------------------
1 | /**
2 | * time ago
3 | * @param {*} time
4 | */
5 | export function timeAgo(time) {
6 | var currentTime = new Date().getTime()
7 | var between = currentTime - time
8 | var days = Math.floor(between / (24 * 3600 * 1000))
9 | if (days === 0) {
10 | var leave1 = between % (24 * 3600 * 1000)
11 | var hours = Math.floor(leave1 / (3600 * 1000))
12 | if (hours === 0) {
13 | var leave2 = leave1 % (3600 * 1000)
14 | var minutes = Math.floor(leave2 / (60 * 1000))
15 | if (minutes === 0) {
16 | var leave3 = leave2 % (60 * 1000)
17 | var seconds = Math.round(leave3 / 1000)
18 | return seconds + ' 秒前'
19 | }
20 | return minutes + ' 分钟前'
21 | }
22 | return hours + ' 小时前'
23 | }
24 | if (days < 0) return '刚刚'
25 | if (days < 1) {
26 | return days + ' 天前'
27 | } else {
28 | return formatDate(time, 'yyyy/MM/dd hh:mm');
29 | }
30 | }
31 |
32 | function formatDate(date, fmt) {
33 | date = new Date(date);
34 | if (/(y+)/.test(fmt)) {
35 | fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
36 | }
37 | let o = {
38 | 'M+': date.getMonth() + 1,
39 | 'd+': date.getDate(),
40 | 'h+': date.getHours(),
41 | 'm+': date.getMinutes(),
42 | 's+': date.getSeconds()
43 | };
44 | for (let k in o) {
45 | if (new RegExp(`(${k})`).test(fmt)) {
46 | let str = o[k] + '';
47 | fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
48 | }
49 | }
50 | return fmt;
51 | }
52 |
53 | function padLeftZero(str) {
54 | return ('00' + str).substr(str.length);
55 | }
56 |
57 | export function isUrl(str) {
58 | let regexp = /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/\S*)?$/
59 | if (regexp.test(str)) {
60 | return true
61 | } else {
62 | return false
63 | }
64 | }
65 |
66 | export function isEmpty(content) {
67 | return content === null || content === undefined || content === ''
68 | }
69 |
70 | export function isObject(value) {
71 | return value && typeof value === 'object' && value.constructor === Object
72 | }
73 |
74 | export function validEmail(email) {
75 | var re = /^[A-Za-z0-9]+([-_.][A-Za-z0-9]+)*@([A-Za-z0-9]+[-.])+[A-Za-z]{2,8}$/
76 | return re.test(email);
77 | }
78 |
79 | export const queryStringify = query => {
80 | const queryString = Object.keys(query)
81 | .map(key => `${key}=${encodeURIComponent(query[key] || '')}`)
82 | .join('&')
83 | return queryString
84 | }
85 |
86 | export function getUrlKey(name) {
87 | return (
88 | decodeURIComponent(
89 | (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
90 | location.href
91 | ) || "")[1].replace(/\+/g, "%20")
92 | ) || null
93 | );
94 | }
95 |
96 | export function decodeHTML(html) {
97 | /**
98 | * 特殊字符转义成HTML标签
99 | */
100 | var output, elem = document.createElement('div');
101 | elem.innerHTML = html;
102 | output = elem.innerText || elem.textContent;
103 | elem = null;
104 | return output;
105 | }
106 |
107 | export function renderedEmojiHtml(html) {
108 | const emojiData = require('../components/EmojiPicker/data/_emojis.js');
109 | for (let i = 0; i < emojiData["default"].length; i++) {
110 | let aliases = emojiData["default"][i]["aliases"].toString().trim();
111 | if (aliases != null && aliases != "") {
112 | html = html.replace(new RegExp(aliases, 'g'), emojiData["default"][i].emoji);
113 | }
114 | }
115 | return html;
116 | }
117 |
118 | export function decodeHtmlLabel(html) {
119 | /**
120 | * 转换评论中的HTML标签
121 | */
122 | // html = html.replace(new RegExp("[\\s]*.*[\\s]*[sS][cC][rR][iI][pP][tT][\\s]*.*[\\s]*>", 'g'), "</script>");
123 | // html = html.replace(new RegExp("<[\\s]*.*[\\s]*[sS][cC][rR][iI][pP][tT][\\s]*.*[\\s]*>", 'g'), "<script>");
124 | html = html.replace(new RegExp("<", 'g'), "<");
125 | html = html.replace(new RegExp(">", 'g'), ">");
126 | return html;
127 | }
128 |
129 | export function returnBr(str) {
130 | return str.replace(/\r?\n/g, "\r\n\r\n");
131 | }
132 |
--------------------------------------------------------------------------------
/src/components/Pagination.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
7 |
12 |
16 |
17 |
18 |
19 | -
24 | {{ firstPage + 1 }}
28 |
29 |
30 |
31 | -
35 | ...
36 |
37 | -
43 |
47 | {{ middlePage + 1 }}
48 |
49 |
50 |
51 | -
55 | ...
56 |
57 |
58 | -
63 |
67 | {{ lastPage + 1 }}
68 |
69 |
70 |
71 | -
75 |
79 |
83 |
84 |
85 |
86 |
87 |
88 |
198 |
--------------------------------------------------------------------------------
/src/components/Comment.vue:
--------------------------------------------------------------------------------
1 |
2 |
61 |
62 |
211 |
212 |
215 |
--------------------------------------------------------------------------------
/src/components/EmojiPicker/data/_emojis.js:
--------------------------------------------------------------------------------
1 | class Emoji {
2 | constructor(emoji, description, aliases, tags) {
3 | this.emoji = emoji;
4 | this.description = description;
5 | this.aliases = aliases;
6 | this.tags = tags;
7 | }
8 | }
9 |
10 | const emojiImgPath = "https://www.unpkg.com/halo-comment-yu@latest/cdn/img/emoji";
11 |
12 | export default [
13 | new Emoji(`
`, "", " :smile: ", []),
14 | new Emoji(`
`, "", " :lovely: ", []),
15 | new Emoji(`
`, "", " :happy: ", []),
16 | new Emoji(`
`, "", " :clap: ", []),
17 | new Emoji(`
`, "", " :whee: ", []),
18 | new Emoji(`
`, "", " :haha: ", []),
19 | new Emoji(`
`, "", " :laugh and cry: ", []),
20 | new Emoji(`
`, "", " :wink: ", []),
21 | new Emoji(`
`, "", " :greddy: ", []),
22 | new Emoji(`
`, "", " :awkward: ", []),
23 | new Emoji(`
`, "", " :sweat: ", []),
24 | new Emoji(`
`, "", " :pick nose: ", []),
25 | new Emoji(`
`, "", " :hum: ", []),
26 | new Emoji(`
`, "", " :angry: ", []),
27 | new Emoji(`
`, "", " :grievance: ", []),
28 | new Emoji(`
`, "", " :poor: ", []),
29 | new Emoji(`
`, "", " :disappoint: ", []),
30 | new Emoji(`
`, "", " :sad: ", []),
31 | new Emoji(`
`, "", " :tear: ", []),
32 | new Emoji(`
`, "", " :no way: ", []),
33 | new Emoji(`
`, "", " :shy: ", []),
34 | new Emoji(`
`, "", " :dirt: ", []),
35 | new Emoji(`
`, "", " :love you: ", []),
36 | new Emoji(`
`, "", " :kiss: ", []),
37 | new Emoji(`
`, "", " :amorousness: ", []),
38 | new Emoji(`
`, "", " :longing: ", []),
39 | new Emoji(`
`, "", " :desire: ", []),
40 | new Emoji(`
`, "", " :bad laugh: ", []),
41 | new Emoji(`
`, "", " :blackness: ", []),
42 | new Emoji(`
`, "", " :laugh without word: ", []),
43 | new Emoji(`
`, "", " :titter: ", []),
44 | new Emoji(`
`, "", " :cool: ", []),
45 | new Emoji(`
`, "", " :not easy: ", []),
46 | new Emoji(`
`, "", " :think: ", []),
47 | new Emoji(`
`, "", " :question: ", []),
48 | new Emoji(`
`, "", " :no idea: ", []),
49 | new Emoji(`
`, "", " :dizzy: ", []),
50 | new Emoji(`
`, "", " :bomb: ", []),
51 | new Emoji(`
`, "", " :bone: ", []),
52 | new Emoji(`
`, "", " :be quiet: ", []),
53 | new Emoji(`
`, "", " :shut up: ", []),
54 | new Emoji(`
`, "", " :stupid: ", []),
55 | new Emoji(`
`, "", " :surprise : ", []),
56 | new Emoji(`
`, "", " :vomit: ", []),
57 | new Emoji(`
`, "", " :cold: ", []),
58 | new Emoji(`
`, "", " :sick: ", []),
59 | new Emoji(`
`, "", " :bye: ", []),
60 | new Emoji(`
`, "", " :look down on: ", []),
61 | new Emoji(`
`, "", " :white eye: ", []),
62 | new Emoji(`
`, "", " :left hum: ", []),
63 | new Emoji(`
`, "", " :right hum: ", []),
64 | new Emoji(`
`, "", " :crazy: ", []),
65 | new Emoji(`
`, "", " :scold : ", []),
66 | new Emoji(`
`, "", " :hit on face: ", []),
67 | new Emoji(`
`, "", " :wow: ", []),
68 | new Emoji(`
`, "", " :fan: ", []),
69 | new Emoji(`
`, "", " :money: ", []),
70 | new Emoji(`
`, "", " :yawn: ", []),
71 | new Emoji(`
`, "", " :sleepy: ", []),
72 | new Emoji(`
`, "", " :sleep: ", []),
73 | new Emoji(`
`, "", " :watermelon : ", []),
74 | new Emoji(`
`, "", " :doge: ", []),
75 | new Emoji(`
`, "", " :dog: ", []),
76 | new Emoji(`
`, "", " :cat: ", []),
77 | new Emoji(`
`, "", " :thumb: ", []),
78 | new Emoji(`
`, "", " :good: ", []),
79 | new Emoji(`
`, "", " :ok: ", []),
80 | new Emoji(`
`, "", " :yeah: ", []),
81 | new Emoji(`
`, "", " :shack hand: ", []),
82 | new Emoji(`
`, "", " :bow: ", []),
83 | new Emoji(`
`, "", " :come: ", []),
84 | new Emoji(`
`, "", " :punch: ", [])
85 | ];
86 |
--------------------------------------------------------------------------------
/src/components/EmojiPicker/data/_icons.js:
--------------------------------------------------------------------------------
1 | export const categories = {
2 | activity: `
3 |
7 | `,
8 | flags: `
9 |
12 | `,
13 | foods: `
14 |
18 | `,
19 | frequenty: `
20 |
24 | `,
25 | nature: `
26 |
29 | `,
30 | objects: `
31 |
34 | `,
35 | peoples: `
36 |
39 | `,
40 | places: `
41 |
44 | `,
45 | symbols: `
46 |
49 | `
50 | };
51 |
--------------------------------------------------------------------------------
/src/components/CommentEditor.vue:
--------------------------------------------------------------------------------
1 |
2 |
186 |
187 |
388 |
--------------------------------------------------------------------------------
/src/components/CommentNode.vue:
--------------------------------------------------------------------------------
1 |
2 |
92 |
93 |
234 |
--------------------------------------------------------------------------------
/src/styles/global.scss:
--------------------------------------------------------------------------------
1 | $color: #666;
2 | $md-link-color: #1890ff;
3 |
4 | .halo-comment {
5 | position: relative;
6 | font-family: PingFang SC, Hiragino Sans GB, Microsoft YaHei, STHeiti, WenQuanYi Micro Hei, Helvetica, Arial, sans-serif;
7 | font-size: 14px;
8 | font-weight: 500;
9 | line-height: 1.8;
10 | margin: 0 auto;
11 | color: #313131;
12 | overflow: hidden;
13 | zoom: 1;
14 | text-rendering: geometricPrecision;
15 | -webkit-font-smoothing: antialiased;
16 | -moz-osx-font-smoothing: grayscale;
17 |
18 | a {
19 | text-decoration: none;
20 | color: $color;
21 | }
22 |
23 | input::-webkit-input-placeholder,
24 | textarea::-webkit-input-placeholder {
25 | color: #cccccc
26 | }
27 |
28 | * {
29 | -webkit-box-sizing: border-box;
30 | -moz-box-sizing: border-box;
31 | box-sizing: border-box;
32 | }
33 |
34 | a,
35 | abbr,
36 | acronym,
37 | address,
38 | applet,
39 | big,
40 | blockquote,
41 | body,
42 | caption,
43 | cite,
44 | code,
45 | dd,
46 | del,
47 | dfn,
48 | div,
49 | dl,
50 | dt,
51 | em,
52 | fieldset,
53 | figure,
54 | form,
55 | h1,
56 | h2,
57 | h3,
58 | h4,
59 | h5,
60 | h6,
61 | html,
62 | iframe,
63 | ins,
64 | kbd,
65 | label,
66 | legend,
67 | li,
68 | object,
69 | ol,
70 | p,
71 | pre,
72 | q,
73 | s,
74 | samp,
75 | small,
76 | span,
77 | strike,
78 | strong,
79 | sub,
80 | sup,
81 | table,
82 | tbody,
83 | td,
84 | tfoot,
85 | th,
86 | thead,
87 | tr,
88 | tt,
89 | ul,
90 | var {
91 | border: 0;
92 | font-size: 100%;
93 | font-style: inherit;
94 | font-weight: inherit;
95 | margin: 0;
96 | outline: 0;
97 | padding: 0;
98 | vertical-align: baseline;
99 | }
100 |
101 | button,
102 | input,
103 | textarea {
104 | -webkit-appearance: none;
105 | outline: none;
106 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
107 | }
108 |
109 | button:focus,
110 | input:focus,
111 | textarea:focus {
112 | outline: none;
113 | }
114 |
115 | ol,
116 | ul {
117 | list-style: none;
118 | }
119 |
120 | .comment-count {
121 | margin-bottom: 15px;
122 | }
123 |
124 | .comment-reply-title {
125 | font-size: 18px;
126 | margin-bottom: 15px;
127 | }
128 |
129 | .middle {
130 | display: inline-block;
131 | vertical-align: middle
132 | }
133 |
134 | .avatar {
135 | display: block;
136 | object-fit: cover;
137 | border-radius: 20%;
138 | width: 40px;
139 | height: 40px;
140 | cursor: pointer;
141 | transition: all 0.8s;
142 | border: 1px #e1e1e1 solid;
143 | box-shadow: 2px 2px 3px #e1e1e1;
144 | }
145 |
146 | span.input-avatar {
147 | display: block;
148 | position: absolute;
149 | left: 20px;
150 | bottom: 0px;
151 |
152 | img.avatar-img {
153 | width: 22px;
154 | height: 22px;
155 | border-radius: 100%;
156 | cursor: pointer;
157 | transition: all 0.8s;
158 | }
159 | }
160 |
161 | .comment-editor {
162 | position: relative;
163 | z-index: 1;
164 | animation: top20 500ms;
165 |
166 | .inner {
167 | margin: auto;
168 | padding: 40px 0 0;
169 | }
170 | }
171 |
172 | .comment-form {
173 | border-radius: 4px;
174 | overflow: hidden;
175 | position: relative;
176 | }
177 |
178 | .comment-form input,
179 | .comment-form textarea {
180 | box-shadow: none;
181 | resize: vertical;
182 | font-size: 14px;
183 | line-height: 20px;
184 | padding: 6px 12x;
185 | background: #fff;
186 | border: none;
187 | box-sizing: border-box;
188 | border-radius: 0;
189 | color: #333;
190 | outline: none;
191 | -webkit-appearance: none;
192 | }
193 |
194 | .comment-form input:focus,
195 | .comment-form textarea:focus {
196 | border-color: #cccccc;
197 | }
198 |
199 | .comment-input#author {
200 | padding-left: 40px;
201 | }
202 |
203 | .author-info {
204 | position: relative;
205 | overflow: hidden;
206 | margin: 0 -10px 15px;
207 |
208 | .commentator {
209 | position: relative;
210 | float: left;
211 | padding: 0 10px;
212 | width: 33.333333%;
213 |
214 | label {
215 | font-weight: 400;
216 | display: inline-block;
217 | max-width: 100%;
218 | margin-bottom: 5px;
219 |
220 | span {
221 | color: #f05050;
222 | box-sizing: border-box;
223 | }
224 | }
225 |
226 | input {
227 | font-size: 12px;
228 | width: 100%;
229 | padding: 6px 12px;
230 | border: 1px solid #ccc;
231 | border-color: rgba(135, 150, 165, .15);
232 | color: inherit;
233 | border-radius: 2px;
234 | }
235 |
236 | input#authorUrl {
237 | margin: 0;
238 | }
239 | }
240 | }
241 |
242 | .comment-textarea {
243 | position: relative;
244 | width: 100%;
245 |
246 | label {
247 | font-weight: 400;
248 | display: inline-block;
249 | max-width: 100%;
250 | margin-bottom: 5px;
251 |
252 | span {
253 | color: #f05050;
254 | box-sizing: border-box;
255 | }
256 | }
257 |
258 | .comment-preview {
259 | background: url('https://www.unpkg.com/halo-comment-yu@latest/cdn/img/background/comment_bg.webp') 100% 100% no-repeat;
260 | background-color: #fff;
261 | border: 1px #efefef solid;
262 | border-radius: 2px;
263 | background-size: 180px;
264 | font-size: 14px;
265 | line-height: 18px;
266 | width: 100%;
267 | min-height: 120px;
268 | color: #000;
269 | overflow: hidden;
270 | overflow-wrap: break-word;
271 | transition: all 0.25s ease-in-out 0s;
272 | resize: none;
273 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
274 | }
275 |
276 | .comment-preview.markdown-body {
277 | background-image: none;
278 | }
279 |
280 | textarea:focus {
281 | background-position-y: 105px;
282 | transition: all 0.25s ease-in-out 0s;
283 | }
284 | }
285 |
286 | .comment.index-1 > ol.children {
287 | padding-left: 50px;
288 | }
289 |
290 |
291 | .children {
292 | img.avatar {
293 | width: 2.225em;
294 | height: 2.225em;
295 | }
296 |
297 | .contain-main {
298 | margin-left: 43px;
299 | }
300 |
301 | .comment-time {
302 | margin-top: 3px;
303 | }
304 | }
305 |
306 | .comment-preview {
307 | position: relative;
308 | width: 100%;
309 | min-height: 90px;
310 | box-shadow: none;
311 | border: 1px solid #e1e8ed;
312 | border-radius: 5px;
313 | box-sizing: border-box;
314 | padding: 6px 12px;
315 | overflow-wrap: break-word;
316 |
317 | img {
318 | max-width: 100px;
319 | max-height: 100px;
320 | }
321 | }
322 |
323 | .comment-preview.isPreview {
324 | &:after {
325 | content: "预览模式";
326 | position: absolute;
327 | right: 5px;
328 | bottom: 5px;
329 | opacity: 0.2;
330 | font-size: 20px;
331 | background: white;
332 | border-radius: 5px;
333 | }
334 |
335 | img.vemoji {
336 | max-width: 20px !important;
337 | }
338 | }
339 |
340 | .comment-emoji-wrap {
341 | margin-bottom: 15px;
342 | }
343 |
344 | .comment-buttons {
345 | font-size: 12px;
346 | text-align: right;
347 | display: flex;
348 | display: -webkit-flex;
349 | justify-content: space-between;
350 |
351 | &.SubmitBtn {
352 | margin-bottom: 15px;
353 | }
354 |
355 | .comment-text {
356 | user-select: none;
357 | }
358 |
359 | .button-submit,
360 | .button-preview-edit {
361 | color: #fff;
362 | border: none;
363 | background: #448bff linear-gradient(45deg, #448bff, #44e9ff);
364 | padding-top: 6px;
365 | padding-bottom: 6px;
366 | transition: all .2s ease;
367 | border-radius: 50px;
368 | padding-left: 30px;
369 | padding-right: 30px;
370 | cursor: pointer;
371 |
372 | &:hover {
373 | color: #f4f4f4;
374 | opacity: .8;
375 | transition: all .2s ease;
376 | }
377 | }
378 |
379 | .preview-btn, .emoji-btn {
380 | display: inline-block;
381 | padding: 0;
382 | width: 66px;
383 | height: 24px;
384 | border-radius: 4px;
385 | position: relative;
386 | z-index: 101;
387 | font-size: 12px;
388 | text-align: center;
389 | line-height: 23px;
390 | margin-top: 3px;
391 | cursor: pointer;
392 | color: #99a2aa;
393 | fill: #99a2aa;
394 |
395 | .comment-icon {
396 | vertical-align: -3px;
397 | margin-right: 4px;
398 | }
399 |
400 | &.actived {
401 | color: #66b1ff;
402 | fill: #66b1ff;
403 | }
404 | }
405 | }
406 |
407 | .comment-loader-container {
408 | animation: top20 500ms;
409 | position: relative;
410 | text-align: center;
411 | display: flex;
412 | justify-content: center;
413 | margin: 30px 0;
414 |
415 | .comment-loader-default {
416 | display: flex;
417 | flex-flow: row nowrap;
418 | align-items: center;
419 | justify-content: space-between;
420 | width: 30px;
421 |
422 | span {
423 | width: 4px;
424 | height: 15px;
425 | background-color: #898c7b;
426 |
427 | &:nth-of-type(1) {
428 | animation: grow 1s -0.45s ease-in-out infinite;
429 | }
430 |
431 | &:nth-of-type(2) {
432 | animation: grow 1s -0.3s ease-in-out infinite;
433 | }
434 |
435 | &:nth-of-type(3) {
436 | animation: grow 1s -0.15s ease-in-out infinite;
437 | }
438 |
439 | &:nth-of-type(4) {
440 | animation: grow 1s ease-in-out infinite;
441 | }
442 | }
443 |
444 | @keyframes grow {
445 |
446 | 0%,
447 | 100% {
448 | transform: scaleY(1);
449 | }
450 |
451 | 50% {
452 | transform: scaleY(2);
453 | }
454 | }
455 | }
456 |
457 | .comment-loader-circle {
458 | border: 3px solid #898c7b;
459 | border-top-color: #fff;
460 | border-radius: 50%;
461 | width: 2.5em;
462 | height: 2.5em;
463 | animation: spin 0.7s linear infinite;
464 |
465 | @keyframes spin {
466 | to {
467 | transform: rotate(360deg);
468 | }
469 | }
470 | }
471 |
472 | .comment-loader-balls {
473 | width: 3.5em;
474 | display: flex;
475 | flex-flow: row nowrap;
476 | align-items: center;
477 | justify-content: space-between;
478 |
479 | div {
480 | width: 0.7em;
481 | height: 0.7em;
482 | border-radius: 50%;
483 | background-color: #898c7b;
484 | transform: translateY(-100%);
485 | animation: wave 0.7s ease-in-out alternate infinite;
486 |
487 | &:nth-of-type(1) {
488 | animation-delay: -0.4s;
489 | }
490 |
491 | &:nth-of-type(2) {
492 | animation-delay: -0.2s;
493 | }
494 | }
495 |
496 | @keyframes wave {
497 | from {
498 | transform: translateY(-100%);
499 | }
500 |
501 | to {
502 | transform: translateY(100%);
503 | }
504 | }
505 | }
506 | }
507 |
508 | .comment-nodes {
509 |
510 | animation: top20 1000ms;
511 |
512 | position: relative;
513 |
514 | .comment-editor {
515 | animation: bottom20 500ms;
516 |
517 | .inner {
518 | padding: 7px 0 12px;
519 | }
520 | }
521 | }
522 |
523 | .comment-load-button {
524 | margin: 30px 0;
525 | text-align: center;
526 | }
527 |
528 | .comment-empty {
529 | margin: 30px 0;
530 | text-align: center;
531 | color: #8899a6;
532 | }
533 |
534 | .comment-page {
535 | text-align: center;
536 | margin-top: 25px;
537 |
538 | .page {
539 | display: inline-block;
540 | padding: 0;
541 | margin: 0;
542 |
543 | li {
544 | display: inline;
545 | }
546 |
547 | a {
548 | position: relative;
549 | font-size: inherit;
550 | font-family: inherit;
551 | padding: 5px 10px;
552 | border: none;
553 | border-top: 1px solid #d9d9d9;
554 | border-bottom: 1px solid #d9d9d9;
555 | cursor: pointer;
556 | transition: all 0.8s;
557 | font-weight: normal;
558 | color: #111;
559 | background-color: #fff;
560 | }
561 |
562 | .prev-button {
563 | border-radius: 4px 0 0 4px;
564 | border-left: 1px solid #d9d9d9;
565 | padding: 5px 7px;
566 | }
567 |
568 | .next-button {
569 | border-radius: 0 4px 4px 0;
570 | border-right: 1px solid #d9d9d9;
571 | padding: 5px 7px;
572 | }
573 |
574 | svg {
575 | vertical-align: middle;
576 | }
577 |
578 | a.active {
579 | border-color: #111;
580 | background: #111;
581 | color: #fff;
582 | }
583 | }
584 | }
585 |
586 | .comment-nodes .index-1 {
587 | overflow: hidden;
588 | padding-bottom: 10px;
589 | }
590 |
591 | .comment-nodes li:last-child {
592 | border: 0;
593 | }
594 |
595 | .comment-nodes .commentator a:after,
596 | .comment-nodes .commentator a:before {
597 | display: none;
598 | }
599 |
600 | .comment-body {
601 | position: relative;
602 | margin: 0 auto;
603 | padding: 0;
604 | }
605 |
606 | .comment-avatar {
607 | position: relative;
608 | z-index: 1;
609 | float: left;
610 | padding: 0;
611 | }
612 |
613 | .contain-main {
614 | margin-left: 50px;
615 | }
616 |
617 | .comment-meta {
618 | line-height: 1;
619 |
620 | .useragent-info {
621 | font-size: 10px;
622 | color: #b3b3b3;
623 | }
624 |
625 | @media only screen and (max-width: 768px) {
626 | .useragent-info {
627 | //display: block;
628 | }
629 | }
630 |
631 | }
632 |
633 | .comment-author {
634 | font-size: 14px;
635 |
636 | .author-name {
637 | font-size: 16px;
638 | font-weight: 700;
639 | margin-right: 6px;
640 | }
641 |
642 | .is-admin {
643 | display: inline-flex;
644 | cursor: pointer;
645 | font-size: 20px;
646 | color: #fff;
647 | border-radius: 3px;
648 | margin: 0 -2px -5px -10px;
649 | padding: 2px 6px;
650 | background: #fb7299;
651 | justify-content: center;
652 | -webkit-justify-content: center;
653 | align-items: center;
654 | -webkit-align-items: center;
655 | vertical-align: bottom;
656 | transform: scale(0.5);
657 | }
658 | }
659 |
660 | .comment-time {
661 | display: block;
662 | margin-top: 11px;
663 | font-size: 10px;
664 | color: #b3b3b3;
665 | }
666 |
667 | .comment-id {
668 | display: block;
669 | float: right;
670 | margin-top: 6px;
671 | font-size: 12px;
672 | color: #657786;
673 | }
674 |
675 | .comment-content {
676 | padding-bottom: 10px;
677 | font-size: 14px;
678 | color: #4a5568;
679 |
680 | p {
681 | margin: 0;
682 |
683 | img {
684 | max-width: 100px;
685 | max-height: 100px;
686 | }
687 | }
688 |
689 | img.vemoji {
690 | max-width: 20px !important;
691 | }
692 | }
693 |
694 | .comment-content.markdown-body a {
695 | color: $md-link-color;
696 | }
697 |
698 | .comment-info {
699 | margin-bottom: 15px;
700 |
701 | .comment-reply {
702 | cursor: pointer;
703 | font-size: 12px;
704 | padding: 1px 5px;
705 | border-radius: 3px;
706 | line-height: 1.5;
707 | color: #dcf2f8;
708 | background-color: #23b7e5;
709 | font-weight: 700;
710 | border-radius: .25em;
711 | line-height: 1;
712 | padding: .2em .6em .3em;
713 | transition: all .2s ease-in-out;
714 | }
715 | }
716 |
717 | .comment-alert {
718 | }
719 |
720 | .comment-pre-content {
721 | padding: 7px;
722 | -webkit-box-shadow: 0 0 1px #f0f0f0;
723 | box-shadow: 0 0 1px #f0f0f0;
724 | }
725 |
726 | .alert {
727 | display: flex;
728 | display: -webkit-flex;
729 | animation: top20 500ms;
730 | border-radius: 4px;
731 | padding: 8px 16px;
732 | background-color: #f44336;
733 | color: white;
734 | opacity: 1;
735 | transition: opacity 0.6s;
736 | margin-top: 10px;
737 | justify-content: space-between;
738 | -webkit-justify-content: space-between;
739 | align-items: center;
740 | -webkit-align-items: center;
741 |
742 | &.success {
743 | background-color: #4caf50;
744 | }
745 |
746 | &.info {
747 | background-color: #2196f3;
748 | }
749 |
750 | &.warning {
751 | background-color: #ff9800;
752 | }
753 |
754 | .closebtn {
755 | color: #fff;
756 | font-weight: bold;
757 | font-size: 22px;
758 | line-height: 22px;
759 | cursor: pointer;
760 | transition: 0.3s;
761 |
762 | &:hover {
763 | color: black;
764 | }
765 | }
766 | }
767 |
768 | @keyframes top20 {
769 | 0% {
770 | opacity: 0;
771 | transform: translateY(-20px)
772 | }
773 |
774 | 100% {
775 | opacity: 1;
776 | transform: translateY(0)
777 | }
778 | }
779 |
780 | @keyframes bottom20 {
781 | 0% {
782 | opacity: 0;
783 | transform: translateY(20px)
784 | }
785 |
786 | 100% {
787 | opacity: 1;
788 | transform: translateY(0)
789 | }
790 | }
791 |
792 | // Emoji Picker Style
793 | #EmojiPicker {
794 | font-family: Noto, Twemoji, NotomojiColor, Notomoji, Symbola, sans-serif;
795 | display: inline-flex;
796 | flex-direction: column;
797 | align-items: center;
798 | overflow: hidden;
799 | width: 100%;
800 | user-select: none;
801 |
802 | #Categories {
803 | display: flex;
804 | width: 100%;
805 | flex-direction: row;
806 | align-items: center;
807 | border-bottom: 1px solid #e4e4e4;
808 | background: #f0f0f0;
809 | color: white;
810 | }
811 |
812 | .category {
813 | flex: 1;
814 | padding-top: 5px;
815 | padding-bottom: 5px;
816 | text-align: center;
817 | cursor: pointer;
818 |
819 | &.active {
820 | border-bottom: 3px solid #009688;
821 | filter: saturate(3);
822 | padding-bottom: 2px;
823 | }
824 |
825 | & > img {
826 | width: 22px;
827 | height: 22px;
828 | }
829 |
830 | &:hover {
831 | filter: saturate(3);
832 | }
833 | }
834 |
835 | #InputSearch {
836 | display: block;
837 | width: 100%;
838 | max-width: 100%;
839 | }
840 |
841 | .container-search {
842 | display: block;
843 | justify-content: center;
844 | box-sizing: border-box;
845 | width: 100%;
846 | margin: 5px 0;
847 | padding: 0 5%;
848 |
849 | input {
850 | width: 100%;
851 | font-size: 14px;
852 | padding: 8px;
853 | box-sizing: border-box;
854 | border-radius: 4px;
855 | background: #f6f6f6;
856 | color: #4a4a4a;
857 | border: 1px solid #e2e2e2;
858 | }
859 | }
860 |
861 | #Emojis {
862 | display: block;
863 | width: 100%;
864 | max-width: 100%;
865 |
866 | // Custom Scroll
867 | ::-webkit-scrollbar {
868 | border-radius: 4px;
869 | width: 4px;
870 | background: #7c7c7c5b;
871 | }
872 |
873 | ::-webkit-scrollbar-track {
874 | border-radius: 4px;
875 | }
876 |
877 | ::-webkit-scrollbar-thumb {
878 | border-radius: 4px;
879 | background: #00000038;
880 |
881 | &:hover {
882 | background: #00000062;
883 | }
884 | }
885 | }
886 |
887 | .container-emoji {
888 | overflow-x: hidden;
889 | overflow-y: scroll;
890 | -webkit-overflow-scrolling: touch;
891 | max-height: 200px;
892 | }
893 |
894 | .category-title {
895 | text-transform: uppercase;
896 | font-size: 0.8em;
897 | color: #848484;
898 |
899 | &:not(:first-of-type) {
900 | padding: 10px 0 0 16px;
901 | }
902 | }
903 |
904 | .grid-emojis {
905 | display: flex;
906 | flex-wrap: wrap;
907 | justify-content: flex-start;
908 | margin: 5px 0 0 0;
909 | align-items: flex-start;
910 | }
911 |
912 | .emoji {
913 | display: inline-block;
914 | text-align: center;
915 | font-size: 16px;
916 | padding: 5px 10px;
917 | cursor: pointer;
918 | }
919 |
920 | #VSvg {
921 | display: inline-block;
922 | vertical-align: middle;
923 | }
924 | }
925 |
926 | .vemoji {
927 | max-width: 25px !important;
928 | vertical-align: text-bottom;
929 | margin: 0 1px;
930 | display: inline-block;
931 | }
932 |
933 | .edition {
934 | float: right;
935 | color: #999;
936 | font-size: .75em;
937 | padding: .5em 0 0;
938 | }
939 | }
940 |
941 | .dark-mode {
942 | input, textarea {
943 | background-color: #232125 !important;
944 | color: #a9a9b3 !important;
945 | border: none !important;
946 | }
947 |
948 | img {
949 | filter: brightness(0.6) !important;
950 | }
951 |
952 | .comment-form {
953 | border-radius: 0;
954 | }
955 |
956 | .comment-pre-content {
957 | background-color: #232125 !important;
958 |
959 | .markdown-body {
960 | color: #a9a9b3 !important;
961 | }
962 |
963 | box-shadow: none !important;
964 | }
965 |
966 | .comment-content {
967 | background-color: #292a2d !important;
968 | color: #a9a9b3 !important;
969 | border: none !important;
970 | }
971 |
972 | .comment-preview {
973 | background-color: #232125 !important;
974 | color: #a9a9b3 !important;
975 | border: none !important;
976 | }
977 |
978 | .comment-buttons {
979 | .preview-btn {
980 | background: none !important;
981 | }
982 | }
983 |
984 | .comment-nodes .index-1 {
985 | border-bottom: 3px solid #36393c;
986 | }
987 |
988 | .comment-page {
989 | border-top: 3px solid #36393c;
990 | }
991 |
992 | .comment-page .page button {
993 | background-color: #676a6c;
994 | color: #fff;
995 | border: 1px solid #676a6c;
996 | }
997 | }
998 |
999 | @media (max-width: 991px) {
1000 | .halo-comment {
1001 | .author-info {
1002 | .commentator-author,
1003 | .commentator-email {
1004 | width: 50%;
1005 | margin-bottom: 15px;
1006 | }
1007 |
1008 | .commentator-authorUrl {
1009 | width: 100%;
1010 | margin-bottom: 15px;
1011 | }
1012 | }
1013 | }
1014 | }
1015 |
1016 | @media (max-width: 580px) {
1017 | .halo-comment {
1018 | .author-info {
1019 | .commentator {
1020 | width: 100%;
1021 | margin-bottom: 15px;
1022 | }
1023 | }
1024 |
1025 | .useragent-info {
1026 | display: block;
1027 | margin-top: 10px;
1028 | }
1029 |
1030 | .comment-meta > .comment-info {
1031 | margin-bottom: 10px;
1032 | }
1033 |
1034 | .comment-time {
1035 | margin-top: 10px;
1036 | }
1037 |
1038 | .children {
1039 | .useragent-info {
1040 | margin-top: 2px;
1041 | }
1042 |
1043 | .comment-time {
1044 | margin-top: 10px;
1045 | }
1046 | }
1047 | }
1048 | }
1049 |
1050 | @font-face {
1051 | font-family: octicons-link;
1052 | src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff');
1053 | }
1054 |
1055 | .markdown-body {
1056 | -ms-text-size-adjust: 100%;
1057 | -webkit-text-size-adjust: 100%;
1058 | color: #24292e;
1059 | line-height: 1.5;
1060 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
1061 | font-size: 16px;
1062 | line-height: 1.5;
1063 | word-wrap: break-word;
1064 |
1065 | .octicon {
1066 | display: inline-block;
1067 | fill: currentColor;
1068 | vertical-align: text-bottom;
1069 | }
1070 |
1071 | .anchor {
1072 | float: left;
1073 | line-height: 1;
1074 | margin-left: -20px;
1075 | padding-right: 4px;
1076 |
1077 | &:focus {
1078 | outline: none;
1079 | }
1080 | }
1081 |
1082 | details {
1083 | display: block;
1084 |
1085 | summary {
1086 | cursor: pointer;
1087 | }
1088 | }
1089 |
1090 | summary {
1091 | display: list-item;
1092 | }
1093 |
1094 | a {
1095 | background-color: transparent;
1096 | text-decoration: none;
1097 |
1098 | &:hover {
1099 | text-decoration: underline;
1100 | }
1101 |
1102 | &:not([href]) {
1103 | color: inherit;
1104 | text-decoration: none;
1105 | }
1106 | }
1107 |
1108 | strong {
1109 | font-weight: inherit;
1110 | font-weight: bolder;
1111 | font-weight: 600;
1112 | }
1113 |
1114 | h1 {
1115 | font-size: 2em;
1116 | margin: .67em 0;
1117 | font-size: 32px;
1118 | font-size: 2em;
1119 | }
1120 |
1121 | img {
1122 | border-style: none;
1123 | box-sizing: content-box;
1124 | max-width: 100%;
1125 | }
1126 |
1127 | hr {
1128 | box-sizing: content-box;
1129 | height: 0;
1130 | overflow: visible;
1131 | background: transparent;
1132 | border: 0;
1133 | border-bottom: 1px solid #dfe2e5;
1134 | height: 0;
1135 | margin: 15px 0;
1136 | overflow: hidden;
1137 | background-color: #e1e4e8;
1138 | border: 0;
1139 | height: .25em;
1140 | margin: 24px 0;
1141 | padding: 0;
1142 | border-bottom-color: #eee;
1143 |
1144 | &:before {
1145 | content: "";
1146 | display: table;
1147 | }
1148 |
1149 | &:after {
1150 | clear: both;
1151 | content: "";
1152 | display: table;
1153 | }
1154 | }
1155 |
1156 | input {
1157 | font: inherit;
1158 | margin: 0;
1159 | overflow: visible;
1160 | font-family: inherit;
1161 | font-size: inherit;
1162 | line-height: inherit;
1163 | }
1164 |
1165 | [type=checkbox] {
1166 | box-sizing: border-box;
1167 | padding: 0;
1168 | }
1169 |
1170 | * {
1171 | box-sizing: border-box;
1172 | }
1173 |
1174 | table {
1175 | border-collapse: collapse;
1176 | border-spacing: 0;
1177 | display: block;
1178 | overflow: auto;
1179 | width: 100%;
1180 |
1181 | th {
1182 | font-weight: 600;
1183 | }
1184 |
1185 | tr {
1186 | background-color: #fff;
1187 | border-top: 1px solid #c6cbd1;
1188 |
1189 | &:nth-child(2n) {
1190 | background-color: #f6f8fa;
1191 | }
1192 | }
1193 | }
1194 |
1195 | h2 {
1196 | font-size: 24px;
1197 | font-size: 1.5em;
1198 | }
1199 |
1200 | h3 {
1201 | font-size: 20px;
1202 | font-size: 1.25em;
1203 | }
1204 |
1205 | h4 {
1206 | font-size: 16px;
1207 | font-size: 1em;
1208 | }
1209 |
1210 | h5 {
1211 | font-size: 14px;
1212 | font-size: .875em;
1213 | }
1214 |
1215 | h6 {
1216 | font-size: 12px;
1217 | color: #6a737d;
1218 | font-size: .85em;
1219 | }
1220 |
1221 | p {
1222 | margin-bottom: 10px;
1223 | margin-top: 0;
1224 | }
1225 |
1226 | blockquote {
1227 | margin: 0;
1228 | border-left: .25em solid #dfe2e5;
1229 | color: #6a737d;
1230 | padding: 0 1em;
1231 |
1232 | & > :first-child {
1233 | margin-top: 0;
1234 | }
1235 |
1236 | & > :last-child {
1237 | margin-bottom: 0;
1238 | }
1239 | }
1240 |
1241 | dd {
1242 | margin-left: 0;
1243 | }
1244 |
1245 | pre {
1246 | margin-bottom: 0;
1247 | margin-top: 0;
1248 | word-wrap: normal;
1249 |
1250 | & > code {
1251 | background: transparent;
1252 | border: 0;
1253 | font-size: 100%;
1254 | margin: 0;
1255 | padding: 0;
1256 | white-space: pre;
1257 | word-break: normal;
1258 | }
1259 |
1260 | code {
1261 | background-color: transparent;
1262 | border: 0;
1263 | display: inline;
1264 | line-height: inherit;
1265 | margin: 0;
1266 | max-width: auto;
1267 | overflow: visible;
1268 | padding: 0;
1269 | word-wrap: normal;
1270 | }
1271 | }
1272 |
1273 | li {
1274 | word-wrap: break-all;
1275 |
1276 | & > p {
1277 | margin-top: 16px;
1278 | }
1279 |
1280 | & + li {
1281 | margin-top: .25em;
1282 | }
1283 | }
1284 |
1285 | dl {
1286 | padding: 0;
1287 |
1288 | dt {
1289 | font-size: 1em;
1290 | font-style: italic;
1291 | font-weight: 600;
1292 | margin-top: 16px;
1293 | padding: 0;
1294 | }
1295 |
1296 | dd {
1297 | margin-bottom: 16px;
1298 | padding: 0 16px;
1299 | }
1300 | }
1301 |
1302 | img[align=right] {
1303 | padding-left: 20px;
1304 | }
1305 |
1306 | img[align=left] {
1307 | padding-right: 20px;
1308 | }
1309 |
1310 | code {
1311 | background-color: rgba(27, 31, 35, .05);
1312 | border-radius: 3px;
1313 | font-size: 85%;
1314 | margin: 0;
1315 | padding: .2em .4em;
1316 | }
1317 |
1318 | .highlight {
1319 | margin-bottom: 16px;
1320 |
1321 | pre {
1322 | margin-bottom: 0;
1323 | word-break: normal;
1324 | }
1325 | }
1326 | }
1327 |
1328 | .markdown-body a:active,
1329 | .markdown-body a:hover {
1330 | outline-width: 0;
1331 | }
1332 |
1333 | .markdown-body code,
1334 | .markdown-body pre {
1335 | font-family: monospace, monospace;
1336 | font-size: 1em;
1337 | }
1338 |
1339 | .markdown-body td,
1340 | .markdown-body th {
1341 | padding: 0;
1342 | }
1343 |
1344 | .markdown-body h1,
1345 | .markdown-body h2,
1346 | .markdown-body h3,
1347 | .markdown-body h4,
1348 | .markdown-body h5,
1349 | .markdown-body h6 {
1350 | margin-bottom: 0;
1351 | margin-top: 0;
1352 | font-weight: 600;
1353 | line-height: 1.25;
1354 | margin-bottom: 16px;
1355 | margin-top: 24px;
1356 | }
1357 |
1358 | .markdown-body h1,
1359 | .markdown-body h2 {
1360 | font-weight: 600;
1361 | border-bottom: 1px solid #eaecef;
1362 | padding-bottom: .3em;
1363 | }
1364 |
1365 | .markdown-body h3,
1366 | .markdown-body h4 {
1367 | font-weight: 600;
1368 | }
1369 |
1370 | .markdown-body h5,
1371 | .markdown-body h6 {
1372 | font-weight: 600;
1373 | }
1374 |
1375 | .markdown-body ol,
1376 | .markdown-body ul {
1377 | margin-bottom: 0;
1378 | margin-top: 0;
1379 | padding-left: 0;
1380 | padding-left: 2em;
1381 | }
1382 |
1383 | .markdown-body ol ol,
1384 | .markdown-body ul ol {
1385 | list-style-type: lower-roman;
1386 | }
1387 |
1388 | .markdown-body ol ol ol,
1389 | .markdown-body ol ul ol,
1390 | .markdown-body ul ol ol,
1391 | .markdown-body ul ul ol {
1392 | list-style-type: lower-alpha;
1393 | }
1394 |
1395 | .markdown-body code,
1396 | .markdown-body pre {
1397 | font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;
1398 | font-size: 12px;
1399 | }
1400 |
1401 | .markdown-body input::-webkit-inner-spin-button,
1402 | .markdown-body input::-webkit-outer-spin-button {
1403 | -webkit-appearance: none;
1404 | appearance: none;
1405 | margin: 0;
1406 | }
1407 |
1408 | .markdown-body blockquote,
1409 | .markdown-body dl,
1410 | .markdown-body ol,
1411 | .markdown-body p,
1412 | .markdown-body pre,
1413 | .markdown-body table,
1414 | .markdown-body ul {
1415 | margin-bottom: 16px;
1416 | margin-top: 0;
1417 | }
1418 |
1419 | .markdown-body ol ol,
1420 | .markdown-body ol ul,
1421 | .markdown-body ul ol,
1422 | .markdown-body ul ul {
1423 | margin-bottom: 0;
1424 | margin-top: 0;
1425 | }
1426 |
1427 | .markdown-body table td,
1428 | .markdown-body table th {
1429 | border: 1px solid #dfe2e5;
1430 | padding: 6px 13px;
1431 | }
1432 |
1433 | .markdown-body .highlight pre,
1434 | .markdown-body pre {
1435 | background-color: #f6f8fa;
1436 | border-radius: 3px;
1437 | font-size: 85%;
1438 | line-height: 1.45;
1439 | overflow: auto;
1440 | padding: 16px;
1441 | }
1442 |
--------------------------------------------------------------------------------