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

아카디아(AKADIA)
(아카디아 게시판 -> 아카디아 포럼 명칭 변경, 모바일 viewport 대응 추가)
(아카디아 포럼 버튼 - 헤더 직접 주입 (모바일 가시성))
1번째 줄: 1번째 줄:
/* 아카디아 포럼 - 우측 상단 알약 탭 삽입 */
/* 아카디아 위키 - 사용자 정의 JS */
 
/* 아카디아 포럼 - 헤더 알약 탭 삽입 */
$(function() {
$(function() {
     if ($('.akadia-portal-links').length) return;
     if ($('.akadia-portal-links').length) return;
     var $portal = $('<div class="akadia-portal-links"></div>');
     var $portal = $('<div class="akadia-portal-links"></div>');
     $portal.append('<a href="https://forum.akadia.kr/" class="akadia-portal-link" title="아카디아 포럼">아카디아 포럼</a>');
     $portal.append('<a href="https://forum.akadia.kr/" class="akadia-portal-link" title="아카디아 포럼">아카디아 포럼</a>');
     var $target = $('.vector-user-links').first();
     var $header = $('header.mw-header, .mw-header').first();
    if ($target.length) { $target.before($portal); } else { $('#p-personal').before($portal); }
    if ($header.length) {
        $header.append($portal);
    } else {
        var $userLinks = $('.vector-user-links').first();
        if ($userLinks.length) { $userLinks.before($portal); }
        else { $('#p-personal').before($portal); }
    }
});
});


/* 모바일 viewport 대응: 기본 viewport가 width=1000으로 고정되어 있어 디바이스 폭에 맞게 재설정 */
/* 모바일 viewport 대응 */
(function() {
(function() {
     var screenW = window.screen && window.screen.width;
     var screenW = window.screen && window.screen.width;
14번째 줄: 22번째 줄:
         var meta = document.querySelector('meta[name="viewport"]');
         var meta = document.querySelector('meta[name="viewport"]');
         var content = 'width=device-width, initial-scale=1, shrink-to-fit=no';
         var content = 'width=device-width, initial-scale=1, shrink-to-fit=no';
         if (meta) { meta.setAttribute('content', content); }
         if (meta) {
         else {
            meta.setAttribute('content', content);
         } else {
             meta = document.createElement('meta');
             meta = document.createElement('meta');
             meta.name = 'viewport';
             meta.setAttribute('name', 'viewport');
             meta.content = content;
             meta.setAttribute('content', content);
             document.head.appendChild(meta);
             document.head.appendChild(meta);
         }
         }
24번째 줄: 33번째 줄:
})();
})();


/* 본문 하이퍼링크를 탭으로 열기 */
/* 외부 링크 열기 */
mw.hook('wikipage.content').add(function ($content) {
mw.hook('wikipage.content').add(function($content) {
     $content.find('a').each(function () {
     $content.find('a.external').not('[href^="#"]').not('.mw-editsection a').each(function() {
         var $a = $(this);
         var $a = $(this);
        var href = $a.attr('href');
         if (!$a.attr('target')) {
         if (!href) return;
            $a.attr('target', '_blank').attr('rel', 'noopener noreferrer');
        // 섹션 앵커(#section)는 새 탭으로 열지 않음
        if (href.charAt(0) === '#') return;
        // 섹션 편집(== 편집 ==) 링크는 새 탭으로 열지 않음
        if ($a.closest('.mw-editsection').length) return;
        $a.attr('target', '_blank');
        var rel = $a.attr('rel') || '';
        if (rel.indexOf('noopener') === -1) {
            $a.attr('rel', (rel + ' noopener noreferrer').trim());
         }
         }
     });
     });
});
});

2026년 5월 12일 (화) 08:37 판

/* 아카디아 위키 - 사용자 정의 JS */

/* 아카디아 포럼 - 헤더 알약 탭 삽입 */
$(function() {
    if ($('.akadia-portal-links').length) return;
    var $portal = $('<div class="akadia-portal-links"></div>');
    $portal.append('<a href="https://forum.akadia.kr/" class="akadia-portal-link" title="아카디아 포럼">아카디아 포럼</a>');
    var $header = $('header.mw-header, .mw-header').first();
    if ($header.length) {
        $header.append($portal);
    } else {
        var $userLinks = $('.vector-user-links').first();
        if ($userLinks.length) { $userLinks.before($portal); }
        else { $('#p-personal').before($portal); }
    }
});

/* 모바일 viewport 대응 */
(function() {
    var screenW = window.screen && window.screen.width;
    if (screenW && screenW <= 720) {
        var meta = document.querySelector('meta[name="viewport"]');
        var content = 'width=device-width, initial-scale=1, shrink-to-fit=no';
        if (meta) {
            meta.setAttribute('content', content);
        } else {
            meta = document.createElement('meta');
            meta.setAttribute('name', 'viewport');
            meta.setAttribute('content', content);
            document.head.appendChild(meta);
        }
    }
})();

/* 외부 링크 새 탭 열기 */
mw.hook('wikipage.content').add(function($content) {
    $content.find('a.external').not('[href^="#"]').not('.mw-editsection a').each(function() {
        var $a = $(this);
        if (!$a.attr('target')) {
            $a.attr('target', '_blank').attr('rel', 'noopener noreferrer');
        }
    });
});