پرش به محتوا

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

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

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

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

    /*
     * =====================================================
     * ویکی‌داد — JavaScript
     * =====================================================
     *
     * 1. تست‌های تعاملی
     * 2. سابقه تقنینی ماده
     * 3. شناسنامه ماده — نمایش سوابق
     *
     * =====================================================
     */


    /*
     * =====================================================
     * ۱. تست‌های تعاملی
     * =====================================================
     */


    /*
     * -----------------------------------------------------
     * تبدیل گزینه‌های لیست به گزینه‌های قابل کلیک
     * -----------------------------------------------------
     */

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

        var container = $( this );

        container.find( 'li' ).each( function () {

            $( this ).addClass(
                'wd-test-option'
            );

        } );

    });


    /*
     * -----------------------------------------------------
     * انتخاب گزینه
     * -----------------------------------------------------
     */

    $( document ).on(
        'click',
        '.wd-test-option',
        function () {

            var option = $( this );

            var box = option.closest(
                '.wd-test'
            );


            /*
             * اگر پاسخ صحیح قبلاً انتخاب شده،
             * تست تمام شده است.
             */

            if (
                box.hasClass(
                    'wd-test-finished'
                )
            ) {

                return;

            }


            /*
             * دریافت پاسخ صحیح
             */

            var answer = $.trim(
                box.attr(
                    'data-answer'
                )
            );


            /*
             * متن گزینه انتخاب‌شده
             */

            var selectedText = $.trim(
                option.text()
            );


            /*
             * عناصر نتیجه
             */

            var result = box.find(
                '.wd-test-result'
            );

            var message = box.find(
                '.wd-test-result-message'
            );

            var answerBox = box.find(
                '.wd-test-answer'
            );


            /*
             * تشخیص حرف گزینه
             */

            var selectedLetter = '';


            if (
                selectedText.indexOf(
                    'الف'
                ) === 0
            ) {

                selectedLetter = 'الف';

            } else if (
                selectedText.indexOf(
                    'ب'
                ) === 0
            ) {

                selectedLetter = 'ب';

            } else if (
                selectedText.indexOf(
                    'ج'
                ) === 0
            ) {

                selectedLetter = 'ج';

            } else if (
                selectedText.indexOf(
                    'د'
                ) === 0
            ) {

                selectedLetter = 'د';

            }


            /*
             * تبدیل:
             *
             * گزینه ب
             *
             * به:
             *
             * ب
             */

            var correctLetter = answer
                .replace(
                    'گزینه',
                    ''
                )
                .replace(
                    ':',
                    ''
                )
                .trim();


            /*
             * ثبت انتخاب کاربر
             */

            option.addClass(
                'wd-selected'
            );


            /*
             * نمایش پیام نتیجه
             */

            result.show();


            /*
             * =================================================
             * پاسخ صحیح
             * =================================================
             */

            if (
                selectedLetter === correctLetter
            ) {

                option.addClass(
                    'wd-correct'
                );


                message
                    .removeClass(
                        'wd-result-wrong'
                    )
                    .addClass(
                        'wd-result-correct'
                    )
                    .text(
                        '✓ پاسخ شما صحیح است.'
                    );


                /*
                 * نمایش پاسخ و تحلیل
                 */

                answerBox
                    .stop(
                        true,
                        true
                    )
                    .slideDown(
                        250
                    );


                /*
                 * پایان تست
                 */

                box.addClass(
                    'wd-test-finished'
                );

            }


            /*
             * =================================================
             * پاسخ غلط
             * =================================================
             */

            else {

                option.addClass(
                    'wd-wrong'
                );


                message
                    .removeClass(
                        'wd-result-correct'
                    )
                    .addClass(
                        'wd-result-wrong'
                    )
                    .text(
                        '✕ پاسخ شما نادرست است.'
                    );


                /*
                 * عمداً پاسخ صحیح را نمایش نمی‌دهیم.
                 *
                 * کاربر می‌تواند گزینه دیگری را انتخاب کند.
                 */

            }

        }
    );


    /*
     * =====================================================
     * ۲. سابقه تقنینی ماده
     * =====================================================
     *
     * دکمه:
     * «مشاهده متن»
     *
     * در کارت:
     * .wd-version-history-card
     *
     * متن:
     * .wd-version-text
     * =====================================================
     */


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

            }

        }
    );


    /*
     * =====================================================
     * ۳. شناسنامه ماده
     * =====================================================
     *
     * دکمه:
     * «مشاهده سوابق»
     *
     * این بخش سوابق تقنینی را مستقیماً
     * داخل همان شناسنامه باز و بسته می‌کند.
     *
     * =====================================================
     */


    $( document ).on(
        'click',
        '.wd-article-history-toggle',
        function () {

            var button = $( this );

            var box = button.closest(
                '.wd-article-metadata'
            );

            var history = box.find(
                '.wd-article-history-inline'
            );

            var icon = button.find(
                '.wd-article-history-toggle-icon'
            );

            var label = button.find(
                '.wd-article-history-toggle-label'
            );


            /*
             * بستن سوابق
             */

            if (
                history.is(
                    ':visible'
                )
            ) {

                history
                    .stop(
                        true,
                        true
                    )
                    .slideUp(
                        180
                    );

                icon.text(
                    '+'
                );

                label.text(
                    'مشاهده سوابق'
                );

            }


            /*
             * باز کردن سوابق
             */

            else {

                history
                    .stop(
                        true,
                        true
                    )
                    .slideDown(
                        220
                    );

                icon.text(
                    '−'
                );

                label.text(
                    'بستن سوابق'
                );

            }

        }
    );

} );