更多操作
小 (user/123) |
小无编辑摘要 |
||
第29行: | 第29行: | ||
* 自动转换链接 | * 自动转换链接 | ||
* @author [[User:UnownHearn]] | * @author [[User:UnownHearn]] | ||
* @version 1. | * @version 1.4 (2019/03/18) | ||
*/ | */ | ||
(function () { /* 自动链接 */ | (function () { /* 自动链接 */ | ||
第45行: | 第45行: | ||
var rules = [{ | var rules = [{ | ||
// id: ["sm", "nm"], | |||
regex: /(sm|nm|im|av|ac)\d+/g, | |||
link: function (text) { | |||
switch (text.slice(0, 2)) { | |||
case "sm", "nm": | |||
return "https://www.nicovideo.jp/watch/" + text; | |||
case "im": | |||
return "https://seiga.nicovideo.jp/seiga/" + text; | |||
case "av": | |||
return "https://www.bilibili.com/video/" + text; | |||
case "ac": | |||
return "http://www.acfun.cn/v/" + text; | |||
} | |||
} | |||
}, { | |||
// id: ["mylist", "user"], | // id: ["mylist", "user"], | ||
regex: /(mylist|user)\/\d+/g, | regex: /(mylist|user)\/\d+/g, | ||
link: "https://www.nicovideo.jp/{}" | link: "https://www.nicovideo.jp/{}" | ||
}]; | }]; | ||
第61行: | 第68行: | ||
var as = document.getElementsByClassName("WikiaArticle"); | var as = document.getElementsByClassName("WikiaArticle"); | ||
Array.prototype.forEach.call(as, function(a) { | Array.prototype.forEach.call(as, function (a) { | ||
var walker = document.createTreeWalker(a, NodeFilter.SHOW_ALL, { acceptNode: filter }); | var walker = document.createTreeWalker(a, NodeFilter.SHOW_ALL, { acceptNode: filter }); | ||
while (walker.nextNode()) { | while (walker.nextNode()) { | ||
第75行: | 第82行: | ||
var rule = rules[ruleIndex]; | var rule = rules[ruleIndex]; | ||
html = html.replace(rule.regex, function (old) { | html = html.replace(rule.regex, function (old) { | ||
if (typeof rule.link === "function") { | |||
return rule.link(old); | |||
} | |||
return "<a class=\"autolink\" href=\"" + rule.link.replace("{}", old) + "\">" + | return "<a class=\"autolink\" href=\"" + rule.link.replace("{}", old) + "\">" + | ||
old + "</a>"; | old + "</a>"; |
2019年3月18日 (一) 17:56的版本
"use strict";
/**
* 去掉内容与链接文本相同的 popup
* @author [[User:UnownHearn]]
* @version 1 (2018/07/28)
*/
(function () {
// https://stackoverflow.com/questions/14346414/how-do-you-do-html-encode-using-javascript
function htmlEncode(value) {
//create a in-memory div, set it's inner text(which jQuery automatically encodes)
//then grab the encoded contents back out. The div never exists on the page.
return $('<div/>').text(value).html();
}
$(".WikiaArticle a[title]").hover(function () {
if (this.className != "") { return; } // 作为 wikilink 的超链接没有 class
var a = $(this);
var title = a.attr("title");
if (title != a.text()) {
a.append($('<span class="wikilink-popup">' + htmlEncode(title) + '</span>'));
}
}, function () {
$(this).find(".wikilink-popup").remove();
});
})();
/**
* 自动转换链接
* @author [[User:UnownHearn]]
* @version 1.4 (2019/03/18)
*/
(function () { /* 自动链接 */
var filter = (function (node) {
if (node.nodeType == 3 /* TEXT_NODE */) {
return NodeFilter.FILTER_ACCEPT;
} else if (node.nodeType != 1 /* ELEMENT_NODE */
|| node.tagName.toLowerCase() == "a"
|| node.classList.contains("no-autolink")) {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_SKIP;
})
var rules = [{
// id: ["sm", "nm"],
regex: /(sm|nm|im|av|ac)\d+/g,
link: function (text) {
switch (text.slice(0, 2)) {
case "sm", "nm":
return "https://www.nicovideo.jp/watch/" + text;
case "im":
return "https://seiga.nicovideo.jp/seiga/" + text;
case "av":
return "https://www.bilibili.com/video/" + text;
case "ac":
return "http://www.acfun.cn/v/" + text;
}
}
}, {
// id: ["mylist", "user"],
regex: /(mylist|user)\/\d+/g,
link: "https://www.nicovideo.jp/{}"
}];
var nodes = [];
var as = document.getElementsByClassName("WikiaArticle");
Array.prototype.forEach.call(as, function (a) {
var walker = document.createTreeWalker(a, NodeFilter.SHOW_ALL, { acceptNode: filter });
while (walker.nextNode()) {
nodes.push(walker.currentNode);
}
})
for (var nodeIndex in nodes) {
var node = nodes[nodeIndex];
var html = node.textContent;
for (var ruleIndex in rules) {
var rule = rules[ruleIndex];
html = html.replace(rule.regex, function (old) {
if (typeof rule.link === "function") {
return rule.link(old);
}
return "<a class=\"autolink\" href=\"" + rule.link.replace("{}", old) + "\">" +
old + "</a>";
});
}
if (html != node.textContent) {
var parentNode = node.parentNode;
var dummy = document.createElement("span");
dummy.innerHTML = html;
parentNode.replaceChild(dummy, node);
}
}
})();