SharePanel Class

An interface that can display the system share interaction for the given items.

Instance properties:

Instance functions:

Example: AirDrop OmniFocus Database Backup

Here is an example script that use the SharePanel class to AirDrop a backup copy of the OmniFocus database:

omnifocus://localhost/omnijs-run?script=try%7Bvar%20fileTypeID%20%3D%20%27com%2Eomnigroup%2Eomnifocus%2Efiletype%2Eofocus%2Dbackup%27%0Avar%20defaultName%20%3D%20%22OmniFocus%20DB%20Backup%22%0Avar%20wrapperPromise%20%3D%20document%2EmakeFileWrapper%28defaultName%2C%20fileTypeID%29%0AwrapperPromise%2Ethen%28function%28wrapper%29%7B%0A%09new%20SharePanel%28%5Bwrapper%5D%29%2Eshow%28%29%0A%7D%29%7Dcatch%28err%29%7Bconsole%2Elog%28err%29%7D
Share Database Backup
 

fileTypeID = 'com.omnigroup.omnifocus.filetype.ofocus-backup' defaultName = "OmniFocus DB Backup" wrapperPromise = document.makeFileWrapper(defaultName, fileTypeID) wrapperPromise.then(function(wrapper){ new SharePanel([wrapper]).show() })
Share Database Backup (Asynchronous)


(async () => { try { fileTypeID = 'com.omnigroup.omnifocus.filetype.ofocus-backup' defaultName = "OmniFocus DB Backup" wrapper = await document.makeFileWrapper(defaultName, fileTypeID) new SharePanel([wrapper]).show() } catch(err){ new Alert(err.name, err.message).show() } })();

When the script is run, the share sheet appears from which you can select the option to AirDrop the exported file:

share-sheet

Once you have chosen the sharing method from the Share Sheet, the corresponding share dialog appears:

airdrop-dialog

Plug-In: Share Clipboard Text

Here’s a useful plug-in that summons the system Share Panel to share the current text on the clipboard. Great for creating a new Apple note, or Drafts document!

Share Clipboard Text
  

/*{ "type": "action", "targets": ["omnifocus", "omniplan", "omnioutliner", "omnigraffle"], "author": "Otto Automator", "identifier": "com.omni-automation.all.share-clipboard-text", "version": "1.1", "description": "This plug-in will display the system Share Panel for sharing the current text contents of the pasteboard.", "label": "Share Clipboard Text", "shortLabel": "Share Clipboard Text", "paletteLabel": "Share Clipboard Text", "image": "square.and.arrow.up.circle.fill" }*/ (() => { const action = new PlugIn.Action(function(selection, sender){ clipboardText = Pasteboard.general.string new SharePanel([clipboardText]).show() }); action.validate = function(selection, sender){ return (Pasteboard.general.string.length > 0) }; return action; })();

Share OmniFocus Attachments

Here’s a script that will share the attachments of the selected task or project:

Share Attachments


try { sel = document.windows[0].selection selCount = sel.tasks.length + sel.projects.length if(selCount === 1){ if (sel.tasks.length === 1){ if (sel.tasks[0].attachments.length === 0){ throw new Error("The selected task has no attachments to share.") } new SharePanel(sel.tasks[0].attachments).show() } else { if (sel.projects[0].attachments.length === 0){ throw new Error("The selected project has no attachments to share.") } new SharePanel(sel.projects[0].attachments).show() } } else { throw new Error("Please select a single project or task with attachments.") } } catch(err){ new Alert("SELECTION ISSUE", err.message).show() }