var offsetSize = (function() { if (mw.config.get('skin') === 'timeless') { return 55; } else { return 0; } })(); var scrollBehaviorAvaliable = (function() { var v = navigator.userAgent.match(/Chrome\/(?\S+)/); if (v && v.groups.version) { // 检测chrome版本 var chromeVersion = parseInt(v.groups.version); return chromeVersion >= 61; } else { // 非chrome return true; } })(); function scrollToAnchor(link){ var target = $(link.replace(/\./g, '\\.')); if(target.length > 0){ target.click(function(){ return false; }); var position = target.offset().top - offsetSize; if (scrollBehaviorAvaliable) { window.scrollTo({ top: position, behavior: 'smooth' }); } else { $('html, body').animate({ scrollTop: position, }, 500); } return false; } else { return true; } } function incPageVisited(){ var pageVisited = sessionStorage.getItem('pageVisited'); if(pageVisited){ pageVisited = parseInt(pageVisited) + 1; } else { pageVisited = 1; } sessionStorage.setItem('pageVisited', pageVisited.toString()); } incPageVisited(); function getPageVisited(){ var pageVisited = sessionStorage.getItem('pageVisited'); if(pageVisited){ return parseInt(pageVisited); } else { return 1; } } function setDismissLoginPrompt(){ var time = Date.now() / 1000; localStorage.setItem('dismissLoginPrompt', time.toFixed(0)); } function shouldShowLoginPrompt(){ if(!mw.user.isAnon()){ //用户已登录 setDismissLoginPrompt(); return false; } if(getPageVisited() < 4){ // 直到打开第四个页面,才弹出注册邀请 return false; } if(mw.config.get('wgCanonicalNamespace') === 'Special' && ['Userlogin', 'CreateAccount', 'Userlogout'].indexOf(mw.config.get('wgCanonicalSpecialPageName')) >= 0){ //屏蔽登录和注册页面 return false; } var time = Date.now() / 1000; var expire = 86400 * 7; //7天不提醒 var dismissTime = localStorage.getItem('dismissLoginPrompt'); if(dismissTime !== null){ dismissTime = parseInt(dismissTime); if(dismissTime + expire > time){ return false; } } return true; } function setDismissAdsPrompt(){ var time = Date.now() / 1000; localStorage.setItem('dismissAdsPrompt', time.toFixed(0)); } function shouldShowAdsPrompt(){ if(mw.config.get('wgCanonicalNamespace') === 'Special' && mw.config.get('wgAction') === 'view'){ // 仅查看页面弹出 return false; } var time = Date.now() / 1000; var expire = 86400 * 7; //7天内不提醒 var dismissTime = localStorage.getItem('dismissAdsPrompt'); if(dismissTime !== null){ dismissTime = parseInt(dismissTime); if(dismissTime + expire > time){ return false; } } return true; } $(function(){ //锚链接偏移 $('body').on('click', 'a', function() { var href = $(this).prop('href'); var path = location.origin + location.pathname; if(typeof href === 'string' && href.startsWith(path) && href[path.length] == '#' && href.length > path.length + 1){ return scrollToAnchor(href.substring(path.length)); } }); // 替换搜索输入框的中文字符 function replaceChars(dom){ if(dom.value.indexOf(':') !== -1 || dom.value.indexOf('`') !== -1){ var selectionStart = dom.selectionStart, selectionEnd = dom.selectionEnd; dom.value = dom.value.replace(/:/g, ':').replace(/`/g, '·'); dom.setSelectionRange(selectionStart, selectionEnd); } } $('#searchInput, #wpNewTitleMain input, #searchText input[name="search"]').on('input', function(e){ if(!e.originalEvent.isComposing){ replaceChars(this); } }); $('#searchInput, #wpNewTitleMain input, #searchText input[name="search"]').on('compositionend', function(e){ replaceChars(this); }); // 初始化dialog var messageDialog = new OO.ui.MessageDialog(); var windowManager = new OO.ui.WindowManager(); window._isekaiMessageDialog = messageDialog; window._isekaiWindowManager = windowManager; $('body').append(windowManager.$element); windowManager.addWindows([messageDialog]); // 替换手机端编辑按钮 if (mw.config.get('skin') === 'minerva') { $('#ca-edit, .mw-editsection a').click(function(e) { e.preventDefault(); var cancelBtn = new OO.ui.ActionWidget({ action: 'cancel', label: mw.message('isekai-editor-prompt-btn-cancel').text(), flags: ['safe', 'close'], }); var useMobileEditorBtn = new OO.ui.ActionWidget({ action: 'mobileEditor', label: mw.message('isekai-editor-prompt-btn-use-mobile').text(), }); var useDesktopEditorBtn = new OO.ui.ActionWidget({ action: 'desktopEditor', label: mw.message('isekai-editor-prompt-btn-use-desktop').text(), flags: ['primary', 'progressive'], }); useMobileEditorBtn.on('click', function() { location.href = e.target.href; }); useDesktopEditorBtn.on('click', function() { var title = new mw.Title(mw.config.get('wgTitle'), mw.config.get('wgNamespaceNumber')); location.href = title.getUrl({ veaction: 'edit', mobileaction: 'toggle_view_desktop' }); }); windowManager.openWindow(messageDialog, { message: mw.message('isekai-editor-prompt-content').parse(), actions: [cancelBtn, useMobileEditorBtn, useDesktopEditorBtn], }); }); } //显示登录引导框 if (shouldShowLoginPrompt()) { var cancelBtn = new OO.ui.ActionWidget({ action: 'cancel', label: mw.message('isekai-login-prompt-btn-cancel').text(), flags: ['safe', 'close'], }); var registerBtn = new OO.ui.ActionWidget({ action: 'register', label: mw.message('isekai-login-prompt-btn-createaccount').text(), }); var loginBtn = new OO.ui.ActionWidget({ action: 'login', active: true, label: mw.message('nav-login-createaccount').text(), flags: ['primary', 'progressive'], }); cancelBtn.on('click', function(){ setDismissLoginPrompt(); }); registerBtn.on('click', function(){ location.href = mw.util.getUrl('Special:CreateAccount', {returnto: mw.config.get('wgPageName')}); }); loginBtn.on('click', function(){ location.href = mw.util.getUrl('Special:Userlogin', {returnto: mw.config.get('wgPageName')}); }); windowManager.openWindow(messageDialog, { message: mw.message('isekai-login-prompt-content').parse(), actions: [cancelBtn, loginBtn], // 去除注册按钮 }); } // 广告存活检测 if (mw.config.get('wgIsekaiShowAds')) { setTimeout(function() { if ($('#ad-dec-7kVsyacCEKVGBLOiLVQ').length === 0) { if (shouldShowAdsPrompt()) { //显示广告引导框 var cancelBtn = new OO.ui.ActionWidget({ action: 'cancel', label: mw.message('isekai-ads-prompt-btn-cancel').text(), active: true, flags: ['safe', 'close'], }); cancelBtn.on('click', function(){ setDismissAdsPrompt(); }); windowManager.openWindow(messageDialog, { title: mw.message('isekai-ads-prompt-title').parse(), message: '', size: 'medium', actions: [cancelBtn], }); messageDialog.$body.find('> .oo-ui-messageDialog-container > .oo-ui-messageDialog-text > .oo-ui-messageDialog-message') .append(mw.message('isekai-ads-prompt-content').parse()); } } }, 500); } /* 展示Google的Adblock提示,但是在大陆貌似没有用 if (mw.config.get('wgIsekaiShowAds')) { window.googlefc = window.googlefc || {}; window.googlefc.callbackQueue = window.googlefc.callbackQueue || []; googlefc.controlledMessagingFunction = (message) => { if (shouldShowAdsPrompt()) { message.proceed(true); } else { message.proceed(false); } }; function signalGooglefcPresent() { if (!window.frames['googlefcPresent']) { if (document.body) { const iframe = document.createElement('iframe'); iframe.style = 'width: 0; height: 0; border: none; z-index: -1000; left: -1000px; top: -1000px;'; iframe.style.display = 'none'; iframe.name = 'googlefcPresent'; document.body.appendChild(iframe); setDismissAdsPrompt(); } else { window.requestAnimationFrame(signalGooglefcPresent); } } } signalGooglefcPresent(); }*/ // 显示用户头像 if(mw.config.get('wgNamespaceNumber') === 2 && mw.config.get('wgAvatarTemplate')) { $('
').insertAfter("#firstHeading"); var firstHeading = $("#firstHeading"); var userHeading = $("#userHeading"); userHeading.append(firstHeading); var avatarUrl = mw.config.get('wgAvatarTemplate') .replace(/\{username\}/g, encodeURI(mw.config.get('wgTitle'))); var avatarAlt = mw.config.get('wgRelevantPageName'); userHeading.append(`${avatarAlt}`); } // 更改ContentTranslation的机器翻译名字 if (mw.cx && mw.cx.MachineTranslationManager) { let _getProviderLabel = mw.cx.MachineTranslationManager.prototype.getProviderLabel; mw.cx.MachineTranslationManager.prototype.getProviderLabel = function ( provider ) { if (mw.config.get('wgUserLanguage', 'en').indexOf('zh') === 0) { var labels = { Google: mw.msg( 'cx-tools-mt-provider-title', 'Google翻译' ), Yandex: mw.msg( 'cx-tools-mt-provider-title', 'Yandex翻译' ), Baidu: mw.msg( 'cx-tools-mt-provider-title', '百度翻译' ), Youdao: mw.msg( 'cx-tools-mt-provider-title', '有道翻译' ), LingoCloud: mw.msg( 'cx-tools-mt-provider-title', '彩云小译' ), }; var label = labels[provider]; if (label) { return label; } } return _getProviderLabel.call(this, provider); }; } // 加载完成,开始动画 requestAnimationFrame(function() { $('html').removeClass('content-loading').addClass('content-loaded'); }, 0); window.addEventListener('beforeunload', function() { $('html').addClass('content-unloading'); }); });