joplin-plugin-my-calendar 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,99 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
+
5
+ ### [1.2.3](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/compare/v1.2.2...v1.2.3) (2026-02-01)
6
+
7
+ ### 1.2.2 (2026-02-01)
8
+
9
+
10
+ ### 🐛 Bug Fixes
11
+
12
+ * add authentication checks and redundant build step to release script ([4c59a6d](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/4c59a6d681b75b825b73b2bc20f185ca30534a5c))
13
+ * update pack script and remove deprecated husky config ([6a2ba19](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/6a2ba19a6b11beb302be0cd0f92717e7e3294dca))
14
+ * use static label for toggle command to avoid UI sync issues ([e2d4c99](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/e2d4c99aa880a2d7b837b1cf044bfbaf3678efaa))
15
+
16
+
17
+ ### ✨ Features
18
+
19
+ * add option to empty trash after alarm cleanup ([80ed82b](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/80ed82b8102ee73d5b14341d9531849953d40700))
20
+ * add setting to toggle event timeline visibility ([263013c](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/263013c05404b96f5d3ab8eaa0ef61aaa322c26d))
21
+ * add setting to toggle ICS alarm import ([7cb16f2](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/7cb16f276f43882136ce432464875ae154605d56))
22
+ * enhance alarm notification content ([f12cd29](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/f12cd2967900d54ca742d04101cc8545cc2af709))
23
+ * improve github release notes extraction ([94d6173](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/94d6173ad08a826cebd71edbfe00ff26b0c140e0))
24
+ * optimize alarm synchronization logic ([46a1bc8](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/46a1bc87573e8f9ea51dffe2e1281946e4873c69))
25
+
26
+ ### 1.2.1 (2026-02-01)
27
+
28
+
29
+ ### 🐛 Bug Fixes
30
+
31
+ * add authentication checks and redundant build step to release script ([4c59a6d](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/4c59a6d681b75b825b73b2bc20f185ca30534a5c))
32
+ * update pack script and remove deprecated husky config ([6a2ba19](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/6a2ba19a6b11beb302be0cd0f92717e7e3294dca))
33
+ * use static label for toggle command to avoid UI sync issues ([e2d4c99](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/e2d4c99aa880a2d7b837b1cf044bfbaf3678efaa))
34
+
35
+
36
+ ### ✨ Features
37
+
38
+ * add option to empty trash after alarm cleanup ([80ed82b](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/80ed82b8102ee73d5b14341d9531849953d40700))
39
+ * add setting to toggle event timeline visibility ([263013c](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/263013c05404b96f5d3ab8eaa0ef61aaa322c26d))
40
+ * add setting to toggle ICS alarm import ([7cb16f2](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/7cb16f276f43882136ce432464875ae154605d56))
41
+ * enhance alarm notification content ([f12cd29](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/f12cd2967900d54ca742d04101cc8545cc2af709))
42
+ * improve github release notes extraction ([94d6173](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/94d6173ad08a826cebd71edbfe00ff26b0c140e0))
43
+ * optimize alarm synchronization logic ([46a1bc8](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/46a1bc87573e8f9ea51dffe2e1281946e4873c69))
44
+
45
+ ## 1.2.0 (2026-02-01)
46
+
47
+
48
+ ### 🐛 Bug Fixes
49
+
50
+ * add authentication checks and redundant build step to release script ([4c59a6d](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/4c59a6d681b75b825b73b2bc20f185ca30534a5c))
51
+ * update pack script and remove deprecated husky config ([6a2ba19](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/6a2ba19a6b11beb302be0cd0f92717e7e3294dca))
52
+ * use static label for toggle command to avoid UI sync issues ([e2d4c99](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/e2d4c99aa880a2d7b837b1cf044bfbaf3678efaa))
53
+
54
+
55
+ ### ✨ Features
56
+
57
+ * add option to empty trash after alarm cleanup ([80ed82b](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/80ed82b8102ee73d5b14341d9531849953d40700))
58
+ * add setting to toggle event timeline visibility ([263013c](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/263013c05404b96f5d3ab8eaa0ef61aaa322c26d))
59
+ * add setting to toggle ICS alarm import ([7cb16f2](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/7cb16f276f43882136ce432464875ae154605d56))
60
+ * enhance alarm notification content ([f12cd29](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/f12cd2967900d54ca742d04101cc8545cc2af709))
61
+ * improve github release notes extraction ([94d6173](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/94d6173ad08a826cebd71edbfe00ff26b0c140e0))
62
+ * optimize alarm synchronization logic ([46a1bc8](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/46a1bc87573e8f9ea51dffe2e1281946e4873c69))
63
+
64
+ ## 1.1.0 (2026-02-01)
65
+
66
+
67
+ ### 🐛 Bug Fixes
68
+
69
+ * add authentication checks and redundant build step to release script ([4c59a6d](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/4c59a6d681b75b825b73b2bc20f185ca30534a5c))
70
+ * update pack script and remove deprecated husky config ([6a2ba19](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/6a2ba19a6b11beb302be0cd0f92717e7e3294dca))
71
+ * use static label for toggle command to avoid UI sync issues ([e2d4c99](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/e2d4c99aa880a2d7b837b1cf044bfbaf3678efaa))
72
+
73
+
74
+ ### ✨ Features
75
+
76
+ * add option to empty trash after alarm cleanup ([80ed82b](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/80ed82b8102ee73d5b14341d9531849953d40700))
77
+ * add setting to toggle event timeline visibility ([263013c](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/263013c05404b96f5d3ab8eaa0ef61aaa322c26d))
78
+ * add setting to toggle ICS alarm import ([7cb16f2](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/7cb16f276f43882136ce432464875ae154605d56))
79
+ * enhance alarm notification content ([f12cd29](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/f12cd2967900d54ca742d04101cc8545cc2af709))
80
+ * improve github release notes extraction ([94d6173](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/94d6173ad08a826cebd71edbfe00ff26b0c140e0))
81
+ * optimize alarm synchronization logic ([46a1bc8](https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/commit/46a1bc87573e8f9ea51dffe2e1281946e4873c69))
82
+
83
+ ## [1.0.0] - 2025-01-25
84
+
85
+ ### Added
86
+
87
+ - **Initial release of My Calendar for Joplin.**
88
+ - **Calendar View**: Interactive monthly grid and detailed day view.
89
+ - **Notes as Events**: Markdown-based event definition block (` ```mycalendar-event `).
90
+ - **ICS Import System**: Support for importing standard calendar files with deduplication.
91
+ - **Automated Alarms**: Automatic conversion of ICS `VALARM` to native Joplin Todo notes with reminders.
92
+ - **Recurrence Support**: Full support for Daily, Weekly, Monthly, and Yearly recurring events.
93
+ - **Timezone Support**: Native handling of IANA timezones and UTC offsets.
94
+ - **Security**: Built-in sanitization to protect against XSS in events.
95
+ - **Customization**: Settings for week start day, alarm scan range, and more.
96
+
97
+ [Unreleased]: https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/compare/v1.0.0...HEAD
98
+
99
+ [1.0.0]: https://github.com/volodymyroliinyk/joplin-plugin-my-calendar/releases/tag/v1.0.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Volodymyr Oliinyk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,249 @@
1
+ # 🗓️ My Calendar for Joplin
2
+
3
+ [![Joplin Plugin](https://img.shields.io/badge/Joplin-Plugin-blue)](https://joplinapp.org/)
4
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Strict-blue)](https://www.typescriptlang.org/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ [![Support via PayPal](https://img.shields.io/badge/Support-PayPal-00457C?style=flat-square&logo=paypal)](https://www.paypal.me/volodymyroliinykca)
7
+
8
+ **My Calendar** is a powerful, flexible, and privacy-focused calendar plugin for [Joplin](https://joplinapp.org/). It
9
+ turns your notes into calendar events, providing a unified view of your schedule directly within your favorite
10
+ note-taking app.
11
+
12
+ | Light Mode | Dark Mode |
13
+ |:--------------------------------------------------:|:------------------------------------------------:|
14
+ | ![Light View](./assets/screenshots/light_view.png) | ![Dark View](./assets/screenshots/dark_view.png) |
15
+
16
+ ---
17
+
18
+ ## 🌟 Key Features
19
+
20
+ - **Monthly Calendar Grid**: Navigate through months, view event bars, and see your schedule at a glance.
21
+ - **Smart Day View**: Click any day to see a detailed list of scheduled events.
22
+ - **Notes as Events**: Any note can become a calendar event simply by adding a small Markdown block.
23
+ - **ICS Import**: Import standard `*.ics` files (from Google Calendar, Outlook, Apple, etc.) directly into your Joplin
24
+ notebooks.
25
+ - **Notes as Alarms**: The plugin automatically creates "Todo" notes with reminders based on your calendar alarms
26
+ (`VALARM`). These notes act as system notifications and link back to the original event. The sync process is optimized
27
+ to only update what's necessary.
28
+ - **Recurrence Support**: Full support for daily, weekly, monthly, and yearly recurring events.
29
+ - **High Security**: Built-in protection against Markdown and CSS injections.
30
+ - **Universal Sync**: Works with Joplin's built-in synchronization across all your devices.
31
+
32
+ ### 📱 Platform Availability
33
+
34
+ While we strive for parity, some features are specific to the Desktop version due to platform-specific APIs.
35
+
36
+ | Feature | Desktop | Mobile |
37
+ |:-----------------------------------|:-------:|:------:|
38
+ | Monthly Calendar Grid | ✅ | ✅ |
39
+ | Smart Day View | ✅ | ✅ |
40
+ | Native Joplin Settings | ✅ | ✅ |
41
+ | ICS File Import | ✅ | ❌ |
42
+ | Quick ICS Export Links | ✅ | ❌ |
43
+ | Markdown Sanitization | ✅ | ✅ |
44
+ | Automatic Alarms (Todo generation) | ✅ | ✅* |
45
+
46
+ *\*Note: Alarms are generated/synced during the import process on Desktop. Once created as "Todo" notes, they will sync
47
+ and trigger notifications on Mobile automatically.*
48
+
49
+ ---
50
+
51
+ ## 🚀 Getting Started
52
+
53
+ ### 1. Installation
54
+
55
+ 1. Open **Joplin Desktop**.
56
+ 2. Go to `Tools` > `Options` (Windows/Linux) or `Joplin` > `Settings` (macOS).
57
+ 3. Select `Plugins` and search for `My Calendar`.
58
+ 4. Click **Install** and restart Joplin.
59
+
60
+ ### 2. Manual Event Creation
61
+
62
+ You don't need to import files to use the calendar. Simply add the following block to any note:
63
+
64
+ ~~~markdown
65
+ ```mycalendar-event
66
+ title: Meeting with Team
67
+ start: 2025-12-18 10:00+02:00
68
+ end: 2025-12-18 11:30+02:00
69
+ color: #3498db
70
+ location: Conference Room B
71
+ ```
72
+ ~~~
73
+
74
+ The note will immediately appear on your calendar!
75
+
76
+ > 💡 **Looking for more?** Check the [examples](./examples) folder for more templates, including recurring events and
77
+ > all-day appointments.
78
+
79
+ ---
80
+
81
+ ## 📥 ICS Import System
82
+
83
+ The plugin features a robust import system designed for performance and reliability.
84
+
85
+ ### How to Import:
86
+
87
+ 1. Open the **My Calendar** panel.
88
+ 2. Select the **Target Notebook** where you want your events to be stored.
89
+ 3. Choose your `*.ics` file and click **Import**.
90
+
91
+ ### Smart Features:
92
+
93
+ - **Deduplication**: The plugin uses `UID`s from the ICS file. If you import the same file again, it will only update
94
+ changed events or skip unchanged ones.
95
+ - **Local Color Preservation**: By default, if you manually change the color of an imported event in Joplin, subsequent
96
+ imports will preserve your custom color.
97
+ - **Optimized Automatic Alarms**: If an ICS event has a reminder, the plugin creates a linked "Todo" note in Joplin.
98
+ These todos
99
+ appear in your standard Joplin tasks and trigger native notifications. The sync process is smart: it only deletes
100
+ outdated alarms and creates new ones, minimizing sync traffic.
101
+
102
+ ---
103
+
104
+ ## 🛠️ Advanced Syntax
105
+
106
+ Below is the full list of properties supported inside the ` ```mycalendar-event ` block:
107
+
108
+ | Property | Status | Description | Example |
109
+ | :--- | :--- | :--- | :--- |
110
+ | `start` | **Required** | Start date and time. Mandatory for the event to appear. | `2025-12-18 10:00+02:00` |
111
+ | `title` | Optional | Display name. If omitted, the **Joplin note title** will be used. | `Meeting` |
112
+ | `end` | Optional | End date and time. If omitted, the event is treated as a point in time (0 duration). | `2025-12-18 11:30+02:00` |
113
+ | `tz` | Optional | Timezone (IANA). | `America/Toronto` |
114
+ | `color` | Optional | Hex color for the event bar. | `#e74c3c` |
115
+ | `location` | Optional | Location string. | `Home Office` |
116
+ | `description` | Optional | Extra details (auto-sanitized). | `Check project status.` |
117
+ | `repeat` | Optional | `daily`, `weekly`, `monthly`, `yearly` | `weekly` |
118
+ | `repeat_interval`| Optional | Frequency (e.g., every 2 weeks). | `2` |
119
+ | `byweekday` | Optional | Specific days for weekly repeat. | `MO,WE,FR` |
120
+ | `bymonthday` | Optional | Day of the month for monthly repeat. | `15` |
121
+ | `all_day` | Optional | Set to `true` for all-day events. | `true` |
122
+
123
+ ### 🕒 Supported Time & Timezone Formats
124
+
125
+ The calendar supports several ways to specify the time and timezone of your events:
126
+
127
+ 1. **With UTC Offset (Recommended)**
128
+ Explicitly define the time and its relation to UTC. This time will be automatically converted to your current
129
+ device's timezone.
130
+ ```text
131
+ start: 2025-12-18 10:00+02:00
132
+ ```
133
+
134
+ 2. **With `tz` Property (IANA)**
135
+ Specify the time and the exact IANA Timezone name. The plugin will handle the conversion based on daylight saving
136
+ rules.
137
+ ```text
138
+ start: 2025-12-18 10:00
139
+ tz: America/Toronto
140
+ ```
141
+
142
+ 3. **Floating Local Time**
143
+ If no offset or `tz` is provided, the time is considered "floating" and will be shown exactly as written, regardless
144
+ of the device's timezone settings.
145
+ ```text
146
+ start: 2025-12-18 10:00
147
+ ```
148
+
149
+ ---
150
+
151
+ ## ⚙️ Settings
152
+
153
+ Customize your experience in the Joplin Settings (`Tools` > `Options` > `My Calendar`):
154
+
155
+ ### Calendar
156
+
157
+ - **Week starts on**: Choose between **Monday** (default) or **Sunday** for the calendar grid.
158
+
159
+ ### Day events
160
+
161
+ - **Show event timeline**: Show a visual timeline bar under each event in the day list. Disabling this also stops
162
+ related UI update timers. (Default: Enabled).
163
+ - **Day events auto-refresh**: Set the interval (in minutes) for how often the day's event list updates. (Default: 1
164
+ min).
165
+
166
+ ### ICS Import (Desktop only)
167
+
168
+ - **Enable ICS import alarms**: If enabled, alarms from ICS files will be imported as Todo notes. If disabled, existing
169
+ alarms will be deleted on re-import. (Default: Disabled).
170
+ - **ICS import alarm range**: Define how many days into the future (up to 365) the plugin should scan and generate
171
+ native Joplin reminders from your ICS files. (Default: 30 days).
172
+ - **Empty trash after alarm cleanup**: If enabled, the plugin will empty the trash after deleting old alarms. **WARNING
173
+ **:
174
+ This deletes ALL items in the trash. (Default: Disabled).
175
+ - **ICS export links**: Add up to 4 quick-access links to your favorite calendar exporters (e.g., Google
176
+ Calendar Export URL). These will appear as convenient buttons in the import panel.
177
+
178
+ ### Developer
179
+
180
+ - **Enable debug logging**: Activates a visible log box and extra console output to help troubleshoot any issues.
181
+
182
+ #### Settings Interface
183
+
184
+ | Light Theme | Dark Theme |
185
+ |:---------------------------------------------------------------:|:-------------------------------------------------------------:|
186
+ | ![Light Settings](./assets/screenshots/light_settings_view.png) | ![Dark Settings](./assets/screenshots/dark_settings_view.png) |
187
+
188
+ ---
189
+
190
+ ## 👨‍💻 Development
191
+
192
+ ### Commands:
193
+
194
+ - `npm run build;`: Compile the project.
195
+ - `npm run pack;`: Create the `.jpl` distribution file.
196
+ - `npm test;`: Run the extensive test suite (250+ cases).
197
+ - `npm run lint;`: Check code style and common patterns.
198
+ - `pkill -f jest || true;pkill -f node || true;rm -rf node_modules/.cache;rm -rf ~/.cache/jest;npx jest --clearCache;`:
199
+ Cache cleaning.
200
+
201
+ ### Automation Scripts
202
+
203
+ The project includes helper scripts in the `scripts/` directory to streamline development and release processes.
204
+
205
+ #### `scripts/pre-pack.sh`
206
+
207
+ Ensures code quality before packaging. It runs the linter (failing on warnings) and the full test suite.
208
+
209
+ ```bash
210
+ ./scripts/pre-pack.sh
211
+ ```
212
+
213
+ #### `scripts/release.sh`
214
+
215
+ Automates the entire release workflow: bumps version, syncs manifest, tags, pushes, and publishes to NPM.
216
+
217
+ ```bash
218
+ ./scripts/release.sh [patch|minor|major]
219
+ ```
220
+
221
+ ### Development Workflow
222
+
223
+ For a detailed guide on branch naming, commit message formats, and the release process, please see the *
224
+ *[Development Workflow Guide](./WORKFLOW.md)**.
225
+
226
+ ### Security First:
227
+
228
+ The code implements strict sanitization to ensure that imported calendar data cannot execute arbitrary Markdown or break
229
+ the Joplin interface.
230
+
231
+ ## ❤️ Support
232
+
233
+ If you find this plugin useful, please consider supporting its development. Your donations help me dedicate more time to
234
+ maintaining the project and adding new features.
235
+
236
+ - **[Donate via PayPal](https://www.paypal.me/volodymyroliinykca)** - support the development of **My Calendar**.
237
+
238
+ Every coffee counts. Thank you! ☕
239
+
240
+ ---
241
+
242
+ ## 📜 Changelog
243
+
244
+ Detailed changes for each release are documented in the [CHANGELOG](./CHANGELOG.md).
245
+
246
+ ## 📄 License
247
+
248
+ Copyright (c) 2024-2026 Volodymyr Oliinyk.
249
+ Licensed under the **MIT License**. See the [LICENSE](LICENSE) file for details.