MediaWiki:Gadget-Extra-Editbuttons.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
// <nowiki> // DON'T REMOVE THIS LINE EVER
/*global jQuery, mediaWiki, persianWikiTools, persianTools*/
/**
* UI code for Persian tools
* Tests: [[مدیاویکی:Gadget-Extra-Editbuttons-tests.js]] [[وپ:تست]]
* See also:
* * [[مدیاویکی:Gadget-Extra-Editbuttons-persiantools.js]]
* * [[مدیاویکی:Gadget-Extra-Editbuttons-persianwikitools.js]]
* * [[مدیاویکی:Gadget-Extra-Editbuttons-dictionary.js]]
* * [[مدیاویکی:Gadget-Extra-Editbuttons-autoed.js]]
* * [[مدیاویکی:Gadget-Extra-Editbuttons-botworks.js]]
*/
(function ($, mw) {
'use strict';
//
// ابزار در حالت نمایش
//
function loadPage(title) {
return new mw.Api().get({
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'content',
format: 'json'
}).then(function (data) {
return Object.values(data.query.pages)[0].revisions[0]['*'];
});
}
function redirectPost(url, data) {
var form = document.createElement('form');
document.body.appendChild(form);
form.method = 'post';
form.action = url;
for (var name in data) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = name;
input.value = data[name];
form.appendChild(input);
}
form.submit();
}
function addWatchthisParamIfAlreadyIsWatched(object) {
// if unwatch button exists it is in the user's watchlist right now
if ($('#ca-unwatch').length) {
object.wpWatchthis = '';
}
return object;
}
function bringShowChanges(page, content, summary) {
redirectPost(new mw.Uri(mw.config.get('wgScript')).extend({
title: page,
action: 'submit'
}), addWatchthisParamIfAlreadyIsWatched({
wpTextbox1: content,
wpDiff: '',
wpSummary: summary,
wpUltimateParam: 1
}));
}
if (mw.config.get('wgAction') === 'view' &&
mw.config.get('wgIsArticle') &&
mw.config.get('wgUserEditCount') > 100 &&
mw.config.get('wgPageName') !== 'صفحهٔ_اصلی' &&
$('#mw-imagepage-nofile, #noarticletext').length === 0 &&
mw.config.get('wgNamespaceNumber') !== 6 &&
mw.config.get('wgNamespaceNumber') !== 8) {
$('#ca-abar-abzar').remove();
var interwikiFix = !$('#t-wikibase').length &&
$('.interlanguage-link').length &&
$('.wbc-editpage').length;
$(mw.util.addPortletLink(
'p-views', '#',
interwikiFix ? 'ابرابزار+انتقال میانویکی' : 'ابرابزار',
'ca-abar-abzar',
interwikiFix ?
'ابزار پیشرفتهٔ ویرایش متن + ابزار انتقال خودکار میانویکی سنتی به ویکیداده' :
'ابزار پیشرفتهٔ ویرایش متن'
)).addClass('vector-tab-noicon').click(function (e) {
e.preventDefault();
Promise.all([
// افزودن میانویکی سنتی به ویکیداده به صورت خودکار
interwikiFix ?
$.get('//dexbot.toolforge.org/interwikidata.php', {
page: mw.config.get('wgPageName')
}) : '',
// اجرای کدهای ربات
botworks.trigFillcat,
botworks.trigMissedFileUpload,
botworks.trigMissedRef
]).catch(function () {}).then(function () {
return loadPage(mw.config.get('wgPageName'));
}).then(function (content) {
bringShowChanges(
mw.config.get('wgPageName'),
persianWikiTools.superTool(content),
'ابرابزار'
);
});
});
}
//
// ابزار در حالت ویرایش
//
function insertTags(pre, post, peri) {
if ($('#wpTextbox1').length) {
$('#wpTextbox1').textSelection(
'encapsulateSelection', { pre: pre, peri: peri, post: post }
);
}
}
/**
* Adds edit summary
*/
function addEditSummary(summaryText, replaceSummary) {
var summary = $('input#wpSummary, #wpSummary > input'),
summaryPrefix = '',
pos;
if (mw.util.getParamValue('section') === 'new' ||
summaryText === '' || summary.length === 0) {
return;
}
if (summary.val().includes('*/ ')) {
pos = summary.val().indexOf('*/ ');
summaryPrefix = summary.val().substr(0, pos + 3);
}
if (replaceSummary) {
summary.val(summaryPrefix + summaryText);
} else {
if (summary.val() === summaryPrefix) {
summary.val(summary.val() + summaryText);
} else {
if (!summary.val().includes(summaryText)) { // do not repeat in edit summary
summary.val(summary.val() + '، ' + summaryText);
}
}
}
}
/**
* Makes a simple button from parameters
*/
function createButton(callback, summaryText, replaceSummary, image, title, alt, idSuffix) {
function clickCallback(e) {
e.preventDefault();
callback();
addEditSummary(summaryText, replaceSummary);
}
var img = $('<img>').on('error', function () {
img.replaceWith($('<span>', {
class: 'mw-ui-button mw-ui-small mw-ui-constructive',
text: alt,
style: 'padding: 0;'
}));
}).attr({
src: image,
title: title,
alt: alt
});
var button = $('<span>', {
id: 'persian-wiki-tools-' + idSuffix
}).click(clickCallback).append(img);
return button[0];
}
/**
* Applies the string functions defined below to the
* selected text in the edit box. If no text is selected, applies
* the function to the whole contents of edit box.
*/
function applyOnSelection(callback) {
var txtarea, range, startPos, endPos, selText;
if (document.getElementById('editform') || $('.ns-446').length) {
txtarea = document.getElementById('wpTextbox1');
} else if ($('[name=wpNewTitleMain]')[0]) {
txtarea = $('[name=wpNewTitleMain]')[0];
} else {
return;
}
if (document.selection && document.selection.createRange) { // IE/Opera
// get current selection
txtarea.focus();
range = document.selection.createRange();
selText = range.text;
if (selText) {
range.text = callback(selText);
range.select();
} else {
txtarea.value = callback(txtarea.value);
}
} else if (txtarea.selectionStart || txtarea.selectionStart === 0) { // Mozilla
// get current selection
txtarea.focus();
startPos = txtarea.selectionStart;
endPos = txtarea.selectionEnd;
selText = txtarea.value.substring(startPos, endPos);
// insert tags
if (selText) {
txtarea.value = txtarea.value.substring(0, startPos) + callback(selText) + txtarea.value.substring(endPos, txtarea.value.length);
txtarea.selectionStart = startPos + selText.length;
txtarea.selectionEnd = txtarea.selectionStart;
} else {
txtarea.value = callback(txtarea.value);
}
}
}
var tools = {};
// Buttons that FIX wikitext
/* ی ک */
tools.ykArabic = createButton(
function () {
applyOnSelection(persianTools.toStandardPersianCharacters);
},
'اصلاح نویسه\u200cهای عربی',
false,
'//upload.wikimedia.org/wikipedia/commons/8/88/Button_YehKeh.png',
'اصلاح ی و ک',
'ی و ک',
'YehKeh'
);
/* فاصلهٔ مجازی */
tools.zwnj = createButton(
function () {
applyOnSelection(persianWikiTools.wikiApplyZwnj);
},
'اصلاح فاصلهٔ مجازی',
false,
'//upload.wikimedia.org/wikipedia/fa/d/d0/Button_ZWNJ.png',
'فاصلهٔ مجازی',
'فاصلهٔ مجازی',
'ZWNJ'
);
/* اصلاح نویسه\u200cها و حالت\u200cهای غیراستاندارد */
tools.applyOrthography = createButton(
function () {
applyOnSelection(persianWikiTools.wikiApplyOrthography);
},
'اصلاح نویسه',
false,
'//upload.wikimedia.org/wikipedia/fa/9/94/Button_non_standard.png',
'اصلاح نویسه\u200cها و حالت\u200cهای غیراستاندارد',
'اصلاح نویسه\u200cها و حالت\u200cهای غیراستاندارد',
'apply-orthography'
);
/* اصلاح ارقام */
tools.dig = createButton(
function () {
applyOnSelection(persianWikiTools.wikiTextDigitsToPersian);
},
'اصلاح ارقام',
false,
'//upload.wikimedia.org/wikipedia/fa/4/4a/Button_numbers.png',
'اصلاح ارقام',
'ارقام',
'numbers'
);
/* اصلاح ارقام مخصوص صفحه انتقال */
tools.digMove = createButton(
function () {
applyOnSelection(persianWikiTools.wikiConvertToPersianCharacters);
},
'اصلاح ارقام',
false,
'//upload.wikimedia.org/wikipedia/fa/4/4a/Button_numbers.png',
'اصلاح ارقام',
'ارقام',
'numbers'
);
//عدم تغییر در متن بحثها، سیاستها در فضاهای نام دیگر
if (mw.config.get('wgNamespaceNumber') === 0) {
/* برداشتن پیوند تاریخها */
tools.fixBadLinks = createButton(
function () {
applyOnSelection(persianWikiTools.fixBadLinks);
},
'[[وپ:پیوند سال|حذف پیوند تاریخها]]',
false,
'//upload.wikimedia.org/wikipedia/commons/1/11/Btn_toolbar_link_remove.png',
'حذف پیوند تاریخها',
'پیوند تاریخها',
'datelinks'
);
}
/* یونیکد نشانی وب */
tools.urlFix = createButton(
function () {
applyOnSelection(persianWikiTools.wikiUrlMinifier);
},
'اصلاح نشانی وب',
false,
'//upload.wikimedia.org/wikipedia/fa/b/ba/Button_decode_URI.png',
'یونی\u200cکدسازی نشانی\u200cها',
'یونی\u200cکدسازی',
'decode-URI'
);
/* اصلاح علامت @ */
tools.atSignFix = createButton(
function () {
applyOnSelection(function (text) {
return text.replace(/(\S+?)@(\S+?)/g, '$1{' + '{at}}$2');
});
},
'اصلاح @',
false,
'//upload.wikimedia.org/wikipedia/fa/7/7f/Button_at_sign.png',
'اصلاح علامت @',
'@',
'at-sign'
);
/* ابرابزار */
tools.superTool = createButton(
function () {
applyOnSelection(persianWikiTools.superTool);
},
'ابرابزار',
false,
'//upload.wikimedia.org/wikipedia/fa/f/fc/Button_super_tool.png',
'ابرابزار',
'ابرابزار',
'super-tool'
);
/* ابزار املا */
tools.dictation = createButton(
function () {
applyOnSelection(persianWikiTools.wikiDictation);
},
'اصلاح املا',
false,
'//upload.wikimedia.org/wikipedia/commons/a/a3/Button_Dictation-fa.png',
'املا',
'املا',
'dictation'
);
/* ابرابزار مخصوص صفحه انتقال */
tools.superToolMove = createButton(
function () {
applyOnSelection(persianWikiTools.superToolMove);
},
'ابرابزار',
false,
'//upload.wikimedia.org/wikipedia/fa/f/fc/Button_super_tool.png',
'ابرابزار',
'ابرابزار',
'super-tool'
);
/* اصلاحات قراردادن نقطه */
tools.punc = createButton(
function () {
applyOnSelection(persianWikiTools.wikiPunctuation);
},
'اصلاح سجاوندی',
false,
'//upload.wikimedia.org/wikipedia/fa/e/ed/Button_punctuation.png',
'نقطه\u200cگذاری',
'نقطه\u200cگذاری',
'punctuation'
);
// Buttons that add tags
/* برچسب ویکی\u200cسازی */
tools.wikify = createButton(
function () {
$('#wpTextbox1').val('{' + '{ویکی\u200cسازی}}\n' + $('#wpTextbox1').val());
},
'برچسب ویکی\u200cسازی',
false,
'//upload.wikimedia.org/wikipedia/fa/3/38/Button_wikify.png',
'برچسب ویکی\u200cسازی',
'ویکی\u200cسازی',
'wikify'
);
/* بدون منبع */
tools.noSource = createButton(
function () {
$('#wpTextbox1').val('{' + '{بدون منبع}}\n' + $('#wpTextbox1').val());
},
'برچسب منبع',
false,
'//upload.wikimedia.org/wikipedia/fa/8/8a/Button_no_source_fa.png',
'برچسب بدون منبع',
'بدون منبع',
'no-source'
);
/* منبع تصویر نامعلوم */
tools.picSource = createButton(
function () {
$('#wpTextbox1').val('{' + '{' + 'جا:منبع تصویر نامعلوم' + '}}\n' + $('#wpTextbox1').val());
},
'برچسب منبع',
false,
'//upload.wikimedia.org/wikipedia/fa/5/59/Button_image_source.png',
'برچسب منبع تصویر نامعلوم',
'منبع تصویر نامعلوم',
'image-source'
);
/* حق تکثیر تصویر نامعلوم */
tools.picCopy = createButton(
function () {
$('#wpTextbox1').val('{' + '{' + 'جا:حق تکثیر تصویر نامعلوم}}\n' + $('#wpTextbox1').val());
},
'برچسب حق تکثیر',
false,
'//upload.wikimedia.org/wikipedia/fa/7/7e/Button_image_copyright.png',
'برچسب حق تکثیر تصویر نامعلوم',
'حق تکثیر تصویر نامعلوم',
'image-copyright'
);
/* تمیزکاری */
tools.cleanup = createButton(
function () {
$('#wpTextbox1').val('{' + '{تمیزکاری}}\n' + $('#wpTextbox1').val());
},
'برچسب تمیزکاری',
false,
'//upload.wikimedia.org/wikipedia/commons/2/2e/Button_broom.png',
'برچسب تمیزکاری',
'تمیزکاری',
'broom'
);
/* پاک کن */
tools.cleanup = createButton(
function () {
insertTags('{{پاک کن}}\n');
},
'',
true,
'//commons.wikishia.net/w/images/5/52/Cleaner.jpg',
'برچسب پاک کن',
'پاک کن',
'broom'
);
// Buttons that help with wiki writing
/* تغییر جهت */
tools.toggleDirection = createButton(
function () {
$('#wpTextbox1, [name=wpNewTitleMain], .ace_editor').css({
'text-align': 'start',
'direction': $('#wpTextbox1, [name=wpNewTitleMain]').css('direction') === 'rtl' ? 'ltr' : 'rtl'
});
},
'',
true,
'//upload.wikimedia.org/wikipedia/fa/d/d0/Button_toggle_dir.png',
'تغییر جهت جعبهٔ ویرایش',
'تغییرجهت',
'toggle-dir'
);
tools.putSelectionInBDI = createButton(
function () {
applyOnSelection(persianWikiTools.putSelectionInBDI);
},
'جداسازی دوجهته',
false,
'//upload.wikimedia.org/wikipedia/commons/3/31/Button_bdi_tag.png',
'جداسازی دوجهته',
'دوجهته',
'put-in-bdi'
);
/* پیوند درونی */
tools.wikiLink = createButton(
function () {
insertTags('[[', ']]', 'مقاله');
},
'',
true,
'//upload.wikimedia.org/wikipedia/fa/d/d0/Button_in_wikify.png',
'پیوند',
'پیوند',
'wikify'
);
/* متن خطخورده */
tools.strikeTextButton = createButton(
function () {
insertTags('<s>', '</s>', 'متن خط خورده');
},
'',
true,
'//upload.wikimedia.org/wikipedia/commons/c/c9/Button_strike.png',
'متن خط\u200cخورده',
'متن خط\u200cخورده',
'strike'
);
/* توضیح */
tools.commentButton = createButton(
function () {
insertTags('<!--', '-->', 'توضیح');
},
'',
true,
'//upload.wikimedia.org/wikipedia/commons/3/34/Button_hide_comment.png',
'توضیح',
'توضیح',
'hide-comment'
);
/* ملزومات مقاله */
tools.addEssentialThings = createButton(
function () {
insertTags('== جستارهای وابسته ==\n\n== منابع ==\n{' + '{پانویس}}', '', '');
},
'',
true,
'//upload.wikimedia.org/wikipedia/commons/e/ef/Add_note.jpg',
'ملزومات مقاله',
'ملزومات مقاله',
'add-note'
);
/* چپچین */
tools.chapChin = createButton(
function () {
insertTags(
'{' + '{چپ\u200cچین}}\n',
'\n{' + '{پایان چپ\u200cچین}}',
'متن چپ\u200cچین\u200cشده'
);
},
'',
true,
'//upload.wikimedia.org/wikipedia/commons/e/ea/Button_align_left.png',
'چپ\u200cچین\u200cکردن متن',
'چپ\u200cچین',
'align-left'
);
/* اندیس بالا */
tools.upperText = createButton(
function () {
insertTags('<sup>', '</sup>', 'اندیس');
},
'',
true,
'//upload.wikimedia.org/wikipedia/commons/6/6a/Button_sup_letter.png',
'اندیس بالا',
'اندیس بالا',
'upper-letter'
);
/* اندیس پایین */
tools.lowerText = createButton(
function () {
insertTags('<sub>', '</sub>', 'اندیس');
},
'',
true,
'//upload.wikimedia.org/wikipedia/commons/a/aa/Button_sub_letter.png',
'اندیس پایین',
'اندیس پایین',
'lower-letter'
);
/* تغییرمسیر */
tools.redirectButton = createButton(
function () {
$('#wpTextbox1').val('');
insertTags(
'#REDIRECT [[',
']]',
'پیوند'
);
},
'',
true,
'//upload.wikimedia.org/wikipedia/commons/c/c8/Button_redirect.png',
'تغییرمسیر',
'تغییرمسیر',
'redirect'
);
/* سال میلادی */
tools.gregYear = createButton(
function () {
insertTags(
'[[',
' (میلادی)|]]',
'سال'
);
},
'',
true,
'//upload.wikimedia.org/wikipedia/fa/a/a7/Button_cal.png',
'سال میلادی',
'میلادی',
'cal'
);
/* مرتبسازی */
tools.sortText = createButton(
function () {
applyOnSelection(function (text) {
return persianTools.persianSort(text.split('\n')).join('\n');
});
},
'',
true,
'//upload.wikimedia.org/wikipedia/fa/3/33/Button_sort.png',
'مرتب\u200cسازی بر اساس الفبا',
'مرتب\u200cسازی',
'sort'
);
/* شد! */
tools.shod = createButton(
function () {
$('#wpTextbox1').val($('#wpTextbox1').val().trimRight() + '\n:{' + '{شد}} ~~' + '~~');
},
'شد',
true,
'//upload.wikimedia.org/wikipedia/commons/5/5b/Button_check.png',
'شد',
'شد',
'check'
);
/* عدد انگلیسی */
tools.toEnNumRobust = createButton(
function () {
applyOnSelection(persianWikiTools.robustToEnglishDigits);
},
'عدد انگلیسی',
false,
'//upload.wikimedia.org/wikipedia/commons/f/f5/Button_enNum.png',
'عدد انگلیسی',
'عدد انگلیسی',
'ToEnNumberRobust'
);
/* حذف ویکیسازی */
tools.removeWiki = createButton(
function () {
applyOnSelection(persianWikiTools.removeWikiSigne);
},
'حذف ویکیسازی',
false,
'//upload.wikimedia.org/wikipedia/fa/8/88/Button_NoWiki.png',
'حذف ویکیسازی',
'حذف ویکیسازی',
'removeWiki'
);
$(function () {
if (typeof Array.prototype.includes !== 'function') {
mw.log.error('Script not supported by browser.');
return;
}
// کد مناسب ویرایشگر جدید متنی
/*mw.hook('ve.activationComplete').add(function () {
var surface = ve.init.target.getSurface();
if (surface.getMode() === 'source') {
$('#firstHeading').append($('<img>', { src: '//upload.wikimedia.org/wikipedia/fa/f/fc/Button_super_tool.png' }).click(function () {
$('.ve-ce-contentBranchNode').get().forEach(function (x) {
x.innerText = persianWikiTools.superTool(x.innerText);
});
}));
}
});*/
var extraEditButtons = [],
extraMoveButtons = [],
space = ' ';
extraEditButtons = extraEditButtons.concat(tools.toggleDirection, tools.putSelectionInBDI, space, tools.ykArabic, tools.zwnj, tools.applyOrthography,
tools.dig, tools.punc, tools.dictation);
// حذف دکمهٔ ابرابزار در فضاهای بحث؛ از جمله فضای «ویکیپدیا»
var noSuperToolNamespaces = [1, 3, 5, 7, 9, 11, 13, 15, 101, 119, 828, 829];
if (!noSuperToolNamespaces.includes(mw.config.get('wgNamespaceNumber'))) {
extraEditButtons = extraEditButtons.concat(tools.superTool, space);
}
extraEditButtons = extraEditButtons.concat(tools.urlFix, tools.fixBadLinks, space, tools.welcome,
tools.addEssentialThings, tools.noSource, tools.sus, tools.tone, tools.wikify,
tools.shod, tools.cleanup, tools.clear, tools.speedyDel, tools.prod, space, tools.redirectButton,
tools.gregYear, tools.strikeTextButton, tools.chapChin, tools.commentButton, space, tools.sortText, space, space, tools.toEnNumRobust);
var userGroups = mw.config.get('wgUserGroups', []);
// شرط برای کاربری که گشت خودکار دارد
// ابزار حذف الگوهای ناموجود
if (userGroups.includes('autopatrolled') ||
userGroups.includes('eliminator') ||
userGroups.includes('sysop')) {
extraEditButtons = extraEditButtons.concat(tools.removeWiki);
}
extraEditButtons = extraEditButtons.concat(space).concat(window.userCustomEditButtons || []);
extraMoveButtons = extraMoveButtons.concat(tools.superToolMove, space, tools.toggleDirection, space,
tools.ykArabic, tools.zwnj, tools.applyOrthography, tools.digMove, tools.punc, space, tools.dictation);
$('#persian-wiki-tools').remove();
if ($('#wpTextbox1').length) {
$('<div>', {
id: 'persian-wiki-tools',
dir: 'rtl',
style: 'float:right;'
}).append(extraEditButtons).insertBefore('#wpTextbox1');
} else if ($('#movepage').length) {
$('<span>', {
id: 'persian-wiki-tools'
}).append(extraMoveButtons).insertAfter('#wpNewTitle');
}
});
}(jQuery, mediaWiki));