مدیاویکی:Common.js: تفاوت میان نسخهها
بدون خلاصۀ ویرایش |
بدون خلاصۀ ویرایش |
||
| (۱۰ نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد) | |||
| خط ۳: | خط ۳: | ||
/* ========================================================= | /* ========================================================= | ||
سیستم تستهای تعاملی ویکیداد | سیستم تستهای تعاملی ویکیداد | ||
نسخه مرکزی — هماهنگ با Master ماده ۱۵ | |||
========================================================= */ | |||
'use strict'; | |||
/* ========================================================= | |||
ابزارهای کمکی | |||
========================================================= */ | |||
function getTestOptions(test) { | |||
return test.find('.wd-test-option').filter(function () { | |||
return $(this).closest('.wd-test')[0] === test[0]; | |||
}); | |||
} | |||
function getTestResult(test) { | |||
return test.find('.wd-test-result').filter(function () { | |||
return $(this).closest('.wd-test')[0] === test[0]; | |||
}).first(); | |||
} | |||
function getTestAnswer(test) { | |||
return test.find('.wd-test-answer').filter(function () { | |||
return $(this).closest('.wd-test')[0] === test[0]; | |||
}).first(); | |||
} | |||
function normalizeAnswer(value) { | |||
value = $.trim(value || ''); | |||
/* | |||
* پاسخ میتواند مستقیماً «الف» باشد | |||
* یا در بعضی شرایط با فاصله/نشانه همراه باشد. | |||
*/ | |||
var match = value.match( | |||
/^(الف|ب|ج|د|ه|هـ|و)/ | |||
); | |||
if (match) { | |||
return match[1]; | |||
} | |||
return value.charAt(0); | |||
} | |||
/* ========================================================= | |||
آمادهسازی تستها | |||
========================================================= */ | ========================================================= */ | ||
| خط ۱۶: | خط ۸۲: | ||
test.addClass('wd-test-ready'); | test.addClass('wd-test-ready'); | ||
var options = getTestOptions(test); | |||
/* | |||
* اگر تست قبلاً پاسخ داده شده باشد، | |||
* وضعیت را حفظ میکنیم. | |||
*/ | |||
if (test.hasClass('wd-test-finished')) { | |||
options.prop('disabled', true); | |||
return; | |||
} | |||
/* | /* | ||
* | * طراحی پایه گزینهها | ||
* | |||
* رنگها مطابق طراحی ماده ۱۵ | |||
*/ | */ | ||
options.css({ | |||
'display': 'block', | 'display': 'block', | ||
'padding': ' | 'width': '100%', | ||
'box-sizing': 'border-box', | |||
'padding': '10px 13px', | |||
'margin': '7px 0', | 'margin': '7px 0', | ||
'border': '1px solid # | 'border': '1px solid #d9dfdc', | ||
'border-radius': ' | 'border-radius': '6px', | ||
'background': '# | 'background': '#ffffff', | ||
'color': '#455a64', | |||
'cursor': 'pointer', | 'cursor': 'pointer', | ||
' | 'font-family': 'inherit', | ||
'line-height': '1.9' | 'font-size': '13.5px', | ||
'line-height': '1.9', | |||
'text-align': 'right', | |||
'direction': 'rtl', | |||
'transition': | |||
'background .15s ease, border-color .15s ease, color .15s ease, box-shadow .15s ease' | |||
}); | }); | ||
/* | /* | ||
* | * نتیجه در شروع مخفی باشد. | ||
*/ | */ | ||
var result = getTestResult(test); | |||
'display': 'none' | |||
result.css({ | |||
'display': 'none', | |||
'visibility': 'hidden', | |||
'opacity': '0' | |||
}); | }); | ||
'display': 'none' | /* | ||
* پاسخ و تحلیل در شروع مخفی باشد. | |||
*/ | |||
var answer = getTestAnswer(test); | |||
answer.css({ | |||
'display': 'none', | |||
'visibility': 'hidden', | |||
'opacity': '0' | |||
}); | }); | ||
| خط ۴۸: | خط ۱۶۰: | ||
/* | /* ========================================================= | ||
اجرای آمادهسازی | |||
========================================================= */ | |||
$(document).ready(function () { | $(document).ready(function () { | ||
initWikidadTests(); | initWikidadTests(); | ||
}); | }); | ||
/* | /* ========================================================= | ||
افکت ساده هنگام قرار گرفتن موس روی گزینه | |||
========================================================= */ | |||
$(document).on( | |||
'mouseenter', | |||
'.wd-test:not(.wd-test-finished) .wd-test-option', | |||
function () { | |||
var option = $(this); | |||
if (option.prop('disabled')) { | |||
return; | |||
} | |||
option.css({ | |||
'background': '#faf8fc', | |||
'border-color': '#cfc4d9', | |||
'box-shadow': '0 1px 3px rgba(80,60,90,.06)' | |||
}); | |||
} | |||
); | |||
$(document).on( | |||
'mouseleave', | |||
'.wd-test:not(.wd-test-finished) .wd-test-option', | |||
function () { | |||
var option = $(this); | |||
if (option.prop('disabled')) { | |||
return; | |||
} | |||
option.css({ | |||
'background': '#ffffff', | |||
'border-color': '#d9dfdc', | |||
'box-shadow': 'none' | |||
}); | |||
} | |||
); | |||
/* ========================================================= | |||
کلیک روی گزینه | |||
========================================================= */ | |||
$(document).on( | $(document).on( | ||
'click', | 'click', | ||
'.wd-test- | '.wd-test-option', | ||
function (event) { | function (event) { | ||
event.preventDefault(); | event.preventDefault(); | ||
event.stopPropagation(); | |||
var option = $(this); | var option = $(this); | ||
var test = option.closest('.wd-test'); | var test = option.closest('.wd-test'); | ||
/* | /* | ||
* | * تست معتبر نیست. | ||
*/ | */ | ||
if (!test.length) { | if (!test.length) { | ||
return; | return; | ||
} | } | ||
/* | /* | ||
* اگر | * اگر قبلاً پاسخ داده شده، | ||
* دیگر امکان تغییر پاسخ وجود ندارد. | |||
*/ | */ | ||
if (test.hasClass('wd-test-finished')) { | if (test.hasClass('wd-test-finished')) { | ||
| خط ۸۹: | خط ۲۵۷: | ||
/* | /* | ||
* | * جلوگیری از چندبار کلیک سریع | ||
*/ | */ | ||
if (option.prop('disabled')) { | |||
return; | |||
} | |||
/* | /* | ||
* | * گزینههای همین تست | ||
*/ | */ | ||
var | var options = getTestOptions(test); | ||
/* | /* | ||
* | * پاسخ صحیح از data-answer الگوی تست | ||
*/ | */ | ||
var | var correctAnswer = normalizeAnswer( | ||
test.attr('data-answer') || '' | |||
); | ); | ||
/* | /* | ||
* | * اگر data-answer خالی بود، | ||
* از data-correct خود گزینهها استفاده میکنیم. | |||
* | |||
* این fallback باعث میشود ساختار جدید | |||
* Python نیز مستقیماً قابل استفاده باشد. | |||
*/ | */ | ||
if (!correctAnswer) { | |||
var optionContainer = | |||
option.closest('.wd-test-options'); | |||
correctAnswer = normalizeAnswer( | |||
optionContainer.attr('data-correct') || '' | |||
); | |||
} | |||
/* | /* | ||
* | * پاسخ انتخابشده | ||
*/ | */ | ||
var | var selectedAnswer = normalizeAnswer( | ||
option.attr('data-option') || '' | |||
); | |||
/* | /* | ||
* | * اگر data-option وجود نداشت، | ||
* از متن گزینه استخراج شود. | |||
*/ | */ | ||
if (!selectedAnswer) { | |||
selectedAnswer = normalizeAnswer( | |||
option.text() | |||
); | |||
} | |||
} | |||
/* | /* | ||
* | * تعیین درست / غلط | ||
*/ | */ | ||
var isCorrect = | var isCorrect = | ||
selectedAnswer === correctAnswer; | |||
/* | /* | ||
* | * نتیجه و پاسخ همین تست | ||
*/ | */ | ||
var result = | var result = getTestResult(test); | ||
var resultMessage = | var resultMessage = | ||
result.find('.wd-test-result-message').first(); | |||
var answer = getTestAnswer(test); | |||
/* ================================================= | |||
پاک کردن وضعیت قبلی گزینهها | |||
================================================= */ | |||
options.css({ | |||
'background': '#ffffff', | |||
'border-color': '#d9dfdc', | |||
'color': '#455a64', | |||
'font-weight': 'normal', | |||
'box-shadow': 'none' | |||
}); | |||
/* ================================================= | |||
مشخص کردن گزینه انتخابشده | |||
================================================= */ | |||
if (isCorrect) { | |||
option.css({ | |||
'background': '#edf8f5', | |||
'border-color': '#527d77', | |||
'color': '#405b56', | |||
'font-weight': 'bold', | |||
'box-shadow': '0 1px 3px rgba(82,125,119,.10)' | |||
}); | |||
} | |||
else { | |||
option.css({ | |||
'background': '#fff2f2', | |||
'border-color': '#b44a4a', | |||
'color': '#9b3838', | |||
'font-weight': 'bold', | |||
'box-shadow': '0 1px 3px rgba(180,74,74,.10)' | |||
}); | |||
/* | |||
* پاسخ صحیح را نیز پیدا و سبز میکنیم. | |||
*/ | |||
options.each(function () { | |||
var item = $(this); | |||
var itemAnswer = | |||
normalizeAnswer( | |||
item.attr('data-option') || '' | |||
); | |||
if (!itemAnswer) { | |||
itemAnswer = | |||
normalizeAnswer( | |||
item.text() | |||
); | |||
} | |||
if (itemAnswer === correctAnswer) { | |||
item.css({ | |||
'background': '#edf8f5', | |||
'border-color': '#527d77', | |||
'color': '#405b56', | |||
'font-weight': 'bold', | |||
'box-shadow': | |||
'0 1px 3px rgba(82,125,119,.10)' | |||
}); | |||
} | |||
}); | |||
} | |||
/* ================================================= | |||
نمایش پیام نتیجه | |||
================================================= */ | |||
result.css({ | result.css({ | ||
'display': 'block', | 'display': 'block', | ||
'visibility': 'visible', | 'visibility': 'visible', | ||
'opacity': '1' | 'opacity': '1', | ||
'padding': '10px 13px', | |||
'border-radius': '6px' | |||
}); | }); | ||
if (isCorrect) { | if (isCorrect) { | ||
result.css({ | |||
'background': '#edf8f5', | 'background': '#edf8f5', | ||
'border- | 'border-right': '3px solid #527d77' | ||
}); | }); | ||
resultMessage | resultMessage | ||
.text('✓ پاسخ شما صحیح است.') | .text('✓ پاسخ شما صحیح است.') | ||
.css({ | .css({ | ||
'display': 'block', | 'display': 'block', | ||
'visibility': 'visible', | 'visibility': 'visible', | ||
'opacity': '1', | 'opacity': '1', | ||
'color': '# | 'color': '#527d77', | ||
'font-weight': 'bold' | 'font-weight': 'bold' | ||
}); | }); | ||
} | } | ||
else { | |||
result.css({ | |||
'background': '#fff5f5', | |||
'border-right': '3px solid #b44a4a' | |||
}); | }); | ||
resultMessage | resultMessage | ||
.text('✕ پاسخ شما نادرست است.') | .text('✕ پاسخ شما نادرست است.') | ||
.css({ | .css({ | ||
'display': 'block', | 'display': 'block', | ||
'visibility': 'visible', | 'visibility': 'visible', | ||
| خط ۲۳۰: | خط ۴۸۳: | ||
'color': '#b44a4a', | 'color': '#b44a4a', | ||
'font-weight': 'bold' | 'font-weight': 'bold' | ||
}); | }); | ||
} | |||
/* ================================================= | |||
نمایش پاسخ صحیح و تحلیل | |||
================================================= */ | |||
if (answer.length) { | |||
answer.css({ | |||
'display': 'block', | |||
'visibility': 'visible', | |||
'opacity': '1' | |||
}); | |||
} | |||
/* ================================================= | |||
قفل کردن همه گزینههای همین تست | |||
================================================= */ | |||
options.prop('disabled', true); | |||
options.css({ | |||
'cursor': 'default' | |||
} | }); | ||
/* | /* | ||
* | * علامت پایان تست | ||
*/ | */ | ||
test. | test | ||
.addClass('wd-test-finished') | |||
.attr('data-answered', 'true'); | |||
/* | /* | ||
* | * ثبت وضعیت روی خود option container | ||
*/ | */ | ||
test. | test.find('.wd-test-options').first() | ||
.attr('data-answered', 'true'); | |||
} | } | ||
| خط ۳۲۹: | خط ۵۷۵: | ||
label.text('مشاهده متن'); | label.text('مشاهده متن'); | ||
} else { | } | ||
else { | |||
text.stop(true, true) | text.stop(true, true) | ||
| خط ۳۴۲: | خط ۵۹۰: | ||
} | } | ||
); | ); | ||
})(); | |||
/* ========================================================= | |||
WIKIDAD — Persian / Arabic / English digit normalization | |||
در جستجوی ویکیداد | |||
1 ↔ ١ ↔ ۱ | |||
========================================================= */ | |||
(function () { | |||
function toPersianDigits(value) { | |||
if (!value) { | |||
return value; | |||
} | |||
return value | |||
/* English digits → Persian */ | |||
.replace(/[0-9]/g, function (digit) { | |||
return '۰۱۲۳۴۵۶۷۸۹'[Number(digit)]; | |||
}) | |||
/* Arabic-Indic digits → Persian */ | |||
.replace(/[٠-٩]/g, function (digit) { | |||
return '۰۱۲۳۴۵۶۷۸۹'[digit.charCodeAt(0) - 0x0660]; | |||
}); | |||
} | |||
function normalizeSearchInput(input) { | |||
if (!input || typeof input.value !== 'string') { | |||
return; | |||
} | |||
var normalized = toPersianDigits(input.value); | |||
if (normalized !== input.value) { | |||
input.value = normalized; | |||
/* برای سیستمهای autocomplete */ | |||
input.dispatchEvent(new Event('input', { | |||
bubbles: true | |||
})); | |||
} | |||
} | |||
function attachSearchNormalization() { | |||
var inputs = document.querySelectorAll( | |||
'input[name="search"],' + | |||
'input[type="search"],' + | |||
'#searchInput,' + | |||
'#mw-searchInput' | |||
); | |||
inputs.forEach(function (input) { | |||
if (input.dataset.wikidadDigitNormalized === '1') { | |||
return; | |||
} | |||
input.dataset.wikidadDigitNormalized = '1'; | |||
/* هنگام تایپ یا Paste */ | |||
input.addEventListener('input', function () { | |||
normalizeSearchInput(input); | |||
}); | |||
/* قبل از ارسال فرم */ | |||
input.addEventListener('blur', function () { | |||
normalizeSearchInput(input); | |||
}); | |||
}); | |||
} | |||
/* بارگذاری اولیه */ | |||
attachSearchNormalization(); | |||
/* برای Vector 2022 که بعضی عناصر را بعداً میسازد */ | |||
document.addEventListener('focusin', function (event) { | |||
var input = event.target; | |||
if ( | |||
input && | |||
input.matches && | |||
input.matches( | |||
'input[name="search"],' + | |||
'input[type="search"],' + | |||
'#searchInput,' + | |||
'#mw-searchInput' | |||
) | |||
) { | |||
normalizeSearchInput(input); | |||
} | |||
}); | |||
})(); | })(); | ||
نسخهٔ کنونی تا ۲۴ سپتامبر ۲۰۲۶، ساعت ۰۳:۵۸
(function () {
/* =========================================================
سیستم تستهای تعاملی ویکیداد
نسخه مرکزی — هماهنگ با Master ماده ۱۵
========================================================= */
'use strict';
/* =========================================================
ابزارهای کمکی
========================================================= */
function getTestOptions(test) {
return test.find('.wd-test-option').filter(function () {
return $(this).closest('.wd-test')[0] === test[0];
});
}
function getTestResult(test) {
return test.find('.wd-test-result').filter(function () {
return $(this).closest('.wd-test')[0] === test[0];
}).first();
}
function getTestAnswer(test) {
return test.find('.wd-test-answer').filter(function () {
return $(this).closest('.wd-test')[0] === test[0];
}).first();
}
function normalizeAnswer(value) {
value = $.trim(value || '');
/*
* پاسخ میتواند مستقیماً «الف» باشد
* یا در بعضی شرایط با فاصله/نشانه همراه باشد.
*/
var match = value.match(
/^(الف|ب|ج|د|ه|هـ|و)/
);
if (match) {
return match[1];
}
return value.charAt(0);
}
/* =========================================================
آمادهسازی تستها
========================================================= */
function initWikidadTests() {
$('.wd-test').each(function () {
var test = $(this);
if (test.hasClass('wd-test-ready')) {
return;
}
test.addClass('wd-test-ready');
var options = getTestOptions(test);
/*
* اگر تست قبلاً پاسخ داده شده باشد،
* وضعیت را حفظ میکنیم.
*/
if (test.hasClass('wd-test-finished')) {
options.prop('disabled', true);
return;
}
/*
* طراحی پایه گزینهها
*
* رنگها مطابق طراحی ماده ۱۵
*/
options.css({
'display': 'block',
'width': '100%',
'box-sizing': 'border-box',
'padding': '10px 13px',
'margin': '7px 0',
'border': '1px solid #d9dfdc',
'border-radius': '6px',
'background': '#ffffff',
'color': '#455a64',
'cursor': 'pointer',
'font-family': 'inherit',
'font-size': '13.5px',
'line-height': '1.9',
'text-align': 'right',
'direction': 'rtl',
'transition':
'background .15s ease, border-color .15s ease, color .15s ease, box-shadow .15s ease'
});
/*
* نتیجه در شروع مخفی باشد.
*/
var result = getTestResult(test);
result.css({
'display': 'none',
'visibility': 'hidden',
'opacity': '0'
});
/*
* پاسخ و تحلیل در شروع مخفی باشد.
*/
var answer = getTestAnswer(test);
answer.css({
'display': 'none',
'visibility': 'hidden',
'opacity': '0'
});
});
}
/* =========================================================
اجرای آمادهسازی
========================================================= */
$(document).ready(function () {
initWikidadTests();
});
/* =========================================================
افکت ساده هنگام قرار گرفتن موس روی گزینه
========================================================= */
$(document).on(
'mouseenter',
'.wd-test:not(.wd-test-finished) .wd-test-option',
function () {
var option = $(this);
if (option.prop('disabled')) {
return;
}
option.css({
'background': '#faf8fc',
'border-color': '#cfc4d9',
'box-shadow': '0 1px 3px rgba(80,60,90,.06)'
});
}
);
$(document).on(
'mouseleave',
'.wd-test:not(.wd-test-finished) .wd-test-option',
function () {
var option = $(this);
if (option.prop('disabled')) {
return;
}
option.css({
'background': '#ffffff',
'border-color': '#d9dfdc',
'box-shadow': 'none'
});
}
);
/* =========================================================
کلیک روی گزینه
========================================================= */
$(document).on(
'click',
'.wd-test-option',
function (event) {
event.preventDefault();
event.stopPropagation();
var option = $(this);
var test = option.closest('.wd-test');
/*
* تست معتبر نیست.
*/
if (!test.length) {
return;
}
/*
* اگر قبلاً پاسخ داده شده،
* دیگر امکان تغییر پاسخ وجود ندارد.
*/
if (test.hasClass('wd-test-finished')) {
return;
}
/*
* جلوگیری از چندبار کلیک سریع
*/
if (option.prop('disabled')) {
return;
}
/*
* گزینههای همین تست
*/
var options = getTestOptions(test);
/*
* پاسخ صحیح از data-answer الگوی تست
*/
var correctAnswer = normalizeAnswer(
test.attr('data-answer') || ''
);
/*
* اگر data-answer خالی بود،
* از data-correct خود گزینهها استفاده میکنیم.
*
* این fallback باعث میشود ساختار جدید
* Python نیز مستقیماً قابل استفاده باشد.
*/
if (!correctAnswer) {
var optionContainer =
option.closest('.wd-test-options');
correctAnswer = normalizeAnswer(
optionContainer.attr('data-correct') || ''
);
}
/*
* پاسخ انتخابشده
*/
var selectedAnswer = normalizeAnswer(
option.attr('data-option') || ''
);
/*
* اگر data-option وجود نداشت،
* از متن گزینه استخراج شود.
*/
if (!selectedAnswer) {
selectedAnswer = normalizeAnswer(
option.text()
);
}
/*
* تعیین درست / غلط
*/
var isCorrect =
selectedAnswer === correctAnswer;
/*
* نتیجه و پاسخ همین تست
*/
var result = getTestResult(test);
var resultMessage =
result.find('.wd-test-result-message').first();
var answer = getTestAnswer(test);
/* =================================================
پاک کردن وضعیت قبلی گزینهها
================================================= */
options.css({
'background': '#ffffff',
'border-color': '#d9dfdc',
'color': '#455a64',
'font-weight': 'normal',
'box-shadow': 'none'
});
/* =================================================
مشخص کردن گزینه انتخابشده
================================================= */
if (isCorrect) {
option.css({
'background': '#edf8f5',
'border-color': '#527d77',
'color': '#405b56',
'font-weight': 'bold',
'box-shadow': '0 1px 3px rgba(82,125,119,.10)'
});
}
else {
option.css({
'background': '#fff2f2',
'border-color': '#b44a4a',
'color': '#9b3838',
'font-weight': 'bold',
'box-shadow': '0 1px 3px rgba(180,74,74,.10)'
});
/*
* پاسخ صحیح را نیز پیدا و سبز میکنیم.
*/
options.each(function () {
var item = $(this);
var itemAnswer =
normalizeAnswer(
item.attr('data-option') || ''
);
if (!itemAnswer) {
itemAnswer =
normalizeAnswer(
item.text()
);
}
if (itemAnswer === correctAnswer) {
item.css({
'background': '#edf8f5',
'border-color': '#527d77',
'color': '#405b56',
'font-weight': 'bold',
'box-shadow':
'0 1px 3px rgba(82,125,119,.10)'
});
}
});
}
/* =================================================
نمایش پیام نتیجه
================================================= */
result.css({
'display': 'block',
'visibility': 'visible',
'opacity': '1',
'padding': '10px 13px',
'border-radius': '6px'
});
if (isCorrect) {
result.css({
'background': '#edf8f5',
'border-right': '3px solid #527d77'
});
resultMessage
.text('✓ پاسخ شما صحیح است.')
.css({
'display': 'block',
'visibility': 'visible',
'opacity': '1',
'color': '#527d77',
'font-weight': 'bold'
});
}
else {
result.css({
'background': '#fff5f5',
'border-right': '3px solid #b44a4a'
});
resultMessage
.text('✕ پاسخ شما نادرست است.')
.css({
'display': 'block',
'visibility': 'visible',
'opacity': '1',
'color': '#b44a4a',
'font-weight': 'bold'
});
}
/* =================================================
نمایش پاسخ صحیح و تحلیل
================================================= */
if (answer.length) {
answer.css({
'display': 'block',
'visibility': 'visible',
'opacity': '1'
});
}
/* =================================================
قفل کردن همه گزینههای همین تست
================================================= */
options.prop('disabled', true);
options.css({
'cursor': 'default'
});
/*
* علامت پایان تست
*/
test
.addClass('wd-test-finished')
.attr('data-answered', 'true');
/*
* ثبت وضعیت روی خود option container
*/
test.find('.wd-test-options').first()
.attr('data-answered', 'true');
}
);
/* =========================================================
مشاهده / بستن متن نسخه قانون
========================================================= */
$(document).on(
'click',
'.wd-version-toggle',
function () {
var button = $(this);
var card = button.closest(
'.wd-version-history-card'
);
var text = card.find(
'.wd-version-text'
);
var icon = button.find(
'.wd-version-toggle-icon'
);
var label = button.find(
'.wd-version-toggle-label'
);
if (text.is(':visible')) {
text.stop(true, true)
.slideUp(180);
icon.text('+');
label.text('مشاهده متن');
}
else {
text.stop(true, true)
.slideDown(220);
icon.text('−');
label.text('بستن متن');
}
}
);
})();
/* =========================================================
WIKIDAD — Persian / Arabic / English digit normalization
در جستجوی ویکیداد
1 ↔ ١ ↔ ۱
========================================================= */
(function () {
function toPersianDigits(value) {
if (!value) {
return value;
}
return value
/* English digits → Persian */
.replace(/[0-9]/g, function (digit) {
return '۰۱۲۳۴۵۶۷۸۹'[Number(digit)];
})
/* Arabic-Indic digits → Persian */
.replace(/[٠-٩]/g, function (digit) {
return '۰۱۲۳۴۵۶۷۸۹'[digit.charCodeAt(0) - 0x0660];
});
}
function normalizeSearchInput(input) {
if (!input || typeof input.value !== 'string') {
return;
}
var normalized = toPersianDigits(input.value);
if (normalized !== input.value) {
input.value = normalized;
/* برای سیستمهای autocomplete */
input.dispatchEvent(new Event('input', {
bubbles: true
}));
}
}
function attachSearchNormalization() {
var inputs = document.querySelectorAll(
'input[name="search"],' +
'input[type="search"],' +
'#searchInput,' +
'#mw-searchInput'
);
inputs.forEach(function (input) {
if (input.dataset.wikidadDigitNormalized === '1') {
return;
}
input.dataset.wikidadDigitNormalized = '1';
/* هنگام تایپ یا Paste */
input.addEventListener('input', function () {
normalizeSearchInput(input);
});
/* قبل از ارسال فرم */
input.addEventListener('blur', function () {
normalizeSearchInput(input);
});
});
}
/* بارگذاری اولیه */
attachSearchNormalization();
/* برای Vector 2022 که بعضی عناصر را بعداً میسازد */
document.addEventListener('focusin', function (event) {
var input = event.target;
if (
input &&
input.matches &&
input.matches(
'input[name="search"],' +
'input[type="search"],' +
'#searchInput,' +
'#mw-searchInput'
)
) {
normalizeSearchInput(input);
}
});
})();