From 62c3f35b8f9c7f2405cd5b03d0f0aa309e409f9c Mon Sep 17 00:00:00 2001 From: daniel31x13 Date: Sun, 4 Jan 2026 16:44:30 -0500 Subject: [PATCH] v1.5.0 --- README.md | 3 +- build.sh | 21 -- firefox/manifest.json | 59 ------ chromium/manifest.json => manifest.json | 35 ++-- package.json | 4 +- public/128.png | Bin 13704 -> 15334 bytes public/16.png | Bin 687 -> 774 bytes public/32.png | Bin 1526 -> 1993 bytes public/48.png | Bin 2726 -> 3611 bytes src/@/components/BookmarkForm.tsx | 246 +++++++++++++++--------- src/@/lib/utils.ts | 1 - src/pages/Popup/App.tsx | 12 +- 12 files changed, 182 insertions(+), 199 deletions(-) delete mode 100755 build.sh delete mode 100644 firefox/manifest.json rename chromium/manifest.json => manifest.json (50%) diff --git a/README.md b/README.md index f420827..cc9ba8c 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,8 @@ cd browser-extension And run: ``` -chmod +x ./build.sh && ./build.sh +npm install +npm run build ``` After the above command, use the `/dist` folder as an unpacked extension in your browser. diff --git a/build.sh b/build.sh deleted file mode 100755 index 192c983..0000000 --- a/build.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -# Install deps -npm install - -# Build -npm run build - -# Check if --firefox argument was passed -if [ "$1" = "--firefox" ]; then - # Copy to firefox/manifest.json - echo "Built for Firefox..." - cp firefox/manifest.json dist/manifest.json -else - # Copy to dist/manifest.json - echo "Built for Chromium..." - cp chromium/manifest.json dist/manifest.json -fi - -# Done (for now...) -echo "Done! ✅" diff --git a/firefox/manifest.json b/firefox/manifest.json deleted file mode 100644 index b3a6ecb..0000000 --- a/firefox/manifest.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "manifest_version": 2, - "name": "Linkwarden", - "description": "The browser extension for Linkwarden.", - "homepage_url": "https://linkwarden.app/", - "version": "1.4.1", - "browser_action": { - "default_popup": "./index.html", - "default_icon": { - "16": "./16.png", - "32": "./32.png", - "48": "./48.png", - "128": "./128.png" - }, - "default_title": "Linkwarden" - }, - "options_ui": { - "page": "./src/pages/Options/options.html", - "browser_style": false - }, - "icons": { - "16": "./16.png", - "32": "./32.png", - "48": "./48.png", - "128": "./128.png" - }, - "permissions": [ - "storage", - "activeTab", - "tabs", - "bookmarks", - "contextMenus", - "", - "http://*/*", - "https://*/*" - ], - "commands": { - "_execute_browser_action": { - "suggested_key": { - "default": "Ctrl+Shift+F", - "mac": "Command+Shift+K" - } - } - }, - "omnibox": { - "keyword": "lk" - }, - "background": { - "scripts": ["background.js"], - "persistent": false, - "type": "module" - }, - "browser_specific_settings": { - "gecko": { - "id": "jordanlinkwarden@gmail.com", - "strict_min_version": "109.0" - } - } -} diff --git a/chromium/manifest.json b/manifest.json similarity index 50% rename from chromium/manifest.json rename to manifest.json index eef8bce..985f600 100644 --- a/chromium/manifest.json +++ b/manifest.json @@ -1,11 +1,12 @@ { "manifest_version": 3, + "minimum_chrome_version": "121", "name": "Linkwarden", "description": "The browser extension for Linkwarden.", "homepage_url": "https://linkwarden.app/", - "version": "1.4.1", + "version": "1.5.0", "action": { - "default_popup": "./index.html", + "default_popup": "index.html", "default_icon": { "16": "16.png", "32": "32.png", @@ -15,38 +16,34 @@ "default_title": "Linkwarden" }, "options_ui": { - "page": "./src/pages/Options/options.html", + "page": "src/pages/Options/options.html", "browser_style": false }, - "icons": { - "16": "16.png", - "32": "32.png", - "48": "48.png", - "128": "128.png" - }, + "icons": { "16": "16.png", "32": "32.png", "48": "48.png", "128": "128.png" }, "permissions": [ "storage", "scripting", "activeTab", "tabs", "bookmarks", - "commands", "contextMenus" ], + "host_permissions": [""], "background": { - "service_worker": "./background.js", + "service_worker": "background.js", + "scripts": ["background.js"], "type": "module" }, - "omnibox": { - "keyword": "lk" - }, - "host_permissions": ["*://*/*"], + "omnibox": { "keyword": "lk" }, "commands": { "_execute_action": { - "suggested_key": { - "default": "Ctrl+Shift+F", - "mac": "Command+Shift+Y" - } + "suggested_key": { "default": "Ctrl+Shift+F", "mac": "Command+Shift+Y" } + } + }, + "browser_specific_settings": { + "gecko": { + "id": "jordanlinkwarden@gmail.com", + "strict_min_version": "121.0" } } } diff --git a/package.json b/package.json index dcc8a83..2097bb8 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "linkwarden-extension", "private": true, - "version": "0.0.1", + "version": "0.0.0", "author": "Jordan Higuera Higuera ", "type": "module", "license": "MIT", "description": "Linkwarden browser extension", "scripts": { "dev": "vite", - "build": "tsc && vite build", + "build": "tsc && vite build && cp ./manifest.json dist/manifest.json", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }, diff --git a/public/128.png b/public/128.png index 4979931d86e62765b098eb46cdc17a36d3a971b5..cb132fd90c642cc18578523bf9bc5deecdeafdc2 100644 GIT binary patch literal 15334 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

;@w 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 literal 13704 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 delta 664 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 O0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf z6951U69E94oEQKA1#wA4K~z{rg;!ZGcnV&V`4}f)6{CLFH(vWG!?Nv zSfoO$5v8c$R*Y0pO2LSTk=lYjSSIBqC zz{F^sEa8O_!Kr9Pn1FyQzv>1E8}rP|QcEN*wg@b<4rMA!K2)tY%D5YYbdc_bkZWy& zb^DJ&bMFS-GkfuM=fWnXlz=;;GUFJSOpP!L%LaO$6n~U~SKUHrjprmd7DlD8r@SzQ-+ZA0boqeU*2O(XQL1s?fkT)mXYU8NtN} z@?E{qasSgW^4`lF%-L8h<+%ur>mG-KBr#w^8;#1Yb1DL1$&rQ)O|a(01Dw1vH=}-5 zaO~&DV1LTZDUeT0K;U<5G)53)5FxDEu?MF9_!*{$kE0s*IB?R|`EyZz_eix6uYjae z5c)aQ@~wgW0NmoY#9rM|5YWOH1UThsuq#Y+=#`S+hxro?gAR9Gf| z4S&81I#P$w8y~^Rxd!MNcoRlH*o$AeY0=^1$Su1TQSyLtu>|d#AA;q#-6JtI7RMu` zrV*7bM7zu$d^isXuFRhankDB$l2mJ8SS!kU47 zF#P&sP@BJkNwh(of`BH_>`#D*P?H_7;(xi*C*Z;_U-8>6Y#=mw$fKEj6~o2?^z3{C zMh*`_tvv5_Yl$satPhHt9*!2h3D|2ge*V;#$>@{GLSy?%m>(Nq*fjvh04lJ8&h5{@ z)Sth?%&EU(y@CDW^JBUMr9GN}tLkb{2Nw)cSbZ}z_pF0+-+U~3w=d_y#eejY)k7X5 zSu<1TR3KJu1aPPAumHYwS7r7jmuzzVR9coVTikn%rg;pD+VDB~N{?J>M( zzl0yry7*iGK2LWWs0TZW?MV;ffC|g`U8?4y6Yge_rupesp@A=i@y7j*X zx>5<#i?;FK^Gq%`_#ZeokJm43^L79L01jnXNoGw=04e|g00;m8000000Mb*F00000 LNkvXXu0mjfB>dF7 diff --git a/public/48.png b/public/48.png index 72b69e2c596a4abae8aab185701b012254c3634d..0f92eb133452d2f388afdc7eed8d517eeb928927 100644 GIT binary patch literal 3611 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 delta 2719 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 Z000000002eQ { const [isConfigured, setIsConfigured] = useState(false); const [isDuplicate, setIsDuplicate] = useState(false); + const [config, setConfig] = useState<{ + baseUrl: string; + defaultCollection: string; + apiKey: string; + syncBookmarks: boolean; + }>(); + const [tabInfo, setTabInfo] = useState<{ + id: number | undefined; + title: string | undefined; + url: string | undefined; + }>(); + const handleCheckedChange = (s: boolean | 'indeterminate') => { if (s === 'indeterminate') return; setUploadImage(s); @@ -70,14 +82,12 @@ const BookmarkForm = () => { const { mutate: onSubmit, isLoading } = useMutation({ mutationFn: async (values: bookmarkFormValues) => { - const config = await getConfig(); - await postLink( - config.baseUrl, + config?.baseUrl as string, uploadImage, values, setState, - config.apiKey + config?.apiKey as string ); return; @@ -118,28 +128,32 @@ const BookmarkForm = () => { }, }); - const { handleSubmit, control } = form; - useEffect(() => { - getCurrentTabInfo().then(({ id, url, title }) => { - updateBadge(id); - getConfig().then((config) => { - form.setValue('url', url ? url : ''); - form.setValue('name', title ? title : ''); - form.setValue('collection', { - name: config.defaultCollection, - }); + const setTabInformation = async () => { + const t = await getCurrentTabInfo(); + const c = await getConfig(); + + setTabInfo(t); + setConfig(c); + + updateBadge(t.id); + + form.setValue('url', t.url ? t.url : ''); + form.setValue('name', t.title ? t.title : ''); + form.setValue('collection', { + name: c.defaultCollection, }); - }); - const getConfigUse = async () => { - const config = await getConfig(); + const configured = await getIsConfigured(); - const duplicate = await checkLinkExists(config.baseUrl, config.apiKey); + const duplicate = await checkLinkExists(c.baseUrl, c.apiKey); setIsDuplicate(duplicate); setIsConfigured(configured); }; - getConfigUse(); - }, [form]); + + setTabInformation(); + }, []); + + const { handleSubmit, control } = form; // useEffect(() => { // const syncBookmarks = async () => { @@ -169,9 +183,10 @@ const BookmarkForm = () => { } = useQuery({ queryKey: ['collections'], queryFn: async () => { - const config = await getConfig(); - - const response = await getCollections(config.baseUrl, config.apiKey); + const response = await getCollections( + config?.baseUrl as string, + config?.apiKey as string + ); return response.data.response.sort((a, b) => { return a.pathname.localeCompare(b.pathname); @@ -187,9 +202,10 @@ const BookmarkForm = () => { } = useQuery({ queryKey: ['tags'], queryFn: async () => { - const config = await getConfig(); - - const response = await getTags(config.baseUrl, config.apiKey); + const response = await getTags( + config?.baseUrl as string, + config?.apiKey as string + ); return response.data.response.sort((a, b) => { return a.name.localeCompare(b.name); @@ -201,7 +217,10 @@ const BookmarkForm = () => { return (

- onSubmit(e))} className="py-1"> + onSubmit(e))} + className="py-1 space-y-5" + > {collectionError ? (

There was an error, please make sure the website is available. @@ -229,7 +248,7 @@ const BookmarkForm = () => { } > {loadingCollections - ? 'Loading' + ? 'Unorganized' : field.value?.name ? collections?.find( (collection: { name: string }) => @@ -260,52 +279,61 @@ const BookmarkForm = () => { className="min-w-[280px]" placeholder="Search Collection..." /> - No Collection found. - {Array.isArray(collections) && ( - - {isLoading ? ( - { - form.setValue('collection', { - name: 'Unorganized', - }); - setOpenCollections(false); - }} - > - Unorganized - - ) : ( - collections?.map( - (collection: { - name: string; - id: number; - ownerId: number; - pathname: string; - }) => ( + + {loadingCollections ? ( +

+ Loading... +

+ ) : ( + <> + No Collection found. + {Array.isArray(collections) && ( + + {isLoading ? ( { form.setValue('collection', { - ownerId: collection.ownerId, - id: collection.id, - name: collection.name, + name: 'Unorganized', }); setOpenCollections(false); }} > -

{collection.name}

-

- {collection.pathname} -

+ Unorganized
- ) - ) + ) : ( + collections?.map( + (collection: { + name: string; + id: number; + ownerId: number; + pathname: string; + }) => ( + { + form.setValue('collection', { + ownerId: collection.ownerId, + id: collection.id, + name: collection.name, + }); + setOpenCollections(false); + }} + > +

{collection.name}

+

+ {collection.pathname} +

+
+ ) + ) + )} +
)} - + )}
@@ -323,8 +351,8 @@ const BookmarkForm = () => { {isLoading ? ( { form.setValue('collection', { name: 'Unorganized', @@ -374,8 +402,19 @@ const BookmarkForm = () => { )} /> + + {!openOptions && ( + + )} + {openOptions && ( -
+ <> {tagsError ?

There was an error...

: null} { {loadingTags ? ( ) : tagsError ? ( { Description -