Plug-In: Append to Note
This action will append the provided text to the end of the note of the current task, and includes an option to preface the added text with a localized date/time stamp.
Return to: OmniFocus Plug-In Collection
Append to Note
/*{
"type": "action",
"targets": ["omnifocus"],
"author": "Otto Automator",
"identifier": "com.omni-automation.of.append-to-note",
"version": "1.5",
"description": "This action will append the provided text to the end of the note of the current task or project.",
"label": "Append to Note",
"shortLabel": "Append to Note",
"image": "line.horizontal.3.circle"
}*/
(() => {
var action = new PlugIn.Action(async function(selection, sender){
// action code
// selection options: tasks, projects, folders, tags, allObjects
try {
var item = selection.databaseObjects[0]
textInputField = new Form.Field.String(
"textInput",
null,
null
)
checkSwitchField1 = new Form.Field.Checkbox(
"shouldIncludeTimeStamp",
"Include date/time stamp",
true
)
menuItems = ["Nothing","Single Space", "Double Space","Single Line","Double Line"]
spacingItems = [""," "," ","\n","\n\n"]
menuIndexes = [0,1,2,3,4]
menuElement = new Form.Field.Option(
"spacingMethod",
"Prepend with",
menuIndexes,
menuItems,
4
)
menuElement.allowsNull = false
inputForm = new Form()
inputForm.addField(textInputField)
inputForm.addField(menuElement)
inputForm.addField(checkSwitchField1)
inputForm.validate = function(formObject){
inputText = formObject.values['textInput']
return ((!inputText)?false:true)
}
formPrompt = "Enter text to append to note:"
buttonTitle = "Continue"
formObject = await inputForm.show(formPrompt,buttonTitle)
var textValue = formObject.values['textInput']
shouldIncludeTimeStamp = formObject.values['shouldIncludeTimeStamp']
spacingMethodIndex = formObject.values['spacingMethod']
if(shouldIncludeTimeStamp){
timeStamp = new Date().toLocaleString()
textValue = timeStamp + "\n" + textValue
}
prependText = spacingItems[spacingMethodIndex]
if(app.userVersion < new Version("4")){
item.appendStringToNote(prependText + textValue)
} else {
noteObj = item.noteText
style = noteObj.styleForRange(noteObj.range)
newTextObj = new Text(prependText + textValue, style)
noteObj.append(newTextObj)
}
}
catch(err){
if(!causedByUserCancelling){
new Alert(err.name, err.message).show()
}
}
});
action.validate = function(selection, sender){
return (
selection.databaseObjects.length === 1 &&
selection.tasks.length === 1 ||
selection.projects.length === 1
)
};
return action;
})();