Участник:Claymore/copyvio.js

Материал из Википедии — свободной энциклопедии
var wgAPIPath = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&'
var api
var success = false
var today = new Date()
var day = 1000 * 60 * 60 * 24
var months = new Array()
months[0] = 'января'
months[1] = 'февраля'
months[2] = 'марта'
months[3] = 'апреля'
months[4] = 'мая'
months[5] = 'июня'
months[6] = 'июля'
months[7] = 'августа'
months[8] = 'сентября'
months[9] = 'октября'
months[10] = 'ноября'
months[11] = 'декабря'

function ch(o) { for (var i in o) { return o[i] } }
function toDays(day) {
	var exception = (day % 100) / 10 == 1;
	var digit = day % 10;
	if (digit == 1)	return day + ' день'
	else if (!exception && digit > 1 && digit < 5) return day + ' дня'
	else return day + ' дней'
}

function show_result() {
	if (api.readyState != 4) return
	if (api.status != 200) {
            start
			return
    }
	
	var query = eval('(' + api.responseText + ')').query
	var revisions = ch(query.pages).revisions
	var users = new Array()
	var numberOfUsers = 0
	for (i = 0; i < revisions.length; i++) {
		if (!users[revisions[i]['user']]) {
			users[revisions[i]['user']] = 1
			numberOfUsers++
		}
	}
	
	var timestamp = revisions[0]['timestamp']
	var firstEdit = new Date(parseInt(timestamp.substring(0, 4)),
							parseInt(timestamp.substring(5, 7)) - 1,
							parseInt(timestamp.substring(8, 10)),
							parseInt(timestamp.substring(11, 13)),
							parseInt(timestamp.substring(14, 16)),
							parseInt(timestamp.substring(17)))
	var diff = today.getTime() - firstEdit.getTime()
	var days = Math.ceil(diff / day)
	
	var result = document.getElementById('confirmdeletetext').children[2]
	var resultTable = "<table class=\"tiles\" align=\"center\"><tr><th>Дата первой правки</th><td align='center'>"
	resultTable += firstEdit.getUTCDate() + ' ' + months[firstEdit.getUTCMonth()] + ' ' + firstEdit.getUTCFullYear() + ' (' + toDays(days) + ')'
	resultTable += "</td></tr><tr><th>Участников</th><td align='center'>"
	resultTable += numberOfUsers
	resultTable += "</td></tr><tr><th>Всего правок</th><td align='center'>"
	resultTable += revisions.length
	resultTable += "</td></tr></table>"
	
	if (result.innerHTML.indexOf('<br>') != -1 || result.innerHTML.indexOf('<BR>') || result.innerHTML.indexOf('<br />')) {
		result.innerHTML = resultTable
	}
	else {
		result.innerHTML += resultTable
	}
	success = true;
}

function start() { 
	if (document.URL.indexOf('&action=delete') == -1) {
		return
	}
	
	var select = document.getElementById('wpDeleteReasonList')
	var reason = document.getElementById("wpReason")
	onReasonChange()
	
	addHandler(select, 'change', onReasonChange)
	
	function isCopyvio() {
		var val = select.options[select.selectedIndex].text
		return val.indexOf('С6: ') != -1 || reason.value.indexOf('ВП:КБУ#С6') != -1
	}

	function onReasonChange() {
		if (isCopyvio()) sendRequest()
	}
	
	function sendRequest() {
		api = sajax_init_object()
		api.onreadystatechange = show_result
		api.open('GET', wgAPIPath + 'action=query&prop=revisions&titles=' + encodeURIComponent(mw.config.get('wgPageName')) + '&rvlimit=max&rvprop=timestamp|user&rvdir=newer',
			true)
		api.send(null)
	}
}

$(start)