mirror of
https://github.com/GoodStartLabs/AI_Diplomacy.git
synced 2026-04-19 12:58:09 +00:00
Claude updated react to the latest version (>19). Seems to work well and is significantly snappier
Signed-off-by: Tyler Marques <me@tylermarques.com>
This commit is contained in:
parent
4e13f246d7
commit
ea966eef08
9 changed files with 13441 additions and 11590 deletions
24890
diplomacy/web/package-lock.json
generated
24890
diplomacy/web/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -4,27 +4,26 @@
|
||||||
"homepage": ".",
|
"homepage": ".",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@primer/octicons-react": "^9.1.1",
|
"@primer/octicons-react": "^19.11.0",
|
||||||
"bootstrap": "^4.3.1",
|
"bootstrap": "^5.3.3",
|
||||||
"jquery": "^3.4.1",
|
"jquery": "^3.7.1",
|
||||||
"popper.js": "^1.15.0",
|
"popper.js": "^1.16.1",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.8.1",
|
||||||
"react": "^16.8.6",
|
"react": "^19.1.0",
|
||||||
"react-confirm-alert": "^2.4.1",
|
"react-confirm-alert": "^3.0.6",
|
||||||
"react-dom": "^16.8.6",
|
"react-dom": "^19.1.0",
|
||||||
"react-helmet": "^5.2.1",
|
"react-helmet": "^6.1.0",
|
||||||
"react-scripts": "3.0.1",
|
"react-scripts": "5.0.1",
|
||||||
"react-scrollchor": "^6.0.0",
|
"react-scrollchor": "^6.0.0"
|
||||||
"react-shortcut": "^1.0.6"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts --openssl-legacy-provider start",
|
"start": "react-scripts start",
|
||||||
"build": "react-scripts --openssl-legacy-provider build",
|
"build": "react-scripts build",
|
||||||
"test": "react-scripts test --env=jsdom",
|
"test": "react-scripts test",
|
||||||
"eject": "react-scripts eject"
|
"eject": "react-scripts eject"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint-plugin-react": "^7.14.2"
|
"eslint-plugin-react": "^7.35.0"
|
||||||
},
|
},
|
||||||
"browserslist": {
|
"browserslist": {
|
||||||
"production": [
|
"production": [
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
// with this program. If not, see <https://www.gnu.org/licenses/>.
|
// with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
// ==============================================================================
|
// ==============================================================================
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import Octicon, {Person} from "@primer/octicons-react";
|
import {PersonIcon} from "@primer/octicons-react";
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
|
|
||||||
export class Navigation extends React.Component {
|
export class Navigation extends React.Component {
|
||||||
|
|
@ -33,7 +33,7 @@ export class Navigation extends React.Component {
|
||||||
<div className={'float-right'}>
|
<div className={'float-right'}>
|
||||||
<strong>
|
<strong>
|
||||||
<u className={'mr-2'}>{this.props.username}</u>
|
<u className={'mr-2'}>{this.props.username}</u>
|
||||||
<Octicon icon={Person}/>
|
<PersonIcon/>
|
||||||
</strong>
|
</strong>
|
||||||
</div>
|
</div>
|
||||||
)) || (
|
)) || (
|
||||||
|
|
@ -44,7 +44,7 @@ export class Navigation extends React.Component {
|
||||||
{(this.props.username && (
|
{(this.props.username && (
|
||||||
<span>
|
<span>
|
||||||
<u className={'mr-2'}>{this.props.username}</u>
|
<u className={'mr-2'}>{this.props.username}</u>
|
||||||
<Octicon icon={Person}/>
|
<PersonIcon/>
|
||||||
</span>
|
</span>
|
||||||
)) || 'Menu'}
|
)) || 'Menu'}
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
|
|
@ -21,9 +21,33 @@ import {STRINGS} from "../../diplomacy/utils/strings";
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
import {Power} from "../../diplomacy/engine/power";
|
import {Power} from "../../diplomacy/engine/power";
|
||||||
|
|
||||||
const HotKey = require('react-shortcut');
|
|
||||||
|
|
||||||
export class PowerOrderCreationForm extends React.Component {
|
export class PowerOrderCreationForm extends React.Component {
|
||||||
|
componentDidMount() {
|
||||||
|
document.addEventListener('keydown', this.handleKeyDown);
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {
|
||||||
|
document.removeEventListener('keydown', this.handleKeyDown);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleKeyDown = (event) => {
|
||||||
|
const key = event.key.toLowerCase();
|
||||||
|
if (key === 'escape') {
|
||||||
|
event.preventDefault();
|
||||||
|
this.setState(this.initState(), () => {
|
||||||
|
if (this.props.onChange)
|
||||||
|
this.props.onChange(this.state);
|
||||||
|
});
|
||||||
|
} else if (this.props.orderTypes.includes(key.toUpperCase())) {
|
||||||
|
event.preventDefault();
|
||||||
|
this.setState({order_type: key.toUpperCase()}, () => {
|
||||||
|
if (this.props.onChange)
|
||||||
|
this.props.onChange(this.state);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = this.initState();
|
this.state = this.initState();
|
||||||
|
|
@ -36,12 +60,6 @@ export class PowerOrderCreationForm extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
const onChange = Forms.createOnChangeCallback(this, this.props.onChange);
|
const onChange = Forms.createOnChangeCallback(this, this.props.onChange);
|
||||||
const onReset = Forms.createOnResetCallback(this, this.props.onChange, this.initState());
|
const onReset = Forms.createOnResetCallback(this, this.props.onChange, this.initState());
|
||||||
const onSetOrderType = (letter) => {
|
|
||||||
this.setState({order_type: letter}, () => {
|
|
||||||
if (this.props.onChange)
|
|
||||||
this.props.onChange(this.state);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
let title = '';
|
let title = '';
|
||||||
let titleClass = 'mr-4';
|
let titleClass = 'mr-4';
|
||||||
const header = [];
|
const header = [];
|
||||||
|
|
@ -97,11 +115,6 @@ export class PowerOrderCreationForm extends React.Component {
|
||||||
(this.props.power.wait ? 'success' : 'danger')
|
(this.props.power.wait ? 'success' : 'danger')
|
||||||
)}
|
)}
|
||||||
{votes}
|
{votes}
|
||||||
<HotKey keys={['escape']} onKeysCoincide={onReset}/>
|
|
||||||
{this.props.orderTypes.map((letter, index) => (
|
|
||||||
<HotKey key={index} keys={[letter.toLowerCase()]}
|
|
||||||
onKeysCoincide={() => onSetOrderType(letter)}/>
|
|
||||||
))}
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,27 @@ import PropTypes from "prop-types";
|
||||||
import {Button} from "../components/button";
|
import {Button} from "../components/button";
|
||||||
import {FancyBox} from "../components/fancyBox";
|
import {FancyBox} from "../components/fancyBox";
|
||||||
|
|
||||||
const HotKey = require('react-shortcut');
|
|
||||||
|
|
||||||
export class SelectViaForm extends React.Component {
|
export class SelectViaForm extends React.Component {
|
||||||
|
componentDidMount() {
|
||||||
|
document.addEventListener('keydown', this.handleKeyDown);
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {
|
||||||
|
document.removeEventListener('keydown', this.handleKeyDown);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleKeyDown = (event) => {
|
||||||
|
const key = event.key.toLowerCase();
|
||||||
|
if (key === 'm') {
|
||||||
|
event.preventDefault();
|
||||||
|
this.props.onSelect('M');
|
||||||
|
} else if (key === 'v') {
|
||||||
|
event.preventDefault();
|
||||||
|
this.props.onSelect('V');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<FancyBox title={`Select move type for move order: ${this.props.path.join(' ')}`}
|
<FancyBox title={`Select move type for move order: ${this.props.path.join(' ')}`}
|
||||||
|
|
@ -29,8 +47,6 @@ export class SelectViaForm extends React.Component {
|
||||||
<div>
|
<div>
|
||||||
<Button title={'regular move (M)'} large={true} onClick={() => this.props.onSelect('M')}/>
|
<Button title={'regular move (M)'} large={true} onClick={() => this.props.onSelect('M')}/>
|
||||||
<Button title={'move via (V)'} large={true} onClick={() => this.props.onSelect('V')}/>
|
<Button title={'move via (V)'} large={true} onClick={() => this.props.onSelect('V')}/>
|
||||||
<HotKey keys={['m']} onKeysCoincide={() => this.props.onSelect('M')}/>
|
|
||||||
<HotKey keys={['v']} onKeysCoincide={() => this.props.onSelect('V')}/>
|
|
||||||
</div>
|
</div>
|
||||||
</FancyBox>
|
</FancyBox>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,6 @@ import {MapData} from "../utils/map_data";
|
||||||
import {Queue} from "../../diplomacy/utils/queue";
|
import {Queue} from "../../diplomacy/utils/queue";
|
||||||
import {PhaseSummaryBottomSheet} from "../components/PhaseSummaryBottomSheet";
|
import {PhaseSummaryBottomSheet} from "../components/PhaseSummaryBottomSheet";
|
||||||
|
|
||||||
const HotKey = require('react-shortcut');
|
|
||||||
|
|
||||||
/* Order management in game page.
|
/* Order management in game page.
|
||||||
* When editing orders locally, we have to compare it to server orders
|
* When editing orders locally, we have to compare it to server orders
|
||||||
|
|
@ -1151,10 +1150,6 @@ export class ContentGame extends React.Component {
|
||||||
</div>
|
</div>
|
||||||
<div className={'col-xl'}>{orderView}</div>
|
<div className={'col-xl'}>{orderView}</div>
|
||||||
</Row>
|
</Row>
|
||||||
{toDisplay && <HotKey keys={['arrowleft']} onKeysCoincide={this.onDecrementPastPhase}/>}
|
|
||||||
{toDisplay && <HotKey keys={['arrowright']} onKeysCoincide={this.onIncrementPastPhase}/>}
|
|
||||||
{toDisplay && <HotKey keys={['home']} onKeysCoincide={this.displayFirstPastPhase}/>}
|
|
||||||
{toDisplay && <HotKey keys={['end']} onKeysCoincide={this.displayLastPastPhase}/>}
|
|
||||||
</Tab>
|
</Tab>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1193,10 +1188,6 @@ export class ContentGame extends React.Component {
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</Row>
|
</Row>
|
||||||
{toDisplay && <HotKey keys={['arrowleft']} onKeysCoincide={this.onDecrementPastPhase}/>}
|
|
||||||
{toDisplay && <HotKey keys={['arrowright']} onKeysCoincide={this.onIncrementPastPhase}/>}
|
|
||||||
{toDisplay && <HotKey keys={['home']} onKeysCoincide={this.displayFirstPastPhase}/>}
|
|
||||||
{toDisplay && <HotKey keys={['end']} onKeysCoincide={this.displayLastPastPhase}/>}
|
|
||||||
</Tab>
|
</Tab>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1452,9 +1443,10 @@ export class ContentGame extends React.Component {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
this.props.data.displayed = true;
|
this.props.data.displayed = true;
|
||||||
// Try to prevent scrolling when pressing keys Home and End.
|
// Handle keyboard shortcuts for navigation and prevent scrolling when pressing keys Home and End.
|
||||||
document.onkeydown = (event) => {
|
document.onkeydown = (event) => {
|
||||||
if (['home', 'end'].includes(event.key.toLowerCase())) {
|
const key = event.key.toLowerCase();
|
||||||
|
if (['home', 'end', 'arrowleft', 'arrowright'].includes(key)) {
|
||||||
// Try to prevent scrolling.
|
// Try to prevent scrolling.
|
||||||
if (event.hasOwnProperty('cancelBubble'))
|
if (event.hasOwnProperty('cancelBubble'))
|
||||||
event.cancelBubble = true;
|
event.cancelBubble = true;
|
||||||
|
|
@ -1462,6 +1454,25 @@ export class ContentGame extends React.Component {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
if (event.preventDefault)
|
if (event.preventDefault)
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
|
// Handle navigation shortcuts only when toDisplay is true
|
||||||
|
const toDisplay = this.props.data.game && this.props.data.game.phase_abbr !== 'COMPLETED';
|
||||||
|
if (toDisplay) {
|
||||||
|
switch(key) {
|
||||||
|
case 'arrowleft':
|
||||||
|
this.onDecrementPastPhase();
|
||||||
|
break;
|
||||||
|
case 'arrowright':
|
||||||
|
this.onIncrementPastPhase();
|
||||||
|
break;
|
||||||
|
case 'home':
|
||||||
|
this.displayFirstPastPhase();
|
||||||
|
break;
|
||||||
|
case 'end':
|
||||||
|
this.displayLastPastPhase();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {FancyBox} from "../../components/fancyBox";
|
import {FancyBox} from "../../components/fancyBox";
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
import Octicon, {ArrowLeft} from "@primer/octicons-react";
|
import {ArrowLeftIcon} from "@primer/octicons-react";
|
||||||
|
|
||||||
export class PanelChoosePlayers extends React.Component {
|
export class PanelChoosePlayers extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
|
|
@ -65,7 +65,7 @@ export class PanelChoosePlayers extends React.Component {
|
||||||
<div className="col">
|
<div className="col">
|
||||||
<button type="button" className="btn btn-secondary btn-sm px-3"
|
<button type="button" className="btn btn-secondary btn-sm px-3"
|
||||||
onClick={() => this.props.backward()}>
|
onClick={() => this.props.backward()}>
|
||||||
<Octicon icon={ArrowLeft}/>
|
<ArrowLeftIcon/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {FancyBox} from "../../components/fancyBox";
|
import {FancyBox} from "../../components/fancyBox";
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
import Octicon, {ArrowLeft} from "@primer/octicons-react";
|
import {ArrowLeftIcon} from "@primer/octicons-react";
|
||||||
|
|
||||||
export class PanelChoosePower extends React.Component {
|
export class PanelChoosePower extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
|
|
@ -67,7 +67,7 @@ export class PanelChoosePower extends React.Component {
|
||||||
<div className="col">
|
<div className="col">
|
||||||
<button type="button" className="btn btn-secondary btn-sm px-3"
|
<button type="button" className="btn btn-secondary btn-sm px-3"
|
||||||
onClick={() => this.props.backward()}>
|
onClick={() => this.props.backward()}>
|
||||||
<Octicon icon={ArrowLeft}/>
|
<ArrowLeftIcon/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import React from "react";
|
||||||
import {FancyBox} from "../../components/fancyBox";
|
import {FancyBox} from "../../components/fancyBox";
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
import {UTILS} from "../../../diplomacy/utils/utils";
|
import {UTILS} from "../../../diplomacy/utils/utils";
|
||||||
import Octicon, {ArrowLeft} from "@primer/octicons-react";
|
import {ArrowLeftIcon} from "@primer/octicons-react";
|
||||||
|
|
||||||
const DEADLINES = [
|
const DEADLINES = [
|
||||||
[0, '(no deadline)'],
|
[0, '(no deadline)'],
|
||||||
|
|
@ -104,7 +104,7 @@ export class PanelChooseSettings extends React.Component {
|
||||||
<div className="col-sm">
|
<div className="col-sm">
|
||||||
<button type="button" className="btn btn-secondary btn-sm btn-block"
|
<button type="button" className="btn btn-secondary btn-sm btn-block"
|
||||||
onClick={() => this.props.backward()}>
|
onClick={() => this.props.backward()}>
|
||||||
<Octicon icon={ArrowLeft}/>
|
<ArrowLeftIcon/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-sm">
|
<div className="col-sm">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue