chore: add chrome extension codes

This commit is contained in:
Steven 2022-09-13 22:34:13 +08:00
parent dfc797fe58
commit 48fb6018c0
6 changed files with 107 additions and 1 deletions

40
extension/background.js Normal file
View File

@ -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 });
}
});

16
extension/manifest.json Normal file
View File

@ -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"]
}

18
extension/popup.html Normal file
View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<body>
<h2>Corgi extension</h2>
<div>
<span>Domain</span>
<input id="domain-input" type="text" />
</div>
<div>
<span>OpenId</span>
<input id="openid-input" type="text" />
</div>
<div>
<button id="save-button">Save</button>
</div>
<script src="popup.js"></script>
</body>
</html>

26
extension/popup.js Normal file
View File

@ -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;
})();

View File

@ -5,7 +5,7 @@ tmp_dir = ".air"
bin = "./.air/corgi" bin = "./.air/corgi"
cmd = "go build -o ./.air/corgi ./bin/server/main.go" cmd = "go build -o ./.air/corgi ./bin/server/main.go"
delay = 1000 delay = 1000
exclude_dir = [".air", "web", "build"] exclude_dir = [".air", "web", "extension", "build"]
exclude_file = [] exclude_file = []
exclude_regex = [] exclude_regex = []
exclude_unchanged = false exclude_unchanged = false

View File

@ -71,6 +71,12 @@ func (s *Server) registerShortcutRoutes(g *echo.Group) {
if workspaceID, err := strconv.Atoi(c.QueryParam("workspaceId")); err == nil { if workspaceID, err := strconv.Atoi(c.QueryParam("workspaceId")); err == nil {
shortcutFind.WorkspaceID = &workspaceID 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) list, err := s.Store.FindShortcutList(ctx, shortcutFind)
if err != nil { if err != nil {