diff --git a/lib/react/message.jsx b/lib/react/message.jsx
index e7557da..a1a01f2 100644
--- a/lib/react/message.jsx
+++ b/lib/react/message.jsx
@@ -1,5 +1,177 @@
"use strict";
+const MessageBrowser = React.createClass({
+ getInitialState() {
+ return {
+ browserState: "",
+ messages: [],
+ page: 0,
+ limit: 250,
+ search: ""
+ }
+ },
+
+ handleNextPage(e) {
+ e.preventDefault();
+ const page = this.state.page;
+ this.setState({ page: page + 1 });
+ this.loadMessages();
+ },
+
+ handlePreviousPage(e) {
+ e.preventDefault();
+ const page = this.state.page;
+ if (page < 1) return;
+ this.setState({ page: page - 1 });
+ this.loadMessages();
+ },
+
+ pageHandlers() {
+ let previous;
+ if (this.state.page > 0) {
+ previous = (
+ Prev
+ );
+ }
+ let next;
+ if (this.state.messages.length === this.state.limit) {
+ next = (
+ Next
+ );
+ }
+ return (
+
+ {previous}
+
+ {this.state.page}
+
+ {next}
+
+ );
+ },
+
+ loadMessages() {
+ const limit = this.state.limit;
+ const page = this.state.page;
+ let data = {
+ limit: limit,
+ page: page
+ };
+
+ if (this.state.search.length) {
+ data.query = this.state.search;
+ }
+
+ this.setState({ browserState: "Retrieving messages"});
+ $.ajax({
+ url: "/api/messages",
+ data: data
+ })
+ .done(data => {
+ this.setState({
+ messages: data.messages,
+ browserState: ""
+ });
+ })
+ .fail(error => {
+ console.error(error);
+ this.setState({
+ browserState: `Unable to retrieve messages.`
+ });
+ })
+ },
+
+ componentDidMount() {
+ this.loadMessages();
+ },
+
+ updateLimit(e) {
+ let newLimit = parseInt(e.target.value, 10);
+ if (isNaN(newLimit) || newLimit > 250) newLimit = 250;
+ this.setState({ limit: newLimit });
+ },
+
+ updateSearch(e) {
+ this.setState({ search: e.target.value });
+ },
+
+ render() {
+ let browserState;
+ if (this.state.browserState.length) {
+ browserState = (
+
+
{this.state.browserState}
+
+ );
+ }
+ const messages = this.state.messages.map(message => {
+ return (
+
+ {(new Date(message.createdAt)).toString()} |
+ {message.author.username} |
+ {message.content} |
+ {message._id} |
+
+ );
+ });
+ return (
+
+
+
+
+
+
+
+
+
Page Control
+ {this.pageHandlers()}
+
+
+
+
+ {browserState}
+
+
+
+
+ Date |
+ Author |
+ Message |
+ ID |
+
+
+
+ {messages}
+
+
+
+
+ );
+ }
+});
+
var Chatroom = React.createClass({
getInitialState() {
return {
diff --git a/spec/messages.integration.js b/spec/messages.integration.js
index 5f4d72f..42d0085 100644
--- a/spec/messages.integration.js
+++ b/spec/messages.integration.js
@@ -41,8 +41,7 @@ describe("Messages", () => {
describe("JSON Api", () => {
it ("returns most recent messages", done => {
request(app)
- .get("/messages")
- .set("Accept", "application/json")
+ .get("/api/messages")
.expect("Content-Type", /json/)
.expect(200)
.end((error, response) => {
@@ -56,11 +55,10 @@ describe("Messages", () => {
});
it ("is sensitive to limit", done => {
request(app)
- .get("/messages")
+ .get("/api/messages")
.query({
limit: 1
})
- .set("Accept", "application/json")
.expect("Content-Type", /json/)
.expect(200)
.end((error, response) => {
@@ -76,12 +74,11 @@ describe("Messages", () => {
it ("returns a maximum of last 250 messages");
it ("is sensitive to pagination", done => {
request(app)
- .get("/messages")
+ .get("/api/messages")
.query({
limit: 1,
page: 2
})
- .set("Accept", "application/json")
.expect("Content-Type", /json/)
.expect(200)
.end((error, response) => {
@@ -96,11 +93,10 @@ describe("Messages", () => {
});
it ("is sensitive to search terms", done => {
request(app)
- .get("/messages")
+ .get("/api/messages")
.query({
query: "5"
})
- .set("Accept", "application/json")
.expect("Content-Type", /json/)
.expect(200)
.end((error, response) => {
@@ -119,7 +115,6 @@ describe("Messages", () => {
it ("renders message browser", done => {
request(app)
.get("/messages")
- .set("Accept", "text/html; charset=utf-8")
.expect("Content-Type", /html/)
.expect(200)
.end((error, response) => {
diff --git a/views/index.hbs b/views/index.hbs
deleted file mode 100644
index b204b72..0000000
--- a/views/index.hbs
+++ /dev/null
@@ -1,58 +0,0 @@
-
- {{>menu}}
-
-
-
-
-
-
-
-
-
-
Authenticating your ENSL account
-
-
-
-
-
-
-
-
-
-
-
-
-
-
You're currently barred from joining gathers
-
Either wait for the ban to expire or talk to an admin to get it lifted
-
-
See the ban list
-
-
-
-
-
-
-
-
-
-
You need to be logged in to the ENSL website ({{ redirect }}) to access gathers
-
If you are logged on, try visiting a few pages on ENSL.org so the server can update your cookies
-
If this error persists please contact an admin to fix it
-
-
Go to website
-
-
-
-
-
-
-
-{{>foot}}
diff --git a/views/messages.hbs b/views/messages.hbs
index bb47980..5ba4f88 100644
--- a/views/messages.hbs
+++ b/views/messages.hbs
@@ -6,10 +6,18 @@
Message Browser
+
+
+
+
\ No newline at end of file