미디어위키:Common.js: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
내용을 "→이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다.: "(으)로 바꿈 태그: 대체됨 수동 되돌리기 |
편집 요약 없음 |
||
| 1번째 줄: | 1번째 줄: | ||
/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */ | /* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */ | ||
/* ========================= | |||
h2/h3/h4 접기/펼치기 | |||
- 헤더 바로 아래 콘텐츠만 감싸서 토글 | |||
- 다음 heading(h1~h6) 나오면 즉시 종료 (하위 heading 포함 안 함) | |||
========================= */ | |||
mw.hook('wikipage.content').add(function ($content) { | |||
const HEADING_SELECTOR = 'h2, h3, h4'; | |||
const STOP_SELECTOR = 'h1, h2, h3, h4, h5, h6'; | |||
$content.find(HEADING_SELECTOR).each(function () { | |||
const $heading = $(this); | |||
// 이미 처리된 heading이면 스킵 | |||
if ($heading.data('fold-ready')) return; | |||
$heading.data('fold-ready', true); | |||
// 아이콘 추가 (왼쪽) | |||
const $icon = $('<span class="mw-fold-icon">▾</span>'); | |||
$heading.prepend($icon); | |||
// heading "바로 아래" 콘텐츠만 수집: 다음 heading 나오면 종료 | |||
const $wrapper = $('<div class="mw-fold-content"></div>'); | |||
let $next = $heading.next(); | |||
while ($next.length && !$next.is(STOP_SELECTOR)) { | |||
const $current = $next; | |||
$next = $next.next(); | |||
$wrapper.append($current); | |||
} | |||
// 접을 콘텐츠가 없으면 아이콘/이벤트도 제거하고 종료 | |||
if ($wrapper.children().length === 0) { | |||
$icon.remove(); | |||
return; | |||
} | |||
// DOM 삽입 | |||
$heading.after($wrapper); | |||
// 토글 상태 | |||
let collapsed = false; | |||
// 클릭 시 토글 (제목 전체 클릭) | |||
$heading.on('click', function () { | |||
collapsed = !collapsed; | |||
if (collapsed) { | |||
$icon.text('▸'); | |||
$heading.addClass('mw-fold-collapsed'); | |||
$wrapper.stop(true, true).slideUp(150); | |||
} else { | |||
$icon.text('▾'); | |||
$heading.removeClass('mw-fold-collapsed'); | |||
$wrapper.stop(true, true).slideDown(150); | |||
} | |||
}); | |||
}); | |||
}); | |||
2026년 1월 15일 (목) 06:30 판
/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */
/* =========================
h2/h3/h4 접기/펼치기
- 헤더 바로 아래 콘텐츠만 감싸서 토글
- 다음 heading(h1~h6) 나오면 즉시 종료 (하위 heading 포함 안 함)
========================= */
mw.hook('wikipage.content').add(function ($content) {
const HEADING_SELECTOR = 'h2, h3, h4';
const STOP_SELECTOR = 'h1, h2, h3, h4, h5, h6';
$content.find(HEADING_SELECTOR).each(function () {
const $heading = $(this);
// 이미 처리된 heading이면 스킵
if ($heading.data('fold-ready')) return;
$heading.data('fold-ready', true);
// 아이콘 추가 (왼쪽)
const $icon = $('<span class="mw-fold-icon">▾</span>');
$heading.prepend($icon);
// heading "바로 아래" 콘텐츠만 수집: 다음 heading 나오면 종료
const $wrapper = $('<div class="mw-fold-content"></div>');
let $next = $heading.next();
while ($next.length && !$next.is(STOP_SELECTOR)) {
const $current = $next;
$next = $next.next();
$wrapper.append($current);
}
// 접을 콘텐츠가 없으면 아이콘/이벤트도 제거하고 종료
if ($wrapper.children().length === 0) {
$icon.remove();
return;
}
// DOM 삽입
$heading.after($wrapper);
// 토글 상태
let collapsed = false;
// 클릭 시 토글 (제목 전체 클릭)
$heading.on('click', function () {
collapsed = !collapsed;
if (collapsed) {
$icon.text('▸');
$heading.addClass('mw-fold-collapsed');
$wrapper.stop(true, true).slideUp(150);
} else {
$icon.text('▾');
$heading.removeClass('mw-fold-collapsed');
$wrapper.stop(true, true).slideDown(150);
}
});
});
});