commit 817fb4b5ed857a8e47407e7f9840d3c506c129a3 Author: Mike Rockwell Date: Wed Aug 13 14:13:51 2025 -0400 first commit diff --git a/launch-ulysses.js b/launch-ulysses.js new file mode 100644 index 0000000..4ddc666 --- /dev/null +++ b/launch-ulysses.js @@ -0,0 +1,36 @@ +/* + The following is the expanded code + + It takes the URL encoded template as a variable + checks the user agent to see if you're running it on an iPhone/iPad/iPod + If you're running on iOS, it opens a new sheet in Ulysses with the template + If you're on any other platform, it copies the template to your clipboard +*/ + +var template = `%23%23%20title%0Aslug%0Atags%0A%0Abody`; +var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; + +if (isIOS) { + window.location.href = `ulysses://x-callback-url/new-sheet?text=${template}&group=Inbox`; +} else { + (function (text) { + var node = document.createElement('textarea'); + var selection = document.getSelection(); + + node.textContent = text; + document.body.appendChild(node); + + selection.removeAllRanges(); + node.select(); + document.execCommand('copy'); + + selection.removeAllRanges(); + document.body.removeChild(node); + })(decodeURIComponent(template)); +} + +// The following URL is used to convert it to a bookmarklet +https://mrcoles.com/bookmarklet/ + +// The following is the bookmarklet itself +javascript:(function()%7Bvar%20template%20%3D%20%60%2523%2523%2520title%250Aslug%250Atags%250A%250Abody%60%3Bvar%20isIOS%20%3D%20%2FiPad%7CiPhone%7CiPod%2F.test(navigator.userAgent)%20%26%26%20!window.MSStream%3Bif%20(isIOS)%20%7Bwindow.location.href%20%3D%20%60ulysses%3A%2F%2Fx-callback-url%2Fnew-sheet%3Ftext%3D%24%7Btemplate%7D%26group%3DInbox%60%3B%7D%20else%20%7B(function%20(text)%20%7Bvar%20node%20%3D%20document.createElement('textarea')%3Bvar%20selection%20%3D%20document.getSelection()%3Bnode.textContent%20%3D%20text%3Bdocument.body.appendChild(node)%3Bselection.removeAllRanges()%3Bnode.select()%3Bdocument.execCommand('copy')%3Bselection.removeAllRanges()%3Bdocument.body.removeChild(node)%3B%7D)(decodeURIComponent(template))%3B%7D%7D)() \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..c281f90 --- /dev/null +++ b/readme.md @@ -0,0 +1,13 @@ +# Bookmarklets + +## Launch Ulysses + +This is a JavaScript bookmarklet implementation of my Launch Ulysses shortcut from [The Toolkit](https://initialcharge.net/projects/toolkit/). + +If run from an iPhone or iPad, it creates a new sheet in Ulysses, within a group named "Inbox", with my template for writing feature articles. + +If the bookmarklet is run on any other device, it will copy the template to your device's clipboard, which can be pasted into your writing application of choice. + +[Launch Ulysses][1] — drag this link into your browser's bookmarks bar to install. + +[1] : javascript:(function()%7Bvar%20template%20%3D%20%60%2523%2523%2520title%250Aslug%250Atags%250A%250Abody%60%3Bvar%20isIOS%20%3D%20%2FiPad%7CiPhone%7CiPod%2F.test(navigator.userAgent)%20%26%26%20!window.MSStream%3Bif%20(isIOS)%20%7Bwindow.location.href%20%3D%20%60ulysses%3A%2F%2Fx-callback-url%2Fnew-sheet%3Ftext%3D%24%7Btemplate%7D%26group%3DInbox%60%3B%7D%20else%20%7B(function%20(text)%20%7Bvar%20node%20%3D%20document.createElement('textarea')%3Bvar%20selection%20%3D%20document.getSelection()%3Bnode.textContent%20%3D%20text%3Bdocument.body.appendChild(node)%3Bselection.removeAllRanges()%3Bnode.select()%3Bdocument.execCommand('copy')%3Bselection.removeAllRanges()%3Bdocument.body.removeChild(node)%3B%7D)(decodeURIComponent(template))%3B%7D%7D)() \ No newline at end of file