Skip to content

Instantly share code, notes, and snippets.

View wookiehangover's full-sized avatar
💭
just setting up my gthb...

Sam Breed wookiehangover

💭
just setting up my gthb...
View GitHub Profile
var Filter = Backbone.Model.extend({
initialize: function(options){
if( options.globalFilter ){
this.globalFilter = options.globalFilter;
this.set( this.globalFilter.toJSON() );
this.listenTo( this.globalFilter, 'change', function(){
this.set( this.globalFilter.toJSON() );
}, this );
}
@wookiehangover
wookiehangover / gist:6780202
Last active December 24, 2015 09:49
Testing with Squire
var Squire = require('squire');
var injector = new Squire();
function stubDependencies(deps){
if( !(deps && deps.forEach) ){
throw new TypeError('I need an Array!');
}
var stubbedDeps = {};
deps.forEach(function(dep){
var stub = sinon.stub();
mochaAppium:
options:
usePromises: true
# Mocha options
reporter: 'spec'
timeout: 30e3
slow: 10e3
iphone:
src: ['www/spec/functional/sanity.js']
sam@wintermute: ~/dev/quickleft/sprintly/sprint.ly ± [master] ✖
∴ grunt mocha 09/24/13 - 11:01:01
Running "mocha:all" (mocha) task
Testing: http://127.0.0.1:8000/static/test/index.html
․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․
․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․․

Sprintly Rendering notes

FilteredCollection Events

FilteredCollection events are not granular: 'load', 'reset', 'filter-complete', and 'loaded' always trigger in sequence, and usually in duplicate, so there's no way to determine when to safely take a rendering action based on collection lifecycle events.

'sort' events are repeated many times on FilteredCollections--ideally sort events should be silent unless a change has actually occured. Binding rendering actions on 'sort' isn't possible because of all the duplicate events.

There are only a few events that I feel should be taking place in the lifecycle of a given FilteredCollection:

onFilterComplete_: function(collection){
if( this.isLoaded() && !this.loading_ ){
var newItems = _.difference(
_.pluck(collection.models, 'cid'),
_.keys(this.itemCardViews_)
);
// empty collections or collections with any unrendered items should be
// re-rendered, otherwise return early
@wookiehangover
wookiehangover / create-worker.js
Created September 3, 2013 04:36
Turn a function into an inline web worker
(function(){
var Blob = this.Blob;
var URL = this.URL;
var Worker = this.Worker;
this.createWorker = function(src){
src = src.toString();
var srcLines = src.split('\n');
// Remove the outer function. There's probably a better way.
if( /^f.+\{/.test(srcLines[0]) ){
(function(root){
var Backbone = root.Backbone;
var _ = root._;
var $ = Backbone.$;
if( !Backbone || !$.fn.hammer ){
return;
}
var delegateEvents = Backbone.View.prototype.delegateEvents;
define(function(require, exports, module) {
var $ = require('jquery');
var _ = require('underscore');
var Backbone = require('backbone');
var moment = require('moment');
var Router = require('./router');
var AuthView = require('./views/header/auth');
var LoggedOutView = require('./views/header/loggedout');
jQuery(function() {
window.addEventListener('message', function(event) {
if( window.user ){
event.source.postMessage(window.user, '*');
}
}, false);
});