打开/关闭菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

用户:UnownHearn/common.js:修订间差异

无编辑摘要
(导入35个版本)
 
(未显示同一用户的13个中间版本)
第1行: 第1行:
"use strict";

/**
* 在鼠标移至文本与标题不同的 wikilink 上时, 弹出带有原标题的 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.5 (2019/03/20)
*/
(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 = [{
// 两字母 + 一串数字
regex: /[a-zA-Z]{2}\d+/g,
link: function (text) {
var base;
switch (text.slice(0, 2)) {
// niconico 主要
case "sm": case "nm": base = "https://www.nicovideo.jp/watch/"; break;
case "im": base = "https://seiga.nicovideo.jp/seiga/"; break;
// bilibili
case "av": base = "https://www.bilibili.com/video/"; break;
case "cv": /*专栏*/ base = "https://www.bilibili.com/read/"; break;
case "am": /*音频*/ base = "https://www.bilibili.com/audio/"; break;
// acfun
case "ac": base = "http://www.acfun.cn/v/"; break;
// niconico 其他, 参考: https://dic.nicovideo.jp/a/nico.ms
case "sg": case "mg": case "bk": /*静画*/ base = "https://seiga.nicovideo.jp/watch/"; break;
case "lv": /*生放送*/ base = "https://live.nicovideo.jp/watch/"; break;
/* l/co 略去 */
case "co": /*社区*/ base = "https://com.nicovideo.jp/community/"; break;
case "ch": /*频道*/ base = "https://ch.nicovideo.jp/channel/"; break;
case "ar": /*频道文章*/ base = "https://ch.nicovideo.jp/article/"; break;
case "nd": /*直贩*/ base = "https://chokuhan.nicovideo.jp/products/detail/"; break;
/* 市场略去 */
case "ap": /*应用*/ base = "https://app.nicovideo.jp/app/"; break;
case "jk": /*实况*/ base = "https://jk.nicovideo.jp/watch/"; break;
case "nc": /*共有*/ base = "https://www.niconicommons.jp/material/"; break;
case "nw": /*新闻*/ base = "https://news.nicovideo.jp/watch/"; break;
}
if (base !== undefined) { return base + text; }
return false;
}
}, {
// niconico 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 (text) {
var link;
if (typeof rule.link === "function") {
link = rule.link(text);
if (link === false) { //< 如果返回 false, 代表并并未匹配到链接, 保留原文
return text;
}
} else {
link = rule.link.replace("{}", text);
}
return "<a class=\"autolink\" href=\"" + link + "\">" +
text + "</a>";
});
}

if (html != node.textContent) {
var parentNode = node.parentNode;
var dummy = document.createElement("span");
dummy.innerHTML = html;
parentNode.replaceChild(dummy, node);
}
}
})();

2021年5月1日 (六) 14:08的最新版本