Skip to content

v2.9.0 - #590

Merged
evannotfound merged 71 commits into
mainfrom
dev
Feb 20, 2026
Merged

v2.9.0#590
evannotfound merged 71 commits into
mainfrom
dev

Conversation

@evannotfound

Copy link
Copy Markdown
Owner

Highlights

  • New Callout writing module ({% callout %}), plus refreshed Tabs / Button / Grid / Folding tag APIs with safer parsing/rendering.
  • Masonry page upgrade: lazy batch loading, optional image width/height to reduce CLS, improved image viewer + optional EXIF panel.
  • New comment systems: Artalk and Utterances, with Swup single-page compatibility.
  • SPA runtime improvements: lifecycle hooks + page-scoped cleanup to prevent duplicate listeners on navigation.
  • Home banner social links now support ordered arrays (legacy map format is auto-converted but deprecated).

User-Facing Changes

Writing modules

  • Callout: new {% callout %} module; legacy note tags still work but are deprecated and emit one-time warnings.
  • Tabs: accessible button-based navigation (role=tablist/tab), improved tab id normalization + auto tab group name generation, safer nested-tag rendering.
  • Button: enhanced {% button %} supports named args (text/url/icon/image/size/align/title/target/rel); legacy {% btn %} and {% cell %} are deprecated.
  • Grid: new {% grid %} container with configurable cols and gap; legacy {% btns %} / {% buttons %} are deprecated.
  • Folding: supports named args (title, class/classes/style, open) and safer markdown rendering.

Comments

  • Add Artalk (comment.system: artalk) and Utterances (comment.system: utterances) with SPA-safe init and theme switching support.

Masonry + Image viewer

  • masonry/data.json generator; client-side masonry loads in batches (page_templates.masonry.batch_size, page_templates.masonry.initial_batch_size).
  • Optional per-image width/height in masonry data to reduce layout shift.
  • Optional EXIF support: if a masonry entry has exif: true, EXIF panel becomes available (subject to CORS/metadata availability).

Home banner social links

  • home_banner.social_links.links and home_banner.social_links.qrs now support array format to preserve ordering.
  • Old object-map format is automatically converted but deprecated (ordering is unstable due to Hexo config merge behavior).

Config Additions / Changes

  • _config.yml
    • comment.system: add utterances, artalk
    • comment.config.artalk, comment.config.utterances
    • plugins.mermaid.theme.light / plugins.mermaid.theme.dark
    • page_templates.masonry.batch_size / page_templates.masonry.initial_batch_size
    • home_banner.social_links.links / qrs: prefer arrays

Deprecations (warn-once)

  • Writing tags:
    • legacy notes: {% note %}, {% notes %}, {% subnote %}, {% noteL %} / variants, {% subwarning %}
    • legacy buttons/grid: {% btn %}, {% cell %}, {% btns %}, {% buttons %}
  • Config:
    • home_banner.social_links.links / qrs object-map format

Docs

Verification

  • npm install
  • npm run build
  • (Optional) regenerate a Hexo site: hexo clean && hexo g

Maintainer Notes

  • Release tooling updated: removed standard-version scripts; added npm run preview for local preview host.

Copilot AI and others added 30 commits January 13, 2026 00:02
…test-first (#576)

* Initial plan

* Create donations.md with 2025 entry for 1ronName

Co-authored-by: EvanNotFound <68590232+EvanNotFound@users.noreply.github.com>

* Add 2025 donation entry to DONATION.md and reverse order to latest-first

Co-authored-by: EvanNotFound <68590232+EvanNotFound@users.noreply.github.com>

* Add year 2023 to all past donation entries

Co-authored-by: EvanNotFound <68590232+EvanNotFound@users.noreply.github.com>

* Fix chronological order of donation entries

Co-authored-by: EvanNotFound <68590232+EvanNotFound@users.noreply.github.com>

* Update sponsorship list header to reflect reverse chronological order

Co-authored-by: EvanNotFound <68590232+EvanNotFound@users.noreply.github.com>

* Update donation method for Jan 12, 2025 entry to 微信赞赏码

Co-authored-by: EvanNotFound <68590232+EvanNotFound@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: EvanNotFound <68590232+EvanNotFound@users.noreply.github.com>
- add lifecycle.js to manage ready, page view, and visit start callbacks
- bind swup hooks to lifecycle events for page view and visit start
- dispatch custom event on swup ready for external binding
- update main.js to use lifecycle onReady and onPageView for initialization
- refactor subtitle typed.js initialization logic for robustness
- update swup.ejs to expose swup instance globally and dispatch ready event
- update scripts.ejs and home-banner.ejs to handle subtitle config more flexibly
- bump tailwindcss to v4.1.18 with updated styles and utilities
…d scripts

- add mermaid theme config for light and dark modes in _config.yml
- enhance config export to normalize mermaid theme and subtitle config
- refactor mermaid plugin initialization to support dynamic theme switching
- refactor mode toggle to update mermaid theme on light/dark mode switch
- improve lazyload, masonry, bookmarkNav, categoryList, essays, tabs, typed plugins
- add page scope and lifecycle hooks for better resource management
- refactor main.js to initialize globals once and page-specific scripts on page view
- refactor utils.js for scroll handling, font size adjustment, and other UI features
- add styleStatus state management for persistent UI preferences
- improve image viewer with zoom, drag, keyboard navigation, and lazyload support
- update localSearch tool with better event handling, data fetching, and rendering
- refactor scrollTopBottom and tocToggle tools with event delegation and signal support
- remove deprecated once.js and consolidate event listener management with AbortController
- rename multiple init flags to didInit for consistency across modules
- extract scroll, layout, and sideTools utilities into separate files
- simplify utils.js by delegating to extracted utility modules
- improve code clarity by removing redundant properties and methods
- maintain existing behavior with improved modular structure
…d retries

- Refactor giscus comment script to support SPA with dynamic config updates
- Add retry logic and path check to gitalk comment initialization for SPA
- Add retry logic and path check to twikoo comment initialization for SPA
- Add retry logic and path check to waline comment initialization with instance destroy
- Remove inline home-banner QR code script; implement as external module with event listeners
- Refactor article expiration date script to external module and update usage
- Convert notes styles to use CSS variables for colors and backgrounds
- Update main.js to import and initialize new homeBanner and expirationDate modules
- Add event listener for page refresh to reinitialize page components on SPA navigation
- Refactor hbe.js to dispatch page refresh event after decrypting content instead of direct calls

BREAKING CHANGE: Comment system scripts now support SPA navigation with retries and dynamic updates; home banner QR code and expiration date scripts moved to external modules requiring updated imports and initialization in main.js
- add callout.js to replace legacy note and note-large modules
- remove note.js and note-large.js legacy modules
- update notes.styl to use callout styles and variables
- enhance home-content.ejs sticky label with backdrop blur and higher z-index
- restyle article-content.ejs expiration note as callout with new markup and colors
- update tailwind CSS build with new variables and backdrop-blur-sm utility
- hide scrollbars across browsers in article reader dialog
- Load masonry items from generated JSON with lazy batches and spinner
- Add masonry data generator and config for batch sizes
- Enhance image viewer with navigation controls and accessibility texts
- Add masonry and viewer translations for all supported languages
- Read masonry batch sizes from nested config with warnings if missing
- Switch masonry page to raw layout and adjust styling and lazyload images
- Improve global scrollbars and image viewer dragging performance and behavior
- Update expiration callout layout and spacing in article view
- Replace callout icon and border styling for expiration notice
- Replace `p-[1px]` with `p-px` on post author avatar
- Regenerate Tailwind build to include `p-px` utility
- Document tooling, build commands, and generated assets
- Describe JS/CSS style, config flow, and CI expectations
- Add guardrails and workflow notes for automated agents
- Add width/height to masonry data when valid positive integers
- Preserve aspect ratio via CSS and avoid layout shifts in masonry grid
- Swap loading.svg placeholder for 1x1 gif and use native lazy/decoding
- Guard masonry batches and fetch with abort/isConnected checks
- Switch renderJS helper to use raw js paths when developer mode is on
- Add helper to remove min-h-screen class from masonry container
- Call helper after initial masonry batch append to update layout
- Add min height class to masonry container to fill viewport
- Remove min height class once masonry items load
- Add preview npm script for local preview host
- Preserve swig-style tag blocks during markdown rendering
- Ignore tag parsing inside fenced code blocks
- Dedent HTML-only indented lines without breaking code fences
- Make folding and tabs tag handlers async-safe in Hexo
- Switch tabs.js to use a single delegated click listener
- Export initTabs with optional abort signal and guard double init
- Trim leading whitespace before inline callout markdown render
- Simplify simple/titled callout markup and fade vertical accent bar
- Normalize first-child spacing inside tab panels
Fix rendering issues when notel exists in tabs, fix issue#572
evannotfound and others added 23 commits February 17, 2026 15:34
- Update checkout and setup-node to v6 in aliyun-cdn-publish workflow
- Update checkout and setup-node to v6 in build-and-commit workflow
- Update checkout and setup-node to v6 in npm-publish workflow
- Update checkout and setup-node to v6 in pr-build-check workflow
- Update checkout and setup-node to v6 in prod-deploy workflow
ci: add PR preview workflows and update deploy pipelines
- retry Artalk init until script and container are ready
- ensure CSS and JS load only once across PJAX navigation
- escape Artalk server and site config to prevent HTML injection
修复菜单栏“书签”没有多语言翻译的问题,并添加了artalk评论系统
- Add GitHub Action to comment on and close labeled issues on release
- Skip closing issues for draft or prerelease releases
- add opacity to expire callout divider for softer visual
- support named args for callout tags including variant and classes
- refactor folding tag to use shared markdown-swig renderer
- rewrite tabs tag to use markdown-swig and tag-args helpers
- add markdown-swig utils to safely render markdown with swig tags
- add tag-args utils for positional and named tag arguments parsing
- Move config deprecations module to scripts/deprecations namespace
- Add html tagged template helper for compact, indented markup
- Refactor callout markup to use html helper and improve structure
- Emit deprecation warnings for legacy note tags with replacement hints
- Require explicit hexo instance in renderMarkdownTagSafe for safety
- Update folding and tabs modules to use new renderMarkdownTagSafe API
- Bump Tailwind build from v4.1.18 to v4.2.0 in compiled CSS
- Replace tab anchors with ARIA-compliant tab buttons
- Update tab panes to use hidden attribute instead of display none
- Restyle tabs container and tablist with new Tailwind classes
- Prevent markdown styles inside tab headers via .not-markdown
- Extend Tailwind sources and add new radius design tokens
- Render tab panes with data-state and hidden instead of active class
- Update tabs plugin to toggle data-state on panes
- Simplify tabs styles by removing active class display rules
- add unified button tag with named args and legacy parsing
- replace btn/btns/buttons/cell with deprecated wrappers and warnings
- introduce grid tag with configurable columns and gap
- update folding tag to support named args, open state and new styles
- tweak tabs and folding/button styles for consistent theming
- Normalize tab tokens to safe, predictable ids
- Guard tab click handler when target pane is missing
- Allow numeric-only arg to set active tab without a name
- Generate normalized, incrementing auto tab names without warnings
style: refresh writing modules inlcuding tab
Repository owner deleted a comment from augmentcode Bot Feb 20, 2026
@evannotfound
evannotfound merged commit f0b63d2 into main Feb 20, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants