Commit Graph
426 Commits
Author SHA1 Message Date
ARIA 28802b1ad7 Fixes #16: Code quality enhancements Part 3
- Consolidate settings defaults: config.js is now single source of truth,
  state.js imports from config.js (eliminates ~300 lines of duplication)
- Validator factory: createStringValidator() unifies sanitizeLocationName/
  sanitizeItemName with configurable rules (blocked names, max length, rejects)
- Refactor promptBuilder: Extract getCharacterCardsInfo into buildNarratorCardInfo,
  buildGroupCardInfo, buildSingleCardInfo, appendCharacterFields
- Error handling: jsonRepair.js silent failures now log to console.debug
- Testing: Fix ESM support (babel.config.json + jest.config.cjs transform),
  add security.test.js with 24 tests for validator factory and security utilities
- Total: 78 tests passing (was 54)
2026-07-12 15:24:58 +02:00
ARIA df7d3b3a38 Fixes #13: CSS performance optimizations
- Add CSS minification support to build script (--minify flag)
  - Pure JS minifier: removes comments, whitespace, redundant chars
  - Reports size reduction percentage
  - Preserves CSS custom properties, data URIs, strings

- Refactor _08_themes.css: extend CSS custom properties pattern
  - Define theme-specific properties per theme (--rpg-content-bg,
    --rpg-content-box-shadow, --rpg-header-text-shadow, etc.)
  - Replace triple-theme selector duplication with single [data-theme]
    selectors — children inherit variables automatically
  - Reduces themes.css from 379 to ~220 lines
  - Reduces style.css from 305KB to 294KB (3.8% reduction)

- Add build:css:min npm script for production builds
- Add 9 tests for CSS build: minification, size reduction, CSS
  variable preservation, data URI preservation, theme refactoring
2026-07-12 14:55:36 +02:00
ARIA 9c0f09619d Fixes #11: Memory management enhancements
- Add clearDomCache() for jQuery object cache invalidation on panel rebuild
- Track all event handlers in on()/once() for complete cleanup by unregisterAllEvents()
- Migrate direct eventSource.on() calls to tracked onEvent() in index.js, injector.js, sillyTavernExpressions.js
- Add clearDebugLogs() called on CHAT_CHANGED to prevent memory accumulation
- Add trackJQueryHandler()/cleanupJQueryEvents() infrastructure for jQuery event cleanup
- Add comprehensive memory management tests (14 new tests, all passing)
2026-07-12 14:31:14 +02:00
ARIA 4e4b2328ba Fixes #9: Parser performance optimizations
- Pre-compile all regex patterns as module-level constants in parser.js and jsonRepair.js
- Add format detection caching (lastDetectedFormat, formatCacheHits) to skip redundant checks
- Add clearFormatCache() export for cache invalidation
- Add comprehensive test suite (33 tests) for parser and jsonRepair modules
- Fix regex escaping in dynamic patterns (statRegex, fieldRegex)
- Improve toFieldKey() regex specificity
2026-07-12 13:58:21 +02:00
ARIA f8894a9f3c Fix: Scope event handlers to container in userStats.js
Fixes critical bug identified by Zephyre_Review: event handlers used
global jQuery selectors instead of container-scoped selectors, causing
potential event handler leaks and scope mismatches.
2026-07-12 13:14:19 +02:00
ARIA 24c964c38d Fixes #7: Rendering performance optimizations
- requestAnimationFrame batching: rerenderRpgState() now batches all
  render calls into a single animation frame, reducing reflow/repaint costs

- Lightweight change detection: Render functions use updateIfChanged() to
  skip DOM updates when content hasn't changed, and only re-bind event
  handlers when the DOM was actually updated

- CSS content-visibility: Added content-visibility: auto with
  contain-intrinsic-size to inventory and equipment containers, deferring
  rendering of off-screen content

New file: src/systems/rendering/renderUtils.js (rendering utilities module)
Updated: All render modules + sillytavern.js integration + style.css
2026-07-12 13:10:17 +02:00
ARIA c14c1417c1 Fixes #5: Refactor code quality - Part 1
- Split index.js from 1,567 lines to 456 lines (73% reduction)
  - Extracted settings event listeners to src/systems/ui/settingsListeners.js
  - Extracted settings panel to src/core/settingsPanel.js
  - Simplified initUI() and main initialization block

- Modularized style.css into 28 logical CSS modules in src/styles/
  - Added build script (npm run build:css) to concatenate modules
  - Modules: panel, components, user-stats, info-box, thoughts, settings,
    themes, modals, mobile, inventory, quests, equipment, encounters,
    weather, music-player, FAB widgets, strip widgets, etc.

- Updated package.json with build:css script and type: module

No functional changes - pure refactoring for maintainability.
2026-07-12 12:24:21 +02:00
ARIA 8626d0476f Fixes #2: increase equipment stat limit from +20 to +99
- Update HTML input max attribute from 20 to 99 in generateStatCheckboxes()
- Update JS clamping logic Math.min(20, val) to Math.min(99, val) in saveEquipmentItem()
2026-07-04 20:39:20 +02:00
ARIA 54e1b0c2b2 Fix equipment vanishing after save: preserve equipment in loadChatData 2026-07-03 12:07:46 +02:00
ARIA 9720a7befe Fix Equipment modal and json filter 2026-07-03 11:53:35 +02:00
ARIA 10cfe581ac feat: add Equipment tab with slot-type validation
Add a new Equipment tab to manage player gear and stat bonuses.

Features:
- 19 equipment slots across 8 categories (helmet, necklace, body armor, gloves, pants, shoes, rings, accessories)
- Type-to-slot validation: each type has max equipped limits (1 helmet, 10 rings, 3 accessories, etc.)
- Auto-slot assignment: equipping a ring fills the first available ring slot
- Stat bonuses from equipped items display on RPG attributes (e.g. STR 10 +2)
- Create/edit modal with stat checkboxes per RPG attribute
- Inventory list for unequipped items

Architecture:
- Shared constants in src/systems/equipment/constants.js
- Category-based types (Ring, Accessory) with auto-slot assignment
- v7 migration converts legacy slot-specific types to generic categories
- Full i18n support for all UI strings

Files:
- New: src/systems/equipment/constants.js
- New: src/systems/interaction/equipmentActions.js
- New: src/systems/rendering/equipment.js
- Modified: state.js, persistence.js, template.html, index.js
- Modified: userStats.js, desktop.js, mobile.js, layout.js, modals.js
- Modified: apiClient.js, sillytavern.js, style.css, en.json
2026-07-03 11:11:23 +02:00
Spicy_Marinara 38fb3d8c51 Fix tracker issues and add deprecation notice 2026-05-04 13:08:52 +02:00
Spicy Marinara 2d63e51962 Merge pull request #142 from CristianAUnisa/fix-parser
Harden parser handling for noisy and non-critical tracker responses
2026-05-04 12:21:14 +02:00
CristianAUnisa 45c074499c Fix tracker injection context ordering and placeholder timing 2026-04-25 19:39:07 +02:00
CristianAUnisa ad66410f81 Harden parser handling for noisy and non-critical tracker responses 2026-04-25 17:35:23 +02:00
Tremendoussly 60c430919b Handle swipe-deleted expression refresh and add zh-cn display strings 2026-04-14 17:43:57 +02:00
Tremendoussly 2ee081a619 Clean up post-merge delete handler artifacts 2026-04-14 17:08:42 +02:00
Tremendoussly 19ebf1a834 Merge upstream/main into doom-lite-expression-sync-v2 2026-04-14 16:21:07 +02:00
jakstein 781b28e02b replace filter tags with ofilter to avoid HTML/SVG collision 2026-04-08 12:30:43 +02:00
Spicy Marinara 05655fecf7 Merge branch 'main' into main 2026-04-02 20:41:21 +02:00
Spicy Marinara 4e36667890 Merge pull request #130 from Alamion/main
A few small FRs
2026-04-02 20:39:09 +02:00
dd178 96d589adc0 ```
feat(encounter): 添加战斗遭遇界面国际化支持和优化错误处理

- 添加新的中文翻译项包括战斗结果状态、错误消息、界面标签等
- 将硬编码的文本替换为国际化翻译调用
- 添加战斗遭遇初始化和处理过程中的错误处理消息
- 增加确认对话框的本地化文本

fix(regex): 更新正则表达式以支持Unicode字符

- 将多个文件中的ASCII限定正则表达式 /[^a-z0-9]+/g 替换为Unicode感知的
  /[^\p{L}\p{N}]+/gu 以正确处理非ASCII字符
- 修复jsonMigration.js中的字符过滤逻辑

feat(weather): 为中文添加天气模式识别规则

- 在WEATHER_PATTERNS_BY_LANGUAGE中为zh-cn语言添加完整的天气关键词模式
- 支持中文天气条件的自动识别和效果应用

style(fab): 添加nowrap样式防止文本换行

- 在FAB组件中添加white-space: nowrap样式属性
```
2026-03-23 03:27:12 +08:00
dd178 55aa2a1e6a ```
feat(i18n): 添加简体中文语言选项并扩展国际化支持

添加了简体中文(zh-cn)语言选项到设置页面的语言选择下拉菜单中。

同时新增了大量国际化字符串。

fix(parser): 提高解析器的鲁棒性

现在会遍历所有json对象检测统一格式,即使AI响应中包含多个JSON对象也能正确识别统一格式。
```
2026-03-22 14:07:11 +08:00
Tremendoussly 215a122797 Fix clear cache to remove per-swipe tracker data 2026-03-15 23:11:50 +01:00
Tremendoussly 1a11699522 Rename expression sync to thought-based expression portraits and clean up compatibility solutions 2026-03-15 22:18:25 +01:00
Tremendoussly c79c941871 Replace speaker-based expression sync with thoughts-driven sync 2026-03-15 21:38:45 +01:00
Tremendoussly 9ef5b16663 Break expression sync cycle and guard portrait lookup 2026-03-15 17:38:39 +01:00
Tremendoussly 1d297aeecf Gate below-chat expression sync and localize inline thoughts 2026-03-15 16:51:20 +01:00
Tremendoussly 4d2afafbaf Harden synced expression portrait URLs 2026-03-15 15:54:46 +01:00
TremendousslyandCopilot Autofix powered by AI 08097e8b41 Translate new display settings for fr, ru, and zh-tw
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-15 15:02:42 +01:00
Tremendoussly 0499cc6961 Keep Present Characters visible during pending swipes 2026-03-09 13:49:32 +01:00
Tremendoussly c73c0c2bb6 First attempt at adding expression sync 2026-03-08 23:25:22 +01:00
Tremendoussly 2f98686e60 Add optional below-chat Present Characters panel (#3) 2026-03-08 22:58:42 +01:00
Tremendoussly ae9e44eafb Alternate Thoughts Display (#2)
This PR adds an optional alternate display mode for RPG Companion thoughts.

When enabled, thoughts are shown as compact expandable cards directly below the relevant latest character message. When disabled, RPG Companion keeps its original corner/overlay thought bubbles, so the existing behavior is preserved unless the user explicitly switches modes.

The new display mode is built on top of RPG Companion’s existing thoughts system rather than replacing it. Thought UI now updates more reliably across new generations, swipe changes, message deletion, chat reload/re-entry, and live mode toggling, so thoughts stay attached to the correct visible message instead of lingering on stale UI. It also improves restoration of RPG Companion state after reopening a chat, making thoughts and related tracker data more consistent with the current chat view.
2026-03-08 19:54:38 +01:00
Alamion 933d78e192 feat: localization validator for missing internationalization
fix: trackerEditor.js doesn't have syntax issues anymore.
2026-03-02 20:54:15 +03:00
Daryl 03345b81f4 Update Refresh RPG Info buttons in index.js to call commitTrackerDataFromPriorMessage() before updateRPGData() 2026-02-26 17:59:45 -04:00
Daryl c307f1a1bc Revert Copilot mistake in inheriting prior swipe data; testing in practice reveals inheritance does not work after applying its suggestion. 2026-02-26 17:32:16 -04:00
Daryl c442314c10 Remove redundant data commit call in sillytavern.js to prevent n-2 tracker data commits in fresh message generations 2026-02-26 17:09:33 -04:00
Spicy MarinaraandCopilot ce48ac0c34 Update src/systems/integration/sillytavern.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-26 01:48:15 +01:00
Spicy MarinaraandCopilot 8ea9044492 Update src/core/persistence.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-26 01:47:42 +01:00
Spicy MarinaraandCopilot 9213d264a0 Update src/systems/integration/sillytavern.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-26 00:40:22 +01:00
Daryl StreeteandCopilot 32280d60ef Update src/systems/integration/sillytavern.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 19:32:54 -04:00
Spicy MarinaraandCopilot 75c8f9b63a Update src/systems/ui/trackerEditor.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 23:58:51 +01:00
Spicy MarinaraandCopilot b1098a2721 Update src/systems/ui/trackerEditor.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 23:58:44 +01:00
Spicy MarinaraandCopilot 131b28fc1f Update src/systems/ui/trackerEditor.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 23:58:37 +01:00
Spicy MarinaraandCopilot 7305af8f88 Update src/systems/ui/trackerEditor.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 23:58:26 +01:00
Spicy MarinaraandCopilot 66a22c74d0 Update src/utils/transformations.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 23:58:02 +01:00
Spicy MarinaraandCopilot 5b2cb331c8 Update src/core/persistence.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 23:57:30 +01:00
Spicy MarinaraandCopilot bb202aca9c Update src/systems/integration/sillytavern.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 23:57:24 +01:00
Spicy MarinaraandCopilot 733647084a Update src/systems/integration/sillytavern.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-25 23:57:16 +01:00