Skip to content

Instantly share code, notes, and snippets.

View everdimension's full-sized avatar

everdimension

View GitHub Profile
@everdimension
everdimension / modal-dialog-a11y.html
Last active August 21, 2018 20:49
A proper way to create an accessible modal dialog element (a11y). This gist is only about the wrapper element, the links in the comment describe all necessary steps in detail.
<!--
A tabindex="-1" allows an element to receive programmatic focus.
This is useful a modal dialog window: when opened, focus should be set to the dialog so a screen reader
will begin reading and the keyboard will be able to navigate within the dialog.
Because the dialog (probably a <div> element) is not focusable by default, assigning it tabindex="-1"
allows scripting to set focus to it when it is presented
Resources:
https://www.w3.org/WAI/GL/wiki/Using_ARIA_role%3Ddialog_to_implement_a_modal_dialog_box#Note_on_focus_management
https://webaim.org/techniques/keyboard/tabindex
@everdimension
everdimension / isBrowserIE.js
Last active April 6, 2018 19:21
check for ie11
function isBrowserIE() {
const ie11Re = /Trident.*rv:11/;
const edgeRe = /Edge\//;
const ua = navigator.userAgent;
return ie11Re.test(ua) || edgeRe.test(ua);
}
@everdimension
everdimension / FSA-handle-error.js
Created February 12, 2018 23:34
A way to describe response error while conforming to Flux Standard Action and passing request info
/**
* see redux-actions lib to see how `createAction` works
* https://redux-actions.js.org/docs/api/createAction.html
*/
import { createAction } from 'redux-act(ions)';
class ResponseError extends Error { /* add a `this.request` prop */ }
/** add a `meta` field when payload in an Error */
const receiveEntity = createAction('SOME_TYPE', identity, payload => {
import * as React from 'react';
interface Props {
value: string | number;
name?: string;
onChange(name: string, value: number): void;
}
interface State {
value: string;
@everdimension
everdimension / sumOfCombinations.js
Created January 18, 2018 22:50
A function that finds all combinations of numbers in an array the sum of which equals a certain number
function arraySum(arr) {
return arr.reduce((sum, next) => sum + next, 0);
}
function padLeft(string, size) {
let res = string;
while (res.length < size) {
res = `0${res}`;
}
return res;
@everdimension
everdimension / graphql-example.js
Created October 10, 2017 15:56
simplified graphql explanation
// Say we need to display list of posts showing *only* their titles
// and name of the post author
// without graphql
const data = {
posts: null,
usersById: {},
};
get('/api/posts')
const ActuallyUsedComponent = () => (
<div>
/* some layout and markup that doesn't depend on global state */
<Connect mapStateToProps={mapStateToProps} mapPropsToActions={actions}>
/* some markup where the props from connect are actually needed */
</Connect>
<Route
path="..."
component={() => (
<div>
@everdimension
everdimension / isNumericValue.js
Created September 8, 2017 17:44
Robust way to check if a value (number or string, usually from user input) can be considered a number.
function isNumericValue(n) {
return !isNaN(Number(n) - parseFloat(n));
}

Keybase proof

I hereby claim:

  • I am everdimension on github.
  • I am everdimension (https://keybase.io/everdimension) on keybase.
  • I have a public key ASDZ-VkHtJ_900M-VqWOsuxU_ZJPPpICcOXL6n6qnecOhQo

To claim this, I am signing this object:

@everdimension
everdimension / native-font-stack.css
Last active February 16, 2019 18:12
Css rule for setting the "Native Font stack" or "system font".
body {
font-family:
/* Safari for OS X and iOS (San Francisco) */
-apple-system,
/* Chrome >= 56 for OS X (San Francisco), Windows, Linux and Android */
system-ui,
/* Chrome < 56 for OS X (San Francisco) */
BlinkMacSystemFont,
/* Windows */
"Segoe UI",