Commit graph

1217 commits

Author SHA1 Message Date
callumalpass
d2aa98a2d6 fix: prevent #task tag addition when using property identification
When taskIdentificationMethod is set to 'property', the #task tag should
not be added to tasks during updates. This change ensures the updateTask
method respects the configured identification method and filters out the
task tag when using property-based identification.

Fixes #570
2025-09-28 00:07:16 +10:00
callumalpass
849433fa6a Merge branch 'time-statistics' 2025-09-27 20:05:42 +10:00
callumalpass
2bb22d4fdb Clean up PR: remove unrelated changes and fix test
- Revert build system changes (outfile paths)
- Revert version bump to maintain current 3.23.4
- Fix flawed timezone test by replacing with consistent date formatting test
- Keep core time statistics feature intact
2025-09-27 20:04:03 +10:00
callumalpass
e343702db2 improve: add error handling to save button disable logic
Wrap save button disable/enable in try/finally to ensure button
is always re-enabled even if handleSave() throws an error.
2025-09-27 19:46:42 +10:00
Matt Hamlin
47718c32cb Disable save buttons to prevent creating duplicate tasks 2025-09-27 19:46:42 +10:00
callumalpass
2e57ea6fa3
Merge pull request #731 from elijahmanor/patch-1
Update browser extension repo in README.md
2025-09-27 19:45:18 +10:00
Elijah Manor
96f16c7d81
Update browser extension repo in README.md
Fix URL to the browser extension repo
2025-09-25 11:38:54 -05:00
Sergen Aras
2ed205dd5c A time display based on the ‘timeEstimate’ property within tasks has been added to the ‘task & project statistics’ section. 2025-09-23 23:44:00 +03:00
Sergen Aras
19229b3cf9 Revert "Update README.md"
This reverts commit e475beb91a.
2025-09-23 22:34:52 +03:00
callumalpass
11f2e0742a fix: support hyphens in NLP tag parsing
Updates regex pattern to include hyphens in tag extraction,
resolving issue where tags like #Home-Assistant were split
incorrectly.

Fixes #568
2025-09-23 22:47:05 +10:00
callumalpass
c86cc961f7
Merge pull request #709 from callumalpass:feat/translations
feat: add i18n support
2025-09-23 22:40:51 +10:00
callumalpass
50e0835e03 feat: display language names in their native scripts (endonyms)
Language names in the settings dropdown are now displayed in their native
scripts rather than being translated to the current UI language. This follows
standard UX practices and provides better user experience.

Changes:
- Added `getNativeLanguageName()` method to I18nService
- Updated II18nService interface to include new method
- Modified settings dropdown to use native language names
- Updated language change notifications to use native names

Native language names (endonyms):
- English → English
- French → Français
- German → Deutsch
- Spanish → Español
- Russian → Русский
- Chinese → 中文
- Japanese → 日本語

Benefits:
- Users can instantly recognize their language regardless of current UI language
- Eliminates confusion when switching between languages
- Follows international UX standards
- More accessible for non-English users

The "System default" option remains translated to the current UI language
as it's a UI concept rather than a language name.
2025-09-23 22:38:26 +10:00
callumalpass
5b749f7ffa feat: improve i18n system default and reorganize settings
This commit includes two key improvements to the internationalization system:

1. **Fix "System default" language detection priority**:
   - Now prioritizes Obsidian's configured language (getLanguage() API)
   - Falls back to browser/system locale, then English
   - Resolves issue where TaskNotes stayed in English even when Obsidian was set to other languages
   - Added comprehensive documentation explaining the priority order

2. **Move i18n language settings to General tab**:
   - Relocated UI Language section from Features tab to General tab
   - More intuitive placement for core plugin configuration
   - Maintains all functionality including real-time language switching

3. **Fix FilterBar tests for translation system**:
   - Updated FilterBar.subgroups.test.ts to work with new translation system
   - Added proper i18n mocks for test compatibility
   - Tests now expect translated text ('Group' instead of 'GROUP')

The "System default" setting now works intuitively for Obsidian users:
- Before: Obsidian set to French → TaskNotes stays English (confusing)
- After: Obsidian set to French → TaskNotes uses French (expected behavior)

Files modified:
- src/main.ts: Enhanced getSystemUILocale() with proper priority order
- src/settings/tabs/generalTab.ts: Added UI Language section
- src/settings/tabs/featuresTab.ts: Removed UI Language section
- tests/unit/ui/FilterBar.subgroups.test.ts: Fixed i18n test compatibility
2025-09-23 22:27:01 +10:00
callumalpass
36461a2cb4 fix: add i18n mocks to fix failing tests in translation feature
This commit resolves test failures caused by missing i18n translation
service mocks. The translation feature (PR #709) added internationalization
support but tests were failing due to undefined i18n.translate method.

Changes:
- Added comprehensive i18n mock to PluginFactory in mock-factories.ts
- Updated TaskCreationModal test files to include i18n mocks
- Fixed MigrationModal test constructor to include required plugin parameter
- Added translation key mappings for common test scenarios

Test Results:
- Before: 30 failing tests, 1112 passing
- After: 0 failing tests, 1142 passing 

All translation-related tests now pass successfully.
2025-09-23 22:11:11 +10:00
callumalpass
2a3c04016b feat: add German, Spanish, and Japanese language support
- Add complete German (de) translation with 1305 keys
- Add complete Spanish (es) translation with 1305 keys
- Add complete Japanese (ja) translation with 1305 keys
- Update i18n index to register new languages
- Update existing language files with new language entries
- Sync i18n manifest and state files
- All languages now have 100% translation coverage
2025-09-23 22:11:11 +10:00
callumalpass
e5bad6ca00 fix: add missing date modal translations and fix hardcoded strings
Fixed translation issues in DueDateModal and ScheduledDateModal where users
were seeing raw translation keys instead of properly translated text.

**Issues fixed:**
- DueDateModal was using correct translation calls but keys didn't exist
- ScheduledDateModal had hardcoded English strings instead of translations

**Changes:**
- Added complete modals.dueDate translation section to all 4 languages
- Added complete modals.scheduledDate translation section to all 4 languages
- Replaced all hardcoded strings in ScheduledDateModal with translation calls
- Updated i18n manifest and state files (42 new translation keys: 1260 → 1302)

**Translation coverage:**
- English: Complete with proper accessibility labels and error messages
- French: Complete with proper French translations
- Russian: Complete with proper Russian translations
- Chinese: Complete with proper Chinese translations

Both modals now show fully translated text instead of keys like "modals.dueDate.Title"
2025-09-23 22:11:11 +10:00
callumalpass
3915413979 fix: pass plugin to DateContextMenu for proper translations
DateContextMenu was showing raw translation keys instead of translated text
because the plugin instance wasn't being passed to the constructor. This
prevented the component from accessing the i18n service.

- Add plugin parameter to both DateContextMenu instantiations in TaskModal
- Fixes issue where keys like 'modals.dueDate.Title' appeared instead of translated text
- All required translation keys already exist in contextMenus.date section
2025-09-23 22:11:11 +10:00
callumalpass
94fa283fa4 fix: add Russian and Chinese translations to i18n service
Added imports for ru and zh translation resources to the i18n index file.
This resolves the issue where translation keys were appearing instead of
translated values in the UI, particularly in date modals.

- Import ru and zh translation modules
- Add ru and zh to translationResources object
- Ensures all 4 languages (en, fr, ru, zh) are available at runtime
2025-09-23 22:11:11 +10:00
callumalpass
d0ab3fe639 fix: resolve i18n sync issues and complete translations
Fixed unterminated string literals in Russian and Chinese translation files that were preventing npm run i18n:sync from working correctly. Both files had multiline strings that needed proper escaping with \n\n instead of literal line breaks.

- Fix syntax errors in src/i18n/resources/ru.ts webhook confirmation message and NLP placeholder
- Fix syntax errors in src/i18n/resources/zh.ts webhook confirmation message and NLP placeholder
- Update i18n manifest and state files
- All 4 languages (en, fr, ru, zh) now have 100% translation coverage with 0% stale entries
2025-09-23 22:11:11 +10:00
callumalpass
71ba222cfe feat: translate command palette entries 2025-09-23 22:11:11 +10:00
callumalpass
31d9f675f0 chore: localize agenda and filter UI strings 2025-09-23 22:11:10 +10:00
callumalpass
c721a67230 feat: complete fr locale and fix i18n tooling 2025-09-23 22:10:35 +10:00
callumalpass
eb7be73987 feat: implement comprehensive i18n CI/CD system
- Add i18n management script with sync, verify, and status commands
- Integrate GitHub Actions workflow to enforce translation consistency
- Generate initial manifest (1209 keys) and state files for English/French
- Add package.json scripts for easy i18n workflow management
- Create comprehensive I18N_GUIDE.md with usage examples and best practices

Features:
- Automatic detection of missing/stale translations
- CI/CD enforcement preventing deployment of untranslated strings
- Hash-based tracking system for source string changes
- Support for multiple locales with individual progress tracking
- TypeScript file parsing with automatic cleanup

This ensures translation quality and prevents regressions while providing
clear workflows for both developers and translators.
2025-09-23 22:10:35 +10:00
callumalpass
38cdaca7f0 feat: finalize i18n implementation and fix remaining hardcoded strings
- Complete translation of features tab hardcoded strings
- Translate all webhooks modal hardcoded strings and notices
- Add comprehensive translation keys for data storage, notifications, performance settings
- Update webhook and subscription confirmation dialog structures for consistency
- Fix TypeScript compilation errors across 35+ files
- Add missing plugin parameters to FilterHeading and migration modal calls
- Update translation function signatures to support parameter interpolation
- Remove obsolete getTranslate() function references
- Ensure successful build with no TypeScript errors

This completes the comprehensive i18n implementation with 300+ translation keys
covering the entire UI in both English and French locales.
2025-09-23 22:10:35 +10:00
callumalpass
c027fd6511 feat: complete comprehensive UI translation across entire codebase
VIEWS:
- NotesView.ts: title, refresh button, indexing disabled notice, empty states
- StatsView.ts: all section headers, filters, date range, min time labels
- KanbanView.ts: new task button, loading/error states, notices, add card buttons
- AgendaView.ts: today button, refresh calendars, expand/collapse tooltips, empty states
- TaskListView.ts: expand/collapse group tooltips, no tasks found message

MODALS:
- TaskSelectorModal.ts: title, placeholder, instructions, due date labels, notices
- DueDateModal.ts: complete translation with datetime sections, quick options, validation
- MigrationModal.ts: full migration workflow including progress, warnings, buttons
- ScheduledDateModal.ts: title, task label, datetime sections
- UnscheduledTasksSelectorModal.ts: task scheduling interface
- ConfirmationModal.ts & TextInputModal.ts: default button text using common keys

UI COMPONENTS:
- ICSCard.ts: untitled event, all day labels, calendar event text
- NoteCard.ts: created label, daily note badges and tooltips
- FilterHeading.ts: view names and count display
- PropertyVisibilityDropdown.ts: property groups and individual property names
- FilterBar.ts: complete filter interface with 70+ translation keys
- ReminderContextMenu.ts: reminder options and quick reminder times
- RecurrenceContextMenu.ts: recurrence patterns and clear options

SERVICES:
- PomodoroService.ts: session notices, timer states, migration messages
- ICSSubscriptionService.ts: calendar error messages, access denied, fetch failures
- CalendarExportService.ts: export success/failure, download notices
- InstantTaskConvertService.ts: conversion workflow notices
- ICSNoteService.ts: note creation notices
- TaskService.ts: task management notices
- AutoExportService.ts: auto-export failure notices

Added 300+ translation keys to both English and French resources.
All user-facing UI now fully supports language switching.
2025-09-23 22:05:35 +10:00
callumalpass
465e9236bd feat: complete comprehensive settings translation work
- Translate all remaining settings tabs with full English/French support
- generalTab.ts: Task storage, identification, folder management, interaction
- appearanceTab.ts: Task cards, filenames, display, calendar, UI elements
- defaultsTab.ts: Basic defaults, dates, reminders, templates, conversion
- taskPropertiesTab.ts: Statuses, priorities, field mapping, custom fields
- integrationsTab.ts: Bases, calendar, ICS export, HTTP API, webhooks

All settings are now fully internationalized following established i18n patterns.
Users can switch between English and French for complete UI translation.
2025-09-23 22:01:57 +10:00
callumalpass
1afcbbe981 feat: complete featuresTab.ts translation work
- Add comprehensive translation keys for all remaining featuresTab.ts strings
- Translate notifications, sound, data storage, overdue, indexing, suggestions,
  time tracking, recurring tasks, and timeblocking sections
- Update all hardcoded strings to use translation keys with French translations
- featuresTab.ts is now fully translated

Other settings tabs still need translation work.
2025-09-23 22:01:57 +10:00
callumalpass
a2a57a2622 feat: translate remaining hardcoded strings in components and partial settings
- Fix DateContextMenu.ts to use translation keys for modal UI
- Translate recurrence options and context menu items in TaskContextMenu.ts
- Add subtask loading state translations in TaskCard.ts
- Begin settings translation work in featuresTab.ts (notifications, sound, storage)
- Add corresponding French translations for all new keys

Still need to complete remaining settings tab translations.
2025-09-23 22:01:57 +10:00
callumalpass
983810f8f5 feat: translate ICS event context menu strings 2025-09-23 22:01:57 +10:00
callumalpass
f3dcd251a3 feat: translate task modal base and task edit flows 2025-09-23 22:01:57 +10:00
callumalpass
6e1b46177c feat: translate task creation modal actions and notices 2025-09-23 22:01:57 +10:00
callumalpass
a26a17271c feat: localize storage location confirmation modal 2025-09-23 22:01:57 +10:00
callumalpass
8add49cc63 feat: add translation framework and French locale 2025-09-23 22:01:57 +10:00
callumalpass
f8e9dfcd11
Merge pull request #713 from antonio:antonio/allow-slashes-in-tag-normalization
feat: allow slashes in hierarchical tags and contexts
2025-09-23 21:31:09 +10:00
callumalpass
a66ccec762
Merge pull request #698 from renatomen/feat/view-subgroups
feat/Add Hierarchical Subgrouping to TaskListView and AgendaView
2025-09-23 21:21:00 +10:00
Sergen Aras
0bc0c36517 time statistics 2025-09-23 08:58:43 +03:00
Antonio Santos
6eeec628fb feat: allow slashes in hierarchical tags and contexts
- Update normalizeTag to preserve slashes for hierarchical tags (e.g. #project/frontend)
- Update normalizeContext to preserve slashes for hierarchical contexts (e.g. @home/computer)
- Refactor both functions to eliminate code duplication
- Add comprehensive unit tests for both functions
2025-09-22 13:26:35 +02:00
callumalpass
e475beb91a
Update README.md 2025-09-19 07:29:21 +10:00
renatomen
052b945b49 docs: add comprehensive subgrouping feature documentation
- Document hierarchical subgrouping in filtering-and-views.md with demo GIF
- Add subgrouping section to task-list.md with usage examples
- Update agenda-view.md to reference subgrouping support
- Enhance features.md overview to mention two-level organization
- Include subgroups.gif demonstration of the feature in action

Provides complete documentation for the new hierarchical subgrouping
functionality that allows two-level task organization across views.
2025-09-18 11:16:31 +00:00
renatomen
3c8a139cd6 feat: standardize priority subgroup display across TaskListView and AgendaView
- Update AgendaView to use GroupingUtils.formatGroupName() for subgroup headers
- Ensures consistent priority display format: 'Low priority', 'Medium priority', etc.
- Eliminates discrepancy where AgendaView showed raw values while TaskListView showed formatted labels
- Both views now display identical priority subgroup names for better UX consistency
2025-09-18 10:56:35 +00:00
renatomen
f54651bf8a test: add comprehensive test coverage for hierarchical subgroup functionality
- Add HierarchicalGroupingService sorting tests
  * Test "No <field>" positioning for ascending and descending order
  * Verify type-aware sorting behavior for user fields
  * Validate subgroup key ordering consistency

- Add FilterBar subgroup menu integration tests
  * Test subgroup header and options in sort/group context menu
  * Verify subgroup reset behavior when primary group changes
  * Use dependency injection approach for reliable test execution

- Enhance test infrastructure for subgroup testing
  * Implement direct method testing instead of DOM manipulation
  * Add mock resolver functions for user field value resolution
  * Create reusable test helpers for subgroup scenarios

Provides robust test coverage for subgroup sorting logic, menu integration,
and cross-view consistency to ensure reliable hierarchical grouping behavior.
2025-09-18 10:15:08 +00:00
renatomen
bcf11adc10 feat: implement hierarchical subgroup sorting with consistent "No <field>" positioning
- Add comprehensive subgroup sorting to HierarchicalGroupingService
  * "No <field>" subgroups appear first in ascending order, last in descending order
  * Implement type-aware sorting for user fields (number, boolean, date, text)
  * Ensure consistent subgroup ordering across TaskListView and AgendaView

- Enhance group change responsiveness in FilterBar
  * Group changes now trigger immediate view updates using emitImmediateQueryChange()
  * Improve user experience with instant visual feedback for grouping changes

- Extend HierarchicalGroupingService.group() method
  * Add sortDirection and userFields parameters for enhanced sorting capabilities
  * Enable FilterService to pass sort context for proper subgroup organization

Delivers consistent and intuitive subgroup behavior with proper "No <field>"
positioning and immediate responsiveness to grouping changes.
2025-09-18 10:12:51 +00:00
renatomen
4dff4682ba feat(tasklist): add hierarchical subgroups (MVP) with safe UI updates
- Introduce HierarchicalGroupingService for two-level grouping
- FilterService: add getHierarchicalGroupedTasks() returning { groups, hierarchicalGroups }
- TaskListView: render hierarchical groups when subgroupKey is active; expand/collapse all subgroups per primary; show per‑group counts using agenda-view__item-count; fallback to flat groups when no subgroup
- Keep ViewPerformanceService flow; maintain taskElements tracking and selective updates
- FilterBar: harden button rebuilding (guard empty() with fallback, use classList/add), minor cleanup of unused locals
- Styles and GroupingUtils updated to support subgroup sections

Notes:

Excludes AgendaView.ts and tests (Agenda subgroups not working yet; will follow in a separate commit)
Backward compatible when subgroupKey is not set (flat groups unchanged)
2025-09-18 05:21:49 +00:00
callumalpass
d0271522ca release 3.23.4 2025-09-17 22:38:33 +10:00
callumalpass
489986518f
Merge pull request #690 from callumalpass:fix/multiday-tasks-in-calendar
Advanced calendar + Pomodoro fixes for multi-day events and auto-start (#641, $647)
2025-09-17 22:27:23 +10:00
callumalpass
aca1057367 fix(timeblocks): use stored date for editing (#647) 2025-09-17 22:20:32 +10:00
callumalpass
6c5cd30d23 fix(pomodoro): preserve task when auto-starting sessions (#641) 2025-09-17 21:52:28 +10:00
callumalpass
aae58b8503 fix: refresh calendar when duration/time tracking changes (#382) 2025-09-17 21:37:48 +10:00
callumalpass
31728466b2 fix: refresh calendar after archive/move 2025-09-17 21:29:21 +10:00
callumalpass
74b6ec55ee fix: render all-day tasks across multiple days
This is reported in [Danny Talks Tech
video](https://www.youtube.com/watch?v=SRavkMUYWzo)
2025-09-17 21:27:02 +10:00