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}
+
+
)}
);
}