User:John doe 120/vector2.js
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
//__NOINDEX__
(()=>{
'use strict';
if(document.querySelector('.api-diff2, .diff-context-fade1, .diff-context-fade2'))throw 'name collision';
if(!window.wgULS)window.wgULS=(s,t)=>t;
changeStyle();
function changeStyle(){
var e1=[];
e1.push('.mw-changeslist .mw-plusminus-pos, .mw-changeslist .mw-plusminus-neg');
e1.push('#pagehistory .mw-plusminus-pos, #pagehistory .mw-plusminus-neg');
e1.push('.mw-contributions-list .mw-plusminus-pos, .mw-contributions-list .mw-plusminus-neg');
e1=document.querySelectorAll(e1.join(', '));
for(let e of e1){
let m=e.textContent.replace(/,/g,'').match(/\d+/);
if(!m)continue;
m=+m[0];
m=Math.log10(m+1)*30;
if(m>255)m=255;
m/=255;
let b;
if(e.className.includes('plusminus-pos'))
b=lab2rgb(100*(1-m)+71.3*m,-72.5*m,70.0*m);
else
b=lab2rgb(100*(1-m)+67.6*m,45.0*m,44.1*m);
e.animate({backgroundColor:['#FFF',b]},600);
e.style.backgroundColor=b;
}
function lab2rgb(l,a,b){
var y=(l+16)/116;
var x=y+a/500,z=y-b/200;
function f(t){
if(t>6/29)
return t*t*t;
else
return 3*(6/29)*(6/29)*(t-4/29);
}
x=95.047*f(x)/100;
y=100.000*f(y)/100;
z=108.883*f(z)/100;
var r,g;
r = 3.2406*x - 1.5372*y - 0.4986*z;
g = -0.9689*x + 1.8758*y + 0.0415*z;
b = 0.0557*x - 0.2040*y + 1.0570*z;
function c(i){
if(i<=0.0031308)
return 12.92*i;
else
return (1+0.055)*Math.pow(i,1/2.4)-0.055;
}
r=c(r)*255;
g=c(g)*255;
b=c(b)*255;
function f2(t){
if(t<0)t=0;
if(t>255)t=255;
return Math.round(t);
}
r=f2(r);
g=f2(g);
b=f2(b);
return 'rgb('+r+','+g+','+b+')';
}
}
const checkFloatingIP=(()=>{
var s=new Set();
return async function(x,e){
var h=x.getAllResponseHeaders();
h = h.replace(/(age|content-length|date|mediawiki-api-error|server|vary|x-cache|x-request-id):.*\r\n/g,'');
h = new TextEncoder().encode(h);
h = await crypto.subtle.digest('SHA-256', h);
h = Array.from(new Uint8Array(h));
h = h.map(b => b.toString(16).padStart(2, '0')).join('');
s.add(h);
if(s.size>1)e.style.background='#fef793';
}
})();
const Comparator={};
(()=>{
var a3=[],xhr3,loading;
Comparator.init=()=>{
document.head.insertAdjacentHTML('beforeend',`<style>
.api-diff2 { background:#fff; padding: 0 5px 5px 0; box-shadow: 0 0 5px 5px #bbb; margin:10px 0 25px; }
.api-diff2 td { padding:0.33em 0.5em; }
.api-diff2 .diff-context { background-color:#f9f9f9; border-color:#e6e6e6; }
.api-diff2 .diff-addedline, .api-diff2 .diff-deletedline, .api-diff2 .diff-context {
border-radius:0.33em; border-style:solid; border-width:1px 1px 1px 4px; font-size:13px; line-height:1.4; vertical-align:top; white-space:pre-wrap; min-width:80px; }
.api-diff2 td div { overflow-wrap:break-word; word-break:break-all; }
.api-diff2 .diff-addedline { border-color:#a3d3ff; }
.api-diff2 .diff-deletedline { border-color:#ffe49c; }
.api-diff2 .diffchange { text-decoration:none; }
.api-diff2 .diff-deletedline .diffchange { background-color:#f9d106; }
.api-diff2 .diff-addedline .diffchange { background-color:#b0d9fe; }
</style>`);
document.addEventListener('scroll',scroll2);
};
Comparator.compare=(s,r)=>{
var u='fromrev='+r+'&torelative=prev';
a3.push([s,u]);
}
Comparator.finish=scroll2;
Comparator.reset=()=>{
a3=[];
if(loading){
xhr3.abort();
loading=false;
}
};
Object.freeze(Comparator);
function scroll2(){
if(loading||!a3.length)return;
var e=a3[0][0], y=e.getBoundingClientRect().y;
if(y<0 || innerHeight*1.5<y)return;
xhr3 = new XMLHttpRequest();
xhr3.open('GET','/w/api.php?action=compare&format=json&'+a3[0][1]+'&prop=diff|size|title|comment');
xhr3.addEventListener('load',load3);
xhr3.send();
loading=true;
}
function load3(e){
loading=false;
var r=e.target.response;
r=JSON.parse(r);
var t=document.createElement('table');
t.className='api-diff2';
if(r.compare){
r=r.compare;
t.innerHTML='<tbody>'+r['*']+'</tbody>';
if(t.textContent=='\n\n'||t.textContent===''){
t.children[0].insertAdjacentHTML('afterbegin','<tr><td>'+wgULS('(没有差异)','(無差異)')+'</td></tr>');
}
}else if(r.error.code=='missingcontent'){
let e=document.createElement('td');
e.append(r.error.info);
t.innerHTML='<tbody><tr>'+e.outerHTML+'</tr></tbody>';
}else throw 'error';
a3[0][0].after(t);
checkFloatingIP(e.target,a3[0][0]);
optimizeHeight(t);
removeExcessWidth(t);
reduceContext(t);
a3.splice(0,1);
scroll2();
}
function optimizeHeight(t){
var m=t.clientHeight,w1=t.clientWidth,w,m1=m;
var e=t.querySelector('.diff-addedline,.diff-deletedline');
if(!e)return;
var n=performance.now();
for(let i=100;i<w1;i+=10){
if(performance.now()-n>140)break;
e.style.width=i+'px';
let h=t.clientHeight;
if(h>=m)continue;
m=h;
w=i;
}
if(!w)e.style.width='';
else{
e.style.width=w+'px';
//console.log(m1+' > '+m);
}
}
//Special:Diff/62313157
function removeExcessWidth(t){
if(t.clientWidth<t.parentNode.clientWidth+200)return;
t.insertAdjacentHTML('afterbegin','<colgroup><col style="width: 2%;"><col><col style="width: 2%;"><col></colgroup>');
t.style.tableLayout='fixed';
t.style.width='100%';
}
})();
(()=>{
if(!document.body.classList.contains('page-Special_最近更改') && !document.body.classList.contains('mw-special-Recentchanges'))return;
var xhr,xhr2,r,el=new Map(),hs=new Map(),us=new Map(), e=document.querySelector('div.mw-changeslist');
if(!e)return;
if(window.getComputedStyle(document.querySelector('.mw-changeslist span.comment')).unicodeBidi!='isolate')throw 'error';
Comparator.init();
var c=2,a=document.createElement('a'),a1=document.createElement('a');
var compare2=document.createElement('input'),compare3=document.createElement('label');
compare2.type='checkbox';
compare3.append(compare2,'加載差異');
var time1=document.createElement('input'),time2=document.createElement('div');
time1.type='text';
var time3=e.querySelector('ul:last-of-type>li:last-child');
time3=time3.dataset.mwTs;
if(!/^\d{14}$/.test(time3))throw 'error';
setTime(time3.replace(/(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/,'$1-$2-$3T$4:$5:$6Z'));
time1.size=15;
time2.append('開始時間:',time1);
var ores=document.createElement('input'),ores1=document.createElement('label');
ores.type='checkbox';
ores1.append(ores,'按ORES值排序');
a.textContent='第'+c+'頁';
a.style.marginLeft='0.5em';
a1.textContent='隨機頁';
a1.style.marginLeft='0.5em';
e.after(time2,compare3,ores1,a,a1);
a.addEventListener('click',click1);
a1.addEventListener('click',click1);
var rclimit=document.querySelector('.rclinks>a[data-keys="limit"]>strong');
if(rclimit)rclimit=rclimit.textContent;
else rclimit=100;
var logTranslation=new Map();
(()=>{
var s='abusefilter 滥用过滤器,block 封禁,contentmodel 内容模型更改,create 页面创建,delete 删除,gblblock 全域封禁,gblrename 全域重命名,gblrights 全域权限,globalauth 全域账户,import 导入,managetags 标签管理,massmessage 大量信息,merge 合并,move 移动,newusers 用户创建,patrol 巡查,protect 保护,renameuser 用户更名,rights 用户权限,spamblacklist 垃圾链接黑名单,tag 标签,thanks 感谢,upload 上传,usermerge 用户合并';
var t='abusefilter 防濫用過濾器修改,block 封鎖,contentmodel 內容模型變更,create 頁面建立,delete 刪除,gblblock 全域封鎖,gblrename 全域重新命名,gblrights 全域權限,globalauth 全域帳號,import 匯入,managetags 標籤管理,massmessage 大量訊息,merge 合併,move 移動,newusers 使用者建立,patrol 巡查,protect 保護,renameuser 使用者名稱變更,rights 使用者權限,spamblacklist 垃圾連結黑名單,tag 標籤,thanks 感謝,upload 上傳,usermerge 使用者合併';
s=s.split(',');
t=t.split(',');
for(let i=0;i<s.length;i++){
let s1=s[i].split(' ');
let t1=t[i].split(' ');
logTranslation.set(s1[0],wgULS(s1[1],t1[1]));
}
})();
//compare2.checked=true;
//click1({target:a});
function setTime(t){
time3=Date.parse(t);
if(!time3)throw 'error';
time1.value=new Date(time3-new Date().getTimezoneOffset()*60e3).toISOString().replace('T',' ').replace(/\.\d{3}Z$/,'');
}
function click1(e2){
if(xhr)return;
var e1=Date.parse(time1.value.trim().replace(' ','T')+'Z');
if (e1) time1.style.outline='';
else {
time1.style.outline='1px solid red';
return;
}
e1=e1/1e3+new Date().getTimezoneOffset()*60;
e2=e2.target;
e.style.opacity=0.5;
Comparator.reset();
if(e2==a1){
let a=new Uint16Array(1);
crypto.getRandomValues(a);
e1=(Date.now()/1e3-3600*24*30*a[0]/0xffff).toFixed(0);
}
var e3 = document.querySelector('#namespace'), ns='';
if (e3 && e3.value!=='') ns='&rcnamespace='+e3.value;
var an=(location.href.includes('&hideliu=1')?'&rcshow=anon':'');
var tag1=document.querySelector('input.mw-tagfilter-input'), tag='';
if (tag1 && tag1.value) tag='&rctag='+encodeURIComponent(tag1.value);
xhr=new XMLHttpRequest();
var u='/w/api.php?action=query&format=json&list=recentchanges&rcstart='+e1+'&rcdir=older&rcprop='+
'user%7Ccomment%7Cparsedcomment%7Cflags%7Ctimestamp%7Ctitle%7Cids%7Csizes%7Cloginfo%7Coresscores%7Ctags%7Csha1&rclimit='+rclimit+'&rctype=edit%7Cnew%7Clog'+ns+an+tag;
//console.log(u);
xhr.open('GET',u);
xhr.addEventListener('load',load1);
xhr.send();
}
function load1(){
r=xhr.response;
if(!r)return;
r=JSON.parse(r);
console.log(r);
r=r.query.recentchanges;
if(r.length){
xhr2=new XMLHttpRequest();
xhr2.open('GET','/w/api.php?action=query&format=json&list=watchlist&wlallrev=1&wlstart='+r[0].timestamp+'&wlend='+r[r.length-1].timestamp+'&wllimit='+rclimit);
xhr2.addEventListener('load',load2);
xhr2.send();
}else{
xhr2={response:'{"batchcomplete":"","query":{"watchlist":[]}}'};
load2();
}
}
function load2(){
xhr=null;
var s=new Set(),r2=xhr2.response;
r2=JSON.parse(r2);
console.log(r2);
hs.clear();
us.clear();
var c1=Array.from(e.childNodes);
for(let c of c1) c.remove();
e.style.opacity='';
window.scrollTo(0,600);
//if(r2.query){
r2=r2.query.watchlist;
for(let e of r2){
if(s.has(e.title))continue;
s.add(e.title);
}
//}
if(r.length)setTime(r[r.length-1].timestamp);
else e.append(wgULS('在此期间没有符合这些条件的编辑','於指定時間內沒有符合條件的變更。'));
if(ores.checked)r.sort((a,b)=>computeOres(b)-computeOres(a));
for(let i=0;i<r.length;i++){
let d=new Date(r[i].timestamp);
if(!d)continue;
let d2=d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate());
if(s.has(r[i].title))
r[i].watched=true;
append1(d2,r[i]);
}
a.textContent='第'+(++c)+'頁';
changeStyle();//
}
function computeOres(a){
return computeOres1(a)+computeOres2(a);
}
function computeOres1(a){
var d=a?.oresscores?.damaging?.true;
if(d===undefined)d=0;
return d;
}
function computeOres2(a){
var b=a?.oresscores?.goodfaith?.false;
if(b===undefined)b=0;
return b;
}
function pad(n){
if(n<=9)
return '0'+n;
else
return n;
}
function append1(d,c){
var h,u,li;
if(!hs.has(d)){
h=document.createElement('h4');
h.textContent=d;
hs.set(d,h);
u=document.createElement('ul');
u.className='special';
e.append(h,u);
us.set(d,u);
}else{
u=us.get(d);
}
li=document.createElement('li');
if(c.type=='edit')
li.dataset.mwRevid=c.revid;
li.dataset.mwTs=c.timestamp.replace(/\D/g,'');
li.className='mw-changeslist-line';
if(c.watched)
li.className+=' mw-changeslist-line-watched';
else
li.className+=' mw-changeslist-line-not-watched';
u.appendChild(li);
var s=document.createElement('span');
s.className='mw-changeslist-line-inner';
li.appendChild(s);
if(c.type=='edit'||c.type=='new'){
appendEdit(s,c);
if(compare2.checked)Comparator.compare(s,c.revid);
}else if(c.type=='log') appendLog1(s,c);
else throw 'error';
}
function appendEdit(s,c){
s.insertAdjacentHTML('beforeend','(<a href class="mw-changeslist-diff" title>'+wgULS('差异','差異')
+'</a> | <a href class="mw-changeslist-history" title>'+wgULS('历史','歷史')+'</a>)');
var diff=s.querySelector('a.mw-changeslist-diff');
if(diff){
diff.href='/w/index.php?title='+encode(c.title)+'&curid='+c.pageid+'&diff='+c.revid+'&oldid='+c.old_revid;
addEventListener1(diff);
diff.addEventListener('mouseenter',fadeOut);//
diff.title=c.title;
}
var hist=s.querySelector('a.mw-changeslist-history');
if(hist){
hist.href='/w/index.php?title='+encode(c.title)+'&curid='+c.pageid+'&action=history';
addEventListener1(hist);
hist.title=c.title;
}
addSeparator(s);
if('new' in c) insert(s,'<abbr class="newpage">新</abbr> ');
if('minor' in c)insert(s,'<abbr class="minoredit">小</abbr> ');
if('bot' in c) insert(s,'<abbr class="botedit">'+wgULS('机','機')+'</abbr> ');
var e4=addTitle(s,c);
if(!c.sha1){
let e=document.createElement('span');
e.className='history-deleted';
e4.before(e);
e.append(e4);
}
addSeparator1(s);
s.insertAdjacentHTML('beforeend','<span class="mw-changeslist-date"></span>');
var date=s.querySelector('span.mw-changeslist-date');
if(date){
let date2=new Date(c.timestamp);
date.textContent=pad(date2.getHours())+':'+pad(date2.getMinutes())+':'+pad(date2.getSeconds());
}
addSeparator(s);
s.insertAdjacentHTML('beforeend','<span dir="ltr" class="mw-plusminus-pos" title></span>');
var size=s.querySelector('span.mw-plusminus-pos');
if(size){
let size2=c.newlen-c.oldlen;
if(size2>0)
size2='+'+size2;
else if(size2==0)
size.className='mw-plusminus-null';
else
size.className='mw-plusminus-neg';
size.title='更改后有'+c.newlen+'字节';
size.textContent='('+size2+')';
}
addSeparator(s);
addUser(s,c);
var c1=addComment(s,c);
if(!c1 && 'commenthidden' in c) insert(s,' <span class="history-deleted comment">('+wgULS('编辑摘要被移除','註釋已除')+')</span>');
if(c.tags){
let d=computeOres1(c),b=computeOres2(c);
if(d>0.1)c.tags.push('ores-damaging-'+Math.round(d*10));
if(b>0.1)c.tags.push('ores-badfaith-'+Math.round(b*10));
}
addTags(s,c);
}
function addUser(p,c){
if(!('user' in c) && 'userhidden' in c){
insert(p,'<span class="history-deleted">('+wgULS('用户名被删除','已移除使用者名稱')+')</span>');
return;
}
var a=document.createElement('a'),b=document.createElement('bdi');
a.className='mw-userlink';
a.href='/wiki/Special:Contributions/'+encode(c.user);
addEventListener1(a);
b.textContent=c.user;
a.append(b);
p.append(a);
}
function addTitle(p,c){
var s=document.createElement('span'),a=document.createElement('a'),b=document.createElement('bdi');
s.className='mw-title';
b.textContent=c.title;
a.append(b);
a.href='/wiki/'+encode(c.title);
addEventListener1(a);
s.append(a);
p.append(s);
return a;
}
function encode(c){
return encodeURIComponent(c.replace(/ /g,'_')).replace(/%3A/g,':').replace(/%2F/g,'/');
}
function appendLog1(s,c){
var e1=document.createElement('a');
e1.className='mw-changeslist-links';
if('logtype' in c){
e1.href='/wiki/Special:%E6%97%A5%E5%BF%97/'+encode(c.logtype);
let v=logTranslation.get(c.logtype);
if(!v)v=c.logtype;
e1.textContent=v;
}
e1.textContent+=wgULS('日志','日誌');
s.append(e1);
addSeparator1(s);
var e2=document.createElement('span');
e2.className='mw-changeslist-date';
var d2=new Date(c.timestamp);
e2.textContent=pad(d2.getHours())+':'+pad(d2.getMinutes())+':'+pad(d2.getSeconds());
s.append(e2);
addSeparator(s);
var s1=document.createElement('span');
s1.className='mw-changeslist-log-entry';
s.append(s1);
addUser(s1,c);
if ('actionhidden' in c){
insert(s1,' <span class="history-deleted">('+wgULS('日志详情已移除','日誌已除')+')</span>');
}else{
s1.append(' ',c.logaction,' ');
addTitle(s1,c);
s1.append(' ',JSON.stringify(c.logparams));
}
addComment(s1,c);
if('commenthidden' in c) console.log(c)
addTags(s,c);
}
function addSeparator(s){
insert(s,' <span class="mw-changeslist-separator"></span> ');
}
function addSeparator1(s){
insert(s,'<span class="mw-changeslist-separator--semicolon"></span> ');
}
function addComment(p,c){
if(!c.comment)return;
var s=document.createElement('span');
s.className='comment comment--without-parentheses';
if(!c.comment.includes('|')) s.innerHTML=c.parsedcomment;
else s.textContent=c.comment;
p.append(' ',s);
return true;
}
function addTags(p,c){
if(!c.tags.length)return;
var s=document.createElement('span');
s.className='mw-tag-markers';
insert(s,'<a href="/wiki/Special:%E6%A0%87%E7%AD%BE" title="Special:标签">'+wgULS('标签','標籤')+'</a>:');
for(let e of c.tags){
let t=document.createElement('span');
t.className='mw-tag-marker';
t.textContent=e;
s.append(t);
}
p.append(' ',s);
}
function insert(s,h){
s.insertAdjacentHTML('beforeend',h);
}
function addEventListener1(a){
if(getEventListeners()){
a.hasPopup=true;
a.addEventListener('mousedown',el.get('mousedown'));
a.addEventListener('mouseout',el.get('mouseout'));
a.addEventListener('mouseover',el.get('mouseover'));
}
}
function getEventListeners(){
if(!el.size){
let n=new Map();
n.set('onmousedown','killPopup');
n.set('onmouseout','mouseOutWikiLink');
n.set('onmouseover','mouseOverWikiLink');
let e=document.querySelector('#recentchangesblock a[href="/wiki/Wikipedia:%E7%A4%BE%E5%8C%BA%E4%B8%BB%E9%A1%B5"]');
if(!e)return;
for(let k of n.keys()){
if(!e[k])return;
if(n.get(k)!=e[k].name)return;
el.set(k.replace(/^on/,''),e[k]);
}
return true;
}else
return true;
}
})();
(()=>{
(() => {
var p = document.querySelector('#mw-history-compare>#pagehistory');
if (!p) return;
var a = p.querySelectorAll('li');
p.textContent = '';
for (let e of a) p.append(e);
})();
var m=location.href.match(/^https:\/\/(zh|en)\.wikipedia\.org\/w\/index\.php\?title=([^&]*).*?&action=history$/);
if(!m)return;
m=m[2];
var e=document.querySelector('form>#pagehistory>li'),c1=Comparator;
if(!e)return;
document.head.insertAdjacentHTML('beforeend',`<style>
#pagehistory>li>.history-user>.mw-usertoollinks { opacity:0.5; }
#pagehistory>li>.history-size { display:none; }
#pagehistory>li>.updatedmarker { display:none; }
</style>`);
if(location.host=='zh.wikipedia.org'){
let e1=document.querySelectorAll('.mw-changeslist-links>span>.mw-history-undo');
for(let e of e1){
let t=e.parentNode.parentNode.textContent;
if(t=="撤销"||t=="撤销感谢")e.parentNode.parentNode.style.display='none';
}
}
var e1=document.querySelectorAll('#pagehistory>li>.updatedmarker');
for(let e of e1)e.parentNode.style.backgroundColor='#f1f6e1';
(()=>{
if(!e1.length)return;
var e=e1[e1.length-1].parentNode;
if(e.nextElementSibling)e=e.nextElementSibling;
e=e.querySelector('input[name=oldid]');
e.checked=true;
})();
c1.init();
var xhr=new XMLHttpRequest();
xhr.open('GET','/w/api.php?action=query&format=json&prop=revisions&titles='+m+'&rvlimit='+e.parentNode.childElementCount+'&rvstartid='+e.dataset.mwRevid+'&rvprop=ids%7Ctimestamp%7Cflags%7Ccomment%7Cuser%7Csha1%7Csize');
xhr.addEventListener('load',load1);
xhr.send();
var m1=new Map(),m2=new Map(),m3=new Map();
e=e.parentNode;
e.style.opacity=0.5;
function load1(){
e.style.opacity='';
var r=xhr.response;
r=JSON.parse(r);
console.log(r);
r=r.query.pages;
var k=Object.keys(r);
r=r[k[0]].revisions;
var c=Array.from(e.children);
for (let i=0; i<c.length; i++) {
if(c[i].dataset.mwRevid!=r[i].revid)throw 'error';
let e=c[i].querySelector('span.comment');
if(!e||!e.childElementCount)continue;
if (!(r[i].comment&&r[i].comment.includes('|'))) continue;
m1.set(e,e.innerHTML);
e.textContent='('+r[i].comment+')';
e=c[i].querySelector('.mw-diff-bytes[title]');
if(!e)continue;
e.addEventListener('mouseenter',me,{once:true});
}
for (let i=0; i<c.length; i++) {
if(!r[i].sha1)continue;//hidden
let e=c[i].querySelector('.mw-diff-bytes[title]');
m2.set(e,r[i].size+' '+r[i].sha1);
m3.set(e,e.style.backgroundColor);
e.addEventListener('mouseenter',me1);
e.addEventListener('mouseleave',ml1);
e.title+='\nsha1: '+r[i].sha1;
}
var compare2=document.createElement('a');
compare2.style.marginLeft='1.5em';
compare2.append(wgULS('倒转并加载差异','倒轉並加載差異'));
var e1=e.parentNode.querySelector('.mw-history-compareselectedversions');
e1=e1.querySelector('div>.mw-checkbox-invert')||e1.querySelector('.historysubmit');
e1.after(compare2);
compare2.addEventListener('click',()=>{
compare2.style.color='#000';
var f=new FormData(e.parentNode), o1=f.get('oldid');
for (let i=0; i<c.length; i++) {
e.prepend(c[i]);
if(r[i].revid==o1 && i>1){
c.splice(i+1);
break;
}
}
for (let i=c.length-1; i>=0; i--) c1.compare(c[i],r[i].revid);
c1.finish();
},{once:true});
}
function me(e){
e=e.target.parentNode.querySelector('span.comment');
if(!e)return;
e.innerHTML=m1.get(e);
}
function me1(e1){
var s=m2.get(e1.target);
for (let [k,v] of m2.entries()) {
if (s==v) k.style.backgroundColor='#ccf';
}
}
function ml1(e){
for (let k of m2.keys()) k.style.backgroundColor=m3.get(k);
}
})();
(()=>{
if(location.host!='zh.wikipedia.org'||!document.body.classList.contains('mw-special-Contributions'))return;
var e1=document.querySelectorAll('.mw-contributions-list>li'),c1=Comparator;
if(!e1.length)return;
c1.init();
var compare2=document.createElement('a');
compare2.append(wgULS('加载差异','加載差異'));
e1[0].parentNode.before(compare2);
compare2.addEventListener('click',()=>{
compare2.style.color='#000';
for (let e of e1){
if(e.classList.contains('mw-flow-contribution'))continue;
c1.compare(e,e.dataset.mwRevid);
}
c1.finish();
},{once:true});
})();
(()=>{
if(location.host!='zh.wikipedia.org')return;
var loopCount=10000;
var s ='<style>', w1=((window.popupMaxWidth-101)/2).toFixed();
s+='.navpopup .api-diff { background-color:rgba(255,255,255,0.5); }';
s+='.navpopup .api-diff td { padding:0.33em 0.5em; }';
s+='.navpopup .diff-context { background-color:#f9f9f9; border-color:#e6e6e6; }';
s+='.navpopup .diff-addedline, .navpopup .diff-deletedline, .navpopup .diff-context {';
s+=' border-radius:0.33em; border-style:solid; border-width:1px 1px 1px 4px; font-size:13px; line-height:1.4; vertical-align:top; white-space:pre-wrap; max-width:'+w1+'px; }';
s+='.navpopup .api-diff td div { overflow-wrap:break-word; width:inherit; }';
s+='.navpopup .diff-addedline { background-color:#fff; border-color:#a3d3ff; }';
s+='.navpopup .diff-deletedline { border-color:#ffe49c; }';
s+='.navpopup .diffchange { text-decoration:none; }';
s+='.navpopup .diff-deletedline .diffchange { background-color:#f9d106; }';
s+='.navpopup .diff-addedline .diffchange { background-color:#b0d9fe; }';
s+='.navpopup>.popupPreview .popupNewLine:before { content:"⏎"; }';
s+='.navpopup .api-diff .diff-marker1:before { content:"−"; }';
s+='.navpopup .api-diff .diff-marker2:before { content:"+"; }';
s+='.navpopup .api-diff .diff-empty1:before { content:"\\a0"; }';
s+='</style>';
document.head.insertAdjacentHTML('beforeend',s);
var ws=new WeakSet();
var mo=new MutationObserver(mr1=>{
//if(loopCount--<0)return;
var te=new TextEncoder();
for(let mr of mr1){
let t=mr.target;
if(t.className!='popupPreview')continue;
if(!t.querySelector('.popup_diff_dates'))continue;
if(ws.has(t))continue;
ws.add(t);
move1(t.parentNode);
let b1=t.querySelectorAll('br');
for(let b of b1) b.replaceWith('\n');
let d1=t.querySelectorAll('ins.popupDiff,del.popupDiff');
for(let d of d1)
d.dataset.length=te.encode(d.textContent).length;
t.style.whiteSpace='pre-wrap';
d1=t.querySelectorAll('del.popupDiff');
for(let d of d1) trim(d);
insertNewLine(t);
addDate1(t);
t.normalize();
addDiff(t);
//console.log(mr);
}
});
mo.observe(document.body,{childList:true,subtree:true});
function move1(e){
var le=e.style.left;
if(!le)return;
le=le.match(/^(\d+)px$/);
if(!le)return;
le=+le[1]-2;
if(le>=0) e.style.left=le+'px';
var t=e.style.top;
if(!t)return;
t=t.match(/^(\d+)px$/);
if(!t)return;
t=+t[1]-2;
if(t>=0) e.style.top=t+'px';
}
function trim(d){
var i = d.nextSibling;
if (!i || i.tagName!='INS'||i.className!='popupDiff') return;
if(d.childElementCount||i.childElementCount)return;
d.normalize();
i.normalize();
var a=trim1(d.textContent,i.textContent);
//console.log('"'+d.textContent+'", "'+i.textContent+'"');
//console.log('"'+a[0]+'", "'+a[1]+'", "'+a[2]+'", "'+a[3]+'"');
//d.title+='"'+d.textContent+'", "'+i.textContent+'"';
//d.title+='\n"'+a[0]+'", "'+a[1]+'", "'+a[2]+'", "'+a[3]+'"'
d.dataset.text2=d.textContent;
i.dataset.text2=i.textContent;
d.dataset.a0=a[0];
d.dataset.a1=a[1];
d.dataset.a2=a[2];
d.dataset.a3=a[3];
d.textContent = a[0];
i.textContent = a[1];
if(a[2])
d.insertAdjacentText('beforebegin',a[2]);
if(a[3])
i.insertAdjacentText('afterend',a[3]);
}
function trim1(t1,t2){
var a1=[],a2=[],a3=[], a4=[];
push(t1,a1);
push(t2,a2);
function push(t,a){
var e,r=/[\ud800-\udbff][\udc00-\udfff]|[^]/g;
while((e=r.exec(t))!==null)
a.push(e[0]);
}
while(a1.length&&a2.length)
if(a1[a1.length-1]==a2[a2.length-1]){
a4.push(a1.pop());
a2.pop();
}else
break;
a4.reverse();
a1.reverse();
a2.reverse();
while(a1.length&&a2.length)
if(a1[a1.length-1]==a2[a2.length-1]){
a3.push(a1.pop());
a2.pop();
}else
break;
a1.reverse();
a2.reverse();
return [a1.join(''),a2.join(''),a3.join(''),a4.join('')];
}
function insertNewLine(e){
insertNewLine1(e);
var e1=e.querySelectorAll('ins.popupDiff,del.popupDiff');
for(let e of e1)insertNewLine1(e);
}
function insertNewLine1(e){
var e1=Array.from(e.childNodes);
for(let e of e1){
if (e.nodeType!=Node.TEXT_NODE) continue;
let t=e.textContent,i=t.length;
while(true){
i=t.lastIndexOf('\n',i-1);
if(i<0)break;
e.splitText(i+1);
e.textContent=t.substr(0,i);
let s=document.createElement('span');
s.className='popupNewLine';
s.textContent='\n';
e.after(s);
if(i===0)break;
}
}
}
function addDate1(e){
var d1=e.querySelector('.popup_diff_dates td:last-child');
if(!d1)return;
d1=Date.parse(d1.textContent+'+08:00');
if(!d1)return;
addDate2(e,'#e60000',d1);
var e1=e.querySelectorAll('ins.popupDiff');
for(let e of e1)
addDate2(e,'#e60000',d1);
}
function addDate2(e,c,d1){
var e1=e.childNodes;
var r=/(20\d+年\d+月\d+日 \([一二三四五六日]\) \d{2}:\d{2} \(UTC\))([^]*)$/;
for(let e of e1){
if(e.nodeType!=Node.TEXT_NODE)continue;
let t=e.textContent;
let m=t.match(r);
if(!m)continue;
e.textContent=t.replace(r,'');
e.after(m[2]);
let s=document.createElement('span');
s.style.color=c;
s.textContent=m[1];
e.after(s);
let d=Date.parse(m[1].replace(/[年月]/g,'-').replace(/日|\(.*?\)/g,'')+'+00:00');
if(!d)continue;
d=(d-d1)/1e3;
if(d<-3600)
s.title=(d/3600).toFixed(1)+'h';
else if(d<-120)
s.title=(d/60).toFixed(1)+'m';
else
s.title=d+'s';
if(-65<d && d<=0)
s.style.color='#0c0';
}
}
function addDiff(e){
e.style.fontFamily='consolas,simsun,monospace';
e.style.lineHeight=1.2;
var t=document.createElement('table');
t.className='api-diff';
e.appendChild(t);
t.insertAdjacentHTML('beforebegin','<hr>');
var xhr = new XMLHttpRequest();
var a = e.querySelectorAll('.popup_diff_dates a[href*="oldid"]');
if(a.length!=2)return;
var r1=/oldid=(\d+)$/, r2=/oldid=\d+&direction=prev$/;
var m1, m2, h1=a[0].href, h2=a[1].href;
if((m1=h1.match(r1)) && (m2=h2.match(r1))){
xhr.open('GET','https://zh.wikipedia.org/w/api.php?action=compare&format=json&fromrev='+m2[1]+'&torev='+m1[1]+'&prop=diff|size|title|comment');
}else if((m1=h1.match(r1)) && h2.match(r2)){
xhr.open('GET','https://zh.wikipedia.org/w/api.php?action=compare&format=json&fromrev='+m1[1]+'&torelative=prev&prop=diff|size|title|comment');
}else
return;
xhr.addEventListener('load',load1);
xhr.send();
function load1(){
var r=xhr.response;
if(!r)return;
r=JSON.parse(r);
r=r.compare;
if(!r)return;
t.innerHTML='<tbody>'+r['*']+'</tbody>';
reduceContext(t);
var e1=e.querySelectorAll('ins.popupDiff,del.popupDiff');
var c=0;
for(let e of e1){
if(e.tagName=='INS')
c+= +e.dataset.length;
else
c-= +e.dataset.length;
}
var d=r.tosize-r.fromsize-c;
var e2=t.parentNode.querySelector('b');
if(d && !(e2&&e2.textContent=='差异已被截断'))
t.insertAdjacentHTML('beforebegin','<b style="color:red;">差异已被截断</b><hr>');
var s1=document.createElement('span');
s1.style.color='#808080';
t.parentNode.insertBefore(s1,t);
s1.textContent='title: '+r.totitle;
if(r.tocomment)
s1.textContent+='\ncomment: '+r.tocomment;
s1.textContent+='\nchange: '+(r.tosize-r.fromsize)+' '+d;
t.insertAdjacentHTML('beforebegin','<hr>');
e.normalize();
e1=t.querySelectorAll('.diff-marker');
for(let e of e1){
if(e.textContent=='−'){
e.textContent='';
e.className='diff-marker1';
}else if(e.textContent=='+'){
e.textContent='';
e.className='diff-marker2';
}
}
e1=t.querySelectorAll('.diff-empty');
for(let e of e1){
if(e.textContent=='\xa0'){
e.textContent='';
e.className='diff-empty1';
}
}
}
}
})();
document.head.insertAdjacentHTML('beforeend',`<style>
.diff-context-fade1>.diff-context, .diff-context-fade2>.diff-context { max-height:77px; display:inline-block; overflow:hidden; }
.diff-context-fade1>.diff-context { background:linear-gradient(0, #f9f9f9 75%,#ddd); }
.diff-context-fade2>.diff-context { background:linear-gradient(0, #ddd,#f9f9f9 25%); }
</style>`);
function reduceContext(t){
var n=98,s=new Set();
var e1=t.querySelectorAll('tr>.diff-context'), r1=/\d{4}年\d{1,2}月\d{1,2}日 \(.\) \d{2}:\d{2} \(UTC\)/;
for(let e of e1){
if(e.clientHeight<n)continue;
let e2=e.parentNode.nextElementSibling;
//if (r.totitle.startsWith('Wikipedia:') && e2 && e2.querySelector('.diff-addedline') && r1.test(e2.textContent)) continue;
if(s.has(e.parentNode))continue;
s.add(e.parentNode);
trim1(e.parentNode);
}
function trim1(e){
var begin=false, e1=e.previousElementSibling, e2=e.nextElementSibling;
if(e1&&e1.querySelector('.diff-lineno') || e2&&e2.querySelector('.diff-deletedline, .diff-addedline')) begin=true;
e.classList.add('diff-context-fade'+(begin?1:2));
if(begin){
e1=e.querySelectorAll('.diff-context>div');
for(let e of e1) e.style.marginTop=77-e.clientHeight+'px';
}
e.addEventListener('click',enter2);
/*function enter1(e){
e=e.target;
var i=setTimeout(enter2,500,e);
e.addEventListener('mouseleave',()=>{
clearTimeout(i);
},{once:true});
}*/
function enter2(e){
e=e.currentTarget;
//e.removeEventListener('mouseenter',enter1);
e.classList.remove('diff-context-fade1');
e.classList.remove('diff-context-fade2');
if(!begin)return;
var e1=e.querySelectorAll('.diff-context>div');
for(let e of e1) e.style.marginTop='';
}
}
}
(()=>{
var e1=document.querySelectorAll('.mw-history-histlinks>span:last-child>a');
for(let e of e1){
//if(e.className)
// e=e.previousElementSibling;
//if(!e)continue;
e.parentNode.addEventListener('mouseenter',fadeOut);
}
})();
function fadeOut(e){
var tid=setTimeout(fadeOut1,window.popupDelay*1e3);
e=e.target;
e.addEventListener('mouseleave',fadeOut2,{once:true});
function fadeOut1(){
e.parentNode.parentNode.style.backgroundColor='#fdf3de';
}
function fadeOut2(){
clearTimeout(tid);
}
}
if(location.host=='zh.wikipedia.org') mw.loader.load('/w/load.php?modules=ext.gadget.Navigation_popups');
})();