미디어위키:Minerva.js: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
 
(같은 사용자의 중간 판 4개는 보이지 않습니다)
84번째 줄: 84번째 줄:
});
});


if ( mw.config.get('skin') === 'minerva' ) {
function fillMobileLanguageFromInterwiki() {
    var $mobileList = $('#mobile-language');


     // 1) 인터위키 링크 가져오기 (#p-lang 기준)
     // 인터위키 링크 읽기
     var $interwikiLinks = $('#p-lang .vector-menu-content-list .interlanguage-link a');
     var $interwikiLinks = $('#p-lang ul.minerva-languages .interlanguage-link a');
    if (!$interwikiLinks.length) return;


    if ($interwikiLinks.length === 0) {
        console.warn('모바일 언어 메뉴: 인터위키 링크가 없습니다.');
    }
    // 2) 한국어 병기용 매핑
     var langMap = {
     var langMap = {
         'ko': '한국어',
         'ko': '한국어',
103번째 줄: 100번째 줄:
     };
     };


    // 3) 모바일 ul 선택 후 기존 내용 비우기
     $mobileList.empty();
    var $list = $('#mobile-language');
     $list.empty();   // <ul id="mobile-language"> 안의 li 전부 제거


    // 4) 인터위키 데이터를 이용해 li + a 생성
     $interwikiLinks.each(function () {
     $interwikiLinks.each(function () {
         var $a = $(this);
         var $a       = $(this);
 
         var href     = $a.attr('href');
         var href     = $a.attr('href');             // 문서별 언어 URL
         var langCode = $a.attr('lang');
         var langCode = $a.attr('lang');             // en, es, vi ...
         var autonym = $a.find('span').text() || $a.text();   // English, Español ...
         var autonym   = $a.find('span').text() || $a.text(); // English, Español ...
         var korean   = langMap[langCode] || '';
         var korean   = langMap[langCode] || '';
         var label    = korean ? (autonym + ' (' + korean + ')') : autonym;
         var labelText = korean ? (autonym + ' (' + korean + ')') : autonym;


         var $li  = $('<li>');
         var $li  = $('<li>');
         var $new = $('<a>', {
         var $new = $('<a>', { href: href, text: label });
            href: href,
            text: labelText
        });


         $li.append($new);
         $li.append($new);
         $list.append($li);
         $mobileList.append($li);
     });
     });
}
}
mw.loader.using(['jquery']).then(function () {
    $(function () {
        // Minerva 전용이라면 이 체크를 유지
        // if (mw.config.get('skin') !== 'minerva') return;
        // body DOM 변경 감시
        var observer = new MutationObserver(function (mutations) {
            mutations.forEach(function (m) {
                $(m.addedNodes).each(function () {
                    var $node = $(this);
                    // #mobile-language 가 새로 생겼거나,
                    // 그 안쪽에 #mobile-language 가 포함되어 있을 때
                    if ($node.is('#mobile-language') || $node.find('#mobile-language').length) {
                        fillMobileLanguageFromInterwiki();
                    }
                });
            });
        });
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
        // 혹시 이미 열려 있는 상태에서 로딩될 수도 있으니 한 번 시도
        fillMobileLanguageFromInterwiki();
    });
});