پرش به محتوا

مدیاویکی:Common.js: تفاوت میان نسخه‌ها

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


خط ۱۸: خط ۱۹:


             /*
             /*
             * فقط گزینه‌هایی که واقعاً متعلق به همین تست هستند
             * فقط گزینه‌های همین تست
             */
             */
             test.find('.wd-test-options li').filter(function () {
             var options = test.find('.wd-test-options li').filter(function () {
                 return $(this).closest('.wd-test')[0] === test[0];
                 return $(this).closest('.wd-test')[0] === test[0];
             }).css({
             });
 
            options.css({
                 'display': 'block',
                 'display': 'block',
                 'padding': '11px 14px',
                'box-sizing': 'border-box',
                 'padding': '10px 13px',
                 'margin': '7px 0',
                 'margin': '7px 0',
                 'border': '1px solid #dce5ea',
                 'border': '1px solid #d9dfdc',
                 'border-radius': '8px',
                 'border-radius': '6px',
                 'background': '#fff',
                 'background': '#ffffff',
                 'cursor': 'pointer',
                 'cursor': 'pointer',
                 'transition': 'all .15s ease',
                 'transition': 'background .15s ease, border-color .15s ease, color .15s ease',
                 'line-height': '1.9'
                 'line-height': '1.9'
             });
             });


             /*
             /*
             * فقط نتیجه همین تست مخفی شود
             * نتیجه همین تست
             */
             */
             test.find('.wd-test-result').filter(function () {
             test.find('.wd-test-result').filter(function () {
خط ۴۳: خط ۴۷:
             });
             });


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


         });
         });
     }
     }


خط ۶۳: خط ۶۹:


     /*
     /*
     * کلیک روی یک گزینه
     * کلیک روی گزینه
     */
     */
     $(document).on(
     $(document).on(
خط ۷۴: خط ۸۰:


             var option = $(this);
             var option = $(this);
            /*
            * نزدیک‌ترین تست
            */
             var test = option.closest('.wd-test');
             var test = option.closest('.wd-test');


خط ۸۵: خط ۸۷:


             /*
             /*
             * اگر همین تست قبلاً پاسخ داده شده
             * اگر قبلاً پاسخ داده شده، دیگر قابل تغییر نباشد
             */
             */
             if (test.hasClass('wd-test-finished')) {
             if (test.hasClass('wd-test-finished')) {
خط ۹۳: خط ۹۵:


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




             /*
             /*
             * پاسخ صحیح فقط از همین تست
             * پاسخ صحیح
             */
             */
             var correctAnswer = $.trim(
             var correctAnswer = $.trim(
خط ۱۰۹: خط ۱۱۲:


             /*
             /*
             * استخراج حرف گزینه انتخاب‌شده
             * استخراج حرف گزینه
            *
            * الف، ب، ج، د، هـ، ه، و
             */
             */
             var selectedMatch = selectedText.match(
             function extractLetter(text) {
                /^[\s\u200c\u200f]*([الفبجد])[\s\)\.:\-ـ]*/
            );


            var selectedLetter = selectedMatch
                text = $.trim(text || '');
                ? selectedMatch[1]
                : selectedText.charAt(0);


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


            /*
                return match
            * استخراج حرف پاسخ صحیح
                    ? $.trim(match[1])
            */
                    : $.trim(text.charAt(0));
            var answerMatch = correctAnswer.match(
            }
                /^[\s\u200c\u200f]*([الفبجد])[\s\)\.:\-ـ]*/
            );
 
            var answerLetter = answerMatch
                ? answerMatch[1]
                : correctAnswer.charAt(0);
 


            selectedLetter = $.trim(selectedLetter);
            answerLetter = $.trim(answerLetter);


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


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




             /*
             /*
             * پاک کردن وضعیت فقط در همین تست
             * پاک کردن وضعیت قبلی فقط در همین تست
             */
             */
             testOptions.css({
             testOptions.css({
                 'background': '#fff',
                 'background': '#ffffff',
                 'border-color': '#dce5ea',
                 'border-color': '#d9dfdc',
                 'color': '',
                 'color': '',
                 'font-weight': ''
                 'font-weight': ''
خط ۱۶۰: خط ۱۵۲:
             */
             */
             option.css({
             option.css({
                 'background': '#f3f7fa',
                 'background': '#f5f1f8',
                 'border-color': '#3978ad'
                 'border-color': '#8064a2'
             });
             });


خط ۱۷۳: خط ۱۶۵:


             /*
             /*
             * نتیجه فقط متعلق به همین تست
             * نتیجه همین تست
             */
             */
             var result =
             var result =
خط ۱۸۲: خط ۱۷۴:


             /*
             /*
             * پیام نتیجه فقط متعلق به همین تست
             * پیام نتیجه
             */
             */
             var resultMessage =
             var resultMessage =
خط ۱۸۹: خط ۱۸۱:


             /*
             /*
             * نمایش نتیجه همین تست
             * نمایش نتیجه
             */
             */
             result.css({
             result.css({
خط ۲۰۵: خط ۱۹۷:
                 option.css({
                 option.css({
                     'background': '#edf8f5',
                     'background': '#edf8f5',
                     'border-color': '#168477',
                     'border-color': '#527d77',
                     'color': '#11695f',
                     'color': '#405b56',
                     'font-weight': 'bold'
                     'font-weight': 'bold'
                 });
                 });
خط ۲۱۶: خط ۲۰۸:
                         'visibility': 'visible',
                         'visibility': 'visible',
                         'opacity': '1',
                         'opacity': '1',
                         'color': '#168477',
                         'color': '#527d77',
                         'font-weight': 'bold'
                         'font-weight': 'bold'
                     });
                     });
خط ۲۲۴: خط ۲۱۶:


             /*
             /*
             * پاسخ غلط
             * پاسخ نادرست
             */
             */
             else {
             else {
خط ۲۳۱: خط ۲۲۳:
                     'background': '#fff2f2',
                     'background': '#fff2f2',
                     'border-color': '#b44a4a',
                     'border-color': '#b44a4a',
                     'color': '#9b3838'
                     'color': '#9b3838',
                    'font-weight': 'bold'
                 });
                 });


خط ۲۴۶: خط ۲۳۹:


                 /*
                 /*
                 * پیدا کردن پاسخ صحیح
                 * نمایش پاسخ صحیح
                * فقط داخل همین تست
                 */
                 */
                 testOptions.each(function () {
                 testOptions.each(function () {


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


                    var itemText =
                     if (itemLetter === answerLetter) {
                        $.trim(item.text());
 
                    var itemMatch =
                        itemText.match(
                            /^[\s\u200c\u200f]*([الفبجد])[\s\)\.:\-ـ]*/
                        );
 
                    var itemLetter = itemMatch
                        ? itemMatch[1]
                        : itemText.charAt(0);
 
 
                     if (
                        $.trim(itemLetter) ===
                        answerLetter
                    ) {


                         item.css({
                         item.css({
                             'background': '#edf8f5',
                             'background': '#edf8f5',
                             'border-color': '#168477',
                             'border-color': '#527d77',
                             'color': '#11695f',
                             'color': '#405b56',
                             'font-weight': 'bold'
                             'font-weight': 'bold'
                         });
                         });
خط ۲۸۶: خط ۲۶۴:


             /*
             /*
             * پاسخ و تحلیل فقط همین تست
             * نمایش پاسخ و تحلیل
             */
             */
             var answer =
             var answer =
خط ۲۹۹: خط ۲۷۷:


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

نسخهٔ ۱۸ سپتامبر ۲۰۲۶، ساعت ۰۸:۳۳

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

            }

        }
    );

})();