Browse Source

Updated

Moved authors info to AUTHORS file.

Updated Git urls in package.json file.

Added .stylelintrc.

Updated all CSS files to respect current Stylelint guidelines.

Updated dependency: knex.js.

Fixed notice message in no-js version of album public pages.

Bumped v1 version string.
Bobby Wibowo 1 month ago
parent
commit
10a464bc73
15 changed files with 1592 additions and 348 deletions
  1. 0 5
      .markdownlint.json
  2. 7 0
      .stylelintrc
  3. 4 0
      AUTHORS
  4. 3 0
      database/db.js
  5. 7 5
      package.json
  6. 2 2
      public/css/album.css
  7. 9 9
      public/css/auth.css
  8. 41 41
      public/css/dashboard.css
  9. 62 62
      public/css/home.css
  10. 46 46
      public/css/style.css
  11. 35 35
      public/css/sweetalert.css
  12. 16 16
      public/css/thumbs.css
  13. 1 1
      views/_globals.njk
  14. 1 1
      views/album.njk
  15. 1358 125
      yarn.lock

+ 0 - 5
.markdownlint.json

@@ -1,5 +0,0 @@
-{
-  "default": true,
-  "MD013": false,
-  "MD040": false
-}

+ 7 - 0
.stylelintrc

@@ -0,0 +1,7 @@
+{
+  "extends": "stylelint-config-standard",
+  "rules": {
+    "declaration-block-trailing-semicolon": "never",
+    "indentation": 2
+  }
+}

+ 4 - 0
AUTHORS

@@ -0,0 +1,4 @@
+# Author
+Bobby Wibowo <[email protected]>
+# Original author
+Pitu

+ 3 - 0
database/db.js

@@ -2,6 +2,9 @@ const logger = require('./../logger')
 const perms = require('./../controllers/permissionController')
 const randomstring = require('randomstring')
 
+// TODO: Auto-detect missing tables/columns here
+// That way we will no longer need the migration script
+
 const init = function (db) {
   // Create the tables we need to store galleries and files
   db.schema.hasTable('albums').then(exists => {

+ 7 - 5
package.json

@@ -2,13 +2,12 @@
   "name": "lolisafe",
   "version": "3.0.0",
   "description": "Blazing fast file uploader and awesome bunker written in node! 🚀",
-  "author": "Pitu",
   "repository": {
     "type": "git",
-    "url": "https://github.com/WeebDev/lolisafe"
+    "url": "https://github.com/BobbyWibowo/lolisafe"
   },
   "bugs": {
-    "url": "https://github.com/WeebDev/lolisafe/issues"
+    "url": "https://github.com/BobbyWibowo/lolisafe/issues"
   },
   "engines": {
     "node": ">=8.0.0"
@@ -19,6 +18,7 @@
     "startdev": "env NODE_ENV=development node ./lolisafe.js",
     "pm2": "pm2 start --name safe ./lolisafe.js",
     "cf-purge": "node ./scripts/cf-purge.js",
+    "clean-up": "node ./scripts/clean-up.js",
     "delete-expired": "node ./scripts/delete-expired.js",
     "thumbs": "node ./scripts/thumbs.js",
     "pull": "git stash; git pull; yarn install --production; git stash pop; echo OK."
@@ -32,7 +32,7 @@
     "fluent-ffmpeg": "^2.1.2",
     "helmet": "^3.21.0",
     "jszip": "^3.2.2",
-    "knex": "^0.19.3",
+    "knex": "^0.19.4",
     "multer": "^1.4.2",
     "node-fetch": "^2.6.0",
     "nunjucks": "^3.2.0",
@@ -48,6 +48,8 @@
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-node": "^10.0.0",
     "eslint-plugin-promise": "^4.2.1",
-    "eslint-plugin-standard": "^4.0.1"
+    "eslint-plugin-standard": "^4.0.1",
+    "stylelint": "^10.1.0",
+    "stylelint-config-standard": "^18.3.0"
   }
 }

+ 2 - 2
public/css/album.css

@@ -1,9 +1,9 @@
 .section {
-  background: none;
+  background: none
 }
 
 @media screen and (max-width: 768px) {
   .description {
-    text-align: center;
+    text-align: center
   }
 }

+ 9 - 9
public/css/auth.css

@@ -1,20 +1,20 @@
 input {
-  background: rgba(0, 0, 0, 0);
+  background: rgba(0, 0, 0, 0)
 }
 
 input,
 a {
-  border-left: 0px;
-  border-top: 0px;
-  border-right: 0px;
-  border-radius: 0px;
+  border-left: 0;
+  border-top: 0;
+  border-right: 0;
+  border-radius: 0;
   -webkit-box-shadow: 0 0 0;
-  box-shadow: 0 0 0;
+  box-shadow: 0 0 0
 }
 
 .select-wrapper {
   text-align: center;
-  margin-bottom: 10px;
+  margin-bottom: 10px
 }
 
 #login .input {
@@ -23,9 +23,9 @@ a {
   border-left: 0;
   border-radius: 0;
   padding-right: calc(0.75em + 1px);
-  padding-left: calc(0.75em + 1px);
+  padding-left: calc(0.75em + 1px)
 }
 
 #login .control .button {
-  border-radius: 0;
+  border-radius: 0
 }

+ 41 - 41
public/css/dashboard.css

@@ -1,15 +1,15 @@
 body {
   -webkit-animation: none;
-  animation: none;
+  animation: none
 }
 
 #dashboard {
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s;
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s
 }
 
 .section {
-  background: none;
+  background: none
 }
 
 .menu-list a {
@@ -18,49 +18,49 @@ body {
   -webkit-user-select: none;
   -moz-user-select: none;
   -ms-user-select: none;
-  user-select: none;
+  user-select: none
 }
 
 .menu-list a:hover {
   color: #60a8dc;
-  background-color: #4d4d4d;
+  background-color: #4d4d4d
 }
 
 .menu-list a.is-active {
   color: #eff0f1;
-  background-color: #3794d2;
+  background-color: #3794d2
 }
 
 .menu-list a[disabled] {
   color: #7a7a7a;
-  cursor: not-allowed;
+  cursor: not-allowed
 }
 
 .menu-list a[disabled]:hover {
-  background: none;
+  background: none
 }
 
 ul#albumsContainer {
   border-left: 0;
-  padding-left: 0;
+  padding-left: 0
 }
 
 ul#albumsContainer li {
   border-left: 1px solid #898b8d;
-  padding-left: .75em;
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s;
+  padding-left: 0.75em;
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s
 }
 
 #page.fade-in {
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s
 }
 
 .pagination a:not([disabled]) {
   color: #eff0f1;
   border-color: #4d4d4d;
-  background-color: #31363b;
+  background-color: #31363b
 }
 
 a.pagination-link:not(.is-current):hover,
@@ -68,96 +68,96 @@ a.pagination-next:not([disabled]):hover,
 a.pagination-previous:not([disabled]):hover {
   color: #eff0f1;
   border-color: #60a8dc;
-  background-color: #31363b;
+  background-color: #31363b
 }
 
 a.pagination-link.is-current {
   background-color: #3794d2;
-  border-color: #3794d2;
+  border-color: #3794d2
 }
 
 a.pagination-link.is-current:hover {
-  border-color: #60a8dc;
+  border-color: #60a8dc
 }
 
 li[data-action="page-ellipsis"] {
-  cursor: pointer;
+  cursor: pointer
 }
 
 .label {
-  color: #bdc3c7;
+  color: #bdc3c7
 }
 
 .menu-list li ul {
-  border-left-color: #898b8d;
+  border-left-color: #898b8d
 }
 
 .image-container .checkbox {
   position: absolute;
-  top: .75rem;
-  left: .75rem;
+  top: 0.75rem;
+  left: 0.75rem
 }
 
 .no-touch .image-container .checkbox {
-  opacity: .5;
+  opacity: 0.5
 }
 
 .no-touch .image-container .controls,
 .no-touch .image-container .details {
-  opacity: 0;
+  opacity: 0
 }
 
 .no-touch .image-container:hover .checkbox,
 .no-touch .image-container:hover .controls,
 .no-touch .image-container:hover .details {
-  opacity: 1;
+  opacity: 1
 }
 
 #page {
   /* fix overflow issue with flex */
-  min-width: 0;
+  min-width: 0
 }
 
 .table-container {
-  overflow-x: auto;
+  overflow-x: auto
 }
 
 .table {
   color: #bdc3c7;
   background-color: #31363b;
-  font-size: .75rem;
+  font-size: 0.75rem
 }
 
 .table tr:hover,
 .table.is-striped tbody tr:nth-child(2n) {
-  background: none;
+  background: none
 }
 
 .table.is-striped tbody tr:hover,
 .table.is-striped tbody tr:nth-child(2n):hover,
 .tag {
-  background-color: #4d4d4d;
-}
-
-.table thead td,
-.table thead th {
-  color: #eff0f1;
-  background-color: #ff3860;
+  background-color: #4d4d4d
 }
 
 .table td,
 .table th {
   border: 0;
-  white-space: nowrap;
+  white-space: nowrap
 }
 
 .table th {
   color: #eff0f1;
-  height: 2.25em;
+  height: 2.25em
+}
+
+.table thead td,
+.table thead th {
+  color: #eff0f1;
+  background-color: #ff3860
 }
 
 .table .cell-indent {
-  padding-left: 2.25em;
+  padding-left: 2.25em
 }
 
 .is-linethrough {

+ 62 - 62
public/css/home.css

@@ -17,43 +17,43 @@
   -webkit-animation-timing-function: cubic-bezier(0, 0.71, 0.29, 1);
   animation-timing-function: cubic-bezier(0, 0.71, 0.29, 1);
   -webkit-box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
-  box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
+  box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2)
 }
 
 #b img.logo {
-  max-height: 200px;
+  max-height: 200px
 }
 
 #dropzone * {
-  pointer-events: none;
+  pointer-events: none
 }
 
 #tokenContainer,
 #panel {
-  display: none;
+  display: none
 }
 
 #maxSize {
-  font-size: 1rem;
+  font-size: 1rem
 }
 
 .dz-preview .dz-details {
   display: -webkit-box;
   display: -ms-flexbox;
-  display: flex;
+  display: flex
 }
 
 .dz-preview .dz-details .dz-size,
 .dz-preview .dz-details .dz-filename {
   -webkit-box-flex: 1;
   -ms-flex: 1;
-  flex: 1;
+  flex: 1
 }
 
 .dz-preview img,
 .dz-preview .dz-success-mark,
 .dz-preview .dz-error-mark {
-  display: none;
+  display: none
 }
 
 @-webkit-keyframes floatUp {
@@ -62,25 +62,25 @@
     -webkit-box-shadow: 0 0 0 rgba(10, 10, 10, 0), 0 0 0 rgba(10, 10, 10, 0), 0 0 0 rgba(10, 10, 10, 0);
     box-shadow: 0 0 0 rgba(10, 10, 10, 0), 0 0 0 rgba(10, 10, 10, 0), 0 0 0 rgba(10, 10, 10, 0);
     -webkit-transform: scale(0.86);
-    transform: scale(0.86);
+    transform: scale(0.86)
   }
 
   25% {
-    opacity: 100;
+    opacity: 100
   }
 
   67% {
     -webkit-box-shadow: 0 0 0 rgba(10, 10, 10, 0), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
     box-shadow: 0 0 0 rgba(10, 10, 10, 0), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
     -webkit-transform: scale(1);
-    transform: scale(1);
+    transform: scale(1)
   }
 
   100% {
     -webkit-box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
     box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
     -webkit-transform: scale(1);
-    transform: scale(1);
+    transform: scale(1)
   }
 }
 
@@ -90,147 +90,147 @@
     -webkit-box-shadow: 0 0 0 rgba(10, 10, 10, 0), 0 0 0 rgba(10, 10, 10, 0), 0 0 0 rgba(10, 10, 10, 0);
     box-shadow: 0 0 0 rgba(10, 10, 10, 0), 0 0 0 rgba(10, 10, 10, 0), 0 0 0 rgba(10, 10, 10, 0);
     -webkit-transform: scale(0.86);
-    transform: scale(0.86);
+    transform: scale(0.86)
   }
 
   25% {
-    opacity: 100;
+    opacity: 100
   }
 
   67% {
     -webkit-box-shadow: 0 0 0 rgba(10, 10, 10, 0), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
     box-shadow: 0 0 0 rgba(10, 10, 10, 0), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
     -webkit-transform: scale(1);
-    transform: scale(1);
+    transform: scale(1)
   }
 
   100% {
     -webkit-box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
     box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
     -webkit-transform: scale(1);
-    transform: scale(1);
+    transform: scale(1)
   }
 }
 
-.uploads>div {
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s;
-  margin: 1rem;
+.uploads > div {
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s;
+  margin: 1rem
 }
 
-.uploads>div:first-child {
-  margin-top: 1.5rem;
+.uploads > div:first-child {
+  margin-top: 1.5rem
 }
 
 .uploads.nojs {
-  margin-bottom: 0;
+  margin-bottom: 0
 }
 
 .uploads .icon:not(.icon-block) {
-  color: #3794d2;
+  color: #3794d2
 }
 
 .uploads .icon.icon-block {
-  color: #da4453;
+  color: #da4453
 }
 
 .uploads progress {
-  margin-top: .5rem;
-  margin-bottom: 1rem;
+  margin-top: 0.5rem;
+  margin-bottom: 1rem
 }
 
 .uploads img {
-  max-width: 200px;
+  max-width: 200px
 }
 
 .name {
   font-size: 1rem;
   color: #bdc3c7;
-  word-break: break-all;
+  word-break: break-all
 }
 
-.link>a {
-  word-break: break-all;
+.link > a {
+  word-break: break-all
 }
 
 .clipboard-mobile {
-  margin-top: 5px;
+  margin-top: 5px
 }
 
 #albumDiv {
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s;
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s
 }
 
 #albumDiv .control {
-  text-align: inherit;
+  text-align: inherit
 }
 
 #linksColumn {
   margin-top: -0.25rem;
   margin-left: -0.25rem;
   margin-right: -0.25rem;
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s;
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s
 }
 
 #linksColumn .column {
-  padding: 0.25rem;
+  padding: 0.25rem
 }
 
-#linksColumn>span {
+#linksColumn > span {
   padding: 0 0.3rem;
-  color: #7f8c8d;
+  color: #7f8c8d
+}
+
+.git-commit a {
+  display: inline-block;
+  word-break: break-all
 }
 
 #tabs {
   margin-bottom: 1rem;
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s;
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s
 }
 
 #tabs ul {
-  border-bottom: 1px solid #898b8d;
+  border-bottom: 1px solid #898b8d
 }
 
 #tabs li a {
   color: #bdc3c7;
-  border-bottom-color: #898b8d;
+  border-bottom-color: #898b8d
 }
 
 #tabs.is-boxed li.is-active a {
   color: #3794d2;
   background: #232629;
   border-color: #898b8d;
-  border-bottom-color: #232629;
+  border-bottom-color: #232629
 }
 
 #tabs.is-boxed li:not(.is-active) a:hover {
-  background: #4d4d4d;
+  background: #4d4d4d
 }
 
 .tab-content {
-  margin-bottom: -.75rem;
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s;
+  margin-bottom: -0.75rem;
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s
 }
 
 .tab-content .label {
   color: #bdc3c7;
-  font-weight: normal;
+  font-weight: normal
 }
 
 #tab-config.tab-content form {
-  margin-bottom: .75rem;
-}
-
-.git-commit a {
-  display: inline-block;
-  word-break: break-all;
+  margin-bottom: 0.75rem
 }
 
 #urlMaxSize {
-  font-weight: bold;
+  font-weight: bold
 }
 
 .render {
@@ -239,18 +239,18 @@
   bottom: 0;
   font-size: 1rem;
   color: #bdc3c7;
-  cursor: pointer;
+  cursor: pointer
 }
 
 .render.button {
   border-bottom-left-radius: 0;
   border-bottom-right-radius: 0;
   right: 1%;
-  opacity: .25;
-  -webkit-transition: opacity .25s;
-  transition: opacity .25s;
+  opacity: 0.25;
+  -webkit-transition: opacity 0.25s;
+  transition: opacity 0.25s
 }
 
 .render.button:hover {
-  opacity: 1;
+  opacity: 1
 }

+ 46 - 46
public/css/style.css

@@ -1,62 +1,82 @@
 html {
   background-color: #232629;
-  overflow-y: auto;
+  overflow-y: auto
 }
 
 body {
   color: #eff0f1;
-  -webkit-animation: fadeInOpacity .5s;
-  animation: fadeInOpacity .5s;
+  -webkit-animation: fadeInOpacity 0.5s;
+  animation: fadeInOpacity 0.5s
 }
 
 @-webkit-keyframes fadeInOpacity {
   0% {
-    opacity: 0;
+    opacity: 0
   }
 
   100% {
-    opacity: 1;
+    opacity: 1
   }
 }
 
 @keyframes fadeInOpacity {
   0% {
-    opacity: 0;
+    opacity: 0
   }
 
   100% {
-    opacity: 1;
+    opacity: 1
   }
 }
 
 a {
-  color: #3794d2;
+  color: #3794d2
 }
 
 a:hover {
-  color: #60a8dc;
+  color: #60a8dc
 }
 
 hr {
-  background-color: #898b8d;
+  background-color: #898b8d
 }
 
 code,
 .message-body code {
   background-color: #222528;
-  border-radius: 5px;
+  border-radius: 5px
 }
 
 .title {
-  color: #eff0f1;
+  color: #eff0f1
 }
 
 .subtitle {
-  color: #bdc3c7;
+  color: #bdc3c7
 }
 
 .subtitle strong {
-  color: #bdc3c7;
+  color: #bdc3c7
+}
+
+.input::-moz-placeholder,
+.textarea::-moz-placeholder {
+  color: #7f8c8d
+}
+
+.input::-webkit-input-placeholder,
+.textarea::-webkit-input-placeholder {
+  color: #7f8c8d
+}
+
+.input:-moz-placeholder,
+.textarea:-moz-placeholder {
+  color: #7f8c8d
+}
+
+.input:-ms-input-placeholder,
+.textarea:-ms-input-placeholder {
+  color: #7f8c8d
 }
 
 .input.is-active,
@@ -67,85 +87,65 @@ code,
 .textarea.is-focused,
 .textarea:active,
 .textarea:focus {
-  border-color: #3794d2;
+  border-color: #3794d2
 }
 
 .table.is-hoverable tbody tr:not(.is-selected):hover {
-  background-color: #4d4d4d;
+  background-color: #4d4d4d
 }
 
 .table td,
 .table th {
-  vertical-align: middle;
+  vertical-align: middle
 }
 
 .help {
-  color: #7f8c8d;
-}
-
-.input::-moz-placeholder,
-.textarea::-moz-placeholder {
-  color: #7f8c8d;
-}
-
-.input::-webkit-input-placeholder,
-.textarea::-webkit-input-placeholder {
-  color: #7f8c8d;
-}
-
-.input:-moz-placeholder,
-.textarea:-moz-placeholder {
-  color: #7f8c8d;
-}
-
-.input:-ms-input-placeholder,
-.textarea:-ms-input-placeholder {
-  color: #7f8c8d;
+  color: #7f8c8d
 }
 
 .button.is-breeze {
   background-color: #3794d2;
   border-color: transparent;
-  color: #fff;
+  color: #fff
 }
 
 .button.is-breeze.is-hovered,
 .button.is-breeze:hover {
   background-color: #60a8dc;
   border-color: transparent;
-  color: #fff;
+  color: #fff
 }
 
 .button.is-breeze.is-active,
 .button.is-breeze:active {
   background-color: #60a8dc;
   border-color: transparent;
-  color: #fff;
+  color: #fff
 }
 
 .button.is-breeze.is-focus,
 .button.is-breeze:focus {
   border-color: transparent;
-  color: #fff;
+  color: #fff
 }
 
 .checkbox:hover,
 .radio:hover {
-  color: #7f8c8d;
+  color: #7f8c8d
 }
 
 .progress.is-breeze:indeterminate {
   background-image: -webkit-gradient(linear, left top, right top, color-stop(30%, #60a8dc), color-stop(30%, #eff0f1));
-  background-image: linear-gradient(to right, #60a8dc 30%, #eff0f1 30%);
+  background-image: linear-gradient(to right, #60a8dc 30%, #eff0f1 30%)
 }
 
 .message {
-  background-color: #31363b;
+  background-color: #31363b
 }
 
 .message-body {
   color: #eff0f1;
   border: 0;
   -webkit-box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
-  box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
+  box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2)
 }

+ 35 - 35
public/css/sweetalert.css

@@ -1,143 +1,143 @@
 .swal-modal {
-  background-color: #31363b;
+  background-color: #31363b
 }
 
 .swal-modal .field {
-  text-align: initial;
+  text-align: initial
 }
 
 .swal-modal.is-expanded {
   width: auto;
-  max-width: 90%;
+  max-width: 90%
 }
 
 .swal-title,
 .swal-text {
-  color: #eff0f1;
+  color: #eff0f1
 }
 
 .swal-text {
-  text-align: center;
+  text-align: center
 }
 
 .swal-content .label,
 .swal-content .checkbox,
 .swal-content .radio {
-  color: #eff0f1;
+  color: #eff0f1
 }
 
 .swal-content .checkbox:hover,
 .swal-content .radio:hover {
-  color: #bdc3c7;
+  color: #bdc3c7
 }
 
 .swal-button {
   background-color: #3794d2;
-  color: #eff0f1;
+  color: #eff0f1
 }
 
 .swal-button:hover {
-  background-color: #60a8dc;
+  background-color: #60a8dc
 }
 
 .swal-button:focus {
   -webkit-box-shadow: 0 0 0 1px #31363b, 0 0 0 3px rgba(55, 148, 210, 0.29);
-  box-shadow: 0 0 0 1px #31363b, 0 0 0 3px rgba(55, 148, 210, 0.29);
+  box-shadow: 0 0 0 1px #31363b, 0 0 0 3px rgba(55, 148, 210, 0.29)
 }
 
 .swal-button--loading {
-  color: transparent;
+  color: transparent
 }
 
 .swal-button--danger {
-  background-color: #da4453;
+  background-color: #da4453
 }
 
 .swal-icon--info {
-  border-color: #3794d2;
+  border-color: #3794d2
 }
 
-.swal-icon--info:after,
-.swal-icon--info:before {
-  background-color: #3794d2;
+.swal-icon--info::after,
+.swal-icon--info::before {
+  background-color: #3794d2
 }
 
 .swal-icon--error {
-  border-color: #da4453;
+  border-color: #da4453
 }
 
 .swal-icon--error__line {
-  background-color: #da4453;
+  background-color: #da4453
 }
 
 .swal-icon--warning {
   border-color: #f67400;
-  -webkit-animation: pulseWarning .5s infinite alternate;
-  animation: pulseWarning .5s infinite alternate;
+  -webkit-animation: pulseWarning 0.5s infinite alternate;
+  animation: pulseWarning 0.5s infinite alternate
 }
 
 .swal-icon--warning__body,
 .swal-icon--warning__dot {
   background-color: #f67400;
-  -webkit-animation: pulseWarningBody .5s infinite alternate;
-  animation: pulseWarningBody .5s infinite alternate;
+  -webkit-animation: pulseWarningBody 0.5s infinite alternate;
+  animation: pulseWarningBody 0.5s infinite alternate
 }
 
 @-webkit-keyframes pulseWarning {
   0% {
-    border-color: #ffaa60;
+    border-color: #ffaa60
   }
 
   to {
-    border-color: #f67400;
+    border-color: #f67400
   }
 }
 
 @keyframes pulseWarning {
   0% {
-    border-color: #ffaa60;
+    border-color: #ffaa60
   }
 
   to {
-    border-color: #f67400;
+    border-color: #f67400
   }
 }
 
 @-webkit-keyframes pulseWarningBody {
   0% {
-    background-color: #ffaa60;
+    background-color: #ffaa60
   }
 
   to {
-    background-color: #f67400;
+    background-color: #f67400
   }
 }
 
 @keyframes pulseWarningBody {
   0% {
-    background-color: #ffaa60;
+    background-color: #ffaa60
   }
 
   to {
-    background-color: #f67400;
+    background-color: #f67400
   }
 }
 
 .swal-icon--success {
-  border-color: #27ae60;
+  border-color: #27ae60
 }
 
 .swal-icon--success__line {
-  background-color: #27ae60;
+  background-color: #27ae60
 }
 
 .swal-icon--success__hide-corners {
-  background-color: #31363b;
+  background-color: #31363b
 }
 
 .swal-icon--success::after,
 .swal-icon--success::before {
-  background: #31363b;
+  background: #31363b
 }
 
 .swal-display-thumb-container {
@@ -151,5 +151,5 @@
   align-items: center;
   -webkit-box-pack: center;
   -ms-flex-pack: center;
-  justify-content: center;
+  justify-content: center
 }

+ 16 - 16
public/css/thumbs.css

@@ -12,12 +12,12 @@
   align-items: center;
   position: relative;
   -webkit-box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
-  box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2);
+  box-shadow: 0 20px 60px rgba(10, 10, 10, 0.05), 0 5px 10px rgba(10, 10, 10, 0.1), 0 1px 1px rgba(10, 10, 10, 0.2)
 }
 
 .image-container .title {
   font-weight: normal;
-  word-break: break-all;
+  word-break: break-all
 }
 
 .image-container .image {
@@ -31,14 +31,14 @@
   align-items: center;
   -webkit-box-pack: center;
   -ms-flex-pack: center;
-  justify-content: center;
+  justify-content: center
 }
 
 .image-container .image img {
   max-height: 100%;
   max-width: 100%;
   height: auto;
-  width: auto;
+  width: auto
 }
 
 .image-container .controls {
@@ -46,36 +46,36 @@
   display: -ms-flexbox;
   display: flex;
   position: absolute;
-  top: .75rem;
-  right: .75rem;
+  top: 0.75rem;
+  right: 0.75rem
 }
 
 .image-container .controls .button {
-  border-radius: 0;
+  border-radius: 0
 }
 
 .image-container .controls .button:not(:active):not(:hover) {
   color: #fff;
-  background-color: rgba(49, 54, 59, .75);
+  background-color: rgba(49, 54, 59, 0.75)
 }
 
 .image-container .details {
   position: absolute;
-  left: .75rem;
-  bottom: .75rem;
-  right: .75rem;
-  background-color: rgba(49, 54, 59, .75);
+  left: 0.75rem;
+  bottom: 0.75rem;
+  right: 0.75rem;
+  background-color: rgba(49, 54, 59, 0.75);
   color: #eff0f1;
-  padding: .25rem;
-  font-size: .75rem;
+  padding: 0.25rem;
+  font-size: 0.75rem
 }
 
 .image-container .details p {
   display: block;
   text-overflow: ellipsis;
-  overflow: hidden;
+  overflow: hidden
 }
 
 .image-container .details p span {
-  font-weight: bold;
+  font-weight: bold
 }

+ 1 - 1
views/_globals.njk

@@ -16,7 +16,7 @@
   v3: CSS and JS files (libs such as bulma, lazyload, etc).
   v4: Renders in /public/render/* directories (to be used by render.js).
 #}
-{% set v1 = "MO8TNY3DLV" %}
+{% set v1 = "gI6ZM0Tg0t" %}
 {% set v2 = "hiboQUzAzp" %}
 {% set v3 = "tWLiAlAX5i" %}
 {% set v4 = "S3TAWpPeFS" %}

+ 1 - 1
views/album.njk

@@ -75,7 +75,7 @@
     <article class="message">
       <div class="message-body">
         <p>You are viewing No-JS version of this album, so file size will be displayed in bytes.</p>
-        <p>Please <a href="{{ url }}">click here</a> if you want to its regular version.</p>
+        <p>Please <a href="{{ url }}">click here</a> if you want to view its regular version.</p>
       </div>
     </article>
     {%- endif %}

File diff suppressed because it is too large
+ 1358 - 125
yarn.lock