Skip to content

Commit 70398f1

Browse files
committed
Set up webpack
1 parent 9a54b73 commit 70398f1

8 files changed

+163
-94
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ _site
44
Gemfile.lock
55
.bundle
66
vendor
7+
node_modules

README

+10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
Getting started:
2+
================
23

34
Install jekyll:
45

@@ -8,8 +9,17 @@ Serve files:
89

910
$ bundle exec jekyll serve
1011

12+
Install webpack/javascript dependencies
13+
14+
$ npm install
15+
16+
Build Javascript:
17+
18+
$ webpack
19+
1120

1221
Misc commands
22+
=============
1323

1424
jq command to convert old database
1525

_config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ exclude:
88
- csv2yaml.py
99
- json2yaml.py
1010
- drive.py
11+
- node_modules
1112

1213
kramdown:
1314
show_warnings: true

computers/computers.js

-88
This file was deleted.

computers/computers.jsx

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
'use strict';
2+
3+
var moment = require('moment');
4+
var React = require('react');
5+
var ReactDOM = require('react-dom');
6+
7+
// https://reactjs.org/docs/faq-ajax.html
8+
9+
class ComputersList extends React.Component {
10+
constructor(props) {
11+
super(props);
12+
this.state = {
13+
computers: [],
14+
users: [],
15+
isLoaded: false,
16+
error: null
17+
};
18+
}
19+
20+
componentDidMount() {
21+
fetch("/computers/json")
22+
.then(res => res.json())
23+
.then(
24+
(result) => {
25+
this.setState({
26+
isLoaded: true,
27+
computers: result.computers,
28+
users: result.users
29+
});
30+
},
31+
(error) => {
32+
this.setState({
33+
isLoaded: true,
34+
error
35+
});
36+
}
37+
)
38+
}
39+
40+
render() {
41+
const { computers, users, isLoaded, error } = this.state;
42+
if (error) {
43+
console.log(error);
44+
return <div>Error fetching data.</div>
45+
} else if (!isLoaded) {
46+
return <div>Loading...</div>
47+
} else {
48+
return <div>
49+
<Computers computers={this.state.computers}/>
50+
<Users users={this.state.users}/>
51+
</div>
52+
}
53+
}
54+
}
55+
56+
class Computers extends React.Component {
57+
render() {
58+
const computers = this.props.computers;
59+
return <table>
60+
{computers.map(computer =>
61+
<tr>
62+
<td>{computer.hostname}</td>
63+
<td>{computer.user_id}</td>
64+
<td>{moment(computer.local_timestamp.fromNow())}</td>
65+
</tr>
66+
)}
67+
</table>
68+
}
69+
}
70+
71+
class Users extends React.Component {
72+
render() {
73+
const users = this.props.users;
74+
return <table>
75+
{users.map(user =>
76+
<tr>
77+
<td>{user.username}</td>
78+
<td>{moment(user.last_ping).fromNow()}</td>
79+
<td>{moment().startOf('day').add(user.time_spent, 'seconds').format('HH:mm:ss')}</td>
80+
</tr>
81+
)}
82+
</table>
83+
}
84+
}
85+
86+
ReactDOM.render(<ComputersList />, document.getElementById('computers-list'));

computers/computers.md

+2-6
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ title: NSA Backdoor
33
permalink: /computers/
44
---
55

6-
<div id="computers-list"></div>
6+
<div id="computers-list">Enable Javascript :)</div>
77

8-
<script src="https://momentjs.com/downloads/moment.min.js" crossorigin></script>
9-
<script src="https://unpkg.com/axios/dist/axios.min.js" crossorigin></script>
10-
<script src="https://unpkg.com/react@16/umd/react.production.min.js" crossorigin></script>
11-
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js" crossorigin></script>
12-
<script src="{% link computers/computers.js %}"></script>
8+
<script src="/assets/js/computers.bundle.js"></script>

package.json

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"name": "static-website",
3+
"version": "1.0.0",
4+
"description": "CSUA static website using Jekyll",
5+
"main": "",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "git+https://github.com/CSUA/static-website.git"
12+
},
13+
"author": "Philip Nunez",
14+
"license": "",
15+
"bugs": {
16+
"url": "https://github.com/CSUA/static-website/issues"
17+
},
18+
"homepage": "https://github.com/CSUA/static-website#readme",
19+
"dependencies": {
20+
"moment": "^2.24.0",
21+
"react": "^16.7.0",
22+
"react-dom": "^16.7.0"
23+
},
24+
"devDependencies": {
25+
"@babel/core": "^7.2.2",
26+
"@babel/preset-env": "^7.3.1",
27+
"@babel/preset-react": "^7.0.0",
28+
"babel-loader": "^8.0.5",
29+
"webpack": "^4.29.0"
30+
},
31+
"babel": {
32+
"presets": [
33+
"@babel/preset-env",
34+
"@babel/preset-react"
35+
]
36+
}
37+
}

webpack.config.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var path = require('path');
2+
3+
module.exports = {
4+
entry: {
5+
computers: './computers/computers.jsx',
6+
},
7+
output: {
8+
path: path.resolve(__dirname, "assets/js"),
9+
filename: "[name].bundle.js"
10+
},
11+
module: {
12+
rules: [
13+
{
14+
test: /\.jsx?$/,
15+
exclude: /(node_modules)/,
16+
use: {
17+
loader: "babel-loader",
18+
}
19+
}
20+
]
21+
},
22+
resolve: {
23+
extensions: ['*', '.js', '.jsx']
24+
}
25+
};
26+
// vim:et:sw=2:ts=2

0 commit comments

Comments
 (0)