Add a web extension and debian package compilation (#5)
All checks were successful
Check go code / build-and-release (push) Successful in 1m9s
All checks were successful
Check go code / build-and-release (push) Successful in 1m9s
Reviewed-on: #5 Co-authored-by: Julien Fastré <julien.fastre@champs-libres.coop> Co-committed-by: Julien Fastré <julien.fastre@champs-libres.coop>
This commit was merged in pull request #5.
This commit is contained in:
68
web-extension/cl/src/background/background.ts
Normal file
68
web-extension/cl/src/background/background.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
import {isOutputMessageError, isOutputMessageSuccess} from "./types.js";
|
||||
|
||||
const projects: { name: string, slug: string }[] = [
|
||||
//{name: "test (dev only)", slug: "test"},
|
||||
{name: "Adminsys", slug: "champs-libres-adminsys"},
|
||||
{name: "Be-Arbres", slug: "be-arbres"},
|
||||
{name: "Chill", slug: "chill"},
|
||||
{name: "Chill > AMLI", slug: "amli"},
|
||||
{name: "Chill > Haute-Vienne", slug: "haute-vienne"},
|
||||
{name: "Chill > Petits Chills", slug: "petits-chill"},
|
||||
{name: "Chill > Samu Social", slug: "samu-social"},
|
||||
{name: "Chill > Vendée", slug: "vendee"},
|
||||
{name: "Osiris", slug: "osiris"},
|
||||
{name: "Raponmap", slug: "raponmap"}
|
||||
]
|
||||
|
||||
for (const project of projects) {
|
||||
browser.menus.create(
|
||||
{
|
||||
id: "cl-issue-2-wp-" + project.slug,
|
||||
title: project.name,
|
||||
contexts: ["link"],
|
||||
type: "radio"
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
browser.menus.onClicked.addListener(async function(info, tab) {
|
||||
console.log("info", info);
|
||||
|
||||
if (typeof info.menuItemId === "string") {
|
||||
console.log("menuItemId", info.menuItemId);
|
||||
if (info.menuItemId.startsWith("cl-issue-2-wp-")) {
|
||||
console.log("start with cl-issue-2-wp-");
|
||||
const slug = info.menuItemId.replace("cl-issue-2-wp-", "");
|
||||
console.log("slug", slug);
|
||||
if (typeof info.linkUrl === "string") {
|
||||
await convertToWorkPackage(slug, info.linkUrl);
|
||||
} else {
|
||||
console.error("linkUrl is not a string");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
async function convertToWorkPackage(slug: string, url: string): Promise<void> {
|
||||
const message = {
|
||||
type: "Issue2Work",
|
||||
url: url,
|
||||
project: slug,
|
||||
};
|
||||
try {
|
||||
const sending: unknown = await browser.runtime.sendNativeMessage("cl_cli", message);
|
||||
if (isOutputMessageError(sending)) {
|
||||
console.error("error while handling message", sending.message);
|
||||
} else if (isOutputMessageSuccess(sending)) {
|
||||
try {
|
||||
await browser.tabs.create({
|
||||
url: sending.data.created,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("error while creating new tab", error);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("error while handling message", error);
|
||||
}
|
||||
}
|
||||
44
web-extension/cl/src/background/types.ts
Normal file
44
web-extension/cl/src/background/types.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
export type OutputMessageError = {
|
||||
result: "Error",
|
||||
message: string,
|
||||
}
|
||||
|
||||
export type OutputIssue2Work = {
|
||||
type: "Issue2Work";
|
||||
created: string;
|
||||
}
|
||||
|
||||
export type OutputMessageSuccess = {
|
||||
result: 'Ok'
|
||||
data: OutputIssue2Work;
|
||||
}
|
||||
|
||||
export type OutputMessage = OutputMessageError | OutputMessageSuccess;
|
||||
|
||||
export function isOutputMessage(value: unknown): value is OutputMessage {
|
||||
return isOutputMessageError(value) || isOutputMessageSuccess(value);
|
||||
}
|
||||
|
||||
export function isOutputMessageError(value: unknown): value is OutputMessageError {
|
||||
return (
|
||||
typeof value === 'object' &&
|
||||
value !== null &&
|
||||
'result' in value &&
|
||||
value.result === 'Error' &&
|
||||
'message' in value &&
|
||||
typeof value.message === 'string'
|
||||
);
|
||||
}
|
||||
|
||||
export function isOutputMessageSuccess(value: unknown): value is OutputMessageSuccess {
|
||||
return (
|
||||
typeof value === 'object' &&
|
||||
value !== null &&
|
||||
'result' in value &&
|
||||
value.result === 'Ok' &&
|
||||
'data' in value &&
|
||||
typeof value.data === 'object' &&
|
||||
value.data !== null
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user