atikur-rabbi commited on
Commit
4acc69f
1 Parent(s): 612094b
Files changed (11) hide show
  1. .dockerignore +2 -0
  2. .gitattributes +0 -35
  3. .gitignore +2 -0
  4. Dockerfile +19 -0
  5. README.md +1 -1
  6. app.js +29 -0
  7. package-lock.json +374 -0
  8. package.json +20 -0
  9. views/css/styles.css +45 -0
  10. views/index.html +54 -0
  11. views/sharks.html +52 -0
.dockerignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ node_modules
2
+ npm-debug.log
.gitattributes DELETED
@@ -1,35 +0,0 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ node_modules
2
+ npm-debug.log
Dockerfile ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:12-slim
2
+
3
+ # Create app directory
4
+ WORKDIR /usr/src/app
5
+
6
+ # Install app dependencies
7
+ # A wildcard is used to ensure both package.json AND package-lock.json are copied
8
+ # where available (npm@5+)
9
+ COPY package*.json ./
10
+
11
+ RUN npm install
12
+ # If you are building your code for production
13
+ # RUN npm ci --only=production
14
+
15
+ # Bundle app source
16
+ COPY . .
17
+
18
+ EXPOSE 8080
19
+ CMD [ "node", "app.js" ]
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: 🚀
4
  colorFrom: red
5
  colorTo: gray
6
  sdk: docker
 
7
  pinned: false
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
4
  colorFrom: red
5
  colorTo: gray
6
  sdk: docker
7
+ app_port: 7860
8
  pinned: false
9
  ---
10
 
 
app.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var express = require("express");
2
+ var app = express();
3
+ var router = express.Router();
4
+
5
+ var path = __dirname + '/views/';
6
+
7
+ // Constants
8
+ const PORT = 8080;
9
+ const HOST = '0.0.0.0';
10
+
11
+ router.use(function (req,res,next) {
12
+ console.log("/" + req.method);
13
+ next();
14
+ });
15
+
16
+ router.get("/",function(req,res){
17
+ res.sendFile(path + "index.html");
18
+ });
19
+
20
+ router.get("/sharks",function(req,res){
21
+ res.sendFile(path + "sharks.html");
22
+ });
23
+
24
+ app.use(express.static(path));
25
+ app.use("/", router);
26
+
27
+ app.listen(8080, function () {
28
+ console.log('Example app listening on port 8080!')
29
+ })
package-lock.json ADDED
@@ -0,0 +1,374 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "nodejs-image-demo",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 1,
5
+ "requires": true,
6
+ "dependencies": {
7
+ "accepts": {
8
+ "version": "1.3.7",
9
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
10
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
11
+ "requires": {
12
+ "mime-types": "~2.1.24",
13
+ "negotiator": "0.6.2"
14
+ }
15
+ },
16
+ "array-flatten": {
17
+ "version": "1.1.1",
18
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
19
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
20
+ },
21
+ "body-parser": {
22
+ "version": "1.19.0",
23
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
24
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
25
+ "requires": {
26
+ "bytes": "3.1.0",
27
+ "content-type": "~1.0.4",
28
+ "debug": "2.6.9",
29
+ "depd": "~1.1.2",
30
+ "http-errors": "1.7.2",
31
+ "iconv-lite": "0.4.24",
32
+ "on-finished": "~2.3.0",
33
+ "qs": "6.7.0",
34
+ "raw-body": "2.4.0",
35
+ "type-is": "~1.6.17"
36
+ }
37
+ },
38
+ "bytes": {
39
+ "version": "3.1.0",
40
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
41
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
42
+ },
43
+ "content-disposition": {
44
+ "version": "0.5.3",
45
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
46
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
47
+ "requires": {
48
+ "safe-buffer": "5.1.2"
49
+ }
50
+ },
51
+ "content-type": {
52
+ "version": "1.0.4",
53
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
54
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
55
+ },
56
+ "cookie": {
57
+ "version": "0.4.0",
58
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
59
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
60
+ },
61
+ "cookie-signature": {
62
+ "version": "1.0.6",
63
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
64
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
65
+ },
66
+ "debug": {
67
+ "version": "2.6.9",
68
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
69
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
70
+ "requires": {
71
+ "ms": "2.0.0"
72
+ }
73
+ },
74
+ "depd": {
75
+ "version": "1.1.2",
76
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
77
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
78
+ },
79
+ "destroy": {
80
+ "version": "1.0.4",
81
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
82
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
83
+ },
84
+ "ee-first": {
85
+ "version": "1.1.1",
86
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
87
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
88
+ },
89
+ "encodeurl": {
90
+ "version": "1.0.2",
91
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
92
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
93
+ },
94
+ "escape-html": {
95
+ "version": "1.0.3",
96
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
97
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
98
+ },
99
+ "etag": {
100
+ "version": "1.8.1",
101
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
102
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
103
+ },
104
+ "express": {
105
+ "version": "4.17.1",
106
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
107
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
108
+ "requires": {
109
+ "accepts": "~1.3.7",
110
+ "array-flatten": "1.1.1",
111
+ "body-parser": "1.19.0",
112
+ "content-disposition": "0.5.3",
113
+ "content-type": "~1.0.4",
114
+ "cookie": "0.4.0",
115
+ "cookie-signature": "1.0.6",
116
+ "debug": "2.6.9",
117
+ "depd": "~1.1.2",
118
+ "encodeurl": "~1.0.2",
119
+ "escape-html": "~1.0.3",
120
+ "etag": "~1.8.1",
121
+ "finalhandler": "~1.1.2",
122
+ "fresh": "0.5.2",
123
+ "merge-descriptors": "1.0.1",
124
+ "methods": "~1.1.2",
125
+ "on-finished": "~2.3.0",
126
+ "parseurl": "~1.3.3",
127
+ "path-to-regexp": "0.1.7",
128
+ "proxy-addr": "~2.0.5",
129
+ "qs": "6.7.0",
130
+ "range-parser": "~1.2.1",
131
+ "safe-buffer": "5.1.2",
132
+ "send": "0.17.1",
133
+ "serve-static": "1.14.1",
134
+ "setprototypeof": "1.1.1",
135
+ "statuses": "~1.5.0",
136
+ "type-is": "~1.6.18",
137
+ "utils-merge": "1.0.1",
138
+ "vary": "~1.1.2"
139
+ }
140
+ },
141
+ "finalhandler": {
142
+ "version": "1.1.2",
143
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
144
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
145
+ "requires": {
146
+ "debug": "2.6.9",
147
+ "encodeurl": "~1.0.2",
148
+ "escape-html": "~1.0.3",
149
+ "on-finished": "~2.3.0",
150
+ "parseurl": "~1.3.3",
151
+ "statuses": "~1.5.0",
152
+ "unpipe": "~1.0.0"
153
+ }
154
+ },
155
+ "forwarded": {
156
+ "version": "0.1.2",
157
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
158
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
159
+ },
160
+ "fresh": {
161
+ "version": "0.5.2",
162
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
163
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
164
+ },
165
+ "http-errors": {
166
+ "version": "1.7.2",
167
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
168
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
169
+ "requires": {
170
+ "depd": "~1.1.2",
171
+ "inherits": "2.0.3",
172
+ "setprototypeof": "1.1.1",
173
+ "statuses": ">= 1.5.0 < 2",
174
+ "toidentifier": "1.0.0"
175
+ }
176
+ },
177
+ "iconv-lite": {
178
+ "version": "0.4.24",
179
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
180
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
181
+ "requires": {
182
+ "safer-buffer": ">= 2.1.2 < 3"
183
+ }
184
+ },
185
+ "inherits": {
186
+ "version": "2.0.3",
187
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
188
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
189
+ },
190
+ "ipaddr.js": {
191
+ "version": "1.9.1",
192
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
193
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
194
+ },
195
+ "media-typer": {
196
+ "version": "0.3.0",
197
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
198
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
199
+ },
200
+ "merge-descriptors": {
201
+ "version": "1.0.1",
202
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
203
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
204
+ },
205
+ "methods": {
206
+ "version": "1.1.2",
207
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
208
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
209
+ },
210
+ "mime": {
211
+ "version": "1.6.0",
212
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
213
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
214
+ },
215
+ "mime-db": {
216
+ "version": "1.44.0",
217
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
218
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
219
+ },
220
+ "mime-types": {
221
+ "version": "2.1.27",
222
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
223
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
224
+ "requires": {
225
+ "mime-db": "1.44.0"
226
+ }
227
+ },
228
+ "ms": {
229
+ "version": "2.0.0",
230
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
231
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
232
+ },
233
+ "negotiator": {
234
+ "version": "0.6.2",
235
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
236
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
237
+ },
238
+ "on-finished": {
239
+ "version": "2.3.0",
240
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
241
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
242
+ "requires": {
243
+ "ee-first": "1.1.1"
244
+ }
245
+ },
246
+ "parseurl": {
247
+ "version": "1.3.3",
248
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
249
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
250
+ },
251
+ "path-to-regexp": {
252
+ "version": "0.1.7",
253
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
254
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
255
+ },
256
+ "proxy-addr": {
257
+ "version": "2.0.6",
258
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
259
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
260
+ "requires": {
261
+ "forwarded": "~0.1.2",
262
+ "ipaddr.js": "1.9.1"
263
+ }
264
+ },
265
+ "qs": {
266
+ "version": "6.7.0",
267
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
268
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
269
+ },
270
+ "range-parser": {
271
+ "version": "1.2.1",
272
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
273
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
274
+ },
275
+ "raw-body": {
276
+ "version": "2.4.0",
277
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
278
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
279
+ "requires": {
280
+ "bytes": "3.1.0",
281
+ "http-errors": "1.7.2",
282
+ "iconv-lite": "0.4.24",
283
+ "unpipe": "1.0.0"
284
+ }
285
+ },
286
+ "safe-buffer": {
287
+ "version": "5.1.2",
288
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
289
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
290
+ },
291
+ "safer-buffer": {
292
+ "version": "2.1.2",
293
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
294
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
295
+ },
296
+ "send": {
297
+ "version": "0.17.1",
298
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
299
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
300
+ "requires": {
301
+ "debug": "2.6.9",
302
+ "depd": "~1.1.2",
303
+ "destroy": "~1.0.4",
304
+ "encodeurl": "~1.0.2",
305
+ "escape-html": "~1.0.3",
306
+ "etag": "~1.8.1",
307
+ "fresh": "0.5.2",
308
+ "http-errors": "~1.7.2",
309
+ "mime": "1.6.0",
310
+ "ms": "2.1.1",
311
+ "on-finished": "~2.3.0",
312
+ "range-parser": "~1.2.1",
313
+ "statuses": "~1.5.0"
314
+ },
315
+ "dependencies": {
316
+ "ms": {
317
+ "version": "2.1.1",
318
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
319
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
320
+ }
321
+ }
322
+ },
323
+ "serve-static": {
324
+ "version": "1.14.1",
325
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
326
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
327
+ "requires": {
328
+ "encodeurl": "~1.0.2",
329
+ "escape-html": "~1.0.3",
330
+ "parseurl": "~1.3.3",
331
+ "send": "0.17.1"
332
+ }
333
+ },
334
+ "setprototypeof": {
335
+ "version": "1.1.1",
336
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
337
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
338
+ },
339
+ "statuses": {
340
+ "version": "1.5.0",
341
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
342
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
343
+ },
344
+ "toidentifier": {
345
+ "version": "1.0.0",
346
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
347
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
348
+ },
349
+ "type-is": {
350
+ "version": "1.6.18",
351
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
352
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
353
+ "requires": {
354
+ "media-typer": "0.3.0",
355
+ "mime-types": "~2.1.24"
356
+ }
357
+ },
358
+ "unpipe": {
359
+ "version": "1.0.0",
360
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
361
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
362
+ },
363
+ "utils-merge": {
364
+ "version": "1.0.1",
365
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
366
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
367
+ },
368
+ "vary": {
369
+ "version": "1.1.2",
370
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
371
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
372
+ }
373
+ }
374
+ }
package.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "nodejs-image-demo",
3
+ "version": "1.0.0",
4
+ "description": "nodejs image demo",
5
+ "author": "Sammy the Shark <sammy@example.com>",
6
+ "license": "MIT",
7
+ "main": "app.js",
8
+ "scripts": {
9
+ "start": "node app.js",
10
+ "test": "echo \"Error: no test specified\" && exit 1"
11
+ },
12
+ "keywords": [
13
+ "nodejs",
14
+ "bootstrap",
15
+ "express"
16
+ ],
17
+ "dependencies": {
18
+ "express": "^4.16.4"
19
+ }
20
+ }
views/css/styles.css ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .navbar {
2
+ margin-bottom: 0;
3
+ }
4
+
5
+ body {
6
+ background: #020A1B;
7
+ color: #ffffff;
8
+ font-family: 'Merriweather', sans-serif;
9
+ }
10
+ h1,
11
+ h2 {
12
+ font-weight: bold;
13
+ }
14
+ p {
15
+ font-size: 16px;
16
+ color: #ffffff;
17
+ }
18
+
19
+
20
+ .jumbotron {
21
+ background: #0048CD;
22
+ color: white;
23
+ text-align: center;
24
+ }
25
+ .jumbotron p {
26
+ color: white;
27
+ font-size: 26px;
28
+ }
29
+
30
+ .btn-primary {
31
+ color: #fff;
32
+ text-color: #000000;
33
+ border-color: white;
34
+ margin-bottom: 5px;
35
+ }
36
+
37
+ img, video, audio {
38
+ margin-top: 20px;
39
+ max-width: 80%;
40
+ }
41
+
42
+ div.caption: {
43
+ float: left;
44
+ clear: both;
45
+ }
views/index.html ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>About Sharks</title>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
8
+ <link href="css/styles.css" rel="stylesheet">
9
+ <link href='https://fonts.googleapis.com/css?family=Merriweather:400,700' rel='stylesheet' type='text/css'>
10
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
11
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
12
+ </head>
13
+ <body>
14
+ <nav class="navbar navbar-inverse navbar-static-top">
15
+ <div class="container">
16
+ <div class="navbar-header">
17
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
18
+ <span class="sr-only">Toggle navigation</span>
19
+ <span class="icon-bar"></span>
20
+ <span class="icon-bar"></span>
21
+ <span class="icon-bar"></span>
22
+ </button>
23
+ <a class="navbar-brand" href="#">Everything Sharks</a>
24
+ </div>
25
+ <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
26
+ <ul class="nav navbar-nav mr-auto">
27
+ <li class="active"><a href="/">Home</a></li>
28
+ <li><a href="/sharks">Sharks</a></li>
29
+ </ul>
30
+ </div>
31
+ </div>
32
+ </nav>
33
+ <div class="jumbotron">
34
+ <div class="container">
35
+ <h1>Want to Learn About Sharks?</h1>
36
+ <p>Are you ready to learn about sharks?</p>
37
+ <br>
38
+ <p><a class="btn btn-primary btn-lg" href="/sharks" role="button">Get Shark Info</a></p>
39
+ </div>
40
+ </div>
41
+ <div class="container">
42
+ <div class="row">
43
+ <div class="col-md-6">
44
+ <h3>Not all sharks are alike</h3>
45
+ <p>Though some are dangerous, sharks generally do not attack humans. Out of the 500 species known to researchers, only 30 have been known to attack humans.</p>
46
+ </div>
47
+ <div class="col-md-6">
48
+ <h3>Sharks are ancient</h3>
49
+ <p>There is evidence to suggest that sharks lived up to 400 million years ago.</p>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </body>
54
+ </html>
views/sharks.html ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>About Sharks</title>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
8
+ <link href="css/styles.css" rel="stylesheet">
9
+ <link href='https://fonts.googleapis.com/css?family=Merriweather:400,700' rel='stylesheet' type='text/css'>
10
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
11
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
12
+ </head>
13
+ <nav class="navbar navbar-inverse navbar-static-top">
14
+ <div class="container">
15
+ <div class="navbar-header">
16
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
17
+ <span class="sr-only">Toggle navigation</span>
18
+ <span class="icon-bar"></span>
19
+ <span class="icon-bar"></span>
20
+ <span class="icon-bar"></span>
21
+ </button>
22
+ <a class="navbar-brand" href="#">Everything Sharks</a>
23
+ </div>
24
+ <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
25
+ <ul class="nav navbar-nav mr-auto">
26
+ <li><a href="/">Home</a></li>
27
+ <li class="active"><a href="/sharks">Sharks</a></li>
28
+ </ul>
29
+ </div>
30
+ </div>
31
+ </nav>
32
+ <div class="jumbotron text-center">
33
+ <h1>Shark Info</h1>
34
+ </div>
35
+ <div class="container">
36
+ <div class="row">
37
+ <div class="col-md-6">
38
+ <p>
39
+ <div class="caption">Some sharks are known to be dangerous to humans, though many more are not. The sawshark, for example, is not considered a threat to humans.</div>
40
+ <img src="https://assets.digitalocean.com/articles/docker_node_image/sawshark.jpg" alt="Sawshark">
41
+ </p>
42
+ </div>
43
+ <div class="col-md-6">
44
+ <p>
45
+ <div class="caption">Other sharks are known to be friendly and welcoming!</div>
46
+ <img src="https://assets.digitalocean.com/articles/docker_node_image/sammy.png" alt="Sammy the Shark">
47
+ </p>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ </body>
52
+ </html>