Last active
August 29, 2015 14:22
-
-
Save Barneybook/836248c800f5dbc0cefa to your computer and use it in GitHub Desktop.
http://p5jsbrush.yannest.com/ --> source code
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
| <html> | |
| <head> | |
| <script language="javascript" type="text/javascript" src="./js/p5.js"></script> | |
| <!-- uncomment lines below to include extra p5 libraries --> | |
| <!--<script language="javascript" src="../addons/p5.dom.js"></script>--> | |
| <!--<script language="javascript" src="../addons/p5.sound.js"></script>--> | |
| <script language="javascript" type="text/javascript" src="./js/sketch.js"></script> | |
| <!-- this line removes any default padding and style. you might only need one of these values set. --> | |
| <style> body {padding: 0; margin: 0; background-color: black;} </style> | |
| </head> | |
| <body> | |
| </body> | |
| </html> |
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
| /*! p5.js v0.4.3 March 30, 2015 */ | |
| (function (root, factory) { | |
| if (typeof define === 'function' && define.amd) | |
| define('p5', [], function () { return (root.returnExportsGlobal = factory());}); | |
| else if (typeof exports === 'object') | |
| module.exports = factory(); | |
| else | |
| root['p5'] = factory(); | |
| }(this, function () { | |
| var amdclean = {}; | |
| amdclean['shim'] = function (require) { | |
| window.requestDraw = function () { | |
| return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback, element) { | |
| window.setTimeout(callback, 1000 / 60); | |
| }; | |
| }(); | |
| }({}); | |
| amdclean['constants'] = function (require) { | |
| var PI = Math.PI; | |
| return { | |
| ARROW: 'default', | |
| CROSS: 'crosshair', | |
| HAND: 'pointer', | |
| MOVE: 'move', | |
| TEXT: 'text', | |
| WAIT: 'wait', | |
| HALF_PI: PI / 2, | |
| PI: PI, | |
| QUARTER_PI: PI / 4, | |
| TAU: PI * 2, | |
| TWO_PI: PI * 2, | |
| DEGREES: 'degrees', | |
| RADIANS: 'radians', | |
| CORNER: 'corner', | |
| CORNERS: 'corners', | |
| RADIUS: 'radius', | |
| RIGHT: 'right', | |
| LEFT: 'left', | |
| CENTER: 'center', | |
| TOP: 'top', | |
| BOTTOM: 'bottom', | |
| BASELINE: 'alphabetic', | |
| POINTS: 'points', | |
| LINES: 'lines', | |
| TRIANGLES: 'triangles', | |
| TRIANGLE_FAN: 'triangles_fan', | |
| TRIANGLE_STRIP: 'triangles_strip', | |
| QUADS: 'quads', | |
| QUAD_STRIP: 'quad_strip', | |
| CLOSE: 'close', | |
| OPEN: 'open', | |
| CHORD: 'chord', | |
| PIE: 'pie', | |
| PROJECT: 'square', | |
| SQUARE: 'butt', | |
| ROUND: 'round', | |
| BEVEL: 'bevel', | |
| MITER: 'miter', | |
| RGB: 'rgb', | |
| HSB: 'hsb', | |
| AUTO: 'auto', | |
| ALT: 18, | |
| BACKSPACE: 8, | |
| CONTROL: 17, | |
| DELETE: 46, | |
| DOWN_ARROW: 40, | |
| ENTER: 13, | |
| ESCAPE: 27, | |
| LEFT_ARROW: 37, | |
| OPTION: 18, | |
| RETURN: 13, | |
| RIGHT_ARROW: 39, | |
| SHIFT: 16, | |
| TAB: 9, | |
| UP_ARROW: 38, | |
| BLEND: 'normal', | |
| ADD: 'lighter', | |
| DARKEST: 'darken', | |
| LIGHTEST: 'lighten', | |
| DIFFERENCE: 'difference', | |
| EXCLUSION: 'exclusion', | |
| MULTIPLY: 'multiply', | |
| SCREEN: 'screen', | |
| REPLACE: 'source-over', | |
| OVERLAY: 'overlay', | |
| HARD_LIGHT: 'hard-light', | |
| SOFT_LIGHT: 'soft-light', | |
| DODGE: 'color-dodge', | |
| BURN: 'color-burn', | |
| THRESHOLD: 'threshold', | |
| GRAY: 'gray', | |
| OPAQUE: 'opaque', | |
| INVERT: 'invert', | |
| POSTERIZE: 'posterize', | |
| DILATE: 'dilate', | |
| ERODE: 'erode', | |
| BLUR: 'blur', | |
| NORMAL: 'normal', | |
| ITALIC: 'italic', | |
| BOLD: 'bold', | |
| LINEAR: 'linear', | |
| QUADRATIC: 'quadratic', | |
| BEZIER: 'bezier', | |
| CURVE: 'curve' | |
| }; | |
| }({}); | |
| amdclean['core'] = function (require, shim, constants) { | |
| 'use strict'; | |
| var constants = constants; | |
| var p5 = function (sketch, node, sync) { | |
| if (arguments.length === 2 && typeof node === 'boolean') { | |
| sync = node; | |
| node = undefined; | |
| } | |
| this._setupDone = false; | |
| this._pixelDensity = window.devicePixelRatio || 1; | |
| this._startTime = new Date().getTime(); | |
| this._userNode = node; | |
| this._curElement = null; | |
| this._elements = []; | |
| this._preloadCount = 0; | |
| this._updateInterval = 0; | |
| this._isGlobal = false; | |
| this._loop = true; | |
| this._styles = []; | |
| this._defaultCanvasSize = { | |
| width: 100, | |
| height: 100 | |
| }; | |
| this._events = { | |
| 'mousemove': null, | |
| 'mousedown': null, | |
| 'mouseup': null, | |
| 'click': null, | |
| 'mousewheel': null, | |
| 'mouseover': null, | |
| 'mouseout': null, | |
| 'keydown': null, | |
| 'keyup': null, | |
| 'keypress': null, | |
| 'touchstart': null, | |
| 'touchmove': null, | |
| 'touchend': null, | |
| 'resize': null, | |
| 'blur': null | |
| }; | |
| if (window.DeviceOrientationEvent) { | |
| this._events.deviceorientation = null; | |
| } else if (window.DeviceMotionEvent) { | |
| this._events.devicemotion = null; | |
| } else { | |
| this._events.MozOrientation = null; | |
| } | |
| this._loadingScreenId = 'p5_loading'; | |
| this._start = function () { | |
| if (this._userNode) { | |
| if (typeof this._userNode === 'string') { | |
| this._userNode = document.getElementById(this._userNode); | |
| } | |
| } | |
| this._loadingScreen = document.getElementById(this._loadingScreenId); | |
| if (!this._loadingScreen) { | |
| this._loadingScreen = document.createElement('loadingDiv'); | |
| this._loadingScreen.innerHTML = 'loading...'; | |
| this._loadingScreen.style.position = 'absolute'; | |
| var node = this._userNode || document.body; | |
| node.appendChild(this._loadingScreen); | |
| } | |
| this.createCanvas(this._defaultCanvasSize.width, this._defaultCanvasSize.height, true); | |
| var userPreload = this.preload || window.preload; | |
| var context = this._isGlobal ? window : this; | |
| if (userPreload) { | |
| this._preloadMethods.forEach(function (f) { | |
| context[f] = function () { | |
| var argsArray = Array.prototype.slice.call(arguments); | |
| return context._preload(f, argsArray); | |
| }; | |
| }); | |
| userPreload(); | |
| if (this._preloadCount === 0) { | |
| this._setup(); | |
| this._runFrames(); | |
| this._draw(); | |
| } | |
| } else { | |
| this._setup(); | |
| this._runFrames(); | |
| this._draw(); | |
| } | |
| }.bind(this); | |
| this._preload = function (func, args) { | |
| var context = this._isGlobal ? window : this; | |
| context._setProperty('_preloadCount', context._preloadCount + 1); | |
| var preloadCallback = function (resp) { | |
| context._setProperty('_preloadCount', context._preloadCount - 1); | |
| if (context._preloadCount === 0) { | |
| context._setup(); | |
| context._runFrames(); | |
| context._draw(); | |
| } | |
| }; | |
| args.push(preloadCallback); | |
| return p5.prototype[func].apply(context, args); | |
| }.bind(this); | |
| this._setup = function () { | |
| var context = this._isGlobal ? window : this; | |
| if (typeof context.preload === 'function') { | |
| this._preloadMethods.forEach(function (f) { | |
| context[f] = p5.prototype[f]; | |
| }); | |
| } | |
| if (typeof context.setup === 'function') { | |
| context.setup(); | |
| } | |
| this.canvas.style.visibility = ''; | |
| this.canvas.className = this.canvas.className.replace('p5_hidden', ''); | |
| this._setupDone = true; | |
| this._loadingScreen.parentNode.removeChild(this._loadingScreen); | |
| }.bind(this); | |
| this._draw = function () { | |
| var now = new Date().getTime(); | |
| this._frameRate = 1000 / (now - this._lastFrameTime); | |
| this._lastFrameTime = now; | |
| this._setProperty('frameCount', this.frameCount + 1); | |
| if (this._loop) { | |
| if (this._drawInterval) { | |
| clearInterval(this._drawInterval); | |
| } | |
| this._drawInterval = setTimeout(function () { | |
| window.requestDraw(this._draw.bind(this)); | |
| }.bind(this), 1000 / this._targetFrameRate); | |
| } | |
| this.redraw(); | |
| this._updatePAccelerations(); | |
| this._updatePMouseCoords(); | |
| this._updatePTouchCoords(); | |
| }.bind(this); | |
| this._runFrames = function () { | |
| if (this._updateInterval) { | |
| clearInterval(this._updateInterval); | |
| } | |
| }.bind(this); | |
| this._setProperty = function (prop, value) { | |
| this[prop] = value; | |
| if (this._isGlobal) { | |
| window[prop] = value; | |
| } | |
| }.bind(this); | |
| this.remove = function () { | |
| if (this._curElement) { | |
| this._loop = false; | |
| if (this._drawInterval) { | |
| clearTimeout(this._drawInterval); | |
| } | |
| if (this._updateInterval) { | |
| clearTimeout(this._updateInterval); | |
| } | |
| for (var ev in this._events) { | |
| window.removeEventListener(ev, this._events[ev]); | |
| } | |
| for (var i = 0; i < this._elements.length; i++) { | |
| var e = this._elements[i]; | |
| if (e.elt.parentNode) { | |
| e.elt.parentNode.removeChild(e.elt); | |
| } | |
| for (var elt_ev in e._events) { | |
| e.elt.removeEventListener(elt_ev, e._events[elt_ev]); | |
| } | |
| } | |
| var self = this; | |
| this._registeredMethods.remove.forEach(function (f) { | |
| if (typeof f !== 'undefined') { | |
| f.call(self); | |
| } | |
| }); | |
| if (this._isGlobal) { | |
| for (var p in p5.prototype) { | |
| try { | |
| delete window[p]; | |
| } catch (x) { | |
| window[p] = undefined; | |
| } | |
| } | |
| for (var p2 in this) { | |
| if (this.hasOwnProperty(p2)) { | |
| try { | |
| delete window[p2]; | |
| } catch (x) { | |
| window[p2] = undefined; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }.bind(this); | |
| for (var k in constants) { | |
| p5.prototype[k] = constants[k]; | |
| } | |
| if (!sketch) { | |
| this._isGlobal = true; | |
| for (var p in p5.prototype) { | |
| if (typeof p5.prototype[p] === 'function') { | |
| var ev = p.substring(2); | |
| if (!this._events.hasOwnProperty(ev)) { | |
| window[p] = p5.prototype[p].bind(this); | |
| } | |
| } else { | |
| window[p] = p5.prototype[p]; | |
| } | |
| } | |
| for (var p2 in this) { | |
| if (this.hasOwnProperty(p2)) { | |
| window[p2] = this[p2]; | |
| } | |
| } | |
| } else { | |
| sketch(this); | |
| } | |
| for (var e in this._events) { | |
| var f = this['_on' + e]; | |
| if (f) { | |
| var m = f.bind(this); | |
| window.addEventListener(e, m); | |
| this._events[e] = m; | |
| } | |
| } | |
| var self = this; | |
| window.addEventListener('focus', function () { | |
| self._setProperty('focused', true); | |
| }); | |
| window.addEventListener('blur', function () { | |
| self._setProperty('focused', false); | |
| }); | |
| if (sync) { | |
| this._start(); | |
| } else { | |
| if (document.readyState === 'complete') { | |
| this._start(); | |
| } else { | |
| window.addEventListener('load', this._start.bind(this), false); | |
| } | |
| } | |
| }; | |
| p5.prototype._preloadMethods = [ | |
| 'loadJSON', | |
| 'loadImage', | |
| 'loadStrings', | |
| 'loadXML', | |
| 'loadShape', | |
| 'loadTable' | |
| ]; | |
| p5.prototype._registeredMethods = { | |
| pre: [], | |
| post: [], | |
| remove: [] | |
| }; | |
| p5.prototype.registerPreloadMethod = function (m) { | |
| p5.prototype._preloadMethods.push(m); | |
| }.bind(this); | |
| p5.prototype.registerMethod = function (name, m) { | |
| if (!p5.prototype._registeredMethods.hasOwnProperty(name)) { | |
| p5.prototype._registeredMethods[name] = []; | |
| } | |
| p5.prototype._registeredMethods[name].push(m); | |
| }.bind(this); | |
| return p5; | |
| }({}, amdclean['shim'], amdclean['constants']); | |
| amdclean['utilscolor_utils'] = function (require, core) { | |
| var p5 = core; | |
| p5.ColorUtils = {}; | |
| p5.ColorUtils.hsbaToRGBA = function (hsba) { | |
| var h = hsba[0]; | |
| var s = hsba[1]; | |
| var v = hsba[2]; | |
| h /= 255; | |
| s /= 255; | |
| v /= 255; | |
| var RGBA = []; | |
| if (s === 0) { | |
| RGBA = [ | |
| Math.round(v * 255), | |
| Math.round(v * 255), | |
| Math.round(v * 255), | |
| hsba[3] | |
| ]; | |
| } else { | |
| var var_h = h * 6; | |
| if (var_h === 6) { | |
| var_h = 0; | |
| } | |
| var var_i = Math.floor(var_h); | |
| var var_1 = v * (1 - s); | |
| var var_2 = v * (1 - s * (var_h - var_i)); | |
| var var_3 = v * (1 - s * (1 - (var_h - var_i))); | |
| var var_r; | |
| var var_g; | |
| var var_b; | |
| if (var_i === 0) { | |
| var_r = v; | |
| var_g = var_3; | |
| var_b = var_1; | |
| } else if (var_i === 1) { | |
| var_r = var_2; | |
| var_g = v; | |
| var_b = var_1; | |
| } else if (var_i === 2) { | |
| var_r = var_1; | |
| var_g = v; | |
| var_b = var_3; | |
| } else if (var_i === 3) { | |
| var_r = var_1; | |
| var_g = var_2; | |
| var_b = v; | |
| } else if (var_i === 4) { | |
| var_r = var_3; | |
| var_g = var_1; | |
| var_b = v; | |
| } else { | |
| var_r = v; | |
| var_g = var_1; | |
| var_b = var_2; | |
| } | |
| RGBA = [ | |
| Math.round(var_r * 255), | |
| Math.round(var_g * 255), | |
| Math.round(var_b * 255), | |
| hsba[3] | |
| ]; | |
| } | |
| return RGBA; | |
| }; | |
| p5.ColorUtils.rgbaToHSBA = function (rgba) { | |
| var var_R = rgba[0] / 255; | |
| var var_G = rgba[1] / 255; | |
| var var_B = rgba[2] / 255; | |
| var var_Min = Math.min(var_R, var_G, var_B); | |
| var var_Max = Math.max(var_R, var_G, var_B); | |
| var del_Max = var_Max - var_Min; | |
| var H; | |
| var S; | |
| var V = var_Max; | |
| if (del_Max === 0) { | |
| H = 0; | |
| S = 0; | |
| } else { | |
| S = del_Max / var_Max; | |
| var del_R = ((var_Max - var_R) / 6 + del_Max / 2) / del_Max; | |
| var del_G = ((var_Max - var_G) / 6 + del_Max / 2) / del_Max; | |
| var del_B = ((var_Max - var_B) / 6 + del_Max / 2) / del_Max; | |
| if (var_R === var_Max) { | |
| H = del_B - del_G; | |
| } else if (var_G === var_Max) { | |
| H = 1 / 3 + del_R - del_B; | |
| } else if (var_B === var_Max) { | |
| H = 2 / 3 + del_G - del_R; | |
| } | |
| if (H < 0) { | |
| H += 1; | |
| } | |
| if (H > 1) { | |
| H -= 1; | |
| } | |
| } | |
| return [ | |
| Math.round(H * 255), | |
| Math.round(S * 255), | |
| Math.round(V * 255), | |
| rgba[3] | |
| ]; | |
| }; | |
| return p5.ColorUtils; | |
| }({}, amdclean['core']); | |
| amdclean['p5Color'] = function (require, core, utilscolor_utils, constants) { | |
| var p5 = core; | |
| var color_utils = utilscolor_utils; | |
| var constants = constants; | |
| p5.Color = function (pInst, vals) { | |
| this.color_array = p5.Color._getFormattedColor.apply(pInst, vals); | |
| this._normalizeColorArray(pInst); | |
| if (pInst._colorMode === constants.HSB) { | |
| this.hsba = this.color_array; | |
| this.rgba = color_utils.hsbaToRGBA(this.hsba); | |
| } else { | |
| this.rgba = this.color_array; | |
| this.hsba = color_utils.rgbaToHSBA(this.rgba); | |
| } | |
| return this; | |
| }; | |
| p5.Color.prototype._normalizeColorArray = function (pInst) { | |
| var isRGB = pInst._colorMode === constants.RGB; | |
| var maxArr = isRGB ? pInst._maxRGB : pInst._maxHSB; | |
| var arr = this.color_array; | |
| arr[0] *= 255 / maxArr[0]; | |
| arr[1] *= 255 / maxArr[1]; | |
| arr[2] *= 255 / maxArr[2]; | |
| arr[3] *= 255 / maxArr[3]; | |
| return arr; | |
| }; | |
| p5.Color.prototype.getHue = function () { | |
| return this.hsba[0]; | |
| }; | |
| p5.Color.prototype.getSaturation = function () { | |
| return this.hsba[1]; | |
| }; | |
| p5.Color.prototype.getBrightness = function () { | |
| return this.hsba[2]; | |
| }; | |
| p5.Color.prototype.getRed = function () { | |
| return this.rgba[0]; | |
| }; | |
| p5.Color.prototype.getGreen = function () { | |
| return this.rgba[1]; | |
| }; | |
| p5.Color.prototype.getBlue = function () { | |
| return this.rgba[2]; | |
| }; | |
| p5.Color.prototype.getAlpha = function () { | |
| return this.rgba[3]; | |
| }; | |
| p5.Color.prototype.toString = function () { | |
| var a = this.rgba; | |
| for (var i = 0; i < 3; i++) { | |
| a[i] = Math.floor(a[i]); | |
| } | |
| var alpha = typeof a[3] !== 'undefined' ? a[3] / 255 : 1; | |
| return 'rgba(' + a[0] + ',' + a[1] + ',' + a[2] + ',' + alpha + ')'; | |
| }; | |
| p5.Color._getFormattedColor = function () { | |
| var r, g, b, a; | |
| if (arguments.length >= 3) { | |
| r = arguments[0]; | |
| g = arguments[1]; | |
| b = arguments[2]; | |
| a = typeof arguments[3] === 'number' ? arguments[3] : 255; | |
| } else { | |
| if (this._colorMode === constants.RGB) { | |
| r = g = b = arguments[0]; | |
| } else { | |
| r = b = arguments[0]; | |
| g = 0; | |
| } | |
| a = typeof arguments[1] === 'number' ? arguments[1] : 255; | |
| } | |
| return [ | |
| r, | |
| g, | |
| b, | |
| a | |
| ]; | |
| }; | |
| return p5.Color; | |
| }({}, amdclean['core'], amdclean['utilscolor_utils'], amdclean['constants']); | |
| amdclean['p5Element'] = function (require, core) { | |
| var p5 = core; | |
| p5.Element = function (elt, pInst) { | |
| this.elt = elt; | |
| this._pInst = pInst; | |
| this._events = {}; | |
| this.width = this.elt.offsetWidth; | |
| this.height = this.elt.offsetHeight; | |
| }; | |
| p5.Element.prototype.parent = function (p) { | |
| if (typeof p === 'string') { | |
| p = document.getElementById(p); | |
| } else if (p instanceof p5.Element) { | |
| p = p.elt; | |
| } | |
| p.appendChild(this.elt); | |
| return this; | |
| }; | |
| p5.Element.prototype.id = function (id) { | |
| this.elt.id = id; | |
| return this; | |
| }; | |
| p5.Element.prototype.class = function (c) { | |
| this.elt.className += ' ' + c; | |
| return this; | |
| }; | |
| p5.Element.prototype.mousePressed = function (fxn) { | |
| attachListener('mousedown', fxn, this); | |
| attachListener('touchstart', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.mouseWheel = function (fxn) { | |
| attachListener('mousewheel', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.mouseReleased = function (fxn) { | |
| attachListener('mouseup', fxn, this); | |
| attachListener('touchend', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.mouseClicked = function (fxn) { | |
| attachListener('click', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.mouseMoved = function (fxn) { | |
| attachListener('mousemove', fxn, this); | |
| attachListener('touchmove', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.mouseOver = function (fxn) { | |
| attachListener('mouseover', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.mouseOut = function (fxn) { | |
| attachListener('mouseout', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.touchStarted = function (fxn) { | |
| attachListener('touchstart', fxn, this); | |
| attachListener('mousedown', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.touchMoved = function (fxn) { | |
| attachListener('touchmove', fxn, this); | |
| attachListener('mousemove', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.touchEnded = function (fxn) { | |
| attachListener('touchend', fxn, this); | |
| attachListener('mouseup', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.dragOver = function (fxn) { | |
| attachListener('dragover', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.dragLeave = function (fxn) { | |
| attachListener('dragleave', fxn, this); | |
| return this; | |
| }; | |
| p5.Element.prototype.drop = function (callback, fxn) { | |
| function makeLoader(theFile) { | |
| var p5file = new p5.File(theFile); | |
| return function (e) { | |
| p5file.data = e.target.result; | |
| callback(p5file); | |
| }; | |
| } | |
| if (window.File && window.FileReader && window.FileList && window.Blob) { | |
| attachListener('dragover', function (evt) { | |
| evt.stopPropagation(); | |
| evt.preventDefault(); | |
| }, this); | |
| attachListener('dragleave', function (evt) { | |
| evt.stopPropagation(); | |
| evt.preventDefault(); | |
| }, this); | |
| if (arguments.length > 1) { | |
| attachListener('drop', fxn, this); | |
| } | |
| attachListener('drop', function (evt) { | |
| evt.stopPropagation(); | |
| evt.preventDefault(); | |
| var files = evt.dataTransfer.files; | |
| for (var i = 0; i < files.length; i++) { | |
| var f = files[i]; | |
| var reader = new FileReader(); | |
| reader.onload = makeLoader(f); | |
| if (f.type === 'text') { | |
| reader.readAsText(f); | |
| } else { | |
| reader.readAsDataURL(f); | |
| } | |
| } | |
| }, this); | |
| } else { | |
| console.log('The File APIs are not fully supported in this browser.'); | |
| } | |
| return this; | |
| }; | |
| function attachListener(ev, fxn, ctx) { | |
| var f = fxn.bind(ctx); | |
| ctx.elt.addEventListener(ev, f, false); | |
| ctx._events[ev] = f; | |
| } | |
| p5.Element.prototype._setProperty = function (prop, value) { | |
| this[prop] = value; | |
| }; | |
| return p5.Element; | |
| }({}, amdclean['core']); | |
| amdclean['p5Graphics'] = function (require, core, constants) { | |
| var p5 = core; | |
| var constants = constants; | |
| p5.Graphics = function (elt, pInst, isMainCanvas) { | |
| p5.Element.call(this, elt, pInst); | |
| this.canvas = elt; | |
| this.drawingContext = this.canvas.getContext('2d'); | |
| this._pInst = pInst; | |
| if (isMainCanvas) { | |
| this._isMainCanvas = true; | |
| this._pInst._setProperty('_curElement', this); | |
| this._pInst._setProperty('canvas', this.canvas); | |
| this._pInst._setProperty('drawingContext', this.drawingContext); | |
| this._pInst._setProperty('width', this.width); | |
| this._pInst._setProperty('height', this.height); | |
| } else { | |
| this.canvas.style.display = 'none'; | |
| this._styles = []; | |
| } | |
| }; | |
| p5.Graphics.prototype = Object.create(p5.Element.prototype); | |
| p5.Graphics.prototype._applyDefaults = function () { | |
| this.drawingContext.fillStyle = '#FFFFFF'; | |
| this.drawingContext.strokeStyle = '#000000'; | |
| this.drawingContext.lineCap = constants.ROUND; | |
| this.drawingContext.font = 'normal 12px sans-serif'; | |
| }; | |
| p5.Graphics.prototype.resize = function (w, h) { | |
| this.width = w; | |
| this.height = h; | |
| this.elt.width = w * this._pInst._pixelDensity; | |
| this.elt.height = h * this._pInst._pixelDensity; | |
| this.elt.style.width = w + 'px'; | |
| this.elt.style.height = h + 'px'; | |
| if (this._isMainCanvas) { | |
| this._pInst._setProperty('width', this.width); | |
| this._pInst._setProperty('height', this.height); | |
| } | |
| this.drawingContext.scale(this._pInst._pixelDensity, this._pInst._pixelDensity); | |
| }; | |
| return p5.Graphics; | |
| }({}, amdclean['core'], amdclean['constants']); | |
| amdclean['filters'] = function (require) { | |
| 'use strict'; | |
| var Filters = {}; | |
| Filters._toPixels = function (canvas) { | |
| if (canvas instanceof ImageData) { | |
| return canvas.data; | |
| } else { | |
| return canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height).data; | |
| } | |
| }; | |
| Filters._getARGB = function (data, i) { | |
| var offset = i * 4; | |
| return data[offset + 3] << 24 & 4278190080 | data[offset] << 16 & 16711680 | data[offset + 1] << 8 & 65280 | data[offset + 2] & 255; | |
| }; | |
| Filters._setPixels = function (pixels, data) { | |
| var offset = 0; | |
| for (var i = 0, al = pixels.length; i < al; i++) { | |
| offset = i * 4; | |
| pixels[offset + 0] = (data[i] & 16711680) >>> 16; | |
| pixels[offset + 1] = (data[i] & 65280) >>> 8; | |
| pixels[offset + 2] = data[i] & 255; | |
| pixels[offset + 3] = (data[i] & 4278190080) >>> 24; | |
| } | |
| }; | |
| Filters._toImageData = function (canvas) { | |
| if (canvas instanceof ImageData) { | |
| return canvas; | |
| } else { | |
| return canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height); | |
| } | |
| }; | |
| Filters._createImageData = function (width, height) { | |
| Filters._tmpCanvas = document.createElement('canvas'); | |
| Filters._tmpCtx = Filters._tmpCanvas.getContext('2d'); | |
| return this._tmpCtx.createImageData(width, height); | |
| }; | |
| Filters.apply = function (canvas, func, filterParam) { | |
| var ctx = canvas.getContext('2d'); | |
| var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); | |
| var newImageData = func(imageData, filterParam); | |
| if (newImageData instanceof ImageData) { | |
| ctx.putImageData(newImageData, 0, 0, 0, 0, canvas.width, canvas.height); | |
| } else { | |
| ctx.putImageData(imageData, 0, 0, 0, 0, canvas.width, canvas.height); | |
| } | |
| }; | |
| Filters.threshold = function (canvas, level) { | |
| var pixels = Filters._toPixels(canvas); | |
| if (level === undefined) { | |
| level = 0.5; | |
| } | |
| var thresh = Math.floor(level * 255); | |
| for (var i = 0; i < pixels.length; i += 4) { | |
| var r = pixels[i]; | |
| var g = pixels[i + 1]; | |
| var b = pixels[i + 2]; | |
| var grey = 0.2126 * r + 0.7152 * g + 0.0722 * b; | |
| var val; | |
| if (grey >= thresh) { | |
| val = 255; | |
| } else { | |
| val = 0; | |
| } | |
| pixels[i] = pixels[i + 1] = pixels[i + 2] = val; | |
| } | |
| }; | |
| Filters.gray = function (canvas) { | |
| var pixels = Filters._toPixels(canvas); | |
| for (var i = 0; i < pixels.length; i += 4) { | |
| var r = pixels[i]; | |
| var g = pixels[i + 1]; | |
| var b = pixels[i + 2]; | |
| var gray = 0.2126 * r + 0.7152 * g + 0.0722 * b; | |
| pixels[i] = pixels[i + 1] = pixels[i + 2] = gray; | |
| } | |
| }; | |
| Filters.opaque = function (canvas) { | |
| var pixels = Filters._toPixels(canvas); | |
| for (var i = 0; i < pixels.length; i += 4) { | |
| pixels[i + 3] = 255; | |
| } | |
| return pixels; | |
| }; | |
| Filters.invert = function (canvas) { | |
| var pixels = Filters._toPixels(canvas); | |
| for (var i = 0; i < pixels.length; i += 4) { | |
| pixels[i] = 255 - pixels[i]; | |
| pixels[i + 1] = 255 - pixels[i + 1]; | |
| pixels[i + 2] = 255 - pixels[i + 2]; | |
| } | |
| }; | |
| Filters.posterize = function (canvas, level) { | |
| var pixels = Filters._toPixels(canvas); | |
| if (level < 2 || level > 255) { | |
| throw new Error('Level must be greater than 2 and less than 255 for posterize'); | |
| } | |
| var levels1 = level - 1; | |
| for (var i = 0; i < pixels.length; i += 4) { | |
| var rlevel = pixels[i]; | |
| var glevel = pixels[i + 1]; | |
| var blevel = pixels[i + 2]; | |
| pixels[i] = (rlevel * level >> 8) * 255 / levels1; | |
| pixels[i + 1] = (glevel * level >> 8) * 255 / levels1; | |
| pixels[i + 2] = (blevel * level >> 8) * 255 / levels1; | |
| } | |
| }; | |
| Filters.dilate = function (canvas) { | |
| var pixels = Filters._toPixels(canvas); | |
| var currIdx = 0; | |
| var maxIdx = pixels.length ? pixels.length / 4 : 0; | |
| var out = new Int32Array(maxIdx); | |
| var currRowIdx, maxRowIdx, colOrig, colOut, currLum; | |
| var idxRight, idxLeft, idxUp, idxDown, colRight, colLeft, colUp, colDown, lumRight, lumLeft, lumUp, lumDown; | |
| while (currIdx < maxIdx) { | |
| currRowIdx = currIdx; | |
| maxRowIdx = currIdx + canvas.width; | |
| while (currIdx < maxRowIdx) { | |
| colOrig = colOut = Filters._getARGB(pixels, currIdx); | |
| idxLeft = currIdx - 1; | |
| idxRight = currIdx + 1; | |
| idxUp = currIdx - canvas.width; | |
| idxDown = currIdx + canvas.width; | |
| if (idxLeft < currRowIdx) { | |
| idxLeft = currIdx; | |
| } | |
| if (idxRight >= maxRowIdx) { | |
| idxRight = currIdx; | |
| } | |
| if (idxUp < 0) { | |
| idxUp = 0; | |
| } | |
| if (idxDown >= maxIdx) { | |
| idxDown = currIdx; | |
| } | |
| colUp = Filters._getARGB(pixels, idxUp); | |
| colLeft = Filters._getARGB(pixels, idxLeft); | |
| colDown = Filters._getARGB(pixels, idxDown); | |
| colRight = Filters._getARGB(pixels, idxRight); | |
| currLum = 77 * (colOrig >> 16 & 255) + 151 * (colOrig >> 8 & 255) + 28 * (colOrig & 255); | |
| lumLeft = 77 * (colLeft >> 16 & 255) + 151 * (colLeft >> 8 & 255) + 28 * (colLeft & 255); | |
| lumRight = 77 * (colRight >> 16 & 255) + 151 * (colRight >> 8 & 255) + 28 * (colRight & 255); | |
| lumUp = 77 * (colUp >> 16 & 255) + 151 * (colUp >> 8 & 255) + 28 * (colUp & 255); | |
| lumDown = 77 * (colDown >> 16 & 255) + 151 * (colDown >> 8 & 255) + 28 * (colDown & 255); | |
| if (lumLeft > currLum) { | |
| colOut = colLeft; | |
| currLum = lumLeft; | |
| } | |
| if (lumRight > currLum) { | |
| colOut = colRight; | |
| currLum = lumRight; | |
| } | |
| if (lumUp > currLum) { | |
| colOut = colUp; | |
| currLum = lumUp; | |
| } | |
| if (lumDown > currLum) { | |
| colOut = colDown; | |
| currLum = lumDown; | |
| } | |
| out[currIdx++] = colOut; | |
| } | |
| } | |
| Filters._setPixels(pixels, out); | |
| }; | |
| Filters.erode = function (canvas) { | |
| var pixels = Filters._toPixels(canvas); | |
| var currIdx = 0; | |
| var maxIdx = pixels.length ? pixels.length / 4 : 0; | |
| var out = new Int32Array(maxIdx); | |
| var currRowIdx, maxRowIdx, colOrig, colOut, currLum; | |
| var idxRight, idxLeft, idxUp, idxDown, colRight, colLeft, colUp, colDown, lumRight, lumLeft, lumUp, lumDown; | |
| while (currIdx < maxIdx) { | |
| currRowIdx = currIdx; | |
| maxRowIdx = currIdx + canvas.width; | |
| while (currIdx < maxRowIdx) { | |
| colOrig = colOut = Filters._getARGB(pixels, currIdx); | |
| idxLeft = currIdx - 1; | |
| idxRight = currIdx + 1; | |
| idxUp = currIdx - canvas.width; | |
| idxDown = currIdx + canvas.width; | |
| if (idxLeft < currRowIdx) { | |
| idxLeft = currIdx; | |
| } | |
| if (idxRight >= maxRowIdx) { | |
| idxRight = currIdx; | |
| } | |
| if (idxUp < 0) { | |
| idxUp = 0; | |
| } | |
| if (idxDown >= maxIdx) { | |
| idxDown = currIdx; | |
| } | |
| colUp = Filters._getARGB(pixels, idxUp); | |
| colLeft = Filters._getARGB(pixels, idxLeft); | |
| colDown = Filters._getARGB(pixels, idxDown); | |
| colRight = Filters._getARGB(pixels, idxRight); | |
| currLum = 77 * (colOrig >> 16 & 255) + 151 * (colOrig >> 8 & 255) + 28 * (colOrig & 255); | |
| lumLeft = 77 * (colLeft >> 16 & 255) + 151 * (colLeft >> 8 & 255) + 28 * (colLeft & 255); | |
| lumRight = 77 * (colRight >> 16 & 255) + 151 * (colRight >> 8 & 255) + 28 * (colRight & 255); | |
| lumUp = 77 * (colUp >> 16 & 255) + 151 * (colUp >> 8 & 255) + 28 * (colUp & 255); | |
| lumDown = 77 * (colDown >> 16 & 255) + 151 * (colDown >> 8 & 255) + 28 * (colDown & 255); | |
| if (lumLeft < currLum) { | |
| colOut = colLeft; | |
| currLum = lumLeft; | |
| } | |
| if (lumRight < currLum) { | |
| colOut = colRight; | |
| currLum = lumRight; | |
| } | |
| if (lumUp < currLum) { | |
| colOut = colUp; | |
| currLum = lumUp; | |
| } | |
| if (lumDown < currLum) { | |
| colOut = colDown; | |
| currLum = lumDown; | |
| } | |
| out[currIdx++] = colOut; | |
| } | |
| } | |
| Filters._setPixels(pixels, out); | |
| }; | |
| var blurRadius; | |
| var blurKernelSize; | |
| var blurKernel; | |
| var blurMult; | |
| function buildBlurKernel(r) { | |
| var radius = r * 3.5 | 0; | |
| radius = radius < 1 ? 1 : radius < 248 ? radius : 248; | |
| if (blurRadius !== radius) { | |
| blurRadius = radius; | |
| blurKernelSize = 1 + blurRadius << 1; | |
| blurKernel = new Int32Array(blurKernelSize); | |
| blurMult = new Array(blurKernelSize); | |
| for (var l = 0; l < blurKernelSize; l++) { | |
| blurMult[l] = new Int32Array(256); | |
| } | |
| var bk, bki; | |
| var bm, bmi; | |
| for (var i = 1, radiusi = radius - 1; i < radius; i++) { | |
| blurKernel[radius + i] = blurKernel[radiusi] = bki = radiusi * radiusi; | |
| bm = blurMult[radius + i]; | |
| bmi = blurMult[radiusi--]; | |
| for (var j = 0; j < 256; j++) { | |
| bm[j] = bmi[j] = bki * j; | |
| } | |
| } | |
| bk = blurKernel[radius] = radius * radius; | |
| bm = blurMult[radius]; | |
| for (var k = 0; k < 256; k++) { | |
| bm[k] = bk * k; | |
| } | |
| } | |
| } | |
| function blurARGB(canvas, radius) { | |
| var pixels = Filters._toPixels(canvas); | |
| var width = canvas.width; | |
| var height = canvas.height; | |
| var numPackedPixels = width * height; | |
| var argb = new Int32Array(numPackedPixels); | |
| for (var j = 0; j < numPackedPixels; j++) { | |
| argb[j] = Filters._getARGB(pixels, j); | |
| } | |
| var sum, cr, cg, cb, ca; | |
| var read, ri, ym, ymi, bk0; | |
| var a2 = new Int32Array(numPackedPixels); | |
| var r2 = new Int32Array(numPackedPixels); | |
| var g2 = new Int32Array(numPackedPixels); | |
| var b2 = new Int32Array(numPackedPixels); | |
| var yi = 0; | |
| buildBlurKernel(radius); | |
| var x, y, i; | |
| var bm; | |
| for (y = 0; y < height; y++) { | |
| for (x = 0; x < width; x++) { | |
| cb = cg = cr = ca = sum = 0; | |
| read = x - blurRadius; | |
| if (read < 0) { | |
| bk0 = -read; | |
| read = 0; | |
| } else { | |
| if (read >= width) { | |
| break; | |
| } | |
| bk0 = 0; | |
| } | |
| for (i = bk0; i < blurKernelSize; i++) { | |
| if (read >= width) { | |
| break; | |
| } | |
| var c = argb[read + yi]; | |
| bm = blurMult[i]; | |
| ca += bm[(c & -16777216) >>> 24]; | |
| cr += bm[(c & 16711680) >> 16]; | |
| cg += bm[(c & 65280) >> 8]; | |
| cb += bm[c & 255]; | |
| sum += blurKernel[i]; | |
| read++; | |
| } | |
| ri = yi + x; | |
| a2[ri] = ca / sum; | |
| r2[ri] = cr / sum; | |
| g2[ri] = cg / sum; | |
| b2[ri] = cb / sum; | |
| } | |
| yi += width; | |
| } | |
| yi = 0; | |
| ym = -blurRadius; | |
| ymi = ym * width; | |
| for (y = 0; y < height; y++) { | |
| for (x = 0; x < width; x++) { | |
| cb = cg = cr = ca = sum = 0; | |
| if (ym < 0) { | |
| bk0 = ri = -ym; | |
| read = x; | |
| } else { | |
| if (ym >= height) { | |
| break; | |
| } | |
| bk0 = 0; | |
| ri = ym; | |
| read = x + ymi; | |
| } | |
| for (i = bk0; i < blurKernelSize; i++) { | |
| if (ri >= height) { | |
| break; | |
| } | |
| bm = blurMult[i]; | |
| ca += bm[a2[read]]; | |
| cr += bm[r2[read]]; | |
| cg += bm[g2[read]]; | |
| cb += bm[b2[read]]; | |
| sum += blurKernel[i]; | |
| ri++; | |
| read += width; | |
| } | |
| argb[x + yi] = ca / sum << 24 | cr / sum << 16 | cg / sum << 8 | cb / sum; | |
| } | |
| yi += width; | |
| ymi += width; | |
| ym++; | |
| } | |
| Filters._setPixels(pixels, argb); | |
| } | |
| Filters.blur = function (canvas, radius) { | |
| blurARGB(canvas, radius); | |
| }; | |
| return Filters; | |
| }({}); | |
| amdclean['p5Image'] = function (require, core, filters) { | |
| 'use strict'; | |
| var p5 = core; | |
| var Filters = filters; | |
| p5.Image = function (width, height) { | |
| this.width = width; | |
| this.height = height; | |
| this.canvas = document.createElement('canvas'); | |
| this.canvas.width = this.width; | |
| this.canvas.height = this.height; | |
| this.drawingContext = this.canvas.getContext('2d'); | |
| this.pixels = []; | |
| }; | |
| p5.Image.prototype._setProperty = function (prop, value) { | |
| this[prop] = value; | |
| }; | |
| p5.Image.prototype.loadPixels = function () { | |
| p5.prototype.loadPixels.call(this); | |
| }; | |
| p5.Image.prototype.updatePixels = function (x, y, w, h) { | |
| p5.prototype.updatePixels.call(this, x, y, w, h); | |
| }; | |
| p5.Image.prototype.get = function (x, y, w, h) { | |
| return p5.prototype.get.call(this, x, y, w, h); | |
| }; | |
| p5.Image.prototype.set = function (x, y, imgOrCol) { | |
| p5.prototype.set.call(this, x, y, imgOrCol); | |
| }; | |
| p5.Image.prototype.resize = function (width, height) { | |
| width = width || this.canvas.width; | |
| height = height || this.canvas.height; | |
| var tempCanvas = document.createElement('canvas'); | |
| tempCanvas.width = width; | |
| tempCanvas.height = height; | |
| tempCanvas.getContext('2d').drawImage(this.canvas, 0, 0, this.canvas.width, this.canvas.height, 0, 0, tempCanvas.width, tempCanvas.height); | |
| this.canvas.width = this.width = width; | |
| this.canvas.height = this.height = height; | |
| this.drawingContext.drawImage(tempCanvas, 0, 0, width, height, 0, 0, width, height); | |
| if (this.pixels.length > 0) { | |
| this.loadPixels(); | |
| } | |
| }; | |
| p5.Image.prototype.copy = function () { | |
| p5.prototype.copy.apply(this, arguments); | |
| }; | |
| p5.Image.prototype.mask = function (p5Image) { | |
| if (p5Image === undefined) { | |
| p5Image = this; | |
| } | |
| var currBlend = this.drawingContext.globalCompositeOperation; | |
| var scaleFactor = 1; | |
| if (p5Image instanceof p5.Graphics) { | |
| scaleFactor = p5Image._pInst._pixelDensity; | |
| } | |
| var copyArgs = [ | |
| p5Image, | |
| 0, | |
| 0, | |
| scaleFactor * p5Image.width, | |
| scaleFactor * p5Image.height, | |
| 0, | |
| 0, | |
| this.width, | |
| this.height | |
| ]; | |
| this.drawingContext.globalCompositeOperation = 'destination-in'; | |
| this.copy.apply(this, copyArgs); | |
| this.drawingContext.globalCompositeOperation = currBlend; | |
| }; | |
| p5.Image.prototype.filter = function (operation, value) { | |
| Filters.apply(this.canvas, Filters[operation.toLowerCase()], value); | |
| }; | |
| p5.Image.prototype.blend = function () { | |
| p5.prototype.blend.apply(this, arguments); | |
| }; | |
| p5.Image.prototype.save = function (filename, extension) { | |
| var mimeType; | |
| if (!extension) { | |
| extension = 'png'; | |
| mimeType = 'image/png'; | |
| } else { | |
| switch (extension.toLowerCase()) { | |
| case 'png': | |
| mimeType = 'image/png'; | |
| break; | |
| case 'jpeg': | |
| mimeType = 'image/jpeg'; | |
| break; | |
| case 'jpg': | |
| mimeType = 'image/jpeg'; | |
| break; | |
| default: | |
| mimeType = 'image/png'; | |
| break; | |
| } | |
| } | |
| var downloadMime = 'image/octet-stream'; | |
| var imageData = this.canvas.toDataURL(mimeType); | |
| imageData = imageData.replace(mimeType, downloadMime); | |
| p5.prototype.downloadFile(imageData, filename, extension); | |
| }; | |
| return p5.Image; | |
| }({}, amdclean['core'], amdclean['filters']); | |
| amdclean['p5File'] = function (require, core) { | |
| var p5 = core; | |
| p5.File = function (file, pInst) { | |
| this.file = file; | |
| this._pInst = pInst; | |
| var typeList = file.type.split('/'); | |
| this.type = typeList[0]; | |
| this.subtype = typeList[1]; | |
| this.name = file.name; | |
| this.size = file.size; | |
| this.data = undefined; | |
| }; | |
| return p5.File; | |
| }({}, amdclean['core']); | |
| amdclean['polargeometry'] = function (require) { | |
| return { | |
| degreesToRadians: function (x) { | |
| return 2 * Math.PI * x / 360; | |
| }, | |
| radiansToDegrees: function (x) { | |
| return 360 * x / (2 * Math.PI); | |
| } | |
| }; | |
| }({}); | |
| amdclean['p5Vector'] = function (require, core, polargeometry, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var polarGeometry = polargeometry; | |
| var constants = constants; | |
| p5.Vector = function () { | |
| var x, y, z; | |
| if (arguments[0] instanceof p5) { | |
| this.p5 = arguments[0]; | |
| x = arguments[1][0] || 0; | |
| y = arguments[1][1] || 0; | |
| z = arguments[1][2] || 0; | |
| } else { | |
| x = arguments[0] || 0; | |
| y = arguments[1] || 0; | |
| z = arguments[2] || 0; | |
| } | |
| this.x = x; | |
| this.y = y; | |
| this.z = z; | |
| }; | |
| p5.Vector.prototype.set = function (x, y, z) { | |
| if (x instanceof p5.Vector) { | |
| this.x = x.x || 0; | |
| this.y = x.y || 0; | |
| this.z = x.z || 0; | |
| return this; | |
| } | |
| if (x instanceof Array) { | |
| this.x = x[0] || 0; | |
| this.y = x[1] || 0; | |
| this.z = x[2] || 0; | |
| return this; | |
| } | |
| this.x = x || 0; | |
| this.y = y || 0; | |
| this.z = z || 0; | |
| return this; | |
| }; | |
| p5.Vector.prototype.copy = function () { | |
| if (this.p5) { | |
| return new p5.Vector(this.p5, [ | |
| this.x, | |
| this.y, | |
| this.z | |
| ]); | |
| } else { | |
| return new p5.Vector(this.x, this.y, this.z); | |
| } | |
| }; | |
| p5.Vector.prototype.add = function (x, y, z) { | |
| if (x instanceof p5.Vector) { | |
| this.x += x.x || 0; | |
| this.y += x.y || 0; | |
| this.z += x.z || 0; | |
| return this; | |
| } | |
| if (x instanceof Array) { | |
| this.x += x[0] || 0; | |
| this.y += x[1] || 0; | |
| this.z += x[2] || 0; | |
| return this; | |
| } | |
| this.x += x || 0; | |
| this.y += y || 0; | |
| this.z += z || 0; | |
| return this; | |
| }; | |
| p5.Vector.prototype.sub = function (x, y, z) { | |
| if (x instanceof p5.Vector) { | |
| this.x -= x.x || 0; | |
| this.y -= x.y || 0; | |
| this.z -= x.z || 0; | |
| return this; | |
| } | |
| if (x instanceof Array) { | |
| this.x -= x[0] || 0; | |
| this.y -= x[1] || 0; | |
| this.z -= x[2] || 0; | |
| return this; | |
| } | |
| this.x -= x || 0; | |
| this.y -= y || 0; | |
| this.z -= z || 0; | |
| return this; | |
| }; | |
| p5.Vector.prototype.mult = function (n) { | |
| this.x *= n || 0; | |
| this.y *= n || 0; | |
| this.z *= n || 0; | |
| return this; | |
| }; | |
| p5.Vector.prototype.div = function (n) { | |
| this.x /= n; | |
| this.y /= n; | |
| this.z /= n; | |
| return this; | |
| }; | |
| p5.Vector.prototype.mag = function () { | |
| return Math.sqrt(this.magSq()); | |
| }; | |
| p5.Vector.prototype.magSq = function () { | |
| var x = this.x, y = this.y, z = this.z; | |
| return x * x + y * y + z * z; | |
| }; | |
| p5.Vector.prototype.dot = function (x, y, z) { | |
| if (x instanceof p5.Vector) { | |
| return this.dot(x.x, x.y, x.z); | |
| } | |
| return this.x * (x || 0) + this.y * (y || 0) + this.z * (z || 0); | |
| }; | |
| p5.Vector.prototype.cross = function (v) { | |
| var x = this.y * v.z - this.z * v.y; | |
| var y = this.z * v.x - this.x * v.z; | |
| var z = this.x * v.y - this.y * v.x; | |
| if (this.p5) { | |
| return new p5.Vector(this.p5, [ | |
| x, | |
| y, | |
| z | |
| ]); | |
| } else { | |
| return new p5.Vector(x, y, z); | |
| } | |
| }; | |
| p5.Vector.prototype.dist = function (v) { | |
| var d = v.copy().sub(this); | |
| return d.mag(); | |
| }; | |
| p5.Vector.prototype.normalize = function () { | |
| return this.div(this.mag()); | |
| }; | |
| p5.Vector.prototype.limit = function (l) { | |
| var mSq = this.magSq(); | |
| if (mSq > l * l) { | |
| this.div(Math.sqrt(mSq)); | |
| this.mult(l); | |
| } | |
| return this; | |
| }; | |
| p5.Vector.prototype.setMag = function (n) { | |
| return this.normalize().mult(n); | |
| }; | |
| p5.Vector.prototype.heading = function () { | |
| var h = Math.atan2(this.y, this.x); | |
| if (this.p5) { | |
| if (this.p5._angleMode === constants.RADIANS) { | |
| return h; | |
| } else { | |
| return polarGeometry.radiansToDegrees(h); | |
| } | |
| } else { | |
| return h; | |
| } | |
| }; | |
| p5.Vector.prototype.rotate = function (a) { | |
| if (this.p5) { | |
| if (this.p5._angleMode === constants.DEGREES) { | |
| a = polarGeometry.degreesToRadians(a); | |
| } | |
| } | |
| var newHeading = this.heading() + a; | |
| var mag = this.mag(); | |
| this.x = Math.cos(newHeading) * mag; | |
| this.y = Math.sin(newHeading) * mag; | |
| return this; | |
| }; | |
| p5.Vector.prototype.lerp = function (x, y, z, amt) { | |
| if (x instanceof p5.Vector) { | |
| return this.lerp(x.x, x.y, x.z, y); | |
| } | |
| this.x += (x - this.x) * amt || 0; | |
| this.y += (y - this.y) * amt || 0; | |
| this.z += (z - this.z) * amt || 0; | |
| return this; | |
| }; | |
| p5.Vector.prototype.array = function () { | |
| return [ | |
| this.x || 0, | |
| this.y || 0, | |
| this.z || 0 | |
| ]; | |
| }; | |
| p5.Vector.fromAngle = function (angle) { | |
| if (this.p5) { | |
| if (this.p5._angleMode === constants.DEGREES) { | |
| angle = polarGeometry.degreesToRadians(angle); | |
| } | |
| } | |
| if (this.p5) { | |
| return new p5.Vector(this.p5, [ | |
| Math.cos(angle), | |
| Math.sin(angle), | |
| 0 | |
| ]); | |
| } else { | |
| return new p5.Vector(Math.cos(angle), Math.sin(angle), 0); | |
| } | |
| }; | |
| p5.Vector.random2D = function () { | |
| var angle; | |
| if (this.p5) { | |
| if (this.p5._angleMode === constants.DEGREES) { | |
| angle = this.p5.random(360); | |
| } else { | |
| angle = this.p5.random(constants.TWO_PI); | |
| } | |
| } else { | |
| angle = Math.random() * Math.PI * 2; | |
| } | |
| return this.fromAngle(angle); | |
| }; | |
| p5.Vector.random3D = function () { | |
| var angle, vz; | |
| if (this.p5) { | |
| angle = this.p5.random(0, constants.TWO_PI); | |
| vz = this.p5.random(-1, 1); | |
| } else { | |
| angle = Math.random() * Math.PI * 2; | |
| vz = Math.random() * 2 - 1; | |
| } | |
| var vx = Math.sqrt(1 - vz * vz) * Math.cos(angle); | |
| var vy = Math.sqrt(1 - vz * vz) * Math.sin(angle); | |
| if (this.p5) { | |
| return new p5.Vector(this.p5, [ | |
| vx, | |
| vy, | |
| vz | |
| ]); | |
| } else { | |
| return new p5.Vector(vx, vy, vz); | |
| } | |
| }; | |
| p5.Vector.add = function (v1, v2, target) { | |
| if (!target) { | |
| target = v1.copy(); | |
| } else { | |
| target.set(v1); | |
| } | |
| target.add(v2); | |
| return target; | |
| }; | |
| p5.Vector.sub = function (v1, v2, target) { | |
| if (!target) { | |
| target = v1.copy(); | |
| } else { | |
| target.set(v1); | |
| } | |
| target.sub(v2); | |
| return target; | |
| }; | |
| p5.Vector.mult = function (v, n, target) { | |
| if (!target) { | |
| target = v.copy(); | |
| } else { | |
| target.set(v); | |
| } | |
| target.mult(n); | |
| return target; | |
| }; | |
| p5.Vector.div = function (v, n, target) { | |
| if (!target) { | |
| target = v.copy(); | |
| } else { | |
| target.set(v); | |
| } | |
| target.div(n); | |
| return target; | |
| }; | |
| p5.Vector.dot = function (v1, v2) { | |
| return v1.dot(v2); | |
| }; | |
| p5.Vector.cross = function (v1, v2) { | |
| return v1.cross(v2); | |
| }; | |
| p5.Vector.dist = function (v1, v2) { | |
| return v1.dist(v2); | |
| }; | |
| p5.Vector.lerp = function (v1, v2, amt, target) { | |
| if (!target) { | |
| target = v1.copy(); | |
| } else { | |
| target.set(v1); | |
| } | |
| target.lerp(v2, amt); | |
| return target; | |
| }; | |
| p5.Vector.angleBetween = function (v1, v2) { | |
| var angle = Math.acos(v1.dot(v2) / (v1.mag() * v2.mag())); | |
| if (this.p5) { | |
| if (this.p5._angleMode === constants.DEGREES) { | |
| angle = polarGeometry.radiansToDegrees(angle); | |
| } | |
| } | |
| return angle; | |
| }; | |
| return p5.Vector; | |
| }({}, amdclean['core'], amdclean['polargeometry'], amdclean['constants']); | |
| amdclean['p5TableRow'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.TableRow = function (str, separator) { | |
| var arr = []; | |
| var obj = {}; | |
| if (str) { | |
| separator = separator || ','; | |
| arr = str.split(separator); | |
| } | |
| for (var i = 0; i < arr.length; i++) { | |
| var key = i; | |
| var val = arr[i]; | |
| obj[key] = val; | |
| } | |
| this.arr = arr; | |
| this.obj = obj; | |
| this.table = null; | |
| }; | |
| p5.TableRow.prototype.set = function (column, value) { | |
| if (typeof column === 'string') { | |
| var cPos = this.table.columns.indexOf(column); | |
| if (cPos >= 0) { | |
| this.obj[column] = value; | |
| this.arr[cPos] = value; | |
| } else { | |
| throw 'This table has no column named "' + column + '"'; | |
| } | |
| } else { | |
| if (column < this.table.columns.length) { | |
| this.arr[column] = value; | |
| var cTitle = this.table.columns[column]; | |
| this.obj[cTitle] = value; | |
| } else { | |
| throw 'Column #' + column + ' is out of the range of this table'; | |
| } | |
| } | |
| }; | |
| p5.TableRow.prototype.setNum = function (column, value) { | |
| var floatVal = parseFloat(value, 10); | |
| this.set(column, floatVal); | |
| }; | |
| p5.TableRow.prototype.setString = function (column, value) { | |
| var stringVal = value.toString(); | |
| this.set(column, stringVal); | |
| }; | |
| p5.TableRow.prototype.get = function (column) { | |
| if (typeof column === 'string') { | |
| return this.obj[column]; | |
| } else { | |
| return this.arr[column]; | |
| } | |
| }; | |
| p5.TableRow.prototype.getNum = function (column) { | |
| var ret; | |
| if (typeof column === 'string') { | |
| ret = parseFloat(this.obj[column], 10); | |
| } else { | |
| ret = parseFloat(this.arr[column], 10); | |
| } | |
| if (ret.toString() === 'NaN') { | |
| throw 'Error: ' + this.obj[column] + ' is NaN (Not a Number)'; | |
| } | |
| return ret; | |
| }; | |
| p5.TableRow.prototype.getString = function (column) { | |
| if (typeof column === 'string') { | |
| return this.obj[column].toString(); | |
| } else { | |
| return this.arr[column].toString(); | |
| } | |
| }; | |
| return p5.TableRow; | |
| }({}, amdclean['core']); | |
| amdclean['p5Table'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.Table = function (rows) { | |
| this.columns = []; | |
| this.rows = []; | |
| }; | |
| p5.Table.prototype.addRow = function (row) { | |
| var r = row || new p5.TableRow(); | |
| if (typeof r.arr === 'undefined' || typeof r.obj === 'undefined') { | |
| throw 'invalid TableRow: ' + r; | |
| } | |
| r.table = this; | |
| this.rows.push(r); | |
| return r; | |
| }; | |
| p5.Table.prototype.removeRow = function (id) { | |
| this.rows[id].table = null; | |
| var chunk = this.rows.splice(id + 1, this.rows.length); | |
| this.rows.pop(); | |
| this.rows = this.rows.concat(chunk); | |
| }; | |
| p5.Table.prototype.getRow = function (r) { | |
| return this.rows[r]; | |
| }; | |
| p5.Table.prototype.getRows = function () { | |
| return this.rows; | |
| }; | |
| p5.Table.prototype.findRow = function (value, column) { | |
| if (typeof column === 'string') { | |
| for (var i = 0; i < this.rows.length; i++) { | |
| if (this.rows[i].obj[column] === value) { | |
| return this.rows[i]; | |
| } | |
| } | |
| } else { | |
| for (var j = 0; j < this.rows.length; j++) { | |
| if (this.rows[j].arr[column] === value) { | |
| return this.rows[j]; | |
| } | |
| } | |
| } | |
| return null; | |
| }; | |
| p5.Table.prototype.findRows = function (value, column) { | |
| var ret = []; | |
| if (typeof column === 'string') { | |
| for (var i = 0; i < this.rows.length; i++) { | |
| if (this.rows[i].obj[column] === value) { | |
| ret.push(this.rows[i]); | |
| } | |
| } | |
| } else { | |
| for (var j = 0; j < this.rows.length; j++) { | |
| if (this.rows[j].arr[column] === value) { | |
| ret.push(this.rows[j]); | |
| } | |
| } | |
| } | |
| return ret; | |
| }; | |
| p5.Table.prototype.matchRow = function (regexp, column) { | |
| if (typeof column === 'number') { | |
| for (var j = 0; j < this.rows.length; j++) { | |
| if (this.rows[j].arr[column].match(regexp)) { | |
| return this.rows[j]; | |
| } | |
| } | |
| } else { | |
| for (var i = 0; i < this.rows.length; i++) { | |
| if (this.rows[i].obj[column].match(regexp)) { | |
| return this.rows[i]; | |
| } | |
| } | |
| } | |
| return null; | |
| }; | |
| p5.Table.prototype.matchRows = function (regexp, column) { | |
| var ret = []; | |
| if (typeof column === 'number') { | |
| for (var j = 0; j < this.rows.length; j++) { | |
| if (this.rows[j].arr[column].match(regexp)) { | |
| ret.push(this.rows[j]); | |
| } | |
| } | |
| } else { | |
| for (var i = 0; i < this.rows.length; i++) { | |
| if (this.rows[i].obj[column].match(regexp)) { | |
| ret.push(this.rows[i]); | |
| } | |
| } | |
| } | |
| return ret; | |
| }; | |
| p5.Table.prototype.getColumn = function (value) { | |
| var ret = []; | |
| if (typeof value === 'string') { | |
| for (var i = 0; i < this.rows.length; i++) { | |
| ret.push(this.rows[i].obj[value]); | |
| } | |
| } else { | |
| for (var j = 0; j < this.rows.length; j++) { | |
| ret.push(this.rows[j].arr[value]); | |
| } | |
| } | |
| return ret; | |
| }; | |
| p5.Table.prototype.clearRows = function () { | |
| delete this.rows; | |
| this.rows = []; | |
| }; | |
| p5.Table.prototype.addColumn = function (title) { | |
| var t = title || null; | |
| this.columns.push(t); | |
| }; | |
| p5.Table.prototype.getColumnCount = function () { | |
| return this.columns.length; | |
| }; | |
| p5.Table.prototype.getRowCount = function () { | |
| return this.rows.length; | |
| }; | |
| p5.Table.prototype.removeTokens = function (chars, column) { | |
| var escape = function (s) { | |
| return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); | |
| }; | |
| var charArray = []; | |
| for (var i = 0; i < chars.length; i++) { | |
| charArray.push(escape(chars.charAt(i))); | |
| } | |
| var regex = new RegExp(charArray.join('|'), 'g'); | |
| if (typeof column === 'undefined') { | |
| for (var c = 0; c < this.columns.length; c++) { | |
| for (var d = 0; d < this.rows.length; d++) { | |
| var s = this.rows[d].arr[c]; | |
| s = s.replace(regex, ''); | |
| this.rows[d].arr[c] = s; | |
| this.rows[d].obj[this.columns[c]] = s; | |
| } | |
| } | |
| } else if (typeof column === 'string') { | |
| for (var j = 0; j < this.rows.length; j++) { | |
| var val = this.rows[j].obj[column]; | |
| val = val.replace(regex, ''); | |
| this.rows[j].obj[column] = val; | |
| var pos = this.columns.indexOf(column); | |
| this.rows[j].arr[pos] = val; | |
| } | |
| } else { | |
| for (var k = 0; k < this.rows.length; k++) { | |
| var str = this.rows[k].arr[column]; | |
| str = str.replace(regex, ''); | |
| this.rows[k].arr[column] = str; | |
| this.rows[k].obj[this.columns[column]] = str; | |
| } | |
| } | |
| }; | |
| p5.Table.prototype.trim = function (column) { | |
| var regex = new RegExp(' ', 'g'); | |
| if (typeof column === 'undefined') { | |
| for (var c = 0; c < this.columns.length; c++) { | |
| for (var d = 0; d < this.rows.length; d++) { | |
| var s = this.rows[d].arr[c]; | |
| s = s.replace(regex, ''); | |
| this.rows[d].arr[c] = s; | |
| this.rows[d].obj[this.columns[c]] = s; | |
| } | |
| } | |
| } else if (typeof column === 'string') { | |
| for (var j = 0; j < this.rows.length; j++) { | |
| var val = this.rows[j].obj[column]; | |
| val = val.replace(regex, ''); | |
| this.rows[j].obj[column] = val; | |
| var pos = this.columns.indexOf(column); | |
| this.rows[j].arr[pos] = val; | |
| } | |
| } else { | |
| for (var k = 0; k < this.rows.length; k++) { | |
| var str = this.rows[k].arr[column]; | |
| str = str.replace(regex, ''); | |
| this.rows[k].arr[column] = str; | |
| this.rows[k].obj[this.columns[column]] = str; | |
| } | |
| } | |
| }; | |
| p5.Table.prototype.removeColumn = function (c) { | |
| var cString; | |
| var cNumber; | |
| if (typeof c === 'string') { | |
| cString = c; | |
| cNumber = this.columns.indexOf(c); | |
| console.log('string'); | |
| } else { | |
| cNumber = c; | |
| cString = this.columns[c]; | |
| } | |
| var chunk = this.columns.splice(cNumber + 1, this.columns.length); | |
| this.columns.pop(); | |
| this.columns = this.columns.concat(chunk); | |
| for (var i = 0; i < this.rows.length; i++) { | |
| var tempR = this.rows[i].arr; | |
| var chip = tempR.splice(cNumber + 1, tempR.length); | |
| tempR.pop(); | |
| this.rows[i].arr = tempR.concat(chip); | |
| delete this.rows[i].obj[cString]; | |
| } | |
| }; | |
| p5.Table.prototype.set = function (row, column, value) { | |
| this.rows[row].set(column, value); | |
| }; | |
| p5.Table.prototype.setNum = function (row, column, value) { | |
| this.rows[row].set(column, value); | |
| }; | |
| p5.Table.prototype.setString = function (row, column, value) { | |
| this.rows[row].set(column, value); | |
| }; | |
| p5.Table.prototype.get = function (row, column) { | |
| return this.rows[row].get(column); | |
| }; | |
| p5.Table.prototype.getNum = function (row, column) { | |
| return this.rows[row].getNum(column); | |
| }; | |
| p5.Table.prototype.getString = function (row, column) { | |
| return this.rows[row].getString(column); | |
| }; | |
| return p5.Table; | |
| }({}, amdclean['core']); | |
| amdclean['colorcreating_reading'] = function (require, core, p5Color) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.alpha = function (c) { | |
| if (c instanceof p5.Color || c instanceof Array) { | |
| return this.color(c).getAlpha(); | |
| } else { | |
| throw new Error('Needs p5.Color or pixel array as argument.'); | |
| } | |
| }; | |
| p5.prototype.blue = function (c) { | |
| if (c instanceof p5.Color || c instanceof Array) { | |
| return this.color(c).getBlue(); | |
| } else { | |
| throw new Error('Needs p5.Color or pixel array as argument.'); | |
| } | |
| }; | |
| p5.prototype.brightness = function (c) { | |
| if (!c instanceof p5.Color) { | |
| throw new Error('Needs p5.Color as argument.'); | |
| } | |
| return c.getBrightness(); | |
| }; | |
| p5.prototype.color = function () { | |
| if (arguments[0] instanceof p5.Color) { | |
| return arguments[0]; | |
| } else if (arguments[0] instanceof Array) { | |
| return new p5.Color(this, arguments[0]); | |
| } else { | |
| var args = Array.prototype.slice.call(arguments); | |
| return new p5.Color(this, args); | |
| } | |
| }; | |
| p5.prototype.green = function (c) { | |
| if (c instanceof p5.Color || c instanceof Array) { | |
| return this.color(c).getGreen(); | |
| } else { | |
| throw new Error('Needs p5.Color or pixel array as argument.'); | |
| } | |
| }; | |
| p5.prototype.hue = function (c) { | |
| if (!c instanceof p5.Color) { | |
| throw new Error('Needs p5.Color as argument.'); | |
| } | |
| return c.getHue(); | |
| }; | |
| p5.prototype.lerpColor = function (c1, c2, amt) { | |
| if (c1 instanceof Array) { | |
| var c = []; | |
| for (var i = 0; i < c1.length; i++) { | |
| c.push(p5.prototype.lerp(c1[i], c2[i], amt)); | |
| } | |
| return c; | |
| } else if (c1 instanceof p5.Color) { | |
| var pc = []; | |
| for (var j = 0; j < 4; j++) { | |
| pc.push(p5.prototype.lerp(c1.rgba[j], c2.rgba[j], amt)); | |
| } | |
| return new p5.Color(this, pc); | |
| } else { | |
| return p5.prototype.lerp(c1, c2, amt); | |
| } | |
| }; | |
| p5.prototype.red = function (c) { | |
| if (c instanceof p5.Color || c instanceof Array) { | |
| return this.color(c).getRed(); | |
| } else { | |
| throw new Error('Needs p5.Color or pixel array as argument.'); | |
| } | |
| }; | |
| p5.prototype.saturation = function (c) { | |
| if (!c instanceof p5.Color) { | |
| throw new Error('Needs p5.Color as argument.'); | |
| } | |
| return c.getSaturation(); | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['p5Color']); | |
| amdclean['colorsetting'] = function (require, core, constants, p5Color) { | |
| 'use strict'; | |
| var p5 = core; | |
| var constants = constants; | |
| p5.prototype._doStroke = true; | |
| p5.prototype._doFill = true; | |
| p5.prototype._colorMode = constants.RGB; | |
| p5.prototype._maxRGB = [ | |
| 255, | |
| 255, | |
| 255, | |
| 255 | |
| ]; | |
| p5.prototype._maxHSB = [ | |
| 255, | |
| 255, | |
| 255, | |
| 255 | |
| ]; | |
| p5.prototype.background = function () { | |
| this.drawingContext.save(); | |
| this.drawingContext.setTransform(1, 0, 0, 1, 0, 0); | |
| this.drawingContext.scale(this._pixelDensity, this._pixelDensity); | |
| if (arguments[0] instanceof p5.Image) { | |
| this.image(arguments[0], 0, 0, this.width, this.height); | |
| } else { | |
| var curFill = this.drawingContext.fillStyle; | |
| var color = this.color.apply(this, arguments); | |
| var newFill = color.toString(); | |
| this.drawingContext.fillStyle = newFill; | |
| this.drawingContext.fillRect(0, 0, this.width, this.height); | |
| this.drawingContext.fillStyle = curFill; | |
| } | |
| this.drawingContext.restore(); | |
| }; | |
| p5.prototype.clear = function () { | |
| this.drawingContext.clearRect(0, 0, this.width, this.height); | |
| }; | |
| p5.prototype.colorMode = function () { | |
| if (arguments[0] === constants.RGB || arguments[0] === constants.HSB) { | |
| this._colorMode = arguments[0]; | |
| var isRGB = this._colorMode === constants.RGB; | |
| var maxArr = isRGB ? this._maxRGB : this._maxHSB; | |
| if (arguments.length === 2) { | |
| maxArr[0] = arguments[1]; | |
| maxArr[1] = arguments[1]; | |
| maxArr[2] = arguments[1]; | |
| maxArr[3] = arguments[1]; | |
| } else if (arguments.length > 2) { | |
| maxArr[0] = arguments[1]; | |
| maxArr[1] = arguments[2]; | |
| maxArr[2] = arguments[3]; | |
| } | |
| if (arguments.length === 5) { | |
| maxArr[3] = arguments[4]; | |
| } | |
| } | |
| }; | |
| p5.prototype.fill = function () { | |
| this._setProperty('_doFill', true); | |
| var ctx = this.drawingContext; | |
| var color = this.color.apply(this, arguments); | |
| ctx.fillStyle = color.toString(); | |
| }; | |
| p5.prototype.noFill = function () { | |
| this._setProperty('_doFill', false); | |
| }; | |
| p5.prototype.noStroke = function () { | |
| this._setProperty('_doStroke', false); | |
| }; | |
| p5.prototype.stroke = function () { | |
| this._setProperty('_doStroke', true); | |
| var ctx = this.drawingContext; | |
| var color = this.color.apply(this, arguments); | |
| ctx.strokeStyle = color.toString(); | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants'], amdclean['p5Color']); | |
| amdclean['dataconversion'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.float = function (str) { | |
| return parseFloat(str); | |
| }; | |
| p5.prototype.int = function (n, radix) { | |
| if (typeof n === 'string') { | |
| radix = radix || 10; | |
| return parseInt(n, radix); | |
| } else if (typeof n === 'number') { | |
| return n | 0; | |
| } else if (typeof n === 'boolean') { | |
| return n ? 1 : 0; | |
| } else if (n instanceof Array) { | |
| return n.map(p5.prototype.int); | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['dataarray_functions'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.append = function (array, value) { | |
| array.push(value); | |
| return array; | |
| }; | |
| p5.prototype.arrayCopy = function (src, srcPosition, dst, dstPosition, length) { | |
| var start, end; | |
| if (typeof length !== 'undefined') { | |
| end = Math.min(length, src.length); | |
| start = dstPosition; | |
| src = src.slice(srcPosition, end + srcPosition); | |
| } else { | |
| if (typeof dst !== 'undefined') { | |
| end = dst; | |
| end = Math.min(end, src.length); | |
| } else { | |
| end = src.length; | |
| } | |
| start = 0; | |
| dst = srcPosition; | |
| src = src.slice(0, end); | |
| } | |
| Array.prototype.splice.apply(dst, [ | |
| start, | |
| end | |
| ].concat(src)); | |
| }; | |
| p5.prototype.concat = function (list0, list1) { | |
| return list0.concat(list1); | |
| }; | |
| p5.prototype.reverse = function (list) { | |
| return list.reverse(); | |
| }; | |
| p5.prototype.shorten = function (list) { | |
| list.pop(); | |
| return list; | |
| }; | |
| p5.prototype.shuffle = function (arr, bool) { | |
| arr = bool || ArrayBuffer.isView(arr) ? arr : arr.slice(); | |
| var rnd, tmp, idx = arr.length; | |
| while (idx > 1) { | |
| rnd = Math.random() * idx | 0; | |
| tmp = arr[--idx]; | |
| arr[idx] = arr[rnd]; | |
| arr[rnd] = tmp; | |
| } | |
| return arr; | |
| }; | |
| p5.prototype.sort = function (list, count) { | |
| var arr = count ? list.slice(0, Math.min(count, list.length)) : list; | |
| var rest = count ? list.slice(Math.min(count, list.length)) : []; | |
| if (typeof arr[0] === 'string') { | |
| arr = arr.sort(); | |
| } else { | |
| arr = arr.sort(function (a, b) { | |
| return a - b; | |
| }); | |
| } | |
| return arr.concat(rest); | |
| }; | |
| p5.prototype.splice = function (list, value, index) { | |
| Array.prototype.splice.apply(list, [ | |
| index, | |
| 0 | |
| ].concat(value)); | |
| return list; | |
| }; | |
| p5.prototype.subset = function (list, start, count) { | |
| if (typeof count !== 'undefined') { | |
| return list.slice(start, start + count); | |
| } else { | |
| return list.slice(start, list.length); | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['datastring_functions'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.join = function (list, separator) { | |
| return list.join(separator); | |
| }; | |
| p5.prototype.match = function (str, reg) { | |
| return str.match(reg); | |
| }; | |
| p5.prototype.matchAll = function (str, reg) { | |
| var re = new RegExp(reg, 'g'); | |
| var match = re.exec(str); | |
| var matches = []; | |
| while (match !== null) { | |
| matches.push(match); | |
| match = re.exec(str); | |
| } | |
| return matches; | |
| }; | |
| p5.prototype.nf = function () { | |
| if (arguments[0] instanceof Array) { | |
| var a = arguments[1]; | |
| var b = arguments[2]; | |
| return arguments[0].map(function (x) { | |
| return doNf(x, a, b); | |
| }); | |
| } else { | |
| return doNf.apply(this, arguments); | |
| } | |
| }; | |
| function doNf() { | |
| var num = arguments[0]; | |
| var neg = num < 0; | |
| var n = neg ? num.toString().substring(1) : num.toString(); | |
| var decimalInd = n.indexOf('.'); | |
| var intPart = decimalInd !== -1 ? n.substring(0, decimalInd) : n; | |
| var decPart = decimalInd !== -1 ? n.substring(decimalInd + 1) : ''; | |
| var str = neg ? '-' : ''; | |
| if (arguments.length === 3) { | |
| for (var i = 0; i < arguments[1] - intPart.length; i++) { | |
| str += '0'; | |
| } | |
| str += intPart; | |
| str += '.'; | |
| str += decPart; | |
| for (var j = 0; j < arguments[2] - decPart.length; j++) { | |
| str += '0'; | |
| } | |
| return str; | |
| } else { | |
| for (var k = 0; k < Math.max(arguments[1] - intPart.length, 0); k++) { | |
| str += '0'; | |
| } | |
| str += n; | |
| return str; | |
| } | |
| } | |
| p5.prototype.nfc = function () { | |
| if (arguments[0] instanceof Array) { | |
| var a = arguments[1]; | |
| return arguments[0].map(function (x) { | |
| return doNfc(x, a); | |
| }); | |
| } else { | |
| return doNfc.apply(this, arguments); | |
| } | |
| }; | |
| function doNfc() { | |
| var num = arguments[0].toString(); | |
| var dec = num.indexOf('.'); | |
| var rem = dec !== -1 ? num.substring(dec) : ''; | |
| var n = dec !== -1 ? num.substring(0, dec) : num; | |
| n = n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); | |
| if (arguments[1] === 0) { | |
| rem = ''; | |
| } | |
| if (arguments.length > 1) { | |
| rem = rem.substring(0, arguments[1] + 1); | |
| } | |
| return n + rem; | |
| } | |
| p5.prototype.nfp = function () { | |
| var nfRes = this.nf(arguments); | |
| if (nfRes instanceof Array) { | |
| return nfRes.map(addNfp); | |
| } else { | |
| return addNfp(nfRes); | |
| } | |
| }; | |
| function addNfp() { | |
| return parseFloat(arguments[0]) > 0 ? '+' + arguments[0].toString() : arguments[0].toString(); | |
| } | |
| p5.prototype.nfs = function () { | |
| var nfRes = this.nf(arguments); | |
| if (nfRes instanceof Array) { | |
| return nfRes.map(addNfs); | |
| } else { | |
| return addNfs(nfRes); | |
| } | |
| }; | |
| function addNfs() { | |
| return parseFloat(arguments[0]) > 0 ? ' ' + arguments[0].toString() : arguments[0].toString(); | |
| } | |
| p5.prototype.split = function (str, delim) { | |
| return str.split(delim); | |
| }; | |
| p5.prototype.splitTokens = function () { | |
| var d = arguments.length > 0 ? arguments[1] : /\s/g; | |
| return arguments[0].split(d).filter(function (n) { | |
| return n; | |
| }); | |
| }; | |
| p5.prototype.trim = function (str) { | |
| if (str instanceof Array) { | |
| return str.map(this.trim); | |
| } else { | |
| return str.trim(); | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['environment'] = function (require, core, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var C = constants; | |
| var standardCursors = [ | |
| C.ARROW, | |
| C.CROSS, | |
| C.HAND, | |
| C.MOVE, | |
| C.TEXT, | |
| C.WAIT | |
| ]; | |
| p5.prototype._frameRate = 0; | |
| p5.prototype._lastFrameTime = new Date().getTime(); | |
| p5.prototype._targetFrameRate = 60; | |
| p5.prototype.frameCount = 0; | |
| p5.prototype.focused = true; | |
| p5.prototype.cursor = function (type, x, y) { | |
| var cursor = 'auto'; | |
| var canvas = this._curElement.elt; | |
| if (standardCursors.indexOf(type) > -1) { | |
| cursor = type; | |
| } else if (typeof type === 'string') { | |
| var coords = ''; | |
| if (x && y && (typeof x === 'number' && typeof y === 'number')) { | |
| coords = x + ' ' + y; | |
| } | |
| if (type.substring(0, 6) !== 'http://') { | |
| cursor = 'url(' + type + ') ' + coords + ', auto'; | |
| } else if (/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(type)) { | |
| cursor = 'url(' + type + ') ' + coords + ', auto'; | |
| } else { | |
| cursor = type; | |
| } | |
| } | |
| canvas.style.cursor = cursor; | |
| }; | |
| p5.prototype.frameRate = function (fps) { | |
| if (typeof fps === 'undefined') { | |
| return this._frameRate; | |
| } else { | |
| this._setProperty('_targetFrameRate', fps); | |
| this._runFrames(); | |
| return this; | |
| } | |
| }; | |
| p5.prototype.getFrameRate = function () { | |
| return this.frameRate(); | |
| }; | |
| p5.prototype.setFrameRate = function (fps) { | |
| return this.frameRate(fps); | |
| }; | |
| p5.prototype.noCursor = function () { | |
| this._curElement.elt.style.cursor = 'none'; | |
| }; | |
| p5.prototype.displayWidth = screen.width; | |
| p5.prototype.displayHeight = screen.height; | |
| p5.prototype.windowWidth = window.innerWidth; | |
| p5.prototype.windowHeight = window.innerHeight; | |
| p5.prototype._onresize = function (e) { | |
| this._setProperty('windowWidth', window.innerWidth); | |
| this._setProperty('windowHeight', window.innerHeight); | |
| var context = this._isGlobal ? window : this; | |
| var executeDefault; | |
| if (typeof context.windowResized === 'function') { | |
| executeDefault = context.windowResized(e); | |
| if (executeDefault !== undefined && !executeDefault) { | |
| e.preventDefault(); | |
| } | |
| } | |
| }; | |
| p5.prototype.width = 0; | |
| p5.prototype.height = 0; | |
| p5.prototype.fullscreen = function (val) { | |
| if (typeof val === 'undefined') { | |
| return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement; | |
| } else { | |
| if (val) { | |
| launchFullscreen(document.documentElement); | |
| } else { | |
| exitFullscreen(); | |
| } | |
| } | |
| }; | |
| p5.prototype.devicePixelScaling = function (val) { | |
| if (val) { | |
| if (typeof val === 'number') { | |
| this._pixelDensity = val; | |
| } else { | |
| this._pixelDensity = window.devicePixelRatio || 1; | |
| } | |
| } else { | |
| this._pixelDensity = 1; | |
| } | |
| this.resizeCanvas(this.width, this.height, true); | |
| }; | |
| function launchFullscreen(element) { | |
| var enabled = document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled; | |
| if (!enabled) { | |
| throw new Error('Fullscreen not enabled in this browser.'); | |
| } | |
| if (element.requestFullscreen) { | |
| element.requestFullscreen(); | |
| } else if (element.mozRequestFullScreen) { | |
| element.mozRequestFullScreen(); | |
| } else if (element.webkitRequestFullscreen) { | |
| element.webkitRequestFullscreen(); | |
| } else if (element.msRequestFullscreen) { | |
| element.msRequestFullscreen(); | |
| } | |
| } | |
| function exitFullscreen() { | |
| if (document.exitFullscreen) { | |
| document.exitFullscreen(); | |
| } else if (document.mozCancelFullScreen) { | |
| document.mozCancelFullScreen(); | |
| } else if (document.webkitExitFullscreen) { | |
| document.webkitExitFullscreen(); | |
| } else if (document.msExitFullscreen) { | |
| document.msExitFullscreen(); | |
| } | |
| } | |
| p5.prototype.getURL = function () { | |
| return location.href; | |
| }; | |
| p5.prototype.getURLPath = function () { | |
| return location.pathname.split('/').filter(function (v) { | |
| return v !== ''; | |
| }); | |
| }; | |
| p5.prototype.getURLParams = function () { | |
| var re = /[?&]([^&=]+)(?:[&=])([^&=]+)/gim; | |
| var m; | |
| var v = {}; | |
| while ((m = re.exec(location.search)) != null) { | |
| if (m.index === re.lastIndex) { | |
| re.lastIndex++; | |
| } | |
| v[m[1]] = m[2]; | |
| } | |
| return v; | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants']); | |
| amdclean['imageimage'] = function (require, core, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var constants = constants; | |
| p5.prototype._imageMode = constants.CORNER; | |
| p5.prototype._tint = null; | |
| p5.prototype.createImage = function (width, height) { | |
| return new p5.Image(width, height); | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants']); | |
| amdclean['canvas'] = function (require, constants) { | |
| var constants = constants; | |
| return { | |
| modeAdjust: function (a, b, c, d, mode) { | |
| if (mode === constants.CORNER) { | |
| return { | |
| x: a, | |
| y: b, | |
| w: c, | |
| h: d | |
| }; | |
| } else if (mode === constants.CORNERS) { | |
| return { | |
| x: a, | |
| y: b, | |
| w: c - a, | |
| h: d - b | |
| }; | |
| } else if (mode === constants.RADIUS) { | |
| return { | |
| x: a - c, | |
| y: b - d, | |
| w: 2 * c, | |
| h: 2 * d | |
| }; | |
| } else if (mode === constants.CENTER) { | |
| return { | |
| x: a - c * 0.5, | |
| y: b - d * 0.5, | |
| w: c, | |
| h: d | |
| }; | |
| } | |
| }, | |
| arcModeAdjust: function (a, b, c, d, mode) { | |
| if (mode === constants.CORNER) { | |
| return { | |
| x: a + c * 0.5, | |
| y: b + d * 0.5, | |
| w: c, | |
| h: d | |
| }; | |
| } else if (mode === constants.CORNERS) { | |
| return { | |
| x: a, | |
| y: b, | |
| w: c + a, | |
| h: d + b | |
| }; | |
| } else if (mode === constants.RADIUS) { | |
| return { | |
| x: a, | |
| y: b, | |
| w: 2 * c, | |
| h: 2 * d | |
| }; | |
| } else if (mode === constants.CENTER) { | |
| return { | |
| x: a, | |
| y: b, | |
| w: c, | |
| h: d | |
| }; | |
| } | |
| } | |
| }; | |
| }({}, amdclean['constants']); | |
| amdclean['imageloading_displaying'] = function (require, core, filters, canvas, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var Filters = filters; | |
| var canvas = canvas; | |
| var constants = constants; | |
| p5.prototype.loadImage = function (path, successCallback, failureCallback) { | |
| var img = new Image(); | |
| var pImg = new p5.Image(1, 1, this); | |
| img.onload = function () { | |
| pImg.width = pImg.canvas.width = img.width; | |
| pImg.height = pImg.canvas.height = img.height; | |
| pImg.canvas.getContext('2d').drawImage(img, 0, 0); | |
| if (typeof successCallback === 'function') { | |
| successCallback(pImg); | |
| } | |
| }; | |
| img.onerror = function (e) { | |
| if (typeof failureCallback === 'function') { | |
| failureCallback(e); | |
| } | |
| }; | |
| if (path.indexOf('data:image/') !== 0) { | |
| img.crossOrigin = 'Anonymous'; | |
| } | |
| img.src = path; | |
| return pImg; | |
| }; | |
| p5.prototype.image = function (img, x, y, width, height) { | |
| var frame = img.canvas || img.elt; | |
| x = x || 0; | |
| y = y || 0; | |
| width = width || img.width; | |
| height = height || img.height; | |
| var vals = canvas.modeAdjust(x, y, width, height, this._imageMode); | |
| try { | |
| if (this._tint && img.canvas) { | |
| this.drawingContext.drawImage(this._getTintedImageCanvas(img), vals.x, vals.y, vals.w, vals.h); | |
| } else { | |
| this.drawingContext.drawImage(frame, vals.x, vals.y, vals.w, vals.h); | |
| } | |
| } catch (e) { | |
| if (e.name !== 'NS_ERROR_NOT_AVAILABLE') { | |
| throw e; | |
| } | |
| } | |
| }; | |
| p5.prototype.tint = function () { | |
| var c = this.color.apply(this, arguments); | |
| this._tint = c.rgba; | |
| }; | |
| p5.prototype.noTint = function () { | |
| this._tint = null; | |
| }; | |
| p5.prototype._getTintedImageCanvas = function (img) { | |
| if (!img.canvas) { | |
| return img; | |
| } | |
| var pixels = Filters._toPixels(img.canvas); | |
| var tmpCanvas = document.createElement('canvas'); | |
| tmpCanvas.width = img.canvas.width; | |
| tmpCanvas.height = img.canvas.height; | |
| var tmpCtx = tmpCanvas.getContext('2d'); | |
| var id = tmpCtx.createImageData(img.canvas.width, img.canvas.height); | |
| var newPixels = id.data; | |
| for (var i = 0; i < pixels.length; i += 4) { | |
| var r = pixels[i]; | |
| var g = pixels[i + 1]; | |
| var b = pixels[i + 2]; | |
| var a = pixels[i + 3]; | |
| newPixels[i] = r * this._tint[0] / 255; | |
| newPixels[i + 1] = g * this._tint[1] / 255; | |
| newPixels[i + 2] = b * this._tint[2] / 255; | |
| newPixels[i + 3] = a * this._tint[3] / 255; | |
| } | |
| tmpCtx.putImageData(id, 0, 0); | |
| return tmpCanvas; | |
| }; | |
| p5.prototype.imageMode = function (m) { | |
| if (m === constants.CORNER || m === constants.CORNERS || m === constants.CENTER) { | |
| this._imageMode = m; | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['filters'], amdclean['canvas'], amdclean['constants']); | |
| amdclean['imagepixels'] = function (require, core, filters, p5Color) { | |
| 'use strict'; | |
| var p5 = core; | |
| var Filters = filters; | |
| p5.prototype.pixels = []; | |
| p5.prototype.blend = function () { | |
| var currBlend = this.drawingContext.globalCompositeOperation; | |
| var blendMode = arguments[arguments.length - 1]; | |
| var copyArgs = Array.prototype.slice.call(arguments, 0, arguments.length - 1); | |
| this.drawingContext.globalCompositeOperation = blendMode; | |
| this.copy.apply(this, copyArgs); | |
| this.drawingContext.globalCompositeOperation = currBlend; | |
| }; | |
| p5.prototype.copy = function () { | |
| var srcImage, sx, sy, sw, sh, dx, dy, dw, dh; | |
| if (arguments.length === 9) { | |
| srcImage = arguments[0]; | |
| sx = arguments[1]; | |
| sy = arguments[2]; | |
| sw = arguments[3]; | |
| sh = arguments[4]; | |
| dx = arguments[5]; | |
| dy = arguments[6]; | |
| dw = arguments[7]; | |
| dh = arguments[8]; | |
| } else if (arguments.length === 8) { | |
| sx = arguments[0]; | |
| sy = arguments[1]; | |
| sw = arguments[2]; | |
| sh = arguments[3]; | |
| dx = arguments[4]; | |
| dy = arguments[5]; | |
| dw = arguments[6]; | |
| dh = arguments[7]; | |
| srcImage = this; | |
| } else { | |
| throw new Error('Signature not supported'); | |
| } | |
| var s = srcImage.canvas.width / srcImage.width; | |
| this.drawingContext.drawImage(srcImage.canvas, s * sx, s * sy, s * sw, s * sh, dx, dy, dw, dh); | |
| }; | |
| p5.prototype.filter = function (operation, value) { | |
| Filters.apply(this.canvas, Filters[operation.toLowerCase()], value); | |
| }; | |
| p5.prototype.get = function (x, y, w, h) { | |
| if (x === undefined && y === undefined && w === undefined && h === undefined) { | |
| x = 0; | |
| y = 0; | |
| w = this.width; | |
| h = this.height; | |
| } else if (w === undefined && h === undefined) { | |
| w = 1; | |
| h = 1; | |
| } | |
| if (x > this.width || y > this.height || x < 0 || y < 0) { | |
| return [ | |
| 0, | |
| 0, | |
| 0, | |
| 255 | |
| ]; | |
| } | |
| var imageData = this.drawingContext.getImageData(x, y, w, h); | |
| var data = imageData.data; | |
| if (w === 1 && h === 1) { | |
| var pixels = []; | |
| for (var i = 0; i < data.length; i += 4) { | |
| pixels.push(data[i], data[i + 1], data[i + 2], data[i + 3]); | |
| } | |
| return pixels; | |
| } else { | |
| w = Math.min(w, this.width); | |
| h = Math.min(h, this.height); | |
| var region = new p5.Image(w, h); | |
| region.canvas.getContext('2d').putImageData(imageData, 0, 0, 0, 0, w, h); | |
| return region; | |
| } | |
| }; | |
| p5.prototype.loadPixels = function () { | |
| var width = this.width; | |
| var height = this.height; | |
| var imageData = this.drawingContext.getImageData(0, 0, width, height); | |
| this._setProperty('imageData', imageData); | |
| this._setProperty('pixels', imageData.data); | |
| }; | |
| p5.prototype.set = function (x, y, imgOrCol) { | |
| if (imgOrCol instanceof p5.Image) { | |
| this.drawingContext.save(); | |
| this.drawingContext.setTransform(1, 0, 0, 1, 0, 0); | |
| this.drawingContext.scale(this._pixelDensity, this._pixelDensity); | |
| this.drawingContext.drawImage(imgOrCol.canvas, x, y); | |
| this.loadPixels.call(this); | |
| this.drawingContext.restore(); | |
| } else { | |
| var idx = 4 * (y * this.width + x); | |
| if (!this.imageData) { | |
| this.loadPixels.call(this); | |
| } | |
| if (typeof imgOrCol === 'number') { | |
| if (idx < this.pixels.length) { | |
| this.pixels[idx] = imgOrCol; | |
| this.pixels[idx + 1] = imgOrCol; | |
| this.pixels[idx + 2] = imgOrCol; | |
| this.pixels[idx + 3] = 255; | |
| } | |
| } else if (imgOrCol instanceof Array) { | |
| if (imgOrCol.length < 4) { | |
| throw new Error('pixel array must be of the form [R, G, B, A]'); | |
| } | |
| if (idx < this.pixels.length) { | |
| this.pixels[idx] = imgOrCol[0]; | |
| this.pixels[idx + 1] = imgOrCol[1]; | |
| this.pixels[idx + 2] = imgOrCol[2]; | |
| this.pixels[idx + 3] = imgOrCol[3]; | |
| } | |
| } else if (imgOrCol instanceof p5.Color) { | |
| if (idx < this.pixels.length) { | |
| this.pixels[idx] = imgOrCol.rgba[0]; | |
| this.pixels[idx + 1] = imgOrCol.rgba[1]; | |
| this.pixels[idx + 2] = imgOrCol.rgba[2]; | |
| this.pixels[idx + 3] = imgOrCol.rgba[3]; | |
| } | |
| } | |
| } | |
| }; | |
| p5.prototype.updatePixels = function (x, y, w, h) { | |
| if (x === undefined && y === undefined && w === undefined && h === undefined) { | |
| x = 0; | |
| y = 0; | |
| w = this.width; | |
| h = this.height; | |
| } | |
| this.drawingContext.putImageData(this.imageData, x, y, 0, 0, w, h); | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['filters'], amdclean['p5Color']); | |
| !function (name, context, definition) { | |
| if (typeof module != 'undefined' && module.exports) | |
| module.exports = definition(); | |
| else if (typeof define == 'function' && define.amd) | |
| define('reqwest', definition); | |
| else | |
| context[name] = definition(); | |
| }('reqwest', amdclean, function () { | |
| var win = window, doc = document, httpsRe = /^http/, protocolRe = /(^\w+):\/\//, twoHundo = /^(20\d|1223)$/, byTag = 'getElementsByTagName', readyState = 'readyState', contentType = 'Content-Type', requestedWith = 'X-Requested-With', head = doc[byTag]('head')[0], uniqid = 0, callbackPrefix = 'reqwest_' + +new Date(), lastValue, xmlHttpRequest = 'XMLHttpRequest', xDomainRequest = 'XDomainRequest', noop = function () { | |
| }, isArray = typeof Array.isArray == 'function' ? Array.isArray : function (a) { | |
| return a instanceof Array; | |
| }, defaultHeaders = { | |
| 'contentType': 'application/x-www-form-urlencoded', | |
| 'requestedWith': xmlHttpRequest, | |
| 'accept': { | |
| '*': 'text/javascript, text/html, application/xml, text/xml, */*', | |
| 'xml': 'application/xml, text/xml', | |
| 'html': 'text/html', | |
| 'text': 'text/plain', | |
| 'json': 'application/json, text/javascript', | |
| 'js': 'application/javascript, text/javascript' | |
| } | |
| }, xhr = function (o) { | |
| if (o['crossOrigin'] === true) { | |
| var xhr = win[xmlHttpRequest] ? new XMLHttpRequest() : null; | |
| if (xhr && 'withCredentials' in xhr) { | |
| return xhr; | |
| } else if (win[xDomainRequest]) { | |
| return new XDomainRequest(); | |
| } else { | |
| throw new Error('Browser does not support cross-origin requests'); | |
| } | |
| } else if (win[xmlHttpRequest]) { | |
| return new XMLHttpRequest(); | |
| } else { | |
| return new ActiveXObject('Microsoft.XMLHTTP'); | |
| } | |
| }, globalSetupOptions = { | |
| dataFilter: function (data) { | |
| return data; | |
| } | |
| }; | |
| function succeed(r) { | |
| var protocol = protocolRe.exec(r.url); | |
| protocol = protocol && protocol[1] || window.location.protocol; | |
| return httpsRe.test(protocol) ? twoHundo.test(r.request.status) : !!r.request.response; | |
| } | |
| function handleReadyState(r, success, error) { | |
| return function () { | |
| if (r._aborted) | |
| return error(r.request); | |
| if (r._timedOut) | |
| return error(r.request, 'Request is aborted: timeout'); | |
| if (r.request && r.request[readyState] == 4) { | |
| r.request.onreadystatechange = noop; | |
| if (succeed(r)) | |
| success(r.request); | |
| else | |
| error(r.request); | |
| } | |
| }; | |
| } | |
| function setHeaders(http, o) { | |
| var headers = o['headers'] || {}, h; | |
| headers['Accept'] = headers['Accept'] || defaultHeaders['accept'][o['type']] || defaultHeaders['accept']['*']; | |
| var isAFormData = typeof FormData === 'function' && o['data'] instanceof FormData; | |
| if (!o['crossOrigin'] && !headers[requestedWith]) | |
| headers[requestedWith] = defaultHeaders['requestedWith']; | |
| if (!headers[contentType] && !isAFormData) | |
| headers[contentType] = o['contentType'] || defaultHeaders['contentType']; | |
| for (h in headers) | |
| headers.hasOwnProperty(h) && 'setRequestHeader' in http && http.setRequestHeader(h, headers[h]); | |
| } | |
| function setCredentials(http, o) { | |
| if (typeof o['withCredentials'] !== 'undefined' && typeof http.withCredentials !== 'undefined') { | |
| http.withCredentials = !!o['withCredentials']; | |
| } | |
| } | |
| function generalCallback(data) { | |
| lastValue = data; | |
| } | |
| function urlappend(url, s) { | |
| return url + (/\?/.test(url) ? '&' : '?') + s; | |
| } | |
| function handleJsonp(o, fn, err, url) { | |
| var reqId = uniqid++, cbkey = o['jsonpCallback'] || 'callback', cbval = o['jsonpCallbackName'] || reqwest.getcallbackPrefix(reqId), cbreg = new RegExp('((^|\\?|&)' + cbkey + ')=([^&]+)'), match = url.match(cbreg), script = doc.createElement('script'), loaded = 0, isIE10 = navigator.userAgent.indexOf('MSIE 10.0') !== -1; | |
| if (match) { | |
| if (match[3] === '?') { | |
| url = url.replace(cbreg, '$1=' + cbval); | |
| } else { | |
| cbval = match[3]; | |
| } | |
| } else { | |
| url = urlappend(url, cbkey + '=' + cbval); | |
| } | |
| win[cbval] = generalCallback; | |
| script.type = 'text/javascript'; | |
| script.src = url; | |
| script.async = true; | |
| if (typeof script.onreadystatechange !== 'undefined' && !isIE10) { | |
| script.htmlFor = script.id = '_reqwest_' + reqId; | |
| } | |
| script.onload = script.onreadystatechange = function () { | |
| if (script[readyState] && script[readyState] !== 'complete' && script[readyState] !== 'loaded' || loaded) { | |
| return false; | |
| } | |
| script.onload = script.onreadystatechange = null; | |
| script.onclick && script.onclick(); | |
| fn(lastValue); | |
| lastValue = undefined; | |
| head.removeChild(script); | |
| loaded = 1; | |
| }; | |
| head.appendChild(script); | |
| return { | |
| abort: function () { | |
| script.onload = script.onreadystatechange = null; | |
| err({}, 'Request is aborted: timeout', {}); | |
| lastValue = undefined; | |
| head.removeChild(script); | |
| loaded = 1; | |
| } | |
| }; | |
| } | |
| function getRequest(fn, err) { | |
| var o = this.o, method = (o['method'] || 'GET').toUpperCase(), url = typeof o === 'string' ? o : o['url'], data = o['processData'] !== false && o['data'] && typeof o['data'] !== 'string' ? reqwest.toQueryString(o['data']) : o['data'] || null, http, sendWait = false; | |
| if ((o['type'] == 'jsonp' || method == 'GET') && data) { | |
| url = urlappend(url, data); | |
| data = null; | |
| } | |
| if (o['type'] == 'jsonp') | |
| return handleJsonp(o, fn, err, url); | |
| http = o.xhr && o.xhr(o) || xhr(o); | |
| http.open(method, url, o['async'] === false ? false : true); | |
| setHeaders(http, o); | |
| setCredentials(http, o); | |
| if (win[xDomainRequest] && http instanceof win[xDomainRequest]) { | |
| http.onload = fn; | |
| http.onerror = err; | |
| http.onprogress = function () { | |
| }; | |
| sendWait = true; | |
| } else { | |
| http.onreadystatechange = handleReadyState(this, fn, err); | |
| } | |
| o['before'] && o['before'](http); | |
| if (sendWait) { | |
| setTimeout(function () { | |
| http.send(data); | |
| }, 200); | |
| } else { | |
| http.send(data); | |
| } | |
| return http; | |
| } | |
| function Reqwest(o, fn) { | |
| this.o = o; | |
| this.fn = fn; | |
| init.apply(this, arguments); | |
| } | |
| function setType(header) { | |
| if (header.match('json')) | |
| return 'json'; | |
| if (header.match('javascript')) | |
| return 'js'; | |
| if (header.match('text')) | |
| return 'html'; | |
| if (header.match('xml')) | |
| return 'xml'; | |
| } | |
| function init(o, fn) { | |
| this.url = typeof o == 'string' ? o : o['url']; | |
| this.timeout = null; | |
| this._fulfilled = false; | |
| this._successHandler = function () { | |
| }; | |
| this._fulfillmentHandlers = []; | |
| this._errorHandlers = []; | |
| this._completeHandlers = []; | |
| this._erred = false; | |
| this._responseArgs = {}; | |
| var self = this; | |
| fn = fn || function () { | |
| }; | |
| if (o['timeout']) { | |
| this.timeout = setTimeout(function () { | |
| timedOut(); | |
| }, o['timeout']); | |
| } | |
| if (o['success']) { | |
| this._successHandler = function () { | |
| o['success'].apply(o, arguments); | |
| }; | |
| } | |
| if (o['error']) { | |
| this._errorHandlers.push(function () { | |
| o['error'].apply(o, arguments); | |
| }); | |
| } | |
| if (o['complete']) { | |
| this._completeHandlers.push(function () { | |
| o['complete'].apply(o, arguments); | |
| }); | |
| } | |
| function complete(resp) { | |
| o['timeout'] && clearTimeout(self.timeout); | |
| self.timeout = null; | |
| while (self._completeHandlers.length > 0) { | |
| self._completeHandlers.shift()(resp); | |
| } | |
| } | |
| function success(resp) { | |
| var type = o['type'] || resp && setType(resp.getResponseHeader('Content-Type')); | |
| resp = type !== 'jsonp' ? self.request : resp; | |
| var filteredResponse = globalSetupOptions.dataFilter(resp.responseText, type), r = filteredResponse; | |
| try { | |
| resp.responseText = r; | |
| } catch (e) { | |
| } | |
| if (r) { | |
| switch (type) { | |
| case 'json': | |
| try { | |
| resp = win.JSON ? win.JSON.parse(r) : eval('(' + r + ')'); | |
| } catch (err) { | |
| return error(resp, 'Could not parse JSON in response', err); | |
| } | |
| break; | |
| case 'js': | |
| resp = eval(r); | |
| break; | |
| case 'html': | |
| resp = r; | |
| break; | |
| case 'xml': | |
| resp = resp.responseXML && resp.responseXML.parseError && resp.responseXML.parseError.errorCode && resp.responseXML.parseError.reason ? null : resp.responseXML; | |
| break; | |
| } | |
| } | |
| self._responseArgs.resp = resp; | |
| self._fulfilled = true; | |
| fn(resp); | |
| self._successHandler(resp); | |
| while (self._fulfillmentHandlers.length > 0) { | |
| resp = self._fulfillmentHandlers.shift()(resp); | |
| } | |
| complete(resp); | |
| } | |
| function timedOut() { | |
| self._timedOut = true; | |
| self.request.abort(); | |
| } | |
| function error(resp, msg, t) { | |
| resp = self.request; | |
| self._responseArgs.resp = resp; | |
| self._responseArgs.msg = msg; | |
| self._responseArgs.t = t; | |
| self._erred = true; | |
| while (self._errorHandlers.length > 0) { | |
| self._errorHandlers.shift()(resp, msg, t); | |
| } | |
| complete(resp); | |
| } | |
| this.request = getRequest.call(this, success, error); | |
| } | |
| Reqwest.prototype = { | |
| abort: function () { | |
| this._aborted = true; | |
| this.request.abort(); | |
| }, | |
| retry: function () { | |
| init.call(this, this.o, this.fn); | |
| }, | |
| then: function (success, fail) { | |
| success = success || function () { | |
| }; | |
| fail = fail || function () { | |
| }; | |
| if (this._fulfilled) { | |
| this._responseArgs.resp = success(this._responseArgs.resp); | |
| } else if (this._erred) { | |
| fail(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t); | |
| } else { | |
| this._fulfillmentHandlers.push(success); | |
| this._errorHandlers.push(fail); | |
| } | |
| return this; | |
| }, | |
| always: function (fn) { | |
| if (this._fulfilled || this._erred) { | |
| fn(this._responseArgs.resp); | |
| } else { | |
| this._completeHandlers.push(fn); | |
| } | |
| return this; | |
| }, | |
| fail: function (fn) { | |
| if (this._erred) { | |
| fn(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t); | |
| } else { | |
| this._errorHandlers.push(fn); | |
| } | |
| return this; | |
| }, | |
| 'catch': function (fn) { | |
| return this.fail(fn); | |
| } | |
| }; | |
| function reqwest(o, fn) { | |
| return new Reqwest(o, fn); | |
| } | |
| function normalize(s) { | |
| return s ? s.replace(/\r?\n/g, '\r\n') : ''; | |
| } | |
| function serial(el, cb) { | |
| var n = el.name, t = el.tagName.toLowerCase(), optCb = function (o) { | |
| if (o && !o['disabled']) | |
| cb(n, normalize(o['attributes']['value'] && o['attributes']['value']['specified'] ? o['value'] : o['text'])); | |
| }, ch, ra, val, i; | |
| if (el.disabled || !n) | |
| return; | |
| switch (t) { | |
| case 'input': | |
| if (!/reset|button|image|file/i.test(el.type)) { | |
| ch = /checkbox/i.test(el.type); | |
| ra = /radio/i.test(el.type); | |
| val = el.value; | |
| (!(ch || ra) || el.checked) && cb(n, normalize(ch && val === '' ? 'on' : val)); | |
| } | |
| break; | |
| case 'textarea': | |
| cb(n, normalize(el.value)); | |
| break; | |
| case 'select': | |
| if (el.type.toLowerCase() === 'select-one') { | |
| optCb(el.selectedIndex >= 0 ? el.options[el.selectedIndex] : null); | |
| } else { | |
| for (i = 0; el.length && i < el.length; i++) { | |
| el.options[i].selected && optCb(el.options[i]); | |
| } | |
| } | |
| break; | |
| } | |
| } | |
| function eachFormElement() { | |
| var cb = this, e, i, serializeSubtags = function (e, tags) { | |
| var i, j, fa; | |
| for (i = 0; i < tags.length; i++) { | |
| fa = e[byTag](tags[i]); | |
| for (j = 0; j < fa.length; j++) | |
| serial(fa[j], cb); | |
| } | |
| }; | |
| for (i = 0; i < arguments.length; i++) { | |
| e = arguments[i]; | |
| if (/input|select|textarea/i.test(e.tagName)) | |
| serial(e, cb); | |
| serializeSubtags(e, [ | |
| 'input', | |
| 'select', | |
| 'textarea' | |
| ]); | |
| } | |
| } | |
| function serializeQueryString() { | |
| return reqwest.toQueryString(reqwest.serializeArray.apply(null, arguments)); | |
| } | |
| function serializeHash() { | |
| var hash = {}; | |
| eachFormElement.apply(function (name, value) { | |
| if (name in hash) { | |
| hash[name] && !isArray(hash[name]) && (hash[name] = [hash[name]]); | |
| hash[name].push(value); | |
| } else | |
| hash[name] = value; | |
| }, arguments); | |
| return hash; | |
| } | |
| reqwest.serializeArray = function () { | |
| var arr = []; | |
| eachFormElement.apply(function (name, value) { | |
| arr.push({ | |
| name: name, | |
| value: value | |
| }); | |
| }, arguments); | |
| return arr; | |
| }; | |
| reqwest.serialize = function () { | |
| if (arguments.length === 0) | |
| return ''; | |
| var opt, fn, args = Array.prototype.slice.call(arguments, 0); | |
| opt = args.pop(); | |
| opt && opt.nodeType && args.push(opt) && (opt = null); | |
| opt && (opt = opt.type); | |
| if (opt == 'map') | |
| fn = serializeHash; | |
| else if (opt == 'array') | |
| fn = reqwest.serializeArray; | |
| else | |
| fn = serializeQueryString; | |
| return fn.apply(null, args); | |
| }; | |
| reqwest.toQueryString = function (o, trad) { | |
| var prefix, i, traditional = trad || false, s = [], enc = encodeURIComponent, add = function (key, value) { | |
| value = 'function' === typeof value ? value() : value == null ? '' : value; | |
| s[s.length] = enc(key) + '=' + enc(value); | |
| }; | |
| if (isArray(o)) { | |
| for (i = 0; o && i < o.length; i++) | |
| add(o[i]['name'], o[i]['value']); | |
| } else { | |
| for (prefix in o) { | |
| if (o.hasOwnProperty(prefix)) | |
| buildParams(prefix, o[prefix], traditional, add); | |
| } | |
| } | |
| return s.join('&').replace(/%20/g, '+'); | |
| }; | |
| function buildParams(prefix, obj, traditional, add) { | |
| var name, i, v, rbracket = /\[\]$/; | |
| if (isArray(obj)) { | |
| for (i = 0; obj && i < obj.length; i++) { | |
| v = obj[i]; | |
| if (traditional || rbracket.test(prefix)) { | |
| add(prefix, v); | |
| } else { | |
| buildParams(prefix + '[' + (typeof v === 'object' ? i : '') + ']', v, traditional, add); | |
| } | |
| } | |
| } else if (obj && obj.toString() === '[object Object]') { | |
| for (name in obj) { | |
| buildParams(prefix + '[' + name + ']', obj[name], traditional, add); | |
| } | |
| } else { | |
| add(prefix, obj); | |
| } | |
| } | |
| reqwest.getcallbackPrefix = function () { | |
| return callbackPrefix; | |
| }; | |
| reqwest.compat = function (o, fn) { | |
| if (o) { | |
| o['type'] && (o['method'] = o['type']) && delete o['type']; | |
| o['dataType'] && (o['type'] = o['dataType']); | |
| o['jsonpCallback'] && (o['jsonpCallbackName'] = o['jsonpCallback']) && delete o['jsonpCallback']; | |
| o['jsonp'] && (o['jsonpCallback'] = o['jsonp']); | |
| } | |
| return new Reqwest(o, fn); | |
| }; | |
| reqwest.ajaxSetup = function (options) { | |
| options = options || {}; | |
| for (var k in options) { | |
| globalSetupOptions[k] = options[k]; | |
| } | |
| }; | |
| return reqwest; | |
| }); | |
| amdclean['inputfiles'] = function (require, core, reqwest) { | |
| 'use strict'; | |
| var p5 = core; | |
| var reqwest = reqwest; | |
| p5.prototype.createInput = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.createReader = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.loadBytes = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.loadJSON = function () { | |
| var path = arguments[0]; | |
| var callback = arguments[1]; | |
| var ret = []; | |
| var t = 'json'; | |
| if (typeof arguments[2] === 'string') { | |
| if (arguments[2] === 'jsonp' || arguments[2] === 'json') { | |
| t = arguments[2]; | |
| } | |
| } | |
| reqwest({ | |
| url: path, | |
| type: t, | |
| crossOrigin: true | |
| }).then(function (resp) { | |
| for (var k in resp) { | |
| ret[k] = resp[k]; | |
| } | |
| if (typeof callback !== 'undefined') { | |
| callback(resp); | |
| } | |
| }); | |
| return ret; | |
| }; | |
| p5.prototype.loadStrings = function (path, callback) { | |
| var ret = []; | |
| var req = new XMLHttpRequest(); | |
| req.open('GET', path, true); | |
| req.onreadystatechange = function () { | |
| if (req.readyState === 4 && (req.status === 200 || req.status === 0)) { | |
| var arr = req.responseText.match(/[^\r\n]+/g); | |
| for (var k in arr) { | |
| ret[k] = arr[k]; | |
| } | |
| if (typeof callback !== 'undefined') { | |
| callback(ret); | |
| } | |
| } | |
| }; | |
| req.send(null); | |
| return ret; | |
| }; | |
| p5.prototype.loadTable = function (path) { | |
| var callback = null; | |
| var options = []; | |
| var header = false; | |
| var sep = ','; | |
| var separatorSet = false; | |
| for (var i = 1; i < arguments.length; i++) { | |
| if (typeof arguments[i] === 'function') { | |
| callback = arguments[i]; | |
| } else if (typeof arguments[i] === 'string') { | |
| options.push(arguments[i]); | |
| if (arguments[i] === 'header') { | |
| header = true; | |
| } | |
| if (arguments[i] === 'csv') { | |
| if (separatorSet) { | |
| throw new Error('Cannot set multiple separator types.'); | |
| } else { | |
| sep = ','; | |
| separatorSet = true; | |
| } | |
| } else if (arguments[i] === 'tsv') { | |
| if (separatorSet) { | |
| throw new Error('Cannot set multiple separator types.'); | |
| } else { | |
| sep = '\t'; | |
| separatorSet = true; | |
| } | |
| } | |
| } | |
| } | |
| var t = new p5.Table(); | |
| reqwest({ | |
| url: path, | |
| crossOrigin: true, | |
| type: 'csv' | |
| }).then(function (resp) { | |
| resp = resp.responseText; | |
| var state = {}; | |
| var PRE_TOKEN = 0, MID_TOKEN = 1, POST_TOKEN = 2, POST_RECORD = 4; | |
| var QUOTE = '"', CR = '\r', LF = '\n'; | |
| var records = []; | |
| var offset = 0; | |
| var currentRecord = null; | |
| var currentChar; | |
| var recordBegin = function () { | |
| state.escaped = false; | |
| currentRecord = []; | |
| tokenBegin(); | |
| }; | |
| var recordEnd = function () { | |
| state.currentState = POST_RECORD; | |
| records.push(currentRecord); | |
| currentRecord = null; | |
| }; | |
| var tokenBegin = function () { | |
| state.currentState = PRE_TOKEN; | |
| state.token = ''; | |
| }; | |
| var tokenEnd = function () { | |
| currentRecord.push(state.token); | |
| tokenBegin(); | |
| }; | |
| while (true) { | |
| currentChar = resp[offset++]; | |
| if (currentChar == null) { | |
| if (state.escaped) { | |
| throw new Error('Unclosed quote in file.'); | |
| } | |
| if (currentRecord) { | |
| tokenEnd(); | |
| recordEnd(); | |
| break; | |
| } | |
| } | |
| if (currentRecord === null) { | |
| recordBegin(); | |
| } | |
| if (state.currentState === PRE_TOKEN) { | |
| if (currentChar === QUOTE) { | |
| state.escaped = true; | |
| state.currentState = MID_TOKEN; | |
| continue; | |
| } | |
| state.currentState = MID_TOKEN; | |
| } | |
| if (state.currentState === MID_TOKEN && state.escaped) { | |
| if (currentChar === QUOTE) { | |
| if (resp[offset] === QUOTE) { | |
| state.token += QUOTE; | |
| offset++; | |
| } else { | |
| state.escaped = false; | |
| state.currentState = POST_TOKEN; | |
| } | |
| } else { | |
| state.token += currentChar; | |
| } | |
| continue; | |
| } | |
| if (currentChar === CR) { | |
| if (resp[offset] === LF) { | |
| offset++; | |
| } | |
| tokenEnd(); | |
| recordEnd(); | |
| } else if (currentChar === LF) { | |
| tokenEnd(); | |
| recordEnd(); | |
| } else if (currentChar === sep) { | |
| tokenEnd(); | |
| } else if (state.currentState === MID_TOKEN) { | |
| state.token += currentChar; | |
| } | |
| } | |
| if (header) { | |
| t.columns = records.shift(); | |
| } else { | |
| for (i = 0; i < records.length; i++) { | |
| t.columns[i] = i.toString(); | |
| } | |
| } | |
| var row; | |
| for (i = 0; i < records.length; i++) { | |
| row = new p5.TableRow(); | |
| row.arr = records[i]; | |
| row.obj = makeObject(records[i], t.columns); | |
| t.addRow(row); | |
| } | |
| if (callback !== null) { | |
| callback(t); | |
| } | |
| }).fail(function (err, msg) { | |
| if (typeof callback !== 'undefined') { | |
| callback(false); | |
| } | |
| }); | |
| return t; | |
| }; | |
| function makeObject(row, headers) { | |
| var ret = {}; | |
| headers = headers || []; | |
| if (typeof headers === 'undefined') { | |
| for (var j = 0; j < row.length; j++) { | |
| headers[j.toString()] = j; | |
| } | |
| } | |
| for (var i = 0; i < headers.length; i++) { | |
| var key = headers[i]; | |
| var val = row[i]; | |
| ret[key] = val; | |
| } | |
| return ret; | |
| } | |
| p5.prototype.loadXML = function (path, callback) { | |
| var ret = []; | |
| reqwest({ | |
| url: path, | |
| type: 'xml', | |
| crossOrigin: true | |
| }).then(function (resp) { | |
| callback(resp); | |
| }); | |
| return ret; | |
| }; | |
| p5.prototype.parseXML = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.selectFolder = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.selectInput = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.httpGet = function () { | |
| var args = Array.prototype.slice.call(arguments); | |
| args.push('GET'); | |
| p5.prototype.httpDo.apply(this, args); | |
| }; | |
| p5.prototype.httpPost = function () { | |
| var args = Array.prototype.slice.call(arguments); | |
| args.push('POST'); | |
| p5.prototype.httpDo.apply(this, args); | |
| }; | |
| p5.prototype.httpDo = function () { | |
| var method = 'GET'; | |
| var path = arguments[0]; | |
| var data = {}; | |
| var type = ''; | |
| var callback; | |
| for (var i = 1; i < arguments.length; i++) { | |
| var a = arguments[i]; | |
| if (typeof a === 'string') { | |
| if (a === 'GET' || a === 'POST' || a === 'PUT') { | |
| method = a; | |
| } else { | |
| type = a; | |
| } | |
| } else if (typeof a === 'object') { | |
| data = a; | |
| } else if (typeof a === 'function') { | |
| callback = a; | |
| } | |
| } | |
| if (type === '') { | |
| if (path.indexOf('json') !== -1) { | |
| type = 'json'; | |
| } else if (path.indexOf('xml') !== -1) { | |
| type = 'xml'; | |
| } else { | |
| type = 'text'; | |
| } | |
| } | |
| reqwest({ | |
| url: path, | |
| method: method, | |
| data: data, | |
| type: type, | |
| crossOrigin: true, | |
| success: function (resp) { | |
| if (typeof callback !== 'undefined') { | |
| if (type === 'text') { | |
| callback(resp.response); | |
| } else { | |
| callback(resp); | |
| } | |
| } | |
| } | |
| }); | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['reqwest']); | |
| amdclean['inputkeyboard'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| var downKeys = {}; | |
| p5.prototype.isKeyPressed = false; | |
| p5.prototype.keyIsPressed = false; | |
| p5.prototype.key = ''; | |
| p5.prototype.keyCode = 0; | |
| p5.prototype._onkeydown = function (e) { | |
| this._setProperty('isKeyPressed', true); | |
| this._setProperty('keyIsPressed', true); | |
| this._setProperty('keyCode', e.which); | |
| downKeys[e.which] = true; | |
| var key = String.fromCharCode(e.which); | |
| if (!key) { | |
| key = e.which; | |
| } | |
| this._setProperty('key', key); | |
| var keyPressed = this.keyPressed || window.keyPressed; | |
| if (typeof keyPressed === 'function' && !e.charCode) { | |
| var executeDefault = keyPressed(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } | |
| }; | |
| p5.prototype._onkeyup = function (e) { | |
| var keyReleased = this.keyReleased || window.keyReleased; | |
| this._setProperty('isKeyPressed', false); | |
| this._setProperty('keyIsPressed', false); | |
| downKeys[e.which] = false; | |
| var key = String.fromCharCode(e.which); | |
| if (!key) { | |
| key = e.which; | |
| } | |
| this._setProperty('key', key); | |
| this._setProperty('keyCode', e.which); | |
| if (typeof keyReleased === 'function') { | |
| var executeDefault = keyReleased(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } | |
| }; | |
| p5.prototype._onkeypress = function (e) { | |
| this._setProperty('keyCode', e.which); | |
| this._setProperty('key', String.fromCharCode(e.which)); | |
| var keyTyped = this.keyTyped || window.keyTyped; | |
| if (typeof keyTyped === 'function') { | |
| var executeDefault = keyTyped(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } | |
| }; | |
| p5.prototype._onblur = function (e) { | |
| downKeys = {}; | |
| }; | |
| p5.prototype.keyIsDown = function (code) { | |
| return downKeys[code]; | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['inputacceleration'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.deviceOrientation = undefined; | |
| p5.prototype.accelerationX = 0; | |
| p5.prototype.accelerationY = 0; | |
| p5.prototype.accelerationZ = 0; | |
| p5.prototype.pAccelerationX = 0; | |
| p5.prototype.pAccelerationY = 0; | |
| p5.prototype.pAccelerationZ = 0; | |
| p5.prototype._updatePAccelerations = function () { | |
| this._setProperty('pAccelerationX', this.accelerationX); | |
| this._setProperty('pAccelerationY', this.accelerationY); | |
| this._setProperty('pAccelerationZ', this.accelerationZ); | |
| }; | |
| var move_threshold = 0.5; | |
| p5.prototype.setMoveThreshold = function (val) { | |
| if (typeof val === 'number') { | |
| move_threshold = val; | |
| } | |
| }; | |
| var old_max_axis = ''; | |
| var new_max_axis = ''; | |
| p5.prototype._ondeviceorientation = function (e) { | |
| this._setProperty('accelerationX', e.beta); | |
| this._setProperty('accelerationY', e.gamma); | |
| this._setProperty('accelerationZ', e.alpha); | |
| this._handleMotion(); | |
| }; | |
| p5.prototype._ondevicemotion = function (e) { | |
| this._setProperty('accelerationX', e.acceleration.x * 2); | |
| this._setProperty('accelerationY', e.acceleration.y * 2); | |
| this._setProperty('accelerationZ', e.acceleration.z * 2); | |
| this._handleMotion(); | |
| }; | |
| p5.prototype._onMozOrientation = function (e) { | |
| this._setProperty('accelerationX', e.x); | |
| this._setProperty('accelerationY', e.y); | |
| this._setProperty('accelerationZ', e.z); | |
| this._handleMotion(); | |
| }; | |
| p5.prototype._handleMotion = function () { | |
| if (window.orientation === 90 || window.orientation === -90) { | |
| this._setProperty('deviceOrientation', 'landscape'); | |
| } else if (window.orientation === 0) { | |
| this._setProperty('deviceOrientation', 'portrait'); | |
| } else if (window.orientation === undefined) { | |
| this._setProperty('deviceOrientation', 'undefined'); | |
| } | |
| var onDeviceMove = this.onDeviceMove || window.onDeviceMove; | |
| if (typeof onDeviceMove === 'function') { | |
| if (Math.abs(this.accelerationX - this.pAccelerationX) > move_threshold || Math.abs(this.accelerationY - this.pAccelerationY) > move_threshold || Math.abs(this.accelerationZ - this.pAccelerationZ) > move_threshold) { | |
| onDeviceMove(); | |
| } | |
| } | |
| var onDeviceTurn = this.onDeviceTurn || window.onDeviceTurn; | |
| if (typeof onDeviceTurn === 'function') { | |
| var max_val = 0; | |
| if (Math.abs(this.accelerationX) > max_val) { | |
| max_val = this.accelerationX; | |
| new_max_axis = 'x'; | |
| } | |
| if (Math.abs(this.accelerationY) > max_val) { | |
| max_val = this.accelerationY; | |
| new_max_axis = 'y'; | |
| } | |
| if (Math.abs(this.accelerationZ) > max_val) { | |
| new_max_axis = 'z'; | |
| } | |
| if (old_max_axis !== '' && old_max_axis !== new_max_axis) { | |
| onDeviceTurn(new_max_axis); | |
| } | |
| old_max_axis = new_max_axis; | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['inputmouse'] = function (require, core, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var constants = constants; | |
| p5.prototype.mouseX = 0; | |
| p5.prototype.mouseY = 0; | |
| p5.prototype.pmouseX = 0; | |
| p5.prototype.pmouseY = 0; | |
| p5.prototype.winMouseX = 0; | |
| p5.prototype.winMouseY = 0; | |
| p5.prototype.pwinMouseX = 0; | |
| p5.prototype.pwinMouseY = 0; | |
| p5.prototype.mouseButton = 0; | |
| p5.prototype.mouseIsPressed = false; | |
| p5.prototype.isMousePressed = false; | |
| p5.prototype._updateMouseCoords = function (e) { | |
| if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend') { | |
| this._setProperty('mouseX', this.touchX); | |
| this._setProperty('mouseY', this.touchY); | |
| } else { | |
| if (this._curElement !== null) { | |
| var mousePos = getMousePos(this._curElement.elt, e); | |
| this._setProperty('mouseX', mousePos.x); | |
| this._setProperty('mouseY', mousePos.y); | |
| } | |
| } | |
| this._setProperty('winMouseX', e.pageX); | |
| this._setProperty('winMouseY', e.pageY); | |
| }; | |
| p5.prototype._updatePMouseCoords = function (e) { | |
| this._setProperty('pmouseX', this.mouseX); | |
| this._setProperty('pmouseY', this.mouseY); | |
| this._setProperty('pwinMouseX', this.winMouseX); | |
| this._setProperty('pwinMouseY', this.winMouseY); | |
| }; | |
| function getMousePos(canvas, evt) { | |
| var rect = canvas.getBoundingClientRect(); | |
| return { | |
| x: evt.clientX - rect.left, | |
| y: evt.clientY - rect.top | |
| }; | |
| } | |
| p5.prototype._setMouseButton = function (e) { | |
| if (e.button === 1) { | |
| this._setProperty('mouseButton', constants.CENTER); | |
| } else if (e.button === 2) { | |
| this._setProperty('mouseButton', constants.RIGHT); | |
| } else { | |
| this._setProperty('mouseButton', constants.LEFT); | |
| if (e.type === 'touchstart' || e.type === 'touchmove') { | |
| this._setProperty('mouseX', this.touchX); | |
| this._setProperty('mouseY', this.touchY); | |
| } | |
| } | |
| }; | |
| p5.prototype._onmousemove = function (e) { | |
| var context = this._isGlobal ? window : this; | |
| var executeDefault; | |
| this._updateMouseCoords(e); | |
| if (!this.isMousePressed) { | |
| if (typeof context.mouseMoved === 'function') { | |
| executeDefault = context.mouseMoved(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } | |
| } else { | |
| if (typeof context.mouseDragged === 'function') { | |
| executeDefault = context.mouseDragged(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } else if (typeof context.touchMoved === 'function') { | |
| executeDefault = context.touchMoved(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| this._updateTouchCoords(e); | |
| } | |
| } | |
| }; | |
| p5.prototype._onmousedown = function (e) { | |
| var context = this._isGlobal ? window : this; | |
| var executeDefault; | |
| this._setProperty('isMousePressed', true); | |
| this._setProperty('mouseIsPressed', true); | |
| this._setMouseButton(e); | |
| this._updateMouseCoords(e); | |
| if (typeof context.mousePressed === 'function') { | |
| executeDefault = context.mousePressed(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } else if (typeof context.touchStarted === 'function') { | |
| executeDefault = context.touchStarted(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| this._updateTouchCoords(e); | |
| } | |
| }; | |
| p5.prototype._onmouseup = function (e) { | |
| var context = this._isGlobal ? window : this; | |
| var executeDefault; | |
| this._setProperty('isMousePressed', false); | |
| this._setProperty('mouseIsPressed', false); | |
| if (typeof context.mouseReleased === 'function') { | |
| executeDefault = context.mouseReleased(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } else if (typeof context.touchEnded === 'function') { | |
| executeDefault = context.touchEnded(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| this._updateTouchCoords(e); | |
| } | |
| }; | |
| p5.prototype._onclick = function (e) { | |
| var context = this._isGlobal ? window : this; | |
| if (typeof context.mouseClicked === 'function') { | |
| var executeDefault = context.mouseClicked(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } | |
| }; | |
| p5.prototype._onmousewheel = function (e) { | |
| var context = this._isGlobal ? window : this; | |
| if (typeof context.mouseWheel === 'function') { | |
| var executeDefault = context.mouseWheel(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants']); | |
| amdclean['inputtime_date'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.day = function () { | |
| return new Date().getDate(); | |
| }; | |
| p5.prototype.hour = function () { | |
| return new Date().getHours(); | |
| }; | |
| p5.prototype.minute = function () { | |
| return new Date().getMinutes(); | |
| }; | |
| p5.prototype.millis = function () { | |
| return new Date().getTime() - this._startTime; | |
| }; | |
| p5.prototype.month = function () { | |
| return new Date().getMonth() + 1; | |
| }; | |
| p5.prototype.second = function () { | |
| return new Date().getSeconds(); | |
| }; | |
| p5.prototype.year = function () { | |
| return new Date().getFullYear(); | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['inputtouch'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.touchX = 0; | |
| p5.prototype.touchY = 0; | |
| p5.prototype.ptouchX = 0; | |
| p5.prototype.ptouchY = 0; | |
| p5.prototype.touches = []; | |
| p5.prototype.touchIsDown = false; | |
| p5.prototype._updateTouchCoords = function (e) { | |
| if (e.type === 'mousedown' || e.type === 'mousemove' || e.type === 'mouseup') { | |
| this._setProperty('touchX', this.mouseX); | |
| this._setProperty('touchY', this.mouseY); | |
| } else { | |
| var touchPos = getTouchPos(this._curElement.elt, e, 0); | |
| this._setProperty('touchX', touchPos.x); | |
| this._setProperty('touchY', touchPos.y); | |
| var touches = []; | |
| for (var i = 0; i < e.changedTouches.length; i++) { | |
| var pos = getTouchPos(this._curElement.elt, e, i); | |
| touches[i] = { | |
| x: pos.x, | |
| y: pos.y | |
| }; | |
| } | |
| this._setProperty('touches', touches); | |
| } | |
| }; | |
| p5.prototype._updatePTouchCoords = function () { | |
| this._setProperty('ptouchX', this.touchX); | |
| this._setProperty('ptouchY', this.touchY); | |
| }; | |
| function getTouchPos(canvas, e, i) { | |
| i = i || 0; | |
| var rect = canvas.getBoundingClientRect(); | |
| return { | |
| x: e.changedTouches[i].pageX - rect.left, | |
| y: e.changedTouches[i].pageY - rect.top | |
| }; | |
| } | |
| p5.prototype._ontouchstart = function (e) { | |
| var context = this._isGlobal ? window : this; | |
| var executeDefault; | |
| this._updateTouchCoords(e); | |
| this._setProperty('touchIsDown', true); | |
| if (typeof context.touchStarted === 'function') { | |
| executeDefault = context.touchStarted(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } else if (typeof context.mousePressed === 'function') { | |
| executeDefault = context.mousePressed(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } | |
| }; | |
| p5.prototype._ontouchmove = function (e) { | |
| var context = this._isGlobal ? window : this; | |
| var executeDefault; | |
| this._updateTouchCoords(e); | |
| if (typeof context.touchMoved === 'function') { | |
| executeDefault = context.touchMoved(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } else if (typeof context.mouseDragged === 'function') { | |
| executeDefault = context.mouseDragged(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| this._updateMouseCoords(e); | |
| } | |
| }; | |
| p5.prototype._ontouchend = function (e) { | |
| this._updateTouchCoords(e); | |
| if (this.touches.length === 0) { | |
| this._setProperty('touchIsDown', false); | |
| } | |
| var context = this._isGlobal ? window : this; | |
| var executeDefault; | |
| if (typeof context.touchEnded === 'function') { | |
| executeDefault = context.touchEnded(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| } else if (typeof context.mouseReleased === 'function') { | |
| executeDefault = context.mouseReleased(e); | |
| if (executeDefault === false) { | |
| e.preventDefault(); | |
| } | |
| this._updateMouseCoords(e); | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['mathmath'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.createVector = function (x, y, z) { | |
| if (this instanceof p5) { | |
| return new p5.Vector(this, arguments); | |
| } else { | |
| return new p5.Vector(x, y, z); | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['mathcalculation'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.abs = Math.abs; | |
| p5.prototype.ceil = Math.ceil; | |
| p5.prototype.constrain = function (n, low, high) { | |
| return Math.max(Math.min(n, high), low); | |
| }; | |
| p5.prototype.dist = function (x1, y1, x2, y2) { | |
| return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); | |
| }; | |
| p5.prototype.exp = Math.exp; | |
| p5.prototype.floor = Math.floor; | |
| p5.prototype.lerp = function (start, stop, amt) { | |
| return amt * (stop - start) + start; | |
| }; | |
| p5.prototype.log = Math.log; | |
| p5.prototype.mag = function (x, y) { | |
| return Math.sqrt(x * x + y * y); | |
| }; | |
| p5.prototype.map = function (n, start1, stop1, start2, stop2) { | |
| return (n - start1) / (stop1 - start1) * (stop2 - start2) + start2; | |
| }; | |
| p5.prototype.max = function () { | |
| if (arguments[0] instanceof Array) { | |
| return Math.max.apply(null, arguments[0]); | |
| } else { | |
| return Math.max.apply(null, arguments); | |
| } | |
| }; | |
| p5.prototype.min = function () { | |
| if (arguments[0] instanceof Array) { | |
| return Math.min.apply(null, arguments[0]); | |
| } else { | |
| return Math.min.apply(null, arguments); | |
| } | |
| }; | |
| p5.prototype.norm = function (n, start, stop) { | |
| return this.map(n, start, stop, 0, 1); | |
| }; | |
| p5.prototype.pow = Math.pow; | |
| p5.prototype.round = Math.round; | |
| p5.prototype.sq = function (n) { | |
| return n * n; | |
| }; | |
| p5.prototype.sqrt = Math.sqrt; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['mathrandom'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| var seeded = false; | |
| var lcg = function () { | |
| var m = 4294967296, a = 1664525, c = 1013904223, seed, z; | |
| return { | |
| setSeed: function (val) { | |
| z = seed = (val == null ? Math.random() * m : val) >>> 0; | |
| }, | |
| getSeed: function () { | |
| return seed; | |
| }, | |
| rand: function () { | |
| z = (a * z + c) % m; | |
| return z / m; | |
| } | |
| }; | |
| }(); | |
| p5.prototype.randomSeed = function (seed) { | |
| lcg.setSeed(seed); | |
| seeded = true; | |
| }; | |
| p5.prototype.random = function (min, max) { | |
| var rand; | |
| if (seeded) { | |
| rand = lcg.rand(); | |
| } else { | |
| rand = Math.random(); | |
| } | |
| if (arguments.length === 0) { | |
| return rand; | |
| } else if (arguments.length === 1) { | |
| return rand * min; | |
| } else { | |
| if (min > max) { | |
| var tmp = min; | |
| min = max; | |
| max = tmp; | |
| } | |
| return rand * (max - min) + min; | |
| } | |
| }; | |
| var y2; | |
| var previous = false; | |
| p5.prototype.randomGaussian = function (mean, sd) { | |
| var y1, x1, x2, w; | |
| if (previous) { | |
| y1 = y2; | |
| previous = false; | |
| } else { | |
| do { | |
| x1 = this.random(2) - 1; | |
| x2 = this.random(2) - 1; | |
| w = x1 * x1 + x2 * x2; | |
| } while (w >= 1); | |
| w = Math.sqrt(-2 * Math.log(w) / w); | |
| y1 = x1 * w; | |
| y2 = x2 * w; | |
| previous = true; | |
| } | |
| var m = mean || 0; | |
| var s = sd || 1; | |
| return y1 * s + m; | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['mathnoise'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| var PERLIN_YWRAPB = 4; | |
| var PERLIN_YWRAP = 1 << PERLIN_YWRAPB; | |
| var PERLIN_ZWRAPB = 8; | |
| var PERLIN_ZWRAP = 1 << PERLIN_ZWRAPB; | |
| var PERLIN_SIZE = 4095; | |
| var perlin_octaves = 4; | |
| var perlin_amp_falloff = 0.5; | |
| var SINCOS_PRECISION = 0.5; | |
| var SINCOS_LENGTH = Math.floor(360 / SINCOS_PRECISION); | |
| var sinLUT = new Array(SINCOS_LENGTH); | |
| var cosLUT = new Array(SINCOS_LENGTH); | |
| var DEG_TO_RAD = Math.PI / 180; | |
| for (var i = 0; i < SINCOS_LENGTH; i++) { | |
| sinLUT[i] = Math.sin(i * DEG_TO_RAD * SINCOS_PRECISION); | |
| cosLUT[i] = Math.cos(i * DEG_TO_RAD * SINCOS_PRECISION); | |
| } | |
| var perlin_PI = SINCOS_LENGTH; | |
| perlin_PI >>= 1; | |
| var perlin; | |
| p5.prototype.noise = function (x, y, z) { | |
| y = y || 0; | |
| z = z || 0; | |
| if (perlin == null) { | |
| perlin = new Array(PERLIN_SIZE + 1); | |
| for (var i = 0; i < PERLIN_SIZE + 1; i++) { | |
| perlin[i] = Math.random(); | |
| } | |
| } | |
| if (x < 0) { | |
| x = -x; | |
| } | |
| if (y < 0) { | |
| y = -y; | |
| } | |
| if (z < 0) { | |
| z = -z; | |
| } | |
| var xi = Math.floor(x), yi = Math.floor(y), zi = Math.floor(z); | |
| var xf = x - xi; | |
| var yf = y - yi; | |
| var zf = z - zi; | |
| var rxf, ryf; | |
| var r = 0; | |
| var ampl = 0.5; | |
| var n1, n2, n3; | |
| var noise_fsc = function (i) { | |
| return 0.5 * (1 - cosLUT[Math.floor(i * perlin_PI) % SINCOS_LENGTH]); | |
| }; | |
| for (var o = 0; o < perlin_octaves; o++) { | |
| var of = xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB); | |
| rxf = noise_fsc(xf); | |
| ryf = noise_fsc(yf); | |
| n1 = perlin[of & PERLIN_SIZE]; | |
| n1 += rxf * (perlin[of + 1 & PERLIN_SIZE] - n1); | |
| n2 = perlin[of + PERLIN_YWRAP & PERLIN_SIZE]; | |
| n2 += rxf * (perlin[of + PERLIN_YWRAP + 1 & PERLIN_SIZE] - n2); | |
| n1 += ryf * (n2 - n1); | |
| of += PERLIN_ZWRAP; | |
| n2 = perlin[of & PERLIN_SIZE]; | |
| n2 += rxf * (perlin[of + 1 & PERLIN_SIZE] - n2); | |
| n3 = perlin[of + PERLIN_YWRAP & PERLIN_SIZE]; | |
| n3 += rxf * (perlin[of + PERLIN_YWRAP + 1 & PERLIN_SIZE] - n3); | |
| n2 += ryf * (n3 - n2); | |
| n1 += noise_fsc(zf) * (n2 - n1); | |
| r += n1 * ampl; | |
| ampl *= perlin_amp_falloff; | |
| xi <<= 1; | |
| xf *= 2; | |
| yi <<= 1; | |
| yf *= 2; | |
| zi <<= 1; | |
| zf *= 2; | |
| if (xf >= 1) { | |
| xi++; | |
| xf--; | |
| } | |
| if (yf >= 1) { | |
| yi++; | |
| yf--; | |
| } | |
| if (zf >= 1) { | |
| zi++; | |
| zf--; | |
| } | |
| } | |
| return r; | |
| }; | |
| p5.prototype.noiseDetail = function (lod, falloff) { | |
| if (lod > 0) { | |
| perlin_octaves = lod; | |
| } | |
| if (falloff > 0) { | |
| perlin_amp_falloff = falloff; | |
| } | |
| }; | |
| p5.prototype.noiseSeed = function (seed) { | |
| var lcg = function () { | |
| var m = 4294967296, a = 1664525, c = 1013904223, seed, z; | |
| return { | |
| setSeed: function (val) { | |
| z = seed = (val == null ? Math.random() * m : val) >>> 0; | |
| }, | |
| getSeed: function () { | |
| return seed; | |
| }, | |
| rand: function () { | |
| z = (a * z + c) % m; | |
| return z / m; | |
| } | |
| }; | |
| }(); | |
| lcg.setSeed(seed); | |
| perlin = new Array(PERLIN_SIZE + 1); | |
| for (var i = 0; i < PERLIN_SIZE + 1; i++) { | |
| perlin[i] = lcg.rand(); | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['mathtrigonometry'] = function (require, core, polargeometry, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var polarGeometry = polargeometry; | |
| var constants = constants; | |
| p5.prototype._angleMode = constants.RADIANS; | |
| p5.prototype.acos = function (ratio) { | |
| if (this._angleMode === constants.RADIANS) { | |
| return Math.acos(ratio); | |
| } else { | |
| return polarGeometry.radiansToDegrees(Math.acos(ratio)); | |
| } | |
| }; | |
| p5.prototype.asin = function (ratio) { | |
| if (this._angleMode === constants.RADIANS) { | |
| return Math.asin(ratio); | |
| } else { | |
| return polarGeometry.radiansToDegrees(Math.asin(ratio)); | |
| } | |
| }; | |
| p5.prototype.atan = function (ratio) { | |
| if (this._angleMode === constants.RADIANS) { | |
| return Math.atan(ratio); | |
| } else { | |
| return polarGeometry.radiansToDegrees(Math.atan(ratio)); | |
| } | |
| }; | |
| p5.prototype.atan2 = function (y, x) { | |
| if (this._angleMode === constants.RADIANS) { | |
| return Math.atan2(y, x); | |
| } else { | |
| return polarGeometry.radiansToDegrees(Math.atan2(y, x)); | |
| } | |
| }; | |
| p5.prototype.cos = function (angle) { | |
| if (this._angleMode === constants.RADIANS) { | |
| return Math.cos(angle); | |
| } else { | |
| return Math.cos(this.radians(angle)); | |
| } | |
| }; | |
| p5.prototype.sin = function (angle) { | |
| if (this._angleMode === constants.RADIANS) { | |
| return Math.sin(angle); | |
| } else { | |
| return Math.sin(this.radians(angle)); | |
| } | |
| }; | |
| p5.prototype.tan = function (angle) { | |
| if (this._angleMode === constants.RADIANS) { | |
| return Math.tan(angle); | |
| } else { | |
| return Math.tan(this.radians(angle)); | |
| } | |
| }; | |
| p5.prototype.degrees = function (angle) { | |
| return polarGeometry.radiansToDegrees(angle); | |
| }; | |
| p5.prototype.radians = function (angle) { | |
| return polarGeometry.degreesToRadians(angle); | |
| }; | |
| p5.prototype.angleMode = function (mode) { | |
| if (mode === constants.DEGREES || mode === constants.RADIANS) { | |
| this._angleMode = mode; | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['polargeometry'], amdclean['constants']); | |
| amdclean['outputfiles'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| window.URL = window.URL || window.webkitURL; | |
| p5.prototype._pWriters = []; | |
| p5.prototype.beginRaw = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.beginRecord = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.createOutput = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.createWriter = function (name, extension) { | |
| var newPW; | |
| for (var i in p5.prototype._pWriters) { | |
| if (p5.prototype._pWriters[i].name === name) { | |
| newPW = new p5.PrintWriter(name + window.millis(), extension); | |
| p5.prototype._pWriters.push(newPW); | |
| return newPW; | |
| } | |
| } | |
| newPW = new p5.PrintWriter(name, extension); | |
| p5.prototype._pWriters.push(newPW); | |
| return newPW; | |
| }; | |
| p5.prototype.endRaw = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.endRecord = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.PrintWriter = function (filename, extension) { | |
| var self = this; | |
| this.name = filename; | |
| this.content = ''; | |
| this.print = function (data) { | |
| this.content += data; | |
| }; | |
| this.println = function (data) { | |
| this.content += data + '\n'; | |
| }; | |
| this.flush = function () { | |
| this.content = ''; | |
| }; | |
| this.close = function () { | |
| var arr = []; | |
| arr.push(this.content); | |
| p5.prototype.writeFile(arr, filename, extension); | |
| for (var i in p5.prototype._pWriters) { | |
| if (p5.prototype._pWriters[i].name === this.name) { | |
| p5.prototype._pWriters.splice(i, 1); | |
| } | |
| } | |
| self.flush(); | |
| self = {}; | |
| }; | |
| }; | |
| p5.prototype.saveBytes = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.save = function (object, _filename, _options) { | |
| var args = arguments; | |
| var cnv = this._curElement.elt; | |
| if (args.length === 0) { | |
| p5.prototype.saveCanvas(cnv); | |
| return; | |
| } else if (args[0] instanceof p5.Graphics) { | |
| p5.prototype.saveCanvas(args[0].elt, args[1], args[2]); | |
| return; | |
| } else if (args.length === 1 && typeof args[0] === 'string') { | |
| p5.prototype.saveCanvas(cnv, args[0]); | |
| } else { | |
| var extension = _checkFileExtension(args[1], args[2])[1]; | |
| switch (extension) { | |
| case 'json': | |
| p5.prototype.saveJSON(args[0], args[1], args[2]); | |
| return; | |
| case 'txt': | |
| p5.prototype.saveStrings(args[0], args[1], args[2]); | |
| return; | |
| default: | |
| if (args[0] instanceof Array) { | |
| p5.prototype.saveStrings(args[0], args[1], args[2]); | |
| } else if (args[0] instanceof p5.Table) { | |
| p5.prototype.saveTable(args[0], args[1], args[2], args[3]); | |
| } else if (args[0] instanceof p5.Image) { | |
| p5.prototype.saveCanvas(args[0].canvas, args[1]); | |
| } else if (args[0] instanceof p5.SoundFile) { | |
| p5.prototype.saveSound(args[0], args[1], args[2], args[3]); | |
| } | |
| } | |
| } | |
| }; | |
| p5.prototype.saveJSON = function (json, filename, opt) { | |
| var stringify; | |
| if (opt) { | |
| stringify = JSON.stringify(json); | |
| } else { | |
| stringify = JSON.stringify(json, undefined, 2); | |
| } | |
| console.log(stringify); | |
| this.saveStrings(stringify.split('\n'), filename, 'json'); | |
| }; | |
| p5.prototype.saveJSONObject = p5.prototype.saveJSON; | |
| p5.prototype.saveJSONArray = p5.prototype.saveJSON; | |
| p5.prototype.saveStream = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.saveStrings = function (list, filename, extension) { | |
| var ext = extension || 'txt'; | |
| var pWriter = this.createWriter(filename, ext); | |
| for (var i in list) { | |
| if (i < list.length - 1) { | |
| pWriter.println(list[i]); | |
| } else { | |
| pWriter.print(list[i]); | |
| } | |
| } | |
| pWriter.close(); | |
| pWriter.flush(); | |
| }; | |
| p5.prototype.saveXML = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.selectOutput = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.saveTable = function (table, filename, options) { | |
| var pWriter = this.createWriter(filename, options); | |
| var header = table.columns; | |
| var sep = ','; | |
| if (options === 'tsv') { | |
| sep = '\t'; | |
| } | |
| if (options !== 'html') { | |
| if (header[0] !== '0') { | |
| for (var h = 0; h < header.length; h++) { | |
| if (h < header.length - 1) { | |
| pWriter.print(header[h] + sep); | |
| } else { | |
| pWriter.println(header[h]); | |
| } | |
| } | |
| } | |
| for (var i = 0; i < table.rows.length; i++) { | |
| var j; | |
| for (j = 0; j < table.rows[i].arr.length; j++) { | |
| if (j < table.rows[i].arr.length - 1) { | |
| pWriter.print(table.rows[i].arr[j] + sep); | |
| } else if (i < table.rows.length - 1) { | |
| pWriter.println(table.rows[i].arr[j]); | |
| } else { | |
| pWriter.print(table.rows[i].arr[j]); | |
| } | |
| } | |
| } | |
| } else { | |
| pWriter.println('<html>'); | |
| pWriter.println('<head>'); | |
| var str = ' <meta http-equiv="content-type" content'; | |
| str += '="text/html;charset=utf-8" />'; | |
| pWriter.println(str); | |
| pWriter.println('</head>'); | |
| pWriter.println('<body>'); | |
| pWriter.println(' <table>'); | |
| if (header[0] !== '0') { | |
| pWriter.println(' <tr>'); | |
| for (var k = 0; k < header.length; k++) { | |
| var e = escapeHelper(header[k]); | |
| pWriter.println(' <td>' + e); | |
| pWriter.println(' </td>'); | |
| } | |
| pWriter.println(' </tr>'); | |
| } | |
| for (var row = 0; row < table.rows.length; row++) { | |
| pWriter.println(' <tr>'); | |
| for (var col = 0; col < table.columns.length; col++) { | |
| var entry = table.rows[row].getString(col); | |
| var htmlEntry = escapeHelper(entry); | |
| pWriter.println(' <td>' + htmlEntry); | |
| pWriter.println(' </td>'); | |
| } | |
| pWriter.println(' </tr>'); | |
| } | |
| pWriter.println(' </table>'); | |
| pWriter.println('</body>'); | |
| pWriter.print('</html>'); | |
| } | |
| pWriter.close(); | |
| pWriter.flush(); | |
| }; | |
| var escapeHelper = function (content) { | |
| return content.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '''); | |
| }; | |
| p5.prototype.writeFile = function (dataToDownload, filename, extension) { | |
| var type = 'application/octet-stream'; | |
| if (p5.prototype._isSafari()) { | |
| type = 'text/plain'; | |
| } | |
| var blob = new Blob(dataToDownload, { 'type': type }); | |
| var href = window.URL.createObjectURL(blob); | |
| p5.prototype.downloadFile(href, filename, extension); | |
| }; | |
| p5.prototype.downloadFile = function (href, fName, extension) { | |
| var fx = _checkFileExtension(fName, extension); | |
| var filename = fx[0]; | |
| var ext = fx[1]; | |
| var a = document.createElement('a'); | |
| a.href = href; | |
| a.download = filename; | |
| a.onclick = destroyClickedElement; | |
| a.style.display = 'none'; | |
| document.body.appendChild(a); | |
| if (p5.prototype._isSafari()) { | |
| var aText = 'Hello, Safari user! To download this file...\n'; | |
| aText += '1. Go to File --> Save As.\n'; | |
| aText += '2. Choose "Page Source" as the Format.\n'; | |
| aText += '3. Name it with this extension: ."' + ext + '"'; | |
| alert(aText); | |
| } | |
| a.click(); | |
| href = null; | |
| }; | |
| function _checkFileExtension(filename, extension) { | |
| if (!extension || extension === true || extension === 'true') { | |
| extension = ''; | |
| } | |
| if (!filename) { | |
| filename = 'untitled'; | |
| } | |
| var ext = ''; | |
| if (filename && filename.indexOf('.') > -1) { | |
| ext = filename.split('.').pop(); | |
| } | |
| if (extension) { | |
| if (ext !== extension) { | |
| ext = extension; | |
| filename = filename + '.' + ext; | |
| } | |
| } | |
| return [ | |
| filename, | |
| ext | |
| ]; | |
| } | |
| p5.prototype._checkFileExtension = _checkFileExtension; | |
| p5.prototype._isSafari = function () { | |
| var x = Object.prototype.toString.call(window.HTMLElement); | |
| return x.indexOf('Constructor') > 0; | |
| }; | |
| function destroyClickedElement(event) { | |
| document.body.removeChild(event.target); | |
| } | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['outputimage'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| var frames = []; | |
| p5.prototype.saveCanvas = function (_cnv, filename, extension) { | |
| if (!extension) { | |
| extension = p5.prototype._checkFileExtension(filename, extension)[1]; | |
| if (extension === '') { | |
| extension = 'png'; | |
| } | |
| } | |
| var cnv; | |
| if (_cnv) { | |
| cnv = _cnv; | |
| } else if (this._curElement && this._curElement.elt) { | |
| cnv = this._curElement.elt; | |
| } | |
| if (p5.prototype._isSafari()) { | |
| var aText = 'Hello, Safari user!\n'; | |
| aText += 'Now capturing a screenshot...\n'; | |
| aText += 'To save this image,\n'; | |
| aText += 'go to File --> Save As.\n'; | |
| alert(aText); | |
| window.location.href = cnv.toDataURL(); | |
| } else { | |
| var mimeType; | |
| if (typeof extension === 'undefined') { | |
| extension = 'png'; | |
| mimeType = 'image/png'; | |
| } else { | |
| switch (extension) { | |
| case 'png': | |
| mimeType = 'image/png'; | |
| break; | |
| case 'jpeg': | |
| mimeType = 'image/jpeg'; | |
| break; | |
| case 'jpg': | |
| mimeType = 'image/jpeg'; | |
| break; | |
| default: | |
| mimeType = 'image/png'; | |
| break; | |
| } | |
| } | |
| var downloadMime = 'image/octet-stream'; | |
| var imageData = cnv.toDataURL(mimeType); | |
| imageData = imageData.replace(mimeType, downloadMime); | |
| p5.prototype.downloadFile(imageData, filename, extension); | |
| } | |
| }; | |
| p5.prototype.saveFrames = function (fName, ext, _duration, _fps, callback) { | |
| var duration = _duration || 3; | |
| duration = p5.prototype.constrain(duration, 0, 15); | |
| duration = duration * 1000; | |
| var fps = _fps || 15; | |
| fps = p5.prototype.constrain(fps, 0, 22); | |
| var count = 0; | |
| var makeFrame = p5.prototype._makeFrame; | |
| var cnv = this._curElement.elt; | |
| var frameFactory = setInterval(function () { | |
| makeFrame(fName + count, ext, cnv); | |
| count++; | |
| }, 1000 / fps); | |
| setTimeout(function () { | |
| clearInterval(frameFactory); | |
| if (callback) { | |
| callback(frames); | |
| } else { | |
| for (var i = 0; i < frames.length; i++) { | |
| var f = frames[i]; | |
| p5.prototype.downloadFile(f.imageData, f.filename, f.ext); | |
| } | |
| } | |
| frames = []; | |
| }, duration + 0.01); | |
| }; | |
| p5.prototype._makeFrame = function (filename, extension, _cnv) { | |
| var cnv; | |
| if (this) { | |
| cnv = this._curElement.elt; | |
| } else { | |
| cnv = _cnv; | |
| } | |
| var mimeType; | |
| if (!extension) { | |
| extension = 'png'; | |
| mimeType = 'image/png'; | |
| } else { | |
| switch (extension.toLowerCase()) { | |
| case 'png': | |
| mimeType = 'image/png'; | |
| break; | |
| case 'jpeg': | |
| mimeType = 'image/jpeg'; | |
| break; | |
| case 'jpg': | |
| mimeType = 'image/jpeg'; | |
| break; | |
| default: | |
| mimeType = 'image/png'; | |
| break; | |
| } | |
| } | |
| var downloadMime = 'image/octet-stream'; | |
| var imageData = cnv.toDataURL(mimeType); | |
| imageData = imageData.replace(mimeType, downloadMime); | |
| var thisFrame = {}; | |
| thisFrame.imageData = imageData; | |
| thisFrame.filename = filename; | |
| thisFrame.ext = extension; | |
| frames.push(thisFrame); | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['outputtext_area'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| if (window.console && console.log) { | |
| p5.prototype.print = console.log.bind(console); | |
| } else { | |
| p5.prototype.print = function () { | |
| }; | |
| } | |
| p5.prototype.println = p5.prototype.print; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['renderingrendering'] = function (require, core, constants) { | |
| var p5 = core; | |
| var constants = constants; | |
| p5.prototype.createCanvas = function (w, h, isDefault) { | |
| var c; | |
| if (isDefault) { | |
| c = document.createElement('canvas'); | |
| c.id = 'defaultCanvas'; | |
| } else { | |
| c = this.canvas; | |
| } | |
| if (!this._setupDone) { | |
| c.className += ' p5_hidden'; | |
| c.style.visibility = 'hidden'; | |
| } | |
| if (this._userNode) { | |
| this._userNode.appendChild(c); | |
| } else { | |
| document.body.appendChild(c); | |
| } | |
| if (!this._defaultGraphics) { | |
| this._defaultGraphics = new p5.Graphics(c, this, true); | |
| this._elements.push(this._defaultGraphics); | |
| } | |
| this._defaultGraphics.resize(w, h); | |
| this._defaultGraphics._applyDefaults(); | |
| return this._defaultGraphics; | |
| }; | |
| p5.prototype.resizeCanvas = function (w, h, noRedraw) { | |
| if (this._defaultGraphics) { | |
| this._defaultGraphics.resize(w, h); | |
| this._defaultGraphics._applyDefaults(); | |
| if (!noRedraw) { | |
| this.redraw(); | |
| } | |
| } | |
| }; | |
| p5.prototype.noCanvas = function () { | |
| if (this.canvas) { | |
| this.canvas.parentNode.removeChild(this.canvas); | |
| } | |
| }; | |
| p5.prototype.createGraphics = function (w, h) { | |
| var c = document.createElement('canvas'); | |
| var node = this._userNode || document.body; | |
| node.appendChild(c); | |
| var pg = new p5.Graphics(c, this, false); | |
| this._elements.push(pg); | |
| for (var p in p5.prototype) { | |
| if (!pg.hasOwnProperty(p)) { | |
| if (typeof p5.prototype[p] === 'function') { | |
| pg[p] = p5.prototype[p].bind(pg); | |
| } else { | |
| pg[p] = p5.prototype[p]; | |
| } | |
| } | |
| } | |
| pg.resize(w, h); | |
| pg._applyDefaults(); | |
| return pg; | |
| }; | |
| p5.prototype.blendMode = function (mode) { | |
| if (mode === constants.BLEND || mode === constants.DARKEST || mode === constants.LIGHTEST || mode === constants.DIFFERENCE || mode === constants.MULTIPLY || mode === constants.EXCLUSION || mode === constants.SCREEN || mode === constants.REPLACE || mode === constants.OVERLAY || mode === constants.HARD_LIGHT || mode === constants.SOFT_LIGHT || mode === constants.DODGE || mode === constants.BURN || mode === constants.ADD || mode === constants.NORMAL) { | |
| this.drawingContext.globalCompositeOperation = mode; | |
| } else { | |
| throw new Error('Mode ' + mode + ' not recognized.'); | |
| } | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants']); | |
| amdclean['shape2d_primitives'] = function (require, core, canvas, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var canvas = canvas; | |
| var constants = constants; | |
| var EPSILON = 0.00001; | |
| function createArc(radius, startAngle, endAngle) { | |
| var twoPI = Math.PI * 2; | |
| var curves = []; | |
| var piOverTwo = Math.PI / 2; | |
| var sgn = startAngle < endAngle ? 1 : -1; | |
| var a1 = startAngle; | |
| var totalAngle = Math.min(twoPI, Math.abs(endAngle - startAngle)); | |
| for (; totalAngle > EPSILON;) { | |
| var a2 = a1 + sgn * Math.min(totalAngle, piOverTwo); | |
| curves.push(createSmallArc(radius, a1, a2)); | |
| totalAngle -= Math.abs(a2 - a1); | |
| a1 = a2; | |
| } | |
| return curves; | |
| } | |
| function createSmallArc(r, a1, a2) { | |
| var a = (a2 - a1) / 2; | |
| var x4 = r * Math.cos(a); | |
| var y4 = r * Math.sin(a); | |
| var x1 = x4; | |
| var y1 = -y4; | |
| var k = 0.5522847498; | |
| var f = k * Math.tan(a); | |
| var x2 = x1 + f * y4; | |
| var y2 = y1 + f * x4; | |
| var x3 = x2; | |
| var y3 = -y2; | |
| var ar = a + a1; | |
| var cos_ar = Math.cos(ar); | |
| var sin_ar = Math.sin(ar); | |
| return { | |
| x1: r * Math.cos(a1), | |
| y1: r * Math.sin(a1), | |
| x2: x2 * cos_ar - y2 * sin_ar, | |
| y2: x2 * sin_ar + y2 * cos_ar, | |
| x3: x3 * cos_ar - y3 * sin_ar, | |
| y3: x3 * sin_ar + y3 * cos_ar, | |
| x4: r * Math.cos(a2), | |
| y4: r * Math.sin(a2) | |
| }; | |
| } | |
| p5.prototype.arc = function (x, y, width, height, start, stop, mode) { | |
| if (!this._doStroke && !this._doFill) { | |
| return; | |
| } | |
| if (this._angleMode === constants.DEGREES) { | |
| start = this.radians(start); | |
| stop = this.radians(stop); | |
| } | |
| var ctx = this.drawingContext; | |
| var vals = canvas.arcModeAdjust(x, y, width, height, this._ellipseMode); | |
| var curves = createArc(1, start, stop); | |
| var rx = vals.w / 2; | |
| var ry = vals.h / 2; | |
| ctx.beginPath(); | |
| curves.forEach(function (curve, index) { | |
| if (index === 0) { | |
| ctx.moveTo(vals.x + curve.x1 * rx, vals.y + curve.y1 * ry); | |
| } | |
| ctx.bezierCurveTo(vals.x + curve.x2 * rx, vals.y + curve.y2 * ry, vals.x + curve.x3 * rx, vals.y + curve.y3 * ry, vals.x + curve.x4 * rx, vals.y + curve.y4 * ry); | |
| }); | |
| if (this._doFill) { | |
| if (mode === constants.PIE || mode == null) { | |
| ctx.lineTo(vals.x, vals.y); | |
| } | |
| ctx.closePath(); | |
| ctx.fill(); | |
| if (this._doStroke) { | |
| if (mode === constants.CHORD || mode === constants.PIE) { | |
| ctx.stroke(); | |
| return this; | |
| } | |
| } | |
| } | |
| if (this._doStroke) { | |
| if (mode === constants.OPEN || mode == null) { | |
| ctx.beginPath(); | |
| curves.forEach(function (curve, index) { | |
| if (index === 0) { | |
| ctx.moveTo(vals.x + curve.x1 * rx, vals.y + curve.y1 * ry); | |
| } | |
| ctx.bezierCurveTo(vals.x + curve.x2 * rx, vals.y + curve.y2 * ry, vals.x + curve.x3 * rx, vals.y + curve.y3 * ry, vals.x + curve.x4 * rx, vals.y + curve.y4 * ry); | |
| }); | |
| ctx.stroke(); | |
| } | |
| } | |
| return this; | |
| }; | |
| p5.prototype.ellipse = function (x, y, w, h) { | |
| if (!this._doStroke && !this._doFill) { | |
| return; | |
| } | |
| w = Math.abs(w); | |
| h = Math.abs(h); | |
| var ctx = this.drawingContext; | |
| var vals = canvas.modeAdjust(x, y, w, h, this._ellipseMode); | |
| ctx.beginPath(); | |
| if (w === h) { | |
| ctx.arc(vals.x + vals.w / 2, vals.y + vals.w / 2, vals.w / 2, 0, 2 * Math.PI, false); | |
| } else { | |
| var kappa = 0.5522848, ox = vals.w / 2 * kappa, oy = vals.h / 2 * kappa, xe = vals.x + vals.w, ye = vals.y + vals.h, xm = vals.x + vals.w / 2, ym = vals.y + vals.h / 2; | |
| ctx.moveTo(vals.x, ym); | |
| ctx.bezierCurveTo(vals.x, ym - oy, xm - ox, vals.y, xm, vals.y); | |
| ctx.bezierCurveTo(xm + ox, vals.y, xe, ym - oy, xe, ym); | |
| ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); | |
| ctx.bezierCurveTo(xm - ox, ye, vals.x, ym + oy, vals.x, ym); | |
| ctx.closePath(); | |
| } | |
| if (this._doFill) { | |
| ctx.fill(); | |
| } | |
| if (this._doStroke) { | |
| ctx.stroke(); | |
| } | |
| return this; | |
| }; | |
| p5.prototype.line = function (x1, y1, x2, y2) { | |
| if (!this._doStroke) { | |
| return; | |
| } | |
| var ctx = this.drawingContext; | |
| if (ctx.strokeStyle === 'rgba(0,0,0,0)') { | |
| return; | |
| } | |
| ctx.beginPath(); | |
| ctx.moveTo(x1, y1); | |
| ctx.lineTo(x2, y2); | |
| ctx.stroke(); | |
| return this; | |
| }; | |
| p5.prototype.point = function (x, y) { | |
| if (!this._doStroke) { | |
| return; | |
| } | |
| var ctx = this.drawingContext; | |
| var s = ctx.strokeStyle; | |
| var f = ctx.fillStyle; | |
| if (s === 'rgba(0,0,0,0)') { | |
| return; | |
| } | |
| x = Math.round(x); | |
| y = Math.round(y); | |
| ctx.fillStyle = s; | |
| if (ctx.lineWidth > 1) { | |
| ctx.beginPath(); | |
| ctx.arc(x, y, ctx.lineWidth / 2, 0, constants.TWO_PI, false); | |
| ctx.fill(); | |
| } else { | |
| ctx.fillRect(x, y, 1, 1); | |
| } | |
| ctx.fillStyle = f; | |
| return this; | |
| }; | |
| p5.prototype.quad = function (x1, y1, x2, y2, x3, y3, x4, y4) { | |
| if (!this._doStroke && !this._doFill) { | |
| return; | |
| } | |
| var ctx = this.drawingContext; | |
| ctx.beginPath(); | |
| ctx.moveTo(x1, y1); | |
| ctx.lineTo(x2, y2); | |
| ctx.lineTo(x3, y3); | |
| ctx.lineTo(x4, y4); | |
| ctx.closePath(); | |
| if (this._doFill) { | |
| ctx.fill(); | |
| } | |
| if (this._doStroke) { | |
| ctx.stroke(); | |
| } | |
| return this; | |
| }; | |
| p5.prototype.rect = function (a, b, c, d) { | |
| if (!this._doStroke && !this._doFill) { | |
| return; | |
| } | |
| var vals = canvas.modeAdjust(a, b, c, d, this._rectMode); | |
| var ctx = this.drawingContext; | |
| if (this._doStroke && ctx.lineWidth % 2 === 1) { | |
| ctx.translate(0.5, 0.5); | |
| } | |
| ctx.beginPath(); | |
| ctx.rect(vals.x, vals.y, vals.w, vals.h); | |
| if (this._doFill) { | |
| ctx.fill(); | |
| } | |
| if (this._doStroke) { | |
| ctx.stroke(); | |
| } | |
| if (this._doStroke && ctx.lineWidth % 2 === 1) { | |
| ctx.translate(-0.5, -0.5); | |
| } | |
| return this; | |
| }; | |
| p5.prototype.triangle = function (x1, y1, x2, y2, x3, y3) { | |
| if (!this._doStroke && !this._doFill) { | |
| return; | |
| } | |
| var ctx = this.drawingContext; | |
| ctx.beginPath(); | |
| ctx.moveTo(x1, y1); | |
| ctx.lineTo(x2, y2); | |
| ctx.lineTo(x3, y3); | |
| ctx.closePath(); | |
| if (this._doFill) { | |
| ctx.fill(); | |
| } | |
| if (this._doStroke) { | |
| ctx.stroke(); | |
| } | |
| return this; | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['canvas'], amdclean['constants']); | |
| amdclean['shapeattributes'] = function (require, core, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var constants = constants; | |
| p5.prototype._rectMode = constants.CORNER; | |
| p5.prototype._ellipseMode = constants.CENTER; | |
| p5.prototype.ellipseMode = function (m) { | |
| if (m === constants.CORNER || m === constants.CORNERS || m === constants.RADIUS || m === constants.CENTER) { | |
| this._ellipseMode = m; | |
| } | |
| return this; | |
| }; | |
| p5.prototype.noSmooth = function () { | |
| this.drawingContext.mozImageSmoothingEnabled = false; | |
| this.drawingContext.webkitImageSmoothingEnabled = false; | |
| return this; | |
| }; | |
| p5.prototype.rectMode = function (m) { | |
| if (m === constants.CORNER || m === constants.CORNERS || m === constants.RADIUS || m === constants.CENTER) { | |
| this._rectMode = m; | |
| } | |
| return this; | |
| }; | |
| p5.prototype.smooth = function () { | |
| this.drawingContext.mozImageSmoothingEnabled = true; | |
| this.drawingContext.webkitImageSmoothingEnabled = true; | |
| return this; | |
| }; | |
| p5.prototype.strokeCap = function (cap) { | |
| if (cap === constants.ROUND || cap === constants.SQUARE || cap === constants.PROJECT) { | |
| this.drawingContext.lineCap = cap; | |
| } | |
| return this; | |
| }; | |
| p5.prototype.strokeJoin = function (join) { | |
| if (join === constants.ROUND || join === constants.BEVEL || join === constants.MITER) { | |
| this.drawingContext.lineJoin = join; | |
| } | |
| return this; | |
| }; | |
| p5.prototype.strokeWeight = function (w) { | |
| if (typeof w === 'undefined' || w === 0) { | |
| this.drawingContext.lineWidth = 0.0001; | |
| } else { | |
| this.drawingContext.lineWidth = w; | |
| } | |
| return this; | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants']); | |
| amdclean['shapecurves'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| var bezierDetail = 20; | |
| var curveDetail = 20; | |
| p5.prototype._curveTightness = 0; | |
| p5.prototype.bezier = function (x1, y1, x2, y2, x3, y3, x4, y4) { | |
| if (!this._doStroke) { | |
| return; | |
| } | |
| this.beginShape(); | |
| this.vertex(x1, y1); | |
| this.bezierVertex(x2, y2, x3, y3, x4, y4); | |
| this.endShape(); | |
| this.stroke(); | |
| return this; | |
| }; | |
| p5.prototype.bezierDetail = function (d) { | |
| bezierDetail = d; | |
| return this; | |
| }; | |
| p5.prototype.bezierPoint = function (a, b, c, d, t) { | |
| var adjustedT = 1 - t; | |
| return Math.pow(adjustedT, 3) * a + 3 * Math.pow(adjustedT, 2) * t * b + 3 * adjustedT * Math.pow(t, 2) * c + Math.pow(t, 3) * d; | |
| }; | |
| p5.prototype.bezierTangent = function (a, b, c, d, t) { | |
| var adjustedT = 1 - t; | |
| return 3 * d * Math.pow(t, 2) - 3 * c * Math.pow(t, 2) + 6 * c * adjustedT * t - 6 * b * adjustedT * t + 3 * b * Math.pow(adjustedT, 2) - 3 * a * Math.pow(adjustedT, 2); | |
| }; | |
| p5.prototype.curve = function (x1, y1, x2, y2, x3, y3, x4, y4) { | |
| if (!this._doStroke) { | |
| return; | |
| } | |
| this.beginShape(); | |
| this.curveVertex(x1, y1); | |
| this.curveVertex(x2, y2); | |
| this.curveVertex(x3, y3); | |
| this.curveVertex(x4, y4); | |
| this.endShape(); | |
| this.stroke(); | |
| return this; | |
| }; | |
| p5.prototype.curveDetail = function (d) { | |
| curveDetail = d; | |
| return this; | |
| }; | |
| p5.prototype.curveTightness = function (t) { | |
| this._setProperty('_curveTightness', t); | |
| }; | |
| p5.prototype.curvePoint = function (a, b, c, d, t) { | |
| var t3 = t * t * t, t2 = t * t, f1 = -0.5 * t3 + t2 - 0.5 * t, f2 = 1.5 * t3 - 2.5 * t2 + 1, f3 = -1.5 * t3 + 2 * t2 + 0.5 * t, f4 = 0.5 * t3 - 0.5 * t2; | |
| return a * f1 + b * f2 + c * f3 + d * f4; | |
| }; | |
| p5.prototype.curveTangent = function (a, b, c, d, t) { | |
| var t2 = t * t, f1 = -3 * t2 / 2 + 2 * t - 0.5, f2 = 9 * t2 / 2 - 5 * t, f3 = -9 * t2 / 2 + 4 * t + 0.5, f4 = 3 * t2 / 2 - t; | |
| return a * f1 + b * f2 + c * f3 + d * f4; | |
| }; | |
| p5.prototype.curveTightness = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['shapevertex'] = function (require, core, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var constants = constants; | |
| var shapeKind = null; | |
| var vertices = []; | |
| var contourVertices = []; | |
| var isBezier = false; | |
| var isCurve = false; | |
| var isQuadratic = false; | |
| var isContour = false; | |
| p5.prototype._doFillStrokeClose = function () { | |
| if (this._doFill) { | |
| this.drawingContext.fill(); | |
| } | |
| if (this._doStroke) { | |
| this.drawingContext.stroke(); | |
| } | |
| this.drawingContext.closePath(); | |
| }; | |
| p5.prototype.beginContour = function () { | |
| contourVertices = []; | |
| isContour = true; | |
| return this; | |
| }; | |
| p5.prototype.beginShape = function (kind) { | |
| if (kind === constants.POINTS || kind === constants.LINES || kind === constants.TRIANGLES || kind === constants.TRIANGLE_FAN || kind === constants.TRIANGLE_STRIP || kind === constants.QUADS || kind === constants.QUAD_STRIP) { | |
| shapeKind = kind; | |
| } else { | |
| shapeKind = null; | |
| } | |
| vertices = []; | |
| contourVertices = []; | |
| return this; | |
| }; | |
| p5.prototype.bezierVertex = function (x2, y2, x3, y3, x4, y4) { | |
| if (vertices.length === 0) { | |
| throw 'vertex() must be used once before calling bezierVertex()'; | |
| } else { | |
| isBezier = true; | |
| var vert = []; | |
| for (var i = 0; i < arguments.length; i++) { | |
| vert[i] = arguments[i]; | |
| } | |
| vert.isVert = false; | |
| if (isContour) { | |
| contourVertices.push(vert); | |
| } else { | |
| vertices.push(vert); | |
| } | |
| } | |
| return this; | |
| }; | |
| p5.prototype.curveVertex = function (x, y) { | |
| isCurve = true; | |
| this.vertex(x, y); | |
| return this; | |
| }; | |
| p5.prototype.endContour = function () { | |
| var vert = contourVertices[0].slice(); | |
| vert.isVert = contourVertices[0].isVert; | |
| vert.moveTo = false; | |
| contourVertices.push(vert); | |
| vertices.push(vertices[0]); | |
| for (var i = 0; i < contourVertices.length; i++) { | |
| vertices.push(contourVertices[i]); | |
| } | |
| return this; | |
| }; | |
| p5.prototype.endShape = function (mode) { | |
| if (vertices.length === 0) { | |
| return this; | |
| } | |
| if (!this._doStroke && !this._doFill) { | |
| return this; | |
| } | |
| var closeShape = mode === constants.CLOSE; | |
| var v; | |
| if (closeShape && !isContour) { | |
| vertices.push(vertices[0]); | |
| } | |
| var i, j; | |
| var numVerts = vertices.length; | |
| if (isCurve && (shapeKind === constants.POLYGON || shapeKind === null)) { | |
| if (numVerts > 3) { | |
| var b = [], s = 1 - this._curveTightness; | |
| this.drawingContext.beginPath(); | |
| this.drawingContext.moveTo(vertices[1][0], vertices[1][1]); | |
| for (i = 1; i + 2 < numVerts; i++) { | |
| v = vertices[i]; | |
| b[0] = [ | |
| v[0], | |
| v[1] | |
| ]; | |
| b[1] = [ | |
| v[0] + (s * vertices[i + 1][0] - s * vertices[i - 1][0]) / 6, | |
| v[1] + (s * vertices[i + 1][1] - s * vertices[i - 1][1]) / 6 | |
| ]; | |
| b[2] = [ | |
| vertices[i + 1][0] + (s * vertices[i][0] - s * vertices[i + 2][0]) / 6, | |
| vertices[i + 1][1] + (s * vertices[i][1] - s * vertices[i + 2][1]) / 6 | |
| ]; | |
| b[3] = [ | |
| vertices[i + 1][0], | |
| vertices[i + 1][1] | |
| ]; | |
| this.drawingContext.bezierCurveTo(b[1][0], b[1][1], b[2][0], b[2][1], b[3][0], b[3][1]); | |
| } | |
| if (closeShape) { | |
| this.drawingContext.lineTo(vertices[i + 1][0], vertices[i + 1][1]); | |
| } | |
| this._doFillStrokeClose(); | |
| } | |
| } else if (isBezier && (shapeKind === constants.POLYGON || shapeKind === null)) { | |
| this.drawingContext.beginPath(); | |
| for (i = 0; i < numVerts; i++) { | |
| if (vertices[i].isVert) { | |
| if (vertices[i].moveTo) { | |
| this.drawingContext.moveTo(vertices[i][0], vertices[i][1]); | |
| } else { | |
| this.drawingContext.lineTo(vertices[i][0], vertices[i][1]); | |
| } | |
| } else { | |
| this.drawingContext.bezierCurveTo(vertices[i][0], vertices[i][1], vertices[i][2], vertices[i][3], vertices[i][4], vertices[i][5]); | |
| } | |
| } | |
| this._doFillStrokeClose(); | |
| } else if (isQuadratic && (shapeKind === constants.POLYGON || shapeKind === null)) { | |
| this.drawingContext.beginPath(); | |
| for (i = 0; i < numVerts; i++) { | |
| if (vertices[i].isVert) { | |
| if (vertices[i].moveTo) { | |
| this.drawingContext.moveTo([0], vertices[i][1]); | |
| } else { | |
| this.drawingContext.lineTo(vertices[i][0], vertices[i][1]); | |
| } | |
| } else { | |
| this.drawingContext.quadraticCurveTo(vertices[i][0], vertices[i][1], vertices[i][2], vertices[i][3]); | |
| } | |
| } | |
| this._doFillStrokeClose(); | |
| } else { | |
| if (shapeKind === constants.POINTS) { | |
| for (i = 0; i < numVerts; i++) { | |
| v = vertices[i]; | |
| if (this._doStroke) { | |
| this.stroke(v[6]); | |
| } | |
| this.point(v[0], v[1]); | |
| } | |
| } else if (shapeKind === constants.LINES) { | |
| for (i = 0; i + 1 < numVerts; i += 2) { | |
| v = vertices[i]; | |
| if (this._doStroke) { | |
| this.stroke(vertices[i + 1][6]); | |
| } | |
| this.line(v[0], v[1], vertices[i + 1][0], vertices[i + 1][1]); | |
| } | |
| } else if (shapeKind === constants.TRIANGLES) { | |
| for (i = 0; i + 2 < numVerts; i += 3) { | |
| v = vertices[i]; | |
| this.drawingContext.beginPath(); | |
| this.drawingContext.moveTo(v[0], v[1]); | |
| this.drawingContext.lineTo(vertices[i + 1][0], vertices[i + 1][1]); | |
| this.drawingContext.lineTo(vertices[i + 2][0], vertices[i + 2][1]); | |
| this.drawingContext.lineTo(v[0], v[1]); | |
| if (this._doFill) { | |
| this.fill(vertices[i + 2][5]); | |
| this.drawingContext.fill(); | |
| } | |
| if (this._doStroke) { | |
| this.stroke(vertices[i + 2][6]); | |
| this.drawingContext.stroke(); | |
| } | |
| this.drawingContext.closePath(); | |
| } | |
| } else if (shapeKind === constants.TRIANGLE_STRIP) { | |
| for (i = 0; i + 1 < numVerts; i++) { | |
| v = vertices[i]; | |
| this.drawingContext.beginPath(); | |
| this.drawingContext.moveTo(vertices[i + 1][0], vertices[i + 1][1]); | |
| this.drawingContext.lineTo(v[0], v[1]); | |
| if (this._doStroke) { | |
| this.stroke(vertices[i + 1][6]); | |
| } | |
| if (this._doFill) { | |
| this.fill(vertices[i + 1][5]); | |
| } | |
| if (i + 2 < numVerts) { | |
| this.drawingContext.lineTo(vertices[i + 2][0], vertices[i + 2][1]); | |
| if (this._doStroke) { | |
| this.stroke(vertices[i + 2][6]); | |
| } | |
| if (this._doFill) { | |
| this.fill(vertices[i + 2][5]); | |
| } | |
| } | |
| this._doFillStrokeClose(); | |
| } | |
| } else if (shapeKind === constants.TRIANGLE_FAN) { | |
| if (numVerts > 2) { | |
| this.drawingContext.beginPath(); | |
| this.drawingContext.moveTo(vertices[0][0], vertices[0][1]); | |
| this.drawingContext.lineTo(vertices[1][0], vertices[1][1]); | |
| this.drawingContext.lineTo(vertices[2][0], vertices[2][1]); | |
| if (this._doFill) { | |
| this.fill(vertices[2][5]); | |
| } | |
| if (this._doStroke) { | |
| this.stroke(vertices[2][6]); | |
| } | |
| this._doFillStrokeClose(); | |
| for (i = 3; i < numVerts; i++) { | |
| v = vertices[i]; | |
| this.drawingContext.beginPath(); | |
| this.drawingContext.moveTo(vertices[0][0], vertices[0][1]); | |
| this.drawingContext.lineTo(vertices[i - 1][0], vertices[i - 1][1]); | |
| this.drawingContext.lineTo(v[0], v[1]); | |
| if (this._doFill) { | |
| this.fill(v[5]); | |
| } | |
| if (this._doStroke) { | |
| this.stroke(v[6]); | |
| } | |
| this._doFillStrokeClose(); | |
| } | |
| } | |
| } else if (shapeKind === constants.QUADS) { | |
| for (i = 0; i + 3 < numVerts; i += 4) { | |
| v = vertices[i]; | |
| this.drawingContext.beginPath(); | |
| this.drawingContext.moveTo(v[0], v[1]); | |
| for (j = 1; j < 4; j++) { | |
| this.drawingContext.lineTo(vertices[i + j][0], vertices[i + j][1]); | |
| } | |
| this.drawingContext.lineTo(v[0], v[1]); | |
| if (this._doFill) { | |
| this.fill(vertices[i + 3][5]); | |
| } | |
| if (this._doStroke) { | |
| this.stroke(vertices[i + 3][6]); | |
| } | |
| this._doFillStrokeClose(); | |
| } | |
| } else if (shapeKind === constants.QUAD_STRIP) { | |
| if (numVerts > 3) { | |
| for (i = 0; i + 1 < numVerts; i += 2) { | |
| v = vertices[i]; | |
| this.drawingContext.beginPath(); | |
| if (i + 3 < numVerts) { | |
| this.drawingContext.moveTo(vertices[i + 2][0], vertices[i + 2][1]); | |
| this.drawingContext.lineTo(v[0], v[1]); | |
| this.drawingContext.lineTo(vertices[i + 1][0], vertices[i + 1][1]); | |
| this.drawingContext.lineTo(vertices[i + 3][0], vertices[i + 3][1]); | |
| if (this._doFill) { | |
| this.fill(vertices[i + 3][5]); | |
| } | |
| if (this._doStroke) { | |
| this.stroke(vertices[i + 3][6]); | |
| } | |
| } else { | |
| this.drawingContext.moveTo(v[0], v[1]); | |
| this.drawingContext.lineTo(vertices[i + 1][0], vertices[i + 1][1]); | |
| } | |
| this._doFillStrokeClose(); | |
| } | |
| } | |
| } else { | |
| this.drawingContext.beginPath(); | |
| this.drawingContext.moveTo(vertices[0][0], vertices[0][1]); | |
| for (i = 1; i < numVerts; i++) { | |
| v = vertices[i]; | |
| if (v.isVert) { | |
| if (v.moveTo) { | |
| this.drawingContext.moveTo(v[0], v[1]); | |
| } else { | |
| this.drawingContext.lineTo(v[0], v[1]); | |
| } | |
| } | |
| } | |
| this._doFillStrokeClose(); | |
| } | |
| } | |
| isCurve = false; | |
| isBezier = false; | |
| isQuadratic = false; | |
| isContour = false; | |
| if (closeShape) { | |
| vertices.pop(); | |
| } | |
| return this; | |
| }; | |
| p5.prototype.quadraticVertex = function (cx, cy, x3, y3) { | |
| if (this._contourInited) { | |
| var pt = {}; | |
| pt.x = cx; | |
| pt.y = cy; | |
| pt.x3 = x3; | |
| pt.y3 = y3; | |
| pt.type = constants.QUADRATIC; | |
| this._contourVertices.push(pt); | |
| return this; | |
| } | |
| if (vertices.length > 0) { | |
| isQuadratic = true; | |
| var vert = []; | |
| for (var i = 0; i < arguments.length; i++) { | |
| vert[i] = arguments[i]; | |
| } | |
| vert.isVert = false; | |
| if (isContour) { | |
| contourVertices.push(vert); | |
| } else { | |
| vertices.push(vert); | |
| } | |
| } else { | |
| throw 'vertex() must be used once before calling quadraticVertex()'; | |
| } | |
| return this; | |
| }; | |
| p5.prototype.vertex = function (x, y, moveTo) { | |
| var vert = []; | |
| vert.isVert = true; | |
| vert[0] = x; | |
| vert[1] = y; | |
| vert[2] = 0; | |
| vert[3] = 0; | |
| vert[4] = 0; | |
| vert[5] = this.drawingContext.fillStyle; | |
| vert[6] = this.drawingContext.strokeStyle; | |
| if (moveTo) { | |
| vert.moveTo = moveTo; | |
| } | |
| if (isContour) { | |
| if (contourVertices.length === 0) { | |
| vert.moveTo = true; | |
| } | |
| contourVertices.push(vert); | |
| } else { | |
| vertices.push(vert); | |
| } | |
| return this; | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants']); | |
| amdclean['structure'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.exit = function () { | |
| throw 'exit() not implemented, see remove()'; | |
| }; | |
| p5.prototype.noLoop = function () { | |
| this._loop = false; | |
| if (this._drawInterval) { | |
| clearInterval(this._drawInterval); | |
| } | |
| }; | |
| p5.prototype.loop = function () { | |
| this._loop = true; | |
| this._draw(); | |
| }; | |
| p5.prototype.push = function () { | |
| this.drawingContext.save(); | |
| this._styles.push({ | |
| doStroke: this._doStroke, | |
| doFill: this._doFill, | |
| tint: this._tint, | |
| imageMode: this._imageMode, | |
| rectMode: this._rectMode, | |
| ellipseMode: this._ellipseMode, | |
| colorMode: this._colorMode, | |
| textFont: this.textFont, | |
| textLeading: this.textLeading, | |
| textSize: this.textSize, | |
| textStyle: this.textStyle | |
| }); | |
| }; | |
| p5.prototype.pop = function () { | |
| this.drawingContext.restore(); | |
| var lastS = this._styles.pop(); | |
| this._doStroke = lastS.doStroke; | |
| this._doFill = lastS.doFill; | |
| this._tint = lastS.tint; | |
| this._imageMode = lastS.imageMode; | |
| this._rectMode = lastS.rectMode; | |
| this._ellipseMode = lastS.ellipseMode; | |
| this._colorMode = lastS.colorMode; | |
| this.textFont = lastS.textFont; | |
| this.textLeading = lastS.textLeading; | |
| this.textSize = lastS.textSize; | |
| this.textStyle = lastS.textStyle; | |
| }; | |
| p5.prototype.pushStyle = function () { | |
| throw new Error('pushStyle() not used, see push()'); | |
| }; | |
| p5.prototype.popStyle = function () { | |
| throw new Error('popStyle() not used, see pop()'); | |
| }; | |
| p5.prototype.redraw = function () { | |
| var userSetup = this.setup || window.setup; | |
| var userDraw = this.draw || window.draw; | |
| if (typeof userDraw === 'function') { | |
| this.push(); | |
| if (typeof userSetup === 'undefined') { | |
| this.scale(this._pixelDensity, this._pixelDensity); | |
| } | |
| this._registeredMethods.pre.forEach(function (f) { | |
| f.call(this); | |
| }); | |
| userDraw(); | |
| this._registeredMethods.post.forEach(function (f) { | |
| f.call(this); | |
| }); | |
| this.pop(); | |
| } | |
| }; | |
| p5.prototype.size = function () { | |
| throw 'size() not implemented, see createCanvas()'; | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['transform'] = function (require, core, constants, outputtext_area) { | |
| 'use strict'; | |
| var p5 = core; | |
| var constants = constants; | |
| p5.prototype.applyMatrix = function (n00, n01, n02, n10, n11, n12) { | |
| this.drawingContext.transform(n00, n01, n02, n10, n11, n12); | |
| return this; | |
| }; | |
| p5.prototype.popMatrix = function () { | |
| throw new Error('popMatrix() not used, see pop()'); | |
| }; | |
| p5.prototype.printMatrix = function () { | |
| throw new Error('printMatrix() not implemented'); | |
| }; | |
| p5.prototype.pushMatrix = function () { | |
| throw new Error('pushMatrix() not used, see push()'); | |
| }; | |
| p5.prototype.resetMatrix = function () { | |
| this.drawingContext.setTransform(1, 0, 0, 1, 0, 0); | |
| return this; | |
| }; | |
| p5.prototype.rotate = function (r) { | |
| if (this._angleMode === constants.DEGREES) { | |
| r = this.radians(r); | |
| } | |
| this.drawingContext.rotate(r); | |
| return this; | |
| }; | |
| p5.prototype.rotateX = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.rotateY = function () { | |
| throw 'not yet implemented'; | |
| }; | |
| p5.prototype.scale = function () { | |
| var x = 1, y = 1; | |
| if (arguments.length === 1) { | |
| x = y = arguments[0]; | |
| } else { | |
| x = arguments[0]; | |
| y = arguments[1]; | |
| } | |
| this.drawingContext.scale(x, y); | |
| return this; | |
| }; | |
| p5.prototype.shearX = function (angle) { | |
| if (this._angleMode === constants.DEGREES) { | |
| angle = this.radians(angle); | |
| } | |
| this.drawingContext.transform(1, 0, this.tan(angle), 1, 0, 0); | |
| return this; | |
| }; | |
| p5.prototype.shearY = function (angle) { | |
| if (this._angleMode === constants.DEGREES) { | |
| angle = this.radians(angle); | |
| } | |
| this.drawingContext.transform(1, this.tan(angle), 0, 1, 0, 0); | |
| return this; | |
| }; | |
| p5.prototype.translate = function (x, y) { | |
| this.drawingContext.translate(x, y); | |
| return this; | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants'], amdclean['outputtext_area']); | |
| amdclean['typographyattributes'] = function (require, core, constants) { | |
| 'use strict'; | |
| var p5 = core; | |
| var constants = constants; | |
| p5.prototype._textLeading = 15; | |
| p5.prototype._textFont = 'sans-serif'; | |
| p5.prototype._textSize = 12; | |
| p5.prototype._textStyle = constants.NORMAL; | |
| p5.prototype._textAscent = null; | |
| p5.prototype._textDescent = null; | |
| p5.prototype.textAlign = function (h, v) { | |
| if (h === constants.LEFT || h === constants.RIGHT || h === constants.CENTER) { | |
| this.drawingContext.textAlign = h; | |
| } | |
| if (v === constants.TOP || v === constants.BOTTOM || v === constants.CENTER || v === constants.BASELINE) { | |
| this.drawingContext.textBaseline = v; | |
| } | |
| }; | |
| p5.prototype.textLeading = function (l) { | |
| this._setProperty('_textLeading', l); | |
| }; | |
| p5.prototype.textSize = function (s) { | |
| this._setProperty('_textSize', s); | |
| this._setProperty('_textLeading', s * 1.25); | |
| this._applyTextProperties(); | |
| }; | |
| p5.prototype.textStyle = function (s) { | |
| if (s === constants.NORMAL || s === constants.ITALIC || s === constants.BOLD) { | |
| this._setProperty('_textStyle', s); | |
| this._applyTextProperties(); | |
| } | |
| }; | |
| p5.prototype.textWidth = function (s) { | |
| return this.drawingContext.measureText(s).width; | |
| }; | |
| p5.prototype.textAscent = function () { | |
| if (this._textAscent == null) { | |
| this._updateTextMetrics(); | |
| } | |
| return this._textAscent; | |
| }; | |
| p5.prototype.textDescent = function () { | |
| if (this._textDescent == null) { | |
| this._updateTextMetrics(); | |
| } | |
| return this._textDescent; | |
| }; | |
| p5.prototype._applyTextProperties = function () { | |
| this._setProperty('_textAscent', null); | |
| this._setProperty('_textDescent', null); | |
| var str = this._textStyle + ' ' + this._textSize + 'px ' + this._textFont; | |
| this.drawingContext.font = str; | |
| }; | |
| p5.prototype._updateTextMetrics = function () { | |
| var text = document.createElement('span'); | |
| text.style.fontFamily = this._textFont; | |
| text.style.fontSize = this._textSize + 'px'; | |
| text.innerHTML = 'ABCjgq|'; | |
| var block = document.createElement('div'); | |
| block.style.display = 'inline-block'; | |
| block.style.width = '1px'; | |
| block.style.height = '0px'; | |
| var container = document.createElement('div'); | |
| container.appendChild(text); | |
| container.appendChild(block); | |
| container.style.height = '0px'; | |
| container.style.overflow = 'hidden'; | |
| document.body.appendChild(container); | |
| block.style.verticalAlign = 'baseline'; | |
| var blockOffset = this._calculateOffset(block); | |
| var textOffset = this._calculateOffset(text); | |
| var ascent = blockOffset[1] - textOffset[1]; | |
| block.style.verticalAlign = 'bottom'; | |
| blockOffset = this._calculateOffset(block); | |
| textOffset = this._calculateOffset(text); | |
| var height = blockOffset[1] - textOffset[1]; | |
| var descent = height - ascent; | |
| document.body.removeChild(container); | |
| this._setProperty('_textAscent', ascent); | |
| this._setProperty('_textDescent', descent); | |
| }; | |
| p5.prototype._calculateOffset = function (object) { | |
| var currentLeft = 0, currentTop = 0; | |
| if (object.offsetParent) { | |
| do { | |
| currentLeft += object.offsetLeft; | |
| currentTop += object.offsetTop; | |
| } while (object = object.offsetParent); | |
| } else { | |
| currentLeft += object.offsetLeft; | |
| currentTop += object.offsetTop; | |
| } | |
| return [ | |
| currentLeft, | |
| currentTop | |
| ]; | |
| }; | |
| return p5; | |
| }({}, amdclean['core'], amdclean['constants']); | |
| amdclean['typographyloading_displaying'] = function (require, core) { | |
| 'use strict'; | |
| var p5 = core; | |
| p5.prototype.text = function (str, x, y, maxWidth, maxHeight) { | |
| if (typeof str !== 'string') { | |
| str = str.toString(); | |
| } | |
| if (typeof maxWidth !== 'undefined') { | |
| y += this._textLeading; | |
| maxHeight += y; | |
| } | |
| str = str.replace(/(\t)/g, ' '); | |
| var cars = str.split('\n'); | |
| for (var ii = 0; ii < cars.length; ii++) { | |
| var line = ''; | |
| var words = cars[ii].split(' '); | |
| for (var n = 0; n < words.length; n++) { | |
| if (y + this._textLeading <= maxHeight || typeof maxHeight === 'undefined') { | |
| var testLine = line + words[n] + ' '; | |
| var metrics = this.drawingContext.measureText(testLine); | |
| var testWidth = metrics.width; | |
| if (typeof maxWidth !== 'undefined' && testWidth > maxWidth) { | |
| if (this._doFill) { | |
| this.drawingContext.fillText(line, x, y); | |
| } | |
| if (this._doStroke) { | |
| this.drawingContext.strokeText(line, x, y); | |
| } | |
| line = words[n] + ' '; | |
| y += this._textLeading; | |
| } else { | |
| line = testLine; | |
| } | |
| } | |
| } | |
| if (this._doFill) { | |
| this.drawingContext.fillText(line, x, y); | |
| } | |
| if (this._doStroke) { | |
| this.drawingContext.strokeText(line, x, y); | |
| } | |
| y += this._textLeading; | |
| } | |
| }; | |
| p5.prototype.textFont = function (str) { | |
| this._setProperty('_textFont', str); | |
| this._applyTextProperties(); | |
| }; | |
| return p5; | |
| }({}, amdclean['core']); | |
| amdclean['src_app'] = function (require, core, p5Color, p5Element, p5Graphics, p5Image, p5File, p5Vector, p5TableRow, p5Table, colorcreating_reading, colorsetting, constants, dataconversion, dataarray_functions, datastring_functions, environment, imageimage, imageloading_displaying, imagepixels, inputfiles, inputkeyboard, inputacceleration, inputmouse, inputtime_date, inputtouch, mathmath, mathcalculation, mathrandom, mathnoise, mathtrigonometry, outputfiles, outputimage, outputtext_area, renderingrendering, shape2d_primitives, shapeattributes, shapecurves, shapevertex, structure, transform, typographyattributes, typographyloading_displaying) { | |
| 'use strict'; | |
| var p5 = core; | |
| var _globalInit = function () { | |
| if (!window.PHANTOMJS && !window.mocha) { | |
| if (window.setup && typeof window.setup === 'function' || window.draw && typeof window.draw === 'function') { | |
| new p5(); | |
| } | |
| } | |
| }; | |
| if (document.readyState === 'complete') { | |
| _globalInit(); | |
| } else { | |
| window.addEventListener('load', _globalInit, false); | |
| } | |
| return p5; | |
| }({}, amdclean['core'], amdclean['p5Color'], amdclean['p5Element'], amdclean['p5Graphics'], amdclean['p5Image'], amdclean['p5File'], amdclean['p5Vector'], amdclean['p5TableRow'], amdclean['p5Table'], amdclean['colorcreating_reading'], amdclean['colorsetting'], amdclean['constants'], amdclean['dataconversion'], amdclean['dataarray_functions'], amdclean['datastring_functions'], amdclean['environment'], amdclean['imageimage'], amdclean['imageloading_displaying'], amdclean['imagepixels'], amdclean['inputfiles'], amdclean['inputkeyboard'], amdclean['inputacceleration'], amdclean['inputmouse'], amdclean['inputtime_date'], amdclean['inputtouch'], amdclean['mathmath'], amdclean['mathcalculation'], amdclean['mathrandom'], amdclean['mathnoise'], amdclean['mathtrigonometry'], amdclean['outputfiles'], amdclean['outputimage'], amdclean['outputtext_area'], amdclean['renderingrendering'], amdclean['shape2d_primitives'], amdclean['shapeattributes'], amdclean['shapecurves'], amdclean['shapevertex'], amdclean['structure'], amdclean['transform'], amdclean['typographyattributes'], amdclean['typographyloading_displaying']); | |
| return amdclean['src_app']; | |
| })); |
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
| var ScaleX, ScaleY; | |
| var brushSize = 10; | |
| var colorC, colorM, colorY, colorW; | |
| function setup() { | |
| createCanvas(1280, 800); | |
| background(0); | |
| } | |
| function draw() { | |
| ScaleX = random(20, brushSize); | |
| ScaleY = random(20, brushSize); | |
| //background(20, 120, 180); | |
| noStroke(); | |
| if (mouseIsPressed) { | |
| fill(0, 90); | |
| } else { | |
| if (colorC == 1) { | |
| fill(125, 200, 255, 5); | |
| } else if (colorC == 2) { | |
| fill(255, 125, 125, 5); | |
| } else if (colorC == 3) { | |
| fill(255, 230, 125, 5); | |
| } else if (colorC == 4) { | |
| fill(180, 240, 140, 5); | |
| } else if (colorC == 4) { | |
| fill(180, 240, 140, 5); | |
| } else if (colorC == 5) { | |
| fill(150, 140, 240, 5); | |
| } else if (colorC == 0) { | |
| fill(255, 40); | |
| } else { | |
| fill(255, 40); | |
| } | |
| } | |
| ellipse(mouseX, mouseY, ScaleX * 1, ScaleY * 1); | |
| ellipse(mouseX, mouseY, ScaleX * 1.2, ScaleY * 1.2); | |
| ellipse(mouseX, mouseY, ScaleX * 1.4, ScaleY * 1.4); | |
| ellipse(mouseX, mouseY, ScaleX * 1.6, ScaleY * 1.6); | |
| ellipse(mouseX, mouseY, ScaleX * 1.8, ScaleY * 1.8); | |
| ellipse(mouseX, mouseY, ScaleX * 2, ScaleY * 2); | |
| if (keyIsPressed) { | |
| if (keyCode == RETURN) { | |
| save('myCanvas.jpg'); | |
| } else if (keyCode == TAB) { | |
| var fs = fullscreen(); | |
| fullscreen(!fs); | |
| } else if (keyCode == UP_ARROW) { | |
| brushSize += 5; | |
| } else if (keyCode == DOWN_ARROW) { | |
| if (brushSize <= 5) brushSize *= 0.8; | |
| else brushSize -= 5; | |
| } | |
| } | |
| // var s = "No Click for Draw. Click for Erase. Any KeyBoard for Save"; | |
| // fill(255); | |
| // text(s, 20, 20, 500, 80); // Text wraps within text box | |
| } | |
| function keyTyped() { | |
| if (key === 'z') { | |
| colorC = 1; | |
| } else if (key === 'x') { | |
| colorC = 2; | |
| } else if (key === 'c') { | |
| colorC = 3; | |
| } else if (key === 'v') { | |
| colorC = 4; | |
| } else if (key === 'b') { | |
| colorC = 5; | |
| } else if (key === 'n') { | |
| colorC = 0; | |
| } else if (key === ' ') { | |
| if (colorC == 1) { | |
| fill(125, 200, 255, 5); | |
| } else if (colorC == 2) { | |
| fill(255, 125, 125, 5); | |
| } else if (colorC == 3) { | |
| fill(255, 230, 125, 5); | |
| } else if (colorC == 4) { | |
| fill(180, 240, 140, 5); | |
| } else if (colorC == 4) { | |
| fill(180, 240, 140, 5); | |
| } else if (colorC == 5) { | |
| fill(150, 140, 240, 5); | |
| } else if (colorC == 0) { | |
| fill(255, 40); | |
| } else { | |
| fill(255, 40); | |
| } | |
| generateRandom(); | |
| generateRandom(); | |
| generateRandom(); | |
| generateRandom(); | |
| generateRandom(); | |
| generateRandom(); | |
| generateRandom(); | |
| generateRandom(); | |
| generateRandom(); | |
| generateRandom(); | |
| } | |
| } | |
| function generateRandom() { | |
| noStroke(); | |
| var rX, rY; | |
| rX = random(0, 1280); | |
| rY = random(0, 800); | |
| ellipse(rX, rY, ScaleX * 1, ScaleY * 1); | |
| ellipse(rX, rY, ScaleX * 1.2, ScaleY * 1.2); | |
| ellipse(rX, rY, ScaleX * 1.4, ScaleY * 1.4); | |
| ellipse(rX, rY, ScaleX * 1.6, ScaleY * 1.6); | |
| ellipse(rX, rY, ScaleX * 1.8, ScaleY * 1.8); | |
| ellipse(rX, rY, ScaleX * 2, ScaleY * 2); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment