View doubleClickHandler.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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(); |
View hnl.isVisible.mjs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** 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. |
View debouncer.mjs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* 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: | |
* |
View schedule_booleans.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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) |
View motion_light_with_override.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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: |
View arc-vt.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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: |
View hnl.stickyStuck
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const stickes = document.body.querySelectorAll('.position-sticky'); | |
window.addEventListener('scroll', function(){ | |
stickes.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; |
View hnl.setBreakpoints.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** This script adds the current breakpoint-name (as specified in the 'breakpoints' const) | |
* to the body class and notifies anyone listening of the change via the 'breakPointChanged' event. | |
* | |
* Default breakpoint names and cutoff pixel values taken from Bootstrap 5's default responsive breakpoints: | |
* https://getbootstrap.com/docs/5.0/layout/breakpoints/ | |
* | |
* Usage: | |
* - include the script into your page and the class is updated, and will continue to update whenever | |
* the width of the window changes enough to trigger another breakpoint. | |
* - optionally listen for the event via: |
View csp-generator.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* CSP Generator v0.2 (C) 2020-10-12 hnldesign.nl / Klaas Leussink | |
* @param array $rules | |
* Rules, specified as an array with rulesets (array) or rules (string). Note that 'hosts' are specified as an array inside the ruleset: | |
* note: it's easier to define hosts in the $domains array (see second param) | |
* array( | |
* 'default-src' => array ( | |
* 'self', | |
* 'data', | |
* 'unsafe-eval', |
NewerOlder