sidebarMod
**사이드바 수정을 위한 제 스크립트**입니다 (커스텀 사이드바 섹션 토픽에서 처음 언급되었음).
이것은 Promise와 MutationObserver를 사용하여 사이드바의 변경 사항(예: 확장 또는 축소)을 감시하고, 성능에 영향을 주지 않는 방식으로 요소를 추가/제거합니다.
대부분의 사용 사례에 충분히 유연하도록 만들었다고 생각합니다. 링크를 추가할 수 있으며(기존 링크 뒤에 추가, 앞에 추가, 또는 기존 링크 앞/뒤에 삽입하여 위치 지정), 섹션을 제거하고, 링크를 제거하며, 심지어 ⋮더 보기까지 제거할 수 있습니다.
게스트이거나 등록한 사용자인지에 따라 동작을 변경하는 것도 가능합니다. 예를 들어, 저는 게스트에게는 관련이 없는 커스텀 섹션을 제거하는 데 이를 사용하고 있습니다.
이것은 새로운 커스텀 사이드바 섹션 기능(SiteSetting.enable_custom_sidebar_sections으로 활성화)의 좋은 보완재이므로, 섹션을 생성하는 기능을 추가하는 수고를 들이지 않았습니다.
버그를 찾거나 추가 기능이 필요하면 알려주세요.
설치
새로운 테마 컴포넌트를 생성하고 Head에 붙여넣으세요. 테마에서 이를 활성화하는 것을 잊지 마세요.
설정
상단 근처의 injections와 removals만 편집하면 됩니다.
처음에는 그대로 두어 스크립트가 어떤 일을 하는지 확인해 보기를 권장합니다. 예제 설정이 잘 설명되도록 노력했습니다.
저는 개인적으로 이렇게 사용하고 있습니다:
/**
* 링크 위치 지정자:
* (bool) prepend, append: 섹션에 링크를 앞에/뒤에 추가
* (str) addBeforeKebab, addAfterKebab: 기존 링크 앞/뒤에 링크 추가
* 링크 표시:
* (str) injectFor: 'anon' 사용자만, 'registered' 사용자만, 또는 'both'(기본값: 'both')에게만 링크 삽입
*/
injections: [
{ sectionSelector: '.sidebar-section[data-section-name="community"]',
links: [
{ text: 'Guidelines', kebab: 'guidelines', title: 'Guidelines for using this site', href: '/guidelines', icon: 'gavel', addBeforeKebab: 'faq', injectFor: 'registered' }
]
},
{ sectionSelector: '.sidebar-section[data-section-name="categories"]',
links: [
{ text: 'Site Map', kebab: 'site-map', title: 'Site Map', href: '/t/32', icon: 'map-marker-alt', prepend: true }
]
}
],
/**
* 섹션 옵션:
* (str) removeFor: 'anon' 사용자만, 'registered' 사용자만, 또는 'both'(기본값: 'none')에게만 섹션 제거
* (str) removeMore: 'anon' 사용자만, 'registered' 사용자만, 또는 'both'(기본값: 'none')에게만 '⋮더 보기' 제거
* 링크 제거로 인해 비어 있는 것이 확실한 경우 유용함
* 링크 제거 옵션:
* (str) removeFor: 'anon' 사용자만, 'registered' 사용자만, 또는 'both'(기본값: 'both')에게만 링크 제거
*/
removals: [
{ sectionSelector: '.sidebar-section[data-section-name="community"]',
links: [{ kebab: 'badges', removeFor: 'anon' }]
},
{ sectionSelector: '.sidebar-custom-sections .sidebar-section[data-section-name="my-topics"]',
removeFor: 'anon'
}
],
제 질문
API를 사용하여 이렇게 하는 방법에 대해 조사해 보았지만, 구현된 기능이 충분하지 않다고 생각합니다.
DOM에 해킹하는 대신 "올바른 방법"으로 이를 수행하고 싶다면 어떻게 해야 하나요? Ruby로 플러그인을 만들어야 하나요? 어떤 힌트라도 감사하겠습니다.