미디어위키:Common.js: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
편집 요약 없음 |
편집 요약 없음 |
||
| 3번째 줄: | 3번째 줄: | ||
/* ========================= | /* ========================= | ||
h2/h3/h4/h5 기본 접기/펼치기 | h2/h3/h4/h5 기본 접기/펼치기 | ||
- 헤더 왼쪽 아이콘 | - 헤더 왼쪽 아이콘 항상 표시 | ||
- 헤더 바로 아래 콘텐츠만 토글 | - 헤더 바로 아래 콘텐츠만 토글 | ||
- 다음 heading(h1~h6) 나오면 종료 | - 다음 heading(h1~h6) 나오면 종료 | ||
| 20번째 줄: | 20번째 줄: | ||
$heading.data('fold-ready', true); | $heading.data('fold-ready', true); | ||
// ✅ 아이콘 추가 ( | // ✅ 아이콘 항상 추가 (콘텐츠 유무와 무관) | ||
if ($heading.find('.mw-fold-icon').length === 0) { | if ($heading.find('.mw-fold-icon').length === 0) { | ||
const $icon = $('<span class="mw-fold-icon" aria-hidden="true"></span>'); | const $icon = $('<span class="mw-fold-icon" aria-hidden="true"></span>'); | ||
| 38번째 줄: | 37번째 줄: | ||
} | } | ||
// ✅ 콘텐츠가 있으면 wrapper만 추가 | |||
if ($wrapper.children().length > 0) { | |||
// | $heading.after($wrapper); | ||
$heading.after($wrapper); | } | ||
// 상태 (기본: 펼침) | // 상태 (기본: 펼침) | ||
| 48번째 줄: | 47번째 줄: | ||
// 제목 클릭 시 토글 | // 제목 클릭 시 토글 | ||
$heading.on('click', function () { | $heading.on('click', function () { | ||
// 콘텐츠가 없는 경우: 아이콘은 있지만 동작은 하지 않음 | |||
if ($wrapper.children().length === 0) return; | |||
collapsed = !collapsed; | collapsed = !collapsed; | ||
if (collapsed) { | if (collapsed) { | ||
$heading.addClass('mw-fold-collapsed'); | $heading.addClass('mw-fold-collapsed'); | ||
$wrapper.stop(true, true).slideUp(150); | $wrapper.stop(true, true).slideUp(150); | ||
} else { | } else { | ||
$heading.removeClass('mw-fold-collapsed'); | $heading.removeClass('mw-fold-collapsed'); | ||
$wrapper.stop(true, true).slideDown(150); | $wrapper.stop(true, true).slideDown(150); | ||
} | } | ||
}); | }); | ||
}); | }); | ||
}); | }); | ||
2026년 1월 20일 (화) 09:01 판
/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */
/* =========================
h2/h3/h4/h5 기본 접기/펼치기
- 헤더 왼쪽 아이콘 항상 표시
- 헤더 바로 아래 콘텐츠만 토글
- 다음 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);
// ✅ 아이콘 항상 추가 (콘텐츠 유무와 무관)
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);
}
// ✅ 콘텐츠가 있으면 wrapper만 추가
if ($wrapper.children().length > 0) {
$heading.after($wrapper);
}
// 상태 (기본: 펼침)
let collapsed = false;
// 제목 클릭 시 토글
$heading.on('click', function () {
// 콘텐츠가 없는 경우: 아이콘은 있지만 동작은 하지 않음
if ($wrapper.children().length === 0) return;
collapsed = !collapsed;
if (collapsed) {
$heading.addClass('mw-fold-collapsed');
$wrapper.stop(true, true).slideUp(150);
} else {
$heading.removeClass('mw-fold-collapsed');
$wrapper.stop(true, true).slideDown(150);
}
});
});
});