Skip to content

Commit

Permalink
converted finish script to typescript
Browse files Browse the repository at this point in the history
  • Loading branch information
BrianHicks committed Sep 9, 2022
1 parent 234293b commit 1b747dd
Show file tree
Hide file tree
Showing 2 changed files with 188 additions and 94 deletions.
178 changes: 84 additions & 94 deletions Finish.omnifocusjs/Resources/finish.js
@@ -1,98 +1,88 @@
"use strict";
(() => {
var action = new PlugIn.Action(async (selection, sender) => {
try {
let originalTask = selection.tasks[0]
originalTask.flagged = false;

let isDoneAlert = new Alert("Is this task completely done?", originalTask.name);
isDoneAlert.addOption("Yep!");
isDoneAlert.addOption("Not quite");
isDoneAlert.addOption("Whoops, never mind!");

let isDoneAnswer = await isDoneAlert.show();

if (isDoneAnswer == 0) {
///////////////////////////////
// Yes, it's completely done //
///////////////////////////////
originalTask.markComplete();

let currentSibling = originalTask;

while (true) {
let nextThingAlert = new Alert("Is there anything that has to happen next?", currentSibling.name);
nextThingAlert.addOption("Yep!");
nextThingAlert.addOption("No, we're all done");

let nextThingAnswer = await nextThingAlert.show();
if (nextThingAnswer == 1) {
break;
}

let nextSiblingForm = new Form();
nextSiblingForm.addField(new Form.Field.String("name", "What's Next?"));
nextSiblingForm.addField(new Form.Field.String("note", "Notes"));
await nextSiblingForm.show(`What's the next thing that needs to happen after "${currentSibling.name}"?`, "Save");

currentSibling = new Task(nextSiblingForm.values.name, currentSibling.after);
currentSibling.note = nextSiblingForm.values.note;
currentSibling.addTags(originalTask.tags);
var action = new PlugIn.Action(async (selection, sender) => {
try {
let originalTask = selection.tasks[0];
originalTask.flagged = false;
let isDoneAlert = new Alert("Is this task completely done?", originalTask.name);
isDoneAlert.addOption("Yep!");
isDoneAlert.addOption("Not quite");
isDoneAlert.addOption("Whoops, never mind!");
let isDoneAnswer = await isDoneAlert.show();
if (isDoneAnswer == 0) {
///////////////////////////////
// Yes, it's completely done //
///////////////////////////////
originalTask.markComplete();
let currentSibling = originalTask;
while (true) {
let nextThingAlert = new Alert("Is there anything that has to happen next?", currentSibling.name);
nextThingAlert.addOption("Yep!");
nextThingAlert.addOption("No, we're all done");
let nextThingAnswer = await nextThingAlert.show();
if (nextThingAnswer == 1) {
break;
}
let nextSiblingForm = new Form();
nextSiblingForm.addField(new Form.Field.String("name", "What's Next?"));
nextSiblingForm.addField(new Form.Field.String("note", "Notes"));
await nextSiblingForm.show(`What's the next thing that needs to happen after "${currentSibling.name}"?`, "Save");
var values = nextSiblingForm.values;
currentSibling = new Task(values.name, currentSibling.after);
currentSibling.note = values.note;
currentSibling.addTags(originalTask.tags);
}
}
else if (isDoneAnswer == 1) {
/////////////////////////////
// No, it's not quite done //
/////////////////////////////
let nextThingForm = new Form();
nextThingForm.addField(new Form.Field.String("name", "What's Next?"));
nextThingForm.addField(new Form.Field.String("note", "Notes"));
await nextThingForm.show(`What's the next thing that needs to happen to finish "${originalTask.name}"?`, "Save");
var values = nextThingForm.values;
let currentSibling = new Task(values.name, originalTask.beginning);
currentSibling.note = values.note;
currentSibling.addTags(originalTask.tags);
while (true) {
let nextThingAlert = new Alert("Is there anything that'd have to happen after this is done?", currentSibling.name);
nextThingAlert.addOption("Yep!");
nextThingAlert.addOption("No, not for now");
let nextThingAnswer = await nextThingAlert.show();
if (nextThingAnswer == 1) {
break;
}
let nextSiblingForm = new Form();
nextSiblingForm.addField(new Form.Field.String("name", "What's Next?"));
nextSiblingForm.addField(new Form.Field.String("note", "Notes"));
await nextSiblingForm.show(`What's the next thing that needs to happen after "${currentSibling.name}"?`, "Save");
values = nextSiblingForm.values;
currentSibling = new Task(values.name, currentSibling.after);
currentSibling.note = values.note;
currentSibling.addTags(originalTask.tags);
}
}
else if (isDoneAnswer == 2) {
///////////////////////////////////////
// Whoops, didn't mean to click that //
///////////////////////////////////////
return;
}
else {
/////////////////////////////////////////
// We forgot how many answers we added //
/////////////////////////////////////////
new Alert("Whoops!", `I got a value of '${isDoneAnswer}' from that alert, but I'm not sure what that means. This is a plugin bug!`);
return;
}
}

} else if (isDoneAnswer == 1) {
/////////////////////////////
// No, it's not quite done //
/////////////////////////////
let nextThingForm = new Form();
nextThingForm.addField(new Form.Field.String("name", "What's Next?"));
nextThingForm.addField(new Form.Field.String("note", "Notes"));
await nextThingForm.show(`What's the next thing that needs to happen to finish "${originalTask.name}"?`, "Save");

let currentSibling = new Task(nextThingForm.values.name, originalTask.beginning);
currentSibling.note = nextThingForm.values.note;
currentSibling.addTags(originalTask.tags);

while (true) {
let nextThingAlert = new Alert("Is there anything that'd have to happen after this is done?", currentSibling.name);
nextThingAlert.addOption("Yep!");
nextThingAlert.addOption("No, not for now");

let nextThingAnswer = await nextThingAlert.show();
if (nextThingAnswer == 1) {
break;
}

let nextSiblingForm = new Form();
nextSiblingForm.addField(new Form.Field.String("name", "What's Next?"));
nextSiblingForm.addField(new Form.Field.String("note", "Notes"));
await nextSiblingForm.show(`What's the next thing that needs to happen after "${currentSibling.name}"?`, "Save");

currentSibling = new Task(nextSiblingForm.values.name, currentSibling.after);
currentSibling.note = nextSiblingForm.values.note;
currentSibling.addTags(originalTask.tags);
catch (err) {
console.error(err);
}

} else if (isDoneAnswer == 2) {
///////////////////////////////////////
// Whoops, didn't mean to click that //
///////////////////////////////////////
return;

} else {
/////////////////////////////////////////
// We forgot how many answers we added //
/////////////////////////////////////////
new Alert("Whoops!", `I got a value of '${isDoneAnswer}' from that alert, but I'm not sure what that means. This is a plugin bug!`)
return;
}
} catch (err) {
console.error(err);
}
});

action.validate = function(selection, sender){
return (selection.tasks.length === 1 && !selection.tasks[0].hasChildren)
};

return action;
});
action.validate = function (selection, sender) {
return (selection.tasks.length === 1 && !selection.tasks[0].hasChildren);
};
return action;
})();
104 changes: 104 additions & 0 deletions Finish.omnifocusjs/Resources/finish.ts
@@ -0,0 +1,104 @@
(() => {
var action = new PlugIn.Action(async (selection: Selection, sender: any) => {
try {
let originalTask = selection.tasks[0]
originalTask.flagged = false;

let isDoneAlert = new Alert("Is this task completely done?", originalTask.name);
isDoneAlert.addOption("Yep!");
isDoneAlert.addOption("Not quite");
isDoneAlert.addOption("Whoops, never mind!");

let isDoneAnswer = await isDoneAlert.show();

if (isDoneAnswer == 0) {
///////////////////////////////
// Yes, it's completely done //
///////////////////////////////
originalTask.markComplete();

let currentSibling = originalTask;

while (true) {
let nextThingAlert = new Alert("Is there anything that has to happen next?", currentSibling.name);
nextThingAlert.addOption("Yep!");
nextThingAlert.addOption("No, we're all done");

let nextThingAnswer = await nextThingAlert.show();
if (nextThingAnswer == 1) {
break;
}

let nextSiblingForm = new Form();
nextSiblingForm.addField(new Form.Field.String("name", "What's Next?"));
nextSiblingForm.addField(new Form.Field.String("note", "Notes"));
await nextSiblingForm.show(`What's the next thing that needs to happen after "${currentSibling.name}"?`, "Save");

var values = nextSiblingForm.values as { name: string, note: string }

currentSibling = new Task(values.name, currentSibling.after);
currentSibling.note = values.note;
currentSibling.addTags(originalTask.tags);
}

} else if (isDoneAnswer == 1) {
/////////////////////////////
// No, it's not quite done //
/////////////////////////////
let nextThingForm = new Form();
nextThingForm.addField(new Form.Field.String("name", "What's Next?"));
nextThingForm.addField(new Form.Field.String("note", "Notes"));
await nextThingForm.show(`What's the next thing that needs to happen to finish "${originalTask.name}"?`, "Save");

var values = nextThingForm.values as { name: string, note: string }

let currentSibling = new Task(values.name, originalTask.beginning);
currentSibling.note = values.note;
currentSibling.addTags(originalTask.tags);

while (true) {
let nextThingAlert = new Alert("Is there anything that'd have to happen after this is done?", currentSibling.name);
nextThingAlert.addOption("Yep!");
nextThingAlert.addOption("No, not for now");

let nextThingAnswer = await nextThingAlert.show();
if (nextThingAnswer == 1) {
break;
}

let nextSiblingForm = new Form();
nextSiblingForm.addField(new Form.Field.String("name", "What's Next?"));
nextSiblingForm.addField(new Form.Field.String("note", "Notes"));
await nextSiblingForm.show(`What's the next thing that needs to happen after "${currentSibling.name}"?`, "Save");

values = nextSiblingForm.values as { name: string, note: string }

currentSibling = new Task(values.name, currentSibling.after);
currentSibling.note = values.note;
currentSibling.addTags(originalTask.tags);
}

} else if (isDoneAnswer == 2) {
///////////////////////////////////////
// Whoops, didn't mean to click that //
///////////////////////////////////////
return;

} else {
/////////////////////////////////////////
// We forgot how many answers we added //
/////////////////////////////////////////
new Alert("Whoops!", `I got a value of '${isDoneAnswer}' from that alert, but I'm not sure what that means. This is a plugin bug!`)
return;
}
} catch (err) {
console.error(err);
}
});

action.validate = function(selection: Selection, sender: any){
return (selection.tasks.length === 1 && !selection.tasks[0].hasChildren)
};

return action;
})();

0 comments on commit 1b747dd

Please sign in to comment.