diff --git a/public/content/task_list.md b/public/content/task_list.md index 4b5cebc..5de6f8e 100644 --- a/public/content/task_list.md +++ b/public/content/task_list.md @@ -9,16 +9,15 @@ Minor --- * Disable attack button with no soldiers. -* Implement combat log rows. * Implement game ladder sorting. * Implement badges. -* Implement Patreon thank you page. Patch --- * Game Balance. * Images to social media instead of links. +* Center the common links on mobile. Wishlist --- diff --git a/public/styles/shared.css b/public/styles/shared.css index c5b624c..e56449e 100644 --- a/public/styles/shared.css +++ b/public/styles/shared.css @@ -47,13 +47,21 @@ h2 { } br { - padding-bottom: .5rem; + padding-bottom: .5em; +} + +div.break.half { + padding-bottom: .25em; +} + +div.break { + padding-bottom: .5em; } ul { list-style-type: disc; list-style-position: inside; - padding-bottom: .5rem; + padding-bottom: .5em; } a { @@ -106,7 +114,7 @@ footer { } .central p { - padding-bottom: .5rem; + padding-bottom: .5em; } /* components */ @@ -244,7 +252,7 @@ footer { justify-content: flex-start; } -.row { +.table .row { flex: 1; display: flex; flex-direction: row; @@ -252,23 +260,17 @@ footer { } @media screen and (max-width: 480px) { - .row { + .table .row { flex-direction: column; - border-style: solid; - border-color: lightblue; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1; } } -.col { +.table .row .col { flex: 1 1 1%; min-width: 0; } -.table.noCollapse .row { +.table.noCollapse .row, .table .row.noCollapse { flex-direction: row; border-style: none; } @@ -276,7 +278,7 @@ footer { /* bits and pieces */ .logoutButton { align-self: stretch; - margin-bottom: .5rem; + margin-bottom: .5em; } .newsLine { @@ -294,3 +296,22 @@ pre { margin-top: 1em; margin-bottom: 1em; } + +.show.mobile { + display: none; +} + +@media screen and (max-width: 480px) { + .show.mobile { + display: block; + } + + .hide.mobile { + display: none; + } +} + +.central p.equipmentTextPadding { + padding-top: .25em; + padding-bottom: .25em; +} diff --git a/src/components/pages/combat_log.jsx b/src/components/pages/combat_log.jsx index 65a23ff..bfc1ccb 100644 --- a/src/components/pages/combat_log.jsx +++ b/src/components/pages/combat_log.jsx @@ -74,11 +74,11 @@ class CombatLog extends React.Component { buttonHeader() { return ( -
+
-
-
+
+
diff --git a/src/components/pages/ladder.jsx b/src/components/pages/ladder.jsx index 89db9a2..38c470b 100644 --- a/src/components/pages/ladder.jsx +++ b/src/components/pages/ladder.jsx @@ -37,6 +37,7 @@ class Ladder extends React.Component {

Game Ladder

+
+
-
-
+
+
diff --git a/src/components/panels/combat_log_record.jsx b/src/components/panels/combat_log_record.jsx new file mode 100644 index 0000000..9d5acf2 --- /dev/null +++ b/src/components/panels/combat_log_record.jsx @@ -0,0 +1,68 @@ +import React from 'react'; +import { withRouter, Link } from 'react-router-dom'; +import PropTypes from 'prop-types'; + +class CombatLogRecord extends React.Component { + constructor(props) { + super(props); + + this.state = { + // + }; + } + + render() { + return ( +
+
+
+
+

{this.parseDate(this.props.eventTime)}

+

Atk: {this.prettyName(this.props.attacker)} ({this.props.attackingUnits} units)

+

Def: {this.prettyName(this.props.defender)} ({this.props.defendingUnits} units)

+
+ +
+

Victor: {this.capitalizeFirstLetter(this.props.victor)} {this.props.undefended ? '(undefended)' : ''}

+

Gold: {this.props.spoilsGold}

+

Atk. Deaths: {this.props.attackerCasualties}

+
+
+ ); + } + + prettyName(name) { + //make the enemy name a link + if (name === this.props.username) { + return name; + } else { + return ({name}); + } + } + + parseDate(eventTime) { + let month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + + let date = new Date(eventTime); + return `${date.getDate()} ${month[date.getMonth()]}`; + } + + capitalizeFirstLetter(str) { + return str.charAt(0).toUpperCase() + str.slice(1); + } +}; + +CombatLogRecord.propTypes = { + username: PropTypes.string.isRequired, + eventTime: PropTypes.string.isRequired, + attacker: PropTypes.string.isRequired, + defender: PropTypes.string.isRequired, + attackingUnits: PropTypes.number.isRequired, + defendingUnits: PropTypes.number.isRequired, + undefended: PropTypes.number.isRequired, + victor: PropTypes.string.isRequired, + spoilsGold: PropTypes.number.isRequired, + attackerCasualties: PropTypes.number.isRequired +}; + +export default withRouter(CombatLogRecord); \ No newline at end of file diff --git a/src/components/panels/equipment.jsx b/src/components/panels/equipment.jsx index f2a579c..f4a34b3 100644 --- a/src/components/panels/equipment.jsx +++ b/src/components/panels/equipment.jsx @@ -36,16 +36,25 @@ class Equipment extends React.Component {

Name

Type

Owned

-

Buy

-

Sell

+

Buy

+

Sell

- {Object.keys(display).map((key) =>
-

{display[key].name}

-

{display[key].type}

-

{display[key].owned}

- {display[key].purchasable ? :
} - {display[key].saleable ? :
} +
+ + {Object.keys(display).map((key) =>
+
+
+
+

{display[key].name}

+

{display[key].type}

+

{display[key].owned}

+
+ {display[key].purchasable ? :
} + {display[key].saleable ? :
} +
+
+
)}
diff --git a/src/components/panels/paged_combat_log.jsx b/src/components/panels/paged_combat_log.jsx index fdfcdf9..505c56e 100644 --- a/src/components/panels/paged_combat_log.jsx +++ b/src/components/panels/paged_combat_log.jsx @@ -3,13 +3,15 @@ import { withRouter, Link } from 'react-router-dom'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; +import CombatLogRecord from './combat_log_record.jsx'; + class PagedCombatLog extends React.Component { constructor(props) { super(props); this.state = { // - } + }; if (props.getFetch) { props.getFetch(() => this.sendRequest('/combatlogrequest', {username: props.username, start: props.start, length: props.length})); @@ -17,40 +19,9 @@ class PagedCombatLog extends React.Component { } render() { - //make the enemy name a link - const PrettyName = (props) => { - if (props.name === this.props.username) { - return (

{props.name}

); - } else { - return (

{props.name}

); - } - }; - return ( -
-
-

When

-

Attacker

-

Defender

-

Attacking Force

-

Defending Force

-

Undefended?

-

Victor

-

Gold Stolen

-

Attacker Deaths

-
- - {Object.keys(this.state).map((key) =>
-

{ this.parseDate(this.state[key].eventTime) }

- - -

{this.state[key].attackingUnits}

-

{this.state[key].defendingUnits}

-

{this.state[key].undefended ? 'yes' : 'no'}

-

{this.state[key].victor}

-

{this.state[key].spoilsGold}

-

{this.state[key].attackerCasualties}

-
)} +
+ {Object.keys(this.state).map((key) => )}
); } @@ -86,13 +57,6 @@ class PagedCombatLog extends React.Component { ...args })); } - - parseDate(eventTime) { - let month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - - let date = new Date(eventTime); - return `${date.getDate()} ${month[date.getMonth()]}`; - } }; PagedCombatLog.propTypes = { diff --git a/src/components/panels/paged_ladder.jsx b/src/components/panels/paged_ladder.jsx index aba3912..4480715 100644 --- a/src/components/panels/paged_ladder.jsx +++ b/src/components/panels/paged_ladder.jsx @@ -23,12 +23,16 @@ class PagedLadder extends React.Component {

Recruits

Gold

- {Object.keys(this.state).map((key) =>
-

{this.state[key].username}

-

{this.state[key].soldiers}

-

{this.state[key].recruits}

-

{this.state[key].gold}

-
)} + {Object.keys(this.state).map((key) =>
+
+
+
+

{this.state[key].username}

+

{this.state[key].soldiers}

+

{this.state[key].recruits}

+

{this.state[key].gold}

+
+
)}
); }