مدیاویکی:Gadget-CatMaker.js
نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
- فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلیدهای Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-R)
- گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-Shift-R)
- اینترنت اکسپلورر/ Edge: کلید Ctrl را نگهدارید و روی دکمهٔ Refresh کلیک کنید، یا کلیدهای Ctrl-F5 را با هم فشار دهید
- اپرا: Ctrl-F5 را بفشارید.
// <nowiki> // DO NOT REMOVE THIS LINE EVER
/*jslint browser: true, white: true*/
/*global mediaWiki, jQuery*/
/*!
* @author User:Ebraminio, User:Yamaha5
*/
(function ($, mw) {
'use strict';
function createPage(title, text, summary, callback) {
return new mw.Api().post({
action: 'edit',
title: title,
text: text,
summary: summary,
createonly: '',
minor: '',
token: mw.user.tokens.get('csrfToken')
}).then(
function (data) {
if (data.error && data.error.info) {
mw.notify(title + ' انجام نشد: ' + data.error.info);
} else {
callback();
}
return data;
},
function (data) {
mw.notify(title + ' انجام نشد: ' + data);
return data;
}
);
}
function faWikiName(title) {
return $.ajax({
url: '//en.wikipedia.org/w/api.php',
data: {
action: 'query',
prop: 'langlinks',
titles: title,
redirects: 1,
format: 'json',
lllimit: 500
},
dataType: 'jsonp'
}).then(function (data) {
try {
return $.grep($.map(data.query.pages, function (x) { return x; })[0].langlinks, function (x) {
return x.lang === 'fa';
})[0]['*'];
} catch (ignore) { }
});
}
function catParents(title) {
return $.ajax({
url: '//en.wikipedia.org/w/api.php',
data: {
action: 'query',
prop: 'categories',
titles: title,
clshow: '!hidden',
cllimit: 500,
format: 'json'
},
dataType: 'jsonp'
}).then(function (data) {
try {
return $.map($.map(data.query.pages, function (x) { return x; })[0].categories, function (x) {
return x.title;
});
} catch (ignore) { }
});
}
function getWikidataEntity(entitle) {
return new mw.Api({ ajax: { url: '//www.wikidata.org/w/api.php' } }).get({
action: 'wbgetentities',
format: 'json',
sites: 'enwiki',
titles: entitle,
normalize: 'true',
origin: window.location.protocol + '//' + window.location.hostname
}).then(function (x) { return $.map(x.entities, function (x) { return x; })[0]; });
}
function commonsCatFromEntity(entity) {
try {
return entity.claims.P373[0].mainsnak.datavalue.value;
} catch (ignore) { }
}
function startCat(falink, enlink) {
enlink = enlink.replace(/\_/g, ' ');
return faWikiName(enlink).then(function (x) {
if (x) {
mw.notify('صفحهٔ معادل قبلاً وجود داشت');
return;
}
return catParents(enlink).then(function (x) {
if (!x) {
mw.notify('صفحهٔ "' + enlink + '" در ویکی مبدأ وجود ندارد یا دارای رده نیست');
return;
}
return $.when.apply(null, $.map(x, function (y) {
return faWikiName(y);
})).then(function () {
var catText = $.map(arguments, function (x) {
return '[[' + x + ']]';
}).join('\n') + '\n[['+'en:' + enlink + ']]';
catText = catText.replace(/\[\[undefined\]\]/g, '');
catText = catText.replace(/\n\n/g, '\n');
catText = catText.trim();
return createPage(
falink,
catText,
'ایجاد ردهٔ همسنگ [[:en:' + enlink + ']] با ابزار رده\u200cساز',
function () {
mw.notify('ساخت ' + falink + ' با موفقیت انجام شد.');
}
);
});
});
});
}
function loadPage(title) {
return new mw.Api().get({
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'content',
format: 'json'
}).then(function (data) {
return $.map(data.query.pages, function (value) { return value; })[0].revisions[0]['*'];
});
}
/**
* Save a page
*/
function savePage(title, text, summary) {
return new mw.Api().post({
action: 'edit',
title: title,
text: text,
summary: summary,
nocreate: '',
minor: '',
token: mw.user.tokens.get('csrfToken')
}).then(function (data) {
if (data.error && data.error.info) {
mw.notify(data.error.info);
}
}, function (data) {
mw.notify(data);
});
}
function init(e) {
e.preventDefault();
$('<div>' +
'<div style="width: 40em">درخواست\u200cهای ساخت رده را در خطوط جداگانه مانند مثال زیر وارد کنید:<br>رده۱@Cateogry1<br>رده۲@Cateogry2<br>رده۳@Cateogry3</div><br><B>نکات مهم:</B><br><B>۱-</B>ردهها باید شیوهنامه <a href="//fa.wikipedia.org/w/index.php?title=ویکیپدیا:ترجمه_ردهها" target="ویکیپدیا:ترجمه ردهها">ویکیپدیا:ترجمه_ردهها</a> را رعایت کنند.<br><B>۲-</B>ردههایی که تازه ساخته میشوند نیازی به افزودن به مقالات و صفحات ندارد و این ردهها پس از چند ساعت به صورت رباتیک به صفحههای مرتبط، اضافه میگردند و میانویکیشان به ویکیداده افزوده میشود.<br><B>۳-</B>ابزار ردهساز ردههایی که در ویکیانگلیسی موجود نباشند را نمیسازد.<br><B>۴-</B>ابزار ردهساز ردههایی که رده مادر نداشته باشند یا همسنگ رده مادر در ویکیپدیای فارسی نباشد یا همهٔ ردههای مادرشان رده پنهان باشد را نمیسازد.(رده ردهبندی نشده نمیسازد)<br><B>۵-</B>اگر ردهای را که پیشنهاد دادید ساخته نشدهاست، ممکن است [[ویژه:پالایهٔ_خرابکاری/91]] از عمل شما جلوگیری کرده باشد (دقت کنید که شرایط موجود در [[<a href="//fa.wikipedia.org/w/index.php?title=مدیاویکی:Abusefilter-warning-category" target="مدیاویکی:Abusefilter-warning-category">مدیاویکی:Abusefilter-warning-category</a>]] را رعایت کردهاید.)<br><B>۶-</B> به منظور پرنشدن صفحهٔ تغییرات اخیر، بیش از <B>۱۰</B> درخواست به صورت خودکار به <a href="//fa.wikipedia.org/wiki/وپ:دارر">رباتی</a> با عملکرد مشابه تحویل داده میشود.' +
'<textarea style="width: 100%; background-color: white;" placeholder="رده۱@Cateogry1" id="catmakerinput" rows="7"></textarea>' +
'</div>'
).dialog({
modal: true,
width: 700,
buttons: [{
id: 'catmaker-button-import',
text: 'ساخت رده',
click: function () {
var formInput = $('#catmakerinput').val();
if (formInput === '') { mw.notify('لطفاً فرم درخواست را به درستی پر کنید'); return; }
var requests = formInput.trim().split('\n');
if (requests.length > 10) {
loadPage('ویکیپدیا:درخواست ایجاد رده (رباتیک)').then(function (content) {
return savePage('ویکیپدیا:درخواست ایجاد رده (رباتیک)', content + '\n*' + requests.join('\n*').replace(/@/g, '---'), 'درخواست به کمک [[مدیاویکی:Gadget-CatMaker.js|ابزار ردهساز]]').then(function () {
mw.notify('درخواست به ربات تحویل داده شد، لطفاً بررسی کنید');
window.location = mw.util.getUrl('ویکیپدیا:درخواست ایجاد رده (رباتیک)', { action: 'history' });
});
});
return;
}
$.when.apply(null, $.map(requests, function (x) {
var req = x.replace(/رده:/, '').replace(/Category:/i, '').split('@');
if (req.length !== 2) { return; }
return startCat('رده:' + req[0], 'Category:' + req[1]);
})).then(function () {
mw.notify('ساخت رده\u200cها به پایان رسید، لطفاً بررسی کنید.');
window.location = mw.util.getUrl('Special:Contributions/' + mw.config.get('wgUserName'));
});
}
}]
});
}
$(function () {
mw.util.addCSS('#t-catmaker { font-weight: bold; }');
$(mw.util.addPortletLink('p-tb-label', '#', 'رده\u200cساز', 't-catmaker', 'ساخت رده به صورت خودکار')).click(init);
});
}(jQuery, mediaWiki));