Skip to content

Instantly share code, notes, and snippets.

View jswhisperer's full-sized avatar
🕵️
For Sale... I mean open to work.

Gregory The JSWhisperer jswhisperer

🕵️
For Sale... I mean open to work.
View GitHub Profile
@jswhisperer
jswhisperer / playercorefactory.sh
Created March 6, 2025 20:28
Custom Kodi External Players MacOS
echo -e '<playercorefactory>
<players>
<player name="iina" type="ExternalPlayer" audio="false" video="true">
<filename>/Applications/IINA.app/Contents/MacOS/IINA</filename>
</player>
<player name="VLC" type="ExternalPlayer" audio="false" video="true">
<filename>/Applications/VLC.app/Contents/MacOS/VLC</filename>
<args>--video-on-top --play-and-exit</args>
<hidexbmc>true</hidexbmc>
</player>
@jswhisperer
jswhisperer / crypto-aes-gcm.js
Created March 4, 2025 01:41 — forked from chrisveness/crypto-aes-gcm.js
Uses the SubtleCrypto interface of the Web Cryptography API to encrypt and decrypt text using AES-GCM (AES Galois counter mode).
/**
* Encrypts plaintext using AES-GCM with supplied password, for decryption with aesGcmDecrypt().
* (c) Chris Veness MIT Licence
*
* @param {String} plaintext - Plaintext to be encrypted.
* @param {String} password - Password to use to encrypt plaintext.
* @returns {String} Encrypted ciphertext.
*
* @example
* const ciphertext = await aesGcmEncrypt('my secret text', 'pw');
@jswhisperer
jswhisperer / getElBoundingBoxWithThreshold.js
Created February 16, 2025 04:46
Detect if an element is being hovered by mouse with a configurable bounding box
const el = document.querySelector("h1");
const threshold = 50;
const between = (x, min, max) => x >= min && x <= max;
const getElBoundingBox = (el, threshold = 0) => {
const elPos = el.getBoundingClientRect();
return {
top: elPos.top - threshold,
@jswhisperer
jswhisperer / schema-org-structured-data-markup-using-microdata.html
Created February 14, 2025 23:14 — forked from milanaryal/schema-org-structured-data-markup-using-microdata.html
An example of how to mark up a HTML5 webpage using the schema.org schemas and microdata.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Site Title</title>
<link rel="stylesheet" href="/assets/css/style.min.css">
listDirectoryContents = async (directoryHandle, depth) => {
depth = depth || 1;
directoryHandle = directoryHandle || await navigator.storage.getDirectory();
const entries = await directoryHandle.values();
for await (const entry of entries) {
// Add proper indentation based on the depth
const indentation = ' '.repeat(depth);
if (entry.kind === 'directory') {
@jswhisperer
jswhisperer / error.log
Created December 19, 2024 18:08
02.nijnja error
2024-12-19 18:03:03 +0000
ninja
-v
[1/201] /opt/homebrew/Cellar/glib/2.82.4/bin/glib-compile-resources ../src/vte.gresource.xml --sourcedir ../src --c-name _vte --internal --generate --target src/vteresources.h
[2/201] /opt/homebrew/Cellar/glib/2.82.4/bin/glib-compile-resources ../src/vte.gresource.xml --sourcedir ../src --c-name _vte --internal --generate --target src/vteresources.c --dependency-file src/vteresources.c.d
[3/201] /opt/homebrew/Cellar/glib/2.82.4/bin/glib-genmarshal --quiet --prefix _vte_marshal --internal --valist-marshallers --output src/marshal.h --header ../src/marshal.list --pragma-once
[4/201] /opt/homebrew/opt/glib/bin/glib-mkenums --output src/vte/vtetypebuiltins-gtk4.h --template /private/tmp/vte-20241219-81307-ivfxmu/vte-0.70.0/src/vte/../vtetypebuiltins.h.template ../src/vte/vtedeprecated.h ../src/vte/vteenums.h
[5/201] /opt/homebrew/opt/glib/bin/glib-mkenums --output src/vte/vtetypebuiltins-gtk4.cc --template /private/tmp/vte-20241219-81307-ivfxmu/vte-0.70.0/src/vte/../vtetypebui
@jswhisperer
jswhisperer / error.log
Created December 19, 2024 18:08
02.nijnja error
2024-12-19 18:03:03 +0000
ninja
-v
[1/201] /opt/homebrew/Cellar/glib/2.82.4/bin/glib-compile-resources ../src/vte.gresource.xml --sourcedir ../src --c-name _vte --internal --generate --target src/vteresources.h
[2/201] /opt/homebrew/Cellar/glib/2.82.4/bin/glib-compile-resources ../src/vte.gresource.xml --sourcedir ../src --c-name _vte --internal --generate --target src/vteresources.c --dependency-file src/vteresources.c.d
[3/201] /opt/homebrew/Cellar/glib/2.82.4/bin/glib-genmarshal --quiet --prefix _vte_marshal --internal --valist-marshallers --output src/marshal.h --header ../src/marshal.list --pragma-once
[4/201] /opt/homebrew/opt/glib/bin/glib-mkenums --output src/vte/vtetypebuiltins-gtk4.h --template /private/tmp/vte-20241219-81307-ivfxmu/vte-0.70.0/src/vte/../vtetypebuiltins.h.template ../src/vte/vtedeprecated.h ../src/vte/vteenums.h
[5/201] /opt/homebrew/opt/glib/bin/glib-mkenums --output src/vte/vtetypebuiltins-gtk4.cc --template /private/tmp/vte-20241219-81307-ivfxmu/vte-0.70.0/src/vte/../vtetypebui
@jswhisperer
jswhisperer / linkedin-work-skills-add.js
Created November 29, 2024 22:54
linkedin-work-skills-add.js
[
...document
.getElementById(
"checkbox-form-component-profileEditFormElement-SKILL-AND-ASSOCIATION-skill-ACoAAER-oMoBZ2Gj7DeLnyDhqW4wgvSDFHT2VJ4-1-associations-positionUrns"
)
.querySelectorAll("label[data-test-text-selectable-option__label]"),
].map((item) => item.click());
@jswhisperer
jswhisperer / coder.yaml
Last active November 4, 2024 01:07
coder.yaml
bind-addr: 0.0.0.0:9898
host: http://coder.localhost
auth: password
password: eweewr
cert: false
name: test
template: https://github.com/bpmct/coder-templates/tree/main/desktop-container
@jswhisperer
jswhisperer / tasks.json
Created October 16, 2024 17:11
open a terminal by default
{
"version": "2.0.0",
"presentation": {
"echo": false,
"reveal": "always",
"focus": true,
"panel": "dedicated",
"showReuseMessage": true
},
"tasks": [