You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

334 lines
9.8 KiB
JavaScript

var offsetSize = (function() {
if (mw.config.get('skin') === 'timeless') {
return 55;
} else {
return 0;
}
})();
var scrollBehaviorAvaliable = (function() {
var v = navigator.userAgent.match(/Chrome\/(?<version>\S+)/);
if (v && v.groups.version) { // 检测chrome版本
var chromeVersion = parseInt(v.groups.version);
return chromeVersion >= 61;
} else { // 非chrome
return true;
}
})();
3 years ago
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);
}
3 years ago
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(){
3 years ago
var time = Date.now() / 1000;
localStorage.setItem('dismissLoginPrompt', time.toFixed(0));
}
function shouldShowLoginPrompt(){
3 years ago
if(!mw.user.isAnon()){ //用户已登录
setDismissLoginPrompt();
3 years ago
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;
}
3 years ago
$(function(){
//锚链接偏移
$('body').on('click', 'a', function() {
3 years ago
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));
3 years ago
}
});
// 替换搜索输入框的中文字符
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;
3 years ago
$('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')});
});
3 years ago
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) {
2 years ago
console.log('广告似乎被屏蔽了', $('#ad-dec-7kVsyacCEKVGBLOiLVQ'));
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);
}
/* GoogleAdblock
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();
}*/
3 years ago
// 显示用户头像
if(mw.config.get('wgNamespaceNumber') === 2 && mw.config.get('wgAvatarTemplate')) {
$('<div id="userHeading" class="user-heading"></div>').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(`<img src="${avatarUrl}" alt="${avatarAlt}" class="user-avatar">`);
}
// 更改ContentTranslation的机器翻译名字
3 years ago
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');
2 years ago
setTimeout(function() {
$('html').removeClass('content-unloading');
}, 5000);
});
3 years ago
});