사용자:John doe 120/vector1.js
보이기
참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다. 구글 크롬, 파이어폭스, 마이크로소프트 엣지, 사파리: ⇧ Shift 키를 누른 채 "새로 고침" 버튼을 클릭하십시오. 더 자세한 정보를 보려면 위키백과:캐시 무시하기 항목을 참고하십시오.
(()=>{
'use strict';
(()=>{
var e = document.querySelector('#t-info a');
if (!e)return;
var h = e.getAttribute('href');
if (!/^\/w\/index\.php\?title=.*?&action=info$/.test(h))return;
var xhr = new XMLHttpRequest(), xhr2;
xhr.open("GET", h);
xhr.responseType='document';
xhr.onload=load1;
xhr.send();
function load1() {
var r = xhr.response;
var e1 = r.querySelector('#mw-pageinfo-firsttime a');
if (!e1) return;
var d = e1.textContent+'+08:00';
addTitle('\n문서 작성 날짜 : ' + d);
d= Date.parse(d);
if (!d) return;
d = Date.now() - d;
d /= 3600e3*24*365.25;
if (d > 1)
addTitle(' (' + d.toFixed(2) + 'y)');
else if (d*12 > 1)
addTitle(' (' + (d*12).toFixed(2) + 'm)');
else
addTitle(' (' + (365.25*d).toFixed(2) + 'd)');
var e2 = r.querySelector('#mw-pageinfo-lasttime a');
if (!e2) return;
d = e2.textContent+'+08:00';
addTitle('\n마지막으로 편집한 날짜: ' + d);
xhr2 = new XMLHttpRequest();
h=h.match(/^\/w\/index\.php\?title=(.*?)&action=info$/);
if(h){
xhr2.open("GET", '/w/api.php?action=query&format=json&prop=info&titles='+h[1]);
xhr2.onload=load2;
xhr2.send();
}
d=Date.parse(d);
if(!d)return;
d = Date.now() - d;
d /= 3600e3*24;
d=d/2+0.2;
if(d>=1)return;
var e=document.querySelector('.mw-body .firstHeading');
if(!e)return;
e.style.opacity=d.toFixed(3);
}
function load2(){
var r=xhr2.response;
if(!r)return;
r=JSON.parse(r);
r=r.query.pages;
var k=Object.keys(r);
if(!k.length)return;
addTitle('\n touched: ' + r[k[0]].touched);
}
function addTitle(t){
var e1=document.querySelectorAll('.mw-body .firstHeading, #t-info a, .mw-parser-output>h2, .mw-parser-output>h3');
for(let e of e1)
e.title+=t;
}
})();
(()=>{
var s ='<style>';
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; width:350px; }';
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:#fde6af; }';
s+='.navpopup .diff-addedline .diffchange { background-color:#d8ecff; }';
s+='</style>';
document.head.insertAdjacentHTML('beforeend',s);
var ws=new WeakSet();
var mo=new MutationObserver(mr1=>{
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.after('\n');
let d1=t.querySelectorAll('ins.popupDiff,del.popupDiff');
for(let d of d1)
d.dataset.length=te.encode(d.textContent).length;
for(let b of b1)
b.replaceWith('⏎');
t.style.whiteSpace='pre-wrap';
d1=t.querySelectorAll('del.popupDiff');
for(let d of d1)
trim(d);
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';
}
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 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} \(KST\))([^]*)$/;
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,'')+'+09: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','/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','/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>';
var n=200,s=new Set();
var e1=t.querySelectorAll('tr>.diff-context');
for(let e of e1){
if(e.textContent.length<=n)continue;
if(s.has(e.parentNode))continue;
s.add(e.parentNode);
trim1(e.parentNode);
}
function trim1(e){
e.style.color='#7f7f7f';
var begin=false, e1=e.previousElementSibling, e2=e.nextElementSibling;
if(e1&&e1.querySelector('.diff-lineno') || e2&&e2.querySelector('.diff-deletedline, .diff-addedline'))
begin=true;
e1=e.querySelectorAll('.diff-context>div');
for(let e of e1){
e.parentNode.style.backgroundColor='#f9f9f97f';
e.parentNode.style.borderColor='#e6e6e67f';
e.dataset.text=e.textContent;
if(begin)
e.textContent='...'+e.textContent.substr(-n);
else
e.textContent=e.textContent.substr(0,n)+'...';
}
e.addEventListener('mouseenter',enter1);
e.addEventListener('mouseleave',leave1);
var tid1;
function enter1(e){
tid1=setTimeout(enter2,500,e);
}
function leave1(e){
clearTimeout(tid1);
}
function enter2(e){
e=e.target;
e.style.color='';
e.removeEventListener('mouseenter',enter1);
e.removeEventListener('mouseleave',leave1);
var e1=e.querySelectorAll('.diff-context>div');
for(let e of e1){
e.parentNode.style.backgroundColor='';
e.parentNode.style.borderColor='';
if(e.dataset.text)
e.textContent=e.dataset.text;
}
}
}
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();
}
}
})();
(()=>{
var e1=document.querySelectorAll('a[href^="/wiki/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/"][title^="특수:기여/"]');
for(let e of e1){
let a=e.getAttribute('href');
if(!a)continue;
e.setAttribute('href',a.replace(/^\/wiki\/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC\//,'/wiki/Special:Contributions/'));
}
})();
})();