|
|
(未显示3个用户的10个中间版本) |
第1行: |
第1行: |
| /* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */ | | |
| | /* 这个文件内的JavaScript源码将为所有PC用户在每次页面载入时加载 */ |
| | /* 原版大部分功能已改为使用 Gadgets 进行模块化加载*/ |
| /* 这些源码执行和希顶WIKI相同的 “知识共享署名-相同方式共享 4.0” 协议 */ | | /* 这些源码执行和希顶WIKI相同的 “知识共享署名-相同方式共享 4.0” 协议 */ |
|
| |
|
| /*************多语言选择*************/ | | /* 这里的代码将运行并在大多数PC端的主题里进行一定程度的页面调整 */ |
| function cleartext() {
| | /* 需要注意MeadiaWiki的代码预处理器仅支持较旧的JavaScript语法,如for of语句在此环境下不可用 */ |
| for(var i = 0; i < t1.length; i++) {
| | /* 需要在dom加载完后执行或需等待局部加载完毕执行的函数请在本文件末尾的指定位置调用 */ |
| t1[i].style.display = 'none';
| | $(function() { |
| t2[i].style.display = 'none';
| | //全文转希顶文字 |
| t3[i].style.display = 'none';
| | const varlang3=document.getElementById('ca-varlang-3') |
| t4[i].style.display = 'none';
| | if(varlang3){ |
| t5[i].style.display = 'none';
| | varlang3.firstChild.innerHTML = '全文转希顶<small>不建议</small>'; |
| t6[i].style.display = 'none';
| |
| }
| |
| }
| |
| | |
| /*************编辑器注入*************/ | |
| var xdi8Letters = [ //希顶字母表
| |
| [
| |
| ["!`", "b", "p", "m", "w", "j", "q", "x", "y", "n", "z", "D", "s", "r", "H", "N", "l", "d", "t", "g", "k", "h", "4", "5", "v", "F", "7", "B", "c", "f", "u", "a", "o", "e", "E", "A", "Y", "L", "6", "2", "T", "8", "3", "V", "1", "i"],
| |
| ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
| |
| ],
| |
| [
| |
| ["⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧", "⇧"],
| |
| ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
| |
| ],
| |
| [
| |
| ["⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩", "⇩"],
| |
| ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
| |
| ]
| |
| ];
| |
| | |
| function translatePua(str) { //翻译作pua
| |
| for(var i_ in xdi8Letters) {
| |
| var i = xdi8Letters[i_];
| |
| for(var j_ in i[0]) {
| |
| var j = i[0][j_];
| |
| while(str != str.replace(j, i[1][i[0].indexOf(j)])) {
| |
| str = str.replace(j, i[1][i[0].indexOf(j)])
| |
| }
| |
| }
| |
| }
| |
| return str;
| |
| }
| |
| | |
| function injectBotton() { //注入希顶按钮
| |
| function findBotton() {
| |
| if(document.getElementsByTagName("div")) {
| |
| for(var childs_ in document.getElementsByTagName("div")) {
| |
| var childs = document.getElementsByTagName("div")[childs_];
| |
| var attrs = childs.attributes;
| |
| if(attrs && (attrs["rel"] && attrs["rel"].value == "latin") && (attrs["class"] && attrs["class"].value != "toolbar section section-main") && (attrs["class"] && attrs["class"].value != "page page-latin page-characters")) {
| |
| return childs;
| |
| }
| |
| }
| |
| }
| |
| return null;
| |
| }
| |
| if(findBotton()) {
| |
| findBotton()
| |
| .setAttribute('class', '');
| |
| var xdi8Bottom = document.createElement('div');
| |
| xdi8Bottom.setAttribute('rel', 'xdi8');
| |
| xdi8Bottom.setAttribute('id', 'xdi8in');
| |
| xdi8Bottom.onclick = function() { //取自mediawiki内部脚本
| |
| var section;
| |
| $(this)
| |
| .parent()
| |
| .parent()
| |
| .find('.page')
| |
| .hide();
| |
| $(this)
| |
| .parent()
| |
| .parent()
| |
| .find('.page-' + $(this)
| |
| .attr('rel'))
| |
| .show()
| |
| .trigger('loadPage');
| |
| $(this)
| |
| .siblings()
| |
| .removeClass('current');
| |
| $(this)
| |
| .addClass('current');
| |
| section = $(this)
| |
| .parent()
| |
| .parent()
| |
| .attr('rel');
| |
| $.cookie('wikiEditor-' + $(this)
| |
| .data('context')
| |
| .instance + '-booklet-' + section + '-page', $(this)
| |
| .attr('rel'), {
| |
| expires: 30,
| |
| path: '/'
| |
| });
| |
| event.preventDefault();
| |
| }
| |
| xdi8Bottom.innerText = "希顶字母";
| |
| findBotton()
| |
| .parentNode.insertBefore(xdi8Bottom, findBotton());
| |
| return true;
| |
| } else {
| |
| return false;
| |
| }
| |
| }
| |
| | |
| function insertText(obj, str) { //向texteara插入文本在当前光标处 | |
| if(document.selection) {
| |
| var sel = document.selection.createRange();
| |
| sel.text = str;
| |
| } else if(typeof obj.selectionStart === 'number' && typeof obj.selectionEnd === 'number') {
| |
| var startPos = obj.selectionStart,
| |
| endPos = obj.selectionEnd,
| |
| cursorPos = startPos,
| |
| tmpStr = obj.value;
| |
| obj.value = tmpStr.substring(0, startPos) + str + tmpStr.substring(endPos, tmpStr.length);
| |
| cursorPos += str.length;
| |
| obj.selectionStart = obj.selectionEnd = cursorPos;
| |
| } else {
| |
| obj.value += str;
| |
| } | |
| }
| |
| | |
| function injectList() { //注入希顶输入列表
| |
| function findList() { | |
| if(document.getElementsByTagName("div")) {
| |
| for(var childs_ in document.getElementsByTagName("div")) {
| |
| var childs = document.getElementsByTagName("div")[childs_];
| |
| var attrs = childs.attributes;
| |
| if(attrs && (attrs["rel"] && attrs["rel"].value == "latin") && (attrs["class"] && attrs["class"].value == "page page-latin page-characters")) {
| |
| return childs;
| |
| }
| |
| }
| |
| }
| |
| return null;
| |
| };
| |
| if(findList()) {
| |
| findList()
| |
| .style = "display: none";
| |
| var xdi8List = document.createElement('div');
| |
| xdi8List.setAttribute('rel', 'xdi8');
| |
| xdi8List.setAttribute('class', 'page page-xdi8 page-characters');
| |
| | |
| var divin = document.createElement('div');
| |
| divin.setAttribute('dir', 'ltr');
| |
| | |
| var innerLetter = (xdi8Letters[0][1].concat(xdi8Letters[1][1]))
| |
| .concat(xdi8Letters[2][1]); //内含物字母列表
| |
| for(var letter_ in innerLetter) {
| |
| letter = innerLetter[letter_];
| |
| var spanin = document.createElement("span")
| |
| spanin.setAttribute('rel', letter);
| |
| spanin.innerText = letter;
| |
| spanin.style.fontFamily = "'XEGOEPUAall',-apple-system,'Helvetica Neue','Segoe UI',Helvetica,'Nimbus Sans L',Arial,'Liberation Sans','PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Source Han Sans SC','Microsoft YaHei','Wenquanyi Micro Hei','WenQuanYi Zen Hei','ST Heiti',SimHei,'WenQuanYi Zen Hei Sharp',sans-serif";
| |
| divin.appendChild(spanin);
| |
| spanin.onclick = function() {
| |
| insertText(wpTextbox1, $(this)
| |
| .attr('rel'));
| |
| };
| |
| }
| |
| xdi8List.appendChild(divin);
| |
| findList()
| |
| .parentNode.insertBefore(xdi8List, findList());
| |
| return true;
| |
| } else {
| |
| return false;
| |
| }
| |
| }
| |
| | |
| function insertTextBothSide(obj, str1, str2) { //向texteara插入文本在当前光标两侧
| |
| if(document.selection) {
| |
| var sel = document.selection.createRange();
| |
| sel.text = str1 + sel.text + str2;
| |
| } else if(typeof obj.selectionStart === 'number' && typeof obj.selectionEnd === 'number') {
| |
| var startPos = obj.selectionStart,
| |
| endPos = obj.selectionEnd,
| |
| cursorPos = startPos,
| |
| tmpStr = obj.value;
| |
| obj.value = tmpStr.substring(0, startPos) + str1 + tmpStr.substring(startPos, endPos) + str2 + tmpStr.substring(endPos, tmpStr.length);
| |
| cursorPos += str1.length;
| |
| obj.selectionStart = obj.selectionEnd = cursorPos;
| |
| } else {
| |
| obj.value = str1 + obj.value + str2;
| |
| }
| |
| }
| |
| | |
| function insertTransPua(obj) { //向texteara文段翻译
| |
| if(document.selection) { | |
| var sel = document.selection.createRange(); | |
| sel.text = translatePua(sel.text);
| |
| } else if(typeof obj.selectionStart === 'number' && typeof obj.selectionEnd === 'number') {
| |
| var startPos = obj.selectionStart,
| |
| endPos = obj.selectionEnd,
| |
| cursorPos = startPos,
| |
| tmpStr = obj.value;
| |
| obj.value = tmpStr.substring(0, startPos) + translatePua(tmpStr.substring(startPos, endPos)) + tmpStr.substring(endPos, tmpStr.length);
| |
| cursorPos += translatePua(tmpStr.substring(startPos, endPos))
| |
| .length - tmpStr.substring(startPos, endPos)
| |
| .length;
| |
| obj.selectionStart = obj.selectionEnd = cursorPos;
| |
| } else {
| |
| obj.value = translatePua(obj.value);
| |
| }
| |
| }
| |
| | |
| function findTransPua(obj) { //在texteara里寻找{{x}}翻译
| |
| function findX(str) {
| |
| for(var indx = str.indexOf("{{x|"); indx >= 0; indx = str.indexOf("{{x|")) {
| |
| var floor = 1;
| |
| var nowin = indx + 4;
| |
| while(floor > 0) {
| |
| var floora = str.indexOf("{{", nowin);
| |
| var floorb = str.indexOf("}}", nowin);
| |
| if(floora >= 0 || floorb >= 0) {
| |
| if((floora < floorb && floora >= 0) || floorb < 0) {
| |
| floor++;
| |
| nowin = floora + 2;
| |
| } else if((floorb < floora && floorb >= 0) || floora < 0) {
| |
| floor--;
| |
| nowin = floorb + 2;
| |
| }
| |
| } else {
| |
| floor = 0;
| |
| }
| |
| }
| |
| str = str.substring(0, indx) + translatePua(str.substring(indx + 4, nowin - 2)) + str.substring(nowin, str.length);
| |
| }
| |
| return str;
| |
| }
| |
| obj.value = findX(obj.value);
| |
| }
| |
| | |
| function injectBelow() { //注入下面的按钮
| |
| function findBelow() { //寻找位置
| |
| if(document.getElementsByTagName("div")) {
| |
| for(var childs_ in document.getElementsByTagName("div")) {
| |
| var childs = document.getElementsByTagName("div")[childs_];
| |
| var attrs = childs.attributes;
| |
| if(attrs && attrs["class"] && attrs["class"].value == "editOptions") {
| |
| return childs;
| |
| }
| |
| }
| |
| }
| |
| return null;
| |
| };
| |
| if(findBelow()) {
| |
| //希顶翻译块
| |
| var belowBottom3 = document.createElement('a');
| |
| belowBottom3.onclick = function() {
| |
| insertTransPua(wpTextbox1);
| |
| };
| |
| belowBottom3.innerText = "转换选中区域希顶为PUA";
| |
| belowBottom3.style.marginLeft = "1.4em";
| |
| findBelow()
| |
| .insertBefore(belowBottom3, findBelow()
| |
| .childNodes[0]);
| |
| //希顶翻译全文
| |
| var belowBottom4 = document.createElement('a');
| |
| belowBottom4.onclick = function() {
| |
| findTransPua(wpTextbox1);
| |
| };
| |
| belowBottom4.innerText = "转换全文{{x|}}内希顶为PUA";
| |
| belowBottom4.style.marginLeft = "1.4em";
| |
| findBelow()
| |
| .insertBefore(belowBottom4, findBelow()
| |
| .childNodes[0]);
| |
| //插入功能表
| |
| var funcLists = [
| |
| ["[[", "]]"],
| |
| ["{{拼|", "}}"],
| |
| ["{{|", "}}"],
| |
| ["{{ruby|", "|}}"],
| |
| ["{{color|red|", "}}"],
| |
| ["{{国家声明}}", ""],
| |
| ["{{人物声明}}", ""],
| |
| ["{{Info|", "}}"],
| |
| ["{{x|", "}}"]
| |
| ]
| |
| for(var funcList_ in funcLists) {
| |
| var funcList = funcLists[funcList_];
| |
| var belowBottom2 = document.createElement('a');
| |
| belowBottom2.setAttribute('onclick', "insertTextBothSide(wpTextbox1,'" + funcList[0] + "','" + funcList[1] + "');"); //需要固定量
| |
| belowBottom2.innerText = funcList[0] + (funcList[1] != "" ? "..." : "") + funcList[1];
| |
| belowBottom2.style.marginLeft = "1.4em";
| |
| findBelow()
| |
| .insertBefore(belowBottom2, findBelow()
| |
| .childNodes[0]);
| |
| }
| |
| | |
| var belowBottom = document.createElement('a');
| |
| belowBottom.href = "#xdi8in";
| |
| belowBottom.onclick = function() {
| |
| document.getElementById("wikiEditor-section-characters")
| |
| .setAttribute('class', 'booklet section section-characters section-visible');
| |
| }
| |
| belowBottom.innerText = "输入希顶字母";
| |
| findBelow()
| |
| .insertBefore(belowBottom, findBelow()
| |
| .childNodes[0]);
| |
| return true;
| |
| } else {
| |
| return false;
| |
| }
| |
| }
| |
| | |
| function setMobileBody() { //移动端处理
| |
| //标题栏处理,已废弃
| |
| /*if(window.screen.width <= 500 || ('ontouchstart' in document.documentElement)){
| |
| document.querySelector("#mw-head").style.width = document.querySelector("#mw-head").parentNode.clientWidth + 23 + "px";
| |
| document.querySelector("#mw-head").style.right = (-720 + window.screen.width) + "px";
| |
| }
| |
| else{
| |
| document.querySelector("#mw-head").style.right = "0px";
| |
| }*/
| |
| if(window.screen.width <= 500) { //如果在手机上
| |
| //缩放处理
| |
| document.querySelector("body")
| |
| .style.position = "absolute";
| |
| document.querySelector("body")
| |
| .style.transform = "scale(" + (window.screen.width / 500) + ")";
| |
| //document.querySelector("body").style.left= (-(500-window.screen.width)/2)+"px";
| |
| //document.querySelector("body").style.top= (-(document.querySelector("body").clientHeight-document.querySelector("body").clientHeight*(window.screen.width/500))/2)+"px";
| |
| } | | } |
| }
| |
|
| |
| function injectPageBase() { //处理大页面边距的一部分,其余用css实现
| |
| var mwPageBase = document.querySelector("#mw-page-base")
| |
| if(mwPageBase) {
| |
| var clonedPageBase = mwPageBase.cloneNode(true);
| |
| //clonedPageBase.setAttribute("id", "cloned-page-base");
| |
| clonedPageBase.setAttribute("style", "position: absolute; top: 0; width: 100%; left: 0;"); //css属性,浮动在背后提供背景
| |
| mwPageBase.parentNode.insertBefore(clonedPageBase, mwPageBase);
| |
| return true;
| |
| } else return false;
| |
| }
| |
|
| |
| var isShowPanel = false; //信息栏标志
| |
| function infoMethod() { //信息栏响应函数
| |
| if(!isShowPanel) {
| |
| isShowPanel = true;
| |
| document.querySelector("#mw-panel")
| |
| .style.display = "block";
| |
| document.querySelector("#ca-nstab-project")
| |
| .style.backgroundImage = "linear-gradient(to top,#77c1f6 0,#e8f2f8 1px,#ffffff 100%)";
| |
| } else {
| |
| isShowPanel = false;
| |
| document.querySelector("#mw-panel")
| |
| .style.display = "none";
| |
| document.querySelector("#ca-nstab-project")
| |
| .style.backgroundImage = "linear-gradient(to top,#ffffff 0,#ffffff 100%)";
| |
| }
| |
| }
| |
|
| |
| function injectInfos() { //注入信息栏
| |
| if(window.screen.width <= 500 && document.querySelector("#p-namespaces > div > ul")) { //如果在手机上并且加载完毕
| |
| var myInfos = document.createElement('li');
| |
| myInfos.setAttribute("id", "infos");
| |
| myInfos.setAttribute("class", "selected");
| |
| myInfos.innerHTML = "<a id='ininfos' href='javascript:void(0);' onclick='infoMethod()'>☰</a>";
| |
| document.querySelector("#p-namespaces > div > ul")
| |
| .insertBefore(myInfos, document.querySelector("#p-namespaces > div > ul")
| |
| .firstElementChild);
| |
| return true;
| |
| } else return false;
| |
| }
| |
|
| |
| function injectDivOutsideTable() { //注入表格外div
| |
| var allTable = document.getElementsByTagName("table");
| |
| if(allTable) {
| |
| for(var child_ in allTable) {
| |
| var child = allTable[child_];
| |
| var divOutside = document.createElement('div');
| |
| divOutside.setAttribute("class", "divOutsideTable");
| |
| child.parentNode.insertBefore(divOutside, child);
| |
| divOutside.appendChild(child);
| |
| }
| |
| }
| |
| }
| |
|
| |
| /*************定时执行块*************/
| |
| //定时控制变量,用于处理部分延迟元素的后加载
| |
| var isjectBotton = false;
| |
| var isjectList = false;
| |
| var isjectBelow = false;
| |
| var isjectPageBase = false;
| |
| var isjectInfos = false;
| |
| var XwInterval = setInterval(function() {
| |
| isjectBotton = (!isjectBotton) ? injectBotton() : true;
| |
| isjectList = (!isjectList) ? injectList() : true;
| |
| isjectBelow = (!isjectBelow) ? injectBelow() : true;
| |
| isjectPageBase = (!isjectPageBase) ? injectPageBase() : true;
| |
| isjectInfos = (!isjectInfos) ? injectInfos() : true;
| |
|
| |
|
| if(document.querySelector("#p-variants-label > span") | | if(document.querySelector("#p-variants-label > span") |
第394行: |
第18行: |
| document.querySelector("#p-variants-label > span") | | document.querySelector("#p-variants-label > span") |
| .innerText = '全文转希顶'; | | .innerText = '全文转希顶'; |
| }, 300);
| |
| var XwInterval2 = setInterval(setMobileBody, 3);
| |
| var XwInterval3 = setInterval(function() {
| |
| var myEvent = new Event('resize');
| |
| window.dispatchEvent(myEvent);
| |
| }, 30);
| |
| //销毁定时
| |
| setTimeout(function() {
| |
| clearInterval(XwInterval);
| |
| clearInterval(XwInterval2);
| |
| },
| |
| 15000);
| |
|
| |
|
| | | // 处理选择 |
| /*************函数执行块*************/ | | var chooses = document.getElementsByClassName('choose-container'); |
| //载入js时加载
| | for (var i = 0; i < chooses.length; ++i) { |
| injectMobieDemand(); //移动端需求注入
| | var choose = chooses[i]; |
| | | if (!choose.firstChild) |
| //dom执行完成后加载
| | continue; |
| $(function() {
| | choose.firstChild.style.display = 'none'; |
| //全文转希顶文字
| | choose.children[Math.floor(Math.random() * choose.children.length)].style.display = 'initial'; |
| document.getElementById('ca-varlang-3')
| | } |
| .firstChild.innerHTML = '全文转希顶<small>不建议</small>'; | |
| //document.getElementById('p-variants-label').firstChild.innerText = '全文转希顶';
| |
| | |
| //移动端需求注入 | |
| injectMobieDemand();
| |
| //移动端处理
| |
| setMobileBody();
| |
| | |
| //处理大页面边距
| |
| injectPageBase();
| |
| | |
| //注入表格外div
| |
| injectDivOutsideTable();
| |
| //移动端信息栏
| |
| //injectInfos();
| |
| }); | | }); |
| /*************内部包含反响*************/
| |
| //需要mw参数时用,回调函数外部无法取值
| |
| (function(mw) {
| |
|
| |
| })(mediaWiki);
| |