Git Product home page Git Product logo

obsidian-full-calendar's Introduction

Obsidian Full Calendar Plugin

Obsidian Downloads

Keep your calendar in your vault! This plugin integrates the FullCalendar library into your Obsidian Vault so that you can keep your ever-changing daily schedule and special events and plans alongside your tasks and notes, and link freely between all of them. Each event is stored as a separate note with special frontmatter so you can take notes, form connections and add context to any event on your calendar.

Full Calendar can pull events from frontmatter on notes, or from event lists in daily notes. Full Calendar also supports read-only ICS and CalDAV remote calendars.

You can find the full documentation here!

Sample Calendar

The FullCalendar library is released under the MIT license by Adam Shaw. It's an awesome piece of work, and it would not have been possible to make something like this plugin so easily without it.

Support me on Ko-Fi

Installation

Full Calendar is available from the Obsidian Community Plugins list -- just search for "Full Calendar" paste this link into your browser: obsidian://show-plugin?id=obsidian-full-calendar.

Manual Installation

You can also head over to the releases page and unzip the latest release inside of the .obsidian/plugins directory inside your vault.

obsidian-full-calendar's People

Contributors

arkadipta avatar berlincount avatar davish avatar dojoteef avatar igelbox avatar jeremiespiesser avatar marcus-crane avatar marienvo avatar matteogalletta avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

obsidian-full-calendar's Issues

One-way, read-only sync from GCal

First step towards bi-directional syncing is a one-way sync to let your events from GCal show up in your Obsidian Full Calendar view. Will be configurable in settings, where each calendar has a source that is either local (directory in vault) or remote (GCal feed URL).

Task-events

Task-style events would be very useful for time blocking and other cases where you need to know whether the task has been completed within the timeframe or not.

Perhaps using Yaml frontmatter like task: true or taskEvent: true

Feature request: option to parse sub-folders for events

This is a VERY PROMISING plugin. Thanks for developing it.
I have my meeting notes organized in folders. Would be great if I could add the frontmatter metadata to any note in my vault and the calendar would pick it up.

Actions when event starts

Sorry if this is not in the scope of this plugin.
The idea is to do something when the event start, such actions include :

  • notification pop up
  • executing templater scripts
  • other actions that I haven't thought of

Feature Request: Cleaner, More User-Friendly 'New Event' Screen

The 'New Event' Screen

image

Requests:

  1. Have 'Calender Widget' display by default - So I like to follow a policy of #each_click_counts. If we can reduce the number of times a user has to click on the screen, it improves the user experience. Now, if I press 'Ctrl+P' and type 'New Event' and hit 'Enter', that's a really good start to the workflow. However, if I'm going to pick a date I'm almost certainly going to click the little 📅Calender icon next to the input box. Here's my suggestion: Have the Calender-Input-Widget display by default on the 'New Event' screen. It reduces a click and adds a visual.
    full-calender-annot - Copy Mockup image included for demonstration purposes . Made in MS Paint to demonstrate how it would look like.

  2. Remove 'Recurring Event' from 'New Event' screen - I only add a recurring event once every 7 years, I don't need to see this every time I want to create a new event. Find some other place to keep it. Keep the 'New Event' screen cleaner.
    full-calender-annot - Copy (2)

❤️ Thank you

DataviewJS query may need updating

Describe the bug
Copying the inline DataviewJS query into a note produces an error that eventClick can't be destructured from the undefined object. I believe this is because the renderCalendar API changed somewhere around a3bfa1d .

To Reproduce
Steps to reproduce the behavior:

  1. Go to a new note
  2. Add this:
```dataviewjs
const { renderCalendar } = app.plugins.plugins["obsidian-full-calendar"];
let calendar = renderCalendar(this.container, [{startDate: "2022-01-26", startTime: "17:00", endTime: "22:00", id: "id", title: "This is an event"}]);
calendar.render();
```
  1. View rendering.

Expected behavior
The hardcoded event to be rendered.

Console Errors

Evaluation Error: TypeError: Cannot destructure property 'eventClick' of 'undefined' as it is undefined.
    at renderCalendar (eval at <anonymous> (app://obsidian.md/app.js:1:1278841), <anonymous>:44875:54)
    at eval (eval at <anonymous> (eval at <anonymous> (app://obsidian.md/app.js:1:1278841)), <anonymous>:2:16)
    at DataviewInlineApi.eval (eval at <anonymous> (app://obsidian.md/app.js:1:1278841), <anonymous>:15671:16)
    at evalInContext (eval at <anonymous> (app://obsidian.md/app.js:1:1278841), <anonymous>:15672:7)
    at asyncEvalInContext (eval at <anonymous> (app://obsidian.md/app.js:1:1278841), <anonymous>:15682:32)
    at DataviewJSRenderer.render (eval at <anonymous> (app://obsidian.md/app.js:1:1278841), <anonymous>:16267:19)
    at DataviewRefreshableRenderer.maybeRefresh (eval at <anonymous> (app://obsidian.md/app.js:1:1278841), <anonymous>:15995:26)
    at t.e.tryTrigger (app://obsidian.md/app.js:1:762637)
    at t.e.trigger (app://obsidian.md/app.js:1:762570)
    at t.trigger (app://obsidian.md/app.js:1:1257953)

Additional context

I was able to fix it somewhat by providing an empty function handler for eventClick, but I think it may need some modification to fit with the current paradigm.

const { renderCalendar, settings } = app.plugins.plugins["obsidian-full-calendar"];
let calendar = renderCalendar(this.container, settings.calendarSources, 
                                { eventClick: () => {} });
calendar.render();

For instance, this doesn't do the filtering for .ics etc, and also results in CORS errors for remote google calendar secret URLs.

QoL tweaks

Could we have the ability to change the first day of the week (Monday/Sunday), and the time format in the timegrid/events to 24h, please?

Recursive event folder throws an error when the folder is the Vault root

It works from subfolders of the Vault.

This is my settings page:
image

This is the data.json generated by the plugin:

{
  "calendarSources": [
    {
      "type": "local",
      "directory": "/",
      "color": null
    }
  ],
  "defaultCalendar": 0,
  "recursiveLocal": true,
  "eventsDirectory": "/"
}

When I changed this, removing the "/" for the root folder, the error was resolved and the calendar opened correctly.
Are you using Obsidian normlizePath?

{
  "calendarSources": [
    {
      "type": "local",
      "directory": "",
      "color": null
    }
  ],
  "defaultCalendar": 0,
  "recursiveLocal": true,
  "eventsDirectory": ""
}

image

Please clarify the error text when a event directory isn't selected, and add this step to the installation instructions

Hello! I just installed the plugin via BRAT and opened the calendar and it opened a empty page save for the message Error: the events directory was not a directory.

~~I checked the console but didn't see anything relevant, I'm assuming that the installation didn't create an events directory correctly? I can try and manually create one if it'll help! ~~

My obsidian version is 0.13.23, and I'm on 0.1.2 of this plugin. The only steps to recreate is installing the plugin via BRAT, enabling it, and opening the full calendar (via ribbon icon or command)

Thank you in advance!! Let me know if there's anything else I can do to further investigate this

NEVERMIND I just realized I needed to add the an events folder in the settings! Still, the error text is a bit confusing and I think it should be made clearer! Also, adding this step to the instructions will also help a lot!

Feature request: Add support for plain text events

For small events like "go for a run" It seems a bit excessive to create a whole note just for that purpose.

Would be nice to have the option of adding calendar entries that are simply text.
Entries that don't have to point to a note in the vault.

Add multiple days to the same event without making it recurring

Say there is a project that you work on, on different days at different times (i.e. not a recursive event), but you don't want to create separate files. Would be great if I could add dates and times to an event to display them on the calendar at different times.

One way you could do this is by allowing multiple values for startTime, endTime, and date. Like this:

---
title: demo project
allDay: false
startTime: ["10:00", "13:30", "09:30"]
endTime: ["12:30", "18:00", "11:15"]
date: ["2022-02-20", "2022-02-21", "2022-03-01"]
---

Sync event attendees into note body

Create internal links to pages representing people based on the name or email included on the event.

@tylerwince's example from the comments on #1

Example:

If I have a page called Tyler Wince.md and it has the following contents:

---
email: [email protected]
---
Some notes about Tyler here

Then a calendar event which contains [email protected] as an attendee would automatically link to the Tyler Wince.md page.

This might also be a feature that people want exposed locally -- allowing easy linking to attendees from the edit modal. I think the better solution for that would be to add a Markdown editor within the edit modal.

Better "no calendar" screen

This is just text in the top-left corner of the view right now. It should look more like the "no open note" screen that ships with Obsidian.

Customize which views are available

Right now, there's hardcoded views for desktop (month, week, day, week list) and mobile (3 day, 1 day, week list). This should be configurable by the user in settings.

Move documentation to github pages

As features get added, it's going to get more difficult to navigate in the README. Eventually should move documentation to its own website.

Some documentation generators:

  • MkDocs
  • Docusaurus
  • Hugo with a documentation-oriented theme

Two-way sync between Obsidian and CalDAV servers

Generated from #1.

Events are stored as Notes in Obsidian and kept in sync with a selected Google Calendar. This will likely be a pretty involved and large project involving OAuth and the GCal API. Strategies for resolving conflicts between the local Obsidian copy and the Google Calendar copy of an event will need to be fleshed out.

Set colors for event type rather than by calendar

I see that currently we can only have different colors for different calendars.
I think it would make sense to be able to set different colors for different event types within the same calendar.

Store multiple events within a single note

I would also love for some functionality of scraping event information from the daily notes! Of course it wouldn't have the full amount of capabilities of a full event page, (dragging and dropping would probably be a pain to enable) but being able to quickly add an event name, start and end time within for a day would be amazing.

Originally posted by @wychwitch in #6 (comment)

You could specify as much event info as you want using inline dataview fields, and the plugin would "fill in the blanks" using the page's frontmatter. So you could have a page with fullCalendar_date: 2022-02-22, and then bullet points with [startTime:: 5:00pm] [endTime:: 7:15pm] would be able to be populated on the calendar.

You would be able to edit any field specified in-line from the calendar as well. But page-wide fields would be locked. To move an event to a different date in this example, you would have to manually move it to a different note.

Relying on custom frontmatter means that you could easily integrate this with your daily note / periodic note templates, but you're not locked into those formats.

One-way sync from any iCal format calendar

Download a .ics file from a URL specified in settings and display the events on the calendar. This would enable one-way sync in the following scenarios:

  • Non-public Google Calendar sync using the iCal format "secret link". Right now the plugin is using the GCal integration for FullCalendar, which requires the Calendar Group ID that is only usable when the calendar is public.
  • iCloud Calendar sync
  • Add any public calendar from anywhere on the internet -- .ics is a super common format!

Support creating a "linked note" for one-way synced remote calendars

Although at some point the idea is to do two-way sync, a short term but very useful thing could be to support creating a note for an event. This could possibly be "on-demand", e.g if no matching note is found for a given synced event than nothing happens, and then if you click on an event you are given the option to create a note for it.

Ultimately, two-way sync pretty much covers this case, but this could be a good stepping stone along the way.

Thanks for your hard work on this! Love this extension.

Renaming of Events Is not Propagated

I have tried the following:

  1. Renaming of the event in the modal. It changes the title property in the YAML-FM of the event but does not change the file name.
  2. Renaming of the event's file name. It does not rename the event in the FC view.

It would be great if you could implement both approaches.

Make "Recurring Event" less prominent on the new event modal

From @Welding-Torch on #10:

I only add a recurring event once every 7 years, I don't need to see this every time I want to create a new event. Find some other place to keep it. Keep the 'New Event' screen cleaner.
image

I don't think removing it entirely is a great idea, but you're right that it's not as common a usecase (especially since recurring events, well, repeat, and so you only set it up once). I'd be very interested in a redesign of the new/edit event modal.

Trying to create an event with a colon fails silently

Describe the bug
Cannot add new event in week view.

Clicking "Save Event" does not close pop-up window or populate calendar with new event. Create event pop-up remains visible after "Save Event" click. Still able to edit event fields in pop-up so app not frozen.

Have tried clicking "Save Event' with blank title field and get an expected "Please fill out this field." error prompt.

To Reproduce
Steps to reproduce the behavior:

  1. Open Calendar in Week view.
  2. Click on "cell" for a day and time
  3. Expected event definition pop-up appears.
  4. Added Title, leaving everything else as default values.
  5. Click on "Save Event"

Expected behavior
Expected "Save Event' click to close pop-up window and populate calendar.

Screenshots

Console Errors
Go to View->Toggle Developer Tools and open up the JavaScript console, reproduce your bug, and copy/paste any logs you see there.

Do not find the View->Toggle Developer Tools function in Obsidian.

**Device info

  • OS: Manjaro Linux 5.15.25-1 & KDE Plasma Version 5.24.2
  • Plugin Version 0.4.5
  • Obsidian Version v0.13.23

Events Cannot Be Deleted

I have tried the following:

  1. Opening the modal does not provide the option to delete an event.
  2. Deleting the event in the "events" folder does not remove the entry in the FC view.
  3. Right-click does not offer the option to delete the event. In fact, the right-click is currently not supported.

It would be fantastic if you could implement all three options.

Mobile layout

Hello,
all the best for this plugin!
It will be nice to have a better layout for mobile version. It is now impossible to switch in month view and scroll it with finger :(

One-way, read-only sync from iCal

Companion issue to #15. They had to be split up because Apple doesn't set the proper CORS headers on .ics files, so Chrome/Electron is preventing FullCalendar from making the request to get the calendar.

Focus on datepicker by default in the new event modal

From @Welding-Torch in #10:

Have 'Calender Widget' display by default - So I like to follow a policy of #each_click_counts. If we can reduce the number of times a user has to click on the screen, it improves the user experience. Now, if I press 'Ctrl+P' and type 'New Event' and hit 'Enter', that's a really good start to the workflow. However, if I'm going to pick a date I'm almost certainly going to click the little 📅Calender icon next to the input box. Here's my suggestion: Have the Calender-Input-Widget display by default on the 'New Event' screen. It reduces a click and adds a visual.
image
Mockup image included for demonstration purposes . Made in MS Paint to demonstrate how it would look like.

List view sidebar panel

It'd be great if there was a version of the day/list views that could be added to either of the sidebars.

Ability to create multiple events with same title and start date

When I create a new appointment with the same title as an existing one, the existing appointment will be overwritten.

In obsidian you can move a file to a different folder with the same name. Without further inquiry obsidian will put a number at the end of the file. That might be a suitable solution for this plugin.

Day View

This plug in is a real game changer, thanks for all the work and for sharing it!
Would it be possible to add a Day View? This would make it easy to use Full Calendar for time blocking, and putting it into a sidebar with just one day showing.

Automatically Scheduling Tasks

This plugin is great! Thanks for making it. Once you get tasks displaying on the calendar I’m interested in automatically scheduling them similar to
Skedpal.

I’m not sure what the best approach is for accomplishing this. Is there a way to leverage dataview blocks as a way to schedule tasks? Should I make my own plugin that provides scheduling capabilities for putting tasks into the calendar?

What are your thoughts?

Integration with periodic_notes

It would be a nice feature to have the calendar link to the periodic-notes plugin. Opening / creating a daily note when clicking a specific day, weekly note when clicking week, etc.

Use predefined colours in imported calendar

I already tend to color code events heavily in gcal, could there be a way to import that too as opposed to using a single set color per import?

Love what this is building up to btw!

Google Calendar Support

Hi!

I'd absolutely love some google calendar support. Will be happy to help out with coding as well!
Specifically, I'd like the same way that todoist supports gcal integration:

  • 1 way sync FROM gcal TO obsidian => Obsidian is just a view, and non-editable.
  • 1 way sync FROM obsidian TO gcal => Any event you create in obsi plugin is pushed to a calendar in gcal, but changes in gcal aren't propagated back.
  • 2 way sync: obsidian and gcal are kept in sync with each other <-- my preferred method, probably also the hardest to implement.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.