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

WONGO
둘러보기로 이동 검색으로 이동
잔글 (분류표시수정)
태그: 되돌려진 기여
잔글편집 요약 없음
태그: 되돌려진 기여
51번째 줄: 51번째 줄:
         }
         }
     });
     });
    // ----------------------------------------
    // 링크 팝업 처리
    // ----------------------------------------
    const links = $content.find('a'); // 모든 링크 선택
    // 팝업 컨테이너 생성
    const $popup = $('<div>')
        .addClass('link-preview-popup')
        .css({
            display: 'none',
            position: 'absolute',
            border: '1px solid #ccc',
            background: '#fff',
            padding: '10px',
            'z-index': 1000,
            'box-shadow': '0 4px 8px rgba(0,0,0,0.1)',
            'max-width': '300px',
            'overflow-wrap': 'break-word',
        });
    // 팝업을 DOM에 추가
    $('body').append($popup);
    links.each(function () {
        const $link = $(this);
        // 내부 링크만 처리
        if (
            $link.attr('href') &&
            ($link.attr('href').startsWith(mw.config.get('wgScriptPath') + '/index.php/') ||
                $link.attr('href').startsWith(mw.config.get('wgScriptPath') + '/wiki/'))
        ) {
            $link.on('mouseenter', function (event) {
                // 페이지 제목 추출
                const pageTitle = decodeURIComponent(
                    $link.attr('href')
                        .replace(mw.config.get('wgScriptPath') + '/index.php/', '')
                        .replace(mw.config.get('wgScriptPath') + '/wiki/', '')
                );
                // MediaWiki API 호출
                $.ajax({
                    url: mw.util.wikiScript('api'),
                    data: {
                        action: 'query',
                        prop: 'extracts',
                        titles: pageTitle,
                        format: 'json',
                        exintro: true, // 첫 번째 문단만 가져오기
                        explaintext: true, // HTML 태그 제거
                    },
                    dataType: 'json',
                    success: function (data) {
                        const pages = data.query.pages;
                        const page = Object.values(pages)[0];
                        if (page && page.extract) {
                            $popup.html(page.extract);
                            $popup.css({
                                top: event.pageY + 10,
                                left: event.pageX + 10,
                            }).fadeIn(200);
                        } else {
                            $popup.html('내용을 가져올 수 없습니다.');
                        }
                    },
                    error: function () {
                        $popup.html('오류가 발생했습니다.');
                    },
                });
            });
            $link.on('mousemove', function (event) {
                $popup.css({
                    top: event.pageY + 10,
                    left: event.pageX + 10,
                });
            });
            $link.on('mouseleave', function () {
                $popup.fadeOut(200);
            });
        }
    });
});
mw.hook('wikipage.content').add(function ($content) {
    // 분류 영역 찾기
    const $categories = $content.find('.catlinks');
    if ($categories.length) {
        console.log('분류 영역 발견:', $categories.html()); // 디버깅용 로그
        // 새로운 상단 분류 컨테이너 생성
        const $topCategories = $('<div>')
            .addClass('top-categories')
            .html($categories.html()) // 기존 분류 HTML 복사
            .css({
                'margin-bottom': '1em',
                'background-color': '#f9f9f9',
                'border': '1px solid #ddd',
                'padding': '5px',
                'border-radius': '4px',
            });
        // 페이지 내용 위에 삽입
        $content.prepend($topCategories);
        // 기존 하단 분류 숨기기
        $categories.hide();
    } else {
        console.warn('분류 영역이 발견되지 않았습니다.');
    }
});

2025년 1월 18일 (토) 09:21 판

mw.hook('wikipage.content').add(function ($content) {
    // ----------------------------------------
    // 주석 팝업 처리
    // ----------------------------------------
    const refs = $content.find('sup.reference'); // 주석 <sup> 태그 선택

    refs.each(function () {
        const $ref = $(this);
        const refId = $ref.find('a').attr('href'); // 주석의 href 속성 가져오기

        if (refId) {
            const refContent = $(refId).html(); // 주석 내용 가져오기

            // 팝업 컨테이너 생성
            const $tooltip = $('<div>')
                .addClass('ref-tooltip')
                .html(refContent)
                .css({
                    display: 'none',
                    position: 'absolute',
                    border: '1px solid #ccc',
                    background: '#fff',
                    padding: '10px',
                    'z-index': 1000,
                    'box-shadow': '0 4px 8px rgba(0,0,0,0.1)',
                    'max-width': '300px',
                    'overflow-wrap': 'break-word',
                });

            // 팝업 DOM에 추가
            $('body').append($tooltip);

            // 마우스 이벤트 처리
            $ref.on('mouseenter', function (event) {
                $tooltip.css({
                    top: event.pageY + 10,
                    left: event.pageX + 10,
                }).fadeIn(200);
            });

            $ref.on('mousemove', function (event) {
                $tooltip.css({
                    top: event.pageY + 10,
                    left: event.pageX + 10,
                });
            });

            $ref.on('mouseleave', function () {
                $tooltip.fadeOut(200);
            });
        }
    });