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

WONGO
둘러보기로 이동 검색으로 이동
편집 요약 없음
태그: 되돌려진 기여
잔글 (문서를 비움)
태그: 비우기 수동 되돌리기 되돌려진 기여
1번째 줄: 1번째 줄:
mw.hook('wikipage.content').add(function ($content) {
    // 팝업 컨테이너 생성
    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);
    // 모든 내부 링크 선택
    const links = $content.find('a');
    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);
            });
        }
    });
});

2025년 1월 17일 (금) 21:35 판