mirror of
https://github.com/ApfelTeeSaft/LiveSplitOne.git
synced 2026-09-02 19:20:05 +00:00
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"presets": [
|
||||
[
|
||||
"@babel/preset-env",
|
||||
{
|
||||
"targets": {
|
||||
"browsers": [
|
||||
">0.5%",
|
||||
"not ie <= 11",
|
||||
"not OperaMini all",
|
||||
"not UCAndroid < 12",
|
||||
"not Samsung < 7",
|
||||
"not iOS < 11.2",
|
||||
"not Android < 66",
|
||||
"not chrome < 57"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -2,3 +2,4 @@ node_modules
|
||||
dist
|
||||
npm-debug.log
|
||||
src/livesplit_core.wasm
|
||||
src/livesplit-core
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<h1> <img src="https://raw.githubusercontent.com/LiveSplit/LiveSplit/master/LiveSplit/Resources/Icon.png" alt="LiveSplit" height="42" width="45" align="top"/> LiveSplit One</h1>
|
||||
# <img src="https://raw.githubusercontent.com/LiveSplit/LiveSplit/master/LiveSplit/Resources/Icon.png" alt="LiveSplit" height="42" width="45" align="top"/> LiveSplit One
|
||||
|
||||
[](https://travis-ci.org/LiveSplit/LiveSplitOne) [](https://greenkeeper.io/)
|
||||
|
||||
@@ -15,41 +15,57 @@ In order to build LiveSplit One you need to install
|
||||
[npm](https://www.npmjs.com/get-npm) and the [Rust
|
||||
Compiler](https://www.rust-lang.org/). Make sure to recursively clone the
|
||||
repository so that all git submodules are cloned as well:
|
||||
```
|
||||
|
||||
```bash
|
||||
git clone --recursive
|
||||
```
|
||||
|
||||
Once you have cloned the repository and both the Rust compiler and npm are set
|
||||
up, you need to install the WebAssembly target like so:
|
||||
```
|
||||
|
||||
```bash
|
||||
rustup target add wasm32-unknown-unknown
|
||||
```
|
||||
You need to set up some npm modules before compiling the project:
|
||||
|
||||
You also need wasm-bindgen. You can build it like so:
|
||||
|
||||
```bash
|
||||
cargo install wasm-bindgen-cli
|
||||
```
|
||||
|
||||
You need to set up some npm modules before compiling the project:
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
You are now ready to build livesplit-core, which powers LiveSplit One:
|
||||
```
|
||||
|
||||
```bash
|
||||
npm run build:core
|
||||
```
|
||||
|
||||
Now you can build and host LiveSplit One:
|
||||
```
|
||||
|
||||
```bash
|
||||
npm run start
|
||||
```
|
||||
|
||||
A browser tab with LiveSplit One should now open. Alternatively you can use `npm
|
||||
run serve` to just host it without opening a browser tab.
|
||||
|
||||
## Browser Support
|
||||
|
||||
| Browser | Compatibility | Known Issues |
|
||||
|---------|---------------|--------------|
|
||||
| Chrome | ≥57 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3A"Google%20Chrome") |
|
||||
| Firefox | ≥52 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AFirefox) |
|
||||
| Edge | ≥16 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3A"Microsoft%20Edge") |
|
||||
| Safari | ≥11 | |
|
||||
| Opera | ≥44 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3A"Google%20Chrome") |
|
||||
| iOS | ≥11.2 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AiOS) |
|
||||
| Android WebView | ≥62 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AAndroid) |
|
||||
| Chrome Android | ≥66 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AAndroid) |
|
||||
| Firefox Android | ≥60 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AAndroid) |
|
||||
| Internet Explorer | Unsupported | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3A"Internet%20Explorer") |
|
||||
| Opera Mini | Unsupported | |
|
||||
| Browser | Compatibility | Known Issues |
|
||||
| ----------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Chrome | ≥57 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3A"Google%20Chrome") |
|
||||
| Firefox | ≥52 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AFirefox) |
|
||||
| Edge | ≥16 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3A"Microsoft%20Edge") |
|
||||
| Safari | ≥11 | |
|
||||
| Opera | ≥44 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3A"Google%20Chrome") |
|
||||
| iOS | ≥11.2 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AiOS) |
|
||||
| Android WebView | ≥62 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AAndroid) |
|
||||
| Chrome Android | ≥66 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AAndroid) |
|
||||
| Firefox Android | ≥60 | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3AAndroid) |
|
||||
| Internet Explorer | Unsupported | [](https://github.com/LiveSplit/LiveSplitOne/issues?q=is%3Aissue+is%3Aopen+label%3A"Internet%20Explorer") |
|
||||
| Opera Mini | Unsupported | |
|
||||
|
||||
+14
-5
@@ -15,6 +15,7 @@ spawnSync(
|
||||
[
|
||||
"build",
|
||||
"-p", "cdylib",
|
||||
"--features", "wasm-web",
|
||||
"--target", "wasm32-unknown-unknown",
|
||||
"--release",
|
||||
],
|
||||
@@ -24,9 +25,17 @@ spawnSync(
|
||||
},
|
||||
);
|
||||
|
||||
spawnSync(
|
||||
"wasm-bindgen",
|
||||
[
|
||||
"livesplit-core/target/wasm32-unknown-unknown/release/livesplit_core.wasm",
|
||||
"--out-dir", "src/livesplit-core",
|
||||
],
|
||||
{
|
||||
stdio: "inherit",
|
||||
},
|
||||
);
|
||||
|
||||
fs
|
||||
.createReadStream("livesplit-core/target/wasm32-unknown-unknown/release/livesplit_core.wasm")
|
||||
.pipe(fs.createWriteStream("src/livesplit_core.wasm"));
|
||||
fs
|
||||
.createReadStream("livesplit-core/capi/bindings/wasm/livesplit_core.ts")
|
||||
.pipe(fs.createWriteStream("src/livesplit.ts"));
|
||||
.createReadStream("livesplit-core/capi/bindings/wasm_bindgen/index.ts")
|
||||
.pipe(fs.createWriteStream("src/livesplit-core/index.ts"));
|
||||
|
||||
@@ -19,6 +19,7 @@ main() {
|
||||
rustup target install $TARGET
|
||||
|
||||
cargo install -f wasm-gc
|
||||
cargo install -f wasm-bindgen-cli
|
||||
|
||||
# This fetches latest stable release
|
||||
local tag=$(git ls-remote --tags --refs --exit-code https://github.com/japaric/cross \
|
||||
|
||||
+5
-7
@@ -6,15 +6,13 @@ SOURCE_BRANCH="master"
|
||||
TARGET_BRANCH="gh-pages"
|
||||
|
||||
doCompile() {
|
||||
(cd livesplit-core && cargo build -p cdylib --target wasm32-unknown-unknown --release)
|
||||
(cd livesplit-core/capi/bind_gen && cargo run)
|
||||
|
||||
$HOME/binaryen/bin/wasm-opt -O4 livesplit-core/target/wasm32-unknown-unknown/release/livesplit_core.wasm -o src/livesplit_core.wasm
|
||||
wasm-gc src/livesplit_core.wasm
|
||||
cp livesplit-core/capi/bindings/wasm/livesplit_core.ts src/livesplit.ts
|
||||
|
||||
npm install
|
||||
npm run build:core
|
||||
npm run publish
|
||||
|
||||
WASM_FILE=$(ls dist/*.wasm)
|
||||
$HOME/binaryen/bin/wasm-opt -O4 "$WASM_FILE" -o "$WASM_FILE"
|
||||
wasm-gc "$WASM_FILE"
|
||||
}
|
||||
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" -o "$TRAVIS_BRANCH" != "$SOURCE_BRANCH" ]; then
|
||||
|
||||
+1
-1
Submodule livesplit-core updated: f8976fe549...0b535d8a43
+1
-1
@@ -8,7 +8,7 @@ import {
|
||||
PlayersEmbedded,
|
||||
} from "./SpeedrunCom";
|
||||
import { Option } from "../util/OptionUtil";
|
||||
import { FuzzyList } from "../livesplit";
|
||||
import { FuzzyList } from "../livesplit-core";
|
||||
|
||||
const gameList: string[] = [];
|
||||
let fuzzyList: Option<FuzzyList> = null;
|
||||
|
||||
+1
-3
@@ -2,8 +2,6 @@ import * as React from "react";
|
||||
import * as ReactDOM from "react-dom";
|
||||
|
||||
import { toast, ToastContainer } from "react-toastify";
|
||||
import { load } from "./livesplit";
|
||||
import { LiveSplit } from "./ui/LiveSplit";
|
||||
|
||||
import "react-toastify/dist/ReactToastify.css";
|
||||
import "./css/font-awesome.css";
|
||||
@@ -11,7 +9,7 @@ import "./css/main.scss";
|
||||
|
||||
async function run() {
|
||||
try {
|
||||
await load("livesplit_core.wasm");
|
||||
const { LiveSplit } = await import("./ui/LiveSplit");
|
||||
|
||||
ReactDOM.render(
|
||||
<div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import { LayoutStateJson } from "../livesplit";
|
||||
import { LayoutStateJson } from "../livesplit-core";
|
||||
import Layout from "./Layout";
|
||||
|
||||
export interface Props {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { gradientToCss } from "../util/ColorUtil";
|
||||
|
||||
export interface Props { state: LiveSplit.BlankSpaceComponentStateJson }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import { ComponentStateJson, LayoutStateJson } from "../livesplit";
|
||||
import { ComponentStateJson, LayoutStateJson } from "../livesplit-core";
|
||||
import { assertNever } from "../util/OptionUtil";
|
||||
import BlankSpace from "./BlankSpace";
|
||||
import KeyValue from "./KeyValue";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { gradientToCss } from "../util/ColorUtil";
|
||||
import { renderToSVG } from "./Timer";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import { LayoutStateJson } from "../livesplit";
|
||||
import { LayoutStateJson } from "../livesplit-core";
|
||||
import { colorToCss, gradientToCss } from "../util/ColorUtil";
|
||||
import { Option } from "../util/OptionUtil";
|
||||
import Component from "./Component";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { colorToCss } from "../util/ColorUtil";
|
||||
|
||||
import "../css/Graph.scss";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { colorToCss, gradientToCss } from "../util/ColorUtil";
|
||||
import { map } from "../util/OptionUtil";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import { LayoutStateJson } from "../livesplit";
|
||||
import { LayoutStateJson } from "../livesplit-core";
|
||||
import { colorToCss, gradientToCss } from "../util/ColorUtil";
|
||||
import Component from "./Component";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { colorToCss } from "../util/ColorUtil";
|
||||
|
||||
import "../css/Separator.scss";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { colorToCss, gradientToCss } from "../util/ColorUtil";
|
||||
import { Option } from "../util/OptionUtil";
|
||||
import { splitLabelHeight } from "./SplitLabels";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import Split from "./Split";
|
||||
import { gradientToCss, colorToCss } from "../util/ColorUtil";
|
||||
import { Option, map } from "../util/OptionUtil";
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { gradientToCss, colorToCss } from "../util/ColorUtil";
|
||||
import { map } from "../util/OptionUtil";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { colorToCss, gradientToCss } from "../util/ColorUtil";
|
||||
|
||||
import "../css/Timer.scss";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { colorToCss, gradientToCss } from "../util/ColorUtil";
|
||||
import { map } from "../util/OptionUtil";
|
||||
|
||||
|
||||
-7987
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
import * as React from "react";
|
||||
import { ContextMenu, ContextMenuTrigger, MenuItem } from "react-contextmenu";
|
||||
import DragAutoRefreshLayout from "../layout/DragAutoRefreshLayout";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { SettingsComponent } from "./Settings";
|
||||
|
||||
import "../css/LayoutEditor.scss";
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
HotkeySystem, Layout, LayoutEditor, Run, RunEditor,
|
||||
Segment, SharedTimer, Timer, TimerPhase, TimingMethod,
|
||||
TimeSpan, TimerRef, TimerRefMut, HotkeyConfig,
|
||||
} from "../livesplit";
|
||||
} from "../livesplit-core";
|
||||
import { convertFileToArrayBuffer, convertFileToString, exportFile, openFileAsArrayBuffer, openFileAsString } from "../util/FileUtil";
|
||||
import { Option, assertNull, expect, maybeDisposeAndThen, panic } from "../util/OptionUtil";
|
||||
import * as SplitsIO from "../util/SplitsIO";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import * as React from "react";
|
||||
import { ContextMenu, ContextMenuTrigger, MenuItem } from "react-contextmenu";
|
||||
import * as LiveSplit from "../livesplit";
|
||||
import * as LiveSplit from "../livesplit-core";
|
||||
import { openFileAsArrayBuffer } from "../util/FileUtil";
|
||||
import { TextBox } from "./TextBox";
|
||||
import { toast } from "react-toastify";
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import { Color, SettingsDescriptionJson, SettingsDescriptionValueJson } from "../livesplit";
|
||||
import { Color, SettingsDescriptionJson, SettingsDescriptionValueJson } from "../livesplit-core";
|
||||
import { assertNever, expect, Option } from "../util/OptionUtil";
|
||||
import ColorPicker from "./ColorPicker";
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import * as React from "react";
|
||||
|
||||
import { SettingsComponent } from "./Settings";
|
||||
import { SettingsDescriptionJson, SettingValue, HotkeyConfig } from "../livesplit";
|
||||
import { SettingsDescriptionJson, SettingValue, HotkeyConfig } from "../livesplit-core";
|
||||
import { toast } from "react-toastify";
|
||||
|
||||
import "../css/SettingsEditor.scss";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import * as React from "react";
|
||||
import { SharedTimerRef, TimingMethod } from "../livesplit";
|
||||
import { SharedTimerRef, TimingMethod } from "../livesplit-core";
|
||||
import { Option } from "../util/OptionUtil";
|
||||
|
||||
import "../css/SideBarContent.scss";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Color, Gradient } from "../livesplit";
|
||||
import { Color, Gradient } from "../livesplit-core";
|
||||
|
||||
export function colorToCss(color: Color): string {
|
||||
const r = Math.round(color[0] * 255);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import * as React from "react";
|
||||
import { Parser as CommonMarkParser } from "commonmark";
|
||||
import CommonMarkRenderer = require("commonmark-react-renderer");
|
||||
import CommonMarkRenderer from "commonmark-react-renderer";
|
||||
import * as emojilib from "emojilib";
|
||||
import { emoteList } from "../api/EmoteList";
|
||||
import Twemoji from "react-twemoji";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Run } from "../livesplit";
|
||||
import { Run } from "../livesplit-core";
|
||||
import { PostRunResponse } from "./json/PostRunResponse";
|
||||
|
||||
function mapPromiseErr<T, E>(promise: Promise<T>, err: E): Promise<T> {
|
||||
|
||||
+9
-4
@@ -1,10 +1,9 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"outDir": "./dist/",
|
||||
"sourceMap": true,
|
||||
"noImplicitAny": true,
|
||||
"module": "commonjs",
|
||||
"target": "es2018",
|
||||
"module": "ESNext",
|
||||
"target": "ES5",
|
||||
"jsx": "react",
|
||||
"strictNullChecks": true,
|
||||
"noImplicitReturns": true,
|
||||
@@ -14,7 +13,13 @@
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"alwaysStrict": true,
|
||||
"strictFunctionTypes": true,
|
||||
"strict": true
|
||||
"strict": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"moduleResolution": "Node",
|
||||
"lib": [
|
||||
"ES2015",
|
||||
"DOM"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"./src/**/*"
|
||||
|
||||
+4
-13
@@ -29,7 +29,7 @@ module.exports = (env, argv) => {
|
||||
},
|
||||
|
||||
resolve: {
|
||||
extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js", ".json"],
|
||||
extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js", ".json", ".wasm"],
|
||||
},
|
||||
|
||||
plugins: [
|
||||
@@ -51,9 +51,6 @@ module.exports = (env, argv) => {
|
||||
},
|
||||
],
|
||||
})] : []),
|
||||
new CopyWebpackPlugin([
|
||||
{ from: "src/livesplit_core.wasm", to: "livesplit_core.wasm" },
|
||||
], {}),
|
||||
],
|
||||
|
||||
module: {
|
||||
@@ -62,12 +59,6 @@ module.exports = (env, argv) => {
|
||||
{
|
||||
test: /\.tsx?$/,
|
||||
use: [
|
||||
{
|
||||
loader: 'babel-loader',
|
||||
options: {
|
||||
presets: ['@babel/preset-env']
|
||||
}
|
||||
},
|
||||
"ts-loader",
|
||||
],
|
||||
exclude: "/node_modules",
|
||||
@@ -75,12 +66,12 @@ module.exports = (env, argv) => {
|
||||
{
|
||||
test: /\.(s*)css$/,
|
||||
use: ["style-loader", "css-loader", {
|
||||
loader: 'sass-loader',
|
||||
loader: "sass-loader",
|
||||
options: {
|
||||
// Prefer `dart-sass`
|
||||
implementation: require('sass'),
|
||||
implementation: require("sass"),
|
||||
},
|
||||
},],
|
||||
}],
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpg|gif|woff|ico)$/,
|
||||
|
||||
Reference in New Issue
Block a user