Skip to content

Instantly share code, notes, and snippets.

david kaye dfkaye

Block or report user

Report or block dfkaye

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@dfkaye
dfkaye / is-value.js
Last active Jun 5, 2020
isValue() checks that a value is not undefined, not null, not NaN, and not an empty string.
View is-value.js
// 4 June 2020
// Value check that cuts through tiresome debates.
// Counterpart to isEmpty() which checks for empty containers.
// @see https://gist.github.com/dfkaye/f87272098c4e19e4d55a6a18515aefce
// Stricter version of noValue() from July 2019 which treats empty arrays and empty objects as
// not-containing-values.
// @see https://gist.github.com/dfkaye/e24b35e5cdc66b010cf95766f37ed4ca
@dfkaye
dfkaye / fetch-gists.js
Created Jun 3, 2020
q&d fetch-gists from github
View fetch-gists.js
// 3 June 2020
// memorializing this helper to track my too numerous gists
function fetchGists({ url, per_page, page, fn }) {
console.group(`fetch ${ url } at ${ performance.now() }`);
// url must be at least a string
if (Object(url).toString() !== url) {
console.error("param url should be a string");
@dfkaye
dfkaye / a-billion-post-it-notes.md
Last active Jun 5, 2020
Twitter is not a discussion medium, it is a notation medium, and that's it.
View a-billion-post-it-notes.md

A billion post-it notes...

Started May 29, 2020.

The nature of Twitter

Twitter is not a discussion medium, it is a notation medium, and that's it.

A billion post-it notes on a board do not make a discussion.

@dfkaye
dfkaye / schedule-dom-init.js
Created May 27, 2020
bare bones dom init using readyState checks
View schedule-dom-init.js
// 27 May 2020
// pulled from the SAM patter calculator codepen
// https://codepen.io/dfkaye/pen/QWjdEZe
// Enables us to call view.init() multiple times, even after document is ready.
var view = (function() {
function schedule(fn) {
document.addEventListener('readystatechange', function (e) {
if (document.readyState == "complete") {
@dfkaye
dfkaye / handling-keyboard-navigation-is-a-function-of-the-view.md
Last active May 23, 2020
Keyboard navigation is a function of the View and *only* the View.
View handling-keyboard-navigation-is-a-function-of-the-view.md

Keyboard navigation is not a state, action, or model activity

OK, an update on my evolving understanding of [SAM done right]. I've added a keydown handler in the calculator app I posted about earlier (scroll up) and it struck me that while keyboard input on a button-driven app can send data to the next Action, keyboard navigation should not do that. Tab and arrow navigation should be handled by the View entirely. Is there a case for sending a next action after keyboard navigation (storing a new focus position, for example)? Any comments are welcome.

(Visit the calculator codepen.)

Answering my own question

Keyboard navigation is a function of the View and only the View.

@dfkaye
dfkaye / top-level-await-vs-async-iife.js
Created May 17, 2020
top-level await vs. async IIFE
View top-level-await-vs-async-iife.js
// 17 May 2020
// top-level await vs. async IIFE
// Works in Chrome & Firefox
// Does not work in Edge (throws 'await' is not defined)
await (function() { return Promise.resolve('top-level await') })().then(console.warn);
// > "top-level await"
// async IIFE works across all 3 browsers here
@dfkaye
dfkaye / zip.js
Created May 16, 2020
merge 2 or more arrays into a matrix.
View zip.js
// 16 May 2020
// Killing time again.
// merge 2 or more arrays into a matrix.
//
// zip(a,b,c) returns
// [
// [a[0], b[0], c[0]],
// [a[1], b[1], c[1]],
// ... etc ...
// ];
@dfkaye
dfkaye / is-number.js
Created May 13, 2020
isNumber() checks that a value is functionally a number and not NaN
View is-number.js
// 13 May 2020
// inspired by tweet about npm i is-number...
// see https://twitter.com/ericqweinstein/status/1260604855237750784
/**
* Strategy is to wrap the value in its object constructor without coercion,
* and test 3 conditions:
*
* 1. NaN does not equal itself (===)
* 2. If the object concatenates (+), it's not a number
@dfkaye
dfkaye / jsconfig.json
Last active May 11, 2020
Boilerplate for using TypeScript as a type checker on JavaScript files containing JSDoc annotations.
View jsconfig.json
{
"compilerOptions": {
"noImplicitAny": true,
"allowJS": true,
"checkJS": true,
"noEmit": true
},
"files": [
"jsdoc-example.js"
]
@dfkaye
dfkaye / html-skeleton-with-csp-aria.html
Last active May 13, 2020
Expanded version of Josh W. Comeau (2020), HTML Skeleton (adds CSP, ARIA, custom tag name)
View html-skeleton-with-csp-aria.html
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Josh W Comeau (2020), HTML Skeleton (starter for every web page) → https://joshwcomeau.com/snippets/html/html-skeleton -->
<!-- see also my HTML5 boilerplate gist → https://gist.github.com/dfkaye/1ed260cf8cf1990b13aaa272dab0bf97 -->
<title>Your Page Title</title>
You can’t perform that action at this time.