(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<title>Camera API</title> | |
</head> | |
<body> | |
<div class="container"> |
<!DOCTYPE html> | |
<html> | |
<head> | |
<link href="http://cdn.kendostatic.com/2013.1.514/styles/kendo.common.min.css" rel="stylesheet" type="text/css" /> | |
<link href="http://cdn.kendostatic.com/2013.1.514/styles/kendo.default.min.css" rel="stylesheet" type="text/css" /> | |
<script src="http://cdn.kendostatic.com/2013.1.514/js/jquery.min.js"></script> | |
<script src="http://cdn.kendostatic.com/2013.1.514/js/kendo.all.min.js"></script> | |
</head> | |
<body> | |
(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<title>Celeraone - Dynamic table generation with pure javascript</title> | |
<style id="jsbin-css"> |
import {Injectable, EventEmitter} from 'angular2/core'; | |
@Injectable() | |
export class EmitterService { | |
private static _emitters: { [ID: string]: EventEmitter<any> } = {}; | |
static get(ID: string): EventEmitter<any> { | |
if (!this._emitters[ID]) | |
this._emitters[ID] = new EventEmitter(); | |
return this._emitters[ID]; |
This article has been given a more permanent home on my blog. Also, since it was first written, the development of the Promises/A+ specification has made the original emphasis on Promises/A seem somewhat outdated.
Promises are a software abstraction that makes working with asynchronous operations much more pleasant. In the most basic definition, your code will move from continuation-passing style:
getTweetsFor("domenic", function (err, results) {
// the rest of your code goes here.
// USAGE: | |
// | |
// When you attach the infiniteScroll directive to an element, it will emit the infiniteScrollAction | |
// @Output() event every time the user has scrolled to the bottom of the element. Your loadMoreArticles | |
// function can make an HTTP call and append the results to the articles list, for example. In doing this, | |
// you effectively increase the height of the element and thus begin the process of the infiniteScroll directive | |
// again, over and over until the element height stops increasing. | |
// | |
// <div class="container" infiniteScroll (infiniteScrollAction)="loadMoreArticles()"> | |
// <div class="article" *ngFor="let article of articles"> |
As the web component specs continue to be developed, there has been little information on how to test them.
In particular the /deep/
combinator has been deprecated in Shadow DOM 1.0. This is particularly painful since
most end-to-end testing frameworks rely on elements being discoverable by XPath or calls to querySelector.
Elements in Shadow DOM are selectable by neither.
Webdriver.io has the standard actions by selectors, but also allows browser executable scripts to return an element
#!/usr/bin/env bash | |
# COPY FROM THIS LINE, if your post-merge hook already contains content | |
# MIT © Sindre Sorhus - sindresorhus.com | |
# git `post-merge` hook to run a command after `git pull` if a specified file was changed | |
# Run `chmod +x post-merge` to make it executable then put it into `.git/hooks/`. | |
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" |
/* | |
* Easing Functions - inspired from http://gizma.com/easing/ | |
* only considering the t value for the range [0, 1] => [0, 1] | |
*/ | |
EasingFunctions = { | |
// no easing, no acceleration | |
linear: function (t) { return t }, | |
// accelerating from zero velocity | |
easeInQuad: function (t) { return t*t }, | |
// decelerating to zero velocity |