1fb6a7b5a1fdaaf28b9f46333e589a92528d1c63
Discourse Theme / ci (push) Failing after 0s
discourse_theme_ran(Horizon 主题源码)
该仓库是 Discourse
Horizon (beta)主题的源码副本。仓库内原 README 已标注该主题已并入 Discourse Core。
1. 项目作用
这是一个 Discourse 主题项目,核心目标是:
- 改造论坛整体视觉(卡片化主题列表、圆角、配色系统、侧边栏样式)
- 增强交互(侧边栏新建主题按钮、颜色方案切换、Composer Peek 模式)
- 调整不同页面体验(分类页、主题页、聊天页、登录页、移动端)
- 提供系统测试,验证主题关键行为
2. 目录结构与作用
.github/
workflows/discourse-theme.yml:CI 配置,复用 Discourse 官方主题工作流。
assets/
.gitkeep:占位目录,预留静态资源(当前无实际资源文件)。
common/
common.scss:公共样式入口,按模块聚合scss/下样式。color_definitions.scss:主题色变量定义(基于 tertiary 推导背景、链接、侧边栏等)。head_tag.html:注入浏览器兼容检测脚本,不支持hsl(from ...)时提示升级浏览器。
desktop/
desktop.scss:桌面端样式入口。desktop-full-width.scss:全宽布局与头部网格布局规则。desktop-horizon-fixes.scss:桌面端修复(如 bulk select 样式/布局修正)。
javascripts/
.gitkeep:占位。discourse/api-initializers/:通过 Discourse API 注入主题行为。horizon.gjs:主题主初始化器;注册实验装饰层、配色选择器、站点设置覆盖、管理员弃用提示。sidebar-new-topic-button-connector.js:把自定义“新建主题”按钮渲染到侧边栏。composer-peek-toggle-connector.js:把 Peek 模式切换按钮挂到 composer 工具区。full-width-logo-behavior.js:侧边栏展开时控制 Logo 最小化行为。reposition-bulk-select.js:将批量选择入口放到导航控制区。hamburger-click-outside-transformer.js:扩展汉堡菜单“点击外部关闭”例外元素。
discourse/components/:Glimmer 组件。experimental-screen.gjs:主内容四角/底部装饰层组件(根据容器位置实时计算)。sidebar-new-topic-button.gjs:侧边栏新建主题按钮逻辑(权限、分类只读、草稿、关闭汉堡菜单)。composer-peek-mode-toggle.gjs:Composer Peek 模式开关,偏好写入keyValueStore。user-color-palette-selector.gjs:用户配色切换主组件(支持匿名/登录、明暗配套、CSS 热替换)。user-color-palette-menu-item.gjs:配色菜单项。
discourse/components/card/:主题列表卡片列组件。topic-status-column.gjs:Pinned/Hot 状态徽章。topic-category-column.gjs:分类列。topic-creator-column.gjs:主题创建者头像列。topic-replies-column.gjs:回复数列。topic-likes-column.gjs:点赞数列(当前主题列表布局中未启用展示)。topic-activity-column.gjs:最近活动信息(回复/创建/更新与时间)。
discourse/initializers/topic-list-columns.gjs:重排主题列表列、注入卡片列、改写点击行为与移动布局策略。
locales/
en.yml:主题文案与元数据(如topic_hot、topic_pinned、描述文本)。
scss/
按功能拆分的样式模块(由 common/common.scss 与 desktop/desktop.scss 聚合):
variables.scss:全局尺寸/圆角/间距变量。main.scss:页面主体容器网格与背景结构。topic-cards.scss:主题列表卡片化布局核心样式。topic.scss:主题阅读页、时间线、帖子流样式。categories-view.scss:分类页与分类+最新混合页样式。sidebar.scss:侧边栏容器/section/链接样式。sidebar-new-topic-button.scss:侧边栏新建主题按钮视觉与状态。header.scss:顶部栏、通知菜单、图标交互样式。nav-pills.scss:列表导航区(sticky、tab/下拉)样式。buttons.scss:按钮体系(默认/主按钮 hover、focus、active)。composer.scss:编辑器外观与工具条、翻译 composer 相关样式。composer-peek-mode.scss:Peek 模式下 composer 与主布局联动。chat.scss:聊天页/聊天抽屉适配。welcome-banner.scss:欢迎横幅和搜索区域样式。mobile-stuff.scss:移动端/小屏布局调整。login.scss:登录类页面布局样式。misc.scss:分散组件兼容/补丁样式。hiddenstuff.scss:隐藏部分原生 UI 元素。color-choice.scss:配色切换菜单样式。color-exploration.scss:侧边栏等颜色变量实验定义。box-view.scss:实验装饰层(四角遮罩)与聊天相关视觉细节。desktop-full-width.scss、desktop-horizon-fixes.scss:虽然在scss/目录下存在同名文件,实际桌面入口使用desktop/目录版本。
screenshots/
light.png、dark.png:主题明/暗模式截图,供主题元信息展示。
spec/
系统测试(RSpec + Capybara):
system/core_features_spec.rb:主题与核心能力兼容性基础测试。system/horizon_high_level_spec.rb:高层端到端流程(主题列表、导航、配色切换)。system/sidebar_topic_button_spec.rb:侧边栏新建主题按钮行为测试。system/composer_peek_spec.rb:Peek 模式可见性与持久化测试。system/user_color_palette_selector_spec.rb:配色切换在匿名/登录/深色模式下的行为测试。system/page_objects/components/user_color_palette_selector.rb:配色选择器的 PageObject 封装。.gitkeep:占位。
test/
acceptance/.gitkeep:预留前端测试目录(当前无具体测试文件)。
3. 根目录文件作用
about.json:主题元数据(名称、作者、链接、版本、颜色方案、截图、modifiers)。settings.yml:主题设置项(欢迎横幅开关、搜索体验模式)。README.md:项目说明文档(本文件)。LICENSE:MIT 许可证。package.json:前端开发依赖与 Node/pnpm 版本约束。pnpm-lock.yaml:前端依赖锁定文件。Gemfile/Gemfile.lock:Ruby 工具链依赖(rubocop-discourse、syntax_tree 等)。.discourse-compatibility:与 Discourse 版本兼容映射。eslint.config.mjs:ESLint 配置(继承@discourse/lint-configs)。stylelint.config.mjs:Stylelint 配置。.template-lintrc.cjs:Ember Template Lint 配置。.prettierrc.cjs:Prettier 配置。.rubocop.yml:Rubocop 配置(Discourse 规则)。.streerc:Syntax Tree 格式化配置。.npmrc:npm 行为约束(严格引擎、禁自动 peer 安装)。.gitignore:Git 忽略规则。
4. 关键功能对应关系(便于快速定位)
-
主题配色切换:
- 逻辑:
javascripts/discourse/components/user-color-palette-selector.gjs - 菜单样式:
scss/color-choice.scss - 颜色定义:
about.json+common/color_definitions.scss
- 逻辑:
-
侧边栏新建主题按钮:
- 逻辑:
javascripts/discourse/components/sidebar-new-topic-button.gjs - 挂载:
javascripts/discourse/api-initializers/sidebar-new-topic-button-connector.js - 样式:
scss/sidebar-new-topic-button.scss
- 逻辑:
-
主题列表卡片化:
- 列注册:
javascripts/discourse/initializers/topic-list-columns.gjs - 各列组件:
javascripts/discourse/components/card/*.gjs - 主样式:
scss/topic-cards.scss
- 列注册:
-
Composer Peek 模式:
- 逻辑:
javascripts/discourse/components/composer-peek-mode-toggle.gjs - 挂载:
javascripts/discourse/api-initializers/composer-peek-toggle-connector.js - 样式:
scss/composer-peek-mode.scss
- 逻辑:
5. 说明
- 此仓库 README 原文已声明:该主题已并入 Discourse Core,生产环境优先使用 Core 内置 Horizon 主题。
- 当前仓库更适合作为学习/二次开发参考,用于理解 Discourse 主题的样式组织方式与前端扩展点。
Description
Languages
SCSS
67.6%
JavaScript
20.1%
Ruby
12%
HTML
0.3%