12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575 |
- /**
- * 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
- */
- function ___$insertStyle( css ) {
- if ( ! css ) {
- return;
- }
- if ( typeof window === 'undefined' ) {
- return;
- }
- var style = document.createElement( 'style' );
- style.setAttribute( 'type', 'text/css' );
- style.innerHTML = css;
- document.head.appendChild( style );
- return css;
- }
- function colorToString( 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 + '}';
- }
- return 'unknown format';
- }
- var ARR_EACH = Array.prototype.forEach;
- var ARR_SLICE = Array.prototype.slice;
- var Common = {
- BREAK: {},
- extend: function extend( target ) {
- this.each( ARR_SLICE.call( arguments, 1 ), function ( obj ) {
- var keys = this.isObject( obj ) ? Object.keys( obj ) : [];
- keys.forEach( function ( key ) {
- if ( ! this.isUndefined( obj[ key ] ) ) {
- target[ key ] = obj[ key ];
- }
- }.bind( this ) );
- }, this );
- return target;
- },
- defaults: function defaults( target ) {
- this.each( ARR_SLICE.call( arguments, 1 ), function ( obj ) {
- var keys = this.isObject( obj ) ? Object.keys( obj ) : [];
- keys.forEach( function ( key ) {
- if ( this.isUndefined( target[ key ] ) ) {
- target[ key ] = obj[ key ];
- }
- }.bind( this ) );
- }, 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 ) {
- if ( ! obj ) {
- return;
- }
- if ( ARR_EACH && obj.forEach && obj.forEach === ARR_EACH ) {
- obj.forEach( itr, scope );
- } else if ( obj.length === obj.length + 0 ) {
- var key = void 0;
- var l = void 0;
- for ( key = 0, l = obj.length; key < l; key ++ ) {
- if ( key in obj && itr.call( scope, obj[ key ], key ) === this.BREAK ) {
- return;
- }
- }
- } else {
- for ( var _key in obj ) {
- if ( itr.call( scope, obj[ _key ], _key ) === this.BREAK ) {
- return;
- }
- }
- }
- },
- defer: function defer( fnc ) {
- setTimeout( fnc, 0 );
- },
- debounce: function debounce( func, threshold, callImmediately ) {
- var timeout = void 0;
- return function () {
- var obj = this;
- var args = arguments;
- function delayed() {
- timeout = null;
- if ( ! callImmediately ) func.apply( obj, args );
- }
- var callNow = callImmediately || ! timeout;
- clearTimeout( timeout );
- timeout = setTimeout( delayed, threshold );
- if ( callNow ) {
- func.apply( obj, args );
- }
- };
- },
- 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;
- },
- isNaN: function ( _isNaN ) {
- function isNaN() {
- return _isNaN.apply( this, arguments );
- }
- isNaN.toString = function () {
- return _isNaN.toString();
- };
- return isNaN;
- }( function ( obj ) {
- return isNaN( obj );
- } ),
- 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 obj instanceof Function;
- }
- };
- var INTERPRETATIONS = [
- {
- litmus: Common.isString,
- conversions: {
- THREE_CHAR_HEX: {
- read: function read( original ) {
- var test = original.match( /^#([A-F0-9])([A-F0-9])([A-F0-9])$/i );
- if ( test === null ) {
- return false;
- }
- return {
- space: 'HEX',
- hex: parseInt( '0x' + test[ 1 ].toString() + test[ 1 ].toString() + test[ 2 ].toString() + test[ 2 ].toString() + test[ 3 ].toString() + test[ 3 ].toString(), 0 )
- };
- },
- write: colorToString
- },
- SIX_CHAR_HEX: {
- read: function read( original ) {
- var test = original.match( /^#([A-F0-9]{6})$/i );
- if ( test === null ) {
- return false;
- }
- return {
- space: 'HEX',
- hex: parseInt( '0x' + test[ 1 ].toString(), 0 )
- };
- },
- write: colorToString
- },
- CSS_RGB: {
- read: function read( original ) {
- var test = original.match( /^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/ );
- if ( test === null ) {
- return false;
- }
- return {
- space: 'RGB',
- r: parseFloat( test[ 1 ] ),
- g: parseFloat( test[ 2 ] ),
- b: parseFloat( test[ 3 ] )
- };
- },
- write: colorToString
- },
- CSS_RGBA: {
- read: function read( original ) {
- var test = original.match( /^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/ );
- if ( test === null ) {
- return false;
- }
- return {
- space: 'RGB',
- r: parseFloat( test[ 1 ] ),
- g: parseFloat( test[ 2 ] ),
- b: parseFloat( test[ 3 ] ),
- a: parseFloat( test[ 4 ] )
- };
- },
- write: colorToString
- }
- }
- },
- {
- litmus: Common.isNumber,
- conversions: {
- HEX: {
- read: function read( original ) {
- return {
- space: 'HEX',
- hex: original,
- conversionName: 'HEX'
- };
- },
- write: function write( color ) {
- return color.hex;
- }
- }
- }
- },
- {
- litmus: Common.isArray,
- conversions: {
- RGB_ARRAY: {
- read: function read( original ) {
- if ( original.length !== 3 ) {
- return false;
- }
- 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 ) {
- if ( original.length !== 4 ) return false;
- 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 ];
- }
- }
- }
- },
- {
- litmus: Common.isObject,
- conversions: {
- RGBA_OBJ: {
- read: function read( original ) {
- if ( Common.isNumber( original.r ) && Common.isNumber( original.g ) && Common.isNumber( original.b ) && Common.isNumber( original.a ) ) {
- 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 ) {
- if ( Common.isNumber( original.r ) && Common.isNumber( original.g ) && Common.isNumber( original.b ) ) {
- 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 ) {
- if ( Common.isNumber( original.h ) && Common.isNumber( original.s ) && Common.isNumber( original.v ) && Common.isNumber( original.a ) ) {
- 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 ) {
- if ( Common.isNumber( original.h ) && Common.isNumber( original.s ) && Common.isNumber( original.v ) ) {
- 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
- };
- }
- }
- }
- } ];
- var result = void 0;
- var toReturn = void 0;
- var interpret = function interpret() {
- toReturn = false;
- var original = arguments.length > 1 ? Common.toArray( arguments ) : arguments[ 0 ];
- Common.each( INTERPRETATIONS, function ( family ) {
- if ( family.litmus( original ) ) {
- Common.each( family.conversions, function ( conversion, conversionName ) {
- result = conversion.read( original );
- if ( toReturn === false && result !== false ) {
- toReturn = result;
- result.conversionName = conversionName;
- result.conversion = conversion;
- return Common.BREAK;
- }
- } );
- return Common.BREAK;
- }
- } );
- return toReturn;
- };
- var tmpComponent = void 0;
- 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 );
- 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 ) {
- var min = Math.min( r, g, b );
- var max = Math.max( r, g, b );
- var delta = max - min;
- var h = void 0;
- var s = void 0;
- if ( max !== 0 ) {
- s = delta / max;
- } else {
- return {
- h: NaN,
- s: 0,
- v: 0
- };
- }
- if ( r === max ) {
- h = ( g - b ) / delta;
- } else if ( g === max ) {
- 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 );
- }
- };
- 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;
- };
- var classCallCheck = function ( instance, Constructor ) {
- if ( ! ( instance instanceof Constructor ) ) {
- throw new TypeError( "Cannot call a class as a function" );
- }
- };
- var createClass = function () {
- function defineProperties( target, props ) {
- for ( var i = 0; i < props.length; i ++ ) {
- var descriptor = props[ i ];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ( "value" in descriptor ) descriptor.writable = true;
- Object.defineProperty( target, descriptor.key, descriptor );
- }
- }
- return function ( Constructor, protoProps, staticProps ) {
- if ( protoProps ) defineProperties( Constructor.prototype, protoProps );
- if ( staticProps ) defineProperties( Constructor, staticProps );
- return Constructor;
- };
- }();
- var get = function get( object, property, receiver ) {
- if ( object === null ) object = Function.prototype;
- var desc = Object.getOwnPropertyDescriptor( object, property );
- if ( desc === undefined ) {
- var parent = Object.getPrototypeOf( object );
- if ( parent === null ) {
- return undefined;
- } else {
- return get( parent, property, receiver );
- }
- } else if ( "value" in desc ) {
- return desc.value;
- } else {
- var getter = desc.get;
- if ( getter === undefined ) {
- return undefined;
- }
- return getter.call( receiver );
- }
- };
- var inherits = function ( 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;
- };
- var possibleConstructorReturn = function ( 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;
- };
- var Color = function () {
- function Color() {
- classCallCheck( this, Color );
- this.__state = interpret.apply( this, arguments );
- if ( this.__state === false ) {
- throw new Error( 'Failed to interpret color arguments' );
- }
- this.__state.a = this.__state.a || 1;
- }
- createClass( Color, [ {
- key: 'toString',
- value: function toString() {
- return colorToString( this );
- }
- }, {
- key: 'toHexString',
- value: function toHexString() {
- return colorToString( this, true );
- }
- }, {
- key: 'toOriginal',
- value: function toOriginal() {
- return this.__state.conversion.write( this );
- }
- } ] );
- return Color;
- }();
- function defineRGBComponent( target, component, componentHexIndex ) {
- Object.defineProperty( target, component, {
- get: function get$$1() {
- if ( this.__state.space === 'RGB' ) {
- return this.__state[ component ];
- }
- Color.recalculateRGB( this, component, componentHexIndex );
- return this.__state[ component ];
- },
- set: function set$$1( 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$$1() {
- if ( this.__state.space === 'HSV' ) {
- return this.__state[ component ];
- }
- Color.recalculateHSV( this );
- return this.__state[ component ];
- },
- set: function set$$1( v ) {
- if ( this.__state.space !== 'HSV' ) {
- Color.recalculateHSV( this );
- this.__state.space = 'HSV';
- }
- this.__state[ component ] = v;
- }
- } );
- }
- Color.recalculateRGB = function ( color, component, componentHexIndex ) {
- if ( color.__state.space === 'HEX' ) {
- color.__state[ component ] = ColorMath.component_from_hex( color.__state.hex, componentHexIndex );
- } else if ( color.__state.space === 'HSV' ) {
- Common.extend( color.__state, ColorMath.hsv_to_rgb( color.__state.h, color.__state.s, color.__state.v ) );
- } else {
- throw new Error( 'Corrupted color state' );
- }
- };
- Color.recalculateHSV = function ( color ) {
- var result = ColorMath.rgb_to_hsv( color.r, color.g, color.b );
- Common.extend( color.__state, {
- s: result.s,
- v: result.v
- } );
- if ( ! Common.isNaN( result.h ) ) {
- color.__state.h = result.h;
- } else if ( Common.isUndefined( color.__state.h ) ) {
- 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$$1() {
- return this.__state.a;
- },
- set: function set$$1( v ) {
- this.__state.a = v;
- }
- } );
- Object.defineProperty( Color.prototype, 'hex', {
- get: function get$$1() {
- if ( this.__state.space !== 'HEX' ) {
- this.__state.hex = ColorMath.rgb_to_hex( this.r, this.g, this.b );
- this.__state.space = 'HEX';
- }
- return this.__state.hex;
- },
- set: function set$$1( v ) {
- this.__state.space = 'HEX';
- this.__state.hex = v;
- }
- } );
- var Controller = function () {
- function Controller( object, property ) {
- classCallCheck( this, Controller );
- this.initialValue = object[ property ];
- this.domElement = document.createElement( 'div' );
- this.object = object;
- this.property = property;
- this.__onChange = undefined;
- this.__onFinishChange = undefined;
- }
- createClass( Controller, [ {
- key: 'onChange',
- value: function onChange( fnc ) {
- this.__onChange = fnc;
- return this;
- }
- }, {
- key: 'onFinishChange',
- value: function onFinishChange( fnc ) {
- this.__onFinishChange = fnc;
- return this;
- }
- }, {
- key: 'setValue',
- value: function setValue( newValue ) {
- this.object[ this.property ] = newValue;
- if ( this.__onChange ) {
- this.__onChange.call( this, newValue );
- }
- this.updateDisplay();
- return this;
- }
- }, {
- key: 'getValue',
- value: function getValue() {
- return this.object[ this.property ];
- }
- }, {
- key: 'updateDisplay',
- value: function updateDisplay() {
- return this;
- }
- }, {
- key: 'isModified',
- value: function isModified() {
- return this.initialValue !== this.getValue();
- }
- } ] );
- return Controller;
- }();
- var EVENT_MAP = {
- HTMLEvents: [ 'change' ],
- MouseEvents: [ 'click', 'mousemove', 'mousedown', 'mouseup', 'mouseover' ],
- KeyboardEvents: [ 'keydown' ]
- };
- var EVENT_MAP_INV = {};
- Common.each( EVENT_MAP, function ( v, k ) {
- Common.each( v, function ( e ) {
- EVENT_MAP_INV[ e ] = k;
- } );
- } );
- var CSS_VALUE_PIXELS = /(\d+(\.\d+)?)px/;
- function cssValueToPixels( val ) {
- if ( val === '0' || Common.isUndefined( val ) ) {
- return 0;
- }
- var match = val.match( CSS_VALUE_PIXELS );
- if ( ! Common.isNull( match ) ) {
- return parseFloat( match[ 1 ] );
- }
- return 0;
- }
- var dom = {
- makeSelectable: function makeSelectable( elem, selectable ) {
- if ( elem === undefined || elem.style === undefined ) return;
- elem.onselectstart = selectable ? function () {
- return false;
- } : function () {};
- elem.style.MozUserSelect = selectable ? 'auto' : 'none';
- elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';
- elem.unselectable = selectable ? 'on' : 'off';
- },
- makeFullscreen: function makeFullscreen( elem, hor, vert ) {
- var vertical = vert;
- var horizontal = hor;
- if ( Common.isUndefined( horizontal ) ) {
- horizontal = true;
- }
- if ( Common.isUndefined( vertical ) ) {
- vertical = true;
- }
- elem.style.position = 'absolute';
- if ( horizontal ) {
- elem.style.left = 0;
- elem.style.right = 0;
- }
- if ( vertical ) {
- elem.style.top = 0;
- elem.style.bottom = 0;
- }
- },
- fakeEvent: function fakeEvent( elem, eventType, pars, aux ) {
- var params = pars || {};
- 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':
- {
- 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,
- 0,
- clientX,
- clientY,
- false, false, false, false, 0, null );
- break;
- }
- case 'KeyboardEvents':
- {
- var init = evt.initKeyboardEvent || evt.initKeyEvent;
- Common.defaults( params, {
- 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;
- }
- default:
- {
- evt.initEvent( eventType, params.bubbles || false, params.cancelable || true );
- break;
- }
- }
- Common.defaults( evt, aux );
- elem.dispatchEvent( evt );
- },
- 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 );
- }
- return dom;
- },
- 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 );
- }
- return dom;
- },
- addClass: function addClass( elem, className ) {
- if ( elem.className === undefined ) {
- elem.className = className;
- } else if ( elem.className !== className ) {
- var classes = elem.className.split( / +/ );
- if ( classes.indexOf( className ) === - 1 ) {
- classes.push( className );
- elem.className = classes.join( ' ' ).replace( /^\s+/, '' ).replace( /\s+$/, '' );
- }
- }
- return dom;
- },
- removeClass: function removeClass( elem, className ) {
- if ( className ) {
- 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( ' ' );
- }
- }
- } else {
- elem.className = undefined;
- }
- return dom;
- },
- hasClass: function hasClass( elem, className ) {
- return new RegExp( '(?:^|\\s+)' + className + '(?:\\s+|$)' ).test( elem.className ) || false;
- },
- getWidth: function getWidth( elem ) {
- var style = getComputedStyle( elem );
- return cssValueToPixels( style[ 'border-left-width' ] ) + cssValueToPixels( style[ 'border-right-width' ] ) + cssValueToPixels( style[ 'padding-left' ] ) + cssValueToPixels( style[ 'padding-right' ] ) + cssValueToPixels( style.width );
- },
- getHeight: function getHeight( elem ) {
- var style = getComputedStyle( elem );
- return cssValueToPixels( style[ 'border-top-width' ] ) + cssValueToPixels( style[ 'border-bottom-width' ] ) + cssValueToPixels( style[ 'padding-top' ] ) + cssValueToPixels( style[ 'padding-bottom' ] ) + cssValueToPixels( style.height );
- },
- getOffset: function getOffset( el ) {
- var elem = el;
- var offset = { left: 0, top: 0 };
- if ( elem.offsetParent ) {
- do {
- offset.left += elem.offsetLeft;
- offset.top += elem.offsetTop;
- elem = elem.offsetParent;
- } while ( elem );
- }
- return offset;
- },
- isActive: function isActive( elem ) {
- return elem === document.activeElement && ( elem.type || elem.href );
- }
- };
- var BooleanController = function ( _Controller ) {
- inherits( BooleanController, _Controller );
- function BooleanController( object, property ) {
- classCallCheck( this, BooleanController );
- var _this2 = possibleConstructorReturn( this, ( BooleanController.__proto__ || Object.getPrototypeOf( BooleanController ) ).call( this, object, property ) );
- var _this = _this2;
- _this2.__prev = _this2.getValue();
- _this2.__checkbox = document.createElement( 'input' );
- _this2.__checkbox.setAttribute( 'type', 'checkbox' );
- function onChange() {
- _this.setValue( ! _this.__prev );
- }
- dom.bind( _this2.__checkbox, 'change', onChange, false );
- _this2.domElement.appendChild( _this2.__checkbox );
- _this2.updateDisplay();
- return _this2;
- }
- createClass( BooleanController, [ {
- key: 'setValue',
- value: function setValue( v ) {
- var toReturn = get( BooleanController.prototype.__proto__ || Object.getPrototypeOf( BooleanController.prototype ), 'setValue', this ).call( this, v );
- if ( this.__onFinishChange ) {
- this.__onFinishChange.call( this, this.getValue() );
- }
- this.__prev = this.getValue();
- return toReturn;
- }
- }, {
- key: 'updateDisplay',
- value: function updateDisplay() {
- if ( this.getValue() === true ) {
- this.__checkbox.setAttribute( 'checked', 'checked' );
- this.__checkbox.checked = true;
- this.__prev = true;
- } else {
- this.__checkbox.checked = false;
- this.__prev = false;
- }
- return get( BooleanController.prototype.__proto__ || Object.getPrototypeOf( BooleanController.prototype ), 'updateDisplay', this ).call( this );
- }
- } ] );
- return BooleanController;
- }( Controller );
- var OptionController = function ( _Controller ) {
- inherits( OptionController, _Controller );
- function OptionController( object, property, opts ) {
- classCallCheck( this, OptionController );
- var _this2 = possibleConstructorReturn( this, ( OptionController.__proto__ || Object.getPrototypeOf( OptionController ) ).call( this, object, property ) );
- var options = opts;
- var _this = _this2;
- _this2.__select = document.createElement( 'select' );
- if ( Common.isArray( options ) ) {
- var map = {};
- Common.each( options, function ( element ) {
- map[ element ] = element;
- } );
- options = map;
- }
- Common.each( options, function ( value, key ) {
- var opt = document.createElement( 'option' );
- opt.innerHTML = key;
- opt.setAttribute( 'value', value );
- _this.__select.appendChild( opt );
- } );
- _this2.updateDisplay();
- dom.bind( _this2.__select, 'change', function () {
- var desiredValue = this.options[ this.selectedIndex ].value;
- _this.setValue( desiredValue );
- } );
- _this2.domElement.appendChild( _this2.__select );
- return _this2;
- }
- createClass( OptionController, [ {
- key: 'setValue',
- value: function setValue( v ) {
- var toReturn = get( OptionController.prototype.__proto__ || Object.getPrototypeOf( OptionController.prototype ), 'setValue', this ).call( this, v );
- if ( this.__onFinishChange ) {
- this.__onFinishChange.call( this, this.getValue() );
- }
- return toReturn;
- }
- }, {
- key: 'updateDisplay',
- value: function updateDisplay() {
- if ( dom.isActive( this.__select ) ) return this;
- this.__select.value = this.getValue();
- return get( OptionController.prototype.__proto__ || Object.getPrototypeOf( OptionController.prototype ), 'updateDisplay', this ).call( this );
- }
- } ] );
- return OptionController;
- }( Controller );
- var StringController = function ( _Controller ) {
- inherits( StringController, _Controller );
- function StringController( object, property ) {
- classCallCheck( this, StringController );
- var _this2 = possibleConstructorReturn( this, ( StringController.__proto__ || Object.getPrototypeOf( StringController ) ).call( this, object, property ) );
- var _this = _this2;
- function onChange() {
- _this.setValue( _this.__input.value );
- }
- function onBlur() {
- if ( _this.__onFinishChange ) {
- _this.__onFinishChange.call( _this, _this.getValue() );
- }
- }
- _this2.__input = document.createElement( 'input' );
- _this2.__input.setAttribute( 'type', 'text' );
- dom.bind( _this2.__input, 'keyup', onChange );
- dom.bind( _this2.__input, 'change', onChange );
- dom.bind( _this2.__input, 'blur', onBlur );
- dom.bind( _this2.__input, 'keydown', function ( e ) {
- if ( e.keyCode === 13 ) {
- this.blur();
- }
- } );
- _this2.updateDisplay();
- _this2.domElement.appendChild( _this2.__input );
- return _this2;
- }
- createClass( StringController, [ {
- key: 'updateDisplay',
- value: function updateDisplay() {
- if ( ! dom.isActive( this.__input ) ) {
- this.__input.value = this.getValue();
- }
- return get( StringController.prototype.__proto__ || Object.getPrototypeOf( StringController.prototype ), 'updateDisplay', this ).call( this );
- }
- } ] );
- return StringController;
- }( Controller );
- function numDecimals( x ) {
- var _x = x.toString();
- if ( _x.indexOf( '.' ) > - 1 ) {
- return _x.length - _x.indexOf( '.' ) - 1;
- }
- return 0;
- }
- var NumberController = function ( _Controller ) {
- inherits( NumberController, _Controller );
- function NumberController( object, property, params ) {
- classCallCheck( this, NumberController );
- var _this = possibleConstructorReturn( this, ( NumberController.__proto__ || Object.getPrototypeOf( NumberController ) ).call( this, object, property ) );
- var _params = params || {};
- _this.__min = _params.min;
- _this.__max = _params.max;
- _this.__step = _params.step;
- if ( Common.isUndefined( _this.__step ) ) {
- if ( _this.initialValue === 0 ) {
- _this.__impliedStep = 1;
- } else {
- _this.__impliedStep = Math.pow( 10, Math.floor( Math.log( Math.abs( _this.initialValue ) ) / Math.LN10 ) ) / 10;
- }
- } else {
- _this.__impliedStep = _this.__step;
- }
- _this.__precision = numDecimals( _this.__impliedStep );
- return _this;
- }
- createClass( NumberController, [ {
- key: 'setValue',
- value: function setValue( v ) {
- var _v = v;
- if ( this.__min !== undefined && _v < this.__min ) {
- _v = this.__min;
- } else if ( this.__max !== undefined && _v > this.__max ) {
- _v = this.__max;
- }
- if ( this.__step !== undefined && _v % this.__step !== 0 ) {
- _v = Math.round( _v / this.__step ) * this.__step;
- }
- return get( NumberController.prototype.__proto__ || Object.getPrototypeOf( NumberController.prototype ), 'setValue', this ).call( this, _v );
- }
- }, {
- key: 'min',
- value: function min( minValue ) {
- this.__min = minValue;
- return this;
- }
- }, {
- key: 'max',
- value: function max( maxValue ) {
- this.__max = maxValue;
- return this;
- }
- }, {
- key: 'step',
- value: function step( stepValue ) {
- this.__step = stepValue;
- this.__impliedStep = stepValue;
- this.__precision = numDecimals( stepValue );
- return this;
- }
- } ] );
- return NumberController;
- }( Controller );
- function roundToDecimal( value, decimals ) {
- var tenTo = Math.pow( 10, decimals );
- return Math.round( value * tenTo ) / tenTo;
- }
- var NumberControllerBox = function ( _NumberController ) {
- inherits( NumberControllerBox, _NumberController );
- function NumberControllerBox( object, property, params ) {
- classCallCheck( this, NumberControllerBox );
- var _this2 = possibleConstructorReturn( this, ( NumberControllerBox.__proto__ || Object.getPrototypeOf( NumberControllerBox ) ).call( this, object, property, params ) );
- _this2.__truncationSuspended = false;
- var _this = _this2;
- var prevY = void 0;
- function onChange() {
- var attempted = parseFloat( _this.__input.value );
- if ( ! Common.isNaN( attempted ) ) {
- _this.setValue( attempted );
- }
- }
- function onFinish() {
- if ( _this.__onFinishChange ) {
- _this.__onFinishChange.call( _this, _this.getValue() );
- }
- }
- function onBlur() {
- onFinish();
- }
- function onMouseDrag( e ) {
- var diff = prevY - e.clientY;
- _this.setValue( _this.getValue() + diff * _this.__impliedStep );
- prevY = e.clientY;
- }
- function onMouseUp() {
- dom.unbind( window, 'mousemove', onMouseDrag );
- dom.unbind( window, 'mouseup', onMouseUp );
- onFinish();
- }
- function onMouseDown( e ) {
- dom.bind( window, 'mousemove', onMouseDrag );
- dom.bind( window, 'mouseup', onMouseUp );
- prevY = e.clientY;
- }
- _this2.__input = document.createElement( 'input' );
- _this2.__input.setAttribute( 'type', 'text' );
- dom.bind( _this2.__input, 'change', onChange );
- dom.bind( _this2.__input, 'blur', onBlur );
- dom.bind( _this2.__input, 'mousedown', onMouseDown );
- dom.bind( _this2.__input, 'keydown', function ( e ) {
- if ( e.keyCode === 13 ) {
- _this.__truncationSuspended = true;
- this.blur();
- _this.__truncationSuspended = false;
- onFinish();
- }
- } );
- _this2.updateDisplay();
- _this2.domElement.appendChild( _this2.__input );
- return _this2;
- }
- createClass( NumberControllerBox, [ {
- key: 'updateDisplay',
- value: function updateDisplay() {
- this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal( this.getValue(), this.__precision );
- return get( NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf( NumberControllerBox.prototype ), 'updateDisplay', this ).call( this );
- }
- } ] );
- return NumberControllerBox;
- }( NumberController );
- function map( v, i1, i2, o1, o2 ) {
- return o1 + ( o2 - o1 ) * ( ( v - i1 ) / ( i2 - i1 ) );
- }
- var NumberControllerSlider = function ( _NumberController ) {
- inherits( NumberControllerSlider, _NumberController );
- function NumberControllerSlider( object, property, min, max, step ) {
- classCallCheck( this, NumberControllerSlider );
- var _this2 = possibleConstructorReturn( this, ( NumberControllerSlider.__proto__ || Object.getPrototypeOf( NumberControllerSlider ) ).call( this, object, property, { min: min, max: max, step: step } ) );
- var _this = _this2;
- _this2.__background = document.createElement( 'div' );
- _this2.__foreground = document.createElement( 'div' );
- dom.bind( _this2.__background, 'mousedown', onMouseDown );
- dom.bind( _this2.__background, 'touchstart', onTouchStart );
- dom.addClass( _this2.__background, 'slider' );
- dom.addClass( _this2.__foreground, 'slider-fg' );
- function onMouseDown( e ) {
- document.activeElement.blur();
- dom.bind( window, 'mousemove', onMouseDrag );
- dom.bind( window, 'mouseup', onMouseUp );
- onMouseDrag( e );
- }
- function onMouseDrag( e ) {
- e.preventDefault();
- var bgRect = _this.__background.getBoundingClientRect();
- _this.setValue( map( e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max ) );
- return false;
- }
- function onMouseUp() {
- dom.unbind( window, 'mousemove', onMouseDrag );
- dom.unbind( window, 'mouseup', onMouseUp );
- if ( _this.__onFinishChange ) {
- _this.__onFinishChange.call( _this, _this.getValue() );
- }
- }
- function onTouchStart( e ) {
- if ( e.touches.length !== 1 ) {
- return;
- }
- dom.bind( window, 'touchmove', onTouchMove );
- dom.bind( window, 'touchend', onTouchEnd );
- onTouchMove( e );
- }
- function onTouchMove( e ) {
- var clientX = e.touches[ 0 ].clientX;
- var bgRect = _this.__background.getBoundingClientRect();
- _this.setValue( map( clientX, bgRect.left, bgRect.right, _this.__min, _this.__max ) );
- }
- function onTouchEnd() {
- dom.unbind( window, 'touchmove', onTouchMove );
- dom.unbind( window, 'touchend', onTouchEnd );
- if ( _this.__onFinishChange ) {
- _this.__onFinishChange.call( _this, _this.getValue() );
- }
- }
- _this2.updateDisplay();
- _this2.__background.appendChild( _this2.__foreground );
- _this2.domElement.appendChild( _this2.__background );
- return _this2;
- }
- createClass( NumberControllerSlider, [ {
- key: 'updateDisplay',
- value: function updateDisplay() {
- var pct = ( this.getValue() - this.__min ) / ( this.__max - this.__min );
- this.__foreground.style.width = pct * 100 + '%';
- return get( NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf( NumberControllerSlider.prototype ), 'updateDisplay', this ).call( this );
- }
- } ] );
- return NumberControllerSlider;
- }( NumberController );
- var FunctionController = function ( _Controller ) {
- inherits( FunctionController, _Controller );
- function FunctionController( object, property, text ) {
- classCallCheck( this, FunctionController );
- var _this2 = possibleConstructorReturn( this, ( FunctionController.__proto__ || Object.getPrototypeOf( FunctionController ) ).call( this, object, property ) );
- var _this = _this2;
- _this2.__button = document.createElement( 'div' );
- _this2.__button.innerHTML = text === undefined ? 'Fire' : text;
- dom.bind( _this2.__button, 'click', function ( e ) {
- e.preventDefault();
- _this.fire();
- return false;
- } );
- dom.addClass( _this2.__button, 'button' );
- _this2.domElement.appendChild( _this2.__button );
- return _this2;
- }
- createClass( FunctionController, [ {
- key: 'fire',
- value: function fire() {
- if ( this.__onChange ) {
- this.__onChange.call( this );
- }
- this.getValue().call( this.object );
- if ( this.__onFinishChange ) {
- this.__onFinishChange.call( this, this.getValue() );
- }
- }
- } ] );
- return FunctionController;
- }( Controller );
- var ColorController = function ( _Controller ) {
- inherits( ColorController, _Controller );
- function ColorController( object, property ) {
- classCallCheck( this, ColorController );
- var _this2 = possibleConstructorReturn( this, ( ColorController.__proto__ || Object.getPrototypeOf( ColorController ) ).call( this, object, property ) );
- _this2.__color = new Color( _this2.getValue() );
- _this2.__temp = new Color( 0 );
- var _this = _this2;
- _this2.domElement = document.createElement( 'div' );
- dom.makeSelectable( _this2.domElement, false );
- _this2.__selector = document.createElement( 'div' );
- _this2.__selector.className = 'selector';
- _this2.__saturation_field = document.createElement( 'div' );
- _this2.__saturation_field.className = 'saturation-field';
- _this2.__field_knob = document.createElement( 'div' );
- _this2.__field_knob.className = 'field-knob';
- _this2.__field_knob_border = '2px solid ';
- _this2.__hue_knob = document.createElement( 'div' );
- _this2.__hue_knob.className = 'hue-knob';
- _this2.__hue_field = document.createElement( 'div' );
- _this2.__hue_field.className = 'hue-field';
- _this2.__input = document.createElement( 'input' );
- _this2.__input.type = 'text';
- _this2.__input_textShadow = '0 1px 1px ';
- dom.bind( _this2.__input, 'keydown', function ( e ) {
- if ( e.keyCode === 13 ) {
- onBlur.call( this );
- }
- } );
- dom.bind( _this2.__input, 'blur', onBlur );
- dom.bind( _this2.__selector, 'mousedown', function () {
- dom.addClass( this, 'drag' ).bind( window, 'mouseup', function () {
- dom.removeClass( _this.__selector, 'drag' );
- } );
- } );
- dom.bind( _this2.__selector, 'touchstart', function () {
- dom.addClass( this, 'drag' ).bind( window, 'touchend', function () {
- dom.removeClass( _this.__selector, 'drag' );
- } );
- } );
- var valueField = document.createElement( 'div' );
- Common.extend( _this2.__selector.style, {
- width: '122px',
- height: '102px',
- padding: '3px',
- backgroundColor: '#222',
- boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'
- } );
- Common.extend( _this2.__field_knob.style, {
- position: 'absolute',
- width: '12px',
- height: '12px',
- border: _this2.__field_knob_border + ( _this2.__color.v < 0.5 ? '#fff' : '#000' ),
- boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',
- borderRadius: '12px',
- zIndex: 1
- } );
- Common.extend( _this2.__hue_knob.style, {
- position: 'absolute',
- width: '15px',
- height: '2px',
- borderRight: '4px solid #fff',
- zIndex: 1
- } );
- Common.extend( _this2.__saturation_field.style, {
- width: '100px',
- height: '100px',
- border: '1px solid #555',
- marginRight: '3px',
- display: 'inline-block',
- cursor: 'pointer'
- } );
- Common.extend( valueField.style, {
- width: '100%',
- height: '100%',
- background: 'none'
- } );
- linearGradient( valueField, 'top', 'rgba(0,0,0,0)', '#000' );
- Common.extend( _this2.__hue_field.style, {
- width: '15px',
- height: '100px',
- border: '1px solid #555',
- cursor: 'ns-resize',
- position: 'absolute',
- top: '3px',
- right: '3px'
- } );
- hueGradient( _this2.__hue_field );
- Common.extend( _this2.__input.style, {
- outline: 'none',
- textAlign: 'center',
- color: '#fff',
- border: 0,
- fontWeight: 'bold',
- textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'
- } );
- dom.bind( _this2.__saturation_field, 'mousedown', fieldDown );
- dom.bind( _this2.__saturation_field, 'touchstart', fieldDown );
- dom.bind( _this2.__field_knob, 'mousedown', fieldDown );
- dom.bind( _this2.__field_knob, 'touchstart', fieldDown );
- dom.bind( _this2.__hue_field, 'mousedown', fieldDownH );
- dom.bind( _this2.__hue_field, 'touchstart', fieldDownH );
- function fieldDown( e ) {
- setSV( e );
- dom.bind( window, 'mousemove', setSV );
- dom.bind( window, 'touchmove', setSV );
- dom.bind( window, 'mouseup', fieldUpSV );
- dom.bind( window, 'touchend', fieldUpSV );
- }
- function fieldDownH( e ) {
- setH( e );
- dom.bind( window, 'mousemove', setH );
- dom.bind( window, 'touchmove', setH );
- dom.bind( window, 'mouseup', fieldUpH );
- dom.bind( window, 'touchend', fieldUpH );
- }
- function fieldUpSV() {
- dom.unbind( window, 'mousemove', setSV );
- dom.unbind( window, 'touchmove', setSV );
- dom.unbind( window, 'mouseup', fieldUpSV );
- dom.unbind( window, 'touchend', fieldUpSV );
- onFinish();
- }
- function fieldUpH() {
- dom.unbind( window, 'mousemove', setH );
- dom.unbind( window, 'touchmove', setH );
- dom.unbind( window, 'mouseup', fieldUpH );
- dom.unbind( window, 'touchend', fieldUpH );
- onFinish();
- }
- function onBlur() {
- var i = interpret( this.value );
- if ( i !== false ) {
- _this.__color.__state = i;
- _this.setValue( _this.__color.toOriginal() );
- } else {
- this.value = _this.__color.toString();
- }
- }
- function onFinish() {
- if ( _this.__onFinishChange ) {
- _this.__onFinishChange.call( _this, _this.__color.toOriginal() );
- }
- }
- _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 );
- _this2.domElement.appendChild( _this2.__input );
- _this2.domElement.appendChild( _this2.__selector );
- _this2.updateDisplay();
- function setSV( e ) {
- if ( e.type.indexOf( 'touch' ) === - 1 ) {
- e.preventDefault();
- }
- var fieldRect = _this.__saturation_field.getBoundingClientRect();
- var _ref = e.touches && e.touches[ 0 ] || e,
- clientX = _ref.clientX,
- clientY = _ref.clientY;
- var s = ( clientX - fieldRect.left ) / ( fieldRect.right - fieldRect.left );
- var v = 1 - ( clientY - fieldRect.top ) / ( fieldRect.bottom - fieldRect.top );
- if ( v > 1 ) {
- v = 1;
- } else if ( v < 0 ) {
- v = 0;
- }
- if ( s > 1 ) {
- s = 1;
- } else if ( s < 0 ) {
- s = 0;
- }
- _this.__color.v = v;
- _this.__color.s = s;
- _this.setValue( _this.__color.toOriginal() );
- return false;
- }
- function setH( e ) {
- if ( e.type.indexOf( 'touch' ) === - 1 ) {
- e.preventDefault();
- }
- var fieldRect = _this.__hue_field.getBoundingClientRect();
- var _ref2 = e.touches && e.touches[ 0 ] || e,
- clientY = _ref2.clientY;
- var h = 1 - ( clientY - fieldRect.top ) / ( fieldRect.bottom - fieldRect.top );
- if ( h > 1 ) {
- h = 1;
- } else if ( h < 0 ) {
- h = 0;
- }
- _this.__color.h = h * 360;
- _this.setValue( _this.__color.toOriginal() );
- return false;
- }
- return _this2;
- }
- createClass( ColorController, [ {
- key: 'updateDisplay',
- value: function updateDisplay() {
- var i = interpret( this.getValue() );
- if ( i !== false ) {
- var mismatch = false;
- Common.each( Color.COMPONENTS, function ( component ) {
- if ( ! Common.isUndefined( i[ component ] ) && ! Common.isUndefined( this.__color.__state[ component ] ) && i[ component ] !== this.__color.__state[ component ] ) {
- mismatch = true;
- return {};
- }
- }, this );
- if ( mismatch ) {
- Common.extend( this.__color.__state, i );
- }
- }
- Common.extend( this.__temp.__state, this.__color.__state );
- this.__temp.a = 1;
- var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;
- var _flip = 255 - flip;
- Common.extend( this.__field_knob.style, {
- marginLeft: 100 * this.__color.s - 7 + 'px',
- marginTop: 100 * ( 1 - this.__color.v ) - 7 + 'px',
- backgroundColor: this.__temp.toHexString(),
- border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'
- } );
- this.__hue_knob.style.marginTop = ( 1 - this.__color.h / 360 ) * 100 + 'px';
- this.__temp.s = 1;
- this.__temp.v = 1;
- linearGradient( this.__saturation_field, 'left', '#fff', this.__temp.toHexString() );
- this.__input.value = this.__color.toString();
- Common.extend( this.__input.style, {
- backgroundColor: this.__color.toHexString(),
- color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',
- textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'
- } );
- }
- } ] );
- return ColorController;
- }( Controller );
- var vendors = [ '-moz-', '-o-', '-webkit-', '-ms-', '' ];
- function linearGradient( elem, x, a, b ) {
- elem.style.background = '';
- Common.each( vendors, function ( vendor ) {
- 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%);';
- }
- var css = {
- 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 );
- },
- inject: function inject( cssContent, indoc ) {
- var doc = indoc || document;
- var injected = document.createElement( 'style' );
- injected.type = 'text/css';
- injected.innerHTML = cssContent;
- var head = doc.getElementsByTagName( 'head' )[ 0 ];
- try {
- head.appendChild( injected );
- } catch ( e ) {
- }
- }
- };
- var saveDialogContents = "<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>";
- var ControllerFactory = function ControllerFactory( object, property ) {
- var initialValue = object[ property ];
- if ( Common.isArray( arguments[ 2 ] ) || Common.isObject( arguments[ 2 ] ) ) {
- return new OptionController( object, property, arguments[ 2 ] );
- }
- if ( Common.isNumber( initialValue ) ) {
- if ( Common.isNumber( arguments[ 2 ] ) && Common.isNumber( arguments[ 3 ] ) ) {
- if ( Common.isNumber( arguments[ 4 ] ) ) {
- return new NumberControllerSlider( object, property, arguments[ 2 ], arguments[ 3 ], arguments[ 4 ] );
- }
- return new NumberControllerSlider( object, property, arguments[ 2 ], arguments[ 3 ] );
- }
- if ( Common.isNumber( arguments[ 4 ] ) ) {
- return new NumberControllerBox( object, property, { min: arguments[ 2 ], max: arguments[ 3 ], step: arguments[ 4 ] } );
- }
- return new NumberControllerBox( object, property, { min: arguments[ 2 ], max: arguments[ 3 ] } );
- }
- if ( Common.isString( initialValue ) ) {
- return new StringController( object, property );
- }
- if ( Common.isFunction( initialValue ) ) {
- return new FunctionController( object, property, '' );
- }
- if ( Common.isBoolean( initialValue ) ) {
- return new BooleanController( object, property );
- }
- return null;
- };
- function requestAnimationFrame( callback ) {
- setTimeout( callback, 1000 / 60 );
- }
- var requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;
- var CenteredDiv = function () {
- function CenteredDiv() {
- classCallCheck( this, CenteredDiv );
- this.backgroundElement = document.createElement( 'div' );
- Common.extend( this.backgroundElement.style, {
- 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'
- } );
- dom.makeFullscreen( this.backgroundElement );
- this.backgroundElement.style.position = 'fixed';
- this.domElement = document.createElement( 'div' );
- Common.extend( this.domElement.style, {
- 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'
- } );
- document.body.appendChild( this.backgroundElement );
- document.body.appendChild( this.domElement );
- var _this = this;
- dom.bind( this.backgroundElement, 'click', function () {
- _this.hide();
- } );
- }
- createClass( CenteredDiv, [ {
- key: 'show',
- value: function show() {
- var _this = this;
- this.backgroundElement.style.display = 'block';
- this.domElement.style.display = 'block';
- this.domElement.style.opacity = 0;
- this.domElement.style.webkitTransform = 'scale(1.1)';
- this.layout();
- Common.defer( function () {
- _this.backgroundElement.style.opacity = 1;
- _this.domElement.style.opacity = 1;
- _this.domElement.style.webkitTransform = 'scale(1)';
- } );
- }
- }, {
- key: 'hide',
- value: function hide() {
- var _this = this;
- var hide = function hide() {
- _this.domElement.style.display = 'none';
- _this.backgroundElement.style.display = 'none';
- dom.unbind( _this.domElement, 'webkitTransitionEnd', hide );
- dom.unbind( _this.domElement, 'transitionend', hide );
- dom.unbind( _this.domElement, 'oTransitionEnd', hide );
- };
- dom.bind( this.domElement, 'webkitTransitionEnd', hide );
- dom.bind( this.domElement, 'transitionend', hide );
- dom.bind( this.domElement, 'oTransitionEnd', hide );
- this.backgroundElement.style.opacity = 0;
- this.domElement.style.opacity = 0;
- this.domElement.style.webkitTransform = 'scale(1.1)';
- }
- }, {
- key: 'layout',
- value: function layout() {
- this.domElement.style.left = window.innerWidth / 2 - dom.getWidth( this.domElement ) / 2 + 'px';
- this.domElement.style.top = window.innerHeight / 2 - dom.getHeight( this.domElement ) / 2 + 'px';
- }
- } ] );
- return CenteredDiv;
- }();
- var styleSheet = ___$insertStyle( ".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n" );
- css.inject( styleSheet );
- var CSS_NAMESPACE = 'dg';
- var HIDE_KEY_CODE = 72;
- var CLOSE_BUTTON_HEIGHT = 20;
- var DEFAULT_DEFAULT_PRESET_NAME = 'Default';
- var SUPPORTS_LOCAL_STORAGE = function () {
- try {
- return !! window.localStorage;
- } catch ( e ) {
- return false;
- }
- }();
- var SAVE_DIALOGUE = void 0;
- var autoPlaceVirgin = true;
- var autoPlaceContainer = void 0;
- var hide = false;
- var hideableGuis = [];
- var GUI = function GUI( pars ) {
- var _this = this;
- var params = pars || {};
- this.domElement = document.createElement( 'div' );
- this.__ul = document.createElement( 'ul' );
- this.domElement.appendChild( this.__ul );
- dom.addClass( this.domElement, CSS_NAMESPACE );
- this.__folders = {};
- this.__controllers = [];
- this.__rememberedObjects = [];
- this.__rememberedObjectIndecesToControllers = [];
- this.__listening = [];
- params = Common.defaults( params, {
- closeOnTop: false,
- autoPlace: true,
- width: GUI.DEFAULT_WIDTH
- } );
- params = Common.defaults( params, {
- resizable: params.autoPlace,
- hideable: params.autoPlace
- } );
- if ( ! Common.isUndefined( params.load ) ) {
- if ( params.preset ) {
- params.load.preset = params.preset;
- }
- } else {
- params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };
- }
- if ( Common.isUndefined( params.parent ) && params.hideable ) {
- hideableGuis.push( this );
- }
- params.resizable = Common.isUndefined( params.parent ) && params.resizable;
- if ( params.autoPlace && Common.isUndefined( params.scrollable ) ) {
- params.scrollable = true;
- }
- var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem( getLocalStorageHash( this, 'isLocal' ) ) === 'true';
- var saveToLocalStorage = void 0;
- var titleRow = void 0;
- Object.defineProperties( this,
- {
- parent: {
- get: function get$$1() {
- return params.parent;
- }
- },
- scrollable: {
- get: function get$$1() {
- return params.scrollable;
- }
- },
- autoPlace: {
- get: function get$$1() {
- return params.autoPlace;
- }
- },
- closeOnTop: {
- get: function get$$1() {
- return params.closeOnTop;
- }
- },
- preset: {
- get: function get$$1() {
- if ( _this.parent ) {
- return _this.getRoot().preset;
- }
- return params.load.preset;
- },
- set: function set$$1( v ) {
- if ( _this.parent ) {
- _this.getRoot().preset = v;
- } else {
- params.load.preset = v;
- }
- setPresetSelectIndex( this );
- _this.revert();
- }
- },
- width: {
- get: function get$$1() {
- return params.width;
- },
- set: function set$$1( v ) {
- params.width = v;
- setWidth( _this, v );
- }
- },
- name: {
- get: function get$$1() {
- return params.name;
- },
- set: function set$$1( v ) {
- params.name = v;
- if ( titleRow ) {
- titleRow.innerHTML = params.name;
- }
- }
- },
- closed: {
- get: function get$$1() {
- return params.closed;
- },
- set: function set$$1( v ) {
- params.closed = v;
- if ( params.closed ) {
- dom.addClass( _this.__ul, GUI.CLASS_CLOSED );
- } else {
- dom.removeClass( _this.__ul, GUI.CLASS_CLOSED );
- }
- this.onResize();
- if ( _this.__closeButton ) {
- _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;
- }
- }
- },
- load: {
- get: function get$$1() {
- return params.load;
- }
- },
- useLocalStorage: {
- get: function get$$1() {
- return useLocalStorage;
- },
- set: function set$$1( bool ) {
- if ( SUPPORTS_LOCAL_STORAGE ) {
- useLocalStorage = bool;
- if ( bool ) {
- dom.bind( window, 'unload', saveToLocalStorage );
- } else {
- dom.unbind( window, 'unload', saveToLocalStorage );
- }
- localStorage.setItem( getLocalStorageHash( _this, 'isLocal' ), bool );
- }
- }
- }
- } );
- if ( Common.isUndefined( params.parent ) ) {
- this.closed = params.closed || false;
- dom.addClass( this.domElement, GUI.CLASS_MAIN );
- dom.makeSelectable( this.domElement, false );
- if ( SUPPORTS_LOCAL_STORAGE ) {
- if ( useLocalStorage ) {
- _this.useLocalStorage = true;
- var savedGui = localStorage.getItem( getLocalStorageHash( this, 'gui' ) );
- if ( savedGui ) {
- params.load = JSON.parse( savedGui );
- }
- }
- }
- this.__closeButton = document.createElement( 'div' );
- this.__closeButton.innerHTML = GUI.TEXT_CLOSED;
- dom.addClass( this.__closeButton, GUI.CLASS_CLOSE_BUTTON );
- if ( params.closeOnTop ) {
- dom.addClass( this.__closeButton, GUI.CLASS_CLOSE_TOP );
- this.domElement.insertBefore( this.__closeButton, this.domElement.childNodes[ 0 ] );
- } else {
- dom.addClass( this.__closeButton, GUI.CLASS_CLOSE_BOTTOM );
- this.domElement.appendChild( this.__closeButton );
- }
- dom.bind( this.__closeButton, 'click', function () {
- _this.closed = ! _this.closed;
- } );
- } else {
- if ( params.closed === undefined ) {
- params.closed = true;
- }
- var titleRowName = document.createTextNode( params.name );
- dom.addClass( titleRowName, 'controller-name' );
- titleRow = addRow( _this, titleRowName );
- var onClickTitle = function onClickTitle( e ) {
- e.preventDefault();
- _this.closed = ! _this.closed;
- return false;
- };
- dom.addClass( this.__ul, GUI.CLASS_CLOSED );
- dom.addClass( titleRow, 'title' );
- dom.bind( titleRow, 'click', onClickTitle );
- if ( ! params.closed ) {
- this.closed = false;
- }
- }
- if ( params.autoPlace ) {
- if ( Common.isUndefined( params.parent ) ) {
- if ( autoPlaceVirgin ) {
- autoPlaceContainer = document.createElement( 'div' );
- dom.addClass( autoPlaceContainer, CSS_NAMESPACE );
- dom.addClass( autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER );
- document.body.appendChild( autoPlaceContainer );
- autoPlaceVirgin = false;
- }
- autoPlaceContainer.appendChild( this.domElement );
- dom.addClass( this.domElement, GUI.CLASS_AUTO_PLACE );
- }
- if ( ! this.parent ) {
- setWidth( _this, params.width );
- }
- }
- this.__resizeHandler = function () {
- _this.onResizeDebounced();
- };
- dom.bind( window, 'resize', this.__resizeHandler );
- dom.bind( this.__ul, 'webkitTransitionEnd', this.__resizeHandler );
- dom.bind( this.__ul, 'transitionend', this.__resizeHandler );
- dom.bind( this.__ul, 'oTransitionEnd', this.__resizeHandler );
- this.onResize();
- if ( params.resizable ) {
- addResizeHandle( this );
- }
- saveToLocalStorage = function saveToLocalStorage() {
- if ( SUPPORTS_LOCAL_STORAGE && localStorage.getItem( getLocalStorageHash( _this, 'isLocal' ) ) === 'true' ) {
- localStorage.setItem( getLocalStorageHash( _this, 'gui' ), JSON.stringify( _this.getSaveObject() ) );
- }
- };
- this.saveToLocalStorageIfPossible = saveToLocalStorage;
- function resetWidth() {
- var root = _this.getRoot();
- root.width += 1;
- Common.defer( function () {
- root.width -= 1;
- } );
- }
- if ( ! params.parent ) {
- resetWidth();
- }
- };
- GUI.toggleHide = function () {
- hide = ! hide;
- Common.each( hideableGuis, function ( gui ) {
- gui.domElement.style.display = hide ? 'none' : '';
- } );
- };
- 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';
- GUI.CLASS_CLOSE_TOP = 'close-top';
- GUI.CLASS_CLOSE_BOTTOM = 'close-bottom';
- GUI.CLASS_DRAG = 'drag';
- GUI.DEFAULT_WIDTH = 245;
- GUI.TEXT_CLOSED = 'Close Controls';
- GUI.TEXT_OPEN = 'Open Controls';
- GUI._keydownHandler = function ( e ) {
- if ( document.activeElement.type !== 'text' && ( e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE ) ) {
- GUI.toggleHide();
- }
- };
- dom.bind( window, 'keydown', GUI._keydownHandler, false );
- Common.extend( GUI.prototype,
- {
- add: function add( object, property ) {
- return _add( this, object, property, {
- factoryArgs: Array.prototype.slice.call( arguments, 2 )
- } );
- },
- addColor: function addColor( object, property ) {
- return _add( this, object, property, {
- color: true
- } );
- },
- remove: function remove( controller ) {
- this.__ul.removeChild( controller.__li );
- this.__controllers.splice( this.__controllers.indexOf( controller ), 1 );
- var _this = this;
- Common.defer( function () {
- _this.onResize();
- } );
- },
- destroy: function destroy() {
- if ( this.parent ) {
- throw new Error( 'Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.' );
- }
- if ( this.autoPlace ) {
- autoPlaceContainer.removeChild( this.domElement );
- }
- var _this = this;
- Common.each( this.__folders, function ( subfolder ) {
- _this.removeFolder( subfolder );
- } );
- dom.unbind( window, 'keydown', GUI._keydownHandler, false );
- removeListeners( this );
- },
- addFolder: function addFolder( name ) {
- if ( this.__folders[ name ] !== undefined ) {
- throw new Error( 'You already have a folder in this GUI by the' + ' name "' + name + '"' );
- }
- var newGuiParams = { name: name, parent: this };
- newGuiParams.autoPlace = this.autoPlace;
- if ( this.load &&
- this.load.folders &&
- this.load.folders[ name ] ) {
- newGuiParams.closed = this.load.folders[ name ].closed;
- newGuiParams.load = this.load.folders[ name ];
- }
- var gui = new GUI( newGuiParams );
- this.__folders[ name ] = gui;
- var li = addRow( this, gui.domElement );
- dom.addClass( li, 'folder' );
- return gui;
- },
- removeFolder: function removeFolder( folder ) {
- this.__ul.removeChild( folder.domElement.parentElement );
- delete this.__folders[ folder.name ];
- if ( this.load &&
- this.load.folders &&
- this.load.folders[ folder.name ] ) {
- delete this.load.folders[ folder.name ];
- }
- removeListeners( folder );
- var _this = this;
- Common.each( folder.__folders, function ( subfolder ) {
- folder.removeFolder( subfolder );
- } );
- Common.defer( function () {
- _this.onResize();
- } );
- },
- open: function open() {
- this.closed = false;
- },
- close: function close() {
- this.closed = true;
- },
- hide: function hide() {
- this.domElement.style.display = 'none';
- },
- show: function show() {
- this.domElement.style.display = '';
- },
- onResize: function onResize() {
- var root = this.getRoot();
- if ( root.scrollable ) {
- var top = dom.getOffset( root.__ul ).top;
- var h = 0;
- Common.each( root.__ul.childNodes, function ( node ) {
- if ( ! ( root.autoPlace && node === root.__save_row ) ) {
- h += dom.getHeight( node );
- }
- } );
- if ( window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h ) {
- dom.addClass( root.domElement, GUI.CLASS_TOO_TALL );
- root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';
- } else {
- dom.removeClass( root.domElement, GUI.CLASS_TOO_TALL );
- root.__ul.style.height = 'auto';
- }
- }
- if ( root.__resize_handle ) {
- Common.defer( function () {
- root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';
- } );
- }
- if ( root.__closeButton ) {
- root.__closeButton.style.width = root.width + 'px';
- }
- },
- onResizeDebounced: Common.debounce( function () {
- this.onResize();
- }, 50 ),
- remember: function remember() {
- if ( Common.isUndefined( SAVE_DIALOGUE ) ) {
- SAVE_DIALOGUE = new CenteredDiv();
- SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;
- }
- if ( this.parent ) {
- throw new Error( 'You can only call remember on a top level GUI.' );
- }
- var _this = this;
- Common.each( Array.prototype.slice.call( arguments ), function ( object ) {
- if ( _this.__rememberedObjects.length === 0 ) {
- addSaveMenu( _this );
- }
- if ( _this.__rememberedObjects.indexOf( object ) === - 1 ) {
- _this.__rememberedObjects.push( object );
- }
- } );
- if ( this.autoPlace ) {
- setWidth( this, this.width );
- }
- },
- getRoot: function getRoot() {
- var gui = this;
- while ( gui.parent ) {
- gui = gui.parent;
- }
- return gui;
- },
- getSaveObject: function getSaveObject() {
- var toReturn = this.load;
- toReturn.closed = this.closed;
- if ( this.__rememberedObjects.length > 0 ) {
- toReturn.preset = this.preset;
- if ( ! toReturn.remembered ) {
- toReturn.remembered = {};
- }
- toReturn.remembered[ this.preset ] = getCurrentPreset( this );
- }
- toReturn.folders = {};
- Common.each( this.__folders, function ( element, key ) {
- 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 ) {
- 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 ) {
- Common.each( this.__controllers, function ( controller ) {
- if ( ! this.getRoot().load.remembered ) {
- controller.setValue( controller.initialValue );
- } else {
- recallSavedValue( gui || this.getRoot(), controller );
- }
- if ( controller.__onFinishChange ) {
- controller.__onFinishChange.call( controller, controller.getValue() );
- }
- }, this );
- Common.each( this.__folders, function ( folder ) {
- folder.revert( folder );
- } );
- if ( ! gui ) {
- markPresetModified( this.getRoot(), false );
- }
- },
- listen: function listen( controller ) {
- var init = this.__listening.length === 0;
- this.__listening.push( controller );
- if ( init ) {
- updateDisplays( this.__listening );
- }
- },
- updateDisplay: function updateDisplay() {
- Common.each( this.__controllers, function ( controller ) {
- controller.updateDisplay();
- } );
- Common.each( this.__folders, function ( folder ) {
- folder.updateDisplay();
- } );
- }
- } );
- function addRow( gui, newDom, liBefore ) {
- var li = document.createElement( 'li' );
- if ( newDom ) {
- li.appendChild( newDom );
- }
- if ( liBefore ) {
- gui.__ul.insertBefore( li, liBefore );
- } else {
- gui.__ul.appendChild( li );
- }
- gui.onResize();
- return li;
- }
- function removeListeners( gui ) {
- dom.unbind( window, 'resize', gui.__resizeHandler );
- if ( gui.saveToLocalStorageIfPossible ) {
- dom.unbind( window, 'unload', gui.saveToLocalStorageIfPossible );
- }
- }
- function markPresetModified( gui, modified ) {
- var opt = gui.__preset_select[ gui.__preset_select.selectedIndex ];
- if ( modified ) {
- opt.innerHTML = opt.value + '*';
- } else {
- opt.innerHTML = opt.value;
- }
- }
- function augmentController( gui, li, controller ) {
- controller.__li = li;
- controller.__gui = gui;
- Common.extend( controller, {
- options: function options( _options ) {
- if ( arguments.length > 1 ) {
- var nextSibling = controller.__li.nextElementSibling;
- controller.remove();
- return _add( gui, controller.object, controller.property, {
- before: nextSibling,
- factoryArgs: [ Common.toArray( arguments ) ]
- } );
- }
- if ( Common.isArray( _options ) || Common.isObject( _options ) ) {
- var _nextSibling = controller.__li.nextElementSibling;
- controller.remove();
- return _add( gui, controller.object, controller.property, {
- before: _nextSibling,
- factoryArgs: [ _options ]
- } );
- }
- },
- name: function name( _name ) {
- controller.__li.firstElementChild.firstElementChild.innerHTML = _name;
- return controller;
- },
- listen: function listen() {
- controller.__gui.listen( controller );
- return controller;
- },
- remove: function remove() {
- controller.__gui.remove( controller );
- return controller;
- }
- } );
- if ( controller instanceof NumberControllerSlider ) {
- var box = new NumberControllerBox( controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step } );
- Common.each( [ 'updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max' ], 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 );
- };
- } );
- dom.addClass( li, 'has-slider' );
- controller.domElement.insertBefore( box.domElement, controller.domElement.firstElementChild );
- } else if ( controller instanceof NumberControllerBox ) {
- var r = function r( returned ) {
- if ( Common.isNumber( controller.__min ) && Common.isNumber( controller.__max ) ) {
- var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;
- var wasListening = controller.__gui.__listening.indexOf( controller ) > - 1;
- controller.remove();
- var newController = _add( gui, controller.object, controller.property, {
- before: controller.__li.nextElementSibling,
- factoryArgs: [ controller.__min, controller.__max, controller.__step ]
- } );
- newController.name( oldName );
- if ( wasListening ) newController.listen();
- return newController;
- }
- return returned;
- };
- controller.min = Common.compose( r, controller.min );
- controller.max = Common.compose( r, controller.max );
- } else if ( controller instanceof BooleanController ) {
- dom.bind( li, 'click', function () {
- dom.fakeEvent( controller.__checkbox, 'click' );
- } );
- dom.bind( controller.__checkbox, 'click', function ( e ) {
- e.stopPropagation();
- } );
- } else if ( controller instanceof FunctionController ) {
- dom.bind( li, 'click', function () {
- dom.fakeEvent( controller.__button, 'click' );
- } );
- dom.bind( li, 'mouseover', function () {
- dom.addClass( controller.__button, 'hover' );
- } );
- dom.bind( li, 'mouseout', function () {
- dom.removeClass( controller.__button, 'hover' );
- } );
- } else if ( controller instanceof ColorController ) {
- dom.addClass( li, 'color' );
- controller.updateDisplay = Common.compose( function ( val ) {
- li.style.borderLeftColor = controller.__color.toString();
- return val;
- }, controller.updateDisplay );
- controller.updateDisplay();
- }
- controller.setValue = Common.compose( function ( val ) {
- if ( gui.getRoot().__preset_select && controller.isModified() ) {
- markPresetModified( gui.getRoot(), true );
- }
- return val;
- }, controller.setValue );
- }
- function recallSavedValue( gui, controller ) {
- var root = gui.getRoot();
- var matchedIndex = root.__rememberedObjects.indexOf( controller.object );
- if ( matchedIndex !== - 1 ) {
- var controllerMap = root.__rememberedObjectIndecesToControllers[ matchedIndex ];
- if ( controllerMap === undefined ) {
- controllerMap = {};
- root.__rememberedObjectIndecesToControllers[ matchedIndex ] = controllerMap;
- }
- controllerMap[ controller.property ] = controller;
- if ( root.load && root.load.remembered ) {
- var presetMap = root.load.remembered;
- var preset = void 0;
- if ( presetMap[ gui.preset ] ) {
- preset = presetMap[ gui.preset ];
- } else if ( presetMap[ DEFAULT_DEFAULT_PRESET_NAME ] ) {
- preset = presetMap[ DEFAULT_DEFAULT_PRESET_NAME ];
- } else {
- return;
- }
- if ( preset[ matchedIndex ] && preset[ matchedIndex ][ controller.property ] !== undefined ) {
- var value = preset[ matchedIndex ][ controller.property ];
- controller.initialValue = value;
- controller.setValue( value );
- }
- }
- }
- }
- function _add( gui, object, property, params ) {
- if ( object[ property ] === undefined ) {
- throw new Error( 'Object "' + object + '" has no property "' + property + '"' );
- }
- var controller = void 0;
- if ( params.color ) {
- controller = new ColorController( object, property );
- } else {
- var factoryArgs = [ object, property ].concat( params.factoryArgs );
- controller = ControllerFactory.apply( gui, factoryArgs );
- }
- if ( params.before instanceof Controller ) {
- params.before = params.before.__li;
- }
- recallSavedValue( gui, controller );
- dom.addClass( controller.domElement, 'c' );
- var name = document.createElement( 'span' );
- dom.addClass( name, 'property-name' );
- name.innerHTML = controller.property;
- var container = document.createElement( 'div' );
- container.appendChild( name );
- container.appendChild( controller.domElement );
- var li = addRow( gui, container, params.before );
- dom.addClass( li, GUI.CLASS_CONTROLLER_ROW );
- if ( controller instanceof ColorController ) {
- dom.addClass( li, 'color' );
- } else {
- dom.addClass( li, _typeof( controller.getValue() ) );
- }
- augmentController( gui, li, controller );
- gui.__controllers.push( controller );
- return controller;
- }
- function getLocalStorageHash( gui, key ) {
- return document.location.href + '.' + key;
- }
- 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;
- }
- }
- function showHideExplain( gui, explain ) {
- explain.style.display = gui.useLocalStorage ? 'block' : 'none';
- }
- function addSaveMenu( gui ) {
- var div = gui.__save_row = document.createElement( 'li' );
- dom.addClass( gui.domElement, 'has-save' );
- gui.__ul.insertBefore( div, gui.__ul.firstChild );
- dom.addClass( div, 'save-row' );
- var gears = document.createElement( 'span' );
- gears.innerHTML = ' ';
- dom.addClass( gears, 'button gears' );
- var button = document.createElement( 'span' );
- button.innerHTML = 'Save';
- dom.addClass( button, 'button' );
- dom.addClass( button, 'save' );
- var button2 = document.createElement( 'span' );
- button2.innerHTML = 'New';
- dom.addClass( button2, 'button' );
- dom.addClass( button2, 'save-as' );
- var button3 = document.createElement( 'span' );
- button3.innerHTML = 'Revert';
- dom.addClass( button3, 'button' );
- dom.addClass( button3, 'revert' );
- var select = gui.__preset_select = document.createElement( 'select' );
- if ( gui.load && gui.load.remembered ) {
- Common.each( gui.load.remembered, function ( value, key ) {
- addPresetOption( gui, key, key === gui.preset );
- } );
- } else {
- addPresetOption( gui, DEFAULT_DEFAULT_PRESET_NAME, false );
- }
- dom.bind( select, 'change', function () {
- 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 ) {
- var explain = document.getElementById( 'dg-local-explain' );
- var localStorageCheckBox = document.getElementById( 'dg-local-storage' );
- var saveLocally = document.getElementById( 'dg-save-locally' );
- saveLocally.style.display = 'block';
- if ( localStorage.getItem( getLocalStorageHash( gui, 'isLocal' ) ) === 'true' ) {
- localStorageCheckBox.setAttribute( 'checked', 'checked' );
- }
- showHideExplain( gui, explain );
- dom.bind( localStorageCheckBox, 'change', function () {
- gui.useLocalStorage = ! gui.useLocalStorage;
- showHideExplain( gui, explain );
- } );
- }
- var newConstructorTextArea = document.getElementById( 'dg-new-constructor' );
- dom.bind( newConstructorTextArea, 'keydown', function ( e ) {
- if ( e.metaKey && ( e.which === 67 || e.keyCode === 67 ) ) {
- SAVE_DIALOGUE.hide();
- }
- } );
- dom.bind( gears, 'click', function () {
- newConstructorTextArea.innerHTML = JSON.stringify( gui.getSaveObject(), undefined, 2 );
- SAVE_DIALOGUE.show();
- newConstructorTextArea.focus();
- newConstructorTextArea.select();
- } );
- dom.bind( button, 'click', function () {
- gui.save();
- } );
- dom.bind( button2, 'click', function () {
- var presetName = prompt( 'Enter a new preset name.' );
- if ( presetName ) {
- gui.saveAs( presetName );
- }
- } );
- dom.bind( button3, 'click', function () {
- gui.revert();
- } );
- }
- function addResizeHandle( gui ) {
- var pmouseX = void 0;
- gui.__resize_handle = document.createElement( 'div' );
- Common.extend( gui.__resize_handle.style, {
- width: '6px',
- marginLeft: '-3px',
- height: '200px',
- cursor: 'ew-resize',
- position: 'absolute'
- } );
- function drag( e ) {
- e.preventDefault();
- gui.width += pmouseX - e.clientX;
- gui.onResize();
- pmouseX = e.clientX;
- return false;
- }
- function dragStop() {
- dom.removeClass( gui.__closeButton, GUI.CLASS_DRAG );
- dom.unbind( window, 'mousemove', drag );
- dom.unbind( window, 'mouseup', dragStop );
- }
- function dragStart( e ) {
- e.preventDefault();
- pmouseX = e.clientX;
- dom.addClass( gui.__closeButton, GUI.CLASS_DRAG );
- dom.bind( window, 'mousemove', drag );
- dom.bind( window, 'mouseup', dragStop );
- return false;
- }
- dom.bind( gui.__resize_handle, 'mousedown', dragStart );
- dom.bind( gui.__closeButton, 'mousedown', dragStart );
- gui.domElement.insertBefore( gui.__resize_handle, gui.domElement.firstElementChild );
- }
- function setWidth( gui, w ) {
- gui.domElement.style.width = w + 'px';
- 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 = {};
- Common.each( gui.__rememberedObjects, function ( val, index ) {
- var savedValues = {};
- var controllerMap = gui.__rememberedObjectIndecesToControllers[ index ];
- Common.each( controllerMap, function ( controller, property ) {
- savedValues[ property ] = useInitialValues ? controller.initialValue : controller.getValue();
- } );
- toReturn[ index ] = savedValues;
- } );
- return toReturn;
- }
- function setPresetSelectIndex( gui ) {
- for ( var index = 0; index < gui.__preset_select.length; index ++ ) {
- if ( gui.__preset_select[ index ].value === gui.preset ) {
- gui.__preset_select.selectedIndex = index;
- }
- }
- }
- function updateDisplays( controllerArray ) {
- if ( controllerArray.length !== 0 ) {
- requestAnimationFrame$1.call( window, function () {
- updateDisplays( controllerArray );
- } );
- }
- Common.each( controllerArray, function ( c ) {
- c.updateDisplay();
- } );
- }
- var color = {
- Color: Color,
- math: ColorMath,
- interpret: interpret
- };
- var controllers = {
- Controller: Controller,
- BooleanController: BooleanController,
- OptionController: OptionController,
- StringController: StringController,
- NumberController: NumberController,
- NumberControllerBox: NumberControllerBox,
- NumberControllerSlider: NumberControllerSlider,
- FunctionController: FunctionController,
- ColorController: ColorController
- };
- var dom$1 = { dom: dom };
- var gui = { GUI: GUI };
- var GUI$1 = GUI;
- var index = {
- color: color,
- controllers: controllers,
- dom: dom$1,
- gui: gui,
- GUI: GUI$1
- };
- export { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };
- export default index;
|