2015-08-14 16:30:03 +00:00
( function webpackUniversalModuleDefinition ( root , factory ) {
if ( typeof exports === 'object' && typeof module === 'object' )
module . exports = factory ( ) ;
else if ( typeof define === 'function' && define . amd )
2016-08-17 18:29:53 +00:00
define ( [ ] , factory ) ;
2015-08-14 16:30:03 +00:00
else if ( typeof exports === 'object' )
exports [ "dat" ] = factory ( ) ;
else
root [ "dat" ] = factory ( ) ;
} ) ( this , function ( ) {
return /******/ ( function ( modules ) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = { } ;
/******/
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
/******/
/******/ // Check if module is in cache
/******/ if ( installedModules [ moduleId ] )
/******/ return installedModules [ moduleId ] . exports ;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
/******/ exports : { } ,
/******/ id : moduleId ,
/******/ loaded : false
/******/ } ;
/******/
/******/ // Execute the module function
/******/ modules [ moduleId ] . call ( module . exports , module , module . exports , _ _webpack _require _ _ ) ;
/******/
/******/ // Flag the module as loaded
/******/ module . loaded = true ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ _ _webpack _require _ _ . m = modules ;
/******/
/******/ // expose the module cache
/******/ _ _webpack _require _ _ . c = installedModules ;
/******/
/******/ // __webpack_public_path__
/******/ _ _webpack _require _ _ . p = "" ;
/******/
/******/ // Load entry module and return exports
/******/ return _ _webpack _require _ _ ( 0 ) ;
/******/ } )
/************************************************************************/
/******/ ( [
/* 0 */
/***/ function ( module , exports , _ _webpack _require _ _ ) {
2015-08-15 01:28:21 +00:00
'use strict' ;
2017-04-07 22:15:31 +00:00
exports . _ _esModule = true ;
2016-09-22 23:39:48 +00:00
var _index = _ _webpack _require _ _ ( 1 ) ;
var _index2 = _interopRequireDefault ( _index ) ;
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2017-04-07 22:15:31 +00:00
exports . default = _index2 . default ; / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
module . exports = exports [ 'default' ] ;
2015-08-15 01:28:21 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 1 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
2016-09-22 23:39:48 +00:00
'use strict' ;
exports . _ _esModule = true ;
var _Color = _ _webpack _require _ _ ( 2 ) ;
var _Color2 = _interopRequireDefault ( _Color ) ;
var _math = _ _webpack _require _ _ ( 6 ) ;
var _math2 = _interopRequireDefault ( _math ) ;
var _interpret = _ _webpack _require _ _ ( 3 ) ;
var _interpret2 = _interopRequireDefault ( _interpret ) ;
var _Controller = _ _webpack _require _ _ ( 7 ) ;
var _Controller2 = _interopRequireDefault ( _Controller ) ;
var _BooleanController = _ _webpack _require _ _ ( 8 ) ;
var _BooleanController2 = _interopRequireDefault ( _BooleanController ) ;
var _OptionController = _ _webpack _require _ _ ( 10 ) ;
var _OptionController2 = _interopRequireDefault ( _OptionController ) ;
var _StringController = _ _webpack _require _ _ ( 11 ) ;
var _StringController2 = _interopRequireDefault ( _StringController ) ;
var _NumberController = _ _webpack _require _ _ ( 12 ) ;
var _NumberController2 = _interopRequireDefault ( _NumberController ) ;
var _NumberControllerBox = _ _webpack _require _ _ ( 13 ) ;
var _NumberControllerBox2 = _interopRequireDefault ( _NumberControllerBox ) ;
var _NumberControllerSlider = _ _webpack _require _ _ ( 14 ) ;
var _NumberControllerSlider2 = _interopRequireDefault ( _NumberControllerSlider ) ;
var _FunctionController = _ _webpack _require _ _ ( 15 ) ;
var _FunctionController2 = _interopRequireDefault ( _FunctionController ) ;
var _ColorController = _ _webpack _require _ _ ( 16 ) ;
var _ColorController2 = _interopRequireDefault ( _ColorController ) ;
var _dom = _ _webpack _require _ _ ( 9 ) ;
var _dom2 = _interopRequireDefault ( _dom ) ;
var _GUI = _ _webpack _require _ _ ( 17 ) ;
var _GUI2 = _interopRequireDefault ( _GUI ) ;
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-15 01:28:21 +00:00
/ * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2016-09-22 23:39:48 +00:00
exports . default = {
2015-08-14 16:30:03 +00:00
color : {
2016-09-22 23:39:48 +00:00
Color : _Color2 . default ,
math : _math2 . default ,
interpret : _interpret2 . default
2015-08-14 16:30:03 +00:00
} ,
controllers : {
2016-09-22 23:39:48 +00:00
Controller : _Controller2 . default ,
BooleanController : _BooleanController2 . default ,
OptionController : _OptionController2 . default ,
StringController : _StringController2 . default ,
NumberController : _NumberController2 . default ,
NumberControllerBox : _NumberControllerBox2 . default ,
NumberControllerSlider : _NumberControllerSlider2 . default ,
FunctionController : _FunctionController2 . default ,
ColorController : _ColorController2 . default
2015-08-14 16:30:03 +00:00
} ,
dom : {
2016-09-22 23:39:48 +00:00
dom : _dom2 . default
2015-08-14 16:30:03 +00:00
} ,
gui : {
2016-09-22 23:39:48 +00:00
GUI : _GUI2 . default
2015-08-14 16:30:03 +00:00
} ,
2016-09-22 23:39:48 +00:00
GUI : _GUI2 . default
2015-08-14 16:30:03 +00:00
} ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 2 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-01 21:07:06 +00:00
var _interpret = _ _webpack _require _ _ ( 3 ) ;
2015-08-14 16:30:03 +00:00
var _interpret2 = _interopRequireDefault ( _interpret ) ;
2016-09-01 21:07:06 +00:00
var _math = _ _webpack _require _ _ ( 6 ) ;
2015-08-14 16:30:03 +00:00
var _math2 = _interopRequireDefault ( _math ) ;
2016-09-01 21:07:06 +00:00
var _toString = _ _webpack _require _ _ ( 4 ) ;
2015-08-14 16:30:03 +00:00
var _toString2 = _interopRequireDefault ( _toString ) ;
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
var Color = function ( ) {
2015-08-14 16:30:03 +00:00
function Color ( ) {
_classCallCheck ( this , Color ) ;
2016-09-22 23:39:48 +00:00
this . _ _state = _interpret2 . default . apply ( this , arguments ) ;
2015-08-14 16:30:03 +00:00
if ( this . _ _state === false ) {
2015-08-14 22:16:18 +00:00
throw new Error ( 'Failed to interpret color arguments' ) ;
2015-08-14 16:30:03 +00:00
}
this . _ _state . a = this . _ _state . a || 1 ;
}
2015-08-14 20:29:30 +00:00
Color . prototype . toString = function toString ( ) {
2016-09-22 23:39:48 +00:00
return ( 0 , _toString2 . default ) ( this ) ;
2015-08-14 20:29:30 +00:00
} ;
2016-11-14 21:15:20 +00:00
Color . prototype . toHexString = function toHexString ( ) {
return ( 0 , _toString2 . default ) ( this , true ) ;
} ;
2015-08-14 20:29:30 +00:00
Color . prototype . toOriginal = function toOriginal ( ) {
return this . _ _state . conversion . write ( this ) ;
} ;
2015-08-14 16:30:03 +00:00
return Color ;
2016-09-22 23:39:48 +00:00
} ( ) ;
2015-08-14 16:30:03 +00:00
2015-08-15 01:28:21 +00:00
function defineRGBComponent ( target , component , componentHexIndex ) {
Object . defineProperty ( target , component , {
get : function get ( ) {
if ( this . _ _state . space === 'RGB' ) {
return this . _ _state [ component ] ;
}
Color . recalculateRGB ( this , component , componentHexIndex ) ;
return this . _ _state [ component ] ;
} ,
set : function set ( v ) {
if ( this . _ _state . space !== 'RGB' ) {
Color . recalculateRGB ( this , component , componentHexIndex ) ;
this . _ _state . space = 'RGB' ;
}
this . _ _state [ component ] = v ;
}
} ) ;
}
function defineHSVComponent ( target , component ) {
Object . defineProperty ( target , component , {
get : function get ( ) {
if ( this . _ _state . space === 'HSV' ) {
return this . _ _state [ component ] ;
}
Color . recalculateHSV ( this ) ;
return this . _ _state [ component ] ;
} ,
set : function set ( v ) {
if ( this . _ _state . space !== 'HSV' ) {
Color . recalculateHSV ( this ) ;
this . _ _state . space = 'HSV' ;
}
this . _ _state [ component ] = v ;
}
} ) ;
}
2015-08-14 16:30:03 +00:00
Color . recalculateRGB = function ( color , component , componentHexIndex ) {
if ( color . _ _state . space === 'HEX' ) {
2016-09-22 23:39:48 +00:00
color . _ _state [ component ] = _math2 . default . component _from _hex ( color . _ _state . hex , componentHexIndex ) ;
2015-08-14 16:30:03 +00:00
} else if ( color . _ _state . space === 'HSV' ) {
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( color . _ _state , _math2 . default . hsv _to _rgb ( color . _ _state . h , color . _ _state . s , color . _ _state . v ) ) ;
2015-08-14 16:30:03 +00:00
} else {
2015-08-14 22:16:18 +00:00
throw new Error ( 'Corrupted color state' ) ;
2015-08-14 16:30:03 +00:00
}
} ;
Color . recalculateHSV = function ( color ) {
2016-09-22 23:39:48 +00:00
var result = _math2 . default . rgb _to _hsv ( color . r , color . g , color . b ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( color . _ _state , {
2015-08-14 16:30:03 +00:00
s : result . s ,
v : result . v
} ) ;
2016-09-22 23:39:48 +00:00
if ( ! _common2 . default . isNaN ( result . h ) ) {
2015-08-14 16:30:03 +00:00
color . _ _state . h = result . h ;
2016-09-22 23:39:48 +00:00
} else if ( _common2 . default . isUndefined ( color . _ _state . h ) ) {
2015-08-14 16:30:03 +00:00
color . _ _state . h = 0 ;
}
} ;
Color . COMPONENTS = [ 'r' , 'g' , 'b' , 'h' , 's' , 'v' , 'hex' , 'a' ] ;
defineRGBComponent ( Color . prototype , 'r' , 2 ) ;
defineRGBComponent ( Color . prototype , 'g' , 1 ) ;
defineRGBComponent ( Color . prototype , 'b' , 0 ) ;
defineHSVComponent ( Color . prototype , 'h' ) ;
defineHSVComponent ( Color . prototype , 's' ) ;
defineHSVComponent ( Color . prototype , 'v' ) ;
Object . defineProperty ( Color . prototype , 'a' , {
get : function get ( ) {
return this . _ _state . a ;
} ,
set : function set ( v ) {
this . _ _state . a = v ;
}
} ) ;
Object . defineProperty ( Color . prototype , 'hex' , {
get : function get ( ) {
if ( ! this . _ _state . space !== 'HEX' ) {
2016-09-22 23:39:48 +00:00
this . _ _state . hex = _math2 . default . rgb _to _hex ( this . r , this . g , this . b ) ;
2015-08-14 16:30:03 +00:00
}
return this . _ _state . hex ;
} ,
set : function set ( v ) {
this . _ _state . space = 'HEX' ;
this . _ _state . hex = v ;
}
} ) ;
2016-09-22 23:39:48 +00:00
exports . default = Color ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 3 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
2016-09-22 23:39:48 +00:00
'use strict' ;
exports . _ _esModule = true ;
var _toString = _ _webpack _require _ _ ( 4 ) ;
var _toString2 = _interopRequireDefault ( _toString ) ;
var _common = _ _webpack _require _ _ ( 5 ) ;
var _common2 = _interopRequireDefault ( _common ) ;
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
/ * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
var INTERPRETATIONS = [
// Strings
{
2016-09-22 23:39:48 +00:00
litmus : _common2 . default . isString ,
2015-08-14 16:30:03 +00:00
conversions : {
THREE _CHAR _HEX : {
read : function read ( original ) {
var test = original . match ( /^#([A-F0-9])([A-F0-9])([A-F0-9])$/i ) ;
2015-08-14 20:29:30 +00:00
if ( test === null ) {
return false ;
}
2015-08-14 16:30:03 +00:00
return {
space : 'HEX' ,
2015-08-14 20:29:30 +00:00
hex : parseInt ( '0x' + test [ 1 ] . toString ( ) + test [ 1 ] . toString ( ) + test [ 2 ] . toString ( ) + test [ 2 ] . toString ( ) + test [ 3 ] . toString ( ) + test [ 3 ] . toString ( ) , 0 )
2015-08-14 16:30:03 +00:00
} ;
} ,
2016-09-22 23:39:48 +00:00
write : _toString2 . default
2015-08-14 16:30:03 +00:00
} ,
SIX _CHAR _HEX : {
read : function read ( original ) {
var test = original . match ( /^#([A-F0-9]{6})$/i ) ;
2015-08-14 20:29:30 +00:00
if ( test === null ) {
return false ;
}
2015-08-14 16:30:03 +00:00
return {
space : 'HEX' ,
2015-08-14 20:29:30 +00:00
hex : parseInt ( '0x' + test [ 1 ] . toString ( ) , 0 )
2015-08-14 16:30:03 +00:00
} ;
} ,
2016-09-22 23:39:48 +00:00
write : _toString2 . default
2015-08-14 16:30:03 +00:00
} ,
CSS _RGB : {
read : function read ( original ) {
var test = original . match ( /^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/ ) ;
2015-08-14 20:29:30 +00:00
if ( test === null ) {
return false ;
}
2015-08-14 16:30:03 +00:00
return {
space : 'RGB' ,
r : parseFloat ( test [ 1 ] ) ,
g : parseFloat ( test [ 2 ] ) ,
b : parseFloat ( test [ 3 ] )
} ;
} ,
2016-09-22 23:39:48 +00:00
write : _toString2 . default
2015-08-14 16:30:03 +00:00
} ,
CSS _RGBA : {
read : function read ( original ) {
2016-09-01 21:07:06 +00:00
var test = original . match ( /^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/ ) ;
2015-08-14 20:29:30 +00:00
if ( test === null ) {
return false ;
}
2015-08-14 16:30:03 +00:00
return {
space : 'RGB' ,
r : parseFloat ( test [ 1 ] ) ,
g : parseFloat ( test [ 2 ] ) ,
b : parseFloat ( test [ 3 ] ) ,
a : parseFloat ( test [ 4 ] )
} ;
} ,
2016-09-22 23:39:48 +00:00
write : _toString2 . default
2015-08-14 16:30:03 +00:00
}
}
} ,
// Numbers
{
2016-09-22 23:39:48 +00:00
litmus : _common2 . default . isNumber ,
2015-08-14 16:30:03 +00:00
conversions : {
HEX : {
read : function read ( original ) {
return {
space : 'HEX' ,
hex : original ,
conversionName : 'HEX'
} ;
} ,
write : function write ( color ) {
return color . hex ;
}
}
}
} ,
// Arrays
{
2016-09-22 23:39:48 +00:00
litmus : _common2 . default . isArray ,
2015-08-14 16:30:03 +00:00
conversions : {
RGB _ARRAY : {
read : function read ( original ) {
2015-08-14 20:29:30 +00:00
if ( original . length !== 3 ) {
return false ;
}
2015-08-14 16:30:03 +00:00
return {
space : 'RGB' ,
r : original [ 0 ] ,
g : original [ 1 ] ,
b : original [ 2 ]
} ;
} ,
write : function write ( color ) {
return [ color . r , color . g , color . b ] ;
}
} ,
RGBA _ARRAY : {
read : function read ( original ) {
2015-08-14 20:29:30 +00:00
if ( original . length !== 4 ) return false ;
2015-08-14 16:30:03 +00:00
return {
space : 'RGB' ,
r : original [ 0 ] ,
g : original [ 1 ] ,
b : original [ 2 ] ,
a : original [ 3 ]
} ;
} ,
write : function write ( color ) {
return [ color . r , color . g , color . b , color . a ] ;
}
}
}
} ,
// Objects
{
2016-09-22 23:39:48 +00:00
litmus : _common2 . default . isObject ,
2015-08-14 16:30:03 +00:00
conversions : {
RGBA _OBJ : {
read : function read ( original ) {
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( original . r ) && _common2 . default . isNumber ( original . g ) && _common2 . default . isNumber ( original . b ) && _common2 . default . isNumber ( original . a ) ) {
2015-08-14 16:30:03 +00:00
return {
space : 'RGB' ,
r : original . r ,
g : original . g ,
b : original . b ,
a : original . a
} ;
}
return false ;
} ,
write : function write ( color ) {
return {
r : color . r ,
g : color . g ,
b : color . b ,
a : color . a
} ;
}
} ,
RGB _OBJ : {
read : function read ( original ) {
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( original . r ) && _common2 . default . isNumber ( original . g ) && _common2 . default . isNumber ( original . b ) ) {
2015-08-14 16:30:03 +00:00
return {
space : 'RGB' ,
r : original . r ,
g : original . g ,
b : original . b
} ;
}
return false ;
} ,
write : function write ( color ) {
return {
r : color . r ,
g : color . g ,
b : color . b
} ;
}
} ,
HSVA _OBJ : {
read : function read ( original ) {
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( original . h ) && _common2 . default . isNumber ( original . s ) && _common2 . default . isNumber ( original . v ) && _common2 . default . isNumber ( original . a ) ) {
2015-08-14 16:30:03 +00:00
return {
space : 'HSV' ,
h : original . h ,
s : original . s ,
v : original . v ,
a : original . a
} ;
}
return false ;
} ,
write : function write ( color ) {
return {
h : color . h ,
s : color . s ,
v : color . v ,
a : color . a
} ;
}
} ,
HSV _OBJ : {
read : function read ( original ) {
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( original . h ) && _common2 . default . isNumber ( original . s ) && _common2 . default . isNumber ( original . v ) ) {
2015-08-14 16:30:03 +00:00
return {
space : 'HSV' ,
h : original . h ,
s : original . s ,
v : original . v
} ;
}
return false ;
} ,
write : function write ( color ) {
return {
h : color . h ,
s : color . s ,
v : color . v
} ;
}
}
}
} ] ;
2016-09-22 23:39:48 +00:00
var result = void 0 ;
var toReturn = void 0 ;
2015-08-14 20:29:30 +00:00
var interpret = function interpret ( ) {
toReturn = false ;
2016-09-22 23:39:48 +00:00
var original = arguments . length > 1 ? _common2 . default . toArray ( arguments ) : arguments [ 0 ] ;
_common2 . default . each ( INTERPRETATIONS , function ( family ) {
2015-08-14 20:29:30 +00:00
if ( family . litmus ( original ) ) {
2016-09-22 23:39:48 +00:00
_common2 . default . each ( family . conversions , function ( conversion , conversionName ) {
2015-08-14 20:29:30 +00:00
result = conversion . read ( original ) ;
if ( toReturn === false && result !== false ) {
toReturn = result ;
result . conversionName = conversionName ;
result . conversion = conversion ;
2016-09-22 23:39:48 +00:00
return _common2 . default . BREAK ;
2015-08-14 20:29:30 +00:00
}
} ) ;
2016-09-22 23:39:48 +00:00
return _common2 . default . BREAK ;
2015-08-14 20:29:30 +00:00
}
} ) ;
return toReturn ;
} ;
2016-09-22 23:39:48 +00:00
exports . default = interpret ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 4 */
2016-11-14 21:15:20 +00:00
/***/ function ( module , exports ) {
2015-08-14 16:30:03 +00:00
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-11-14 21:15:20 +00:00
exports . default = function ( color , forceCSSHex ) {
var colorFormat = color . _ _state . conversionName . toString ( ) ;
var r = Math . round ( color . r ) ;
var g = Math . round ( color . g ) ;
var b = Math . round ( color . b ) ;
var a = color . a ;
var h = Math . round ( color . h ) ;
var s = color . s . toFixed ( 1 ) ;
var v = color . v . toFixed ( 1 ) ;
if ( forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX' ) {
var str = color . hex . toString ( 16 ) ;
while ( str . length < 6 ) {
str = '0' + str ;
}
return '#' + str ;
} else if ( colorFormat === 'CSS_RGB' ) {
return 'rgb(' + r + ',' + g + ',' + b + ')' ;
} else if ( colorFormat === 'CSS_RGBA' ) {
return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')' ;
} else if ( colorFormat === 'HEX' ) {
return '0x' + color . hex . toString ( 16 ) ;
} else if ( colorFormat === 'RGB_ARRAY' ) {
return '[' + r + ',' + g + ',' + b + ']' ;
} else if ( colorFormat === 'RGBA_ARRAY' ) {
return '[' + r + ',' + g + ',' + b + ',' + a + ']' ;
} else if ( colorFormat === 'RGB_OBJ' ) {
return '{r:' + r + ',g:' + g + ',b:' + b + '}' ;
} else if ( colorFormat === 'RGBA_OBJ' ) {
return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}' ;
} else if ( colorFormat === 'HSV_OBJ' ) {
return '{h:' + h + ',s:' + s + ',v:' + v + '}' ;
} else if ( colorFormat === 'HSVA_OBJ' ) {
return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}' ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
2016-11-14 21:15:20 +00:00
return 'unknown format' ;
2015-08-14 16:30:03 +00:00
} ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ; / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 5 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports ) {
2016-09-22 23:39:48 +00:00
'use strict' ;
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
/ * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
var ARR _EACH = Array . prototype . forEach ;
var ARR _SLICE = Array . prototype . slice ;
/ * *
* Band - aid methods for things that should be a lot easier in JavaScript .
* Implementation and structure inspired by underscore . js
* http : //documentcloud.github.com/underscore/
* /
var Common = {
BREAK : { } ,
extend : function extend ( target ) {
this . each ( ARR _SLICE . call ( arguments , 1 ) , function ( obj ) {
2016-09-22 20:31:27 +00:00
var keys = this . isObject ( obj ) ? Object . keys ( obj ) : [ ] ;
2016-09-22 23:39:48 +00:00
keys . forEach ( function ( key ) {
2016-09-22 20:31:27 +00:00
if ( ! this . isUndefined ( obj [ key ] ) ) {
target [ key ] = obj [ key ] ;
}
2016-09-22 23:39:48 +00:00
} . bind ( this ) ) ;
2015-08-14 16:30:03 +00:00
} , this ) ;
return target ;
} ,
defaults : function defaults ( target ) {
this . each ( ARR _SLICE . call ( arguments , 1 ) , function ( obj ) {
2016-09-22 20:31:27 +00:00
var keys = this . isObject ( obj ) ? Object . keys ( obj ) : [ ] ;
2016-09-22 23:39:48 +00:00
keys . forEach ( function ( key ) {
2016-09-22 20:31:27 +00:00
if ( this . isUndefined ( target [ key ] ) ) {
target [ key ] = obj [ key ] ;
}
2016-09-22 23:39:48 +00:00
} . bind ( this ) ) ;
2015-08-14 16:30:03 +00:00
} , this ) ;
return target ;
} ,
compose : function compose ( ) {
var toCall = ARR _SLICE . call ( arguments ) ;
return function ( ) {
var args = ARR _SLICE . call ( arguments ) ;
for ( var i = toCall . length - 1 ; i >= 0 ; i -- ) {
args = [ toCall [ i ] . apply ( this , args ) ] ;
}
return args [ 0 ] ;
} ;
} ,
each : function each ( obj , itr , scope ) {
2015-08-14 20:29:30 +00:00
if ( ! obj ) {
return ;
}
2015-08-14 16:30:03 +00:00
if ( ARR _EACH && obj . forEach && obj . forEach === ARR _EACH ) {
obj . forEach ( itr , scope ) ;
} else if ( obj . length === obj . length + 0 ) {
// Is number but not NaN
2016-09-22 23:39:48 +00:00
var key = void 0 ;
var l = void 0 ;
2015-08-14 20:29:30 +00:00
for ( key = 0 , l = obj . length ; key < l ; key ++ ) {
if ( key in obj && itr . call ( scope , obj [ key ] , key ) === this . BREAK ) {
return ;
}
}
2015-08-14 16:30:03 +00:00
} else {
2016-09-22 23:39:48 +00:00
for ( var _key in obj ) {
if ( itr . call ( scope , obj [ _key ] , _key ) === this . BREAK ) {
2015-08-14 20:29:30 +00:00
return ;
}
2016-09-22 20:31:27 +00:00
}
2015-08-14 16:30:03 +00:00
}
} ,
defer : function defer ( fnc ) {
setTimeout ( fnc , 0 ) ;
} ,
2017-03-17 23:31:28 +00:00
// if the function is called repeatedly, wait until threshold passes until we execute the function
debounce : function debounce ( func , threshold , callImmediately ) {
2016-09-22 23:39:48 +00:00
var timeout = void 0 ;
2016-08-19 00:24:08 +00:00
return function ( ) {
var obj = this ;
var args = arguments ;
function delayed ( ) {
timeout = null ;
2017-03-17 23:31:28 +00:00
if ( ! callImmediately ) func . apply ( obj , args ) ;
2016-08-19 00:24:08 +00:00
}
2017-03-17 23:31:28 +00:00
var callNow = callImmediately || ! timeout ;
2016-08-19 00:24:08 +00:00
clearTimeout ( timeout ) ;
timeout = setTimeout ( delayed , threshold ) ;
2017-03-17 23:31:28 +00:00
if ( callNow ) {
2016-08-19 00:24:08 +00:00
func . apply ( obj , args ) ;
}
} ;
} ,
2015-08-14 16:30:03 +00:00
toArray : function toArray ( obj ) {
if ( obj . toArray ) return obj . toArray ( ) ;
return ARR _SLICE . call ( obj ) ;
} ,
isUndefined : function isUndefined ( obj ) {
return obj === undefined ;
} ,
isNull : function isNull ( obj ) {
return obj === null ;
} ,
2016-09-22 23:39:48 +00:00
isNaN : function ( _isNaN ) {
2015-08-14 20:29:30 +00:00
function isNaN ( _x ) {
return _isNaN . apply ( this , arguments ) ;
}
isNaN . toString = function ( ) {
return _isNaN . toString ( ) ;
} ;
return isNaN ;
2016-09-22 23:39:48 +00:00
} ( function ( obj ) {
2015-08-14 20:29:30 +00:00
return isNaN ( obj ) ;
} ) ,
2015-08-14 16:30:03 +00:00
isArray : Array . isArray || function ( obj ) {
return obj . constructor === Array ;
} ,
isObject : function isObject ( obj ) {
return obj === Object ( obj ) ;
} ,
isNumber : function isNumber ( obj ) {
return obj === obj + 0 ;
} ,
isString : function isString ( obj ) {
return obj === obj + '' ;
} ,
isBoolean : function isBoolean ( obj ) {
return obj === false || obj === true ;
} ,
isFunction : function isFunction ( obj ) {
return Object . prototype . toString . call ( obj ) === '[object Function]' ;
}
} ;
2016-09-22 23:39:48 +00:00
exports . default = Common ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 6 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports ) {
2016-09-22 23:39:48 +00:00
"use strict" ;
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
/ * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2016-09-22 23:39:48 +00:00
var tmpComponent = void 0 ;
2015-08-14 16:30:03 +00:00
var ColorMath = {
hsv _to _rgb : function hsv _to _rgb ( h , s , v ) {
var hi = Math . floor ( h / 60 ) % 6 ;
var f = h / 60 - Math . floor ( h / 60 ) ;
var p = v * ( 1.0 - s ) ;
var q = v * ( 1.0 - f * s ) ;
var t = v * ( 1.0 - ( 1.0 - f ) * s ) ;
2015-08-14 22:16:18 +00:00
2015-08-14 16:30:03 +00:00
var c = [ [ v , t , p ] , [ q , v , p ] , [ p , v , t ] , [ p , q , v ] , [ t , p , v ] , [ v , p , q ] ] [ hi ] ;
return {
r : c [ 0 ] * 255 ,
g : c [ 1 ] * 255 ,
b : c [ 2 ] * 255
} ;
} ,
rgb _to _hsv : function rgb _to _hsv ( r , g , b ) {
2015-08-14 22:16:18 +00:00
var min = Math . min ( r , g , b ) ;
var max = Math . max ( r , g , b ) ;
var delta = max - min ;
2016-09-22 23:39:48 +00:00
var h = void 0 ;
var s = void 0 ;
2015-08-14 16:30:03 +00:00
2015-08-14 22:16:18 +00:00
if ( max !== 0 ) {
2015-08-14 16:30:03 +00:00
s = delta / max ;
} else {
return {
h : NaN ,
s : 0 ,
v : 0
} ;
}
2015-08-14 22:16:18 +00:00
if ( r === max ) {
2015-08-14 16:30:03 +00:00
h = ( g - b ) / delta ;
2015-08-14 22:16:18 +00:00
} else if ( g === max ) {
2015-08-14 16:30:03 +00:00
h = 2 + ( b - r ) / delta ;
} else {
h = 4 + ( r - g ) / delta ;
}
h /= 6 ;
if ( h < 0 ) {
h += 1 ;
}
return {
h : h * 360 ,
s : s ,
v : max / 255
} ;
} ,
rgb _to _hex : function rgb _to _hex ( r , g , b ) {
var hex = this . hex _with _component ( 0 , 2 , r ) ;
hex = this . hex _with _component ( hex , 1 , g ) ;
hex = this . hex _with _component ( hex , 0 , b ) ;
return hex ;
} ,
component _from _hex : function component _from _hex ( hex , componentIndex ) {
return hex >> componentIndex * 8 & 0xFF ;
} ,
hex _with _component : function hex _with _component ( hex , componentIndex , value ) {
return value << ( tmpComponent = componentIndex * 8 ) | hex & ~ ( 0xFF << tmpComponent ) ;
}
} ;
2016-09-22 23:39:48 +00:00
exports . default = ColorMath ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ "default" ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 7 */
2015-08-14 22:16:18 +00:00
/***/ function ( module , exports ) {
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
'use strict' ;
exports . _ _esModule = true ;
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 16:30:03 +00:00
/ * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
/ * *
* @ class An "abstract" class that represents a given property of an object .
*
* @ param { Object } object The object to be manipulated
* @ param { string } property The name of the property to be manipulated
*
* @ member dat . controllers
* /
2016-09-22 23:39:48 +00:00
var Controller = function ( ) {
2015-08-14 16:30:03 +00:00
function Controller ( object , property ) {
_classCallCheck ( this , Controller ) ;
this . initialValue = object [ property ] ;
/ * *
* Those who extend this class will put their DOM elements in here .
* @ type { DOMElement }
* /
this . domElement = document . createElement ( 'div' ) ;
/ * *
* The object to manipulate
* @ type { Object }
* /
this . object = object ;
/ * *
* The name of the property to manipulate
* @ type { String }
* /
this . property = property ;
/ * *
* The function to be called on change .
* @ type { Function }
* @ ignore
* /
this . _ _onChange = undefined ;
/ * *
* The function to be called on finishing change .
* @ type { Function }
* @ ignore
* /
this . _ _onFinishChange = undefined ;
}
/ * *
* Specify that a function fire every time someone changes the value with
* this Controller .
*
* @ param { Function } fnc This function will be called whenever the value
* is modified via this Controller .
2015-08-14 20:29:30 +00:00
* @ returns { Controller } this
2015-08-14 16:30:03 +00:00
* /
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
Controller . prototype . onChange = function onChange ( fnc ) {
this . _ _onChange = fnc ;
return this ;
} ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
/ * *
* Specify that a function fire every time someone "finishes" changing
* the value wih this Controller . Useful for values that change
* incrementally like numbers or strings .
*
* @ param { Function } fnc This function will be called whenever
* someone "finishes" changing the value via this Controller .
* @ returns { Controller } this
* /
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
Controller . prototype . onFinishChange = function onFinishChange ( fnc ) {
this . _ _onFinishChange = fnc ;
return this ;
} ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
/ * *
* Change the value of < code > object [ property ] < / c o d e >
*
* @ param { Object } newValue The new value of < code > object [ property ] < / c o d e >
* /
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
Controller . prototype . setValue = function setValue ( newValue ) {
this . object [ this . property ] = newValue ;
if ( this . _ _onChange ) {
this . _ _onChange . call ( this , newValue ) ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
this . updateDisplay ( ) ;
return this ;
} ;
/ * *
* Gets the value of < code > object [ property ] < / c o d e >
*
* @ returns { Object } The current value of < code > object [ property ] < / c o d e >
* /
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
Controller . prototype . getValue = function getValue ( ) {
return this . object [ this . property ] ;
} ;
/ * *
* Refreshes the visual display of a Controller in order to keep sync
* with the object ' s current value .
* @ returns { Controller } this
* /
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
Controller . prototype . updateDisplay = function updateDisplay ( ) {
return this ;
} ;
/ * *
* @ returns { Boolean } true if the value has deviated from initialValue
* /
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
Controller . prototype . isModified = function isModified ( ) {
return this . initialValue !== this . getValue ( ) ;
} ;
2015-08-14 16:30:03 +00:00
return Controller ;
2016-09-22 23:39:48 +00:00
} ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
exports . default = Controller ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 8 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller2 = _ _webpack _require _ _ ( 7 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller3 = _interopRequireDefault ( _Controller2 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
/ * *
* @ class Provides a checkbox input to alter the boolean property of an object .
* @ extends dat . controllers . Controller
*
* @ param { Object } object The object to be manipulated
* @ param { string } property The name of the property to be manipulated
*
* @ member dat . controllers
* /
2016-09-22 23:39:48 +00:00
var BooleanController = function ( _Controller ) {
2015-08-14 16:30:03 +00:00
_inherits ( BooleanController , _Controller ) ;
function BooleanController ( object , property ) {
_classCallCheck ( this , BooleanController ) ;
2016-09-22 23:39:48 +00:00
var _this2 = _possibleConstructorReturn ( this , _Controller . call ( this , object , property ) ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _this = _this2 ;
_this2 . _ _prev = _this2 . getValue ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _checkbox = document . createElement ( 'input' ) ;
_this2 . _ _checkbox . setAttribute ( 'type' , 'checkbox' ) ;
2015-08-14 16:30:03 +00:00
function onChange ( ) {
_this . setValue ( ! _this . _ _prev ) ;
}
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _checkbox , 'change' , onChange , false ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . domElement . appendChild ( _this2 . _ _checkbox ) ;
2015-08-14 16:30:03 +00:00
// Match original value
2016-09-22 23:39:48 +00:00
_this2 . updateDisplay ( ) ;
return _this2 ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
BooleanController . prototype . setValue = function setValue ( v ) {
var toReturn = _Controller . prototype . setValue . call ( this , v ) ;
if ( this . _ _onFinishChange ) {
this . _ _onFinishChange . call ( this , this . getValue ( ) ) ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
this . _ _prev = this . getValue ( ) ;
return toReturn ;
} ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
BooleanController . prototype . updateDisplay = function updateDisplay ( ) {
if ( this . getValue ( ) === true ) {
this . _ _checkbox . setAttribute ( 'checked' , 'checked' ) ;
this . _ _checkbox . checked = true ;
2017-03-17 23:31:28 +00:00
this . _ _prev = true ;
2015-08-14 20:29:30 +00:00
} else {
this . _ _checkbox . checked = false ;
2017-03-17 23:31:28 +00:00
this . _ _prev = false ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
return _Controller . prototype . updateDisplay . call ( this ) ;
} ;
2015-08-14 16:30:03 +00:00
return BooleanController ;
2016-09-22 23:39:48 +00:00
} ( _Controller3 . default ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
exports . default = BooleanController ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 9 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
var EVENT _MAP = {
2016-09-01 21:07:06 +00:00
HTMLEvents : [ 'change' ] ,
MouseEvents : [ 'click' , 'mousemove' , 'mousedown' , 'mouseup' , 'mouseover' ] ,
KeyboardEvents : [ 'keydown' ]
2016-09-22 23:39:48 +00:00
} ; / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
var EVENT _MAP _INV = { } ;
2016-09-22 23:39:48 +00:00
_common2 . default . each ( EVENT _MAP , function ( v , k ) {
_common2 . default . each ( v , function ( e ) {
2015-08-14 20:29:30 +00:00
EVENT _MAP _INV [ e ] = k ;
} ) ;
} ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
var CSS _VALUE _PIXELS = /(\d+(\.\d+)?)px/ ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
function cssValueToPixels ( val ) {
2016-09-22 23:39:48 +00:00
if ( val === '0' || _common2 . default . isUndefined ( val ) ) {
2015-08-14 22:16:18 +00:00
return 0 ;
}
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
var match = val . match ( CSS _VALUE _PIXELS ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
if ( ! _common2 . default . isNull ( match ) ) {
2015-08-14 20:29:30 +00:00
return parseFloat ( match [ 1 ] ) ;
}
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
// TODO ...ems? %?
return 0 ;
}
2015-08-14 16:30:03 +00:00
/ * *
2015-08-14 20:29:30 +00:00
* @ namespace
* @ member dat . dom
2015-08-14 16:30:03 +00:00
* /
2015-08-14 20:29:30 +00:00
var dom = {
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
/ * *
*
* @ param elem
* @ param selectable
* /
makeSelectable : function makeSelectable ( elem , selectable ) {
if ( elem === undefined || elem . style === undefined ) return ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
elem . onselectstart = selectable ? function ( ) {
return false ;
} : function ( ) { } ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
elem . style . MozUserSelect = selectable ? 'auto' : 'none' ;
elem . style . KhtmlUserSelect = selectable ? 'auto' : 'none' ;
elem . unselectable = selectable ? 'on' : 'off' ;
} ,
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
/ * *
*
* @ param elem
* @ param horizontal
2015-08-14 22:16:18 +00:00
* @ param vert
2015-08-14 20:29:30 +00:00
* /
2015-08-14 22:16:18 +00:00
makeFullscreen : function makeFullscreen ( elem , hor , vert ) {
var vertical = vert ;
var horizontal = hor ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isUndefined ( horizontal ) ) {
2015-08-14 22:16:18 +00:00
horizontal = true ;
}
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isUndefined ( vertical ) ) {
2015-08-14 22:16:18 +00:00
vertical = true ;
}
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
elem . style . position = 'absolute' ;
2015-08-14 16:30:03 +00:00
if ( horizontal ) {
elem . style . left = 0 ;
elem . style . right = 0 ;
}
if ( vertical ) {
elem . style . top = 0 ;
elem . style . bottom = 0 ;
}
} ,
/ * *
*
* @ param elem
* @ param eventType
* @ param params
* /
2015-08-14 22:16:18 +00:00
fakeEvent : function fakeEvent ( elem , eventType , pars , aux ) {
var params = pars || { } ;
2015-08-14 16:30:03 +00:00
var className = EVENT _MAP _INV [ eventType ] ;
if ( ! className ) {
throw new Error ( 'Event type ' + eventType + ' not supported.' ) ;
}
var evt = document . createEvent ( className ) ;
switch ( className ) {
case 'MouseEvents' :
2015-08-14 22:16:18 +00:00
{
var clientX = params . x || params . clientX || 0 ;
var clientY = params . y || params . clientY || 0 ;
evt . initMouseEvent ( eventType , params . bubbles || false , params . cancelable || true , window , params . clickCount || 1 , 0 , // screen X
0 , // screen Y
clientX , // client X
clientY , // client Y
false , false , false , false , 0 , null ) ;
break ;
}
2015-08-14 16:30:03 +00:00
case 'KeyboardEvents' :
2015-08-14 22:16:18 +00:00
{
var init = evt . initKeyboardEvent || evt . initKeyEvent ; // webkit || moz
2016-09-22 23:39:48 +00:00
_common2 . default . defaults ( params , {
2015-08-14 22:16:18 +00:00
cancelable : true ,
ctrlKey : false ,
altKey : false ,
shiftKey : false ,
metaKey : false ,
keyCode : undefined ,
charCode : undefined
} ) ;
init ( eventType , params . bubbles || false , params . cancelable , window , params . ctrlKey , params . altKey , params . shiftKey , params . metaKey , params . keyCode , params . charCode ) ;
break ;
}
2015-08-14 16:30:03 +00:00
default :
2015-08-14 22:16:18 +00:00
{
evt . initEvent ( eventType , params . bubbles || false , params . cancelable || true ) ;
break ;
}
2015-08-14 16:30:03 +00:00
}
2016-09-22 23:39:48 +00:00
_common2 . default . defaults ( evt , aux ) ;
2015-08-14 16:30:03 +00:00
elem . dispatchEvent ( evt ) ;
} ,
/ * *
*
* @ param elem
* @ param event
* @ param func
* @ param bool
* /
2015-08-14 22:16:18 +00:00
bind : function bind ( elem , event , func , newBool ) {
var bool = newBool || false ;
if ( elem . addEventListener ) {
elem . addEventListener ( event , func , bool ) ;
} else if ( elem . attachEvent ) {
elem . attachEvent ( 'on' + event , func ) ;
}
2015-08-14 16:30:03 +00:00
return dom ;
} ,
/ * *
*
* @ param elem
* @ param event
* @ param func
* @ param bool
* /
2015-08-14 22:16:18 +00:00
unbind : function unbind ( elem , event , func , newBool ) {
var bool = newBool || false ;
if ( elem . removeEventListener ) {
elem . removeEventListener ( event , func , bool ) ;
} else if ( elem . detachEvent ) {
elem . detachEvent ( 'on' + event , func ) ;
}
2015-08-14 16:30:03 +00:00
return dom ;
} ,
/ * *
*
* @ param elem
* @ param className
* /
addClass : function addClass ( elem , className ) {
if ( elem . className === undefined ) {
elem . className = className ;
} else if ( elem . className !== className ) {
var classes = elem . className . split ( / +/ ) ;
2015-08-14 22:16:18 +00:00
if ( classes . indexOf ( className ) === - 1 ) {
2015-08-14 16:30:03 +00:00
classes . push ( className ) ;
elem . className = classes . join ( ' ' ) . replace ( /^\s+/ , '' ) . replace ( /\s+$/ , '' ) ;
}
}
return dom ;
} ,
/ * *
*
* @ param elem
* @ param className
* /
removeClass : function removeClass ( elem , className ) {
if ( className ) {
2015-08-14 22:16:18 +00:00
if ( elem . className === className ) {
elem . removeAttribute ( 'class' ) ;
} else {
var classes = elem . className . split ( / +/ ) ;
var index = classes . indexOf ( className ) ;
if ( index !== - 1 ) {
classes . splice ( index , 1 ) ;
elem . className = classes . join ( ' ' ) ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 22:16:18 +00:00
}
2015-08-14 16:30:03 +00:00
} else {
elem . className = undefined ;
}
return dom ;
} ,
hasClass : function hasClass ( elem , className ) {
return new RegExp ( '(?:^|\\s+)' + className + '(?:\\s+|$)' ) . test ( elem . className ) || false ;
} ,
/ * *
*
* @ param elem
* /
getWidth : function getWidth ( elem ) {
var style = getComputedStyle ( elem ) ;
2015-08-14 22:16:18 +00:00
return cssValueToPixels ( style [ 'border-left-width' ] ) + cssValueToPixels ( style [ 'border-right-width' ] ) + cssValueToPixels ( style [ 'padding-left' ] ) + cssValueToPixels ( style [ 'padding-right' ] ) + cssValueToPixels ( style . width ) ;
2015-08-14 16:30:03 +00:00
} ,
/ * *
*
* @ param elem
* /
getHeight : function getHeight ( elem ) {
var style = getComputedStyle ( elem ) ;
2015-08-14 22:16:18 +00:00
return cssValueToPixels ( style [ 'border-top-width' ] ) + cssValueToPixels ( style [ 'border-bottom-width' ] ) + cssValueToPixels ( style [ 'padding-top' ] ) + cssValueToPixels ( style [ 'padding-bottom' ] ) + cssValueToPixels ( style . height ) ;
2015-08-14 16:30:03 +00:00
} ,
/ * *
*
2015-08-14 22:16:18 +00:00
* @ param el
2015-08-14 16:30:03 +00:00
* /
2015-08-14 22:16:18 +00:00
getOffset : function getOffset ( el ) {
var elem = el ;
2015-08-14 16:30:03 +00:00
var offset = { left : 0 , top : 0 } ;
if ( elem . offsetParent ) {
do {
offset . left += elem . offsetLeft ;
offset . top += elem . offsetTop ;
2015-08-14 22:16:18 +00:00
elem = elem . offsetParent ;
} while ( elem ) ;
2015-08-14 16:30:03 +00:00
}
return offset ;
} ,
// http://stackoverflow.com/posts/2684561/revisions
/ * *
*
* @ param elem
* /
isActive : function isActive ( elem ) {
return elem === document . activeElement && ( elem . type || elem . href ) ;
}
} ;
2016-09-22 23:39:48 +00:00
exports . default = dom ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 10 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller2 = _ _webpack _require _ _ ( 7 ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
var _Controller3 = _interopRequireDefault ( _Controller2 ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 20:29:30 +00:00
/ * *
* @ class Provides a select input to alter the property of an object , using a
* list of accepted values .
*
* @ extends dat . controllers . Controller
*
* @ param { Object } object The object to be manipulated
* @ param { string } property The name of the property to be manipulated
* @ param { Object | string [ ] } options A map of labels to acceptable values , or
* a list of acceptable string values .
*
* @ member dat . controllers
* /
2016-09-22 23:39:48 +00:00
var OptionController = function ( _Controller ) {
2015-08-14 20:29:30 +00:00
_inherits ( OptionController , _Controller ) ;
2015-08-14 22:16:18 +00:00
function OptionController ( object , property , opts ) {
2015-08-14 20:29:30 +00:00
_classCallCheck ( this , OptionController ) ;
2016-09-22 23:39:48 +00:00
var _this2 = _possibleConstructorReturn ( this , _Controller . call ( this , object , property ) ) ;
2015-08-14 20:29:30 +00:00
2015-08-14 22:16:18 +00:00
var options = opts ;
2016-09-22 23:39:48 +00:00
var _this = _this2 ;
2015-08-14 20:29:30 +00:00
/ * *
* The drop down menu
* @ ignore
* /
2016-09-22 23:39:48 +00:00
_this2 . _ _select = document . createElement ( 'select' ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isArray ( options ) ) {
2017-04-07 22:15:31 +00:00
var map = { } ;
_common2 . default . each ( options , function ( element ) {
map [ element ] = element ;
} ) ;
options = map ;
2015-08-14 20:29:30 +00:00
}
2016-09-22 23:39:48 +00:00
_common2 . default . each ( options , function ( value , key ) {
2015-08-14 20:29:30 +00:00
var opt = document . createElement ( 'option' ) ;
opt . innerHTML = key ;
opt . setAttribute ( 'value' , value ) ;
_this . _ _select . appendChild ( opt ) ;
} ) ;
// Acknowledge original value
2016-09-22 23:39:48 +00:00
_this2 . updateDisplay ( ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _select , 'change' , function ( ) {
2015-08-14 20:29:30 +00:00
var desiredValue = this . options [ this . selectedIndex ] . value ;
_this . setValue ( desiredValue ) ;
} ) ;
2016-09-22 23:39:48 +00:00
_this2 . domElement . appendChild ( _this2 . _ _select ) ;
return _this2 ;
2015-08-14 20:29:30 +00:00
}
OptionController . prototype . setValue = function setValue ( v ) {
var toReturn = _Controller . prototype . setValue . call ( this , v ) ;
if ( this . _ _onFinishChange ) {
this . _ _onFinishChange . call ( this , this . getValue ( ) ) ;
}
return toReturn ;
} ;
OptionController . prototype . updateDisplay = function updateDisplay ( ) {
2016-09-22 23:39:48 +00:00
if ( _dom2 . default . isActive ( this . _ _select ) ) return this ; // prevent number from updating if user is trying to manually update
2015-08-14 20:29:30 +00:00
this . _ _select . value = this . getValue ( ) ;
return _Controller . prototype . updateDisplay . call ( this ) ;
} ;
return OptionController ;
2016-09-22 23:39:48 +00:00
} ( _Controller3 . default ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
exports . default = OptionController ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 20:29:30 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 11 */
2015-08-14 20:29:30 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller2 = _ _webpack _require _ _ ( 7 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller3 = _interopRequireDefault ( _Controller2 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
/ * *
* @ class Provides a text input to alter the string property of an object .
*
* @ extends dat . controllers . Controller
*
* @ param { Object } object The object to be manipulated
* @ param { string } property The name of the property to be manipulated
*
* @ member dat . controllers
* /
2016-09-22 23:39:48 +00:00
var StringController = function ( _Controller ) {
2015-08-14 16:30:03 +00:00
_inherits ( StringController , _Controller ) ;
function StringController ( object , property ) {
_classCallCheck ( this , StringController ) ;
2016-09-22 23:39:48 +00:00
var _this2 = _possibleConstructorReturn ( this , _Controller . call ( this , object , property ) ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _this = _this2 ;
2015-08-14 16:30:03 +00:00
2015-08-15 01:28:21 +00:00
function onChange ( ) {
_this . setValue ( _this . _ _input . value ) ;
}
function onBlur ( ) {
if ( _this . _ _onFinishChange ) {
_this . _ _onFinishChange . call ( _this , _this . getValue ( ) ) ;
}
}
2016-09-22 23:39:48 +00:00
_this2 . _ _input = document . createElement ( 'input' ) ;
_this2 . _ _input . setAttribute ( 'type' , 'text' ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _input , 'keyup' , onChange ) ;
_dom2 . default . bind ( _this2 . _ _input , 'change' , onChange ) ;
_dom2 . default . bind ( _this2 . _ _input , 'blur' , onBlur ) ;
_dom2 . default . bind ( _this2 . _ _input , 'keydown' , function ( e ) {
2015-08-14 16:30:03 +00:00
if ( e . keyCode === 13 ) {
this . blur ( ) ;
}
} ) ;
2016-09-22 23:39:48 +00:00
_this2 . updateDisplay ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . domElement . appendChild ( _this2 . _ _input ) ;
return _this2 ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
StringController . prototype . updateDisplay = function updateDisplay ( ) {
// Stops the caret from moving on account of:
// keyup -> setValue -> updateDisplay
2016-09-22 23:39:48 +00:00
if ( ! _dom2 . default . isActive ( this . _ _input ) ) {
2015-08-14 20:29:30 +00:00
this . _ _input . value = this . getValue ( ) ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
return _Controller . prototype . updateDisplay . call ( this ) ;
} ;
2015-08-14 16:30:03 +00:00
return StringController ;
2016-09-22 23:39:48 +00:00
} ( _Controller3 . default ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
exports . default = StringController ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 12 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller2 = _ _webpack _require _ _ ( 7 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller3 = _interopRequireDefault ( _Controller2 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
function numDecimals ( x ) {
2015-08-14 22:16:18 +00:00
var _x = x . toString ( ) ;
if ( _x . indexOf ( '.' ) > - 1 ) {
return _x . length - _x . indexOf ( '.' ) - 1 ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 22:16:18 +00:00
return 0 ;
2015-08-14 16:30:03 +00:00
}
/ * *
* @ class Represents a given property of an object that is a number .
*
* @ extends dat . controllers . Controller
*
* @ param { Object } object The object to be manipulated
* @ param { string } property The name of the property to be manipulated
* @ param { Object } [ params ] Optional parameters
* @ param { Number } [ params . min ] Minimum allowed value
* @ param { Number } [ params . max ] Maximum allowed value
* @ param { Number } [ params . step ] Increment by which to change value
*
* @ member dat . controllers
* /
2016-09-22 23:39:48 +00:00
var NumberController = function ( _Controller ) {
2015-08-14 16:30:03 +00:00
_inherits ( NumberController , _Controller ) ;
function NumberController ( object , property , params ) {
_classCallCheck ( this , NumberController ) ;
2016-09-22 23:39:48 +00:00
var _this = _possibleConstructorReturn ( this , _Controller . call ( this , object , property ) ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 22:16:18 +00:00
var _params = params || { } ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this . _ _min = _params . min ;
_this . _ _max = _params . max ;
_this . _ _step = _params . step ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isUndefined ( _this . _ _step ) ) {
if ( _this . initialValue === 0 ) {
_this . _ _impliedStep = 1 ; // What are we, psychics?
2015-08-14 16:30:03 +00:00
} else {
2016-09-22 23:39:48 +00:00
// Hey Doug, check this out.
_this . _ _impliedStep = Math . pow ( 10 , Math . floor ( Math . log ( Math . abs ( _this . initialValue ) ) / Math . LN10 ) ) / 10 ;
}
2015-08-14 16:30:03 +00:00
} else {
2016-09-22 23:39:48 +00:00
_this . _ _impliedStep = _this . _ _step ;
2015-08-14 16:30:03 +00:00
}
2016-09-22 23:39:48 +00:00
_this . _ _precision = numDecimals ( _this . _ _impliedStep ) ;
return _this ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
NumberController . prototype . setValue = function setValue ( v ) {
2015-08-14 22:16:18 +00:00
var _v = v ;
if ( this . _ _min !== undefined && _v < this . _ _min ) {
_v = this . _ _min ;
} else if ( this . _ _max !== undefined && _v > this . _ _max ) {
_v = this . _ _max ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 22:16:18 +00:00
if ( this . _ _step !== undefined && _v % this . _ _step !== 0 ) {
_v = Math . round ( _v / this . _ _step ) * this . _ _step ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 22:16:18 +00:00
return _Controller . prototype . setValue . call ( this , _v ) ;
2015-08-14 20:29:30 +00:00
} ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
/ * *
* Specify a minimum value for < code > object [ property ] < / c o d e > .
*
* @ param { Number } minValue The minimum value for
* < code > object [ property ] < / c o d e >
* @ returns { dat . controllers . NumberController } this
* /
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
NumberController . prototype . min = function min ( v ) {
this . _ _min = v ;
return this ;
} ;
/ * *
* Specify a maximum value for < code > object [ property ] < / c o d e > .
*
* @ param { Number } maxValue The maximum value for
* < code > object [ property ] < / c o d e >
* @ returns { dat . controllers . NumberController } this
* /
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
NumberController . prototype . max = function max ( v ) {
this . _ _max = v ;
return this ;
} ;
/ * *
* Specify a step value that dat . controllers . NumberController
* increments by .
*
* @ param { Number } stepValue The step value for
* dat . controllers . NumberController
* @ default if minimum and maximum specified increment is 1 % of the
* difference otherwise stepValue is 1
* @ returns { dat . controllers . NumberController } this
* /
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
NumberController . prototype . step = function step ( v ) {
this . _ _step = v ;
this . _ _impliedStep = v ;
this . _ _precision = numDecimals ( v ) ;
return this ;
} ;
2015-08-14 16:30:03 +00:00
return NumberController ;
2016-09-22 23:39:48 +00:00
} ( _Controller3 . default ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
exports . default = NumberController ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 13 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _NumberController2 = _ _webpack _require _ _ ( 12 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _NumberController3 = _interopRequireDefault ( _NumberController2 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
function roundToDecimal ( value , decimals ) {
var tenTo = Math . pow ( 10 , decimals ) ;
return Math . round ( value * tenTo ) / tenTo ;
}
/ * *
* @ class Represents a given property of an object that is a number and
* provides an input element with which to manipulate it .
*
* @ extends dat . controllers . Controller
* @ extends dat . controllers . NumberController
*
* @ param { Object } object The object to be manipulated
* @ param { string } property The name of the property to be manipulated
* @ param { Object } [ params ] Optional parameters
* @ param { Number } [ params . min ] Minimum allowed value
* @ param { Number } [ params . max ] Maximum allowed value
* @ param { Number } [ params . step ] Increment by which to change value
*
* @ member dat . controllers
* /
2016-09-22 23:39:48 +00:00
var NumberControllerBox = function ( _NumberController ) {
2015-08-14 16:30:03 +00:00
_inherits ( NumberControllerBox , _NumberController ) ;
function NumberControllerBox ( object , property , params ) {
_classCallCheck ( this , NumberControllerBox ) ;
2016-09-22 23:39:48 +00:00
var _this2 = _possibleConstructorReturn ( this , _NumberController . call ( this , object , property , params ) ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _truncationSuspended = false ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _this = _this2 ;
2015-08-14 16:30:03 +00:00
/ * *
* { Number } Previous mouse y position
* @ ignore
* /
2016-09-22 23:39:48 +00:00
var prevY = void 0 ;
2015-08-14 16:30:03 +00:00
function onChange ( ) {
var attempted = parseFloat ( _this . _ _input . value ) ;
2016-09-22 23:39:48 +00:00
if ( ! _common2 . default . isNaN ( attempted ) ) {
2015-08-14 22:16:18 +00:00
_this . setValue ( attempted ) ;
}
2015-08-14 16:30:03 +00:00
}
2016-11-14 21:15:20 +00:00
function onFinish ( ) {
2015-08-14 16:30:03 +00:00
if ( _this . _ _onFinishChange ) {
_this . _ _onFinishChange . call ( _this , _this . getValue ( ) ) ;
}
}
2016-11-14 21:15:20 +00:00
function onBlur ( ) {
onFinish ( ) ;
}
2016-08-17 23:32:48 +00:00
2016-11-14 21:15:20 +00:00
function onMouseDrag ( e ) {
2015-08-14 22:16:18 +00:00
var diff = prevY - e . clientY ;
2015-08-14 16:30:03 +00:00
_this . setValue ( _this . getValue ( ) + diff * _this . _ _impliedStep ) ;
2015-08-14 22:16:18 +00:00
prevY = e . clientY ;
2015-08-14 16:30:03 +00:00
}
function onMouseUp ( ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . unbind ( window , 'mousemove' , onMouseDrag ) ;
_dom2 . default . unbind ( window , 'mouseup' , onMouseUp ) ;
2016-11-14 21:15:20 +00:00
onFinish ( ) ;
2015-08-14 16:30:03 +00:00
}
2015-08-15 01:28:21 +00:00
function onMouseDown ( e ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( window , 'mousemove' , onMouseDrag ) ;
_dom2 . default . bind ( window , 'mouseup' , onMouseUp ) ;
2015-08-15 01:28:21 +00:00
prevY = e . clientY ;
}
2016-09-22 23:39:48 +00:00
_this2 . _ _input = document . createElement ( 'input' ) ;
_this2 . _ _input . setAttribute ( 'type' , 'text' ) ;
2015-08-15 01:28:21 +00:00
// Makes it so manually specified values are not truncated.
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _input , 'change' , onChange ) ;
_dom2 . default . bind ( _this2 . _ _input , 'blur' , onBlur ) ;
_dom2 . default . bind ( _this2 . _ _input , 'mousedown' , onMouseDown ) ;
_dom2 . default . bind ( _this2 . _ _input , 'keydown' , function ( e ) {
2016-11-14 21:15:20 +00:00
// When pressing enter, you can be as precise as you want.
2015-08-15 01:28:21 +00:00
if ( e . keyCode === 13 ) {
_this . _ _truncationSuspended = true ;
this . blur ( ) ;
_this . _ _truncationSuspended = false ;
2016-11-14 21:15:20 +00:00
onFinish ( ) ;
2015-08-15 01:28:21 +00:00
}
} ) ;
2016-09-22 23:39:48 +00:00
_this2 . updateDisplay ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . domElement . appendChild ( _this2 . _ _input ) ;
return _this2 ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
NumberControllerBox . prototype . updateDisplay = function updateDisplay ( ) {
this . _ _input . value = this . _ _truncationSuspended ? this . getValue ( ) : roundToDecimal ( this . getValue ( ) , this . _ _precision ) ;
return _NumberController . prototype . updateDisplay . call ( this ) ;
} ;
2015-08-14 16:30:03 +00:00
return NumberControllerBox ;
2016-09-22 23:39:48 +00:00
} ( _NumberController3 . default ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
exports . default = NumberControllerBox ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 14 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _NumberController2 = _ _webpack _require _ _ ( 12 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _NumberController3 = _interopRequireDefault ( _NumberController2 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
function map ( v , i1 , i2 , o1 , o2 ) {
return o1 + ( o2 - o1 ) * ( ( v - i1 ) / ( i2 - i1 ) ) ;
}
/ * *
* @ class Represents a given property of an object that is a number , contains
* a minimum and maximum , and provides a slider element with which to
* manipulate it . It should be noted that the slider element is made up of
* < code > & lt ; div & gt ; < / c o d e > t a g s , < s t r o n g > n o t < / s t r o n g > t h e h t m l 5
* < code > & lt ; slider & gt ; < / c o d e > e l e m e n t .
*
* @ extends dat . controllers . Controller
* @ extends dat . controllers . NumberController
*
* @ param { Object } object The object to be manipulated
* @ param { string } property The name of the property to be manipulated
* @ param { Number } minValue Minimum allowed value
* @ param { Number } maxValue Maximum allowed value
* @ param { Number } stepValue Increment by which to change value
*
* @ member dat . controllers
* /
2016-09-22 23:39:48 +00:00
var NumberControllerSlider = function ( _NumberController ) {
2015-08-14 16:30:03 +00:00
_inherits ( NumberControllerSlider , _NumberController ) ;
function NumberControllerSlider ( object , property , min , max , step ) {
_classCallCheck ( this , NumberControllerSlider ) ;
2016-09-22 23:39:48 +00:00
var _this2 = _possibleConstructorReturn ( this , _NumberController . call ( this , object , property , { min : min , max : max , step : step } ) ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _this = _this2 ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _background = document . createElement ( 'div' ) ;
_this2 . _ _foreground = document . createElement ( 'div' ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _background , 'mousedown' , onMouseDown ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( _this2 . _ _background , 'slider' ) ;
_dom2 . default . addClass ( _this2 . _ _foreground , 'slider-fg' ) ;
2015-08-14 16:30:03 +00:00
function onMouseDown ( e ) {
2016-08-17 23:32:48 +00:00
document . activeElement . blur ( ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( window , 'mousemove' , onMouseDrag ) ;
_dom2 . default . bind ( window , 'mouseup' , onMouseUp ) ;
2015-08-14 16:30:03 +00:00
onMouseDrag ( e ) ;
}
function onMouseDrag ( e ) {
e . preventDefault ( ) ;
2016-10-05 20:00:05 +00:00
var bgRect = _this . _ _background . getBoundingClientRect ( ) ;
2015-08-14 16:30:03 +00:00
2016-10-05 20:00:05 +00:00
_this . setValue ( map ( e . clientX , bgRect . left , bgRect . right , _this . _ _min , _this . _ _max ) ) ;
2015-08-14 16:30:03 +00:00
return false ;
}
function onMouseUp ( ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . unbind ( window , 'mousemove' , onMouseDrag ) ;
_dom2 . default . unbind ( window , 'mouseup' , onMouseUp ) ;
2015-08-14 16:30:03 +00:00
if ( _this . _ _onFinishChange ) {
_this . _ _onFinishChange . call ( _this , _this . getValue ( ) ) ;
}
}
2016-09-22 23:39:48 +00:00
_this2 . updateDisplay ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _background . appendChild ( _this2 . _ _foreground ) ;
_this2 . domElement . appendChild ( _this2 . _ _background ) ;
return _this2 ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
NumberControllerSlider . prototype . updateDisplay = function updateDisplay ( ) {
var pct = ( this . getValue ( ) - this . _ _min ) / ( this . _ _max - this . _ _min ) ;
this . _ _foreground . style . width = pct * 100 + '%' ;
return _NumberController . prototype . updateDisplay . call ( this ) ;
} ;
2015-08-14 16:30:03 +00:00
return NumberControllerSlider ;
2016-09-22 23:39:48 +00:00
} ( _NumberController3 . default ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
exports . default = NumberControllerSlider ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 15 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller2 = _ _webpack _require _ _ ( 7 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller3 = _interopRequireDefault ( _Controller2 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
/ * *
* @ class Provides a GUI interface to fire a specified method , a property of an object .
*
* @ extends dat . controllers . Controller
*
* @ param { Object } object The object to be manipulated
* @ param { string } property The name of the property to be manipulated
*
* @ member dat . controllers
* /
2016-09-22 23:39:48 +00:00
var FunctionController = function ( _Controller ) {
2015-08-14 16:30:03 +00:00
_inherits ( FunctionController , _Controller ) ;
function FunctionController ( object , property , text ) {
_classCallCheck ( this , FunctionController ) ;
2016-09-22 23:39:48 +00:00
var _this2 = _possibleConstructorReturn ( this , _Controller . call ( this , object , property ) ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _this = _this2 ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _button = document . createElement ( 'div' ) ;
_this2 . _ _button . innerHTML = text === undefined ? 'Fire' : text ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _button , 'click' , function ( e ) {
2015-08-14 16:30:03 +00:00
e . preventDefault ( ) ;
_this . fire ( ) ;
return false ;
} ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( _this2 . _ _button , 'button' ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . domElement . appendChild ( _this2 . _ _button ) ;
return _this2 ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
FunctionController . prototype . fire = function fire ( ) {
if ( this . _ _onChange ) {
this . _ _onChange . call ( this ) ;
}
this . getValue ( ) . call ( this . object ) ;
if ( this . _ _onFinishChange ) {
this . _ _onFinishChange . call ( this , this . getValue ( ) ) ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
} ;
2015-08-14 16:30:03 +00:00
return FunctionController ;
2016-09-22 23:39:48 +00:00
} ( _Controller3 . default ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
exports . default = FunctionController ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 16 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller2 = _ _webpack _require _ _ ( 7 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller3 = _interopRequireDefault ( _Controller2 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Color = _ _webpack _require _ _ ( 2 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Color2 = _interopRequireDefault ( _Color ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _interpret = _ _webpack _require _ _ ( 3 ) ;
var _interpret2 = _interopRequireDefault ( _interpret ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _possibleConstructorReturn ( self , call ) { if ( ! self ) { throw new ReferenceError ( "this hasn't been initialised - super() hasn't been called" ) ; } return call && ( typeof call === "object" || typeof call === "function" ) ? call : self ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var ColorController = function ( _Controller ) {
2015-08-14 16:30:03 +00:00
_inherits ( ColorController , _Controller ) ;
function ColorController ( object , property ) {
_classCallCheck ( this , ColorController ) ;
2016-09-22 23:39:48 +00:00
var _this2 = _possibleConstructorReturn ( this , _Controller . call ( this , object , property ) ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _color = new _Color2 . default ( _this2 . getValue ( ) ) ;
_this2 . _ _temp = new _Color2 . default ( 0 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _this = _this2 ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . domElement = document . createElement ( 'div' ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . makeSelectable ( _this2 . domElement , false ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _selector = document . createElement ( 'div' ) ;
_this2 . _ _selector . className = 'selector' ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _saturation _field = document . createElement ( 'div' ) ;
_this2 . _ _saturation _field . className = 'saturation-field' ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _field _knob = document . createElement ( 'div' ) ;
_this2 . _ _field _knob . className = 'field-knob' ;
_this2 . _ _field _knob _border = '2px solid ' ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _hue _knob = document . createElement ( 'div' ) ;
_this2 . _ _hue _knob . className = 'hue-knob' ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _hue _field = document . createElement ( 'div' ) ;
_this2 . _ _hue _field . className = 'hue-field' ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . _ _input = document . createElement ( 'input' ) ;
_this2 . _ _input . type = 'text' ;
_this2 . _ _input _textShadow = '0 1px 1px ' ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _input , 'keydown' , function ( e ) {
2015-08-14 16:30:03 +00:00
if ( e . keyCode === 13 ) {
// on enter
onBlur . call ( this ) ;
}
} ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _input , 'blur' , onBlur ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _selector , 'mousedown' , function ( ) /* e */ {
_dom2 . default . addClass ( this , 'drag' ) . bind ( window , 'mouseup' , function ( ) /* e */ {
_dom2 . default . removeClass ( _this . _ _selector , 'drag' ) ;
2015-08-14 16:30:03 +00:00
} ) ;
} ) ;
2015-08-14 22:16:18 +00:00
var valueField = document . createElement ( 'div' ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( _this2 . _ _selector . style , {
2015-08-14 16:30:03 +00:00
width : '122px' ,
height : '102px' ,
padding : '3px' ,
backgroundColor : '#222' ,
boxShadow : '0px 1px 3px rgba(0,0,0,0.3)'
} ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( _this2 . _ _field _knob . style , {
2015-08-14 16:30:03 +00:00
position : 'absolute' ,
width : '12px' ,
height : '12px' ,
2016-09-22 23:39:48 +00:00
border : _this2 . _ _field _knob _border + ( _this2 . _ _color . v < 0.5 ? '#fff' : '#000' ) ,
2015-08-14 16:30:03 +00:00
boxShadow : '0px 1px 3px rgba(0,0,0,0.5)' ,
borderRadius : '12px' ,
zIndex : 1
} ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( _this2 . _ _hue _knob . style , {
2015-08-14 16:30:03 +00:00
position : 'absolute' ,
width : '15px' ,
height : '2px' ,
borderRight : '4px solid #fff' ,
zIndex : 1
} ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( _this2 . _ _saturation _field . style , {
2015-08-14 16:30:03 +00:00
width : '100px' ,
height : '100px' ,
border : '1px solid #555' ,
marginRight : '3px' ,
display : 'inline-block' ,
cursor : 'pointer'
} ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( valueField . style , {
2015-08-14 16:30:03 +00:00
width : '100%' ,
height : '100%' ,
background : 'none'
} ) ;
2015-08-14 22:16:18 +00:00
linearGradient ( valueField , 'top' , 'rgba(0,0,0,0)' , '#000' ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( _this2 . _ _hue _field . style , {
2015-08-14 16:30:03 +00:00
width : '15px' ,
height : '100px' ,
border : '1px solid #555' ,
2016-08-18 22:31:37 +00:00
cursor : 'ns-resize' ,
position : 'absolute' ,
top : '3px' ,
right : '3px'
2015-08-14 16:30:03 +00:00
} ) ;
2016-09-22 23:39:48 +00:00
hueGradient ( _this2 . _ _hue _field ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( _this2 . _ _input . style , {
2015-08-14 16:30:03 +00:00
outline : 'none' ,
// width: '120px',
textAlign : 'center' ,
// padding: '4px',
// marginBottom: '6px',
color : '#fff' ,
border : 0 ,
fontWeight : 'bold' ,
2016-09-22 23:39:48 +00:00
textShadow : _this2 . _ _input _textShadow + 'rgba(0,0,0,0.7)'
2015-08-14 16:30:03 +00:00
} ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _saturation _field , 'mousedown' , fieldDown ) ;
_dom2 . default . bind ( _this2 . _ _field _knob , 'mousedown' , fieldDown ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( _this2 . _ _hue _field , 'mousedown' , function ( e ) {
2015-08-14 16:30:03 +00:00
setH ( e ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( window , 'mousemove' , setH ) ;
_dom2 . default . bind ( window , 'mouseup' , fieldUpH ) ;
2015-08-14 16:30:03 +00:00
} ) ;
function fieldDown ( e ) {
setSV ( e ) ;
// document.body.style.cursor = 'none';
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( window , 'mousemove' , setSV ) ;
_dom2 . default . bind ( window , 'mouseup' , fieldUpSV ) ;
2015-08-14 16:30:03 +00:00
}
2016-08-18 22:31:37 +00:00
function fieldUpSV ( ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . unbind ( window , 'mousemove' , setSV ) ;
_dom2 . default . unbind ( window , 'mouseup' , fieldUpSV ) ;
2015-08-14 16:30:03 +00:00
// document.body.style.cursor = 'default';
2016-08-18 22:31:37 +00:00
onFinish ( ) ;
2015-08-14 16:30:03 +00:00
}
function onBlur ( ) {
2016-09-22 23:39:48 +00:00
var i = ( 0 , _interpret2 . default ) ( this . value ) ;
2015-08-14 16:30:03 +00:00
if ( i !== false ) {
_this . _ _color . _ _state = i ;
_this . setValue ( _this . _ _color . toOriginal ( ) ) ;
} else {
this . value = _this . _ _color . toString ( ) ;
}
}
2016-08-18 22:31:37 +00:00
function fieldUpH ( ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . unbind ( window , 'mousemove' , setH ) ;
_dom2 . default . unbind ( window , 'mouseup' , fieldUpH ) ;
2016-08-18 22:31:37 +00:00
onFinish ( ) ;
}
function onFinish ( ) {
if ( _this . _ _onFinishChange ) {
2016-11-14 21:15:20 +00:00
_this . _ _onFinishChange . call ( _this , _this . _ _color . toOriginal ( ) ) ;
2016-08-18 22:31:37 +00:00
}
2015-08-14 16:30:03 +00:00
}
2016-09-22 23:39:48 +00:00
_this2 . _ _saturation _field . appendChild ( valueField ) ;
_this2 . _ _selector . appendChild ( _this2 . _ _field _knob ) ;
_this2 . _ _selector . appendChild ( _this2 . _ _saturation _field ) ;
_this2 . _ _selector . appendChild ( _this2 . _ _hue _field ) ;
_this2 . _ _hue _field . appendChild ( _this2 . _ _hue _knob ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . domElement . appendChild ( _this2 . _ _input ) ;
_this2 . domElement . appendChild ( _this2 . _ _selector ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_this2 . updateDisplay ( ) ;
2015-08-14 16:30:03 +00:00
function setSV ( e ) {
e . preventDefault ( ) ;
2016-10-05 20:00:05 +00:00
var fieldRect = _this . _ _saturation _field . getBoundingClientRect ( ) ;
var s = ( e . clientX - fieldRect . left ) / ( fieldRect . right - fieldRect . left ) ;
var v = 1 - ( e . clientY - fieldRect . top ) / ( fieldRect . bottom - fieldRect . top ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 22:16:18 +00:00
if ( v > 1 ) {
v = 1 ;
} else if ( v < 0 ) {
v = 0 ;
}
2015-08-14 16:30:03 +00:00
2015-08-14 22:16:18 +00:00
if ( s > 1 ) {
s = 1 ;
} else if ( s < 0 ) {
s = 0 ;
}
2015-08-14 16:30:03 +00:00
_this . _ _color . v = v ;
_this . _ _color . s = s ;
_this . setValue ( _this . _ _color . toOriginal ( ) ) ;
return false ;
}
function setH ( e ) {
e . preventDefault ( ) ;
2016-10-05 20:00:05 +00:00
var fieldRect = _this . _ _hue _field . getBoundingClientRect ( ) ;
var h = 1 - ( e . clientY - fieldRect . top ) / ( fieldRect . bottom - fieldRect . top ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 22:16:18 +00:00
if ( h > 1 ) {
h = 1 ;
} else if ( h < 0 ) {
h = 0 ;
}
2015-08-14 16:30:03 +00:00
_this . _ _color . h = h * 360 ;
_this . setValue ( _this . _ _color . toOriginal ( ) ) ;
return false ;
}
2016-09-22 23:39:48 +00:00
return _this2 ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
ColorController . prototype . updateDisplay = function updateDisplay ( ) {
2016-09-22 23:39:48 +00:00
var i = ( 0 , _interpret2 . default ) ( this . getValue ( ) ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
if ( i !== false ) {
var mismatch = false ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
// Check for mismatch on the interpreted value.
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . each ( _Color2 . default . COMPONENTS , function ( component ) {
if ( ! _common2 . default . isUndefined ( i [ component ] ) && ! _common2 . default . isUndefined ( this . _ _color . _ _state [ component ] ) && i [ component ] !== this . _ _color . _ _state [ component ] ) {
2015-08-14 20:29:30 +00:00
mismatch = true ;
return { } ; // break
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
} , this ) ;
// If nothing diverges, we keep our previous values
// for statefulness, otherwise we recalculate fresh
if ( mismatch ) {
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( this . _ _color . _ _state , i ) ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 20:29:30 +00:00
}
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( this . _ _temp . _ _state , this . _ _color . _ _state ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
this . _ _temp . a = 1 ;
2015-08-14 16:30:03 +00:00
2015-08-14 22:16:18 +00:00
var flip = this . _ _color . v < 0.5 || this . _ _color . s > 0.5 ? 255 : 0 ;
2015-08-14 20:29:30 +00:00
var _flip = 255 - flip ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( this . _ _field _knob . style , {
2015-08-14 20:29:30 +00:00
marginLeft : 100 * this . _ _color . s - 7 + 'px' ,
marginTop : 100 * ( 1 - this . _ _color . v ) - 7 + 'px' ,
2016-11-14 21:15:20 +00:00
backgroundColor : this . _ _temp . toHexString ( ) ,
2015-08-14 20:29:30 +00:00
border : this . _ _field _knob _border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'
} ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
this . _ _hue _knob . style . marginTop = ( 1 - this . _ _color . h / 360 ) * 100 + 'px' ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
this . _ _temp . s = 1 ;
this . _ _temp . v = 1 ;
2015-08-14 16:30:03 +00:00
2016-11-14 21:15:20 +00:00
linearGradient ( this . _ _saturation _field , 'left' , '#fff' , this . _ _temp . toHexString ( ) ) ;
this . _ _input . value = this . _ _color . toString ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( this . _ _input . style , {
2016-11-14 21:15:20 +00:00
backgroundColor : this . _ _color . toHexString ( ) ,
2015-08-14 20:29:30 +00:00
color : 'rgb(' + flip + ',' + flip + ',' + flip + ')' ,
textShadow : this . _ _input _textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'
} ) ;
} ;
2015-08-14 16:30:03 +00:00
return ColorController ;
2016-09-22 23:39:48 +00:00
} ( _Controller3 . default ) ;
2015-08-14 16:30:03 +00:00
var vendors = [ '-moz-' , '-o-' , '-webkit-' , '-ms-' , '' ] ;
function linearGradient ( elem , x , a , b ) {
elem . style . background = '' ;
2016-09-22 23:39:48 +00:00
_common2 . default . each ( vendors , function ( vendor ) {
2015-08-14 16:30:03 +00:00
elem . style . cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ' ;
} ) ;
}
function hueGradient ( elem ) {
elem . style . background = '' ;
elem . style . cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);' ;
elem . style . cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);' ;
elem . style . cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);' ;
elem . style . cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);' ;
elem . style . cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);' ;
}
2016-09-22 23:39:48 +00:00
exports . default = ColorController ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 17 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2017-04-07 22:15:31 +00:00
exports . _ _esModule = true ;
var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ; / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _css = _ _webpack _require _ _ ( 18 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _css2 = _interopRequireDefault ( _css ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _saveDialogue = _ _webpack _require _ _ ( 19 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _saveDialogue2 = _interopRequireDefault ( _saveDialogue ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _ControllerFactory = _ _webpack _require _ _ ( 20 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _ControllerFactory2 = _interopRequireDefault ( _ControllerFactory ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller = _ _webpack _require _ _ ( 7 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _Controller2 = _interopRequireDefault ( _Controller ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _BooleanController = _ _webpack _require _ _ ( 8 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _BooleanController2 = _interopRequireDefault ( _BooleanController ) ;
var _FunctionController = _ _webpack _require _ _ ( 15 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _FunctionController2 = _interopRequireDefault ( _FunctionController ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _NumberControllerBox = _ _webpack _require _ _ ( 13 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _NumberControllerBox2 = _interopRequireDefault ( _NumberControllerBox ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _NumberControllerSlider = _ _webpack _require _ _ ( 14 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _NumberControllerSlider2 = _interopRequireDefault ( _NumberControllerSlider ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _ColorController = _ _webpack _require _ _ ( 16 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _ColorController2 = _interopRequireDefault ( _ColorController ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _requestAnimationFrame = _ _webpack _require _ _ ( 21 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _requestAnimationFrame2 = _interopRequireDefault ( _requestAnimationFrame ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _CenteredDiv = _ _webpack _require _ _ ( 22 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _CenteredDiv2 = _interopRequireDefault ( _CenteredDiv ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _style = _ _webpack _require _ _ ( 23 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _style2 = _interopRequireDefault ( _style ) ;
2016-08-30 22:48:51 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2016-08-30 22:48:51 +00:00
// CSS to embed in build
2016-09-22 23:39:48 +00:00
_css2 . default . inject ( _style2 . default ) ;
2015-08-14 16:30:03 +00:00
/** Outer-most className for GUI's */
var CSS _NAMESPACE = 'dg' ;
var HIDE _KEY _CODE = 72 ;
/** The only value shared between the JS and SCSS. Use caution. */
var CLOSE _BUTTON _HEIGHT = 20 ;
var DEFAULT _DEFAULT _PRESET _NAME = 'Default' ;
2016-09-22 23:39:48 +00:00
var SUPPORTS _LOCAL _STORAGE = function ( ) {
2015-08-14 16:30:03 +00:00
try {
2015-08-14 22:16:18 +00:00
return 'localStorage' in window && window . localStorage !== null ;
2015-08-14 16:30:03 +00:00
} catch ( e ) {
return false ;
}
2016-09-22 23:39:48 +00:00
} ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var SAVE _DIALOGUE = void 0 ;
2015-08-14 16:30:03 +00:00
/** Have we yet to create an autoPlace GUI? */
2015-08-14 22:16:18 +00:00
var autoPlaceVirgin = true ;
2015-08-14 16:30:03 +00:00
/** Fixed position div that auto place GUI's go inside */
2016-09-22 23:39:48 +00:00
var autoPlaceContainer = void 0 ;
2015-08-14 16:30:03 +00:00
/** Are we hiding the GUI's ? */
var hide = false ;
/** GUI's which should be hidden */
2015-08-14 22:16:18 +00:00
var hideableGuis = [ ] ;
2015-08-14 16:30:03 +00:00
/ * *
* A lightweight controller library for JavaScript . It allows you to easily
* manipulate variables and fire functions on the fly .
* @ class
*
* @ member dat . gui
*
* @ param { Object } [ params ]
* @ param { String } [ params . name ] The name of this GUI .
* @ param { Object } [ params . load ] JSON object representing the saved state of
* this GUI .
* @ param { Boolean } [ params . auto = true ]
* @ param { dat . gui . GUI } [ params . parent ] The GUI I ' m nested in .
* @ param { Boolean } [ params . closed ] If true , starts closed
2017-03-17 23:31:28 +00:00
* @ param { Boolean } [ params . closeOnTop ] If true , close / open button shows on top of the GUI
2015-08-14 16:30:03 +00:00
* /
2015-08-14 22:16:18 +00:00
var GUI = function GUI ( pars ) {
2015-08-14 16:30:03 +00:00
var _this = this ;
2015-08-14 22:16:18 +00:00
var params = pars || { } ;
2015-08-14 16:30:03 +00:00
/ * *
* Outermost DOM Element
* @ type DOMElement
* /
this . domElement = document . createElement ( 'div' ) ;
this . _ _ul = document . createElement ( 'ul' ) ;
this . domElement . appendChild ( this . _ _ul ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( this . domElement , CSS _NAMESPACE ) ;
2015-08-14 16:30:03 +00:00
/ * *
* Nested GUI ' s by name
* @ ignore
* /
this . _ _folders = { } ;
this . _ _controllers = [ ] ;
/ * *
* List of objects I ' m remembering for save , only used in top level GUI
* @ ignore
* /
this . _ _rememberedObjects = [ ] ;
/ * *
* Maps the index of remembered objects to a map of controllers , only used
* in top level GUI .
*
* @ private
* @ ignore
*
* @ example
* [
* {
* propertyName : Controller ,
* anotherPropertyName : Controller
* } ,
* {
* propertyName : Controller
* }
* ]
* /
this . _ _rememberedObjectIndecesToControllers = [ ] ;
this . _ _listening = [ ] ;
// Default parameters
2016-09-22 23:39:48 +00:00
params = _common2 . default . defaults ( params , {
2017-03-17 23:31:28 +00:00
closeOnTop : false ,
2015-08-14 16:30:03 +00:00
autoPlace : true ,
width : GUI . DEFAULT _WIDTH
} ) ;
2016-09-22 23:39:48 +00:00
params = _common2 . default . defaults ( params , {
2015-08-14 16:30:03 +00:00
resizable : params . autoPlace ,
hideable : params . autoPlace
} ) ;
2016-09-22 23:39:48 +00:00
if ( ! _common2 . default . isUndefined ( params . load ) ) {
2015-08-14 16:30:03 +00:00
// Explicit preset
2015-08-14 20:29:30 +00:00
if ( params . preset ) {
params . load . preset = params . preset ;
}
2015-08-14 16:30:03 +00:00
} else {
params . load = { preset : DEFAULT _DEFAULT _PRESET _NAME } ;
}
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isUndefined ( params . parent ) && params . hideable ) {
2015-08-14 22:16:18 +00:00
hideableGuis . push ( this ) ;
2015-08-14 16:30:03 +00:00
}
// Only root level GUI's are resizable.
2016-09-22 23:39:48 +00:00
params . resizable = _common2 . default . isUndefined ( params . parent ) && params . resizable ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
if ( params . autoPlace && _common2 . default . isUndefined ( params . scrollable ) ) {
2015-08-14 16:30:03 +00:00
params . scrollable = true ;
}
// params.scrollable = common.isUndefined(params.parent) && params.scrollable === true;
// Not part of params because I don't want people passing this in via
// constructor. Should be a 'remembered' value.
2015-08-14 22:16:18 +00:00
var useLocalStorage = SUPPORTS _LOCAL _STORAGE && localStorage . getItem ( getLocalStorageHash ( this , 'isLocal' ) ) === 'true' ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var saveToLocalStorage = void 0 ;
2015-08-14 16:30:03 +00:00
Object . defineProperties ( this ,
/** @lends dat.gui.GUI.prototype */
{
/ * *
* The parent < code > GUI < / c o d e >
* @ type dat . gui . GUI
* /
parent : {
get : function get ( ) {
return params . parent ;
}
} ,
scrollable : {
get : function get ( ) {
return params . scrollable ;
}
} ,
/ * *
* Handles < code > GUI < / c o d e > ' s e l e m e n t p l a c e m e n t f o r y o u
* @ type Boolean
* /
autoPlace : {
get : function get ( ) {
return params . autoPlace ;
}
} ,
2017-03-17 23:31:28 +00:00
/ * *
* Handles < code > GUI < / c o d e > ' s p o s i t i o n o f o p e n / c l o s e b u t t o n
* @ type Boolean
* /
closeOnTop : {
get : function get ( ) {
return params . closeOnTop ;
}
} ,
2015-08-14 16:30:03 +00:00
/ * *
* The identifier for a set of saved values
* @ type String
* /
preset : {
get : function get ( ) {
if ( _this . parent ) {
return _this . getRoot ( ) . preset ;
}
2015-08-14 22:16:18 +00:00
return params . load . preset ;
2015-08-14 16:30:03 +00:00
} ,
set : function set ( v ) {
if ( _this . parent ) {
_this . getRoot ( ) . preset = v ;
} else {
params . load . preset = v ;
}
setPresetSelectIndex ( this ) ;
_this . revert ( ) ;
}
} ,
/ * *
* The width of < code > GUI < / c o d e > e l e m e n t
* @ type Number
* /
width : {
get : function get ( ) {
return params . width ;
} ,
set : function set ( v ) {
params . width = v ;
setWidth ( _this , v ) ;
}
} ,
/ * *
* The name of < code > GUI < / c o d e > . U s e d f o r f o l d e r s . i . e
* a folder ' s name
* @ type String
* /
name : {
get : function get ( ) {
return params . name ;
} ,
set : function set ( v ) {
// TODO Check for collisions among sibling folders
params . name = v ;
2015-08-14 22:16:18 +00:00
if ( titleRowName ) {
titleRowName . innerHTML = params . name ;
2015-08-14 16:30:03 +00:00
}
}
} ,
/ * *
* Whether the < code > GUI < / c o d e > i s c o l l a p s e d o r n o t
* @ type Boolean
* /
closed : {
get : function get ( ) {
return params . closed ;
} ,
set : function set ( v ) {
params . closed = v ;
if ( params . closed ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( _this . _ _ul , GUI . CLASS _CLOSED ) ;
2015-08-14 16:30:03 +00:00
} else {
2016-09-22 23:39:48 +00:00
_dom2 . default . removeClass ( _this . _ _ul , GUI . CLASS _CLOSED ) ;
2015-08-14 16:30:03 +00:00
}
// For browsers that aren't going to respect the CSS transition,
// Lets just check our height against the window height right off
// the bat.
this . onResize ( ) ;
if ( _this . _ _closeButton ) {
_this . _ _closeButton . innerHTML = v ? GUI . TEXT _OPEN : GUI . TEXT _CLOSED ;
}
}
} ,
/ * *
* Contains all presets
* @ type Object
* /
load : {
get : function get ( ) {
return params . load ;
}
} ,
/ * *
* Determines whether or not to use < a href = "https://developer.mozilla.org/en/DOM/Storage#localStorage" > localStorage < / a > a s t h e m e a n s f o r
* < code > remember < / c o d e > i n g
* @ type Boolean
* /
useLocalStorage : {
get : function get ( ) {
2015-08-14 22:16:18 +00:00
return useLocalStorage ;
2015-08-14 16:30:03 +00:00
} ,
set : function set ( bool ) {
if ( SUPPORTS _LOCAL _STORAGE ) {
2015-08-14 22:16:18 +00:00
useLocalStorage = bool ;
2015-08-14 16:30:03 +00:00
if ( bool ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( window , 'unload' , saveToLocalStorage ) ;
2015-08-14 16:30:03 +00:00
} else {
2016-09-22 23:39:48 +00:00
_dom2 . default . unbind ( window , 'unload' , saveToLocalStorage ) ;
2015-08-14 16:30:03 +00:00
}
localStorage . setItem ( getLocalStorageHash ( _this , 'isLocal' ) , bool ) ;
}
}
}
} ) ;
// Are we a root level GUI?
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isUndefined ( params . parent ) ) {
2015-08-14 16:30:03 +00:00
params . closed = false ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( this . domElement , GUI . CLASS _MAIN ) ;
_dom2 . default . makeSelectable ( this . domElement , false ) ;
2015-08-14 16:30:03 +00:00
// Are we supposed to be loading locally?
if ( SUPPORTS _LOCAL _STORAGE ) {
2015-08-14 22:16:18 +00:00
if ( useLocalStorage ) {
2015-08-14 16:30:03 +00:00
_this . useLocalStorage = true ;
2015-08-14 22:16:18 +00:00
var savedGui = localStorage . getItem ( getLocalStorageHash ( this , 'gui' ) ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 22:16:18 +00:00
if ( savedGui ) {
params . load = JSON . parse ( savedGui ) ;
2015-08-14 16:30:03 +00:00
}
}
}
this . _ _closeButton = document . createElement ( 'div' ) ;
this . _ _closeButton . innerHTML = GUI . TEXT _CLOSED ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( this . _ _closeButton , GUI . CLASS _CLOSE _BUTTON ) ;
2017-03-17 23:31:28 +00:00
if ( params . closeOnTop ) {
_dom2 . default . addClass ( this . _ _closeButton , GUI . CLASS _CLOSE _TOP ) ;
this . domElement . insertBefore ( this . _ _closeButton , this . domElement . childNodes [ 0 ] ) ;
} else {
_dom2 . default . addClass ( this . _ _closeButton , GUI . CLASS _CLOSE _BOTTOM ) ;
this . domElement . appendChild ( this . _ _closeButton ) ;
}
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( this . _ _closeButton , 'click' , function ( ) {
2015-08-14 16:30:03 +00:00
_this . closed = ! _this . closed ;
} ) ;
// Oh, you're a nested GUI!
} else {
2016-09-22 23:39:48 +00:00
if ( params . closed === undefined ) {
params . closed = true ;
}
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _titleRowName = document . createTextNode ( params . name ) ;
_dom2 . default . addClass ( _titleRowName , 'controller-name' ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var titleRow = addRow ( _this , _titleRowName ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var onClickTitle = function onClickTitle ( e ) {
e . preventDefault ( ) ;
_this . closed = ! _this . closed ;
return false ;
} ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( this . _ _ul , GUI . CLASS _CLOSED ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( titleRow , 'title' ) ;
_dom2 . default . bind ( titleRow , 'click' , onClickTitle ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
if ( ! params . closed ) {
this . closed = false ;
2015-08-14 16:30:03 +00:00
}
2016-09-22 23:39:48 +00:00
}
2015-08-14 16:30:03 +00:00
if ( params . autoPlace ) {
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isUndefined ( params . parent ) ) {
2015-08-14 22:16:18 +00:00
if ( autoPlaceVirgin ) {
autoPlaceContainer = document . createElement ( 'div' ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( autoPlaceContainer , CSS _NAMESPACE ) ;
_dom2 . default . addClass ( autoPlaceContainer , GUI . CLASS _AUTO _PLACE _CONTAINER ) ;
2015-08-14 22:16:18 +00:00
document . body . appendChild ( autoPlaceContainer ) ;
autoPlaceVirgin = false ;
2015-08-14 16:30:03 +00:00
}
// Put it in the dom for you.
2015-08-14 22:16:18 +00:00
autoPlaceContainer . appendChild ( this . domElement ) ;
2015-08-14 16:30:03 +00:00
// Apply the auto styles
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( this . domElement , GUI . CLASS _AUTO _PLACE ) ;
2015-08-14 16:30:03 +00:00
}
// Make it not elastic.
2015-08-14 20:29:30 +00:00
if ( ! this . parent ) {
setWidth ( _this , params . width ) ;
}
2015-08-14 16:30:03 +00:00
}
2016-08-19 00:24:08 +00:00
this . _ _resizeHandler = function ( ) {
2016-11-14 21:15:20 +00:00
_this . onResizeDebounced ( ) ;
2016-08-19 00:24:08 +00:00
} ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( window , 'resize' , this . _ _resizeHandler ) ;
_dom2 . default . bind ( this . _ _ul , 'webkitTransitionEnd' , this . _ _resizeHandler ) ;
_dom2 . default . bind ( this . _ _ul , 'transitionend' , this . _ _resizeHandler ) ;
_dom2 . default . bind ( this . _ _ul , 'oTransitionEnd' , this . _ _resizeHandler ) ;
2015-08-14 16:30:03 +00:00
this . onResize ( ) ;
if ( params . resizable ) {
addResizeHandle ( this ) ;
}
2016-09-22 23:39:48 +00:00
saveToLocalStorage = function saveToLocalStorage ( ) {
2015-08-14 16:30:03 +00:00
if ( SUPPORTS _LOCAL _STORAGE && localStorage . getItem ( getLocalStorageHash ( _this , 'isLocal' ) ) === 'true' ) {
localStorage . setItem ( getLocalStorageHash ( _this , 'gui' ) , JSON . stringify ( _this . getSaveObject ( ) ) ) ;
}
} ;
// expose this method publicly
this . saveToLocalStorageIfPossible = saveToLocalStorage ;
function resetWidth ( ) {
var root = _this . getRoot ( ) ;
root . width += 1 ;
2016-09-22 23:39:48 +00:00
_common2 . default . defer ( function ( ) {
2015-08-14 16:30:03 +00:00
root . width -= 1 ;
} ) ;
}
if ( ! params . parent ) {
resetWidth ( ) ;
}
} ;
GUI . toggleHide = function ( ) {
hide = ! hide ;
2016-09-22 23:39:48 +00:00
_common2 . default . each ( hideableGuis , function ( gui ) {
2016-08-17 20:32:11 +00:00
gui . domElement . style . display = hide ? 'none' : '' ;
2015-08-14 16:30:03 +00:00
} ) ;
} ;
GUI . CLASS _AUTO _PLACE = 'a' ;
GUI . CLASS _AUTO _PLACE _CONTAINER = 'ac' ;
GUI . CLASS _MAIN = 'main' ;
GUI . CLASS _CONTROLLER _ROW = 'cr' ;
GUI . CLASS _TOO _TALL = 'taller-than-window' ;
GUI . CLASS _CLOSED = 'closed' ;
GUI . CLASS _CLOSE _BUTTON = 'close-button' ;
2017-03-17 23:31:28 +00:00
GUI . CLASS _CLOSE _TOP = 'close-top' ;
GUI . CLASS _CLOSE _BOTTOM = 'close-bottom' ;
2015-08-14 16:30:03 +00:00
GUI . CLASS _DRAG = 'drag' ;
GUI . DEFAULT _WIDTH = 245 ;
GUI . TEXT _CLOSED = 'Close Controls' ;
GUI . TEXT _OPEN = 'Open Controls' ;
2016-08-19 00:24:08 +00:00
GUI . _keydownHandler = function ( e ) {
2015-08-14 22:16:18 +00:00
if ( document . activeElement . type !== 'text' && ( e . which === HIDE _KEY _CODE || e . keyCode === HIDE _KEY _CODE ) ) {
2015-08-14 16:30:03 +00:00
GUI . toggleHide ( ) ;
}
2016-08-19 00:24:08 +00:00
} ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( window , 'keydown' , GUI . _keydownHandler , false ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( GUI . prototype ,
2015-08-14 16:30:03 +00:00
/** @lends dat.gui.GUI */
{
/ * *
* @ param object
* @ param property
* @ returns { dat . controllers . Controller } The new controller that was added .
* @ instance
* /
2016-08-17 18:29:53 +00:00
add : function add ( object , property ) {
return _add ( this , object , property , {
2015-08-14 16:30:03 +00:00
factoryArgs : Array . prototype . slice . call ( arguments , 2 )
} ) ;
2016-08-17 18:29:53 +00:00
} ,
2015-08-14 16:30:03 +00:00
/ * *
* @ param object
* @ param property
* @ returns { dat . controllers . ColorController } The new controller that was added .
* @ instance
* /
addColor : function addColor ( object , property ) {
2016-08-17 18:29:53 +00:00
return _add ( this , object , property , {
2015-08-14 16:30:03 +00:00
color : true
} ) ;
} ,
/ * *
* @ param controller
* @ instance
* /
remove : function remove ( controller ) {
// TODO listening?
this . _ _ul . removeChild ( controller . _ _li ) ;
this . _ _controllers . splice ( this . _ _controllers . indexOf ( controller ) , 1 ) ;
var _this = this ;
2016-09-22 23:39:48 +00:00
_common2 . default . defer ( function ( ) {
2015-08-14 16:30:03 +00:00
_this . onResize ( ) ;
} ) ;
} ,
destroy : function destroy ( ) {
if ( this . autoPlace ) {
2015-08-14 22:16:18 +00:00
autoPlaceContainer . removeChild ( this . domElement ) ;
2015-08-14 16:30:03 +00:00
}
2016-08-19 00:24:08 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . unbind ( window , 'keydown' , GUI . _keydownHandler , false ) ;
_dom2 . default . unbind ( window , 'resize' , this . _ _resizeHandler ) ;
2016-08-19 00:24:08 +00:00
if ( this . saveToLocalStorageIfPossible ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . unbind ( window , 'unload' , this . saveToLocalStorageIfPossible ) ;
2016-08-19 00:24:08 +00:00
}
2015-08-14 16:30:03 +00:00
} ,
/ * *
* @ param name
* @ returns { dat . gui . GUI } The new folder .
* @ throws { Error } if this GUI already has a folder by the specified
* name
* @ instance
* /
addFolder : function addFolder ( name ) {
// We have to prevent collisions on names in order to have a key
// by which to remember saved values
if ( this . _ _folders [ name ] !== undefined ) {
throw new Error ( 'You already have a folder in this GUI by the' + ' name "' + name + '"' ) ;
}
2015-08-14 22:16:18 +00:00
var newGuiParams = { name : name , parent : this } ;
2015-08-14 16:30:03 +00:00
// We need to pass down the autoPlace trait so that we can
// attach event listeners to open/close folder actions to
// ensure that a scrollbar appears if the window is too short.
2015-08-14 22:16:18 +00:00
newGuiParams . autoPlace = this . autoPlace ;
2015-08-14 16:30:03 +00:00
// Do we have saved appearance data for this folder?
if ( this . load && // Anything loaded?
this . load . folders && // Was my parent a dead-end?
this . load . folders [ name ] ) {
// Did daddy remember me?
// Start me closed if I was closed
2015-08-14 22:16:18 +00:00
newGuiParams . closed = this . load . folders [ name ] . closed ;
2015-08-14 16:30:03 +00:00
// Pass down the loaded data
2015-08-14 22:16:18 +00:00
newGuiParams . load = this . load . folders [ name ] ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 22:16:18 +00:00
var gui = new GUI ( newGuiParams ) ;
2015-08-14 16:30:03 +00:00
this . _ _folders [ name ] = gui ;
var li = addRow ( this , gui . domElement ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( li , 'folder' ) ;
2015-08-14 16:30:03 +00:00
return gui ;
} ,
open : function open ( ) {
this . closed = false ;
} ,
close : function close ( ) {
this . closed = true ;
} ,
2016-11-14 21:15:20 +00:00
onResize : function onResize ( ) {
2016-08-19 00:24:08 +00:00
// we debounce this function to prevent performance issues when rotating on tablet/mobile
2015-08-14 16:30:03 +00:00
var root = this . getRoot ( ) ;
if ( root . scrollable ) {
2016-09-22 23:39:48 +00:00
var top = _dom2 . default . getOffset ( root . _ _ul ) . top ;
2015-08-14 16:30:03 +00:00
var h = 0 ;
2016-09-22 23:39:48 +00:00
_common2 . default . each ( root . _ _ul . childNodes , function ( node ) {
2015-08-14 22:16:18 +00:00
if ( ! ( root . autoPlace && node === root . _ _save _row ) ) {
2016-09-22 23:39:48 +00:00
h += _dom2 . default . getHeight ( node ) ;
2015-08-14 22:16:18 +00:00
}
2015-08-14 16:30:03 +00:00
} ) ;
2016-09-22 23:39:48 +00:00
if ( window . innerHeight - top - CLOSE _BUTTON _HEIGHT < h ) {
_dom2 . default . addClass ( root . domElement , GUI . CLASS _TOO _TALL ) ;
root . _ _ul . style . height = window . innerHeight - top - CLOSE _BUTTON _HEIGHT + 'px' ;
2015-08-14 16:30:03 +00:00
} else {
2016-09-22 23:39:48 +00:00
_dom2 . default . removeClass ( root . domElement , GUI . CLASS _TOO _TALL ) ;
2015-08-14 16:30:03 +00:00
root . _ _ul . style . height = 'auto' ;
}
}
if ( root . _ _resize _handle ) {
2016-09-22 23:39:48 +00:00
_common2 . default . defer ( function ( ) {
2015-08-14 16:30:03 +00:00
root . _ _resize _handle . style . height = root . _ _ul . offsetHeight + 'px' ;
} ) ;
}
if ( root . _ _closeButton ) {
root . _ _closeButton . style . width = root . width + 'px' ;
}
2016-11-14 21:15:20 +00:00
} ,
onResizeDebounced : _common2 . default . debounce ( function ( ) {
this . onResize ( ) ;
2017-03-17 23:31:28 +00:00
} , 50 ) ,
2015-08-14 16:30:03 +00:00
/ * *
* Mark objects for saving . The order of these objects cannot change as
* the GUI grows . When remembering new objects , append them to the end
* of the list .
*
* @ param { Object ... } objects
* @ throws { Error } if not called on a top level GUI .
* @ instance
* /
remember : function remember ( ) {
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isUndefined ( SAVE _DIALOGUE ) ) {
SAVE _DIALOGUE = new _CenteredDiv2 . default ( ) ;
SAVE _DIALOGUE . domElement . innerHTML = _saveDialogue2 . default ;
2015-08-14 16:30:03 +00:00
}
if ( this . parent ) {
2015-08-14 22:16:18 +00:00
throw new Error ( 'You can only call remember on a top level GUI.' ) ;
2015-08-14 16:30:03 +00:00
}
var _this = this ;
2016-09-22 23:39:48 +00:00
_common2 . default . each ( Array . prototype . slice . call ( arguments ) , function ( object ) {
2015-08-14 22:16:18 +00:00
if ( _this . _ _rememberedObjects . length === 0 ) {
2015-08-14 16:30:03 +00:00
addSaveMenu ( _this ) ;
}
2015-08-14 22:16:18 +00:00
if ( _this . _ _rememberedObjects . indexOf ( object ) === - 1 ) {
2015-08-14 16:30:03 +00:00
_this . _ _rememberedObjects . push ( object ) ;
}
} ) ;
if ( this . autoPlace ) {
// Set save row width
setWidth ( this , this . width ) ;
}
} ,
/ * *
* @ returns { dat . gui . GUI } the topmost parent GUI of a nested GUI .
* @ instance
* /
getRoot : function getRoot ( ) {
var gui = this ;
while ( gui . parent ) {
gui = gui . parent ;
}
return gui ;
} ,
/ * *
* @ returns { Object } a JSON object representing the current state of
* this GUI as well as its remembered properties .
* @ instance
* /
getSaveObject : function getSaveObject ( ) {
var toReturn = this . load ;
toReturn . closed = this . closed ;
// Am I remembering any values?
if ( this . _ _rememberedObjects . length > 0 ) {
toReturn . preset = this . preset ;
if ( ! toReturn . remembered ) {
toReturn . remembered = { } ;
}
toReturn . remembered [ this . preset ] = getCurrentPreset ( this ) ;
}
toReturn . folders = { } ;
2016-09-22 23:39:48 +00:00
_common2 . default . each ( this . _ _folders , function ( element , key ) {
2015-08-14 16:30:03 +00:00
toReturn . folders [ key ] = element . getSaveObject ( ) ;
} ) ;
return toReturn ;
} ,
save : function save ( ) {
if ( ! this . load . remembered ) {
this . load . remembered = { } ;
}
this . load . remembered [ this . preset ] = getCurrentPreset ( this ) ;
markPresetModified ( this , false ) ;
this . saveToLocalStorageIfPossible ( ) ;
} ,
saveAs : function saveAs ( presetName ) {
if ( ! this . load . remembered ) {
// Retain default values upon first save
this . load . remembered = { } ;
this . load . remembered [ DEFAULT _DEFAULT _PRESET _NAME ] = getCurrentPreset ( this , true ) ;
}
this . load . remembered [ presetName ] = getCurrentPreset ( this ) ;
this . preset = presetName ;
addPresetOption ( this , presetName , true ) ;
this . saveToLocalStorageIfPossible ( ) ;
} ,
revert : function revert ( gui ) {
2016-09-22 23:39:48 +00:00
_common2 . default . each ( this . _ _controllers , function ( controller ) {
2015-08-14 16:30:03 +00:00
// Make revert work on Default.
if ( ! this . getRoot ( ) . load . remembered ) {
controller . setValue ( controller . initialValue ) ;
} else {
recallSavedValue ( gui || this . getRoot ( ) , controller ) ;
}
2016-08-18 22:31:37 +00:00
// fire onFinishChange callback
if ( controller . _ _onFinishChange ) {
controller . _ _onFinishChange . call ( controller , controller . getValue ( ) ) ;
}
2015-08-14 16:30:03 +00:00
} , this ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . each ( this . _ _folders , function ( folder ) {
2015-08-14 16:30:03 +00:00
folder . revert ( folder ) ;
} ) ;
if ( ! gui ) {
markPresetModified ( this . getRoot ( ) , false ) ;
}
} ,
listen : function listen ( controller ) {
2015-08-14 22:16:18 +00:00
var init = this . _ _listening . length === 0 ;
2015-08-14 16:30:03 +00:00
this . _ _listening . push ( controller ) ;
2015-08-14 22:16:18 +00:00
if ( init ) {
updateDisplays ( this . _ _listening ) ;
}
2016-08-19 00:24:08 +00:00
} ,
updateDisplay : function updateDisplay ( ) {
2016-09-22 23:39:48 +00:00
_common2 . default . each ( this . _ _controllers , function ( controller ) {
2016-08-19 00:24:08 +00:00
controller . updateDisplay ( ) ;
} ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . each ( this . _ _folders , function ( folder ) {
2016-08-19 00:24:08 +00:00
folder . updateDisplay ( ) ;
} ) ;
2015-08-14 16:30:03 +00:00
}
} ) ;
/ * *
* Add a row to the end of the GUI or before another row .
*
* @ param gui
2015-08-14 20:29:30 +00:00
* @ param [ newDom ] If specified , inserts the dom content in the new row
2015-08-14 16:30:03 +00:00
* @ param [ liBefore ] If specified , places the new row before another row
* /
2015-08-14 20:29:30 +00:00
function addRow ( gui , newDom , liBefore ) {
2015-08-14 16:30:03 +00:00
var li = document . createElement ( 'li' ) ;
2015-08-14 20:29:30 +00:00
if ( newDom ) {
li . appendChild ( newDom ) ;
}
2015-08-14 16:30:03 +00:00
if ( liBefore ) {
2016-08-17 20:19:18 +00:00
gui . _ _ul . insertBefore ( li , liBefore ) ;
2015-08-14 16:30:03 +00:00
} else {
gui . _ _ul . appendChild ( li ) ;
}
gui . onResize ( ) ;
return li ;
}
2015-08-14 20:29:30 +00:00
function markPresetModified ( gui , modified ) {
var opt = gui . _ _preset _select [ gui . _ _preset _select . selectedIndex ] ;
// console.log('mark', modified, opt);
if ( modified ) {
opt . innerHTML = opt . value + '*' ;
} else {
opt . innerHTML = opt . value ;
}
}
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
function augmentController ( gui , li , controller ) {
2015-08-14 16:30:03 +00:00
controller . _ _li = li ;
controller . _ _gui = gui ;
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( controller , {
2015-08-14 16:30:03 +00:00
options : function options ( _options ) {
if ( arguments . length > 1 ) {
2016-08-17 20:19:18 +00:00
var nextSibling = controller . _ _li . nextElementSibling ;
2015-08-14 16:30:03 +00:00
controller . remove ( ) ;
2016-08-17 18:29:53 +00:00
return _add ( gui , controller . object , controller . property , {
2016-08-17 20:19:18 +00:00
before : nextSibling ,
2016-09-22 23:39:48 +00:00
factoryArgs : [ _common2 . default . toArray ( arguments ) ]
2015-08-14 16:30:03 +00:00
} ) ;
}
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isArray ( _options ) || _common2 . default . isObject ( _options ) ) {
var _nextSibling = controller . _ _li . nextElementSibling ;
2015-08-14 16:30:03 +00:00
controller . remove ( ) ;
2016-08-17 18:29:53 +00:00
return _add ( gui , controller . object , controller . property , {
2016-09-22 23:39:48 +00:00
before : _nextSibling ,
2015-08-14 16:30:03 +00:00
factoryArgs : [ _options ]
} ) ;
}
} ,
name : function name ( v ) {
controller . _ _li . firstElementChild . firstElementChild . innerHTML = v ;
return controller ;
} ,
listen : function listen ( ) {
controller . _ _gui . listen ( controller ) ;
return controller ;
} ,
remove : function remove ( ) {
controller . _ _gui . remove ( controller ) ;
return controller ;
}
} ) ;
// All sliders should be accompanied by a box.
2016-09-22 23:39:48 +00:00
if ( controller instanceof _NumberControllerSlider2 . default ) {
2017-04-07 22:15:31 +00:00
var box = new _NumberControllerBox2 . default ( controller . object , controller . property , { min : controller . _ _min , max : controller . _ _max , step : controller . _ _step } ) ;
_common2 . default . each ( [ 'updateDisplay' , 'onChange' , 'onFinishChange' , 'step' ] , function ( method ) {
var pc = controller [ method ] ;
var pb = box [ method ] ;
controller [ method ] = box [ method ] = function ( ) {
var args = Array . prototype . slice . call ( arguments ) ;
pb . apply ( box , args ) ;
return pc . apply ( controller , args ) ;
} ;
} ) ;
2015-08-14 16:30:03 +00:00
2017-04-07 22:15:31 +00:00
_dom2 . default . addClass ( li , 'has-slider' ) ;
controller . domElement . insertBefore ( box . domElement , controller . domElement . firstElementChild ) ;
2016-09-22 23:39:48 +00:00
} else if ( controller instanceof _NumberControllerBox2 . default ) {
2015-08-14 16:30:03 +00:00
var r = function r ( returned ) {
// Have we defined both boundaries?
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( controller . _ _min ) && _common2 . default . isNumber ( controller . _ _max ) ) {
2015-08-14 16:30:03 +00:00
// Well, then lets just replace this with a slider.
2016-10-05 18:49:16 +00:00
// lets remember if the old controller had a specific name or was listening
var oldName = controller . _ _li . firstElementChild . firstElementChild . innerHTML ;
var wasListening = controller . _ _gui . _ _listening . indexOf ( controller ) > - 1 ;
2015-08-14 16:30:03 +00:00
controller . remove ( ) ;
2016-10-05 18:49:16 +00:00
var newController = _add ( gui , controller . object , controller . property , {
2015-08-14 16:30:03 +00:00
before : controller . _ _li . nextElementSibling ,
factoryArgs : [ controller . _ _min , controller . _ _max , controller . _ _step ]
} ) ;
2016-10-05 18:49:16 +00:00
newController . name ( oldName ) ;
if ( wasListening ) newController . listen ( ) ;
return newController ;
2015-08-14 16:30:03 +00:00
}
return returned ;
} ;
2016-09-22 23:39:48 +00:00
controller . min = _common2 . default . compose ( r , controller . min ) ;
controller . max = _common2 . default . compose ( r , controller . max ) ;
} else if ( controller instanceof _BooleanController2 . default ) {
_dom2 . default . bind ( li , 'click' , function ( ) {
_dom2 . default . fakeEvent ( controller . _ _checkbox , 'click' ) ;
2015-08-14 16:30:03 +00:00
} ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( controller . _ _checkbox , 'click' , function ( e ) {
2015-08-14 16:30:03 +00:00
e . stopPropagation ( ) ; // Prevents double-toggle
} ) ;
2016-09-22 23:39:48 +00:00
} else if ( controller instanceof _FunctionController2 . default ) {
_dom2 . default . bind ( li , 'click' , function ( ) {
_dom2 . default . fakeEvent ( controller . _ _button , 'click' ) ;
} ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( li , 'mouseover' , function ( ) {
_dom2 . default . addClass ( controller . _ _button , 'hover' ) ;
} ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( li , 'mouseout' , function ( ) {
_dom2 . default . removeClass ( controller . _ _button , 'hover' ) ;
} ) ;
} else if ( controller instanceof _ColorController2 . default ) {
_dom2 . default . addClass ( li , 'color' ) ;
controller . updateDisplay = _common2 . default . compose ( function ( val ) {
li . style . borderLeftColor = controller . _ _color . toString ( ) ;
return val ;
} , controller . updateDisplay ) ;
controller . updateDisplay ( ) ;
}
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
controller . setValue = _common2 . default . compose ( function ( val ) {
2015-08-14 16:30:03 +00:00
if ( gui . getRoot ( ) . _ _preset _select && controller . isModified ( ) ) {
markPresetModified ( gui . getRoot ( ) , true ) ;
}
2015-08-14 20:29:30 +00:00
return val ;
2015-08-14 16:30:03 +00:00
} , controller . setValue ) ;
}
function recallSavedValue ( gui , controller ) {
// Find the topmost GUI, that's where remembered objects live.
var root = gui . getRoot ( ) ;
// Does the object we're controlling match anything we've been told to
// remember?
2015-08-14 20:29:30 +00:00
var matchedIndex = root . _ _rememberedObjects . indexOf ( controller . object ) ;
2015-08-14 16:30:03 +00:00
// Why yes, it does!
2015-08-14 20:29:30 +00:00
if ( matchedIndex !== - 1 ) {
2015-08-14 16:30:03 +00:00
// Let me fetch a map of controllers for thcommon.isObject.
2015-08-14 20:29:30 +00:00
var controllerMap = root . _ _rememberedObjectIndecesToControllers [ matchedIndex ] ;
2015-08-14 16:30:03 +00:00
// Ohp, I believe this is the first controller we've created for this
// object. Lets make the map fresh.
2015-08-14 20:29:30 +00:00
if ( controllerMap === undefined ) {
controllerMap = { } ;
root . _ _rememberedObjectIndecesToControllers [ matchedIndex ] = controllerMap ;
2015-08-14 16:30:03 +00:00
}
// Keep track of this controller
2015-08-14 20:29:30 +00:00
controllerMap [ controller . property ] = controller ;
2015-08-14 16:30:03 +00:00
// Okay, now have we saved any values for this controller?
if ( root . load && root . load . remembered ) {
2015-08-14 20:29:30 +00:00
var presetMap = root . load . remembered ;
2015-08-14 16:30:03 +00:00
// Which preset are we trying to load?
2016-09-22 23:39:48 +00:00
var preset = void 0 ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
if ( presetMap [ gui . preset ] ) {
preset = presetMap [ gui . preset ] ;
} else if ( presetMap [ DEFAULT _DEFAULT _PRESET _NAME ] ) {
2015-08-14 16:30:03 +00:00
// Uhh, you can have the default instead?
2015-08-14 20:29:30 +00:00
preset = presetMap [ DEFAULT _DEFAULT _PRESET _NAME ] ;
2015-08-14 16:30:03 +00:00
} else {
// Nada.
return ;
}
2015-08-14 20:29:30 +00:00
// Did the loaded object remember thcommon.isObject? && Did we remember this particular property?
if ( preset [ matchedIndex ] && preset [ matchedIndex ] [ controller . property ] !== undefined ) {
2015-08-14 16:30:03 +00:00
// We did remember something for this guy ...
2015-08-14 20:29:30 +00:00
var value = preset [ matchedIndex ] [ controller . property ] ;
2015-08-14 16:30:03 +00:00
// And that's what it is.
controller . initialValue = value ;
controller . setValue ( value ) ;
}
}
}
}
2016-08-17 18:29:53 +00:00
function _add ( gui , object , property , params ) {
2015-08-14 20:29:30 +00:00
if ( object [ property ] === undefined ) {
throw new Error ( 'Object "' + object + '" has no property "' + property + '"' ) ;
}
2016-09-22 23:39:48 +00:00
var controller = void 0 ;
2015-08-14 20:29:30 +00:00
if ( params . color ) {
2016-09-22 23:39:48 +00:00
controller = new _ColorController2 . default ( object , property ) ;
2015-08-14 20:29:30 +00:00
} else {
var factoryArgs = [ object , property ] . concat ( params . factoryArgs ) ;
2016-09-22 23:39:48 +00:00
controller = _ControllerFactory2 . default . apply ( gui , factoryArgs ) ;
2015-08-14 20:29:30 +00:00
}
2016-09-22 23:39:48 +00:00
if ( params . before instanceof _Controller2 . default ) {
2015-08-14 20:29:30 +00:00
params . before = params . before . _ _li ;
}
recallSavedValue ( gui , controller ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( controller . domElement , 'c' ) ;
2015-08-14 20:29:30 +00:00
var name = document . createElement ( 'span' ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( name , 'property-name' ) ;
2015-08-14 20:29:30 +00:00
name . innerHTML = controller . property ;
var container = document . createElement ( 'div' ) ;
container . appendChild ( name ) ;
container . appendChild ( controller . domElement ) ;
var li = addRow ( gui , container , params . before ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( li , GUI . CLASS _CONTROLLER _ROW ) ;
if ( controller instanceof _ColorController2 . default ) {
_dom2 . default . addClass ( li , 'color' ) ;
2015-08-14 20:29:30 +00:00
} else {
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( li , _typeof ( controller . getValue ( ) ) ) ;
2015-08-14 20:29:30 +00:00
}
augmentController ( gui , li , controller ) ;
gui . _ _controllers . push ( controller ) ;
return controller ;
}
2015-08-14 16:30:03 +00:00
function getLocalStorageHash ( gui , key ) {
// TODO how does this deal with multiple GUI's?
return document . location . href + '.' + key ;
}
2015-08-14 20:29:30 +00:00
function addPresetOption ( gui , name , setSelected ) {
var opt = document . createElement ( 'option' ) ;
opt . innerHTML = name ;
opt . value = name ;
gui . _ _preset _select . appendChild ( opt ) ;
if ( setSelected ) {
gui . _ _preset _select . selectedIndex = gui . _ _preset _select . length - 1 ;
}
}
2015-08-14 16:30:03 +00:00
2015-08-14 22:16:18 +00:00
function showHideExplain ( gui , explain ) {
2015-08-14 20:29:30 +00:00
explain . style . display = gui . useLocalStorage ? 'block' : 'none' ;
}
function addSaveMenu ( gui ) {
2015-08-14 16:30:03 +00:00
var div = gui . _ _save _row = document . createElement ( 'li' ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( gui . domElement , 'has-save' ) ;
2015-08-14 16:30:03 +00:00
gui . _ _ul . insertBefore ( div , gui . _ _ul . firstChild ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( div , 'save-row' ) ;
2015-08-14 16:30:03 +00:00
var gears = document . createElement ( 'span' ) ;
gears . innerHTML = ' ' ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( gears , 'button gears' ) ;
2015-08-14 16:30:03 +00:00
// TODO replace with FunctionController
var button = document . createElement ( 'span' ) ;
button . innerHTML = 'Save' ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( button , 'button' ) ;
_dom2 . default . addClass ( button , 'save' ) ;
2015-08-14 16:30:03 +00:00
var button2 = document . createElement ( 'span' ) ;
button2 . innerHTML = 'New' ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( button2 , 'button' ) ;
_dom2 . default . addClass ( button2 , 'save-as' ) ;
2015-08-14 16:30:03 +00:00
var button3 = document . createElement ( 'span' ) ;
button3 . innerHTML = 'Revert' ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( button3 , 'button' ) ;
_dom2 . default . addClass ( button3 , 'revert' ) ;
2015-08-14 16:30:03 +00:00
var select = gui . _ _preset _select = document . createElement ( 'select' ) ;
if ( gui . load && gui . load . remembered ) {
2016-09-22 23:39:48 +00:00
_common2 . default . each ( gui . load . remembered , function ( value , key ) {
2015-08-14 20:29:30 +00:00
addPresetOption ( gui , key , key === gui . preset ) ;
2015-08-14 16:30:03 +00:00
} ) ;
} else {
addPresetOption ( gui , DEFAULT _DEFAULT _PRESET _NAME , false ) ;
}
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( select , 'change' , function ( ) {
2015-08-14 16:30:03 +00:00
for ( var index = 0 ; index < gui . _ _preset _select . length ; index ++ ) {
gui . _ _preset _select [ index ] . innerHTML = gui . _ _preset _select [ index ] . value ;
}
gui . preset = this . value ;
} ) ;
div . appendChild ( select ) ;
div . appendChild ( gears ) ;
div . appendChild ( button ) ;
div . appendChild ( button2 ) ;
div . appendChild ( button3 ) ;
if ( SUPPORTS _LOCAL _STORAGE ) {
2017-04-07 22:15:31 +00:00
var explain = document . getElementById ( 'dg-local-explain' ) ;
var localStorageCheckBox = document . getElementById ( 'dg-local-storage' ) ;
var saveLocally = document . getElementById ( 'dg-save-locally' ) ;
2015-08-14 16:30:03 +00:00
2017-04-07 22:15:31 +00:00
saveLocally . style . display = 'block' ;
2015-08-14 16:30:03 +00:00
2017-04-07 22:15:31 +00:00
if ( localStorage . getItem ( getLocalStorageHash ( gui , 'isLocal' ) ) === 'true' ) {
localStorageCheckBox . setAttribute ( 'checked' , 'checked' ) ;
}
2015-08-14 16:30:03 +00:00
2017-04-07 22:15:31 +00:00
showHideExplain ( gui , explain ) ;
2015-08-14 16:30:03 +00:00
2017-04-07 22:15:31 +00:00
// TODO: Use a boolean controller, fool!
_dom2 . default . bind ( localStorageCheckBox , 'change' , function ( ) {
gui . useLocalStorage = ! gui . useLocalStorage ;
showHideExplain ( gui , explain ) ;
} ) ;
2015-08-14 16:30:03 +00:00
}
var newConstructorTextArea = document . getElementById ( 'dg-new-constructor' ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( newConstructorTextArea , 'keydown' , function ( e ) {
2015-08-14 20:29:30 +00:00
if ( e . metaKey && ( e . which === 67 || e . keyCode === 67 ) ) {
2015-08-14 16:30:03 +00:00
SAVE _DIALOGUE . hide ( ) ;
}
} ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( gears , 'click' , function ( ) {
2015-08-14 16:30:03 +00:00
newConstructorTextArea . innerHTML = JSON . stringify ( gui . getSaveObject ( ) , undefined , 2 ) ;
SAVE _DIALOGUE . show ( ) ;
newConstructorTextArea . focus ( ) ;
newConstructorTextArea . select ( ) ;
} ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( button , 'click' , function ( ) {
2015-08-14 16:30:03 +00:00
gui . save ( ) ;
} ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( button2 , 'click' , function ( ) {
2015-08-14 16:30:03 +00:00
var presetName = prompt ( 'Enter a new preset name.' ) ;
2015-08-14 20:29:30 +00:00
if ( presetName ) {
gui . saveAs ( presetName ) ;
}
2015-08-14 16:30:03 +00:00
} ) ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( button3 , 'click' , function ( ) {
2015-08-14 16:30:03 +00:00
gui . revert ( ) ;
} ) ;
2015-08-14 20:29:30 +00:00
// div.appendChild(button2);
2015-08-14 16:30:03 +00:00
}
function addResizeHandle ( gui ) {
2016-09-22 23:39:48 +00:00
var pmouseX = void 0 ;
2015-08-14 16:30:03 +00:00
gui . _ _resize _handle = document . createElement ( 'div' ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( gui . _ _resize _handle . style , {
2015-08-14 16:30:03 +00:00
width : '6px' ,
marginLeft : '-3px' ,
height : '200px' ,
cursor : 'ew-resize' ,
position : 'absolute'
2015-08-14 20:29:30 +00:00
// border: '1px solid blue'
2015-08-14 16:30:03 +00:00
} ) ;
2015-08-14 20:29:30 +00:00
function drag ( e ) {
2015-08-14 16:30:03 +00:00
e . preventDefault ( ) ;
2015-08-14 20:29:30 +00:00
gui . width += pmouseX - e . clientX ;
gui . onResize ( ) ;
2015-08-14 16:30:03 +00:00
pmouseX = e . clientX ;
return false ;
}
2015-08-14 20:29:30 +00:00
function dragStop ( ) {
2016-09-22 23:39:48 +00:00
_dom2 . default . removeClass ( gui . _ _closeButton , GUI . CLASS _DRAG ) ;
_dom2 . default . unbind ( window , 'mousemove' , drag ) ;
_dom2 . default . unbind ( window , 'mouseup' , dragStop ) ;
2015-08-14 20:29:30 +00:00
}
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
function dragStart ( e ) {
2015-08-14 16:30:03 +00:00
e . preventDefault ( ) ;
pmouseX = e . clientX ;
2016-09-22 23:39:48 +00:00
_dom2 . default . addClass ( gui . _ _closeButton , GUI . CLASS _DRAG ) ;
_dom2 . default . bind ( window , 'mousemove' , drag ) ;
_dom2 . default . bind ( window , 'mouseup' , dragStop ) ;
2015-08-14 20:29:30 +00:00
2015-08-14 16:30:03 +00:00
return false ;
}
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( gui . _ _resize _handle , 'mousedown' , dragStart ) ;
_dom2 . default . bind ( gui . _ _closeButton , 'mousedown' , dragStart ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
gui . domElement . insertBefore ( gui . _ _resize _handle , gui . domElement . firstElementChild ) ;
2015-08-14 16:30:03 +00:00
}
function setWidth ( gui , w ) {
gui . domElement . style . width = w + 'px' ;
// Auto placed save-rows are position fixed, so we have to
// set the width manually if we want it to bleed to the edge
if ( gui . _ _save _row && gui . autoPlace ) {
gui . _ _save _row . style . width = w + 'px' ;
}
if ( gui . _ _closeButton ) {
gui . _ _closeButton . style . width = w + 'px' ;
}
}
function getCurrentPreset ( gui , useInitialValues ) {
var toReturn = { } ;
// For each object I'm remembering
2016-09-22 23:39:48 +00:00
_common2 . default . each ( gui . _ _rememberedObjects , function ( val , index ) {
2015-08-14 20:29:30 +00:00
var savedValues = { } ;
2015-08-14 16:30:03 +00:00
// The controllers I've made for thcommon.isObject by property
2015-08-14 20:29:30 +00:00
var controllerMap = gui . _ _rememberedObjectIndecesToControllers [ index ] ;
2015-08-14 16:30:03 +00:00
// Remember each value for each property
2016-09-22 23:39:48 +00:00
_common2 . default . each ( controllerMap , function ( controller , property ) {
2015-08-14 20:29:30 +00:00
savedValues [ property ] = useInitialValues ? controller . initialValue : controller . getValue ( ) ;
2015-08-14 16:30:03 +00:00
} ) ;
// Save the values for thcommon.isObject
2015-08-14 20:29:30 +00:00
toReturn [ index ] = savedValues ;
2015-08-14 16:30:03 +00:00
} ) ;
return toReturn ;
}
function setPresetSelectIndex ( gui ) {
for ( var index = 0 ; index < gui . _ _preset _select . length ; index ++ ) {
2015-08-14 20:29:30 +00:00
if ( gui . _ _preset _select [ index ] . value === gui . preset ) {
2015-08-14 16:30:03 +00:00
gui . _ _preset _select . selectedIndex = index ;
}
}
}
function updateDisplays ( controllerArray ) {
2015-08-14 20:29:30 +00:00
if ( controllerArray . length !== 0 ) {
2016-09-22 23:39:48 +00:00
_requestAnimationFrame2 . default . call ( window , function ( ) {
2015-08-14 16:30:03 +00:00
updateDisplays ( controllerArray ) ;
} ) ;
}
2016-09-22 23:39:48 +00:00
_common2 . default . each ( controllerArray , function ( c ) {
2015-08-14 16:30:03 +00:00
c . updateDisplay ( ) ;
} ) ;
}
2017-04-07 22:15:31 +00:00
exports . default = GUI ;
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 18 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports ) {
2016-09-22 23:39:48 +00:00
'use strict' ;
2016-08-30 22:48:51 +00:00
/ * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
2016-08-30 22:48:51 +00:00
module . exports = {
load : function load ( url , indoc ) {
var doc = indoc || document ;
var link = doc . createElement ( 'link' ) ;
link . type = 'text/css' ;
link . rel = 'stylesheet' ;
link . href = url ;
doc . getElementsByTagName ( 'head' ) [ 0 ] . appendChild ( link ) ;
} ,
2015-08-14 16:30:03 +00:00
2016-09-01 19:52:59 +00:00
inject : function inject ( css , indoc ) {
2016-08-30 22:48:51 +00:00
var doc = indoc || document ;
var injected = document . createElement ( 'style' ) ;
injected . type = 'text/css' ;
injected . innerHTML = css ;
var head = doc . getElementsByTagName ( 'head' ) [ 0 ] ;
try {
head . appendChild ( injected ) ;
} catch ( e ) { // Unable to inject CSS, probably because of a Content Security Policy
}
}
} ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 19 */
2016-08-30 22:48:51 +00:00
/***/ function ( module , exports ) {
2016-08-17 18:29:53 +00:00
2016-08-30 22:48:51 +00:00
module . exports = "<div id=\"dg-save\" class=\"dg dialogue\">\n\n Here's the new load parameter for your <code>GUI</code>'s constructor:\n\n <textarea id=\"dg-new-constructor\"></textarea>\n\n <div id=\"dg-save-locally\">\n\n <input id=\"dg-local-storage\" type=\"checkbox\"/> Automatically save\n values to <code>localStorage</code> on exit.\n\n <div id=\"dg-local-explain\">The values saved to <code>localStorage</code> will\n override those passed to <code>dat.GUI</code>'s constructor. This makes it\n easier to work incrementally, but <code>localStorage</code> is fragile,\n and your friends may not see the same values you do.\n\n </div>\n\n </div>\n\n</div>" ;
2016-08-17 18:29:53 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 20 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-01 21:07:06 +00:00
var _OptionController = _ _webpack _require _ _ ( 10 ) ;
2015-08-14 16:30:03 +00:00
var _OptionController2 = _interopRequireDefault ( _OptionController ) ;
2016-09-01 21:07:06 +00:00
var _NumberControllerBox = _ _webpack _require _ _ ( 13 ) ;
2015-08-14 16:30:03 +00:00
var _NumberControllerBox2 = _interopRequireDefault ( _NumberControllerBox ) ;
2016-09-01 21:07:06 +00:00
var _NumberControllerSlider = _ _webpack _require _ _ ( 14 ) ;
2015-08-14 16:30:03 +00:00
var _NumberControllerSlider2 = _interopRequireDefault ( _NumberControllerSlider ) ;
2016-09-01 21:07:06 +00:00
var _StringController = _ _webpack _require _ _ ( 11 ) ;
2015-08-14 16:30:03 +00:00
var _StringController2 = _interopRequireDefault ( _StringController ) ;
2016-09-01 21:07:06 +00:00
var _FunctionController = _ _webpack _require _ _ ( 15 ) ;
2015-08-14 16:30:03 +00:00
var _FunctionController2 = _interopRequireDefault ( _FunctionController ) ;
2016-09-01 21:07:06 +00:00
var _BooleanController = _ _webpack _require _ _ ( 8 ) ;
2015-08-14 16:30:03 +00:00
var _BooleanController2 = _interopRequireDefault ( _BooleanController ) ;
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
var ControllerFactory = function ControllerFactory ( object , property ) {
var initialValue = object [ property ] ;
// Providing options?
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isArray ( arguments [ 2 ] ) || _common2 . default . isObject ( arguments [ 2 ] ) ) {
return new _OptionController2 . default ( object , property , arguments [ 2 ] ) ;
2015-08-14 16:30:03 +00:00
}
// Providing a map?
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( initialValue ) ) {
2016-08-17 23:32:48 +00:00
// Has min and max? (slider)
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( arguments [ 2 ] ) && _common2 . default . isNumber ( arguments [ 3 ] ) ) {
2016-08-17 23:32:48 +00:00
// has step?
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( arguments [ 4 ] ) ) {
return new _NumberControllerSlider2 . default ( object , property , arguments [ 2 ] , arguments [ 3 ] , arguments [ 4 ] ) ;
2015-08-14 16:30:03 +00:00
}
2015-08-14 22:16:18 +00:00
2016-09-22 23:39:48 +00:00
return new _NumberControllerSlider2 . default ( object , property , arguments [ 2 ] , arguments [ 3 ] ) ;
2015-08-14 16:30:03 +00:00
}
2016-08-17 23:32:48 +00:00
// number box
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isNumber ( arguments [ 4 ] ) ) {
2016-08-17 23:32:48 +00:00
// has step
2016-09-22 23:39:48 +00:00
return new _NumberControllerBox2 . default ( object , property , { min : arguments [ 2 ] , max : arguments [ 3 ] , step : arguments [ 4 ] } ) ;
2016-08-17 23:32:48 +00:00
}
2016-09-22 23:39:48 +00:00
return new _NumberControllerBox2 . default ( object , property , { min : arguments [ 2 ] , max : arguments [ 3 ] } ) ;
2015-08-14 16:30:03 +00:00
}
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isString ( initialValue ) ) {
return new _StringController2 . default ( object , property ) ;
2015-08-14 16:30:03 +00:00
}
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isFunction ( initialValue ) ) {
return new _FunctionController2 . default ( object , property , '' ) ;
2015-08-14 16:30:03 +00:00
}
2016-09-22 23:39:48 +00:00
if ( _common2 . default . isBoolean ( initialValue ) ) {
return new _BooleanController2 . default ( object , property ) ;
2015-08-14 16:30:03 +00:00
}
2016-09-01 21:07:06 +00:00
return null ;
2016-09-22 23:39:48 +00:00
} ; / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
exports . default = ControllerFactory ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 21 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports ) {
2016-09-22 23:39:48 +00:00
"use strict" ;
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
/ * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2016-08-17 23:32:48 +00:00
function requestAnimationFrame ( callback ) {
setTimeout ( callback , 1000 / 60 ) ;
}
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
exports . default = window . requestAnimationFrame || window . webkitRequestAnimationFrame || window . mozRequestAnimationFrame || window . oRequestAnimationFrame || window . msRequestAnimationFrame || requestAnimationFrame ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ "default" ] ;
2015-08-14 16:30:03 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 22 */
2015-08-14 16:30:03 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
2015-08-14 20:29:30 +00:00
exports . _ _esModule = true ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom = _ _webpack _require _ _ ( 9 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _dom2 = _interopRequireDefault ( _dom ) ;
2015-08-14 20:29:30 +00:00
2016-09-22 23:39:48 +00:00
var _common = _ _webpack _require _ _ ( 5 ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var _common2 = _interopRequireDefault ( _common ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } / * *
* dat - gui JavaScript Controller Library
* http : //code.google.com/p/dat-gui
*
* Copyright 2011 Data Arts Team , Google Creative Lab
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
* /
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
var CenteredDiv = function ( ) {
2015-08-14 20:29:30 +00:00
function CenteredDiv ( ) {
_classCallCheck ( this , CenteredDiv ) ;
this . backgroundElement = document . createElement ( 'div' ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( this . backgroundElement . style , {
2015-08-14 20:29:30 +00:00
backgroundColor : 'rgba(0,0,0,0.8)' ,
top : 0 ,
left : 0 ,
display : 'none' ,
zIndex : '1000' ,
opacity : 0 ,
WebkitTransition : 'opacity 0.2s linear' ,
transition : 'opacity 0.2s linear'
} ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . makeFullscreen ( this . backgroundElement ) ;
2015-08-14 20:29:30 +00:00
this . backgroundElement . style . position = 'fixed' ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
this . domElement = document . createElement ( 'div' ) ;
2016-09-22 23:39:48 +00:00
_common2 . default . extend ( this . domElement . style , {
2015-08-14 20:29:30 +00:00
position : 'fixed' ,
display : 'none' ,
zIndex : '1001' ,
opacity : 0 ,
WebkitTransition : '-webkit-transform 0.2s ease-out, opacity 0.2s linear' ,
transition : 'transform 0.2s ease-out, opacity 0.2s linear'
} ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
document . body . appendChild ( this . backgroundElement ) ;
document . body . appendChild ( this . domElement ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
var _this = this ;
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( this . backgroundElement , 'click' , function ( ) {
2015-08-14 20:29:30 +00:00
_this . hide ( ) ;
} ) ;
}
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
CenteredDiv . prototype . show = function show ( ) {
var _this = this ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
this . backgroundElement . style . display = 'block' ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
this . domElement . style . display = 'block' ;
this . domElement . style . opacity = 0 ;
// this.domElement.style.top = '52%';
this . domElement . style . webkitTransform = 'scale(1.1)' ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
this . layout ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_common2 . default . defer ( function ( ) {
2015-08-14 20:29:30 +00:00
_this . backgroundElement . style . opacity = 1 ;
_this . domElement . style . opacity = 1 ;
_this . domElement . style . webkitTransform = 'scale(1)' ;
} ) ;
} ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
/ * *
* Hide centered div
* /
2016-09-22 23:39:48 +00:00
2015-08-14 20:29:30 +00:00
CenteredDiv . prototype . hide = function hide ( ) {
var _this = this ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
var hide = function hide ( ) {
_this . domElement . style . display = 'none' ;
_this . backgroundElement . style . display = 'none' ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . unbind ( _this . domElement , 'webkitTransitionEnd' , hide ) ;
_dom2 . default . unbind ( _this . domElement , 'transitionend' , hide ) ;
_dom2 . default . unbind ( _this . domElement , 'oTransitionEnd' , hide ) ;
2015-08-14 20:29:30 +00:00
} ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
_dom2 . default . bind ( this . domElement , 'webkitTransitionEnd' , hide ) ;
_dom2 . default . bind ( this . domElement , 'transitionend' , hide ) ;
_dom2 . default . bind ( this . domElement , 'oTransitionEnd' , hide ) ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
this . backgroundElement . style . opacity = 0 ;
// this.domElement.style.top = '48%';
this . domElement . style . opacity = 0 ;
this . domElement . style . webkitTransform = 'scale(1.1)' ;
2015-08-14 16:30:03 +00:00
} ;
2015-08-14 20:29:30 +00:00
CenteredDiv . prototype . layout = function layout ( ) {
2016-09-22 23:39:48 +00:00
this . domElement . style . left = window . innerWidth / 2 - _dom2 . default . getWidth ( this . domElement ) / 2 + 'px' ;
this . domElement . style . top = window . innerHeight / 2 - _dom2 . default . getHeight ( this . domElement ) / 2 + 'px' ;
2015-08-14 20:29:30 +00:00
} ;
2015-08-14 16:30:03 +00:00
2015-08-14 20:29:30 +00:00
return CenteredDiv ;
2016-09-22 23:39:48 +00:00
} ( ) ;
2015-08-14 16:30:03 +00:00
2016-09-22 23:39:48 +00:00
exports . default = CenteredDiv ;
2017-04-07 22:15:31 +00:00
module . exports = exports [ 'default' ] ;
2015-08-14 16:30:03 +00:00
2016-08-30 22:48:51 +00:00
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 23 */
2016-08-30 22:48:51 +00:00
/***/ function ( module , exports , _ _webpack _require _ _ ) {
2016-09-01 21:07:06 +00:00
exports = module . exports = _ _webpack _require _ _ ( 24 ) ( ) ;
2016-08-30 22:48:51 +00:00
// imports
// module
2017-05-18 09:22:52 +00:00
exports . push ( [ module . id , " . dg { \ n /** Clear list styles */ \ n /* Auto-place container */ \ n /* Auto-placed GUI's */ \ n /* Line items that don't contain folders. */ \ n /** Folder names */ \ n /** Hides closed items */ \ n /** Controller row */ \ n /** Name-half (left) */ \ n /** Controller-half (right) */ \ n /** Controller placement */ \ n /** Shorter number boxes when slider is present. */ \ n /** Ensure the entire boolean and function row shows a hand */ \ n /** allow overflow for color selector */ } \ n . dg ul { \ n list - style : none ; \ n margin : 0 ; \ n padding : 0 ; \ n width : 100 % ; \ n clear : both ; } \ n . dg . ac { \ n position : fixed ; \ n top : 0 ; \ n left : 0 ; \ n right : 0 ; \ n height : 0 ; \ n z - index : 0 ; } \ n . dg : not ( . ac ) . main { \ n /** Exclude mains in ac so that we don't hide close button */ \ n overflow : hidden ; } \ n . dg . main { \ n - webkit - transition : opacity 0.1 s linear ; \ n - o - transition : opacity 0.1 s linear ; \ n - moz - transition : opacity 0.1 s linear ; \ n transition : opacity 0.1 s linear ; } \ n . dg . main . taller - than - window { \ n overflow - y : auto ; } \ n . dg . main . taller - than - window . close - button { \ n opacity : 1 ; \ n /* TODO, these are style notes */ \ n margin - top : - 1 px ; \ n border - top : 1 px solid # 2 c2c2c ; } \ n . dg . main ul . closed . close - button { \ n opacity : 1 ! important ; } \ n . dg . main : hover . close - button , \ n . dg . main . close - button . drag { \ n opacity : 1 ; } \ n . dg . main . close - button { \ n /*opacity: 0;*/ \ n - webkit - transition : opacity 0.1 s linear ; \ n - o - transition : opacity 0.1 s linear ; \ n - moz - transition : opacity 0.1 s linear ; \ n transition : opacity 0.1 s linear ; \ n border : 0 ; \ n line - height : 19 px ; \ n height : 20 px ; \ n /* TODO, these are style notes */ \ n cursor : pointer ; \ n text - align : center ; \ n background - color : # 000 ; } \ n . dg . main . close - button . close - top { \ n position : relative ; } \ n . dg . main . close - button . close - bottom { \ n position : absolute ; } \ n . dg . main . close - button : hover { \ n background - color : # 111 ; } \ n . dg . a { \ n float : right ; \ n margin - right : 15 px ; \ n overflow - y : visible ; } \ n . dg . a . has - save > ul . close - top { \ n margin - top : 0 ; } \ n . dg . a . has - save > ul . close - bottom { \ n margin - top : 27 px ; } \ n . dg . a . has - save > ul . closed { \ n margin - top : 0 ; } \ n . dg . a . save - row { \ n top : 0 ; \ n z - index : 1002 ; } \ n . dg . a . save - row . close - top { \ n position : relative ; } \ n . dg . a . save - row . close - bottom { \ n position : fixed ; } \ n . dg li { \ n - webkit - transition : height 0.1 s ease - out ; \ n - o - transition : height 0.1 s ease - out ; \ n - moz - transition : height 0.1 s ease - out ; \ n transition : height 0.1 s ease - out ; \ n - webkit - transition : overflow 0.1 s linear ; \ n - o - transition : overflow 0.1 s linear ; \ n - moz - transition : overflow 0.1 s linear ; \ n transition : overflow 0.1 s linear ; } \ n . dg li : not ( . folder ) { \ n cursor : auto ; \ n height : 27 px ; \ n line - height : 27 px ; \ n padding : 0 4 px 0 5 px ; } \ n . dg li . folder { \ n padding : 0 ; \ n border - left : 4 px solid transparent ; } \ n . dg li . title { \ n cursor : pointer ; \ n margin - left : - 4 px ; } \ n . dg . closed li : not ( . title ) , \ n . dg . closed ul li , \ n . dg . closed ul li > * { \ n height : 0 ; \ n overflow : hidden ; \ n border : 0 ; } \ n . dg . cr { \ n clear : both ; \ n padding - left : 3 px ; \ n height : 27 px ; \ n overflow : hidden ; } \ n . dg . property - name { \ n cursor : default ; \ n float : left ; \ n clear : left ; \ n width : 40 % ; \ n overflow : hidden ; \ n text - overflow : ellipsis ; } \ n . dg . c { \ n float : left ; \ n width : 60 % ; \ n position : relative ; } \ n . dg . c input [ type = text ] { \ n border : 0 ; \ n margin - top : 4 px ; \ n padding : 3 px ; \ n width : 100 % ; \ n float : right ; } \ n . dg . has - slider input [ type = text ] { \ n width : 30 % ; \ n /*display: none;*/ \ n margin - left : 0 ; } \ n . dg . slider { \ n float : left ; \ n width : 66 % ; \ n margin - left : - 5 px ; \ n margin - right : 0 ; \ n height : 19 px ; \ n margin - top : 4 px ; } \ n . dg . slider - fg { \ n height : 100 % ; } \ n . dg . c input [ type = checkbox ] { \ n margin - top : 7 px ; } \ n . dg . c sele
2016-08-30 22:48:51 +00:00
// exports
/***/ } ,
2016-09-01 21:07:06 +00:00
/* 24 */
2016-08-30 22:48:51 +00:00
/***/ function ( module , exports ) {
2017-05-18 09:22:52 +00:00
/ *
MIT License http : //www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @ sokra
* /
// css base code, injected by the css-loader
module . exports = function ( ) {
var list = [ ] ;
// return the list of modules as css string
list . toString = function toString ( ) {
var result = [ ] ;
for ( var i = 0 ; i < this . length ; i ++ ) {
var item = this [ i ] ;
if ( item [ 2 ] ) {
result . push ( "@media " + item [ 2 ] + "{" + item [ 1 ] + "}" ) ;
} else {
result . push ( item [ 1 ] ) ;
}
}
return result . join ( "" ) ;
} ;
// import a list of modules into the list
list . i = function ( modules , mediaQuery ) {
if ( typeof modules === "string" )
modules = [ [ null , modules , "" ] ] ;
var alreadyImportedModules = { } ;
for ( var i = 0 ; i < this . length ; i ++ ) {
var id = this [ i ] [ 0 ] ;
if ( typeof id === "number" )
alreadyImportedModules [ id ] = true ;
}
for ( i = 0 ; i < modules . length ; i ++ ) {
var item = modules [ i ] ;
// skip already imported module
// this implementation is not 100% perfect for weird media query combinations
// when a module is imported multiple times with different media queries.
// I hope this will never occur (Hey this way we have smaller bundles)
if ( typeof item [ 0 ] !== "number" || ! alreadyImportedModules [ item [ 0 ] ] ) {
if ( mediaQuery && ! item [ 2 ] ) {
item [ 2 ] = mediaQuery ;
} else if ( mediaQuery ) {
item [ 2 ] = "(" + item [ 2 ] + ") and (" + mediaQuery + ")" ;
}
list . push ( item ) ;
}
}
} ;
return list ;
} ;
2016-08-30 22:48:51 +00:00
2015-08-14 16:30:03 +00:00
/***/ }
/******/ ] )
} ) ;
;
//# sourceMappingURL=dat.gui.js.map