//<nowiki>
var tdc_cinfo='';//,tdc_pages=new Array(500),tdc_batchSize;//batch of 500 pages to process & size of batch if less than 500
var tdc_docpattern=new RegExp('(?:<noinclude>)?\s*{{(?:docpage|Documentation subpage|Template navigation)}}\s*(?:<\/noinclude>)','i');
var tdc_doctemp='<noinclude>{{docpage}}</noinclude>';//prepends the content of page not matching above RegExp
var editToken='+\\';//fill out later
var tdc_inputdiv,tdc_outputdiv,tdc_togglebutt,tdc_emptylog=true,tdc_stopped=true,tdc_actions=0;
var tdc_maxactions=0;//means unlimited
function tdc_init()
{
editToken=mw.user.tokens.get('editToken');
tdc_inputdiv=document.getElementById('contentSub');
tdc_inputdiv.innerHTML=tdc_inputdiv.innerHTML+'<div style="color:black;font-size:medium"><fieldset>\
<legend>Настройка скрипта категоризации</legend>\
<span style="white-space: nowrap"><label for="tdc_maxactions" title="Остановиться после этого количества действий">Остановиться после:</label> <input type="text" name="tdc_maxactions" id="tdc_maxactions" title="Остановиться после этого количества действий"/></span><p>\
<input type="submit" value="Пуск"/ id="tdc_toggle" onClick="tdc_toggle()"></fieldset></div>';
tdc_togglebutt=document.getElementById('tdc_toggle');
document.getElementById('mw-content-text').innerHTML='<span id="tdc_nodata" style="color:gray">Нет данных для отображения.</span>\
<table style="width:100%"><tr style="vertical-align:top"><td width="50%"><b>Консоль:</b><ol id="tdc_log"></ol></td><td width="50%"><b>Список страниц</b><ol id="tdc_pages"></ol></td></tr></table>';
tdc_outputdiv=document.getElementById('tdc_pages');
}
$(tdc_init);
function padTime(time)
{
if(time<10)return '0'+time;else return time;
}
function tdc_logerror(error)
{
function logline()
{
var date=new Date();
return '<li>['+padTime(date.getHours())+':'+padTime(date.getMinutes())+':'+padTime(date.getSeconds())+']: <span class="error">'+error+'</span></li>';
}
if(!tdc_emptylog)$('#tdc_log').append(logline());else document.getElementById('tdc_log').innerHTML=logline();
tdc_emptylog=false;
}
function tdc_logwarning(warning)
{
function logline()
{
var date=new Date();
return '<li>['+padTime(date.getHours())+':'+padTime(date.getMinutes())+':'+padTime(date.getSeconds())+']: <strong>'+warning+'</strong></li>';
}
if(!tdc_emptylog)$('#tdc_log').append(logline());else document.getElementById('tdc_log').innerHTML=logline();
tdc_emptylog=false;
}
function tdc_editpage(page,summary,content,section,timestamp,recreate,nocreate,onSuccess,OnAPIerror,OnRequestError)
{
var data=
{
format:'json',action:'edit',title:page,text:content,token:editToken,minor:'1',bot:'1',watchlist:'nochange'
};
if(summary)data.summary=summary;
if(section)data.section=section;
if(recreate)data.recreate="";
if(nocreate)data.nocreate="";
if(timestamp)
{
data.basetimestamp=timestamp;
data.starttimestamp=timestamp;
}
$.ajax(
{
url:mw.util.wikiScript('api'),data:data,dataType:'json',type:'POST',async:false,success:function(data)
{
if(data&&data.edit&&data.edit.result=='Success')onSuccess(data);else if(data&&data.error)OnAPIerror(data);
},error:function(xhr)
{
OnRequestError(xhr);
}
});
}
function tdc_processpage(page)
{
var basepageRE=/^([\S\s]+?)\/doc$/i.exec(page);
var basepage=basepageRE[1];
$.ajax(
{
url:mw.util.wikiScript('api'),data:
{
format:'json',action:'query',prop:'info|revisions',titles:page+'|'+basepage,rvprop:'content',rvsection:'0'
},datatype:'json',async:false,success:function(data)
{
if(data&&data.query&&data.query.pages)
{
var basepageID=-1;
var pageID=-1;
for(var ID in data.query.pages)
{
if(data.query.pages[ID].title=basepage)basepageID=ID;
else pageID=ID||-1;
}
//tdc_logwarning('[debug] basepageID='+basepageID+', pageid='+pageID+'.');
if(!data.query.pages[basepageID].missing)//base page exists, process doc page
{
$('#tdc_nodata').hide('fast');
$('#tdc_pages').append('<li title="'+page+'"><img alt="?" src="//upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Pictogram_voting_question.svg/15px-Pictogram_voting_question.svg.png" width="15" height="15"/> <a href="'+mw.util.getUrl(page)+'" class="internal" target="_blank">'+page+'</a> (в процессе).</li>');
var content=data.query.pages[pageID].revisions[0]['*'];
//console.log(content);
if(!tdc_docpattern.test(content))//no docpage template, fixing
{
var onSuccess=function(data)
{
$('li[title|="'+page+'"]').html('<img alt="?" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png" width="15" height="15"/> <a href="'+mw.util.getUrl(page)+'" class="internal" target="_blank">'+page+'</a> (исправлено).</li>');
tdc_actions++;
tdc_stopped=tdc_maxactions&&tdc_actions>=tdc_maxactions;
if(tdc_stopped)tdc_logwarning('совершено '+tdc_actions+' правок. Остановлено.');
};
var onAPIError=function(data)
{
tdc_logerror('ошибка API «'+data.error.code+'»: '+data.error.info+'.');
$('li[title|="'+page+'"]').html('<img alt="?" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Pictogram_voting_oppose.svg/15px-Pictogram_voting_oppose.svg.png" width="15" height="15"/> <a href="'+mw.util.getUrl(page)+'" class="internal" target="_blank">'+page+'</a> (ошибка, обратитесь к консоли).</li>');
};
var onRequestError=function(xhr)
{
tdc_logerror('ошибка HTTP-запроса.');
$('li[title|="'+page+'"]').html('<img alt="?" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Pictogram_voting_oppose.svg/15px-Pictogram_voting_oppose.svg.png" width="15" height="15"/> <a href="'+mw.util.getUrl(page)+'" class="internal" target="_blank">'+page+'</a> (ошибка, обратитесь к консоли).</li>');
};
content=(tdc_doctemp+'\n'+content).replace(/<\/(includeonly|noinclude)>\s+<(includeonly|noinclude)>/ig,'</$1><$2>');
//alert(content);
//tdc_actions++;
//tdc_stopped=tdc_maxactions>0&&tdc_actions>=tdc_maxactions;
//if(tdc_stopped)tdc_logwarning('совершено '+tdc_actions+' правок. Остановлено.');
tdc_editpage(page,'Робот: оформление страницы документации',content,'0',data.query.pages[pageID].timestamp,false,true,onSuccess,onAPIError,onRequestError);
}else $('li[title|="'+page+'"]').html('<img alt="?" src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Yes_check.svg/15px-Yes_check.svg.png" width="15" height="15"/> <a href="'+mw.util.getUrl(page)+'" class="internal" target="_blank">'+page+'</a> (уже было исправлено).</li>');
}else//no basepage, doc page is abandoned and needs to be moved following the basepage or deleted, if basepage deleted
{
}
}
}
});
}
function tdc_toggle()
{
tdc_stopped=!tdc_stopped;
if(tdc_stopped)
{
tdc_logwarning('скрипт остановлен.');
tdc_togglebutt.value='Пуск';
}else
{
$('#tdc_toggle').attr('disabled','disabled');
tdc_logwarning('скрипт запущен.');
tdc_togglebutt.value='запущен…';
tdc_maxactions=+$('#tdc_maxactions').val();
tdc_actions=0;
while(!tdc_stopped)
{
var data=
{
format:'json',action:'query',list:'querypage',qppage:'Uncategorizedtemplates',qplimit:'500'
};
if(tdc_cinfo>0)data.qpoffset=tdc_cinfo;
$.ajax(
{
url:mw.util.wikiScript('api'),data:data,dataType:'json',async:false,success:function(data)
{
if(data&&data.query&&data.query.querypage&&data.query.querypage.results)
{
for(var id in data.query.querypage.results)
{
if(tdc_stopped)break;
if(/^[\S\s]*?\/doc$/i.test(data.query.querypage.results[id].title))tdc_processpage(data.query.querypage.results[id].title);
}
//tdc_logwarning('[debug] continue info='+tdc_cinfo+', actions='+tdc_actions+', max actions='+tdc_maxactions+'.');
if(data['query-continue']&&data['query-continue'].querypage)tdc_cinfo=+data['query-continue'].querypage.qpoffset;
else
{
tdc_stopped=true;
tdc_logwarning('нет больше данных для работы. Остановлено.');
}
}else if(data&&data.error)
{
tdc_logerror('ошибка API «'+data.error.code+'»: '+data.error.info+'.');
tdc_togglebutt.value='Пуск';
tdc_stopped=true;
}else
{
tdc_logerror('ошибка: неизвестный ответ API.');
tdc_togglebutt.value='Пуск';
tdc_stopped=true;
}
},error:function(xhr)
{
tdc_logerror('ошибка HTTP-запроса.');
tdc_togglebutt.value='Пуск';
tdc_stopped=true;
}
});
}
tdc_logwarning('остановлено.');
}
}//</nowiki>