summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--bucky/app/index.js5
-rw-r--r--bucky/bin/build-scripts.js33
-rw-r--r--bucky/bin/build-search.js3
-rw-r--r--bucky/search/lexicon.js2
-rw-r--r--bucky/util/middleware.js1
-rw-r--r--package-lock.json14
-rw-r--r--package.json1
-rw-r--r--public/assets/css/bucky.css40
-rw-r--r--views/partials/footer.ejs6
-rw-r--r--views/partials/header.ejs2
11 files changed, 94 insertions, 15 deletions
diff --git a/.gitignore b/.gitignore
index c856cdf..66152c2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,4 +17,6 @@ search.db.1
search/db/env/*
uploads
npm-debug.log
+app.min.js
+app.min.js.map
diff --git a/bucky/app/index.js b/bucky/app/index.js
index b600935..71b2d57 100644
--- a/bucky/app/index.js
+++ b/bucky/app/index.js
@@ -69,6 +69,11 @@ site.init = function(){
app.set('view engine', 'ejs')
app.set('views', path.join(__dirname, '../../views'))
app.use(express.static(path.join(__dirname, '../../public')))
+
+ // rebuild javascript after restarting server
+ if (process.env.NODE_ENV === 'production') {
+ require('../bin/build-scripts')
+ }
}
site.route = require('./router')
diff --git a/bucky/bin/build-scripts.js b/bucky/bin/build-scripts.js
new file mode 100644
index 0000000..43cb20e
--- /dev/null
+++ b/bucky/bin/build-scripts.js
@@ -0,0 +1,33 @@
+var fs = require('fs')
+var UglifyJS = require("uglify-es")
+
+var index = fs.readFileSync('views/partials/scripts.ejs', "utf8")
+
+var scripts = {}
+index.split('\n')
+ .map(line => {
+ var pz = line.split('"')
+ if (pz.length < 3) return null
+ return 'public' + pz[1]
+ })
+ .filter(fn => !! fn)
+ .forEach(fn => {
+ scripts[fn] = fs.readFileSync(fn, "utf8")
+ })
+
+var result = UglifyJS.minify(scripts, {
+ sourceMap: {
+ filename: "app.js",
+ url: "app.js.map"
+ }
+})
+if (result.error) {
+ console.error(result.error)
+}
+if (result.warnings) {
+ console.error(result.warnings)
+}
+fs.writeFileSync("public/assets/min/app.min.js", result.code, "utf8")
+fs.writeFileSync("public/assets/min/app.min.js.map", result.map, "utf8")
+
+
diff --git a/bucky/bin/build-search.js b/bucky/bin/build-search.js
new file mode 100644
index 0000000..d417087
--- /dev/null
+++ b/bucky/bin/build-search.js
@@ -0,0 +1,3 @@
+var search = require('../search/lexicon')
+search.build()
+
diff --git a/bucky/search/lexicon.js b/bucky/search/lexicon.js
index a9729fd..e6a9e84 100644
--- a/bucky/search/lexicon.js
+++ b/bucky/search/lexicon.js
@@ -9,7 +9,7 @@ var search_db = bdb('search')
var lexicon = {}
var total = 0
-build_index()
+module.exports = { build: build_index }
function build_index() {
parse_threads()
diff --git a/bucky/util/middleware.js b/bucky/util/middleware.js
index a744c89..a27e745 100644
--- a/bucky/util/middleware.js
+++ b/bucky/util/middleware.js
@@ -11,6 +11,7 @@ var middleware = module.exports = {
ensureLocals: function (req, res, next) {
res.locals.csrfToken = req.csrfToken()
res.locals.title = "bucky"
+ res.locals.env = process.env.NODE_ENV
if (req.isAuthenticated()) {
res.locals.show_header = true
}
diff --git a/package-lock.json b/package-lock.json
index d834840..71b0a4b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1837,6 +1837,11 @@
}
}
},
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
"statuses": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
@@ -1905,6 +1910,15 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
+ "uglify-es": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.2.2.tgz",
+ "integrity": "sha512-l+s5VLzFwGJfS+fbqaGf/Dfwo1MF13jLOF2ekL0PytzqEqQ6cVppvHf4jquqFok+35USMpKjqkYxy6pQyUcuug==",
+ "requires": {
+ "commander": "2.12.2",
+ "source-map": "0.6.1"
+ }
+ },
"uid-safe": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz",
diff --git a/package.json b/package.json
index 53016be..2acd59b 100644
--- a/package.json
+++ b/package.json
@@ -40,6 +40,7 @@
"serve-favicon": "^2.3.0",
"sessionstore": "^1.2.18",
"skipper": "^0.5.5",
+ "uglify-es": "^3.2.2",
"unix-crypt-td-js": "^1.0.0"
}
}
diff --git a/public/assets/css/bucky.css b/public/assets/css/bucky.css
index 23e4690..d123961 100644
--- a/public/assets/css/bucky.css
+++ b/public/assets/css/bucky.css
@@ -55,8 +55,8 @@ h1 {
margin: 0;
}
.subtitle {
- margin-top: 5px;
margin-bottom: 10px;
+ line-height: 1.5;
}
.subtitle:empty {
display: none;
@@ -520,15 +520,18 @@ pre br {
border-color: #ddd;
height: 240px;
}
-#comment_form textarea::placeholder {
- color: #000;
-}
#comment_form textarea:invalid {
background: transparent;
border-color: transparent;
height: 30px;
opacity: 0.4;
}
+#comment_form textarea:invalid::placeholder {
+ color: black;
+}
+#comment_form.focused textarea:invalid::placeholder {
+ color: #888;
+}
.black #comment_form textarea:invalid::placeholder {
color: #fff;
padding-bottom: 4px;
@@ -837,12 +840,17 @@ pre br {
.index header .search_form {
display: none;
}
+header {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
header .search_form {
- float: right;
margin-top: 10px;
+ white-space: nowrap;
}
-header .search_form input[type=text] {
- width: 150px;
+.index header .search_form input[type=text] {
+ width: 250px;
}
/* PROFILE */
@@ -922,8 +930,15 @@ header .search_form input[type=text] {
}
}
@media (max-width: 700px) {
+ html {
+ padding-bottom: 0px;
+ }
body {
- padding: 10px 10px;
+ padding: 0;
+ }
+ header {
+ flex-direction: column;
+ justify-content: flex-start;
}
h1 {
font-size: 20px;
@@ -945,17 +960,15 @@ header .search_form input[type=text] {
}
header .search_form,
.index header .search_form {
+ float: none;
display: block;
margin-top: 0;
}
- .search_form input[type='text'] {
- width: 250px;
- }
#threads td:nth-child(1) {
display: none;
}
#threads td:nth-child(2) {
- min-width: 200px;
+ min-width: 180px;
}
#threads td:nth-child(3) small {
display: none;
@@ -966,6 +979,9 @@ header .search_form input[type=text] {
#threads .size {
display: none;
}
+ .file td:nth-child(3) {
+ display: none;
+ }
#details {
flex-direction: column;
}
diff --git a/views/partials/footer.ejs b/views/partials/footer.ejs
index 163e28b..d5d82d0 100644
--- a/views/partials/footer.ejs
+++ b/views/partials/footer.ejs
@@ -1,5 +1,9 @@
</content>
<% include ../partials/404 %>
</body>
-<% include ../partials/scripts %>
+<% if (env == 'production') { %>
+ <script src="/assets/min/app.min.js"></script>
+<% } else { %>
+ <% include ../partials/scripts %>
+<% } %>
</html> \ No newline at end of file
diff --git a/views/partials/header.ejs b/views/partials/header.ejs
index f31594b..c810114 100644
--- a/views/partials/header.ejs
+++ b/views/partials/header.ejs
@@ -10,7 +10,7 @@
<body class="loading">
<header>
- <% include ../partials/searchform %>
<h1><%= title %></h1>
+ <% include ../partials/searchform %>
</header>
<content> \ No newline at end of file