121a6d992e2d2cf7bd558010e44454450f627ba97614c9623d48abb23dcff7dc.json raw

   1  {"ast":null,"code":"import _asyncToGenerator from \"/home/mleku/src/orly.dev/next/signer/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { LoggerService, NavComponent } from '@common';\nimport { FirefoxMetaHandler } from '../../../common/data/firefox-meta-handler';\nimport browser from 'webextension-polyfill';\nimport * as i0 from \"@angular/core\";\nconst _forTrack0 = ($index, $item) => $item.id;\nfunction BookmarksComponent_Conditional_5_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r1 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"button\", 9);\n    i0.ɵɵlistener(\"click\", function BookmarksComponent_Conditional_5_Template_button_click_0_listener() {\n      i0.ɵɵrestoreView(_r1);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.onTestPrompt());\n    });\n    i0.ɵɵelementStart(1, \"span\", 3);\n    i0.ɵɵtext(2, \"\\u2728\");\n    i0.ɵɵelementEnd()();\n  }\n}\nfunction BookmarksComponent_Conditional_12_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 7);\n    i0.ɵɵtext(1, \"Loading...\");\n    i0.ɵɵelementEnd();\n  }\n}\nfunction BookmarksComponent_Conditional_13_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 8)(1, \"span\", 10);\n    i0.ɵɵtext(2, \" No bookmarks yet. Click \\\"Bookmark This Page\\\" to add the current page. \");\n    i0.ɵɵelementEnd()();\n  }\n}\nfunction BookmarksComponent_Conditional_14_For_1_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r3 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"div\", 12);\n    i0.ɵɵlistener(\"click\", function BookmarksComponent_Conditional_14_For_1_Template_div_click_0_listener() {\n      const bookmark_r4 = i0.ɵɵrestoreView(_r3).$implicit;\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.openBookmark(bookmark_r4));\n    });\n    i0.ɵɵelementStart(1, \"div\", 13)(2, \"span\", 14);\n    i0.ɵɵtext(3);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(4, \"span\", 15);\n    i0.ɵɵtext(5);\n    i0.ɵɵelementEnd()();\n    i0.ɵɵelementStart(6, \"button\", 16);\n    i0.ɵɵlistener(\"click\", function BookmarksComponent_Conditional_14_For_1_Template_button_click_6_listener($event) {\n      const bookmark_r4 = i0.ɵɵrestoreView(_r3).$implicit;\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      ctx_r1.onRemoveBookmark(bookmark_r4);\n      return i0.ɵɵresetView($event.stopPropagation());\n    });\n    i0.ɵɵelementStart(7, \"span\", 3);\n    i0.ɵɵtext(8, \"\\u2715\");\n    i0.ɵɵelementEnd()()();\n  }\n  if (rf & 2) {\n    const bookmark_r4 = ctx.$implicit;\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵadvance(3);\n    i0.ɵɵtextInterpolate(bookmark_r4.title);\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate(ctx_r1.getDomain(bookmark_r4.url));\n  }\n}\nfunction BookmarksComponent_Conditional_14_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵrepeaterCreate(0, BookmarksComponent_Conditional_14_For_1_Template, 9, 2, \"div\", 11, _forTrack0);\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵrepeater(ctx_r1.bookmarks);\n  }\n}\nexport let BookmarksComponent = /*#__PURE__*/(() => {\n  class BookmarksComponent extends NavComponent {\n    #logger = inject(LoggerService);\n    #metaHandler = new FirefoxMetaHandler();\n    #router = inject(Router);\n    bookmarks = [];\n    isLoading = true;\n    ngOnInit() {\n      var _this = this;\n      return _asyncToGenerator(function* () {\n        yield _this.loadBookmarks();\n      })();\n    }\n    loadBookmarks() {\n      var _this2 = this;\n      return _asyncToGenerator(function* () {\n        _this2.isLoading = true;\n        try {\n          const metaData = yield _this2.#metaHandler.loadFullData();\n          _this2.#metaHandler.setFullData(metaData);\n          _this2.bookmarks = _this2.#metaHandler.getBookmarks();\n        } catch (error) {\n          console.error('Failed to load bookmarks:', error);\n        } finally {\n          _this2.isLoading = false;\n        }\n      })();\n    }\n    onBookmarkThisPage() {\n      var _this3 = this;\n      return _asyncToGenerator(function* () {\n        try {\n          // Get the current tab URL and title\n          const [tab] = yield browser.tabs.query({\n            active: true,\n            currentWindow: true\n          });\n          if (!tab?.url || !tab?.title) {\n            console.error('Could not get current tab info');\n            return;\n          }\n          // Check if already bookmarked\n          if (_this3.bookmarks.some(b => b.url === tab.url)) {\n            console.log('Page already bookmarked');\n            return;\n          }\n          const newBookmark = {\n            id: crypto.randomUUID(),\n            url: tab.url,\n            title: tab.title,\n            createdAt: Date.now()\n          };\n          _this3.bookmarks = [newBookmark, ..._this3.bookmarks];\n          yield _this3.saveBookmarks();\n          _this3.#logger.logBookmarkAdded(newBookmark.url, newBookmark.title);\n        } catch (error) {\n          console.error('Failed to bookmark page:', error);\n        }\n      })();\n    }\n    onRemoveBookmark(bookmark) {\n      var _this4 = this;\n      return _asyncToGenerator(function* () {\n        _this4.bookmarks = _this4.bookmarks.filter(b => b.id !== bookmark.id);\n        yield _this4.saveBookmarks();\n        _this4.#logger.logBookmarkRemoved(bookmark.url, bookmark.title);\n      })();\n    }\n    saveBookmarks() {\n      var _this5 = this;\n      return _asyncToGenerator(function* () {\n        try {\n          yield _this5.#metaHandler.setBookmarks(_this5.bookmarks);\n        } catch (error) {\n          console.error('Failed to save bookmarks:', error);\n        }\n      })();\n    }\n    openBookmark(bookmark) {\n      browser.tabs.create({\n        url: bookmark.url\n      });\n    }\n    getDomain(url) {\n      try {\n        return new URL(url).hostname;\n      } catch {\n        return url;\n      }\n    }\n    onClickLock() {\n      var _this6 = this;\n      return _asyncToGenerator(function* () {\n        _this6.#logger.logVaultLock();\n        yield _this6.storage.lockVault();\n        _this6.#router.navigateByUrl('/vault-login');\n      })();\n    }\n    static ɵfac = /*@__PURE__*/(() => {\n      let ɵBookmarksComponent_BaseFactory;\n      return function BookmarksComponent_Factory(__ngFactoryType__) {\n        return (ɵBookmarksComponent_BaseFactory || (ɵBookmarksComponent_BaseFactory = i0.ɵɵgetInheritedFactory(BookmarksComponent)))(__ngFactoryType__ || BookmarksComponent);\n      };\n    })();\n    static ɵcmp = /*@__PURE__*/i0.ɵɵdefineComponent({\n      type: BookmarksComponent,\n      selectors: [[\"app-bookmarks\"]],\n      features: [i0.ɵɵInheritDefinitionFeature],\n      decls: 15,\n      vars: 2,\n      consts: [[1, \"sam-text-header\"], [1, \"header-buttons\"], [\"title\", \"Lock\", 1, \"header-btn\", 3, \"click\"], [1, \"emoji\"], [\"title\", \"Test Permission Prompt\", 1, \"header-btn\"], [\"title\", \"Bookmark This Page\", 1, \"add-btn\", 3, \"click\"], [1, \"bookmarks-container\"], [1, \"loading-state\"], [1, \"empty-state\"], [\"title\", \"Test Permission Prompt\", 1, \"header-btn\", 3, \"click\"], [1, \"sam-text-muted\"], [1, \"bookmark-item\"], [1, \"bookmark-item\", 3, \"click\"], [1, \"bookmark-info\"], [1, \"bookmark-title\"], [1, \"bookmark-url\"], [\"title\", \"Remove bookmark\", 1, \"remove-btn\", 3, \"click\"]],\n      template: function BookmarksComponent_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1)(2, \"button\", 2);\n          i0.ɵɵlistener(\"click\", function BookmarksComponent_Template_button_click_2_listener() {\n            return ctx.onClickLock();\n          });\n          i0.ɵɵelementStart(3, \"span\", 3);\n          i0.ɵɵtext(4, \"\\uD83D\\uDD12\");\n          i0.ɵɵelementEnd()();\n          i0.ɵɵtemplate(5, BookmarksComponent_Conditional_5_Template, 3, 0, \"button\", 4);\n          i0.ɵɵelementEnd();\n          i0.ɵɵelementStart(6, \"span\");\n          i0.ɵɵtext(7, \"Bookmarks\");\n          i0.ɵɵelementEnd();\n          i0.ɵɵelementStart(8, \"button\", 5);\n          i0.ɵɵlistener(\"click\", function BookmarksComponent_Template_button_click_8_listener() {\n            return ctx.onBookmarkThisPage();\n          });\n          i0.ɵɵelementStart(9, \"span\", 3);\n          i0.ɵɵtext(10, \"\\u2795\");\n          i0.ɵɵelementEnd()()();\n          i0.ɵɵelementStart(11, \"div\", 6);\n          i0.ɵɵtemplate(12, BookmarksComponent_Conditional_12_Template, 2, 0, \"div\", 7)(13, BookmarksComponent_Conditional_13_Template, 3, 0, \"div\", 8)(14, BookmarksComponent_Conditional_14_Template, 2, 0);\n          i0.ɵɵelementEnd();\n        }\n        if (rf & 2) {\n          i0.ɵɵadvance(5);\n          i0.ɵɵconditional(ctx.devMode ? 5 : -1);\n          i0.ɵɵadvance(7);\n          i0.ɵɵconditional(ctx.isLoading ? 12 : ctx.bookmarks.length === 0 ? 13 : 14);\n        }\n      },\n      styles: [\"[_nghost-%COMP%] {\\n  height: 100%;\\n  display: flex;\\n  flex-direction: column;\\n  padding-top: var(--size);\\n  padding-bottom: var(--size);\\n  overflow: hidden;\\n}\\n[_nghost-%COMP%]    > *[_ngcontent-%COMP%]:not(.sam-text-header) {\\n  margin-left: var(--size);\\n  margin-right: var(--size);\\n}\\n[_nghost-%COMP%]   .sam-text-header[_ngcontent-%COMP%] {\\n  margin-bottom: var(--size);\\n  flex-shrink: 0;\\n}\\n[_nghost-%COMP%]   .sam-text-header[_ngcontent-%COMP%]   .add-btn[_ngcontent-%COMP%] {\\n  position: absolute;\\n  right: 0;\\n  background: transparent;\\n  border: none;\\n  padding: 8px;\\n  cursor: pointer;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  border-radius: 4px;\\n  transition: background-color 0.2s;\\n}\\n[_nghost-%COMP%]   .sam-text-header[_ngcontent-%COMP%]   .add-btn[_ngcontent-%COMP%]:hover {\\n  background-color: var(--background-light);\\n}\\n[_nghost-%COMP%]   .sam-text-header[_ngcontent-%COMP%]   .add-btn[_ngcontent-%COMP%]   .emoji[_ngcontent-%COMP%] {\\n  font-size: 20px;\\n}\\n\\n.bookmarks-container[_ngcontent-%COMP%] {\\n  flex: 1;\\n  overflow-y: auto;\\n}\\n\\n.empty-state[_ngcontent-%COMP%], \\n.loading-state[_ngcontent-%COMP%] {\\n  flex: 1;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  text-align: center;\\n  color: var(--muted-foreground);\\n}\\n\\n.bookmark-item[_ngcontent-%COMP%] {\\n  display: flex;\\n  align-items: center;\\n  gap: var(--size-h);\\n  padding: var(--size-h) var(--size);\\n  margin-bottom: var(--size-hh);\\n  background: var(--background-light);\\n  border-radius: var(--radius-md);\\n  cursor: pointer;\\n  transition: background-color 0.15s ease;\\n}\\n.bookmark-item[_ngcontent-%COMP%]:hover {\\n  background: var(--background-light-hover);\\n}\\n\\n.bookmark-info[_ngcontent-%COMP%] {\\n  flex: 1;\\n  min-width: 0;\\n  display: flex;\\n  flex-direction: column;\\n  gap: 2px;\\n}\\n\\n.bookmark-title[_ngcontent-%COMP%] {\\n  font-size: 0.9rem;\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n}\\n\\n.bookmark-url[_ngcontent-%COMP%] {\\n  font-size: 0.75rem;\\n  color: var(--muted-foreground);\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n}\\n\\n.remove-btn[_ngcontent-%COMP%] {\\n  all: unset;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  width: 24px;\\n  height: 24px;\\n  border-radius: 50%;\\n  cursor: pointer;\\n  color: var(--muted-foreground);\\n  transition: background-color 0.15s ease, color 0.15s ease;\\n}\\n.remove-btn[_ngcontent-%COMP%]:hover {\\n  background: var(--destructive);\\n  color: var(--destructive-foreground);\\n}\"]\n    });\n  }\n  return BookmarksComponent;\n})();","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]}