Compare commits

..

No commits in common. "main" and "1.0.6" have entirely different histories.
main ... 1.0.6

6 changed files with 31 additions and 103 deletions

View file

@ -1,34 +0,0 @@
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

View file

@ -1,17 +0,0 @@
## 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.

View file

@ -1 +0,0 @@
github: lizard-heart

View file

@ -17,15 +17,6 @@ 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:
<br>

View file

@ -1,11 +1,10 @@
{
"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
"id": "tasks-to-omnifocus",
"name": "Send Tasks to OmniFocus",
"version": "1.0.6",
"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",
"isDesktopOnly": false
}

View file

@ -1,6 +1,11 @@
import { serialize } from "monkey-around";
import {
MarkdownView,
CachedMetadata,
Notice,
Plugin,
TFile,
Vault,
Editor,
} from "obsidian";
@ -21,61 +26,46 @@ export default class TasksToOmnifocus extends Plugin {
id: 'extract-tasks',
name: 'Extract Tasks Into OmniFocus',
editorCallback: (editor: Editor, view: MarkdownView) => {
this.addToOmnifocus(false, editor, view);
const editorText = editor.getValue()
this.addToOmnifocus(editorText, editor, view);
},
});
this.addCommand({
id: 'extract-tasks-selection',
name: 'Extract Tasks from selection Into OmniFocus',
editorCallback: (editor: Editor, view: MarkdownView) => {
this.addToOmnifocus(true, editor, view);
const editorText = editor.getSelection();
this.addToOmnifocus(editorText, editor, view);
},
});
this.addSettingTab(new TasksToOmnifocusSettingTab(this.app, this));
}
async addToOmnifocus(isSelection: boolean, editor: Editor, view: MarkdownView) {
let editorText;
if (isSelection) {
editorText = editor.getSelection();
} else {
editorText = editor.getValue();
}
async addToOmnifocus(editorText: string, editor: Editor, view: MarkdownView) {
try {
const tasks = editorText.match(/[-*] \[ \] .*/g);
let tasks = editorText.match(/- \[ \] .*/g);
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);
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);
window.open(
`omnifocus:///add?name=${taskNameEncoded}&note=${taskNoteEncoded}&due=${taskDate}`
`omnifocus:///add?name=${taskNameEncoded}&note=${taskNoteEncoded}`
);
}
if (this.settings.markComplete) {
const completedText = editorText.replace(/([-*]) \[ \]/g, "$1 [x]");
if (isSelection) {
editor.replaceSelection(completedText);
} else {
editor.setValue(completedText)
}
let completedText = editorText.replace(/- \[ \]/g, "- [x]");
editor.replaceSelection(completedText);
}
} catch (err) {
console.error('Error extracting tasks', err);
}
}
@ -83,7 +73,7 @@ export default class TasksToOmnifocus extends Plugin {
await this.saveData(this.settings);
}
onunload() { }
onunload() {}
private async loadSettings() {