Reach UI is an accessible foundation for React applications and design systems.
The three equally important goals are to be:
- Accessible
- Composable
- Stylable
self.addEventListener('install', (e) => { | |
e.waitUntil( | |
caches.open("precache").then((cache) => cache.add("/broken.png")) | |
); | |
}); | |
function isImage(fetchRequest) { | |
return fetchRequest.method === "GET" && fetchRequest.destination === "image"; | |
} |
(function (context, trackingId, options) { | |
const history = context.history; | |
const doc = document; | |
const nav = navigator || {}; | |
const storage = localStorage; | |
const encode = encodeURIComponent; | |
const pushState = history.pushState; | |
const typeException = 'exception'; | |
const generateId = () => Math.random().toString(36); | |
const getId = () => { |
var groupBy = function(data, key) { // `data` is an array of objects, `key` is the key (or property accessor) to group by | |
// reduce runs this anonymous function on each element of `data` (the `item` parameter, | |
// returning the `storage` parameter at the end | |
return data.reduce(function(storage, item) { | |
// get the first instance of the key by which we're grouping | |
var group = item[key]; | |
// set `storage` for this instance of group to the outer scope (if not empty) or initialize it | |
storage[group] = storage[group] || []; | |
'use strict'; | |
const characters = [ | |
{ name: 'ironman', env: 'marvel' }, | |
{ name: 'black_widow', env: 'marvel' }, | |
{ name: 'wonder_woman', env: 'dc_comics' }, | |
]; | |
console.log( | |
characters |
https://gist.github.com/ljharb/58faf1cfcb4e6808f74aae4ef7944cff
While attempting to explain JavaScript's reduce
method on arrays, conceptually, I came up with the following - hopefully it's helpful; happy to tweak it if anyone has suggestions.
JavaScript Arrays have lots of built in methods on their prototype. Some of them mutate - ie, they change the underlying array in-place. Luckily, most of them do not - they instead return an entirely distinct array. Since arrays are conceptually a contiguous list of items, it helps code clarity and maintainability a lot to be able to operate on them in a "functional" way. (I'll also insist on referring to an array as a "list" - although in some languages, List
is a native data type, in JS and this post, I'm referring to the concept. Everywhere I use the word "list" you can assume I'm talking about a JS Array) This means, to perform a single operation on the list as a whole ("atomically"), and to return a new list - thus making it mu
<script src="/upup.min.js"></script> | |
<script> | |
UpUp.start({ | |
'content-url': 'schedule.html?user=joe', // show this when the user is offline | |
'assets': [ // define additional assets needed while offline: | |
'img/logo.png', // such as images, | |
'css/offline.css', // custom stylesheets, | |
'schedule.json?user=joe', // dynamic requests with data per user, | |
'js/angular.min.js', // javascript libraries and frameworks, | |
'mov/intro.mp4', // videos, |
{ | |
"name": "My Progressive Web Application", | |
"short_name": "Progressive", | |
"start_url": "/?home=true", | |
"icons": [ | |
{ | |
"src": "/icons/icon36.png", | |
"sizes": "36x36", | |
"type": "image/png" | |
}, |
{ | |
"presets": [ "es2015" ] | |
} |