From df10736dc9da80e0b40006300ecdba70005a6804 Mon Sep 17 00:00:00 2001 From: Marek Knappe Date: Sat, 23 Dec 2023 04:59:03 +1000 Subject: [feature] Added threads recipe (#484) Co-authored-by: Marek Knappe --- recipes/threads/webview.js | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 recipes/threads/webview.js (limited to 'recipes/threads/webview.js') diff --git a/recipes/threads/webview.js b/recipes/threads/webview.js new file mode 100644 index 0000000..3092d21 --- /dev/null +++ b/recipes/threads/webview.js @@ -0,0 +1,78 @@ +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} + +const _path = _interopRequireDefault(require('path')); + +module.exports = (Ferdium, settings) => { + // adapted from the franz-custom-website recipe, for opening + // links according to the user's preference (Ferdium/ext.browser) + document.addEventListener( + 'click', + event => { + const link = event.target.closest('a'); + const button = event.target.closest('button'); + + if (link || button) { + const url = link + ? link.getAttribute('href') + : button.getAttribute('title'); + + // check if the URL is relative or absolute + if (url.startsWith('/')) { + return; + } + + // check if we have a valid URL that is not a script nor an image: + if (url && url !== '#' && !Ferdium.isImage(link)) { + event.preventDefault(); + event.stopPropagation(); + + if (settings.trapLinkClicks === true) { + window.location.href = url; + } else { + Ferdium.openNewWindow(url); + } + } + } + }, + true, + ); + + const getMessages = () => { + const element = document.querySelector('a[href^="/direct/inbox"] span'); + Ferdium.setBadge( + element && element.textContent + ? Ferdium.safeParseInt(element.textContent) + : 0, + ); + }; + + Ferdium.loop(getMessages); + + // https://github.com/ferdium/ferdium-recipes/blob/9d715597a600710c20f75412d3dcd8cdb7b3c39e/docs/frontend_api.md#usage-4 + // Helper that activates DarkReader and injects your darkmode.css at the same time + Ferdium.handleDarkMode(isEnabled => { + const url = new URL(window.location.href); + const { searchParams } = url; + const isDarkModeParam = searchParams.get('theme'); + let changedParams = false; + + if (isEnabled) { + isDarkModeParam + ? null + : (searchParams.set('theme', 'dark'), (changedParams = true)); + } else { + isDarkModeParam + ? (searchParams.delete('theme', 'dark'), (changedParams = true)) + : null; + } + + changedParams + ? ((url.search = searchParams.toString()), + (window.location.href = url.toString())) + : null; + }); + + Ferdium.injectCSS(_path.default.join(__dirname, 'service.css')); +}; -- cgit v1.2.3-54-g00ecf