Skip to content

Instantly share code, notes, and snippets.

@latentflip
Created August 21, 2014 10:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save latentflip/fc214a2babcf5d35eef5 to your computer and use it in GitHub Desktop.
Save latentflip/fc214a2babcf5d35eef5 to your computer and use it in GitHub Desktop.
requirebin sketch
var Collection = require('ampersand-collection');
var MyCollection = Collection.extend({
initialize: function () {
this.listenTo(this, 'all', console.log.bind(console));
}
});
var myc = new MyCollection();
myc.add({ foo: 'bar' });
myc.add({ bar: 'baz' });
console.log('hi');
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({HLDUC9:[function(require,module,exports){var BackboneEvents=require("backbone-events-standalone");var classExtend=require("ampersand-class-extend");var isArray=require("is-array");var extend=require("extend-object");var slice=[].slice;function Collection(models,options){options||(options={});if(options.model)this.model=options.model;if(options.comparator)this.comparator=options.comparator;if(options.parent)this.parent=options.parent;this._reset();this.initialize.apply(this,arguments);if(models)this.reset(models,extend({silent:true},options))}extend(Collection.prototype,BackboneEvents,{initialize:function(){},mainIndex:"id",indexes:[],isModel:function(model){return this.model&&model instanceof this.model},add:function(models,options){return this.set(models,extend({merge:false,add:true,remove:false},options))},parse:function(res,options){return res},serialize:function(){return this.map(function(model){if(model.serialize){return model.serialize()}else{var out={};extend(out,model);delete out.collection;return out}})},toJSON:function(){return this.serialize()},set:function(models,options){options=extend({add:true,remove:true,merge:true},options);if(options.parse)models=this.parse(models,options);var singular=!isArray(models);models=singular?models?[models]:[]:models.slice();var id,model,attrs,existing,sort,i,length;var at=options.at;var sortable=this.comparator&&at==null&&options.sort!==false;var sortAttr="string"===typeof this.comparator?this.comparator:null;var toAdd=[],toRemove=[],modelMap={};var add=options.add,merge=options.merge,remove=options.remove;var order=!sortable&&add&&remove?[]:false;var targetProto=this.model&&this.model.prototype||Object.prototype;for(i=0,length=models.length;i<length;i++){attrs=models[i]||{};if(this.isModel(attrs)){id=model=attrs}else if(targetProto.generateId){id=targetProto.generateId(attrs)}else{id=attrs[targetProto.idAttribute||"id"]}if(existing=this.get(id)){if(remove)modelMap[existing.cid||existing.id]=true;if(merge){attrs=attrs===model?model.attributes:attrs;if(options.parse)attrs=existing.parse(attrs,options);if(existing.set){existing.set(attrs,options);if(sortable&&!sort&&existing.hasChanged(sortAttr))sort=true}else{extend(existing,attrs)}}models[i]=existing}else if(add){model=models[i]=this._prepareModel(attrs,options);if(!model)continue;toAdd.push(model);this._addReference(model,options)}model=existing||model;if(!model)continue;if(order&&(model.isNew&&model.isNew()||!model.id||!modelMap[model.cid||model.id]))order.push(model);modelMap[model.id]=true}if(remove){for(i=0,length=this.length;i<length;i++){model=this.models[i];if(!modelMap[model.cid||model.id])toRemove.push(model)}if(toRemove.length)this.remove(toRemove,options)}if(toAdd.length||order&&order.length){if(sortable)sort=true;if(at!=null){for(i=0,length=toAdd.length;i<length;i++){this.models.splice(at+i,0,toAdd[i])}}else{var orderedModels=order||toAdd;for(i=0,length=orderedModels.length;i<length;i++){this.models.push(orderedModels[i])}}}if(sort)this.sort({silent:true});if(!options.silent){for(i=0,length=toAdd.length;i<length;i++){model=toAdd[i];if(model.trigger){model.trigger("add",model,this,options)}else{this.trigger("add",model,this,options)}}if(sort||order&&order.length)this.trigger("sort",this,options)}return singular?models[0]:models},get:function(query,indexName){if(!query)return;var index=this._indexes[indexName||this.mainIndex];return index[query]||index[query[this.mainIndex]]||this._indexes.cid[query.cid]},at:function(index){return this.models[index]},remove:function(models,options){var singular=!isArray(models);var i,length,model,index;models=singular?[models]:slice.call(models);options||(options={});for(i=0,length=models.length;i<length;i++){model=models[i]=this.get(models[i]);if(!model)continue;this._deIndex(model);index=this.models.indexOf(model);this.models.splice(index,1);if(!options.silent){options.index=index;if(model.trigger){model.trigger("remove",model,this,options)}else{this.trigger("remove",model,this,options)}}this._removeReference(model,options)}return singular?models[0]:models},reset:function(models,options){options||(options={});for(var i=0,length=this.models.length;i<length;i++){this._removeReference(this.models[i],options)}options.previousModels=this.models;this._reset();models=this.add(models,extend({silent:true},options));if(!options.silent)this.trigger("reset",this,options);return models},sort:function(options){var self=this;if(!this.comparator)throw new Error("Cannot sort a set without a comparator");options||(options={});if(typeof this.comparator==="string"){this.models.sort(function(left,right){if(left.get){left=left.get(self.comparator);right=right.get(self.comparator)}else{left=left[self.comparator];right=right[self.comparator]}if(left>right||left===void 0)return 1;if(left<right||right===void 0)return-1;return 0})}else if(this.comparator.length===1){this.models.sort(function(left,right){left=self.comparator(left);right=self.comparator(right);if(left>right||left===void 0)return 1;if(left<right||right===void 0)return-1;return 0})}else{this.models.sort(this.comparator.bind(this))}if(!options.silent)this.trigger("sort",this,options);return this},_reset:function(){var list=this.indexes||[];var i=0;list.push(this.mainIndex);list.push("cid");var l=list.length;this.models=[];this._indexes={};for(;i<l;i++){this._indexes[list[i]]={}}},_prepareModel:function(attrs,options){if(!this.model)return attrs;if(this.isModel(attrs)){return attrs}else{options=options?extend({},options):{};options.collection=this;return new this.model(attrs,options)}},_deIndex:function(model){for(var name in this._indexes){delete this._indexes[name][model[name]||model.get&&model.get(name)]}},_index:function(model){for(var name in this._indexes){var indexVal=model[name]||model.get&&model.get(name);if(indexVal)this._indexes[name][indexVal]=model}},_addReference:function(model,options){this._index(model);if(!model.collection)model.collection=this;if(model.on)model.on("all",this._onModelEvent,this)},_removeReference:function(model,options){if(this===model.collection)delete model.collection;this._deIndex(model);if(model.off)model.off("all",this._onModelEvent,this)},_onModelEvent:function(event,model,collection,options){if((event==="add"||event==="remove")&&collection!==this)return;if(event==="destroy")this.remove(model,options);if(model&&event==="change:"+model.idAttribute){this._deIndex(model);this._index(model)}this.trigger.apply(this,arguments)}});Object.defineProperties(Collection.prototype,{length:{get:function(){return this.models.length}},isCollection:{value:true}});var arrayMethods=["indexOf","lastIndexOf","every","some","forEach","map","filter","reduce","reduceRight"];arrayMethods.forEach(function(method){Collection.prototype[method]=function(){return this.models[method].apply(this.models,arguments)}});Collection.prototype.each=Collection.prototype.forEach;Collection.extend=classExtend;module.exports=Collection},{"ampersand-class-extend":3,"backbone-events-standalone":5,"extend-object":6,"is-array":7}],"ampersand-collection":[function(require,module,exports){module.exports=require("HLDUC9")},{}],3:[function(require,module,exports){var objectExtend=require("extend-object");var extend=function(protoProps){var parent=this;var child;var args=[].slice.call(arguments);if(protoProps&&protoProps.hasOwnProperty("constructor")){child=protoProps.constructor}else{child=function(){return parent.apply(this,arguments)}}objectExtend(child,parent);var Surrogate=function(){this.constructor=child};Surrogate.prototype=parent.prototype;child.prototype=new Surrogate;if(protoProps){args.unshift(child.prototype);objectExtend.apply(null,args)}child.__super__=parent.prototype;return child};module.exports=extend},{"extend-object":6}],4:[function(require,module,exports){(function(){var root=this,breaker={},nativeForEach=Array.prototype.forEach,hasOwnProperty=Object.prototype.hasOwnProperty,slice=Array.prototype.slice,idCounter=0;function miniscore(){return{keys:Object.keys,uniqueId:function(prefix){var id=++idCounter+"";return prefix?prefix+id:id},has:function(obj,key){return hasOwnProperty.call(obj,key)},each:function(obj,iterator,context){if(obj==null)return;if(nativeForEach&&obj.forEach===nativeForEach){obj.forEach(iterator,context)}else if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)===breaker)return}}else{for(var key in obj){if(this.has(obj,key)){if(iterator.call(context,obj[key],key,obj)===breaker)return}}}},once:function(func){var ran=false,memo;return function(){if(ran)return memo;ran=true;memo=func.apply(this,arguments);func=null;return memo}}}}var _=miniscore(),Events;Events={on:function(name,callback,context){if(!eventsApi(this,"on",name,[callback,context])||!callback)return this;this._events||(this._events={});var events=this._events[name]||(this._events[name]=[]);events.push({callback:callback,context:context,ctx:context||this});return this},once:function(name,callback,context){if(!eventsApi(this,"once",name,[callback,context])||!callback)return this;var self=this;var once=_.once(function(){self.off(name,once);callback.apply(this,arguments)});once._callback=callback;return this.on(name,once,context)},off:function(name,callback,context){var retain,ev,events,names,i,l,j,k;if(!this._events||!eventsApi(this,"off",name,[callback,context]))return this;if(!name&&!callback&&!context){this._events={};return this}names=name?[name]:_.keys(this._events);for(i=0,l=names.length;i<l;i++){name=names[i];if(events=this._events[name]){this._events[name]=retain=[];if(callback||context){for(j=0,k=events.length;j<k;j++){ev=events[j];if(callback&&callback!==ev.callback&&callback!==ev.callback._callback||context&&context!==ev.context){retain.push(ev)}}}if(!retain.length)delete this._events[name]}}return this},trigger:function(name){if(!this._events)return this;var args=slice.call(arguments,1);if(!eventsApi(this,"trigger",name,args))return this;var events=this._events[name];var allEvents=this._events.all;if(events)triggerEvents(events,args);if(allEvents)triggerEvents(allEvents,arguments);return this},stopListening:function(obj,name,callback){var listeners=this._listeners;if(!listeners)return this;var deleteListener=!name&&!callback;if(typeof name==="object")callback=this;if(obj)(listeners={})[obj._listenerId]=obj;for(var id in listeners){listeners[id].off(name,callback,this);if(deleteListener)delete this._listeners[id]}return this}};var eventSplitter=/\s+/;var eventsApi=function(obj,action,name,rest){if(!name)return true;if(typeof name==="object"){for(var key in name){obj[action].apply(obj,[key,name[key]].concat(rest))}return false}if(eventSplitter.test(name)){var names=name.split(eventSplitter);for(var i=0,l=names.length;i<l;i++){obj[action].apply(obj,[names[i]].concat(rest))}return false}return true};var triggerEvents=function(events,args){var ev,i=-1,l=events.length,a1=args[0],a2=args[1],a3=args[2];switch(args.length){case 0:while(++i<l)(ev=events[i]).callback.call(ev.ctx);return;case 1:while(++i<l)(ev=events[i]).callback.call(ev.ctx,a1);return;case 2:while(++i<l)(ev=events[i]).callback.call(ev.ctx,a1,a2);return;case 3:while(++i<l)(ev=events[i]).callback.call(ev.ctx,a1,a2,a3);return;default:while(++i<l)(ev=events[i]).callback.apply(ev.ctx,args)}};var listenMethods={listenTo:"on",listenToOnce:"once"};_.each(listenMethods,function(implementation,method){Events[method]=function(obj,name,callback){var listeners=this._listeners||(this._listeners={});var id=obj._listenerId||(obj._listenerId=_.uniqueId("l"));listeners[id]=obj;if(typeof name==="object")callback=this;obj[implementation](name,callback,this);return this}});Events.bind=Events.on;Events.unbind=Events.off;Events.mixin=function(proto){var exports=["on","once","off","trigger","stopListening","listenTo","listenToOnce","bind","unbind"];_.each(exports,function(name){proto[name]=this[name]},this);return proto};if(typeof define==="function"){define(function(){return Events})}else if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=Events}exports.BackboneEvents=Events}else{root.BackboneEvents=Events}})(this)},{}],5:[function(require,module,exports){module.exports=require("./backbone-events-standalone")},{"./backbone-events-standalone":4}],6:[function(require,module,exports){var arr=[];var each=arr.forEach;var slice=arr.slice;module.exports=function(obj){each.call(slice.call(arguments,1),function(source){if(source){for(var prop in source){obj[prop]=source[prop]}}});return obj}},{}],7:[function(require,module,exports){var isArray=Array.isArray;var str=Object.prototype.toString;module.exports=isArray||function(val){return!!val&&"[object Array]"==str.call(val)}},{}]},{},[]);var Collection=require("ampersand-collection");var MyCollection=Collection.extend({initialize:function(){this.listenTo(this,"all",console.log.bind(console))}});var myc=new MyCollection;myc.add({foo:"bar"});myc.add({bar:"baz"});console.log("hi");
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"ampersand-collection": "1.3.13"
}
}
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment