MediaWiki:Mobile.js:修订间差异
跳到导航
跳到搜索
无编辑摘要
imported>=海豚= 无编辑摘要 |
imported>=海豚= 无编辑摘要 |
||
第171行: | 第171行: | ||
}).appendTo(commonBoxContainer).hide(); | }).appendTo(commonBoxContainer).hide(); | ||
} | } | ||
//链接提示 | |||
function linkConfirm() { | |||
mw.loader.using('mediawiki.Uri').then(function () { | |||
if ($('body').css('position') === 'static') $('body').css('position', 'relative'); | |||
var prompt = $('<div/>').attr('class', 'linkConfirmprompt'); | |||
prompt.css('max-width', $('#mw-content-text').width() - 4); | |||
var textnode = $('<div/>').attr('class', 'linkConfirmpromptTextnode'); | |||
var text = $('<span/>'); | |||
textnode.append(text); | |||
var check = window.CSS && CSS.supports && CSS.supports('-webkit-line-clamp', '2') ? (function () { | |||
text.css({ | |||
display: '-webkit-box', | |||
'-webkit-line-clamp': '2', | |||
'-webkit-box-orient': 'vertical', | |||
'word-break': 'break-all', | |||
'text-overflow': 'ellipsis', | |||
overflow: 'hidden', | |||
}); | |||
return $.noop; | |||
})() : function (text) { | |||
if (text.height() > 44.8) { | |||
text.text(text.text() + '……'); | |||
while (text.height() > 44.8) { | |||
text.text(text.text().slice(0, -3) + '……'); | |||
} | |||
} | |||
}; | |||
prompt.append('您点击了一个链接,地址为:') | |||
.append(textnode) | |||
.append($('<div/>').attr('class', 'linkConfirmpromptAlert').append('此网页不属于本网站,不保证其安全性').hide()); | |||
prompt.append($('<a/>').text('继续访问').on('click', function () { | |||
window.open(prompt.data('href'), '_blank'); | |||
})) | |||
.append($('<a/>').text('取消')) | |||
.on('click', function (e) { | |||
if (!$(e.target).is('a')) return false; | |||
prompt.fadeOut(137); | |||
}); | |||
prompt.appendTo('body'); | |||
$('#mw-content-text').on('click', function (e) { | |||
var self = $(e.target); | |||
if (!self.is("a")) return; | |||
if (!e.target.href || /^javascript:/.test(e.target.href) || $(e.target).is('.image')) return true; | |||
if (!e.target.dataset.linkid) e.target.dataset.linkid = (Math.random() + '').replace(/\D/g, ''); | |||
if (prompt.is(':visible') && prompt.data('linkid') === e.target.dataset.linkid) return false; | |||
$('.linkConfirmprompt a:last').click(); | |||
var uri = new mw.Uri(e.target.href); | |||
if (/\.moegirl\.org$/.test(uri.host)) { | |||
if (!self.closest('.heimu')[0]) return true; | |||
text.text(decodeURI(self.attr('href'))); | |||
$('.linkConfirmpromptAlert').hide(); | |||
} else { | |||
text.text(uri); | |||
$('.linkConfirmpromptAlert').show(); | |||
} | |||
var promptTop = 0, | |||
promptLeft = 0; | |||
var offsetParent = self; | |||
do { | |||
promptTop += offsetParent.offset().top; | |||
promptLeft += offsetParent.offset().left; | |||
offsetParent = offsetParent.offsetParent(); | |||
} while (!offsetParent.is("html, body")); | |||
promptTop += self.outerHeight() + 3; | |||
promptLeft += self.outerWidth() / 2 - prompt.outerWidth() / 2; | |||
if (promptTop + prompt.outerHeight() > $(document).height() - 3) promptTop = $(document).height() - prompt.outerHeight() - 3; | |||
if (promptLeft + prompt.outerWidth() > $(window).width() - 3) promptLeft = $(window).width() - prompt.outerWidth() - 3; | |||
if (promptLeft < 0) promptLeft = 3; | |||
prompt.css({ | |||
top: promptTop + 'px', | |||
left: promptLeft + 'px', | |||
}); | |||
window.setTimeout(check, 0, text); | |||
prompt.data({ | |||
href: uri, | |||
linkid: self[0].dataset.linkid, | |||
}); | |||
prompt.fadeIn(137); | |||
return false; | |||
}); | |||
}); | |||
} | |||
function antiAbuseListener(textarea, event) { | |||
var filters = [ | |||
"{{即将删除", | |||
"{{即將刪除", | |||
"{{挂删", | |||
"{{模板:即将删除", | |||
"{{模板:即將刪除", | |||
"{{template:即将删除", | |||
"{{template:即將刪除", | |||
"[[分类:即将删除的页面", | |||
"[[分類:即將刪除的頁面", | |||
"[[category:即将删除的页面", | |||
"[[category:即將刪除的頁面", | |||
"{{文件转移到萌娘共享", | |||
"{{文件轉移到萌娘共享", | |||
"{{模板:文件转移到萌娘共享", | |||
"{{模板:文件轉移到萌娘共享", | |||
"{{template:文件转移到萌娘共享", | |||
"{{template:文件轉移到萌娘共享", | |||
"[[分类:需要删除执行员删除的页面", | |||
"[[分類:需要刪除執行員刪除的頁面", | |||
"[[category:需要删除执行员删除的页面", | |||
"[[category:需要刪除執行員刪除的頁面", | |||
]; | |||
var text1 = textarea.value; | |||
text1 = text1.replace(/\<\/?(?:nowiki|noinclude)\>/g, ''); | |||
text1 = text1.replace(/\<(onlyinclude|includeonly)\>.*?\<\/\1\>/g, ''); | |||
var text2 = textarea.value; | |||
text2 = text2.replace(/\<\/?(?:onlyinclude|includeonly)\>/g, ''); | |||
text2 = text2.replace(/\<(nowiki|noinclude)\>.*?\<\/\1\>/g, ''); | |||
var results = []; | |||
for (var i = 0, l = filters.length; i < l; i++) { | |||
var regExp = new RegExp(filters[i].replace(/\[/g, '\\['), "i"); | |||
if (regExp.test(text1) || regExp.test(text2)) results.push(filters[i]); | |||
} | |||
if (results.length > 0) { | |||
var messageDialog = new OO.ui.MessageDialog(); | |||
var windowManager = new OO.ui.WindowManager(); | |||
$("body").append(windowManager.$element); | |||
windowManager.addWindows([messageDialog]); | |||
messageDialog.title.$label.html("H萌娘提醒您<br>您的编辑包含禁止内容!"); | |||
messageDialog.message.$label.html("<br>您提交的内容包含以下部分,被禁止提交:<br><br><ul>" + results.map(function (result) { | |||
return "<li>" + result + "</li>"; | |||
}).join("") + '</ul><br><br>如果您认为您的编辑无误,请在自行保存编辑内容后到<a target="_blank" rel="nofollow noreferrer noopener" class="external text" href="https://www.hmoegirl.com/Talk:讨论版">提问求助区</a>提问。'); | |||
windowManager.openWindow(messageDialog, { | |||
actions: [{ | |||
action: 'accept', | |||
label: '我知道了', | |||
flags: 'primary', | |||
}], | |||
}); | |||
event.preventDefault(); | |||
event.stopImmediatePropagation(); | |||
event.stopPropagation(); | |||
return false; | |||
} | |||
} | |||
function antiAbuse(textarea, submitButton, form) { | |||
mw.loader.using(["oojs-ui"]).then(function () { | |||
var captureSupported = false; | |||
try { | |||
var options = Object.defineProperty({}, "capture", { | |||
get: function () { | |||
captureSupported = true; | |||
}, | |||
}); | |||
window.addEventListener("test", null, options); | |||
} catch (err) { /* */ } | |||
if (submitButton) { | |||
submitButton.addEventListener("click", function (e) { | |||
antiAbuseListener(textarea, e); | |||
}, captureSupported ? { | |||
capture: true, | |||
} : undefined); | |||
} | |||
if (form) { | |||
form.addEventListener("submit", function (e) { | |||
antiAbuseListener(textarea, e); | |||
}, captureSupported ? { | |||
capture: true, | |||
} : undefined); | |||
} | |||
}); | |||
} | |||
/* 函数执行体 */ | |||
$(function () { | |||
//tabs | |||
tabs(); | |||
//页顶提示模板相关 | //页顶提示模板相关 | ||
commonBoxs(); | commonBoxs(); | ||
//用户资料页 | //用户资料页 | ||
if (isUserProfile()) { | if (isUserProfile()) { |