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

WONGO
둘러보기로 이동 검색으로 이동
편집 요약 없음
태그: 되돌려진 기여
(내용을 "→‎주석 팝업 스타일: .ref-tooltip { font-size: 12px; line-height: 1.4; border-radius: 4px; background-color: #f9f9f9; } →‎링크 팝업 스타일: .link-preview-popup { font-size: 12px; line-height: 1.4; border-radius: 4px; background-color: #f9f9f9; }"(으)로 바꿈)
태그: 대체됨 수동 되돌리기 되돌려진 기여
1번째 줄: 1번째 줄:
mw.hook('wikipage.content').add(function ($content) {
/* 주석 팝업 스타일 */
     // ----------------------------------------
.ref-tooltip {
     // 주석 팝업 처리
     font-size: 12px;
     // ----------------------------------------
     line-height: 1.4;
     const refs = $content.find('sup.reference'); // 주석 <sup> 태그 선택
     border-radius: 4px;
     background-color: #f9f9f9;
}


    refs.each(function () {
/* 링크 팝업 스타일 */
        const $ref = $(this);
.link-preview-popup {
        const refId = $ref.find('a').attr('href'); // 주석의 href 속성 가져오기
    font-size: 12px;
 
    line-height: 1.4;
        if (refId) {
     border-radius: 4px;
            const refContent = $(refId).html(); // 주석 내용 가져오기
    background-color: #f9f9f9;
 
}
            // 팝업 컨테이너 생성
            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);
            });
        }
    });
 
    // ----------------------------------------
    // 링크 팝업 처리
    // ----------------------------------------
    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);
            });
        }
    });
});

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

/* 주석 팝업 스타일 */
.ref-tooltip {
    font-size: 12px;
    line-height: 1.4;
    border-radius: 4px;
    background-color: #f9f9f9;
}

/* 링크 팝업 스타일 */
.link-preview-popup {
    font-size: 12px;
    line-height: 1.4;
    border-radius: 4px;
    background-color: #f9f9f9;
}