Loosely ordered with the commands I use most towards the top. Sublime also offer full documentation.
Ctrl+C | copy current line (if no selection) |
Ctrl+X | cut current line (if no selection) |
Ctrl+⇧+K | delete line |
Ctrl+↩ | insert line after |
/** | |
* Creates as many variables as object properties in the specified context. | |
* | |
* _.extract({name: "Andrea", address: "Madrid", age: "27"}, window); | |
* console.log(name) | |
* => 'Andrea' | |
*/ | |
_.mixin({ |
define([ | |
'jquery', | |
'underscore', | |
'backbone', | |
'marionette', | |
'handlebars', | |
'text!templates/app_view.html', | |
'modules/mainMenuView/mainMenuView', |
Loosely ordered with the commands I use most towards the top. Sublime also offer full documentation.
Ctrl+C | copy current line (if no selection) |
Ctrl+X | cut current line (if no selection) |
Ctrl+⇧+K | delete line |
Ctrl+↩ | insert line after |
Why would you want to do this? Because you often don't need more. It's nice to not have to think about your "router" as this big special thing.
Instead, with this approch, your app's current pathname
is just another piece of state, just like anything else.
This also means that when doing server-side rendering of a redux app, you can just do:
var app = require('your/redux/app')
var React = require('react')
var svg = document.querySelector( "svg" ); | |
var svgData = new XMLSerializer().serializeToString( svg ); | |
var canvas = document.createElement( "canvas" ); | |
var ctx = canvas.getContext( "2d" ); | |
var img = document.createElement( "img" ); | |
img.setAttribute( "src", "data:image/svg+xml;base64," + btoa( svgData ) ); | |
img.onload = function() { |
const flatten = (arr) => arr.reduce((prev, current) => prev.concat(Array.isArray(current) ? flatten(current) : current), []); |
Write a program that does what it’s supposed to do | |
Write idiomatic code | |
Debug a program that I wrote | |
Debug a program someone else wrote | |
Debug the interaction between a system I wrote and one I didn’t | |
File a good bug report | |
Modify a program I didn’t write | |
Test a program I wrote | |
Test a program I didn’t write | |
Learn a new programming language |
// Both params accept the same format as the Date object (IETF-compliant RFC 2822 timestamps and also a version of ISO8601). | |
// This is a basic version (supports just years and months, it assumes every month is 30 days, no pluralization, etc.) but it works. | |
const getDuration = (startDateString, endDateString = new Date()) => { | |
const totalMonths = Math.floor((new Date(endDateString) - new Date(startDateString)) / 1000 / 60 / 60 / 24 / 30); | |
const months = totalMonths < 12 ? totalMonths : totalMonths % 12; | |
const years = Math.floor(totalMonths / 12); | |
let duration = '¯\_(ツ)_/¯'; | |
if (years === 0) | |
if (months > 0) |
// Exists since ES6 | |
let isTheNewVar = '☝️😙'; | |
function why() { | |
let result = 'Well, actually…'; | |
if (!window.isTheNewVar) { | |
let isTheNewVar = 'BECAUSE IT CANNOT CREATE "GLOBAL" PROPERTIES! 🎉'; | |
let result = 'ALSO BECAUSE IT IS BLOCK-SCOPED! 😎'; |
const clone = (() => { | |
/*! (c) Andrea Giammarchi - WTFPL */ | |
const toString = {}.toString; | |
const flags = ['global', 'ignoreCase', 'multiline', 'sticky', 'unicode']; | |
const prime = obj => typeof obj === 'object' ? new obj.constructor(obj.valueOf()) : obj; | |
const through = obj => { | |
const descriptors = Object.getOwnPropertyDescriptors(obj); | |
Reflect.ownKeys(descriptors).forEach(key => { | |
const descriptor = descriptors[key]; | |
if ('value' in descriptor) { |