Skip to content

Instantly share code, notes, and snippets.

View av01d's full-sized avatar

Arjan Haverkamp av01d

View GitHub Profile
@av01d
av01d / keypress.js
Created March 29, 2024 09:51
Javascript keypress handler
const commands = {
'ctrl+z' => History.undo,
'ctrl+y' => History.redo,
'escape': () => { alert('esc'); }
};
$(window).on('keydown', event => {
let label = '';
if (event.ctrlKey) { label += 'ctrl+'; }
if (event.altKey) { label += 'alt+'; }
@av01d
av01d / ColorSteps.js
Last active February 27, 2024 15:42
Javascript calculate color steps (gradient) between two colors
const ColorSteps = (() => {
/**
* Convert any color string to an [r,g,b,a] array.
* @author Arjan Haverkamp (arjan-at-avoid-dot-org)
* @param {string} color Any color. F.e.: 'red', '#f0f', '#ff00ff', 'rgb(x,y,x)', 'rgba(r,g,b,a)', 'hsl(180, 50%, 50%)'
* @returns {array} [r,g,b,a] array. Caution: returns [0,0,0,0] for invalid color.
* @see https://gist.github.com/av01d/8f068dd43447b475dec4aad0a6107288
*/
const colorValues = color => {
@av01d
av01d / Point2PointBearing.js
Last active February 22, 2024 09:33
Javascript Point2PointBearing: Caculate bearing between 2 lat/lng points
/**
* Calculate bearing (in degrees, 0-360) between two lat/lng points.
*/
const Point2PointBearing = (lat1, lng1, lat2, lng2) => {
const toRad = num => num * Math.PI / 180;
const toDeg = num => num * 180 / Math.PI;
lat1 = toRad(lat1);
lng1 = toRad(lng1);
lat2 = toRad(lat2);
@av01d
av01d / Point2PointDistance.js
Created February 21, 2024 08:30
Javascript Point2PointDistance: Caculate distance (in m) between 2 lat/lng points
const Point2PointDistance = (lat1, lon1, lat2, lon2) => {
const toRad = num => num * Math.PI / 180; // Converts numeric degrees to radians
const R = 6371000, // earth radius, in m
dLat = toRad(lat2 - lat1),
dLon = toRad(lon2 - lon1);
lat1 = toRad(lat1);
lat2 = toRad(lat2);
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
@av01d
av01d / colorValues.js
Last active February 9, 2024 16:01
Javascript: Convert any color (hex, hexa, rgb, rgba, hsl, named) to [r,g,b,a] array
/**
* Convert any color string to an [r,g,b,a] array.
* @author Arjan Haverkamp (arjan-at-avoid-dot-org)
* @param {string} color Any color. F.e.: 'red', '#f0f', '#ff00ff', 'rgb(x,y,x)', 'rgba(r,g,b,a)', 'hsl(180, 50%, 50%)'
* @returns {array} [r,g,b,a] array. Caution: returns [0,0,0,0] for invalid color.
*/
const colorValues = color => {
const div = document.createElement('div');
div.style.backgroundColor = color;
document.body.appendChild(div);
@av01d
av01d / convertDataURItoBinary.js
Created January 20, 2022 13:15
Convert base64 string to Uint8Array (one liner)
/**
* One liner to convert a base64 string to a binary Uint8Array
*
* Example:
* const dataURL = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2w....';
* console.log(convertDataURIToBinary(dataURL));
*/
const convertDataURIToBinary = dataURI =>
Uint8Array.from(window.atob(dataURI.replace(/^data[^,]+,/,'')), v => v.charCodeAt(0));
@av01d
av01d / base62.class.php
Last active January 28, 2023 16:48
PHP Base62 encoder/decoder
<?php
class Base62 {
private $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
public function base62Encode(int $num): string {
$res = '';
do {
$res = $this->chars[$num % 62] . $res;
@av01d
av01d / getClients.sh
Last active January 15, 2021 09:20
Commandline Bash script for retrieving connected clients from cable modem/router Compal CH7465LG (Ziggo)
#!/bin/bash
#
#--------------------------------------------------------------------
# This script retrieves a list (in XML format) of connected clients
# on a Compal CH7465LG modem/router.
# This modem is provided by various ISPs, a.o:
# - UPC Connect Box (CH)
# - Irish Virgin Media Super Hub 3.0 (IE)
# - Ziggo Connectbox (NL)
# - Unitymedia Connect Box (DE)
@av01d
av01d / jquery.draggable.js
Last active July 23, 2020 14:26
Super simple jQuery plugin for making DOM elements draggable. Touch compatible.
// Plugin: jQuery.draggable
// Author: Arjan Haverkamp - webgear.nl
// Version: 1.0
// Date: 2019-01-30
(function($) {
$.fn.draggable = function(options) {
var $document = $(document), settings = $.extend({
// These are the defaults.
@av01d
av01d / jquery.filedropper.js
Created July 23, 2020 07:50
Super simple jQuery file drop plugin
/**
* Very simple file drop plugin
* @author Arjan Haverkamp - webgear.nl
* @date 2019-01-21
*/
(function($) {
$.fn.FileDropper = function(options) {
var settings = $.extend({
// These are the defaults.