bookmark-audio-fragment/app/create-bookmarks/ background.js
31 lines
913 B

  1. import { makeRemotelyCallable, remoteFunction } from 'webextension-rpc';
  2. function createPreciseUrl(url, selector) {
  3. const properUrl = url.split('#')[0];
  4. let fragmentIdentifier;
  5. if (selector.type === 'FragmentSelector') {
  6. fragmentIdentifier = selector.value;
  7. } else {
  8. throw new Error('Unsupported selector type');
  9. }
  10. return properUrl + '#' + fragmentIdentifier;
  11. }
  12. async function createBookmark({ tab }) {
  13. const selector = await remoteFunction('describeSelection', { tabId: tab.id })();
  14. const bookmarkUrl = createPreciseUrl(tab.url, selector);
  15. const filenameMatch = tab.url.match(/.*\/([^\/#?]+)(?:\?.*)?(?:#.*)?/);
  16. const filename = filenameMatch ? filenameMatch[1] : 'Audio fragment';
  17. const bookmarkTitle = `${filename} ${start}–${end}`;
  18. await browser.bookmarks.create({
  19. title: bookmarkTitle,
  20. url: bookmarkUrl,
  21. });
  22. }
  23. makeRemotelyCallable({ createBookmark }, { insertExtraArg: true });