مدیاویکی:FairUseResize.js
ظاهر
نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاکسازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید ⇧ Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاکسازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکیپدیا:میانگیر مرورگرتان را خالی کنید را ببینید.
(function () {
'use strict';
function calculateFairUseSize(width, height) {
// https://wcam-bot.toolforge.org
var x = Math.sqrt(100000 / (width * height));
return {
width: Math.floor(width * x),
height: Math.floor(height * x)
};
}
function getBlob(url) {
return new Promise(function (resolve) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
resolve(this.response);
}
};
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
});
}
function upload(title, blob) {
var formData = new FormData();
formData.append('action', 'upload');
formData.append('filename', title);
formData.append('token', mw.user.tokens.get('csrfToken'));
formData.append('format', 'json');
formData.append('comment', 'کوچک کردن تصویر غیر آزاد');
formData.append('ignorewarnings', '1');
formData.append('file', blob);
return $.ajax({
url: mw.util.wikiScript('api'),
contentType: false,
processData: false,
type: 'POST',
data: formData
});
}
function hideOldImage(title, id, reason) {
return new mw.Api().post({
action: 'revisiondelete',
target: title,
type: 'oldimage',
ids: id,
hide: 'content',
reason: reason,
token: mw.user.tokens.get('csrfToken')
});
}
function getOldIds(title) {
return new mw.Api().get({
action: 'query',
titles: title,
prop: 'imageinfo',
iiprop: 'archivename',
iilimit: 'max'
}).then(function (x) {
return Object.values(x.query.pages)[0].imageinfo
.filter(function (x) { return x.archivename; })
.map(function (x) { return x.archivename.split('!')[0]; })
.join('|');
});
}
$(function () {
var img = document.querySelector('.fullImageLink img');
if ((mw.config.get('wgUserGroups').indexOf('sysop') === -1
&& mw.config.get('wgUserGroups').indexOf('eliminator') === -1)
|| !img
|| /\.(svg|pdf)$/i.exec(mw.config.get('wgTitle'))
|| mw.config.get('wgCategories').indexOf('محتویات غیر آزاد')/*m*/ === -1
|| img.width * img.height < 110000)
return;
$(mw.util.addPortletLink(
'p-views', '#', 'کوچک کردن تصویر', 'ca-fairuseresize',
'کوچک کردن خودکار اندازهٔ تصور جهت هماهنگی با سیاست استفاده منصفانه'
)).click(function (e) {
e.preventDefault();
mw.notify('در حال کوچک کردن اندازهٔ تصویر…');
getBlob(new mw.Uri('/w/thumb.php').extend({
f: mw.config.get('wgTitle'),
w: calculateFairUseSize(img.width, img.height).width
})).then(function (blob) {
return upload(mw.config.get('wgPageName'), blob);
}).then(function () {
return getOldIds(mw.config.get('wgPageName'));
}).then(function (ids) {
return hideOldImage(
mw.config.get('wgPageName'),
ids,
'حذف نسخهٔ بزرگتر از استفادهٔ منصفانه'
);
}).then(function () {
location.href = location.href;
});
});
});
}());