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":[]}