From 48fb6018c0374a00c66e930f7f2f8255bc0fa137 Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 13 Sep 2022 22:34:13 +0800 Subject: [PATCH] chore: add chrome extension codes --- extension/background.js | 40 ++++++++++++++++++++++++++++++++++++++++ extension/manifest.json | 16 ++++++++++++++++ extension/popup.html | 18 ++++++++++++++++++ extension/popup.js | 26 ++++++++++++++++++++++++++ scripts/.air.toml | 2 +- server/shortcut.go | 6 ++++++ 6 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 extension/background.js create mode 100644 extension/manifest.json create mode 100644 extension/popup.html create mode 100644 extension/popup.js diff --git a/extension/background.js b/extension/background.js new file mode 100644 index 0000000..137d4bd --- /dev/null +++ b/extension/background.js @@ -0,0 +1,40 @@ +const getCorgiData = () => { + return new Promise((resolve) => { + chrome.storage.local.get(["corgi"], (data) => { + resolve(data?.corgi); + }); + }); +}; + +const fetchShortcut = async (name) => { + const corgiData = await getCorgiData(); + if (corgiData.domain && corgiData.openId) { + const res = await fetch(`${corgiData.domain}/api/shortcut?openId=${corgiData.openId}&name=${name}`); + const { data } = await res.json(); + if (data.length > 0) { + return data[0]; + } + } +}; + +const urlRegex = /https?:\/\/go\/(.+)/; + +chrome.tabs.onUpdated.addListener(async (_, a, tab) => { + if (typeof tab.url === "string") { + const matchResult = urlRegex.exec(tab.url); + if (matchResult) { + const name = matchResult[1]; + const shortcut = await fetchShortcut(name); + if (shortcut && shortcut.link) { + chrome.tabs.update({ url: shortcut.link }); + } + } + } +}); + +chrome.omnibox.onInputEntered.addListener(async (text) => { + const shortcut = await fetchShortcut(text); + if (shortcut && shortcut.link) { + chrome.tabs.update({ url: shortcut.link }); + } +}); diff --git a/extension/manifest.json b/extension/manifest.json new file mode 100644 index 0000000..8dce49e --- /dev/null +++ b/extension/manifest.json @@ -0,0 +1,16 @@ +{ + "name": "Corgi", + "description": "Corgi is an URL manager.", + "version": "0.0.1", + "manifest_version": 3, + "omnibox": { + "keyword": "go" + }, + "action": { + "default_popup": "popup.html" + }, + "background": { + "service_worker": "background.js" + }, + "permissions": ["tabs", "activeTab", "storage"] +} diff --git a/extension/popup.html b/extension/popup.html new file mode 100644 index 0000000..54e1765 --- /dev/null +++ b/extension/popup.html @@ -0,0 +1,18 @@ + + + +

Corgi extension

+
+ Domain + +
+
+ OpenId + +
+
+ +
+ + + diff --git a/extension/popup.js b/extension/popup.js new file mode 100644 index 0000000..f6e664b --- /dev/null +++ b/extension/popup.js @@ -0,0 +1,26 @@ +const getCorgiData = () => { + return new Promise((resolve) => { + chrome.storage.local.get(["corgi"], (data) => { + resolve(data?.corgi); + }); + }); +}; + +const saveButton = document.body.querySelector("#save-button"); +const domainInput = document.body.querySelector("#domain-input"); +const openIdInput = document.body.querySelector("#openid-input"); + +saveButton.addEventListener("click", () => { + chrome.storage.local.set({ + corgi: { + domain: domainInput.value, + openId: openIdInput.value, + }, + }); +}); + +(async () => { + const corgiData = await getCorgiData(); + domainInput.value = corgiData.domain; + openIdInput.value = corgiData.openId; +})(); diff --git a/scripts/.air.toml b/scripts/.air.toml index f6a0eca..c33b82d 100644 --- a/scripts/.air.toml +++ b/scripts/.air.toml @@ -5,7 +5,7 @@ tmp_dir = ".air" bin = "./.air/corgi" cmd = "go build -o ./.air/corgi ./bin/server/main.go" delay = 1000 - exclude_dir = [".air", "web", "build"] + exclude_dir = [".air", "web", "extension", "build"] exclude_file = [] exclude_regex = [] exclude_unchanged = false diff --git a/server/shortcut.go b/server/shortcut.go index fbe1db2..9906dfd 100644 --- a/server/shortcut.go +++ b/server/shortcut.go @@ -71,6 +71,12 @@ func (s *Server) registerShortcutRoutes(g *echo.Group) { if workspaceID, err := strconv.Atoi(c.QueryParam("workspaceId")); err == nil { shortcutFind.WorkspaceID = &workspaceID } + if name := c.QueryParam("name"); name != "" { + shortcutFind.Name = &name + } + if link := c.QueryParam("link"); link != "" { + shortcutFind.Link = &link + } list, err := s.Store.FindShortcutList(ctx, shortcutFind) if err != nil {