From 5c71a0f73717bffefb5e23a9e100adb62fc54a61 Mon Sep 17 00:00:00 2001
From: Philip Paquette <pcpaquette@gmail.com>
Date: Sun, 7 Jul 2019 09:23:59 -0400
Subject: Updated the web interface to have 3 tabs - Results / Messages /
 Current

- Updated dependencies in package-lock.json
- Set default homepage to "." so that built pages are relative to "index.html".
- Add module "helmet" to handle page title.
- Simplified page loading (replace static function builder with direct call to a method with component as argument).
- Move function loadGameFromDisk in a separate file.
- Use React context to access page object.
- Add a new React component "Navigation" and simplify page rendering.
- Add ability to choose power for any kind of loaded game.

In phase history:
- Show messages from all past and currently displayed phase.
- Display messages from past phase with gray background.
- Show messages per protagonist in tabs.
- Show message phase in message header
- Display message wide (header left, body right).

- Display short names for powers in message tabs header.
- Add warn function to page component.
- Messages from previous phase are displayed with gray color text.
- Game registration password input is displayed only if required
- On games page:
  - sorted by descending timestamp created.
  - In table, game ID is displayed with human readable created date.
- Prevent messages from displaying twice.
- Re-add checkbox "show orders" to display arrow orders on past maps.
- Handle HTML break-lines <br/> and remove all other HTML tags when displaying messages.
- Use latest phase as current game phase when loading a game from disk.
---
 diplomacy/web/src/gui/core/button.jsx | 52 +++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100644 diplomacy/web/src/gui/core/button.jsx

(limited to 'diplomacy/web/src/gui/core/button.jsx')

diff --git a/diplomacy/web/src/gui/core/button.jsx b/diplomacy/web/src/gui/core/button.jsx
new file mode 100644
index 0000000..0d5dadd
--- /dev/null
+++ b/diplomacy/web/src/gui/core/button.jsx
@@ -0,0 +1,52 @@
+import React from "react";
+import PropTypes from "prop-types";
+
+export class Button extends React.Component {
+    /** Bootstrap button.
+     * Bootstrap classes:
+     * - btn
+     * - btn-primary
+     * - mx-1 (margin-left 1px, margin-right 1px)
+     * Props: title (str), onClick (function).
+     * **/
+    // title
+    // onClick
+    // pickEvent = false
+    // large = false
+    // small = false
+
+    constructor(props) {
+        super(props);
+        this.onClick = this.onClick.bind(this);
+    }
+
+    onClick(event) {
+        if (this.props.onClick)
+            this.props.onClick(this.props.pickEvent ? event : null);
+    }
+
+    render() {
+        return (
+            <button
+                className={`btn btn-${this.props.color || 'secondary'}` + (this.props.large ? ' btn-block' : '') + (this.props.small ? ' btn-sm' : '')}
+                disabled={this.props.disabled}
+                onClick={this.onClick}>
+                <strong>{this.props.title}</strong>
+            </button>
+        );
+    }
+}
+
+Button.propTypes = {
+    title: PropTypes.string.isRequired,
+    onClick: PropTypes.func.isRequired,
+    color: PropTypes.string,
+    large: PropTypes.bool,
+    small: PropTypes.bool,
+    pickEvent: PropTypes.bool,
+    disabled: PropTypes.bool
+};
+
+Button.defaultPropTypes = {
+    disabled: false
+};
-- 
cgit v1.2.3

