diff --git a/Live2dHistoire/live2d/js/message.js b/Live2dHistoire/live2d/js/message.js index 08d1675..67ef7cf 100644 --- a/Live2dHistoire/live2d/js/message.js +++ b/Live2dHistoire/live2d/js/message.js @@ -22,6 +22,8 @@ if (!norunFlag) { var sleepTimer_ = null; var AITalkFlag = false; var talkNum = 0; + // 暴露到全局,供 pjax.js 在页面切换后重新调用 + window._live2d = { initTips: null, showMessage: null, showHitokoto: null }; (function () { function renderTip(template, context) { var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g; @@ -33,11 +35,11 @@ if (!norunFlag) { var currentObject = context; var i, length, variable; for (i = 0, length = variables.length; i < length; ++i) { - variable = variables[i]; - currentObject = currentObject[variable]; - if (currentObject === undefined || currentObject === null) return ''; + variable = currentObject[variables[i]]; + if (variable === undefined || variable === null) return ''; + currentObject = variable; } - return currentObject; + return String(currentObject); }); } @@ -56,14 +58,20 @@ if (!norunFlag) { showMessage('你都复制了些什么呀,转载要记得加上出处哦~~', 5000); }); + // 缓存 message.json 数据,供 PJAX 重绑定使用 + var tipsData = null; + function initTips() { $.ajax({ cache: true, url: message_Path + 'message.json', dataType: "json", success: function (result) { + tipsData = result; + // 解绑旧事件(用命名空间避免影响其他绑定) $.each(result.mouseover, function (index, tips) { - $(tips.selector).mouseover(function () { + $(tips.selector).off('mouseover._live2d_tips mouseout._live2d_tips'); + $(tips.selector).on('mouseover._live2d_tips', function () { var text = tips.text; if (Array.isArray(tips.text)) text = tips.text[Math.floor(Math.random() * tips.text.length + 1) - 1]; text = text.renderTip({ text: $(this).text() }); @@ -72,7 +80,7 @@ if (!norunFlag) { clearInterval(liveTlakTimer); liveTlakTimer = null; }); - $(tips.selector).mouseout(function () { + $(tips.selector).on('mouseout._live2d_tips', function () { showHitokoto(); if (liveTlakTimer == null) { liveTlakTimer = window.setInterval(function () { @@ -82,7 +90,8 @@ if (!norunFlag) { }); }); $.each(result.click, function (index, tips) { - $(tips.selector).click(function () { + $(tips.selector).off('click._live2d_tips'); + $(tips.selector).on('click._live2d_tips', function () { if (hitFlag) { return false } @@ -106,23 +115,26 @@ if (!norunFlag) { } }); } + window._live2d.initTips = initTips; initTips(); var text; if (document.referrer !== '' && document.referrer.split('/')[2] !== window.location.host) { var referrer = document.createElement('a'); referrer.href = document.referrer; - text = '嗨!来自 ' + referrer.hostname + ' 的朋友!'; var domain = referrer.hostname.split('.')[1]; - if (domain == 'baidu') { - text = '嗨! 来自 百度搜索 的朋友!
欢迎访问「 ' + document.title.split(' | ')[0] + ' 」'; - } else if (domain == 'so') { - text = '嗨! 来自 360搜索 的朋友!
欢迎访问「 ' + document.title.split(' | ')[0] + ' 」'; - } else if (domain == 'google') { - text = '嗨! 来自 谷歌搜索 的朋友!
欢迎访问「 ' + document.title.split(' | ')[0] + ' 」'; + if (domain == 'baidu' || domain == 'so' || domain == 'google') { + var source = domain == 'baidu' ? '百度搜索' : domain == 'so' ? '360搜索' : '谷歌搜索'; + text = '嗨! 来自 ' + source + ' 的朋友!
欢迎访问「 ' + document.title.split(' | ')[0] + ' 」'; + } else { + text = '嗨!来自 ' + referrer.hostname + ' 的朋友!'; } + } else if (typeof window._pjaxGetWelcomeText === 'function') { + // 复用 pjax.js 中的欢迎语生成函数,避免重复逻辑 + text = window._pjaxGetWelcomeText(); } else { - if (window.location.pathname == "/") { //主页URL判断,需要斜杠结尾 + // pjax.js 尚未加载时的兜底(首次访问且 pjax.js 在 message.js 之后加载) + if (window.location.pathname == "/") { var now = (new Date()).getHours(); if (now > 23 || now <= 5) { text = '你是夜猫子呀?这么晚还不睡觉,明天起的来嘛?'; @@ -172,6 +184,7 @@ if (!norunFlag) { console.log(sleepTimer_); } } + window._live2d.showHitokoto = showHitokoto; function checkSleep() { var sleepStatu = sessionStorage.getItem("Sleepy"); @@ -213,6 +226,7 @@ if (!norunFlag) { //if (timeout === null) timeout = 5000; //hideMessage(timeout); } + window._live2d.showMessage = showMessage; function talkValTimer() { $('#live_talk').val('1'); } @@ -384,74 +398,100 @@ if (!norunFlag) { }; }; //获取音乐信息初始化 - var bgmListInfo = $('input[name=live2dBGM]'); - if (bgmListInfo.length == 0) { - $('#musicButton').hide(); - } else { - var bgmPlayNow = parseInt($('#live2d_bgm').attr('data-bgm')); - var bgmPlayTime = 0; - var live2dBGM_Num = sessionStorage.getItem("live2dBGM_Num"); - var live2dBGM_PlayTime = sessionStorage.getItem("live2dBGM_PlayTime"); - if (live2dBGM_Num) { - if (live2dBGM_Num <= $('input[name=live2dBGM]').length - 1) { - bgmPlayNow = parseInt(live2dBGM_Num); - } - } - if (live2dBGM_PlayTime) { - bgmPlayTime = parseInt(live2dBGM_PlayTime); - } - var live2dBGMSrc = bgmListInfo.eq(bgmPlayNow).val(); - $('#live2d_bgm').attr('data-bgm', bgmPlayNow); - $('#live2d_bgm').attr('src', live2dBGMSrc); - $('#live2d_bgm')[0].currentTime = bgmPlayTime; - $('#live2d_bgm')[0].volume = 0.5; - var live2dBGM_IsPlay = sessionStorage.getItem("live2dBGM_IsPlay"); - var live2dBGM_WindowClose = sessionStorage.getItem("live2dBGM_WindowClose"); - if (live2dBGM_IsPlay == '0' && live2dBGM_WindowClose == '0') { - $('#live2d_bgm')[0].play(); + var $bgm = $('#live2d_bgm'); + + // 音乐按钮点击事件(幂等,使用命名空间避免重复绑定) + $('#musicButton').off('click._bgm').on('click._bgm', function () { + if ($('#musicButton').hasClass('play')) { + $bgm[0].pause(); + $('#musicButton').removeClass('play'); + sessionStorage.setItem("live2dBGM_IsPlay", '1'); + } else { + $bgm[0].play(); $('#musicButton').addClass('play'); + sessionStorage.setItem("live2dBGM_IsPlay", '0'); } - sessionStorage.setItem("live2dBGM_WindowClose", '1'); - $('#musicButton').on('click', function () { - if ($('#musicButton').hasClass('play')) { - $('#live2d_bgm')[0].pause(); - $('#musicButton').removeClass('play'); - sessionStorage.setItem("live2dBGM_IsPlay", '1'); - } else { - $('#live2d_bgm')[0].play(); - $('#musicButton').addClass('play'); - sessionStorage.setItem("live2dBGM_IsPlay", '0'); + }); + + // BGM 事件监听(仅绑定一次,使用标志位避免重复) + if (!window._live2d._bgmEventsBound) { + $bgm[0].addEventListener("timeupdate", function () { + sessionStorage.setItem("live2dBGM_PlayTime", $bgm[0].currentTime); + }); + $bgm[0].addEventListener("ended", function () { + var listNow = parseInt($bgm.attr('data-bgm')); + listNow++; + var inputs = $('input[name=live2dBGM]'); + if (inputs.length === 0) return; + if (listNow > inputs.length - 1) { + listNow = 0; } + var listNewSrc = inputs.eq(listNow).val(); + if (!listNewSrc) return; + sessionStorage.setItem("live2dBGM_Num", listNow); + $bgm.attr('src', listNewSrc); + $bgm[0].play(); + $bgm.attr('data-bgm', listNow); + }); + $bgm[0].addEventListener("error", function () { + $bgm[0].pause(); + $('#musicButton').removeClass('play'); + showMessage('音乐似乎加载不出来了呢!', 0); }); window.onbeforeunload = function () { sessionStorage.setItem("live2dBGM_WindowClose", '0'); if ($('#musicButton').hasClass('play')) { sessionStorage.setItem("live2dBGM_IsPlay", '0'); } - } - document.getElementById('live2d_bgm').addEventListener("timeupdate", function () { - var live2dBgmPlayTimeNow = document.getElementById('live2d_bgm').currentTime; - sessionStorage.setItem("live2dBGM_PlayTime", live2dBgmPlayTimeNow); - }); - document.getElementById('live2d_bgm').addEventListener("ended", function () { - var listNow = parseInt($('#live2d_bgm').attr('data-bgm')); - listNow++; - if (listNow > $('input[name=live2dBGM]').length - 1) { - listNow = 0; - } - var listNewSrc = $('input[name=live2dBGM]').eq(listNow).val(); - sessionStorage.setItem("live2dBGM_Num", listNow); - $('#live2d_bgm').attr('src', listNewSrc); - $('#live2d_bgm')[0].play(); - $('#live2d_bgm').attr('data-bgm', listNow); - }); - document.getElementById('live2d_bgm').addEventListener("error", function () { - $('#live2d_bgm')[0].pause(); - $('#musicButton').removeClass('play'); - showMessage('音乐似乎加载不出来了呢!', 0); - }); + }; + window._live2d._bgmEventsBound = true; + } + + // 初始化 BGM(根据当前页面是否有 BGM 输入) + if (typeof window._live2d.initBGM === 'function') { + window._live2d.initBGM(); } } + + // 暴露 BGM 初始化函数,供 PJAX 重初始化时调用 + window._live2d.initBGM = function() { + var bgmListInfo = $('input[name=live2dBGM]'); + var $bgm = $('#live2d_bgm'); + if (bgmListInfo.length === 0) { + $('#musicButton').hide(); + if ($bgm.length) $bgm[0].pause(); + return; + } + var bgmPlayNow = parseInt($bgm.attr('data-bgm')) || 0; + var bgmPlayTime = 0; + var live2dBGM_Num = sessionStorage.getItem("live2dBGM_Num"); + var live2dBGM_PlayTime = sessionStorage.getItem("live2dBGM_PlayTime"); + if (live2dBGM_Num) { + if (parseInt(live2dBGM_Num) <= bgmListInfo.length - 1) { + bgmPlayNow = parseInt(live2dBGM_Num); + } + } + if (live2dBGM_PlayTime) { + bgmPlayTime = parseFloat(live2dBGM_PlayTime); + } + var newSrc = bgmListInfo.eq(bgmPlayNow).val(); + $bgm.attr('data-bgm', bgmPlayNow); + if ($bgm.attr('src') !== newSrc) { + $bgm[0].pause(); + $bgm.attr('src', newSrc); + $bgm[0].currentTime = bgmPlayTime; + } + $bgm[0].volume = 0.5; + var live2dBGM_IsPlay = sessionStorage.getItem("live2dBGM_IsPlay"); + var live2dBGM_WindowClose = sessionStorage.getItem("live2dBGM_WindowClose"); + if (live2dBGM_IsPlay == '0' && live2dBGM_WindowClose == '0') { + $bgm[0].play(); + $('#musicButton').addClass('play'); + } + sessionStorage.setItem("live2dBGM_WindowClose", '1'); + $('#musicButton').show(); + }; + $(document).ready(function () { var AIimgSrc = [ message_Path + "model/histoire/histoire.1024/texture_00.png", diff --git a/_data/other_repo_list.csv b/_data/other_repo_list.csv index 417a30b..55dedc7 100644 --- a/_data/other_repo_list.csv +++ b/_data/other_repo_list.csv @@ -83,7 +83,6 @@ http://207.180.229.193:3001/mayx/blog http://34.81.52.16/mayx/blog http://123.57.16.111:3000/mayx/blog https://lius.familyds.org:3000/mayx/blog -https://gitea.questline.coop/mayx/blog http://git.chaojing-film.com:3000/mayx/blog https://git.nusaerp.com/mayx/blog http://35.207.205.18:3000/mayx/blog @@ -198,7 +197,6 @@ https://gitea.dsmaster.myds.me/mayx/blog https://gitea.primecontrols-dev.com/mayx/blog http://www.scserverddns.top:13000/mayx/blog https://git.lucas-michel.fr/mayx/blog -http://60.205.162.59:3000/mayx/blog https://git.imvictor.tech:2/mayx/blog http://47.112.137.193:3000/mayx/blog http://58.38.123.148:3176/mayx/blog @@ -344,7 +342,6 @@ http://82.156.89.21:3000/mayx/blog_cn https://git.sskuaixiu.com/mayx/blog_cn http://xujiesoft.vicp.net:3000/mayx/blog_cn http://113.44.36.103:23000/mayx/blog_cn -http://111.230.92.227:3000/mayx/blog_cn https://git.mingliqiye.com/mayx/blog_cn http://119.29.194.155:8894/mayx/blog_cn http://43.138.249.161:3000/mayx/blog_cn @@ -371,7 +368,6 @@ https://git.secretserver.club/mayx/blog https://gitea.adber.tech/mayx/blog https://gitea.hello.faith/mayx/blog https://tea.neuron.my/mayx/blog -https://git.econutrix.com/mayx/blog https://git.violka-it.net/mayx/blog https://git.adityagupta.dev/mayx/blog https://code.ownwire.net/mayx/blog @@ -396,7 +392,6 @@ https://suprasage.com/mayx/blog https://git.zakum.cn/mayx/blog https://gitea.amazingcoders.com/mayx/blog https://gitea.kamilklecha.dev/mayx/blog -https://forgejo.testbed.unict.it/mayx/blog http://47.109.103.110:9000/mayx/blog_cn http://47.105.124.101:3000/mayx/blog_cn http://49.232.183.190:3000/mayx/blog_cn @@ -406,7 +401,6 @@ 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 -http://39.108.124.198:3000/mayx/blog https://git.legatus.ru/mayx/blog https://git.kayashov.keenetic.pro/mayx/blog http://43.138.83.20:3000/mayx/blog_cn @@ -439,7 +433,6 @@ http://36.133.248.69:3088/mayx/blog_cn http://220.205.16.27:18081/mayx/blog_cn http://81.69.221.216:3000/mayx/blog_cn http://115.159.194.75:4000/mayx/blog_cn -http://115.190.214.62:3001/mayx/blog_cn http://183.204.60.122:10081/mayx/blog_cn http://43.139.240.37:17000/mayx/blog_cn http://159.75.27.114:3000/mayx/blog_cn @@ -497,7 +490,6 @@ 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://112.6.10.77:3000/mayx/blog_cn http://zzdgitea.stnav.com/mayx/blog_cn http://1.117.66.197:3000/mayx/blog_cn http://git.zhmight.com/mayx/blog_cn @@ -509,7 +501,6 @@ http://ydds.cloud:3000/mayx/blog_cn https://git.keruixinda.com/mayx/blog_cn http://120.24.50.145:3000/mayx/blog_cn https://code.draussenfunker.de/mayx/blog_cn -https://git.gede.at/mayx/blog_cn https://git.dinsor.co.th/mayx/blog https://ofibohost.com/mayx/blog https://lab.iishka.net/mayx/blog @@ -528,13 +519,10 @@ https://gitea.malxte.de/mayx/blog https://git.nizart.me/mayx/blog https://git.ddns.net/mayx/blog http://222.85.214.245:9776/mayx/blog -https://git.thubn.de/mayx/blog -https://git.tolyaneblan.ru/mayx/blog https://git.kraevsky.ru/mayx/blog https://ruyiscx.cloud:3000/mayx/blog https://git.0xee.eu/mayx/blog https://gitea.deitglobal.com/mayx/blog -https://git.sprunk.me/mayx/blog https://www.mygitea.ru/mayx/blog https://git.crwlr.ir/mayx/blog https://git.nozora.top/mayx/blog @@ -549,15 +537,15 @@ http://47.108.255.216:3000/mayx/blog_cn 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://gitea.twomiracles.xyz/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 -https://git.serhii.ru/mayx/blog_cn -https://gitea.y8o.de/mayx/blog_cn http://git.hbg99.com:8080/mayx/blog_cn https://git.eplg.services/mayx/blog http://89.167.38.168:3001/mayx/blog http://namonba.asuscomm.com:3001/mayx/blog http://109.199.98.226:3001/mayx/blog +https://git.extra.eiffel.com/mayx/blog +https://gitea.digitanie.org/mayx/blog +http://124.207.0.162:30000/mayx/blog diff --git a/_data/proxylist.yml b/_data/proxylist.yml index 3a43392..dd8163d 100644 --- a/_data/proxylist.yml +++ b/_data/proxylist.yml @@ -1,6 +1,7 @@ proxies: - https://blog.mayx.workers.dev/ - https://mayx.deno.dev/ +- https://mayx.val.run/ - https://yuki.gear.host/ - https://mayx.global.ssl.fastly.net/ mirrors: @@ -17,6 +18,7 @@ mirrors: - https://mayx-blog.pgs.sh/ - https://mayx.netlify.app/ - https://mayx.gitnet.page/ +- https://mayx.stormkit.dev/ - https://mayx.grebedoc.dev/ - https://mabbs.kinsta.page/ - https://mayx.codeberg.page/ diff --git a/_layouts/default.html b/_layouts/default.html index fcdac4f..d8d741d 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -35,6 +35,15 @@ layout: xslt_container @@ -91,7 +100,7 @@ layout: xslt_container {% endif %} - +
{{ content }} @@ -105,6 +114,8 @@ layout: xslt_container + + diff --git a/_layouts/post.html b/_layouts/post.html index 6a8b11d..a0fff2a 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -161,19 +161,10 @@ $.get(BlogAPI + "/suggest?id={{ page.url }}&update=" + lastUpdated.valueOf(), fu -
+
\ No newline at end of file diff --git a/assets/js/jquery.pjax.min.js b/assets/js/jquery.pjax.min.js new file mode 100644 index 0000000..a5ecc8c --- /dev/null +++ b/assets/js/jquery.pjax.min.js @@ -0,0 +1,6 @@ +/*! + * Copyright 2012, Chris Wanstrath + * Released under the MIT License + * https://github.com/defunkt/jquery-pjax + */ +!function(t){function e(e,a,r){return r=g(a,r),this.on("click.pjax",e,(function(e){var a=r;a.container||((a=t.extend({},r)).container=t(this).attr("data-pjax")),n(e,a)}))}function n(e,n,a){a=g(n,a);var i=e.currentTarget,o=t(i);if("A"!==i.tagName.toUpperCase())throw"$.fn.pjax or $.pjax.click requires an anchor element";if(!(e.which>1||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||location.protocol!==i.protocol||location.hostname!==i.hostname||i.href.indexOf("#")>-1&&x(i)==x(location)||e.isDefaultPrevented())){var s={url:i.href,container:o.attr("data-pjax"),target:i},c=t.extend({},s,a),u=t.Event("pjax:click");o.trigger(u,[c]),u.isDefaultPrevented()||(r(c),e.preventDefault(),o.trigger("pjax:clicked",[c]))}}function a(e,n,a){a=g(n,a);var i=e.currentTarget,o=t(i);if("FORM"!==i.tagName.toUpperCase())throw"$.pjax.submit requires a form element";var s={type:(o.attr("method")||"GET").toUpperCase(),url:o.attr("action"),container:o.attr("data-pjax"),target:i};if("GET"!==s.type&&void 0!==window.FormData)s.data=new FormData(i),s.processData=!1,s.contentType=!1;else{if(o.find(":file").length)return;s.data=o.serializeArray()}r(t.extend({},s,a)),e.preventDefault()}function r(e){e=t.extend(!0,{},t.ajaxSettings,r.defaults,e),t.isFunction(e.url)&&(e.url=e.url());var n=v(e.url).hash,a=t.type(e.container);if("string"!==a)throw"expected string value for 'container' option; got "+a;var i,s=e.context=t(e.container);if(!s.length)throw"the container selector '"+e.container+"' did not match anything";function c(n,a,r){r||(r={}),r.relatedTarget=e.target;var i=t.Event(n,r);return s.trigger(i,a),!i.isDefaultPrevented()}e.data||(e.data={}),t.isArray(e.data)?e.data.push({name:"_pjax",value:e.container}):e.data._pjax=e.container,e.beforeSend=function(t,a){if("GET"!==a.type&&(a.timeout=0),t.setRequestHeader("X-PJAX","true"),t.setRequestHeader("X-PJAX-Container",e.container),!c("pjax:beforeSend",[t,a]))return!1;a.timeout>0&&(i=setTimeout((function(){c("pjax:timeout",[t,e])&&t.abort("timeout")}),a.timeout),a.timeout=0);var r=v(a.url);n&&(r.hash=n),e.requestUrl=m(r)},e.complete=function(t,n){i&&clearTimeout(i),c("pjax:complete",[t,n,e]),c("pjax:end",[t,e])},e.error=function(t,n,a){var r=w("",t,e),i=c("pjax:error",[t,n,a,e]);"GET"==e.type&&"abort"!==n&&i&&o(r.url)},e.success=function(a,i,u){var l=r.state,p="function"==typeof t.pjax.defaults.version?t.pjax.defaults.version():t.pjax.defaults.version,d=u.getResponseHeader("X-PJAX-Version"),h=w(a,u,e),m=v(h.url);if(n&&(m.hash=n,h.url=m.href),p&&d&&p!==d)o(h.url);else if(h.contents){if(r.state={id:e.id||f(),url:h.url,title:h.title,container:e.container,fragment:e.fragment,timeout:e.timeout},(e.push||e.replace)&&window.history.replaceState(r.state,h.title,h.url),t.contains(s,document.activeElement))try{document.activeElement.blur()}catch(t){}h.title&&(document.title=h.title),c("pjax:beforeReplace",[h.contents,e],{state:r.state,previousState:l}),s.html(h.contents);var x=s.find("input[autofocus], textarea[autofocus]").last()[0];x&&document.activeElement!==x&&x.focus(),function(e){if(!e)return;var n=t("script[src]");e.each((function(){var e=this.src;if(!n.filter((function(){return this.src===e})).length){var a=document.createElement("script"),r=t(this).attr("type");r&&(a.type=r),a.src=t(this).attr("src"),document.head.appendChild(a)}}))}(h.scripts);var g=e.scrollTo;if(n){var y=decodeURIComponent(n.slice(1)),j=document.getElementById(y)||document.getElementsByName(y)[0];j&&(g=t(j).offset().top)}"number"==typeof g&&t(window).scrollTop(g),c("pjax:success",[a,i,u,e])}else o(h.url)},r.state||(r.state={id:f(),url:window.location.href,title:document.title,container:e.container,fragment:e.fragment,timeout:e.timeout},window.history.replaceState(r.state,document.title)),d(r.xhr),r.options=e;var u,l,p=r.xhr=t.ajax(e);return p.readyState>0&&(e.push&&!e.replace&&(u=r.state.id,l=[e.container,h(s)],b[u]=l,E.push(u),S(T,0),S(E,r.defaults.maxCacheLength),window.history.pushState(null,"",e.requestUrl)),c("pjax:start",[p,e]),c("pjax:send",[p,e])),r.xhr}function i(e,n){var a={url:window.location.href,push:!1,replace:!0,scrollTo:!1};return r(t.extend(a,g(e,n)))}function o(t){window.history.replaceState(null,"",r.state.url),window.location.replace(t)}var s=!0,c=window.location.href,u=window.history.state;function l(e){s||d(r.xhr);var n,a=r.state,i=e.state;if(i&&i.container){if(s&&c==i.url)return;if(a){if(a.id===i.id)return;n=a.id",{method:"GET"===a?"GET":"POST",action:n,style:"display:none"});"GET"!==a&&"POST"!==a&&r.append(t("",{type:"hidden",name:"_method",value:a.toLowerCase()}));var i=e.data;if("string"==typeof i)t.each(i.split("&"),(function(e,n){var a=n.split("=");r.append(t("",{type:"hidden",name:a[0],value:a[1]}))}));else if(t.isArray(i))t.each(i,(function(e,n){r.append(t("",{type:"hidden",name:n.name,value:n.value}))}));else if("object"==typeof i){var o;for(o in i)r.append(t("",{type:"hidden",name:o,value:i[o]}))}t(document.body).append(r),r.submit()}function d(e){e&&e.readyState<4&&(e.onreadystatechange=t.noop,e.abort())}function f(){return(new Date).getTime()}function h(e){var n=e.clone();return n.find("script").each((function(){this.src||t._data(this,"globalEval",!1)})),n.contents()}function m(t){return t.search=t.search.replace(/([?&])(_pjax|_)=[^&]*/g,"").replace(/^&/,""),t.href.replace(/\?($|#)/,"$1")}function v(t){var e=document.createElement("a");return e.href=t,e}function x(t){return t.href.replace(/#.*/,"")}function g(e,n){return e&&n?((n=t.extend({},n)).container=e,n):t.isPlainObject(e)?e:{container:e}}function y(t,e){return t.filter(e).add(t.find(e))}function j(e){return t.parseHTML(e,document,!0)}function w(e,n,a){var r,i,o={},s=/]*>([\s\S.]*)<\/body>/i)[0]));var u=e.match(/]*>([\s\S.]*)<\/head>/i);r=null!=u?t(j(u[0])):i}else r=i=t(j(e));if(0===i.length)return o;if(o.title=y(r,"title").last().text(),a.fragment){var l=i;"body"!==a.fragment&&(l=y(l,a.fragment).first()),l.length&&(o.contents="body"===a.fragment?l:l.contents(),o.title||(o.title=l.attr("title")||l.data("title")))}else s||(o.contents=i);return o.contents&&(o.contents=o.contents.not((function(){return t(this).is("title")})),o.contents.find("title").remove(),o.scripts=y(o.contents,"script[src]").remove(),o.contents=o.contents.not(o.scripts)),o.title&&(o.title=t.trim(o.title)),o}u&&u.container&&(r.state=u),"state"in window.history&&(s=!1);var b={},T=[],E=[];function S(t,e){for(;t.length>e;)delete b[t.shift()]}function P(){return t("meta").filter((function(){var e=t(this).attr("http-equiv");return e&&"X-PJAX-VERSION"===e.toUpperCase()})).attr("content")}function C(){t.fn.pjax=e,t.pjax=r,t.pjax.enable=t.noop,t.pjax.disable=A,t.pjax.click=n,t.pjax.submit=a,t.pjax.reload=i,t.pjax.defaults={timeout:650,push:!0,replace:!1,type:"GET",dataType:"html",scrollTo:0,maxCacheLength:20,version:P},t(window).on("popstate.pjax",l)}function A(){t.fn.pjax=function(){return this},t.pjax=p,t.pjax.enable=C,t.pjax.disable=t.noop,t.pjax.click=t.noop,t.pjax.submit=t.noop,t.pjax.reload=function(){window.location.reload()},t(window).off("popstate.pjax",l)}t.event.props&&t.inArray("state",t.event.props)<0?t.event.props.push("state"):"state"in t.Event.prototype||t.event.addProp("state"),t.support.pjax=window.history&&window.history.pushState&&window.history.replaceState&&!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/),t.support.pjax?C():A()}(jQuery); diff --git a/assets/js/main.js b/assets/js/main.js index 556a150..cb11f6e 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -39,7 +39,7 @@ $(function () { "-webkit-filter": "grayscale(100%)", "filter": "progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)" }) - $('body').html(function(_, oldHTML) { + $('body').html(function (_, oldHTML) { return oldHTML.replace(/Mayx/g, 'Ghost'); }); console.warn("Mayx may already be Dead"); @@ -66,4 +66,10 @@ function getSearchJSON(callback) { } else { callback(searchData); } +} +if (typeof window.go === 'undefined') { + window.go = function (url) { + window.location.href = url; + return; + } } \ No newline at end of file diff --git a/assets/js/pjax.js b/assets/js/pjax.js new file mode 100644 index 0000000..1f663f3 --- /dev/null +++ b/assets/js/pjax.js @@ -0,0 +1,354 @@ +/** + * PJAX 初始化与页面切换重绑定脚本 + * 依赖:jQuery, jquery.pjax.min.js + * 加载顺序:在 jquery.pjax.min.js 之后,body 末尾 + */ + +(function ($) { + // ========== 常量 ========== + var CONTAINER = '#pjax-container'; + var PJAX_OPTS = { + container: CONTAINER, + fragment: CONTAINER, + timeout: 8000, + scrollTo: false + }; + + // ========== 工具函数 ========== + + var _loadedScripts = {}; + var _pendingScripts = []; + + /** 动态加载外部 CSS(避免重复加载) */ + function loadCSS(href) { + if ($('link[href="' + href + '"]').length) return; + $('').appendTo('head'); + } + + /** + * 动态加载外部 JS(避免重复) + * 用对象跟踪已加载的 URL,而不是检查 DOM 中的 \ No newline at end of file