Merge branch 'master' of ssh://mnml.gg:40022/~/mnml

This commit is contained in:
Mashy 2019-05-30 16:55:24 +10:00
commit 43b1ce837f
28 changed files with 179 additions and 169 deletions

View File

@ -370,12 +370,13 @@ header {
} }
.constructs-list { .constructs-list {
max-height: 100%;
margin-top: 0.5em; margin-top: 0.5em;
grid-area: team; grid-area: team;
display: grid; display: grid;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
/*grid-auto-rows: 1fr;*/ grid-auto-rows: 1fr;
grid-gap: 0.5em; grid-gap: 0.5em;
} }
@ -570,5 +571,6 @@ main .top button {
} }
/* Mobile Nav*/ /* Mobile Nav*/
#toggle-nav { display: none; } #nav-btn {
#toggle-nav-label { display: none; } display: none;
}

View File

@ -18,45 +18,27 @@
} }
nav { nav {
opacity: 0; display: none;
position: fixed; }
margin-top: 4em;
pointer-events: none; #nav-btn {
-webkit-transition: all 0.5s ease-in-out; display: inline-block;
-moz-transition: all 0.5s ease-in-out; margin: 0 0.5em;
-o-transition: all 0.5s ease-in-out; }
transition: all 0.5s ease-in-out;
#mnml.nav-visible nav {
display: block;
grid-area: main;
}
#mnml.nav-visible main {
display: none;
} }
main { main {
overflow-x: hidden; overflow-x: hidden;
} }
#toggle-nav { display: none; }
#toggle-nav-label {
grid-area: tnav;
color: whitesmoke;
line-height: 1.75em;
font-size: 1.5em;
display: block;
cursor: pointer;
margin-right: 0.5em;
}
#toggle-nav:checked #toggle-nav-label {
color: #ababab;
}
#toggle-nav:checked ~ nav {
opacity: 1;
pointer-events: auto;
}
#toggle-nav:checked ~ main {
opacity: 0.1;
pointer-events: none;
}
.login { .login {
width: 100%; width: 100%;
} }

View File

@ -22,8 +22,9 @@
"lodash": "^4.17.11", "lodash": "^4.17.11",
"node-sass": "^4.12.0", "node-sass": "^4.12.0",
"parcel": "^1.12.3", "parcel": "^1.12.3",
"preact": "^10.0.0-beta.1", "preact": "^8.4.2",
"react-redux": "^7.0.3", "preact-context": "^1.1.3",
"preact-redux": "^2.1.0",
"redux": "^4.0.0" "redux": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
@ -36,9 +37,5 @@
"eslint-plugin-import": "^2.14.0", "eslint-plugin-import": "^2.14.0",
"eslint-plugin-react": "^7.11.1", "eslint-plugin-react": "^7.11.1",
"jest": "^18.0.0" "jest": "^18.0.0"
},
"alias": {
"react": "preact/compat",
"react-dom": "preact/compat"
} }
} }

View File

@ -5,6 +5,7 @@ export const setSkip = value => ({ type: 'SET_SKIP', value });
export const setVboxHighlight = value => ({ type: 'SET_VBOX_HIGHLIGHT', value }); export const setVboxHighlight = value => ({ type: 'SET_VBOX_HIGHLIGHT', value });
export const setInstances = value => ({ type: 'SET_INSTANCES', value }); export const setInstances = value => ({ type: 'SET_INSTANCES', value });
export const setNav = value => ({ type: 'SET_NAV', value }); export const setNav = value => ({ type: 'SET_NAV', value });
export const setShowNav = value => ({ type: 'SET_SHOW_NAV', value });
export const setInstance = value => ({ type: 'SET_INSTANCE', value }); export const setInstance = value => ({ type: 'SET_INSTANCE', value });
export const setPing = value => ({ type: 'SET_PING', value }); export const setPing = value => ({ type: 'SET_PING', value });
export const setGame = value => ({ type: 'SET_GAME', value }); export const setGame = value => ({ type: 'SET_GAME', value });

View File

@ -1,7 +1,7 @@
const preact = require('preact'); const preact = require('preact');
// const logger = require('redux-diff-logger'); // const logger = require('redux-diff-logger');
const { Provider } = require('react-redux'); const { Provider, connect } = require('preact-redux');
const { createStore, combineReducers } = require('redux'); const { createStore, combineReducers } = require('redux');
const reducers = require('./reducers'); const reducers = require('./reducers');
@ -10,9 +10,7 @@ const setupKeys = require('./keyboard');
const createSocket = require('./socket'); const createSocket = require('./socket');
const registerEvents = require('./events'); const registerEvents = require('./events');
const Header = require('./components/header.container'); const Mnml = require('./components/mnml');
const Main = require('./components/main');
const Nav = require('./components/nav');
// Redux Store // Redux Store
const store = createStore( const store = createStore(
@ -28,16 +26,6 @@ document.fonts.load('16pt "Jura"').then(() => {
store.dispatch(actions.setWs(ws)); store.dispatch(actions.setWs(ws));
ws.connect(); ws.connect();
const Mnml = () => (
<div id="mnml" >
<input type="checkbox" id="toggle-nav"/>
<label id="toggle-nav-label" htmlFor="toggle-nav"><i className="fa fa-bars"></i></label>
<Header />
<Nav />
<Main />
</div>
);
const App = () => ( const App = () => (
<Provider store={store}> <Provider store={store}>
<Mnml /> <Mnml />

View File

@ -1,4 +1,4 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const preact = require('preact'); const preact = require('preact');
const range = require('lodash/range'); const range = require('lodash/range');

View File

@ -1,4 +1,4 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const actions = require('../actions'); const actions = require('../actions');

View File

@ -10,7 +10,7 @@ function pingColour(ping) {
} }
function renderHeader(args) { function renderHeader(args) {
const { account, ping } = args; const { account, ping, setShowNav, showNav } = args;
const accountStatus = account const accountStatus = account
? (<div className="header-status"> ? (<div className="header-status">
@ -23,6 +23,7 @@ function renderHeader(args) {
return ( return (
<header> <header>
<h1 className="header-title"> <h1 className="header-title">
<i id="nav-btn" onClick={() => setShowNav(!showNav)} className="fa fa-bars"></i>
mnml.gg mnml.gg
</h1> </h1>
{accountStatus} {accountStatus}

View File

@ -1,11 +1,15 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const Header = require('./header.component'); const Header = require('./header.component');
const actions = require('./../actions');
const addState = connect( const addState = connect(
({ account, ping }) => { ({ account, ping, showNav }) => {
return { account, ping }; return { account, ping, showNav };
}, },
dispatch => ({
setShowNav: v => dispatch(actions.setShowNav(v)),
})
); );
module.exports = addState(Header); module.exports = addState(Header);

View File

@ -1,4 +1,4 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const actions = require('../actions'); const actions = require('../actions');
const Info = require('./info.component'); const Info = require('./info.component');

View File

@ -1,5 +1,5 @@
const preact = require('preact'); const preact = require('preact');
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const Vbox = require('./vbox.component'); const Vbox = require('./vbox.component');
const InfoContainer = require('./info.container'); const InfoContainer = require('./info.container');

View File

@ -1,4 +1,4 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const preact = require('preact'); const preact = require('preact');
const range = require('lodash/range'); const range = require('lodash/range');

View File

@ -1,5 +1,5 @@
const preact = require('preact'); const preact = require('preact');
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const { Component } = require('preact'); const { Component } = require('preact');
const addState = connect( const addState = connect(

View File

@ -1,4 +1,4 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const preact = require('preact'); const preact = require('preact');
const range = require('lodash/range'); const range = require('lodash/range');

View File

@ -1,4 +1,4 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const preact = require('preact'); const preact = require('preact');
const { stringSort, NULL_UUID, COLOURS, constructAvatar } = require('./../utils'); const { stringSort, NULL_UUID, COLOURS, constructAvatar } = require('./../utils');

View File

@ -1,41 +1,44 @@
// eslint-disable-next-line // eslint-disable-next-line
const preact = require('preact'); const preact = require('preact');
const { useState } = require('preact/hooks');
function renderLogin({ submitLogin, submitRegister }) { function renderLogin({ submitLogin, submitRegister }) {
const [name, setName] = useState(''); const details = {
const [password, setPassword] = useState(''); name: '',
password: '',
};
return ( return (
<div className="login"> <main>
<input <div className="login">
className="login-input" <input
type="email" className="login-input"
placeholder="username" type="email"
onInput={e => setName(e.target.value)} placeholder="username"
/> onChange={e => (details.name = e.target.value)}
<input />
className="login-input" <input
type="password" className="login-input"
placeholder="password" type="password"
onInput={e => setPassword(e.target.value)} placeholder="password"
/> onChange={e => (details.password = e.target.value)}
<button />
className="login-btn" <button
onClick={() => submitLogin(name, password)}> className="login-btn"
Login onClick={() => submitLogin(details.name, details.password)}>
</button> Login
<button </button>
className="login-btn" <button
onClick={() => submitRegister(name, password)}> className="login-btn"
Register onClick={() => submitRegister(details.name, details.password)}>
</button> Register
<button </button>
className="login-btn" <button
onClick={() => document.location.assign('https://discord.gg/YJJgurM')}> className="login-btn"
Discord + Invites onClick={() => document.location.assign('https://discord.gg/YJJgurM')}>
</button> Discord + Invites
</div> </button>
</div>
</main>
); );
} }

View File

@ -1,10 +1,10 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const Login = require('./login.component'); const Login = require('./login.component');
const addState = connect( const addState = connect(
(state) => { (state) => {
const { ws } = state; const { ws, account } = state;
function submitLogin(name, password) { function submitLogin(name, password) {
return ws.sendAccountLogin(name, password); return ws.sendAccountLogin(name, password);
} }
@ -12,7 +12,7 @@ const addState = connect(
console.log(name, password); console.log(name, password);
return ws.sendAccountCreate(name, password); return ws.sendAccountCreate(name, password);
} }
return { account: state.account, submitLogin, submitRegister }; return { account, submitLogin, submitRegister };
}, },
); );

View File

@ -1,6 +1,6 @@
// eslint-disable-next-line // eslint-disable-next-line
const preact = require('preact'); const preact = require('preact');
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const LoginContainer = require('./login.container'); const LoginContainer = require('./login.container');
const GameContainer = require('./game.container'); const GameContainer = require('./game.container');
@ -24,23 +24,15 @@ function Main(props) {
} = props; } = props;
if (!account) { if (!account) {
return ( return <LoginContainer />;
<main>
<LoginContainer />
</main>
);
} }
if (game) { if (game) {
return ( return <GameContainer />;
<GameContainer />
);
} }
if (instance) { if (instance) {
return ( return <Instance />;
<Instance />
);
} }
if (nav === 'team') return <Team />; if (nav === 'team') return <Team />;

View File

@ -1,4 +1,4 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const Menu = require('./menu.component'); const Menu = require('./menu.component');
const actions = require('./../actions'); const actions = require('./../actions');

View File

@ -0,0 +1,19 @@
const preact = require('preact');
const { connect } = require('preact-redux');
const Header = require('./header.container');
const Main = require('./main');
const Nav = require('./nav');
const addState = connect(
state => ({ showNav: state.showNav })
);
const Mnml = ({ showNav, setShowNav }) =>
<div id="mnml" className={showNav ? 'nav-visible' : ''}>
<Header />
<Nav />
<Main />
</div>;
module.exports = addState(Mnml);

View File

@ -1,4 +1,4 @@
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const preact = require('preact'); const preact = require('preact');
const { Fragment } = require('preact'); const { Fragment } = require('preact');
const actions = require('../actions'); const actions = require('../actions');
@ -50,10 +50,15 @@ const addState = connect(
return dispatch(actions.setNav(place)); return dispatch(actions.setNav(place));
} }
function hideNav() {
return dispatch(actions.setShowNav(false));
}
return { return {
setTestGame, setTestGame,
setTestInstance, setTestInstance,
setNav, setNav,
hideNav,
}; };
} }
); );
@ -72,6 +77,7 @@ function Nav(args) {
setTestGame, setTestGame,
setTestInstance, setTestInstance,
setNav, setNav,
hideNav,
} = args; } = args;
function navTo(p) { function navTo(p) {
@ -107,7 +113,7 @@ function Nav(args) {
: null; : null;
return ( return (
<nav> <nav onClick={hideNav} >
<h2>Team</h2> <h2>Team</h2>
{teamElements} {teamElements}
<h2>Instances</h2> <h2>Instances</h2>

View File

@ -1,5 +1,5 @@
const preact = require('preact'); const preact = require('preact');
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const actions = require('../actions'); const actions = require('../actions');

View File

@ -1,42 +1,57 @@
const preact = require('preact'); const preact = require('preact');
const { useState } = require('preact/hooks'); const { Component } = require('preact');
function SpawnButton({ spawn }) { class SpawnButton extends Component {
const [name, setName] = useState(''); constructor(props) {
const [enabled, setEnabled] = useState(false); super(props);
function nameInput(e) { this.state = { value: null, enabled: false };
e.stopPropagation();
setName(e.target.value); this.handleInput = this.handleInput.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
this.enable = this.enable.bind(this);
} }
function enabledToggle(e) { handleInput(event) {
e.stopPropagation(); console.log(event.target.value);
setEnabled(true); this.setState({ value: event.target.value });
} }
return ( handleSubmit(event) {
<div event.preventDefault();
className="menu-construct spawn-btn" this.props.spawn(this.state.value);
onClick={e => enabledToggle(e)} > this.setState({ value: null, enabled: false });
<h2>+</h2> }
<input
className="login-input" enable() {
type="text" this.setState({ enabled: true });
disabled={!enabled} }
value={name}
placeholder="name" render() {
onInput={e => nameInput(e)} return (
/> <div
<button key={this.props.i}
className="login-btn" className="menu-construct spawn-btn"
disabled={!enabled} onClick={() => this.enable()} >
onClick={() => spawn(name)} <h2>+</h2>
type="submit"> <input
spawn className="login-input"
</button> type="text"
</div> disabled={!this.state.enabled}
); value={this.state.value}
placeholder="name"
onInput={this.handleInput}
/>
<button
className="login-btn"
disabled={!this.state.enabled}
onClick={this.handleSubmit}
type="submit">
spawn
</button>
</div>
);
}
} }
module.exports = SpawnButton; module.exports = SpawnButton;

View File

@ -1,5 +1,5 @@
const preact = require('preact'); const preact = require('preact');
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const addState = connect( const addState = connect(
({ game, account, resolution }) => ({ game, account, resolution }) ({ game, account, resolution }) => ({ game, account, resolution })

View File

@ -1,5 +1,5 @@
const preact = require('preact'); const preact = require('preact');
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const range = require('lodash/range'); const range = require('lodash/range');
const actions = require('./../actions'); const actions = require('./../actions');

View File

@ -1,6 +1,6 @@
const preact = require('preact'); const preact = require('preact');
const range = require('lodash/range'); const range = require('lodash/range');
const { connect } = require('react-redux'); const { connect } = require('preact-redux');
const shapes = require('./shapes'); const shapes = require('./shapes');
const { convertItem } = require('./../utils'); const { convertItem } = require('./../utils');

View File

@ -12,11 +12,11 @@ function createReducer(defaultState, actionType) {
/* eslint-disable key-spacing */ /* eslint-disable key-spacing */
module.exports = { module.exports = {
account: createReducer(null, 'SET_ACCOUNT'), account: createReducer(null, 'SET_ACCOUNT'),
activeConstruct: createReducer(null, 'SET_ACTIVE_CONSTRUCT'), activeConstruct: createReducer(null, 'SET_ACTIVE_CONSTRUCT'),
activeItem: createReducer(null, 'SET_ACTIVE_VAR'), activeItem: createReducer(null, 'SET_ACTIVE_VAR'),
activeSkill: createReducer(null, 'SET_ACTIVE_SKILL'), activeSkill: createReducer(null, 'SET_ACTIVE_SKILL'),
combiner: createReducer([null, null, null], 'SET_COMBINER'), combiner: createReducer([null, null, null], 'SET_COMBINER'),
constructs: createReducer([], 'SET_CONSTRUCTS'), constructs: createReducer([], 'SET_CONSTRUCTS'),
game: createReducer(null, 'SET_GAME'), game: createReducer(null, 'SET_GAME'),
info: createReducer(null, 'SET_INFO'), info: createReducer(null, 'SET_INFO'),
instance: createReducer(null, 'SET_INSTANCE'), instance: createReducer(null, 'SET_INSTANCE'),
@ -25,6 +25,7 @@ module.exports = {
itemInfo: createReducer({ combos: [], items: [] }, 'SET_ITEM_INFO'), itemInfo: createReducer({ combos: [], items: [] }, 'SET_ITEM_INFO'),
itemUnequip: createReducer(null, 'SET_ITEM_UNEQUIP'), itemUnequip: createReducer(null, 'SET_ITEM_UNEQUIP'),
nav: createReducer(null, 'SET_NAV'), nav: createReducer(null, 'SET_NAV'),
showNav: createReducer(null, 'SET_SHOW_NAV'),
ping: createReducer(null, 'SET_PING'), ping: createReducer(null, 'SET_PING'),
reclaiming: createReducer(false, 'SET_RECLAIMING'), reclaiming: createReducer(false, 'SET_RECLAIMING'),
resolution: createReducer(null, 'SET_RESOLUTION'), resolution: createReducer(null, 'SET_RESOLUTION'),

View File

@ -1,5 +1,4 @@
const preact = require('preact'); const preact = require('preact');
const { useEffect } = require('preact/hooks');
const get = require('lodash/get'); const get = require('lodash/get');
const anime = require('animejs').default; const anime = require('animejs').default;
@ -80,10 +79,10 @@ function clearAnimation(id) {
} }
function constructAvatar(name, id) { function constructAvatar(name, id) {
useEffect(() => { // useEffect(() => {
animateConstruct(id); // animateConstruct(id);
return () => clearAnimation(id); // return () => clearAnimation(id);
}); // });
return ( return (
<img <img
@ -96,10 +95,10 @@ function constructAvatar(name, id) {
} }
function instanceConstruct(name, id) { function instanceConstruct(name, id) {
useEffect(() => { // useEffect(() => {
animateConstruct(id); // animateConstruct(id);
return () => clearAnimation(id); // return () => clearAnimation(id);
}); // });
return ( return (
<div <div
@ -111,10 +110,10 @@ function instanceConstruct(name, id) {
} }
function gameConstructImg(name, id, combatTextEl, selectSkillTarget) { function gameConstructImg(name, id, combatTextEl, selectSkillTarget) {
useEffect(() => { // useEffect(() => {
animateConstruct(id); // animateConstruct(id);
return () => clearAnimation(id); // return () => clearAnimation(id);
}); // });
return ( return (
<div <div