First usable stage
This commit is contained in:
7
src/main/resources/META-INF/resources/index.html
Normal file
7
src/main/resources/META-INF/resources/index.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Faq you</title>
|
||||
<meta http-equiv="refresh" content="0;URL='/file'" />
|
||||
</head>
|
||||
</html>
|
||||
166
src/main/resources/META-INF/resources/style/sakura.css
Normal file
166
src/main/resources/META-INF/resources/style/sakura.css
Normal file
@@ -0,0 +1,166 @@
|
||||
/* Sakura.css v1.0.0
|
||||
* ================
|
||||
* Minimal css theme.
|
||||
* Project: https://github.com/oxalorg/sakura
|
||||
*/
|
||||
/* Body */
|
||||
html {
|
||||
font-size: 62.5%;
|
||||
font-family: serif; }
|
||||
|
||||
body {
|
||||
font-size: 1.8rem;
|
||||
line-height: 1.618;
|
||||
max-width: 38em;
|
||||
margin: auto;
|
||||
color: #4a4a4a;
|
||||
background-color: #f9f9f9;
|
||||
padding: 13px; }
|
||||
|
||||
@media (max-width: 684px) {
|
||||
body {
|
||||
font-size: 1.53rem; } }
|
||||
|
||||
@media (max-width: 382px) {
|
||||
body {
|
||||
font-size: 1.35rem; } }
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
line-height: 1.1;
|
||||
font-family: Verdana, Geneva, sans-serif;
|
||||
font-weight: 700;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
-ms-word-break: break-all;
|
||||
word-break: break-word;
|
||||
-ms-hyphens: auto;
|
||||
-moz-hyphens: auto;
|
||||
-webkit-hyphens: auto;
|
||||
hyphens: auto; }
|
||||
|
||||
h1 {
|
||||
font-size: 2.35em; }
|
||||
|
||||
h2 {
|
||||
font-size: 2.00em; }
|
||||
|
||||
h3 {
|
||||
font-size: 1.75em; }
|
||||
|
||||
h4 {
|
||||
font-size: 1.5em; }
|
||||
|
||||
h5 {
|
||||
font-size: 1.25em; }
|
||||
|
||||
h6 {
|
||||
font-size: 1em; }
|
||||
|
||||
small, sub, sup {
|
||||
font-size: 75%; }
|
||||
|
||||
hr {
|
||||
border-color: #2c8898; }
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #2c8898; }
|
||||
a:hover {
|
||||
color: #982c61;
|
||||
border-bottom: 2px solid #4a4a4a; }
|
||||
|
||||
ul {
|
||||
padding-left: 1.4em; }
|
||||
|
||||
li {
|
||||
margin-bottom: 0.4em; }
|
||||
|
||||
blockquote {
|
||||
font-style: italic;
|
||||
margin-left: 1.5em;
|
||||
padding-left: 1em;
|
||||
border-left: 3px solid #2c8898; }
|
||||
|
||||
img {
|
||||
height: auto;
|
||||
max-width: 100%; }
|
||||
|
||||
/* Pre and Code */
|
||||
pre {
|
||||
background-color: #f1f1f1;
|
||||
display: block;
|
||||
padding: 1em;
|
||||
overflow-x: auto; }
|
||||
|
||||
code {
|
||||
font-size: 0.9em;
|
||||
padding: 0 0.5em;
|
||||
background-color: #f1f1f1;
|
||||
white-space: pre-wrap; }
|
||||
|
||||
pre > code {
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
white-space: pre; }
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
text-align: justify;
|
||||
width: 100%;
|
||||
border-collapse: collapse; }
|
||||
|
||||
td, th {
|
||||
padding: 0.5em;
|
||||
border-bottom: 1px solid #f1f1f1; }
|
||||
|
||||
/* Buttons, forms and input */
|
||||
input, textarea {
|
||||
border: 1px solid #4a4a4a; }
|
||||
input:focus, textarea:focus {
|
||||
border: 1px solid #2c8898; }
|
||||
|
||||
textarea {
|
||||
width: 100%; }
|
||||
|
||||
.button, button, input[type="submit"], input[type="reset"], input[type="button"] {
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
background-color: #2c8898;
|
||||
color: #f9f9f9;
|
||||
border-radius: 1px;
|
||||
border: 1px solid #2c8898;
|
||||
cursor: pointer;
|
||||
box-sizing: border-box; }
|
||||
.button[disabled], button[disabled], input[type="submit"][disabled], input[type="reset"][disabled], input[type="button"][disabled] {
|
||||
cursor: default;
|
||||
opacity: .5; }
|
||||
.button:focus, .button:hover, button:focus, button:hover, input[type="submit"]:focus, input[type="submit"]:hover, input[type="reset"]:focus, input[type="reset"]:hover, input[type="button"]:focus, input[type="button"]:hover {
|
||||
background-color: #982c61;
|
||||
border-color: #982c61;
|
||||
color: #f9f9f9;
|
||||
outline: 0; }
|
||||
|
||||
textarea, select, input[type] {
|
||||
color: #4a4a4a;
|
||||
padding: 6px 10px;
|
||||
/* The 6px vertically centers text on FF, ignored by Webkit */
|
||||
margin-bottom: 10px;
|
||||
background-color: #f1f1f1;
|
||||
border: 1px solid #f1f1f1;
|
||||
border-radius: 4px;
|
||||
box-shadow: none;
|
||||
box-sizing: border-box; }
|
||||
textarea:focus, select:focus, input[type]:focus {
|
||||
border: 1px solid #2c8898;
|
||||
outline: 0; }
|
||||
|
||||
input[type="checkbox"]:focus {
|
||||
outline: 1px dotted #2c8898; }
|
||||
|
||||
label, legend, fieldset {
|
||||
display: block;
|
||||
margin-bottom: .5rem;
|
||||
font-weight: 600; }
|
||||
33
src/main/resources/application.yaml.example
Normal file
33
src/main/resources/application.yaml.example
Normal file
@@ -0,0 +1,33 @@
|
||||
# Configuration file
|
||||
quarkus:
|
||||
http:
|
||||
port: 8910
|
||||
proxy:
|
||||
proxy-address-forwarding: true
|
||||
|
||||
native:
|
||||
container-build: true
|
||||
container-runtime: docker
|
||||
enable-all-security-services: true
|
||||
enable-https-url-handler: true
|
||||
|
||||
oidc:
|
||||
application-type: web-app
|
||||
auth-server-url: <url>
|
||||
client-id: <id>
|
||||
credentials:
|
||||
secret: <secret>
|
||||
tls:
|
||||
verification: none
|
||||
token:
|
||||
refresh-expired: true
|
||||
|
||||
api:
|
||||
file:
|
||||
directory: /lalafin # Files need to be in {directory}/file
|
||||
ignored: {} # Files ending with these suffixes will not show up
|
||||
routes:
|
||||
- path: / # Root corresonds to the endpoint /file/
|
||||
roles: {} # Only users with these roles will have access to this route (empty = ALL)
|
||||
folder:
|
||||
tokens: {} # List of tokens to make some routes available trhough the public folders API
|
||||
49
src/main/resources/templates/directory-index.html
Normal file
49
src/main/resources/templates/directory-index.html
Normal file
@@ -0,0 +1,49 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<link rel="stylesheet" href="/style/sakura.css">
|
||||
<title>{info.filename}</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>{info.filename}</h1>
|
||||
{#if !info.filename is '/'}
|
||||
<a href="{info.directUrl}/..">back</a>
|
||||
<span style="float:right;">
|
||||
<a href="{info.viewUrl}/">viewer</a>
|
||||
</span>
|
||||
{/if}
|
||||
<hr />
|
||||
<table style="table-layout: fixed; text-align: center">
|
||||
{#each info.content}
|
||||
{#if count.mod(3) == 1}
|
||||
<tr>
|
||||
{/if}
|
||||
<td>
|
||||
{#if it.thumbnailUrl}
|
||||
{#if it.type is 'file'}
|
||||
{#if it.viewUrl}
|
||||
<a href="{it.viewUrl}">
|
||||
{#else}
|
||||
<a href="{it.publicApiUrl}">
|
||||
{/if}
|
||||
{#else}
|
||||
<a href="{it.directUrl}">
|
||||
{/if}<img src="{it.thumbnailUrl}" loading="lazy" /></a><br />
|
||||
{/if}
|
||||
{#if it.type is 'file'}
|
||||
<a href="{it.publicApiUrl}">
|
||||
{#else}
|
||||
<a href="{it.directUrl}">
|
||||
{/if}{it.filename}</a>
|
||||
</td>
|
||||
{#if count.mod(3) == 0}
|
||||
</tr>
|
||||
{/if}
|
||||
{/each}
|
||||
</table>
|
||||
<hr />
|
||||
</body>
|
||||
</html>
|
||||
|
||||
67
src/main/resources/templates/epub-index.html
Normal file
67
src/main/resources/templates/epub-index.html
Normal file
@@ -0,0 +1,67 @@
|
||||
<!doctype html>
|
||||
<html style="height: 100%">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<link rel="stylesheet" href="/style/sakura.css" />
|
||||
<title>{info.filename}</title>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/detect_swipe/2.1.1/jquery.detect_swipe.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.5/jszip.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/epubjs/dist/epub.min.js"></script>
|
||||
</head>
|
||||
<body style="max-width: 100%; padding: 0px; display: flex; flex-flow: column; height: 100%;">
|
||||
<div style="flex: 0 1 auto;margin: 13px 13px 0px 13px;">
|
||||
<table style="table-layout: fixed;">
|
||||
<tr>
|
||||
<td style="text-align: left; padding-top: 0; padding-bottom: 0;"><a href="{info.directUrl}/..">back</a></td>
|
||||
<td style="text-align: right; padding-top: 0; padding-bottom: 0;"><a href="#" onclick="rendition.prev()"><</a> <a href="#" onclick="rendition.next()">></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr />
|
||||
</div>
|
||||
<div id="epub" style="flex: 1 0 auto; margin: 0px 13px 0px 13px;"></div>
|
||||
<div style="flex: 0 1 auto; margin: 0px 13px 13px 13px;">
|
||||
<hr />
|
||||
</div>
|
||||
<script>
|
||||
var book = ePub("{info.directUrl}");
|
||||
var rendition = book.renderTo("epub", { method: "default", width: "100%", height: "100%", minSpreadWidth: "1000" });
|
||||
function setEvents(doc) {
|
||||
doc.addEventListener("keyup", function(e){
|
||||
if ((e.keyCode || e.which) == 37) {
|
||||
rendition.prev();
|
||||
}
|
||||
if ((e.keyCode || e.which) == 39) {
|
||||
rendition.next();
|
||||
}
|
||||
}, false);
|
||||
doc.addEventListener("wheel", function(e) {
|
||||
if (e.deltaY < 0) {
|
||||
rendition.prev();
|
||||
} else {
|
||||
rendition.next();
|
||||
}
|
||||
}, false);
|
||||
$(doc).on("swipeleft", function(event) {
|
||||
rendition.next();
|
||||
});
|
||||
$(doc).on("swiperight", function(event) {
|
||||
rendition.prev();
|
||||
});
|
||||
$(doc).on("swipeup", function(event) {
|
||||
rendition.prev();
|
||||
});
|
||||
$(doc).on("swipedown", function(event) {
|
||||
rendition.next();
|
||||
});
|
||||
}
|
||||
rendition.on("rendered", (e0,i) => {
|
||||
setEvents(i.document);
|
||||
});
|
||||
setEvents(document);
|
||||
rendition.display();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
22
src/main/resources/templates/view-index.html
Normal file
22
src/main/resources/templates/view-index.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<link rel="stylesheet" href="/style/sakura.css" />
|
||||
<title>{info.filename}</title>
|
||||
</head>
|
||||
<body>
|
||||
<table style="table-layout: fixed;">
|
||||
<tr>
|
||||
<td style="text-align: left; padding-top: 0; padding-bottom: 0;"><a href="{info.directUrl}/..">back</a></td>
|
||||
<td style="text-align: center; padding-top: 0; padding-bottom: 0;">{currpage}/{totpage}</td>
|
||||
<td style="text-align: right; padding-top: 0; padding-bottom: 0;">{#if currpage > 1}<a href="{prevuri}"><</a> {/if}{#if currpage < totpage}<a href="{nexturi}">></a>{/if}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr />
|
||||
{#if currpage < totpage}<a href="{nexturi}">{/if}<img style="position: absolute; left: 50%; transform: translate(-50%, 0);" src="{image}" />{#if currpage < totpage}</a>{/if}
|
||||
<hr />
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user