مدیاویکی:Gadget-close.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 archiveSection;
var commentInSection;
var archiveSectionOptions = {
install: function() {
if ($.inArray(mw.config.get("wgNamespaceNumber"), [1, 3, 4, 5, 7, 9, 11, 13, 15]) > -1) {
$('.mw-editsection').each(function() {
var span = $('<span>', {
class: 'mw-editsection mw-archivesection'
}).insertBefore(this);
span.append($('<span>', {
class: 'mw-editsection-bracket',
text: '['
}));
span.append($('<a>', {
href: '#',
title: 'ثبت نظر (موافق/مخالف/شد/...)',
style: 'font-size: smaller;',
text: 'ثبت نظر',
}).click(function(e) {
e.preventDefault();
var section = e.target;
mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']).done(function() {
archiveSectionOptions.createCommentWindow(section);
});
}));
span.append($('<span>', {
class: 'mw-editsection-bracket',
text: ' / '
}));
span.append($('<a>', {
href: '#',
title: 'جمعبندی این بخش',
style: 'font-size: smaller;',
text: 'جمعبندی',
}).click(function(e) {
e.preventDefault();
var section = e.target;
mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']).done(function() {
archiveSectionOptions.createArchiveWindow(section);
});
}));
span.append($('<span>', {
class: 'mw-editsection-bracket',
text: ']'
}));
// Late pre-loading
mw.loader.load(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']);
});
}
},
createArchiveWindow: function(section) {
var query = archiveSectionOptions.getQuery(section);
archiveSectionOptions.currentSectionId = query.section;
function ArchiveSection(config) {
ArchiveSection.super.call(this, config);
}
OO.inheritClass(ArchiveSection, OO.ui.ProcessDialog);
ArchiveSection.static.name = 'archive';
ArchiveSection.static.title = 'جمعبندی بخش';
ArchiveSection.static.actions = [{
action: 'archive',
label: 'جمعبندی',
flags: 'primary'
}, {
label: 'لغو',
flags: 'safe'
}];
ArchiveSection.prototype.initialize = function() {
var fieldset = [];
ArchiveSection.super.prototype.initialize.apply(this, arguments);
this.panel = new OO.ui.PanelLayout({
padded: true,
expanded: false
});
this.content = new OO.ui.FieldsetLayout();
archiveSectionOptions.switchTop = new OO.ui.ToggleSwitchWidget({
label: 'جمعبندی بالای متن باشد',
value: true,
});
archiveSectionOptions.switchSuccess = new OO.ui.ToggleSwitchWidget({
label: 'بحث در رسیدن به اجماع موفق بود',
value: true,
});
archiveSectionOptions.switchBold = new OO.ui.ToggleSwitchWidget({
label: 'متن جمعبندی ضخیم نمایش داده شود',
value: false,
});
archiveSectionOptions.textSummary = new OO.ui.TextInputWidget({
placeholder: 'متن جمعبندی را وارد کنید',
});
//archiveSectionOptions.textSummary.setRTL(true);
fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchTop, {
label: 'جمعبندی بالای متن باشد',
align: 'inline',
}));
fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchSuccess, {
label: 'بحث در رسیدن به اجماع موفق بود',
align: 'inline',
}));
fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchBold, {
label: 'متن جمعبندی ضخیم نمایش داده شود',
align: 'inline',
}));
fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.textSummary, {
label: 'جمعبندی:',
align: 'top'
}));
this.content.addItems(fieldset);
this.panel.$element.append(this.content.$element);
this.$body.append(this.panel.$element);
};
ArchiveSection.prototype.getActionProcess = function(action) {
var dialog = this;
if (action === 'archive') {
archiveSectionOptions.doEdit(archiveSectionOptions.currentSectionId, action);
}
return ArchiveSection.super.prototype.getActionProcess.call(this, action);
};
if (!windowManager) {
windowManager = new OO.ui.WindowManager();
$('body').append(windowManager.$element);
}
if (!archiveSection) {
archiveSection = new ArchiveSection({
size: 'medium'
});
windowManager.addWindows([archiveSection]);
}
windowManager.openWindow(archiveSection);
},
createCommentWindow: function(section) {
var query = archiveSectionOptions.getQuery(section);
archiveSectionOptions.currentSectionId = query.section;
function CommentInSection(config) {
CommentInSection.super.call(this, config);
}
OO.inheritClass(CommentInSection, OO.ui.ProcessDialog);
CommentInSection.static.name = 'comment';
CommentInSection.static.title = 'ثبت نظر';
CommentInSection.static.actions = [{
action: 'comment',
label: 'ثبت نظر',
flags: 'primary'
}, {
label: 'لغو',
flags: 'safe'
}];
CommentInSection.prototype.initialize = function() {
var fieldset = [];
CommentInSection.super.prototype.initialize.apply(this, arguments);
this.panel = new OO.ui.PanelLayout({
padded: true,
expanded: false
});
this.content = new OO.ui.FieldsetLayout();
archiveSectionOptions.pinguser = new OO.ui.ToggleSwitchWidget({
label: 'آخرین کاربر پینگ شود؟',
value: false,
});
//archiveSectionOptions.pinguser.on( 'change', function () {
// alert(archiveSectionOptions.setPingUser(current2))
//});
archiveSectionOptions.radioComment = new OO.ui.RadioOptionWidget({
label: 'پیام',
});
archiveSectionOptions.radioDone = new OO.ui.RadioOptionWidget({
label: 'شد',
});
archiveSectionOptions.radioReject = new OO.ui.RadioOptionWidget({
label: 'نشد',
});
archiveSectionOptions.radioSupport = new OO.ui.RadioOptionWidget({
label: 'موافق',
});
archiveSectionOptions.radioOppose = new OO.ui.RadioOptionWidget({
label: 'مخالف',
});
archiveSectionOptions.radioDelete = new OO.ui.RadioOptionWidget({
label: 'حذف',
});
archiveSectionOptions.radioKeep = new OO.ui.RadioOptionWidget({
label: 'بماند',
});
fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.pinguser, {
label: 'آخرین کاربر پینگ شود؟',
align: 'inline',
}));
archiveSectionOptions.radioCommentType = new OO.ui.RadioSelectWidget({
items: [
archiveSectionOptions.radioComment,
archiveSectionOptions.radioDone,
archiveSectionOptions.radioReject,
archiveSectionOptions.radioSupport,
archiveSectionOptions.radioOppose,
archiveSectionOptions.radioDelete,
archiveSectionOptions.radioKeep
]
});
archiveSectionOptions.radioCommentType.selectItem(archiveSectionOptions.radioComment);
archiveSectionOptions.textComment = new OO.ui.TextInputWidget({
placeholder: 'متن نظر را وارد کنید',
});
//archiveSectionOptions.textComment.setRTL(true);
fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.radioCommentType, {
label: 'برچسب قبل از نظر',
align: 'top'
}));
fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.textComment, {
label: 'متن نظر:',
align: 'top'
}));
this.content.addItems(fieldset);
this.panel.$element.append(this.content.$element);
this.$body.append(this.panel.$element);
};
CommentInSection.prototype.getActionProcess = function(action) {
var dialog = this;
if (action === 'comment') {
archiveSectionOptions.doEdit(archiveSectionOptions.currentSectionId, action);
}
return CommentInSection.super.prototype.getActionProcess.call(this, action);
};
if (!windowManager) {
windowManager = new OO.ui.WindowManager();
$('body').append(windowManager.$element);
}
if (!commentInSection) {
commentInSection = new CommentInSection({
size: 'medium'
});
windowManager.addWindows([commentInSection]);
}
windowManager.openWindow(commentInSection);
},
getQuery: function(section) {
var href = $(section).parent().next().find('a').attr('href');
var query = new mw.Uri(href).query;
return query;
},
setPingUser: function(text) {
var Plines = text.replace('\r', '').split('\n');
var Plastline = Plines[Plines.length - 1];
var PingUsers = Plastline.match(/\[\[(?:بحث[_ ]کاربر|[Uu]ser[_ ][tT]alk)\:([^\]]+)\]\]/i)[1].split('|')[0]
return '{{پینگ|' + PingUsers + '}}'
},
setIndentation: function(text, newText) {
text = text.replace('\r', '')
var lines = text.split('\n');
var lastline = lines[lines.length - 1];
var colons = lastline.match('^:*')[0].length;
var indentation = '';
for (var i = 0; i < colons + 1; i++) {
indentation += ':';
}
text = text + '\n' + indentation + newText.trim();
return text
},
doEdit: function(sectionId, action) {
(new mw.Api()).get({
format: 'json',
action: 'query',
titles: mw.config.get("wgPageName"),
rvsection: sectionId,
prop: 'revisions',
rvprop: 'content',
}).then(function(data) {
var page = data.query.pages[Object.keys(data.query.pages)[0]];
var current = page.revisions[0]['*'];
var header = current.substr(0, current.indexOf('\n'));
var content = current.substr(current.indexOf('\n') + 1);
var newText = '';
var pingtxt = '';
var section_title = (current.match(/^(=+)[^=]*?(\1)$/m) || [''])[0];
section_title = section_title.replace(/\=/g, '');
var editSummary = '/' + '*' + section_title + '*' + '/ ';
if (action == 'archive') {
editSummary += 'جمعبندی: ';
editSummary += archiveSectionOptions.textSummary.getValue();
newText = header + '\n';
// Per Special:Diff/18468612
if (mw.config.get("wgPageName") == "ویکیپدیا:درخواست_انتقال") {
if (archiveSectionOptions.switchSuccess.getValue()) {
content = content.replace(/\{\{وضعیت\|?\}\}/, '{{وضعیت|شد}}');
} else {
content = content.replace(/\{\{وضعیت\|?\}\}/, '{{وضعیت|نشد}}');
}
}
newText += '{{بسته';
if (archiveSectionOptions.switchSuccess.getValue()) {
newText += '}}\n';
} else {
newText += '|ناموفق=بله}}\n';
}
var summaryText = '';
if (archiveSectionOptions.textSummary.getValue()) {
if (archiveSectionOptions.switchBold.getValue()) {
summaryText += "'''";
}
summaryText += archiveSectionOptions.textSummary.getValue();
if (archiveSectionOptions.switchBold.getValue()) {
summaryText += "'''";
}
summaryText += ' ~~' + '~~\n';
}
if (archiveSectionOptions.switchTop.getValue()) {
if (archiveSectionOptions.textSummary.getValue()) {
newText += ':' + summaryText;
}
newText += content;
if (newText.indexOf('{{بسته') > -1) newText += '\n{{پایان بسته}}';
} else {
if (archiveSectionOptions.textSummary.getValue()) {
newText = archiveSectionOptions.setIndentation(newText + content, summaryText);
} else {
newText = newText + content;
}
if (newText.indexOf('{{بسته') > -1) newText += '\n{{پایان بسته}}';
}
return (new mw.Api()).post({
format: 'json',
action: 'edit',
title: mw.config.get("wgPageName"),
section: sectionId,
summary: editSummary,
text: newText,
token: mw.user.tokens.get('editToken')
});
} else {
// editSummary += archiveSectionOptions.textComment.getValue();
var currentTxt = current.replace('\r', '')
var prefix = '';
if (currentTxt.search('\n*') > 0) {
prefix = '* ';
} else if (currentTxt.search('\n#') > 0) {
prefix = '# ';
} else {
prefix = '* ';
}
if (archiveSectionOptions.pinguser.getValue()) {
var Pingtxt = archiveSectionOptions.setPingUser(currentTxt)
} else {
var Pingtxt = ''
}
if (archiveSectionOptions.radioDone.isSelected()) {
newText = Pingtxt + '{{شد}} ';
editSummary += 'انجام شد';
} else if (archiveSectionOptions.radioComment.isSelected()) {
newText = Pingtxt + '';
editSummary += 'پیام';
} else if (archiveSectionOptions.radioReject.isSelected()) {
newText = Pingtxt + '{{نشد}} ';
editSummary += 'انجام نشد';
} else if (archiveSectionOptions.radioKeep.isSelected()) {
newText = prefix + Pingtxt + ' {{بماند}} ';
editSummary += 'ثبت نظر بماند';
} else if (archiveSectionOptions.radioDelete.isSelected()) {
newText = prefix + Pingtxt + ' {{حذف}} ';
editSummary += 'ثبت نظر حذف شود';
} else if (archiveSectionOptions.radioSupport.isSelected()) {
newText = prefix + Pingtxt + ' {{موافق}} ';
editSummary += 'ثبت نظر موافق';
} else {
newText = prefix + Pingtxt + ' {{مخالف}} ';
editSummary += 'ثبت نظر مخالف';
}
newText += archiveSectionOptions.textComment.getValue();
newText += ' ~~' + '~~';
if (archiveSectionOptions.radioSupport.isSelected() ||
archiveSectionOptions.radioOppose.isSelected() ||
archiveSectionOptions.radioDelete.isSelected() ||
archiveSectionOptions.radioKeep.isSelected()) {
newText = current + '\n' + newText;
} else {
newText = archiveSectionOptions.setIndentation(current, newText);
}
return (new mw.Api()).post({
format: 'json',
action: 'edit',
title: mw.config.get("wgPageName"),
section: sectionId,
summary: editSummary,
text: newText,
token: mw.user.tokens.get('editToken')
});
}
}).then(function() {
if (action == 'archive') {
mw.notify('در حال ثبت جمعبندی شما ...');
} else {
mw.notify('در حال ثبت نظر شما ...');
}
location.hash = $('.mw-headline')[sectionId - 1].id;
location.reload(true);
}, function(error) {
mw.notify('ثبت نظر یا جمعبندی ناموفق بود: ' + error, {
type: 'error'
});
})
},
currentSectionId: -1,
};
if (mw.config.get('wgNamespaceNumber') >= 0) {
$(archiveSectionOptions.install);
}
})(jQuery, mediaWiki);