Skip to content

Instantly share code, notes, and snippets.

@c-kick
c-kick / _hnldesign-extend-bs-utils.scss
Last active January 25, 2024 10:33
Extends Bootstrap (padding, margin, gap, etc.) utilities with css variables
//
// Extends Bootstrap utilities defined in map '$add_css_variables_to' with css variables
// containing their respective units. Also adds additional values,
// if specified as 'name: variable' pairs in '$add_values'
//
// example:
// $add_css_variables_to: (
// padding-x
// )
// $add_values: (
@c-kick
c-kick / appliance-status-monitor.yaml
Last active June 19, 2024 08:54
Appliance Status Monitor - Blueprint for Home Assistant - Forked from (v2.1.1) leofabri's appliance status monitor (https://github.com/leofabri/hassio_appliance-status-monitor) with a few added features: job_planned state, power/standby state indicator, job complete indicator. See description inside blueprint for instructions and added features.
blueprint:
name: Monitor the state of an appliance - modded by hnldesign
source_url: https://gist.github.com/c-kick/31ffbdd3520c65833577648c2b96b289
description: "`- Version: 0.0.7 -`\n\nThis automation can detect and monitor the
state of your appliances by observing their power consumption.\nThis automation
blueprint is universal and very versatile. You can use it with anything that consumes
energy: a washing machine, a dishwasher, your fridge, the TV, etc. I refer to
the appliance's operations with the generic word job. A job could be anything
(washing, rinsing...).\n\nYou can pair this project with other automations and
services. I designed it with flexibility in mind. For instance, if you want to
@c-kick
c-kick / doubleClickHandler.js
Last active May 12, 2023 12:03
doubleClickHandler - handles double-click events on elements
/**
* Handles the click event to detect single or double clicks.
* @param {MouseEvent} event - The click event object.
*/
function doubleClickHandler(event) {
const target = event.target;
if (new Date().getTime() - (target._lastTouch || 0) > 500) {
// Not a double click
target._lastTouch = new Date().getTime();
@c-kick
c-kick / hnl.isVisible.mjs
Last active November 27, 2023 11:05
Check if an element is visible
/** isVisible
*
* Determines whether an element is visible within the (specified, or Window) viewport. Executes the callback based
* on that result. The callback is called with three parameters:
* - visible: a boolean that's true if ANY pixels of the element are visible
* - fullyVisible: a boolean that's true if the ENTIRE element fits the viewport, and thus is wholly visible
* - the element's bounding box, including 'pageY' and 'pageX' which contain the element's position as relative to
* the whole document. Useful for scrolling into view,
*
* The viewport can either be omitted, specified partially or completely.
@c-kick
c-kick / debouncer.mjs
Last active October 27, 2023 13:24
Rate-limiter/debouncer module for JavaScript. See https://code.hnldesign.nl/demo/hnl.debounce.html
/**
*
* debounceThis ES6 module v1.4 (10-2023)
* Debounces/rate-limits the provided function (callback)
*
* Provides a way to debounce or rate-limit a function, which can be useful in scenarios where events may be
* triggered frequently and rapidly, such as scrolling or resizing the window.
*
* Example usage:
*
@c-kick
c-kick / schedule_booleans.yaml
Last active October 31, 2022 09:59
Automation which uses schedules to set two indicators (booleans): a morning schedule and a home indicator. Also provides schedule/calendar overrides. See description for usage.
#Blueprint by Klaas Leussink / hnldesign.nl (c) 2022
blueprint:
name: Set schedule-related booleans
source_url: https://gist.github.com/c-kick/b4dcdae9d9fa85ca8c51cdedd7293bf5
description: >-
This automation uses schedules to set two indicators (booleans): a morning schedule (useful for short morning routines on working days) and a home indicator (useful for indicating people are home, until they go to bed). It also includes an option to use a holiday calendar, which sets the home indicator on the specified start and end times if the current day is a holiday. Another option is a vacation override, which - when set to active - ignores *all* schedules/calendars and uses the specified 'vacation schedule' instead.
domain: automation
input:
morning_routine_schedules:
name: Morning schedule(s)
@c-kick
c-kick / motion_light_with_override.yaml
Last active October 31, 2022 09:41
A Home Assistant blueprint that can be used to have a motion sensor switch on (a) device(s), but allow the turning off procedure (after no motion is detected anymore) to be overridden by a switch/button. Useful if you need to activate a light upon entry, and turn off after no motion (most cases), but keep the option to force the light to stay on.
#Blueprint by Klaas Leussink / hnldesign.nl (c) 2022
blueprint:
name: Motion Light with override
source_url: https://gist.github.com/c-kick/32234ea474f6b854a861853b17b881ce
description: >-
This blueprint can be used to have a motion sensor switch on (a) device(s), but allow the turning off procedure (after no motion is detected anymore) to be overridden by a (ZHA) switch/button. Useful if you need to activate a light upon entry, and turn off after no motion (most cases), but keep the option to make the light stay on if you're planning on spending more time in the area (e.g. a shed).
Note: if you need to know what is happening, uncomment the debug message lines.
domain: automation
input:
motion_sensor:
@c-kick
c-kick / arc-vt.js
Last active October 19, 2022 08:59
This nodejs script is originally aimed at (Plex) LG OLED users that don't have DTS decoding. It auto-converts audio in video files to something other than DTS (AC3) if applicable (see description in file)
#!/usr/bin/env node
/*
ARC-VT: Audio-stream Reorganizer, Converter & Video Transcoder by Klaas Leussink / hnldesign (C) 2022-2023
This nodejs script is originally aimed at non-DTS LG OLED owners running Plex on a Synology Diskstation.
The problem being that Plex will stubbornly offer the DTS track for playback, producing no sound. And when
asked to convert, playback is choppy/hangs every x seconds. The most solid solution is to make sure the
first available audio stream is a non-DTS (e.g. AC3) codec. This script automates that process:
@c-kick
c-kick / zha_ikea_tradfri_4button_remote_color.yaml
Last active January 6, 2024 09:30 — forked from orcema/zha_ikea_tradfri_4button_remote_color.yaml
blueprint zha_ikea_tradfri_4button_remote_color
#Blueprint by Klaas Leussink / hnldesign.nl (c) 2022
blueprint:
name: ZHA - IKEA TRADFRI - 4 Button Remote - Color Lights
source_url: https://gist.github.com/c-kick/299999c9512c4260fe6de1cd843efdde
description: This automation simulates the use of the IKEA TRADFRI remote control
connected through ZHA. Original blueprint by orcema, modified by hnldesign/c-kick,
- added brightness and color control inputs (for usage with IKEA TRADFRI bulbs)
- more fine-grained dimming
- color_temp changing
domain: automation
@c-kick
c-kick / hnl.stickyStuck
Last active October 4, 2024 12:21
adds class 'stuck' to elements that are stuck. Uses Bootstraps' `position-sticky` class as a selector.
const stickies = document.body.querySelectorAll('.position-sticky');
window.addEventListener('scroll', function(){
stickies.forEach(function(el){
let stuck = false;
const rect = el.getBoundingClientRect();
if (window.getComputedStyle(el).bottom == 'auto') {
stuck = rect.top === parseInt(window.getComputedStyle(el).top, 10);
} else if (window.getComputedStyle(el).top == 'auto') {
stuck = rect.height + rect.top < window.innerHeight;