Files
bookmarklets/launch-ulysses.js

38 lines
1.8 KiB
JavaScript
Raw Normal View History

/*
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)()
2025-08-13 14:13:51 -04:00
/*
The following is the expanded code
2025-08-13 14:13:51 -04:00
- 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
2025-08-13 14:13:51 -04:00
*/
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 expanded code is run through the tool at the following link to generate the finished bookmarklet from above.
// https://mrcoles.com/bookmarklet/