initial commit
This commit is contained in:
commit
70ccf22939
14 changed files with 1327 additions and 0 deletions
31
.devcontainer/devcontainer.json
Normal file
31
.devcontainer/devcontainer.json
Normal file
|
@ -0,0 +1,31 @@
|
|||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
|
||||
{
|
||||
"name": "Node.js & TypeScript",
|
||||
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
||||
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm",
|
||||
|
||||
// Features to add to the dev container. More info: https://containers.dev/features.
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/git-lfs:1": {}
|
||||
},
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
// "forwardPorts": [],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
// "postCreateCommand": "yarn install",
|
||||
"postStartCommand": "yarn install",
|
||||
|
||||
// Configure tool-specific properties.
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
"esbenp.prettier-vscode"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||
// "remoteUser": "root"
|
||||
}
|
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.xcf filter=lfs diff=lfs merge=lfs -text
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/node_modules/
|
||||
/dist/
|
15
.vscode/settings.json
vendored
Normal file
15
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"editor.formatOnSave": true,
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.organizeImports": "explicit"
|
||||
},
|
||||
"git.closeDiffOnOperation": true,
|
||||
"editor.tabSize": 2,
|
||||
"prettier.trailingComma": "all",
|
||||
}
|
16
.vscode/tasks.json
vendored
Normal file
16
.vscode/tasks.json
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "build",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"label": "npm: build",
|
||||
"detail": "webpack --config webpack.config.js"
|
||||
}
|
||||
]
|
||||
}
|
BIN
gfx/bttv.xcf
(Stored with Git LFS)
Normal file
BIN
gfx/bttv.xcf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
gfx/bttv_original.png
(Stored with Git LFS)
Normal file
BIN
gfx/bttv_original.png
(Stored with Git LFS)
Normal file
Binary file not shown.
18
package.json
Normal file
18
package.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name": "lmlfc-bttv",
|
||||
"version": "0.0.1",
|
||||
"author": "Jörn-Michael Miehe <joern-michael.miehe@lenaisten.de>",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"build": "webpack --config webpack.config.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/chrome": "^0.0.254",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"prettier": "^3.1.1",
|
||||
"ts-loader": "^9.5.1",
|
||||
"typescript": "^5.3.3",
|
||||
"webpack": "^5.89.0",
|
||||
"webpack-cli": "^5.1.4"
|
||||
}
|
||||
}
|
BIN
public/bttv.png
(Stored with Git LFS)
Normal file
BIN
public/bttv.png
(Stored with Git LFS)
Normal file
Binary file not shown.
18
public/manifest.json
Normal file
18
public/manifest.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"manifest_version": 3,
|
||||
"name": "LMLFC-BTTV",
|
||||
"version": "1.0",
|
||||
"description": "Add the reading time to Chrome Extension documentation articles",
|
||||
"content_scripts": [
|
||||
{
|
||||
"js": ["main.js"],
|
||||
"matches": ["*://*.lenameyerlandrut-fanclub.de/*"]
|
||||
}
|
||||
],
|
||||
"web_accessible_resources": [
|
||||
{
|
||||
"resources": ["bttv.png"],
|
||||
"matches": ["*://*.lenameyerlandrut-fanclub.de/*"]
|
||||
}
|
||||
]
|
||||
}
|
47
src/main.ts
Normal file
47
src/main.ts
Normal file
|
@ -0,0 +1,47 @@
|
|||
const emote_regex = /bttv:([^\s]+)/g;
|
||||
|
||||
async function bttv_get_url(code: string): Promise<string> {
|
||||
return "changed from ext";
|
||||
}
|
||||
|
||||
async function process_text(text: string): Promise<string> {
|
||||
const emotes = text.matchAll(emote_regex);
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
(() => {
|
||||
const cb_form = document.querySelector("#mgc_cb_evo_form");
|
||||
if (!(cb_form instanceof HTMLFormElement)) return;
|
||||
|
||||
const bttv_btn = (() => {
|
||||
const btn = document.createElement("a");
|
||||
btn.style.setProperty("cursor", "pointer");
|
||||
btn.style.setProperty("margin-right", "4px");
|
||||
|
||||
const img = document.createElement("img");
|
||||
img.setAttribute("src", chrome.runtime.getURL("bttv.png"));
|
||||
img.style.setProperty("max-height", "25px");
|
||||
img.style.setProperty("max-width", "25px");
|
||||
img.style.setProperty("vertical-align", "middle");
|
||||
|
||||
btn.addEventListener("click", async (event) => {
|
||||
const cb_input = document.querySelector("#mgc_cb_evo_input");
|
||||
if (!(cb_input instanceof HTMLInputElement)) return;
|
||||
|
||||
cb_input.focus();
|
||||
cb_input.value += await bttv_get_url("foo bar");
|
||||
cb_input.focus();
|
||||
});
|
||||
|
||||
btn.appendChild(img);
|
||||
return btn;
|
||||
})();
|
||||
|
||||
cb_form.insertBefore(
|
||||
bttv_btn,
|
||||
document.querySelector("#mgc_cb_evo_form > input[type=image]:nth-child(2)"),
|
||||
);
|
||||
|
||||
console.log("done.");
|
||||
})();
|
13
tsconfig.json
Normal file
13
tsconfig.json
Normal file
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"strict": true,
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"esModuleInterop": true,
|
||||
"sourceMap": true,
|
||||
"rootDir": "src",
|
||||
"outDir": "dist/js",
|
||||
"noEmitOnError": true,
|
||||
"typeRoots": ["node_modules/@types"]
|
||||
}
|
||||
}
|
29
webpack.config.js
Normal file
29
webpack.config.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
const path = require("path");
|
||||
const CopyPlugin = require("copy-webpack-plugin");
|
||||
module.exports = {
|
||||
mode: "production",
|
||||
entry: {
|
||||
main: path.join(__dirname, "src", "main.ts"),
|
||||
},
|
||||
output: {
|
||||
path: path.join(__dirname, "dist"),
|
||||
filename: "[name].js",
|
||||
},
|
||||
resolve: {
|
||||
extensions: [".ts", ".js"],
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.tsx?$/,
|
||||
loader: "ts-loader",
|
||||
exclude: /node_modules/,
|
||||
},
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
new CopyPlugin({
|
||||
patterns: [{ from: ".", to: ".", context: "public" }],
|
||||
}),
|
||||
],
|
||||
};
|
Loading…
Reference in a new issue