Coder Social home page Coder Social logo

obsidian-projects's Introduction

Projects logo

Build Obsidian plugin Release Obsidian plugin Obsidian Downloads Buy me a coffee Maintenance Status

Projects is a plugin for Obsidian that lets you manage and visualize notes for project management.

  • Create projects from folders and Dataview queries.
  • Switch between four different views: Table, Board, Calendar, and Gallery.
  • Configure note templates for each project.

For example, if you're a content manager, Projects can help you manage your content calendar. Create drafts, keep track of their status, and when they are scheduled to be published.

If you have any questions, or want to stay updated, join our Discussions.

Installation

Note

You must turn off Restricted mode to use Projects.

  1. In Obsidian, open Settings.
  2. Under Community plugins, select Browse.
  3. Search for "Projects" by Marcus Olsson, and then select it.
  4. Select Install.

To get started using Projects, press Ctrl+P (or Cmd+P on macOS) to open the Command palette, and then select Projects: Show projects.

Design Philosophy

When developing any software, you are often faced with difficult choices. To help guide design decisions, this project adheres to the following principles:

  • Leave no trace: The plugin must not leave any plugin-specific configuration in the notes, such as custom front matter properties. Notes may be shared with colleagues and teams who don't use Obsidian. If the user stops using this plugin, they shouldn't have to clean up all their notes.
  • Keep it native: The plugin should look and feel like it's native to Obsidian. The plugin should also prefer native Web APIs over custom components whenever possible.
  • Stability over features: This plugin is geared towards professionals with high demands on reliability. Any bug reports and usability issues will be prioritized over new features.

Roadmap

If you're curious about what we're working on, check out the roadmap:

  • Active issues: Issues that are actively being worked on.
  • Prioritized backlog: Issues we'll be working on next.
  • Backlog: Issues anyone can start working on (please let us know before you do).
  • Ideas: Promising issues that haven't made it to the backlog yet.

To vote for a feature, react to the issue with a 👍.

Contribute

For more information on how to contribute to Projects, check out CONTRIBUTING.md. We appreciate bug reports, feature suggestions, PRs for features or translations, and help with issue triage.

Learn More

If you'd like to see Projects in action, check out any of these amazing resources made by users.

Videos

Articles

Did I miss any? Let me know and I'll add them to the list!

Support

If Projects has been useful to you, consider buying me a book to show your support.

License

Projects is distributed under Apache License 2.0.

obsidian-projects's People

Contributors

acylation avatar gamergirlandco avatar github-actions[bot] avatar gitmurf avatar marcusolsson avatar nilsjacobsen avatar oscartorres-10 avatar remainstheday avatar shimeoki avatar st4ng avatar stephanesol avatar xentara1 avatar yirujeon 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  avatar

obsidian-projects's Issues

Register a custom view

Saw your idea in discord, so I decide to file a issue to record this.

Have been playing with something even simpler, though perhaps too simple. Plugins could subscribe to an event with a context that lets you register an onload function that gives you the data and an HTMLElement where you can add your view.

And can't wait to see this happen. I wanted to build a view and use data from projects.

[FEAT] Ability to add multiple Templates to a workspace and then when creating a new item/note choose which template to use

This is an enhancement on top of #32 to extend the ability to just add a single template and instead be able to select multiple templates for a workspace so that when creating / adding new items (notes) to this workspace you can pick from a list of several templates. If there are no templates assigned then it just creates a new blank note. Also add an option to still create from a blank/empty note template when there are template(s) assigned to a worksapce. See below for the copied stuff from issue #32 that are relevant to this request.

As an extension to this feature it would be cool if similar to Notion you could specify multiple templates to choose from for a given Workspace (one of which could be a "blank template"). So you may have a Workspace for writing blog posts and then have a few different templates to choose from each time you add a new item/project/note e.g., Tech Blog Post OR Hobby Blog Post OR Parenting Blog Post.

So the workflow would be:

  1. Select add new item

  2. The modal pops up asking for your name of the new project/note and suggests whatever you set as the default name (see #31 )

  3. If you have zero templates set/added to this workspace it automatically just creates a blank note

3-a. If you do have a template(s) configured for this Workspace it supplies a dropdown asking you to select a template to use. There is also an option for "Start from blank note" as one of the template options to choose from

Option to open new note after creation

In reference to the implement of #37 This is PERFECT! The only thing I can add to it would be it would be nice if the new note created opened (or could be opened) after creation in a new tab (or had an option in the creation modal that you can select "Do nothing" / "Open Note" / "Open Note in New Tab". But now I am just getting greedy 😉 haha

I will open a new Issue for consistency.

Originally posted by @GitMurf in #37 (comment)

[FEAT] Specify a template for new notes/projects within a Workspace to set default YAML front matter and any default text you want your note to start with

This is similar to #31 but instead of just a template for naming the new project/note it would be nice to be able to specify another note as a template to use for new projects/notes within a specific workspace. Similar to how Daily Notes works where you specify a template to create your Daily Notes Page each day.

As an extension to this feature it would be cool if similar to Notion you could specify multiple templates to choose from for a given Workspace (one of which could be a "blank template"). So you may have a Workspace for writing blog posts and then have a few different templates to choose from each time you add a new item/project/note e.g., Tech Blog Post OR Hobby Blog Post OR Parenting Blog Post.

So the workflow would be:

  1. Select add new item
  2. The modal pops up asking for your name of the new project/note and suggests whatever you set as the default name (see #31 )
  3. If you have zero templates set/added to this workspace it automatically just creates a blank note
    3-a) If you do have a template(s) configured for this Workspace it supplies a dropdown asking you to select a template to use. There is also an option for "Start from blank note" as one of the template options to choose from

Table: Navigate using arrow keys

While Tab navigation is already possible, it would be even better if we could use the arrow keys as well to be able to move up and down.

[FEAT] New Project "quick add" command

Add a command to the command palette where you can quickly create a new project without even being in the Projects view. It asks you which workspace to add to and then asks you to name it. Eventually also sync this with FEAT ideas #31 and #32 (assuming these get implemented) to take you through the naming and Template selection for the new project.

After creation of the new project via the command palette have a modal prompt ask whether you would like to open the new project note and whether to open in a new tab OR to navigate to the new note in the current leaf/view/tab.

[FEAT] Add command to CP to Add New Item/Note and then a modal asks which Workspace to add to

This is in relation to #34 ... I realize that when I say "Project" you are probably thinking I mean "Workspace" when I am actually calling a Project just a new Note/Item. So in #34 you added the command for creating a new workspace (thank you) but I was actually meaning a command to "Add a new item/note" (or whatever we want to call it). And then it will ask you which Workspace to add it to. Basically a way to quick create items/notes within our workspaces. I think it should also ideally then ask you if you want to open this new Item/Note in the current active tab/pane or to open it in a new tab/pane.

I have been referring to those new Notes as "Projects" (thinking like small sub projects for each note) but realize now that "Project" to most probably lines up with "Workspace". I think this goes to the conversation you and I had @marcusolsson via DM in Discord about how the naming has changed a bit and it may be confusing for folks understanding the different between Folder vs Workspace vs Project vs Item vs Note etc.

image

Improve workspace management

Adding and deleting workspaces is done with two bulky buttons next to the dropdown. Should figure out a more compact way of doing this.

[FEAT] Create a template for naming your new items (md notes) within a workspace

Would be great to be able to set a template / default for when you add new items (Projects) inside a Workspace. For example, lets say your Workspace is located under Projects/Family/Health I may often want to name my new project something like Personal Projects - Family - Description of new project so this new feature would provide a setting/field within a Workspace that would say something like "Default new project name" and I would enter Personal Projects - Family - in this setting so that when I add a new item the input pop up would default to this in the modal prompt so I could then easily just finish the name of the Project (note name).

image

[FEAT] When setting the Workspace path instead of needing to manually hand type it, implement a FolderSuggest similar to Templater

Right now you need to hand type the folder path for a new workspace. Would be nice to have a folder suggester helper like Templater has implemented here:

Templater Settings code: https://github.com/SilentVoid13/Templater/blob/8ceed0ad6e602089f6f0f264b889155290fd9e3e/src/settings/Settings.ts#L581-L594

Templater FolderSuggest Class: https://github.com/SilentVoid13/Templater/blob/8ceed0ad6e602089f6f0f264b889155290fd9e3e/src/settings/suggesters/FolderSuggester.ts#L6-L33

Screenshot from Templater:

image

Screenshot from Projects plugin:

image

Refactor FieldControl

The FieldControl component is a remnant from the initial prototype and should use the new input components.

[BUG] Yaml date format shows invalid date in project

Hello! I would first like to express my gratitude and appreciation for this wonderful plugin you're developing!

So, I notice a bug where the plugin is not recognizing my note date format. Although, it does recognize my yaml created: date-time format.

In project:
Screen Shot 2022-09-04 at 2 23 03 PM

In my note's yaml:
Screen Shot 2022-09-04 at 2 21 33 PM

P.S. This is the first time I've submitted a github issue. Do I need to add a bug label or something this issue post? Thanks again!

[FEAT] Support Hover

It will be nice to trigger popover when hover on a item, I tried to add this function but found it was diffcult to understand svelte callback. 😂

Some (maybe) useful code:

export const hoverFile = (e: MouseEvent, item: TFile):void => {
    const targetEl = e.target as HTMLElement;

    if (!e.ctrlKey && !e.metaKey) return;

    app.workspace.trigger('hover-link', {
        event: e,
        source: 'multi-file-explorer-view',
        hoverParent: targetEl.parentElement,
        targetEl,
        linktext: item.name,
        sourcePath: item.path,
    });
}

Ability to specify specific Templates to use for a Project instead of an entire Folder location

Great work here! This is a great first step and I apologize for not being clearer in my initial request but the only problem here is that this requires either have a single folder where all template are stored for all my different projects and cannot be separated into sub folders etc. (because have to set a single folder to use)... as well all templates in a folder are included which I have MANY templates so need to select through a massive list of a lot of "crap" to find a template I want each time. So if I wanted to have just a couple templates to select one for a specific project I would need to copy those templates into their own folder. And then I will use a couple of the same templates on many of my projects so then I would have to copy the same template over and over again which is not ideal because if I want to update one then I have to update it in all locations.

The ideal situation and intention behind my idea/request is that it doesn't matter where templates sit in our vault. You select templates one by one for each project. So some projects have no templates. Some have one single template and others maybe have 3 or 4 templates. My inspiration behind the idea is like how Templater does their "Add new hotkey for template" where you add new items and specify their location and then you can remove them with the "X". So for a project that I want 3 templates to choose from, this is what the settings of the workspace/project would look like:

image

And then when creating new notes for that Project the way you currently have it is perfect! With a dropdown where the default is "None" (empty) and then if you click the dropdown it would just show those 3 templates that I added above (instead of the entire templates folder you need to select currently).

image

Originally posted by @GitMurf in #38 (comment)

[FEAT] Rename Workspace

Why

Sometime I don't want to delete current workspace and create a new workspace again because of the wrong name.

It will be nice to have a modal to change the name of current workspace

Allow code block rendering

I tried to code this already, And it seems like this: ( But finally I failed to add this feature because I don't know how to control workspaceDef to let it doesn't run into dead loop update.

image

image

I think it will be a game changer for people who like notion database.

Add back in the grey dynamic Default Name preview of what the name will look like after resolving placeholders like Date and Time

The grey updater to show you what the template looks like as you build it in the Project settings isn't there so you aren't sure what {{date}} looks like for example.

image

Basically just need to copy over to the Project settings Default Name setting what you were previously using in the New Note creation modal (see below) from the first MVP of the Naming template feature.

image

For Default Name template and then when submitting the name of your new note, illegal character for file names for the OS throw error

This is not really YOUR problem but when just using the default {{date}} - New Item at {{time}} - blah blah for example, the {{time}} outputs like 09:23 which has : colon which on Windows at least is an illegal filename character. So I am getting this error in the console after trying to create a new note and nothing shows to the user... the modal just closes and nothing happens so users who don't know to check the console log will wonder what happened to their note. The most common issue that will come up is when using the {{time}} parameter for the Default Name as it defaults to using : colons.

image

In a perfect world when setting the Default Name if the name resolves to an illegal character like a : then it would turn red or something in the grey helper dynamic name display. I think Licat has an API method somewhere to check for illegal characters. See screenshot for what happens on windows when you try to edit/create a note with a name with illegal character like :.

image

Add tests for UI components

I've attempted to add UI tests for Svelte components, but have failed so far. If anyone has experience with testing Svelte components, I'd love some help.

[FEAT] Add right-click context menu item to Folders in the Obsidian file explorer view to quickly Create a new Workspace

Would be great if we could right-click a folder in the file explorer and have an option to Create/Add a new Projects Workspace using that folder location. Then it would bring up the Add Workspace modal and pre populate the Workspace Path with the full path and the Workspace Name with the name of the folder you selected. So if a folder is located at: Projects/Consulting then it would pre-populate the Workspace Path with Projects/Consulting and the Workspace Name with Consulting (see screenshot below). Of course you can then edit the Workspace Name in that modal as you wish.

image

image

Display metadata

To improve the interoperability between the plugins and the ease of use, it would be great to be able to show metadata in the kanban cards. This is, for example, a column in one of the kanbans I use to manage projects.

image

and this is the associated settings

image

Call Templater to deal with template?

Now I am using templater as default template inserter. It would be nice to have a toggle option to select templater or default, which allows people to use templater when creating new note.

A UI example:

image

What is Templater

Templater introduction: Templater

Trigger it

And calling templater code(From Quickadd):

export function getTemplater(app: App) {
    // @ts-ignore
    return app.plugins.plugins["templater-obsidian"]
}

export async function replaceTemplaterTemplatesInCreatedFile(app: App, file: TFile, force: boolean = false) {
    const templater = getTemplater(app);

    if (templater && (force || !templater?.settings["trigger_on_file_creation"])) {
        const active_file = app.workspace.getActiveFile();
        await templater.templater.overwrite_file_commands(file);
    }
}

export async function templaterParseTemplate(app: App, templateContent: string, targetFile: TFile) {
    const templater = getTemplater(app);
    if (!templater) return templateContent;

    return await templater.templater.parse_template({target_file: targetFile, run_mode: 4}, templateContent);
}

If you allow me to pr this, I can give it a try 😁

Rename records

Ability to rename records from the Edit record modal.

Support tags list property

Currently, the tags property is ignored. An array property of strings could be interpreted as a multi-select field rather than a simple text input.

Add a Timeline view

Add a Timeline view to lay out long-spanning calendar items in parallel. Similar to a Gantt chart.

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.