|
|
| ৩,৭৭৭ নং লাইন: |
৩,৭৭৭ নং লাইন: |
| ); | | ); |
| }); | | }); |
|
| |
| $(function() {
| |
| mw.util.addPortletLink('p-tb','/wiki/Special:BlankPage?blankspecial=ajaxbd','Batch Delete');
| |
| });
| |
|
| |
| if(mw.config.get('wgCanonicalSpecialPageName') && mw.config.get('wgCanonicalSpecialPageName').toLowerCase() == 'blankpage' && queryString('blankspecial') == 'ajaxbd') {
| |
| document.title = 'Ajax Batch Deletion';
| |
| addOnloadHook(abdForm);
| |
| }
| |
|
| |
| function abdForm() {
| |
| mw.util.addPortletLink('p-tb','/wiki/Special:Log/delete?user=' + encodeURIComponent(mw.config.get('wgUserName')),'My delete log');
| |
|
| |
| //subvert this Special: page to our own needs.
| |
| var con = document.getElementById('content') || document.getElementById('mw_content');
| |
| var bcon = document.getElementById('bodyContent') || document.getElementById('mw_contentholder');
| |
| var fh = getElementsByClassName(con,'h1','firstHeading')[0];
| |
| while(fh.firstChild) fh.removeChild(fh.firstChild)
| |
| fh.appendChild(document.createTextNode('Ajax Batch Deletion'));
| |
| for(var i=0;i<bcon.childNodes.length;i++) {
| |
| bcur = bcon.childNodes[i];
| |
| if(bcur.id != 'siteSub' && bcur.id != 'contentSub' && bcur.className != 'visualClear') {
| |
| while(bcur.firstChild) bcur.removeChild(bcur.firstChild)
| |
| if(bcur.nodeType == 3) bcur.nodeValue = '';
| |
| }
| |
| }
| |
|
| |
| //generate content
| |
| var form = document.createElement('form');
| |
| form.appendChild(document.createTextNode('List of pages to delete:'));
| |
| form.appendChild(document.createElement('p'));
| |
| form.setAttribute('action','javascript:void(0);');
| |
| var txt = document.createElement('textarea');
| |
| txt.style.height = '20em';
| |
| txt.style.width = '50%';
| |
| txt.setAttribute('id','abd-textarea');
| |
| form.appendChild(txt);
| |
| form.appendChild(document.createElement('p'));
| |
| var lab1 = document.createElement('label');
| |
| lab1.setAttribute('for','abd-reason')
| |
| lab1.appendChild(document.createTextNode('Deletion reason: '));
| |
| form.appendChild(lab1);
| |
| var inp1 = document.createElement('input');
| |
| inp1.style.width = '20em';
| |
| inp1.setAttribute('type','text');
| |
| inp1.setAttribute('id','abd-reason');
| |
| form.appendChild(inp1);
| |
| form.appendChild(document.createElement('p'));
| |
| var sub1 = document.createElement('input');
| |
| sub1.setAttribute('type','button');
| |
| sub1.setAttribute('id','abd-startbutton');
| |
| sub1.setAttribute('value','start');
| |
| sub1.setAttribute('onclick','abdStart()');
| |
| form.appendChild(sub1);
| |
| bcon.appendChild(form);
| |
| var pre = document.createElement('pre');
| |
| pre.setAttribute('id','abd-output');
| |
| bcon.appendChild(pre);
| |
| }
| |
|
| |
| function abdStart() {
| |
| document.getElementById('abd-startbutton').setAttribute('disabled','disabled');
| |
| var out = document.getElementById('abd-output');
| |
| var txt = document.getElementById('abd-textarea');
| |
| var deletes = txt.value.split('\n');
| |
| var page = deletes[0];
| |
| if(page == '') {
| |
| out.appendChild(document.createTextNode('* Done! Nothing left to do, or next line is blank.\n'));
| |
| document.getElementById('abd-startbutton').removeAttribute('disabled');
| |
| } else {
| |
| var badchars = /(\#|\<|\>|\[|\]|\{|\}|\|)/;
| |
| if(badchars.test(page)) {
| |
| out.appendChild(document.createTextNode('! Illegal characters detected, skipping:' + page + '\n'));
| |
| setTimeout('abdStart()',1000);
| |
| } else {
| |
| out.appendChild(document.createTextNode('> Attempting to delete [[' + page + ']]\n'));
| |
| abdGetToken(page);
| |
| }
| |
| }
| |
| deletes = deletes.slice(1,deletes.length);
| |
| txt.value = deletes.join('\n');
| |
| }
| |
|
| |
| function abdGetToken(page) {
| |
| var out = document.getElementById('abd-output');
| |
| out.appendChild(document.createTextNode(' > Fetching delete token for [[' + page + ']]\n'));
| |
| var url = mw.config.get('wgScriptPath') + '/api.php?action=query&prop=info&indexpageids=1&intoken=delete&format=json&titles=' + encodeURIComponent(page);
| |
| var req = sajax_init_object();
| |
| req.open('GET', url, true);
| |
| req.onreadystatechange = function() {
| |
| if(req.readyState == 4 && req.status == 200) {
| |
| eval("abdDelete(" + req.responseText + ",'" + req.responseText.replace(/\'/g,"`") + "','" + page + "')");
| |
| }
| |
| }
| |
| req.send(null);
| |
| }
| |
|
| |
| function abdDelete(obj,txt,page) {
| |
| var out = document.getElementById('abd-output');
| |
| if(obj['error']) {
| |
| out.appendChild(document.createTextNode(' ! Api error: ' + obj['error']['code'] + ' - ' + obj['error']['info'] + '\n'));
| |
| return;
| |
| }
| |
| if(!obj['query'] || !obj['query']['pageids'] || !obj['query']['pages'][obj['query']['pageids'][0]] || !obj['query']['pages'][obj['query']['pageids'][0]]['deletetoken']) {
| |
| out.appendChild(document.createTextNode(' ? Unexpected response: ' + txt + '\n'));
| |
| return;
| |
| }
| |
| var token = obj['query']['pages'][obj['query']['pageids'][0]]['deletetoken'];
| |
| out.appendChild(document.createTextNode(' > Token found, attempting delete\n'));
| |
| var reason = document.getElementById('abd-reason').value;
| |
|
| |
| var params = 'action=delete&format=json&token=' + encodeURIComponent(token) + '&title=' + encodeURIComponent(page) + '&reason=' + encodeURIComponent(reason);
| |
| var url = mw.config.get('wgScriptPath') + '/api.php';
| |
|
| |
| var req = sajax_init_object();
| |
| req.open('POST', url, true);
| |
| req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
| |
| req.setRequestHeader('Content-length', params.length);
| |
| req.setRequestHeader('Connection', 'close');
| |
| req.onreadystatechange = function() {
| |
| if(req.readyState == 4 && req.status == 200) {
| |
| eval("abdDeleteAftermath(" + req.responseText + ",'" + req.responseText.replace(/\'/g,"`") + "')");
| |
| }
| |
| }
| |
| req.send(params);
| |
| }
| |
|
| |
| function abdDeleteAftermath(obj,txt) {
| |
| var out = document.getElementById('abd-output');
| |
| if(obj['error']) {
| |
| out.appendChild(document.createTextNode(' ! Api error: ' + obj['error']['code'] + ' - ' + obj['error']['info'] + '\n'));
| |
| } else if(obj['delete'] && obj['delete']['title']) {
| |
| out.appendChild(document.createTextNode(' > Page [[' + obj['delete']['title'] + ']] deleted\n'));
| |
| } else {
| |
| out.appendChild(document.createTextNode(' ? Unexpected response: ' + txt + '\n'));
| |
| return;
| |
| }
| |
| setTimeout('abdStart()',1000);
| |
| }
| |
|
| |
| function queryString(p) {
| |
| var re = RegExp('[&?]' + p + '=([^&]*)');
| |
| var matches;
| |
| if (matches = re.exec(document.location)) {
| |
| try {
| |
| return decodeURI(matches[1]);
| |
| } catch (e) {
| |
| }
| |
| }
| |
| return null;
| |
| }
| |