From 8c3ef6f326a78ce0d08d4be5fd6a16dbbf957b32 Mon Sep 17 00:00:00 2001 From: howard Date: Wed, 24 Mar 2021 15:35:13 -0700 Subject: [PATCH] remove extraneous updatebuffer call --- .gitignore | 3 +- dist/.nojekyll | 0 dist/bundle.js | 92805 ------------------------------------------- dist/bundle.js.map | 1 - dist/favicon.ico | Bin 24838 -> 0 bytes dist/icon-192.png | Bin 9588 -> 0 bytes dist/icon-512.png | Bin 26842 -> 0 bytes dist/index.html | 71 - dist/manifest.json | 27 - dist/robots.txt | 3 - dist/solver.js | 2460 -- dist/solver.wasm | Bin 137474 -> 0 bytes src/Sketcher.js | 15 +- 13 files changed, 5 insertions(+), 95380 deletions(-) delete mode 100644 dist/.nojekyll delete mode 100644 dist/bundle.js delete mode 100644 dist/bundle.js.map delete mode 100644 dist/favicon.ico delete mode 100644 dist/icon-192.png delete mode 100644 dist/icon-512.png delete mode 100644 dist/index.html delete mode 100644 dist/manifest.json delete mode 100644 dist/robots.txt delete mode 100644 dist/solver.js delete mode 100755 dist/solver.wasm 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":"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","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 d439a49f6d862841b5c7d8b1671bd66243f83b44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137474 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

    gTaC3oZ1r`Xc=O!Bs3D?s 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 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)