mirror of
https://www.gitlink.org.cn/mayx/mayx.gitlink.net
synced 2026-05-27 20:12:43 +00:00
Compare commits
3 Commits
b25a864ee3
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
156f964333 | ||
|
|
481df19596 | ||
|
|
1a529143a8 |
@@ -48,16 +48,13 @@ http://111.231.146.230:8418/mayx/blog
|
||||
https://git.pwaapp.cc/mayx/blog
|
||||
https://an360.top/mayx/blog
|
||||
http://106.15.78.64:3000/mayx/blog
|
||||
https://git.wisder.net/mayx/blog
|
||||
http://111.119.244.185:3000/mayx/blog
|
||||
http://110.41.179.36:13000/mayx/blog
|
||||
https://git.influxfin.com/mayx/blog
|
||||
http://219.157.255.213:25311/mayx/blog
|
||||
https://git.vekus.ru/mayx/blog
|
||||
http://116.204.75.78:6180/mayx/blog
|
||||
http://109.228.48.121:8000/mayx/blog
|
||||
http://27.124.12.222:3000/mayx/blog
|
||||
https://git.sayndone.ru/mayx/blog
|
||||
https://gitea.hintsight.com/mayx/blog
|
||||
http://blackobelisk.xyz:3000/mayx/blog
|
||||
https://git.the-kn.com/mayx/blog
|
||||
@@ -166,7 +163,6 @@ http://210.245.20.73:3333/mayx/blog
|
||||
http://43.248.97.109:3000/mayx/blog
|
||||
http://113.207.86.104:3080/mayx/blog
|
||||
http://39.96.195.72:10082/mayx/blog
|
||||
http://8.148.24.160:3000/mayx/blog
|
||||
https://221.219.181.35:30000/mayx/blog
|
||||
http://172.172.102.93:3000/mayx/blog
|
||||
http://115.120.245.164:3000/mayx/blog
|
||||
@@ -268,7 +264,6 @@ https://git.cenoq.com/mayx/blog
|
||||
http://8.152.205.35:3000/mayx/blog
|
||||
http://120.210.80.160:3000/mayx/blog
|
||||
http://1.95.192.200:59300/mayx/blog
|
||||
https://git.medis.com.vn/mayx/blog
|
||||
http://194.5.152.156:3000/mayx/blog
|
||||
http://8.155.172.147:3001/mayx/blog
|
||||
https://git.erfmann.dev/mayx/blog
|
||||
@@ -359,7 +354,6 @@ https://git.veraskolivna.net/mayx/blog
|
||||
https://git.lifetop.net/mayx/blog
|
||||
https://gitea.jnyuxia.com/mayx/blog
|
||||
http://git.liuhung.com/mayx/blog
|
||||
https://git.secretserver.club/mayx/blog
|
||||
https://gitea.adber.tech/mayx/blog
|
||||
https://gitea.hello.faith/mayx/blog
|
||||
https://tea.neuron.my/mayx/blog
|
||||
@@ -368,14 +362,12 @@ https://git.adityagupta.dev/mayx/blog
|
||||
https://git.danpeak.co.uk/mayx/blog
|
||||
https://gitea.mynas-lechner.de/mayx/blog
|
||||
https://git.automathon.org/mayx/blog
|
||||
https://aeterna.cim.mcgill.ca/mayx/blog
|
||||
https://git.esen.gay/mayx/blog
|
||||
https://git.webtims.ru/mayx/blog
|
||||
https://gitea.personalsoftware.space/mayx/blog
|
||||
http://gitea.yiban.com.tw:3030/mayx/blog
|
||||
https://gitlab.iplusus.com/mayx/blog
|
||||
https://git.cyberuk.me/mayx/blog
|
||||
https://git.privezishop.ru/mayx/blog
|
||||
https://gitea.zachl.tech/mayx/blog
|
||||
https://git.miasma-os.com/mayx/blog
|
||||
https://gitea.nacsity.cn/mayx/blog
|
||||
@@ -392,7 +384,6 @@ http://49.232.183.190:3000/mayx/blog_cn
|
||||
http://git.zxkedu.com:33769/mayx/blog_cn
|
||||
https://code.wemediacn.com/mayx/blog_cn
|
||||
https://gitea.shizuka.icu/mayx/blog_cn
|
||||
http://43.139.2.237:3000/mayx/blog_cn
|
||||
http://51.159.198.233:3000/mayx/blog
|
||||
https://gitea.adriangonzalezbarbosa.eu/mayx/blog
|
||||
https://git.legatus.ru/mayx/blog
|
||||
@@ -439,7 +430,6 @@ http://47.117.245.9:17701/mayx/blog_cn
|
||||
https://git.sunlix.one/mayx/blog_cn
|
||||
http://47.106.222.181:20511/mayx/blog_cn
|
||||
http://101.43.95.130:3001/mayx/blog_cn
|
||||
http://39.101.170.62:9080/mayx/blog_cn
|
||||
https://gitea.myat4.com/mayx/blog_cn
|
||||
http://118.24.161.24:3000/mayx/blog_cn
|
||||
http://githanea.s.odn.cc/mayx/blog_cn
|
||||
@@ -481,7 +471,6 @@ https://papi.tkpups.com/mayx/blog
|
||||
https://git.beyond-a-i.org/mayx/blog
|
||||
http://huanghomenas2.myqnapcloud.com:4000/mayx/blog_cn
|
||||
http://43.142.166.108:10082/mayx/blog_cn
|
||||
https://git.ueda.sk/mayx/blog_cn
|
||||
https://tm-jikayo.com/mayx/blog_cn
|
||||
http://zzdgitea.stnav.com/mayx/blog_cn
|
||||
http://1.117.66.197:3000/mayx/blog_cn
|
||||
@@ -489,7 +478,6 @@ http://git.zhmight.com/mayx/blog_cn
|
||||
https://intl-dev.gaia888.com/mayx/blog_cn
|
||||
https://gitea.xinyuxi.com/mayx/blog_cn
|
||||
http://gitea.snailtrack.cn/mayx/blog_cn
|
||||
https://git.powerdata.dk/mayx/blog
|
||||
http://ydds.cloud:3000/mayx/blog_cn
|
||||
http://120.24.50.145:3000/mayx/blog_cn
|
||||
https://code.draussenfunker.de/mayx/blog_cn
|
||||
@@ -528,7 +516,6 @@ https://gitea.molietech.com/mayx/blog_cn
|
||||
http://58.87.88.234:3000/mayx/blog_cn
|
||||
http://210.75.240.13:3000/mayx/blog_cn
|
||||
https://git.xz-i.com:30443/mayx/blog_cn
|
||||
http://111.229.64.148:8080/mayx/blog_cn
|
||||
https://git.fynn.vip/mayx/blog_cn
|
||||
http://119.91.212.17:3000/mayx/blog_cn
|
||||
http://git.hbg99.com:8080/mayx/blog_cn
|
||||
@@ -540,3 +527,4 @@ https://git.extra.eiffel.com/mayx/blog
|
||||
https://gitea.digitanie.org/mayx/blog
|
||||
http://124.207.0.162:30000/mayx/blog
|
||||
https://git.xleed.com/mayx/blog
|
||||
https://qlcodegitserver.online/mayx/blog
|
||||
|
||||
|
@@ -2,6 +2,7 @@ proxies:
|
||||
- https://blog.mayx.workers.dev/
|
||||
- https://mayx.deno.dev/
|
||||
- https://mayx.val.run/
|
||||
- https://mayx.azion.app/
|
||||
- https://yuki.gear.host/
|
||||
- https://mayx.global.ssl.fastly.net/
|
||||
mirrors:
|
||||
@@ -23,6 +24,7 @@ mirrors:
|
||||
- https://mabbs.kinsta.page/
|
||||
- https://mayx.codeberg.page/
|
||||
- https://mayx.tildepages.org/
|
||||
- https://mayx.pandastack.app/
|
||||
- https://mayx.pages.lain.la/
|
||||
- https://mayx.4everland.app/
|
||||
- https://mayx.readthedocs.io/
|
||||
|
||||
@@ -17,7 +17,7 @@ layout: xslt_container
|
||||
<link rel="stylesheet" href="/assets/css/style.css?v={{ site.time | date: "%s" }}" />
|
||||
<!--[if !IE]> -->
|
||||
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
|
||||
<link rel="stylesheet" href="/assets/css/gitalk.css">
|
||||
<link rel="stylesheet" href="/assets/css/gitalk.css" />
|
||||
<script src="/assets/js/gitalk.min.js"></script>
|
||||
<!-- <![endif]-->
|
||||
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="{{ site.title }}" />
|
||||
|
||||
1
_tools/stormkit-env_install
Normal file
1
_tools/stormkit-env_install
Normal file
@@ -0,0 +1 @@
|
||||
curl -LO https://github.com/Homebrew/homebrew-portable-ruby/releases/download/3.4.5/portable-ruby-3.4.5.x86_64_linux.bottle.tar.gz && mkdir -p ~/.local/portable-ruby && tar -xvf portable-ruby-3.4.5.x86_64_linux.bottle.tar.gz -C ~/.local/portable-ruby --strip-components=1 && export PATH="$HOME/.local/portable-ruby/3.4.5/bin:$PATH" && bundle install
|
||||
@@ -1274,5 +1274,3 @@
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=gitalk.css.map*/
|
||||
1
assets/js/gitalk.min.js
vendored
1
assets/js/gitalk.min.js
vendored
File diff suppressed because one or more lines are too long
1
assets/js/jquery.min.js
vendored
1
assets/js/jquery.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,6 +1,22 @@
|
||||
var message_Path = '/Live2dHistoire/live2d/';
|
||||
var talkAPI = BlogAPI + "/ai_chat";
|
||||
|
||||
function initVisitors() {
|
||||
if ($('.visitors').length === 1) {
|
||||
var $visitor = $('.visitors:first');
|
||||
$.get(BlogAPI + '/count_click_add?id=' + $visitor.attr('id'), function (data) {
|
||||
$visitor.text(Number(data));
|
||||
});
|
||||
} else if ($('.visitors-index').length > 0) {
|
||||
$('.visitors-index').each(function () {
|
||||
var $elem = $(this);
|
||||
$.get(BlogAPI + '/count_click?id=' + $elem.attr('id'), function (data) {
|
||||
$elem.text(Number(data));
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$(function () {
|
||||
(function () {
|
||||
var $backToTopTxt = "返回顶部", $backToTopEle = $('<div class="backToTop"></div>').appendTo($("body"))
|
||||
@@ -14,25 +30,7 @@ $(function () {
|
||||
$(function () { $backToTopFun(); });
|
||||
})();
|
||||
|
||||
function showHitCount() {
|
||||
$(".visitors-index").each(function () {
|
||||
var $elem = $(this);
|
||||
$.get(BlogAPI + "/count_click?id=" + $elem.attr('id'), function (data) {
|
||||
$elem.text(Number(data));
|
||||
});
|
||||
});
|
||||
}
|
||||
function addCount() {
|
||||
var $visitor = $(".visitors:first");
|
||||
$.get(BlogAPI + "/count_click_add?id=" + $visitor.attr('id'), function (data) {
|
||||
$visitor.text(Number(data));
|
||||
});
|
||||
}
|
||||
if ($('.visitors').length == 1) {
|
||||
addCount();
|
||||
} else if ($('.visitors-index').length > 0) {
|
||||
showHitCount();
|
||||
}
|
||||
initVisitors();
|
||||
|
||||
if (Math.floor((new Date().getTime() - lastUpdated.getTime()) / (24 * 60 * 60 * 1000)) > 90) {
|
||||
$("html").css({
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
$(function () {
|
||||
/**
|
||||
* 根据 URL ?kw= 参数高亮页面内匹配的关键词。
|
||||
* 提取为全局函数,供 pjax.js 在页面切换后复用,避免重复实现。
|
||||
*/
|
||||
function highlightKeyword() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const keyword = urlParams.get('kw')?.trim();
|
||||
|
||||
@@ -41,37 +45,24 @@ $(function () {
|
||||
$('section').each(function () {
|
||||
highlightTextNodes(this);
|
||||
});
|
||||
});
|
||||
|
||||
$(function() {
|
||||
var $codeBlocks = $('div.highlight');
|
||||
|
||||
$codeBlocks.each(function() {
|
||||
var $copyButton = $('<button>', {
|
||||
class: 'copy',
|
||||
type: 'button',
|
||||
text: '📋'
|
||||
});
|
||||
|
||||
$(this).append($copyButton);
|
||||
|
||||
$copyButton.on('click', function() {
|
||||
var code = $(this).siblings('pre').find('code').text().trim();
|
||||
var $button = $(this);
|
||||
};
|
||||
|
||||
function initCopyButtons() {
|
||||
$('.copy').remove();
|
||||
$('div.highlight').each(function () {
|
||||
var $btn = $('<button>', { class: 'copy', type: 'button', text: '📋' });
|
||||
$(this).append($btn);
|
||||
$btn.on('click', function () {
|
||||
var code = $btn.siblings('pre').find('code').text().trim();
|
||||
navigator.clipboard.writeText(code)
|
||||
.then(function() {
|
||||
$button.text('✅');
|
||||
})
|
||||
.catch(function(err) {
|
||||
$button.text('❌');
|
||||
console.error('复制失败:', err);
|
||||
})
|
||||
.finally(function() {
|
||||
setTimeout(function() {
|
||||
$button.text('📋');
|
||||
}, 1500);
|
||||
});
|
||||
.then(function () { $btn.text('✅'); })
|
||||
.catch(function () { $btn.text('❌'); })
|
||||
.finally(function () { setTimeout(function () { $btn.text('📋'); }, 1500); });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$(function () {
|
||||
highlightKeyword();
|
||||
initCopyButtons();
|
||||
});
|
||||
@@ -16,25 +16,6 @@
|
||||
|
||||
// ========== 各组件重初始化 ==========
|
||||
|
||||
/** 访问量统计 */
|
||||
function reinitVisitors() {
|
||||
if (typeof BlogAPI === 'undefined') return;
|
||||
var apiBase = BlogAPI;
|
||||
if ($('.visitors').length === 1) {
|
||||
var $visitor = $('.visitors:first');
|
||||
$.get(apiBase + '/count_click_add?id=' + $visitor.attr('id'), function (data) {
|
||||
$visitor.text(Number(data));
|
||||
});
|
||||
} else if ($('.visitors-index').length > 0) {
|
||||
$('.visitors-index').each(function () {
|
||||
var $elem = $(this);
|
||||
$.get(apiBase + '/count_click?id=' + $elem.attr('id'), function (data) {
|
||||
$elem.text(Number(data));
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** AI 摘要(post.html 内联脚本,pjax 后由 executeScripts 触发) */
|
||||
function reinitAISummary() {
|
||||
if (typeof ai_gen === 'function' && $('#ai-output').length) {
|
||||
@@ -42,51 +23,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
/** 代码块复制按钮 */
|
||||
function reinitCopyButtons() {
|
||||
$('.copy').remove();
|
||||
$('div.highlight').each(function () {
|
||||
var $block = $(this);
|
||||
var $btn = $('<button>', { class: 'copy', type: 'button', text: '📋' });
|
||||
$block.append($btn);
|
||||
$btn.on('click', function () {
|
||||
var code = $btn.siblings('pre').find('code').text().trim();
|
||||
navigator.clipboard.writeText(code)
|
||||
.then(function () { $btn.text('✅'); })
|
||||
.catch(function () { $btn.text('❌'); })
|
||||
.finally(function () { setTimeout(function () { $btn.text('📋'); }, 1500); });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/** 关键词高亮 */
|
||||
function reinitHighlight() {
|
||||
var keyword = new URLSearchParams(window.location.search).get('kw');
|
||||
if (!keyword) return;
|
||||
keyword = keyword.trim();
|
||||
if (!keyword) return;
|
||||
|
||||
var escaped = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
var regex = new RegExp('(' + escaped + ')', 'gi');
|
||||
var escapeHTML = function (str) {
|
||||
return str.replace(/[&<>"']/g, function (t) {
|
||||
return { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[t] || t;
|
||||
});
|
||||
};
|
||||
function walk(node) {
|
||||
$(node).contents().each(function () {
|
||||
if (this.nodeType === Node.TEXT_NODE) {
|
||||
var $t = $(this);
|
||||
var text = escapeHTML($t.text());
|
||||
if (regex.test(text)) $t.replaceWith(text.replace(regex, '<mark>$1</mark>'));
|
||||
} else if (this.nodeType === Node.ELEMENT_NODE && !$(this).is('script, style, noscript, textarea')) {
|
||||
walk(this);
|
||||
}
|
||||
});
|
||||
}
|
||||
$('section').each(function () { walk(this); });
|
||||
}
|
||||
|
||||
/** Google Analytics 页面浏览事件 */
|
||||
function trackPageView() {
|
||||
if (typeof gtag === 'function') {
|
||||
@@ -156,15 +92,32 @@
|
||||
|
||||
// ========== 初始化 ==========
|
||||
|
||||
/** pjax 完成后滚动到目标位置:有锚点则定位锚点,否则回到顶部 */
|
||||
function scrollToAnchor() {
|
||||
var hash = window.location.hash;
|
||||
if (hash) {
|
||||
// 中文等非 ASCII 字符在 URL 中会被编码,需先解码再匹配元素 id
|
||||
var id = hash.slice(1);
|
||||
try { id = decodeURIComponent(id); } catch (e) { /* 保持原值 */ }
|
||||
var target = document.getElementById(id) ||
|
||||
document.querySelector('a[name="' + id + '"]');
|
||||
if (target) {
|
||||
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
||||
return;
|
||||
}
|
||||
}
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
/** 每次 pjax 完成后执行所有重初始化 */
|
||||
function onPjaxComplete() {
|
||||
reinitVisitors();
|
||||
reinitCopyButtons();
|
||||
reinitHighlight();
|
||||
initVisitors();
|
||||
initCopyButtons();
|
||||
highlightKeyword();
|
||||
reinitAISummary();
|
||||
reinitLive2d();
|
||||
trackPageView();
|
||||
window.scrollTo(0, 0);
|
||||
scrollToAnchor();
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
@@ -184,9 +137,28 @@
|
||||
$(document).on('pjax:error', function (xhr, textStatus, error) {
|
||||
console.warn('[pjax] error, fallback:', error);
|
||||
});
|
||||
$(document).on('pjax:end', function (event, xhr, options) {
|
||||
var $container = $(options.container || PJAX_OPTS.container);
|
||||
|
||||
// 首次加载初始化
|
||||
reinitCopyButtons();
|
||||
$container.find('script[type="module"]').each(function () {
|
||||
var oldScript = this;
|
||||
var newScript = document.createElement('script');
|
||||
newScript.type = 'module';
|
||||
|
||||
// 如果是外链脚本 (<script src="..."></script>)
|
||||
if (oldScript.src) {
|
||||
newScript.src = oldScript.src;
|
||||
} else {
|
||||
// 如果是行内脚本 (<script>...code...</script>)
|
||||
newScript.textContent = oldScript.textContent;
|
||||
}
|
||||
// 插入到 body 中触发浏览器执行
|
||||
document.body.appendChild(newScript);
|
||||
|
||||
// 运行完后建议移除,防止 DOM 变得混乱(不影响模块执行)
|
||||
newScript.remove();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user