* refactor(params)!: snake_case config + eliminate params.page + use .Param
BREAKING CHANGE: All params keys renamed from camelCase to snake_case,
[params.page] section eliminated (moved to [params] level), and users
must update their hugo.toml and front matter accordingly.
Key changes:
- All camelCase config keys → snake_case (e.g., defaultTheme → default_theme)
- [params.page] flat keys and sub-sections moved to [params] level
- Removed function/params.html (manual merge), replaced with Hugo .Param
- New function/param.html partial for page-level section params with
shorthand boolean support and site defaults merging
- New function/camel-case.html for string conversion
- snake2camel.html renamed to camel-case-keys.html
- New function/get-cover.html for cover image resolution
- Deprecation warnings in detection-deprecated.html for old config keys
- Front matter only params (subtitle, featured_image, password, repost,
weight, message) use .Params.xxx instead of .Param
- Page-level sections use param.html partial
- Simplified patch.html (siteTime only) and init/index.html
Refs: camel-case-keys.html#29 (planned v1.0 breaking change)
* refactor(params)!: move params.link to page-level, simplify link guard
- Move [params.link] and [params.link.guard] to page-level section
- link.html: .Page optional, use param.html when available for
page-level override, fall back to site config without .Page
- Remove $guardConfig variable, use $config.guard directly
- Remove unnecessary .Page from callers that don't need page override
- friends.html: use param.html for link guard instead of link_guard
* refactor(params)!: move image/codeblock/json_viewer/filetree to page-level
- Move [params.image], [params.codeblock], [params.json_viewer],
[params.filetree] to page-level sub-sections
- Templates use param.html for merged config (page override + site defaults)
- image.html: .Page optional, falls back to site config without .Page
- Add v1- prefix to all deprecation warnidf IDs
- Fix camelCase key access in image.html (blackList, cacheRemote)
- Fix Hugo-lowered camelCase keys in code-block-wrapper.html
- Add deprecation warnings for codeblock camelCase Markdown attributes
- Add deprecation warnings for file-tree camelCase Markdown attributes
- Update render-codeblock-toggle.html for snake_case attribute names
* style: standardize @param comment style across all HTML templates
- PascalCase types: {string} → {String}, {boolean} → {Boolean},
{int} → {Int}, {map} → {Map}, {array} → {Array}
- Add missing ` - ` separator between param name and description
- Remove extra alignment spaces between type and param name
* refactor(params)!: move params.mermaid to page-level, extract gen/ templates
- Move [params.mermaid] to page-level sub-sections
- Mermaid config injected into window.config (per-page override support)
- mermaid.ts reads config from window.config.mermaid instead of parameter
- Create _partials/gen/ directory for JS content generators
- Move mermaid-bootstrap.html from plugin/ to gen/
- Extract window.config JS generation into gen/config.html
- mermaid.html uses param.html for wrapper config
* refactor(params)!: consolidate link_to_* into params.post_link section
- Move link_to_markdown/source/edit/report/vscode into [params.post_link]
- Rename keys: markdown, source, edit, report (bool), editor (string)
- editor defaults to "vscode", supports "trae" etc. via protocol template
- footer.html uses .Param "post_link" for all link toggles
- Remove link_to_* from deprecated keys list
* fix: add fallback for deprecated camelCase attributes and expand deprecation warnings
- render-codeblock-file-tree.html: folderSlash attribute fallback
- render-codeblock-toggle.html: lineNosToggler/lineWrapToggler fallback + warnings
- code-block-wrapper.html: maxShownLines/wrapperClass fallback
- detection-deprecated.html: add nested key warnings for 13 sections
(header, breadcrumb, navigation, watermark, busuanzi, image, mermaid,
codeblock, filetree, math.katex, math.mathjax.options, post_summary, footer)
- detection-deprecated.html: add link_guard front matter deprecation warning
* fix(mermaid): fix rendering in hidden tab panels and neutral layer scheduling
- isRenderContextActive: check tab-panel visibility via getBoundingClientRect
instead of panel.hidden (tab-container uses slot-based hiding, not hidden attr)
- bindTabContainerChanged: render neutral layers when switching tabs so
print/fallback scenarios work correctly
- Create core/banner.ts for styled console version message
- Replace example.com with real domains in link test content
- Update type definitions and core module
* refactor: add TypeScript support and refactor utility functions
* docs: add CLAUDE.md for Claude Code guidance
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* refactor(assets): replace factory-function pattern with service classes and DI container
Introduce typed service container, event bus, and service interfaces to replace
the shared FixItContext factory-function pattern. Each module is now a standalone
class implementing a typed interface, with explicit constructor-injected
dependencies. The window.fixit backward-compatibility facade is built via a
publicAPI() helper that extracts class methods.
Also removes unnecessary setTimeout/afterPaint deferred execution wrappers
from init sequences, and improves module header comments.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* refactor: replace private properties with class fields in modules
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* refactor(assets): rewrite link page script in TypeScript
Rename pages/link.js to link.ts with proper type annotations and update
the Hugo template reference accordingly.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* docs: rewrite CLAUDE.md and copilot-instructions.md in English
Update both files to reflect the new service-class architecture with
DI container, typed event bus, and ES6 # private fields.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix: update event handling to use CustomEvent for better type safety
* refactor: enhance theme switching by adding isChanged flag to event details
* refactor(assets): refactor Mermaid module structure and event wiring
* refactor(assets): align lib integrations with TypedEventBus and add module overviews
* chore(assets): remove vite-specific import ignore comments
* refactor(assets): remove deprecated forEach utility and use native forEach
Replace custom forEach wrapper with native .forEach() on NodeList, HTMLCollection (via querySelectorAll), and arrays. The utility was already marked @deprecated and all 30+ call sites use synchronous handlers, making the wrapper unnecessary. Also replace getElementsByClassName/getElementsByTagName with querySelectorAll for consistency.
- Delete utils/array.ts (no longer needed)
- Remove forEach export from utils/index.ts
- Refactor 11 module files to use native .forEach()
- Switch getElementsByClassName to querySelectorAll in theme.ts and charts.ts
* refactor(assets): split ChartsModule into independent lib files
Move ECharts, Mapbox GL, and TypeIt integrations from the ServiceContainer-managed ChartsModule into three standalone lib files (echarts.ts, mapbox.ts, typeit.ts). Each lib:
- Instantiates its own TypedEventBus
- Reads config from window.config.*
- Self-initializes on DOMContentLoaded
- Handles decrypt/re-init events independently
- Uses implicit idempotency via DOM element queries
Key improvements:
- Reduces ServiceContainer complexity
- Makes chart libs independently loadable
- Fixes partial decryption handling in echarts (only re-inits decrypted portion)
- Maintains consistency with aplayer/file-tree lib pattern
* refactor(assets): extract third-party libraries to standalone lib files
Extract twemoji, pangu, cookieconsent, watermark, lightgallery, and json-viewer
from modules into separate lib files for better separation of concerns. Each lib
is loaded conditionally via assets.html and handles its own initialization and
event lifecycle independently.
Additionally, unify fixit event handling by replacing document.addEventListener
calls with TypedEventBus.on() in EncryptionModule and MiscModule for consistent
event architecture.
Remove unused MiscService dependency from ContentModule.
* refactor(assets): unify js.Build pipeline and defaults
- extract shared helper partial function/js-build.html for js.Build + minify
- make plugin script renderer and Mermaid use the same js.Build logic
- default Build.minify to hugo.IsProduction when unset
- default Build.sourceMap to cond hugo.IsDevelopment "linked" "none"
- remove duplicated sourceMap branching in layout templates
- update js targetPath naming to .js (no explicit .min.js suffix)
* refactor(assets): extract comment systems to independent lib files
Extract comment system initialization logic from CommentModule into 7 independent
lib files (artalk, gitalk, valine, waline, utterances, twikoo, giscus). Each lib:
- Conditionally loads based on window.config.comment configuration
- Handles backend-specific initialization via DOMContentLoaded
- Manages its own theme synchronization and event listeners
- Is loaded conditionally in assets.html only when enabled
Simplify CommentModule to handle only:
- Comment section UI display and visibility toggle
- Shared lightGallery initialization utility (used by Artalk and Twikoo)
- Comment expiration handling
This reduces module complexity and enables per-backend lazy loading.
* refactor(assets): unify js.Build pipeline and consolidate PWA config
Enhance js-build.html to accept Build as bool/dict, auto-derive
targetPath from resource name (.ts → .js), and skip js.Build when
Build is false/omit. Simplify assets.html by removing explicit
targetPath dicts for all .ts lib builds. Consolidate enablePWA and
serviceWorkerURL into a PWA config object.
* refactor(assets): decouple toc from content module and add JSDoc headers
- Remove TocService dependency from ContentModule, toc now self-manages
- Rename initContent() → setup(), init() → setup() for toc
- Make initFootnotes private (#initFootnotes)
- Add multi-line JSDoc headers with Responsibilities to all modules,
main.ts, pages/link.ts, and head/color-scheme.ts
* refactor(assets): split types.ts into types/ directory module
* refactor(assets): simplify JS module architecture and expose typed window.fixit API
- Remove DI container (core/container.ts), use direct constructor calls
- Export shared eventBus singleton from core/event-bus.ts, remove 16 redundant instances
- Merge thin modules: SvgModule/CommentModule/LinkGuardModule into ContentModule/MiscModule
- Trim service interfaces to externally-used methods only
- Replace publicAPI() reflection with minimal typed window.fixit facade
- Expose public APIs: setThemeMode, eventBus, initContent, mask overlay, scroll state
- Extract setThemeMode from initSwitchTheme closure as public method
- Rename fixit:reset to fixit:re-encrypt, remove dead events
- Replace custom.js.example with custom.ts.example
- Update CLAUDE.md and copilot-instructions.md
* style(i18n): use semantic names for comment dividers instead of file paths
Replace file-path-based comment dividers (e.g. partials/base/header.html)
with semantic names (e.g. Header) across all 16 i18n files for consistency.
* chore(workflow): update cron schedule for library updates
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* fix(scss): remove top-level parent selector for Dart Sass compatibility
Dart Sass strictly disallows top-level parent selectors (`&`), which causes build failures on newer Hugo versions (e.g. 0.158.0+).
* feat(styles): refactor special styles for friends and search layouts
* fix(seo): restructure head partial, fix Twitter social and SEO improvements
- Split head template into dedicated partial hierarchy for better maintainability
- Add full Twitter Cards support with dynamic site and creator metadata
- Update social media link prefix from twitter.com to x.com and rename label to X
- Fix Twitter/X share button and Buffer via parameter handling
- Add Mastodon verification meta tags and rel="me" links
- Improve SEO structured data for both homepage and blog posts
- Add test site configuration and test avatar asset
---------
Co-authored-by: Cell <1024@lruihao.cn>
* BREAKING CHANGE: refactor with Dart Sass (supplement to #741)
* chore: update .gitignore to include .vercel and .env*.local
* CI: add build script for Hugo site deployment on Vercel
* CI: update build script for Hugo site deployment on Vercel
* refactor: update SCSS layout styles and introduce page-style mixin
* refactor: reorganize SCSS files and improve layout structure
* refactor: rename copy button classes and update related styles
- Added shellEmulator and trustPolicy configurations to pnpm-workspace.yaml to improve workspace behavior
- Fixed topic paths in the Hugo build scripts for the demo and test applications, replacing dynamic variables with relative paths
- Refactored update-version.ts, extracting regular expressions as constants to improve code readability and maintainability
* refactor(styles): unify theme properties and update color variables across stylesheets
* Implement theme mode support with light-dark color adjustments across stylesheets
- Added color-scheme support in _root.scss for light and dark modes.
- Replaced theme property mixins with light-dark function in various widget styles including _cell-tooltip.scss, _cookieconsent.scss, _fixed-button.scss, and others.
- Updated alert styles in _alert.scss to use light-dark for border and text colors.
- Refactored code syntax highlighting in _code.scss and _code-syntax/_index.scss to utilize light-dark for background gradients.
- Enhanced search input styles in _search.scss to adapt to theme mode.
- Modified theme switching logic in color-scheme.js and theme.js to support new theme mode structure.
- Adjusted APlayer and Valine styles to accommodate dark mode using new theme variables.
* feat(shortcode): add auto-dark shortcode for dark mode adaptation
* refactor(styles): update theme colors and improve box-shadow properties for better visual consistency
* feat(header): add scroll-state container queries and enhance header shadow effects
* feat(styles): enhance scroll behavior with overscroll-behavior adjustments for better UX
* feat(styles): update code&table styles and colors for improved visual consistency
* feat(styles): update color variables and improve font styling for better visual hierarchy
* feat(markup): add toggle code block functionality with multiple format support
* fix(assets): improve filename generation for code downloads
* feat(code): add `before_tabs` attribute support for tabbed code blocks
* feat(code): implement visibility control for first tab content in code blocks
* refactor: CSS variables to use fixit-var for consistency across styles
* refactor: reorganize CSS structure and consolidate imports for improved maintainability
* refactor: unify CSS variable usage and improve structure across stylesheets
* refactor: standardize CSS variable usage for layout
* refactor: standardize CSS variable usage for archive and special pages
* refactor: standardize CSS variable usage for single page
* refactor: standardize CSS variable usage for widgets
* refactor(css): refactors the border-radius mixin and adds the .rounded-full utility class
* refactor: standardize z-index usage across components
* refactor(css): removes deprecated compatibility mixins and replaces them with native CSS properties
* feat: unify color variable naming and update theme color values
- Rename `global-font-secondary-color` to `global-placeholder-color` for more accurate description of its purpose
- Update multiple style references to use the new `secondary` theme color variable
- Update theme color mapping to the new color values for improved visual consistency
- Fixed the use of search box placeholder colors and removed hard-coded transparency values
- Added color preview test documentation for easier verification of color rendering
- Cleaned up some duplicate dark mode styles and replaced them with unified CSS variables
* refactor: remove the `hr-background-color` variable and uses `global-border-color` uniformly
* feat(CSE): add dark theme style to Google CSE search box and results container
* fix(task-lists): fixed styling and rendering issues with nested task lists
* Fix deprecation warning with latest hugo version 0.156.0
* fix: use `hugo.Data` to replace the discarded `.Site.Data`
* chore(hugo): update Hugo version requirements to 0.156.0
---------
Co-authored-by: Cell <1024@lruihao.cn>
* feat(File Tree): add `file-tree` shortcode support
* feat(file-tree): add ignoreList parameter to file-tree shortcode
* feat(file-tree): enhance file-tree shortcode with ignoreList and folderSlash options
* feat(file-tree): enhance file-tree shortcode to support data mode
* feat(file-tree): enhance file-tree shortcode to support file mode
* feat(file-tree): improve content parsing in file-tree shortcode
* feat(file-tree): improve root path validation and error handling in filesystem mode
* test(file-tree): add unit tests for `file-tree` shortcode
* feat(file-tree): add file-tree code block rendering support
* refactor(file-tree): extract filesystem scanning to get-file-tree partial
Move directory traversal and root path validation to a separate partial function,
consolidating all filesystem-related logic in one place. This simplifies the
shortcode implementation and ensures a unified data format for rendering.
* docs(readme): extend code fence and shortcode support for file tree in documentation
* feat(file-tree): add fullRootName parameter for root path display in file tree
* feat(file-tree): add language parameter to get-file-tree function
* feat(file-tree): add highlightList parameter for file-tree shortcode
* perf(file-tree): add level param for get-file-tree function to descend only level directories deep
* feat: optimize code highlighting for diff language
* refactor: update codeblock configuration and enhance code wrapper functionality
* fix: extra blank lines would appear when copying lines containing code highlighting
* refactor: enhance code block wrapper functionality and add new styles (mac style)
* refactor: enhance code block normal mode
* feat: do noting for code block simple mode
* feat: add copy btn for code block modes mac and simple
* refactor: add code-related variables and update styles for code blocks and gist layout
* feat: update code copy button visibility on hover for larger screens
* feat: update code block mode attribute and remove mac wrapper
* feat!: code block parameters accurate to a single
Remove the `data-open` attribute and use `.open` instead.
* refactor: enhance initCopyCode method to accept optional button parameter
* feat: improve code/diagram copy button styles and transitions for better visibility
* fix: disable copy buttons for simple/mac mode code blocks when copyable set to false
* chore: rename normal partial to code-header
* feat: add preview and expand feature for code blocks (close#312)
* fix: adjust transition timing for code header and fade-out animation
* test: update code block test case
* docs: update comments for code highlight and markup configurations
* feat: adjust code header background color darkening for light and dark themes
* fix: hide aside and breadcrumb pseudo-elements on small screens
* perf: change the code copy button and code expand button to server-side rendering
* fix: the code expand button obscured the code content
* fix: update code background and header colors for improved visibility
* fix: ensure code copy button is only added for copyable code blocks
* feat(code block): add lineNosToggler and lineWrapToggler params and feature for code blocks
* refactor: code syntax highlighting styles
* fix: update background color for line numbers and ensure proper sticky effect
* feat(code block): add support for code file names in code blocks
* fix: code review for PR #665
* feat(i18n): add Japanese and Korean translations; update toggle options in multiple languages
* docs: update configurations and comments
* docs: improve error message clarity for shortcode parent block validation
* feat: add APlayer shortcode and audio support
* feat: support both APlayer and MetingJS
* feat: initialize APlayer when content decrypted
* refactor: update config script handling to support dynamic target paths
* refactor: refactor the output paths of the script and style shortcodes, and add test cases
* fix: remove redundant console log in script-style-test.md and update MathJax and Mermaid plugin configurations in assets.html