مدیاویکی:Gadget-AfD.js
پرش به ناوبری
پرش به جستجو
نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
- فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلیدهای Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-R)
- گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-Shift-R)
- اینترنت اکسپلورر/ Edge: کلید Ctrl را نگهدارید و روی دکمهٔ Refresh کلیک کنید، یا کلیدهای Ctrl-F5 را با هم فشار دهید
- اپرا: Ctrl-F5 را بفشارید.
/*global jQuery, mediaWiki */
(function($, mw) {
'use strict';
var windowManager;
var archiveAfD;
var archiveOptions = {
install: function() {
if (mw.config.get('wgAction') === 'view' && (mw.config.get('wgPageName').search("ویکیپدیا:نظرخواهی_برای_حذف/") > -1)) {
$(mw.util.addPortletLink('p-views', '#ca-afd', 'جمعبندی', 'ca-afd', 'ابزار جمعبندی')).click(function(e) {
mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']).done(archiveOptions.createWindow);
e.preventDefault();
}).insertBefore('#ca-view');
// Late pre-loading
mw.loader.load(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']);
}
},
reason: '',
createWindow: function() {
function ArchiveAfD(config) {
ArchiveAfD.super.call(this, config);
}
OO.inheritClass(ArchiveAfD, OO.ui.ProcessDialog);
ArchiveAfD.static.name = 'AfD dialog';
ArchiveAfD.static.title = 'جمعبندی نظرخواهی';
ArchiveAfD.static.actions = [{
action: 'archive',
label: 'جمعبندی',
flags: 'primary'
}, {
label: 'لغو',
flags: 'safe'
}];
ArchiveAfD.prototype.initialize = function() {
var fieldset = [];
ArchiveAfD.super.prototype.initialize.apply(this, arguments);
this.panel = new OO.ui.PanelLayout({
padded: true,
expanded: false
});
this.content = new OO.ui.FieldsetLayout();
archiveOptions.radioDelete = new OO.ui.RadioOptionWidget({
id: 'radioDelete',
label: 'حذف شود',
});
archiveOptions.radioMerge = new OO.ui.RadioOptionWidget({
id: 'radioMerge',
label: 'ادغام شود',
});
archiveOptions.radioKeep = new OO.ui.RadioOptionWidget({
id: 'radioKeep',
label: 'بماند',
});
archiveOptions.radioSelect = new OO.ui.RadioSelectWidget({
items: [archiveOptions.radioDelete,
archiveOptions.radioMerge,
archiveOptions.radioKeep
]
});
archiveOptions.radioSelect.selectItem(archiveOptions.radioDelete);
archiveOptions.textReason = new OO.ui.TextInputWidget({
placeholder: 'متن جمعبندی را وارد کنید',
});
//archiveOptions.textReason.setRTL(true);
archiveOptions.textMergeTarget = new OO.ui.TextInputWidget({
id: 'textTargetMerge',
placeholder: 'نام کامل صفحه',
});
//archiveOptions.textReason.setRTL(true);
fieldset.push(new OO.ui.FieldLayout(archiveOptions.radioSelect, {
label: 'تصمیم',
align: 'top'
}));
fieldset.push(new OO.ui.FieldLayout(archiveOptions.textReason, {
label: 'جمعبندی:',
align: 'top'
}));
fieldset.push(new OO.ui.FieldLayout(archiveOptions.textMergeTarget, {
label: 'ادغام با:',
align: 'top'
}));
this.content.addItems(fieldset);
this.panel.$element.append(this.content.$element);
this.$body.append(this.panel.$element);
};
ArchiveAfD.prototype.getActionProcess = function(action) {
var dialog = this;
if (action === 'archive') {
archiveOptions.reason = archiveOptions.textReason.getValue();
var debatePage = mw.config.get('wgPageName');
var page_title = mw.config.get('wgPageName');
page_title = page_title.replace("ویکیپدیا:نظرخواهی_برای_حذف/", "").replace(/_\(بار_.+\)$/, "");
var talkPrefix = 'بحث:';
if (page_title.search(/کاربر:|الگو:|رده:|ویکیپدیا:|درگاه:|راهنما:/) > -1) {
talkPrefix = 'بحث ';
}
if (page_title.search(/^بحث/) > -1) {
talkPrefix = false;
}
return new OO.ui.Process(function() {
var summary = '';
archiveOptions.checkRedirect(page_title);
// Remove page from WP:AfD
summary = '/' + '*حذف [[' + debatePage.replace(/\_/g, ' ') + ']] از [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])*' + '/';
archiveOptions.loadSavePageRefresh('ویکیپدیا:نظرخواهی_برای_حذف', archiveOptions.removeLink, summary);
if (archiveOptions.radioDelete.isSelected()) {
archiveOptions.reason = 'حذف شود. ' + archiveOptions.reason;
// Update AfD page
summary = 'بستن نظرخواهی [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])';
archiveOptions.loadSavePageRefresh(debatePage, archiveOptions.closePage, summary);
// Update AfD archives
archiveOptions.creationDate(debatePage, function(archlink) {
archiveOptions.archiveMonth(archlink, function(month) {
summary = '/' + '*بایگانی نظرخواهی [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])*' + '/';
archiveOptions.loadSavePageRefresh('ویکیپدیا:نظرخواهی_برای_حذف/بایگانی/' + month, archiveOptions.archivePage, summary);
})
});
// Delete the page
var summary = 'حذف صفحه بر اساس [[' + debatePage + '|نظرخواهی برای حذف]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])';
archiveOptions.deletePageRefresh(page_title, summary);
} else {
if (archiveOptions.radioMerge.isSelected()) {
var targetPage = archiveOptions.textMergeTarget.getValue();
archiveOptions.reason = 'ادغام شود با [[' + targetPage + ']]. ' + archiveOptions.reason;
// Mention the old AfD on the talk page
summary = '/' + '*افزودن [[الگو:پیشینه حذف]] به بحث صفحه ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])*' + '/';
if (talkPrefix) {
archiveOptions.loadSavePageRefresh(talkPrefix + page_title, archiveOptions.closeTalkPage, summary);
}
// Update AfD page
summary = 'بستن نظرخواهی [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])';
archiveOptions.loadSavePageRefresh(debatePage, archiveOptions.closePage, summary);
// Update AfD archives
archiveOptions.creationDate(debatePage, function(archlink) {
archiveOptions.archiveMonth(archlink, function(month) {
summary = '/' + '*بایگانی نظرخواهی [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])*' + '/';
archiveOptions.loadSavePageRefresh('ویکیپدیا:نظرخواهی_برای_حذف/بایگانی/' + month, archiveOptions.archivePage, summary);
})
});
// Update subject page
summary = '/' + '*حذف [[الگو:پیشنهاد حذف]] از صفحه ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])*' + '/';
archiveOptions.loadSavePageRefresh(page_title, function(text) {
text = archiveOptions.removeTemplate(text);
text = '{{ادغام با|' + targetPage + '}}\n' + text;
return text
}, summary);
} else {
archiveOptions.reason = 'بماند. ' + archiveOptions.reason;
// Mention the old AfD on the talk page
if (talkPrefix) {
summary = '/' + '*افزودن [[الگو:پیشینه حذف]] به بحث صفحه ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])*' + '/';
archiveOptions.loadSavePageRefresh(talkPrefix + page_title, archiveOptions.closeTalkPage, summary);
}
// Update AfD page
summary = 'بستن نظرخواهی [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])';
archiveOptions.loadSavePageRefresh(debatePage, archiveOptions.closePage, summary);
// Update AfD archives
archiveOptions.creationDate(debatePage, function(archlink) {
archiveOptions.archiveMonth(archlink, function(month) {
summary = '/' + '*بایگانی نظرخواهی [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])*' + '/';
archiveOptions.loadSavePageRefresh('ویکیپدیا:نظرخواهی_برای_حذف/بایگانی/' + month, archiveOptions.archivePage, summary);
})
});
// Update subject page
summary = '/' + '*حذف [[الگو:پیشنهاد حذف]] از صفحه ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])*' + '/';
archiveOptions.loadSavePageRefresh(page_title, archiveOptions.removeTemplate, summary);
}
}
dialog.close({
action: action
}).done(function() {
// TODO: Refresh the AfD page after all actions are complete
});
});
}
return ArchiveAfD.super.prototype.getActionProcess.call(this, action);
};
if (!windowManager) {
windowManager = new OO.ui.WindowManager();
$('body').append(windowManager.$element);
}
if (!archiveAfD) {
archiveAfD = new ArchiveAfD({
size: 'medium'
});
windowManager.addWindows([archiveAfD]);
}
windowManager.openWindow(archiveAfD);
},
convertYearToFarsi: function(year) {
var i = 0;
for (i = 0; i <= 9; i = i + 1) {
year = year.replace(new RegExp('[' + '0123456789' [
i
] + ']', 'g'), '۰۱۲۳۴۵۶۷۸۹' [i]);
}
return year
},
convertMonthToFarsi: function(month) {
switch (month) {
case 'January':
return 'ژانویه';
break;
case 'February':
return 'فوریه';
break;
case 'March':
return 'مارس';
break;
case 'April':
return 'آوریل';
break;
case 'May':
return 'مه';
break;
case 'June':
return 'ژوئن';
break;
case 'July':
return 'ژوئیه';
break;
case 'August':
return 'اوت';
break;
case 'September':
return 'سپتامبر';
break;
case 'October':
return 'اکتبر';
break;
case 'November':
return 'نوامبر';
break;
case 'December':
return 'دسامبر';
break;
}
},
checkRedirect: function(ar_title) {
var params = {
action: "query",
prop: "info",
titles: ar_title,
format: "json"
};
mw.loader.using('mediawiki.api', function() {
(new mw.Api()).get(params).done(function(data) {
if ("redirect" in data["query"]
["pages"][Object.keys(data["query"]["pages"])]) {
mw.notify("صفحهٔ موضوع نظرخواهی منتقل شدهاست. حواستان باشد که دستی درست کنید!", {
type: 'error'
});
}
});
});
},
creationDate: function(title, callback) {
mw.loader.using('mediawiki.api', function() {
(new mw.Api()).get({
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'timestamp',
rvdir: 'newer',
format: 'json',
rvlimit: '1',
}).done(function(data) {
var timestamp = data["query"]["pages"][Object.keys(data["query"]
["pages"])]["revisions"]
[0]["timestamp"];
callback(timestamp);
});
});
},
archiveMonth: function(timestamp, callback) {
var crDate = new Date(timestamp);
var archiveMonthLink = archiveOptions.convertMonthToFarsi(crDate.getUTCMonthName()) + ' ' + archiveOptions.convertYearToFarsi(String(crDate.getUTCFullYear()));
callback(archiveMonthLink);
},
loadPage: function(title, callback) {
(new mw.Api()).get({
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'content',
format: 'json'
}).done(function(data) {
try {
callback($.map(data.query.pages, function(value) {
return value;
})[0].revisions[0]['*']);
} catch (exception) {
callback('');
}
}).fail(function(data) {
callback($.map(data.query.pages, function(value) {
return value;
})[0].revisions[0]);
});
},
protectPageRefresh: function(page, summary) {
archiveOptions.getProtectToken(function(token) {
archiveOptions.protectPage(page, summary, token);
});
},
getProtectToken: function(callback) {
(new mw.Api()).post({
action: 'tokens',
type: 'protect'
}).done(function(data) {
if (data.error && data.error.info) {
mw.notify(data.error.info, {
type: 'error'
});
} else {
callback(data.tokens.protecttoken);
}
}).fail(function(data) {
mw.notify(data);
});
},
protectPage: function(title, summary, token) {
(new mw.Api()).post({
action: 'protect',
title: title,
reason: summary,
token: token,
protections: 'create=sysop',
expiry: '1 year',
}).done(function(data) {
if (data.error && data.error.info) {
mw.notify(data.error.info, {
type: 'error'
});
} else {
mw.notify('مقاله محافظت شد!');
}
}).fail(function(data) {
mw.notify(data);
});
},
savePage: function(title, text, summary, callback) {
(new mw.Api()).post({
action: 'edit',
title: title,
text: text,
summary: summary,
minor: '',
token: mw.user.tokens.get('editToken')
}).done(function(data) {
if (data.error && data.error.info) {
if (data.error.info == 'missingtitle') {
mw.notify('صفحه ' + title + ' موجود نیست!', {
type: 'error'
});
} else {
mw.notify(data.error.info, {
type: 'error'
});
}
} else {
callback();
}
}).fail(function(data) {
mw.notify(data);
});
},
closePage: function(text) {
text = text.replace('/<noinclude' + '>\{\{(?:این الگو را زمان بستن نبح حذف کن|REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD)\|.+?\}\}</noinclude' +
'\/>\n?/g', '');
text = '{{آغاز بایگانی حذف}}\n\n' + archiveOptions.reason + '\n~~' + '~~\n' + text + '\n{{پایان بایگانی حذف}}';
mw.notify('نظرخواهی بسته شد!');
return text;
},
closeTalkPage: function(text) {
var page_name = mw.config.get("wgPageName");
text = '{{پیشینه حذف| تاریخ =~~' + '~~' + '~| نتیجه =' + archiveOptions.reason + ' | صفحه =' + page_name.replace(/\_/g, ' ') + ' |کوچک=}}\n\n' + text;
text = text.replace("صفحه =ویکیپدیا:نظرخواهی برای حذف/", "صفحه =")
mw.notify('الگو پیشینه حذف به بحث صفحه افزوده شد!');
return text;
},
archivePage: function(text) {
var pagelink = mw.config.get("wgPageName");
text = text + '\n* [[' + pagelink.replace(/\_/g, ' ') + ']] -- ' + archiveOptions.reason + ' ~~' + '~~'
mw.notify('بایگانی بهروز شد.');
return text;
},
removeLink: function(text) {
var pagelink = mw.config.get("wgPageName");
var text2 = text;
pagelink = pagelink.replace(/\_/g, ' ');
text = text.replace('{{' + pagelink + '}}\n', '')
if (text2 == text) {
mw.notify('توجه:برداشتن نظرخواهی از وپ:نبح با خطا مواجه شد!', {
type: 'error'
})
} else {
mw.notify('نظرخواهی از وپ:نبح برداشته شد!')
}
return text;
},
removeTemplate: function(text) {
var text2 = text;
text = text.replace(/(\<!--(.+?)--\>\n*|)\{\{(نظرخواهی برای حذف|پیشنهاد حذف\s?۲)(.+?|)\}\}(\n*\<!--(.+?)--\>|)(\n*\<!--(.+?)--\>|)/g, '');
text = text.replace(/\<!-- قبلاً پیشنهاد حذف داده شدهاست(.+?)--\>/g, '');
text = text.replace(/\<noinclude\>\n\<\/noinclude\>/g, '');
if (text2 == text) {
mw.notify('توجه:برداشتن الگو از مقاله با مشکل مواجه شد!', {
type: 'error'
});
} else {
mw.notify('الگو پیشنهاد حذف از صفحه برداشته شد!');
}
text = text.trim()
return text;
},
loadSavePageRefresh: function(page, replaceCallback, summary) {
archiveOptions.loadPage(page, function(text) {
archiveOptions.savePage(page, replaceCallback(text), summary, function() {
//window.location = mw.util.getUrl(page) + '?action=purge';
});
});
},
deletePageRefresh: function(page, summary) {
archiveOptions.getDeleteToken(function(token) {
archiveOptions.deletePage(page, summary, token, archiveOptions.protectPageRefresh);
});
},
getDeleteToken: function(callback) {
(new mw.Api()).post({
action: 'tokens',
type: 'delete'
}).done(function(data) {
if (data.error && data.error.info) {
mw.notify(data.error.info, {
type: 'error'
});
} else {
callback(data.tokens.deletetoken);
}
}).fail(function(data) {
mw.notify(data);
});
},
deletePage: function(title, summary, token, callback) {
(new mw.Api()).post({
action: 'delete',
title: title,
reason: summary,
token: token,
}).done(function(data) {
if (data.error && data.error.info) {
mw.notify(data.error.info, {
type: 'error'
});
} else {
mw.notify('مقاله حذف شد!');
callback(title, 'محافظت صفحه بر اساس [[ویکیپدیا:نظرخواهی_برای_حذف/' + title +
'|نظرخواهی برای حذف]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمعبندی]])');
}
}).fail(function(data) {
mw.notify(data);
});
if (title.search(/کاربر:|الگو:|رده:|ویکیپدیا:|درگاه:|راهنما:/) > -1) {
var TalkLink = 'بحث ' + title;
} else {
var TalkLink = 'بحث:' + title;
}
(new mw.Api()).post({
action: 'delete',
title: TalkLink,
reason: summary,
token: token,
}).done(function(data) {
if (data.error && data.error.info) {
mw.notify(data.error.info, {
type: 'error'
});
} else {
mw.notify('بحث مقاله حذف شد!');
}
}).fail(function(data) {
mw.notify(data);
});
},
};
if (mw.config.get('wgNamespaceNumber') >= 0) {
$(archiveOptions.install);
}
})(jQuery, mediaWiki);