var rcp_http;
var rcp_enabled;
var rcp_num_pages;
var rcp_refresh;
var rcp_num_idle_req;
var rcp_curr_idle_req;
//localisation is here
var rcp_str_no_ajax='Ваш обозреватель не поддерживается.';
var rcp_str_box_title='Свежие правки';
var rcp_str_box_title_updating='Свежие правки (обн.)';
var rcp_str_box_title_failed='Свежие правки (неудача обновления)';
var rcp_str_enable='Включить';
var rcp_str_disable='Отключить';
var rcl_deleted='Страница удалена этим действием';
var rcl_moved='Страница переименована этим действием';
//initalise
function rcp_init()
{
mw.util.addCSS('\
.flaggedrevs-color-1 {background-color:#f0f8ff}\
.flaggedrevs-unreviewed {background-color:#FAEBD7}\
.flaggedrevs-pending {background-color: #FFC}\
#flagged-legend {display:block !important}\
')
// allow user settings through
if(rcp_enabled==null)rcp_enabled=false;
if(rcp_num_pages==null)rcp_num_pages=10;
if(rcp_refresh==null)rcp_refresh=60;
if (rcp_num_idle_req==null)rcp_num_idle_req=60;
// A few limits to be nice to the servers
//if(rcp_num_pages>50)rcp_num_pages=50;else if(rcp_num_pages<1)rcp_num_pages = 1;
if(rcp_refresh<2)rcp_refresh=2;
if(rcp_num_idle_req>1000)rcp_num_idle_req=1000;else if(rcp_num_idle_req<5)rcp_num_idle_req=5;
// get our cookie
/*
if(document.cookie.length>0)
{
var c_start=document.cookie.indexOf("rcp_show_box=");
if(c_start!=-1)
{
c_start=c_start+13;
var c_end=document.cookie.indexOf(";",c_start);
if(c_end<0)c_end=document.cookie.length;
rcp_enabled=document.cookie.substring(c_start,c_end)=="yes"
}
}*/
var storage=window.localStorage;
if(storage)rcp_enabled=storage.getItem('rcl_show')!='no';else
{
mw.log(rcp_str_no_ajax);
rcp_enabled=false;
}
// Either make a request or show nothing
rcp_curr_idle_req=0;
if(rcp_enabled)rcp_ajax_request();else rcp_draw_disabled_box();
}
/* init ajax */
function rcp_create_request() {
try
{
rcp_http=new XMLHttpRequest();
}
catch(e)
{
try
{
rcp_http=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
rcp_http=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
return false;
}
}
}
rcp_http.onreadystatechange=function()
{
if(rcp_http.readyState==4)rcp_ajax_response();
}
return true;
}
/* make a request */
function rcp_ajax_request()
{
// if we have done too many requests, disable the box
//rcp_curr_idle_req++;
if(rcp_curr_idle_req>rcp_num_idle_req)rcp_disable_box();
// check we are enabled
if(!rcp_enabled)return;
// firstly, inform the user
var cur_box=document.getElementById('p-recentchangeslist');
if(cur_box!=null)cur_box.firstChild.firstChild.data=rcp_str_box_title_updating;
if(!rcp_create_request()){if(cur_box!=null)cur_box.firstChild.firstChild.data=rcp_str_box_title_failed;else alert(rcp_str_no_ajax);}
// Then make the request
rcp_http.open("GET",mw.util.wikiScript('api')+"?action=query&format=xml&list=recentchanges&rcshow=!bot|!anon&rcnamespace=0|1|6|7|10|11|14|15&rcprop=title|timestamp|ids|sizes|tags|user|parsedcomment|flags|loginfo&rcexcludeuser="+mw.util.wikiUrlencode(mw.config.get('wgUserName'))+"&rclimit="+mw.util.wikiUrlencode(rcp_num_pages),true);
rcp_http.send(null);
}
function rcp_draw_disabled_box()
{
rcp_draw_disabled_box_vector();
}
function rcp_ajax_response()
{
rcp_ajax_response_vector();
//and do it again
setTimeout("rcp_ajax_request()",rcp_refresh*1000);
}
function rcp_disable_box()
{
rcp_enabled=false;
rcp_draw_disabled_box();
//document.cookie="rcp_show_box=no; path=/";
window.localStorage.setItem('rcl_show','no');
}
function rcp_enable_box()
{
rcp_enabled=true;
rcp_curr_idle_req=0;
//document.cookie="rcp_show_box=yes; path=/";
rcp_ajax_request();
window.localStorage.setItem('rcl_show','yes');
}
/* Draw disabled box (vector skin) */
function rcp_draw_disabled_box_vector()
{
// Container div
var link_div=document.createElement('div');
link_div.className='body';
link_div.style.display="block";
var div=document.createElement('div');
div.setAttribute('id','p-recentchangeslist');
div.className='portal collapsed';
var heading=document.createElement('h5');
heading.appendChild(document.createTextNode(rcp_str_box_title));
div.appendChild(heading);
div.appendChild(link_div);
// enable link
var p=document.createElement('p');
p.style.fontSize='x-small';
p.style.margin='0px';
var a=document.createElement('a');
a.appendChild(document.createTextNode(rcp_str_enable));
a.onclick=rcp_enable_box;
p.appendChild(a);
// add later
div.appendChild(p)
// now replace the div
var old_div=document.getElementById('p-recentchangeslist');
var side_col=document.getElementById('mw-panel');
if(old_div!=null)side_col.replaceChild(div, old_div);else
{
var node=document.getElementById('p-interaction');
side_col.insertBefore(div,node);
}
if(typeof $j!='undefined'&&wgVectorEnabledModules.collapsiblenav)
{
$('#p-recentchangeslist>h5').keydown(function(event)
{
if(event.which== 13/* Enter */||event.which==32/* Space */)rcp_toggle($(this));
}).mousedown(function()
{
rcp_toggle($(this));
$(this).blur();
return false;
});
}else link_div.appendChild(p);
}
var nonFlaggedNS=[];
$.each(mw.config.get('wgFormattedNamespaces'),function(i,ns)
{
if(i>0&&i!=6&&i!=10&&i!=14)nonFlaggedNS.push(ns);
})
nonFlaggedNS=new RegExp('^('+nonFlaggedNS.join('|')+'):');
var title,titles=[],link={};
function markLink(pg)
{
var lnk=$(link[pg.title]);
var li=lnk.closest('li');
var clss,catText,catColor,catTip;
if(pg.flagged)
{
if(pg.lastrevid==pg.flagged.stable_revid)clss='flaggedrevs-color-1';else
{
clss='flaggedrevs-pending';
addLnk('oldid='+pg.flagged.stable_revid+'&diff='+pg.lastrevid,'непр.');
}
}else clss='flaggedrevs-unreviewed';
li.addClass(clss);
var watched=(typeof pg.watched=='string');
if(watched)lnk.wrap('<strong class="mw-watched"/>');
catText='—';
if(pg.categories)
{
for(var c=0;c<pg.categories.length;c++)
{
cat=pg.categories[c].title.replace(/^[^:]+:/,'');
if(/:К быстрому удалению$/.test(cat)&&!catText)
{
catText='БУ';
catColor='#f88';
catTip=cat;
}else if(/:Кандидаты на удаление$/.test(cat))
{
catText='уд.';
catColor='#faa';
catTip=cat;
}else if(/^Википедия:БУ:/.test(cat))
{
catText=cat.replace(/^Википедия:/,'');
catColor='#f88';
catTip=cat;
}else if(/^Википедия:К отсроченному удалению$/.test(cat))
{
catText = 'отл.';
catColor = 'pink';
catTip = cat;
}else if(/:Оспариваемые быстрые удаления$/.test(cat))
{
catText = 'осп.';
catColor = 'violet';
catTip = cat;
}
}
//return new Array(catText,catColor,catTip,watched)
if(catText!='—')li.append('[<span style="background:'+catColor+'"'+'title="«'+catTip+'»">('+catText+')</span>]');
//var span=document.createElement('span')
//span.innerHTML='[<span style="background:'+catColor+'"'+'title="«'+catTip+'»">('+catText+')</span>]'
//link[pg.title].addChild(span)
}
function addLnk(href,name)
{
li.find('.mw-newpages-history a:last').after(' | <a href="'+mw.config.get('wgScript')+'?'+href+'">'+name+'</a>');
}
}
function getState(titles)
{
while(titles.length)$.getJSON(mw.util.wikiScript('api'),
{
action:'query',
format:'json'
//,prop:'info|flagged|categories'
,prop:'info|flagged'
,inprop:'talkid|watched'
//,cllimit:500
,titles:titles.splice(0,50).join('|')
},function(resp)
{
if(!resp||!(resp=resp.query))return;
for(var id in resp.pages)markLink(resp.pages[id]);
})
}
/* Draw response (vector skin) */
function rcp_ajax_response_vector()
{
var items=rcp_http.responseXML.getElementsByTagName('rc');
var tagsbuf=rcp_http.responseXML.getElementsByTagName('tags');
// create the div that holds all the links
var link_div = document.createElement('div');
link_div.className='body';
link_div.style.display="block";
link_div.style.maxHeight="500px";
link_div.style.backgroundColor='white';
var list = document.createElement('ul');
link_div.appendChild(list);
var links=[];
// populate the list with links.
for(var i=0;i<items.length;i++)
{
var item_name=items[i].getAttribute('title');
var oldid=items[i].getAttribute('old_revid');
var newid=items[i].getAttribute('revid');
var user=items[i].getAttribute('user');
var patrolled=items[i].getAttribute('patrolled')!=null;
var isanon=items[i].getAttribute('anon')!=null;
var isnew=items[i].getAttribute('new')!=null;
var isminor=items[i].getAttribute('minor')!=null;
var islogevent=items[i].getAttribute('type')=='log';
var deleted=items[i].getAttribute('logaction')=='delete'&&items[i].getAttribute('logtype')=='delete';
var moved=items[i].getAttribute('logaction')=='move'&&(items[i].getAttribute('logtype')=='move'||items[i].getAttribute('logtype')=='move_redir');
if(!deleted&&!isnew)
{
if(moved)var item_url=mw.config.get('wgScript')+'?title='+mw.util.wikiUrlencode(item_name)+'&redirect=no';else
{
var item_url=mw.config.get('wgScript')+'?title='+mw.util.wikiUrlencode(item_name)+'&diff='+newid;
if(oldid!=0)item_url=item_url+'&oldid='+oldid;
}
}else var item_url=mw.util.getUrl(item_name);
var parsedcomment=items[i].getAttribute('parsedcomment');
var oldsize=items[i].getAttribute('oldlen');
var newsize=items[i].getAttribute('newlen');
var time=items[i].getAttribute('timestamp');
var tags="";
var temp2=tagsbuf[i].getElementsByTagName('tag');
for(var j=0;j<temp2.length;j++)
{
var data=temp2[j].firstChild.nodeValue;
if(data)tags=tags+', '+temp2[j].firstChild.nodeValue;
}
if(tags)tags=' <span style="background:pink">«'+tags.replace(/\, /,'')+'»</span> ';else tags=" ";
var exclamation=document.createElement('span');
exclamation.style.fontSize='20%';
if(isanon)exclamation.innerHTML='[$2<span style="color:red;font-weight:bolder" title="правка IP-участника $1">$1 </span>';else exclamation.innerHTML='[$2<span style="color:green" title="правка зарегистрированного участника $1">✔ $1 </span>';
//Get the current time
var dateobj=new Date(time);
var addZero=function(i)
{
if(i<10)return '0'+i;else return i;
}
time=addZero(dateobj.getHours())+':'+addZero(dateobj.getMinutes())+':'+addZero(dateobj.getSeconds());
//var now=Math.floor(dateobj.getTime()/1000.0);
exclamation.innerHTML=exclamation.innerHTML.replace(/\$1/g,decodeURIComponent(user).replace(/_/,' ')).replace(/\$2/,'<span style="color:purple">'+time+'</span> ');
var temp="";
if(isnew)temp="<abbr class='newpage' title='Этой правкой была создана новая страница'>Н</abbr>";
if(isnew)temp=temp+"<abbr class='minoredit' title='Эта правка помечена как малая'>м</abbr>";
if(islogevent)temp=temp+"<abbr style='font-weight:bolder' title='Запись из журнала'>Ж</abbr>";
var deltasize=newsize-oldsize;
if(!deltasize)temp=temp+'<span class="mw-plusminus-null" title="Размер изменения в байтах: $1"> (0)</span>';else if(deltasize>500)temp=temp+'<strong class="mw-plusminus-pos" title="Размер изменения в байтах: $1"> +$1</strong>';else if(deltasize>0)temp=temp+'<span class="mw-plusminus-pos" title="Размер изменения в байтах: $1"> +$1</span>';else if(deltasize<-500)temp=temp+'<strong class="mw-plusminus-neg" title="Размер изменения в байтах: $1"> $1</strong>';else temp=temp+'<span class="mw-plusminus-neg" title="Размер изменения в байтах: $1"> $1</span>';
temp=temp.replace(/\$1/g,deltasize);
exclamation.innerHTML=exclamation.innerHTML+temp+'] ';
var a=document.createElement('a');
a.setAttribute('href',item_url);
a.setAttribute('target','_blank');
a.setAttribute('title',item_name);
a.style.fontStyle='normal';
if(deleted)
{
var img=document.createElement('img');
img.setAttribute('src','//upload.wikimedia.org/wikipedia/commons/c/c4/Contra.png');
img.setAttribute('width','10px');
img.setAttribute('title',rcl_deleted);
img.style.paddingLeft='2px';
img.style.paddingRight='2px';
exclamation.appendChild(img);
a.style.backgroundColor='pink';
a.style.textDecoration='line-through';
a.style.color='#ba0000';
}
a.appendChild(document.createTextNode(item_name.replace(/_/g,' ')));
//a.addEventListener('click',dfClick,false);
if(!nonFlaggedNS.test(item_name))titles.push(item_name);
var comment=document.createElement('div');
comment.style.fontSize='15%';
comment.style.whiteSpace='nowrap';
comment.style.margin='0';
comment.style.overflowX='auto';
comment.style.overflowY='hidden';
temp=parsedcomment.replace(/<[^<>]+?[\/]?>/ig,'');//.replace(/<[^<>]+?\/>/ig,'')
comment.setAttribute('title',temp);
if(parsedcomment)
{
comment.innerHTML='<br/>(<i>'+parsedcomment+'</i>)';
comment.style.lineHeight='0.7';
}else comment.style.lineHeight='0.1';
var scriptPath=mw.config.get('wgScript');
var userlink=mw.util.getUrl("User:"+user);
var info=document.createElement('span');
info.style.fontSize='25%';
info.innerHTML=tags+'<a target="recentchangeswindow" class="mw-newpages-history" title="страница" href="'+mw.util.getUrl(item_name)+'">стр.</a> • <a target="recentchangeswindow" title="история" href="'+scriptPath+'?action=history&title='+item_name+'">и.</a> • <a target="recentchangeswindow" title="журналы" href="'+scriptPath+'?title=Special:Log&page='+item_name+'">ж.</a> • <a target="recentchangeswindow" title="автор правки" href="'+userlink+'">у.</a> • <a target="recentchangeswindow" title="вклад" href="'+mw.util.getUrl('Special:Contributions/'+user)+'">в.</a>';
var li=document.createElement('li');
li.appendChild(exclamation);
li.appendChild(a);
if(moved)
{
var img=document.createElement('img');
img.setAttribute('src','//upload.wikimedia.org/wikipedia/commons/thumb/3/35/Arrow_icon.svg/800px-Arrow_icon.svg.png');
img.setAttribute('width','20px');
img.setAttribute('title',rcl_moved);
img.style.paddingLeft='2px';
img.style.paddingRight='2px';
//li.appendChild(img);
var moveinfo=items[i].getElementsByTagName('move')[0];
console.log(typeof moveinfo);
var movedtolink=document.createElement('a');
var movedto=moveinfo.getAttribute('new_title');
//console.log(movedto);
movedtolink.setAttribute('href',mw.util.getUrl(movedto));
movedtolink.setAttribute('target','_blank');
movedtolink.setAttribute('title',movedto);
movedtolink.style.fontStyle='normal';
li.appendChild(movedtolink);
}
li.appendChild(comment);
li.appendChild(info);
li.appendChild(document.createElement('hr'));
link[item_name]=a;
links.push(item_name);
list.appendChild(li);
}
// Container div
var div=document.createElement('div');
div.setAttribute('id','p-recentchangeslist');
div.className='portal expanded';
var heading=document.createElement('h5');
heading.appendChild(document.createTextNode(rcp_str_box_title));
div.appendChild(heading);
div.appendChild(link_div);
// disable link
var p=document.createElement('p');
p.style.fontSize='x-small';
p.style.margin='0px';
p.style.textAlign='left';
a=document.createElement('a');
a.appendChild(document.createTextNode(rcp_str_disable));
a.onclick=rcp_disable_box;
p.appendChild(a);
// add later
// now replace the div
var old_div=document.getElementById('p-recentchangeslist');
var side_col=document.getElementById('mw-panel');
if(old_div!=null)side_col.replaceChild(div, old_div);else
{
var node = document.getElementById('p-interaction');
side_col.insertBefore(div, node);
}
getState(links);
if(typeof $j!='undefined'&&wgVectorEnabledModules.collapsiblenav)
{
$('#p-newpages>h5').keydown(function(event)
{
if(event.which==13/* Enter */||event.which==32/* Space */)rcp_toggle($(this));
}).mousedown(function()
{
rcp_toggle($(this));
$(this).blur();
return false;
});
}else link_div.appendChild(p);
}
function rcp_toggle($element)
{
$.cookie('vector-nav-'+$element.parent().attr('id'),$element.parent().is('.collapsed'));
if($element.parent().is('.collapsed'))rcp_enable_box();else rcp_disable_box();
$element.parent().toggleClass('expanded').toggleClass('collapsed').find('div.body').slideToggle('fast');
}
//go!
$(rcp_init);