-
Notifications
You must be signed in to change notification settings - Fork 46
Vue3 and many other updates #101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…a.20) • Implement private read-only ICS calendar feed: - New `/api/calendar_token` endpoint to generate/rotate/revoke per-user tokens - Public `/api/calendar.ics?token=...` endpoint serving daily notes as all-day events - Events include note title, cleaned markdown body, and direct link back to DailyNotes - Added calendar sharing toggle + URL management in Settings UI • Add image upload support: - New `/api/upload` endpoint with file type/size validation - Uploads stored in `config/uploads/<username>/` with UUID filenames - New `Upload` model tracking metadata and last_seen_at for cleanup - Editor now supports paste & drop image upload with automatic markdown insertion - Added orphan upload detection and cleanup endpoints • Add new Settings UI section for calendar sharing with copy/regenerate controls • Bump version to 1.0.0-beta.20 across README, package.json, and package-lock.json • Add helper script `update_version.sh` for consistent version bumping • Add migration for `calendar_token` column and update config defaults This brings powerful new sharing and media capabilities while keeping everything private and revocable.
Add support for subscribing to external ICS calendar feeds (Google Calendar, etc.) that display events on the daily note page. Includes security hardening for SSRF prevention and DoS protection. Also fixes Vue 3 reactivity issue where task list was not populating on initial page load due to incorrect ref wrapping in the provide/inject pattern. Backend: - Add ExternalCalendar model and migration - Implement ICS feed fetching with 5-minute cache (100-entry limit) - Add SSRF protection (block localhost, private IPs) - Add DoS protection (5MB size limit, 1000 event limit per feed) - Parse ICS events with recurrence support (RRULE) - Add API endpoints: GET/POST /api/external_calendars, GET /api/external_events - Add DEFAULT_TIMEZONE config for event display Frontend: - Add calendar management UI in Settings - Add ExternalEvents and ExternalEventsSidebar components - Display external events on Day view - Fix task list reactivity by passing ref directly instead of unwrapping - Generate task list on mount and value change, not just on edit - Add CalendarService for API integration Security improvements: - Block internal network access (localhost, 127.0.0.1, private IP ranges) - Limit ICS file size to 5MB to prevent memory exhaustion - Limit events per file to 1000 to prevent DoS - Implement cache eviction to prevent unbounded growth - Replace 'any' types with proper TypeScript types
Change Editor import from 'type' to regular import to fix component resolution issue. Vue cannot render type-only imports, causing notes to fail loading with 'Failed to resolve component: Editor' warnings. Also add null guards for global context in Editor component to prevent potential runtime errors when accessing taskList.
Modify the `updateTask` function to correctly mutate the `taskList` by accessing its `.value` property. This change ensures that reactivity is preserved and that Vue automatically updates the DOM when changes occur in the task list. The previous method did not account for Vue's reactivity system, leading to potential UI inconsistencies.
- Add slide-out sidebar with overlay on mobile devices - Make header responsive with overflow menu for hidden actions - Use dynamic viewport height (dvh) for proper mobile sizing - Add responsive styles to editor, preview, and search views - Fix Bulma import to use compiled CSS (avoids SASS conflicts) - Make login/auth pages responsive with max-width wrapper - Add iOS-specific fixes (touch scrolling, zoom prevention)
Update project version in README, package.json, and package-lock.json to 1.0.0-beta.22 for a minor update. This keeps documentation and package metadata in sync with the new release.
Save and restore collapsed code sections when navigating between notes. Fold state is stored in localStorage keyed by note ID and restored when returning to a previously viewed note.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR migrates the DailyNotes application from Vue 2 to Vue 3, along with numerous feature additions and improvements. The migration includes updates to the editor (CodeMirror 5 to 6), modernized component syntax (Options API to Composition API), and enhanced mobile responsiveness.
- Migrated from Vue 2 to Vue 3 with Composition API
- Upgraded CodeMirror 5 to CodeMirror 6 with improved syntax highlighting
- Added calendar sharing via ICS feeds and external calendar integration
- Implemented image upload functionality with paste/drag-drop support
Reviewed changes
Copilot reviewed 52 out of 55 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| client/package.json | Updated dependencies for Vue 3, CodeMirror 6, and related packages |
| client/src/main.ts | Refactored to use Vue 3 createApp API and Unhead |
| client/src/components/Editor.vue | Complete rewrite using CodeMirror 6 and Composition API |
| client/src/views/*.vue | Migrated all views to Composition API with script setup |
| app/routes.py | Added calendar feed, external calendar, and image upload endpoints |
| app/models.py | Added Upload and ExternalCalendar models |
| migrations/versions/*.py | Added database migrations for new features |
Comments suppressed due to low confidence (1)
client/src/views/Search.vue:1
- Corrected spelling of 'Searcy' to 'Search'.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
No description provided.