mirror of
https://github.com/Mabbs/mabbs.github.io
synced 2026-07-22 04:53:27 +08:00
Compare commits
100 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c7cabd991a | |||
| 9382acdabd | |||
| 78d65eae30 | |||
| 7a450f5ec2 | |||
| 9170efdaa3 | |||
| d3eefbba2d | |||
| 3bfbd78385 | |||
| 8c26bc57d5 | |||
| 85594ca8b1 | |||
| 05ba801c23 | |||
| 2f6eadd14f | |||
| f455ccfdd7 | |||
| 87807dd50c | |||
| 85d90f5f2f | |||
| aa83c0efc1 | |||
| b0bf30adcd | |||
| ae668ef412 | |||
| 763f0768ea | |||
| b0704e26fc | |||
| 1b4fd0de9b | |||
| eee3103f93 | |||
| 3ab930348e | |||
| 19f5a7b7f9 | |||
| e6bf9e886e | |||
| 82d6628c12 | |||
| e7bc272a81 | |||
| 7785bc18c7 | |||
| 9a0af3f555 | |||
| b1d25236a5 | |||
| 7ce15b01f8 | |||
| c374f914ac | |||
| 24f8def5ab | |||
| 796511e5eb | |||
| bb46247e97 | |||
| 4fb00a1975 | |||
| e1977bd6ae | |||
| 4d12271d57 | |||
| 433d5110c2 | |||
| b666bd16b2 | |||
| bc094788c2 | |||
| c0b1009935 | |||
| 129c4d1b5b | |||
| a8b9118a20 | |||
| dff8a2d2c9 | |||
| 2952d9f63e | |||
| 3de3d63d77 | |||
| 3dab9f333a | |||
| 85aa965218 | |||
| 0e065bf282 | |||
| 680afdca5a | |||
| 9e7e727897 | |||
| f5accbcad4 | |||
| d3ef0a278b | |||
| 38c549606e | |||
| 443d65ac50 | |||
| c8ce8de1d9 | |||
| 03d9517241 | |||
| 9b9efd0f60 | |||
| 07a3d18350 | |||
| 550321e80a | |||
| 50c6c49c4c | |||
| 593b4fa003 | |||
| 46f1b8d742 | |||
| 7a525073f9 | |||
| dc37b70586 | |||
| 2fd191d418 | |||
| 99ec7de3cd | |||
| cd294479e0 | |||
| b7ab4e6356 | |||
| 934c04aea7 | |||
| 5c7773fb59 | |||
| 41ce7aabb0 | |||
| cbe4db5992 | |||
| 04e63388b6 | |||
| 106aa95def | |||
| f1e7070380 | |||
| 10a3521795 | |||
| 881ed13576 | |||
| 982a87e0bf | |||
| 5097364988 | |||
| c437b255f1 | |||
| efaaa32674 | |||
| 8a51f7a942 | |||
| afe8b95115 | |||
| 2aad4be863 | |||
| 74cb7d028c | |||
| d74fe7b4b8 | |||
| 8f7d02697d | |||
| 4afea923c5 | |||
| e6281bfa5f | |||
| a4e9d17cf1 | |||
| 975fcf9d8e | |||
| 1734d36dd5 | |||
| eefdb73475 | |||
| c622346eaa | |||
| 7609bb0b8f | |||
| 2298c9b271 | |||
| f9abd1e5d7 | |||
| 62ea62e8e8 | |||
| 3dc82a814a |
+2
-2
@@ -6,14 +6,14 @@
|
||||
|
||||
# Template project: https://gitlab.com/pages/jekyll
|
||||
# Docs: https://docs.gitlab.com/ee/pages/
|
||||
image: ruby:2.6
|
||||
image: ruby:2.7
|
||||
|
||||
variables:
|
||||
JEKYLL_ENV: production
|
||||
LC_ALL: C.UTF-8
|
||||
|
||||
before_script:
|
||||
- gem install bundler
|
||||
- gem install bundler -v 2.4.22
|
||||
- bundle install
|
||||
|
||||
pages:
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
5b60338bca964816af2f0b76965a1b84
|
||||
@@ -1,11 +1,14 @@
|
||||
source "https://rubygems.org"
|
||||
gem "jekyll", "~> 4.1.0"
|
||||
gem "jekyll", "~> 3.9.3"
|
||||
group :jekyll_plugins do
|
||||
gem "jekyll-gist"
|
||||
gem "jekyll-coffeescript"
|
||||
gem "jekyll-assets"
|
||||
gem "jekyll-sitemap"
|
||||
gem "jekyll-feed"
|
||||
gem "jekyll-gist", "~> 1.5.0"
|
||||
gem "jekyll-coffeescript", "~> 1.1.1"
|
||||
gem "jekyll-assets", "~> 1.0.0"
|
||||
gem "jekyll-sitemap", "~> 1.4.0"
|
||||
gem "jekyll-feed", "~> 0.15.1"
|
||||
gem "jekyll-include-cache", "~> 0.2.1"
|
||||
gem "jekyll-theme-minimal"
|
||||
gem "jekyll-paginate"
|
||||
gem "jekyll-paginate", "~> 1.1.0"
|
||||
gem "kramdown-parser-gfm", "~> 1.1.0"
|
||||
gem "kramdown", "~> 2.3.2"
|
||||
end
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
background-color: rgba(74, 59, 114,0.9);
|
||||
}
|
||||
.live_talk_input_name_body{
|
||||
width:70px;
|
||||
width:100px;
|
||||
box-sizing:border-box;
|
||||
height:24px;
|
||||
border: 2px solid rgb(223, 179, 241);
|
||||
|
||||
@@ -158,7 +158,7 @@ if(!norunFlag){
|
||||
function showHitokoto(){
|
||||
if(sessionStorage.getItem("Sleepy")!=="1"){
|
||||
if(!AITalkFlag){
|
||||
$.getJSON('https://v1.hitokoto.cn/',function(result){
|
||||
$.getJSON('https://hitokoto.mayx.eu.org/',function(result){
|
||||
talkValTimer();
|
||||
showMessage(result.hitokoto, 0);
|
||||
});
|
||||
@@ -188,7 +188,26 @@ if(!norunFlag){
|
||||
if(Array.isArray(text)) text = text[Math.floor(Math.random() * text.length + 1)-1];
|
||||
//console.log('showMessage', text);
|
||||
$('.message').stop();
|
||||
$('.message').html(text);
|
||||
if(text instanceof EventSource){
|
||||
var outputContainer = $('.message')[0];
|
||||
var eventFlag = false;
|
||||
text.onmessage = (event) => {
|
||||
if (event.data == "[DONE]") {
|
||||
text.close();
|
||||
return;
|
||||
} else {
|
||||
if(!eventFlag){
|
||||
talkValTimer();
|
||||
outputContainer.textContent = "";
|
||||
eventFlag = true;
|
||||
}
|
||||
const data = JSON.parse(event.data);
|
||||
outputContainer.textContent += data.response;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$('.message').html(text);
|
||||
}
|
||||
$('.message').fadeTo(200, 1);
|
||||
//if (timeout === null) timeout = 5000;
|
||||
//hideMessage(timeout);
|
||||
@@ -275,36 +294,18 @@ if(!norunFlag){
|
||||
});
|
||||
$('#talk_send').on('click',function(){
|
||||
var info_ = $('#AIuserText').val();
|
||||
var userid_ = $('#AIuserName').val();
|
||||
// var userid_ = $('#AIuserName').val();
|
||||
let add_id = "";
|
||||
if($('#load_this').prop("checked")){
|
||||
add_id = "&id="+encodeURIComponent($('#post_id').val());
|
||||
}
|
||||
if(info_ == "" ){
|
||||
showMessage('写点什么吧!',0);
|
||||
return;
|
||||
}
|
||||
if(userid_ == ""){
|
||||
showMessage('聊之前请告诉我你的名字吧!',0);
|
||||
return;
|
||||
}
|
||||
showMessage('思考中~', 0);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: talkAPI,
|
||||
data: {
|
||||
"info":info_,
|
||||
"userid":userid_
|
||||
},
|
||||
success: function(res) {
|
||||
if(res.code !== 100000){
|
||||
talkValTimer();
|
||||
showMessage('似乎有什么错误,请和站长联系!',0);
|
||||
}else{
|
||||
talkValTimer();
|
||||
showMessage(res.text,0);
|
||||
}
|
||||
console.log(res);
|
||||
$('#AIuserText').val("");
|
||||
sessionStorage.setItem("live2duser", userid_);
|
||||
}
|
||||
});
|
||||
const evSource = new EventSource(talkAPI + "?info=" + encodeURIComponent(info_) + add_id);
|
||||
showMessage(evSource);
|
||||
});
|
||||
}else{
|
||||
$('#showInfoBtn').hide();
|
||||
@@ -379,11 +380,11 @@ if(!norunFlag){
|
||||
showMessage('音乐似乎加载不出来了呢!',0);
|
||||
});
|
||||
}
|
||||
//获取用户名
|
||||
var live2dUser = sessionStorage.getItem("live2duser");
|
||||
if(live2dUser !== null){
|
||||
$('#AIuserName').val(live2dUser);
|
||||
}
|
||||
// //获取用户名
|
||||
// var live2dUser = sessionStorage.getItem("live2duser");
|
||||
// if(live2dUser !== null){
|
||||
// $('#AIuserName').val(live2dUser);
|
||||
// }
|
||||
//获取位置
|
||||
var landL = sessionStorage.getItem("historywidth");
|
||||
var landB = sessionStorage.getItem("historyheight");
|
||||
|
||||
@@ -14,17 +14,21 @@ Powered by [Jekyll](https://github.com/jekyll/jekyll)
|
||||
[jekyll-toc](https://github.com/allejo/jekyll-toc)
|
||||
[Live2dHistoire](https://github.com/eeg1412/Live2dHistoire)
|
||||
[Simple-Jekyll-Search](https://github.com/christian-fei/Simple-Jekyll-Search)
|
||||
[jekyll-anchor-headings](https://github.com/allejo/jekyll-anchor-headings)
|
||||
|
||||
## 使用的网络资源
|
||||
[Github](https://github.com/) | 包含:
|
||||
[Github](https://github.com/) | 包含:
|
||||
- Issue
|
||||
- Pages
|
||||
- Git
|
||||
|
||||
|
||||
[Cloudflare](https://www.cloudflare.com/) | 包含:
|
||||
- CDN、规则以及缓存
|
||||
- Workers、D1 SQL 数据库、Vectorize 数据库、AI
|
||||
|
||||
[网易云音乐](https://music.163.com/)
|
||||
[一言](https://hitokoto.cn/)
|
||||
[CDNJS](https://cdnjs.com/)
|
||||
[unpkg](https://unpkg.com/)
|
||||
[jsDelivr](https://www.jsdelivr.com/)
|
||||
|
||||
## 版权声明
|
||||
未经作者同意,请勿转载
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
theme: jekyll-theme-minimal
|
||||
title: Mayx的博客
|
||||
logo: https://avatars0.githubusercontent.com/u/17966333
|
||||
lang: zh-CN
|
||||
author: mayx
|
||||
description: Mayx's Home Page
|
||||
timezone: Asia/Shanghai
|
||||
@@ -9,6 +10,7 @@ paginate: 7
|
||||
plugins:
|
||||
- jekyll-sitemap
|
||||
- jekyll-feed
|
||||
- jekyll-include-cache
|
||||
feed:
|
||||
path: atom.xml
|
||||
google_analytics: UA-137710294-1
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
title,link,feed_url,description
|
||||
花火学园,https://www.sayhanabi.net/,,和谐融洽的ACG交流以及资源聚集地
|
||||
资源统筹局,https://gkdworld.com/,,统筹保管用户分享的资源
|
||||
贫困的蚊子,https://mozz.ie/,https://mozz.ie/index.xml,*No description*
|
||||
极客兔兔,https://geektutu.com/,https://geektutu.com/atom.xml,致力于分享有趣的技术实践
|
||||
维基萌,https://www.wikimoe.com/,https://www.wikimoe.com/rss,萌即是正义!一名热爱acg的前端设计师的小站!
|
||||
7gugu's blog,https://www.7gugu.com/,https://7gugu.com/index.php/feed/,"一个用来存放我爱好的地方,编程,摄影之类的空间"
|
||||
云游君,https://www.yunyoujun.cn/,https://www.yunyoujun.cn/atom.xml,希望能成为一个有趣的人。
|
||||
Kingfish404,https://blog.kingfish404.cn/,https://blog.kingfish404.cn/index.xml,"Stay curious,stay naive. WUT. Jin Yu's Blog"
|
||||
FKUN,https://blog.fkun.tech/,https://blog.fkun.tech/feed/,*No description*
|
||||
Sinofine,https://sinofine.me/,https://sinofine.me/atom.xml,*No description*
|
||||
JiaoYuan's blog,https://yuanj.top/,https://yuanj.top/index.xml,思绪来得快去得也快,偶尔会在这里停留
|
||||
花生莲子粥,https://blog.hslzz.cn/,https://blog.hslzz.cn/atom.xml,与世无争,不染于泥
|
||||
南蛮子懋和,https://www.dao.js.cn/,https://www.dao.js.cn/feed.php,李懋和,俗名李栋梁。书法、国画爱好者,互联网安全与前端建设者。
|
||||
|
@@ -0,0 +1,24 @@
|
||||
proxies:
|
||||
- https://blog.mayx.workers.dev/
|
||||
- https://mayx.deno.dev/
|
||||
- https://mayx.glitch.me/
|
||||
- https://yuki.gear.host/
|
||||
- https://mayx.serv00.net/
|
||||
mirrors:
|
||||
- https://mayx.gitlab.io/
|
||||
- https://mayx.pages.dev/
|
||||
- https://mayx.eu.org/
|
||||
- https://mayx.vercel.app/
|
||||
- https://mayx.netlify.app/
|
||||
- https://mayx.4everland.app/
|
||||
- https://mayx.dappling.network/
|
||||
- https://mayx-blog.statichost.eu/
|
||||
others:
|
||||
- https://unmayx.blogspot.com/
|
||||
- https://unmayx.blog.fc2blog.us/
|
||||
- https://unmayx.wordpress.com/
|
||||
- https://mayx.code.blog/
|
||||
- https://mayx.home.blog/
|
||||
- https://unmayx.medium.com/
|
||||
- https://mayx.cnblogs.com/
|
||||
- https://mayx.xlog.app/
|
||||
@@ -0,0 +1,174 @@
|
||||
{% capture headingsWorkspace %}
|
||||
{% comment %}
|
||||
Copyright (c) 2018 Vladimir "allejo" Jimenez
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
{% endcomment %}
|
||||
{% comment %}
|
||||
Version 1.0.13
|
||||
https://github.com/allejo/jekyll-anchor-headings
|
||||
|
||||
"Be the pull request you wish to see in the world." ~Ben Balter
|
||||
|
||||
Usage:
|
||||
{% include anchor_headings.html html=content anchorBody="#" %}
|
||||
|
||||
Parameters:
|
||||
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
|
||||
|
||||
Optional Parameters:
|
||||
* beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content
|
||||
* headerAttrs (string) : '' - Any custom HTML attributes that will be added to the heading tag; you may NOT use `id`;
|
||||
the `%heading%` and `%html_id%` placeholders are available
|
||||
* anchorAttrs (string) : '' - Any custom HTML attributes that will be added to the `<a>` tag; you may NOT use `href`, `class` or `title`;
|
||||
the `%heading%` and `%html_id%` placeholders are available
|
||||
* anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available
|
||||
* anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space
|
||||
* anchorTitle (string) : '' - The `title` attribute that will be used for anchors
|
||||
* h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored
|
||||
* h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored
|
||||
* bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content
|
||||
* bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content
|
||||
* generateId (true) : false - Set to true if a header without id should generate an id to use.
|
||||
|
||||
Output:
|
||||
The original HTML with the addition of anchors inside of all of the h1-h6 headings.
|
||||
{% endcomment %}
|
||||
|
||||
{% assign minHeader = include.h_min | default: 1 %}
|
||||
{% assign maxHeader = include.h_max | default: 6 %}
|
||||
{% assign beforeHeading = include.beforeHeading %}
|
||||
{% assign headerAttrs = include.headerAttrs %}
|
||||
{% assign nodes = include.html | split: '<h' %}
|
||||
|
||||
{% capture edited_headings %}{% endcapture %}
|
||||
|
||||
{% for _node in nodes %}
|
||||
{% capture node %}{{ _node | strip }}{% endcapture %}
|
||||
|
||||
{% if node == "" %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
|
||||
{% assign nextChar = node | replace: '"', '' | strip | slice: 0, 1 %}
|
||||
{% assign headerLevel = nextChar | times: 1 %}
|
||||
|
||||
<!-- If the level is cast to 0, it means it's not a h1-h6 tag, so let's see if we need to fix it -->
|
||||
{% if headerLevel == 0 %}
|
||||
<!-- Split up the node based on closing angle brackets and get the first one. -->
|
||||
{% assign firstChunk = node | split: '>' | first %}
|
||||
|
||||
<!-- If the first chunk does NOT contain a '<', that means we've broken another HTML tag that starts with 'h' -->
|
||||
{% unless firstChunk contains '<' %}
|
||||
{% capture node %}<h{{ node }}{% endcapture %}
|
||||
{% endunless %}
|
||||
|
||||
{% capture edited_headings %}{{ edited_headings }}{{ node }}{% endcapture %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
|
||||
{% capture _closingTag %}</h{{ headerLevel }}>{% endcapture %}
|
||||
{% assign _workspace = node | split: _closingTag %}
|
||||
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
|
||||
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
|
||||
{% assign escaped_header = header | strip_html | strip %}
|
||||
|
||||
{% assign _classWorkspace = _workspace[0] | split: 'class="' %}
|
||||
{% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
|
||||
{% assign _html_class = _classWorkspace[0] %}
|
||||
|
||||
{% if _html_class contains "no_anchor" %}
|
||||
{% assign skip_anchor = true %}
|
||||
{% else %}
|
||||
{% assign skip_anchor = false %}
|
||||
{% endif %}
|
||||
|
||||
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
|
||||
{% if _idWorkspace[1] %}
|
||||
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
|
||||
{% assign html_id = _idWorkspace[0] %}
|
||||
{% assign h_attrs = headerAttrs %}
|
||||
{% elsif include.generateId %}
|
||||
<!-- If the header did not have an id we create one. -->
|
||||
{% assign html_id = escaped_header | slugify %}
|
||||
{% if html_id == "" %}
|
||||
{% assign html_id = false %}
|
||||
{% endif %}
|
||||
<!-- Append the generated id to other potential header attributes. -->
|
||||
{% capture h_attrs %}{{ headerAttrs }} id="%html_id%"{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
<!-- Build the anchor to inject for our heading -->
|
||||
{% capture anchor %}{% endcapture %}
|
||||
|
||||
{% if skip_anchor == false and html_id and headerLevel >= minHeader and headerLevel <= maxHeader %}
|
||||
{% if h_attrs %}
|
||||
{% capture _hAttrToStrip %}{{ _hAttrToStrip | split: '>' | first }} {{ h_attrs | strip | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}>{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% capture anchor %}href="#{{ html_id }}"{% endcapture %}
|
||||
|
||||
{% if include.anchorClass %}
|
||||
{% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.anchorTitle %}
|
||||
{% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', escaped_header }}"{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.anchorAttrs %}
|
||||
{% capture anchor %}{{ anchor }} {{ include.anchorAttrs | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% capture anchor %}<a {{ anchor }}>{{ include.anchorBody | replace: '%heading%', escaped_header | default: '' }}</a>{% endcapture %}
|
||||
|
||||
<!-- In order to prevent adding extra space after a heading, we'll let the 'anchor' value contain it -->
|
||||
{% if beforeHeading %}
|
||||
{% capture anchor %}{{ anchor }} {% endcapture %}
|
||||
{% else %}
|
||||
{% capture anchor %} {{ anchor }}{% endcapture %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% capture new_heading %}
|
||||
<h{{ _hAttrToStrip }}
|
||||
{{ include.bodyPrefix }}
|
||||
{% if beforeHeading %}
|
||||
{{ anchor }}{{ header }}
|
||||
{% else %}
|
||||
{{ header }}{{ anchor }}
|
||||
{% endif %}
|
||||
{{ include.bodySuffix }}
|
||||
</h{{ headerLevel }}>
|
||||
{% endcapture %}
|
||||
|
||||
<!--
|
||||
If we have content after the `</hX>` tag, then we'll want to append that here so we don't lost any content.
|
||||
-->
|
||||
{% assign chunkCount = _workspace | size %}
|
||||
{% if chunkCount > 1 %}
|
||||
{% capture new_heading %}{{ new_heading }}{{ _workspace | last }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% capture edited_headings %}{{ edited_headings }}{{ new_heading }}{% endcapture %}
|
||||
{% endfor %}
|
||||
{% endcapture %}{% assign headingsWorkspace = '' %}{{ edited_headings | strip }}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user