made with requirebin
Last active
January 12, 2017 09:58
-
-
Save kamicane/329faf2048f9e9528133 to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
an old test on 3d projections of vertices onto the screen |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
var $ = require("elements"); | |
var ready = require("elements/domready"); | |
var Matrix3d = require("matrix3d"); | |
var Transform3d = require("transform3d"); | |
var Vector3 = require("matrix3d/lib/Vector3"); | |
var Vector4 = require("matrix3d/lib/Vector4"); | |
var SCENE_WIDTH = window.innerWidth; | |
var SCENE_HEIGHT = window.innerHeight; | |
var PERSPECTIVE = 800; | |
var PERSPECTIVE_ORIGIN = new Vector3(SCENE_WIDTH / 2, SCENE_HEIGHT / 2, 0); | |
var OBJECT_WIDTH = 100; | |
var OBJECT_HEIGHT = 100; | |
var TRANSFORM_ORIGIN = new Vector3(OBJECT_WIDTH / 2, OBJECT_HEIGHT / 2, 0); | |
var TRANSFORMATION = new Transform3d().translateX(500).translateY(300).translateZ(400).rotateY(40).compose(); | |
var translationMatrix1 = new Matrix3d() | |
.translate(new Vector3(PERSPECTIVE_ORIGIN.x - TRANSFORM_ORIGIN.x, PERSPECTIVE_ORIGIN.y - TRANSFORM_ORIGIN.y, PERSPECTIVE_ORIGIN.z - TRANSFORM_ORIGIN.z)); | |
var perspectiveMatrix = new Matrix3d(); | |
perspectiveMatrix.m34 = -1 / PERSPECTIVE; | |
var translationMatrix2 = new Matrix3d() | |
.translate(new Vector3(-(PERSPECTIVE_ORIGIN.x - TRANSFORM_ORIGIN.x), -(PERSPECTIVE_ORIGIN.y - TRANSFORM_ORIGIN.y), -(PERSPECTIVE_ORIGIN.z - TRANSFORM_ORIGIN.z))); | |
perspectiveMatrix = translationMatrix1.concat(perspectiveMatrix).concat(translationMatrix2); | |
var COMPUTED_PERSPECTIVE_TRANSFORMATION = perspectiveMatrix.concat(TRANSFORMATION); | |
// VERTEX CALCULATION | |
var vertices = [ | |
new Vector4(0, 0, 0, 1), | |
new Vector4(OBJECT_WIDTH, OBJECT_HEIGHT, 0, 1), | |
new Vector4(OBJECT_WIDTH, 0, 0, 1), | |
new Vector4(0, OBJECT_HEIGHT, 0, 1), | |
new Vector4(OBJECT_WIDTH / 2, OBJECT_HEIGHT / 2, 0, 1) // CENTER | |
]; | |
var pre = new Matrix3d().translate(new Vector3(TRANSFORM_ORIGIN.x, TRANSFORM_ORIGIN.y, TRANSFORM_ORIGIN.z)); | |
var post = new Matrix3d().translate(new Vector3(-TRANSFORM_ORIGIN.x, -TRANSFORM_ORIGIN.y, -TRANSFORM_ORIGIN.z)); | |
var FULL = pre.concat(COMPUTED_PERSPECTIVE_TRANSFORMATION).concat(post); | |
var transformedVertices = vertices.map(function(vertex) { | |
return FULL.map(vertex); | |
}); | |
var PROJECTED_VERTICES = transformedVertices.map(function(vertex) { | |
return new Vector3(vertex.x / vertex.w, vertex.y / vertex.w, vertex.z / vertex.w); | |
}); | |
ready(function() { | |
// set all the styles | |
var perspectiveNode = $("#perspective"); | |
perspectiveNode[0].style.perspective = PERSPECTIVE + "px"; | |
perspectiveNode[0].style.perspectiveOrigin = PERSPECTIVE_ORIGIN.x + "px " + PERSPECTIVE_ORIGIN.y + "px " + PERSPECTIVE_ORIGIN.z + "px"; | |
perspectiveNode[0].style.transformStyle = "preserve-3d"; | |
perspectiveNode[0].style.width = SCENE_WIDTH + "px"; | |
perspectiveNode[0].style.height = SCENE_HEIGHT + "px"; | |
var flatNode = $("#flat"); | |
flatNode[0].style.width = SCENE_WIDTH + "px"; | |
flatNode[0].style.height = SCENE_HEIGHT + "px"; | |
var perspectiveSquare = $("#perspective .square"); | |
perspectiveSquare[0].style.height = OBJECT_HEIGHT + "px"; | |
perspectiveSquare[0].style.width = OBJECT_WIDTH + "px"; | |
perspectiveSquare[0].style.transformOrigin = TRANSFORM_ORIGIN.x + "px " + TRANSFORM_ORIGIN.y + "px " + TRANSFORM_ORIGIN.z + "px"; | |
var flatSquare = $("#flat .square"); | |
flatSquare[0].style.height = OBJECT_HEIGHT + "px"; | |
flatSquare[0].style.width = OBJECT_WIDTH + "px"; | |
flatSquare[0].style.transformOrigin = TRANSFORM_ORIGIN.x + "px " + TRANSFORM_ORIGIN.y + "px " + TRANSFORM_ORIGIN.z + "px"; | |
// set the transforms, they should look the same now. | |
perspectiveSquare[0].style.transform = TRANSFORMATION; | |
flatSquare[0].style.transform = COMPUTED_PERSPECTIVE_TRANSFORMATION; | |
// render vertices | |
var canvas = $("#vertices")[0]; | |
canvas.width = SCENE_WIDTH; | |
canvas.height = SCENE_HEIGHT; | |
var ctx = canvas.getContext("2d"); | |
PROJECTED_VERTICES.forEach(function(v, i) { | |
if (i !== 4) { | |
ctx.beginPath(); | |
ctx.arc(v.x, v.y, 3, 0, Math.PI * 2); | |
ctx.closePath(); | |
ctx.fill(); | |
} else { | |
ctx.beginPath(); | |
ctx.moveTo(v.x - 10, v.y - 10); | |
ctx.lineTo(v.x + 10, v.y + 10); | |
ctx.moveTo(v.x + 10, v.y - 10); | |
ctx.lineTo(v.x - 10, v.y + 10); | |
ctx.closePath(); | |
ctx.stroke(); | |
} | |
}); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canMutationObserver=typeof window!=="undefined"&&window.MutationObserver;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}var queue=[];if(canMutationObserver){var hiddenDiv=document.createElement("div");var observer=new MutationObserver(function(){var queueList=queue.slice();queue.length=0;queueList.forEach(function(fn){fn()})});observer.observe(hiddenDiv,{attributes:true});return function nextTick(fn){if(!queue.length){hiddenDiv.setAttribute("yes","no")}queue.push(fn)}}if(canPost){window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],2:[function(require,module,exports){"use strict";var $=require("./base");var trim=require("mout/string/trim"),forEach=require("mout/array/forEach"),filter=require("mout/array/filter"),indexOf=require("mout/array/indexOf");$.implement({setAttribute:function(name,value){return this.forEach(function(node){node.setAttribute(name,value)})},getAttribute:function(name){var attr=this[0].getAttributeNode(name);return attr&&attr.specified?attr.value:null},hasAttribute:function(name){var node=this[0];if(node.hasAttribute)return node.hasAttribute(name);var attr=node.getAttributeNode(name);return!!(attr&&attr.specified)},removeAttribute:function(name){return this.forEach(function(node){var attr=node.getAttributeNode(name);if(attr)node.removeAttributeNode(attr)})}});var accessors={};forEach(["type","value","name","href","title","id"],function(name){accessors[name]=function(value){return value!==undefined?this.forEach(function(node){node[name]=value}):this[0][name]}});forEach(["checked","disabled","selected"],function(name){accessors[name]=function(value){return value!==undefined?this.forEach(function(node){node[name]=!!value}):!!this[0][name]}});var classes=function(className){var classNames=trim(className).replace(/\s+/g," ").split(" "),uniques={};return filter(classNames,function(className){if(className!==""&&!uniques[className])return uniques[className]=className}).sort()};accessors.className=function(className){return className!==undefined?this.forEach(function(node){node.className=classes(className).join(" ")}):classes(this[0].className).join(" ")};$.implement({attribute:function(name,value){var accessor=accessors[name];if(accessor)return accessor.call(this,value);if(value!=null)return this.setAttribute(name,value);if(value===null)return this.removeAttribute(name);if(value===undefined)return this.getAttribute(name)}});$.implement(accessors);$.implement({check:function(){return this.checked(true)},uncheck:function(){return this.checked(false)},disable:function(){return this.disabled(true)},enable:function(){return this.disabled(false)},select:function(){return this.selected(true)},deselect:function(){return this.selected(false)}});$.implement({classNames:function(){return classes(this[0].className)},hasClass:function(className){return indexOf(this.classNames(),className)>-1},addClass:function(className){return this.forEach(function(node){var nodeClassName=node.className;var classNames=classes(nodeClassName+" "+className).join(" ");if(nodeClassName!==classNames)node.className=classNames})},removeClass:function(className){return this.forEach(function(node){var classNames=classes(node.className);forEach(classes(className),function(className){var index=indexOf(classNames,className);if(index>-1)classNames.splice(index,1)});node.className=classNames.join(" ")})},toggleClass:function(className,force){var add=force!==undefined?force:!this.hasClass(className);if(add)this.addClass(className);else this.removeClass(className);return!!add}});$.prototype.toString=function(){var tag=this.tag(),id=this.id(),classes=this.classNames();var str=tag;if(id)str+="#"+id;if(classes.length)str+="."+classes.join(".");return str};var textProperty=document.createElement("div").textContent==null?"innerText":"textContent";$.implement({tag:function(){return this[0].tagName.toLowerCase()},html:function(html){return html!==undefined?this.forEach(function(node){node.innerHTML=html}):this[0].innerHTML},text:function(text){return text!==undefined?this.forEach(function(node){node[textProperty]=text}):this[0][textProperty]},data:function(key,value){switch(value){case undefined:return this.getAttribute("data-"+key);case null:return this.removeAttribute("data-"+key);default:return this.setAttribute("data-"+key,value)}}});module.exports=$},{"./base":3,"mout/array/filter":8,"mout/array/forEach":9,"mout/array/indexOf":10,"mout/string/trim":29}],3:[function(require,module,exports){"use strict";var prime=require("prime");var forEach=require("mout/array/forEach"),map=require("mout/array/map"),filter=require("mout/array/filter"),every=require("mout/array/every"),some=require("mout/array/some");var index=0,__dc=document.__counter,counter=document.__counter=(__dc?parseInt(__dc,36)+1:0).toString(36),key="uid:"+counter;var uniqueID=function(n){if(n===window)return"window";if(n===document)return"document";if(n===document.documentElement)return"html";return n[key]||(n[key]=(index++).toString(36))};var instances={};var $=prime({constructor:function $(n,context){if(n==null)return this&&this.constructor===$?new Elements:null;var self,uid;if(n.constructor!==Elements){self=new Elements;if(typeof n==="string"){if(!self.search)return null;self[self.length++]=context||document;return self.search(n)}if(n.nodeType||n===window){self[self.length++]=n}else if(n.length){var uniques={};for(var i=0,l=n.length;i<l;i++){var nodes=$(n[i],context);if(nodes&&nodes.length)for(var j=0,k=nodes.length;j<k;j++){var node=nodes[j];uid=uniqueID(node);if(!uniques[uid]){self[self.length++]=node;uniques[uid]=true}}}}}else{self=n}if(!self.length)return null;if(self.length===1){uid=uniqueID(self[0]);return instances[uid]||(instances[uid]=self)}return self}});var Elements=prime({inherits:$,constructor:function Elements(){this.length=0},unlink:function(){return this.map(function(node){delete instances[uniqueID(node)];return node})},forEach:function(method,context){forEach(this,method,context);return this},map:function(method,context){return map(this,method,context)},filter:function(method,context){return filter(this,method,context)},every:function(method,context){return every(this,method,context)},some:function(method,context){return some(this,method,context)}});module.exports=$},{"mout/array/every":7,"mout/array/filter":8,"mout/array/forEach":9,"mout/array/map":11,"mout/array/some":12,prime:33}],4:[function(require,module,exports){"use strict";var Map=require("prime/map");var $=require("./events");require("./traversal");$.implement({delegate:function(event,selector,handle){return this.forEach(function(node){var self=$(node);var delegation=self._delegation||(self._delegation={}),events=delegation[event]||(delegation[event]={}),map=events[selector]||(events[selector]=new Map);if(map.get(handle))return;var action=function(e){var target=$(e.target||e.srcElement),match=target.matches(selector)?target:target.parent(selector);var res;if(match)res=handle.call(self,e,match);return res};map.set(handle,action);self.on(event,action)})},undelegate:function(event,selector,handle){return this.forEach(function(node){var self=$(node),delegation,events,map;if(!(delegation=self._delegation)||!(events=delegation[event])||!(map=events[selector]))return;var action=map.get(handle);if(action){self.off(event,action);map.remove(action);if(!map.count())delete events[selector];var e1=true,e2=true,x;for(x in events){e1=false;break}if(e1)delete delegation[event];for(x in delegation){e2=false;break}if(e2)delete self._delegation}})}});module.exports=$},{"./events":5,"./traversal":38,"prime/map":34}],5:[function(require,module,exports){"use strict";var Emitter=require("prime/emitter");var $=require("./base");var html=document.documentElement;var addEventListener=html.addEventListener?function(node,event,handle,useCapture){node.addEventListener(event,handle,useCapture||false);return handle}:function(node,event,handle){node.attachEvent("on"+event,handle);return handle};var removeEventListener=html.removeEventListener?function(node,event,handle,useCapture){node.removeEventListener(event,handle,useCapture||false)}:function(node,event,handle){node.detachEvent("on"+event,handle)};$.implement({on:function(event,handle,useCapture){return this.forEach(function(node){var self=$(node);var internalEvent=event+(useCapture?":capture":"");Emitter.prototype.on.call(self,internalEvent,handle);var domListeners=self._domListeners||(self._domListeners={});if(!domListeners[internalEvent])domListeners[internalEvent]=addEventListener(node,event,function(e){Emitter.prototype.emit.call(self,internalEvent,e||window.event,Emitter.EMIT_SYNC)},useCapture)})},off:function(event,handle,useCapture){return this.forEach(function(node){var self=$(node);var internalEvent=event+(useCapture?":capture":"");var domListeners=self._domListeners,domEvent,listeners=self._listeners,events;if(domListeners&&(domEvent=domListeners[internalEvent])&&listeners&&(events=listeners[internalEvent])){Emitter.prototype.off.call(self,internalEvent,handle);if(!self._listeners||!self._listeners[event]){removeEventListener(node,event,domEvent);delete domListeners[event];for(var l in domListeners)return;delete self._domListeners}}})},emit:function(){var args=arguments;return this.forEach(function(node){Emitter.prototype.emit.apply($(node),args)})}});module.exports=$},{"./base":3,"prime/emitter":32}],6:[function(require,module,exports){"use strict";var $=require("./base");$.implement({appendChild:function(child){this[0].appendChild($(child)[0]);return this},insertBefore:function(child,ref){this[0].insertBefore($(child)[0],$(ref)[0]);return this},removeChild:function(child){this[0].removeChild($(child)[0]);return this},replaceChild:function(child,ref){this[0].replaceChild($(child)[0],$(ref)[0]);return this}});$.implement({before:function(element){element=$(element)[0];var parent=element.parentNode;if(parent)this.forEach(function(node){parent.insertBefore(node,element)});return this},after:function(element){element=$(element)[0];var parent=element.parentNode;if(parent)this.forEach(function(node){parent.insertBefore(node,element.nextSibling)});return this},bottom:function(element){element=$(element)[0];return this.forEach(function(node){element.appendChild(node)})},top:function(element){element=$(element)[0];return this.forEach(function(node){element.insertBefore(node,element.firstChild)})}});$.implement({insert:$.prototype.bottom,remove:function(){return this.forEach(function(node){var parent=node.parentNode;if(parent)parent.removeChild(node)})},replace:function(element){element=$(element)[0];element.parentNode.replaceChild(this[0],element);return this}});module.exports=$},{"./base":3}],7:[function(require,module,exports){var makeIterator=require("../function/makeIterator_");function every(arr,callback,thisObj){callback=makeIterator(callback,thisObj);var result=true;if(arr==null){return result}var i=-1,len=arr.length;while(++i<len){if(!callback(arr[i],i,arr)){result=false;break}}return result}module.exports=every},{"../function/makeIterator_":14}],8:[function(require,module,exports){var makeIterator=require("../function/makeIterator_");function filter(arr,callback,thisObj){callback=makeIterator(callback,thisObj);var results=[];if(arr==null){return results}var i=-1,len=arr.length,value;while(++i<len){value=arr[i];if(callback(value,i,arr)){results.push(value)}}return results}module.exports=filter},{"../function/makeIterator_":14}],9:[function(require,module,exports){function forEach(arr,callback,thisObj){if(arr==null){return}var i=-1,len=arr.length;while(++i<len){if(callback.call(thisObj,arr[i],i,arr)===false){break}}}module.exports=forEach},{}],10:[function(require,module,exports){function indexOf(arr,item,fromIndex){fromIndex=fromIndex||0;if(arr==null){return-1}var len=arr.length,i=fromIndex<0?len+fromIndex:fromIndex;while(i<len){if(arr[i]===item){return i}i++}return-1}module.exports=indexOf},{}],11:[function(require,module,exports){var makeIterator=require("../function/makeIterator_");function map(arr,callback,thisObj){callback=makeIterator(callback,thisObj);var results=[];if(arr==null){return results}var i=-1,len=arr.length;while(++i<len){results[i]=callback(arr[i],i,arr)}return results}module.exports=map},{"../function/makeIterator_":14}],12:[function(require,module,exports){var makeIterator=require("../function/makeIterator_");function some(arr,callback,thisObj){callback=makeIterator(callback,thisObj);var result=false;if(arr==null){return result}var i=-1,len=arr.length;while(++i<len){if(callback(arr[i],i,arr)){result=true;break}}return result}module.exports=some},{"../function/makeIterator_":14}],13:[function(require,module,exports){function identity(val){return val}module.exports=identity},{}],14:[function(require,module,exports){var identity=require("./identity");var prop=require("./prop");var deepMatches=require("../object/deepMatches");function makeIterator(src,thisObj){if(src==null){return identity}switch(typeof src){case"function":return typeof thisObj!=="undefined"?function(val,i,arr){return src.call(thisObj,val,i,arr)}:src;case"object":return function(val){return deepMatches(val,src)};case"string":case"number":return prop(src)}}module.exports=makeIterator},{"../object/deepMatches":21,"./identity":13,"./prop":15}],15:[function(require,module,exports){function prop(name){return function(obj){return obj[name]}}module.exports=prop},{}],16:[function(require,module,exports){var mixIn=require("../object/mixIn");function createObject(parent,props){function F(){}F.prototype=parent;return mixIn(new F,props)}module.exports=createObject},{"../object/mixIn":25}],17:[function(require,module,exports){var isKind=require("./isKind");var isArray=Array.isArray||function(val){return isKind(val,"Array")};module.exports=isArray},{"./isKind":18}],18:[function(require,module,exports){var kindOf=require("./kindOf");function isKind(val,kind){return kindOf(val)===kind}module.exports=isKind},{"./kindOf":19}],19:[function(require,module,exports){var _rKind=/^\[object (.*)\]$/,_toString=Object.prototype.toString,UNDEF;function kindOf(val){if(val===null){return"Null"}else if(val===UNDEF){return"Undefined"}else{return _rKind.exec(_toString.call(val))[1]}}module.exports=kindOf},{}],20:[function(require,module,exports){function toString(val){return val==null?"":val.toString()}module.exports=toString},{}],21:[function(require,module,exports){var forOwn=require("./forOwn");var isArray=require("../lang/isArray");function containsMatch(array,pattern){var i=-1,length=array.length;while(++i<length){if(deepMatches(array[i],pattern)){return true}}return false}function matchArray(target,pattern){var i=-1,patternLength=pattern.length;while(++i<patternLength){if(!containsMatch(target,pattern[i])){return false}}return true}function matchObject(target,pattern){var result=true;forOwn(pattern,function(val,key){if(!deepMatches(target[key],val)){return result=false}});return result}function deepMatches(target,pattern){if(target&&typeof target==="object"){if(isArray(target)&&isArray(pattern)){return matchArray(target,pattern)}else{return matchObject(target,pattern)}}else{return target===pattern}}module.exports=deepMatches},{"../lang/isArray":17,"./forOwn":23}],22:[function(require,module,exports){var hasOwn=require("./hasOwn");var _hasDontEnumBug,_dontEnums;function checkDontEnum(){_dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];_hasDontEnumBug=true;for(var key in{toString:null}){_hasDontEnumBug=false}}function forIn(obj,fn,thisObj){var key,i=0;if(_hasDontEnumBug==null)checkDontEnum();for(key in obj){if(exec(fn,obj,key,thisObj)===false){break}}if(_hasDontEnumBug){var ctor=obj.constructor,isProto=!!ctor&&obj===ctor.prototype;while(key=_dontEnums[i++]){if((key!=="constructor"||!isProto&&hasOwn(obj,key))&&obj[key]!==Object.prototype[key]){if(exec(fn,obj,key,thisObj)===false){break}}}}}function exec(fn,obj,key,thisObj){return fn.call(thisObj,obj[key],key,obj)}module.exports=forIn},{"./hasOwn":24}],23:[function(require,module,exports){var hasOwn=require("./hasOwn");var forIn=require("./forIn");function forOwn(obj,fn,thisObj){forIn(obj,function(val,key){if(hasOwn(obj,key)){return fn.call(thisObj,obj[key],key,obj)}})}module.exports=forOwn},{"./forIn":22,"./hasOwn":24}],24:[function(require,module,exports){function hasOwn(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=hasOwn},{}],25:[function(require,module,exports){var forOwn=require("./forOwn");function mixIn(target,objects){var i=0,n=arguments.length,obj;while(++i<n){obj=arguments[i];if(obj!=null){forOwn(obj,copyProp,target)}}return target}function copyProp(val,key){this[key]=val}module.exports=mixIn},{"./forOwn":23}],26:[function(require,module,exports){module.exports=[" ","\n","\r"," ","\f",""," "," ",""," "," "," "," "," "," "," "," "," "," "," ","\u2028","\u2029"," "," "," "]},{}],27:[function(require,module,exports){var toString=require("../lang/toString");var WHITE_SPACES=require("./WHITE_SPACES");function ltrim(str,chars){str=toString(str);chars=chars||WHITE_SPACES;var start=0,len=str.length,charLen=chars.length,found=true,i,c;while(found&&start<len){found=false;i=-1;c=str.charAt(start);while(++i<charLen){if(c===chars[i]){found=true;start++;break}}}return start>=len?"":str.substr(start,len)}module.exports=ltrim},{"../lang/toString":20,"./WHITE_SPACES":26}],28:[function(require,module,exports){var toString=require("../lang/toString");var WHITE_SPACES=require("./WHITE_SPACES");function rtrim(str,chars){str=toString(str);chars=chars||WHITE_SPACES;var end=str.length-1,charLen=chars.length,found=true,i,c;while(found&&end>=0){found=false;i=-1;c=str.charAt(end);while(++i<charLen){if(c===chars[i]){found=true;end--;break}}}return end>=0?str.substring(0,end+1):""}module.exports=rtrim},{"../lang/toString":20,"./WHITE_SPACES":26}],29:[function(require,module,exports){var toString=require("../lang/toString");var WHITE_SPACES=require("./WHITE_SPACES");var ltrim=require("./ltrim");var rtrim=require("./rtrim");function trim(str,chars){str=toString(str);chars=chars||WHITE_SPACES;return ltrim(rtrim(str,chars),chars)}module.exports=trim},{"../lang/toString":20,"./WHITE_SPACES":26,"./ltrim":27,"./rtrim":28}],30:[function(require,module,exports){function now(){return now.get()}now.get=typeof Date.now==="function"?Date.now:function(){return+new Date};module.exports=now},{}],31:[function(require,module,exports){(function(process,global){"use strict";var kindOf=require("mout/lang/kindOf"),now=require("mout/time/now"),forEach=require("mout/array/forEach"),indexOf=require("mout/array/indexOf");var callbacks={timeout:{},frame:[],immediate:[]};var push=function(collection,callback,context,defer){var iterator=function(){iterate(collection)};if(!collection.length)defer(iterator);var entry={callback:callback,context:context};collection.push(entry);return function(){var io=indexOf(collection,entry);if(io>-1)collection.splice(io,1)}};var iterate=function(collection){var time=now();forEach(collection.splice(0),function(entry){entry.callback.call(entry.context,time)})};var defer=function(callback,argument,context){return kindOf(argument)==="Number"?defer.timeout(callback,argument,context):defer.immediate(callback,argument)};if(global.process&&process.nextTick){defer.immediate=function(callback,context){return push(callbacks.immediate,callback,context,process.nextTick)}}else if(global.setImmediate){defer.immediate=function(callback,context){return push(callbacks.immediate,callback,context,setImmediate)}}else if(global.postMessage&&global.addEventListener){addEventListener("message",function(event){if(event.source===global&&event.data==="@deferred"){event.stopPropagation();iterate(callbacks.immediate)}},true);defer.immediate=function(callback,context){return push(callbacks.immediate,callback,context,function(){postMessage("@deferred","*")})}}else{defer.immediate=function(callback,context){return push(callbacks.immediate,callback,context,function(iterator){setTimeout(iterator,0)})}}var requestAnimationFrame=global.requestAnimationFrame||global.webkitRequestAnimationFrame||global.mozRequestAnimationFrame||global.oRequestAnimationFrame||global.msRequestAnimationFrame||function(callback){setTimeout(callback,1e3/60)};defer.frame=function(callback,context){return push(callbacks.frame,callback,context,requestAnimationFrame)};var clear;defer.timeout=function(callback,ms,context){var ct=callbacks.timeout;if(!clear)clear=defer.immediate(function(){clear=null;callbacks.timeout={}});return push(ct[ms]||(ct[ms]=[]),callback,context,function(iterator){setTimeout(iterator,ms)})};module.exports=defer}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{_process:1,"mout/array/forEach":9,"mout/array/indexOf":10,"mout/lang/kindOf":19,"mout/time/now":30}],32:[function(require,module,exports){"use strict";var indexOf=require("mout/array/indexOf"),forEach=require("mout/array/forEach");var prime=require("./index"),defer=require("./defer");var slice=Array.prototype.slice;var Emitter=prime({on:function(event,fn){var listeners=this._listeners||(this._listeners={}),events=listeners[event]||(listeners[event]=[]);if(indexOf(events,fn)===-1)events.push(fn);return this},off:function(event,fn){var listeners=this._listeners,events,key,length=0;if(listeners&&(events=listeners[event])){var io=indexOf(events,fn);if(io>-1)events.splice(io,1);if(!events.length)delete listeners[event];for(var l in listeners)return this;delete this._listeners}return this},emit:function(event){var self=this,args=slice.call(arguments,1);var emit=function(){var listeners=self._listeners,events;if(listeners&&(events=listeners[event])){forEach(events.slice(0),function(event){return event.apply(self,args)})}};if(args[args.length-1]===Emitter.EMIT_SYNC){args.pop();emit()}else{defer(emit)}return this}});Emitter.EMIT_SYNC={};module.exports=Emitter},{"./defer":31,"./index":33,"mout/array/forEach":9,"mout/array/indexOf":10}],33:[function(require,module,exports){"use strict";var hasOwn=require("mout/object/hasOwn"),mixIn=require("mout/object/mixIn"),create=require("mout/lang/createObject"),kindOf=require("mout/lang/kindOf");var hasDescriptors=true;try{Object.defineProperty({},"~",{});Object.getOwnPropertyDescriptor({},"~")}catch(e){hasDescriptors=false}var hasEnumBug=!{valueOf:0}.propertyIsEnumerable("valueOf"),buggy=["toString","valueOf"];var verbs=/^constructor|inherits|mixin$/;var implement=function(proto){var prototype=this.prototype;for(var key in proto){if(key.match(verbs))continue;if(hasDescriptors){var descriptor=Object.getOwnPropertyDescriptor(proto,key);if(descriptor){Object.defineProperty(prototype,key,descriptor);continue}}prototype[key]=proto[key]}if(hasEnumBug)for(var i=0;key=buggy[i];i++){var value=proto[key];if(value!==Object.prototype[key])prototype[key]=value}return this};var prime=function(proto){if(kindOf(proto)==="Function")proto={constructor:proto};var superprime=proto.inherits;var constructor=hasOwn(proto,"constructor")?proto.constructor:superprime?function(){return superprime.apply(this,arguments)}:function(){};if(superprime){mixIn(constructor,superprime);var superproto=superprime.prototype;var cproto=constructor.prototype=create(superproto);constructor.parent=superproto;cproto.constructor=constructor}if(!constructor.implement)constructor.implement=implement;var mixins=proto.mixin;if(mixins){if(kindOf(mixins)!=="Array")mixins=[mixins];for(var i=0;i<mixins.length;i++)constructor.implement(create(mixins[i].prototype))}return constructor.implement(proto)};module.exports=prime},{"mout/lang/createObject":16,"mout/lang/kindOf":19,"mout/object/hasOwn":24,"mout/object/mixIn":25}],34:[function(require,module,exports){"use strict";var indexOf=require("mout/array/indexOf");var prime=require("./index");var Map=prime({constructor:function Map(){this.length=0;this._values=[];this._keys=[]},set:function(key,value){var index=indexOf(this._keys,key);if(index===-1){this._keys.push(key);this._values.push(value);this.length++}else{this._values[index]=value}return this},get:function(key){var index=indexOf(this._keys,key);return index===-1?null:this._values[index]},count:function(){return this.length},forEach:function(method,context){for(var i=0,l=this.length;i<l;i++){if(method.call(context,this._values[i],this._keys[i],this)===false)break}return this},map:function(method,context){var results=new Map;this.forEach(function(value,key){results.set(key,method.call(context,value,key,this))},this);return results},filter:function(method,context){var results=new Map;this.forEach(function(value,key){if(method.call(context,value,key,this))results.set(key,value)},this);return results},every:function(method,context){var every=true;this.forEach(function(value,key){if(!method.call(context,value,key,this))return every=false},this);return every},some:function(method,context){var some=false;this.forEach(function(value,key){if(method.call(context,value,key,this))return!(some=true)},this);return some},indexOf:function(value){var index=indexOf(this._values,value);return index>-1?this._keys[index]:null},remove:function(value){var index=indexOf(this._values,value);if(index!==-1){this._values.splice(index,1);this.length--;return this._keys.splice(index,1)[0]}return null},unset:function(key){var index=indexOf(this._keys,key);if(index!==-1){this._keys.splice(index,1);this.length--;return this._values.splice(index,1)[0]}return null},keys:function(){return this._keys.slice()},values:function(){return this._values.slice()}});var map=function(){return new Map};map.prototype=Map.prototype;module.exports=map},{"./index":33,"mout/array/indexOf":10}],35:[function(require,module,exports){"use strict";var parse=require("./parser");var index=0,counter=document.__counter=(parseInt(document.__counter||-1,36)+1).toString(36),key="uid:"+counter;var uniqueID=function(n,xml){if(n===window)return"window";if(n===document)return"document";if(n===document.documentElement)return"html";if(xml){var uid=n.getAttribute(key);if(!uid){uid=(index++).toString(36);n.setAttribute(key,uid)}return uid}else{return n[key]||(n[key]=(index++).toString(36))}};var uniqueIDXML=function(n){return uniqueID(n,true)};var isArray=Array.isArray||function(object){return Object.prototype.toString.call(object)==="[object Array]"};var uniqueIndex=0;var HAS={GET_ELEMENT_BY_ID:function(test,id){id="slick_"+uniqueIndex++;test.innerHTML='<a id="'+id+'"></a>';return!!this.getElementById(id)},QUERY_SELECTOR:function(test){test.innerHTML="_<style>:nth-child(2){}</style>";test.innerHTML='<a class="MiX"></a>';return test.querySelectorAll(".MiX").length===1},EXPANDOS:function(test,id){id="slick_"+uniqueIndex++;test._custom_property_=id;return test._custom_property_===id},MATCHES_SELECTOR:function(test){test.className="MiX";var matches=test.matchesSelector||test.mozMatchesSelector||test.webkitMatchesSelector;if(matches)try{matches.call(test,":slick")}catch(e){return matches.call(test,".MiX")?matches:false}return false},GET_ELEMENTS_BY_CLASS_NAME:function(test){test.innerHTML='<a class="f"></a><a class="b"></a>';if(test.getElementsByClassName("b").length!==1)return false;test.firstChild.className="b";if(test.getElementsByClassName("b").length!==2)return false;test.innerHTML='<a class="a"></a><a class="f b a"></a>';if(test.getElementsByClassName("a").length!==2)return false;return true},GET_ATTRIBUTE:function(test){var shout="fus ro dah";test.innerHTML='<a class="'+shout+'"></a>';return test.firstChild.getAttribute("class")===shout}};var Finder=function Finder(document){this.document=document;var root=this.root=document.documentElement;this.tested={};this.uniqueID=this.has("EXPANDOS")?uniqueID:uniqueIDXML;this.getAttribute=this.has("GET_ATTRIBUTE")?function(node,name){return node.getAttribute(name)}:function(node,name){node=node.getAttributeNode(name);return node&&node.specified?node.value:null};this.hasAttribute=root.hasAttribute?function(node,attribute){return node.hasAttribute(attribute)}:function(node,attribute){node=node.getAttributeNode(attribute);return!!(node&&node.specified)};this.contains=document.contains&&root.contains?function(context,node){return context.contains(node)}:root.compareDocumentPosition?function(context,node){return context===node||!!(context.compareDocumentPosition(node)&16)}:function(context,node){do{if(node===context)return true}while(node=node.parentNode);return false};this.sorter=root.compareDocumentPosition?function(a,b){if(!a.compareDocumentPosition||!b.compareDocumentPosition)return 0;return a.compareDocumentPosition(b)&4?-1:a===b?0:1}:"sourceIndex"in root?function(a,b){if(!a.sourceIndex||!b.sourceIndex)return 0;return a.sourceIndex-b.sourceIndex}:document.createRange?function(a,b){if(!a.ownerDocument||!b.ownerDocument)return 0;var aRange=a.ownerDocument.createRange(),bRange=b.ownerDocument.createRange();aRange.setStart(a,0);aRange.setEnd(a,0);bRange.setStart(b,0);bRange.setEnd(b,0);return aRange.compareBoundaryPoints(Range.START_TO_END,bRange)}:null;this.failed={};var nativeMatches=this.has("MATCHES_SELECTOR");if(nativeMatches)this.matchesSelector=function(node,expression){if(this.failed[expression])return null;try{return nativeMatches.call(node,expression)}catch(e){if(slick.debug)console.warn("matchesSelector failed on "+expression);this.failed[expression]=true;return null}};if(this.has("QUERY_SELECTOR")){this.querySelectorAll=function(node,expression){if(this.failed[expression])return true;var result,_id,_expression,_combinator,_node;if(node!==this.document){_combinator=expression[0].combinator;_id=node.getAttribute("id");_expression=expression;if(!_id){_node=node;_id="__slick__";_node.setAttribute("id",_id)}expression="#"+_id+" "+_expression;if(_combinator.indexOf("~")>-1||_combinator.indexOf("+")>-1){node=node.parentNode;if(!node)result=true}}if(!result)try{result=node.querySelectorAll(expression.toString())}catch(e){if(slick.debug)console.warn("querySelectorAll failed on "+(_expression||expression));result=this.failed[_expression||expression]=true}if(_node)_node.removeAttribute("id");return result}}};Finder.prototype.has=function(FEATURE){var tested=this.tested,testedFEATURE=tested[FEATURE];if(testedFEATURE!=null)return testedFEATURE;var root=this.root,document=this.document,testNode=document.createElement("div");testNode.setAttribute("style","display: none;");root.appendChild(testNode);var TEST=HAS[FEATURE],result=false;if(TEST)try{result=TEST.call(document,testNode)}catch(e){}if(slick.debug&&!result)console.warn("document has no "+FEATURE);root.removeChild(testNode); | |
return tested[FEATURE]=result};var combinators={" ":function(node,part,push){var item,items;var noId=!part.id,noTag=!part.tag,noClass=!part.classes;if(part.id&&node.getElementById&&this.has("GET_ELEMENT_BY_ID")){item=node.getElementById(part.id);if(item&&item.getAttribute("id")===part.id){items=[item];noId=true;if(part.tag==="*")noTag=true}}if(!items){if(part.classes&&node.getElementsByClassName&&this.has("GET_ELEMENTS_BY_CLASS_NAME")){items=node.getElementsByClassName(part.classList);noClass=true;if(part.tag==="*")noTag=true}else{items=node.getElementsByTagName(part.tag);if(part.tag!=="*")noTag=true}if(!items||!items.length)return false}for(var i=0;item=items[i++];)if(noTag&&noId&&noClass&&!part.attributes&&!part.pseudos||this.match(item,part,noTag,noId,noClass))push(item);return true},">":function(node,part,push){if(node=node.firstChild)do{if(node.nodeType==1&&this.match(node,part))push(node)}while(node=node.nextSibling)},"+":function(node,part,push){while(node=node.nextSibling)if(node.nodeType==1){if(this.match(node,part))push(node);break}},"^":function(node,part,push){node=node.firstChild;if(node){if(node.nodeType===1){if(this.match(node,part))push(node)}else{combinators["+"].call(this,node,part,push)}}},"~":function(node,part,push){while(node=node.nextSibling){if(node.nodeType===1&&this.match(node,part))push(node)}},"++":function(node,part,push){combinators["+"].call(this,node,part,push);combinators["!+"].call(this,node,part,push)},"~~":function(node,part,push){combinators["~"].call(this,node,part,push);combinators["!~"].call(this,node,part,push)},"!":function(node,part,push){while(node=node.parentNode)if(node!==this.document&&this.match(node,part))push(node)},"!>":function(node,part,push){node=node.parentNode;if(node!==this.document&&this.match(node,part))push(node)},"!+":function(node,part,push){while(node=node.previousSibling)if(node.nodeType==1){if(this.match(node,part))push(node);break}},"!^":function(node,part,push){node=node.lastChild;if(node){if(node.nodeType==1){if(this.match(node,part))push(node)}else{combinators["!+"].call(this,node,part,push)}}},"!~":function(node,part,push){while(node=node.previousSibling){if(node.nodeType===1&&this.match(node,part))push(node)}}};Finder.prototype.search=function(context,expression,found){if(!context)context=this.document;else if(!context.nodeType&&context.document)context=context.document;var expressions=parse(expression);if(!expressions||!expressions.length)throw new Error("invalid expression");if(!found)found=[];var uniques,push=isArray(found)?function(node){found[found.length]=node}:function(node){found[found.length++]=node};if(expressions.length>1){uniques={};var plush=push;push=function(node){var uid=uniqueID(node);if(!uniques[uid]){uniques[uid]=true;plush(node)}}}var node,nodes,part;main:for(var i=0;expression=expressions[i++];){if(!slick.noQSA&&this.querySelectorAll){nodes=this.querySelectorAll(context,expression);if(nodes!==true){if(nodes&&nodes.length)for(var j=0;node=nodes[j++];)if(node.nodeName>"@"){push(node)}continue main}}if(expression.length===1){part=expression[0];combinators[part.combinator].call(this,context,part,push)}else{var cs=[context],c,f,u,p=function(node){var uid=uniqueID(node);if(!u[uid]){u[uid]=true;f[f.length]=node}};for(var j=0;part=expression[j++];){f=[];u={};for(var k=0;c=cs[k++];)combinators[part.combinator].call(this,c,part,p);if(!f.length)continue main;cs=f}if(i===0)found=f;else for(var l=0;l<f.length;l++)push(f[l])}}if(uniques&&found&&found.length>1)this.sort(found);return found};Finder.prototype.sort=function(nodes){return this.sorter?Array.prototype.sort.call(nodes,this.sorter):nodes};var pseudos={empty:function(){return!(this&&this.nodeType===1)&&!(this.innerText||this.textContent||"").length},not:function(expression){return!slick.match(this,expression)},contains:function(text){return(this.innerText||this.textContent||"").indexOf(text)>-1},"first-child":function(){var node=this;while(node=node.previousSibling)if(node.nodeType==1)return false;return true},"last-child":function(){var node=this;while(node=node.nextSibling)if(node.nodeType==1)return false;return true},"only-child":function(){var prev=this;while(prev=prev.previousSibling)if(prev.nodeType==1)return false;var next=this;while(next=next.nextSibling)if(next.nodeType==1)return false;return true},"first-of-type":function(){var node=this,nodeName=node.nodeName;while(node=node.previousSibling)if(node.nodeName==nodeName)return false;return true},"last-of-type":function(){var node=this,nodeName=node.nodeName;while(node=node.nextSibling)if(node.nodeName==nodeName)return false;return true},"only-of-type":function(){var prev=this,nodeName=this.nodeName;while(prev=prev.previousSibling)if(prev.nodeName==nodeName)return false;var next=this;while(next=next.nextSibling)if(next.nodeName==nodeName)return false;return true},enabled:function(){return!this.disabled},disabled:function(){return this.disabled},checked:function(){return this.checked||this.selected},selected:function(){return this.selected},focus:function(){var doc=this.ownerDocument;return doc.activeElement===this&&(this.href||this.type||slick.hasAttribute(this,"tabindex"))},root:function(){return this===this.ownerDocument.documentElement}};Finder.prototype.match=function(node,bit,noTag,noId,noClass){if(!slick.noQSA&&this.matchesSelector){var matches=this.matchesSelector(node,bit);if(matches!==null)return matches}if(!noTag&&bit.tag){var nodeName=node.nodeName.toLowerCase();if(bit.tag==="*"){if(nodeName<"@")return false}else if(nodeName!=bit.tag){return false}}if(!noId&&bit.id&&node.getAttribute("id")!==bit.id)return false;var i,part;if(!noClass&&bit.classes){var className=this.getAttribute(node,"class");if(!className)return false;for(part in bit.classes)if(!RegExp("(^|\\s)"+bit.classes[part]+"(\\s|$)").test(className))return false}var name,value;if(bit.attributes)for(i=0;part=bit.attributes[i++];){var operator=part.operator,escaped=part.escapedValue;name=part.name;value=part.value;if(!operator){if(!this.hasAttribute(node,name))return false}else{var actual=this.getAttribute(node,name);if(actual==null)return false;switch(operator){case"^=":if(!RegExp("^"+escaped).test(actual))return false;break;case"$=":if(!RegExp(escaped+"$").test(actual))return false;break;case"~=":if(!RegExp("(^|\\s)"+escaped+"(\\s|$)").test(actual))return false;break;case"|=":if(!RegExp("^"+escaped+"(-|$)").test(actual))return false;break;case"=":if(actual!==value)return false;break;case"*=":if(actual.indexOf(value)===-1)return false;break;default:return false}}}if(bit.pseudos)for(i=0;part=bit.pseudos[i++];){name=part.name;value=part.value;if(pseudos[name])return pseudos[name].call(node,value);if(value!=null){if(this.getAttribute(node,name)!==value)return false}else{if(!this.hasAttribute(node,name))return false}}return true};Finder.prototype.matches=function(node,expression){var expressions=parse(expression);if(expressions.length===1&&expressions[0].length===1){return this.match(node,expressions[0][0])}if(!slick.noQSA&&this.matchesSelector){var matches=this.matchesSelector(node,expressions);if(matches!==null)return matches}var nodes=this.search(this.document,expression,{length:0});for(var i=0,res;res=nodes[i++];)if(node===res)return true;return false};var finders={};var finder=function(context){var doc=context||document;if(doc.ownerDocument)doc=doc.ownerDocument;else if(doc.document)doc=doc.document;if(doc.nodeType!==9)throw new TypeError("invalid document");var uid=uniqueID(doc);return finders[uid]||(finders[uid]=new Finder(doc))};var slick=function(expression,context){return slick.search(expression,context)};slick.search=function(expression,context,found){return finder(context).search(context,expression,found)};slick.find=function(expression,context){return finder(context).search(context,expression)[0]||null};slick.getAttribute=function(node,name){return finder(node).getAttribute(node,name)};slick.hasAttribute=function(node,name){return finder(node).hasAttribute(node,name)};slick.contains=function(context,node){return finder(context).contains(context,node)};slick.matches=function(node,expression){return finder(node).matches(node,expression)};slick.sort=function(nodes){if(nodes&&nodes.length>1)finder(nodes[0]).sort(nodes);return nodes};slick.parse=parse;module.exports=slick},{"./parser":37}],36:[function(require,module,exports){(function(global){"use strict";module.exports="document"in global?require("./finder"):{parse:require("./parser")}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./finder":35,"./parser":37}],37:[function(require,module,exports){"use strict";var escapeRe=/([-.*+?^${}()|[\]\/\\])/g,unescapeRe=/\\/g;var escape=function(string){return(string+"").replace(escapeRe,"\\$1")};var unescape=function(string){return(string+"").replace(unescapeRe,"")};var slickRe=RegExp("^(?:\\s*(,)\\s*|\\s*(<combinator>+)\\s*|(\\s+)|(<unicode>+|\\*)|\\#(<unicode>+)|\\.(<unicode>+)|\\[\\s*(<unicode1>+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(<unicode>+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)".replace(/<combinator>/,"["+escape(">+~`!@$%^&={}\\;</")+"]").replace(/<unicode>/g,"(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])").replace(/<unicode1>/g,"(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])"));var Part=function Part(combinator){this.combinator=combinator||" ";this.tag="*"};Part.prototype.toString=function(){if(!this.raw){var xpr="",k,part;xpr+=this.tag||"*";if(this.id)xpr+="#"+this.id;if(this.classes)xpr+="."+this.classList.join(".");if(this.attributes)for(k=0;part=this.attributes[k++];){xpr+="["+part.name+(part.operator?part.operator+'"'+part.value+'"':"")+"]"}if(this.pseudos)for(k=0;part=this.pseudos[k++];){xpr+=":"+part.name;if(part.value)xpr+="("+part.value+")"}this.raw=xpr}return this.raw};var Expression=function Expression(){this.length=0};Expression.prototype.toString=function(){if(!this.raw){var xpr="";for(var j=0,bit;bit=this[j++];){if(j!==1)xpr+=" ";if(bit.combinator!==" ")xpr+=bit.combinator+" ";xpr+=bit}this.raw=xpr}return this.raw};var replacer=function(rawMatch,separator,combinator,combinatorChildren,tagName,id,className,attributeKey,attributeOperator,attributeQuote,attributeValue,pseudoMarker,pseudoClass,pseudoQuote,pseudoClassQuotedValue,pseudoClassValue){var expression,current;if(separator||!this.length){expression=this[this.length++]=new Expression;if(separator)return""}if(!expression)expression=this[this.length-1];if(combinator||combinatorChildren||!expression.length){current=expression[expression.length++]=new Part(combinator)}if(!current)current=expression[expression.length-1];if(tagName){current.tag=unescape(tagName)}else if(id){current.id=unescape(id)}else if(className){var unescaped=unescape(className);var classes=current.classes||(current.classes={});if(!classes[unescaped]){classes[unescaped]=escape(className);var classList=current.classList||(current.classList=[]);classList.push(unescaped);classList.sort()}}else if(pseudoClass){pseudoClassValue=pseudoClassValue||pseudoClassQuotedValue;(current.pseudos||(current.pseudos=[])).push({type:pseudoMarker.length==1?"class":"element",name:unescape(pseudoClass),escapedName:escape(pseudoClass),value:pseudoClassValue?unescape(pseudoClassValue):null,escapedValue:pseudoClassValue?escape(pseudoClassValue):null})}else if(attributeKey){attributeValue=attributeValue?escape(attributeValue):null;(current.attributes||(current.attributes=[])).push({operator:attributeOperator,name:unescape(attributeKey),escapedName:escape(attributeKey),value:attributeValue?unescape(attributeValue):null,escapedValue:attributeValue?escape(attributeValue):null})}return""};var Expressions=function Expressions(expression){this.length=0;var self=this;var original=expression,replaced;while(expression){replaced=expression.replace(slickRe,function(){return replacer.apply(self,arguments)});if(replaced===expression)throw new Error(original+" is an invalid expression");expression=replaced}};Expressions.prototype.toString=function(){if(!this.raw){var expressions=[];for(var i=0,expression;expression=this[i++];)expressions.push(expression);this.raw=expressions.join(", ")}return this.raw};var cache={};var parse=function(expression){if(expression==null)return null;expression=(""+expression).replace(/^\s+|\s+$/g,"");return cache[expression]||(cache[expression]=new Expressions(expression))};module.exports=parse},{}],38:[function(require,module,exports){"use strict";var map=require("mout/array/map");var slick=require("slick");var $=require("./base");var gen=function(combinator,expression){return map(slick.parse(expression||"*"),function(part){return combinator+" "+part}).join(", ")};var push_=Array.prototype.push;$.implement({search:function(expression){if(this.length===1)return $(slick.search(expression,this[0],new $));var buffer=[];for(var i=0,node;node=this[i];i++)push_.apply(buffer,slick.search(expression,node));buffer=$(buffer);return buffer&&buffer.sort()},find:function(expression){if(this.length===1)return $(slick.find(expression,this[0]));for(var i=0,node;node=this[i];i++){var found=slick.find(expression,node);if(found)return $(found)}return null},sort:function(){return slick.sort(this)},matches:function(expression){return slick.matches(this[0],expression)},contains:function(node){return slick.contains(this[0],node)},nextSiblings:function(expression){return this.search(gen("~",expression))},nextSibling:function(expression){return this.find(gen("+",expression))},previousSiblings:function(expression){return this.search(gen("!~",expression))},previousSibling:function(expression){return this.find(gen("!+",expression))},children:function(expression){return this.search(gen(">",expression))},firstChild:function(expression){return this.find(gen("^",expression))},lastChild:function(expression){return this.find(gen("!^",expression))},parent:function(expression){var buffer=[];loop:for(var i=0,node;node=this[i];i++)while((node=node.parentNode)&&node!==document){if(!expression||slick.matches(node,expression)){buffer.push(node);break loop;break}}return $(buffer)},parents:function(expression){var buffer=[];for(var i=0,node;node=this[i];i++)while((node=node.parentNode)&&node!==document){if(!expression||slick.matches(node,expression))buffer.push(node)}return $(buffer)}});module.exports=$},{"./base":3,"mout/array/map":11,slick:36}],elements:[function(require,module,exports){"use strict";var $=require("./base");require("./attributes");require("./events");require("./insertion");require("./traversal");require("./delegation");module.exports=$},{"./attributes":2,"./base":3,"./delegation":4,"./events":5,"./insertion":6,"./traversal":38}]},{},[]);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){"use strict";var prime=require("prime");var Vector3=require("./Vector3");var Vector4=require("./Vector4");var stringify=function(array,places){if(places==null||places>20)places=20;var strings=[];for(var i=0;i<array.length;i++)strings[i]=array[i].toFixed(10).replace(/\.?0+$/,"");return strings};var TypeMask={Identity:0,Translate:1,Scale:2,Affine:4,Perspective:8,All:15,Unknown:128};var Matrix3d=prime({constructor:function Matrix3d(){var values=arguments;if(values.length===1)values=values[0];if(!values.length)values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];var i=0,j,k=0;if(values.length===6){var a=values[0];var b=values[1];var c=values[2];var d=values[3];var e=values[4];var f=values[5];values=[a,b,0,0,c,d,0,0,0,0,1,0,e,f,0,1]}if(values.length!==16)throw new Error("invalid matrix");for(i=0;i<4;i++){var col=this[i]=[];for(j=0;j<4;j++){col[j]=values[k++]}}},get a(){return this.m11},get b(){return this.m12},get c(){return this.m21},get d(){return this.m22},get e(){return this.m41},get f(){return this.m42},set a(value){this.m11=value},set b(value){this.m12=value},set c(value){this.m21=value},set d(value){this.m22=value},set e(value){this.m41=value},set f(value){this.m42=value},get m11(){return this[0][0]},get m12(){return this[0][1]},get m13(){return this[0][2]},get m14(){return this[0][3]},get m21(){return this[1][0]},get m22(){return this[1][1]},get m23(){return this[1][2]},get m24(){return this[1][3]},get m31(){return this[2][0]},get m32(){return this[2][1]},get m33(){return this[2][2]},get m34(){return this[2][3]},get m41(){return this[3][0]},get m42(){return this[3][1]},get m43(){return this[3][2]},get m44(){return this[3][3]},set m11(value){this[0][0]=value},set m12(value){this[0][1]=value},set m13(value){this[0][2]=value},set m14(value){this[0][3]=value},set m21(value){this[1][0]=value},set m22(value){this[1][1]=value},set m23(value){this[1][2]=value},set m24(value){this[1][3]=value},set m31(value){this[2][0]=value},set m32(value){this[2][1]=value},set m33(value){this[2][2]=value},set m34(value){this[2][3]=value},set m41(value){this[3][0]=value},set m42(value){this[3][1]=value},set m43(value){this[3][2]=value},set m44(value){this[3][3]=value},get transX(){return this[3][0]},get transY(){return this[3][1]},get transZ(){return this[3][2]},get scaleX(){return this[0][0]},get scaleY(){return this[1][1]},get scaleZ(){return this[2][2]},get perspX(){return this[0][3]},get perspY(){return this[1][3]},get perspZ(){return this[2][3]},set transX(value){this[3][0]=value},set transY(value){this[3][1]=value},set transZ(value){this[3][2]=value},set scaleX(value){this[0][0]=value},set scaleY(value){this[1][1]=value},set scaleZ(value){this[2][2]=value},set perspX(value){this[0][3]=value},set perspY(value){this[1][3]=value},set perspZ(value){this[2][3]=value},get type(){var m=this;var mask=0;if(0!==m.perspX||0!==m.perspY||0!==m.perspZ||1!==m[3][3]){return TypeMask.Translate|TypeMask.Scale|TypeMask.Affine|TypeMask.Perspective}if(0!==m.transX||0!==m.transY||0!==m.transZ){mask|=TypeMask.Translate}if(1!==m.scaleX||1!==m.scaleY||1!==m.scaleZ){mask|=TypeMask.Scale}if(0!==m[1][0]||0!==m[0][1]||0!==m[0][2]||0!==m[2][0]||0!==m[1][2]||0!==m[2][1]){mask|=TypeMask.Affine}return mask},is2d:function(){var m=this;return m.m31===0&&m.m32===0&&m.m13===0&&m.m14===0&&m.m23===0&&m.m24===0&&m.m33===1&&m.m34===0&&m.m43===0&&m.m44===1},equals:function(m2){var m1=this;return;m1.m11===m2.m11&&m1.m12===m2.m12&&m1.m13===m2.m13&&m1.m14===m2.m14&&m1.m21===m2.m21&&m1.m22===m2.m22&&m1.m23===m2.m23&&m1.m24===m2.m24&&m1.m31===m2.m31&&m1.m32===m2.m32&&m1.m33===m2.m33&&m1.m34===m2.m34&&m1.m41===m2.m41&&m1.m42===m2.m42&&m1.m43===m2.m43&&m1.m44===m2.m44},clone:function(){var m=this;return new Matrix3d(m.m11,m.m12,m.m13,m.m14,m.m21,m.m22,m.m23,m.m24,m.m31,m.m32,m.m33,m.m34,m.m41,m.m42,m.m43,m.m44)},isIdentity:function(){return this.type===TypeMask.Identity},isTranslate:function(){return!(this.type&~TypeMask.Translate)},isScaleTranslate:function(){return!(this.type&~(TypeMask.Scale|TypeMask.Translate))},concat:function(m2){if(this.isIdentity())return m2.clone();if(m2.isIdentity())return this.clone();var m=new Matrix3d;for(var j=0;j<4;j++){for(var i=0;i<4;i++){var value=0;for(var k=0;k<4;k++){value+=this[k][i]*m2[j][k]}m[j][i]=value}}return m},translate:function(v3){var translationMatrix=new Matrix3d;translationMatrix.m41=v3[0];translationMatrix.m42=v3[1];translationMatrix.m43=v3[2];return this.concat(translationMatrix)},scale:function(v3){var m=new Matrix3d;m.m11=v3[0];m.m22=v3[1];m.m33=v3[2];return this.concat(m)},rotate:function(v4q){var rotationMatrix=new Matrix3d;var x=v4q[0];var y=v4q[1];var z=v4q[2];var w=v4q[3];rotationMatrix.m11=1-2*(y*y+z*z);rotationMatrix.m21=2*(x*y-z*w);rotationMatrix.m31=2*(x*z+y*w);rotationMatrix.m12=2*(x*y+z*w);rotationMatrix.m22=1-2*(x*x+z*z);rotationMatrix.m32=2*(y*z-x*w);rotationMatrix.m13=2*(x*z-y*w);rotationMatrix.m23=2*(y*z+x*w);rotationMatrix.m33=1-2*(x*x+y*y);return this.concat(rotationMatrix)},skew:function(v3){var skewMatrix=new Matrix3d;skewMatrix[1][0]=v3[0];skewMatrix[2][0]=v3[1];skewMatrix[2][1]=v3[2];return this.concat(skewMatrix)},perspective:function(v4){var perspectiveMatrix=new Matrix3d;perspectiveMatrix.m14=v4[0];perspectiveMatrix.m24=v4[1];perspectiveMatrix.m34=v4[2];perspectiveMatrix.m44=v4[3];return this.concat(perspectiveMatrix)},map:function(v4){var result=new Vector4;for(var i=0;i<4;i++){var value=0;for(var j=0;j<4;j++){value+=this[j][i]*v4[j]}result[i]=value}return result},determinant:function(){if(this.isIdentity())return 1;if(this.isScaleTranslate())return this[0][0]*this[1][1]*this[2][2]*this[3][3];var a00=this[0][0];var a01=this[0][1];var a02=this[0][2];var a03=this[0][3];var a10=this[1][0];var a11=this[1][1];var a12=this[1][2];var a13=this[1][3];var a20=this[2][0];var a21=this[2][1];var a22=this[2][2];var a23=this[2][3];var a30=this[3][0];var a31=this[3][1];var a32=this[3][2];var a33=this[3][3];var b00=a00*a11-a01*a10;var b01=a00*a12-a02*a10;var b02=a00*a13-a03*a10;var b03=a01*a12-a02*a11;var b04=a01*a13-a03*a11;var b05=a02*a13-a03*a12;var b06=a20*a31-a21*a30;var b07=a20*a32-a22*a30;var b08=a20*a33-a23*a30;var b09=a21*a32-a22*a31;var b10=a21*a33-a23*a31;var b11=a22*a33-a23*a32;return b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06},normalize:function(){var m44=this.m44;if(m44===0)return false;var normalizedMatrix=new Matrix3d;var scale=1/m44;for(var i=0;i<4;i++)for(var j=0;j<4;j++)normalizedMatrix[j][i]=this[j][i]*scale;return normalizedMatrix},decompose:function(){var matrix=this.normalize();if(!matrix)return false;var perspectiveMatrix=matrix.clone();var i,j;for(i=0;i<3;i++)perspectiveMatrix[i][3]=0;perspectiveMatrix[3][3]=1;if(Math.abs(perspectiveMatrix.determinant())<1e-8)return false;var perspective;if(matrix[0][3]!==0||matrix[1][3]!==0||matrix[2][3]!==0){var rightHandSide=new Vector4(matrix[0][3],matrix[1][3],matrix[2][3],matrix[3][3]);var inversePerspectiveMatrix=perspectiveMatrix.invert();if(!inversePerspectiveMatrix)return false;var transposedInversePerspectiveMatrix=inversePerspectiveMatrix.transpose();perspective=transposedInversePerspectiveMatrix.map(rightHandSide)}else{perspective=new Vector4(0,0,0,1)}var translate=new Vector3;for(i=0;i<3;i++)translate[i]=matrix[3][i];var row=[];for(i=0;i<3;i++){var v3=row[i]=new Vector3;for(j=0;j<3;++j)v3[j]=matrix[i][j]}var scale=new Vector3;scale[0]=row[0].length();row[0]=row[0].normalize();var skew=new Vector3;skew[0]=row[0].dot(row[1]);row[1]=row[1].combine(row[0],1,-skew[0]);scale[1]=row[1].length();row[1]=row[1].normalize();skew[0]/=scale[1];skew[1]=row[0].dot(row[2]);row[2]=row[2].combine(row[0],1,-skew[1]);skew[2]=row[1].dot(row[2]);row[2]=row[2].combine(row[1],1,-skew[2]);scale[2]=row[2].length();row[2]=row[2].normalize();skew[1]/=scale[2];skew[2]/=scale[2];var pdum3=row[1].cross(row[2]);if(row[0].dot(pdum3)<0){for(i=0;i<3;i++){scale[i]*=-1;for(j=0;j<3;++j)row[i][j]*=-1}}var quaternion=new Vector4(.5*Math.sqrt(Math.max(1+row[0][0]-row[1][1]-row[2][2],0)),.5*Math.sqrt(Math.max(1-row[0][0]+row[1][1]-row[2][2],0)),.5*Math.sqrt(Math.max(1-row[0][0]-row[1][1]+row[2][2],0)),.5*Math.sqrt(Math.max(1+row[0][0]+row[1][1]+row[2][2],0)));if(row[2][1]>row[1][2])quaternion[0]=-quaternion[0];if(row[0][2]>row[2][0])quaternion[1]=-quaternion[1];if(row[1][0]>row[0][1])quaternion[2]=-quaternion[2];return new DecomposedMatrix(perspective,translate,quaternion,skew,scale)},invert:function(){var a00=this[0][0];var a01=this[0][1];var a02=this[0][2];var a03=this[0][3];var a10=this[1][0];var a11=this[1][1];var a12=this[1][2];var a13=this[1][3];var a20=this[2][0];var a21=this[2][1];var a22=this[2][2];var a23=this[2][3];var a30=this[3][0];var a31=this[3][1];var a32=this[3][2];var a33=this[3][3];var b00=a00*a11-a01*a10;var b01=a00*a12-a02*a10;var b02=a00*a13-a03*a10;var b03=a01*a12-a02*a11;var b04=a01*a13-a03*a11;var b05=a02*a13-a03*a12;var b06=a20*a31-a21*a30;var b07=a20*a32-a22*a30;var b08=a20*a33-a23*a30;var b09=a21*a32-a22*a31;var b10=a21*a33-a23*a31;var b11=a22*a33-a23*a32;var det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;if(det===0||!isFinite(det))return false;var invdet=1/det;b00*=invdet;b01*=invdet;b02*=invdet;b03*=invdet;b04*=invdet;b05*=invdet;b06*=invdet;b07*=invdet;b08*=invdet;b09*=invdet;b10*=invdet;b11*=invdet;return new Matrix3d(a11*b11-a12*b10+a13*b09,a02*b10-a01*b11-a03*b09,a31*b05-a32*b04+a33*b03,a22*b04-a21*b05-a23*b03,a12*b08-a10*b11-a13*b07,a00*b11-a02*b08+a03*b07,a32*b02-a30*b05-a33*b01,a20*b05-a22*b02+a23*b01,a10*b10-a11*b08+a13*b06,a01*b08-a00*b10-a03*b06,a30*b04-a31*b02+a33*b00,a21*b02-a20*b04-a23*b00,a11*b07-a10*b09-a12*b06,a00*b09-a01*b07+a02*b06,a31*b01-a30*b03-a32*b00,a20*b03-a21*b01+a22*b00)},transpose:function(){var m=this;return new Matrix3d(m.m11,m.m21,m.m31,m.m41,m.m12,m.m22,m.m32,m.m42,m.m13,m.m23,m.m33,m.m43,m.m14,m.m24,m.m34,m.m44)},interpolation:function(matrix){return new MatrixInterpolation(this,matrix)},toArray:function(){return this.is2d()?this.toArray2d():this.toArray3d()},toArray3d:function(){var m=this;return[m.m11,m.m12,m.m13,m.m14,m.m21,m.m22,m.m23,m.m24,m.m31,m.m32,m.m33,m.m34,m.m41,m.m42,m.m43,m.m44]},toArray2d:function(){var m=this;return[m.a,m.b,m.c,m.d,m.e,m.f]},toString:function(places){return this.is2d()?this.toString2d(places):this.toString3d(places)},toString3d:function(places){return"matrix3d("+stringify(this.toArray3d()).join(", ")+")"},toString2d:function(places){return"matrix("+stringify(this.toArray2d()).join(", ")+")"}});var DecomposedMatrix=prime({constructor:function DecomposedMatrix(perspective,translate,quaternion,skew,scale){this.perspective=perspective;this.translate=translate;this.quaternion=quaternion;this.skew=skew;this.scale=scale},interpolate:function(to,delta){var from=this;var perspective=from.perspective.lerp(to.perspective,delta);var translate=from.translate.lerp(to.translate,delta);var quaternion=from.quaternion.slerp(to.quaternion,delta);var skew=from.skew.lerp(to.skew,delta);var scale=from.scale.lerp(to.scale,delta);return new DecomposedMatrix(perspective,translate,quaternion,skew,scale)},compose:function(){return(new Matrix3d).perspective(this.perspective).translate(this.translate).rotate(this.quaternion).skew(this.skew).scale(this.scale)}});var MatrixInterpolation=prime({constructor:function MatrixInterpolation(from,to){this.matrix1=from;this.matrix2=to;this.from=from.decompose();this.to=to.decompose()},step:function(delta){if(delta===0)return this.matrix1;if(delta===1)return this.matrix2;return this.from.interpolate(this.to,delta).compose()}});Matrix3d.Decomposed=DecomposedMatrix;Matrix3d.Interpolation=MatrixInterpolation;module.exports=Matrix3d},{"./Vector3":2,"./Vector4":3,prime:4}],2:[function(require,module,exports){"use strict";var prime=require("prime");var Vector3=prime({constructor:function Vector3(x,y,z){this[0]=x||0;this[1]=y||0;this[2]=z||0},clone:function(){return new Vector3(this[0],this[1],this[2])},get x(){return this[0]},get y(){return this[1]},get z(){return this[2]},equals:function(v3){return this[0]===v3[0]&&this[1]===v3[1]&&this[2]===v3[2]},length:function(){return Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2])},normalize:function(){var length=this.length();if(length===0)return new Vector3;return new Vector3(this[0]/length,this[1]/length,this[2]/length)},dot:function(v3){return this[0]*v3[0]+this[1]*v3[1]+this[2]*v3[2]},cross:function(v3){var x=this[0],y=this[1],z=this[2];return new Vector3(y*v3[2]-z*v3[1],z*v3[0]-x*v3[2],x*v3[1]-y*v3[0])},lerp:function(v3,delta){var scale1=delta;var scale2=1-delta;return v3.combine(this,scale1,scale2)},combine:function(v3,scale1,scale2){var result=new Vector3;for(var i=0;i<3;i++)result[i]=this[i]*scale1+v3[i]*scale2;return result}});module.exports=Vector3},{prime:4}],3:[function(require,module,exports){"use strict";var prime=require("prime");var degToRad=function(degrees){return degrees*Math.PI/180};var radToDeg=function(radians){return radians*180/Math.PI};var Vector4=prime({constructor:function Vector4(x,y,z,w){this[0]=x||0;this[1]=y||0;this[2]=z||0;this[3]=w||0},clone:function(){return new Vector4(this[0],this[1],this[2],this[3])},get x(){return this[0]},get y(){return this[1]},get z(){return this[2]},get w(){return this[3]},equals:function(v3){return this[0]===v3[0]&&this[1]===v3[1]&&this[2]===v3[2]&&this[3]===v3[3]},length:function(){return Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]+this[3]*this[3])},dot:function(v4){return this[0]*v4[0]+this[1]*v4[1]+this[2]*v4[2]+this[3]*v4[3]},normalize:function(){var length=this.length();if(length===0)return new Vector4(0,0,0,1);var inv=1/length;return new Vector4(this[0]*inv,this[1]*inv,this[2]*inv,this[3]*inv)},quaternionToAngle:function(deg){var v4=this;if(v4[3]>1)v4=v4.normalize();var w=2*Math.acos(v4[3]);var s=Math.sqrt(1-v4[3]*v4[3]);if(s<1e-4){return new Vector4(v4[0],v4[1],v4[2],w)}else{return new Vector4(v4[0]/s,v4[1]/s,v4[2]/s,deg?radToDeg(w):w)}},angleToQuaternion:function(deg){var angle=deg?degToRad(this[3]):this[3];var half=angle/2,s=Math.sin(half);return new Vector4(this[0]*s,this[1]*s,this[2]*s,Math.cos(half))},combine:function(v4,scale1,scale2){var result=new Vector4;for(var i=0;i<4;i++)result[i]=this[i]*scale1+v4[i]*scale2;return result},lerp:function(v4,delta){var scale1=delta;var scale2=1-delta;return v4.combine(this,scale1,scale2)},slerp:function(v4q,delta){var interpolated=new Vector4;var product=this.dot(v4q);product=Math.min(Math.max(product,-1),1);var scale1=1;if(product<0){product=-product;scale1=-1}var epsilon=1e-5;if(Math.abs(product-1)<epsilon){for(var i=0;i<4;++i)interpolated[i]=this[i];return interpolated}var denom=Math.sqrt(1-product*product);var theta=Math.acos(product);var w=Math.sin(delta*theta)*(1/denom);scale1*=Math.cos(delta*theta)-product*w;var scale2=w;return this.combine(v4q,scale1,scale2)}});module.exports=Vector4},{prime:4}],4:[function(require,module,exports){"use strict";var hasOwn=require("mout/object/hasOwn"),mixIn=require("mout/object/mixIn"),create=require("mout/lang/createObject"),kindOf=require("mout/lang/kindOf");var hasDescriptors=true;try{Object.defineProperty({},"~",{});Object.getOwnPropertyDescriptor({},"~")}catch(e){hasDescriptors=false}var hasEnumBug=!{valueOf:0}.propertyIsEnumerable("valueOf"),buggy=["toString","valueOf"];var verbs=/^constructor|inherits|mixin$/;var implement=function(proto){var prototype=this.prototype;for(var key in proto){if(key.match(verbs))continue;if(hasDescriptors){var descriptor=Object.getOwnPropertyDescriptor(proto,key);if(descriptor){Object.defineProperty(prototype,key,descriptor);continue}}prototype[key]=proto[key]}if(hasEnumBug)for(var i=0;key=buggy[i];i++){var value=proto[key];if(value!==Object.prototype[key])prototype[key]=value}return this};var prime=function(proto){if(kindOf(proto)==="Function")proto={constructor:proto};var superprime=proto.inherits;var constructor=hasOwn(proto,"constructor")?proto.constructor:superprime?function(){return superprime.apply(this,arguments)}:function(){};if(superprime){mixIn(constructor,superprime);var superproto=superprime.prototype;var cproto=constructor.prototype=create(superproto);constructor.parent=superproto;cproto.constructor=constructor}if(!constructor.implement)constructor.implement=implement;var mixins=proto.mixin;if(mixins){if(kindOf(mixins)!=="Array")mixins=[mixins];for(var i=0;i<mixins.length;i++)constructor.implement(create(mixins[i].prototype))}return constructor.implement(proto)};module.exports=prime},{"mout/lang/createObject":5,"mout/lang/kindOf":6,"mout/object/hasOwn":9,"mout/object/mixIn":10}],5:[function(require,module,exports){var mixIn=require("../object/mixIn");function createObject(parent,props){function F(){}F.prototype=parent;return mixIn(new F,props)}module.exports=createObject},{"../object/mixIn":10}],6:[function(require,module,exports){var _rKind=/^\[object (.*)\]$/,_toString=Object.prototype.toString,UNDEF; | |
function kindOf(val){if(val===null){return"Null"}else if(val===UNDEF){return"Undefined"}else{return _rKind.exec(_toString.call(val))[1]}}module.exports=kindOf},{}],7:[function(require,module,exports){var hasOwn=require("./hasOwn");var _hasDontEnumBug,_dontEnums;function checkDontEnum(){_dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];_hasDontEnumBug=true;for(var key in{toString:null}){_hasDontEnumBug=false}}function forIn(obj,fn,thisObj){var key,i=0;if(_hasDontEnumBug==null)checkDontEnum();for(key in obj){if(exec(fn,obj,key,thisObj)===false){break}}if(_hasDontEnumBug){var ctor=obj.constructor,isProto=!!ctor&&obj===ctor.prototype;while(key=_dontEnums[i++]){if((key!=="constructor"||!isProto&&hasOwn(obj,key))&&obj[key]!==Object.prototype[key]){if(exec(fn,obj,key,thisObj)===false){break}}}}}function exec(fn,obj,key,thisObj){return fn.call(thisObj,obj[key],key,obj)}module.exports=forIn},{"./hasOwn":9}],8:[function(require,module,exports){var hasOwn=require("./hasOwn");var forIn=require("./forIn");function forOwn(obj,fn,thisObj){forIn(obj,function(val,key){if(hasOwn(obj,key)){return fn.call(thisObj,obj[key],key,obj)}})}module.exports=forOwn},{"./forIn":7,"./hasOwn":9}],9:[function(require,module,exports){function hasOwn(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=hasOwn},{}],10:[function(require,module,exports){var forOwn=require("./forOwn");function mixIn(target,objects){var i=0,n=arguments.length,obj;while(++i<n){obj=arguments[i];if(obj!=null){forOwn(obj,copyProp,target)}}return target}function copyProp(val,key){this[key]=val}module.exports=mixIn},{"./forOwn":8}],matrix3d:[function(require,module,exports){"use strict";module.exports=require("./lib/Matrix3d")},{"./lib/Matrix3d":1}]},{},[]);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){"use strict";var prime=require("prime");var Matrix3d=require("matrix3d");var Vector3=require("matrix3d/lib/Vector3");var Vector4=require("matrix3d/lib/Vector4");var operations=require("./operations");var slice_=Array.prototype.slice;var Transform3d=prime({constructor:function Transform3d(operations){this.operations=operations||[]},append:function(operation){this.operations.push(operation);return this},isIdentity:function(){var operations=this.operations;for(var i=0;i<operations.length;i++){if(!operations[i].isIdentity())return false}return true},matrix3d:function(){return this.append(new operations.Matrix(new Matrix3d(arguments)))},matrix:function(a,b,c,d,e,f){return this.matrix3d(a,b,c,d,e,f)},translate3d:function(x,y,z){return this.append(new operations.Translate(new Vector3(x,y,z)))},translate:function(x,y){if(y==null)y=0;return this.translate3d(x,y,0)},translateX:function(x){return this.translate(x,0)},translateY:function(y){return this.translate(0,y)},translateZ:function(z){return this.translate3d(0,0,z)},scale3d:function(x,y,z){return this.append(new operations.Scale(new Vector3(x,y,z)))},scale:function(x,y){if(y==null)y=x;return this.scale3d(x,y,1)},scaleX:function(x){return this.scale(x,1)},scaleY:function(y){return this.scale(1,y)},scaleZ:function(z){return this.scale3d(1,1,z)},rotate3d:function(x,y,z,angle){return this.append(new operations.Rotate(new Vector4(x,y,z,angle)))},rotate:function(angle){return this.rotate3d(0,0,1,angle)},rotateX:function(angle){return this.rotate3d(1,0,0,angle)},rotateY:function(angle){return this.rotate3d(0,1,0,angle)},rotateZ:function(angle){return this.rotate3d(0,0,1,angle)},skew:function(x,y){if(y==null)y=0;return this.append(new operations.Skew([x,y]))},skewX:function(x){return this.skew(x,0)},skewY:function(y){return this.skew(0,y)},perspective:function(len){return this.append(new operations.Perspective(len))},interpolation:function(transform){return new TransformInterpolation(this,transform)},compose:function(){var matrix=new Matrix3d;var operations=this.operations;for(var i=0;i<operations.length;i++){matrix=matrix.concat(operations[i].compose())}return matrix},toString:function(){var string=[];var operations=this.operations;for(var i=0;i<operations.length;i++){string.push(operations[i].toString())}return string.join(" ")}});var TransformInterpolation=prime({constructor:function TransformInterpolation(from,to){var operations1=slice_.call(from.operations);var operations2=slice_.call(to.operations);var length1=operations1.length,length2=operations2.length;var operation1,operation2,i,interpolateTransform=true;if(!length1||from.isIdentity()){operations1=[];for(i=0;i<length2;i++)operations1.push(new operations[operations2[i].type]);length1=operations1.length}else if(!length2||to.isIdentity()){operations2=[];for(i=0;i<length1;i++)operations2.push(new operations[operations1[i].type]);length2=operations2.length}else if(length1===length2){for(i=0;i<length1;i++){operation1=operations1[i];operation2=operations2[i];var type1=operation1.type;var type2=operation2.type;if(type1!==type2){if(operation1.isIdentity()){operations1.splice(i,1,new operations[type2])}else if(operation2.isIdentity()){operations1.splice(i,1,new operations[type1])}else{interpolateTransform=false;break}}}}else{interpolateTransform=false}if(interpolateTransform){this.from=operations1;this.to=operations2;this.length=length1}else{this.from=[new operations.Matrix(from.compose())];this.to=[new operations.Matrix(to.compose())];this.length=1}},step:function(delta){if(delta===0)return new Transform3d(this.from);if(delta===1)return new Transform3d(this.to);var interpolated=new Transform3d;for(var i=0;i<this.length;i++){var from=this.from[i];var to=this.to[i];var operation=from.equals(to)?from:from.interpolate(to,delta);interpolated.append(operation)}return interpolated}});Transform3d.Interpolation=TransformInterpolation;module.exports=Transform3d},{"./operations":2,matrix3d:3,"matrix3d/lib/Vector3":5,"matrix3d/lib/Vector4":6,prime:7}],2:[function(require,module,exports){"use strict";var prime=require("prime");var Matrix3d=require("matrix3d");var Vector3=require("matrix3d/lib/Vector3");var Vector4=require("matrix3d/lib/Vector4");var epsilon=1e-4;var tanDeg=function(degrees){var radians=degrees*Math.PI/180;return Math.tan(radians)};var TranslateOperation=exports.Translate=prime({type:"Translate",constructor:function TranslateOperation(v3){this.value=v3||new Vector3(0,0,0)},equals:function(translateOperation){return this.value.equals(translateOperation.value)},interpolate:function(translateOperation,delta){return new TranslateOperation(this.value.lerp(translateOperation.value,delta))},isIdentity:function(){return this.value.equals(new Vector3(0,0,0))},compose:function(){return(new Matrix3d).translate(this.value)},toString:function(){var v=this.value;return"translate3d("+[v.x+"px",v.y+"px",v.z+"px"].join(", ")+")"}});var ScaleOperation=exports.Scale=prime({type:"Scale",constructor:function ScaleOperation(v3){this.value=v3||new Vector3(1,1,1)},equals:function(scaleOperation){return this.value.equals(scaleOperation.value)},interpolate:function(scaleOperation,delta){return new ScaleOperation(this.value.lerp(scaleOperation.value,delta))},isIdentity:function(){return this.value.equals(new Vector3(1,1,1))},compose:function(){return(new Matrix3d).scale(this.value)},toString:function(){var v=this.value;return"scale3d("+[v.x,v.y,v.z].join(", ")+")"}});var RotateOperation=exports.Rotate=prime({type:"Rotate",constructor:function RotateOperation(v4){this.value=v4||new Vector4(1,1,1,0)},equals:function(to){return this.value.equals(to.value)},interpolate:function(rotateOperation,delta){var from=this.value;var to=rotateOperation.value;var fromAxis=new Vector3(from.x,from.y,from.z);var toAxis=new Vector3(to.x,to.y,to.z);if(fromAxis.equals(toAxis)){return new RotateOperation(new Vector4(from.x,from.y,from.z,from.w*(1-delta)+to.w*delta))}var length1=fromAxis.length();var length2=toAxis.length();if(length1>epsilon&&length2>epsilon){var dot=fromAxis.dot(toAxis);var error=Math.abs(1-dot*dot/(length1*length2));var result=error<epsilon;if(result)return new RotateOperation(new Vector4(to.x,to.y,to.z,dot>0?from.w:-from.w))}var interpolated=from.angleToQuaternion(true).slerp(to.angleToQuaternion(true));return new RotateOperation(interpolated.quaternionToAngle(true))},isIdentity:function(){return this.value.equals(new Vector4(1,1,1,0))},compose:function(){return(new Matrix3d).rotate(this.value.angleToQuaternion(true))},toString:function(){var v=this.value;return"rotate3d("+[v.x,v.y,v.z,v.w+"deg"].join(", ")+")"}});var PerspectiveOperation=exports.Perspective=prime({type:"Perspective",constructor:function PerspectiveOperation(length){this.value=length||0},equals:function(perspectiveOperation){return this.value===perspectiveOperation.value},interpolate:function(perspectiveOperation,delta){return new PerspectiveOperation(this.value*(1-delta)+perspectiveOperation.value*delta)},isIdentity:function(){return this.value===0},compose:function(){var perspectiveMatrix=new Matrix3d;var value=this.value;if(value!==0)perspectiveMatrix.m34=-1/value;return perspectiveMatrix},toString:function(){return"perspective("+this.value+")"}});var SkewOperation=exports.Skew=prime({type:"Skew",constructor:function SkewOperation(XY){this.value=XY||[0,0]},equals:function(skewOperation){var array1=this.value;var array2=skewOperation.value;return array1[0]===array2[0]&&array1[1]===array2[1]},interpolate:function(skewOperation,delta){return new SkewOperation([this[0]*(1-delta)+skewOperation[0]*delta,this[1]*(1-delta)+skewOperation[1]*delta])},isIdentity:function(){var array=this.value;return array[0]===0&&array[1]===0},compose:function(){var value=this.value;var skewMatrix=new Matrix3d;skewMatrix.m21=tanDeg(value[0]);skewMatrix.m12=tanDeg(value[1]);return skewMatrix},toString:function(){var v=this.value;return"skewX("+v[0]+") skewY("+v[1]+")"}});var MatrixOperation=exports.Matrix=prime({type:"Matrix",constructor:function MatrixOperation(matrix,_decomposed){this.value=matrix||new Matrix3d;this.decomposed=_decomposed||this.value.decompose()},equals:function(matrixOperation){return this.value.equals(matrixOperation.value)},interpolate:function(matrixOperation,delta){var decomposed=this.decomposed.interpolate(matrixOperation.decomposed,delta);return new MatrixOperation(decomposed.compose(),decomposed)},isIdentity:function(){return this.value.isIdentity()},compose:function(){return this.value},toString:function(){return this.value.toString()}})},{matrix3d:3,"matrix3d/lib/Vector3":5,"matrix3d/lib/Vector4":6,prime:7}],3:[function(require,module,exports){"use strict";module.exports=require("./lib/Matrix3d")},{"./lib/Matrix3d":4}],4:[function(require,module,exports){"use strict";var prime=require("prime");var Vector3=require("./Vector3");var Vector4=require("./Vector4");var stringify=function(array,places){if(places==null||places>20)places=20;var strings=[];for(var i=0;i<array.length;i++)strings[i]=array[i].toFixed(10).replace(/\.?0+$/,"");return strings};var TypeMask={Identity:0,Translate:1,Scale:2,Affine:4,Perspective:8,All:15,Unknown:128};var Matrix3d=prime({constructor:function Matrix3d(){var values=arguments;if(values.length===1)values=values[0];if(!values.length)values=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];var i=0,j,k=0;if(values.length===6){var a=values[0];var b=values[1];var c=values[2];var d=values[3];var e=values[4];var f=values[5];values=[a,b,0,0,c,d,0,0,0,0,1,0,e,f,0,1]}if(values.length!==16)throw new Error("invalid matrix");for(i=0;i<4;i++){var col=this[i]=[];for(j=0;j<4;j++){col[j]=values[k++]}}},get a(){return this.m11},get b(){return this.m12},get c(){return this.m21},get d(){return this.m22},get e(){return this.m41},get f(){return this.m42},set a(value){this.m11=value},set b(value){this.m12=value},set c(value){this.m21=value},set d(value){this.m22=value},set e(value){this.m41=value},set f(value){this.m42=value},get m11(){return this[0][0]},get m12(){return this[0][1]},get m13(){return this[0][2]},get m14(){return this[0][3]},get m21(){return this[1][0]},get m22(){return this[1][1]},get m23(){return this[1][2]},get m24(){return this[1][3]},get m31(){return this[2][0]},get m32(){return this[2][1]},get m33(){return this[2][2]},get m34(){return this[2][3]},get m41(){return this[3][0]},get m42(){return this[3][1]},get m43(){return this[3][2]},get m44(){return this[3][3]},set m11(value){this[0][0]=value},set m12(value){this[0][1]=value},set m13(value){this[0][2]=value},set m14(value){this[0][3]=value},set m21(value){this[1][0]=value},set m22(value){this[1][1]=value},set m23(value){this[1][2]=value},set m24(value){this[1][3]=value},set m31(value){this[2][0]=value},set m32(value){this[2][1]=value},set m33(value){this[2][2]=value},set m34(value){this[2][3]=value},set m41(value){this[3][0]=value},set m42(value){this[3][1]=value},set m43(value){this[3][2]=value},set m44(value){this[3][3]=value},get transX(){return this[3][0]},get transY(){return this[3][1]},get transZ(){return this[3][2]},get scaleX(){return this[0][0]},get scaleY(){return this[1][1]},get scaleZ(){return this[2][2]},get perspX(){return this[0][3]},get perspY(){return this[1][3]},get perspZ(){return this[2][3]},set transX(value){this[3][0]=value},set transY(value){this[3][1]=value},set transZ(value){this[3][2]=value},set scaleX(value){this[0][0]=value},set scaleY(value){this[1][1]=value},set scaleZ(value){this[2][2]=value},set perspX(value){this[0][3]=value},set perspY(value){this[1][3]=value},set perspZ(value){this[2][3]=value},get type(){var m=this;var mask=0;if(0!==m.perspX||0!==m.perspY||0!==m.perspZ||1!==m[3][3]){return TypeMask.Translate|TypeMask.Scale|TypeMask.Affine|TypeMask.Perspective}if(0!==m.transX||0!==m.transY||0!==m.transZ){mask|=TypeMask.Translate}if(1!==m.scaleX||1!==m.scaleY||1!==m.scaleZ){mask|=TypeMask.Scale}if(0!==m[1][0]||0!==m[0][1]||0!==m[0][2]||0!==m[2][0]||0!==m[1][2]||0!==m[2][1]){mask|=TypeMask.Affine}return mask},is2d:function(){var m=this;return m.m31===0&&m.m32===0&&m.m13===0&&m.m14===0&&m.m23===0&&m.m24===0&&m.m33===1&&m.m34===0&&m.m43===0&&m.m44===1},equals:function(m2){var m1=this;return;m1.m11===m2.m11&&m1.m12===m2.m12&&m1.m13===m2.m13&&m1.m14===m2.m14&&m1.m21===m2.m21&&m1.m22===m2.m22&&m1.m23===m2.m23&&m1.m24===m2.m24&&m1.m31===m2.m31&&m1.m32===m2.m32&&m1.m33===m2.m33&&m1.m34===m2.m34&&m1.m41===m2.m41&&m1.m42===m2.m42&&m1.m43===m2.m43&&m1.m44===m2.m44},clone:function(){var m=this;return new Matrix3d(m.m11,m.m12,m.m13,m.m14,m.m21,m.m22,m.m23,m.m24,m.m31,m.m32,m.m33,m.m34,m.m41,m.m42,m.m43,m.m44)},isIdentity:function(){return this.type===TypeMask.Identity},isTranslate:function(){return!(this.type&~TypeMask.Translate)},isScaleTranslate:function(){return!(this.type&~(TypeMask.Scale|TypeMask.Translate))},concat:function(m2){if(this.isIdentity())return m2.clone();if(m2.isIdentity())return this.clone();var m=new Matrix3d;for(var j=0;j<4;j++){for(var i=0;i<4;i++){var value=0;for(var k=0;k<4;k++){value+=this[k][i]*m2[j][k]}m[j][i]=value}}return m},translate:function(v3){var translationMatrix=new Matrix3d;translationMatrix.m41=v3[0];translationMatrix.m42=v3[1];translationMatrix.m43=v3[2];return this.concat(translationMatrix)},scale:function(v3){var m=new Matrix3d;m.m11=v3[0];m.m22=v3[1];m.m33=v3[2];return this.concat(m)},rotate:function(v4q){var rotationMatrix=new Matrix3d;var x=v4q[0];var y=v4q[1];var z=v4q[2];var w=v4q[3];rotationMatrix.m11=1-2*(y*y+z*z);rotationMatrix.m21=2*(x*y-z*w);rotationMatrix.m31=2*(x*z+y*w);rotationMatrix.m12=2*(x*y+z*w);rotationMatrix.m22=1-2*(x*x+z*z);rotationMatrix.m32=2*(y*z-x*w);rotationMatrix.m13=2*(x*z-y*w);rotationMatrix.m23=2*(y*z+x*w);rotationMatrix.m33=1-2*(x*x+y*y);return this.concat(rotationMatrix)},skew:function(v3){var skewMatrix=new Matrix3d;skewMatrix[1][0]=v3[0];skewMatrix[2][0]=v3[1];skewMatrix[2][1]=v3[2];return this.concat(skewMatrix)},perspective:function(v4){var perspectiveMatrix=new Matrix3d;perspectiveMatrix.m14=v4[0];perspectiveMatrix.m24=v4[1];perspectiveMatrix.m34=v4[2];perspectiveMatrix.m44=v4[3];return this.concat(perspectiveMatrix)},map:function(v4){var result=new Vector4;for(var i=0;i<4;i++){var value=0;for(var j=0;j<4;j++){value+=this[j][i]*v4[j]}result[i]=value}return result},determinant:function(){if(this.isIdentity())return 1;if(this.isScaleTranslate())return this[0][0]*this[1][1]*this[2][2]*this[3][3];var a00=this[0][0];var a01=this[0][1];var a02=this[0][2];var a03=this[0][3];var a10=this[1][0];var a11=this[1][1];var a12=this[1][2];var a13=this[1][3];var a20=this[2][0];var a21=this[2][1];var a22=this[2][2];var a23=this[2][3];var a30=this[3][0];var a31=this[3][1];var a32=this[3][2];var a33=this[3][3];var b00=a00*a11-a01*a10;var b01=a00*a12-a02*a10;var b02=a00*a13-a03*a10;var b03=a01*a12-a02*a11;var b04=a01*a13-a03*a11;var b05=a02*a13-a03*a12;var b06=a20*a31-a21*a30;var b07=a20*a32-a22*a30;var b08=a20*a33-a23*a30;var b09=a21*a32-a22*a31;var b10=a21*a33-a23*a31;var b11=a22*a33-a23*a32;return b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06},normalize:function(){var m44=this.m44;if(m44===0)return false;var normalizedMatrix=new Matrix3d;var scale=1/m44;for(var i=0;i<4;i++)for(var j=0;j<4;j++)normalizedMatrix[j][i]=this[j][i]*scale;return normalizedMatrix},decompose:function(){var matrix=this.normalize();if(!matrix)return false;var perspectiveMatrix=matrix.clone();var i,j;for(i=0;i<3;i++)perspectiveMatrix[i][3]=0;perspectiveMatrix[3][3]=1;if(Math.abs(perspectiveMatrix.determinant())<1e-8)return false;var perspective;if(matrix[0][3]!==0||matrix[1][3]!==0||matrix[2][3]!==0){var rightHandSide=new Vector4(matrix[0][3],matrix[1][3],matrix[2][3],matrix[3][3]);var inversePerspectiveMatrix=perspectiveMatrix.invert();if(!inversePerspectiveMatrix)return false;var transposedInversePerspectiveMatrix=inversePerspectiveMatrix.transpose();perspective=transposedInversePerspectiveMatrix.map(rightHandSide)}else{perspective=new Vector4(0,0,0,1)}var translate=new Vector3;for(i=0;i<3;i++)translate[i]=matrix[3][i];var row=[];for(i=0;i<3;i++){var v3=row[i]=new Vector3;for(j=0;j<3;++j)v3[j]=matrix[i][j]}var scale=new Vector3;scale[0]=row[0].length();row[0]=row[0].normalize();var skew=new Vector3;skew[0]=row[0].dot(row[1]);row[1]=row[1].combine(row[0],1,-skew[0]);scale[1]=row[1].length();row[1]=row[1].normalize();skew[0]/=scale[1];skew[1]=row[0].dot(row[2]);row[2]=row[2].combine(row[0],1,-skew[1]);skew[2]=row[1].dot(row[2]);row[2]=row[2].combine(row[1],1,-skew[2]);scale[2]=row[2].length();row[2]=row[2].normalize();skew[1]/=scale[2];skew[2]/=scale[2];var pdum3=row[1].cross(row[2]);if(row[0].dot(pdum3)<0){for(i=0;i<3;i++){scale[i]*=-1;for(j=0;j<3;++j)row[i][j]*=-1}}var quaternion=new Vector4(.5*Math.sqrt(Math.max(1+row[0][0]-row[1][1]-row[2][2],0)),.5*Math.sqrt(Math.max(1-row[0][0]+row[1][1]-row[2][2],0)),.5*Math.sqrt(Math.max(1-row[0][0]-row[1][1]+row[2][2],0)),.5*Math.sqrt(Math.max(1+row[0][0]+row[1][1]+row[2][2],0)));if(row[2][1]>row[1][2])quaternion[0]=-quaternion[0];if(row[0][2]>row[2][0])quaternion[1]=-quaternion[1];if(row[1][0]>row[0][1])quaternion[2]=-quaternion[2];return new DecomposedMatrix(perspective,translate,quaternion,skew,scale)},invert:function(){var a00=this[0][0];var a01=this[0][1];var a02=this[0][2];var a03=this[0][3];var a10=this[1][0];var a11=this[1][1];var a12=this[1][2];var a13=this[1][3];var a20=this[2][0];var a21=this[2][1];var a22=this[2][2];var a23=this[2][3];var a30=this[3][0];var a31=this[3][1];var a32=this[3][2];var a33=this[3][3];var b00=a00*a11-a01*a10;var b01=a00*a12-a02*a10;var b02=a00*a13-a03*a10;var b03=a01*a12-a02*a11;var b04=a01*a13-a03*a11;var b05=a02*a13-a03*a12;var b06=a20*a31-a21*a30;var b07=a20*a32-a22*a30;var b08=a20*a33-a23*a30;var b09=a21*a32-a22*a31;var b10=a21*a33-a23*a31;var b11=a22*a33-a23*a32;var det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;if(det===0||!isFinite(det))return false;var invdet=1/det;b00*=invdet;b01*=invdet;b02*=invdet;b03*=invdet;b04*=invdet;b05*=invdet;b06*=invdet;b07*=invdet;b08*=invdet;b09*=invdet;b10*=invdet;b11*=invdet;return new Matrix3d(a11*b11-a12*b10+a13*b09,a02*b10-a01*b11-a03*b09,a31*b05-a32*b04+a33*b03,a22*b04-a21*b05-a23*b03,a12*b08-a10*b11-a13*b07,a00*b11-a02*b08+a03*b07,a32*b02-a30*b05-a33*b01,a20*b05-a22*b02+a23*b01,a10*b10-a11*b08+a13*b06,a01*b08-a00*b10-a03*b06,a30*b04-a31*b02+a33*b00,a21*b02-a20*b04-a23*b00,a11*b07-a10*b09-a12*b06,a00*b09-a01*b07+a02*b06,a31*b01-a30*b03-a32*b00,a20*b03-a21*b01+a22*b00)},transpose:function(){var m=this;return new Matrix3d(m.m11,m.m21,m.m31,m.m41,m.m12,m.m22,m.m32,m.m42,m.m13,m.m23,m.m33,m.m43,m.m14,m.m24,m.m34,m.m44)},interpolation:function(matrix){return new MatrixInterpolation(this,matrix)},toArray:function(){return this.is2d()?this.toArray2d():this.toArray3d()},toArray3d:function(){var m=this;return[m.m11,m.m12,m.m13,m.m14,m.m21,m.m22,m.m23,m.m24,m.m31,m.m32,m.m33,m.m34,m.m41,m.m42,m.m43,m.m44]},toArray2d:function(){var m=this;return[m.a,m.b,m.c,m.d,m.e,m.f]},toString:function(places){return this.is2d()?this.toString2d(places):this.toString3d(places)},toString3d:function(places){return"matrix3d("+stringify(this.toArray3d()).join(", ")+")"},toString2d:function(places){return"matrix("+stringify(this.toArray2d()).join(", ")+")"}});var DecomposedMatrix=prime({constructor:function DecomposedMatrix(perspective,translate,quaternion,skew,scale){this.perspective=perspective;this.translate=translate;this.quaternion=quaternion;this.skew=skew;this.scale=scale},interpolate:function(to,delta){var from=this;var perspective=from.perspective.lerp(to.perspective,delta);var translate=from.translate.lerp(to.translate,delta);var quaternion=from.quaternion.slerp(to.quaternion,delta);var skew=from.skew.lerp(to.skew,delta);var scale=from.scale.lerp(to.scale,delta);return new DecomposedMatrix(perspective,translate,quaternion,skew,scale)},compose:function(){return(new Matrix3d).perspective(this.perspective).translate(this.translate).rotate(this.quaternion).skew(this.skew).scale(this.scale)}});var MatrixInterpolation=prime({constructor:function MatrixInterpolation(from,to){this.matrix1=from;this.matrix2=to;this.from=from.decompose();this.to=to.decompose()},step:function(delta){if(delta===0)return this.matrix1;if(delta===1)return this.matrix2;return this.from.interpolate(this.to,delta).compose()}});Matrix3d.Decomposed=DecomposedMatrix;Matrix3d.Interpolation=MatrixInterpolation;module.exports=Matrix3d},{"./Vector3":5,"./Vector4":6,prime:7}],5:[function(require,module,exports){"use strict";var prime=require("prime");var Vector3=prime({constructor:function Vector3(x,y,z){this[0]=x||0;this[1]=y||0;this[2]=z||0},clone:function(){return new Vector3(this[0],this[1],this[2])},get x(){return this[0]},get y(){return this[1]},get z(){return this[2]},equals:function(v3){return this[0]===v3[0]&&this[1]===v3[1]&&this[2]===v3[2]},length:function(){return Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2])},normalize:function(){var length=this.length();if(length===0)return new Vector3;return new Vector3(this[0]/length,this[1]/length,this[2]/length)},dot:function(v3){return this[0]*v3[0]+this[1]*v3[1]+this[2]*v3[2]},cross:function(v3){var x=this[0],y=this[1],z=this[2];return new Vector3(y*v3[2]-z*v3[1],z*v3[0]-x*v3[2],x*v3[1]-y*v3[0])},lerp:function(v3,delta){var scale1=delta;var scale2=1-delta;return v3.combine(this,scale1,scale2)},combine:function(v3,scale1,scale2){var result=new Vector3;for(var i=0;i<3;i++)result[i]=this[i]*scale1+v3[i]*scale2;return result}});module.exports=Vector3},{prime:7}],6:[function(require,module,exports){"use strict";var prime=require("prime");var degToRad=function(degrees){return degrees*Math.PI/180};var radToDeg=function(radians){return radians*180/Math.PI};var Vector4=prime({constructor:function Vector4(x,y,z,w){this[0]=x||0;this[1]=y||0;this[2]=z||0;this[3]=w||0},clone:function(){return new Vector4(this[0],this[1],this[2],this[3])},get x(){return this[0]},get y(){return this[1]},get z(){return this[2]},get w(){return this[3]},equals:function(v3){return this[0]===v3[0]&&this[1]===v3[1]&&this[2]===v3[2]&&this[3]===v3[3]},length:function(){return Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]+this[3]*this[3])},dot:function(v4){return this[0]*v4[0]+this[1]*v4[1]+this[2]*v4[2]+this[3]*v4[3]},normalize:function(){var length=this.length();if(length===0)return new Vector4(0,0,0,1);var inv=1/length;return new Vector4(this[0]*inv,this[1]*inv,this[2]*inv,this[3]*inv)},quaternionToAngle:function(deg){var v4=this;if(v4[3]>1)v4=v4.normalize();var w=2*Math.acos(v4[3]);var s=Math.sqrt(1-v4[3]*v4[3]);if(s<1e-4){return new Vector4(v4[0],v4[1],v4[2],w)}else{return new Vector4(v4[0]/s,v4[1]/s,v4[2]/s,deg?radToDeg(w):w)}},angleToQuaternion:function(deg){var angle=deg?degToRad(this[3]):this[3];var half=angle/2,s=Math.sin(half);return new Vector4(this[0]*s,this[1]*s,this[2]*s,Math.cos(half))},combine:function(v4,scale1,scale2){var result=new Vector4;for(var i=0;i<4;i++)result[i]=this[i]*scale1+v4[i]*scale2;return result},lerp:function(v4,delta){var scale1=delta;var scale2=1-delta;return v4.combine(this,scale1,scale2)},slerp:function(v4q,delta){var interpolated=new Vector4;var product=this.dot(v4q);product=Math.min(Math.max(product,-1),1);var scale1=1;if(product<0){product=-product;scale1=-1}var epsilon=1e-5;if(Math.abs(product-1)<epsilon){for(var i=0;i<4;++i)interpolated[i]=this[i];return interpolated}var denom=Math.sqrt(1-product*product);var theta=Math.acos(product);var w=Math.sin(delta*theta)*(1/denom);scale1*=Math.cos(delta*theta)-product*w;var scale2=w;return this.combine(v4q,scale1,scale2)}});module.exports=Vector4},{prime:7}],7:[function(require,module,exports){"use strict";var hasOwn=require("mout/object/hasOwn"),mixIn=require("mout/object/mixIn"),create=require("mout/lang/createObject"),kindOf=require("mout/lang/kindOf");var hasDescriptors=true;try{Object.defineProperty({},"~",{});Object.getOwnPropertyDescriptor({},"~")}catch(e){hasDescriptors=false}var hasEnumBug=!{valueOf:0}.propertyIsEnumerable("valueOf"),buggy=["toString","valueOf"];var verbs=/^constructor|inherits|mixin$/;var implement=function(proto){var prototype=this.prototype;for(var key in proto){if(key.match(verbs))continue;if(hasDescriptors){var descriptor=Object.getOwnPropertyDescriptor(proto,key);if(descriptor){Object.defineProperty(prototype,key,descriptor);continue}}prototype[key]=proto[key]}if(hasEnumBug)for(var i=0;key=buggy[i];i++){var value=proto[key];if(value!==Object.prototype[key])prototype[key]=value}return this};var prime=function(proto){if(kindOf(proto)==="Function")proto={constructor:proto};var superprime=proto.inherits;var constructor=hasOwn(proto,"constructor")?proto.constructor:superprime?function(){return superprime.apply(this,arguments)}:function(){};if(superprime){mixIn(constructor,superprime);var superproto=superprime.prototype;var cproto=constructor.prototype=create(superproto);constructor.parent=superproto;cproto.constructor=constructor}if(!constructor.implement)constructor.implement=implement;var mixins=proto.mixin;if(mixins){if(kindOf(mixins)!=="Array")mixins=[mixins];for(var i=0;i<mixins.length;i++)constructor.implement(create(mixins[i].prototype))}return constructor.implement(proto)};module.exports=prime},{"mout/lang/createObject":8,"mout/lang/kindOf":9,"mout/object/hasOwn":12,"mout/object/mixIn":13}],8:[function(require,module,exports){var mixIn=require("../object/mixIn");function createObject(parent,props){function F(){}F.prototype=parent;return mixIn(new F,props)}module.exports=createObject},{"../object/mixIn":13}],9:[function(require,module,exports){var _rKind=/^\[object (.*)\]$/,_toString=Object.prototype.toString,UNDEF;function kindOf(val){if(val===null){return"Null"}else if(val===UNDEF){return"Undefined"}else{return _rKind.exec(_toString.call(val))[1]}}module.exports=kindOf},{}],10:[function(require,module,exports){var hasOwn=require("./hasOwn");var _hasDontEnumBug,_dontEnums;function checkDontEnum(){_dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];_hasDontEnumBug=true;for(var key in{toString:null}){_hasDontEnumBug=false}}function forIn(obj,fn,thisObj){var key,i=0;if(_hasDontEnumBug==null)checkDontEnum();for(key in obj){if(exec(fn,obj,key,thisObj)===false){break}}if(_hasDontEnumBug){var ctor=obj.constructor,isProto=!!ctor&&obj===ctor.prototype;while(key=_dontEnums[i++]){if((key!=="constructor"||!isProto&&hasOwn(obj,key))&&obj[key]!==Object.prototype[key]){if(exec(fn,obj,key,thisObj)===false){break}}}}}function exec(fn,obj,key,thisObj){return fn.call(thisObj,obj[key],key,obj)}module.exports=forIn},{"./hasOwn":12}],11:[function(require,module,exports){var hasOwn=require("./hasOwn");var forIn=require("./forIn");function forOwn(obj,fn,thisObj){forIn(obj,function(val,key){if(hasOwn(obj,key)){return fn.call(thisObj,obj[key],key,obj)}})}module.exports=forOwn},{"./forIn":10,"./hasOwn":12}],12:[function(require,module,exports){function hasOwn(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=hasOwn},{}],13:[function(require,module,exports){var forOwn=require("./forOwn");function mixIn(target,objects){var i=0,n=arguments.length,obj;while(++i<n){obj=arguments[i];if(obj!=null){forOwn(obj,copyProp,target)}}return target}function copyProp(val,key){this[key]=val}module.exports=mixIn},{"./forOwn":11}],transform3d:[function(require,module,exports){"use strict";module.exports=require("./lib/Transform3d")},{"./lib/Transform3d":1}]},{},[]);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 process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canMutationObserver=typeof window!=="undefined"&&window.MutationObserver;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}var queue=[];if(canMutationObserver){var hiddenDiv=document.createElement("div");var observer=new MutationObserver(function(){var queueList=queue.slice();queue.length=0;queueList.forEach(function(fn){fn()})});observer.observe(hiddenDiv,{attributes:true});return function nextTick(fn){if(!queue.length){hiddenDiv.setAttribute("yes","no")}queue.push(fn)}}if(canPost){window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],2:[function(require,module,exports){"use strict";var prime=require("prime");var forEach=require("mout/array/forEach"),map=require("mout/array/map"),filter=require("mout/array/filter"),every=require("mout/array/every"),some=require("mout/array/some");var index=0,__dc=document.__counter,counter=document.__counter=(__dc?parseInt(__dc,36)+1:0).toString(36),key="uid:"+counter; | |
var uniqueID=function(n){if(n===window)return"window";if(n===document)return"document";if(n===document.documentElement)return"html";return n[key]||(n[key]=(index++).toString(36))};var instances={};var $=prime({constructor:function $(n,context){if(n==null)return this&&this.constructor===$?new Elements:null;var self,uid;if(n.constructor!==Elements){self=new Elements;if(typeof n==="string"){if(!self.search)return null;self[self.length++]=context||document;return self.search(n)}if(n.nodeType||n===window){self[self.length++]=n}else if(n.length){var uniques={};for(var i=0,l=n.length;i<l;i++){var nodes=$(n[i],context);if(nodes&&nodes.length)for(var j=0,k=nodes.length;j<k;j++){var node=nodes[j];uid=uniqueID(node);if(!uniques[uid]){self[self.length++]=node;uniques[uid]=true}}}}}else{self=n}if(!self.length)return null;if(self.length===1){uid=uniqueID(self[0]);return instances[uid]||(instances[uid]=self)}return self}});var Elements=prime({inherits:$,constructor:function Elements(){this.length=0},unlink:function(){return this.map(function(node){delete instances[uniqueID(node)];return node})},forEach:function(method,context){forEach(this,method,context);return this},map:function(method,context){return map(this,method,context)},filter:function(method,context){return filter(this,method,context)},every:function(method,context){return every(this,method,context)},some:function(method,context){return some(this,method,context)}});module.exports=$},{"mout/array/every":4,"mout/array/filter":5,"mout/array/forEach":6,"mout/array/map":8,"mout/array/some":9,prime:25}],3:[function(require,module,exports){"use strict";var Emitter=require("prime/emitter");var $=require("./base");var html=document.documentElement;var addEventListener=html.addEventListener?function(node,event,handle,useCapture){node.addEventListener(event,handle,useCapture||false);return handle}:function(node,event,handle){node.attachEvent("on"+event,handle);return handle};var removeEventListener=html.removeEventListener?function(node,event,handle,useCapture){node.removeEventListener(event,handle,useCapture||false)}:function(node,event,handle){node.detachEvent("on"+event,handle)};$.implement({on:function(event,handle,useCapture){return this.forEach(function(node){var self=$(node);var internalEvent=event+(useCapture?":capture":"");Emitter.prototype.on.call(self,internalEvent,handle);var domListeners=self._domListeners||(self._domListeners={});if(!domListeners[internalEvent])domListeners[internalEvent]=addEventListener(node,event,function(e){Emitter.prototype.emit.call(self,internalEvent,e||window.event,Emitter.EMIT_SYNC)},useCapture)})},off:function(event,handle,useCapture){return this.forEach(function(node){var self=$(node);var internalEvent=event+(useCapture?":capture":"");var domListeners=self._domListeners,domEvent,listeners=self._listeners,events;if(domListeners&&(domEvent=domListeners[internalEvent])&&listeners&&(events=listeners[internalEvent])){Emitter.prototype.off.call(self,internalEvent,handle);if(!self._listeners||!self._listeners[event]){removeEventListener(node,event,domEvent);delete domListeners[event];for(var l in domListeners)return;delete self._domListeners}}})},emit:function(){var args=arguments;return this.forEach(function(node){Emitter.prototype.emit.apply($(node),args)})}});module.exports=$},{"./base":2,"prime/emitter":24}],4:[function(require,module,exports){var makeIterator=require("../function/makeIterator_");function every(arr,callback,thisObj){callback=makeIterator(callback,thisObj);var result=true;if(arr==null){return result}var i=-1,len=arr.length;while(++i<len){if(!callback(arr[i],i,arr)){result=false;break}}return result}module.exports=every},{"../function/makeIterator_":11}],5:[function(require,module,exports){var makeIterator=require("../function/makeIterator_");function filter(arr,callback,thisObj){callback=makeIterator(callback,thisObj);var results=[];if(arr==null){return results}var i=-1,len=arr.length,value;while(++i<len){value=arr[i];if(callback(value,i,arr)){results.push(value)}}return results}module.exports=filter},{"../function/makeIterator_":11}],6:[function(require,module,exports){function forEach(arr,callback,thisObj){if(arr==null){return}var i=-1,len=arr.length;while(++i<len){if(callback.call(thisObj,arr[i],i,arr)===false){break}}}module.exports=forEach},{}],7:[function(require,module,exports){function indexOf(arr,item,fromIndex){fromIndex=fromIndex||0;if(arr==null){return-1}var len=arr.length,i=fromIndex<0?len+fromIndex:fromIndex;while(i<len){if(arr[i]===item){return i}i++}return-1}module.exports=indexOf},{}],8:[function(require,module,exports){var makeIterator=require("../function/makeIterator_");function map(arr,callback,thisObj){callback=makeIterator(callback,thisObj);var results=[];if(arr==null){return results}var i=-1,len=arr.length;while(++i<len){results[i]=callback(arr[i],i,arr)}return results}module.exports=map},{"../function/makeIterator_":11}],9:[function(require,module,exports){var makeIterator=require("../function/makeIterator_");function some(arr,callback,thisObj){callback=makeIterator(callback,thisObj);var result=false;if(arr==null){return result}var i=-1,len=arr.length;while(++i<len){if(callback(arr[i],i,arr)){result=true;break}}return result}module.exports=some},{"../function/makeIterator_":11}],10:[function(require,module,exports){function identity(val){return val}module.exports=identity},{}],11:[function(require,module,exports){var identity=require("./identity");var prop=require("./prop");var deepMatches=require("../object/deepMatches");function makeIterator(src,thisObj){if(src==null){return identity}switch(typeof src){case"function":return typeof thisObj!=="undefined"?function(val,i,arr){return src.call(thisObj,val,i,arr)}:src;case"object":return function(val){return deepMatches(val,src)};case"string":case"number":return prop(src)}}module.exports=makeIterator},{"../object/deepMatches":17,"./identity":10,"./prop":12}],12:[function(require,module,exports){function prop(name){return function(obj){return obj[name]}}module.exports=prop},{}],13:[function(require,module,exports){var mixIn=require("../object/mixIn");function createObject(parent,props){function F(){}F.prototype=parent;return mixIn(new F,props)}module.exports=createObject},{"../object/mixIn":21}],14:[function(require,module,exports){var isKind=require("./isKind");var isArray=Array.isArray||function(val){return isKind(val,"Array")};module.exports=isArray},{"./isKind":15}],15:[function(require,module,exports){var kindOf=require("./kindOf");function isKind(val,kind){return kindOf(val)===kind}module.exports=isKind},{"./kindOf":16}],16:[function(require,module,exports){var _rKind=/^\[object (.*)\]$/,_toString=Object.prototype.toString,UNDEF;function kindOf(val){if(val===null){return"Null"}else if(val===UNDEF){return"Undefined"}else{return _rKind.exec(_toString.call(val))[1]}}module.exports=kindOf},{}],17:[function(require,module,exports){var forOwn=require("./forOwn");var isArray=require("../lang/isArray");function containsMatch(array,pattern){var i=-1,length=array.length;while(++i<length){if(deepMatches(array[i],pattern)){return true}}return false}function matchArray(target,pattern){var i=-1,patternLength=pattern.length;while(++i<patternLength){if(!containsMatch(target,pattern[i])){return false}}return true}function matchObject(target,pattern){var result=true;forOwn(pattern,function(val,key){if(!deepMatches(target[key],val)){return result=false}});return result}function deepMatches(target,pattern){if(target&&typeof target==="object"){if(isArray(target)&&isArray(pattern)){return matchArray(target,pattern)}else{return matchObject(target,pattern)}}else{return target===pattern}}module.exports=deepMatches},{"../lang/isArray":14,"./forOwn":19}],18:[function(require,module,exports){var hasOwn=require("./hasOwn");var _hasDontEnumBug,_dontEnums;function checkDontEnum(){_dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];_hasDontEnumBug=true;for(var key in{toString:null}){_hasDontEnumBug=false}}function forIn(obj,fn,thisObj){var key,i=0;if(_hasDontEnumBug==null)checkDontEnum();for(key in obj){if(exec(fn,obj,key,thisObj)===false){break}}if(_hasDontEnumBug){var ctor=obj.constructor,isProto=!!ctor&&obj===ctor.prototype;while(key=_dontEnums[i++]){if((key!=="constructor"||!isProto&&hasOwn(obj,key))&&obj[key]!==Object.prototype[key]){if(exec(fn,obj,key,thisObj)===false){break}}}}}function exec(fn,obj,key,thisObj){return fn.call(thisObj,obj[key],key,obj)}module.exports=forIn},{"./hasOwn":20}],19:[function(require,module,exports){var hasOwn=require("./hasOwn");var forIn=require("./forIn");function forOwn(obj,fn,thisObj){forIn(obj,function(val,key){if(hasOwn(obj,key)){return fn.call(thisObj,obj[key],key,obj)}})}module.exports=forOwn},{"./forIn":18,"./hasOwn":20}],20:[function(require,module,exports){function hasOwn(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=hasOwn},{}],21:[function(require,module,exports){var forOwn=require("./forOwn");function mixIn(target,objects){var i=0,n=arguments.length,obj;while(++i<n){obj=arguments[i];if(obj!=null){forOwn(obj,copyProp,target)}}return target}function copyProp(val,key){this[key]=val}module.exports=mixIn},{"./forOwn":19}],22:[function(require,module,exports){function now(){return now.get()}now.get=typeof Date.now==="function"?Date.now:function(){return+new Date};module.exports=now},{}],23:[function(require,module,exports){(function(process,global){"use strict";var kindOf=require("mout/lang/kindOf"),now=require("mout/time/now"),forEach=require("mout/array/forEach"),indexOf=require("mout/array/indexOf");var callbacks={timeout:{},frame:[],immediate:[]};var push=function(collection,callback,context,defer){var iterator=function(){iterate(collection)};if(!collection.length)defer(iterator);var entry={callback:callback,context:context};collection.push(entry);return function(){var io=indexOf(collection,entry);if(io>-1)collection.splice(io,1)}};var iterate=function(collection){var time=now();forEach(collection.splice(0),function(entry){entry.callback.call(entry.context,time)})};var defer=function(callback,argument,context){return kindOf(argument)==="Number"?defer.timeout(callback,argument,context):defer.immediate(callback,argument)};if(global.process&&process.nextTick){defer.immediate=function(callback,context){return push(callbacks.immediate,callback,context,process.nextTick)}}else if(global.setImmediate){defer.immediate=function(callback,context){return push(callbacks.immediate,callback,context,setImmediate)}}else if(global.postMessage&&global.addEventListener){addEventListener("message",function(event){if(event.source===global&&event.data==="@deferred"){event.stopPropagation();iterate(callbacks.immediate)}},true);defer.immediate=function(callback,context){return push(callbacks.immediate,callback,context,function(){postMessage("@deferred","*")})}}else{defer.immediate=function(callback,context){return push(callbacks.immediate,callback,context,function(iterator){setTimeout(iterator,0)})}}var requestAnimationFrame=global.requestAnimationFrame||global.webkitRequestAnimationFrame||global.mozRequestAnimationFrame||global.oRequestAnimationFrame||global.msRequestAnimationFrame||function(callback){setTimeout(callback,1e3/60)};defer.frame=function(callback,context){return push(callbacks.frame,callback,context,requestAnimationFrame)};var clear;defer.timeout=function(callback,ms,context){var ct=callbacks.timeout;if(!clear)clear=defer.immediate(function(){clear=null;callbacks.timeout={}});return push(ct[ms]||(ct[ms]=[]),callback,context,function(iterator){setTimeout(iterator,ms)})};module.exports=defer}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{_process:1,"mout/array/forEach":6,"mout/array/indexOf":7,"mout/lang/kindOf":16,"mout/time/now":22}],24:[function(require,module,exports){"use strict";var indexOf=require("mout/array/indexOf"),forEach=require("mout/array/forEach");var prime=require("./index"),defer=require("./defer");var slice=Array.prototype.slice;var Emitter=prime({on:function(event,fn){var listeners=this._listeners||(this._listeners={}),events=listeners[event]||(listeners[event]=[]);if(indexOf(events,fn)===-1)events.push(fn);return this},off:function(event,fn){var listeners=this._listeners,events,key,length=0;if(listeners&&(events=listeners[event])){var io=indexOf(events,fn);if(io>-1)events.splice(io,1);if(!events.length)delete listeners[event];for(var l in listeners)return this;delete this._listeners}return this},emit:function(event){var self=this,args=slice.call(arguments,1);var emit=function(){var listeners=self._listeners,events;if(listeners&&(events=listeners[event])){forEach(events.slice(0),function(event){return event.apply(self,args)})}};if(args[args.length-1]===Emitter.EMIT_SYNC){args.pop();emit()}else{defer(emit)}return this}});Emitter.EMIT_SYNC={};module.exports=Emitter},{"./defer":23,"./index":25,"mout/array/forEach":6,"mout/array/indexOf":7}],25:[function(require,module,exports){"use strict";var hasOwn=require("mout/object/hasOwn"),mixIn=require("mout/object/mixIn"),create=require("mout/lang/createObject"),kindOf=require("mout/lang/kindOf");var hasDescriptors=true;try{Object.defineProperty({},"~",{});Object.getOwnPropertyDescriptor({},"~")}catch(e){hasDescriptors=false}var hasEnumBug=!{valueOf:0}.propertyIsEnumerable("valueOf"),buggy=["toString","valueOf"];var verbs=/^constructor|inherits|mixin$/;var implement=function(proto){var prototype=this.prototype;for(var key in proto){if(key.match(verbs))continue;if(hasDescriptors){var descriptor=Object.getOwnPropertyDescriptor(proto,key);if(descriptor){Object.defineProperty(prototype,key,descriptor);continue}}prototype[key]=proto[key]}if(hasEnumBug)for(var i=0;key=buggy[i];i++){var value=proto[key];if(value!==Object.prototype[key])prototype[key]=value}return this};var prime=function(proto){if(kindOf(proto)==="Function")proto={constructor:proto};var superprime=proto.inherits;var constructor=hasOwn(proto,"constructor")?proto.constructor:superprime?function(){return superprime.apply(this,arguments)}:function(){};if(superprime){mixIn(constructor,superprime);var superproto=superprime.prototype;var cproto=constructor.prototype=create(superproto);constructor.parent=superproto;cproto.constructor=constructor}if(!constructor.implement)constructor.implement=implement;var mixins=proto.mixin;if(mixins){if(kindOf(mixins)!=="Array")mixins=[mixins];for(var i=0;i<mixins.length;i++)constructor.implement(create(mixins[i].prototype))}return constructor.implement(proto)};module.exports=prime},{"mout/lang/createObject":13,"mout/lang/kindOf":16,"mout/object/hasOwn":20,"mout/object/mixIn":21}],"elements/domready":[function(require,module,exports){"use strict";var $=require("./events");var readystatechange="onreadystatechange"in document,shouldPoll=false,loaded=false,readys=[],checks=[],ready=null,timer=null,test=document.createElement("div"),doc=$(document),win=$(window);var domready=function(){if(timer)timer=clearTimeout(timer);if(!loaded){if(readystatechange)doc.off("readystatechange",check);doc.off("DOMContentLoaded",domready);win.off("load",domready);loaded=true;for(var i=0;ready=readys[i++];)ready()}return loaded};var check=function(){for(var i=checks.length;i--;)if(checks[i]())return domready();return false};var poll=function(){clearTimeout(timer);if(!check())timer=setTimeout(poll,1e3/60)};if(document.readyState){var complete=function(){return!!/loaded|complete/.test(document.readyState)};checks.push(complete);if(!complete()){if(readystatechange)doc.on("readystatechange",check);else shouldPoll=true}else{domready()}}if(test.doScroll){var scrolls=function(){try{test.doScroll();return true}catch(e){}return false};if(!scrolls()){checks.push(scrolls);shouldPoll=true}}if(shouldPoll)poll();doc.on("DOMContentLoaded",domready);win.on("load",domready);module.exports=function(ready){loaded?ready():readys.push(ready);return null}},{"./events":3}]},{},[]);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){"use strict";var hasOwn=require("mout/object/hasOwn"),mixIn=require("mout/object/mixIn"),create=require("mout/lang/createObject"),kindOf=require("mout/lang/kindOf");var hasDescriptors=true;try{Object.defineProperty({},"~",{});Object.getOwnPropertyDescriptor({},"~")}catch(e){hasDescriptors=false}var hasEnumBug=!{valueOf:0}.propertyIsEnumerable("valueOf"),buggy=["toString","valueOf"];var verbs=/^constructor|inherits|mixin$/;var implement=function(proto){var prototype=this.prototype;for(var key in proto){if(key.match(verbs))continue;if(hasDescriptors){var descriptor=Object.getOwnPropertyDescriptor(proto,key);if(descriptor){Object.defineProperty(prototype,key,descriptor);continue}}prototype[key]=proto[key]}if(hasEnumBug)for(var i=0;key=buggy[i];i++){var value=proto[key];if(value!==Object.prototype[key])prototype[key]=value}return this};var prime=function(proto){if(kindOf(proto)==="Function")proto={constructor:proto};var superprime=proto.inherits;var constructor=hasOwn(proto,"constructor")?proto.constructor:superprime?function(){return superprime.apply(this,arguments)}:function(){};if(superprime){mixIn(constructor,superprime);var superproto=superprime.prototype;var cproto=constructor.prototype=create(superproto);constructor.parent=superproto;cproto.constructor=constructor}if(!constructor.implement)constructor.implement=implement;var mixins=proto.mixin;if(mixins){if(kindOf(mixins)!=="Array")mixins=[mixins];for(var i=0;i<mixins.length;i++)constructor.implement(create(mixins[i].prototype))}return constructor.implement(proto)};module.exports=prime},{"mout/lang/createObject":2,"mout/lang/kindOf":3,"mout/object/hasOwn":6,"mout/object/mixIn":7}],2:[function(require,module,exports){var mixIn=require("../object/mixIn");function createObject(parent,props){function F(){}F.prototype=parent;return mixIn(new F,props)}module.exports=createObject},{"../object/mixIn":7}],3:[function(require,module,exports){var _rKind=/^\[object (.*)\]$/,_toString=Object.prototype.toString,UNDEF;function kindOf(val){if(val===null){return"Null"}else if(val===UNDEF){return"Undefined"}else{return _rKind.exec(_toString.call(val))[1]}}module.exports=kindOf},{}],4:[function(require,module,exports){var hasOwn=require("./hasOwn");var _hasDontEnumBug,_dontEnums;function checkDontEnum(){_dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];_hasDontEnumBug=true;for(var key in{toString:null}){_hasDontEnumBug=false}}function forIn(obj,fn,thisObj){var key,i=0;if(_hasDontEnumBug==null)checkDontEnum();for(key in obj){if(exec(fn,obj,key,thisObj)===false){break}}if(_hasDontEnumBug){var ctor=obj.constructor,isProto=!!ctor&&obj===ctor.prototype;while(key=_dontEnums[i++]){if((key!=="constructor"||!isProto&&hasOwn(obj,key))&&obj[key]!==Object.prototype[key]){if(exec(fn,obj,key,thisObj)===false){break}}}}}function exec(fn,obj,key,thisObj){return fn.call(thisObj,obj[key],key,obj)}module.exports=forIn},{"./hasOwn":6}],5:[function(require,module,exports){var hasOwn=require("./hasOwn");var forIn=require("./forIn");function forOwn(obj,fn,thisObj){forIn(obj,function(val,key){if(hasOwn(obj,key)){return fn.call(thisObj,obj[key],key,obj)}})}module.exports=forOwn},{"./forIn":4,"./hasOwn":6}],6:[function(require,module,exports){function hasOwn(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=hasOwn},{}],7:[function(require,module,exports){var forOwn=require("./forOwn");function mixIn(target,objects){var i=0,n=arguments.length,obj;while(++i<n){obj=arguments[i];if(obj!=null){forOwn(obj,copyProp,target)}}return target}function copyProp(val,key){this[key]=val}module.exports=mixIn},{"./forOwn":5}],"matrix3d/lib/Vector3":[function(require,module,exports){"use strict";var prime=require("prime");var Vector3=prime({constructor:function Vector3(x,y,z){this[0]=x||0;this[1]=y||0;this[2]=z||0},clone:function(){return new Vector3(this[0],this[1],this[2])},get x(){return this[0]},get y(){return this[1]},get z(){return this[2]},equals:function(v3){return this[0]===v3[0]&&this[1]===v3[1]&&this[2]===v3[2]},length:function(){return Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2])},normalize:function(){var length=this.length();if(length===0)return new Vector3;return new Vector3(this[0]/length,this[1]/length,this[2]/length)},dot:function(v3){return this[0]*v3[0]+this[1]*v3[1]+this[2]*v3[2]},cross:function(v3){var x=this[0],y=this[1],z=this[2];return new Vector3(y*v3[2]-z*v3[1],z*v3[0]-x*v3[2],x*v3[1]-y*v3[0])},lerp:function(v3,delta){var scale1=delta;var scale2=1-delta;return v3.combine(this,scale1,scale2)},combine:function(v3,scale1,scale2){var result=new Vector3;for(var i=0;i<3;i++)result[i]=this[i]*scale1+v3[i]*scale2;return result}});module.exports=Vector3},{prime:1}]},{},[]);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){"use strict";var hasOwn=require("mout/object/hasOwn"),mixIn=require("mout/object/mixIn"),create=require("mout/lang/createObject"),kindOf=require("mout/lang/kindOf");var hasDescriptors=true;try{Object.defineProperty({},"~",{});Object.getOwnPropertyDescriptor({},"~")}catch(e){hasDescriptors=false}var hasEnumBug=!{valueOf:0}.propertyIsEnumerable("valueOf"),buggy=["toString","valueOf"];var verbs=/^constructor|inherits|mixin$/;var implement=function(proto){var prototype=this.prototype;for(var key in proto){if(key.match(verbs))continue;if(hasDescriptors){var descriptor=Object.getOwnPropertyDescriptor(proto,key);if(descriptor){Object.defineProperty(prototype,key,descriptor);continue}}prototype[key]=proto[key]}if(hasEnumBug)for(var i=0;key=buggy[i];i++){var value=proto[key];if(value!==Object.prototype[key])prototype[key]=value}return this};var prime=function(proto){if(kindOf(proto)==="Function")proto={constructor:proto};var superprime=proto.inherits;var constructor=hasOwn(proto,"constructor")?proto.constructor:superprime?function(){return superprime.apply(this,arguments)}:function(){};if(superprime){mixIn(constructor,superprime);var superproto=superprime.prototype;var cproto=constructor.prototype=create(superproto);constructor.parent=superproto;cproto.constructor=constructor}if(!constructor.implement)constructor.implement=implement;var mixins=proto.mixin;if(mixins){if(kindOf(mixins)!=="Array")mixins=[mixins];for(var i=0;i<mixins.length;i++)constructor.implement(create(mixins[i].prototype))}return constructor.implement(proto)};module.exports=prime},{"mout/lang/createObject":2,"mout/lang/kindOf":3,"mout/object/hasOwn":6,"mout/object/mixIn":7}],2:[function(require,module,exports){var mixIn=require("../object/mixIn");function createObject(parent,props){function F(){}F.prototype=parent;return mixIn(new F,props)}module.exports=createObject},{"../object/mixIn":7}],3:[function(require,module,exports){var _rKind=/^\[object (.*)\]$/,_toString=Object.prototype.toString,UNDEF;function kindOf(val){if(val===null){return"Null"}else if(val===UNDEF){return"Undefined"}else{return _rKind.exec(_toString.call(val))[1]}}module.exports=kindOf},{}],4:[function(require,module,exports){var hasOwn=require("./hasOwn");var _hasDontEnumBug,_dontEnums;function checkDontEnum(){_dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];_hasDontEnumBug=true;for(var key in{toString:null}){_hasDontEnumBug=false}}function forIn(obj,fn,thisObj){var key,i=0;if(_hasDontEnumBug==null)checkDontEnum();for(key in obj){if(exec(fn,obj,key,thisObj)===false){break}}if(_hasDontEnumBug){var ctor=obj.constructor,isProto=!!ctor&&obj===ctor.prototype;while(key=_dontEnums[i++]){if((key!=="constructor"||!isProto&&hasOwn(obj,key))&&obj[key]!==Object.prototype[key]){if(exec(fn,obj,key,thisObj)===false){break}}}}}function exec(fn,obj,key,thisObj){return fn.call(thisObj,obj[key],key,obj)}module.exports=forIn},{"./hasOwn":6}],5:[function(require,module,exports){var hasOwn=require("./hasOwn");var forIn=require("./forIn");function forOwn(obj,fn,thisObj){forIn(obj,function(val,key){if(hasOwn(obj,key)){return fn.call(thisObj,obj[key],key,obj)}})}module.exports=forOwn},{"./forIn":4,"./hasOwn":6}],6:[function(require,module,exports){function hasOwn(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=hasOwn},{}],7:[function(require,module,exports){var forOwn=require("./forOwn");function mixIn(target,objects){var i=0,n=arguments.length,obj;while(++i<n){obj=arguments[i];if(obj!=null){forOwn(obj,copyProp,target)}}return target}function copyProp(val,key){this[key]=val}module.exports=mixIn},{"./forOwn":5}],"matrix3d/lib/Vector4":[function(require,module,exports){"use strict";var prime=require("prime");var degToRad=function(degrees){return degrees*Math.PI/180};var radToDeg=function(radians){return radians*180/Math.PI};var Vector4=prime({constructor:function Vector4(x,y,z,w){this[0]=x||0;this[1]=y||0;this[2]=z||0;this[3]=w||0},clone:function(){return new Vector4(this[0],this[1],this[2],this[3])},get x(){return this[0]},get y(){return this[1]},get z(){return this[2]},get w(){return this[3]},equals:function(v3){return this[0]===v3[0]&&this[1]===v3[1]&&this[2]===v3[2]&&this[3]===v3[3]},length:function(){return Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]+this[3]*this[3])},dot:function(v4){return this[0]*v4[0]+this[1]*v4[1]+this[2]*v4[2]+this[3]*v4[3]},normalize:function(){var length=this.length();if(length===0)return new Vector4(0,0,0,1);var inv=1/length;return new Vector4(this[0]*inv,this[1]*inv,this[2]*inv,this[3]*inv)},quaternionToAngle:function(deg){var v4=this;if(v4[3]>1)v4=v4.normalize();var w=2*Math.acos(v4[3]);var s=Math.sqrt(1-v4[3]*v4[3]);if(s<1e-4){return new Vector4(v4[0],v4[1],v4[2],w)}else{return new Vector4(v4[0]/s,v4[1]/s,v4[2]/s,deg?radToDeg(w):w)}},angleToQuaternion:function(deg){var angle=deg?degToRad(this[3]):this[3];var half=angle/2,s=Math.sin(half);return new Vector4(this[0]*s,this[1]*s,this[2]*s,Math.cos(half))},combine:function(v4,scale1,scale2){var result=new Vector4;for(var i=0;i<4;i++)result[i]=this[i]*scale1+v4[i]*scale2;return result},lerp:function(v4,delta){var scale1=delta;var scale2=1-delta;return v4.combine(this,scale1,scale2)},slerp:function(v4q,delta){var interpolated=new Vector4;var product=this.dot(v4q);product=Math.min(Math.max(product,-1),1);var scale1=1;if(product<0){product=-product;scale1=-1}var epsilon=1e-5;if(Math.abs(product-1)<epsilon){for(var i=0;i<4;++i)interpolated[i]=this[i];return interpolated}var denom=Math.sqrt(1-product*product);var theta=Math.acos(product);var w=Math.sin(delta*theta)*(1/denom);scale1*=Math.cos(delta*theta)-product*w;var scale2=w;return this.combine(v4q,scale1,scale2)}});module.exports=Vector4},{prime:1}]},{},[]);"use strict";var $=require("elements");var ready=require("elements/domready");var Matrix3d=require("matrix3d");var Transform3d=require("transform3d");var Vector3=require("matrix3d/lib/Vector3");var Vector4=require("matrix3d/lib/Vector4");var SCENE_WIDTH=window.innerWidth;var SCENE_HEIGHT=window.innerHeight;var PERSPECTIVE=800;var PERSPECTIVE_ORIGIN=new Vector3(SCENE_WIDTH/2,SCENE_HEIGHT/2,0);var OBJECT_WIDTH=100;var OBJECT_HEIGHT=100;var TRANSFORM_ORIGIN=new Vector3(OBJECT_WIDTH/2,OBJECT_HEIGHT/2,0);var TRANSFORMATION=(new Transform3d).translateX(500).translateY(300).translateZ(400).rotateY(40).compose();var translationMatrix1=(new Matrix3d).translate(new Vector3(PERSPECTIVE_ORIGIN.x-TRANSFORM_ORIGIN.x,PERSPECTIVE_ORIGIN.y-TRANSFORM_ORIGIN.y,PERSPECTIVE_ORIGIN.z-TRANSFORM_ORIGIN.z));var perspectiveMatrix=new Matrix3d;perspectiveMatrix.m34=-1/PERSPECTIVE;var translationMatrix2=(new Matrix3d).translate(new Vector3(-(PERSPECTIVE_ORIGIN.x-TRANSFORM_ORIGIN.x),-(PERSPECTIVE_ORIGIN.y-TRANSFORM_ORIGIN.y),-(PERSPECTIVE_ORIGIN.z-TRANSFORM_ORIGIN.z)));perspectiveMatrix=translationMatrix1.concat(perspectiveMatrix).concat(translationMatrix2);var COMPUTED_PERSPECTIVE_TRANSFORMATION=perspectiveMatrix.concat(TRANSFORMATION);var vertices=[new Vector4(0,0,0,1),new Vector4(OBJECT_WIDTH,OBJECT_HEIGHT,0,1),new Vector4(OBJECT_WIDTH,0,0,1),new Vector4(0,OBJECT_HEIGHT,0,1),new Vector4(OBJECT_WIDTH/2,OBJECT_HEIGHT/2,0,1)];var pre=(new Matrix3d).translate(new Vector3(TRANSFORM_ORIGIN.x,TRANSFORM_ORIGIN.y,TRANSFORM_ORIGIN.z));var post=(new Matrix3d).translate(new Vector3(-TRANSFORM_ORIGIN.x,-TRANSFORM_ORIGIN.y,-TRANSFORM_ORIGIN.z));var FULL=pre.concat(COMPUTED_PERSPECTIVE_TRANSFORMATION).concat(post);var transformedVertices=vertices.map(function(vertex){return FULL.map(vertex)});var PROJECTED_VERTICES=transformedVertices.map(function(vertex){return new Vector3(vertex.x/vertex.w,vertex.y/vertex.w,vertex.z/vertex.w)});ready(function(){var perspectiveNode=$("#perspective");perspectiveNode[0].style.perspective=PERSPECTIVE+"px";perspectiveNode[0].style.perspectiveOrigin=PERSPECTIVE_ORIGIN.x+"px "+PERSPECTIVE_ORIGIN.y+"px "+PERSPECTIVE_ORIGIN.z+"px";perspectiveNode[0].style.transformStyle="preserve-3d";perspectiveNode[0].style.width=SCENE_WIDTH+"px";perspectiveNode[0].style.height=SCENE_HEIGHT+"px";var flatNode=$("#flat");flatNode[0].style.width=SCENE_WIDTH+"px";flatNode[0].style.height=SCENE_HEIGHT+"px";var perspectiveSquare=$("#perspective .square");perspectiveSquare[0].style.height=OBJECT_HEIGHT+"px";perspectiveSquare[0].style.width=OBJECT_WIDTH+"px";perspectiveSquare[0].style.transformOrigin=TRANSFORM_ORIGIN.x+"px "+TRANSFORM_ORIGIN.y+"px "+TRANSFORM_ORIGIN.z+"px";var flatSquare=$("#flat .square");flatSquare[0].style.height=OBJECT_HEIGHT+"px";flatSquare[0].style.width=OBJECT_WIDTH+"px";flatSquare[0].style.transformOrigin=TRANSFORM_ORIGIN.x+"px "+TRANSFORM_ORIGIN.y+"px "+TRANSFORM_ORIGIN.z+"px";perspectiveSquare[0].style.transform=TRANSFORMATION;flatSquare[0].style.transform=COMPUTED_PERSPECTIVE_TRANSFORMATION;var canvas=$("#vertices")[0];canvas.width=SCENE_WIDTH;canvas.height=SCENE_HEIGHT;var ctx=canvas.getContext("2d");PROJECTED_VERTICES.forEach(function(v,i){if(i!==4){ctx.beginPath();ctx.arc(v.x,v.y,3,0,Math.PI*2);ctx.closePath();ctx.fill()}else{ctx.beginPath();ctx.moveTo(v.x-10,v.y-10);ctx.lineTo(v.x+10,v.y+10);ctx.moveTo(v.x+10,v.y-10);ctx.lineTo(v.x-10,v.y+10);ctx.closePath();ctx.stroke()}})}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"elements": "0.5.0", | |
"matrix3d": "0.1.0", | |
"transform3d": "0.1.2" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div id="flat"> | |
<div class="square"></div> | |
</div> | |
<div id="perspective"> | |
<div class="square"></div> | |
</div> | |
<canvas id="vertices"></canvas> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<style> | |
body { | |
margin: 0; | |
padding: 0; | |
} | |
#perspective, #vertices, #flat, .square { | |
position: absolute; | |
top: 0; | |
left: 0; | |
} | |
#flat .square { | |
background: rgba(0, 0, 255, 0.5); | |
} | |
#perspective .square { | |
background: rgba(255, 0, 0, 0.5); | |
} | |
</style> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment