미디어위키:Common.js

인테리어 위키
Abland (토론 | 기여)님의 2026년 1월 20일 (화) 09:00 판
둘러보기로 이동 검색으로 이동

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */

/* =========================
   h2/h3/h4/h5 기본 접기/펼치기
   - 헤더 왼쪽 아이콘 추가(아이콘 이미지는 CSS에서)
   - 헤더 바로 아래 콘텐츠만 토글
   - 다음 heading(h1~h6) 나오면 종료
   ========================= */

mw.hook('wikipage.content').add(function ($content) {

  const HEADING_SELECTOR = 'h2, h3, h4, h5';
  const STOP_SELECTOR = 'h1, h2, h3, h4, h5, h6';

  $content.find(HEADING_SELECTOR).each(function () {
    const $heading = $(this);

    // 중복 처리 방지
    if ($heading.data('fold-ready')) return;
    $heading.data('fold-ready', true);

    // ✅ 아이콘 추가 (이미지는 CSS background로 처리)
    // 중복 삽입 방지(혹시 다른 스크립트가 넣어도 안전)
    if ($heading.find('.mw-fold-icon').length === 0) {
      const $icon = $('<span class="mw-fold-icon" aria-hidden="true"></span>');
      $heading.prepend($icon);
    }

    // wrapper 생성
    const $wrapper = $('<div class="mw-fold-content"></div>');
    let $next = $heading.next();

    // 바로 아래 콘텐츠만 수집 (heading 나오면 종료)
    while ($next.length && !$next.is(STOP_SELECTOR)) {
      const $current = $next;
      $next = $next.next();
      $wrapper.append($current);
    }

    

    // DOM 반영
    $heading.after($wrapper);

    // 상태 (기본: 펼침)
    let collapsed = false;

    // 제목 클릭 시 토글
    $heading.on('click', function () {
      collapsed = !collapsed;

      if (collapsed) {
        $heading.addClass('mw-fold-collapsed');   // CSS에서 아이콘 → 오른쪽
        $wrapper.stop(true, true).slideUp(150);
      } else {
        $heading.removeClass('mw-fold-collapsed'); // CSS에서 아이콘 ↓ 아래
        $wrapper.stop(true, true).slideDown(150);
      }
    });
  });
});