Skip to content

Instantly share code, notes, and snippets.

@cdaringe
Last active August 29, 2015 14:19
Show Gist options
  • Select an option

  • Save cdaringe/d514a6c2c6ee92095253 to your computer and use it in GitHub Desktop.

Select an option

Save cdaringe/d514a6c2c6ee92095253 to your computer and use it in GitHub Desktop.
requirebin sketch
'use strict';
var Collection = require('ampersand-collection');
// method 1 - basic
var parentCollection = new Collection();
var childColl1 = new Collection();
childColl1.set([{id: 1}, {id: 2}]);
var childColl2 = new Collection();
childColl2.set([{id: 1}, {id: 2}]);
parentCollection.set([childColl1, childColl2]);
console.log('parent coll length: ' + parentCollection.length);
console.log('parent collection\'s first child is childColl1: ' + (parentCollection.models[0] === childColl1));
// print out the collection `models` in the parent collection. these are child collections!
for (var m in parentCollection.models) {
if (parentCollection.models.hasOwnProperty(m)) {
console.dir(parentCollection.models[m]);
}
}
/// method 2 - using model. Rather than using terms parent/child, we will use Top/Bottom and have them be analogous
var BottomCollection = Collection.extend({
isBottomCollection: true
})
var b1 = new BottomCollection();
b1.set([{b:1}, {b: 2}]);
var b2 = new BottomCollection();
b2.set([{b:3}, {b: 4}]);
console.dir('is b1 a bottom collection [method1]?: ' + (b1.isBottomCollection === true));
console.dir('is b1 a bottom collection [method2]?: ' + (b1 instanceof BottomCollection));
var TopCollection = Collection.extend({
model: BottomCollection,
isModel: function (model) {
if (model instanceof BottomCollection) return true;
throw new TypeError('bogus BottomCollection!');
}
});
var t1 = new TopCollection([b1]);
console.log('parent coll length === 1: ' + (parentCollection.length === 1));
try {
t1.add({notAbottomCollection: 0});
} catch (err) {
console.log('ah ha! model added was not a Bottom Collection');
}
t1.add(b2);
t1.forEach(function(childColl, ndx) {
console.log('t1\'s collection at index ' + ndx + ' has the following models:');
console.dir(childColl.models);
});
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);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.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}({1:[function(require,module,exports){var assign=require("lodash.assign");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)}}assign(child,parent);var Surrogate=function(){this.constructor=child};Surrogate.prototype=parent.prototype;child.prototype=new Surrogate;if(protoProps){args.unshift(child.prototype);assign.apply(null,args)}child.__super__=parent.prototype;return child};module.exports=extend},{"lodash.assign":18}],2:[function(require,module,exports){if(typeof window!=="undefined"){window.ampersand=window.ampersand||{};window.ampersand["ampersand-events"]=window.ampersand["ampersand-events"]||[];window.ampersand["ampersand-events"].push("1.1.1")}var runOnce=require("lodash.once");var uniqueId=require("lodash.uniqueid");var keys=require("lodash.keys");var isEmpty=require("lodash.isempty");var each=require("lodash.foreach");var bind=require("lodash.bind");var assign=require("lodash.assign");var slice=Array.prototype.slice;var eventSplitter=/\s+/;var 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=runOnce(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=void 0;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 listeningTo=this._listeningTo;if(!listeningTo)return this;var remove=!name&&!callback;if(!callback&&typeof name==="object")callback=this;if(obj)(listeningTo={})[obj._listenId]=obj;for(var id in listeningTo){obj=listeningTo[id];obj.off(name,callback,this);if(remove||isEmpty(obj._events))delete this._listeningTo[id]}return this},createEmitter:function(obj){return assign(obj||{},Events)}};Events.bind=Events.on;Events.unbind=Events.off;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;var i=-1;var l=events.length;var a1=args[0];var a2=args[1];var 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);return}};var listenMethods={listenTo:"on",listenToOnce:"once"};each(listenMethods,function(implementation,method){Events[method]=function(obj,name,callback,run){var listeningTo=this._listeningTo||(this._listeningTo={});var id=obj._listenId||(obj._listenId=uniqueId("l"));listeningTo[id]=obj;if(!callback&&typeof name==="object")callback=this;obj[implementation](name,callback,this);return this}});Events.listenToAndRun=function(obj,name,callback){Events.listenTo.apply(this,arguments);if(!callback&&typeof name==="object")callback=this;callback.apply(this);return this};module.exports=Events},{"lodash.assign":18,"lodash.bind":27,"lodash.foreach":3,"lodash.isempty":7,"lodash.keys":11,"lodash.once":14,"lodash.uniqueid":16}],3:[function(require,module,exports){var arrayEach=require("lodash._arrayeach"),baseEach=require("lodash._baseeach"),bindCallback=require("lodash._bindcallback"),isArray=require("lodash.isarray");function createForEach(arrayFunc,eachFunc){return function(collection,iteratee,thisArg){return typeof iteratee=="function"&&typeof thisArg=="undefined"&&isArray(collection)?arrayFunc(collection,iteratee):eachFunc(collection,bindCallback(iteratee,thisArg,3))}}var forEach=createForEach(arrayEach,baseEach);module.exports=forEach},{"lodash._arrayeach":4,"lodash._baseeach":5,"lodash._bindcallback":6,"lodash.isarray":33}],4:[function(require,module,exports){function arrayEach(array,iteratee){var index=-1,length=array.length;while(++index<length){if(iteratee(array[index],index,array)===false){break}}return array}module.exports=arrayEach},{}],5:[function(require,module,exports){var keys=require("lodash.keys");var MAX_SAFE_INTEGER=Math.pow(2,53)-1;var baseEach=createBaseEach(baseForOwn);var baseFor=createBaseFor();function baseForOwn(object,iteratee){return baseFor(object,iteratee,keys)}function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){var length=collection?collection.length:0;if(!isLength(length)){return eachFunc(collection,iteratee)}var index=fromRight?length:-1,iterable=toObject(collection);while(fromRight?index--:++index<length){if(iteratee(iterable[index],index,iterable)===false){break}}return collection}}function createBaseFor(fromRight){return function(object,iteratee,keysFunc){var iterable=toObject(object),props=keysFunc(object),length=props.length,index=fromRight?length:-1;while(fromRight?index--:++index<length){var key=props[index];if(iteratee(iterable[key],key,iterable)===false){break}}return object}}function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}function toObject(value){return isObject(value)?value:Object(value)}function isObject(value){var type=typeof value;return type=="function"||!!value&&type=="object"}module.exports=baseEach},{"lodash.keys":11}],6:[function(require,module,exports){function bindCallback(func,thisArg,argCount){if(typeof func!="function"){return identity}if(typeof thisArg=="undefined"){return func}switch(argCount){case 1:return function(value){return func.call(thisArg,value)};case 3:return function(value,index,collection){return func.call(thisArg,value,index,collection)};case 4:return function(accumulator,value,index,collection){return func.call(thisArg,accumulator,value,index,collection)};case 5:return function(value,other,key,object,source){return func.call(thisArg,value,other,key,object,source)}}return function(){return func.apply(thisArg,arguments)}}function identity(value){return value}module.exports=bindCallback},{}],7:[function(require,module,exports){var isArguments=require("lodash.isarguments"),isArray=require("lodash.isarray"),isFunction=require("lodash.isfunction"),isString=require("lodash.isstring"),keys=require("lodash.keys");function isObjectLike(value){return!!value&&typeof value=="object"}var MAX_SAFE_INTEGER=Math.pow(2,53)-1;function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}function isEmpty(value){if(value==null){return true}var length=value.length;if(isLength(length)&&(isArray(value)||isString(value)||isArguments(value)||isObjectLike(value)&&isFunction(value.splice))){return!length}return!keys(value).length}module.exports=isEmpty},{"lodash.isarguments":8,"lodash.isarray":33,"lodash.isfunction":9,"lodash.isstring":10,"lodash.keys":11}],8:[function(require,module,exports){var argsTag="[object Arguments]";function isObjectLike(value){return!!value&&typeof value=="object"}var objectProto=Object.prototype;var objToString=objectProto.toString;var MAX_SAFE_INTEGER=Math.pow(2,53)-1;function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}function isArguments(value){var length=isObjectLike(value)?value.length:undefined;return isLength(length)&&objToString.call(value)==argsTag}module.exports=isArguments},{}],9:[function(require,module,exports){(function(global){var funcTag="[object Function]";var reHostCtor=/^\[object .+?Constructor\]$/;var reRegExpChars=/[.*+?^${}()|[\]\/\\]/g,reHasRegExpChars=RegExp(reRegExpChars.source);function baseIsFunction(value){return typeof value=="function"||false}function baseToString(value){if(typeof value=="string"){return value}return value==null?"":value+""}function isObjectLike(value){return!!value&&typeof value=="object"}var objectProto=Object.prototype;var fnToString=Function.prototype.toString;var objToString=objectProto.toString;var reNative=RegExp("^"+escapeRegExp(objToString).replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Uint8Array=isNative(Uint8Array=global.Uint8Array)&&Uint8Array;var isFunction=!(baseIsFunction(/x/)||Uint8Array&&!baseIsFunction(Uint8Array))?baseIsFunction:function(value){return objToString.call(value)==funcTag};function isNative(value){if(value==null){return false}if(objToString.call(value)==funcTag){return reNative.test(fnToString.call(value))}return isObjectLike(value)&&reHostCtor.test(value)}function escapeRegExp(string){string=baseToString(string);return string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,"\\$&"):string}module.exports=isFunction}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],10:[function(require,module,exports){var stringTag="[object String]";function isObjectLike(value){return!!value&&typeof value=="object"}var objectProto=Object.prototype;var objToString=objectProto.toString;function isString(value){return typeof value=="string"||isObjectLike(value)&&objToString.call(value)==stringTag}module.exports=isString},{}],11:[function(require,module,exports){var isArguments=require("lodash.isarguments"),isArray=require("lodash.isarray"),isNative=require("lodash.isnative");var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;var propertyIsEnumerable=objectProto.propertyIsEnumerable;var nativeKeys=isNative(nativeKeys=Object.keys)&&nativeKeys;var MAX_SAFE_INTEGER=Math.pow(2,53)-1;var support={};(function(x){try{support.nonEnumArgs=!propertyIsEnumerable.call(arguments,1)}catch(e){support.nonEnumArgs=true}})(0,0);function isIndex(value,length){value=+value;length=length==null?MAX_SAFE_INTEGER:length;return value>-1&&value%1==0&&value<length}function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}function shimKeys(object){var props=keysIn(object),propsLength=props.length,length=propsLength&&object.length;var allowIndexes=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object));var index=-1,result=[];while(++index<propsLength){var key=props[index];if(allowIndexes&&isIndex(key,length)||hasOwnProperty.call(object,key)){result.push(key)}}return result}function isObject(value){var type=typeof value;return type=="function"||!!value&&type=="object"}var keys=!nativeKeys?shimKeys:function(object){if(object){var Ctor=object.constructor,length=object.length}if(typeof Ctor=="function"&&Ctor.prototype===object||typeof object!="function"&&(length&&isLength(length))){return shimKeys(object)}return isObject(object)?nativeKeys(object):[]};function keysIn(object){if(object==null){return[]}if(!isObject(object)){object=Object(object)}var length=object.length;length=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object))&&length||0;var Ctor=object.constructor,index=-1,isProto=typeof Ctor=="function"&&Ctor.prototype===object,result=Array(length),skipIndexes=length>0;while(++index<length){result[index]=index+""}for(var key in object){if(!(skipIndexes&&isIndex(key,length))&&!(key=="constructor"&&(isProto||!hasOwnProperty.call(object,key)))){result.push(key)}}return result}module.exports=keys},{"lodash.isarguments":12,"lodash.isarray":33,"lodash.isnative":13}],12:[function(require,module,exports){arguments[4][8][0].apply(exports,arguments)},{dup:8}],13:[function(require,module,exports){var funcTag="[object Function]";var reHostCtor=/^\[object .+?Constructor\]$/;var reRegExpChars=/[.*+?^${}()|[\]\/\\]/g,reHasRegExpChars=RegExp(reRegExpChars.source);function baseToString(value){if(typeof value=="string"){return value}return value==null?"":value+""}function isObjectLike(value){return!!value&&typeof value=="object"}var objectProto=Object.prototype;var fnToString=Function.prototype.toString;var objToString=objectProto.toString;var reNative=RegExp("^"+escapeRegExp(objToString).replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function isNative(value){if(value==null){return false}if(objToString.call(value)==funcTag){return reNative.test(fnToString.call(value))}return isObjectLike(value)&&reHostCtor.test(value)}function escapeRegExp(string){string=baseToString(string);return string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,"\\$&"):string}module.exports=isNative},{}],14:[function(require,module,exports){var before=require("lodash.before");function once(func){return before(func,2)}module.exports=once},{"lodash.before":15}],15:[function(require,module,exports){var FUNC_ERROR_TEXT="Expected a function";function before(n,func){var result;if(typeof func!="function"){if(typeof n=="function"){var temp=n;n=func;func=temp}else{throw new TypeError(FUNC_ERROR_TEXT)}}return function(){if(--n>0){result=func.apply(this,arguments)}else{func=null}return result}}module.exports=before},{}],16:[function(require,module,exports){var baseToString=require("lodash._basetostring");var idCounter=0;function uniqueId(prefix){var id=++idCounter;return baseToString(prefix)+id}module.exports=uniqueId},{"lodash._basetostring":17}],17:[function(require,module,exports){function baseToString(value){if(typeof value=="string"){return value}return value==null?"":value+""}module.exports=baseToString},{}],18:[function(require,module,exports){var baseAssign=require("lodash._baseassign"),createAssigner=require("lodash._createassigner");var assign=createAssigner(baseAssign);module.exports=assign},{"lodash._baseassign":19,"lodash._createassigner":24}],19:[function(require,module,exports){var baseCopy=require("lodash._basecopy"),keys=require("lodash.keys");function baseAssign(object,source,customizer){var props=keys(source);if(!customizer){return baseCopy(source,object,props)}var index=-1,length=props.length;while(++index<length){var key=props[index],value=object[key],result=customizer(value,source[key],key,object,source);if((result===result?result!==value:value===value)||typeof value=="undefined"&&!(key in object)){object[key]=result}}return object}module.exports=baseAssign},{"lodash._basecopy":20,"lodash.keys":21}],20:[function(require,module,exports){function baseCopy(source,object,props){if(!props){props=object;object={}}var index=-1,length=props.length;while(++index<length){var key=props[index];object[key]=source[key]}return object}module.exports=baseCopy},{}],21:[function(require,module,exports){arguments[4][11][0].apply(exports,arguments)},{dup:11,"lodash.isarguments":22,"lodash.isarray":33,"lodash.isnative":23}],22:[function(require,module,exports){arguments[4][8][0].apply(exports,arguments)},{dup:8}],23:[function(require,module,exports){arguments[4][13][0].apply(exports,arguments)},{dup:13}],24:[function(require,module,exports){var bindCallback=require("lodash._bindcallback"),isIterateeCall=require("lodash._isiterateecall");function createAssigner(assigner){return function(){var args=arguments,length=args.length,object=args[0];if(length<2||object==null){return object}var customizer=args[length-2],thisArg=args[length-1],guard=args[3];if(length>3&&typeof customizer=="function"){customizer=bindCallback(customizer,thisArg,5);length-=2}else{customizer=length>2&&typeof thisArg=="function"?thisArg:null;length-=customizer?1:0}if(guard&&isIterateeCall(args[1],args[2],guard)){customizer=length==3?null:customizer;length=2}var index=0;while(++index<length){var source=args[index];if(source){assigner(object,source,customizer)}}return object}}module.exports=createAssigner},{"lodash._bindcallback":25,"lodash._isiterateecall":26}],25:[function(require,module,exports){arguments[4][6][0].apply(exports,arguments)},{dup:6}],26:[function(require,module,exports){var MAX_SAFE_INTEGER=Math.pow(2,53)-1;function isIndex(value,length){value=+value;length=length==null?MAX_SAFE_INTEGER:length;return value>-1&&value%1==0&&value<length}function isIterateeCall(value,index,object){if(!isObject(object)){return false}var type=typeof index;if(type=="number"){var length=object.length,prereq=isLength(length)&&isIndex(index,length)}else{prereq=type=="string"&&index in object}if(prereq){var other=object[index];return value===value?value===other:other!==other}return false}function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}function isObject(value){var type=typeof value;return type=="function"||!!value&&type=="object"}module.exports=isIterateeCall},{}],27:[function(require,module,exports){var createWrapper=require("lodash._createwrapper"),replaceHolders=require("lodash._replaceholders"),restParam=require("lodash.restparam");var BIND_FLAG=1,PARTIAL_FLAG=32;var bind=restParam(function(func,thisArg,partials){var bitmask=BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,bind.placeholder);bitmask|=PARTIAL_FLAG}return createWrapper(func,bitmask,thisArg,partials,holders)});bind.placeholder={};module.exports=bind},{"lodash._createwrapper":28,"lodash._replaceholders":31,"lodash.restparam":32}],28:[function(require,module,exports){(function(global){var arrayCopy=require("lodash._arraycopy"),baseCreate=require("lodash._basecreate"),replaceHolders=require("lodash._replaceholders");var BIND_FLAG=1,BIND_KEY_FLAG=2,CURRY_BOUND_FLAG=4,CURRY_FLAG=8,CURRY_RIGHT_FLAG=16,PARTIAL_FLAG=32,PARTIAL_RIGHT_FLAG=64,ARY_FLAG=128;var FUNC_ERROR_TEXT="Expected a function";var nativeMax=Math.max,nativeMin=Math.min;var MAX_SAFE_INTEGER=Math.pow(2,53)-1;function composeArgs(args,partials,holders){var holdersLength=holders.length,argsIndex=-1,argsLength=nativeMax(args.length-holdersLength,0),leftIndex=-1,leftLength=partials.length,result=Array(argsLength+leftLength);while(++leftIndex<leftLength){result[leftIndex]=partials[leftIndex]}while(++argsIndex<holdersLength){result[holders[argsIndex]]=args[argsIndex]}while(argsLength--){result[leftIndex++]=args[argsIndex++]}return result}function composeArgsRight(args,partials,holders){var holdersIndex=-1,holdersLength=holders.length,argsIndex=-1,argsLength=nativeMax(args.length-holdersLength,0),rightIndex=-1,rightLength=partials.length,result=Array(argsLength+rightLength);while(++argsIndex<argsLength){result[argsIndex]=args[argsIndex]}var pad=argsIndex;while(++rightIndex<rightLength){result[pad+rightIndex]=partials[rightIndex]}while(++holdersIndex<holdersLength){result[pad+holders[holdersIndex]]=args[argsIndex++]}return result}function createBindWrapper(func,thisArg){var Ctor=createCtorWrapper(func);function wrapper(){var fn=this&&this!==global&&this instanceof wrapper?Ctor:func;return fn.apply(thisArg,arguments)}return wrapper}function createCtorWrapper(Ctor){return function(){var thisBinding=baseCreate(Ctor.prototype),result=Ctor.apply(thisBinding,arguments);return isObject(result)?result:thisBinding}}function createHybridWrapper(func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity){var isAry=bitmask&ARY_FLAG,isBind=bitmask&BIND_FLAG,isBindKey=bitmask&BIND_KEY_FLAG,isCurry=bitmask&CURRY_FLAG,isCurryBound=bitmask&CURRY_BOUND_FLAG,isCurryRight=bitmask&CURRY_RIGHT_FLAG;var Ctor=!isBindKey&&createCtorWrapper(func),key=func;function wrapper(){var length=arguments.length,index=length,args=Array(length);while(index--){args[index]=arguments[index]}if(partials){args=composeArgs(args,partials,holders)}if(partialsRight){args=composeArgsRight(args,partialsRight,holdersRight)}if(isCurry||isCurryRight){var placeholder=wrapper.placeholder,argsHolders=replaceHolders(args,placeholder);length-=argsHolders.length;if(length<arity){var newArgPos=argPos?arrayCopy(argPos):null,newArity=nativeMax(arity-length,0),newsHolders=isCurry?argsHolders:null,newHoldersRight=isCurry?null:argsHolders,newPartials=isCurry?args:null,newPartialsRight=isCurry?null:args;bitmask|=isCurry?PARTIAL_FLAG:PARTIAL_RIGHT_FLAG;bitmask&=~(isCurry?PARTIAL_RIGHT_FLAG:PARTIAL_FLAG);if(!isCurryBound){bitmask&=~(BIND_FLAG|BIND_KEY_FLAG)}var result=createHybridWrapper(func,bitmask,thisArg,newPartials,newsHolders,newPartialsRight,newHoldersRight,newArgPos,ary,newArity);result.placeholder=placeholder;return result}}var thisBinding=isBind?thisArg:this;if(isBindKey){func=thisBinding[key]}if(argPos){args=reorder(args,argPos)}if(isAry&&ary<args.length){args.length=ary}var fn=this&&this!==global&&this instanceof wrapper?Ctor||createCtorWrapper(func):func;return fn.apply(thisBinding,args)}return wrapper}function createPartialWrapper(func,bitmask,thisArg,partials){var isBind=bitmask&BIND_FLAG,Ctor=createCtorWrapper(func);function wrapper(){var argsIndex=-1,argsLength=arguments.length,leftIndex=-1,leftLength=partials.length,args=Array(argsLength+leftLength);while(++leftIndex<leftLength){args[leftIndex]=partials[leftIndex]}while(argsLength--){args[leftIndex++]=arguments[++argsIndex]}var fn=this&&this!==global&&this instanceof wrapper?Ctor:func;return fn.apply(isBind?thisArg:this,args)}return wrapper}function createWrapper(func,bitmask,thisArg,partials,holders,argPos,ary,arity){var isBindKey=bitmask&BIND_KEY_FLAG;if(!isBindKey&&typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}var length=partials?partials.length:0;if(!length){bitmask&=~(PARTIAL_FLAG|PARTIAL_RIGHT_FLAG);partials=holders=null}length-=holders?holders.length:0;if(bitmask&PARTIAL_RIGHT_FLAG){var partialsRight=partials,holdersRight=holders;partials=holders=null}var newData=[func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity];newData[9]=arity==null?isBindKey?0:func.length:nativeMax(arity-length,0)||0;if(bitmask==BIND_FLAG){var result=createBindWrapper(newData[0],newData[2])}else if((bitmask==PARTIAL_FLAG||bitmask==(BIND_FLAG|PARTIAL_FLAG))&&!newData[4].length){result=createPartialWrapper.apply(undefined,newData)}else{result=createHybridWrapper.apply(undefined,newData)}return result}function isIndex(value,length){value=+value;length=length==null?MAX_SAFE_INTEGER:length;return value>-1&&value%1==0&&value<length}function reorder(array,indexes){var arrLength=array.length,length=nativeMin(indexes.length,arrLength),oldArray=arrayCopy(array);while(length--){var index=indexes[length];array[length]=isIndex(index,arrLength)?oldArray[index]:undefined}return array}function isObject(value){var type=typeof value;return type=="function"||!!value&&type=="object"}module.exports=createWrapper}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"lodash._arraycopy":29,"lodash._basecreate":30,"lodash._replaceholders":31}],29:[function(require,module,exports){function arrayCopy(source,array){var index=-1,length=source.length;array||(array=Array(length));while(++index<length){array[index]=source[index]}return array}module.exports=arrayCopy},{}],30:[function(require,module,exports){(function(global){var baseCreate=function(){function Object(){}return function(prototype){if(isObject(prototype)){Object.prototype=prototype;var result=new Object;Object.prototype=null}return result||global.Object()}}();function isObject(value){var type=typeof value;return type=="function"||!!value&&type=="object"}module.exports=baseCreate}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],31:[function(require,module,exports){var PLACEHOLDER="__lodash_placeholder__";function replaceHolders(array,placeholder){var index=-1,length=array.length,resIndex=-1,result=[];while(++index<length){if(array[index]===placeholder){array[index]=PLACEHOLDER;result[++resIndex]=index}}return result}module.exports=replaceHolders},{}],32:[function(require,module,exports){var FUNC_ERROR_TEXT="Expected a function";var nativeMax=Math.max;function restParam(func,start){if(typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}start=nativeMax(typeof start=="undefined"?func.length-1:+start||0,0);return function(){var args=arguments,index=-1,length=nativeMax(args.length-start,0),rest=Array(length);while(++index<length){rest[index]=args[start+index]}switch(start){case 0:return func.call(this,rest);case 1:return func.call(this,args[0],rest);case 2:return func.call(this,args[0],args[1],rest)}var otherArgs=Array(start+1);index=-1;while(++index<start){otherArgs[index]=args[index]}otherArgs[start]=rest;return func.apply(this,otherArgs)}}module.exports=restParam},{}],33:[function(require,module,exports){var arrayTag="[object Array]",funcTag="[object Function]";var reHostCtor=/^\[object .+?Constructor\]$/;var reRegExpChars=/[.*+?^${}()|[\]\/\\]/g,reHasRegExpChars=RegExp(reRegExpChars.source);function baseToString(value){if(typeof value=="string"){return value}return value==null?"":value+""}function isObjectLike(value){return!!value&&typeof value=="object"}var objectProto=Object.prototype;var fnToString=Function.prototype.toString;var objToString=objectProto.toString;var reNative=RegExp("^"+escapeRegExp(objToString).replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var nativeIsArray=isNative(nativeIsArray=Array.isArray)&&nativeIsArray;var MAX_SAFE_INTEGER=Math.pow(2,53)-1;function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}var isArray=nativeIsArray||function(value){return isObjectLike(value)&&isLength(value.length)&&objToString.call(value)==arrayTag};function isNative(value){if(value==null){return false}if(objToString.call(value)==funcTag){return reNative.test(fnToString.call(value))}return isObjectLike(value)&&reHostCtor.test(value)}function escapeRegExp(string){string=baseToString(string);return string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,"\\$&"):string}module.exports=isArray},{}],"ampersand-collection":[function(require,module,exports){var AmpersandEvents=require("ampersand-events");var classExtend=require("ampersand-class-extend");var isArray=require("lodash.isarray");var bind=require("lodash.bind");var assign=require("lodash.assign");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;if(!this.mainIndex){var idAttribute=this.model&&this.model.prototype&&this.model.prototype.idAttribute;this.mainIndex=idAttribute||"id"}this._reset();this.initialize.apply(this,arguments);if(models)this.reset(models,assign({silent:true},options))}assign(Collection.prototype,AmpersandEvents,{initialize:function(){},isModel:function(model){return this.model&&model instanceof this.model},add:function(models,options){return this.set(models,assign({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={};assign(out,model);delete out.collection;return out}})},toJSON:function(){return this.serialize()},set:function(models,options){options=assign({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[this.mainIndex]}if(existing=this.get(id)){if(remove)modelMap[existing.cid||existing[this.mainIndex]]=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{assign(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[this.mainIndex]||!modelMap[model.cid||model[this.mainIndex]]))order.push(model);modelMap[model[this.mainIndex]]=true}if(remove){for(i=0,length=this.length;i<length;i++){model=this.models[i];if(!modelMap[model.cid||model[this.mainIndex]])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==null)return;var index=this._indexes[indexName||this.mainIndex];return index&&(index[query]||index[query[this.mainIndex]])||this._indexes.cid[query]||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,assign({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(bind(this.comparator,this))}if(!options.silent)this.trigger("sort",this,options);return this},_reset:function(){var list=slice.call(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)){if(!attrs.collection)attrs.collection=this;return attrs}else{options=options?assign({},options):{};options.collection=this;var model=new this.model(attrs,options);if(!model.validationError)return model;this.trigger("invalid",this,model.validationError,options);return false}},_deIndex:function(model,attribute,value){var indexVal;if(attribute!==undefined){if(undefined===this._indexes[attribute])throw new Error("Given attribute is not an index");delete this._indexes[attribute][value];return}for(attribute in this._indexes){indexVal=model.hasOwnProperty(attribute)?model[attribute]:model.get&&model.get(attribute);delete this._indexes[attribute][indexVal]}},_index:function(model,attribute){var indexVal;if(attribute!==undefined){if(undefined===this._indexes[attribute])throw new Error("Given attribute is not an index");indexVal=model[attribute]||model.get&&model.get(attribute);if(indexVal)this._indexes[attribute][indexVal]=model;return}for(attribute in this._indexes){indexVal=model.hasOwnProperty(attribute)?model[attribute]:model.get&&model.get(attribute);if(indexVal!=null)this._indexes[attribute][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){var eventName=event.split(":")[0];var attribute=event.split(":")[1];if((eventName==="add"||eventName==="remove")&&collection!==this)return;if(eventName==="destroy")this.remove(model,options);if(model&&eventName==="change"&&attribute&&this._indexes[attribute]){this._deIndex(model,attribute,model.previousAttributes()[attribute]);this._index(model,attribute)}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":1,"ampersand-events":2,"lodash.assign":18,"lodash.bind":27,"lodash.isarray":33}]},{},[]);"use strict";var Collection=require("ampersand-collection");var parentCollection=new Collection;var childColl1=new Collection;childColl1.set([{id:1},{id:2}]);var childColl2=new Collection;childColl2.set([{id:1},{id:2}]);parentCollection.set([childColl1,childColl2]);console.log("parent coll length: "+parentCollection.length);console.log("parent collection's first child is childColl1: "+(parentCollection.models[0]===childColl1));for(var m in parentCollection.models){if(parentCollection.models.hasOwnProperty(m)){console.dir(parentCollection.models[m])}}var BottomCollection=Collection.extend({isBottomCollection:true});var b1=new BottomCollection;b1.set([{b:1},{b:2}]);var b2=new BottomCollection;b2.set([{b:3},{b:4}]);console.dir("is b1 a bottom collection [method1]?: "+(b1.isBottomCollection===true));console.dir("is b1 a bottom collection [method2]?: "+(b1 instanceof BottomCollection));var TopCollection=Collection.extend({model:BottomCollection,isModel:function(model){if(model instanceof BottomCollection)return true;throw new TypeError("bogus BottomCollection!")}});var t1=new TopCollection([b1]);console.log("parent coll length === 1: "+(parentCollection.length===1));try{t1.add({notAbottomCollection:0})}catch(err){console.log("ah ha! model added was not a Bottom Collection")}t1.add(b2);t1.forEach(function(childColl,ndx){console.log("t1's collection at index "+ndx+" has the following models:");console.dir(childColl.models)});
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"ampersand-collection": "1.4.5"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment