مدیاویکی:Gadget-Extra-Editbuttons.js: تفاوت میان نسخه‌ها

از ویکی پاسخ
بدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
خط ۱۴: خط ۱۴:
'use strict';
'use strict';


//
// ابزار در حالت نمایش
// ابزار در حالت نمایش
/**
//
* Fetch a page
 
*/
function loadPage(title) {
function loadPage(title) {
return new mw.Api().get({
return new mw.Api().get({
خط ۲۶: خط ۲۶:
format: 'json'
format: 'json'
}).then(function (data) {
}).then(function (data) {
return data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]['*'];
return Object.values(data.query.pages)[0].revisions[0]['*'];
});
});
}
}
 
function insertTags ( pre, post, peri ) {
function redirectPost(url, data) {
var current = $( '#wpTextbox1' );
var form = document.createElement('form');
if ( current && current.length ) {
document.body.appendChild(form);
current.textSelection(
form.method = 'post';
'encapsulateSelection', { pre: pre, peri: peri, post: 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
}));
}
}


/**
* Save a page
*/
   
function goToEdit() {
        window.location="//"+mw.config.get('wgServerName')+"/w/index.php?title="+mw.config.get('wgPageName')+"&action=submit#continueAbar";
}
    if (window.location.hash=='#continueAbar'){
            var text=$('#wpTextbox1').val()
            setTimeout(function() {
                var newText=persianWikiTools.superTool(text)
                $('#wpTextbox1').val(newText)
                $('#wpSummary').val('ابرابزار')
                setTimeout(function() {
                    document.getElementById('wpDiff').click();
                }, 500);
            }, 2000);
    };
if (mw.config.get('wgAction') === 'view' &&
if (mw.config.get('wgAction') === 'view' &&
mw.config.get('wgIsArticle') &&
mw.config.get('wgIsArticle') &&
mw.config.get('wgUserEditCount')>100&&
mw.config.get('wgUserEditCount') > 100 &&
mw.config.get('wgPageName') !== 'صفحهٔ_اصلی') {
mw.config.get('wgPageName') !== 'صفحهٔ_اصلی' &&
$('#mw-imagepage-nofile, #noarticletext').length === 0 &&
mw.config.get('wgNamespaceNumber') !== 6 &&
mw.config.get('wgNamespaceNumber') !== 8) {
$('#ca-abar-abzar').remove();
$('#ca-abar-abzar').remove();
if ($('#mw-imagepage-nofile, #noarticletext').length !== 0 ||
var interwikiFix = !$('#t-wikibase').length &&
mw.config.get('wgNamespaceNumber') === 6 ||
$('.interlanguage-link').length &&
mw.config.get('wgNamespaceNumber') === 8) {
$('.wbc-editpage').length;
return;
$(mw.util.addPortletLink(
}
'p-views', '#',
var interwikiFix = false;
interwikiFix ? 'ابرابزار+انتقال میان‌ویکی' : 'ابرابزار',
if (!$('#t-wikibase').length && $('.interlanguage-link').length && $('.wbc-editpage').length) {
'ca-abar-abzar',
interwikiFix = true;
interwikiFix ?
}
'ابزار پیشرفتهٔ ویرایش متن + ابزار انتقال خودکار میان‌ویکی سنتی به ویکی‌داده' :
$(mw.util.addPortletLink('p-cactions', '#', interwikiFix ? 'ابرابزار+انتقال میان‌ویکی' : 'ابرابزار', 'ca-abar-abzar', interwikiFix ? 'ابزار پیشرفتهٔ ویرایش متن + ابزار انتقال خودکار میان‌ویکی سنتی به ویکی‌داده' : 'ابزار پیشرفتهٔ ویرایش متن')).click(function (e) {
'ابزار پیشرفتهٔ ویرایش متن'
)).click(function (e) {
e.preventDefault();
e.preventDefault();
mw.loader.using('oojs-ui').then(function () {
Promise.all([
OO.ui.confirm('اجرای ابرابزار بر این صفحه؟ مسئولیت ویرایش ابرابزار با شما خواهد بود').then(function (confirmed) {
// افزودن میان‌ویکی سنتی به ویکی‌داده به صورت خودکار
if (!confirmed) return;
interwikiFix ?
$.get('//dexbot.toolforge.org/interwikidata.php', {
return loadPage(mw.config.get('wgPageName')).then(function (data) {
page: mw.config.get('wgPageName')
// افزودن میان‌ویکی سنتی به ویکی‌داده به صورت خودکار
}) : '',
if (interwikiFix) {
// اجرای کدهای ربات
$.get('//dexbot.toolforge.org/interwikidata.php', { page: mw.config.get('wgPageName') })
botworks.trigFillcat,
.then(function () {}, function () {});
botworks.trigMissedFileUpload,
}
botworks.trigMissedRef
// اجرای کدهای ربات
]).catch(function () {}).then(function () {
botworks.trigFillcat();
return loadPage(mw.config.get('wgPageName'));
botworks.trigMissedFileUpload();
}).then(function (content) {
botworks.trigMissedRef();
bringShowChanges(
}).then(function (text) {
mw.config.get('wgPageName'),
return goToEdit();
persianWikiTools.superTool(content),
})
'ابرابزار'
});
);
});
});
});
});
}
}


//
// ابزار در حالت ویرایش
// ابزار در حالت ویرایش
//
function insertTags(pre, post, peri) {
if ($('#wpTextbox1').length) {
$('#wpTextbox1').textSelection(
'encapsulateSelection', { pre: pre, peri: peri, post: post }
);
}
}
/**
/**
* Adds edit summary
* Adds edit summary
*/
*/
function addEditSummary(summaryText, replaceSummary) {
function addEditSummary(summaryText, replaceSummary) {
                if (mw.util.getParamValue("section")==='new'){
return;
}
if (summaryText === '') {
return;
}
var summary = $('input#wpSummary, #wpSummary > input'),
var summary = $('input#wpSummary, #wpSummary > input'),
summaryPrefix = '',
summaryPrefix = '',
pos;
pos;
if (summary.length === 0) {
if (mw.util.getParamValue('section') === 'new' ||
summaryText === '' || summary.length === 0) {
return;
return;
}
}
if (summary.val().indexOf('*/ ') > -1) {
if (summary.val().includes('*/ ')) {
pos = summary.val().indexOf('*/ ');
pos = summary.val().indexOf('*/ ');
summaryPrefix = summary.val().substr(0, pos + 3);
summaryPrefix = summary.val().substr(0, pos + 3);
خط ۱۲۲: خط ۱۴۰:
summary.val(summary.val() + summaryText);
summary.val(summary.val() + summaryText);
} else {
} else {
if (summary.val().indexOf(summaryText) === -1) { // do not repeat in edit summary
if (!summary.val().includes(summaryText)) { // do not repeat in edit summary
summary.val(summary.val() + '، ' + summaryText);
summary.val(summary.val() + '، ' + summaryText);
}
}
خط ۱۹۵: خط ۲۱۳:
}
}
}
}
}
/*
* اجازه می‌دهد که برخی کاربران از دسترسی به ابرابزار محروم شوند
*/
function superToolAllowed() {
return $.inArray(
mw.config.get('wgUserId'),
[
707839 // Viera iran
]
) == -1;
}
}


خط ۳۲۴: خط ۳۳۰:
tools.superTool = buttonGenerator(
tools.superTool = buttonGenerator(
function () {
function () {
if ( superToolAllowed() ) {
applyOnSelection(persianWikiTools.superTool);
applyOnSelection(persianWikiTools.superTool);
} else {
mw.notify('شما اجازهٔ استفاده از ابرابزار را ندارید!');
}
},
},
'ابرابزار',
'ابرابزار',
خط ۳۳۸: خط ۳۴۰:
);
);


/* ابزار املا */
/* ابزار املا  
tools.dictation = buttonGenerator(
tools.dictation = buttonGenerator(
function () {
function () {
خط ۳۵۰: خط ۳۵۲:
'dictation'
'dictation'
);
);
 
*/
/* ابرابزار مخصوص صفحه انتقال */
/* ابرابزار مخصوص صفحه انتقال */
tools.superToolMove = buttonGenerator(
tools.superToolMove = buttonGenerator(
خط ۳۷۸: خط ۳۸۰:


// Buttons that add tags
// Buttons that add tags
/* برچسب ویکی\u200cسازی *//*
/* برچسب ویکی\u200cسازی  
tools.wikify = buttonGenerator(
tools.wikify = buttonGenerator(
function () {
function () {
خط ۳۹۰: خط ۳۹۲:
'wikify'
'wikify'
);
);
 
*/
/* بدون منبع *//*
/* بدون منبع  
tools.noSource = buttonGenerator(
tools.noSource = buttonGenerator(
function () {
function () {
خط ۴۰۳: خط ۴۰۵:
'no-source'
'no-source'
);
);
 
*/
/* حذف سریع *//*
/* حذف سریع  
tools.speedyDel = buttonGenerator(
tools.speedyDel = buttonGenerator(
function () {
function () {
خط ۴۱۸: خط ۴۲۰:
'delete-vote'
'delete-vote'
);
);
 
*/
/* حذف زماندار *//*
/* حذف زماندار  
tools.prod = buttonGenerator(
tools.prod = buttonGenerator(
function () {
function () {
خط ۴۳۳: خط ۴۳۵:
'attendre'
'attendre'
);
);
 
*/
/* منبع تصویر نامعلوم *//*
/* منبع تصویر نامعلوم  
tools.picSource = buttonGenerator(
tools.picSource = buttonGenerator(
function () {
function () {
خط ۴۴۶: خط ۴۴۸:
'image-source'
'image-source'
);
);
 
*/
/* حق تکثیر تصویر نامعلوم *//*
/* حق تکثیر تصویر نامعلوم  
tools.picCopy = buttonGenerator(
tools.picCopy = buttonGenerator(
function () {
function () {
خط ۴۵۹: خط ۴۶۱:
'image-copyright'
'image-copyright'
);
);
 
*/
/* تمیزکاری *//*
/* تمیزکاری  
tools.cleanup = buttonGenerator(
tools.cleanup = buttonGenerator(
function () {
function () {
خط ۴۷۳: خط ۴۷۵:
);
);
*/
*/
/* اخطار نگاره *//*
/* اخطار نگاره  
tools.imgWarn = buttonGenerator(
tools.imgWarn = buttonGenerator(
function () {
function () {
خط ۴۹۱: خط ۴۹۳:
);
);
*/
*/
/* حق تکثیر مشکوک *//*
/* حق تکثیر مشکوک  
tools.sus = buttonGenerator(
tools.sus = buttonGenerator(
function () {
function () {
خط ۵۰۴: خط ۵۰۶:
);
);
*/
*/
/* نقض حق تکثیر *//*
/* نقض حق تکثیر  
tools.copyR = buttonGenerator(
tools.copyR = buttonGenerator(
function () {
function () {
خط ۵۲۲: خط ۵۲۴:
);
);
*/
*/
/* لحن نامناسب */
/* لحن نامناسب  
/*tools.tone = buttonGenerator(
tools.tone = buttonGenerator(
function () {
function () {
$('#wpTextbox1').val('{' + '{لحن نامناسب}}\n' + $('#wpTextbox1').val());
$('#wpTextbox1').val('{' + '{لحن نامناسب}}\n' + $('#wpTextbox1').val());
خط ۵۵۱: خط ۵۵۳:
'toggle-dir'
'toggle-dir'
);
);
tools.putSelectionInBDI = buttonGenerator(
function () {
applyOnSelection(persianWikiTools.putSelectionInBDI);
},
'جداسازی دوجهته',
false,
'//upload.wikimedia.org/wikipedia/commons/3/31/Button_bdi_tag.png',
'جداسازی دوجهته',
'دوجهته',
'put-in-bdi'
);


/* پیوند درونی */
/* پیوند درونی */
خط ۵۹۱: خط ۶۰۷:
);
);


/* ملزومات مقاله *//*
/* ملزومات مقاله  
tools.addEssentialThings = buttonGenerator(
tools.addEssentialThings = buttonGenerator(
function () {
function () {
خط ۶۰۲: خط ۶۱۸:
'ملزومات مقاله',
'ملزومات مقاله',
'add-note'
'add-note'
);
);*/
/* خوشامدید *//*
/* خوشامدید  
tools.welcome = buttonGenerator(
tools.welcome = buttonGenerator(
function () {
function () {
خط ۶۱۸: خط ۶۳۴:
'خوشامد',
'خوشامد',
'alien-cool'
'alien-cool'
);
);*/
/* چپچین */
/* چپچین */
tools.chapChin = buttonGenerator(
tools.chapChin = buttonGenerator(
خط ۶۳۶: خط ۶۵۲:
);
);


/* اندیس بالا */
/* اندیس بالا  
tools.upperText = buttonGenerator(
tools.upperText = buttonGenerator(
function () {
function () {
خط ۶۴۸: خط ۶۶۴:
'upper-letter'
'upper-letter'
);
);
 
*/
/* اندیس پایین */
/* اندیس پایین  
tools.lowerText = buttonGenerator(
tools.lowerText = buttonGenerator(
function () {
function () {
خط ۶۶۱: خط ۶۷۷:
'lower-letter'
'lower-letter'
);
);
 
*/
/* تغییرمسیر */
/* تغییرمسیر  
tools.redirectButton = buttonGenerator(
tools.redirectButton = buttonGenerator(
function () {
function () {
خط ۶۷۹: خط ۶۹۵:
'redirect'
'redirect'
);
);
 
*/
/* سال میلادی */
/* سال میلادی */
tools.gregYear = buttonGenerator(
tools.gregYear = buttonGenerator(
خط ۷۰۰: خط ۷۱۶:
tools.sortText = buttonGenerator(
tools.sortText = buttonGenerator(
function () {
function () {
applyOnSelection(persianTools.persianSortText);
applyOnSelection(function (text) {
return persianTools.persianSort(text.split('\n')).join('\n');
});
},
},
'',
'',
خط ۷۱۰: خط ۷۲۸:
);
);


/* شد! */
/* شد!  
tools.shod = buttonGenerator(
tools.shod = buttonGenerator(
function () {
function () {
خط ۷۲۱: خط ۷۳۹:
'شد',
'شد',
'check'
'check'
);
);*/
  /* عدد انگلیسی */
/* عدد انگلیسی */
tools.toEnNumRobust = buttonGenerator(
tools.toEnNumRobust = buttonGenerator(
function () {
function () {
خط ۷۳۴: خط ۷۵۲:
'ToEnNumberRobust'
'ToEnNumberRobust'
);
);
/* حذف ویکی‌سازی */
/* حذف ویکی‌سازی  
tools.removeWiki = buttonGenerator(
tools.removeWiki = buttonGenerator(
function () {
function () {
خط ۷۴۵: خط ۷۶۳:
'حذف ویکی‌سازی',
'حذف ویکی‌سازی',
'removeWiki'
'removeWiki'
);
);*/
$(function () {
$(function () {
if (typeof Array.prototype.includes !== 'function') {
mw.log.error('Script not supported by browser.');
return;
}
// کد مناسب ویرایشگر جدید متنی
// کد مناسب ویرایشگر جدید متنی
/*mw.hook('ve.activationComplete').add(function () {
/*mw.hook('ve.activationComplete').add(function () {
خط ۷۵۵: خط ۷۷۷:
x.innerText = persianWikiTools.superTool(x.innerText);
x.innerText = persianWikiTools.superTool(x.innerText);
});
});
            }));
}));
}
}
});*/
});*/
خط ۷۶۳: خط ۷۸۵:
space = ' ';
space = ' ';


extraEditButtons = extraEditButtons.concat(tools.toggleDirection, space, tools.ykArabic, tools.zwnj, tools.applyOrthography,
extraEditButtons = extraEditButtons.concat(tools.toggleDirection, tools.putSelectionInBDI, space, tools.ykArabic, tools.zwnj, tools.applyOrthography,
tools.dig, tools.punc, tools.dictation, tools.superTool, space, tools.urlFix, tools.fixBadLinks, space, tools.welcome,
tools.dig, tools.punc, tools.dictation, tools.superTool, space, tools.urlFix, tools.fixBadLinks, space, tools.welcome,
tools.addEssentialThings, tools.noSource, tools.sus, tools.tone, tools.wikify,
tools.addEssentialThings, tools.noSource, tools.sus, tools.tone, tools.wikify,
tools.shod, tools.cleanup, tools.speedyDel, tools.prod, space, tools.redirectButton,
tools.shod, tools.cleanup, tools.speedyDel, tools.prod, space, tools.redirectButton,
tools.gregYear, tools.strikeTextButton, tools.chapChin, tools.commentButton, space, tools.sortText, space, tools.picCopy, tools.picSource, space, tools.toEnNumRobust);
tools.gregYear, tools.strikeTextButton, tools.chapChin, tools.commentButton, space, tools.sortText, space, tools.picCopy, tools.picSource, space, tools.toEnNumRobust);
        // شرط برای کاربری که گشت خودکار دارد
var userGroups = mw.config.get('wgUserGroups', []);
        // ابزار حذف الگوهای ناموجود
// شرط برای کاربری که گشت خودکار دارد
if ((mw.config.get('wgUserGroups').indexOf('autopatrolled') > -1 ||mw.config.get('wgUserGroups').indexOf('eliminator') > -1 ||mw.config.get('wgUserGroups').indexOf('sysop') > -1)) {
// ابزار حذف الگوهای ناموجود
        extraEditButtons = extraEditButtons.concat(tools.removeWiki);
if (userGroups.includes('autopatrolled') ||
        };
userGroups.includes('eliminator') ||
userGroups.includes('sysop')) {
extraEditButtons = extraEditButtons.concat(tools.removeWiki);
}
extraEditButtons = extraEditButtons.concat(space).concat(window.userCustomEditButtons || []);
extraEditButtons = extraEditButtons.concat(space).concat(window.userCustomEditButtons || []);


خط ۷۷۹: خط ۸۰۴:


$('#persian-wiki-tools').remove();
$('#persian-wiki-tools').remove();
if ($('#wpTextbox1').length !== 0) {
if ($('#wpTextbox1').length) {
$('<div>', {
$('<div>', {
id: 'persian-wiki-tools',
id: 'persian-wiki-tools',
خط ۷۸۵: خط ۸۱۰:
style: 'float:right;'
style: 'float:right;'
}).append(extraEditButtons).insertBefore('#wpTextbox1');
}).append(extraEditButtons).insertBefore('#wpTextbox1');
}
} else if ($('#movepage').length) {
if ($('#movepage').length !== 0) {
$('<span>', {
$('<span>', {
id: 'persian-wiki-tools'
id: 'persian-wiki-tools'

نسخهٔ ‏۱۶ اوت ۲۰۲۲، ساعت ۱۴:۱۶

// <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 ?
				'ابزار پیشرفتهٔ ویرایش متن + ابزار انتقال خودکار میان‌ویکی سنتی به ویکی‌داده' :
				'ابزار پیشرفتهٔ ویرایش متن'
		)).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 buttonGenerator(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 = buttonGenerator(
		function () {
			applyOnSelection(persianTools.toStandardPersianCharacters);
		},
		'اصلاح نویسه\u200cهای عربی',
		false,
		'//upload.wikimedia.org/wikipedia/commons/8/88/Button_YehKeh.png',
		'اصلاح ی و ک',
		'ی و ک',
		'YehKeh'
	);

	/* فاصلهٔ مجازی */
	tools.zwnj = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.wikiApplyZwnj);
		},
		'اصلاح فاصلهٔ مجازی',
		false,
		'//upload.wikimedia.org/wikipedia/fa/d/d0/Button_ZWNJ.png',
		'فاصلهٔ مجازی',
		'فاصلهٔ مجازی',
		'ZWNJ'
	);

	/* اصلاح نویسه\u200cها و حالت\u200cهای غیراستاندارد */
	tools.applyOrthography = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.wikiApplyOrthography);
		},
		'اصلاح نویسه',
		false,
		'//upload.wikimedia.org/wikipedia/fa/9/94/Button_non_standard.png',
		'اصلاح نویسه\u200cها و حالت\u200cهای غیراستاندارد',
		'اصلاح نویسه\u200cها و حالت\u200cهای غیراستاندارد',
		'apply-orthography'
	);

	/* اصلاح ارقام */
	tools.dig = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.wikiTextDigitsToPersian);
		},
		'اصلاح ارقام',
		false,
		'//upload.wikimedia.org/wikipedia/fa/4/4a/Button_numbers.png',
		'اصلاح ارقام',
		'ارقام',
		'numbers'
	);

	/* اصلاح ارقام مخصوص صفحه انتقال */
	tools.digMove = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.wikiConvertToPersianCharacters);
		},
		'اصلاح ارقام',
		false,
		'//upload.wikimedia.org/wikipedia/fa/4/4a/Button_numbers.png',
		'اصلاح ارقام',
		'ارقام',
		'numbers'
	);
	
	//عدم تغییر در متن بحث‌ها، سیاست‌ها در فضاهای نام دیگر
	if (mw.config.get('wgNamespaceNumber') === 0) {
		/* برداشتن پیوند تاریخ‌ها */
		tools.fixBadLinks = buttonGenerator(
			function () {
				applyOnSelection(persianWikiTools.fixBadLinks);
			},
			'[[وپ:پیوند سال|حذف پیوند تاریخ‌ها]]',
			false,
			'//upload.wikimedia.org/wikipedia/commons/1/11/Btn_toolbar_link_remove.png',
			'حذف پیوند تاریخ‌ها',
			'پیوند تاریخ‌ها',
			'datelinks'
		);
	}

	/* یونیکد نشانی وب */
	tools.urlFix = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.wikiUrlMinifier);
		},
		'اصلاح نشانی وب',
		false,
		'//upload.wikimedia.org/wikipedia/fa/b/ba/Button_decode_URI.png',
		'یونی\u200cکدسازی نشانی\u200cها',
		'یونی\u200cکدسازی',
		'decode-URI'
	);

	/* اصلاح علامت @ */
	tools.atSignFix = buttonGenerator(
		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 = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.superTool);
		},
		'ابرابزار',
		false,
		'//upload.wikimedia.org/wikipedia/fa/f/fc/Button_super_tool.png',
		'ابرابزار',
		'ابرابزار',
		'super-tool'
	);

	/* ابزار املا 
	tools.dictation = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.wikiDictation);
		},
		'اصلاح املا',
		false,
		'//upload.wikimedia.org/wikipedia/commons/a/a3/Button_Dictation-fa.png',
		'املا',
		'املا',
		'dictation'
	);
*/
	/* ابرابزار مخصوص صفحه انتقال */
	tools.superToolMove = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.superToolMove);
		},
		'ابرابزار',
		false,
		'//upload.wikimedia.org/wikipedia/fa/f/fc/Button_super_tool.png',
		'ابرابزار',
		'ابرابزار',
		'super-tool'
	);

	/* اصلاحات قراردادن نقطه */
	tools.punc = buttonGenerator(
		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 = buttonGenerator(
		function () {
			$('#wpTextbox1').val('{' + '{ویکی\u200cسازی}}\n' + $('#wpTextbox1').val());
		},
		'برچسب ویکی\u200cسازی',
		false,
		'//upload.wikimedia.org/wikipedia/fa/3/38/Button_wikify.png',
		'برچسب ویکی\u200cسازی',
		'ویکی\u200cسازی',
		'wikify'
	);
*/
	/* بدون منبع 
	tools.noSource = buttonGenerator(
		function () {
			$('#wpTextbox1').val('{' + '{بدون منبع}}\n' + $('#wpTextbox1').val());
		},
		'برچسب منبع',
		false,
		'//upload.wikimedia.org/wikipedia/fa/8/8a/Button_no_source_fa.png',
		'برچسب بدون منبع',
		'بدون منبع',
		'no-source'
	);
*/
	/* حذف سریع 
	tools.speedyDel = buttonGenerator(
		function () {
			var temp = $('#wpTextbox1').val();
			$('#wpTextbox1').val('');
			insertTags('{' + '{' + 'حذف سریع|', '}}\n' + temp, 'معیار');
		},
		'حذف سریع',
		true,
		'//upload.wikimedia.org/wikipedia/commons/1/13/Button_delete.png',
		'برچسب حذف سریع',
		'حذف سریع',
		'delete-vote'
	);
*/
	/* حذف زماندار 
	tools.prod = buttonGenerator(
		function () {
			var temp = $('#wpTextbox1').val();
			$('#wpTextbox1').val('');
			insertTags('{' + '{' + 'جا:حذف زمان\u200cدار|', '}}\n' + temp, 'معیار');
		},
		'حذف زمان\u200cدار',
		true,
		'//upload.wikimedia.org/wikipedia/commons/3/3f/Button_attendre.png',
		'برچسب حذف زمان\u200cدار',
		'حذف زمان\u200cدار',
		'attendre'
	);
*/
	/* منبع تصویر نامعلوم 
	tools.picSource = buttonGenerator(
		function () {
			$('#wpTextbox1').val('{' + '{' + 'جا:منبع تصویر نامعلوم' + '}}\n' + $('#wpTextbox1').val());
		},
		'برچسب منبع',
		false,
		'//upload.wikimedia.org/wikipedia/fa/5/59/Button_image_source.png',
		'برچسب منبع تصویر نامعلوم',
		'منبع تصویر نامعلوم',
		'image-source'
	);
*/
	/* حق تکثیر تصویر نامعلوم 
	tools.picCopy = buttonGenerator(
		function () {
			$('#wpTextbox1').val('{' + '{' + 'جا:حق تکثیر تصویر نامعلوم}}\n' + $('#wpTextbox1').val());
		},
		'برچسب حق تکثیر',
		false,
		'//upload.wikimedia.org/wikipedia/fa/7/7e/Button_image_copyright.png',
		'برچسب حق تکثیر تصویر نامعلوم',
		'حق تکثیر تصویر نامعلوم',
		'image-copyright'
	);
*/
	/* تمیزکاری 
	tools.cleanup = buttonGenerator(
		function () {
			$('#wpTextbox1').val('{' + '{تمیزکاری}}\n' + $('#wpTextbox1').val());
		},
		'برچسب تمیزکاری',
		false,
		'//upload.wikimedia.org/wikipedia/commons/2/2e/Button_broom.png',
		'برچسب تمیزکاری',
		'تمیزکاری',
		'broom'
	);
*/
	/* اخطار نگاره 
	tools.imgWarn = buttonGenerator(
		function () {
			$('#wpTextbox1').val('');
			insertTags(
				'{' + '{' + 'جا:اخطار نگاره|',
				'}}',
				'نگاره'
			);
		},
		'برچسب نگاره',
		false,
		'//upload.wikimedia.org/wikipedia/commons/e/ec/Button_aviso.png',
		'اخطار نگاره',
		'اخطار نگاره',
		'aviso'
	);
*/
	/* حق تکثیر مشکوک 
	tools.sus = buttonGenerator(
		function () {
			$('#wpTextbox1').val('{' + '{حق تکثیر مشکوک}}\n' + $('#wpTextbox1').val());
		},
		'برچسب حق تکثیر',
		false,
		'//upload.wikimedia.org/wikipedia/fa/c/c7/Button_Sus.png',
		'برچسب حق تکثیر مشکوک',
		'حق تکثیر مشکوک',
		'sus'
	);
*/
	/* نقض حق تکثیر 
	tools.copyR = buttonGenerator(
		function () {
			$('#wpTextbox1').val('');
			insertTags(
				'{' + '{' + 'جا:نقض حق تکثیر|url=',
				'}}',
				'نشانی ایرنتنتی'
			);
		},
		'برچسب حق تکثیر',
		false,
		'//upload.wikimedia.org/wikipedia/fa/6/6f/Button_CopyR.png',
		'برچسب نقض حق تکثیر',
		'نقض حق تکثیر',
		'copyr'
	);
*/
	/* لحن نامناسب 
	tools.tone = buttonGenerator(
		function () {
			$('#wpTextbox1').val('{' + '{لحن نامناسب}}\n' + $('#wpTextbox1').val());
		},
		'برچسب لحن',
		false,
		'//upload.wikimedia.org/wikipedia/fa/f/fc/Button_Tone.png',
		'برچسب لحن نامناسب',
		'لحن',
		'tone'
	);
*/
	// Buttons that help with wiki writing
	/* تغییر جهت */
	tools.toggleDirection = buttonGenerator(
		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 = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.putSelectionInBDI);
		},
		'جداسازی دوجهته',
		false,
		'//upload.wikimedia.org/wikipedia/commons/3/31/Button_bdi_tag.png',
		'جداسازی دوجهته',
		'دوجهته',
		'put-in-bdi'
	);
	
	

	/* پیوند درونی */
	tools.wikiLink = buttonGenerator(
		function () {
			insertTags('[[', ']]', 'مقاله');
		},
		'',
		true,
		'//upload.wikimedia.org/wikipedia/fa/d/d0/Button_in_wikify.png',
		'پیوند',
		'پیوند',
		'wikify'
	);

	/* متن خطخورده */
	tools.strikeTextButton = buttonGenerator(
		function () {
			insertTags('<s>', '</s>', 'متن خط خورده');
		},
		'',
		true,
		'//upload.wikimedia.org/wikipedia/commons/c/c9/Button_strike.png',
		'متن خط\u200cخورده',
		'متن خط\u200cخورده',
		'strike'
	);

	/* توضیح */
	tools.commentButton = buttonGenerator(
		function () {
			insertTags('<!--', '-->', 'توضیح');
		},
		'',
		true,
		'//upload.wikimedia.org/wikipedia/commons/3/34/Button_hide_comment.png',
		'توضیح',
		'توضیح',
		'hide-comment'
	);

	/* ملزومات مقاله 
	tools.addEssentialThings = buttonGenerator(
		function () {
			insertTags('== جستارهای وابسته ==\n\n== منابع ==\n{' + '{پانویس}}', '', '');
		},
		'',
		true,
		'//upload.wikimedia.org/wikipedia/commons/e/ef/Add_note.jpg',
		'ملزومات مقاله',
		'ملزومات مقاله',
		'add-note'
	);*/
	/* خوشامدید 
	tools.welcome = buttonGenerator(
		function () {
			insertTags(
				'{' + '{' + 'جا:خوشامد|~~' + '~~}}',
				'',
				''
			);
		},
		'خوشامدگویی',
		true,
		'//upload.wikimedia.org/wikipedia/commons/4/4a/Smilies_Alien_cool.png',
		'خوشامدگویی',
		'خوشامد',
		'alien-cool'
	);*/
	/* چپچین */
	tools.chapChin = buttonGenerator(
		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 = buttonGenerator(
		function () {
			insertTags('<sup>', '</sup>', 'اندیس');
		},
		'',
		true,
		'//upload.wikimedia.org/wikipedia/commons/6/6a/Button_sup_letter.png',
		'اندیس بالا',
		'اندیس بالا',
		'upper-letter'
	);
*/
	/* اندیس پایین 
	tools.lowerText = buttonGenerator(
		function () {
			insertTags('<sub>', '</sub>', 'اندیس');
		},
		'',
		true,
		'//upload.wikimedia.org/wikipedia/commons/a/aa/Button_sub_letter.png',
		'اندیس پایین',
		'اندیس پایین',
		'lower-letter'
	);
*/
	/* تغییرمسیر 
	tools.redirectButton = buttonGenerator(
		function () {
			$('#wpTextbox1').val('');
			insertTags(
				'#تغییرمسیر [[',
				']]',
				'پیوند'
			);
		},
		'',
		true,
		'//upload.wikimedia.org/wikipedia/commons/c/c8/Button_redirect.png',
		'تغییرمسیر',
		'تغییرمسیر',
		'redirect'
	);
*/
	/* سال میلادی */
	tools.gregYear = buttonGenerator(
		function () {
			insertTags(
				'[[',
				' (میلادی)|]]',
				'سال'
			);
		},
		'',
		true,
		'//upload.wikimedia.org/wikipedia/fa/a/a7/Button_cal.png',
		'سال میلادی',
		'میلادی',
		'cal'
	);

	/* مرتبسازی */
	tools.sortText = buttonGenerator(
		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 = buttonGenerator(
		function () {
			$('#wpTextbox1').val($('#wpTextbox1').val().trimRight() + '\n:{' + '{شد}} ~~' + '~~');
		},
		'شد',
		true,
		'//upload.wikimedia.org/wikipedia/commons/5/5b/Button_check.png',
		'شد',
		'شد',
		'check'
	);*/
	/* عدد انگلیسی */
	tools.toEnNumRobust = buttonGenerator(
		function () {
			applyOnSelection(persianWikiTools.robustToEnglishDigits);
		},
		'عدد انگلیسی',
		false,
		'//upload.wikimedia.org/wikipedia/commons/f/f5/Button_enNum.png',
		'عدد انگلیسی',
		'عدد انگلیسی',
		'ToEnNumberRobust'
	);
	/* حذف ویکی‌سازی 
	tools.removeWiki = buttonGenerator(
		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, tools.superTool, space, tools.urlFix, tools.fixBadLinks, space, tools.welcome,
			tools.addEssentialThings, tools.noSource, tools.sus, tools.tone, tools.wikify,
			tools.shod, tools.cleanup, tools.speedyDel, tools.prod, space, tools.redirectButton,
			tools.gregYear, tools.strikeTextButton, tools.chapChin, tools.commentButton, space, tools.sortText, space, tools.picCopy, tools.picSource, 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));