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" ] | |
| } |