mirror of
https://github.com/dataarts/dat.gui.git
synced 2024-12-12 04:08:27 +00:00
3f46a30943
use gui.add for CustomController
1 line
182 KiB
Plaintext
1 line
182 KiB
Plaintext
{"version":3,"file":"dat.gui.module.js","sources":["../src/dat/color/toString.js","../src/dat/utils/common.js","../src/dat/color/interpret.js","../src/dat/color/math.js","../src/dat/color/Color.js","../src/dat/controllers/Controller.js","../src/dat/dom/dom.js","../src/dat/controllers/BooleanController.js","../src/dat/controllers/OptionController.js","../src/dat/controllers/StringController.js","../src/dat/controllers/NumberController.js","../src/dat/controllers/NumberControllerBox.js","../src/dat/controllers/NumberControllerSlider.js","../src/dat/controllers/FunctionController.js","../src/dat/controllers/ColorController.js","../src/dat/controllers/CustomController.js","../src/dat/utils/css.js","../src/dat/gui/saveDialogue.html.js","../src/dat/controllers/ControllerFactory.js","../src/dat/utils/requestAnimationFrame.js","../src/dat/dom/CenteredDiv.js","../src/dat/gui/GUI.js","../src/dat/index.js"],"sourcesContent":["/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nexport default function(color, forceCSSHex) {\r\n const colorFormat = color.__state.conversionName.toString();\r\n\r\n const r = Math.round(color.r);\r\n const g = Math.round(color.g);\r\n const b = Math.round(color.b);\r\n const a = color.a;\r\n const h = Math.round(color.h);\r\n const s = color.s.toFixed(1);\r\n const v = color.v.toFixed(1);\r\n\r\n if (forceCSSHex || (colorFormat === 'THREE_CHAR_HEX') || (colorFormat === 'SIX_CHAR_HEX')) {\r\n let str = color.hex.toString(16);\r\n while (str.length < 6) {\r\n str = '0' + str;\r\n }\r\n return '#' + str;\r\n } else if (colorFormat === 'CSS_RGB') {\r\n return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n } else if (colorFormat === 'CSS_RGBA') {\r\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\r\n } else if (colorFormat === 'HEX') {\r\n return '0x' + color.hex.toString(16);\r\n } else if (colorFormat === 'RGB_ARRAY') {\r\n return '[' + r + ',' + g + ',' + b + ']';\r\n } else if (colorFormat === 'RGBA_ARRAY') {\r\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\r\n } else if (colorFormat === 'RGB_OBJ') {\r\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\r\n } else if (colorFormat === 'RGBA_OBJ') {\r\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\r\n } else if (colorFormat === 'HSV_OBJ') {\r\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\r\n } else if (colorFormat === 'HSVA_OBJ') {\r\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\r\n }\r\n\r\n return 'unknown format';\r\n}\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nconst ARR_EACH = Array.prototype.forEach;\r\nconst ARR_SLICE = Array.prototype.slice;\r\n\r\n/**\r\n * Band-aid methods for things that should be a lot easier in JavaScript.\r\n * Implementation and structure inspired by underscore.js\r\n * http://documentcloud.github.com/underscore/\r\n */\r\n\r\nconst Common = {\r\n BREAK: {},\r\n\r\n extend: function(target) {\r\n this.each(ARR_SLICE.call(arguments, 1), function(obj) {\r\n const keys = this.isObject(obj) ? Object.keys(obj) : [];\r\n keys.forEach(function(key) {\r\n if (!this.isUndefined(obj[key])) {\r\n target[key] = obj[key];\r\n }\r\n }.bind(this));\r\n }, this);\r\n\r\n return target;\r\n },\r\n\r\n defaults: function(target) {\r\n this.each(ARR_SLICE.call(arguments, 1), function(obj) {\r\n const keys = this.isObject(obj) ? Object.keys(obj) : [];\r\n keys.forEach(function(key) {\r\n if (this.isUndefined(target[key])) {\r\n target[key] = obj[key];\r\n }\r\n }.bind(this));\r\n }, this);\r\n\r\n return target;\r\n },\r\n\r\n compose: function() {\r\n const toCall = ARR_SLICE.call(arguments);\r\n return function() {\r\n let args = ARR_SLICE.call(arguments);\r\n for (let i = toCall.length - 1; i >= 0; i--) {\r\n args = [toCall[i].apply(this, args)];\r\n }\r\n return args[0];\r\n };\r\n },\r\n\r\n each: function(obj, itr, scope) {\r\n if (!obj) {\r\n return;\r\n }\r\n\r\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\r\n obj.forEach(itr, scope);\r\n } else if (obj.length === obj.length + 0) { // Is number but not NaN\r\n let key;\r\n let l;\r\n for (key = 0, l = obj.length; key < l; key++) {\r\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\r\n return;\r\n }\r\n }\r\n } else {\r\n for (const key in obj) {\r\n if (itr.call(scope, obj[key], key) === this.BREAK) {\r\n return;\r\n }\r\n }\r\n }\r\n },\r\n\r\n defer: function(fnc) {\r\n setTimeout(fnc, 0);\r\n },\r\n\r\n // if the function is called repeatedly, wait until threshold passes until we execute the function\r\n debounce: function(func, threshold, callImmediately) {\r\n let timeout;\r\n\r\n return function() {\r\n const obj = this;\r\n const args = arguments;\r\n function delayed() {\r\n timeout = null;\r\n if (!callImmediately) func.apply(obj, args);\r\n }\r\n\r\n const callNow = callImmediately || !timeout;\r\n\r\n clearTimeout(timeout);\r\n timeout = setTimeout(delayed, threshold);\r\n\r\n if (callNow) {\r\n func.apply(obj, args);\r\n }\r\n };\r\n },\r\n\r\n toArray: function(obj) {\r\n if (obj.toArray) return obj.toArray();\r\n return ARR_SLICE.call(obj);\r\n },\r\n\r\n isUndefined: function(obj) {\r\n return obj === undefined;\r\n },\r\n\r\n isNull: function(obj) {\r\n return obj === null;\r\n },\r\n\r\n isNaN: function(obj) {\r\n return isNaN(obj);\r\n },\r\n\r\n isArray: Array.isArray || function(obj) {\r\n return obj.constructor === Array;\r\n },\r\n\r\n isObject: function(obj) {\r\n return obj === Object(obj);\r\n },\r\n\r\n isNumber: function(obj) {\r\n return obj === obj + 0;\r\n },\r\n\r\n isString: function(obj) {\r\n return obj === obj + '';\r\n },\r\n\r\n isBoolean: function(obj) {\r\n return obj === false || obj === true;\r\n },\r\n\r\n isFunction: function(obj) {\r\n return Object.prototype.toString.call(obj) === '[object Function]';\r\n }\r\n\r\n};\r\n\r\nexport default Common;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport toString from './toString';\r\nimport common from '../utils/common';\r\n\r\nconst INTERPRETATIONS = [\r\n // Strings\r\n {\r\n litmus: common.isString,\r\n conversions: {\r\n THREE_CHAR_HEX: {\r\n read: function(original) {\r\n const test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'HEX',\r\n hex: parseInt(\r\n '0x' +\r\n test[1].toString() + test[1].toString() +\r\n test[2].toString() + test[2].toString() +\r\n test[3].toString() + test[3].toString(), 0)\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n SIX_CHAR_HEX: {\r\n read: function(original) {\r\n const test = original.match(/^#([A-F0-9]{6})$/i);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'HEX',\r\n hex: parseInt('0x' + test[1].toString(), 0)\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n CSS_RGB: {\r\n read: function(original) {\r\n const test = original.match(/^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: parseFloat(test[1]),\r\n g: parseFloat(test[2]),\r\n b: parseFloat(test[3])\r\n };\r\n },\r\n\r\n write: toString\r\n },\r\n\r\n CSS_RGBA: {\r\n read: function(original) {\r\n const test = original.match(/^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);\r\n if (test === null) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: parseFloat(test[1]),\r\n g: parseFloat(test[2]),\r\n b: parseFloat(test[3]),\r\n a: parseFloat(test[4])\r\n };\r\n },\r\n\r\n write: toString\r\n }\r\n }\r\n },\r\n\r\n // Numbers\r\n {\r\n litmus: common.isNumber,\r\n\r\n conversions: {\r\n\r\n HEX: {\r\n read: function(original) {\r\n return {\r\n space: 'HEX',\r\n hex: original,\r\n conversionName: 'HEX'\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return color.hex;\r\n }\r\n }\r\n\r\n }\r\n\r\n },\r\n\r\n // Arrays\r\n {\r\n litmus: common.isArray,\r\n conversions: {\r\n RGB_ARRAY: {\r\n read: function(original) {\r\n if (original.length !== 3) {\r\n return false;\r\n }\r\n\r\n return {\r\n space: 'RGB',\r\n r: original[0],\r\n g: original[1],\r\n b: original[2]\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return [color.r, color.g, color.b];\r\n }\r\n },\r\n\r\n RGBA_ARRAY: {\r\n read: function(original) {\r\n if (original.length !== 4) return false;\r\n return {\r\n space: 'RGB',\r\n r: original[0],\r\n g: original[1],\r\n b: original[2],\r\n a: original[3]\r\n };\r\n },\r\n\r\n write: function(color) {\r\n return [color.r, color.g, color.b, color.a];\r\n }\r\n }\r\n }\r\n },\r\n\r\n // Objects\r\n {\r\n litmus: common.isObject,\r\n conversions: {\r\n\r\n RGBA_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.r) &&\r\n common.isNumber(original.g) &&\r\n common.isNumber(original.b) &&\r\n common.isNumber(original.a)) {\r\n return {\r\n space: 'RGB',\r\n r: original.r,\r\n g: original.g,\r\n b: original.b,\r\n a: original.a\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n r: color.r,\r\n g: color.g,\r\n b: color.b,\r\n a: color.a\r\n };\r\n }\r\n },\r\n\r\n RGB_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.r) &&\r\n common.isNumber(original.g) &&\r\n common.isNumber(original.b)) {\r\n return {\r\n space: 'RGB',\r\n r: original.r,\r\n g: original.g,\r\n b: original.b\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n r: color.r,\r\n g: color.g,\r\n b: color.b\r\n };\r\n }\r\n },\r\n\r\n HSVA_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.h) &&\r\n common.isNumber(original.s) &&\r\n common.isNumber(original.v) &&\r\n common.isNumber(original.a)) {\r\n return {\r\n space: 'HSV',\r\n h: original.h,\r\n s: original.s,\r\n v: original.v,\r\n a: original.a\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n h: color.h,\r\n s: color.s,\r\n v: color.v,\r\n a: color.a\r\n };\r\n }\r\n },\r\n\r\n HSV_OBJ: {\r\n read: function(original) {\r\n if (common.isNumber(original.h) &&\r\n common.isNumber(original.s) &&\r\n common.isNumber(original.v)) {\r\n return {\r\n space: 'HSV',\r\n h: original.h,\r\n s: original.s,\r\n v: original.v\r\n };\r\n }\r\n return false;\r\n },\r\n\r\n write: function(color) {\r\n return {\r\n h: color.h,\r\n s: color.s,\r\n v: color.v\r\n };\r\n }\r\n }\r\n }\r\n }\r\n];\r\n\r\nlet result;\r\nlet toReturn;\r\n\r\nconst interpret = function() {\r\n toReturn = false;\r\n\r\n const original = arguments.length > 1 ? common.toArray(arguments) : arguments[0];\r\n common.each(INTERPRETATIONS, function(family) {\r\n if (family.litmus(original)) {\r\n common.each(family.conversions, function(conversion, conversionName) {\r\n result = conversion.read(original);\r\n\r\n if (toReturn === false && result !== false) {\r\n toReturn = result;\r\n result.conversionName = conversionName;\r\n result.conversion = conversion;\r\n return common.BREAK;\r\n }\r\n });\r\n\r\n return common.BREAK;\r\n }\r\n });\r\n\r\n return toReturn;\r\n};\r\n\r\nexport default interpret;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nlet tmpComponent;\r\n\r\nconst ColorMath = {\r\n hsv_to_rgb: function(h, s, v) {\r\n const hi = Math.floor(h / 60) % 6;\r\n\r\n const f = h / 60 - Math.floor(h / 60);\r\n const p = v * (1.0 - s);\r\n const q = v * (1.0 - (f * s));\r\n const t = v * (1.0 - ((1.0 - f) * s));\r\n\r\n const c = [\r\n [v, t, p],\r\n [q, v, p],\r\n [p, v, t],\r\n [p, q, v],\r\n [t, p, v],\r\n [v, p, q]\r\n ][hi];\r\n\r\n return {\r\n r: c[0] * 255,\r\n g: c[1] * 255,\r\n b: c[2] * 255\r\n };\r\n },\r\n\r\n rgb_to_hsv: function(r, g, b) {\r\n const min = Math.min(r, g, b);\r\n const max = Math.max(r, g, b);\r\n const delta = max - min;\r\n let h;\r\n let s;\r\n\r\n if (max !== 0) {\r\n s = delta / max;\r\n } else {\r\n return {\r\n h: NaN,\r\n s: 0,\r\n v: 0\r\n };\r\n }\r\n\r\n if (r === max) {\r\n h = (g - b) / delta;\r\n } else if (g === max) {\r\n h = 2 + (b - r) / delta;\r\n } else {\r\n h = 4 + (r - g) / delta;\r\n }\r\n h /= 6;\r\n if (h < 0) {\r\n h += 1;\r\n }\r\n\r\n return {\r\n h: h * 360,\r\n s: s,\r\n v: max / 255\r\n };\r\n },\r\n\r\n rgb_to_hex: function(r, g, b) {\r\n let hex = this.hex_with_component(0, 2, r);\r\n hex = this.hex_with_component(hex, 1, g);\r\n hex = this.hex_with_component(hex, 0, b);\r\n return hex;\r\n },\r\n\r\n component_from_hex: function(hex, componentIndex) {\r\n return (hex >> (componentIndex * 8)) & 0xFF;\r\n },\r\n\r\n hex_with_component: function(hex, componentIndex, value) {\r\n return value << (tmpComponent = componentIndex * 8) | (hex & ~(0xFF << tmpComponent));\r\n }\r\n};\r\n\r\nexport default ColorMath;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport interpret from './interpret';\r\nimport math from './math';\r\nimport colorToString from './toString';\r\nimport common from '../utils/common';\r\n\r\nclass Color {\r\n constructor() {\r\n this.__state = interpret.apply(this, arguments);\r\n\r\n if (this.__state === false) {\r\n throw new Error('Failed to interpret color arguments');\r\n }\r\n\r\n this.__state.a = this.__state.a || 1;\r\n }\r\n\r\n toString() {\r\n return colorToString(this);\r\n }\r\n\r\n toHexString() {\r\n return colorToString(this, true);\r\n }\r\n\r\n toOriginal() {\r\n return this.__state.conversion.write(this);\r\n }\r\n}\r\n\r\nfunction defineRGBComponent(target, component, componentHexIndex) {\r\n Object.defineProperty(target, component, {\r\n get: function() {\r\n if (this.__state.space === 'RGB') {\r\n return this.__state[component];\r\n }\r\n\r\n Color.recalculateRGB(this, component, componentHexIndex);\r\n\r\n return this.__state[component];\r\n },\r\n\r\n set: function(v) {\r\n if (this.__state.space !== 'RGB') {\r\n Color.recalculateRGB(this, component, componentHexIndex);\r\n this.__state.space = 'RGB';\r\n }\r\n\r\n this.__state[component] = v;\r\n }\r\n });\r\n}\r\n\r\nfunction defineHSVComponent(target, component) {\r\n Object.defineProperty(target, component, {\r\n get: function() {\r\n if (this.__state.space === 'HSV') {\r\n return this.__state[component];\r\n }\r\n\r\n Color.recalculateHSV(this);\r\n\r\n return this.__state[component];\r\n },\r\n\r\n set: function(v) {\r\n if (this.__state.space !== 'HSV') {\r\n Color.recalculateHSV(this);\r\n this.__state.space = 'HSV';\r\n }\r\n\r\n this.__state[component] = v;\r\n }\r\n });\r\n}\r\n\r\n\r\nColor.recalculateRGB = function(color, component, componentHexIndex) {\r\n if (color.__state.space === 'HEX') {\r\n color.__state[component] = math.component_from_hex(color.__state.hex, componentHexIndex);\r\n } else if (color.__state.space === 'HSV') {\r\n common.extend(color.__state, math.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\r\n } else {\r\n throw new Error('Corrupted color state');\r\n }\r\n};\r\n\r\nColor.recalculateHSV = function(color) {\r\n const result = math.rgb_to_hsv(color.r, color.g, color.b);\r\n\r\n common.extend(color.__state,\r\n {\r\n s: result.s,\r\n v: result.v\r\n }\r\n );\r\n\r\n if (!common.isNaN(result.h)) {\r\n color.__state.h = result.h;\r\n } else if (common.isUndefined(color.__state.h)) {\r\n color.__state.h = 0;\r\n }\r\n};\r\n\r\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\r\n\r\ndefineRGBComponent(Color.prototype, 'r', 2);\r\ndefineRGBComponent(Color.prototype, 'g', 1);\r\ndefineRGBComponent(Color.prototype, 'b', 0);\r\n\r\ndefineHSVComponent(Color.prototype, 'h');\r\ndefineHSVComponent(Color.prototype, 's');\r\ndefineHSVComponent(Color.prototype, 'v');\r\n\r\nObject.defineProperty(Color.prototype, 'a', {\r\n get: function() {\r\n return this.__state.a;\r\n },\r\n\r\n set: function(v) {\r\n this.__state.a = v;\r\n }\r\n});\r\n\r\nObject.defineProperty(Color.prototype, 'hex', {\r\n get: function() {\r\n if (!this.__state.space !== 'HEX') {\r\n this.__state.hex = math.rgb_to_hex(this.r, this.g, this.b);\r\n }\r\n\r\n return this.__state.hex;\r\n },\r\n\r\n set: function(v) {\r\n this.__state.space = 'HEX';\r\n this.__state.hex = v;\r\n }\r\n});\r\n\r\nexport default Color;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\n/**\r\n * @class An \"abstract\" class that represents a given property of an object.\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass Controller {\r\n constructor(object, property) {\r\n this.initialValue = object[property];\r\n\r\n /**\r\n * Those who extend this class will put their DOM elements in here.\r\n * @type {DOMElement}\r\n */\r\n this.domElement = document.createElement('div');\r\n\r\n /**\r\n * The object to manipulate\r\n * @type {Object}\r\n */\r\n this.object = object;\r\n\r\n /**\r\n * The name of the property to manipulate\r\n * @type {String}\r\n */\r\n this.property = property;\r\n\r\n /**\r\n * The function to be called on change.\r\n * @type {Function}\r\n * @ignore\r\n */\r\n this.__onChange = undefined;\r\n\r\n /**\r\n * The function to be called on finishing change.\r\n * @type {Function}\r\n * @ignore\r\n */\r\n this.__onFinishChange = undefined;\r\n }\r\n\r\n /**\r\n * Specify that a function fire every time someone changes the value with\r\n * this Controller.\r\n *\r\n * @param {Function} fnc This function will be called whenever the value\r\n * is modified via this Controller.\r\n * @returns {Controller} this\r\n */\r\n onChange(fnc) {\r\n this.__onChange = fnc;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify that a function fire every time someone \"finishes\" changing\r\n * the value wih this Controller. Useful for values that change\r\n * incrementally like numbers or strings.\r\n *\r\n * @param {Function} fnc This function will be called whenever\r\n * someone \"finishes\" changing the value via this Controller.\r\n * @returns {Controller} this\r\n */\r\n onFinishChange(fnc) {\r\n this.__onFinishChange = fnc;\r\n return this;\r\n }\r\n\r\n /**\r\n * Change the value of <code>object[property]</code>\r\n *\r\n * @param {Object} newValue The new value of <code>object[property]</code>\r\n */\r\n setValue(newValue) {\r\n this.object[this.property] = newValue;\r\n if (this.__onChange) {\r\n this.__onChange.call(this, newValue);\r\n }\r\n\r\n this.updateDisplay();\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the value of <code>object[property]</code>\r\n *\r\n * @returns {Object} The current value of <code>object[property]</code>\r\n */\r\n getValue() {\r\n return this.object[this.property];\r\n }\r\n\r\n /**\r\n * Refreshes the visual display of a Controller in order to keep sync\r\n * with the object's current value.\r\n * @returns {Controller} this\r\n */\r\n updateDisplay() {\r\n return this;\r\n }\r\n\r\n /**\r\n * @returns {Boolean} true if the value has deviated from initialValue\r\n */\r\n isModified() {\r\n return this.initialValue !== this.getValue();\r\n }\r\n}\r\n\r\nexport default Controller;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport common from '../utils/common';\r\n\r\nconst EVENT_MAP = {\r\n HTMLEvents: ['change'],\r\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\r\n KeyboardEvents: ['keydown']\r\n};\r\n\r\nconst EVENT_MAP_INV = {};\r\ncommon.each(EVENT_MAP, function(v, k) {\r\n common.each(v, function(e) {\r\n EVENT_MAP_INV[e] = k;\r\n });\r\n});\r\n\r\nconst CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\r\n\r\nfunction cssValueToPixels(val) {\r\n if (val === '0' || common.isUndefined(val)) {\r\n return 0;\r\n }\r\n\r\n const match = val.match(CSS_VALUE_PIXELS);\r\n\r\n if (!common.isNull(match)) {\r\n return parseFloat(match[1]);\r\n }\r\n\r\n // TODO ...ems? %?\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * @namespace\r\n * @member dat.dom\r\n */\r\nconst dom = {\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param selectable\r\n */\r\n makeSelectable: function(elem, selectable) {\r\n if (elem === undefined || elem.style === undefined) return;\r\n\r\n elem.onselectstart = selectable ? function() {\r\n return false;\r\n } : function() {\r\n };\r\n\r\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\r\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\r\n elem.unselectable = selectable ? 'on' : 'off';\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param horizontal\r\n * @param vert\r\n */\r\n makeFullscreen: function(elem, hor, vert) {\r\n let vertical = vert;\r\n let horizontal = hor;\r\n\r\n if (common.isUndefined(horizontal)) {\r\n horizontal = true;\r\n }\r\n\r\n if (common.isUndefined(vertical)) {\r\n vertical = true;\r\n }\r\n\r\n elem.style.position = 'absolute';\r\n\r\n if (horizontal) {\r\n elem.style.left = 0;\r\n elem.style.right = 0;\r\n }\r\n if (vertical) {\r\n elem.style.top = 0;\r\n elem.style.bottom = 0;\r\n }\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param eventType\r\n * @param params\r\n */\r\n fakeEvent: function(elem, eventType, pars, aux) {\r\n const params = pars || {};\r\n const className = EVENT_MAP_INV[eventType];\r\n if (!className) {\r\n throw new Error('Event type ' + eventType + ' not supported.');\r\n }\r\n const evt = document.createEvent(className);\r\n switch (className) {\r\n case 'MouseEvents':\r\n {\r\n const clientX = params.x || params.clientX || 0;\r\n const clientY = params.y || params.clientY || 0;\r\n evt.initMouseEvent(eventType, params.bubbles || false,\r\n params.cancelable || true, window, params.clickCount || 1,\r\n 0, // screen X\r\n 0, // screen Y\r\n clientX, // client X\r\n clientY, // client Y\r\n false, false, false, false, 0, null);\r\n break;\r\n }\r\n case 'KeyboardEvents':\r\n {\r\n const init = evt.initKeyboardEvent || evt.initKeyEvent; // webkit || moz\r\n common.defaults(params, {\r\n cancelable: true,\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n metaKey: false,\r\n keyCode: undefined,\r\n charCode: undefined\r\n });\r\n init(eventType, params.bubbles || false,\r\n params.cancelable, window,\r\n params.ctrlKey, params.altKey,\r\n params.shiftKey, params.metaKey,\r\n params.keyCode, params.charCode);\r\n break;\r\n }\r\n default:\r\n {\r\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\r\n break;\r\n }\r\n }\r\n common.defaults(evt, aux);\r\n elem.dispatchEvent(evt);\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param event\r\n * @param func\r\n * @param bool\r\n */\r\n bind: function(elem, event, func, newBool) {\r\n const bool = newBool || false;\r\n if (elem.addEventListener) {\r\n elem.addEventListener(event, func, bool);\r\n } else if (elem.attachEvent) {\r\n elem.attachEvent('on' + event, func);\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param event\r\n * @param func\r\n * @param bool\r\n */\r\n unbind: function(elem, event, func, newBool) {\r\n const bool = newBool || false;\r\n if (elem.removeEventListener) {\r\n elem.removeEventListener(event, func, bool);\r\n } else if (elem.detachEvent) {\r\n elem.detachEvent('on' + event, func);\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param className\r\n */\r\n addClass: function(elem, className) {\r\n if (elem.className === undefined) {\r\n elem.className = className;\r\n } else if (elem.className !== className) {\r\n const classes = elem.className.split(/ +/);\r\n if (classes.indexOf(className) === -1) {\r\n classes.push(className);\r\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\r\n }\r\n }\r\n return dom;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n * @param className\r\n */\r\n removeClass: function(elem, className) {\r\n if (className) {\r\n if (elem.className === className) {\r\n elem.removeAttribute('class');\r\n } else {\r\n const classes = elem.className.split(/ +/);\r\n const index = classes.indexOf(className);\r\n if (index !== -1) {\r\n classes.splice(index, 1);\r\n elem.className = classes.join(' ');\r\n }\r\n }\r\n } else {\r\n elem.className = undefined;\r\n }\r\n return dom;\r\n },\r\n\r\n hasClass: function(elem, className) {\r\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n */\r\n getWidth: function(elem) {\r\n const style = getComputedStyle(elem);\r\n\r\n return cssValueToPixels(style['border-left-width']) +\r\n cssValueToPixels(style['border-right-width']) +\r\n cssValueToPixels(style['padding-left']) +\r\n cssValueToPixels(style['padding-right']) +\r\n cssValueToPixels(style.width);\r\n },\r\n\r\n /**\r\n *\r\n * @param elem\r\n */\r\n getHeight: function(elem) {\r\n const style = getComputedStyle(elem);\r\n\r\n return cssValueToPixels(style['border-top-width']) +\r\n cssValueToPixels(style['border-bottom-width']) +\r\n cssValueToPixels(style['padding-top']) +\r\n cssValueToPixels(style['padding-bottom']) +\r\n cssValueToPixels(style.height);\r\n },\r\n\r\n /**\r\n *\r\n * @param el\r\n */\r\n getOffset: function(el) {\r\n let elem = el;\r\n const offset = { left: 0, top: 0 };\r\n if (elem.offsetParent) {\r\n do {\r\n offset.left += elem.offsetLeft;\r\n offset.top += elem.offsetTop;\r\n elem = elem.offsetParent;\r\n } while (elem);\r\n }\r\n return offset;\r\n },\r\n\r\n // http://stackoverflow.com/posts/2684561/revisions\r\n /**\r\n *\r\n * @param elem\r\n */\r\n isActive: function(elem) {\r\n return elem === document.activeElement && (elem.type || elem.href);\r\n }\r\n\r\n};\r\n\r\nexport default dom;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a checkbox input to alter the boolean property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass BooleanController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n this.__prev = this.getValue();\r\n\r\n this.__checkbox = document.createElement('input');\r\n this.__checkbox.setAttribute('type', 'checkbox');\r\n\r\n function onChange() {\r\n _this.setValue(!_this.__prev);\r\n }\r\n\r\n dom.bind(this.__checkbox, 'change', onChange, false);\r\n\r\n this.domElement.appendChild(this.__checkbox);\r\n\r\n // Match original value\r\n this.updateDisplay();\r\n }\r\n\r\n setValue(v) {\r\n const toReturn = super.setValue(v);\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n this.__prev = this.getValue();\r\n return toReturn;\r\n }\r\n\r\n updateDisplay() {\r\n if (this.getValue() === true) {\r\n this.__checkbox.setAttribute('checked', 'checked');\r\n this.__checkbox.checked = true;\r\n this.__prev = true;\r\n } else {\r\n this.__checkbox.checked = false;\r\n this.__prev = false;\r\n }\r\n\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default BooleanController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\n/**\r\n * @class Provides a select input to alter the property of an object, using a\r\n * list of accepted values.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object|string[]} options A map of labels to acceptable values, or\r\n * a list of acceptable string values.\r\n */\r\nclass OptionController extends Controller {\r\n constructor(object, property, opts) {\r\n super(object, property);\r\n\r\n let options = opts;\r\n\r\n const _this = this;\r\n\r\n /**\r\n * The drop down menu\r\n * @ignore\r\n */\r\n this.__select = document.createElement('select');\r\n\r\n if (common.isArray(options)) {\r\n const map = {};\r\n common.each(options, function(element) {\r\n map[element] = element;\r\n });\r\n options = map;\r\n }\r\n\r\n common.each(options, function(value, key) {\r\n const opt = document.createElement('option');\r\n opt.innerHTML = key;\r\n opt.setAttribute('value', value);\r\n _this.__select.appendChild(opt);\r\n });\r\n\r\n // Acknowledge original value\r\n this.updateDisplay();\r\n\r\n dom.bind(this.__select, 'change', function() {\r\n const desiredValue = this.options[this.selectedIndex].value;\r\n _this.setValue(desiredValue);\r\n });\r\n\r\n this.domElement.appendChild(this.__select);\r\n }\r\n\r\n setValue(v) {\r\n const toReturn = super.setValue(v);\r\n\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n return toReturn;\r\n }\r\n\r\n updateDisplay() {\r\n if (dom.isActive(this.__select)) return this; // prevent number from updating if user is trying to manually update\r\n this.__select.value = this.getValue();\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default OptionController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a text input to alter the string property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass StringController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n\r\n function onChange() {\r\n _this.setValue(_this.__input.value);\r\n }\r\n\r\n function onBlur() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.setAttribute('type', 'text');\r\n\r\n dom.bind(this.__input, 'keyup', onChange);\r\n dom.bind(this.__input, 'change', onChange);\r\n dom.bind(this.__input, 'blur', onBlur);\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n if (e.keyCode === 13) {\r\n this.blur();\r\n }\r\n });\r\n\r\n this.updateDisplay();\r\n\r\n this.domElement.appendChild(this.__input);\r\n }\r\n\r\n updateDisplay() {\r\n // Stops the caret from moving on account of:\r\n // keyup -> setValue -> updateDisplay\r\n if (!dom.isActive(this.__input)) {\r\n this.__input.value = this.getValue();\r\n }\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default StringController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport common from '../utils/common';\r\n\r\nfunction numDecimals(x) {\r\n const _x = x.toString();\r\n if (_x.indexOf('.') > -1) {\r\n return _x.length - _x.indexOf('.') - 1;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object} [params] Optional parameters\r\n * @param {Number} [params.min] Minimum allowed value\r\n * @param {Number} [params.max] Maximum allowed value\r\n * @param {Number} [params.step] Increment by which to change value\r\n */\r\nclass NumberController extends Controller {\r\n constructor(object, property, params) {\r\n super(object, property);\r\n\r\n const _params = params || {};\r\n\r\n this.__min = _params.min;\r\n this.__max = _params.max;\r\n this.__step = _params.step;\r\n\r\n if (common.isUndefined(this.__step)) {\r\n if (this.initialValue === 0) {\r\n this.__impliedStep = 1; // What are we, psychics?\r\n } else {\r\n // Hey Doug, check this out.\r\n this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(this.initialValue)) / Math.LN10)) / 10;\r\n }\r\n } else {\r\n this.__impliedStep = this.__step;\r\n }\r\n\r\n this.__precision = numDecimals(this.__impliedStep);\r\n }\r\n\r\n setValue(v) {\r\n let _v = v;\r\n\r\n if (this.__min !== undefined && _v < this.__min) {\r\n _v = this.__min;\r\n } else if (this.__max !== undefined && _v > this.__max) {\r\n _v = this.__max;\r\n }\r\n\r\n if (this.__step !== undefined && _v % this.__step !== 0) {\r\n _v = Math.round(_v / this.__step) * this.__step;\r\n }\r\n\r\n return super.setValue(_v);\r\n }\r\n\r\n /**\r\n * Specify a minimum value for <code>object[property]</code>.\r\n *\r\n * @param {Number} minValue The minimum value for\r\n * <code>object[property]</code>\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n min(minValue) {\r\n this.__min = minValue;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify a maximum value for <code>object[property]</code>.\r\n *\r\n * @param {Number} maxValue The maximum value for\r\n * <code>object[property]</code>\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n max(maxValue) {\r\n this.__max = maxValue;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specify a step value that dat.controllers.NumberController\r\n * increments by.\r\n *\r\n * @param {Number} stepValue The step value for\r\n * dat.controllers.NumberController\r\n * @default if minimum and maximum specified increment is 1% of the\r\n * difference otherwise stepValue is 1\r\n * @returns {dat.controllers.NumberController} this\r\n */\r\n step(stepValue) {\r\n this.__step = stepValue;\r\n this.__impliedStep = stepValue;\r\n this.__precision = numDecimals(stepValue);\r\n return this;\r\n }\r\n}\r\n\r\nexport default NumberController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport NumberController from './NumberController';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nfunction roundToDecimal(value, decimals) {\r\n const tenTo = Math.pow(10, decimals);\r\n return Math.round(value * tenTo) / tenTo;\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number and\r\n * provides an input element with which to manipulate it.\r\n *\r\n * @extends dat.controllers.Controller\r\n * @extends dat.controllers.NumberController\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Object} [params] Optional parameters\r\n * @param {Number} [params.min] Minimum allowed value\r\n * @param {Number} [params.max] Maximum allowed value\r\n * @param {Number} [params.step] Increment by which to change value\r\n */\r\nclass NumberControllerBox extends NumberController {\r\n constructor(object, property, params) {\r\n super(object, property, params);\r\n\r\n this.__truncationSuspended = false;\r\n\r\n const _this = this;\r\n\r\n /**\r\n * {Number} Previous mouse y position\r\n * @ignore\r\n */\r\n let prevY;\r\n\r\n function onChange() {\r\n const attempted = parseFloat(_this.__input.value);\r\n if (!common.isNaN(attempted)) {\r\n _this.setValue(attempted);\r\n }\r\n }\r\n\r\n function onFinish() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n function onBlur() {\r\n onFinish();\r\n }\r\n\r\n function onMouseDrag(e) {\r\n const diff = prevY - e.clientY;\r\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\r\n\r\n prevY = e.clientY;\r\n }\r\n\r\n function onMouseUp() {\r\n dom.unbind(window, 'mousemove', onMouseDrag);\r\n dom.unbind(window, 'mouseup', onMouseUp);\r\n onFinish();\r\n }\r\n\r\n function onMouseDown(e) {\r\n dom.bind(window, 'mousemove', onMouseDrag);\r\n dom.bind(window, 'mouseup', onMouseUp);\r\n prevY = e.clientY;\r\n }\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.setAttribute('type', 'text');\r\n\r\n // Makes it so manually specified values are not truncated.\r\n\r\n dom.bind(this.__input, 'change', onChange);\r\n dom.bind(this.__input, 'blur', onBlur);\r\n dom.bind(this.__input, 'mousedown', onMouseDown);\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n // When pressing enter, you can be as precise as you want.\r\n if (e.keyCode === 13) {\r\n _this.__truncationSuspended = true;\r\n this.blur();\r\n _this.__truncationSuspended = false;\r\n onFinish();\r\n }\r\n });\r\n\r\n this.updateDisplay();\r\n\r\n this.domElement.appendChild(this.__input);\r\n }\r\n\r\n updateDisplay() {\r\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default NumberControllerBox;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport NumberController from './NumberController';\r\nimport dom from '../dom/dom';\r\n\r\nfunction map(v, i1, i2, o1, o2) {\r\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\r\n}\r\n\r\n/**\r\n * @class Represents a given property of an object that is a number, contains\r\n * a minimum and maximum, and provides a slider element with which to\r\n * manipulate it. It should be noted that the slider element is made up of\r\n * <code><div></code> tags, <strong>not</strong> the html5\r\n * <code><slider></code> element.\r\n *\r\n * @extends dat.controllers.Controller\r\n * @extends dat.controllers.NumberController\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n * @param {Number} minValue Minimum allowed value\r\n * @param {Number} maxValue Maximum allowed value\r\n * @param {Number} stepValue Increment by which to change value\r\n */\r\nclass NumberControllerSlider extends NumberController {\r\n constructor(object, property, min, max, step) {\r\n super(object, property, { min: min, max: max, step: step });\r\n\r\n const _this = this;\r\n\r\n this.__background = document.createElement('div');\r\n this.__foreground = document.createElement('div');\r\n\r\n dom.bind(this.__background, 'mousedown', onMouseDown);\r\n dom.bind(this.__background, 'touchstart', onTouchStart);\r\n\r\n dom.addClass(this.__background, 'slider');\r\n dom.addClass(this.__foreground, 'slider-fg');\r\n\r\n function onMouseDown(e) {\r\n document.activeElement.blur();\r\n\r\n dom.bind(window, 'mousemove', onMouseDrag);\r\n dom.bind(window, 'mouseup', onMouseUp);\r\n\r\n onMouseDrag(e);\r\n }\r\n\r\n function onMouseDrag(e) {\r\n e.preventDefault();\r\n\r\n const bgRect = _this.__background.getBoundingClientRect();\r\n\r\n _this.setValue(\r\n map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)\r\n );\r\n\r\n return false;\r\n }\r\n\r\n function onMouseUp() {\r\n dom.unbind(window, 'mousemove', onMouseDrag);\r\n dom.unbind(window, 'mouseup', onMouseUp);\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n function onTouchStart(e) {\r\n if (e.touches.length !== 1) { return; }\r\n dom.bind(window, 'touchmove', onTouchMove);\r\n dom.bind(window, 'touchend', onTouchEnd);\r\n onTouchMove(e);\r\n }\r\n\r\n function onTouchMove(e) {\r\n const clientX = e.touches[0].clientX;\r\n const bgRect = _this.__background.getBoundingClientRect();\r\n\r\n _this.setValue(\r\n map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)\r\n );\r\n }\r\n\r\n function onTouchEnd() {\r\n dom.unbind(window, 'touchmove', onTouchMove);\r\n dom.unbind(window, 'touchend', onTouchEnd);\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.getValue());\r\n }\r\n }\r\n\r\n this.updateDisplay();\r\n\r\n this.__background.appendChild(this.__foreground);\r\n this.domElement.appendChild(this.__background);\r\n }\r\n\r\n updateDisplay() {\r\n const pct = (this.getValue() - this.__min) / (this.__max - this.__min);\r\n this.__foreground.style.width = pct * 100 + '%';\r\n return super.updateDisplay();\r\n }\r\n}\r\n\r\nexport default NumberControllerSlider;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\n\r\n/**\r\n * @class Provides a GUI interface to fire a specified method, a property of an object.\r\n *\r\n * @extends dat.controllers.Controller\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {string} property The name of the property to be manipulated\r\n */\r\nclass FunctionController extends Controller {\r\n constructor(object, property, text) {\r\n super(object, property);\r\n\r\n const _this = this;\r\n\r\n this.__button = document.createElement('div');\r\n this.__button.innerHTML = text === undefined ? 'Fire' : text;\r\n\r\n dom.bind(this.__button, 'click', function(e) {\r\n e.preventDefault();\r\n _this.fire();\r\n return false;\r\n });\r\n\r\n dom.addClass(this.__button, 'button');\r\n\r\n this.domElement.appendChild(this.__button);\r\n }\r\n\r\n fire() {\r\n if (this.__onChange) {\r\n this.__onChange.call(this);\r\n }\r\n this.getValue().call(this.object);\r\n if (this.__onFinishChange) {\r\n this.__onFinishChange.call(this, this.getValue());\r\n }\r\n }\r\n}\r\n\r\nexport default FunctionController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Controller from './Controller';\r\nimport dom from '../dom/dom';\r\nimport Color from '../color/Color';\r\nimport interpret from '../color/interpret';\r\nimport common from '../utils/common';\r\n\r\n/**\r\n * @class Represents a given property of an object that is a color.\r\n * @param {Object} object\r\n * @param {string} property\r\n */\r\nclass ColorController extends Controller {\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n this.__color = new Color(this.getValue());\r\n this.__temp = new Color(0);\r\n\r\n const _this = this;\r\n\r\n this.domElement = document.createElement('div');\r\n\r\n dom.makeSelectable(this.domElement, false);\r\n\r\n this.__selector = document.createElement('div');\r\n this.__selector.className = 'selector';\r\n\r\n this.__saturation_field = document.createElement('div');\r\n this.__saturation_field.className = 'saturation-field';\r\n\r\n this.__field_knob = document.createElement('div');\r\n this.__field_knob.className = 'field-knob';\r\n this.__field_knob_border = '2px solid ';\r\n\r\n this.__hue_knob = document.createElement('div');\r\n this.__hue_knob.className = 'hue-knob';\r\n\r\n this.__hue_field = document.createElement('div');\r\n this.__hue_field.className = 'hue-field';\r\n\r\n this.__input = document.createElement('input');\r\n this.__input.type = 'text';\r\n this.__input_textShadow = '0 1px 1px ';\r\n\r\n dom.bind(this.__input, 'keydown', function(e) {\r\n if (e.keyCode === 13) { // on enter\r\n onBlur.call(this);\r\n }\r\n });\r\n\r\n dom.bind(this.__input, 'blur', onBlur);\r\n\r\n dom.bind(this.__selector, 'mousedown', function(/* e */) {\r\n dom\r\n .addClass(this, 'drag')\r\n .bind(window, 'mouseup', function(/* e */) {\r\n dom.removeClass(_this.__selector, 'drag');\r\n });\r\n });\r\n\r\n dom.bind(this.__selector, 'touchstart', function(/* e */) {\r\n dom\r\n .addClass(this, 'drag')\r\n .bind(window, 'touchend', function(/* e */) {\r\n dom.removeClass(_this.__selector, 'drag');\r\n });\r\n });\r\n\r\n const valueField = document.createElement('div');\r\n\r\n common.extend(this.__selector.style, {\r\n width: '122px',\r\n height: '102px',\r\n padding: '3px',\r\n backgroundColor: '#222',\r\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\r\n });\r\n\r\n common.extend(this.__field_knob.style, {\r\n position: 'absolute',\r\n width: '12px',\r\n height: '12px',\r\n border: this.__field_knob_border + (this.__color.v < 0.5 ? '#fff' : '#000'),\r\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\r\n borderRadius: '12px',\r\n zIndex: 1\r\n });\r\n\r\n common.extend(this.__hue_knob.style, {\r\n position: 'absolute',\r\n width: '15px',\r\n height: '2px',\r\n borderRight: '4px solid #fff',\r\n zIndex: 1\r\n });\r\n\r\n common.extend(this.__saturation_field.style, {\r\n width: '100px',\r\n height: '100px',\r\n border: '1px solid #555',\r\n marginRight: '3px',\r\n display: 'inline-block',\r\n cursor: 'pointer'\r\n });\r\n\r\n common.extend(valueField.style, {\r\n width: '100%',\r\n height: '100%',\r\n background: 'none'\r\n });\r\n\r\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\r\n\r\n common.extend(this.__hue_field.style, {\r\n width: '15px',\r\n height: '100px',\r\n border: '1px solid #555',\r\n cursor: 'ns-resize',\r\n position: 'absolute',\r\n top: '3px',\r\n right: '3px'\r\n });\r\n\r\n hueGradient(this.__hue_field);\r\n\r\n common.extend(this.__input.style, {\r\n outline: 'none',\r\n// width: '120px',\r\n textAlign: 'center',\r\n// padding: '4px',\r\n// marginBottom: '6px',\r\n color: '#fff',\r\n border: 0,\r\n fontWeight: 'bold',\r\n textShadow: this.__input_textShadow + 'rgba(0,0,0,0.7)'\r\n });\r\n\r\n dom.bind(this.__saturation_field, 'mousedown', fieldDown);\r\n dom.bind(this.__saturation_field, 'touchstart', fieldDown);\r\n\r\n dom.bind(this.__field_knob, 'mousedown', fieldDown);\r\n dom.bind(this.__field_knob, 'touchstart', fieldDown);\r\n\r\n dom.bind(this.__hue_field, 'mousedown', fieldDownH);\r\n dom.bind(this.__hue_field, 'touchstart', fieldDownH);\r\n\r\n function fieldDown(e) {\r\n setSV(e);\r\n dom.bind(window, 'mousemove', setSV);\r\n dom.bind(window, 'touchmove', setSV);\r\n dom.bind(window, 'mouseup', fieldUpSV);\r\n dom.bind(window, 'touchend', fieldUpSV);\r\n }\r\n\r\n function fieldDownH(e) {\r\n setH(e);\r\n dom.bind(window, 'mousemove', setH);\r\n dom.bind(window, 'touchmove', setH);\r\n dom.bind(window, 'mouseup', fieldUpH);\r\n dom.bind(window, 'touchend', fieldUpH);\r\n }\r\n\r\n function fieldUpSV() {\r\n dom.unbind(window, 'mousemove', setSV);\r\n dom.unbind(window, 'touchmove', setSV);\r\n dom.unbind(window, 'mouseup', fieldUpSV);\r\n dom.unbind(window, 'touchend', fieldUpSV);\r\n onFinish();\r\n }\r\n\r\n function fieldUpH() {\r\n dom.unbind(window, 'mousemove', setH);\r\n dom.unbind(window, 'touchmove', setH);\r\n dom.unbind(window, 'mouseup', fieldUpH);\r\n dom.unbind(window, 'touchend', fieldUpH);\r\n onFinish();\r\n }\r\n\r\n function onBlur() {\r\n const i = interpret(this.value);\r\n if (i !== false) {\r\n _this.__color.__state = i;\r\n _this.setValue(_this.__color.toOriginal());\r\n } else {\r\n this.value = _this.__color.toString();\r\n }\r\n }\r\n\r\n function onFinish() {\r\n if (_this.__onFinishChange) {\r\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\r\n }\r\n }\r\n\r\n this.__saturation_field.appendChild(valueField);\r\n this.__selector.appendChild(this.__field_knob);\r\n this.__selector.appendChild(this.__saturation_field);\r\n this.__selector.appendChild(this.__hue_field);\r\n this.__hue_field.appendChild(this.__hue_knob);\r\n\r\n this.domElement.appendChild(this.__input);\r\n this.domElement.appendChild(this.__selector);\r\n\r\n this.updateDisplay();\r\n\r\n function setSV(e) {\r\n if (e.type.indexOf('touch') === -1) { e.preventDefault(); }\r\n\r\n const fieldRect = _this.__saturation_field.getBoundingClientRect();\r\n const { clientX, clientY } = (e.touches && e.touches[0]) || e;\r\n let s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\r\n let v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\r\n\r\n if (v > 1) {\r\n v = 1;\r\n } else if (v < 0) {\r\n v = 0;\r\n }\r\n\r\n if (s > 1) {\r\n s = 1;\r\n } else if (s < 0) {\r\n s = 0;\r\n }\r\n\r\n _this.__color.v = v;\r\n _this.__color.s = s;\r\n\r\n _this.setValue(_this.__color.toOriginal());\r\n\r\n\r\n return false;\r\n }\r\n\r\n function setH(e) {\r\n if (e.type.indexOf('touch') === -1) { e.preventDefault(); }\r\n\r\n const fieldRect = _this.__hue_field.getBoundingClientRect();\r\n const { clientY } = (e.touches && e.touches[0]) || e;\r\n let h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\r\n\r\n if (h > 1) {\r\n h = 1;\r\n } else if (h < 0) {\r\n h = 0;\r\n }\r\n\r\n _this.__color.h = h * 360;\r\n\r\n _this.setValue(_this.__color.toOriginal());\r\n\r\n return false;\r\n }\r\n }\r\n\r\n updateDisplay() {\r\n const i = interpret(this.getValue());\r\n\r\n if (i !== false) {\r\n let mismatch = false;\r\n\r\n // Check for mismatch on the interpreted value.\r\n\r\n common.each(Color.COMPONENTS, function(component) {\r\n if (!common.isUndefined(i[component]) && !common.isUndefined(this.__color.__state[component]) &&\r\n i[component] !== this.__color.__state[component]) {\r\n mismatch = true;\r\n return {}; // break\r\n }\r\n }, this);\r\n\r\n // If nothing diverges, we keep our previous values\r\n // for statefulness, otherwise we recalculate fresh\r\n if (mismatch) {\r\n common.extend(this.__color.__state, i);\r\n }\r\n }\r\n\r\n common.extend(this.__temp.__state, this.__color.__state);\r\n\r\n this.__temp.a = 1;\r\n\r\n const flip = (this.__color.v < 0.5 || this.__color.s > 0.5) ? 255 : 0;\r\n const _flip = 255 - flip;\r\n\r\n common.extend(this.__field_knob.style, {\r\n marginLeft: 100 * this.__color.s - 7 + 'px',\r\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\r\n backgroundColor: this.__temp.toHexString(),\r\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\r\n });\r\n\r\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\r\n\r\n this.__temp.s = 1;\r\n this.__temp.v = 1;\r\n\r\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\r\n\r\n this.__input.value = this.__color.toString();\r\n\r\n common.extend(this.__input.style, {\r\n backgroundColor: this.__color.toHexString(),\r\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\r\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\r\n });\r\n }\r\n}\r\n\r\nconst vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\r\n\r\nfunction linearGradient(elem, x, a, b) {\r\n elem.style.background = '';\r\n common.each(vendors, function(vendor) {\r\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\r\n });\r\n}\r\n\r\nfunction hueGradient(elem) {\r\n elem.style.background = '';\r\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\r\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\r\n}\r\n\r\nexport default ColorController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport Controller from './Controller';\r\n\r\n/**\r\n * @class Represents a custom controller.\r\n * @param {Object} object\r\n * @param {string} property\r\n */\r\nclass CustomController extends Controller{\r\n constructor(object, property) {\r\n super(object, property);\r\n\r\n object.constructor( this );\r\n }\r\n}\r\n\r\nexport default CustomController;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nconst css = {\r\n load: function(url, indoc) {\r\n const doc = indoc || document;\r\n const link = doc.createElement('link');\r\n link.type = 'text/css';\r\n link.rel = 'stylesheet';\r\n link.href = url;\r\n doc.getElementsByTagName('head')[0].appendChild(link);\r\n },\r\n\r\n inject: function(cssContent, indoc) {\r\n const doc = indoc || document;\r\n const injected = document.createElement('style');\r\n injected.type = 'text/css';\r\n injected.innerHTML = cssContent;\r\n const head = doc.getElementsByTagName('head')[0];\r\n try {\r\n head.appendChild(injected);\r\n } catch (e) { // Unable to inject CSS, probably because of a Content Security Policy\r\n }\r\n }\r\n};\r\n\r\nexport default css;\r\n","const saveDialogContents = `<div id=\"dg-save\" class=\"dg dialogue\">\r\n\r\n Here's the new load parameter for your <code>GUI</code>'s constructor:\r\n\r\n <textarea id=\"dg-new-constructor\"></textarea>\r\n\r\n <div id=\"dg-save-locally\">\r\n\r\n <input id=\"dg-local-storage\" type=\"checkbox\"/> Automatically save\r\n values to <code>localStorage</code> on exit.\r\n\r\n <div id=\"dg-local-explain\">The values saved to <code>localStorage</code> will\r\n override those passed to <code>dat.GUI</code>'s constructor. This makes it\r\n easier to work incrementally, but <code>localStorage</code> is fragile,\r\n and your friends may not see the same values you do.\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</div>`;\r\n\r\nexport default saveDialogContents;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport OptionController from './OptionController';\r\nimport NumberControllerBox from './NumberControllerBox';\r\nimport NumberControllerSlider from './NumberControllerSlider';\r\nimport StringController from './StringController';\r\nimport FunctionController from './FunctionController';\r\nimport BooleanController from './BooleanController';\r\nimport common from '../utils/common';\r\n\r\nconst ControllerFactory = function(object, property) {\r\n const initialValue = object[property];\r\n\r\n // Providing options?\r\n if (common.isArray(arguments[2]) || common.isObject(arguments[2])) {\r\n return new OptionController(object, property, arguments[2]);\r\n }\r\n\r\n // Providing a map?\r\n if (common.isNumber(initialValue)) {\r\n // Has min and max? (slider)\r\n if (common.isNumber(arguments[2]) && common.isNumber(arguments[3])) {\r\n // has step?\r\n if (common.isNumber(arguments[4])) {\r\n return new NumberControllerSlider(object, property,\r\n arguments[2], arguments[3], arguments[4]);\r\n }\r\n\r\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\r\n }\r\n\r\n // number box\r\n if (common.isNumber(arguments[4])) { // has step\r\n return new NumberControllerBox(object, property,\r\n { min: arguments[2], max: arguments[3], step: arguments[4] });\r\n }\r\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\r\n }\r\n\r\n if (common.isString(initialValue)) {\r\n return new StringController(object, property);\r\n }\r\n\r\n if (common.isFunction(initialValue)) {\r\n return new FunctionController(object, property, '');\r\n }\r\n\r\n if (common.isBoolean(initialValue)) {\r\n return new BooleanController(object, property);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport default ControllerFactory;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nfunction requestAnimationFrame(callback) {\r\n setTimeout(callback, 1000 / 60);\r\n}\r\n\r\nexport default window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n requestAnimationFrame;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nclass CenteredDiv {\r\n constructor() {\r\n this.backgroundElement = document.createElement('div');\r\n common.extend(this.backgroundElement.style, {\r\n backgroundColor: 'rgba(0,0,0,0.8)',\r\n top: 0,\r\n left: 0,\r\n display: 'none',\r\n zIndex: '1000',\r\n opacity: 0,\r\n WebkitTransition: 'opacity 0.2s linear',\r\n transition: 'opacity 0.2s linear'\r\n });\r\n\r\n dom.makeFullscreen(this.backgroundElement);\r\n this.backgroundElement.style.position = 'fixed';\r\n\r\n this.domElement = document.createElement('div');\r\n common.extend(this.domElement.style, {\r\n position: 'fixed',\r\n display: 'none',\r\n zIndex: '1001',\r\n opacity: 0,\r\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\r\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\r\n });\r\n\r\n\r\n document.body.appendChild(this.backgroundElement);\r\n document.body.appendChild(this.domElement);\r\n\r\n const _this = this;\r\n dom.bind(this.backgroundElement, 'click', function() {\r\n _this.hide();\r\n });\r\n }\r\n\r\n show() {\r\n const _this = this;\r\n\r\n this.backgroundElement.style.display = 'block';\r\n\r\n this.domElement.style.display = 'block';\r\n this.domElement.style.opacity = 0;\r\n// this.domElement.style.top = '52%';\r\n this.domElement.style.webkitTransform = 'scale(1.1)';\r\n\r\n this.layout();\r\n\r\n common.defer(function() {\r\n _this.backgroundElement.style.opacity = 1;\r\n _this.domElement.style.opacity = 1;\r\n _this.domElement.style.webkitTransform = 'scale(1)';\r\n });\r\n }\r\n\r\n /**\r\n * Hide centered div\r\n */\r\n hide() {\r\n const _this = this;\r\n\r\n const hide = function() {\r\n _this.domElement.style.display = 'none';\r\n _this.backgroundElement.style.display = 'none';\r\n\r\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\r\n dom.unbind(_this.domElement, 'transitionend', hide);\r\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\r\n };\r\n\r\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\r\n dom.bind(this.domElement, 'transitionend', hide);\r\n dom.bind(this.domElement, 'oTransitionEnd', hide);\r\n\r\n this.backgroundElement.style.opacity = 0;\r\n// this.domElement.style.top = '48%';\r\n this.domElement.style.opacity = 0;\r\n this.domElement.style.webkitTransform = 'scale(1.1)';\r\n }\r\n\r\n layout() {\r\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\r\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\r\n }\r\n}\r\n\r\nexport default CenteredDiv;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport css from '../utils/css';\r\nimport saveDialogueContents from './saveDialogue.html';\r\nimport ControllerFactory from '../controllers/ControllerFactory';\r\nimport Controller from '../controllers/Controller';\r\nimport BooleanController from '../controllers/BooleanController';\r\nimport FunctionController from '../controllers/FunctionController';\r\nimport NumberControllerBox from '../controllers/NumberControllerBox';\r\nimport NumberControllerSlider from '../controllers/NumberControllerSlider';\r\nimport ColorController from '../controllers/ColorController';\r\nimport CustomController from '../controllers/CustomController';\r\nimport requestAnimationFrame from '../utils/requestAnimationFrame';\r\nimport CenteredDiv from '../dom/CenteredDiv';\r\nimport dom from '../dom/dom';\r\nimport common from '../utils/common';\r\n\r\nimport styleSheet from './style.scss'; // CSS to embed in build\r\n\r\ncss.inject(styleSheet);\r\n\r\n/** @ignore Outer-most className for GUI's */\r\nconst CSS_NAMESPACE = 'dg';\r\n\r\nconst HIDE_KEY_CODE = 72;\r\n\r\n/** @ignore The only value shared between the JS and SCSS. Use caution. */\r\nconst CLOSE_BUTTON_HEIGHT = 20;\r\n\r\nconst DEFAULT_DEFAULT_PRESET_NAME = 'Default';\r\n\r\nconst SUPPORTS_LOCAL_STORAGE = (function() {\r\n try {\r\n return !!window.localStorage;\r\n } catch (e) {\r\n return false;\r\n }\r\n}());\r\n\r\nlet SAVE_DIALOGUE;\r\n\r\n/** @ignore Have we yet to create an autoPlace GUI? */\r\nlet autoPlaceVirgin = true;\r\n\r\n/** @ignore Fixed position div that auto place GUI's go inside */\r\nlet autoPlaceContainer;\r\n\r\n/** @ignore Are we hiding the GUI's ? */\r\nlet hide = false;\r\n\r\n/** @private GUI's which should be hidden */\r\nconst hideableGuis = [];\r\n\r\n/**\r\n * @class A lightweight controller library for JavaScript. It allows you to easily\r\n * manipulate variables and fire functions on the fly.\r\n *\r\n * @typicalname gui\r\n *\r\n * @example\r\n * // Creating a GUI with options.\r\n * var gui = new dat.GUI({name: 'My GUI'});\r\n *\r\n * @example\r\n * // Creating a GUI and a subfolder.\r\n * var gui = new dat.GUI();\r\n * var folder1 = gui.addFolder('Flow Field');\r\n *\r\n * @param {Object} [params]\r\n * @param {String} [params.name] The name of this GUI.\r\n * @param {Object} [params.load] JSON object representing the saved state of\r\n * this GUI.\r\n * @param {dat.gui.GUI} [params.parent] The GUI I'm nested in.\r\n * @param {Boolean} [params.autoPlace=true]\r\n * @param {Boolean} [params.hideable=true] If true, GUI is shown/hidden by <kbd>h</kbd> keypress.\r\n * @param {Boolean} [params.closed=false] If true, starts closed\r\n * @param {Boolean} [params.closeOnTop=false] If true, close/open button shows on top of the GUI\r\n */\r\nconst GUI = function(pars) {\r\n const _this = this;\r\n\r\n let params = pars || {};\r\n\r\n /**\r\n * Outermost DOM Element\r\n * @type {DOMElement}\r\n */\r\n this.domElement = document.createElement('div');\r\n this.__ul = document.createElement('ul');\r\n this.domElement.appendChild(this.__ul);\r\n\r\n dom.addClass(this.domElement, CSS_NAMESPACE);\r\n\r\n /**\r\n * Nested GUI's by name\r\n * @ignore\r\n */\r\n this.__folders = {};\r\n\r\n this.__controllers = [];\r\n\r\n /**\r\n * List of objects I'm remembering for save, only used in top level GUI\r\n * @ignore\r\n */\r\n this.__rememberedObjects = [];\r\n\r\n /**\r\n * Maps the index of remembered objects to a map of controllers, only used\r\n * in top level GUI.\r\n *\r\n * @private\r\n * @ignore\r\n *\r\n * @example\r\n * [\r\n * {\r\n * propertyName: Controller,\r\n * anotherPropertyName: Controller\r\n * },\r\n * {\r\n * propertyName: Controller\r\n * }\r\n * ]\r\n */\r\n this.__rememberedObjectIndecesToControllers = [];\r\n\r\n this.__listening = [];\r\n\r\n // Default parameters\r\n params = common.defaults(params, {\r\n closeOnTop: false,\r\n autoPlace: true,\r\n width: GUI.DEFAULT_WIDTH\r\n });\r\n\r\n params = common.defaults(params, {\r\n resizable: params.autoPlace,\r\n hideable: params.autoPlace\r\n });\r\n\r\n if (!common.isUndefined(params.load)) {\r\n // Explicit preset\r\n if (params.preset) {\r\n params.load.preset = params.preset;\r\n }\r\n } else {\r\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\r\n }\r\n\r\n if (common.isUndefined(params.parent) && params.hideable) {\r\n hideableGuis.push(this);\r\n }\r\n\r\n // Only root level GUI's are resizable.\r\n params.resizable = common.isUndefined(params.parent) && params.resizable;\r\n\r\n if (params.autoPlace && common.isUndefined(params.scrollable)) {\r\n params.scrollable = true;\r\n }\r\n// params.scrollable = common.isUndefined(params.parent) && params.scrollable === true;\r\n\r\n // Not part of params because I don't want people passing this in via\r\n // constructor. Should be a 'remembered' value.\r\n let useLocalStorage =\r\n SUPPORTS_LOCAL_STORAGE &&\r\n localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\r\n\r\n let saveToLocalStorage;\r\n let titleRow;\r\n\r\n Object.defineProperties(this,\r\n /** @lends GUI.prototype */\r\n {\r\n /**\r\n * The parent <code>GUI</code>\r\n * @type dat.gui.GUI\r\n */\r\n parent: {\r\n get: function() {\r\n return params.parent;\r\n }\r\n },\r\n\r\n scrollable: {\r\n get: function() {\r\n return params.scrollable;\r\n }\r\n },\r\n\r\n /**\r\n * Handles <code>GUI</code>'s element placement for you\r\n * @type Boolean\r\n */\r\n autoPlace: {\r\n get: function() {\r\n return params.autoPlace;\r\n }\r\n },\r\n\r\n /**\r\n * Handles <code>GUI</code>'s position of open/close button\r\n * @type Boolean\r\n */\r\n closeOnTop: {\r\n get: function() {\r\n return params.closeOnTop;\r\n }\r\n },\r\n\r\n /**\r\n * The identifier for a set of saved values\r\n * @type String\r\n */\r\n preset: {\r\n get: function() {\r\n if (_this.parent) {\r\n return _this.getRoot().preset;\r\n }\r\n\r\n return params.load.preset;\r\n },\r\n\r\n set: function(v) {\r\n if (_this.parent) {\r\n _this.getRoot().preset = v;\r\n } else {\r\n params.load.preset = v;\r\n }\r\n setPresetSelectIndex(this);\r\n _this.revert();\r\n }\r\n },\r\n\r\n /**\r\n * The width of <code>GUI</code> element\r\n * @type Number\r\n */\r\n width: {\r\n get: function() {\r\n return params.width;\r\n },\r\n set: function(v) {\r\n params.width = v;\r\n setWidth(_this, v);\r\n }\r\n },\r\n\r\n /**\r\n * The name of <code>GUI</code>. Used for folders. i.e\r\n * a folder's name\r\n * @type String\r\n */\r\n name: {\r\n get: function() {\r\n return params.name;\r\n },\r\n set: function(v) {\r\n // TODO Check for collisions among sibling folders\r\n params.name = v;\r\n if (titleRow) {\r\n titleRow.innerHTML = params.name;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Whether the <code>GUI</code> is collapsed or not\r\n * @type Boolean\r\n */\r\n closed: {\r\n get: function() {\r\n return params.closed;\r\n },\r\n set: function(v) {\r\n params.closed = v;\r\n if (params.closed) {\r\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\r\n } else {\r\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\r\n }\r\n // For browsers that aren't going to respect the CSS transition,\r\n // Lets just check our height against the window height right off\r\n // the bat.\r\n this.onResize();\r\n\r\n if (_this.__closeButton) {\r\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Contains all presets\r\n * @type Object\r\n */\r\n load: {\r\n get: function() {\r\n return params.load;\r\n }\r\n },\r\n\r\n /**\r\n * Determines whether or not to use <a href=\"https://developer.mozilla.org/en/DOM/Storage#localStorage\">localStorage</a> as the means for\r\n * <code>remember</code>ing\r\n * @type Boolean\r\n */\r\n useLocalStorage: {\r\n\r\n get: function() {\r\n return useLocalStorage;\r\n },\r\n set: function(bool) {\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n useLocalStorage = bool;\r\n if (bool) {\r\n dom.bind(window, 'unload', saveToLocalStorage);\r\n } else {\r\n dom.unbind(window, 'unload', saveToLocalStorage);\r\n }\r\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Are we a root level GUI?\r\n if (common.isUndefined(params.parent)) {\r\n this.closed = params.closed || false;\r\n\r\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\r\n dom.makeSelectable(this.domElement, false);\r\n\r\n // Are we supposed to be loading locally?\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n if (useLocalStorage) {\r\n _this.useLocalStorage = true;\r\n\r\n const savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\r\n\r\n if (savedGui) {\r\n params.load = JSON.parse(savedGui);\r\n }\r\n }\r\n }\r\n\r\n this.__closeButton = document.createElement('div');\r\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\r\n if (params.closeOnTop) {\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\r\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\r\n } else {\r\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\r\n this.domElement.appendChild(this.__closeButton);\r\n }\r\n\r\n dom.bind(this.__closeButton, 'click', function() {\r\n _this.closed = !_this.closed;\r\n });\r\n // Oh, you're a nested GUI!\r\n } else {\r\n if (params.closed === undefined) {\r\n params.closed = true;\r\n }\r\n\r\n const titleRowName = document.createTextNode(params.name);\r\n dom.addClass(titleRowName, 'controller-name');\r\n\r\n titleRow = addRow(_this, titleRowName);\r\n\r\n const onClickTitle = function(e) {\r\n e.preventDefault();\r\n _this.closed = !_this.closed;\r\n return false;\r\n };\r\n\r\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\r\n\r\n dom.addClass(titleRow, 'title');\r\n dom.bind(titleRow, 'click', onClickTitle);\r\n\r\n if (!params.closed) {\r\n this.closed = false;\r\n }\r\n }\r\n\r\n if (params.autoPlace) {\r\n if (common.isUndefined(params.parent)) {\r\n if (autoPlaceVirgin) {\r\n autoPlaceContainer = document.createElement('div');\r\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\r\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\r\n document.body.appendChild(autoPlaceContainer);\r\n autoPlaceVirgin = false;\r\n }\r\n\r\n // Put it in the dom for you.\r\n autoPlaceContainer.appendChild(this.domElement);\r\n\r\n // Apply the auto styles\r\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\r\n }\r\n\r\n\r\n // Make it not elastic.\r\n if (!this.parent) {\r\n setWidth(_this, params.width);\r\n }\r\n }\r\n\r\n this.__resizeHandler = function() {\r\n _this.onResizeDebounced();\r\n };\r\n\r\n dom.bind(window, 'resize', this.__resizeHandler);\r\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\r\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\r\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\r\n this.onResize();\r\n\r\n if (params.resizable) {\r\n addResizeHandle(this);\r\n }\r\n\r\n saveToLocalStorage = function() {\r\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\r\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\r\n }\r\n };\r\n\r\n // expose this method publicly\r\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\r\n\r\n function resetWidth() {\r\n const root = _this.getRoot();\r\n root.width += 1;\r\n common.defer(function() {\r\n root.width -= 1;\r\n });\r\n }\r\n\r\n if (!params.parent) {\r\n resetWidth();\r\n }\r\n};\r\n\r\nGUI.CustomController = CustomController;\r\n\r\nGUI.toggleHide = function() {\r\n hide = !hide;\r\n common.each(hideableGuis, function(gui) {\r\n gui.domElement.style.display = hide ? 'none' : '';\r\n });\r\n};\r\n\r\nGUI.CLASS_AUTO_PLACE = 'a';\r\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\r\nGUI.CLASS_MAIN = 'main';\r\nGUI.CLASS_CONTROLLER_ROW = 'cr';\r\nGUI.CLASS_TOO_TALL = 'taller-than-window';\r\nGUI.CLASS_CLOSED = 'closed';\r\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\r\nGUI.CLASS_CLOSE_TOP = 'close-top';\r\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\r\nGUI.CLASS_DRAG = 'drag';\r\n\r\nGUI.DEFAULT_WIDTH = 245;\r\nGUI.TEXT_CLOSED = 'Close Controls';\r\nGUI.TEXT_OPEN = 'Open Controls';\r\n\r\nGUI._keydownHandler = function(e) {\r\n if (document.activeElement.type !== 'text' &&\r\n (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\r\n GUI.toggleHide();\r\n }\r\n};\r\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\r\n\r\ncommon.extend(\r\n GUI.prototype,\r\n\r\n /** @lends GUI.prototype */\r\n {\r\n\r\n /**\r\n * Adds a new {@link Controller} to the GUI. The type of controller created\r\n * is inferred from the initial value of <code>object[property]</code>. For\r\n * color properties, see {@link addColor}.\r\n *\r\n * @param {Object} object The object to be manipulated\r\n * @param {String} property The name of the property to be manipulated\r\n * @param {Number} [min] Minimum allowed value\r\n * @param {Number} [max] Maximum allowed value\r\n * @param {Number} [step] Increment by which to change value\r\n * @returns {Controller} The controller that was added to the GUI.\r\n * @instance\r\n *\r\n * @example\r\n * // Add a string controller.\r\n * var person = {name: 'Sam'};\r\n * gui.add(person, 'name');\r\n *\r\n * @example\r\n * // Add a number controller slider.\r\n * var person = {age: 45};\r\n * gui.add(person, 'age', 0, 100);\r\n */\r\n add: function(object, property) {\r\n return add(\r\n this,\r\n object,\r\n property,\r\n {\r\n custom: object instanceof CustomController,\r\n factoryArgs: Array.prototype.slice.call(arguments, 2)\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * Adds a new color controller to the GUI.\r\n *\r\n * @param object\r\n * @param property\r\n * @returns {Controller} The controller that was added to the GUI.\r\n * @instance\r\n *\r\n * @example\r\n * var palette = {\r\n * color1: '#FF0000', // CSS string\r\n * color2: [ 0, 128, 255 ], // RGB array\r\n * color3: [ 0, 128, 255, 0.3 ], // RGB with alpha\r\n * color4: { h: 350, s: 0.9, v: 0.3 } // Hue, saturation, value\r\n * };\r\n * gui.addColor(palette, 'color1');\r\n * gui.addColor(palette, 'color2');\r\n * gui.addColor(palette, 'color3');\r\n * gui.addColor(palette, 'color4');\r\n */\r\n addColor: function(object, property) {\r\n return add(\r\n this,\r\n object,\r\n property,\r\n {\r\n color: true\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * Adds a new custom controller to the GUI.\r\n *\r\n * @param object\r\n * @param property\r\n * @returns {Controller} The controller that was added to the GUI.\r\n * @instance\r\n *\r\n */\r\n addCustomController: function(object, property) {\r\n \treturn add(\r\n\t\t this,\r\n\t\t object,\r\n\t\t property,\r\n\t\t {\r\n\t\t \tcustom: true,\r\n\t\t \tfactoryArgs: Array.prototype.slice.call(arguments, 2)\r\n\t\t }\r\n\t\t);\r\n },\r\n\r\n \t/**\r\n * Removes the given controller from the GUI.\r\n * @param {Controller} controller\r\n * @instance\r\n */\r\n remove: function(controller) {\r\n // TODO listening?\r\n this.__ul.removeChild(controller.__li);\r\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\r\n const _this = this;\r\n common.defer(function() {\r\n _this.onResize();\r\n });\r\n },\r\n\r\n /**\r\n * Removes the root GUI from the document and unbinds all event listeners.\r\n * For subfolders, use `gui.removeFolder(folder)` instead.\r\n * @instance\r\n */\r\n destroy: function() {\r\n if (this.parent) {\r\n throw new Error(\r\n 'Only the root GUI should be removed with .destroy(). ' +\r\n 'For subfolders, use gui.removeFolder(folder) instead.'\r\n );\r\n }\r\n\r\n if (this.autoPlace) {\r\n autoPlaceContainer.removeChild(this.domElement);\r\n }\r\n\r\n const _this = this;\r\n common.each(this.__folders, function(subfolder) {\r\n _this.removeFolder(subfolder);\r\n });\r\n\r\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\r\n\r\n removeListeners(this);\r\n },\r\n\r\n /**\r\n * Creates a new subfolder GUI instance.\r\n * @param name\r\n * @returns {dat.gui.GUI} The new folder.\r\n * @throws {Error} if this GUI already has a folder by the specified\r\n * name\r\n * @instance\r\n */\r\n addFolder: function(name) {\r\n // We have to prevent collisions on names in order to have a key\r\n // by which to remember saved values\r\n if (this.__folders[name] !== undefined) {\r\n throw new Error('You already have a folder in this GUI by the' +\r\n ' name \"' + name + '\"');\r\n }\r\n\r\n const newGuiParams = { name: name, parent: this };\r\n\r\n // We need to pass down the autoPlace trait so that we can\r\n // attach event listeners to open/close folder actions to\r\n // ensure that a scrollbar appears if the window is too short.\r\n newGuiParams.autoPlace = this.autoPlace;\r\n\r\n // Do we have saved appearance data for this folder?\r\n if (this.load && // Anything loaded?\r\n this.load.folders && // Was my parent a dead-end?\r\n this.load.folders[name]) { // Did daddy remember me?\r\n // Start me closed if I was closed\r\n newGuiParams.closed = this.load.folders[name].closed;\r\n\r\n // Pass down the loaded data\r\n newGuiParams.load = this.load.folders[name];\r\n }\r\n\r\n const gui = new GUI(newGuiParams);\r\n this.__folders[name] = gui;\r\n\r\n const li = addRow(this, gui.domElement);\r\n dom.addClass(li, 'folder');\r\n return gui;\r\n },\r\n\r\n /**\r\n * Removes a subfolder GUI instance.\r\n * @param {dat.gui.GUI} folder The folder to remove.\r\n * @instance\r\n */\r\n removeFolder: function(folder) {\r\n this.__ul.removeChild(folder.domElement.parentElement);\r\n\r\n delete this.__folders[folder.name];\r\n\r\n // Do we have saved appearance data for this folder?\r\n if (this.load && // Anything loaded?\r\n this.load.folders && // Was my parent a dead-end?\r\n this.load.folders[folder.name]) {\r\n delete this.load.folders[folder.name];\r\n }\r\n\r\n removeListeners(folder);\r\n\r\n const _this = this;\r\n\r\n common.each(folder.__folders, function(subfolder) {\r\n folder.removeFolder(subfolder);\r\n });\r\n\r\n common.defer(function() {\r\n _this.onResize();\r\n });\r\n },\r\n\r\n /**\r\n * Opens the GUI.\r\n */\r\n open: function() {\r\n this.closed = false;\r\n },\r\n\r\n /**\r\n * Closes the GUI.\r\n */\r\n close: function() {\r\n this.closed = true;\r\n },\r\n\r\n /**\r\n * Hides the GUI.\r\n */\r\n hide: function() {\r\n this.domElement.style.display = 'none';\r\n },\r\n\r\n /**\r\n * Shows the GUI.\r\n */\r\n show: function() {\r\n this.domElement.style.display = '';\r\n },\r\n\r\n\r\n onResize: function() {\r\n // we debounce this function to prevent performance issues when rotating on tablet/mobile\r\n const root = this.getRoot();\r\n if (root.scrollable) {\r\n const top = dom.getOffset(root.__ul).top;\r\n let h = 0;\r\n\r\n common.each(root.__ul.childNodes, function(node) {\r\n if (!(root.autoPlace && node === root.__save_row)) {\r\n h += dom.getHeight(node);\r\n }\r\n });\r\n\r\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\r\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\r\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\r\n } else {\r\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\r\n root.__ul.style.height = 'auto';\r\n }\r\n }\r\n\r\n if (root.__resize_handle) {\r\n common.defer(function() {\r\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\r\n });\r\n }\r\n\r\n if (root.__closeButton) {\r\n root.__closeButton.style.width = root.width + 'px';\r\n }\r\n },\r\n\r\n onResizeDebounced: common.debounce(function() { this.onResize(); }, 50),\r\n\r\n /**\r\n * Mark objects for saving. The order of these objects cannot change as\r\n * the GUI grows. When remembering new objects, append them to the end\r\n * of the list.\r\n *\r\n * @param {...Object} objects\r\n * @throws {Error} if not called on a top level GUI.\r\n * @instance\r\n * @ignore\r\n */\r\n remember: function() {\r\n if (common.isUndefined(SAVE_DIALOGUE)) {\r\n SAVE_DIALOGUE = new CenteredDiv();\r\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogueContents;\r\n }\r\n\r\n if (this.parent) {\r\n throw new Error('You can only call remember on a top level GUI.');\r\n }\r\n\r\n const _this = this;\r\n\r\n common.each(Array.prototype.slice.call(arguments), function(object) {\r\n if (_this.__rememberedObjects.length === 0) {\r\n addSaveMenu(_this);\r\n }\r\n if (_this.__rememberedObjects.indexOf(object) === -1) {\r\n _this.__rememberedObjects.push(object);\r\n }\r\n });\r\n\r\n if (this.autoPlace) {\r\n // Set save row width\r\n setWidth(this, this.width);\r\n }\r\n },\r\n\r\n /**\r\n * @returns {dat.gui.GUI} the topmost parent GUI of a nested GUI.\r\n * @instance\r\n */\r\n getRoot: function() {\r\n let gui = this;\r\n while (gui.parent) {\r\n gui = gui.parent;\r\n }\r\n return gui;\r\n },\r\n\r\n /**\r\n * @returns {Object} a JSON object representing the current state of\r\n * this GUI as well as its remembered properties.\r\n * @instance\r\n */\r\n getSaveObject: function() {\r\n const toReturn = this.load;\r\n toReturn.closed = this.closed;\r\n\r\n // Am I remembering any values?\r\n if (this.__rememberedObjects.length > 0) {\r\n toReturn.preset = this.preset;\r\n\r\n if (!toReturn.remembered) {\r\n toReturn.remembered = {};\r\n }\r\n\r\n toReturn.remembered[this.preset] = getCurrentPreset(this);\r\n }\r\n\r\n toReturn.folders = {};\r\n common.each(this.__folders, function(element, key) {\r\n toReturn.folders[key] = element.getSaveObject();\r\n });\r\n\r\n return toReturn;\r\n },\r\n\r\n save: function() {\r\n if (!this.load.remembered) {\r\n this.load.remembered = {};\r\n }\r\n\r\n this.load.remembered[this.preset] = getCurrentPreset(this);\r\n markPresetModified(this, false);\r\n this.saveToLocalStorageIfPossible();\r\n },\r\n\r\n saveAs: function(presetName) {\r\n if (!this.load.remembered) {\r\n // Retain default values upon first save\r\n this.load.remembered = {};\r\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\r\n }\r\n\r\n this.load.remembered[presetName] = getCurrentPreset(this);\r\n this.preset = presetName;\r\n addPresetOption(this, presetName, true);\r\n this.saveToLocalStorageIfPossible();\r\n },\r\n\r\n revert: function(gui) {\r\n common.each(this.__controllers, function(controller) {\r\n // Make revert work on Default.\r\n if (!this.getRoot().load.remembered) {\r\n controller.setValue(controller.initialValue);\r\n } else {\r\n recallSavedValue(gui || this.getRoot(), controller);\r\n }\r\n\r\n // fire onFinishChange callback\r\n if (controller.__onFinishChange) {\r\n controller.__onFinishChange.call(controller, controller.getValue());\r\n }\r\n }, this);\r\n\r\n common.each(this.__folders, function(folder) {\r\n folder.revert(folder);\r\n });\r\n\r\n if (!gui) {\r\n markPresetModified(this.getRoot(), false);\r\n }\r\n },\r\n\r\n listen: function(controller) {\r\n const init = this.__listening.length === 0;\r\n this.__listening.push(controller);\r\n if (init) {\r\n updateDisplays(this.__listening);\r\n }\r\n },\r\n\r\n updateDisplay: function() {\r\n common.each(this.__controllers, function(controller) {\r\n controller.updateDisplay();\r\n });\r\n common.each(this.__folders, function(folder) {\r\n folder.updateDisplay();\r\n });\r\n }\r\n }\r\n);\r\n\r\n/**\r\n * Add a row to the end of the GUI or before another row.\r\n *\r\n * @param gui\r\n * @param [newDom] If specified, inserts the dom content in the new row\r\n * @param [liBefore] If specified, places the new row before another row\r\n *\r\n * @ignore\r\n */\r\nfunction addRow(gui, newDom, liBefore) {\r\n const li = document.createElement('li');\r\n if (newDom) {\r\n li.appendChild(newDom);\r\n }\r\n\r\n if (liBefore) {\r\n gui.__ul.insertBefore(li, liBefore);\r\n } else {\r\n gui.__ul.appendChild(li);\r\n }\r\n gui.onResize();\r\n return li;\r\n}\r\n\r\nfunction removeListeners(gui) {\r\n dom.unbind(window, 'resize', gui.__resizeHandler);\r\n\r\n if (gui.saveToLocalStorageIfPossible) {\r\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\r\n }\r\n}\r\n\r\nfunction markPresetModified(gui, modified) {\r\n const opt = gui.__preset_select[gui.__preset_select.selectedIndex];\r\n\r\n if (modified) {\r\n opt.innerHTML = opt.value + '*';\r\n } else {\r\n opt.innerHTML = opt.value;\r\n }\r\n}\r\n\r\nfunction augmentController(gui, li, controller) {\r\n controller.__li = li;\r\n controller.__gui = gui;\r\n\r\n common.extend(controller, /** @lends Controller.prototype */ {\r\n /**\r\n * @param {Array|Object} options\r\n * @return {Controller}\r\n */\r\n options: function(options) {\r\n if (arguments.length > 1) {\r\n const nextSibling = controller.__li.nextElementSibling;\r\n controller.remove();\r\n\r\n return add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: nextSibling,\r\n factoryArgs: [common.toArray(arguments)]\r\n }\r\n );\r\n }\r\n\r\n if (common.isArray(options) || common.isObject(options)) {\r\n const nextSibling = controller.__li.nextElementSibling;\r\n controller.remove();\r\n\r\n return add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: nextSibling,\r\n factoryArgs: [options]\r\n }\r\n );\r\n }\r\n },\r\n\r\n /**\r\n * Sets the name of the controller.\r\n * @param {string} name\r\n * @return {Controller}\r\n */\r\n name: function(name) {\r\n controller.__li.firstElementChild.firstElementChild.innerHTML = name;\r\n return controller;\r\n },\r\n\r\n /**\r\n * Sets controller to listen for changes on its underlying object.\r\n * @return {Controller}\r\n */\r\n listen: function() {\r\n controller.__gui.listen(controller);\r\n return controller;\r\n },\r\n\r\n /**\r\n * Removes the controller from its parent GUI.\r\n * @return {Controller}\r\n */\r\n remove: function() {\r\n controller.__gui.remove(controller);\r\n return controller;\r\n }\r\n });\r\n\r\n // All sliders should be accompanied by a box.\r\n if (controller instanceof NumberControllerSlider) {\r\n const box = new NumberControllerBox(controller.object, controller.property,\r\n { min: controller.__min, max: controller.__max, step: controller.__step });\r\n\r\n common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function(method) {\r\n const pc = controller[method];\r\n const pb = box[method];\r\n controller[method] = box[method] = function() {\r\n const args = Array.prototype.slice.call(arguments);\r\n pb.apply(box, args);\r\n return pc.apply(controller, args);\r\n };\r\n });\r\n\r\n dom.addClass(li, 'has-slider');\r\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\r\n } else if (controller instanceof NumberControllerBox) {\r\n const r = function(returned) {\r\n // Have we defined both boundaries?\r\n if (common.isNumber(controller.__min) && common.isNumber(controller.__max)) {\r\n // Well, then lets just replace this with a slider.\r\n\r\n // lets remember if the old controller had a specific name or was listening\r\n const oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\r\n const wasListening = controller.__gui.__listening.indexOf(controller) > -1;\r\n\r\n controller.remove();\r\n const newController = add(\r\n gui,\r\n controller.object,\r\n controller.property,\r\n {\r\n before: controller.__li.nextElementSibling,\r\n factoryArgs: [controller.__min, controller.__max, controller.__step]\r\n });\r\n\r\n newController.name(oldName);\r\n if (wasListening) newController.listen();\r\n\r\n return newController;\r\n }\r\n\r\n return returned;\r\n };\r\n\r\n controller.min = common.compose(r, controller.min);\r\n controller.max = common.compose(r, controller.max);\r\n } else if (controller instanceof BooleanController) {\r\n dom.bind(li, 'click', function() {\r\n dom.fakeEvent(controller.__checkbox, 'click');\r\n });\r\n\r\n dom.bind(controller.__checkbox, 'click', function(e) {\r\n e.stopPropagation(); // Prevents double-toggle\r\n });\r\n } else if (controller instanceof FunctionController) {\r\n dom.bind(li, 'click', function() {\r\n dom.fakeEvent(controller.__button, 'click');\r\n });\r\n\r\n dom.bind(li, 'mouseover', function() {\r\n dom.addClass(controller.__button, 'hover');\r\n });\r\n\r\n dom.bind(li, 'mouseout', function() {\r\n dom.removeClass(controller.__button, 'hover');\r\n });\r\n } else if (controller instanceof ColorController) {\r\n dom.addClass(li, 'color');\r\n controller.updateDisplay = common.compose(function(val) {\r\n li.style.borderLeftColor = controller.__color.toString();\r\n return val;\r\n }, controller.updateDisplay);\r\n\r\n controller.updateDisplay();\r\n }\r\n\r\n controller.setValue = common.compose(function(val) {\r\n if (gui.getRoot().__preset_select && controller.isModified()) {\r\n markPresetModified(gui.getRoot(), true);\r\n }\r\n\r\n return val;\r\n }, controller.setValue);\r\n}\r\n\r\nfunction recallSavedValue(gui, controller) {\r\n // Find the topmost GUI, that's where remembered objects live.\r\n const root = gui.getRoot();\r\n\r\n // Does the object we're controlling match anything we've been told to\r\n // remember?\r\n const matchedIndex = root.__rememberedObjects.indexOf(controller.object);\r\n\r\n // Why yes, it does!\r\n if (matchedIndex !== -1) {\r\n // Let me fetch a map of controllers for thcommon.isObject.\r\n let controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\r\n\r\n // Ohp, I believe this is the first controller we've created for this\r\n // object. Lets make the map fresh.\r\n if (controllerMap === undefined) {\r\n controllerMap = {};\r\n root.__rememberedObjectIndecesToControllers[matchedIndex] =\r\n controllerMap;\r\n }\r\n\r\n // Keep track of this controller\r\n controllerMap[controller.property] = controller;\r\n\r\n // Okay, now have we saved any values for this controller?\r\n if (root.load && root.load.remembered) {\r\n const presetMap = root.load.remembered;\r\n\r\n // Which preset are we trying to load?\r\n let preset;\r\n\r\n if (presetMap[gui.preset]) {\r\n preset = presetMap[gui.preset];\r\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\r\n // Uhh, you can have the default instead?\r\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\r\n } else {\r\n // Nada.\r\n return;\r\n }\r\n\r\n // Did the loaded object remember thcommon.isObject? && Did we remember this particular property?\r\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\r\n // We did remember something for this guy ...\r\n const value = preset[matchedIndex][controller.property];\r\n\r\n // And that's what it is.\r\n controller.initialValue = value;\r\n controller.setValue(value);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction add(gui, object, property, params) {\r\n if (!object instanceof CustomController && !params.custom && (object[property] === undefined)) {\r\n throw new Error(`Object \"${object}\" has no property \"${property}\"`);\r\n }\r\n\r\n let controller;\r\n\r\n if (params.color) {\r\n controller = new ColorController(object, property);\r\n } else if(object instanceof CustomController && ( property === undefined )){\r\n \tcontroller = object;\r\n } else if (!(object instanceof CustomController) && params.custom && (object[property] === undefined)) {\r\n \tcontroller = new CustomController(object, property);\r\n }else {\r\n \tconst factoryArgs = object instanceof CustomController ?\r\n [property].concat(params.factoryArgs) : [object, property].concat(params.factoryArgs);\r\n controller = ControllerFactory.apply(gui, factoryArgs);\r\n }\r\n\r\n if (params.before instanceof Controller) {\r\n params.before = params.before.__li;\r\n }\r\n\r\n recallSavedValue(gui, controller);\r\n\r\n dom.addClass(controller.domElement, 'c');\r\n\r\n const container = document.createElement('div');\r\n\r\n const name = params.custom && ( controller instanceof CustomController === false ) ?\r\n ( object instanceof CustomController ? object.domElement : new CustomController(object).domElement ) : document.createElement('span');\r\n if (!params.custom)\r\n \tname.innerHTML = controller.property;\r\n dom.addClass(name, 'property-name');\r\n container.appendChild(name);\r\n\r\n container.appendChild(controller.domElement);\r\n\r\n const li = addRow(gui, container, params.before);\r\n\r\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\r\n if (controller instanceof ColorController) {\r\n dom.addClass(li, 'color');\r\n } else {\r\n dom.addClass(li, typeof controller.getValue());\r\n }\r\n\r\n augmentController(gui, li, controller);\r\n\r\n gui.__controllers.push(controller);\r\n\r\n return controller;\r\n}\r\n\r\nfunction getLocalStorageHash(gui, key) {\r\n // TODO how does this deal with multiple GUI's?\r\n return document.location.href + '.' + key;\r\n}\r\n\r\nfunction addPresetOption(gui, name, setSelected) {\r\n const opt = document.createElement('option');\r\n opt.innerHTML = name;\r\n opt.value = name;\r\n gui.__preset_select.appendChild(opt);\r\n if (setSelected) {\r\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\r\n }\r\n}\r\n\r\nfunction showHideExplain(gui, explain) {\r\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\r\n}\r\n\r\nfunction addSaveMenu(gui) {\r\n const div = gui.__save_row = document.createElement('li');\r\n\r\n dom.addClass(gui.domElement, 'has-save');\r\n\r\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\r\n\r\n dom.addClass(div, 'save-row');\r\n\r\n const gears = document.createElement('span');\r\n gears.innerHTML = ' ';\r\n dom.addClass(gears, 'button gears');\r\n\r\n // TODO replace with FunctionController\r\n const button = document.createElement('span');\r\n button.innerHTML = 'Save';\r\n dom.addClass(button, 'button');\r\n dom.addClass(button, 'save');\r\n\r\n const button2 = document.createElement('span');\r\n button2.innerHTML = 'New';\r\n dom.addClass(button2, 'button');\r\n dom.addClass(button2, 'save-as');\r\n\r\n const button3 = document.createElement('span');\r\n button3.innerHTML = 'Revert';\r\n dom.addClass(button3, 'button');\r\n dom.addClass(button3, 'revert');\r\n\r\n const select = gui.__preset_select = document.createElement('select');\r\n\r\n if (gui.load && gui.load.remembered) {\r\n common.each(gui.load.remembered, function(value, key) {\r\n addPresetOption(gui, key, key === gui.preset);\r\n });\r\n } else {\r\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\r\n }\r\n\r\n dom.bind(select, 'change', function() {\r\n for (let index = 0; index < gui.__preset_select.length; index++) {\r\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\r\n }\r\n\r\n gui.preset = this.value;\r\n });\r\n\r\n div.appendChild(select);\r\n div.appendChild(gears);\r\n div.appendChild(button);\r\n div.appendChild(button2);\r\n div.appendChild(button3);\r\n\r\n if (SUPPORTS_LOCAL_STORAGE) {\r\n const explain = document.getElementById('dg-local-explain');\r\n const localStorageCheckBox = document.getElementById('dg-local-storage');\r\n const saveLocally = document.getElementById('dg-save-locally');\r\n\r\n saveLocally.style.display = 'block';\r\n\r\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\r\n localStorageCheckBox.setAttribute('checked', 'checked');\r\n }\r\n\r\n showHideExplain(gui, explain);\r\n\r\n // TODO: Use a boolean controller, fool!\r\n dom.bind(localStorageCheckBox, 'change', function() {\r\n gui.useLocalStorage = !gui.useLocalStorage;\r\n showHideExplain(gui, explain);\r\n });\r\n }\r\n\r\n const newConstructorTextArea = document.getElementById('dg-new-constructor');\r\n\r\n dom.bind(newConstructorTextArea, 'keydown', function(e) {\r\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\r\n SAVE_DIALOGUE.hide();\r\n }\r\n });\r\n\r\n dom.bind(gears, 'click', function() {\r\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\r\n SAVE_DIALOGUE.show();\r\n newConstructorTextArea.focus();\r\n newConstructorTextArea.select();\r\n });\r\n\r\n dom.bind(button, 'click', function() {\r\n gui.save();\r\n });\r\n\r\n dom.bind(button2, 'click', function() {\r\n const presetName = prompt('Enter a new preset name.');\r\n if (presetName) {\r\n gui.saveAs(presetName);\r\n }\r\n });\r\n\r\n dom.bind(button3, 'click', function() {\r\n gui.revert();\r\n });\r\n\r\n // div.appendChild(button2);\r\n}\r\n\r\nfunction addResizeHandle(gui) {\r\n let pmouseX;\r\n\r\n gui.__resize_handle = document.createElement('div');\r\n\r\n common.extend(gui.__resize_handle.style, {\r\n\r\n width: '6px',\r\n marginLeft: '-3px',\r\n height: '200px',\r\n cursor: 'ew-resize',\r\n position: 'absolute'\r\n // border: '1px solid blue'\r\n\r\n });\r\n\r\n function drag(e) {\r\n e.preventDefault();\r\n\r\n gui.width += pmouseX - e.clientX;\r\n gui.onResize();\r\n pmouseX = e.clientX;\r\n\r\n return false;\r\n }\r\n\r\n function dragStop() {\r\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\r\n dom.unbind(window, 'mousemove', drag);\r\n dom.unbind(window, 'mouseup', dragStop);\r\n }\r\n\r\n function dragStart(e) {\r\n e.preventDefault();\r\n\r\n pmouseX = e.clientX;\r\n\r\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\r\n dom.bind(window, 'mousemove', drag);\r\n dom.bind(window, 'mouseup', dragStop);\r\n\r\n return false;\r\n }\r\n\r\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\r\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\r\n\r\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\r\n}\r\n\r\nfunction setWidth(gui, w) {\r\n gui.domElement.style.width = w + 'px';\r\n // Auto placed save-rows are position fixed, so we have to\r\n // set the width manually if we want it to bleed to the edge\r\n if (gui.__save_row && gui.autoPlace) {\r\n gui.__save_row.style.width = w + 'px';\r\n }\r\n if (gui.__closeButton) {\r\n gui.__closeButton.style.width = w + 'px';\r\n }\r\n}\r\n\r\nfunction getCurrentPreset(gui, useInitialValues) {\r\n const toReturn = {};\r\n\r\n // For each object I'm remembering\r\n common.each(gui.__rememberedObjects, function(val, index) {\r\n const savedValues = {};\r\n\r\n // The controllers I've made for thcommon.isObject by property\r\n const controllerMap =\r\n gui.__rememberedObjectIndecesToControllers[index];\r\n\r\n // Remember each value for each property\r\n common.each(controllerMap, function(controller, property) {\r\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\r\n });\r\n\r\n // Save the values for thcommon.isObject\r\n toReturn[index] = savedValues;\r\n });\r\n\r\n return toReturn;\r\n}\r\n\r\nfunction setPresetSelectIndex(gui) {\r\n for (let index = 0; index < gui.__preset_select.length; index++) {\r\n if (gui.__preset_select[index].value === gui.preset) {\r\n gui.__preset_select.selectedIndex = index;\r\n }\r\n }\r\n}\r\n\r\nfunction updateDisplays(controllerArray) {\r\n if (controllerArray.length !== 0) {\r\n requestAnimationFrame.call(window, function() {\r\n updateDisplays(controllerArray);\r\n });\r\n }\r\n\r\n common.each(controllerArray, function(c) {\r\n c.updateDisplay();\r\n });\r\n}\r\n\r\nexport default GUI;\r\n","/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport Color from './color/Color';\r\nimport math from './color/math';\r\nimport interpret from './color/interpret';\r\n\r\nimport Controller from './controllers/Controller';\r\nimport BooleanController from './controllers/BooleanController';\r\nimport OptionController from './controllers/OptionController';\r\nimport StringController from './controllers/StringController';\r\nimport NumberController from './controllers/NumberController';\r\nimport NumberControllerBox from './controllers/NumberControllerBox';\r\nimport NumberControllerSlider from './controllers/NumberControllerSlider';\r\nimport FunctionController from './controllers/FunctionController';\r\nimport ColorController from './controllers/ColorController';\r\nimport CustomController from './controllers/CustomController';\r\n\r\nimport domImport from './dom/dom';\r\nimport GUIImport from './gui/GUI';\r\n\r\nexport const color = {\r\n Color: Color,\r\n math: math,\r\n interpret: interpret\r\n};\r\n\r\nexport const controllers = {\r\n Controller: Controller,\r\n BooleanController: BooleanController,\r\n OptionController: OptionController,\r\n StringController: StringController,\r\n NumberController: NumberController,\r\n NumberControllerBox: NumberControllerBox,\r\n NumberControllerSlider: NumberControllerSlider,\r\n FunctionController: FunctionController,\r\n ColorController: ColorController,\r\n CustomController: CustomController\r\n};\r\n\r\nexport const dom = { dom: domImport };\r\n\r\nexport const gui = { GUI: GUIImport };\r\n\r\nexport const GUI = GUIImport;\r\n\r\nexport default {\r\n color,\r\n controllers,\r\n dom,\r\n gui,\r\n GUI\r\n};\r\n"],"names":["color","forceCSSHex","colorFormat","__state","conversionName","toString","r","Math","round","g","b","a","h","s","toFixed","v","str","hex","length","ARR_EACH","Array","prototype","forEach","ARR_SLICE","slice","Common","target","each","call","arguments","obj","keys","isObject","Object","key","isUndefined","bind","toCall","args","i","apply","itr","scope","l","BREAK","fnc","func","threshold","callImmediately","timeout","delayed","callNow","setTimeout","toArray","undefined","isNaN","isArray","constructor","INTERPRETATIONS","common","isString","original","test","match","parseInt","parseFloat","isNumber","result","toReturn","interpret","family","litmus","conversions","conversion","read","tmpComponent","ColorMath","hi","floor","f","p","q","t","c","min","max","delta","NaN","hex_with_component","componentIndex","value","Color","Error","colorToString","write","defineRGBComponent","component","componentHexIndex","defineProperty","space","recalculateRGB","defineHSVComponent","recalculateHSV","math","component_from_hex","extend","hsv_to_rgb","rgb_to_hsv","COMPONENTS","rgb_to_hex","Controller","object","property","initialValue","domElement","document","createElement","__onChange","__onFinishChange","newValue","updateDisplay","getValue","EVENT_MAP","EVENT_MAP_INV","k","e","CSS_VALUE_PIXELS","cssValueToPixels","val","isNull","dom","elem","selectable","style","onselectstart","MozUserSelect","KhtmlUserSelect","unselectable","hor","vert","vertical","horizontal","position","left","right","top","bottom","eventType","pars","aux","params","className","evt","createEvent","clientX","x","clientY","y","initMouseEvent","bubbles","cancelable","window","clickCount","init","initKeyboardEvent","initKeyEvent","defaults","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode","initEvent","dispatchEvent","event","newBool","bool","addEventListener","attachEvent","removeEventListener","detachEvent","classes","split","indexOf","push","join","replace","removeAttribute","index","splice","RegExp","getComputedStyle","width","height","el","offset","offsetParent","offsetLeft","offsetTop","activeElement","type","href","BooleanController","_this","__prev","__checkbox","setAttribute","onChange","setValue","appendChild","checked","OptionController","opts","options","__select","map","element","opt","innerHTML","desiredValue","selectedIndex","isActive","StringController","__input","onBlur","blur","numDecimals","_x","NumberController","_params","__min","__max","__step","step","__impliedStep","pow","log","abs","LN10","__precision","_v","minValue","maxValue","stepValue","roundToDecimal","decimals","tenTo","NumberControllerBox","__truncationSuspended","prevY","attempted","onFinish","onMouseDrag","diff","onMouseUp","unbind","onMouseDown","i1","i2","o1","o2","NumberControllerSlider","__background","__foreground","onTouchStart","addClass","preventDefault","bgRect","getBoundingClientRect","touches","onTouchMove","onTouchEnd","pct","FunctionController","text","__button","fire","ColorController","__color","__temp","makeSelectable","__selector","__saturation_field","__field_knob","__field_knob_border","__hue_knob","__hue_field","__input_textShadow","removeClass","valueField","fieldDown","fieldDownH","setSV","fieldUpSV","setH","fieldUpH","toOriginal","fieldRect","mismatch","flip","_flip","toHexString","marginTop","vendors","linearGradient","background","vendor","cssText","hueGradient","CustomController","css","url","indoc","doc","link","rel","getElementsByTagName","cssContent","injected","head","saveDialogContents","ControllerFactory","isFunction","isBoolean","requestAnimationFrame","callback","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","CenteredDiv","backgroundElement","makeFullscreen","body","hide","display","opacity","webkitTransform","layout","defer","innerWidth","getWidth","innerHeight","getHeight","inject","styleSheet","CSS_NAMESPACE","HIDE_KEY_CODE","CLOSE_BUTTON_HEIGHT","DEFAULT_DEFAULT_PRESET_NAME","SUPPORTS_LOCAL_STORAGE","localStorage","SAVE_DIALOGUE","autoPlaceVirgin","autoPlaceContainer","hideableGuis","GUI","__ul","__folders","__controllers","__rememberedObjects","__rememberedObjectIndecesToControllers","__listening","DEFAULT_WIDTH","autoPlace","load","preset","parent","hideable","resizable","scrollable","useLocalStorage","getItem","getLocalStorageHash","saveToLocalStorage","titleRow","defineProperties","closeOnTop","getRoot","revert","name","closed","CLASS_CLOSED","onResize","__closeButton","TEXT_OPEN","TEXT_CLOSED","setItem","CLASS_MAIN","savedGui","JSON","parse","CLASS_CLOSE_BUTTON","CLASS_CLOSE_TOP","insertBefore","childNodes","CLASS_CLOSE_BOTTOM","titleRowName","createTextNode","addRow","onClickTitle","CLASS_AUTO_PLACE_CONTAINER","CLASS_AUTO_PLACE","__resizeHandler","onResizeDebounced","stringify","getSaveObject","saveToLocalStorageIfPossible","resetWidth","root","toggleHide","gui","CLASS_CONTROLLER_ROW","CLASS_TOO_TALL","CLASS_DRAG","_keydownHandler","which","add","controller","removeChild","__li","subfolder","removeFolder","newGuiParams","folders","li","folder","parentElement","getOffset","node","__save_row","__resize_handle","offsetHeight","debounce","saveDialogueContents","remembered","getCurrentPreset","presetName","newDom","liBefore","removeListeners","markPresetModified","modified","__preset_select","augmentController","__gui","nextSibling","nextElementSibling","remove","firstElementChild","listen","box","method","pc","pb","returned","oldName","wasListening","newController","compose","fakeEvent","stopPropagation","borderLeftColor","isModified","recallSavedValue","matchedIndex","controllerMap","presetMap","custom","factoryArgs","concat","before","container","location","addPresetOption","setSelected","showHideExplain","explain","addSaveMenu","div","firstChild","gears","button","button2","button3","select","getElementById","localStorageCheckBox","saveLocally","newConstructorTextArea","show","focus","save","prompt","saveAs","addResizeHandle","pmouseX","drag","dragStop","dragStart","setWidth","w","useInitialValues","savedValues","setPresetSelectIndex","updateDisplays","controllerArray","controllers","domImport","GUIImport"],"mappings":"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"} |