initial commit

This commit is contained in:
Jörn-Michael Miehe 2023-12-28 13:55:42 +00:00
commit 70ccf22939
14 changed files with 1327 additions and 0 deletions

View 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
View 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
View file

@ -0,0 +1,2 @@
/node_modules/
/dist/

15
.vscode/settings.json vendored Normal file
View 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
View 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

Binary file not shown.

BIN
gfx/bttv_original.png (Stored with Git LFS) Normal file

Binary file not shown.

18
package.json Normal file
View 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

Binary file not shown.

18
public/manifest.json Normal file
View 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
View 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
View 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
View 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" }],
}),
],
};

1127
yarn.lock Normal file

File diff suppressed because it is too large Load diff