پرش به محتوا

مدیاویکی:Common.js

از ویکی داد
نسخهٔ تاریخ ۱۸ سپتامبر ۲۰۲۶، ساعت ۰۸:۳۳ توسط Rasool (بحث | مشارکت‌ها)

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
(function () {

    /* =========================================================
       سیستم تست‌های تعاملی ویکی‌داد
       نسخه نهایی — هماهنگ با طراحی ماده ۱۵
       ========================================================= */

    function initWikidadTests() {

        $('.wd-test').each(function () {

            var test = $(this);

            if (test.hasClass('wd-test-ready')) {
                return;
            }

            test.addClass('wd-test-ready');

            /*
             * فقط گزینه‌های همین تست
             */
            var options = test.find('.wd-test-options li').filter(function () {
                return $(this).closest('.wd-test')[0] === test[0];
            });

            options.css({
                'display': 'block',
                'box-sizing': 'border-box',
                'padding': '10px 13px',
                'margin': '7px 0',
                'border': '1px solid #d9dfdc',
                'border-radius': '6px',
                'background': '#ffffff',
                'cursor': 'pointer',
                'transition': 'background .15s ease, border-color .15s ease, color .15s ease',
                'line-height': '1.9'
            });

            /*
             * نتیجه همین تست
             */
            test.find('.wd-test-result').filter(function () {
                return $(this).closest('.wd-test')[0] === test[0];
            }).css({
                'display': 'none'
            });

            /*
             * پاسخ و تحلیل همین تست
             */
            test.find('.wd-test-answer').filter(function () {
                return $(this).closest('.wd-test')[0] === test[0];
            }).css({
                'display': 'none'
            });

        });
    }


    /*
     * آماده‌سازی تست‌ها
     */
    $(document).ready(function () {
        initWikidadTests();
    });


    /*
     * کلیک روی گزینه
     */
    $(document).on(
        'click',
        '.wd-test-options li',
        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;
            }


            /*
             * گزینه‌های همین تست
             */
            var testOptions =
                test.find('.wd-test-options li').filter(function () {
                    return $(this).closest('.wd-test')[0] === test[0];
                });


            /*
             * پاسخ صحیح
             */
            var correctAnswer = $.trim(
                test.attr('data-answer') || ''
            );


            /*
             * استخراج حرف گزینه
             *
             * الف، ب، ج، د، هـ، ه، و
             */
            function extractLetter(text) {

                text = $.trim(text || '');

                var match = text.match(
                    /^[\s\u200c\u200f]*([الفبجدوهـه])[\s\)\.:\-ـ]*/
                );

                return match
                    ? $.trim(match[1])
                    : $.trim(text.charAt(0));
            }


            var selectedLetter =
                extractLetter(option.text());

            var answerLetter =
                extractLetter(correctAnswer);


            /*
             * پاک کردن وضعیت قبلی فقط در همین تست
             */
            testOptions.css({
                'background': '#ffffff',
                'border-color': '#d9dfdc',
                'color': '',
                'font-weight': ''
            });


            /*
             * مشخص کردن گزینه انتخاب‌شده
             */
            option.css({
                'background': '#f5f1f8',
                'border-color': '#8064a2'
            });


            /*
             * بررسی پاسخ
             */
            var isCorrect =
                selectedLetter === answerLetter;


            /*
             * نتیجه همین تست
             */
            var result =
                test.find('.wd-test-result').filter(function () {
                    return $(this).closest('.wd-test')[0] === test[0];
                }).first();


            /*
             * پیام نتیجه
             */
            var resultMessage =
                result.find('.wd-test-result-message').first();


            /*
             * نمایش نتیجه
             */
            result.css({
                'display': 'block',
                'visibility': 'visible',
                'opacity': '1'
            });


            /*
             * پاسخ صحیح
             */
            if (isCorrect) {

                option.css({
                    'background': '#edf8f5',
                    'border-color': '#527d77',
                    'color': '#405b56',
                    'font-weight': 'bold'
                });

                resultMessage
                    .text('✓ پاسخ شما صحیح است.')
                    .css({
                        'display': 'block',
                        'visibility': 'visible',
                        'opacity': '1',
                        'color': '#527d77',
                        'font-weight': 'bold'
                    });

            }


            /*
             * پاسخ نادرست
             */
            else {

                option.css({
                    'background': '#fff2f2',
                    'border-color': '#b44a4a',
                    'color': '#9b3838',
                    'font-weight': 'bold'
                });

                resultMessage
                    .text('✕ پاسخ شما نادرست است.')
                    .css({
                        'display': 'block',
                        'visibility': 'visible',
                        'opacity': '1',
                        'color': '#b44a4a',
                        'font-weight': 'bold'
                    });


                /*
                 * نمایش پاسخ صحیح
                 */
                testOptions.each(function () {

                    var item = $(this);
                    var itemLetter =
                        extractLetter(item.text());

                    if (itemLetter === answerLetter) {

                        item.css({
                            'background': '#edf8f5',
                            'border-color': '#527d77',
                            'color': '#405b56',
                            'font-weight': 'bold'
                        });

                    }

                });

            }


            /*
             * نمایش پاسخ و تحلیل
             */
            var answer =
                result.find('.wd-test-answer').first();

            answer.css({
                'display': 'block',
                'visibility': 'visible',
                'opacity': '1'
            });


            /*
             * قفل کردن تست
             */
            test.addClass('wd-test-finished');

        }
    );


    /* =========================================================
       مشاهده / بستن متن نسخه قانون
       ========================================================= */

    $(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('بستن متن');

            }

        }
    );

})();