diff --git a/.gitignore b/.gitignore index 40b878d..04c01ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules/ \ No newline at end of file +node_modules/ +dist/ \ No newline at end of file diff --git a/dist/.nojekyll b/dist/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/dist/bundle.js b/dist/bundle.js deleted file mode 100644 index c174b5f..0000000 --- a/dist/bundle.js +++ /dev/null @@ -1,92805 +0,0 @@ -/******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/dat.gui/src/dat/gui/style.scss": -/*!**********************************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/dat.gui/src/dat/gui/style.scss ***! - \**********************************************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/cssWithMappingToString.js */ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js"); -/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, ".dg {\n /** Clear list styles */\n /* Auto-place container */\n /* Auto-placed GUI's */\n /* Line items that don't contain folders. */\n /** Folder names */\n /** Hides closed items */\n /** Controller row */\n /** Name-half (left) */\n /** Controller-half (right) */\n /** Controller placement */\n /** Shorter number boxes when slider is present. */\n /** Ensure the entire boolean and function row shows a hand */\n /** allow overflow for color selector */\n}\n.dg ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both;\n}\n.dg.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0;\n}\n.dg:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden;\n}\n.dg.main {\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n}\n.dg.main.taller-than-window {\n overflow-y: auto;\n}\n.dg.main.taller-than-window .close-button {\n opacity: 1;\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid #2c2c2c;\n}\n.dg.main ul.closed .close-button {\n opacity: 1 !important;\n}\n.dg.main:hover .close-button,\n.dg.main .close-button.drag {\n opacity: 1;\n}\n.dg.main .close-button {\n /*opacity: 0;*/\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n border: 0;\n line-height: 19px;\n height: 20px;\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000;\n}\n.dg.main .close-button.close-top {\n position: relative;\n}\n.dg.main .close-button.close-bottom {\n position: absolute;\n}\n.dg.main .close-button:hover {\n background-color: #111;\n}\n.dg.a {\n float: right;\n margin-right: 15px;\n overflow-y: visible;\n}\n.dg.a.has-save > ul.close-top {\n margin-top: 0;\n}\n.dg.a.has-save > ul.close-bottom {\n margin-top: 27px;\n}\n.dg.a.has-save > ul.closed {\n margin-top: 0;\n}\n.dg.a .save-row {\n top: 0;\n z-index: 1002;\n}\n.dg.a .save-row.close-top {\n position: relative;\n}\n.dg.a .save-row.close-bottom {\n position: fixed;\n}\n.dg li {\n -webkit-transition: height 0.1s ease-out;\n -o-transition: height 0.1s ease-out;\n -moz-transition: height 0.1s ease-out;\n transition: height 0.1s ease-out;\n -webkit-transition: overflow 0.1s linear;\n -o-transition: overflow 0.1s linear;\n -moz-transition: overflow 0.1s linear;\n transition: overflow 0.1s linear;\n}\n.dg li:not(.folder) {\n cursor: auto;\n height: 27px;\n line-height: 27px;\n padding: 0 4px 0 5px;\n}\n.dg li.folder {\n padding: 0;\n border-left: 4px solid rgba(0, 0, 0, 0);\n}\n.dg li.title {\n cursor: pointer;\n margin-left: -4px;\n}\n.dg .closed li:not(.title),\n.dg .closed ul li,\n.dg .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0;\n}\n.dg .cr {\n clear: both;\n padding-left: 3px;\n height: 27px;\n overflow: hidden;\n}\n.dg .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.dg .c {\n float: left;\n width: 60%;\n position: relative;\n}\n.dg .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right;\n}\n.dg .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0;\n}\n.dg .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px;\n}\n.dg .slider-fg {\n height: 100%;\n}\n.dg .c input[type=checkbox] {\n margin-top: 7px;\n}\n.dg .c select {\n margin-top: 5px;\n}\n.dg .cr.function,\n.dg .cr.function .property-name,\n.dg .cr.function *,\n.dg .cr.boolean,\n.dg .cr.boolean * {\n cursor: pointer;\n}\n.dg .cr.color {\n overflow: visible;\n}\n.dg .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10;\n}\n.dg .c:hover .selector,\n.dg .selector.drag {\n display: block;\n}\n.dg li.save-row {\n padding: 0;\n}\n.dg li.save-row .button {\n display: inline-block;\n padding: 0px 6px;\n}\n.dg.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px;\n}\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative;\n}\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px;\n}\n#dg-local-explain code {\n font-size: 10px;\n}\n\n#dat-gui-save-locally {\n display: none;\n}\n\n/** Main type */\n.dg {\n color: #eee;\n font: 11px \"Lucida Grande\", sans-serif;\n text-shadow: 0 -1px 0 #111;\n /** Auto place */\n /* Controller row,
  • */\n /** Controllers */\n}\n.dg.main {\n /** Scrollbar */\n}\n.dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a;\n}\n.dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none;\n}\n.dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767;\n}\n.dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c;\n}\n.dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0;\n}\n.dg li.save-row select {\n margin-left: 5px;\n width: 108px;\n}\n.dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer;\n}\n.dg li.save-row .button.gears {\n 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;\n height: 7px;\n width: 8px;\n}\n.dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f;\n}\n.dg li.folder {\n border-bottom: 0;\n}\n.dg li.title {\n padding-left: 16px;\n background: #000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n}\n.dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==);\n}\n.dg .cr.boolean {\n border-left: 3px solid #806787;\n}\n.dg .cr.color {\n border-left: 3px solid;\n}\n.dg .cr.function {\n border-left: 3px solid #e61d5f;\n}\n.dg .cr.number {\n border-left: 3px solid #2FA1D6;\n}\n.dg .cr.number input[type=text] {\n color: #2FA1D6;\n}\n.dg .cr.string {\n border-left: 3px solid #1ed36f;\n}\n.dg .cr.string input[type=text] {\n color: #1ed36f;\n}\n.dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111;\n}\n.dg .c input[type=text] {\n background: #303030;\n outline: none;\n}\n.dg .c input[type=text]:hover {\n background: #3c3c3c;\n}\n.dg .c input[type=text]:focus {\n background: #494949;\n color: #fff;\n}\n.dg .c .slider {\n background: #303030;\n cursor: ew-resize;\n}\n.dg .c .slider-fg {\n background: #2FA1D6;\n max-width: 100%;\n}\n.dg .c .slider:hover {\n background: #3c3c3c;\n}\n.dg .c .slider:hover .slider-fg {\n background: #44abda;\n}", "",{"version":3,"sources":["webpack://./node_modules/dat.gui/src/dat/gui/_structure.scss","webpack://./node_modules/dat.gui/src/dat/gui/style.scss"],"names":[],"mappings":"AAKA;EAEE,uBAAA;EASA,yBAAA;EAsEA,sBAAA;EAyCA,2CAAA;EAcA,kBAAA;EAMA,wBAAA;EASA,oBAAA;EAQA,sBAAA;EAUA,6BAAA;EAOA,0BAAA;EASA,kDAAA;EA4BA,6DAAA;EASA,uCAAA;ACrNF;ADNE;EACE,gBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,WAAA;ACQJ;ADJE;EACE,eAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;ACMJ;ADHE;EACE,4DAAA;EACA,gBAAA;ACKJ;ADFE;ECfA,uCAAA;EACA,kCAAA;EACA,oCAAA;EACA,+BAAA;AAoBF;ADJI;EAEE,gBAAA;ACKN;ADHM;EAEE,UAAA;EAEA,gCAAA;EACA,gBAAA;EACA,6BAAA;ACGR;ADGI;EACE,qBAAA;ACDN;ADII;;EAEE,UAAA;ACFN;ADKI;EACE,cAAA;EC7CJ,uCAAA;EACA,kCAAA;EACA,oCAAA;EACA,+BAAA;ED4CI,SAAA;EAEA,iBAAA;EACA,YA/DU;EAiEV,gCAAA;EACA,eAAA;EACA,kBAAA;EACA,sBAAA;ACFN;ADGM;EACE,kBAAA;ACDR;ADGM;EACE,kBAAA;ACDR;ADGM;EACE,sBAAA;ACDR;ADSE;EAEE,YAAA;EACA,kBAAA;EACA,mBAAA;ACRJ;ADYM;EACE,aAAA;ACVR;ADYM;EACE,gBAlGK;ACwFb;ADaM;EACE,aAAA;ACXR;ADeI;EACE,MAAA;EACA,aAAA;ACbN;ADeM;EACE,kBAAA;ACbR;ADeM;EACE,eAAA;ACbR;ADoBE;EC1GA,wCAAA;EACA,mCAAA;EACA,qCAAA;EACA,gCAAA;EAHA,wCAAA;EACA,mCAAA;EACA,qCAAA;EACA,gCAAA;AA6FF;ADgBE;EACE,YAAA;EACA,YAjIS;EAkIT,iBAlIS;EAmIT,oBAAA;ACdJ;ADiBE;EACE,UAAA;EACA,uCAAA;ACfJ;ADoBE;EACE,eAAA;EACA,iBAAA;AClBJ;ADsBE;;;EAGE,SAAA;EACA,gBAAA;EACA,SAAA;ACpBJ;ADwBE;EACE,WAAA;EACA,iBAAA;EACA,YA/JS;EAgKT,gBAAA;ACtBJ;AD0BE;EACE,eAAA;EACA,WAAA;EACA,WAAA;EACA,UAAA;EACA,gBAAA;EACA,uBAAA;ACxBJ;AD4BE;EACE,WAAA;EACA,UAAA;EACA,kBAAA;AC1BJ;AD8BE;EACE,SAAA;EACA,eAAA;EACA,YAAA;EACA,WAAA;EACA,YAAA;AC5BJ;ADgCE;EACE,UAAA;EACA,iBAAA;EACA,cAAA;AC9BJ;ADiCE;EACE,WAAA;EACA,UAAA;EACA,iBAAA;EACA,eAAA;EACA,YAAA;EACA,eAAA;AC/BJ;ADkCE;EACE,YAAA;AChCJ;ADmCE;EACE,eAAA;ACjCJ;ADoCE;EACE,eAAA;AClCJ;ADsCE;;;;;EAKE,eAAA;ACpCJ;ADwCE;EACE,iBAAA;ACtCJ;ADyCE;EACE,aAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EACA,WAAA;ACvCJ;AD0CE;;EAEE,cAAA;ACxCJ;AD2CE;EAEE,UAAA;AC1CJ;AD4CI;EACE,qBAAA;EACA,gBAAA;AC1CN;AD+CE;EACE,sBAAA;EACA,YAAA;EACA,aAAA;EACA,eAAA;EACA,iBAAA;AC7CJ;;ADkDA,sCAAA;AACA;EACE,aAAA;EACA,WAAA;EACA,8BAAA;EACA,eAAA;EACA,SAAA;EACA,YAAA;EACA,kCAAA;EACA,qBAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,aAAA;EACA,kBAAA;AC/CF;;ADkDA;EACE,aAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,YAAA;EACA,gBAAA;AC/CF;ADgDE;EACE,eAAA;AC9CJ;;ADkDA;EACE,aAAA;AC/CF;;AAzMA,eAAA;AACA;EAEE,WAAA;EACA,sCAAA;EACA,0BAAA;EAEA,gBAAA;EAwEA,yBAAA;EAoCA,iBAAA;AAgGF;AA3ME;EAEE,eAAA;AA4MJ;AA3MI;EACE,UAAA;EACA,mBA/Da;AA4QnB;AA3MI;EACE,SAAA;EACA,aAAA;AA6MN;AA3MI;EACE,kBAAA;EACA,mBAAA;AA6MN;AAtMI;EACE,mBA/Ea;EAgFb,gCAAA;AAwMN;AArMI;EAEE,iBAAA;EACA,mBA5EW;EA6EX,SAAA;AAsMN;AApMM;EACE,gBAAA;EACA,YAAA;AAsMR;AAlMM;EAlEJ,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAxBa;EAyBb,WAAA;EACA,4BAAA;EACA,4BAAA;EACA,eAAA;AAuQF;AA7MQ;EAtDN,yhBAAA;EACA,WAAA;EACA,UAAA;AAsQF;AA5MQ;EACE,yBAAA;EACA,4BAAA;AA8MV;AAvMI;EACE,gBAAA;AAyMN;AAtMI;EACE,kBAAA;EACA,2IAAA;EACA,eAAA;EACA,iDAAA;AAwMN;AAnME;EACE,yHAAA;AAqMJ;AA/LI;EACE,8BAAA;AAiMN;AA9LI;EACE,sBAAA;AAgMN;AA7LI;EACE,8BAAA;AA+LN;AA5LI;EACE,8BAAA;AA8LN;AA7LM;EACE,cA7IO;AA4Uf;AA3LI;EACE,8BAAA;AA6LN;AA5LM;EACE,cAlJO;AAgVf;AA1LI;EAEE,gBAAA;AA2LN;AAnLI;EAEE,mBA7JQ;EA8JR,aAAA;AAoLN;AAnLM;EACE,mBAAA;AAqLR;AAnLM;EACE,mBAAA;EACA,WAAA;AAqLR;AAhLI;EACE,mBA1KQ;EA2KR,iBAAA;AAkLN;AA/KI;EACE,mBAtLS;EAuLT,eAAA;AAiLN;AA9KI;EACE,mBAAA;AAgLN;AA/KM;EACE,mBAAA;AAiLR","sourcesContent":["$nest-margin: 4px;\n$row-height: 27px;\n\n$button-height: 20px;\n\n.dg {\n\n /** Clear list styles */\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both;\n }\n\n /* Auto-place container */\n &.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0;\n }\n\n &:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden;\n }\n\n &.main {\n\n @include transition(opacity, 0.1s, linear);\n\n &.taller-than-window {\n\n overflow-y: auto;\n\n .close-button {\n\n opacity: 1;\n\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid $border-color;\n\n }\n\n }\n\n ul.closed .close-button {\n opacity: 1 !important;\n }\n\n &:hover .close-button,\n .close-button.drag {\n opacity: 1;\n }\n\n .close-button {\n /*opacity: 0;*/\n @include transition(opacity, 0.1s, linear);\n border: 0;\n\n line-height: $button-height - 1;\n height: $button-height;\n\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000;\n &.close-top {\n position: relative;\n }\n &.close-bottom {\n position: absolute;\n }\n &:hover {\n background-color: #111;\n }\n\n }\n\n }\n\n /* Auto-placed GUI's */\n &.a {\n\n float: right;\n margin-right: 15px;\n overflow-y:visible;\n\n &.has-save > ul {\n\n &.close-top {\n margin-top: 0;\n }\n &.close-bottom {\n margin-top: $row-height;\n }\n\n &.closed {\n margin-top: 0;\n }\n }\n\n .save-row {\n top: 0;\n z-index: 1002;\n\n &.close-top {\n position: relative;\n }\n &.close-bottom {\n position: fixed;\n }\n\n }\n\n }\n\n li {\n @include transition(height, 0.1s, ease-out);\n @include transition(overflow, 0.1s, linear);\n }\n\n /* Line items that don't contain folders. */\n li:not(.folder) {\n cursor: auto;\n height: $row-height;\n line-height: $row-height;\n padding: 0 4px 0 5px;\n }\n\n li.folder {\n padding: 0;\n border-left: $nest-margin solid rgba(0, 0, 0, 0);\n\n }\n\n /** Folder names */\n li.title {\n cursor: pointer;\n margin-left: -$nest-margin;\n }\n\n /** Hides closed items */\n .closed li:not(.title),\n .closed ul li,\n .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0;\n }\n\n /** Controller row */\n .cr {\n clear: both;\n padding-left: 3px;\n height: $row-height;\n overflow: hidden;\n }\n\n /** Name-half (left) */\n .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n /** Controller-half (right) */\n .c {\n float: left;\n width: 60%;\n position: relative;\n }\n\n /** Controller placement */\n .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right;\n }\n\n /** Shorter number boxes when slider is present. */\n .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0;\n }\n\n .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px;\n }\n\n .slider-fg {\n height: 100%;\n }\n\n .c input[type=checkbox] {\n margin-top: 7px;\n }\n\n .c select {\n margin-top: 5px;\n }\n\n /** Ensure the entire boolean and function row shows a hand */\n .cr.function,\n .cr.function .property-name, /* Don't know why I need to be this explicit */\n .cr.function *,\n .cr.boolean,\n .cr.boolean * {\n cursor: pointer;\n }\n\n /** allow overflow for color selector */\n .cr.color {\n overflow: visible;\n }\n\n .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10;\n }\n\n .c:hover .selector,\n .selector.drag {\n display: block;\n }\n\n li.save-row {\n\n padding: 0;\n\n .button {\n display: inline-block;\n padding: 0px 6px;\n }\n\n }\n\n &.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px;\n }\n\n}\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative;\n}\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px;\n code {\n font-size: 10px;\n }\n}\n\n#dat-gui-save-locally {\n display: none;\n}\n","$background-color: #1a1a1a;\n\n$hover-lighten: 5%;\n$border-lighten: 7%;\n$active-lighten: 10%;\n\n$number-color: #2FA1D6;\n$boolean-color: #806787;\n$string-color: #1ed36f;\n$function-color: #e61d5f;\n$save-row-color: #dad5cb;\n$button-color: darken($save-row-color, 10%);\n$border-color: lighten($background-color, $border-lighten);\n$input-color: lighten($background-color, 8.5%);\n\n@mixin transition($prop, $time, $curve) {\n -webkit-transition: $prop $time $curve;\n -o-transition: $prop $time $curve;\n -moz-transition: $prop $time $curve;\n transition: $prop $time $curve;\n}\n\n@mixin gradient($a, $b) {\n background: -webkit-gradient(linear, 0% 0%, 0% 100%, from($a), to($b));\n background: -o-gradient(linear, 0% 0%, 0% 100%, from($a), to($b));\n background: -moz-gradient(linear, 0% 0%, 0% 100%, from($a), to($b));\n}\n\n@mixin button() {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: $button-color;\n color: #fff;\n text-shadow: 0 1px 0 darken($button-color, 10%);\n box-shadow: 0 -1px 0 darken($button-color, 10%);\n cursor: pointer;\n}\n\n@mixin gears() {\n background: $button-color 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;\n height: 7px;\n width: 8px;\n}\n\n@import \"structure\";\n\n/** Main type */\n.dg {\n\n color: #eee;\n font: 11px 'Lucida Grande', sans-serif;\n text-shadow: 0 -1px 0 #111;\n\n /** Auto place */\n &.main {\n\n /** Scrollbar */\n &::-webkit-scrollbar {\n width: 5px;\n background: $background-color;\n }\n &::-webkit-scrollbar-corner {\n height: 0;\n display: none;\n }\n &::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: lighten($background-color, 30%);\n }\n\n }\n\n li {\n\n &:not(.folder) {\n background: $background-color;\n border-bottom: 1px solid $border-color;\n }\n\n &.save-row {\n\n line-height: 25px;\n background: $save-row-color;\n border: 0;\n\n select {\n margin-left: 5px;\n width: 108px;\n\n }\n\n .button {\n\n &.gears {\n @include gears;\n }\n\n @include button;\n\n &:hover {\n background-color: darken($button-color, 5%);\n box-shadow: 0 -1px 0 darken($button-color, 10%);\n }\n\n }\n\n }\n\n &.folder {\n border-bottom: 0;\n }\n\n &.title {\n padding-left: 16px;\n background: #000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n }\n\n }\n\n .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==);\n }\n\n /* Controller row,
  • */\n .cr {\n\n &.boolean {\n border-left: 3px solid $boolean-color;\n }\n\n &.color {\n border-left: 3px solid;\n }\n\n &.function {\n border-left: 3px solid $function-color;\n }\n\n &.number {\n border-left: 3px solid $number-color;\n input[type=text] {\n color: $number-color;\n }\n }\n\n &.string {\n border-left: 3px solid $string-color;\n input[type=text] {\n color: $string-color;\n }\n }\n\n &.function:hover,\n &.boolean:hover {\n background: #111;\n }\n\n }\n\n /** Controllers */\n .c {\n\n input[type=text] {\n\n background: $input-color;\n outline: none;\n &:hover {\n background: lighten($input-color, $hover-lighten);\n }\n &:focus {\n background: lighten($input-color, $active-lighten);\n color: #fff;\n }\n\n }\n\n .slider {\n background: $input-color;\n cursor: ew-resize;\n }\n\n .slider-fg {\n background: $number-color;\n max-width: 100%;\n }\n\n .slider:hover {\n background: lighten($input-color, $hover-lighten);\n .slider-fg {\n background: lighten($number-color, $hover-lighten);\n }\n }\n\n }\n\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/api.js": -/*!*****************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/api.js ***! - \*****************************************************/ -/***/ ((module) => { - - - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -// css base code, injected by the css-loader -// eslint-disable-next-line func-names -module.exports = function (cssWithMappingToString) { - var list = []; // return the list of modules as css string - - list.toString = function toString() { - return this.map(function (item) { - var content = cssWithMappingToString(item); - - if (item[2]) { - return "@media ".concat(item[2], " {").concat(content, "}"); - } - - return content; - }).join(""); - }; // import a list of modules into the list - // eslint-disable-next-line func-names - - - list.i = function (modules, mediaQuery, dedupe) { - if (typeof modules === "string") { - // eslint-disable-next-line no-param-reassign - modules = [[null, modules, ""]]; - } - - var alreadyImportedModules = {}; - - if (dedupe) { - for (var i = 0; i < this.length; i++) { - // eslint-disable-next-line prefer-destructuring - var id = this[i][0]; - - if (id != null) { - alreadyImportedModules[id] = true; - } - } - } - - for (var _i = 0; _i < modules.length; _i++) { - var item = [].concat(modules[_i]); - - if (dedupe && alreadyImportedModules[item[0]]) { - // eslint-disable-next-line no-continue - continue; - } - - if (mediaQuery) { - if (!item[2]) { - item[2] = mediaQuery; - } else { - item[2] = "".concat(mediaQuery, " and ").concat(item[2]); - } - } - - list.push(item); - } - }; - - return list; -}; - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js": -/*!************************************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/cssWithMappingToString.js ***! - \************************************************************************/ -/***/ ((module) => { - - - -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } - -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - -module.exports = function cssWithMappingToString(item) { - var _item = _slicedToArray(item, 4), - content = _item[1], - cssMapping = _item[3]; - - if (typeof btoa === "function") { - // eslint-disable-next-line no-undef - var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); - var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); - var sourceMapping = "/*# ".concat(data, " */"); - var sourceURLs = cssMapping.sources.map(function (source) { - return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */"); - }); - return [content].concat(sourceURLs).concat([sourceMapping]).join("\n"); - } - - return [content].join("\n"); -}; - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/color/Color.js": -/*!*****************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/color/Color.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _interpret__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interpret */ "./node_modules/dat.gui/src/dat/color/interpret.js"); -/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "./node_modules/dat.gui/src/dat/color/math.js"); -/* harmony import */ var _toString__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./toString */ "./node_modules/dat.gui/src/dat/color/toString.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - - -class Color { - constructor() { - this.__state = _interpret__WEBPACK_IMPORTED_MODULE_0__.default.apply(this, arguments); - - if (this.__state === false) { - throw new Error('Failed to interpret color arguments'); - } - - this.__state.a = this.__state.a || 1; - } - - toString() { - return (0,_toString__WEBPACK_IMPORTED_MODULE_2__.default)(this); - } - - toHexString() { - return (0,_toString__WEBPACK_IMPORTED_MODULE_2__.default)(this, true); - } - - toOriginal() { - return this.__state.conversion.write(this); - } -} - -function defineRGBComponent(target, component, componentHexIndex) { - Object.defineProperty(target, component, { - get: function() { - if (this.__state.space === 'RGB') { - return this.__state[component]; - } - - Color.recalculateRGB(this, component, componentHexIndex); - - return this.__state[component]; - }, - - set: function(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() { - if (this.__state.space === 'HSV') { - return this.__state[component]; - } - - Color.recalculateHSV(this); - - return this.__state[component]; - }, - - set: function(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] = _math__WEBPACK_IMPORTED_MODULE_1__.default.component_from_hex(color.__state.hex, componentHexIndex); - } else if (color.__state.space === 'HSV') { - _utils_common__WEBPACK_IMPORTED_MODULE_3__.default.extend(color.__state, _math__WEBPACK_IMPORTED_MODULE_1__.default.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v)); - } else { - throw new Error('Corrupted color state'); - } -}; - -Color.recalculateHSV = function(color) { - const result = _math__WEBPACK_IMPORTED_MODULE_1__.default.rgb_to_hsv(color.r, color.g, color.b); - - _utils_common__WEBPACK_IMPORTED_MODULE_3__.default.extend(color.__state, - { - s: result.s, - v: result.v - } - ); - - if (!_utils_common__WEBPACK_IMPORTED_MODULE_3__.default.isNaN(result.h)) { - color.__state.h = result.h; - } else if (_utils_common__WEBPACK_IMPORTED_MODULE_3__.default.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() { - return this.__state.a; - }, - - set: function(v) { - this.__state.a = v; - } -}); - -Object.defineProperty(Color.prototype, 'hex', { - get: function() { - if (this.__state.space !== 'HEX') { - this.__state.hex = _math__WEBPACK_IMPORTED_MODULE_1__.default.rgb_to_hex(this.r, this.g, this.b); - this.__state.space = 'HEX'; - } - - return this.__state.hex; - }, - - set: function(v) { - this.__state.space = 'HEX'; - this.__state.hex = v; - } -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Color); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/color/interpret.js": -/*!*********************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/color/interpret.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _toString__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toString */ "./node_modules/dat.gui/src/dat/color/toString.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * 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 - */ - - - - -const INTERPRETATIONS = [ - // Strings - { - litmus: _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isString, - conversions: { - THREE_CHAR_HEX: { - read: function(original) { - const 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: _toString__WEBPACK_IMPORTED_MODULE_0__.default - }, - - SIX_CHAR_HEX: { - read: function(original) { - const test = original.match(/^#([A-F0-9]{6})$/i); - if (test === null) { - return false; - } - - return { - space: 'HEX', - hex: parseInt('0x' + test[1].toString(), 0) - }; - }, - - write: _toString__WEBPACK_IMPORTED_MODULE_0__.default - }, - - CSS_RGB: { - read: function(original) { - const 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: _toString__WEBPACK_IMPORTED_MODULE_0__.default - }, - - CSS_RGBA: { - read: function(original) { - const 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: _toString__WEBPACK_IMPORTED_MODULE_0__.default - } - } - }, - - // Numbers - { - litmus: _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber, - - conversions: { - - HEX: { - read: function(original) { - return { - space: 'HEX', - hex: original, - conversionName: 'HEX' - }; - }, - - write: function(color) { - return color.hex; - } - } - - } - - }, - - // Arrays - { - litmus: _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isArray, - conversions: { - RGB_ARRAY: { - read: function(original) { - if (original.length !== 3) { - return false; - } - - return { - space: 'RGB', - r: original[0], - g: original[1], - b: original[2] - }; - }, - - write: function(color) { - return [color.r, color.g, color.b]; - } - }, - - RGBA_ARRAY: { - read: function(original) { - if (original.length !== 4) return false; - return { - space: 'RGB', - r: original[0], - g: original[1], - b: original[2], - a: original[3] - }; - }, - - write: function(color) { - return [color.r, color.g, color.b, color.a]; - } - } - } - }, - - // Objects - { - litmus: _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isObject, - conversions: { - - RGBA_OBJ: { - read: function(original) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.r) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.g) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.b) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.a)) { - return { - space: 'RGB', - r: original.r, - g: original.g, - b: original.b, - a: original.a - }; - } - return false; - }, - - write: function(color) { - return { - r: color.r, - g: color.g, - b: color.b, - a: color.a - }; - } - }, - - RGB_OBJ: { - read: function(original) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.r) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.g) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.b)) { - return { - space: 'RGB', - r: original.r, - g: original.g, - b: original.b - }; - } - return false; - }, - - write: function(color) { - return { - r: color.r, - g: color.g, - b: color.b - }; - } - }, - - HSVA_OBJ: { - read: function(original) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.h) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.s) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.v) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.a)) { - return { - space: 'HSV', - h: original.h, - s: original.s, - v: original.v, - a: original.a - }; - } - return false; - }, - - write: function(color) { - return { - h: color.h, - s: color.s, - v: color.v, - a: color.a - }; - } - }, - - HSV_OBJ: { - read: function(original) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.h) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.s) && - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isNumber(original.v)) { - return { - space: 'HSV', - h: original.h, - s: original.s, - v: original.v - }; - } - return false; - }, - - write: function(color) { - return { - h: color.h, - s: color.s, - v: color.v - }; - } - } - } - } -]; - -let result; -let toReturn; - -const interpret = function() { - toReturn = false; - - const original = arguments.length > 1 ? _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.toArray(arguments) : arguments[0]; - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.each(INTERPRETATIONS, function(family) { - if (family.litmus(original)) { - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.each(family.conversions, function(conversion, conversionName) { - result = conversion.read(original); - - if (toReturn === false && result !== false) { - toReturn = result; - result.conversionName = conversionName; - result.conversion = conversion; - return _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.BREAK; - } - }); - - return _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.BREAK; - } - }); - - return toReturn; -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (interpret); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/color/math.js": -/*!****************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/color/math.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * 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 - */ - -let tmpComponent; - -const ColorMath = { - hsv_to_rgb: function(h, s, v) { - const hi = Math.floor(h / 60) % 6; - - const f = h / 60 - Math.floor(h / 60); - const p = v * (1.0 - s); - const q = v * (1.0 - (f * s)); - const t = v * (1.0 - ((1.0 - f) * s)); - - const 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(r, g, b) { - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; - - 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(r, g, b) { - let 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(hex, componentIndex) { - return (hex >> (componentIndex * 8)) & 0xFF; - }, - - hex_with_component: function(hex, componentIndex, value) { - return value << (tmpComponent = componentIndex * 8) | (hex & ~(0xFF << tmpComponent)); - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ColorMath); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/color/toString.js": -/*!********************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/color/toString.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * 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 - */ - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(color, forceCSSHex) { - const colorFormat = color.__state.conversionName.toString(); - - const r = Math.round(color.r); - const g = Math.round(color.g); - const b = Math.round(color.b); - const a = color.a; - const h = Math.round(color.h); - const s = color.s.toFixed(1); - const v = color.v.toFixed(1); - - if (forceCSSHex || (colorFormat === 'THREE_CHAR_HEX') || (colorFormat === 'SIX_CHAR_HEX')) { - let 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'; -} - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/BooleanController.js": -/*!***********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/BooleanController.js ***! - \***********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -/** - * @class Provides a checkbox input to alter the boolean property of an object. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - */ -class BooleanController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property) { - super(object, property); - - const _this = this; - this.__prev = this.getValue(); - - this.__checkbox = document.createElement('input'); - this.__checkbox.setAttribute('type', 'checkbox'); - - function onChange() { - _this.setValue(!_this.__prev); - } - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__checkbox, 'change', onChange, false); - - this.domElement.appendChild(this.__checkbox); - - // Match original value - this.updateDisplay(); - } - - setValue(v) { - const toReturn = super.setValue(v); - if (this.__onFinishChange) { - this.__onFinishChange.call(this, this.getValue()); - } - this.__prev = this.getValue(); - return toReturn; - } - - 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 super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BooleanController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/ColorController.js": -/*!*********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/ColorController.js ***! - \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _color_Color__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../color/Color */ "./node_modules/dat.gui/src/dat/color/Color.js"); -/* harmony import */ var _color_interpret__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../color/interpret */ "./node_modules/dat.gui/src/dat/color/interpret.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - - - -/** - * @class Represents a given property of an object that is a color. - * @param {Object} object - * @param {string} property - */ -class ColorController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property) { - super(object, property); - - this.__color = new _color_Color__WEBPACK_IMPORTED_MODULE_2__.default(this.getValue()); - this.__temp = new _color_Color__WEBPACK_IMPORTED_MODULE_2__.default(0); - - const _this = this; - - this.domElement = document.createElement('div'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.makeSelectable(this.domElement, false); - - this.__selector = document.createElement('div'); - this.__selector.className = 'selector'; - - this.__saturation_field = document.createElement('div'); - this.__saturation_field.className = 'saturation-field'; - - this.__field_knob = document.createElement('div'); - this.__field_knob.className = 'field-knob'; - this.__field_knob_border = '2px solid '; - - this.__hue_knob = document.createElement('div'); - this.__hue_knob.className = 'hue-knob'; - - this.__hue_field = document.createElement('div'); - this.__hue_field.className = 'hue-field'; - - this.__input = document.createElement('input'); - this.__input.type = 'text'; - this.__input_textShadow = '0 1px 1px '; - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'keydown', function(e) { - if (e.keyCode === 13) { // on enter - onBlur.call(this); - } - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'blur', onBlur); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__selector, 'mousedown', function(/* e */) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this, 'drag') - .bind(window, 'mouseup', function(/* e */) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.removeClass(_this.__selector, 'drag'); - }); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__selector, 'touchstart', function(/* e */) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this, 'drag') - .bind(window, 'touchend', function(/* e */) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.removeClass(_this.__selector, 'drag'); - }); - }); - - const valueField = document.createElement('div'); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__selector.style, { - width: '122px', - height: '102px', - padding: '3px', - backgroundColor: '#222', - boxShadow: '0px 1px 3px rgba(0,0,0,0.3)' - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__field_knob.style, { - position: 'absolute', - width: '12px', - height: '12px', - border: this.__field_knob_border + (this.__color.v < 0.5 ? '#fff' : '#000'), - boxShadow: '0px 1px 3px rgba(0,0,0,0.5)', - borderRadius: '12px', - zIndex: 1 - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__hue_knob.style, { - position: 'absolute', - width: '15px', - height: '2px', - borderRight: '4px solid #fff', - zIndex: 1 - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__saturation_field.style, { - width: '100px', - height: '100px', - border: '1px solid #555', - marginRight: '3px', - display: 'inline-block', - cursor: 'pointer' - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(valueField.style, { - width: '100%', - height: '100%', - background: 'none' - }); - - linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000'); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__hue_field.style, { - width: '15px', - height: '100px', - border: '1px solid #555', - cursor: 'ns-resize', - position: 'absolute', - top: '3px', - right: '3px' - }); - - hueGradient(this.__hue_field); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__input.style, { - outline: 'none', -// width: '120px', - textAlign: 'center', -// padding: '4px', -// marginBottom: '6px', - color: '#fff', - border: 0, - fontWeight: 'bold', - textShadow: this.__input_textShadow + 'rgba(0,0,0,0.7)' - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__saturation_field, 'mousedown', fieldDown); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__saturation_field, 'touchstart', fieldDown); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__field_knob, 'mousedown', fieldDown); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__field_knob, 'touchstart', fieldDown); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__hue_field, 'mousedown', fieldDownH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__hue_field, 'touchstart', fieldDownH); - - function fieldDown(e) { - setSV(e); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mousemove', setSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchmove', setSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mouseup', fieldUpSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchend', fieldUpSV); - } - - function fieldDownH(e) { - setH(e); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mousemove', setH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchmove', setH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mouseup', fieldUpH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchend', fieldUpH); - } - - function fieldUpSV() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mousemove', setSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchmove', setSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mouseup', fieldUpSV); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchend', fieldUpSV); - onFinish(); - } - - function fieldUpH() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mousemove', setH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchmove', setH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mouseup', fieldUpH); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchend', fieldUpH); - onFinish(); - } - - function onBlur() { - const i = (0,_color_interpret__WEBPACK_IMPORTED_MODULE_3__.default)(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()); - } - } - - this.__saturation_field.appendChild(valueField); - this.__selector.appendChild(this.__field_knob); - this.__selector.appendChild(this.__saturation_field); - this.__selector.appendChild(this.__hue_field); - this.__hue_field.appendChild(this.__hue_knob); - - this.domElement.appendChild(this.__input); - this.domElement.appendChild(this.__selector); - - this.updateDisplay(); - - function setSV(e) { - if (e.type.indexOf('touch') === -1) { e.preventDefault(); } - - const fieldRect = _this.__saturation_field.getBoundingClientRect(); - const { clientX, clientY } = (e.touches && e.touches[0]) || e; - let s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left); - let 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(); } - - const fieldRect = _this.__hue_field.getBoundingClientRect(); - const { clientY } = (e.touches && e.touches[0]) || e; - let 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; - } - } - - updateDisplay() { - const i = (0,_color_interpret__WEBPACK_IMPORTED_MODULE_3__.default)(this.getValue()); - - if (i !== false) { - let mismatch = false; - - // Check for mismatch on the interpreted value. - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.each(_color_Color__WEBPACK_IMPORTED_MODULE_2__.default.COMPONENTS, function(component) { - if (!_utils_common__WEBPACK_IMPORTED_MODULE_4__.default.isUndefined(i[component]) && !_utils_common__WEBPACK_IMPORTED_MODULE_4__.default.isUndefined(this.__color.__state[component]) && - i[component] !== this.__color.__state[component]) { - mismatch = true; - return {}; // break - } - }, this); - - // If nothing diverges, we keep our previous values - // for statefulness, otherwise we recalculate fresh - if (mismatch) { - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__color.__state, i); - } - } - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__temp.__state, this.__color.__state); - - this.__temp.a = 1; - - const flip = (this.__color.v < 0.5 || this.__color.s > 0.5) ? 255 : 0; - const _flip = 255 - flip; - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.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(); - - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.extend(this.__input.style, { - backgroundColor: this.__color.toHexString(), - color: 'rgb(' + flip + ',' + flip + ',' + flip + ')', - textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)' - }); - } -} - -const vendors = ['-moz-', '-o-', '-webkit-', '-ms-', '']; - -function linearGradient(elem, x, a, b) { - elem.style.background = ''; - _utils_common__WEBPACK_IMPORTED_MODULE_4__.default.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%);'; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ColorController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/Controller.js": -/*!****************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/Controller.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -/** - * @class An "abstract" class that represents a given property of an object. - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - */ -class Controller { - constructor(object, property) { - this.initialValue = object[property]; - - /** - * Those who extend this class will put their DOM elements in here. - * @type {DOMElement} - */ - this.domElement = document.createElement('div'); - - /** - * The object to manipulate - * @type {Object} - */ - this.object = object; - - /** - * The name of the property to manipulate - * @type {String} - */ - this.property = property; - - /** - * The function to be called on change. - * @type {Function} - * @ignore - */ - this.__onChange = undefined; - - /** - * The function to be called on finishing change. - * @type {Function} - * @ignore - */ - this.__onFinishChange = undefined; - } - - /** - * Specify that a function fire every time someone changes the value with - * this Controller. - * - * @param {Function} fnc This function will be called whenever the value - * is modified via this Controller. - * @returns {Controller} this - */ - onChange(fnc) { - this.__onChange = fnc; - return this; - } - - /** - * Specify that a function fire every time someone "finishes" changing - * the value wih this Controller. Useful for values that change - * incrementally like numbers or strings. - * - * @param {Function} fnc This function will be called whenever - * someone "finishes" changing the value via this Controller. - * @returns {Controller} this - */ - onFinishChange(fnc) { - this.__onFinishChange = fnc; - return this; - } - - /** - * Change the value of object[property] - * - * @param {Object} newValue The new value of object[property] - */ - setValue(newValue) { - this.object[this.property] = newValue; - if (this.__onChange) { - this.__onChange.call(this, newValue); - } - - this.updateDisplay(); - return this; - } - - /** - * Gets the value of object[property] - * - * @returns {Object} The current value of object[property] - */ - getValue() { - return this.object[this.property]; - } - - /** - * Refreshes the visual display of a Controller in order to keep sync - * with the object's current value. - * @returns {Controller} this - */ - updateDisplay() { - return this; - } - - /** - * @returns {Boolean} true if the value has deviated from initialValue - */ - isModified() { - return this.initialValue !== this.getValue(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Controller); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/ControllerFactory.js": -/*!***********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/ControllerFactory.js ***! - \***********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _OptionController__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OptionController */ "./node_modules/dat.gui/src/dat/controllers/OptionController.js"); -/* harmony import */ var _NumberControllerBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NumberControllerBox */ "./node_modules/dat.gui/src/dat/controllers/NumberControllerBox.js"); -/* harmony import */ var _NumberControllerSlider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NumberControllerSlider */ "./node_modules/dat.gui/src/dat/controllers/NumberControllerSlider.js"); -/* harmony import */ var _StringController__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./StringController */ "./node_modules/dat.gui/src/dat/controllers/StringController.js"); -/* harmony import */ var _FunctionController__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FunctionController */ "./node_modules/dat.gui/src/dat/controllers/FunctionController.js"); -/* harmony import */ var _BooleanController__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./BooleanController */ "./node_modules/dat.gui/src/dat/controllers/BooleanController.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * 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 - */ - - - - - - - - - -const ControllerFactory = function(object, property) { - const initialValue = object[property]; - - // Providing options? - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isArray(arguments[2]) || _utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isObject(arguments[2])) { - return new _OptionController__WEBPACK_IMPORTED_MODULE_0__.default(object, property, arguments[2]); - } - - // Providing a map? - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(initialValue)) { - // Has min and max? (slider) - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(arguments[2]) && _utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(arguments[3])) { - // has step? - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(arguments[4])) { - return new _NumberControllerSlider__WEBPACK_IMPORTED_MODULE_2__.default(object, property, - arguments[2], arguments[3], arguments[4]); - } - - return new _NumberControllerSlider__WEBPACK_IMPORTED_MODULE_2__.default(object, property, arguments[2], arguments[3]); - } - - // number box - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isNumber(arguments[4])) { // has step - return new _NumberControllerBox__WEBPACK_IMPORTED_MODULE_1__.default(object, property, - { min: arguments[2], max: arguments[3], step: arguments[4] }); - } - return new _NumberControllerBox__WEBPACK_IMPORTED_MODULE_1__.default(object, property, { min: arguments[2], max: arguments[3] }); - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isString(initialValue)) { - return new _StringController__WEBPACK_IMPORTED_MODULE_3__.default(object, property); - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isFunction(initialValue)) { - return new _FunctionController__WEBPACK_IMPORTED_MODULE_4__.default(object, property, ''); - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_6__.default.isBoolean(initialValue)) { - return new _BooleanController__WEBPACK_IMPORTED_MODULE_5__.default(object, property); - } - - return null; -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ControllerFactory); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/FunctionController.js": -/*!************************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/FunctionController.js ***! - \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -/** - * @class Provides a GUI interface to fire a specified method, a property of an object. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - */ -class FunctionController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, text) { - super(object, property); - - const _this = this; - - this.__button = document.createElement('div'); - this.__button.innerHTML = text === undefined ? 'Fire' : text; - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__button, 'click', function(e) { - e.preventDefault(); - _this.fire(); - return false; - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this.__button, 'button'); - - this.domElement.appendChild(this.__button); - } - - fire() { - if (this.__onChange) { - this.__onChange.call(this); - } - this.getValue().call(this.object); - if (this.__onFinishChange) { - this.__onFinishChange.call(this, this.getValue()); - } - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FunctionController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/NumberController.js": -/*!**********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/NumberController.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * 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 numDecimals(x) { - const _x = x.toString(); - if (_x.indexOf('.') > -1) { - return _x.length - _x.indexOf('.') - 1; - } - - return 0; -} - -/** - * @class Represents a given property of an object that is a number. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - * @param {Object} [params] Optional parameters - * @param {Number} [params.min] Minimum allowed value - * @param {Number} [params.max] Maximum allowed value - * @param {Number} [params.step] Increment by which to change value - */ -class NumberController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, params) { - super(object, property); - - const _params = params || {}; - - this.__min = _params.min; - this.__max = _params.max; - this.__step = _params.step; - - if (_utils_common__WEBPACK_IMPORTED_MODULE_1__.default.isUndefined(this.__step)) { - if (this.initialValue === 0) { - this.__impliedStep = 1; // What are we, psychics? - } else { - // Hey Doug, check this out. - 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); - } - - setValue(v) { - let _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 super.setValue(_v); - } - - /** - * Specify a minimum value for object[property]. - * - * @param {Number} minValue The minimum value for - * object[property] - * @returns {dat.controllers.NumberController} this - */ - min(minValue) { - this.__min = minValue; - return this; - } - - /** - * Specify a maximum value for object[property]. - * - * @param {Number} maxValue The maximum value for - * object[property] - * @returns {dat.controllers.NumberController} this - */ - max(maxValue) { - this.__max = maxValue; - return this; - } - - /** - * Specify a step value that dat.controllers.NumberController - * increments by. - * - * @param {Number} stepValue The step value for - * dat.controllers.NumberController - * @default if minimum and maximum specified increment is 1% of the - * difference otherwise stepValue is 1 - * @returns {dat.controllers.NumberController} this - */ - step(stepValue) { - this.__step = stepValue; - this.__impliedStep = stepValue; - this.__precision = numDecimals(stepValue); - return this; - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NumberController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/NumberControllerBox.js": -/*!*************************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/NumberControllerBox.js ***! - \*************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _NumberController__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NumberController */ "./node_modules/dat.gui/src/dat/controllers/NumberController.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * 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 roundToDecimal(value, decimals) { - const tenTo = Math.pow(10, decimals); - return Math.round(value * tenTo) / tenTo; -} - -/** - * @class Represents a given property of an object that is a number and - * provides an input element with which to manipulate it. - * - * @extends dat.controllers.Controller - * @extends dat.controllers.NumberController - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - * @param {Object} [params] Optional parameters - * @param {Number} [params.min] Minimum allowed value - * @param {Number} [params.max] Maximum allowed value - * @param {Number} [params.step] Increment by which to change value - */ -class NumberControllerBox extends _NumberController__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, params) { - super(object, property, params); - - this.__truncationSuspended = false; - - const _this = this; - - /** - * {Number} Previous mouse y position - * @ignore - */ - let prevY; - - function onChange() { - const attempted = parseFloat(_this.__input.value); - if (!_utils_common__WEBPACK_IMPORTED_MODULE_2__.default.isNaN(attempted)) { - _this.setValue(attempted); - } - } - - function onFinish() { - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.getValue()); - } - } - - function onBlur() { - onFinish(); - } - - function onMouseDrag(e) { - const diff = prevY - e.clientY; - _this.setValue(_this.getValue() + diff * _this.__impliedStep); - - prevY = e.clientY; - } - - function onMouseUp() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mousemove', onMouseDrag); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mouseup', onMouseUp); - onFinish(); - } - - function onMouseDown(e) { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mousemove', onMouseDrag); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mouseup', onMouseUp); - prevY = e.clientY; - } - - this.__input = document.createElement('input'); - this.__input.setAttribute('type', 'text'); - - // Makes it so manually specified values are not truncated. - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'change', onChange); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'blur', onBlur); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'mousedown', onMouseDown); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'keydown', function(e) { - // When pressing enter, you can be as precise as you want. - if (e.keyCode === 13) { - _this.__truncationSuspended = true; - this.blur(); - _this.__truncationSuspended = false; - onFinish(); - } - }); - - this.updateDisplay(); - - this.domElement.appendChild(this.__input); - } - - updateDisplay() { - this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision); - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NumberControllerBox); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/NumberControllerSlider.js": -/*!****************************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/NumberControllerSlider.js ***! - \****************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _NumberController__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NumberController */ "./node_modules/dat.gui/src/dat/controllers/NumberController.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/** - * 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 map(v, i1, i2, o1, o2) { - return o1 + (o2 - o1) * ((v - i1) / (i2 - i1)); -} - -/** - * @class Represents a given property of an object that is a number, contains - * a minimum and maximum, and provides a slider element with which to - * manipulate it. It should be noted that the slider element is made up of - * <div> tags, not the html5 - * <slider> element. - * - * @extends dat.controllers.Controller - * @extends dat.controllers.NumberController - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - * @param {Number} minValue Minimum allowed value - * @param {Number} maxValue Maximum allowed value - * @param {Number} stepValue Increment by which to change value - */ -class NumberControllerSlider extends _NumberController__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, min, max, step) { - super(object, property, { min: min, max: max, step: step }); - - const _this = this; - - this.__background = document.createElement('div'); - this.__foreground = document.createElement('div'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__background, 'mousedown', onMouseDown); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__background, 'touchstart', onTouchStart); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this.__background, 'slider'); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.addClass(this.__foreground, 'slider-fg'); - - function onMouseDown(e) { - document.activeElement.blur(); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mousemove', onMouseDrag); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'mouseup', onMouseUp); - - onMouseDrag(e); - } - - function onMouseDrag(e) { - e.preventDefault(); - - const bgRect = _this.__background.getBoundingClientRect(); - - _this.setValue( - map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max) - ); - - return false; - } - - function onMouseUp() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mousemove', onMouseDrag); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'mouseup', onMouseUp); - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.getValue()); - } - } - - function onTouchStart(e) { - if (e.touches.length !== 1) { return; } - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchmove', onTouchMove); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(window, 'touchend', onTouchEnd); - onTouchMove(e); - } - - function onTouchMove(e) { - const clientX = e.touches[0].clientX; - const bgRect = _this.__background.getBoundingClientRect(); - - _this.setValue( - map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max) - ); - } - - function onTouchEnd() { - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchmove', onTouchMove); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.unbind(window, 'touchend', onTouchEnd); - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.getValue()); - } - } - - this.updateDisplay(); - - this.__background.appendChild(this.__foreground); - this.domElement.appendChild(this.__background); - } - - updateDisplay() { - const pct = (this.getValue() - this.__min) / (this.__max - this.__min); - this.__foreground.style.width = pct * 100 + '%'; - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NumberControllerSlider); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/OptionController.js": -/*!**********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/OptionController.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - - -/** - * @class Provides a select input to alter the property of an object, using a - * list of accepted values. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - * @param {Object|string[]} options A map of labels to acceptable values, or - * a list of acceptable string values. - */ -class OptionController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property, opts) { - super(object, property); - - let options = opts; - - const _this = this; - - /** - * The drop down menu - * @ignore - */ - this.__select = document.createElement('select'); - - if (_utils_common__WEBPACK_IMPORTED_MODULE_2__.default.isArray(options)) { - const map = {}; - _utils_common__WEBPACK_IMPORTED_MODULE_2__.default.each(options, function(element) { - map[element] = element; - }); - options = map; - } - - _utils_common__WEBPACK_IMPORTED_MODULE_2__.default.each(options, function(value, key) { - const opt = document.createElement('option'); - opt.innerHTML = key; - opt.setAttribute('value', value); - _this.__select.appendChild(opt); - }); - - // Acknowledge original value - this.updateDisplay(); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__select, 'change', function() { - const desiredValue = this.options[this.selectedIndex].value; - _this.setValue(desiredValue); - }); - - this.domElement.appendChild(this.__select); - } - - setValue(v) { - const toReturn = super.setValue(v); - - if (this.__onFinishChange) { - this.__onFinishChange.call(this, this.getValue()); - } - return toReturn; - } - - updateDisplay() { - if (_dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.isActive(this.__select)) return this; // prevent number from updating if user is trying to manually update - this.__select.value = this.getValue(); - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OptionController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/controllers/StringController.js": -/*!**********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/controllers/StringController.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _Controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -/** - * @class Provides a text input to alter the string property of an object. - * - * @extends dat.controllers.Controller - * - * @param {Object} object The object to be manipulated - * @param {string} property The name of the property to be manipulated - */ -class StringController extends _Controller__WEBPACK_IMPORTED_MODULE_0__.default { - constructor(object, property) { - super(object, property); - - const _this = this; - - function onChange() { - _this.setValue(_this.__input.value); - } - - function onBlur() { - if (_this.__onFinishChange) { - _this.__onFinishChange.call(_this, _this.getValue()); - } - } - - this.__input = document.createElement('input'); - this.__input.setAttribute('type', 'text'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'keyup', onChange); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'change', onChange); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'blur', onBlur); - _dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.bind(this.__input, 'keydown', function(e) { - if (e.keyCode === 13) { - this.blur(); - } - }); - - this.updateDisplay(); - - this.domElement.appendChild(this.__input); - } - - updateDisplay() { - // Stops the caret from moving on account of: - // keyup -> setValue -> updateDisplay - if (!_dom_dom__WEBPACK_IMPORTED_MODULE_1__.default.isActive(this.__input)) { - this.__input.value = this.getValue(); - } - return super.updateDisplay(); - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (StringController); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/dom/CenteredDiv.js": -/*!*********************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/dom/CenteredDiv.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - - -class CenteredDiv { - constructor() { - this.backgroundElement = document.createElement('div'); - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.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_dom__WEBPACK_IMPORTED_MODULE_0__.default.makeFullscreen(this.backgroundElement); - this.backgroundElement.style.position = 'fixed'; - - this.domElement = document.createElement('div'); - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.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); - - const _this = this; - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.bind(this.backgroundElement, 'click', function() { - _this.hide(); - }); - } - - show() { - const _this = this; - - this.backgroundElement.style.display = 'block'; - - this.domElement.style.display = 'block'; - this.domElement.style.opacity = 0; -// this.domElement.style.top = '52%'; - this.domElement.style.webkitTransform = 'scale(1.1)'; - - this.layout(); - - _utils_common__WEBPACK_IMPORTED_MODULE_1__.default.defer(function() { - _this.backgroundElement.style.opacity = 1; - _this.domElement.style.opacity = 1; - _this.domElement.style.webkitTransform = 'scale(1)'; - }); - } - - /** - * Hide centered div - */ - hide() { - const _this = this; - - const hide = function() { - _this.domElement.style.display = 'none'; - _this.backgroundElement.style.display = 'none'; - - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.unbind(_this.domElement, 'webkitTransitionEnd', hide); - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.unbind(_this.domElement, 'transitionend', hide); - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.unbind(_this.domElement, 'oTransitionEnd', hide); - }; - - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.bind(this.domElement, 'webkitTransitionEnd', hide); - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.bind(this.domElement, 'transitionend', hide); - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.bind(this.domElement, 'oTransitionEnd', hide); - - this.backgroundElement.style.opacity = 0; -// this.domElement.style.top = '48%'; - this.domElement.style.opacity = 0; - this.domElement.style.webkitTransform = 'scale(1.1)'; - } - - layout() { - this.domElement.style.left = window.innerWidth / 2 - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.getWidth(this.domElement) / 2 + 'px'; - this.domElement.style.top = window.innerHeight / 2 - _dom_dom__WEBPACK_IMPORTED_MODULE_0__.default.getHeight(this.domElement) / 2 + 'px'; - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CenteredDiv); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/dom/dom.js": -/*!*************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/dom/dom.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/** - * 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 - */ - - - -const EVENT_MAP = { - HTMLEvents: ['change'], - MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'], - KeyboardEvents: ['keydown'] -}; - -const EVENT_MAP_INV = {}; -_utils_common__WEBPACK_IMPORTED_MODULE_0__.default.each(EVENT_MAP, function(v, k) { - _utils_common__WEBPACK_IMPORTED_MODULE_0__.default.each(v, function(e) { - EVENT_MAP_INV[e] = k; - }); -}); - -const CSS_VALUE_PIXELS = /(\d+(\.\d+)?)px/; - -function cssValueToPixels(val) { - if (val === '0' || _utils_common__WEBPACK_IMPORTED_MODULE_0__.default.isUndefined(val)) { - return 0; - } - - const match = val.match(CSS_VALUE_PIXELS); - - if (!_utils_common__WEBPACK_IMPORTED_MODULE_0__.default.isNull(match)) { - return parseFloat(match[1]); - } - - // TODO ...ems? %? - - return 0; -} - -/** - * @namespace - * @member dat.dom - */ -const dom = { - - /** - * - * @param elem - * @param selectable - */ - makeSelectable: function(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'; - }, - - /** - * - * @param elem - * @param horizontal - * @param vert - */ - makeFullscreen: function(elem, hor, vert) { - let vertical = vert; - let horizontal = hor; - - if (_utils_common__WEBPACK_IMPORTED_MODULE_0__.default.isUndefined(horizontal)) { - horizontal = true; - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_0__.default.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; - } - }, - - /** - * - * @param elem - * @param eventType - * @param params - */ - fakeEvent: function(elem, eventType, pars, aux) { - const params = pars || {}; - const className = EVENT_MAP_INV[eventType]; - if (!className) { - throw new Error('Event type ' + eventType + ' not supported.'); - } - const evt = document.createEvent(className); - switch (className) { - case 'MouseEvents': - { - const clientX = params.x || params.clientX || 0; - const clientY = params.y || params.clientY || 0; - evt.initMouseEvent(eventType, params.bubbles || false, - params.cancelable || true, window, params.clickCount || 1, - 0, // screen X - 0, // screen Y - clientX, // client X - clientY, // client Y - false, false, false, false, 0, null); - break; - } - case 'KeyboardEvents': - { - const init = evt.initKeyboardEvent || evt.initKeyEvent; // webkit || moz - _utils_common__WEBPACK_IMPORTED_MODULE_0__.default.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; - } - } - _utils_common__WEBPACK_IMPORTED_MODULE_0__.default.defaults(evt, aux); - elem.dispatchEvent(evt); - }, - - /** - * - * @param elem - * @param event - * @param func - * @param bool - */ - bind: function(elem, event, func, newBool) { - const bool = newBool || false; - if (elem.addEventListener) { - elem.addEventListener(event, func, bool); - } else if (elem.attachEvent) { - elem.attachEvent('on' + event, func); - } - return dom; - }, - - /** - * - * @param elem - * @param event - * @param func - * @param bool - */ - unbind: function(elem, event, func, newBool) { - const bool = newBool || false; - if (elem.removeEventListener) { - elem.removeEventListener(event, func, bool); - } else if (elem.detachEvent) { - elem.detachEvent('on' + event, func); - } - return dom; - }, - - /** - * - * @param elem - * @param className - */ - addClass: function(elem, className) { - if (elem.className === undefined) { - elem.className = className; - } else if (elem.className !== className) { - const classes = elem.className.split(/ +/); - if (classes.indexOf(className) === -1) { - classes.push(className); - elem.className = classes.join(' ').replace(/^\s+/, '').replace(/\s+$/, ''); - } - } - return dom; - }, - - /** - * - * @param elem - * @param className - */ - removeClass: function(elem, className) { - if (className) { - if (elem.className === className) { - elem.removeAttribute('class'); - } else { - const classes = elem.className.split(/ +/); - const index = classes.indexOf(className); - if (index !== -1) { - classes.splice(index, 1); - elem.className = classes.join(' '); - } - } - } else { - elem.className = undefined; - } - return dom; - }, - - hasClass: function(elem, className) { - return new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)').test(elem.className) || false; - }, - - /** - * - * @param elem - */ - getWidth: function(elem) { - const 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); - }, - - /** - * - * @param elem - */ - getHeight: function(elem) { - const 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); - }, - - /** - * - * @param el - */ - getOffset: function(el) { - let elem = el; - const offset = { left: 0, top: 0 }; - if (elem.offsetParent) { - do { - offset.left += elem.offsetLeft; - offset.top += elem.offsetTop; - elem = elem.offsetParent; - } while (elem); - } - return offset; - }, - - // http://stackoverflow.com/posts/2684561/revisions - /** - * - * @param elem - */ - isActive: function(elem) { - return elem === document.activeElement && (elem.type || elem.href); - } - -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dom); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/gui/GUI.js": -/*!*************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/gui/GUI.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _utils_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/css */ "./node_modules/dat.gui/src/dat/utils/css.js"); -/* harmony import */ var _saveDialogue_html__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./saveDialogue.html */ "./node_modules/dat.gui/src/dat/gui/saveDialogue.html.js"); -/* harmony import */ var _controllers_ControllerFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../controllers/ControllerFactory */ "./node_modules/dat.gui/src/dat/controllers/ControllerFactory.js"); -/* harmony import */ var _controllers_Controller__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../controllers/Controller */ "./node_modules/dat.gui/src/dat/controllers/Controller.js"); -/* harmony import */ var _controllers_BooleanController__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../controllers/BooleanController */ "./node_modules/dat.gui/src/dat/controllers/BooleanController.js"); -/* harmony import */ var _controllers_FunctionController__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../controllers/FunctionController */ "./node_modules/dat.gui/src/dat/controllers/FunctionController.js"); -/* harmony import */ var _controllers_NumberControllerBox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../controllers/NumberControllerBox */ "./node_modules/dat.gui/src/dat/controllers/NumberControllerBox.js"); -/* harmony import */ var _controllers_NumberControllerSlider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../controllers/NumberControllerSlider */ "./node_modules/dat.gui/src/dat/controllers/NumberControllerSlider.js"); -/* harmony import */ var _controllers_ColorController__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../controllers/ColorController */ "./node_modules/dat.gui/src/dat/controllers/ColorController.js"); -/* harmony import */ var _utils_requestAnimationFrame__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/requestAnimationFrame */ "./node_modules/dat.gui/src/dat/utils/requestAnimationFrame.js"); -/* harmony import */ var _dom_CenteredDiv__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../dom/CenteredDiv */ "./node_modules/dat.gui/src/dat/dom/CenteredDiv.js"); -/* harmony import */ var _dom_dom__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../dom/dom */ "./node_modules/dat.gui/src/dat/dom/dom.js"); -/* harmony import */ var _utils_common__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/common */ "./node_modules/dat.gui/src/dat/utils/common.js"); -/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./style.scss */ "./node_modules/dat.gui/src/dat/gui/style.scss"); -/** - * 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 - */ - - - - - - - - - - - - - - - - // CSS to embed in build - -_utils_css__WEBPACK_IMPORTED_MODULE_0__.default.inject(_style_scss__WEBPACK_IMPORTED_MODULE_13__.default); - -/** @ignore Outer-most className for GUI's */ -const CSS_NAMESPACE = 'dg'; - -const HIDE_KEY_CODE = 72; - -/** @ignore The only value shared between the JS and SCSS. Use caution. */ -const CLOSE_BUTTON_HEIGHT = 20; - -const DEFAULT_DEFAULT_PRESET_NAME = 'Default'; - -const SUPPORTS_LOCAL_STORAGE = (function() { - try { - return !!window.localStorage; - } catch (e) { - return false; - } -}()); - -let SAVE_DIALOGUE; - -/** @ignore Have we yet to create an autoPlace GUI? */ -let autoPlaceVirgin = true; - -/** @ignore Fixed position div that auto place GUI's go inside */ -let autoPlaceContainer; - -/** @ignore Are we hiding the GUI's ? */ -let hide = false; - -/** @private GUI's which should be hidden */ -const hideableGuis = []; - -/** - * @class A lightweight controller library for JavaScript. It allows you to easily - * manipulate variables and fire functions on the fly. - * - * @typicalname gui - * - * @example - * // Creating a GUI with options. - * var gui = new dat.GUI({name: 'My GUI'}); - * - * @example - * // Creating a GUI and a subfolder. - * var gui = new dat.GUI(); - * var folder1 = gui.addFolder('Flow Field'); - * - * @param {Object} [params] - * @param {String} [params.name] The name of this GUI. - * @param {Object} [params.load] JSON object representing the saved state of - * this GUI. - * @param {dat.gui.GUI} [params.parent] The GUI I'm nested in. - * @param {Boolean} [params.autoPlace=true] - * @param {Boolean} [params.hideable=true] If true, GUI is shown/hidden by h keypress. - * @param {Boolean} [params.closed=false] If true, starts closed - * @param {Boolean} [params.closeOnTop=false] If true, close/open button shows on top of the GUI - */ -const GUI = function(pars) { - const _this = this; - - let params = pars || {}; - - /** - * Outermost DOM Element - * @type {DOMElement} - */ - this.domElement = document.createElement('div'); - this.__ul = document.createElement('ul'); - this.domElement.appendChild(this.__ul); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.domElement, CSS_NAMESPACE); - - /** - * Nested GUI's by name - * @ignore - */ - this.__folders = {}; - - this.__controllers = []; - - /** - * List of objects I'm remembering for save, only used in top level GUI - * @ignore - */ - this.__rememberedObjects = []; - - /** - * Maps the index of remembered objects to a map of controllers, only used - * in top level GUI. - * - * @private - * @ignore - * - * @example - * [ - * { - * propertyName: Controller, - * anotherPropertyName: Controller - * }, - * { - * propertyName: Controller - * } - * ] - */ - this.__rememberedObjectIndecesToControllers = []; - - this.__listening = []; - - // Default parameters - params = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defaults(params, { - closeOnTop: false, - autoPlace: true, - width: GUI.DEFAULT_WIDTH - }); - - params = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defaults(params, { - resizable: params.autoPlace, - hideable: params.autoPlace - }); - - if (!_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.load)) { - // Explicit preset - if (params.preset) { - params.load.preset = params.preset; - } - } else { - params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME }; - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.parent) && params.hideable) { - hideableGuis.push(this); - } - - // Only root level GUI's are resizable. - params.resizable = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.parent) && params.resizable; - - if (params.autoPlace && _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.scrollable)) { - params.scrollable = true; - } -// params.scrollable = common.isUndefined(params.parent) && params.scrollable === true; - - // Not part of params because I don't want people passing this in via - // constructor. Should be a 'remembered' value. - let useLocalStorage = - SUPPORTS_LOCAL_STORAGE && - localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true'; - - let saveToLocalStorage; - let titleRow; - - Object.defineProperties(this, - /** @lends GUI.prototype */ - { - /** - * The parent GUI - * @type dat.gui.GUI - */ - parent: { - get: function() { - return params.parent; - } - }, - - scrollable: { - get: function() { - return params.scrollable; - } - }, - - /** - * Handles GUI's element placement for you - * @type Boolean - */ - autoPlace: { - get: function() { - return params.autoPlace; - } - }, - - /** - * Handles GUI's position of open/close button - * @type Boolean - */ - closeOnTop: { - get: function() { - return params.closeOnTop; - } - }, - - /** - * The identifier for a set of saved values - * @type String - */ - preset: { - get: function() { - if (_this.parent) { - return _this.getRoot().preset; - } - - return params.load.preset; - }, - - set: function(v) { - if (_this.parent) { - _this.getRoot().preset = v; - } else { - params.load.preset = v; - } - setPresetSelectIndex(this); - _this.revert(); - } - }, - - /** - * The width of GUI element - * @type Number - */ - width: { - get: function() { - return params.width; - }, - set: function(v) { - params.width = v; - setWidth(_this, v); - } - }, - - /** - * The name of GUI. Used for folders. i.e - * a folder's name - * @type String - */ - name: { - get: function() { - return params.name; - }, - set: function(v) { - // TODO Check for collisions among sibling folders - params.name = v; - if (titleRow) { - titleRow.innerHTML = params.name; - } - } - }, - - /** - * Whether the GUI is collapsed or not - * @type Boolean - */ - closed: { - get: function() { - return params.closed; - }, - set: function(v) { - params.closed = v; - if (params.closed) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(_this.__ul, GUI.CLASS_CLOSED); - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.removeClass(_this.__ul, GUI.CLASS_CLOSED); - } - // For browsers that aren't going to respect the CSS transition, - // Lets just check our height against the window height right off - // the bat. - this.onResize(); - - if (_this.__closeButton) { - _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED; - } - } - }, - - /** - * Contains all presets - * @type Object - */ - load: { - get: function() { - return params.load; - } - }, - - /** - * Determines whether or not to use localStorage as the means for - * remembering - * @type Boolean - */ - useLocalStorage: { - - get: function() { - return useLocalStorage; - }, - set: function(bool) { - if (SUPPORTS_LOCAL_STORAGE) { - useLocalStorage = bool; - if (bool) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'unload', saveToLocalStorage); - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'unload', saveToLocalStorage); - } - localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool); - } - } - } - }); - - // Are we a root level GUI? - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.parent)) { - this.closed = params.closed || false; - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.domElement, GUI.CLASS_MAIN); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.makeSelectable(this.domElement, false); - - // Are we supposed to be loading locally? - if (SUPPORTS_LOCAL_STORAGE) { - if (useLocalStorage) { - _this.useLocalStorage = true; - - const 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_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON); - if (params.closeOnTop) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP); - this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]); - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM); - this.domElement.appendChild(this.__closeButton); - } - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(this.__closeButton, 'click', function() { - _this.closed = !_this.closed; - }); - // Oh, you're a nested GUI! - } else { - if (params.closed === undefined) { - params.closed = true; - } - - const titleRowName = document.createTextNode(params.name); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(titleRowName, 'controller-name'); - - titleRow = addRow(_this, titleRowName); - - const onClickTitle = function(e) { - e.preventDefault(); - _this.closed = !_this.closed; - return false; - }; - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.__ul, GUI.CLASS_CLOSED); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(titleRow, 'title'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(titleRow, 'click', onClickTitle); - - if (!params.closed) { - this.closed = false; - } - } - - if (params.autoPlace) { - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(params.parent)) { - if (autoPlaceVirgin) { - autoPlaceContainer = document.createElement('div'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(autoPlaceContainer, CSS_NAMESPACE); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER); - document.body.appendChild(autoPlaceContainer); - autoPlaceVirgin = false; - } - - // Put it in the dom for you. - autoPlaceContainer.appendChild(this.domElement); - - // Apply the auto styles - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(this.domElement, GUI.CLASS_AUTO_PLACE); - } - - - // Make it not elastic. - if (!this.parent) { - setWidth(_this, params.width); - } - } - - this.__resizeHandler = function() { - _this.onResizeDebounced(); - }; - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'resize', this.__resizeHandler); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(this.__ul, 'transitionend', this.__resizeHandler); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler); - this.onResize(); - - if (params.resizable) { - addResizeHandle(this); - } - - saveToLocalStorage = function() { - if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') { - localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject())); - } - }; - - // expose this method publicly - this.saveToLocalStorageIfPossible = saveToLocalStorage; - - function resetWidth() { - const root = _this.getRoot(); - root.width += 1; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defer(function() { - root.width -= 1; - }); - } - - if (!params.parent) { - resetWidth(); - } -}; - -GUI.toggleHide = function() { - hide = !hide; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.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_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'keydown', GUI._keydownHandler, false); - -_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.extend( - GUI.prototype, - - /** @lends GUI.prototype */ - { - - /** - * Adds a new {@link Controller} to the GUI. The type of controller created - * is inferred from the initial value of object[property]. For - * color properties, see {@link addColor}. - * - * @param {Object} object The object to be manipulated - * @param {String} property The name of the property to be manipulated - * @param {Number} [min] Minimum allowed value - * @param {Number} [max] Maximum allowed value - * @param {Number} [step] Increment by which to change value - * @returns {Controller} The controller that was added to the GUI. - * @instance - * - * @example - * // Add a string controller. - * var person = {name: 'Sam'}; - * gui.add(person, 'name'); - * - * @example - * // Add a number controller slider. - * var person = {age: 45}; - * gui.add(person, 'age', 0, 100); - */ - add: function(object, property) { - return add( - this, - object, - property, - { - factoryArgs: Array.prototype.slice.call(arguments, 2) - } - ); - }, - - /** - * Adds a new color controller to the GUI. - * - * @param object - * @param property - * @returns {Controller} The controller that was added to the GUI. - * @instance - * - * @example - * var palette = { - * color1: '#FF0000', // CSS string - * color2: [ 0, 128, 255 ], // RGB array - * color3: [ 0, 128, 255, 0.3 ], // RGB with alpha - * color4: { h: 350, s: 0.9, v: 0.3 } // Hue, saturation, value - * }; - * gui.addColor(palette, 'color1'); - * gui.addColor(palette, 'color2'); - * gui.addColor(palette, 'color3'); - * gui.addColor(palette, 'color4'); - */ - addColor: function(object, property) { - return add( - this, - object, - property, - { - color: true - } - ); - }, - - /** - * Removes the given controller from the GUI. - * @param {Controller} controller - * @instance - */ - remove: function(controller) { - // TODO listening? - this.__ul.removeChild(controller.__li); - this.__controllers.splice(this.__controllers.indexOf(controller), 1); - const _this = this; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defer(function() { - _this.onResize(); - }); - }, - - /** - * Removes the root GUI from the document and unbinds all event listeners. - * For subfolders, use `gui.removeFolder(folder)` instead. - * @instance - */ - destroy: function() { - 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); - } - - const _this = this; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__folders, function(subfolder) { - _this.removeFolder(subfolder); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'keydown', GUI._keydownHandler, false); - - removeListeners(this); - }, - - /** - * Creates a new subfolder GUI instance. - * @param name - * @returns {dat.gui.GUI} The new folder. - * @throws {Error} if this GUI already has a folder by the specified - * name - * @instance - */ - addFolder: function(name) { - // We have to prevent collisions on names in order to have a key - // by which to remember saved values - if (this.__folders[name] !== undefined) { - throw new Error('You already have a folder in this GUI by the' + - ' name "' + name + '"'); - } - - const newGuiParams = { name: name, parent: this }; - - // We need to pass down the autoPlace trait so that we can - // attach event listeners to open/close folder actions to - // ensure that a scrollbar appears if the window is too short. - newGuiParams.autoPlace = this.autoPlace; - - // Do we have saved appearance data for this folder? - if (this.load && // Anything loaded? - this.load.folders && // Was my parent a dead-end? - this.load.folders[name]) { // Did daddy remember me? - // Start me closed if I was closed - newGuiParams.closed = this.load.folders[name].closed; - - // Pass down the loaded data - newGuiParams.load = this.load.folders[name]; - } - - const gui = new GUI(newGuiParams); - this.__folders[name] = gui; - - const li = addRow(this, gui.domElement); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, 'folder'); - return gui; - }, - - /** - * Removes a subfolder GUI instance. - * @param {dat.gui.GUI} folder The folder to remove. - * @instance - */ - removeFolder: function(folder) { - this.__ul.removeChild(folder.domElement.parentElement); - - delete this.__folders[folder.name]; - - // Do we have saved appearance data for this folder? - if (this.load && // Anything loaded? - this.load.folders && // Was my parent a dead-end? - this.load.folders[folder.name]) { - delete this.load.folders[folder.name]; - } - - removeListeners(folder); - - const _this = this; - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(folder.__folders, function(subfolder) { - folder.removeFolder(subfolder); - }); - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defer(function() { - _this.onResize(); - }); - }, - - /** - * Opens the GUI. - */ - open: function() { - this.closed = false; - }, - - /** - * Closes the GUI. - */ - close: function() { - this.closed = true; - }, - - /** - * Hides the GUI. - */ - hide: function() { - this.domElement.style.display = 'none'; - }, - - /** - * Shows the GUI. - */ - show: function() { - this.domElement.style.display = ''; - }, - - - onResize: function() { - // we debounce this function to prevent performance issues when rotating on tablet/mobile - const root = this.getRoot(); - if (root.scrollable) { - const top = _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.getOffset(root.__ul).top; - let h = 0; - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(root.__ul.childNodes, function(node) { - if (!(root.autoPlace && node === root.__save_row)) { - h += _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.getHeight(node); - } - }); - - if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(root.domElement, GUI.CLASS_TOO_TALL); - root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px'; - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.removeClass(root.domElement, GUI.CLASS_TOO_TALL); - root.__ul.style.height = 'auto'; - } - } - - if (root.__resize_handle) { - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.defer(function() { - root.__resize_handle.style.height = root.__ul.offsetHeight + 'px'; - }); - } - - if (root.__closeButton) { - root.__closeButton.style.width = root.width + 'px'; - } - }, - - onResizeDebounced: _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.debounce(function() { this.onResize(); }, 50), - - /** - * Mark objects for saving. The order of these objects cannot change as - * the GUI grows. When remembering new objects, append them to the end - * of the list. - * - * @param {...Object} objects - * @throws {Error} if not called on a top level GUI. - * @instance - * @ignore - */ - remember: function() { - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isUndefined(SAVE_DIALOGUE)) { - SAVE_DIALOGUE = new _dom_CenteredDiv__WEBPACK_IMPORTED_MODULE_10__.default(); - SAVE_DIALOGUE.domElement.innerHTML = _saveDialogue_html__WEBPACK_IMPORTED_MODULE_1__.default; - } - - if (this.parent) { - throw new Error('You can only call remember on a top level GUI.'); - } - - const _this = this; - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.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) { - // Set save row width - setWidth(this, this.width); - } - }, - - /** - * @returns {dat.gui.GUI} the topmost parent GUI of a nested GUI. - * @instance - */ - getRoot: function() { - let gui = this; - while (gui.parent) { - gui = gui.parent; - } - return gui; - }, - - /** - * @returns {Object} a JSON object representing the current state of - * this GUI as well as its remembered properties. - * @instance - */ - getSaveObject: function() { - const toReturn = this.load; - toReturn.closed = this.closed; - - // Am I remembering any values? - if (this.__rememberedObjects.length > 0) { - toReturn.preset = this.preset; - - if (!toReturn.remembered) { - toReturn.remembered = {}; - } - - toReturn.remembered[this.preset] = getCurrentPreset(this); - } - - toReturn.folders = {}; - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__folders, function(element, key) { - toReturn.folders[key] = element.getSaveObject(); - }); - - return toReturn; - }, - - save: function() { - if (!this.load.remembered) { - this.load.remembered = {}; - } - - this.load.remembered[this.preset] = getCurrentPreset(this); - markPresetModified(this, false); - this.saveToLocalStorageIfPossible(); - }, - - saveAs: function(presetName) { - if (!this.load.remembered) { - // Retain default values upon first save - this.load.remembered = {}; - this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true); - } - - this.load.remembered[presetName] = getCurrentPreset(this); - this.preset = presetName; - addPresetOption(this, presetName, true); - this.saveToLocalStorageIfPossible(); - }, - - revert: function(gui) { - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__controllers, function(controller) { - // Make revert work on Default. - if (!this.getRoot().load.remembered) { - controller.setValue(controller.initialValue); - } else { - recallSavedValue(gui || this.getRoot(), controller); - } - - // fire onFinishChange callback - if (controller.__onFinishChange) { - controller.__onFinishChange.call(controller, controller.getValue()); - } - }, this); - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__folders, function(folder) { - folder.revert(folder); - }); - - if (!gui) { - markPresetModified(this.getRoot(), false); - } - }, - - listen: function(controller) { - const init = this.__listening.length === 0; - this.__listening.push(controller); - if (init) { - updateDisplays(this.__listening); - } - }, - - updateDisplay: function() { - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__controllers, function(controller) { - controller.updateDisplay(); - }); - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(this.__folders, function(folder) { - folder.updateDisplay(); - }); - } - } -); - -/** - * Add a row to the end of the GUI or before another row. - * - * @param gui - * @param [newDom] If specified, inserts the dom content in the new row - * @param [liBefore] If specified, places the new row before another row - * - * @ignore - */ -function addRow(gui, newDom, liBefore) { - const 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_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'resize', gui.__resizeHandler); - - if (gui.saveToLocalStorageIfPossible) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'unload', gui.saveToLocalStorageIfPossible); - } -} - -function markPresetModified(gui, modified) { - const 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; - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.extend(controller, /** @lends Controller.prototype */ { - /** - * @param {Array|Object} options - * @return {Controller} - */ - options: function(options) { - if (arguments.length > 1) { - const nextSibling = controller.__li.nextElementSibling; - controller.remove(); - - return add( - gui, - controller.object, - controller.property, - { - before: nextSibling, - factoryArgs: [_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.toArray(arguments)] - } - ); - } - - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isArray(options) || _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isObject(options)) { - const nextSibling = controller.__li.nextElementSibling; - controller.remove(); - - return add( - gui, - controller.object, - controller.property, - { - before: nextSibling, - factoryArgs: [options] - } - ); - } - }, - - /** - * Sets the name of the controller. - * @param {string} name - * @return {Controller} - */ - name: function(name) { - controller.__li.firstElementChild.firstElementChild.innerHTML = name; - return controller; - }, - - /** - * Sets controller to listen for changes on its underlying object. - * @return {Controller} - */ - listen: function() { - controller.__gui.listen(controller); - return controller; - }, - - /** - * Removes the controller from its parent GUI. - * @return {Controller} - */ - remove: function() { - controller.__gui.remove(controller); - return controller; - } - }); - - // All sliders should be accompanied by a box. - if (controller instanceof _controllers_NumberControllerSlider__WEBPACK_IMPORTED_MODULE_7__.default) { - const box = new _controllers_NumberControllerBox__WEBPACK_IMPORTED_MODULE_6__.default(controller.object, controller.property, - { min: controller.__min, max: controller.__max, step: controller.__step }); - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function(method) { - const pc = controller[method]; - const pb = box[method]; - controller[method] = box[method] = function() { - const args = Array.prototype.slice.call(arguments); - pb.apply(box, args); - return pc.apply(controller, args); - }; - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, 'has-slider'); - controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild); - } else if (controller instanceof _controllers_NumberControllerBox__WEBPACK_IMPORTED_MODULE_6__.default) { - const r = function(returned) { - // Have we defined both boundaries? - if (_utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isNumber(controller.__min) && _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.isNumber(controller.__max)) { - // Well, then lets just replace this with a slider. - - // lets remember if the old controller had a specific name or was listening - const oldName = controller.__li.firstElementChild.firstElementChild.innerHTML; - const wasListening = controller.__gui.__listening.indexOf(controller) > -1; - - controller.remove(); - const 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 = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.compose(r, controller.min); - controller.max = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.compose(r, controller.max); - } else if (controller instanceof _controllers_BooleanController__WEBPACK_IMPORTED_MODULE_4__.default) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(li, 'click', function() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.fakeEvent(controller.__checkbox, 'click'); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(controller.__checkbox, 'click', function(e) { - e.stopPropagation(); // Prevents double-toggle - }); - } else if (controller instanceof _controllers_FunctionController__WEBPACK_IMPORTED_MODULE_5__.default) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(li, 'click', function() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.fakeEvent(controller.__button, 'click'); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(li, 'mouseover', function() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(controller.__button, 'hover'); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(li, 'mouseout', function() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.removeClass(controller.__button, 'hover'); - }); - } else if (controller instanceof _controllers_ColorController__WEBPACK_IMPORTED_MODULE_8__.default) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, 'color'); - controller.updateDisplay = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.compose(function(val) { - li.style.borderLeftColor = controller.__color.toString(); - return val; - }, controller.updateDisplay); - - controller.updateDisplay(); - } - - controller.setValue = _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.compose(function(val) { - if (gui.getRoot().__preset_select && controller.isModified()) { - markPresetModified(gui.getRoot(), true); - } - - return val; - }, controller.setValue); -} - -function recallSavedValue(gui, controller) { - // Find the topmost GUI, that's where remembered objects live. - const root = gui.getRoot(); - - // Does the object we're controlling match anything we've been told to - // remember? - const matchedIndex = root.__rememberedObjects.indexOf(controller.object); - - // Why yes, it does! - if (matchedIndex !== -1) { - // Let me fetch a map of controllers for thcommon.isObject. - let controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex]; - - // Ohp, I believe this is the first controller we've created for this - // object. Lets make the map fresh. - if (controllerMap === undefined) { - controllerMap = {}; - root.__rememberedObjectIndecesToControllers[matchedIndex] = - controllerMap; - } - - // Keep track of this controller - controllerMap[controller.property] = controller; - - // Okay, now have we saved any values for this controller? - if (root.load && root.load.remembered) { - const presetMap = root.load.remembered; - - // Which preset are we trying to load? - let preset; - - if (presetMap[gui.preset]) { - preset = presetMap[gui.preset]; - } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) { - // Uhh, you can have the default instead? - preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME]; - } else { - // Nada. - return; - } - - // Did the loaded object remember thcommon.isObject? && Did we remember this particular property? - if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) { - // We did remember something for this guy ... - const value = preset[matchedIndex][controller.property]; - - // And that's what it is. - 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}"`); - } - - let controller; - - if (params.color) { - controller = new _controllers_ColorController__WEBPACK_IMPORTED_MODULE_8__.default(object, property); - } else { - const factoryArgs = [object, property].concat(params.factoryArgs); - controller = _controllers_ControllerFactory__WEBPACK_IMPORTED_MODULE_2__.default.apply(gui, factoryArgs); - } - - if (params.before instanceof _controllers_Controller__WEBPACK_IMPORTED_MODULE_3__.default) { - params.before = params.before.__li; - } - - recallSavedValue(gui, controller); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(controller.domElement, 'c'); - - const name = document.createElement('span'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(name, 'property-name'); - name.innerHTML = controller.property; - - const container = document.createElement('div'); - container.appendChild(name); - container.appendChild(controller.domElement); - - const li = addRow(gui, container, params.before); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, GUI.CLASS_CONTROLLER_ROW); - if (controller instanceof _controllers_ColorController__WEBPACK_IMPORTED_MODULE_8__.default) { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, 'color'); - } else { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(li, typeof controller.getValue()); - } - - augmentController(gui, li, controller); - - gui.__controllers.push(controller); - - return controller; -} - -function getLocalStorageHash(gui, key) { - // TODO how does this deal with multiple GUI's? - return document.location.href + '.' + key; -} - -function addPresetOption(gui, name, setSelected) { - const 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) { - const div = gui.__save_row = document.createElement('li'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(gui.domElement, 'has-save'); - - gui.__ul.insertBefore(div, gui.__ul.firstChild); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(div, 'save-row'); - - const gears = document.createElement('span'); - gears.innerHTML = ' '; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(gears, 'button gears'); - - // TODO replace with FunctionController - const button = document.createElement('span'); - button.innerHTML = 'Save'; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button, 'button'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button, 'save'); - - const button2 = document.createElement('span'); - button2.innerHTML = 'New'; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button2, 'button'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button2, 'save-as'); - - const button3 = document.createElement('span'); - button3.innerHTML = 'Revert'; - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button3, 'button'); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(button3, 'revert'); - - const select = gui.__preset_select = document.createElement('select'); - - if (gui.load && gui.load.remembered) { - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(gui.load.remembered, function(value, key) { - addPresetOption(gui, key, key === gui.preset); - }); - } else { - addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false); - } - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(select, 'change', function() { - for (let 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) { - const explain = document.getElementById('dg-local-explain'); - const localStorageCheckBox = document.getElementById('dg-local-storage'); - const saveLocally = document.getElementById('dg-save-locally'); - - saveLocally.style.display = 'block'; - - if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') { - localStorageCheckBox.setAttribute('checked', 'checked'); - } - - showHideExplain(gui, explain); - - // TODO: Use a boolean controller, fool! - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(localStorageCheckBox, 'change', function() { - gui.useLocalStorage = !gui.useLocalStorage; - showHideExplain(gui, explain); - }); - } - - const newConstructorTextArea = document.getElementById('dg-new-constructor'); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(newConstructorTextArea, 'keydown', function(e) { - if (e.metaKey && (e.which === 67 || e.keyCode === 67)) { - SAVE_DIALOGUE.hide(); - } - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(gears, 'click', function() { - newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2); - SAVE_DIALOGUE.show(); - newConstructorTextArea.focus(); - newConstructorTextArea.select(); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(button, 'click', function() { - gui.save(); - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(button2, 'click', function() { - const presetName = prompt('Enter a new preset name.'); - if (presetName) { - gui.saveAs(presetName); - } - }); - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(button3, 'click', function() { - gui.revert(); - }); - - // div.appendChild(button2); -} - -function addResizeHandle(gui) { - let pmouseX; - - gui.__resize_handle = document.createElement('div'); - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.extend(gui.__resize_handle.style, { - - width: '6px', - marginLeft: '-3px', - height: '200px', - cursor: 'ew-resize', - position: 'absolute' - // border: '1px solid blue' - - }); - - function drag(e) { - e.preventDefault(); - - gui.width += pmouseX - e.clientX; - gui.onResize(); - pmouseX = e.clientX; - - return false; - } - - function dragStop() { - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.removeClass(gui.__closeButton, GUI.CLASS_DRAG); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'mousemove', drag); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.unbind(window, 'mouseup', dragStop); - } - - function dragStart(e) { - e.preventDefault(); - - pmouseX = e.clientX; - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.addClass(gui.__closeButton, GUI.CLASS_DRAG); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'mousemove', drag); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(window, 'mouseup', dragStop); - - return false; - } - - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(gui.__resize_handle, 'mousedown', dragStart); - _dom_dom__WEBPACK_IMPORTED_MODULE_11__.default.bind(gui.__closeButton, 'mousedown', dragStart); - - gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild); -} - -function setWidth(gui, w) { - gui.domElement.style.width = w + 'px'; - // Auto placed save-rows are position fixed, so we have to - // set the width manually if we want it to bleed to the edge - if (gui.__save_row && gui.autoPlace) { - gui.__save_row.style.width = w + 'px'; - } - if (gui.__closeButton) { - gui.__closeButton.style.width = w + 'px'; - } -} - -function getCurrentPreset(gui, useInitialValues) { - const toReturn = {}; - - // For each object I'm remembering - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(gui.__rememberedObjects, function(val, index) { - const savedValues = {}; - - // The controllers I've made for thcommon.isObject by property - const controllerMap = - gui.__rememberedObjectIndecesToControllers[index]; - - // Remember each value for each property - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(controllerMap, function(controller, property) { - savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue(); - }); - - // Save the values for thcommon.isObject - toReturn[index] = savedValues; - }); - - return toReturn; -} - -function setPresetSelectIndex(gui) { - for (let 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) { - _utils_requestAnimationFrame__WEBPACK_IMPORTED_MODULE_9__.default.call(window, function() { - updateDisplays(controllerArray); - }); - } - - _utils_common__WEBPACK_IMPORTED_MODULE_12__.default.each(controllerArray, function(c) { - c.updateDisplay(); - }); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GUI); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/gui/saveDialogue.html.js": -/*!***************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/gui/saveDialogue.html.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -const saveDialogContents = `
    - - Here's the new load parameter for your GUI's constructor: - - - -
    - - Automatically save - values to localStorage on exit. - -
    The values saved to localStorage will - override those passed to dat.GUI's constructor. This makes it - easier to work incrementally, but localStorage is fragile, - and your friends may not see the same values you do. - -
    - -
    - -
    `; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (saveDialogContents); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/utils/common.js": -/*!******************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/utils/common.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * 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 - */ - -const ARR_EACH = Array.prototype.forEach; -const ARR_SLICE = Array.prototype.slice; - -/** - * Band-aid methods for things that should be a lot easier in JavaScript. - * Implementation and structure inspired by underscore.js - * http://documentcloud.github.com/underscore/ - */ - -const Common = { - BREAK: {}, - - extend: function(target) { - this.each(ARR_SLICE.call(arguments, 1), function(obj) { - const 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(target) { - this.each(ARR_SLICE.call(arguments, 1), function(obj) { - const 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() { - const toCall = ARR_SLICE.call(arguments); - return function() { - let args = ARR_SLICE.call(arguments); - for (let i = toCall.length - 1; i >= 0; i--) { - args = [toCall[i].apply(this, args)]; - } - return args[0]; - }; - }, - - each: function(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) { // Is number but not NaN - let key; - let l; - for (key = 0, l = obj.length; key < l; key++) { - if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) { - return; - } - } - } else { - for (const key in obj) { - if (itr.call(scope, obj[key], key) === this.BREAK) { - return; - } - } - } - }, - - defer: function(fnc) { - setTimeout(fnc, 0); - }, - - // if the function is called repeatedly, wait until threshold passes until we execute the function - debounce: function(func, threshold, callImmediately) { - let timeout; - - return function() { - const obj = this; - const args = arguments; - function delayed() { - timeout = null; - if (!callImmediately) func.apply(obj, args); - } - - const callNow = callImmediately || !timeout; - - clearTimeout(timeout); - timeout = setTimeout(delayed, threshold); - - if (callNow) { - func.apply(obj, args); - } - }; - }, - - toArray: function(obj) { - if (obj.toArray) return obj.toArray(); - return ARR_SLICE.call(obj); - }, - - isUndefined: function(obj) { - return obj === undefined; - }, - - isNull: function(obj) { - return obj === null; - }, - - isNaN: function(obj) { - return isNaN(obj); - }, - - isArray: Array.isArray || function(obj) { - return obj.constructor === Array; - }, - - isObject: function(obj) { - return obj === Object(obj); - }, - - isNumber: function(obj) { - return obj === obj + 0; - }, - - isString: function(obj) { - return obj === obj + ''; - }, - - isBoolean: function(obj) { - return obj === false || obj === true; - }, - - isFunction: function(obj) { - return obj instanceof Function; - } - -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Common); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/utils/css.js": -/*!***************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/utils/css.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * 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 - */ - -const css = { - load: function(url, indoc) { - const doc = indoc || document; - const link = doc.createElement('link'); - link.type = 'text/css'; - link.rel = 'stylesheet'; - link.href = url; - doc.getElementsByTagName('head')[0].appendChild(link); - }, - - inject: function(cssContent, indoc) { - const doc = indoc || document; - const injected = document.createElement('style'); - injected.type = 'text/css'; - injected.innerHTML = cssContent; - const head = doc.getElementsByTagName('head')[0]; - try { - head.appendChild(injected); - } catch (e) { // Unable to inject CSS, probably because of a Content Security Policy - } - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (css); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/utils/requestAnimationFrame.js": -/*!*********************************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/utils/requestAnimationFrame.js ***! - \*********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * 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 requestAnimationFrame(callback) { - setTimeout(callback, 1000 / 60); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - window.msRequestAnimationFrame || - requestAnimationFrame); - - -/***/ }), - -/***/ "./node_modules/dat.gui/src/dat/gui/style.scss": -/*!*****************************************************!*\ - !*** ./node_modules/dat.gui/src/dat/gui/style.scss ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); -/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _css_loader_dist_cjs_js_sass_loader_dist_cjs_js_style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../css-loader/dist/cjs.js!../../../../sass-loader/dist/cjs.js!./style.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/dat.gui/src/dat/gui/style.scss"); - - - -var options = {}; - -options.insert = "head"; -options.singleton = false; - -var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_sass_loader_dist_cjs_js_style_scss__WEBPACK_IMPORTED_MODULE_1__.default, options); - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_sass_loader_dist_cjs_js_style_scss__WEBPACK_IMPORTED_MODULE_1__.default.locals || {}); - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": -/*!****************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! - \****************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - - - -var isOldIE = function isOldIE() { - var memo; - return function memorize() { - if (typeof memo === 'undefined') { - // Test for IE <= 9 as proposed by Browserhacks - // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 - // Tests for existence of standard globals is to allow style-loader - // to operate correctly into non-standard environments - // @see https://github.com/webpack-contrib/style-loader/issues/177 - memo = Boolean(window && document && document.all && !window.atob); - } - - return memo; - }; -}(); - -var getTarget = function getTarget() { - var memo = {}; - return function memorize(target) { - if (typeof memo[target] === 'undefined') { - var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself - - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch (e) { - // istanbul ignore next - styleTarget = null; - } - } - - memo[target] = styleTarget; - } - - return memo[target]; - }; -}(); - -var stylesInDom = []; - -function getIndexByIdentifier(identifier) { - var result = -1; - - for (var i = 0; i < stylesInDom.length; i++) { - if (stylesInDom[i].identifier === identifier) { - result = i; - break; - } - } - - return result; -} - -function modulesToDom(list, options) { - var idCountMap = {}; - var identifiers = []; - - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var id = options.base ? item[0] + options.base : item[0]; - var count = idCountMap[id] || 0; - var identifier = "".concat(id, " ").concat(count); - idCountMap[id] = count + 1; - var index = getIndexByIdentifier(identifier); - var obj = { - css: item[1], - media: item[2], - sourceMap: item[3] - }; - - if (index !== -1) { - stylesInDom[index].references++; - stylesInDom[index].updater(obj); - } else { - stylesInDom.push({ - identifier: identifier, - updater: addStyle(obj, options), - references: 1 - }); - } - - identifiers.push(identifier); - } - - return identifiers; -} - -function insertStyleElement(options) { - var style = document.createElement('style'); - var attributes = options.attributes || {}; - - if (typeof attributes.nonce === 'undefined') { - var nonce = true ? __webpack_require__.nc : 0; - - if (nonce) { - attributes.nonce = nonce; - } - } - - Object.keys(attributes).forEach(function (key) { - style.setAttribute(key, attributes[key]); - }); - - if (typeof options.insert === 'function') { - options.insert(style); - } else { - var target = getTarget(options.insert || 'head'); - - if (!target) { - throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); - } - - target.appendChild(style); - } - - return style; -} - -function removeStyleElement(style) { - // istanbul ignore if - if (style.parentNode === null) { - return false; - } - - style.parentNode.removeChild(style); -} -/* istanbul ignore next */ - - -var replaceText = function replaceText() { - var textStore = []; - return function replace(index, replacement) { - textStore[index] = replacement; - return textStore.filter(Boolean).join('\n'); - }; -}(); - -function applyToSingletonTag(style, index, remove, obj) { - var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE - - /* istanbul ignore if */ - - if (style.styleSheet) { - style.styleSheet.cssText = replaceText(index, css); - } else { - var cssNode = document.createTextNode(css); - var childNodes = style.childNodes; - - if (childNodes[index]) { - style.removeChild(childNodes[index]); - } - - if (childNodes.length) { - style.insertBefore(cssNode, childNodes[index]); - } else { - style.appendChild(cssNode); - } - } -} - -function applyToTag(style, options, obj) { - var css = obj.css; - var media = obj.media; - var sourceMap = obj.sourceMap; - - if (media) { - style.setAttribute('media', media); - } else { - style.removeAttribute('media'); - } - - if (sourceMap && typeof btoa !== 'undefined') { - css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); - } // For old IE - - /* istanbul ignore if */ - - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - while (style.firstChild) { - style.removeChild(style.firstChild); - } - - style.appendChild(document.createTextNode(css)); - } -} - -var singleton = null; -var singletonCounter = 0; - -function addStyle(obj, options) { - var style; - var update; - var remove; - - if (options.singleton) { - var styleIndex = singletonCounter++; - style = singleton || (singleton = insertStyleElement(options)); - update = applyToSingletonTag.bind(null, style, styleIndex, false); - remove = applyToSingletonTag.bind(null, style, styleIndex, true); - } else { - style = insertStyleElement(options); - update = applyToTag.bind(null, style, options); - - remove = function remove() { - removeStyleElement(style); - }; - } - - update(obj); - return function updateStyle(newObj) { - if (newObj) { - if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { - return; - } - - update(obj = newObj); - } else { - remove(); - } - }; -} - -module.exports = function (list, options) { - options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of - - - - - -
    -
    - -
    - - - - - - - - \ No newline at end of file diff --git a/dist/manifest.json b/dist/manifest.json deleted file mode 100644 index aa69704..0000000 --- a/dist/manifest.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "short_name": "CAD Tool", - "name": "CAD Tool using Three.js", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "icon-192.png", - "type": "image/png", - "sizes": "192x192", - "purpose": "maskable any" - }, - { - "src": "icon-512.png", - "type": "image/png", - "sizes": "512x512", - "purpose": "maskable any" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/dist/robots.txt b/dist/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/dist/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/dist/solver.js b/dist/solver.js deleted file mode 100644 index 30678c6..0000000 --- a/dist/solver.js +++ /dev/null @@ -1,2460 +0,0 @@ - - -// The Module object: Our interface to the outside world. We import -// and export values on it. There are various ways Module can be used: -// 1. Not defined. We create it here -// 2. A function parameter, function(Module) { ..generated code.. } -// 3. pre-run appended it, var Module = {}; ..generated code.. -// 4. External script tag defines var Module. -// We need to check if Module already exists (e.g. case 3 above). -// Substitution will be replaced with actual code on later stage of the build, -// this way Closure Compiler will not mangle it (e.g. case 4. above). -// Note that if you want to run closure, and also to use Module -// after the generated code, you will need to define var Module = {}; -// before the code. Then that object will be used in the code, and you -// can continue to use Module afterwards as well. -var Module = typeof Module !== 'undefined' ? Module : {}; - -// --pre-jses are emitted after the Module integration code, so that they can -// refer to Module (if they choose; they can also define Module) -// {{PRE_JSES}} - -// Sometimes an existing Module object exists with properties -// meant to overwrite the default module functionality. Here -// we collect those properties and reapply _after_ we configure -// the current environment's defaults to avoid having to be so -// defensive during initialization. -var moduleOverrides = {}; -var key; -for (key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key]; - } -} - -var arguments_ = []; -var thisProgram = './this.program'; -var quit_ = function(status, toThrow) { - throw toThrow; -}; - -// Determine the runtime environment we are in. You can customize this by -// setting the ENVIRONMENT setting at compile time (see settings.js). - -var ENVIRONMENT_IS_WEB = false; -var ENVIRONMENT_IS_WORKER = false; -var ENVIRONMENT_IS_NODE = false; -var ENVIRONMENT_IS_SHELL = false; -ENVIRONMENT_IS_WEB = typeof window === 'object'; -ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; -// N.b. Electron.js environment is simultaneously a NODE-environment, but -// also a web environment. -ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string'; -ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; - -if (Module['ENVIRONMENT']) { - throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)'); -} - -// `/` should be present at the end if `scriptDirectory` is not empty -var scriptDirectory = ''; -function locateFile(path) { - if (Module['locateFile']) { - return Module['locateFile'](path, scriptDirectory); - } - return scriptDirectory + path; -} - -// Hooks that are implemented differently in different runtime environments. -var read_, - readAsync, - readBinary, - setWindowTitle; - -var nodeFS; -var nodePath; - -if (ENVIRONMENT_IS_NODE) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = require('path').dirname(scriptDirectory) + '/'; - } else { - scriptDirectory = __dirname + '/'; - } - -// include: node_shell_read.js - - -read_ = function shell_read(filename, binary) { - if (!nodeFS) nodeFS = require('fs'); - if (!nodePath) nodePath = require('path'); - filename = nodePath['normalize'](filename); - return nodeFS['readFileSync'](filename, binary ? null : 'utf8'); -}; - -readBinary = function readBinary(filename) { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret); - } - assert(ret.buffer); - return ret; -}; - -// end include: node_shell_read.js - if (process['argv'].length > 1) { - thisProgram = process['argv'][1].replace(/\\/g, '/'); - } - - arguments_ = process['argv'].slice(2); - - if (typeof module !== 'undefined') { - module['exports'] = Module; - } - - process['on']('uncaughtException', function(ex) { - // suppress ExitStatus exceptions from showing an error - if (!(ex instanceof ExitStatus)) { - throw ex; - } - }); - - process['on']('unhandledRejection', abort); - - quit_ = function(status) { - process['exit'](status); - }; - - Module['inspect'] = function () { return '[Emscripten Module object]'; }; - -} else -if (ENVIRONMENT_IS_SHELL) { - - if (typeof read != 'undefined') { - read_ = function shell_read(f) { - return read(f); - }; - } - - readBinary = function readBinary(f) { - var data; - if (typeof readbuffer === 'function') { - return new Uint8Array(readbuffer(f)); - } - data = read(f, 'binary'); - assert(typeof data === 'object'); - return data; - }; - - if (typeof scriptArgs != 'undefined') { - arguments_ = scriptArgs; - } else if (typeof arguments != 'undefined') { - arguments_ = arguments; - } - - if (typeof quit === 'function') { - quit_ = function(status) { - quit(status); - }; - } - - if (typeof print !== 'undefined') { - // Prefer to use print/printErr where they exist, as they usually work better. - if (typeof console === 'undefined') console = /** @type{!Console} */({}); - console.log = /** @type{!function(this:Console, ...*): undefined} */ (print); - console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr !== 'undefined' ? printErr : print); - } - -} else - -// Note that this includes Node.js workers when relevant (pthreads is enabled). -// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and -// ENVIRONMENT_IS_NODE. -if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled - scriptDirectory = self.location.href; - } else if (typeof document !== 'undefined' && document.currentScript) { // web - scriptDirectory = document.currentScript.src; - } - // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. - // otherwise, slice off the final part of the url to find the script directory. - // if scriptDirectory does not contain a slash, lastIndexOf will return -1, - // and scriptDirectory will correctly be replaced with an empty string. - if (scriptDirectory.indexOf('blob:') !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1); - } else { - scriptDirectory = ''; - } - - // Differentiate the Web Worker from the Node Worker case, as reading must - // be done differently. - { - -// include: web_or_worker_shell_read.js - - - read_ = function(url) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - xhr.send(null); - return xhr.responseText; - }; - - if (ENVIRONMENT_IS_WORKER) { - readBinary = function(url) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - xhr.responseType = 'arraybuffer'; - xhr.send(null); - return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); - }; - } - - readAsync = function(url, onload, onerror) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.responseType = 'arraybuffer'; - xhr.onload = function() { - if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 - onload(xhr.response); - return; - } - onerror(); - }; - xhr.onerror = onerror; - xhr.send(null); - }; - -// end include: web_or_worker_shell_read.js - } - - setWindowTitle = function(title) { document.title = title }; -} else -{ - throw new Error('environment detection error'); -} - -// Set up the out() and err() hooks, which are how we can print to stdout or -// stderr, respectively. -var out = Module['print'] || console.log.bind(console); -var err = Module['printErr'] || console.warn.bind(console); - -// Merge back in the overrides -for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key]; - } -} -// Free the object hierarchy contained in the overrides, this lets the GC -// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. -moduleOverrides = null; - -// Emit code to handle expected values on the Module object. This applies Module.x -// to the proper local x. This has two benefits: first, we only emit it if it is -// expected to arrive, and second, by using a local everywhere else that can be -// minified. - -if (Module['arguments']) arguments_ = Module['arguments']; -if (!Object.getOwnPropertyDescriptor(Module, 'arguments')) { - Object.defineProperty(Module, 'arguments', { - configurable: true, - get: function() { - abort('Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} - -if (Module['thisProgram']) thisProgram = Module['thisProgram']; -if (!Object.getOwnPropertyDescriptor(Module, 'thisProgram')) { - Object.defineProperty(Module, 'thisProgram', { - configurable: true, - get: function() { - abort('Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} - -if (Module['quit']) quit_ = Module['quit']; -if (!Object.getOwnPropertyDescriptor(Module, 'quit')) { - Object.defineProperty(Module, 'quit', { - configurable: true, - get: function() { - abort('Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} - -// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message -// Assertions on removed incoming Module JS APIs. -assert(typeof Module['memoryInitializerPrefixURL'] === 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); -assert(typeof Module['pthreadMainPrefixURL'] === 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); -assert(typeof Module['cdInitializerPrefixURL'] === 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); -assert(typeof Module['filePackagePrefixURL'] === 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); -assert(typeof Module['read'] === 'undefined', 'Module.read option was removed (modify read_ in JS)'); -assert(typeof Module['readAsync'] === 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); -assert(typeof Module['readBinary'] === 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); -assert(typeof Module['setWindowTitle'] === 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)'); -assert(typeof Module['TOTAL_MEMORY'] === 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); - -if (!Object.getOwnPropertyDescriptor(Module, 'read')) { - Object.defineProperty(Module, 'read', { - configurable: true, - get: function() { - abort('Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} - -if (!Object.getOwnPropertyDescriptor(Module, 'readAsync')) { - Object.defineProperty(Module, 'readAsync', { - configurable: true, - get: function() { - abort('Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} - -if (!Object.getOwnPropertyDescriptor(Module, 'readBinary')) { - Object.defineProperty(Module, 'readBinary', { - configurable: true, - get: function() { - abort('Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} - -if (!Object.getOwnPropertyDescriptor(Module, 'setWindowTitle')) { - Object.defineProperty(Module, 'setWindowTitle', { - configurable: true, - get: function() { - abort('Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} -var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; -var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; -var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; -var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; - - - - -var STACK_ALIGN = 16; - -function alignMemory(size, factor) { - if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default - return Math.ceil(size / factor) * factor; -} - -function getNativeTypeSize(type) { - switch (type) { - case 'i1': case 'i8': return 1; - case 'i16': return 2; - case 'i32': return 4; - case 'i64': return 8; - case 'float': return 4; - case 'double': return 8; - default: { - if (type[type.length-1] === '*') { - return 4; // A pointer - } else if (type[0] === 'i') { - var bits = Number(type.substr(1)); - assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type); - return bits / 8; - } else { - return 0; - } - } - } -} - -function warnOnce(text) { - if (!warnOnce.shown) warnOnce.shown = {}; - if (!warnOnce.shown[text]) { - warnOnce.shown[text] = 1; - err(text); - } -} - -// include: runtime_functions.js - - -// Wraps a JS function as a wasm function with a given signature. -function convertJsFunctionToWasm(func, sig) { - - // If the type reflection proposal is available, use the new - // "WebAssembly.Function" constructor. - // Otherwise, construct a minimal wasm module importing the JS function and - // re-exporting it. - if (typeof WebAssembly.Function === "function") { - var typeNames = { - 'i': 'i32', - 'j': 'i64', - 'f': 'f32', - 'd': 'f64' - }; - var type = { - parameters: [], - results: sig[0] == 'v' ? [] : [typeNames[sig[0]]] - }; - for (var i = 1; i < sig.length; ++i) { - type.parameters.push(typeNames[sig[i]]); - } - return new WebAssembly.Function(type, func); - } - - // The module is static, with the exception of the type section, which is - // generated based on the signature passed in. - var typeSection = [ - 0x01, // id: section, - 0x00, // length: 0 (placeholder) - 0x01, // count: 1 - 0x60, // form: func - ]; - var sigRet = sig.slice(0, 1); - var sigParam = sig.slice(1); - var typeCodes = { - 'i': 0x7f, // i32 - 'j': 0x7e, // i64 - 'f': 0x7d, // f32 - 'd': 0x7c, // f64 - }; - - // Parameters, length + signatures - typeSection.push(sigParam.length); - for (var i = 0; i < sigParam.length; ++i) { - typeSection.push(typeCodes[sigParam[i]]); - } - - // Return values, length + signatures - // With no multi-return in MVP, either 0 (void) or 1 (anything else) - if (sigRet == 'v') { - typeSection.push(0x00); - } else { - typeSection = typeSection.concat([0x01, typeCodes[sigRet]]); - } - - // Write the overall length of the type section back into the section header - // (excepting the 2 bytes for the section id and length) - typeSection[1] = typeSection.length - 2; - - // Rest of the module is static - var bytes = new Uint8Array([ - 0x00, 0x61, 0x73, 0x6d, // magic ("\0asm") - 0x01, 0x00, 0x00, 0x00, // version: 1 - ].concat(typeSection, [ - 0x02, 0x07, // import section - // (import "e" "f" (func 0 (type 0))) - 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00, - 0x07, 0x05, // export section - // (export "f" (func 0 (type 0))) - 0x01, 0x01, 0x66, 0x00, 0x00, - ])); - - // We can compile this wasm module synchronously because it is very small. - // This accepts an import (at "e.f"), that it reroutes to an export (at "f") - var module = new WebAssembly.Module(bytes); - var instance = new WebAssembly.Instance(module, { - 'e': { - 'f': func - } - }); - var wrappedFunc = instance.exports['f']; - return wrappedFunc; -} - -var freeTableIndexes = []; - -// Weak map of functions in the table to their indexes, created on first use. -var functionsInTableMap; - -function getEmptyTableSlot() { - // Reuse a free index if there is one, otherwise grow. - if (freeTableIndexes.length) { - return freeTableIndexes.pop(); - } - // Grow the table - try { - wasmTable.grow(1); - } catch (err) { - if (!(err instanceof RangeError)) { - throw err; - } - throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.'; - } - return wasmTable.length - 1; -} - -// Add a wasm function to the table. -function addFunctionWasm(func, sig) { - // Check if the function is already in the table, to ensure each function - // gets a unique index. First, create the map if this is the first use. - if (!functionsInTableMap) { - functionsInTableMap = new WeakMap(); - for (var i = 0; i < wasmTable.length; i++) { - var item = wasmTable.get(i); - // Ignore null values. - if (item) { - functionsInTableMap.set(item, i); - } - } - } - if (functionsInTableMap.has(func)) { - return functionsInTableMap.get(func); - } - - // It's not in the table, add it now. - - var ret = getEmptyTableSlot(); - - // Set the new value. - try { - // Attempting to call this with JS function will cause of table.set() to fail - wasmTable.set(ret, func); - } catch (err) { - if (!(err instanceof TypeError)) { - throw err; - } - assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction: ' + func); - var wrapped = convertJsFunctionToWasm(func, sig); - wasmTable.set(ret, wrapped); - } - - functionsInTableMap.set(func, ret); - - return ret; -} - -function removeFunction(index) { - functionsInTableMap.delete(wasmTable.get(index)); - freeTableIndexes.push(index); -} - -// 'sig' parameter is required for the llvm backend but only when func is not -// already a WebAssembly function. -function addFunction(func, sig) { - assert(typeof func !== 'undefined'); - - return addFunctionWasm(func, sig); -} - -// end include: runtime_functions.js -// include: runtime_debug.js - - -// end include: runtime_debug.js -function makeBigInt(low, high, unsigned) { - return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0)); -} - -var tempRet0 = 0; - -var setTempRet0 = function(value) { - tempRet0 = value; -}; - -var getTempRet0 = function() { - return tempRet0; -}; - -function getCompilerSetting(name) { - throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work'; -} - - - -// === Preamble library stuff === - -// Documentation for the public APIs defined in this file must be updated in: -// site/source/docs/api_reference/preamble.js.rst -// A prebuilt local version of the documentation is available at: -// site/build/text/docs/api_reference/preamble.js.txt -// You can also build docs locally as HTML or other formats in site/ -// An online HTML version (which may be of a different version of Emscripten) -// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html - -var wasmBinary; -if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; -if (!Object.getOwnPropertyDescriptor(Module, 'wasmBinary')) { - Object.defineProperty(Module, 'wasmBinary', { - configurable: true, - get: function() { - abort('Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} -var noExitRuntime = Module['noExitRuntime'] || true; -if (!Object.getOwnPropertyDescriptor(Module, 'noExitRuntime')) { - Object.defineProperty(Module, 'noExitRuntime', { - configurable: true, - get: function() { - abort('Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} - -if (typeof WebAssembly !== 'object') { - abort('no native wasm support detected'); -} - -// include: runtime_safe_heap.js - - -// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking. -// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties) - -/** @param {number} ptr - @param {number} value - @param {string} type - @param {number|boolean=} noSafe */ -function setValue(ptr, value, type, noSafe) { - type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit - switch(type) { - case 'i1': HEAP8[((ptr)>>0)] = value; break; - case 'i8': HEAP8[((ptr)>>0)] = value; break; - case 'i16': HEAP16[((ptr)>>1)] = value; break; - case 'i32': HEAP32[((ptr)>>2)] = value; break; - case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)] = tempI64[0],HEAP32[(((ptr)+(4))>>2)] = tempI64[1]); break; - case 'float': HEAPF32[((ptr)>>2)] = value; break; - case 'double': HEAPF64[((ptr)>>3)] = value; break; - default: abort('invalid type for setValue: ' + type); - } -} - -/** @param {number} ptr - @param {string} type - @param {number|boolean=} noSafe */ -function getValue(ptr, type, noSafe) { - type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit - switch(type) { - case 'i1': return HEAP8[((ptr)>>0)]; - case 'i8': return HEAP8[((ptr)>>0)]; - case 'i16': return HEAP16[((ptr)>>1)]; - case 'i32': return HEAP32[((ptr)>>2)]; - case 'i64': return HEAP32[((ptr)>>2)]; - case 'float': return HEAPF32[((ptr)>>2)]; - case 'double': return HEAPF64[((ptr)>>3)]; - default: abort('invalid type for getValue: ' + type); - } - return null; -} - -// end include: runtime_safe_heap.js -// Wasm globals - -var wasmMemory; - -//======================================== -// Runtime essentials -//======================================== - -// whether we are quitting the application. no code should run after this. -// set in exit() and abort() -var ABORT = false; - -// set by exit() and abort(). Passed to 'onExit' handler. -// NOTE: This is also used as the process return code code in shell environments -// but only when noExitRuntime is false. -var EXITSTATUS; - -/** @type {function(*, string=)} */ -function assert(condition, text) { - if (!condition) { - abort('Assertion failed: ' + text); - } -} - -// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) -function getCFunc(ident) { - var func = Module['_' + ident]; // closure exported function - assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); - return func; -} - -// C calling interface. -/** @param {string|null=} returnType - @param {Array=} argTypes - @param {Arguments|Array=} args - @param {Object=} opts */ -function ccall(ident, returnType, argTypes, args, opts) { - // For fast lookup of conversion functions - var toC = { - 'string': function(str) { - var ret = 0; - if (str !== null && str !== undefined && str !== 0) { // null string - // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' - var len = (str.length << 2) + 1; - ret = stackAlloc(len); - stringToUTF8(str, ret, len); - } - return ret; - }, - 'array': function(arr) { - var ret = stackAlloc(arr.length); - writeArrayToMemory(arr, ret); - return ret; - } - }; - - function convertReturnValue(ret) { - if (returnType === 'string') return UTF8ToString(ret); - if (returnType === 'boolean') return Boolean(ret); - return ret; - } - - var func = getCFunc(ident); - var cArgs = []; - var stack = 0; - assert(returnType !== 'array', 'Return type should not be "array".'); - if (args) { - for (var i = 0; i < args.length; i++) { - var converter = toC[argTypes[i]]; - if (converter) { - if (stack === 0) stack = stackSave(); - cArgs[i] = converter(args[i]); - } else { - cArgs[i] = args[i]; - } - } - } - var ret = func.apply(null, cArgs); - - ret = convertReturnValue(ret); - if (stack !== 0) stackRestore(stack); - return ret; -} - -/** @param {string=} returnType - @param {Array=} argTypes - @param {Object=} opts */ -function cwrap(ident, returnType, argTypes, opts) { - return function() { - return ccall(ident, returnType, argTypes, arguments, opts); - } -} - -// We used to include malloc/free by default in the past. Show a helpful error in -// builds with assertions. - -var ALLOC_NORMAL = 0; // Tries to use _malloc() -var ALLOC_STACK = 1; // Lives for the duration of the current function call - -// allocate(): This is for internal use. You can use it yourself as well, but the interface -// is a little tricky (see docs right below). The reason is that it is optimized -// for multiple syntaxes to save space in generated code. So you should -// normally not use allocate(), and instead allocate memory using _malloc(), -// initialize it with setValue(), and so forth. -// @slab: An array of data. -// @allocator: How to allocate memory, see ALLOC_* -/** @type {function((Uint8Array|Array), number)} */ -function allocate(slab, allocator) { - var ret; - assert(typeof allocator === 'number', 'allocate no longer takes a type argument') - assert(typeof slab !== 'number', 'allocate no longer takes a number as arg0') - - if (allocator == ALLOC_STACK) { - ret = stackAlloc(slab.length); - } else { - ret = _malloc(slab.length); - } - - if (slab.subarray || slab.slice) { - HEAPU8.set(/** @type {!Uint8Array} */(slab), ret); - } else { - HEAPU8.set(new Uint8Array(slab), ret); - } - return ret; -} - -// include: runtime_strings.js - - -// runtime_strings.js: Strings related runtime functions that are part of both MINIMAL_RUNTIME and regular runtime. - -// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns -// a copy of that string as a Javascript String object. - -var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; - -/** - * @param {number} idx - * @param {number=} maxBytesToRead - * @return {string} - */ -function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. - // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. - // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity) - while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; - - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { - return UTF8Decoder.decode(heap.subarray(idx, endPtr)); - } else { - var str = ''; - // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that - while (idx < endPtr) { - // For UTF8 byte structure, see: - // http://en.wikipedia.org/wiki/UTF-8#Description - // https://www.ietf.org/rfc/rfc2279.txt - // https://tools.ietf.org/html/rfc3629 - var u0 = heap[idx++]; - if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } - var u1 = heap[idx++] & 63; - if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } - var u2 = heap[idx++] & 63; - if ((u0 & 0xF0) == 0xE0) { - u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; - } else { - if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte 0x' + u0.toString(16) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); - u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heap[idx++] & 63); - } - - if (u0 < 0x10000) { - str += String.fromCharCode(u0); - } else { - var ch = u0 - 0x10000; - str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); - } - } - } - return str; -} - -// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a -// copy of that string as a Javascript String object. -// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit -// this parameter to scan the string until the first \0 byte. If maxBytesToRead is -// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the -// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will -// not produce a string of exact length [ptr, ptr+maxBytesToRead[) -// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may -// throw JS JIT optimizations off, so it is worth to consider consistently using one -// style or the other. -/** - * @param {number} ptr - * @param {number=} maxBytesToRead - * @return {string} - */ -function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; -} - -// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', -// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. -// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// heap: the array to copy to. Each index in this array is assumed to be one 8-byte element. -// outIdx: The starting offset in the array to begin the copying. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. -// This count should include the null terminator, -// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. -// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. - return 0; - - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 - var u = str.charCodeAt(i); // possibly a lead surrogate - if (u >= 0xD800 && u <= 0xDFFF) { - var u1 = str.charCodeAt(++i); - u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); - } - if (u <= 0x7F) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u; - } else if (u <= 0x7FF) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 0xC0 | (u >> 6); - heap[outIdx++] = 0x80 | (u & 63); - } else if (u <= 0xFFFF) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 0xE0 | (u >> 12); - heap[outIdx++] = 0x80 | ((u >> 6) & 63); - heap[outIdx++] = 0x80 | (u & 63); - } else { - if (outIdx + 3 >= endIdx) break; - if (u >= 0x200000) warnOnce('Invalid Unicode code point 0x' + u.toString(16) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x1FFFFF).'); - heap[outIdx++] = 0xF0 | (u >> 18); - heap[outIdx++] = 0x80 | ((u >> 12) & 63); - heap[outIdx++] = 0x80 | ((u >> 6) & 63); - heap[outIdx++] = 0x80 | (u & 63); - } - } - // Null-terminate the pointer to the buffer. - heap[outIdx] = 0; - return outIdx - startIdx; -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. -// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF8(str, outPtr, maxBytesToWrite) { - assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); - return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite); -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. -function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var u = str.charCodeAt(i); // possibly a lead surrogate - if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); - if (u <= 0x7F) ++len; - else if (u <= 0x7FF) len += 2; - else if (u <= 0xFFFF) len += 3; - else len += 4; - } - return len; -} - -// end include: runtime_strings.js -// include: runtime_strings_extra.js - - -// runtime_strings_extra.js: Strings related runtime functions that are available only in regular runtime. - -// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns -// a copy of that string as a Javascript String object. - -function AsciiToString(ptr) { - var str = ''; - while (1) { - var ch = HEAPU8[((ptr++)>>0)]; - if (!ch) return str; - str += String.fromCharCode(ch); - } -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. - -function stringToAscii(str, outPtr) { - return writeAsciiToMemory(str, outPtr, false); -} - -// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns -// a copy of that string as a Javascript String object. - -var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; - -function UTF16ToString(ptr, maxBytesToRead) { - assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!'); - var endPtr = ptr; - // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. - // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. - var idx = endPtr >> 1; - var maxIdx = idx + maxBytesToRead / 2; - // If maxBytesToRead is not passed explicitly, it will be undefined, and this - // will always evaluate to true. This saves on code size. - while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx; - endPtr = idx << 1; - - if (endPtr - ptr > 32 && UTF16Decoder) { - return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); - } else { - var str = ''; - - // If maxBytesToRead is not passed explicitly, it will be undefined, and the for-loop's condition - // will always evaluate to true. The loop is then terminated on the first null char. - for (var i = 0; !(i >= maxBytesToRead / 2); ++i) { - var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; - if (codeUnit == 0) break; - // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. - str += String.fromCharCode(codeUnit); - } - - return str; - } -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. -// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// outPtr: Byte address in Emscripten HEAP where to write the string to. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null -// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. -// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF16(str, outPtr, maxBytesToWrite) { - assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!'); - assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); - // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. - if (maxBytesToWrite === undefined) { - maxBytesToWrite = 0x7FFFFFFF; - } - if (maxBytesToWrite < 2) return 0; - maxBytesToWrite -= 2; // Null terminator. - var startPtr = outPtr; - var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; - for (var i = 0; i < numCharsToWrite; ++i) { - // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. - var codeUnit = str.charCodeAt(i); // possibly a lead surrogate - HEAP16[((outPtr)>>1)] = codeUnit; - outPtr += 2; - } - // Null-terminate the pointer to the HEAP. - HEAP16[((outPtr)>>1)] = 0; - return outPtr - startPtr; -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. - -function lengthBytesUTF16(str) { - return str.length*2; -} - -function UTF32ToString(ptr, maxBytesToRead) { - assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!'); - var i = 0; - - var str = ''; - // If maxBytesToRead is not passed explicitly, it will be undefined, and this - // will always evaluate to true. This saves on code size. - while (!(i >= maxBytesToRead / 4)) { - var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; - if (utf32 == 0) break; - ++i; - // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - if (utf32 >= 0x10000) { - var ch = utf32 - 0x10000; - str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); - } else { - str += String.fromCharCode(utf32); - } - } - return str; -} - -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. -// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. -// Parameters: -// str: the Javascript string to copy. -// outPtr: Byte address in Emscripten HEAP where to write the string to. -// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null -// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. -// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. -// Returns the number of bytes written, EXCLUDING the null terminator. - -function stringToUTF32(str, outPtr, maxBytesToWrite) { - assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!'); - assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); - // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. - if (maxBytesToWrite === undefined) { - maxBytesToWrite = 0x7FFFFFFF; - } - if (maxBytesToWrite < 4) return 0; - var startPtr = outPtr; - var endPtr = startPtr + maxBytesToWrite - 4; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var codeUnit = str.charCodeAt(i); // possibly a lead surrogate - if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { - var trailSurrogate = str.charCodeAt(++i); - codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); - } - HEAP32[((outPtr)>>2)] = codeUnit; - outPtr += 4; - if (outPtr + 4 > endPtr) break; - } - // Null-terminate the pointer to the HEAP. - HEAP32[((outPtr)>>2)] = 0; - return outPtr - startPtr; -} - -// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. - -function lengthBytesUTF32(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. - // See http://unicode.org/faq/utf_bom.html#utf16-3 - var codeUnit = str.charCodeAt(i); - if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate. - len += 4; - } - - return len; -} - -// Allocate heap space for a JS string, and write it there. -// It is the responsibility of the caller to free() that memory. -function allocateUTF8(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = _malloc(size); - if (ret) stringToUTF8Array(str, HEAP8, ret, size); - return ret; -} - -// Allocate stack space for a JS string, and write it there. -function allocateUTF8OnStack(str) { - var size = lengthBytesUTF8(str) + 1; - var ret = stackAlloc(size); - stringToUTF8Array(str, HEAP8, ret, size); - return ret; -} - -// Deprecated: This function should not be called because it is unsafe and does not provide -// a maximum length limit of how many bytes it is allowed to write. Prefer calling the -// function stringToUTF8Array() instead, which takes in a maximum length that can be used -// to be secure from out of bounds writes. -/** @deprecated - @param {boolean=} dontAddNull */ -function writeStringToMemory(string, buffer, dontAddNull) { - warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!'); - - var /** @type {number} */ lastChar, /** @type {number} */ end; - if (dontAddNull) { - // stringToUTF8Array always appends null. If we don't want to do that, remember the - // character that existed at the location where the null will be placed, and restore - // that after the write (below). - end = buffer + lengthBytesUTF8(string); - lastChar = HEAP8[end]; - } - stringToUTF8(string, buffer, Infinity); - if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character. -} - -function writeArrayToMemory(array, buffer) { - assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)') - HEAP8.set(array, buffer); -} - -/** @param {boolean=} dontAddNull */ -function writeAsciiToMemory(str, buffer, dontAddNull) { - for (var i = 0; i < str.length; ++i) { - assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff); - HEAP8[((buffer++)>>0)] = str.charCodeAt(i); - } - // Null-terminate the pointer to the HEAP. - if (!dontAddNull) HEAP8[((buffer)>>0)] = 0; -} - -// end include: runtime_strings_extra.js -// Memory management - -function alignUp(x, multiple) { - if (x % multiple > 0) { - x += multiple - (x % multiple); - } - return x; -} - -var HEAP, -/** @type {ArrayBuffer} */ - buffer, -/** @type {Int8Array} */ - HEAP8, -/** @type {Uint8Array} */ - HEAPU8, -/** @type {Int16Array} */ - HEAP16, -/** @type {Uint16Array} */ - HEAPU16, -/** @type {Int32Array} */ - HEAP32, -/** @type {Uint32Array} */ - HEAPU32, -/** @type {Float32Array} */ - HEAPF32, -/** @type {Float64Array} */ - HEAPF64; - -function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module['HEAP8'] = HEAP8 = new Int8Array(buf); - Module['HEAP16'] = HEAP16 = new Int16Array(buf); - Module['HEAP32'] = HEAP32 = new Int32Array(buf); - Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf); - Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf); - Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf); - Module['HEAPF32'] = HEAPF32 = new Float32Array(buf); - Module['HEAPF64'] = HEAPF64 = new Float64Array(buf); -} - -var TOTAL_STACK = 5242880; -if (Module['TOTAL_STACK']) assert(TOTAL_STACK === Module['TOTAL_STACK'], 'the stack size can no longer be determined at runtime') - -var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 134217728; -if (!Object.getOwnPropertyDescriptor(Module, 'INITIAL_MEMORY')) { - Object.defineProperty(Module, 'INITIAL_MEMORY', { - configurable: true, - get: function() { - abort('Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') - } - }); -} - -assert(INITIAL_MEMORY >= TOTAL_STACK, 'INITIAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')'); - -// check for full engine support (use string 'subarray' to avoid closure compiler confusion) -assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined, - 'JS engine does not provide full typed array support'); - -// If memory is defined in wasm, the user can't provide it. -assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -s IMPORTED_MEMORY to define wasmMemory externally'); -assert(INITIAL_MEMORY == 134217728, 'Detected runtime INITIAL_MEMORY setting. Use -s IMPORTED_MEMORY to define wasmMemory dynamically'); - -// include: runtime_init_table.js -// In regular non-RELOCATABLE mode the table is exported -// from the wasm module and this will be assigned once -// the exports are available. -var wasmTable; - -// end include: runtime_init_table.js -// include: runtime_stack_check.js - - -// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. -function writeStackCookie() { - var max = _emscripten_stack_get_end(); - assert((max & 3) == 0); - // The stack grows downwards - HEAPU32[(max >> 2)+1] = 0x2135467; - HEAPU32[(max >> 2)+2] = 0x89BACDFE; - // Also test the global address 0 for integrity. - HEAP32[0] = 0x63736d65; /* 'emsc' */ -} - -function checkStackCookie() { - if (ABORT) return; - var max = _emscripten_stack_get_end(); - var cookie1 = HEAPU32[(max >> 2)+1]; - var cookie2 = HEAPU32[(max >> 2)+2]; - if (cookie1 != 0x2135467 || cookie2 != 0x89BACDFE) { - abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x' + cookie2.toString(16) + ' ' + cookie1.toString(16)); - } - // Also test the global address 0 for integrity. - if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); -} - -// end include: runtime_stack_check.js -// include: runtime_assertions.js - - -// Endianness check (note: assumes compiler arch was little-endian) -(function() { - var h16 = new Int16Array(1); - var h8 = new Int8Array(h16.buffer); - h16[0] = 0x6373; - if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian!'; -})(); - -function abortFnPtrError(ptr, sig) { - abort("Invalid function pointer " + ptr + " called with signature '" + sig + "'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this). Build with ASSERTIONS=2 for more info."); -} - -// end include: runtime_assertions.js -var __ATPRERUN__ = []; // functions called before the runtime is initialized -var __ATINIT__ = []; // functions called during startup -var __ATMAIN__ = []; // functions called when main() is to be run -var __ATEXIT__ = []; // functions called during shutdown -var __ATPOSTRUN__ = []; // functions called after the main() is called - -var runtimeInitialized = false; -var runtimeExited = false; - -__ATINIT__.push({ func: function() { ___wasm_call_ctors() } }); - -function preRun() { - - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - while (Module['preRun'].length) { - addOnPreRun(Module['preRun'].shift()); - } - } - - callRuntimeCallbacks(__ATPRERUN__); -} - -function initRuntime() { - checkStackCookie(); - assert(!runtimeInitialized); - runtimeInitialized = true; - - - callRuntimeCallbacks(__ATINIT__); -} - -function preMain() { - checkStackCookie(); - - callRuntimeCallbacks(__ATMAIN__); -} - -function exitRuntime() { - checkStackCookie(); - runtimeExited = true; -} - -function postRun() { - checkStackCookie(); - - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length) { - addOnPostRun(Module['postRun'].shift()); - } - } - - callRuntimeCallbacks(__ATPOSTRUN__); -} - -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb); -} - -function addOnInit(cb) { - __ATINIT__.unshift(cb); -} - -function addOnPreMain(cb) { - __ATMAIN__.unshift(cb); -} - -function addOnExit(cb) { -} - -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb); -} - -// include: runtime_math.js - - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc - -assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); -assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); -assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); -assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); - -// end include: runtime_math.js -// A counter of dependencies for calling run(). If we need to -// do asynchronous work before running, increment this and -// decrement it. Incrementing must happen in a place like -// Module.preRun (used by emcc to add file preloading). -// Note that you can add dependencies in preRun, even though -// it happens right before run - run will be postponed until -// the dependencies are met. -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled -var runDependencyTracking = {}; - -function getUniqueRunDependency(id) { - var orig = id; - while (1) { - if (!runDependencyTracking[id]) return id; - id = orig + Math.random(); - } -} - -function addRunDependency(id) { - runDependencies++; - - if (Module['monitorRunDependencies']) { - Module['monitorRunDependencies'](runDependencies); - } - - if (id) { - assert(!runDependencyTracking[id]); - runDependencyTracking[id] = 1; - if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { - // Check for missing dependencies every few seconds - runDependencyWatcher = setInterval(function() { - if (ABORT) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - return; - } - var shown = false; - for (var dep in runDependencyTracking) { - if (!shown) { - shown = true; - err('still waiting on run dependencies:'); - } - err('dependency: ' + dep); - } - if (shown) { - err('(end of list)'); - } - }, 10000); - } - } else { - err('warning: run dependency added without ID'); - } -} - -function removeRunDependency(id) { - runDependencies--; - - if (Module['monitorRunDependencies']) { - Module['monitorRunDependencies'](runDependencies); - } - - if (id) { - assert(runDependencyTracking[id]); - delete runDependencyTracking[id]; - } else { - err('warning: run dependency removed without ID'); - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } - } -} - -Module["preloadedImages"] = {}; // maps url to image data -Module["preloadedAudios"] = {}; // maps url to audio data - -/** @param {string|number=} what */ -function abort(what) { - if (Module['onAbort']) { - Module['onAbort'](what); - } - - what += ''; - err(what); - - ABORT = true; - EXITSTATUS = 1; - - var output = 'abort(' + what + ') at ' + stackTrace(); - what = output; - - // Use a wasm runtime error, because a JS error might be seen as a foreign - // exception, which means we'd run destructors on it. We need the error to - // simply make the program stop. - var e = new WebAssembly.RuntimeError(what); - - // Throw the error whether or not MODULARIZE is set because abort is used - // in code paths apart from instantiation where an exception is expected - // to be thrown when abort is called. - throw e; -} - -// {{MEM_INITIALIZER}} - -// include: memoryprofiler.js - - -// end include: memoryprofiler.js -// show errors on likely calls to FS when it was not included -var FS = { - error: function() { - abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -s FORCE_FILESYSTEM=1'); - }, - init: function() { FS.error() }, - createDataFile: function() { FS.error() }, - createPreloadedFile: function() { FS.error() }, - createLazyFile: function() { FS.error() }, - open: function() { FS.error() }, - mkdev: function() { FS.error() }, - registerDevice: function() { FS.error() }, - analyzePath: function() { FS.error() }, - loadFilesFromDB: function() { FS.error() }, - - ErrnoError: function ErrnoError() { FS.error() }, -}; -Module['FS_createDataFile'] = FS.createDataFile; -Module['FS_createPreloadedFile'] = FS.createPreloadedFile; - -// include: URIUtils.js - - -function hasPrefix(str, prefix) { - return String.prototype.startsWith ? - str.startsWith(prefix) : - str.indexOf(prefix) === 0; -} - -// Prefix of data URIs emitted by SINGLE_FILE and related options. -var dataURIPrefix = 'data:application/octet-stream;base64,'; - -// Indicates whether filename is a base64 data URI. -function isDataURI(filename) { - return hasPrefix(filename, dataURIPrefix); -} - -var fileURIPrefix = "file://"; - -// Indicates whether filename is delivered via file protocol (as opposed to http/https) -function isFileURI(filename) { - return hasPrefix(filename, fileURIPrefix); -} - -// end include: URIUtils.js -function createExportWrapper(name, fixedasm) { - return function() { - var displayName = name; - var asm = fixedasm; - if (!fixedasm) { - asm = Module['asm']; - } - assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization'); - assert(!runtimeExited, 'native function `' + displayName + '` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); - if (!asm[name]) { - assert(asm[name], 'exported native function `' + displayName + '` not found'); - } - return asm[name].apply(null, arguments); - }; -} - -var wasmBinaryFile = 'solver.wasm'; -if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile); -} - -function getBinary(file) { - try { - if (file == wasmBinaryFile && wasmBinary) { - return new Uint8Array(wasmBinary); - } - if (readBinary) { - return readBinary(file); - } else { - throw "both async and sync fetching of the wasm failed"; - } - } - catch (err) { - abort(err); - } -} - -function getBinaryPromise() { - // If we don't have the binary yet, try to to load it asynchronously. - // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. - // See https://github.com/github/fetch/pull/92#issuecomment-140665932 - // Cordova or Electron apps are typically loaded from a file:// url. - // So use fetch if it is available and the url is not a file, otherwise fall back to XHR. - if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { - if (typeof fetch === 'function' - && !isFileURI(wasmBinaryFile) - ) { - return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) { - if (!response['ok']) { - throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; - } - return response['arrayBuffer'](); - }).catch(function () { - return getBinary(wasmBinaryFile); - }); - } - else { - if (readAsync) { - // fetch is not available or url is file => try XHR (readAsync uses XHR internally) - return new Promise(function(resolve, reject) { - readAsync(wasmBinaryFile, function(response) { resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))) }, reject) - }); - } - } - } - - // Otherwise, getBinary should be able to get it synchronously - return Promise.resolve().then(function() { return getBinary(wasmBinaryFile); }); -} - -// Create the wasm instance. -// Receives the wasm imports, returns the exports. -function createWasm() { - // prepare imports - var info = { - 'env': asmLibraryArg, - 'wasi_snapshot_preview1': asmLibraryArg, - }; - // Load the wasm module and create an instance of using native support in the JS engine. - // handle a generated wasm instance, receiving its exports and - // performing other necessary setup - /** @param {WebAssembly.Module=} module*/ - function receiveInstance(instance, module) { - var exports = instance.exports; - - Module['asm'] = exports; - - wasmMemory = Module['asm']['memory']; - assert(wasmMemory, "memory not found in wasm exports"); - // This assertion doesn't hold when emscripten is run in --post-link - // mode. - // TODO(sbc): Read INITIAL_MEMORY out of the wasm file in post-link mode. - //assert(wasmMemory.buffer.byteLength === 134217728); - updateGlobalBufferAndViews(wasmMemory.buffer); - - wasmTable = Module['asm']['__indirect_function_table']; - assert(wasmTable, "table not found in wasm exports"); - - removeRunDependency('wasm-instantiate'); - } - // we can't run yet (except in a pthread, where we have a custom sync instantiator) - addRunDependency('wasm-instantiate'); - - // Async compilation can be confusing when an error on the page overwrites Module - // (for example, if the order of elements is wrong, and the one defining Module is - // later), so we save Module and check it later. - var trueModule = Module; - function receiveInstantiatedSource(output) { - // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance. - // receiveInstance() will swap in the exports (to Module.asm) so they can be called - assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); - trueModule = null; - // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. - // When the regression is fixed, can restore the above USE_PTHREADS-enabled path. - receiveInstance(output['instance']); - } - - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function(binary) { - return WebAssembly.instantiate(binary, info); - }).then(receiver, function(reason) { - err('failed to asynchronously prepare wasm: ' + reason); - - // Warn on some common problems. - if (isFileURI(wasmBinaryFile)) { - err('warning: Loading from a file URI (' + wasmBinaryFile + ') is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing'); - } - abort(reason); - }); - } - - // Prefer streaming instantiation if available. - function instantiateAsync() { - if (!wasmBinary && - typeof WebAssembly.instantiateStreaming === 'function' && - !isDataURI(wasmBinaryFile) && - // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. - !isFileURI(wasmBinaryFile) && - typeof fetch === 'function') { - return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) { - var result = WebAssembly.instantiateStreaming(response, info); - return result.then(receiveInstantiatedSource, function(reason) { - // We expect the most common failure cause to be a bad MIME type for the binary, - // in which case falling back to ArrayBuffer instantiation should work. - err('wasm streaming compile failed: ' + reason); - err('falling back to ArrayBuffer instantiation'); - return instantiateArrayBuffer(receiveInstantiatedSource); - }); - }); - } else { - return instantiateArrayBuffer(receiveInstantiatedSource); - } - } - - // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback - // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel - // to any other async startup actions they are performing. - if (Module['instantiateWasm']) { - try { - var exports = Module['instantiateWasm'](info, receiveInstance); - return exports; - } catch(e) { - err('Module.instantiateWasm callback failed with error: ' + e); - return false; - } - } - - instantiateAsync(); - return {}; // no exports yet; we'll fill them in later -} - -// Globals used by JS i64 conversions (see makeSetValue) -var tempDouble; -var tempI64; - -// === Body === - -var ASM_CONSTS = { - -}; - - - - - - - function callRuntimeCallbacks(callbacks) { - while(callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == 'function') { - callback(Module); // Pass the module as the first argument. - continue; - } - var func = callback.func; - if (typeof func === 'number') { - if (callback.arg === undefined) { - wasmTable.get(func)(); - } else { - wasmTable.get(func)(callback.arg); - } - } else { - func(callback.arg === undefined ? null : callback.arg); - } - } - } - - function demangle(func) { - warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); - return func; - } - - function demangleAll(text) { - var regex = - /\b_Z[\w\d_]+/g; - return text.replace(regex, - function(x) { - var y = demangle(x); - return x === y ? x : (y + ' [' + x + ']'); - }); - } - - function jsStackTrace() { - var error = new Error(); - if (!error.stack) { - // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, - // so try that as a special-case. - try { - throw new Error(); - } catch(e) { - error = e; - } - if (!error.stack) { - return '(no stack trace available)'; - } - } - return error.stack.toString(); - } - - function stackTrace() { - var js = jsStackTrace(); - if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace'](); - return demangleAll(js); - } - - var ExceptionInfoAttrs={DESTRUCTOR_OFFSET:0,REFCOUNT_OFFSET:4,TYPE_OFFSET:8,CAUGHT_OFFSET:12,RETHROWN_OFFSET:13,SIZE:16}; - function ___cxa_allocate_exception(size) { - // Thrown object is prepended by exception metadata block - return _malloc(size + ExceptionInfoAttrs.SIZE) + ExceptionInfoAttrs.SIZE; - } - - function _atexit(func, arg) { - } - function ___cxa_atexit(a0,a1 - ) { - return _atexit(a0,a1); - } - - function ExceptionInfo(excPtr) { - this.excPtr = excPtr; - this.ptr = excPtr - ExceptionInfoAttrs.SIZE; - - this.set_type = function(type) { - HEAP32[(((this.ptr)+(ExceptionInfoAttrs.TYPE_OFFSET))>>2)] = type; - }; - - this.get_type = function() { - return HEAP32[(((this.ptr)+(ExceptionInfoAttrs.TYPE_OFFSET))>>2)]; - }; - - this.set_destructor = function(destructor) { - HEAP32[(((this.ptr)+(ExceptionInfoAttrs.DESTRUCTOR_OFFSET))>>2)] = destructor; - }; - - this.get_destructor = function() { - return HEAP32[(((this.ptr)+(ExceptionInfoAttrs.DESTRUCTOR_OFFSET))>>2)]; - }; - - this.set_refcount = function(refcount) { - HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)] = refcount; - }; - - this.set_caught = function (caught) { - caught = caught ? 1 : 0; - HEAP8[(((this.ptr)+(ExceptionInfoAttrs.CAUGHT_OFFSET))>>0)] = caught; - }; - - this.get_caught = function () { - return HEAP8[(((this.ptr)+(ExceptionInfoAttrs.CAUGHT_OFFSET))>>0)] != 0; - }; - - this.set_rethrown = function (rethrown) { - rethrown = rethrown ? 1 : 0; - HEAP8[(((this.ptr)+(ExceptionInfoAttrs.RETHROWN_OFFSET))>>0)] = rethrown; - }; - - this.get_rethrown = function () { - return HEAP8[(((this.ptr)+(ExceptionInfoAttrs.RETHROWN_OFFSET))>>0)] != 0; - }; - - // Initialize native structure fields. Should be called once after allocated. - this.init = function(type, destructor) { - this.set_type(type); - this.set_destructor(destructor); - this.set_refcount(0); - this.set_caught(false); - this.set_rethrown(false); - } - - this.add_ref = function() { - var value = HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)]; - HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)] = value + 1; - }; - - // Returns true if last reference released. - this.release_ref = function() { - var prev = HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)]; - HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)] = prev - 1; - assert(prev > 0); - return prev === 1; - }; - } - - var exceptionLast=0; - - var uncaughtExceptionCount=0; - function ___cxa_throw(ptr, type, destructor) { - var info = new ExceptionInfo(ptr); - // Initialize ExceptionInfo content after it was allocated in __cxa_allocate_exception. - info.init(type, destructor); - exceptionLast = ptr; - uncaughtExceptionCount++; - throw ptr + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."; - } - - function _abort() { - abort(); - } - - function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num); - } - - function _emscripten_get_heap_size() { - return HEAPU8.length; - } - - function abortOnCannotGrowMemory(requestedSize) { - abort('Cannot enlarge memory arrays to size ' + requestedSize + ' bytes (OOM). Either (1) compile with -s INITIAL_MEMORY=X with X higher than the current value ' + HEAP8.length + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 '); - } - function _emscripten_resize_heap(requestedSize) { - abortOnCannotGrowMemory(requestedSize); - } - - function _exit(status) { - // void _exit(int status); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html - exit(status); - } - - var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream, curr) { - var buffer = SYSCALLS.buffers[stream]; - assert(buffer); - if (curr === 0 || curr === 10) { - (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0)); - buffer.length = 0; - } else { - buffer.push(curr); - } - },varargs:undefined,get:function() { - assert(SYSCALLS.varargs != undefined); - SYSCALLS.varargs += 4; - var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)]; - return ret; - },getStr:function(ptr) { - var ret = UTF8ToString(ptr); - return ret; - },get64:function(low, high) { - if (low >= 0) assert(high === 0); - else assert(high === -1); - return low; - }}; - function _fd_close(fd) { - abort('it should not be possible to operate on streams when !SYSCALLS_REQUIRE_FILESYSTEM'); - return 0; - } - - function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - abort('it should not be possible to operate on streams when !SYSCALLS_REQUIRE_FILESYSTEM'); - } - - function flush_NO_FILESYSTEM() { - // flush anything remaining in the buffers during shutdown - if (typeof _fflush !== 'undefined') _fflush(0); - var buffers = SYSCALLS.buffers; - if (buffers[1].length) SYSCALLS.printChar(1, 10); - if (buffers[2].length) SYSCALLS.printChar(2, 10); - } - function _fd_write(fd, iov, iovcnt, pnum) { - // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0 - var num = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[(((iov)+(i*8))>>2)]; - var len = HEAP32[(((iov)+(i*8 + 4))>>2)]; - for (var j = 0; j < len; j++) { - SYSCALLS.printChar(fd, HEAPU8[ptr+j]); - } - num += len; - } - HEAP32[((pnum)>>2)] = num - return 0; - } - - function _setTempRet0($i) { - setTempRet0(($i) | 0); - } -var ASSERTIONS = true; - - - -/** @type {function(string, boolean=, number=)} */ -function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); - if (dontAddNull) u8array.length = numBytesWritten; - return u8array; -} - -function intArrayToString(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - var chr = array[i]; - if (chr > 0xFF) { - if (ASSERTIONS) { - assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); - } - chr &= 0xFF; - } - ret.push(String.fromCharCode(chr)); - } - return ret.join(''); -} - - -var asmLibraryArg = { - "__cxa_allocate_exception": ___cxa_allocate_exception, - "__cxa_atexit": ___cxa_atexit, - "__cxa_throw": ___cxa_throw, - "abort": _abort, - "emscripten_memcpy_big": _emscripten_memcpy_big, - "emscripten_resize_heap": _emscripten_resize_heap, - "exit": _exit, - "fd_close": _fd_close, - "fd_seek": _fd_seek, - "fd_write": _fd_write, - "setTempRet0": _setTempRet0 -}; -var asm = createWasm(); -/** @type {function(...*):?} */ -var ___wasm_call_ctors = Module["___wasm_call_ctors"] = createExportWrapper("__wasm_call_ctors"); - -/** @type {function(...*):?} */ -var _solver = Module["_solver"] = createExportWrapper("solver"); - -/** @type {function(...*):?} */ -var _main = Module["_main"] = createExportWrapper("main"); - -/** @type {function(...*):?} */ -var _malloc = Module["_malloc"] = createExportWrapper("malloc"); - -/** @type {function(...*):?} */ -var _free = Module["_free"] = createExportWrapper("free"); - -/** @type {function(...*):?} */ -var ___errno_location = Module["___errno_location"] = createExportWrapper("__errno_location"); - -/** @type {function(...*):?} */ -var _fflush = Module["_fflush"] = createExportWrapper("fflush"); - -/** @type {function(...*):?} */ -var stackSave = Module["stackSave"] = createExportWrapper("stackSave"); - -/** @type {function(...*):?} */ -var stackRestore = Module["stackRestore"] = createExportWrapper("stackRestore"); - -/** @type {function(...*):?} */ -var stackAlloc = Module["stackAlloc"] = createExportWrapper("stackAlloc"); - -/** @type {function(...*):?} */ -var _emscripten_stack_init = Module["_emscripten_stack_init"] = function() { - return (_emscripten_stack_init = Module["_emscripten_stack_init"] = Module["asm"]["emscripten_stack_init"]).apply(null, arguments); -}; - -/** @type {function(...*):?} */ -var _emscripten_stack_get_free = Module["_emscripten_stack_get_free"] = function() { - return (_emscripten_stack_get_free = Module["_emscripten_stack_get_free"] = Module["asm"]["emscripten_stack_get_free"]).apply(null, arguments); -}; - -/** @type {function(...*):?} */ -var _emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = function() { - return (_emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments); -}; - -/** @type {function(...*):?} */ -var dynCall_jiji = Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji"); - - - - - -// === Auto-generated postamble setup entry stuff === - -if (!Object.getOwnPropertyDescriptor(Module, "intArrayFromString")) Module["intArrayFromString"] = function() { abort("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "intArrayToString")) Module["intArrayToString"] = function() { abort("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ccall")) Module["ccall"] = function() { abort("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "cwrap")) Module["cwrap"] = function() { abort("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setValue")) Module["setValue"] = function() { abort("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getValue")) Module["getValue"] = function() { abort("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "allocate")) Module["allocate"] = function() { abort("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UTF8ArrayToString")) Module["UTF8ArrayToString"] = function() { abort("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UTF8ToString")) Module["UTF8ToString"] = function() { abort("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8Array")) Module["stringToUTF8Array"] = function() { abort("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8")) Module["stringToUTF8"] = function() { abort("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF8")) Module["lengthBytesUTF8"] = function() { abort("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnPreRun")) Module["addOnPreRun"] = function() { abort("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnInit")) Module["addOnInit"] = function() { abort("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnPreMain")) Module["addOnPreMain"] = function() { abort("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnExit")) Module["addOnExit"] = function() { abort("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addOnPostRun")) Module["addOnPostRun"] = function() { abort("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeStringToMemory")) Module["writeStringToMemory"] = function() { abort("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeArrayToMemory")) Module["writeArrayToMemory"] = function() { abort("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeAsciiToMemory")) Module["writeAsciiToMemory"] = function() { abort("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addRunDependency")) Module["addRunDependency"] = function() { abort("'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; -if (!Object.getOwnPropertyDescriptor(Module, "removeRunDependency")) Module["removeRunDependency"] = function() { abort("'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS_createFolder")) Module["FS_createFolder"] = function() { abort("'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS_createPath")) Module["FS_createPath"] = function() { abort("'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS_createDataFile")) Module["FS_createDataFile"] = function() { abort("'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS_createPreloadedFile")) Module["FS_createPreloadedFile"] = function() { abort("'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS_createLazyFile")) Module["FS_createLazyFile"] = function() { abort("'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS_createLink")) Module["FS_createLink"] = function() { abort("'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS_createDevice")) Module["FS_createDevice"] = function() { abort("'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS_unlink")) Module["FS_unlink"] = function() { abort("'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; -if (!Object.getOwnPropertyDescriptor(Module, "getLEB")) Module["getLEB"] = function() { abort("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getFunctionTables")) Module["getFunctionTables"] = function() { abort("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "alignFunctionTables")) Module["alignFunctionTables"] = function() { abort("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerFunctions")) Module["registerFunctions"] = function() { abort("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "addFunction")) Module["addFunction"] = function() { abort("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "removeFunction")) Module["removeFunction"] = function() { abort("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper")) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "prettyPrint")) Module["prettyPrint"] = function() { abort("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "makeBigInt")) Module["makeBigInt"] = function() { abort("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "dynCall")) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getCompilerSetting")) Module["getCompilerSetting"] = function() { abort("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "print")) Module["print"] = function() { abort("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "printErr")) Module["printErr"] = function() { abort("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getTempRet0")) Module["getTempRet0"] = function() { abort("'getTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setTempRet0")) Module["setTempRet0"] = function() { abort("'setTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "callMain")) Module["callMain"] = function() { abort("'callMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "abort")) Module["abort"] = function() { abort("'abort' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToNewUTF8")) Module["stringToNewUTF8"] = function() { abort("'stringToNewUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setFileTime")) Module["setFileTime"] = function() { abort("'setFileTime' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "abortOnCannotGrowMemory")) Module["abortOnCannotGrowMemory"] = function() { abort("'abortOnCannotGrowMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscripten_realloc_buffer")) Module["emscripten_realloc_buffer"] = function() { abort("'emscripten_realloc_buffer' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ENV")) Module["ENV"] = function() { abort("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_CODES")) Module["ERRNO_CODES"] = function() { abort("'ERRNO_CODES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_MESSAGES")) Module["ERRNO_MESSAGES"] = function() { abort("'ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setErrNo")) Module["setErrNo"] = function() { abort("'setErrNo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "inetPton4")) Module["inetPton4"] = function() { abort("'inetPton4' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "inetNtop4")) Module["inetNtop4"] = function() { abort("'inetNtop4' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "inetPton6")) Module["inetPton6"] = function() { abort("'inetPton6' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "inetNtop6")) Module["inetNtop6"] = function() { abort("'inetNtop6' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "readSockaddr")) Module["readSockaddr"] = function() { abort("'readSockaddr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeSockaddr")) Module["writeSockaddr"] = function() { abort("'writeSockaddr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "DNS")) Module["DNS"] = function() { abort("'DNS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getHostByName")) Module["getHostByName"] = function() { abort("'getHostByName' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GAI_ERRNO_MESSAGES")) Module["GAI_ERRNO_MESSAGES"] = function() { abort("'GAI_ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "Protocols")) Module["Protocols"] = function() { abort("'Protocols' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "Sockets")) Module["Sockets"] = function() { abort("'Sockets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getRandomDevice")) Module["getRandomDevice"] = function() { abort("'getRandomDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "traverseStack")) Module["traverseStack"] = function() { abort("'traverseStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UNWIND_CACHE")) Module["UNWIND_CACHE"] = function() { abort("'UNWIND_CACHE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "withBuiltinMalloc")) Module["withBuiltinMalloc"] = function() { abort("'withBuiltinMalloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgsArray")) Module["readAsmConstArgsArray"] = function() { abort("'readAsmConstArgsArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgs")) Module["readAsmConstArgs"] = function() { abort("'readAsmConstArgs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "mainThreadEM_ASM")) Module["mainThreadEM_ASM"] = function() { abort("'mainThreadEM_ASM' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "jstoi_q")) Module["jstoi_q"] = function() { abort("'jstoi_q' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "jstoi_s")) Module["jstoi_s"] = function() { abort("'jstoi_s' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getExecutableName")) Module["getExecutableName"] = function() { abort("'getExecutableName' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "listenOnce")) Module["listenOnce"] = function() { abort("'listenOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "autoResumeAudioContext")) Module["autoResumeAudioContext"] = function() { abort("'autoResumeAudioContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "dynCallLegacy")) Module["dynCallLegacy"] = function() { abort("'dynCallLegacy' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getDynCaller")) Module["getDynCaller"] = function() { abort("'getDynCaller' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "dynCall")) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "callRuntimeCallbacks")) Module["callRuntimeCallbacks"] = function() { abort("'callRuntimeCallbacks' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "reallyNegative")) Module["reallyNegative"] = function() { abort("'reallyNegative' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "unSign")) Module["unSign"] = function() { abort("'unSign' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "reSign")) Module["reSign"] = function() { abort("'reSign' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "formatString")) Module["formatString"] = function() { abort("'formatString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "PATH")) Module["PATH"] = function() { abort("'PATH' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "PATH_FS")) Module["PATH_FS"] = function() { abort("'PATH_FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SYSCALLS")) Module["SYSCALLS"] = function() { abort("'SYSCALLS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "syscallMmap2")) Module["syscallMmap2"] = function() { abort("'syscallMmap2' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "syscallMunmap")) Module["syscallMunmap"] = function() { abort("'syscallMunmap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getSocketFromFD")) Module["getSocketFromFD"] = function() { abort("'getSocketFromFD' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getSocketAddress")) Module["getSocketAddress"] = function() { abort("'getSocketAddress' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "JSEvents")) Module["JSEvents"] = function() { abort("'JSEvents' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerKeyEventCallback")) Module["registerKeyEventCallback"] = function() { abort("'registerKeyEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "specialHTMLTargets")) Module["specialHTMLTargets"] = function() { abort("'specialHTMLTargets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "maybeCStringToJsString")) Module["maybeCStringToJsString"] = function() { abort("'maybeCStringToJsString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "findEventTarget")) Module["findEventTarget"] = function() { abort("'findEventTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "findCanvasEventTarget")) Module["findCanvasEventTarget"] = function() { abort("'findCanvasEventTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getBoundingClientRect")) Module["getBoundingClientRect"] = function() { abort("'getBoundingClientRect' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillMouseEventData")) Module["fillMouseEventData"] = function() { abort("'fillMouseEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerMouseEventCallback")) Module["registerMouseEventCallback"] = function() { abort("'registerMouseEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerWheelEventCallback")) Module["registerWheelEventCallback"] = function() { abort("'registerWheelEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerUiEventCallback")) Module["registerUiEventCallback"] = function() { abort("'registerUiEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerFocusEventCallback")) Module["registerFocusEventCallback"] = function() { abort("'registerFocusEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillDeviceOrientationEventData")) Module["fillDeviceOrientationEventData"] = function() { abort("'fillDeviceOrientationEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerDeviceOrientationEventCallback")) Module["registerDeviceOrientationEventCallback"] = function() { abort("'registerDeviceOrientationEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillDeviceMotionEventData")) Module["fillDeviceMotionEventData"] = function() { abort("'fillDeviceMotionEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerDeviceMotionEventCallback")) Module["registerDeviceMotionEventCallback"] = function() { abort("'registerDeviceMotionEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "screenOrientation")) Module["screenOrientation"] = function() { abort("'screenOrientation' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillOrientationChangeEventData")) Module["fillOrientationChangeEventData"] = function() { abort("'fillOrientationChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerOrientationChangeEventCallback")) Module["registerOrientationChangeEventCallback"] = function() { abort("'registerOrientationChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillFullscreenChangeEventData")) Module["fillFullscreenChangeEventData"] = function() { abort("'fillFullscreenChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerFullscreenChangeEventCallback")) Module["registerFullscreenChangeEventCallback"] = function() { abort("'registerFullscreenChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerRestoreOldStyle")) Module["registerRestoreOldStyle"] = function() { abort("'registerRestoreOldStyle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "hideEverythingExceptGivenElement")) Module["hideEverythingExceptGivenElement"] = function() { abort("'hideEverythingExceptGivenElement' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "restoreHiddenElements")) Module["restoreHiddenElements"] = function() { abort("'restoreHiddenElements' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setLetterbox")) Module["setLetterbox"] = function() { abort("'setLetterbox' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "currentFullscreenStrategy")) Module["currentFullscreenStrategy"] = function() { abort("'currentFullscreenStrategy' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "restoreOldWindowedStyle")) Module["restoreOldWindowedStyle"] = function() { abort("'restoreOldWindowedStyle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "softFullscreenResizeWebGLRenderTarget")) Module["softFullscreenResizeWebGLRenderTarget"] = function() { abort("'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "doRequestFullscreen")) Module["doRequestFullscreen"] = function() { abort("'doRequestFullscreen' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillPointerlockChangeEventData")) Module["fillPointerlockChangeEventData"] = function() { abort("'fillPointerlockChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerPointerlockChangeEventCallback")) Module["registerPointerlockChangeEventCallback"] = function() { abort("'registerPointerlockChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerPointerlockErrorEventCallback")) Module["registerPointerlockErrorEventCallback"] = function() { abort("'registerPointerlockErrorEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "requestPointerLock")) Module["requestPointerLock"] = function() { abort("'requestPointerLock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillVisibilityChangeEventData")) Module["fillVisibilityChangeEventData"] = function() { abort("'fillVisibilityChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerVisibilityChangeEventCallback")) Module["registerVisibilityChangeEventCallback"] = function() { abort("'registerVisibilityChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerTouchEventCallback")) Module["registerTouchEventCallback"] = function() { abort("'registerTouchEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillGamepadEventData")) Module["fillGamepadEventData"] = function() { abort("'fillGamepadEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerGamepadEventCallback")) Module["registerGamepadEventCallback"] = function() { abort("'registerGamepadEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerBeforeUnloadEventCallback")) Module["registerBeforeUnloadEventCallback"] = function() { abort("'registerBeforeUnloadEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "fillBatteryEventData")) Module["fillBatteryEventData"] = function() { abort("'fillBatteryEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "battery")) Module["battery"] = function() { abort("'battery' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "registerBatteryEventCallback")) Module["registerBatteryEventCallback"] = function() { abort("'registerBatteryEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setCanvasElementSize")) Module["setCanvasElementSize"] = function() { abort("'setCanvasElementSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getCanvasElementSize")) Module["getCanvasElementSize"] = function() { abort("'getCanvasElementSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "polyfillSetImmediate")) Module["polyfillSetImmediate"] = function() { abort("'polyfillSetImmediate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "demangle")) Module["demangle"] = function() { abort("'demangle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "demangleAll")) Module["demangleAll"] = function() { abort("'demangleAll' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "jsStackTrace")) Module["jsStackTrace"] = function() { abort("'jsStackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getEnvStrings")) Module["getEnvStrings"] = function() { abort("'getEnvStrings' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "checkWasiClock")) Module["checkWasiClock"] = function() { abort("'checkWasiClock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "flush_NO_FILESYSTEM")) Module["flush_NO_FILESYSTEM"] = function() { abort("'flush_NO_FILESYSTEM' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64")) Module["writeI53ToI64"] = function() { abort("'writeI53ToI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Clamped")) Module["writeI53ToI64Clamped"] = function() { abort("'writeI53ToI64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Signaling")) Module["writeI53ToI64Signaling"] = function() { abort("'writeI53ToI64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Clamped")) Module["writeI53ToU64Clamped"] = function() { abort("'writeI53ToU64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Signaling")) Module["writeI53ToU64Signaling"] = function() { abort("'writeI53ToU64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "readI53FromI64")) Module["readI53FromI64"] = function() { abort("'readI53FromI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "readI53FromU64")) Module["readI53FromU64"] = function() { abort("'readI53FromU64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "convertI32PairToI53")) Module["convertI32PairToI53"] = function() { abort("'convertI32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "convertU32PairToI53")) Module["convertU32PairToI53"] = function() { abort("'convertU32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "uncaughtExceptionCount")) Module["uncaughtExceptionCount"] = function() { abort("'uncaughtExceptionCount' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "exceptionLast")) Module["exceptionLast"] = function() { abort("'exceptionLast' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "exceptionCaught")) Module["exceptionCaught"] = function() { abort("'exceptionCaught' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ExceptionInfoAttrs")) Module["ExceptionInfoAttrs"] = function() { abort("'ExceptionInfoAttrs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "ExceptionInfo")) Module["ExceptionInfo"] = function() { abort("'ExceptionInfo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "CatchInfo")) Module["CatchInfo"] = function() { abort("'CatchInfo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "exception_addRef")) Module["exception_addRef"] = function() { abort("'exception_addRef' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "exception_decRef")) Module["exception_decRef"] = function() { abort("'exception_decRef' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "Browser")) Module["Browser"] = function() { abort("'Browser' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "funcWrappers")) Module["funcWrappers"] = function() { abort("'funcWrappers' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper")) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "setMainLoop")) Module["setMainLoop"] = function() { abort("'setMainLoop' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "FS")) Module["FS"] = function() { abort("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "mmapAlloc")) Module["mmapAlloc"] = function() { abort("'mmapAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "MEMFS")) Module["MEMFS"] = function() { abort("'MEMFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "TTY")) Module["TTY"] = function() { abort("'TTY' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "PIPEFS")) Module["PIPEFS"] = function() { abort("'PIPEFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SOCKFS")) Module["SOCKFS"] = function() { abort("'SOCKFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "_setNetworkCallback")) Module["_setNetworkCallback"] = function() { abort("'_setNetworkCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "tempFixedLengthArray")) Module["tempFixedLengthArray"] = function() { abort("'tempFixedLengthArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "miniTempWebGLFloatBuffers")) Module["miniTempWebGLFloatBuffers"] = function() { abort("'miniTempWebGLFloatBuffers' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "heapObjectForWebGLType")) Module["heapObjectForWebGLType"] = function() { abort("'heapObjectForWebGLType' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "heapAccessShiftForWebGLHeap")) Module["heapAccessShiftForWebGLHeap"] = function() { abort("'heapAccessShiftForWebGLHeap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GL")) Module["GL"] = function() { abort("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGet")) Module["emscriptenWebGLGet"] = function() { abort("'emscriptenWebGLGet' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "computeUnpackAlignedImageSize")) Module["computeUnpackAlignedImageSize"] = function() { abort("'computeUnpackAlignedImageSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetTexPixelData")) Module["emscriptenWebGLGetTexPixelData"] = function() { abort("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetUniform")) Module["emscriptenWebGLGetUniform"] = function() { abort("'emscriptenWebGLGetUniform' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetVertexAttrib")) Module["emscriptenWebGLGetVertexAttrib"] = function() { abort("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "writeGLArray")) Module["writeGLArray"] = function() { abort("'writeGLArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "AL")) Module["AL"] = function() { abort("'AL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL_unicode")) Module["SDL_unicode"] = function() { abort("'SDL_unicode' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL_ttfContext")) Module["SDL_ttfContext"] = function() { abort("'SDL_ttfContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL_audio")) Module["SDL_audio"] = function() { abort("'SDL_audio' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL")) Module["SDL"] = function() { abort("'SDL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "SDL_gfx")) Module["SDL_gfx"] = function() { abort("'SDL_gfx' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GLUT")) Module["GLUT"] = function() { abort("'GLUT' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "EGL")) Module["EGL"] = function() { abort("'EGL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GLFW_Window")) Module["GLFW_Window"] = function() { abort("'GLFW_Window' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GLFW")) Module["GLFW"] = function() { abort("'GLFW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "GLEW")) Module["GLEW"] = function() { abort("'GLEW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "IDBStore")) Module["IDBStore"] = function() { abort("'IDBStore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "runAndAbortIfError")) Module["runAndAbortIfError"] = function() { abort("'runAndAbortIfError' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "warnOnce")) Module["warnOnce"] = function() { abort("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackSave")) Module["stackSave"] = function() { abort("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackRestore")) Module["stackRestore"] = function() { abort("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stackAlloc")) Module["stackAlloc"] = function() { abort("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "AsciiToString")) Module["AsciiToString"] = function() { abort("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToAscii")) Module["stringToAscii"] = function() { abort("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UTF16ToString")) Module["UTF16ToString"] = function() { abort("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF16")) Module["stringToUTF16"] = function() { abort("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF16")) Module["lengthBytesUTF16"] = function() { abort("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "UTF32ToString")) Module["UTF32ToString"] = function() { abort("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF32")) Module["stringToUTF32"] = function() { abort("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF32")) Module["lengthBytesUTF32"] = function() { abort("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8")) Module["allocateUTF8"] = function() { abort("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8OnStack")) Module["allocateUTF8OnStack"] = function() { abort("'allocateUTF8OnStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; -Module["writeStackCookie"] = writeStackCookie; -Module["checkStackCookie"] = checkStackCookie; -if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_NORMAL")) Object.defineProperty(Module, "ALLOC_NORMAL", { configurable: true, get: function() { abort("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); -if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_STACK")) Object.defineProperty(Module, "ALLOC_STACK", { configurable: true, get: function() { abort("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); - -var calledRun; - -/** - * @constructor - * @this {ExitStatus} - */ -function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status; -} - -var calledMain = false; - -dependenciesFulfilled = function runCaller() { - // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled -}; - -function callMain(args) { - assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); - assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); - - var entryFunction = Module['_main']; - - args = args || []; - - var argc = args.length+1; - var argv = stackAlloc((argc + 1) * 4); - HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram); - for (var i = 1; i < argc; i++) { - HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]); - } - HEAP32[(argv >> 2) + argc] = 0; - - try { - - var ret = entryFunction(argc, argv); - - // In PROXY_TO_PTHREAD builds, we should never exit the runtime below, as - // execution is asynchronously handed off to a pthread. - // if we're not running an evented main loop, it's time to exit - exit(ret, /* implicit = */ true); - } - catch(e) { - if (e instanceof ExitStatus) { - // exit() throws this once it's done to make sure execution - // has been stopped completely - return; - } else if (e == 'unwind') { - // running an evented main loop, don't immediately exit - noExitRuntime = true; - return; - } else { - var toLog = e; - if (e && typeof e === 'object' && e.stack) { - toLog = [e, e.stack]; - } - err('exception thrown: ' + toLog); - quit_(1, e); - } - } finally { - calledMain = true; - - } -} - -function stackCheckInit() { - // This is normally called automatically during __wasm_call_ctors but need to - // get these values before even running any of the ctors so we call it redundantly - // here. - // TODO(sbc): Move writeStackCookie to native to to avoid this. - _emscripten_stack_init(); - writeStackCookie(); -} - -/** @type {function(Array=)} */ -function run(args) { - args = args || arguments_; - - if (runDependencies > 0) { - return; - } - - stackCheckInit(); - - preRun(); - - // a preRun added a dependency, run will be called later - if (runDependencies > 0) { - return; - } - - function doRun() { - // run may have just been called through dependencies being fulfilled just in this very frame, - // or while the async setStatus time below was happening - if (calledRun) return; - calledRun = true; - Module['calledRun'] = true; - - if (ABORT) return; - - initRuntime(); - - preMain(); - - if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); - - if (shouldRunNow) callMain(args); - - postRun(); - } - - if (Module['setStatus']) { - Module['setStatus']('Running...'); - setTimeout(function() { - setTimeout(function() { - Module['setStatus'](''); - }, 1); - doRun(); - }, 1); - } else - { - doRun(); - } - checkStackCookie(); -} -Module['run'] = run; - -function checkUnflushedContent() { - // Compiler settings do not allow exiting the runtime, so flushing - // the streams is not possible. but in ASSERTIONS mode we check - // if there was something to flush, and if so tell the user they - // should request that the runtime be exitable. - // Normally we would not even include flush() at all, but in ASSERTIONS - // builds we do so just for this check, and here we see if there is any - // content to flush, that is, we check if there would have been - // something a non-ASSERTIONS build would have not seen. - // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 - // mode (which has its own special function for this; otherwise, all - // the code is inside libc) - var oldOut = out; - var oldErr = err; - var has = false; - out = err = function(x) { - has = true; - } - try { // it doesn't matter if it fails - var flush = flush_NO_FILESYSTEM; - if (flush) flush(); - } catch(e) {} - out = oldOut; - err = oldErr; - if (has) { - warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.'); - warnOnce('(this may also be due to not including full filesystem support - try building with -s FORCE_FILESYSTEM=1)'); - } -} - -/** @param {boolean|number=} implicit */ -function exit(status, implicit) { - checkUnflushedContent(); - - // if this is just main exit-ing implicitly, and the status is 0, then we - // don't need to do anything here and can just leave. if the status is - // non-zero, though, then we need to report it. - // (we may have warned about this earlier, if a situation justifies doing so) - if (implicit && noExitRuntime && status === 0) { - return; - } - - if (noExitRuntime) { - // if exit() was called, we may warn the user if the runtime isn't actually being shut down - if (!implicit) { - var msg = 'program exited (with status: ' + status + '), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)'; - err(msg); - } - } else { - - EXITSTATUS = status; - - exitRuntime(); - - if (Module['onExit']) Module['onExit'](status); - - ABORT = true; - } - - quit_(status, new ExitStatus(status)); -} - -if (Module['preInit']) { - if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; - while (Module['preInit'].length > 0) { - Module['preInit'].pop()(); - } -} - -// shouldRunNow refers to calling main(), not run(). -var shouldRunNow = true; - -if (Module['noInitialRun']) shouldRunNow = false; - -run(); - - - - - diff --git a/dist/solver.wasm b/dist/solver.wasm deleted file mode 100755 index d439a49..0000000 Binary files a/dist/solver.wasm and /dev/null differ diff --git a/src/Sketcher.js b/src/Sketcher.js index 66cb51a..e91f576 100644 --- a/src/Sketcher.js +++ b/src/Sketcher.js @@ -250,11 +250,10 @@ export class Sketcher extends THREE.Group { onDrag(e) { const mouseLoc = this.getLocation(e); - this.geomGroup.children[this.grabPtIdx].geometry.attributes.position.set(mouseLoc); - this.updatePointsBuffer() + + this.ptsBuf.set(mouseLoc.slice(0,2),this.objIdx.get(this.geomGroup.children[this.grabPtIdx].id)*2) + this.solve() - // console.log(this.geomGroup.children[this.grabPtIdx].geometry.attributes.position.array) - // this.geomGroup.children[this.grabPtIdx].geometry.attributes.position.needsUpdate = true; this.dispatchEvent({ type: 'change' }) } @@ -263,7 +262,6 @@ export class Sketcher extends THREE.Group { this.domElement.removeEventListener('pointermove', this.onDrag) this.domElement.removeEventListener('pointerup', this.onRelease) this.geomGroup.children[this.grabPtIdx].geometry.computeBoundingSphere() - // this.grabbedObject = null } @@ -530,13 +528,6 @@ export class Sketcher extends THREE.Group { solve() { - for (let i = 0, p = 0; i < this.geomGroup.children.length; i++) { - if (this.geomGroup.children[i].type == "Points") { - this.ptsBuf[2 * i] = this.geomGroup.children[i].geometry.attributes.position.array[0] - this.ptsBuf[2 * i + 1] = this.geomGroup.children[i].geometry.attributes.position.array[1] - } - } - const pts_buffer = Module._malloc(this.ptsBuf.length * this.ptsBuf.BYTES_PER_ELEMENT) Module.HEAPF32.set(this.ptsBuf, pts_buffer >> 2)