sidebarMod
这是我用于修改侧边栏的脚本(在自定义侧边栏部分主题中首次提及)。
它使用 promises 和 MutationObserver 来监视侧边栏的变化(例如展开或折叠),并以高效的方式添加/删除内容。
我认为它足够灵活,可以满足大多数用例。您可以添加链接(通过追加、前置或在现有链接之前/之后插入来定位)、删除部分、删除链接,甚至删除 ⋮More。
甚至可以更改查看者是访客还是注册用户时的行为。例如,我正在使用它来删除与访客无关的自定义部分。
它是新的自定义侧边栏功能(通过 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”删除“⋮More”(默认:“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 创建一个插件吗?任何提示都将不胜感激。