Skip to content

Instantly share code, notes, and snippets.

@sfoster
sfoster / SceneSpec.js
Created August 12, 2011 23:43
Jasmine + AMD
define(['lib/Scene'], function(Scene){
describe("Scene", function() {
var scene;
beforeEach(function() {
scene = new Scene();
});
it("should instantiate ok", function() {
@sfoster
sfoster / gist:1197446
Created September 6, 2011 12:43
node jsonp wrapper for static json files
var express = require("express"),
jsonp = require("connect-jsonp"),
path = require('path'),
argv = require('optimist').argv;
// delegation the way I like it
var delegate = function(proto, mixin){
var o = Object.create(proto);
if(mixin){
define(['compose'], function(Compose){
var cache = {};
exports = Compose(Compose, function(){
var id = this.id = MyClass.nextId();
cache[id] = {};
}, {
someMethod: function(){
var id = this.id,
@sfoster
sfoster / gist:1267150
Created October 6, 2011 11:07
Identify unlabelled inputs on the page (wcag2) (uses dojo)
(function(){
// usage:
// dojo.create("script", { src: 'https://raw.github.com/gist/1267150/b786273d696a119bba26c4590b1608aa9a21755f/gistfile1.txt?'+(new Date).getTime(), type: 'text/javascript' }, dojo.query("head", document.documentElement).shift())
var labelMap = {};
dojo.query("label[for]").forEach(function(lbl) {
labelMap[lbl.htmlFor]=lbl;
});
console.log("labelMap: ", labelMap);
var selector = [
"input[type=text]",
@sfoster
sfoster / domQuery.js
Created October 17, 2011 22:19
Simplfied dojo.query wrapper to provide streamlined support for the :eq() pseudo-selector
function domQuery(selector, scopeNode){
// summary:
// Wrap dojo.query to provide support for the :eq() pseudo-selector
// See: http://api.jquery.com/eq-selector/
var reEqPseudo = /:eq\((\d+)\)/,
results = new dojo.NodeList;
scopeNode = scopeNode || dojo.doc.documentElement;
@sfoster
sfoster / gist:1338146
Created November 3, 2011 22:44
Steppe rgba buffer data micro-optimization
diff --git a/js/Steppe/Renderer.js b/js/Steppe/Renderer.js
index 77bf78b..22f16bc 100644
--- a/js/Steppe/Renderer.js
+++ b/js/Steppe/Renderer.js
@@ -361,20 +361,15 @@ var Steppe = (function(Steppe) {
(top * (framebufferImageData.width << 2)) +
(ray << 2);
-
- var bufferR = (color >> 24) & 0xff,
@sfoster
sfoster / gist:1404965
Created November 29, 2011 14:24
yui-inspired grid css
/**
* grid essentials
*/
.row {
letter-spacing: -0.31em; /* webkit: collapse white-space between units */
*letter-spacing: normal; /* reset IE < 8 */
word-spacing: -0.43em; /* IE < 8 && gecko: collapse white-space between units */
}
.col {
@sfoster
sfoster / map.js
Created March 23, 2012 23:22
a map function for arrays *or* objects
function map(obj, fn, thisArg){
// suggest you polyfill if you need Javascript < 1.6
var result = {};
if(obj instanceof Array){
result = obj.map(fn, thisArg || null);
} else {
Object.keys(obj).forEach(function(key){
result[key] = fn.call(thisArg || null, obj[key], key, obj);
});
}
@sfoster
sfoster / gist:4275965
Created December 13, 2012 11:58
Exploring layout of a sequence of async steps to setup, run and teardown a series of unit tests, using task.js. You'll need a recent Firefox for the generator (yield) support.
<html>
<head><title>Async unit testing with task.js (exploration)</title></head>
<script type="application/javascript" src="https://raw.github.com/mozilla/task.js/master/lib/task.js"></script>
<script type="application/javascript;version=1.8">
function go() {
var { spawn, join, TaskResult, Deferred } = task;
var mydata = { foo: "bar" };
// shared functions for test setup
@sfoster
sfoster / gist:4608516
Created January 23, 2013 15:53
Array intersection: an array of values which occur in each of the passed arrays. Does the right thing with empty arrays.
var palette1 = ("white,green,brown,blue,orange").split(','),
palette2 = ("cyan,orange,black,white").split(','),
palette3 = ("black,white,grey").split(',');
// given one or more arrays of values,
// return an array with only those values present in each
function intersection() {
var lists = Array.prototype.slice.call(arguments);
return lists.reduce(function(aCommon, aValues){
var overlap = aValues.filter(function(val){