diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a83cd66 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,34 @@ +name: Release Obsidian plugin + +on: + push: + tags: + - "*" + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: "18.x" + + - name: Build plugin + run: | + npm install + npm run build + + - name: Create release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + tag="${GITHUB_REF#refs/tags/}" + + gh release create "$tag" \ + --title="$tag" \ + --draft \ + main.js manifest.json \ No newline at end of file diff --git a/CHANGES.md b/CHANGES.md new file mode 100644 index 0000000..e5caa8e --- /dev/null +++ b/CHANGES.md @@ -0,0 +1,17 @@ +## 1.1.0 (July 2024) + +- Fixes issue with vault names containing spaces (#4). Thanks to shabegom. +- Accepts "* [ ]" in addition to "- [ ]" as task indicators (#6) +- Set a due date by adding "// YYYY-MM-DD" to end of task (#11) + +## 1.0.7 (June 2023) + +- Fixed issue with duplicate tasks. + +## 1.0.6 (March 2023) + +- Adds a command to export selection to Omnifocus. Thanks to mattsmallman. + +## 1.0.4 - 1.0.5 (Feb-Mar 2023) + +- Initial releases. diff --git a/README.md b/README.md index 84c5b96..e8d4590 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,15 @@ This plugin will extract tasks from the current note open in Obsidian and create 4. Asign any projects and tasks in the Omnifocus modal that appears 5. The tasks should be marked as complete in Obsidian if that setting is enabled +## Examples + +```markdown +- [ ] This task will be sent to OmniFocus +- [x] This task will not (already checked) +* [ ] This task will be sent to OmniFocus +- [ ] This task is due 1 Feb // 2025-02-01 +``` + ## Support In case you want to support development:
diff --git a/manifest.json b/manifest.json index 2107904..f2b7b8b 100644 --- a/manifest.json +++ b/manifest.json @@ -1,11 +1,11 @@ { - "id": "tasks-to-omnifocus", - "name": "Send Tasks to OmniFocus", - "version": "1.0.7", - "minAppVersion": "0.12.0", - "description": "An Obsidian plugin will extract tasks from the current note and create them in OmniFocus.", - "author": "Henry Gustafson", - "authorUrl": "https://lizard-heart.github.io", - "fundingUrl": "https://buymeacoffee.com/lizardheart", - "isDesktopOnly": false + "id": "tasks-to-omnifocus", + "name": "Send Tasks to OmniFocus", + "version": "1.1.0", + "minAppVersion": "0.12.0", + "description": "An Obsidian plugin will extract tasks from the current note and create them in OmniFocus.", + "author": "Henry Gustafson", + "authorUrl": "https://lizard-heart.github.io", + "fundingUrl": "https://buymeacoffee.com/lizardheart", + "isDesktopOnly": false } diff --git a/src/main.ts b/src/main.ts index 803e056..b62806d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,11 +1,6 @@ -import { serialize } from "monkey-around"; import { MarkdownView, - CachedMetadata, - Notice, Plugin, - TFile, - Vault, Editor, } from "obsidian"; @@ -41,30 +36,37 @@ export default class TasksToOmnifocus extends Plugin { this.addSettingTab(new TasksToOmnifocusSettingTab(this.app, this)); } - async addToOmnifocus(isSelection: bool, editor: Editor, view: MarkdownView) { - var editorText; + async addToOmnifocus(isSelection: boolean, editor: Editor, view: MarkdownView) { + let editorText; if (isSelection) { editorText = editor.getSelection(); } else { editorText = editor.getValue(); } try { - let tasks = editorText.match(/- \[ \] .*/g); + const tasks = editorText.match(/[-*] \[ \] .*/g); - for (let task of tasks) { - let taskName = task.replace("- [ ] ", ""); - let taskNameEncoded = encodeURIComponent(taskName); - let noteURL = view.file.path.replace(/ /g, "%20").replace(/\//g, "%2F"); - let vaultName = app.vault.getName(); - let taskNoteEncoded = encodeURIComponent("obsidian://open?=" + vaultName + "&file=" + noteURL); + for (const task of tasks) { + let taskName = task.replace(/[-*] \[ \] /, ""); + // check if taskName has "//" followed by a date, and if so extract the date for later use and remove it from taskName + const dateMatch = taskName.match(/(\/\/\s*)(\d{4}-\d{2}-\d{2})/); + let taskDate = ""; + if (dateMatch) { + taskDate = dateMatch[2]; + taskName = taskName.replace(dateMatch[0], ""); + } + const taskNameEncoded = encodeURIComponent(taskName); + const noteURL = view.file.path.replace(/ /g, "%20").replace(/\//g, "%2F"); + const vaultName = this.app.vault.getName().replace(/\s/g, "%20"); + const taskNoteEncoded = encodeURIComponent("obsidian://open?=" + vaultName + "&file=" + noteURL); window.open( - `omnifocus:///add?name=${taskNameEncoded}¬e=${taskNoteEncoded}` + `omnifocus:///add?name=${taskNameEncoded}¬e=${taskNoteEncoded}&due=${taskDate}` ); } if (this.settings.markComplete) { - let completedText = editorText.replace(/- \[ \]/g, "- [x]"); + const completedText = editorText.replace(/([-*]) \[ \]/g, "$1 [x]"); if (isSelection) { editor.replaceSelection(completedText); } else { @@ -73,7 +75,7 @@ export default class TasksToOmnifocus extends Plugin { } } catch (err) { - + console.error('Error extracting tasks', err); } }