feat: bookmarklet to blog stuff easily

This commit is contained in:
2026-02-22 17:49:11 +01:00
parent 6e45936fc9
commit 509afa4c85
17 changed files with 613 additions and 5 deletions

View File

@@ -0,0 +1,41 @@
import { describe, it, expect } from 'vitest';
import {
buildBlogmarkMarkdownLink,
extractBlogmarkPayloadFromDeepLink,
generateBlogmarkBookmarkletSource,
} from '../../src/main/shared/blogmark';
describe('blogmark deep-link payload', () => {
it('extracts and sanitizes title and URL from deep link', () => {
const payload = extractBlogmarkPayloadFromDeepLink(
'bds://new-post?title=Hello%20%3Cb%3EWorld%3C%2Fb%3E&url=https%3A%2F%2Fexample.com%2Fpost%3Fx%3D1%23frag',
);
expect(payload).toEqual({
title: 'Hello <b>World</b>',
url: 'https://example.com/post?x=1',
});
});
it('rejects non-http URLs', () => {
const payload = extractBlogmarkPayloadFromDeepLink(
'bds://new-post?title=Unsafe&url=javascript%3Aalert(1)',
);
expect(payload).toBeNull();
});
it('builds safe markdown source link', () => {
const markdown = buildBlogmarkMarkdownLink('A [title] (test)', 'https://example.com/x?y=1');
expect(markdown).toBe('[A \\[title\\] \\(test\\)](<https://example.com/x?y=1>)');
});
it('generates bookmarklet that targets bds protocol', () => {
const source = generateBlogmarkBookmarkletSource();
expect(source.startsWith('javascript:')).toBe(true);
expect(source).toContain('bds://new-post?title=');
expect(source).toContain('encodeURIComponent(document.title');
expect(source).toContain('encodeURIComponent(location.href');
});
});