From d6c12b9311189978fdfa241f4d57d87e39b02938 Mon Sep 17 00:00:00 2001 From: Flummi Date: Wed, 3 Mar 2021 05:34:57 +0100 Subject: [PATCH] aktueller Stand --- package-lock.json | 6 +- package.json | 2 +- public/s/css/f0ck-custom.css | 680 ++++++++++++++++------ public/s/css/style.css | 2 +- public/s/img/broken.png | Bin 0 -> 4512 bytes public/s/js/bootstrap-native.min.js | 2 + public/s/js/scroller.js | 2 +- public/s/vcr.ttf | Bin 0 -> 75864 bytes src/inc/routes/{api.mjs => apiv1.mjs} | 28 +- src/inc/routes/inc/{api.mjs => apiv1.mjs} | 0 src/inc/routes/index.mjs | 58 +- src/inc/trigger/f0ckgag.mjs | 2 +- src/inc/trigger/parser.mjs | 6 +- views/index.html | 4 +- views/item.html | 11 +- views/main/footer.html | 10 +- views/main/header.html | 10 +- views/partials/pagination.html | 15 + views/snippets/navbar.html | 23 +- views/test.html | 16 + 20 files changed, 652 insertions(+), 225 deletions(-) create mode 100755 public/s/img/broken.png create mode 100644 public/s/js/bootstrap-native.min.js create mode 100644 public/s/vcr.ttf rename src/inc/routes/{api.mjs => apiv1.mjs} (75%) rename src/inc/routes/inc/{api.mjs => apiv1.mjs} (100%) create mode 100644 views/partials/pagination.html create mode 100644 views/test.html diff --git a/package-lock.json b/package-lock.json index ac483b7..7602e80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,9 +15,9 @@ "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" }, "cuffeo": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cuffeo/-/cuffeo-1.0.7.tgz", - "integrity": "sha512-9XpEUnN9jIfaiIMJwcfPW61PxTxBJUoa9VN/TjiWk7Z/jNStdrlPTdn6Y2cdclsWsHtAyabHdCNUAHscQ89WCQ==", + "version": "1.0.7-2", + "resolved": "https://registry.npmjs.org/cuffeo/-/cuffeo-1.0.7-2.tgz", + "integrity": "sha512-4ZrP6C5jpCu7+UtgB3rJl5wZJ48FSrdaTVgyx7bPtC0gMcEm0O5NcCjiZkJDvbLqsN92LAywFoGmdjt/rXG9EA==", "requires": { "flumm-fetch-cookies": "^1.3.5" } diff --git a/package.json b/package.json index 7acc4a6..919863e 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "author": "Flummi", "license": "MIT", "dependencies": { - "cuffeo": "^1.0.7", + "cuffeo": "^1.0.7-2", "flumm-fetch-cookies": "^1.4.0", "mariadb": "^2.5.2" } diff --git a/public/s/css/f0ck-custom.css b/public/s/css/f0ck-custom.css index 19d61eb..f057669 100644 --- a/public/s/css/f0ck-custom.css +++ b/public/s/css/f0ck-custom.css @@ -1,146 +1,161 @@ /* written by sirx for f0ck.me */ /* use whatever you like */ ul#posts { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); - grid-gap: 1em; - list-style: none; - padding: 0; - margin-top: 10px; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); + grid-gap: 1em; + list-style: none; + padding: 0; + margin-top: 10px; } .navbar { - background-color: #1b1b1b; - position: sticky; - top: 0; - z-index: 1; - font-family: monospace; - text-transform: uppercase; - text-shadow: 1px 1px black; + background-color: #1b1b1b; + position: sticky; + top: 0; + z-index: 1; + font-family: monospace; + text-transform: uppercase; + text-shadow: 1px 1px black; } body { - background-color: black; - color: white; + background-color: black; + color: white; } html { - background-color: black; + background-color: black; } .container.is-fluid { - padding-top: 10px; + padding-top: 10px; } li.post { - position: relative; + position: relative; } span.item-mime { - position: absolute; - right: 0; - top: 0; - color: #68da20; - text-shadow: 1px 1px black; - font-size: 11px; - text-transform: uppercase; - background: #000000b8; - visibility: hidden; + position: absolute; + right: 0; + top: 0; + color: #68da20; + text-shadow: 1px 1px black; + font-size: 11px; + text-transform: uppercase; + background: #000000b8; + visibility: hidden; } li.post:hover > span.item-mime { - visibility: visible; + visibility: visible; } a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, .navbar-link:focus, .navbar-link:focus-within, .navbar-link:hover, .navbar-link.is-active { - background-color: #000000; - color: #ffffff; + background-color: #000000; + color: #ffffff; } a#next, a#prev { - position: relative; - font-weight: normal; - top: 0px; - bottom: 932px; - margin: unset; - font-size: 30px; - color: #99ff00; - padding: 140px 40px 140px 40px; - cursor: pointer; - -webkit-transform: translateZ(0); - align-content: inherit; - align-self: center; - bottom: 0; + position: relative; + font-weight: normal; + top: 0px; + bottom: 932px; + margin: unset; + font-size: 30px; + color: #99ff00; + padding: 140px 40px 140px 40px; + cursor: pointer; + align-content: inherit; + align-self: center; + bottom: 0; } a#next, a#prev { - position: sticky; - top: 0; + position: sticky; + top: 0; } .content { - display: grid; - justify-content: space-around; - grid-template-columns: 0fr 1fr 0fr; + display: grid; + justify-content: space-around; + grid-template-columns: 0fr 1fr 0fr; } .previous-post, .next-post { - display: flex; + display: flex; } img#f0ck-image { - max-width: 100%; - max-height: 500px; + max-width: 100%; + max-height: 500px; } .metadata { - text-align: center; - position: sticky; - bottom: 0; + text-align: center; + position: sticky; + bottom: 0; } a:hover { - color: #99ff00; - opacity: 0.8; + color: #99ff00; + opacity: 0.8; } a { - color: #99ff00; - cursor: pointer; - text-decoration: none; + color: #99ff00; + cursor: pointer; + text-decoration: none; } .navbar-item, .navbar-link { - color: white; - text-shadow: 1px 1px black; + color: white; + text-shadow: 1px 1px black; } .media-object { - text-align: center; - align-self: center; + text-align: center; + align-self: center; } /*a.id-link { - padding-right: 5; +padding-right: 5; }*/ div#my-video { -max-height: unset; + max-height: unset; } -.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), .subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .pagination:not(:last-child), .tabs:not(:last-child) { - margin-bottom: 0; - margin-top: 0; +.box:not(:last-child), +.content:not(:last-child), +.notification:not(:last-child), +.progress:not(:last-child), +.table:not(:last-child), +.table-container:not(:last-child), +.title:not(:last-child), +.subtitle:not(:last-child), +.block:not(:last-child), +.highlight:not(:last-child), +.breadcrumb:not(:last-child), +.level:not(:last-child), +.list:not(:last-child), +.message:not(:last-child), +.pagination:not(:last-child), +.tabs:not(:last-child) { + margin-bottom: 0; + margin-top: 0; } .video-container { position: relative; - padding-bottom: 56.25%; /*16:9*/ - padding-top: 30px; - height: 0; + padding-bottom: 56.25%; + /*16:9*/ + padding-top: 30px; + height: 0; overflow: hidden; } - + .video-container video { position: absolute; top: 0; @@ -150,189 +165,516 @@ max-height: unset; } .irc { - padding: 10px; - color: white; + padding: 10px; + color: white; } a#next:hover { - box-shadow: -1px 0px #99ff001c; - transition: all .2s; + box-shadow: -1px 0px #99ff001c; + transition: all .2s; } a#prev:hover { - box-shadow: 1px 0px #99ff001c; - transition: all .2s; + box-shadow: 1px 0px #99ff001c; + transition: all .2s; } .navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { - background-color: black; + background-color: black; } .controls { - text-align: center; + text-align: center; } .content { - min-height: 517px; + min-height: 517px; } #themeselector { - color: #fff; - background-color: #343a40; - display: inline-block; - font-weight: 600; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - border: 0; - outline: 0; + color: #fff; + background-color: #343a40; + display: inline-block; + font-weight: 600; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + border: 0; + outline: 0; } select { - font-size: small; + font-size: small; } @media (max-width: 600px) { - a#next, a#prev { - padding: 0; - } + a#next, a#prev { + padding: 0; + } - .content { - min-height: 0; - } + .content { + min-height: 0; + } } img#biohaz { - width: 28px; + width: 28px; } .metadata { - background: #1b1b1b; - border-top: 1px solid #262626; + background: #1b1b1b; + border-top: 1px solid #262626; } .content { - border-left: 1px solid #1b1b1b; - border-right: 1px solid #1b1b1b; + border-left: 1px solid #1b1b1b; + border-right: 1px solid #1b1b1b; } .controls { - border-left: 1px solid #1b1b1b; - border-right: 1px solid #1b1b1b; + border-left: 1px solid #1b1b1b; + border-right: 1px solid #1b1b1b; } - #themeselector { - padding: 0.04em 0.2em; - vertical-align: top; - font-weight: 560; + padding: 0.04em 0.2em; + vertical-align: top; + font-weight: 560; } span.badge.badge-dark { - margin-right: 5px; + margin-right: 5px; } .badge-dark, #themeselector { - color: #fff; - background-color: #000000; - border-radius: 0; - border-left: 1px solid #262626; - border-right: 1px solid #262626; - border-top: 1px solid #000; - border-bottom: 1px solid #262626; + color: #fff; + background-color: #000000; + border-radius: 0; + border-left: 1px solid #262626; + border-right: 1px solid #262626; + border-top: 1px solid #000; + border-bottom: 1px solid #262626; } + .video-js .vjs-control-bar { - background-color: #1b1b1b !important; + background-color: #1b1b1b !important; } a#rndbtn { - color: #fff; - background-color: #1b1b1b; - border-radius: 0; - border-left: 1px solid #262626; - border-right: 1px solid #262626; - border-top: 1px solid #262626; - border-bottom: 1px solid #262626; - padding: 0px 5px 0px 5px; - text-decoration: none; + color: #fff; + background-color: #1b1b1b; + border-radius: 0; + border-left: 1px solid #262626; + border-right: 1px solid #262626; + border-top: 1px solid #262626; + border-bottom: 1px solid #262626; + padding: 0px 5px 0px 5px; + text-decoration: none; } .contact { - border-left: 1px solid #1b1b1b; - border-right: 1px solid #1b1b1b; - border-bottom: 1px solid #1b1b1b; - padding: 5px; + border-left: 1px solid #1b1b1b; + border-right: 1px solid #1b1b1b; + border-bottom: 1px solid #1b1b1b; + padding: 5px; } .irc { - border-left: 1px solid #1b1b1b; - border-right: 1px solid #1b1b1b; - border-bottom: 1px solid #1b1b1b; - padding: 5px; + border-left: 1px solid #1b1b1b; + border-right: 1px solid #1b1b1b; + border-bottom: 1px solid #1b1b1b; + padding: 5px; } /* Testing Area */ .content { - position: relative; + position: relative; } a#next { - top: 0; - position: absolute; - z-index: 1; - left: 0; - background: transparent; - width: 25%; - height: 95%; + top: 0; + position: absolute; + z-index: 1; + left: 0; + background: transparent; + width: 25%; + height: 95%; } a#prev { - position: absolute; - z-index: 1; - right: 0; - background: transparent; - width: 25%; - height: 95%; + position: absolute; + z-index: 1; + right: 0; + background: transparent; + width: 25%; + height: 95%; } .vjs-control-bar { - z-index: 2; + z-index: 2; } .arrow-prev { - height: 100%; - display: flex; - width: 100%; - align-items: center; - justify-content: end; + height: 100%; + display: flex; + width: 100%; + align-items: center; + justify-content: end; } .arrow-next { - height: 100%; - display: flex; - width: 100%; - align-items: center; - justify-content: start; + height: 100%; + display: flex; + width: 100%; + align-items: center; + justify-content: start; } - a#next:hover { - opacity: 1; - box-shadow: none; + opacity: 1; + box-shadow: none; } a#next { - opacity: 0.2; + opacity: 0.2; } a#prev:hover { - opacity: 1; - box-shadow: none; + opacity: 1; + box-shadow: none; } a#prev { - opacity: 0.2; + opacity: 0.2; +} + +/* pagination */ +.pagination { + padding: 8px; + background-clip: padding-box; + border: 1px solid; + border-color: #070809 #0d0e0f #131517; + border-color: rgba(0, 0, 0, 0.8) rgba(0, 0, 0, 0.65) rgba(0, 0, 0, 0.5); + border-radius: 3px; + display: inline-block; + vertical-align: baseline; + zoom: 1; *display: inline; + *vertical-align: auto; + background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0)); + background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0)); + background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0)); + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0)); + -webkit-box-shadow: 0 1px rgba(255, 255, 255, 0.05); + box-shadow: 0 1px rgba(255, 255, 255, 0.05); +} + +.pagination > a, .pagination > span { + float: left; + margin-left: 5px; + padding: 0 6px; + min-width: 17px; + line-height: 27px; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: 500; + color: #68da20; + text-align: center; + text-decoration: none; + border: 1px solid black; + border-radius: 3px; +} + +.pagination :first-child { + margin-left: 0; +} + +.pagination > a { + text-decoration: none; + text-shadow: 0 1px black; + background-clip: padding-box; + border-color: rgba(0, 0, 0, 0.9); + background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); + background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); + background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); + background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); + -webkit-box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04), inset 0 1px rgba(255, 255, 255, 0.04), inset 0 -1px rgba(0, 0, 0, 0.15), 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04), inset 0 1px rgba(255, 255, 255, 0.04), inset 0 -1px rgba(0, 0, 0, 0.15), 0 1px 1px rgba(0, 0, 0, 0.1); + -webkit-transition: 0.1s ease-out; + -moz-transition: 0.1s ease-out; + -o-transition: 0.1s ease-out; + transition: 0.1s ease-out; +} + +.pagination > a:hover { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); +} + +.pagination > span, .pagination > a:active { + color: #68da20; + text-shadow: 0 -1px black; + background: #1c1c1c; + background: rgba(255, 255, 255, 0.01); + border-color: black rgba(0, 0, 0, 0.65) rgba(0, 0, 0, 0.6); + -webkit-box-shadow: inset 0 1px rgba(0, 0, 0, 0.05), inset 0 2px 2px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.06); + box-shadow: inset 0 1px rgba(0, 0, 0, 0.05), inset 0 2px 2px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.06); +} + +.pagination .prev, .pagination .next { + font-family: Noteworthy, Arial, sans-serif; + font-size: 14px; +} + +@font-face { + font-family: 'VCR'; + src: url('/s/vcr.ttf') format('truetype'); +} + +span#f0ck { + font-family: 'VCR'; + font-size: xx-large; + text-shadow: 1px 1px 1px black, 0px 0px 0px #9f0, -1px -1px 0px black, 1px -1px 0px black, -1px 1px 0px black, 0px 0px 0px #9f0; +} + +.navbar-brand { + padding-bottom: 0; +} + +/* nav overhaul */ +.nav-item { + width: 100%; + text-align: center +} + +.navbar-brand { + padding-top: 0 +} + +.navbar-nav.mr-auto { + flex-flow: row; + justify-content: space-between +} + +.navbar.navbar-expand-lg { + background: #242424 +} + +.navigation-links { + display: flex; + background: #232323; + background-image: none; + border-radius: 3px; + border: 1px solid #000; + background-image: linear-gradient(to bottom,rgba(0,0,0,.12),rgba(0,0,0,0)); + -webkit-box-shadow: 0 1px rgba(255,255,255,.05); + box-shadow: 0 1px rgba(255,255,255,.05); + border: 1px solid; + border-top-color: currentcolor; + border-right-color: currentcolor; + border-bottom-color: currentcolor; + border-left-color: currentcolor; + border-top-color: currentcolor; + border-right-color: currentcolor; + border-bottom-color: currentcolor; + border-left-color: currentcolor; + border-color: #070809 #0d0e0f #131517; + border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5); + border-radius: 3px +} + +.nav-link { + padding: 0; + display: flex; + border: 1px solid #000; + border-radius: 3px; + transition: .1s ease-out +} + +.nav-link { + min-width: 17px; + line-height: 27px; + background-image: -webkit-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: -moz-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: -o-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: linear-gradient(to bottom,rgba(255,255,255,.04),rgba(255,255,255,0)); + -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1) +} + +.nav-item:hover>a:hover { + background-color: #333; + background-color: rgba(255,255,255,.05) +} + +.navbar-nav { + padding: 5px +} + +.nav-item { + width: 100%; + text-align: center +} + +#navbarSupportedContent { + padding: 5px +} + +.pagination-container-fluid { + display: flex; + margin-left: 15px +} + +.navbar-expand-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + margin-right: 5px; + margin-left: 5px +} + +.pagination { + padding: 5px; + background-clip: padding-box; + border: 1px solid; + border-color: #070809 #0d0e0f #131517; + border-color: rgba(0,0,0,.8) rgba(0,0,0,.65) rgba(0,0,0,.5); + border-radius: 3px; + display: inline-block; + vertical-align: baseline; + zoom:1;background-image: -webkit-linear-gradient(top,rgba(0,0,0,.12),rgba(0,0,0,0)); + background-image: -moz-linear-gradient(top,rgba(0,0,0,.12),rgba(0,0,0,0)); + background-image: -o-linear-gradient(top,rgba(0,0,0,.12),rgba(0,0,0,0)); + background-image: linear-gradient(to bottom,rgba(0,0,0,.12),rgba(0,0,0,0)); + -webkit-box-shadow: 0 1px rgba(255,255,255,.05); + box-shadow: 0 1px rgba(255,255,255,.05) +} + +.pagination>a,.pagination>span { + float: left; + margin-left: 5px; + padding: 0 10px; + min-width: 17px; + line-height: 27px; + font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; + font-size: 12px; + font-weight: 500; + color: #68da20; + text-align: center; + text-decoration: none; + border: 1px solid #000; + border-radius: 3px +} + +.pagination :first-child { + margin-left: 0 +} + +.pagination>a { + text-decoration: none; + text-shadow: 0 1px #000; + background-clip: padding-box; + border-color: rgba(0,0,0,.9); + background-image: -webkit-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: -moz-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: -o-linear-gradient(top,rgba(255,255,255,.04),rgba(255,255,255,0)); + background-image: linear-gradient(to bottom,rgba(255,255,255,.04),rgba(255,255,255,0)); + -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1); + box-shadow: inset 0 0 0 1px rgba(255,255,255,.04),inset 0 1px rgba(255,255,255,.04),inset 0 -1px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.1); + -webkit-transition: .1s ease-out; + -moz-transition: .1s ease-out; + -o-transition: .1s ease-out; + transition: .1s ease-out +} + +.pagination>a:hover { + background-color: #333; + background-color: rgba(255,255,255,.05) +} + +.pagination>a:active,.pagination>span { + color: #68da20; + text-shadow: 0 -1px #000; + background: #1c1c1c; + background: rgba(255,255,255,.01); + border-color: #000 rgba(0,0,0,.65) rgba(0,0,0,.6); + -webkit-box-shadow: inset 0 1px rgba(0,0,0,.05),inset 0 2px 2px rgba(0,0,0,.3),0 1px rgba(255,255,255,.06); + box-shadow: inset 0 1px rgba(0,0,0,.05),inset 0 2px 2px rgba(0,0,0,.3),0 1px rgba(255,255,255,.06) +} + +.pagination .next,.pagination .prev { + font-family: Noteworthy,Arial,sans-serif; + font-size: 14px +} + +.navbar-nav { + width: 100%; + padding: 5px +} + +.nav-link-identifier { + text-align: center; + width: 100% +} + +@media (max-width: 768px) { + ul#posts { + grid-template-columns: repeat(auto-fill,minmax(120px,1fr)); + text-align: center; + padding-top: 5px + } +} + +@media (max-width: 422px) { + ul#posts { + grid-column-gap: 0; + grid-row-gap: 5px + } + + .container-fluid,.container-lg,.container-md,.container-sm,.container-xl { + padding-right: 5px; + padding-left: 5px + } +} + +@media (max-width: 410px) { + ul#posts { + grid-column-gap: 15px; + grid-row-gap: 10px + } + + .container-fluid,.container-lg,.container-md,.container-sm,.container-xl { + padding-right: 15px; + padding-left: 15px + } +} + +@media (max-width: 991px) { + .navbar-nav { + width: 100%; + padding: 0 + } + + .navbar-expand-lg .navbar-nav .nav-link { + margin: 0 + } + + .pagination-container-fluid { + display: flex; + justify-content: center; + padding-top: 5px; + margin-bottom: 0 + } + + .navbar { + padding: .5rem 1rem 0 + } + + .navigation-links { + border-color: transparent transparent transparent + } + + .pagination-container-fluid { + margin-left: 0 + } } diff --git a/public/s/css/style.css b/public/s/css/style.css index e06cdc8..9d7e9b6 100644 --- a/public/s/css/style.css +++ b/public/s/css/style.css @@ -320,4 +320,4 @@ video#player { pre { letter-spacing: 7px; -} \ No newline at end of file +} diff --git a/public/s/img/broken.png b/public/s/img/broken.png new file mode 100755 index 0000000000000000000000000000000000000000..711447262ecc33e1c5c54ee6a1aaadfc1e6fd5d6 GIT binary patch literal 4512 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[e]("touchstart",x,m),g&&g[e]("click",A,!1),h&&h[e]("click",A,!1),p&&p[e]("click",w,!1),n.keyboard&&window[e]("keydown",T,!1)}function k(e){t[e=e?"addEventListener":"removeEventListener"]("touchmove",C,m),t[e]("touchend",N,m)}function x(e){i.isTouch||(i.touchPosition.startX=e.changedTouches[0].pageX,t.contains(e.target)&&(i.isTouch=!0,k(1)))}function C(t){if(i.isTouch)return i.touchPosition.currentX=t.changedTouches[0].pageX,"touchmove"===t.type&&t.changedTouches.length>1?(t.preventDefault(),!1):void 0;t.preventDefault()}function N(e){if(i.isTouch&&!i.isSliding&&(i.touchPosition.endX=i.touchPosition.currentX||e.changedTouches[0].pageX,i.isTouch)){if((!t.contains(e.target)||!t.contains(e.relatedTarget))&&Math.abs(i.touchPosition.startX-i.touchPosition.endX)<75)return!1;i.touchPosition.currentXi.touchPosition.startX&&i.index--,i.isTouch=!1,L.slideTo(i.index),k()}}function P(t){Array.from(v).map((function(t){t.classList.remove("active")})),v[t]&&v[t].classList.add("active")}function H(e){if(i.touchPosition){var o=i.index,a=e&&e.target!==f[o]?1e3*e.elapsedTime+100:20,s=L.getActiveIndex(),l="left"===i.direction?"next":"prev";i.isSliding&&setTimeout((function(){i.touchPosition&&(i.isSliding=!1,f[o].classList.add("active"),f[s].classList.remove("active"),f[o].classList.remove("carousel-item-"+l),f[o].classList.remove("carousel-item-"+i.direction),f[s].classList.remove("carousel-item-"+i.direction),c.call(t,d),document.hidden||!n.interval||t.classList.contains("paused")||L.cycle())}),a)}}if(L.cycle=function(){i.timer&&(clearInterval(i.timer),i.timer=null),i.timer=setInterval((function(){var e=i.index||L.getActiveIndex();(function(t){var e=t.getBoundingClientRect(),i=window.innerHeight||document.documentElement.clientHeight;return e.top<=i&&e.bottom>=0})(t)&&(e++,L.slideTo(e))}),n.interval)},L.slideTo=function(e){if(!i.isSliding){var s,u,m=L.getActiveIndex();m!==e&&(me||m===f.length-1&&0===e)&&(i.direction="right"),e<0?e=f.length-1:e>=f.length&&(e=0),s="left"===i.direction?"next":"prev",u={relatedTarget:f[e],direction:i.direction,from:m,to:e},r=l("slide","carousel",u),d=l("slid","carousel",u),c.call(t,r),r.defaultPrevented||(i.index=e,i.isSliding=!0,clearInterval(i.timer),i.timer=null,P(e),o(f[e])&&t.classList.contains("slide")?(f[e].classList.add("carousel-item-"+s),f[e].offsetWidth,f[e].classList.add("carousel-item-"+i.direction),f[m].classList.add("carousel-item-"+i.direction),a(f[e],H)):(f[e].classList.add("active"),f[e].offsetWidth,f[m].classList.remove("active"),setTimeout((function(){i.isSliding=!1,n.interval&&t&&!t.classList.contains("paused")&&L.cycle(),c.call(t,d)}),100))))}},L.getActiveIndex=function(){return Array.from(f).indexOf(t.getElementsByClassName("carousel-item active")[0])||0},L.dispose=function(){var e=["left","right","prev","next"];Array.from(f).map((function(t,i){t.classList.contains("active")&&P(i),e.map((function(e){return t.classList.remove("carousel-item-"+e)}))})),clearInterval(i.timer),E(),i={},n={},delete t.Carousel},(t=s(t)).Carousel&&t.Carousel.dispose(),f=t.getElementsByClassName("carousel-item"),h=t.getElementsByClassName("carousel-control-prev")[0],g=t.getElementsByClassName("carousel-control-next")[0],p=t.getElementsByClassName("carousel-indicators")[0],v=p&&p.getElementsByTagName("LI")||[],!(f.length<2)){var S=t.getAttribute("data-interval"),B="false"===S?0:parseInt(S),I="false"===t.getAttribute("data-touch")?0:1,M="hover"===t.getAttribute("data-pause")||!1,D="true"===t.getAttribute("data-keyboard")||!1,X=e.interval,W=e.touch;(n={}).keyboard=!0===e.keyboard||D,n.pause=!("hover"!==e.pause&&!M)&&"hover",n.touch=W||I,n.interval="number"==typeof X?X:!1===X||0===B||!1===B?0:isNaN(B)?5e3:B,L.getActiveIndex()<0&&(f.length&&f[0].classList.add("active"),v.length&&P(0)),(i={}).direction="left",i.index=0,i.timer=null,i.isSliding=!1,i.isTouch=!1,i.touchPosition={startX:0,currentX:0,endX:0},E(1),n.interval&&L.cycle(),t.Carousel=L}}function h(t,e){e=e||{};var i,n,o,r,d,u,m=this,f=null,h=null;function g(t,e){c.call(t,d),d.defaultPrevented||(t.isAnimating=!0,t.style.height=t.scrollHeight+"px",t.classList.remove("collapse"),t.classList.remove("show"),t.classList.add("collapsing"),t.offsetWidth,t.style.height="0px",a(t,(function(){t.isAnimating=!1,t.setAttribute("aria-expanded","false"),e.setAttribute("aria-expanded","false"),t.classList.remove("collapsing"),t.classList.add("collapse"),t.style.height="",c.call(t,u)})))}m.toggle=function(e){(e&&"A"===e.target.tagName||"A"===t.tagName)&&e.preventDefault(),(t.contains(e.target)||e.target===t)&&(h.classList.contains("show")?m.hide():m.show())},m.hide=function(){h.isAnimating||(g(h,t),t.classList.add("collapsed"))},m.show=function(){var e,l;f&&(i=f.getElementsByClassName("collapse show")[0],n=i&&(s('[data-target="#'+i.id+'"]',f)||s('[href="#'+i.id+'"]',f))),h.isAnimating||(n&&i!==h&&(g(i,n),n.classList.add("collapsed")),e=h,l=t,c.call(e,o),o.defaultPrevented||(e.isAnimating=!0,e.classList.add("collapsing"),e.classList.remove("collapse"),e.style.height=e.scrollHeight+"px",a(e,(function(){e.isAnimating=!1,e.setAttribute("aria-expanded","true"),l.setAttribute("aria-expanded","true"),e.classList.remove("collapsing"),e.classList.add("collapse"),e.classList.add("show"),e.style.height="",c.call(e,r)}))),t.classList.remove("collapsed"))},m.dispose=function(){t.removeEventListener("click",m.toggle,!1),delete t.Collapse},(t=s(t)).Collapse&&t.Collapse.dispose();var p=t.getAttribute("data-parent");o=l("show","collapse"),r=l("shown","collapse"),d=l("hide","collapse"),u=l("hidden","collapse"),null!==(h=s(e.target||t.getAttribute("data-target")||t.getAttribute("href")))&&(h.isAnimating=!1),f=t.closest(e.parent||p),t.Collapse||t.addEventListener("click",m.toggle,!1),t.Collapse=m}function g(t){t.focus?t.focus():t.setActive()}function p(t,e){var i,n,o,a,r,d,u,m=this,f=null,h=[];function p(t){(t.href&&"#"===t.href.slice(-1)||t.parentNode&&t.parentNode.href&&"#"===t.parentNode.href.slice(-1))&&this.preventDefault()}function v(){var e=t.open?"addEventListener":"removeEventListener";document[e]("click",L,!1),document[e]("keydown",y,!1),document[e]("keyup",w,!1),document[e]("focus",L,!1)}function L(e){var i=e.target,n=i&&(i.getAttribute("data-toggle")||i.parentNode&&i.parentNode.getAttribute&&i.parentNode.getAttribute("data-toggle"));("focus"!==e.type||i!==t&&i!==d&&!d.contains(i))&&(i!==d&&!d.contains(i)||!u&&!n)&&(f=i===t||t.contains(i)?t:null,m.hide(),p.call(e,i))}function b(e){f=t,m.show(),p.call(e,e.target)}function y(t){var e=t.which||t.keyCode;38!==e&&40!==e||t.preventDefault()}function w(e){var i=e.which||e.keyCode,n=document.activeElement,o=n===t,a=d.contains(n),s=n.parentNode===d||n.parentNode.parentNode===d,l=h.indexOf(n);s&&(l=o?0:38===i?l>1?l-1:0:40===i&&l=m,E=h.top+u/2+v/2>=f,k=h.top-u<0,x=h.left-d<0,C=h.top+u+v>=f,N=h.left+d+p>=m;i="right"===(i="left"===(i="bottom"===(i="top"===(i=("left"===i||"right"===i)&&x&&N?"top":i)&&k?"bottom":i)&&C?"top":i)&&x?"right":i)&&N?"left":i,-1===e.className.indexOf(i)&&(e.className=e.className.replace(/\b(top|bottom|left|right)+/,i)),c=y.offsetWidth,r=y.offsetHeight,"left"===i||"right"===i?(a="left"===i?h.left+g.x-d-(L?c:0):h.left+g.x+p,w?(o=h.top+g.y,s=v/2-c):E?(o=h.top+g.y-u+v,s=u-v/2-c):(o=h.top+g.y-u/2+v/2,s=u/2-(L?.9*r:r/2))):"top"!==i&&"bottom"!==i||(o="top"===i?h.top+g.y-u-(L?r:0):h.top+g.y+v,A?(a=0,l=h.left+p/2-c):T?(a=m-1.01*d,l=d-(m-h.left)+p/2-c/2):(a=h.left+g.x-d/2+p/2,l=d/2-(L?c:c/2))),e.style.top=o+"px",e.style.left=a+"px",s&&(y.style.top=s+"px"),l&&(y.style.left=l+"px")}function w(t,e){e=e||{};var i,n,o,r,d,f,h,g,p,v,b,w,A,T,E,k,x,C,N,P=this,H=null,S=0,B=/(iPhone|iPod|iPad)/.test(navigator.userAgent),I={};function M(t){null!==H&&t.target===s(".close",H)&&P.hide()}function D(){return{0:e.title||t.getAttribute("data-title")||null,1:e.content||t.getAttribute("data-content")||null}}function X(){null===H&&t.focus()}function W(e){e=e?"addEventListener":"removeEventListener","hover"===I.trigger?(t[e](L,P.show),t[e](u[0],P.show),I.dismissible||t[e](u[1],P.hide)):"click"==I.trigger?t[e](I.trigger,P.toggle):"focus"==I.trigger&&(B&&t[e]("click",X,!1),t[e](I.trigger,P.toggle))}function O(e){H&&H.contains(e.target)||e.target===t||t.contains(e.target)||P.hide()}function R(e){e=e?"addEventListener":"removeEventListener",I.dismissible?document[e]("click",M,!1):("focus"==I.trigger&&t[e]("blur",P.hide),"hover"==I.trigger&&document[e]("touchstart",O,m)),window[e]("resize",P.hide,m)}function j(){R(1),c.call(t,b)}function z(){R(),I.container.removeChild(H),S=null,H=null,c.call(t,A)}P.toggle=function(){null===H?P.show():P.hide()},P.show=function(){clearTimeout(S),S=setTimeout((function(){if(null===H){if(c.call(t,v),v.defaultPrevented)return;!function(){i=D()[0]||null,n=(n=D()[1])?n.trim():null,H=document.createElement("div");var t=document.createElement("div");if(t.classList.add("arrow"),H.appendChild(t),null!==n&&null===I.template){if(H.setAttribute("role","tooltip"),null!==i){var e=document.createElement("h3");e.classList.add("popover-header"),e.innerHTML=I.dismissible?i+p:i,H.appendChild(e)}var o=document.createElement("div");o.classList.add("popover-body"),o.innerHTML=I.dismissible&&null===i?n+p:n,H.appendChild(o)}else{var a=document.createElement("div");a.innerHTML=I.template.trim(),H.className=a.firstChild.className,H.innerHTML=a.firstChild.innerHTML;var l=s(".popover-header",H),c=s(".popover-body",H);i&&l&&(l.innerHTML=i.trim()),n&&c&&(c.innerHTML=n.trim())}I.container.appendChild(H),H.style.display="block",!H.classList.contains("popover")&&H.classList.add("popover"),!H.classList.contains(I.animation)&&H.classList.add(I.animation),!H.classList.contains(N)&&H.classList.add(N)}(),y(t,H,I.placement,I.container),!H.classList.contains("show")&&H.classList.add("show"),I.animation?a(H,j):j()}}),20)},P.hide=function(){clearTimeout(S),S=setTimeout((function(){if(H&&null!==H&&H.classList.contains("show")){if(c.call(t,w),w.defaultPrevented)return;H.classList.remove("show"),I.animation?a(H,z):z()}}),I.delay)},P.dispose=function(){P.hide(),W(),delete t.Popover},(t=s(t)).Popover&&t.Popover.dispose(),o=t.getAttribute("data-trigger"),r=t.getAttribute("data-animation"),d=t.getAttribute("data-placement"),f=t.getAttribute("data-dismissible"),h=t.getAttribute("data-delay"),g=t.getAttribute("data-container"),p='',v=l("show","popover"),b=l("shown","popover"),w=l("hide","popover"),A=l("hidden","popover"),T=s(e.container),E=s(g),k=t.closest(".modal"),x=t.closest(".fixed-top"),C=t.closest(".fixed-bottom"),I.template=e.template?e.template:null,I.trigger=e.trigger?e.trigger:o||"hover",I.animation=e.animation&&"fade"!==e.animation?e.animation:r||"fade",I.placement=e.placement?e.placement:d||"top",I.delay=parseInt(e.delay||h)||200,I.dismissible=!(!e.dismissible&&"true"!==f),I.container=T||(E||(x||(C||(k||document.body)))),N="bs-popover-"+I.placement;var U=D();i=U[0],((n=U[1])||I.template)&&(t.Popover||W(1),t.Popover=P)}function A(t,e){e=e||{};var i,n,o,a,r,d,u=this,f={};function h(){var e,o,a;(n=r.getElementsByTagName("A"),i.scrollTop=i.isWindow?b().y:t.scrollTop,i.length!==n.length||p()!==i.scrollHeight)&&(i.items=[],i.offsets=[],i.scrollHeight=p(),i.maxScroll=i.scrollHeight-(i.isWindow?window.innerHeight:t.getBoundingClientRect().height),Array.from(n).map((function(t){e=t.getAttribute("href"),(o=e&&"#"===e.charAt(0)&&"#"!==e.slice(-1)&&s(e))&&(i.items.push(t),a=o.getBoundingClientRect(),i.offsets.push((i.isWindow?a.top+i.scrollTop:o.offsetTop)-f.offset))})),i.length=i.items.length)}function g(t){d[t=t?"addEventListener":"removeEventListener"]("scroll",u.refresh,m),window[t]("resize",u.refresh,m)}function p(){return d.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}function v(){Array.from(n).map((function(t){return t.classList.contains("active")&&t.classList.remove("active")}))}function L(e){v(),i.activeItem=e,e.classList.add("active");for(var n=[];e.parentNode!==document.body;)e=e.parentNode,["dropdown-menu","nav"].some((function(t){return e.classList.contains(t)}))&&n.push(e);n.map((function(t){var e=t.previousElementSibling;e&&!e.classList.contains("active")&&e.classList.add("active")})),c.call(t,l("activate","scrollspy",{relatedTarget:i.activeItem}))}u.refresh=function(){if(h(),i.scrollTop>=i.maxScroll){var t=i.items[i.length-1];i.activeItem!==t&&L(t)}else{if(i.activeItem&&i.scrollTop0)return i.activeItem=null,void v();for(var e=i.length;e--;)i.activeItem!==i.items[e]&&i.scrollTop>=i.offsets[e]&&(void 0===i.offsets[e+1]||i.scrollTop1&&(t=e[e.length-1]):t=e[0],t}function N(){return s(C().getAttribute("href"))}function P(t){t.preventDefault(),h=t.currentTarget,!o.isAnimating&&A.show()}A.show=function(){if(!(h=h||t).classList.contains("active")){if(v=s(h.getAttribute("href")),g=C(),p=N(),m=l("hide","tab",{relatedTarget:h}),c.call(g,m),m.defaultPrevented)return;o.isAnimating=!0,g.classList.remove("active"),g.setAttribute("aria-selected","false"),h.classList.add("active"),h.setAttribute("aria-selected","true"),r&&(t.parentNode.classList.contains("dropdown-menu")?r.classList.contains("active")||r.classList.add("active"):r.classList.contains("active")&&r.classList.remove("active")),p.classList.contains("fade")?(p.classList.remove("show"),a(p,x)):x()}},A.dispose=function(){t.removeEventListener("click",P,!1),delete t.Tab},(t=s(t)).Tab&&t.Tab.dispose(),n=t.getAttribute("data-height"),o=t.closest(".nav"),r=o&&s(".dropdown-toggle",o),w=!(!e||!1===i.height||"false"===n),o.isAnimating=!1,t.Tab||t.addEventListener("click",P,!1),w&&(T=N().parentNode),t.Tab=A}function E(t,e){e=e||{};var i,n,o,r,d,u,m,f,h=this,g=0,p={};function v(){i.classList.remove("showing"),i.classList.add("show"),c.call(i,m),p.autohide&&h.hide()}function L(){i.classList.add("hide"),c.call(i,f)}function b(){i.classList.remove("show"),p.animation?a(i,L):L()}function y(){clearTimeout(g),t.removeEventListener("click",h.hide,!1),delete t.Toast}h.show=function(){if(i&&!i.classList.contains("show")){if(c.call(i,d),d.defaultPrevented)return;p.animation&&i.classList.add("fade"),i.classList.remove("hide"),i.offsetWidth,i.classList.add("showing"),p.animation?a(i,v):v()}},h.hide=function(t){if(i&&i.classList.contains("show")){if(c.call(i,u),u.defaultPrevented)return;t?b():g=setTimeout(b,p.delay)}},h.dispose=function(){p.animation?a(i,y):y()},(t=s(t)).Toast&&t.Toast.dispose(),i=t.closest(".toast"),n=t.getAttribute("data-animation"),o=t.getAttribute("data-autohide"),r=t.getAttribute("data-delay"),d=l("show","toast"),u=l("hide","toast"),m=l("shown","toast"),f=l("hidden","toast"),p.animation=!1===e.animation||"false"===n?0:1,p.autohide=!1===e.autohide||"false"===o?0:1,p.delay=parseInt(e.delay||r)||500,t.Toast||t.addEventListener("click",h.hide,!1),t.Toast=h}function k(t,e){e=e||{};var i,n,o,r,d,f,h,g,p,v,b,w,A,T,E,k=this,x=null,C=0,N={};function P(){return t.getAttribute("title")||t.getAttribute("data-title")||t.getAttribute("data-original-title")}function H(e){x&&x.contains(e.target)||e.target===t||t.contains(e.target)||k.hide()}function S(t){t=t?"addEventListener":"removeEventListener",document[t]("touchstart",H,m),window[t]("resize",k.hide,m)}function B(){S(1),c.call(t,h)}function I(){S(),N.container.removeChild(x),x=null,C=null,c.call(t,p)}function M(e){t[e=e?"addEventListener":"removeEventListener"](L,k.show,!1),t[e](u[0],k.show,!1),t[e](u[1],k.hide,!1)}k.show=function(){clearTimeout(C),C=setTimeout((function(){if(null===x){if(c.call(t,f),f.defaultPrevented)return;!1!==function(){if(i=P()){if(x=document.createElement("div"),N.template){var t=document.createElement("div");t.innerHTML=N.template.trim(),x.className=t.firstChild.className,x.innerHTML=t.firstChild.innerHTML,s(".tooltip-inner",x).innerHTML=i.trim()}else{var e=document.createElement("div");e.classList.add("arrow"),x.appendChild(e);var n=document.createElement("div");n.classList.add("tooltip-inner"),x.appendChild(n),n.innerHTML=i}x.style.left="0",x.style.top="0",x.setAttribute("role","tooltip"),!x.classList.contains("tooltip")&&x.classList.add("tooltip"),!x.classList.contains(N.animation)&&x.classList.add(N.animation),!x.classList.contains(E)&&x.classList.add(E),N.container.appendChild(x)}}()&&(y(t,x,N.placement,N.container),!x.classList.contains("show")&&x.classList.add("show"),N.animation?a(x,B):B())}}),20)},k.hide=function(){clearTimeout(C),C=setTimeout((function(){if(x&&x.classList.contains("show")){if(c.call(t,g),g.defaultPrevented)return;x.classList.remove("show"),N.animation?a(x,I):I()}}),N.delay)},k.toggle=function(){x?k.hide():k.show()},k.dispose=function(){M(),k.hide(),t.setAttribute("title",t.getAttribute("data-original-title")),t.removeAttribute("data-original-title"),delete t.Tooltip},(t=s(t)).Tooltip&&t.Tooltip.dispose(),n=t.getAttribute("data-animation"),o=t.getAttribute("data-placement"),r=t.getAttribute("data-delay"),d=t.getAttribute("data-container"),f=l("show","tooltip"),h=l("shown","tooltip"),g=l("hide","tooltip"),p=l("hidden","tooltip"),v=s(e.container),b=s(d),w=t.closest(".modal"),A=t.closest(".fixed-top"),T=t.closest(".fixed-bottom"),N.animation=e.animation&&"fade"!==e.animation?e.animation:n||"fade",N.placement=e.placement?e.placement:o||"top",N.template=e.template?e.template:null,N.delay=parseInt(e.delay||r)||200,N.container=v||(b||(A||(T||(w||document.body)))),E="bs-tooltip-"+N.placement,(i=P())&&(t.Tooltip||(t.setAttribute("data-original-title",i),t.removeAttribute("title"),M(1)),t.Tooltip=k)}var x={};function C(t,e){Array.from(e).map((function(e){return new t(e)}))}function N(t){for(var e in t=t||document,x)C(x[e][0],t.querySelectorAll(x[e][1]))}function P(t,e){Array.from(e).map((function(e){return e[t].dispose()}))}x.Alert=[r,'[data-dismiss="alert"]'],x.Button=[d,'[data-toggle="buttons"]'],x.Carousel=[f,'[data-ride="carousel"]'],x.Collapse=[h,'[data-toggle="collapse"]'],x.Dropdown=[p,'[data-toggle="dropdown"]'],x.Modal=[v,'[data-toggle="modal"]'],x.Popover=[w,'[data-toggle="popover"],[data-tip="popover"]'],x.ScrollSpy=[A,'[data-spy="scroll"]'],x.Tab=[T,'[data-toggle="tab"]'],x.Toast=[E,'[data-dismiss="toast"]'],x.Tooltip=[k,'[data-toggle="tooltip"],[data-tip="tooltip"]'],document.body?N():document.addEventListener("DOMContentLoaded",(function t(){N(),document.removeEventListener("DOMContentLoaded",t,!1)}),!1);return{Alert:r,Button:d,Carousel:f,Collapse:h,Dropdown:p,Modal:v,Popover:w,ScrollSpy:A,Tab:T,Toast:E,Tooltip:k,initCallback:N,removeDataAPI:function(t){for(var e in t=t||document,x)P(e,t.querySelectorAll(x[e][1]))},componentsInit:x,Version:"3.0.14f"}})); diff --git a/public/s/js/scroller.js b/public/s/js/scroller.js index cff0853..c1b7e9a 100644 --- a/public/s/js/scroller.js +++ b/public/s/js/scroller.js @@ -6,7 +6,7 @@ let load = false; if((((document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop + window.innerHeight) + 310 >= ((document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight)) && !load) { load = true; - fetch(`./api/p/${posts.dataset.last}`) + fetch(`./api/v1/p/${posts.dataset.last}`) .then(res => res.json()) .then((msg, html = "") => { for(let i = 0; i < msg.items.length; i++) diff --git a/public/s/vcr.ttf b/public/s/vcr.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dcca687a434d5c7b6a3027e65e0b7d8728b25c71 GIT binary patch literal 75864 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 literal 0 HcmV?d00001 diff --git a/src/inc/routes/api.mjs b/src/inc/routes/apiv1.mjs similarity index 75% rename from src/inc/routes/api.mjs rename to src/inc/routes/apiv1.mjs index e9f4b74..509b31c 100644 --- a/src/inc/routes/api.mjs +++ b/src/inc/routes/apiv1.mjs @@ -3,22 +3,22 @@ import sql from "../sql.mjs"; import { parse } from "url"; import cfg from "../../../config.json"; -import { mimes, queries } from "./inc/api.mjs"; +import { mimes, queries } from "./inc/apiv1.mjs"; -router.get("/api", (req, res) => { +router.get("/api/v1", (req, res) => { res.end("api lol"); }); -router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => { +router.get(/^\/api\/v1\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => { const args = []; let q = queries.random.main; - if(req.url.split[2] === "user") { + if(req.url.split[3] === "user") { q += queries.random.where("username like ?"); - args.push(req.url.split[3] || "flummi"); + args.push(req.url.split[4] || "flummi"); } else - q += queries.random.where(mimes[req.url.split[2]] ? mimes[req.url.split[2]].map(mime => `mime = "${mime}"`).join(" or ") : null); + q += queries.random.where(mimes[req.url.split[3]] ? mimes[req.url.split[3]].map(mime => `mime = "${mime}"`).join(" or ") : null); try { const rows = await sql.query(q, args); @@ -32,7 +32,7 @@ router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, r } }); -router.get("/api/p", async (req, res) => { +router.get("/api/v1/p", async (req, res) => { let id = parseInt(req.url.qs.id) || 99999999; const eps = Math.min(parseInt(req.url.qs.eps) || 100, 200); let [ order, trend ] = req.url.qs.order === "asc" ? [ "asc", ">" ] : [ "desc", "<" ]; @@ -67,9 +67,9 @@ router.get("/api/p", async (req, res) => { } }); -router.get(/^\/api\/p\/([0-9]+)/, async (req, res) => { // legacy +router.get(/^\/api\/v1\/p\/([0-9]+)/, async (req, res) => { // legacy let eps = 100; - let id = +req.url.split[2]; + let id = +req.url.split[3]; const query = await sql.query("select * from items where id < ? order by id desc limit ?", [ id, eps ]); const items = { @@ -81,9 +81,9 @@ router.get(/^\/api\/p\/([0-9]+)/, async (req, res) => { // legacy res.end(JSON.stringify(items), "utf-8"); }); -router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => { +router.get(/^\/api\/v1\/item\/[0-9]+$/, async (req, res) => { try { - const rows = await sql.query(queries.item, Array(3).fill(req.url.split[2])); + const rows = await sql.query(queries.item, Array(3).fill(req.url.split[3])); res.reply({ type: "application/json", body: JSON.stringify(rows?.shift() || []) @@ -96,9 +96,9 @@ router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => { } }); -router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen - const user = req.url.split[2]; - const eps = Math.min(req.url.split[3] || 50, 50); +router.get(/^\/api\/v1\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen + const user = req.url.split[3]; + const eps = Math.min(req.url.split[4] || 50, 50); try { const rows = await sql.query(queries.user, [ user, eps ]); res.reply({ diff --git a/src/inc/routes/inc/api.mjs b/src/inc/routes/inc/apiv1.mjs similarity index 100% rename from src/inc/routes/inc/api.mjs rename to src/inc/routes/inc/apiv1.mjs diff --git a/src/inc/routes/index.mjs b/src/inc/routes/index.mjs index 9b58464..94cce67 100644 --- a/src/inc/routes/index.mjs +++ b/src/inc/routes/index.mjs @@ -1,6 +1,7 @@ import router from "../router.mjs"; import cfg from "../../../config.json"; import url from "url"; +import fs from "fs"; import { queries } from "./inc/index.mjs"; import sql from "../sql.mjs"; import lib from "../lib.mjs"; @@ -8,22 +9,55 @@ import tpl from "../tpl.mjs"; tpl.readdir("views"); -router.get("/", async (req, res) => { - const query = await sql.query("select id, mime from items order by id desc limit 300"); - const data = { - items: query, - last: query[query.length - 1].id - }; +router.get(/\/(p\/\d+)?$/, async (req, res) => { + try { + const total = (await sql.query("select count(*) as total from items"))[0].total; + const limit = 299; + const pages = +Math.ceil(total / limit); + const page = Math.min(pages, +req.url.split[1] || 1); + const offset = (page - 1) * limit; - res.reply({ body: tpl.render("views/index", data) }); + const query = await sql.query("select id, mime from items order by id desc limit ?, ?", [ offset, limit ]); + + let cheat = []; + for(let i = Math.max(1, page - 3); i <= Math.min(page + 3, pages); i++) + cheat.push(i); + + query.forEach(e => { + if(!fs.existsSync(`public/t/${e.id}.png`)) + fs.copyFileSync("public/s/img/broken.png", `public/t/${e.id}.png`); + }); + + const data = { + items: query, + pagination: { + end: pages, + prev: (page > 1) ? page - 1 : null, + next: (page < pages) ? page + 1 : null, + page: page, + cheat: cheat, + link: "/p/" + }, + last: query[query.length - 1].id + }; + + res.reply({ body: tpl.render("views/index", data) }); + } catch(err) { + res.reply({ body: "error :(" }); + } }); router.get(/^\/([0-9]+)$/, async (req, res) => { const query = (await sql.query(queries.item, Array(3).fill(req.url.split[0])))?.shift(); + const qmax = (await sql.query("select id from items order by id desc limit 1"))[0].id; if(!query?.id) return res.redirect("/404"); + let cheat = []; + for(let i = Math.min(query.id + 3, qmax); i >= Math.max(1, query.id - 3); i--) + cheat.push(i); + const data = { user: { name: query.username, @@ -44,7 +78,15 @@ router.get(/^\/([0-9]+)$/, async (req, res) => { }, next: query.next ? query.next : null, prev: query.prev ? query.prev : null, - title: `${query.id} - f0ck.me` + title: `${query.id} - f0ck.me`, + pagination: { + end: 1, + prev: query.id + 1, + next: Math.max(query.id - 1, 1), + page: query.id, + cheat: cheat, + link: "/" + } }; res.reply({ body: tpl.render("views/item", data) }); }); diff --git a/src/inc/trigger/f0ckgag.mjs b/src/inc/trigger/f0ckgag.mjs index eda975d..7364097 100644 --- a/src/inc/trigger/f0ckgag.mjs +++ b/src/inc/trigger/f0ckgag.mjs @@ -3,7 +3,7 @@ import sql from "../sql.mjs"; import lib from "../lib.mjs"; const _query = "select id, mime, size, username, userchannel, usernetwork, stamp from items where "; -const regex = /https\:\/\/f0ck\.me\/(\d+|(?:b\/)(\w{8})\.(jpg|webm|gif|mp4|png|mov|mp3|ogg|flac))/gi; +const regex = /(https\:\/\/f0ck\.me|http\:\/\/fockmoonsb24iczs7odozzy5uktlzbcgp337nabrgffzxv5ihabgpvyd\.onion)\/(\d+|(?:b\/)(\w{8})\.(jpg|webm|gif|mp4|png|mov|mp3|ogg|flac))/gi; export default async bot => { diff --git a/src/inc/trigger/parser.mjs b/src/inc/trigger/parser.mjs index f04b689..95e1618 100644 --- a/src/inc/trigger/parser.mjs +++ b/src/inc/trigger/parser.mjs @@ -132,9 +132,9 @@ export default async bot => { speed = !Number.isFinite(speed) ? "yes" : `${speed.toFixed(2)} Mbit/s`; e.reply([ - `title: ${meta.fulltitle}`, - `size: ${lib.formatSize(size)} speed: ${speed}`, - `link: ${cfg.main.url}/${insertq.insertId}` + //`title: ${meta.fulltitle}`, + `link: ${cfg.main.url}/${insertq.insertId} | size: ${lib.formatSize(size)} | speed: ${speed}` + //`link: ${cfg.main.url}/${insertq.insertId}` ]); }); diff --git a/views/index.html b/views/index.html index fda41ac..3204000 100644 --- a/views/index.html +++ b/views/index.html @@ -1,10 +1,10 @@ {{include main/header}}
-
    +
      {{each items as item}}
    • - + {{=item.mime}}
    • diff --git a/views/item.html b/views/item.html index 795b9fd..ed2e2e3 100644 --- a/views/item.html +++ b/views/item.html @@ -1,8 +1,5 @@ {{include main/header}}
      -
      - Random -
      @@ -37,7 +36,9 @@
      »
      {{else}} - + {{/if}}
      diff --git a/views/main/footer.html b/views/main/footer.html index 697c2e8..4dfea42 100644 --- a/views/main/footer.html +++ b/views/main/footer.html @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/views/main/header.html b/views/main/header.html index b9c5463..2ebf066 100644 --- a/views/main/header.html +++ b/views/main/header.html @@ -2,11 +2,11 @@ {{if data.title}}{{=data.title}}{{else}}f0ck!{{/if}} - - - - - + + + + + {{if data.item}} diff --git a/views/partials/pagination.html b/views/partials/pagination.html new file mode 100644 index 0000000..285d9df --- /dev/null +++ b/views/partials/pagination.html @@ -0,0 +1,15 @@ +{{if typeof pagination !== "undefined"}} + +{{/if}} \ No newline at end of file diff --git a/views/snippets/navbar.html b/views/snippets/navbar.html index 1237777..fceb4b9 100644 --- a/views/snippets/navbar.html +++ b/views/snippets/navbar.html @@ -1,18 +1,27 @@ diff --git a/views/test.html b/views/test.html new file mode 100644 index 0000000..10eb606 --- /dev/null +++ b/views/test.html @@ -0,0 +1,16 @@ +{{include main/header}} +
      + {{include partials/pagination}} + + {{include partials/pagination}} +
      +{{include main/footer}}