gh-pages
parent
6de49366a8
commit
6c8e87a4a3
File diff suppressed because one or more lines are too long
|
@ -4,6 +4,47 @@ object-assign
|
||||||
@license MIT
|
@license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if an event is supported in the current execution environment.
|
||||||
|
*
|
||||||
|
* NOTE: This will not work correctly for non-generic events such as `change`,
|
||||||
|
* `reset`, `load`, `error`, and `select`.
|
||||||
|
*
|
||||||
|
* Borrows from Modernizr.
|
||||||
|
*
|
||||||
|
* @param {string} eventNameSuffix Event name, e.g. "click".
|
||||||
|
* @return {boolean} True if the event is supported.
|
||||||
|
* @internal
|
||||||
|
* @license Modernizr 3.0.0pre (Custom Build) | MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @license React v0.20.2
|
||||||
|
* scheduler-tracing.development.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @license React v0.20.2
|
||||||
|
* scheduler-tracing.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @license React v0.20.2
|
||||||
|
* scheduler.development.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
/** @license React v0.20.2
|
/** @license React v0.20.2
|
||||||
* scheduler.production.min.js
|
* scheduler.production.min.js
|
||||||
*
|
*
|
||||||
|
@ -13,6 +54,15 @@ object-assign
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** @license React v16.13.1
|
||||||
|
* react-is.development.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
/** @license React v16.13.1
|
/** @license React v16.13.1
|
||||||
* react-is.production.min.js
|
* react-is.production.min.js
|
||||||
*
|
*
|
||||||
|
@ -22,6 +72,15 @@ object-assign
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** @license React v17.0.2
|
||||||
|
* react-dom.development.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
/** @license React v17.0.2
|
/** @license React v17.0.2
|
||||||
* react-dom.production.min.js
|
* react-dom.production.min.js
|
||||||
*
|
*
|
||||||
|
@ -31,6 +90,15 @@ object-assign
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** @license React v17.0.2
|
||||||
|
* react.development.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
/** @license React v17.0.2
|
/** @license React v17.0.2
|
||||||
* react.production.min.js
|
* react.production.min.js
|
||||||
*
|
*
|
||||||
|
|
40
app.css
40
app.css
|
@ -1,3 +1,7 @@
|
||||||
|
.bg-transparent {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
.bg-gray-700 {
|
.bg-gray-700 {
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgba(64, 64, 64, var(--tw-bg-opacity));
|
background-color: rgba(64, 64, 64, var(--tw-bg-opacity));
|
||||||
|
@ -13,6 +17,10 @@
|
||||||
border-color: rgba(250, 250, 250, var(--tw-border-opacity));
|
border-color: rgba(250, 250, 250, var(--tw-border-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.border-0 {
|
||||||
|
border-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
.border-t-0 {
|
.border-t-0 {
|
||||||
border-top-width: 0px;
|
border-top-width: 0px;
|
||||||
}
|
}
|
||||||
|
@ -69,6 +77,10 @@
|
||||||
height: 1.75rem;
|
height: 1.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.h-9 {
|
||||||
|
height: 2.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
.h-full {
|
.h-full {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
@ -78,6 +90,20 @@
|
||||||
line-height: 1.25rem;
|
line-height: 1.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-lg {
|
||||||
|
font-size: 1.125rem;
|
||||||
|
line-height: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx-1 {
|
||||||
|
margin-left: 0.25rem;
|
||||||
|
margin-right: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mr-2 {
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.mr-6 {
|
.mr-6 {
|
||||||
margin-right: 1.5rem;
|
margin-right: 1.5rem;
|
||||||
}
|
}
|
||||||
|
@ -86,6 +112,11 @@
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.focus\:outline-none:focus {
|
||||||
|
outline: 2px solid transparent;
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.p-1 {
|
.p-1 {
|
||||||
padding: 0.25rem;
|
padding: 0.25rem;
|
||||||
}
|
}
|
||||||
|
@ -257,6 +288,15 @@ body {
|
||||||
color: rgba(229, 229, 229, var(--tw-text-opacity));
|
color: rgba(229, 229, 229, var(--tw-text-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.active-btn {
|
||||||
|
cursor: pointer;
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgba(52, 211, 153, var(--tw-bg-opacity));
|
||||||
|
fill: currentColor;
|
||||||
|
--tw-text-opacity: 1;
|
||||||
|
color: rgba(229, 229, 229, var(--tw-text-opacity))
|
||||||
|
}
|
||||||
|
|
||||||
.btn-green {
|
.btn-green {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
|
|
|
@ -0,0 +1,148 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2019 Google LLC
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* exported getFileHandle, getNewFileHandle, readFile, verifyPermission,
|
||||||
|
writeFile */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a handle to an existing file on the local file system.
|
||||||
|
*
|
||||||
|
* @return {!Promise<FileSystemFileHandle>} Handle to the existing file.
|
||||||
|
*/
|
||||||
|
function getFileHandle() {
|
||||||
|
// For Chrome 86 and later...
|
||||||
|
if ('showOpenFilePicker' in window) {
|
||||||
|
return window.showOpenFilePicker().then((handles) => handles[0]);
|
||||||
|
}
|
||||||
|
// For Chrome 85 and earlier...
|
||||||
|
return window.chooseFileSystemEntries();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a handle to a new (text) file on the local file system.
|
||||||
|
*
|
||||||
|
* @return {!Promise<FileSystemFileHandle>} Handle to the new file.
|
||||||
|
*/
|
||||||
|
function getNewFileHandle() {
|
||||||
|
// For Chrome 86 and later...
|
||||||
|
if ('showSaveFilePicker' in window) {
|
||||||
|
const opts = {
|
||||||
|
types: [{
|
||||||
|
description: 'Text file',
|
||||||
|
accept: {'text/plain': ['.txt']},
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
return window.showSaveFilePicker(opts);
|
||||||
|
}
|
||||||
|
// For Chrome 85 and earlier...
|
||||||
|
const opts = {
|
||||||
|
type: 'save-file',
|
||||||
|
accepts: [{
|
||||||
|
description: 'Text file',
|
||||||
|
extensions: ['txt'],
|
||||||
|
mimeTypes: ['text/plain'],
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
return window.chooseFileSystemEntries(opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the raw text from a file.
|
||||||
|
*
|
||||||
|
* @param {File} file
|
||||||
|
* @return {!Promise<string>} A promise that resolves to the parsed string.
|
||||||
|
*/
|
||||||
|
function readFile(file) {
|
||||||
|
// If the new .text() reader is available, use it.
|
||||||
|
if (file.text) {
|
||||||
|
return file.text();
|
||||||
|
}
|
||||||
|
// Otherwise use the traditional file reading technique.
|
||||||
|
return _readFileLegacy(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the raw text from a file.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {File} file
|
||||||
|
* @return {Promise<string>} A promise that resolves to the parsed string.
|
||||||
|
*/
|
||||||
|
function _readFileLegacy(file) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.addEventListener('loadend', (e) => {
|
||||||
|
const text = e.srcElement.result;
|
||||||
|
resolve(text);
|
||||||
|
});
|
||||||
|
reader.readAsText(file);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes the contents to disk.
|
||||||
|
*
|
||||||
|
* @param {FileSystemFileHandle} fileHandle File handle to write to.
|
||||||
|
* @param {string} contents Contents to write.
|
||||||
|
*/
|
||||||
|
async function writeFile(fileHandle, contents) {
|
||||||
|
// Support for Chrome 82 and earlier.
|
||||||
|
if (fileHandle.createWriter) {
|
||||||
|
// Create a writer (request permission if necessary).
|
||||||
|
const writer = await fileHandle.createWriter();
|
||||||
|
// Write the full length of the contents
|
||||||
|
await writer.write(0, contents);
|
||||||
|
// Close the file and write the contents to disk
|
||||||
|
await writer.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// For Chrome 83 and later.
|
||||||
|
// Create a FileSystemWritableFileStream to write to.
|
||||||
|
const writable = await fileHandle.createWritable();
|
||||||
|
// Write the contents of the file to the stream.
|
||||||
|
await writable.write(contents);
|
||||||
|
// Close the file and write the contents to disk.
|
||||||
|
await writable.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify the user has granted permission to read or write to the file, if
|
||||||
|
* permission hasn't been granted, request permission.
|
||||||
|
*
|
||||||
|
* @param {FileSystemFileHandle} fileHandle File handle to check.
|
||||||
|
* @param {boolean} withWrite True if write permission should be checked.
|
||||||
|
* @return {boolean} True if the user has granted read/write permission.
|
||||||
|
*/
|
||||||
|
async function verifyPermission(fileHandle, withWrite) {
|
||||||
|
const opts = {};
|
||||||
|
if (withWrite) {
|
||||||
|
opts.writable = true;
|
||||||
|
// For Chrome 86 and later...
|
||||||
|
opts.mode = 'readwrite';
|
||||||
|
}
|
||||||
|
// Check if we already have permission, if so, return true.
|
||||||
|
if (await fileHandle.queryPermission(opts) === 'granted') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Request permission to the file, if the user grants permission, return true.
|
||||||
|
if (await fileHandle.requestPermission(opts) === 'granted') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// The user did nt grant permission, return false.
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -25,6 +25,7 @@
|
||||||
<script src="app.bundle.js"></script>
|
<script src="app.bundle.js"></script>
|
||||||
<script src="scene.bundle.js"></script>
|
<script src="scene.bundle.js"></script>
|
||||||
<script src="solver.js"></script>
|
<script src="solver.js"></script>
|
||||||
|
<script src="fs-helpers.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
File diff suppressed because one or more lines are too long
BIN
solver.wasm
BIN
solver.wasm
Binary file not shown.
Loading…
Reference in New Issue