Skip to content

Instantly share code, notes, and snippets.

@danfoust
danfoust / style.css
Created December 18, 2018 19:58
If you're lazy loading images, this will prevent the flash of alt text that appears before the images are loaded.
img:not([src]) {
visibility: hidden;
}
/* IE/Edge */
img[data-src]:not([src]),
img[data-srcset]:not([src]) {
display: block;
min-height: 1px;
}
@danfoust
danfoust / jquery-passive-listener.js
Created December 20, 2018 22:01
Improves scroll performance by making jQuery events passive. Run directly after jQuery script is loaded. Read more: https://stackoverflow.com/questions/46094912/added-non-passive-event-listener-to-a-scroll-blocking-touchstart-event
jQuery.event.special.touchstart = {
setup: function( _, ns, handle ){
if ( ns.includes("noPreventDefault") ) {
this.addEventListener("touchstart", handle, { passive: false });
} else {
this.addEventListener("touchstart", handle, { passive: true });
}
}
};
@danfoust
danfoust / copyToClipboard.js
Created February 28, 2019 19:12
Simple Vanilla js approach for copying text of data attribute on click
document.querySelectorAll('.copy-text').forEach(function(elem) {
elem.addEventListener('click', function() {
var copyText = this.getAttribute('data-copyText');
copyToClipboard(copyText);
});
});
function copyToClipboard(text) {
var selected = false;
@danfoust
danfoust / certgen.sh
Last active November 21, 2020 00:21
Create new SSL certs
#!/bin/bash
source /usr/bin/cprintf.sh
###########################################################
# Generate a new SSL
# @param string $1 domain
if [ -n "$1" ]; then
domain="$1"
@danfoust
danfoust / settings.json
Created October 29, 2020 12:21
VSCode Settings
{
// -> Files
"files.trimTrailingWhitespace": true,
// -> Editor
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.renderWhitespace": "all",
"editor.formatOnPaste": true,
"editor.codeActionsOnSave": {
@danfoust
danfoust / main.go
Last active November 22, 2020 15:11
Simple Go HTTP Test
package main
import (
"fmt"
"net/http"
)
func IndexHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World")
}
@danfoust
danfoust / nginx_Dockerfile
Created November 23, 2020 02:39
Basic Nginx + PHP-FPM Docker config
FROM nginx:1.19.4-alpine
COPY default.conf /etc/nginx/conf.d/
WORKDIR /var/www/html
@danfoust
danfoust / async-await.go
Created December 30, 2020 12:52
Async/Await in Golang
c := make(chan User, 1)
go func() { c <- getUser() }() // async
user := <-c // await
@danfoust
danfoust / scatter-gather.go
Created December 30, 2020 12:55
Work will only take as long as slowest process
// Scatter
c := make(chan result, 10)
for i := 0; i < cap(c); i++ {
go func() {
val, err := process()
c <- result{val, err}
}()
}
// Gather
@danfoust
danfoust / string-keys.type.ts
Created April 8, 2022 15:11
Narrow string | number union with utility type
/*
If you try to do `keyof SomeType`, and `SomeType` has an interface of `[key: string]: x`
TypeScript will infer that to a union of `string | number` because JavaScript coerces numeric
indexes to strings.
Example: obj[0] -> obj["0"]
This can make it annoying to try to create an interface for interacting with one of these
types when we know we only want to accept string values, or that's a rule we want to enforce.