[add] lsp manager
This commit is contained in:
parent
38a1909570
commit
c4f92f0402
39 changed files with 3481 additions and 25 deletions
58
webapp/lsp-manager/views/components.htm
Normal file
58
webapp/lsp-manager/views/components.htm
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Components</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<h2>Components (test page) <a href="/app/static/index.html" target="wc">wc</a></h2>
|
||||
<p>You have no direct messages
|
||||
<sl-copy-button value="copy text is easy {Date().now}" copy-label="Click to copy"
|
||||
success-label="Text copied!" error-label="Whoops, your browser doesn't support this!"></sl-copy-button>
|
||||
</p>
|
||||
<sl-tree selection="multiple">
|
||||
<sl-tree-item lazy="lazy" onsl-lazy-load='{updateLazy}'>Available Trees</sl-tree-item>
|
||||
</sl-tree>
|
||||
<script type="module">
|
||||
const lazyItem = document.querySelector('sl-tree-item[lazy]');
|
||||
|
||||
lazyItem.addEventListener('sl-lazy-load', () => {
|
||||
// Simulate asynchronous loading
|
||||
setTimeout(() => {
|
||||
const subItems = ['Birch', 'Cedar', 'Maple', 'Pine'];
|
||||
|
||||
for (const item of subItems) {
|
||||
const treeItem = document.createElement('sl-tree-item');
|
||||
treeItem.innerText = item;
|
||||
lazyItem.append(treeItem);
|
||||
}
|
||||
|
||||
// Disable lazy mode once the content has been loaded
|
||||
lazyItem.lazy = false;
|
||||
}, 1000);
|
||||
});
|
||||
</script>
|
||||
<hr />
|
||||
<sl-carousel navigation="navigation" pagination="pagination" slides-per-page="6" slides-per-move="6">
|
||||
<sl-carousel-item style="background: var(--sl-color-red-200);">Slide 1</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-orange-200);">Slide 2</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-yellow-200);">Slide 3</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-green-200);">Slide 4</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-blue-200);">Slide 5</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-violet-200);">Slide 6</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-red-200);">Slide 21</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-orange-200);">Slide 22</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-yellow-200);">Slide 23</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-green-200);">Slide 24</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-blue-200);">Slide 25</sl-carousel-item>
|
||||
<sl-carousel-item style="background: var(--sl-color-violet-200);">Slide 26</sl-carousel-item>
|
||||
</sl-carousel>
|
||||
|
||||
<hr />
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
21
webapp/lsp-manager/views/dev/dba-iframe.htm
Normal file
21
webapp/lsp-manager/views/dev/dba-iframe.htm
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>dev</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<sl-breadcrumb>
|
||||
<sl-breadcrumb-item href="/app/dev">DEV</sl-breadcrumb-item>
|
||||
<sl-breadcrumb-item>dba</sl-breadcrumb-item>
|
||||
|
||||
</sl-breadcrumb>
|
||||
<iframe src="/dba/logs?input=%2Fapp%2F|£" allowScripts="true"
|
||||
style="width:100%;height:80vh;overflow:clip;"></iframe>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
40
webapp/lsp-manager/views/dev/home.htm
Normal file
40
webapp/lsp-manager/views/dev/home.htm
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Dev home</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="#">Dev</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a href="/app/dev/dba" class="nav-link" >dba</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/app/dev/jobs" class="nav-link" >jobs</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/dba/logs?input=%2Fapp%2F|£" target="_blank" class="nav-link" >DBA <sl-icon name="box-arrow-up-right"></sl-icon></a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/app/api" target="_blank" class="nav-link" >wadl <sl-icon name="box-arrow-up-right"></sl-icon></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
list tasks etc
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
28
webapp/lsp-manager/views/dev/job.htm
Normal file
28
webapp/lsp-manager/views/dev/job.htm
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Jobs</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class="container-fluid">
|
||||
<div class="d-flex ">
|
||||
<sl-breadcrumb class="flex-grow-1" >
|
||||
<sl-breadcrumb-item href="/app/jobs">Jobs home</sl-breadcrumb-item>
|
||||
<sl-breadcrumb-item>jobs <span class="badge bg-secondary">4</span></sl-breadcrumb-item>
|
||||
</sl-breadcrumb>
|
||||
<sl-switch id="job-refresh" checked="checked" >Refresh</sl-switch>
|
||||
</div>
|
||||
|
||||
<h2>Jobs</h2>
|
||||
<hr />
|
||||
<div hx-get="/app/jobs/table" hx-trigger="every 1s [htmx.find('#job-refresh').checked]" >
|
||||
Nothing Yet!
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
27
webapp/lsp-manager/views/error.htm
Normal file
27
webapp/lsp-manager/views/error.htm
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Error</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class="container">
|
||||
<h2 >Error: <span th:text="${code}" class="btn btn-danger"></span></h2>
|
||||
<dl>
|
||||
<dt>Description</dt>
|
||||
<dd th:text="${description}"></dd>
|
||||
<dt>Value</dt>
|
||||
<dd th:text="${value}"></dd>
|
||||
<dt>Module</dt>
|
||||
<dd ><span th:text="${module}"/>[<span th:text="${line-number}"/>,<span th:text="${column-number}"/>]</dd>
|
||||
<dt>Additional</dt>
|
||||
<dd>
|
||||
<pre th:text="${additional}"></pre>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
64
webapp/lsp-manager/views/home.htm
Normal file
64
webapp/lsp-manager/views/home.htm
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
<!DOCTYPE html>
|
||||
<html layout:decorate="~{layout.htm}"
|
||||
xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
|
||||
<head>
|
||||
|
||||
<title>Home</title>
|
||||
</head>
|
||||
<body>
|
||||
<div layout:fragment="content" class="container">
|
||||
<!-- have a button POST a click via AJAX -->
|
||||
<div style="display:inline-flex">
|
||||
<p th:text="${version}">ver</p>
|
||||
<sl-button hx-get="http://v2.jokeapi.dev/joke/Any?format=txt&safe-mode&type=single" hx-target="#joke-container" variant="default" hx-confirm="Do you want a Joke?">
|
||||
<sl-icon slot="prefix" name="emoji-laughing"></sl-icon>Joke
|
||||
</sl-button>
|
||||
<p id="joke-container" style="flex-grow:4"> </p>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<form hx-put="/pdf3/api/contact/1" hx-target="this" hx-swap="outerHTML">
|
||||
<div>
|
||||
<label>First Name</label>
|
||||
<input type="text" name="firstName" value="Joe"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Last Name</label>
|
||||
<input type="text" name="lastName" value="Blow"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Email Address</label>
|
||||
<input type="email" name="email" value="joe@blow.com"/>
|
||||
</div>
|
||||
<button class="btn">Submit</button>
|
||||
<button class="btn" hx-get="/contact/1">Cancel</button>
|
||||
</form>
|
||||
<hr />
|
||||
<h2>Contacts</h2>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Email</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="contacts-table" hx-get="/pdf3/api/contacts/table" hx-trigger="newContact from:body">
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>Add A Contact</h2>
|
||||
<form hx-post="/pdf3/api/contacts">
|
||||
<label>
|
||||
Name
|
||||
<input name="name" type="text"/>
|
||||
</label>
|
||||
<label>
|
||||
Email
|
||||
<input name="email" type="email"/>
|
||||
</label>
|
||||
</form>
|
||||
<hr />
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
56
webapp/lsp-manager/views/job/home.htm
Normal file
56
webapp/lsp-manager/views/job/home.htm
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Jobs home</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class="container-fluid">
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
|
||||
<a class="navbar-brand" href="#">Job</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
||||
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a href="/app/jobs/_" class="nav-link">List</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-9 mb-3 mb-sm-0">
|
||||
<div class="card ">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Something <span th:text="${count}" />
|
||||
,covers: <span th:text="${covers}" /></h5>
|
||||
<ul th:each="pdf: ${pdfs}">
|
||||
<li th:text="${pdf.slug}">aaa</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3 mb-3 mb-sm-0">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Job tasks</h5>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
28
webapp/lsp-manager/views/job/list.htm
Normal file
28
webapp/lsp-manager/views/job/list.htm
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Jobs</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class="container-fluid">
|
||||
<div class="d-flex ">
|
||||
<sl-breadcrumb class="flex-grow-1" >
|
||||
<sl-breadcrumb-item href="/app/jobs">Jobs home</sl-breadcrumb-item>
|
||||
<sl-breadcrumb-item>jobs <span class="badge bg-secondary">4</span></sl-breadcrumb-item>
|
||||
</sl-breadcrumb>
|
||||
<sl-switch id="job-refresh" checked="checked" >Refresh</sl-switch>
|
||||
</div>
|
||||
|
||||
<h2>Jobs</h2>
|
||||
<hr />
|
||||
<div hx-get="/app/jobs/table" hx-trigger="every 1s [htmx.find('#job-refresh').checked]" >
|
||||
Nothing Yet!
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
157
webapp/lsp-manager/views/layout.htm
Normal file
157
webapp/lsp-manager/views/layout.htm
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="htmx-config"
|
||||
content='{
|
||||
"responseHandling":[
|
||||
{"code":"204", "swap": false},
|
||||
{"code":"[23]..", "swap": true},
|
||||
{"code":"404", "swap": true},
|
||||
{"code":"[45]..", "swap": false, "error":true},
|
||||
{"code":"...", "swap": true}
|
||||
],
|
||||
"selfRequestsOnly": false
|
||||
}'
|
||||
/>
|
||||
<title>MDUI</title>
|
||||
<link rel="icon" href="/app/static/favicon.png" />
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/css/bootstrap.min.css"/>
|
||||
|
||||
<link rel="stylesheet" media="(prefers-color-scheme:light)"
|
||||
href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.15.0/cdn/themes/light.css" />
|
||||
<link rel="stylesheet" media="(prefers-color-scheme:dark)"
|
||||
href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.15.0/cdn/themes/dark.css"
|
||||
onload="document.documentElement.classList.add('sl-theme-dark');" />
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.20.1/cdn/shoelace.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/app/static/styles.css" />
|
||||
<script defer="defer" src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script defer="defer" src="/app/static/htmx/2.0.4/htmx.min.js"></script>
|
||||
<script defer="defer" src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js" integrity="sha256-y3ibfOyBqlgBd+GzwFYQEVOZdNJD06HeDXihongBXKs=" crossorigin="anonymous"></script>
|
||||
<script defer="defer" src="/app/static/script.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body hx-boost="true" hx-indicator="#indicator" data-bs-theme="light" >
|
||||
<div class='App'>
|
||||
<header id="header">
|
||||
|
||||
<nav class="navbar navbar-expand-lg ">
|
||||
<div class="container-fluid">
|
||||
|
||||
<a class="navbar-brand" href="/app">MDUI</a>
|
||||
<sl-icon id="indicator" class="htmx-indicator" src="/app/static/loader.svg" ></sl-icon>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" aria-current="page" href="/app/home">Home</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/app/pdfs">pdf</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/app/jobs">jobs</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/app/dev">dev</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/app/tweets">tweets</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/app/components">components</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/app/test">test</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<sl-input placeholder="search..." clearable="clearable" aria-label="Search">
|
||||
<sl-icon name="search" slot="prefix"></sl-icon>
|
||||
</sl-input>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link " href="/app/profile">
|
||||
<sl-avatar label="User avatar" style="--size: 2.0rem;"></sl-avatar>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link " href="/app/notifications">
|
||||
<sl-avatar label="User avatar" style="--size: 2.0rem;">
|
||||
<sl-icon slot="icon" name="bell"></sl-icon>
|
||||
</sl-avatar>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<sl-dropdown>
|
||||
<sl-avatar slot="trigger" label="theme" style="--size: 2.0rem;">
|
||||
<sl-icon slot="icon" name="circle-half"></sl-icon>
|
||||
</sl-avatar>
|
||||
|
||||
<sl-menu>
|
||||
<sl-menu-item> <sl-icon slot="prefix" name="sun-fill"></sl-icon>Light</sl-menu-item>
|
||||
<sl-menu-item> <sl-icon slot="prefix" name="moon-fill"></sl-icon>Dark</sl-menu-item>
|
||||
<sl-divider></sl-divider>
|
||||
<sl-menu-item type="checkbox" checked="checked"> <sl-icon slot="prefix"
|
||||
name="circle-half"></sl-icon>System</sl-menu-item>
|
||||
|
||||
</sl-menu>
|
||||
</sl-dropdown>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
<main id="main" class="App-main">
|
||||
<p layout:fragment="content">MAIN</p>
|
||||
</main>
|
||||
<footer id="footer">
|
||||
<button onclick="toast('Hi. '+new Date())">toast</button>
|
||||
<sl-alert>hi</sl-alert>
|
||||
LoggedIn: ??
|
||||
<button type="button" class="btn btn-primary" id="liveToastBtn">Show live toast</button>
|
||||
|
||||
<sl-tooltip>
|
||||
<div id="server-timing" slot="content"/>
|
||||
<sl-icon name="stopwatch"></sl-icon>
|
||||
</sl-tooltip>
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
<!-- bootstrap toast -->
|
||||
<div class="position-fixed bottom-0 end-0 p-3">
|
||||
<div id="toast" class="toast align-items-center text-white bg-success border-0" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
|
||||
<div class="toast-header">
|
||||
<strong class="me-auto">Bootstrap</strong>
|
||||
<small>? mins ago</small>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
||||
</div>
|
||||
<div id="toast-body" class="toast-body">detail here</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
25
webapp/lsp-manager/views/login.htm
Normal file
25
webapp/lsp-manager/views/login.htm
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Login</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<form onsubmit="${login}" action="${router.guardUrl()}">
|
||||
<fieldset style="width:50%;">
|
||||
<sl-input label="User name" value="${session.login}" oninput="${html.set(session, 'login')}"
|
||||
clearable="clearable"></sl-input>
|
||||
|
||||
<sl-input value="${session.password}" oninput="${html.set(session, 'password')}" type="password"
|
||||
label="Password" password-toggle="password-toggle" clearable="clearable"></sl-input>
|
||||
<input type="checkbox" checked="${session.loggedIn}" />
|
||||
</fieldset>
|
||||
<button type="submit">Login</button>
|
||||
<button onclick="${fastlogin}">Fast</button>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
15
webapp/lsp-manager/views/notifications.htm
Normal file
15
webapp/lsp-manager/views/notifications.htm
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Notifications</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class="container-fluid">
|
||||
<h1>Notifications</h1>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
78
webapp/lsp-manager/views/pdf/home.htm
Normal file
78
webapp/lsp-manager/views/pdf/home.htm
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>PDF home</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class="container-fluid">
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
|
||||
<a class="navbar-brand" href="#">PDF</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
||||
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a href="/app/pdfs/_" class="nav-link">List</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/app/pdfs/settings" class="nav-link">Settings</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-9 mb-3 mb-sm-0">
|
||||
<div class="card ">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">PDF slugs <span th:text="${count}" />
|
||||
,covers: <span th:text="${covers}" /></h5>
|
||||
<ul th:each="pdf: ${pdfs}">
|
||||
<li th:text="${pdf.slug}">aaa</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3 mb-3 mb-sm-0">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">PDF tasks</h5>
|
||||
|
||||
<form layout="column items:start gap">
|
||||
|
||||
<div class="row mb-3">
|
||||
<button name="action" value="delete" hx-confirm="Delete all covers?" hx-post="/app/pdfs"
|
||||
hx-target="#aresponse">
|
||||
Delete covers
|
||||
</button>
|
||||
<span id="aresponse" />
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
<div class="row mb-3">
|
||||
update covers
|
||||
<button name="action" value="update" hx-confirm="create all covers?" hx-post="/app/pdfs"
|
||||
hx-target="#bresponse">
|
||||
update covers
|
||||
</button>
|
||||
<span id="bresponse" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
16
webapp/lsp-manager/views/pdf/item-iframe.htm
Normal file
16
webapp/lsp-manager/views/pdf/item-iframe.htm
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>PDF-view</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<iframe th:src="@{/pdfs/_/{id}/raw}" src="/pdfs/_/{id}/raw" allowScripts="true"
|
||||
style="width:100%;height:80vh;overflow:clip;"></iframe>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
60
webapp/lsp-manager/views/pdf/item.htm
Normal file
60
webapp/lsp-manager/views/pdf/item.htm
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>PDF</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class="container-fluid">
|
||||
<sl-breadcrumb>
|
||||
<sl-breadcrumb-item href="/app/pdfs">PDF</sl-breadcrumb-item>
|
||||
<sl-breadcrumb-item href="/app/pdfs/_">list </sl-breadcrumb-item>
|
||||
<sl-breadcrumb-item><span th:text="${id}">#</span></sl-breadcrumb-item>
|
||||
|
||||
</sl-breadcrumb>
|
||||
<div class="card-group">
|
||||
<div class="card">
|
||||
<img th:src="@{/pdfs/_/{id}/cover}" src="" class="card-img-top object-fit-contain" alt="Image of cover page."
|
||||
style="height: 75vh;" />
|
||||
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Card title</h5>
|
||||
<p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional
|
||||
content. This card has even longer content than the first to show that equal height action.</p>
|
||||
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Tasks</h5>
|
||||
<div class="card-text">
|
||||
<div class="btn-group-vertical" role="group" aria-label="Button group with nested dropdown">
|
||||
<button type="button" class="btn btn-primary">1</button>
|
||||
<button type="button" class="btn btn-primary">2</button>
|
||||
|
||||
<div class="btn-group" role="group">
|
||||
<button id="btnGroupDrop1" type="button" class="btn btn-primary dropdown-toggle"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
Dropdown
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="btnGroupDrop1">
|
||||
<li><a class="dropdown-item" href="#">Dropdown link</a></li>
|
||||
<li><a class="dropdown-item" href="#">Dropdown link</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
53
webapp/lsp-manager/views/pdf/list.htm
Normal file
53
webapp/lsp-manager/views/pdf/list.htm
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Pdfs</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class="container-fluid">
|
||||
<sl-breadcrumb>
|
||||
<sl-breadcrumb-item href="/app/pdfs">PDF</sl-breadcrumb-item>
|
||||
<sl-breadcrumb-item>list (<span th:text="${count}">#</span>)</sl-breadcrumb-item>
|
||||
</sl-breadcrumb>
|
||||
|
||||
<div style="display:flex;flex-wrap:wrap;flex-direction:row;gap:10px;">
|
||||
|
||||
<sl-card th:each="pdf: ${pdfs}" class="card-overview">
|
||||
|
||||
<div slot="header">
|
||||
<sl-tooltip>
|
||||
<div th:text="${pdf.slug}" slot="content">path</div>
|
||||
<sl-badge th:text="${pdf.index}">{pdf.index}</sl-badge>
|
||||
</sl-tooltip>
|
||||
<sl-copy-button value="" th:value="${pdf.slug}" copy-label="copy PDF path">
|
||||
</sl-copy-button>
|
||||
<a th:href="@{/pdfs/_/{pdf.id}/raw}" href="/app/pdfs/_/{pdf.id}/details"><small>{pdf}</small></a>
|
||||
<sl-button-group label="History">
|
||||
<sl-icon-button name="file-earmark-pdf" label="Settings"
|
||||
th:href="@{/pdfs/_/{pdf.id}/view}" href="/app/pdfs/_/{pdf.id}/view"></sl-icon-button>
|
||||
|
||||
</sl-button-group>
|
||||
</div>
|
||||
<div>
|
||||
<a th:href="@{/pdfs/_/{pdf.id}}" href="/pdfs/_/{pdf.id}" class="holder center">
|
||||
<img th:src="@{/pdfs/_/{pdf.id}/cover}" src="" class="img-thumbnail object-fit-contain" loading="lazy"
|
||||
alt="Image of cover page." style="width:200px;height: 300px;"/>
|
||||
</a>
|
||||
</div>
|
||||
<div slot="footer">
|
||||
|
||||
<div>
|
||||
slug:<br /><small th:text="${pdf.id}">{pdf.id}</small><br />
|
||||
</div>
|
||||
</div>
|
||||
</sl-card>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
97
webapp/lsp-manager/views/pdf/settings.htm
Normal file
97
webapp/lsp-manager/views/pdf/settings.htm
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Settings</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container-fluid" layout:fragment="content">
|
||||
<sl-breadcrumb>
|
||||
<sl-breadcrumb-item href="/app/pdfs">PDF</sl-breadcrumb-item>
|
||||
<sl-breadcrumb-item>settings</sl-breadcrumb-item>
|
||||
</sl-breadcrumb>
|
||||
<form method="post" action="/app/pdfs/settings" layout="column items:start gap" class="input-validation-required container">
|
||||
<fieldset>
|
||||
<legend>Settings</legend>
|
||||
<div class="row mb-3">
|
||||
<label for="inputdp" class="col-sm-2 col-form-label text-end">dataPath</label>
|
||||
<div class="col-sm-8">
|
||||
<sl-input id="inputdp" name="dataPath"
|
||||
clearable="clearable" filled="filled" required="required" value="{settings.dataPath}"
|
||||
th:value="${ settings.dataPath }"
|
||||
help-text="Root folder on server containing data files e.g.'/data/'"></sl-input>
|
||||
<div th:text="${error.dataPath}" class='error-message'></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
<div class="row mb-3 ">
|
||||
<label for="inputdrop" class="col-sm-2 col-form-label text-end">drop</label>
|
||||
|
||||
<div class="col-sm-8">
|
||||
<sl-input id="inputdrop" name="drop"
|
||||
clearable="clearable" filled="filled"
|
||||
value="{settings.drop}" th:value="${ settings.drop }" help-text="optional sub-folder of dataPath e.g. drop-01e/"></sl-input>
|
||||
<div th:text="${error.drop}" class='error-message'></div>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="selectam" class="col-sm-2 col-form-label text-end">Animation</label>
|
||||
|
||||
<div class="col-sm-8">
|
||||
<sl-select id="selectam" name="animation" value="{settings.animation}" th:value="${ settings.animation }"
|
||||
filled="filled" help-text="Animation for page transistions.">
|
||||
<sl-option value="">None</sl-option>
|
||||
<sl-option value="fade">Fade</sl-option>
|
||||
<sl-option value="slide-fade">slide-fade</sl-option>
|
||||
<sl-option value="bounce">bounce</sl-option>
|
||||
</sl-select>
|
||||
<div class='error-message'></div>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
</fieldset>
|
||||
<div class="mx-auto" style="width: 600px;">
|
||||
<sl-button type="submit" variant="primary">Save</sl-button>
|
||||
<sl-button type="reset">Reset to default values</sl-button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.errors {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
.label-on-left {
|
||||
--label-width: 8rem;
|
||||
--gap-width: 1rem;
|
||||
}
|
||||
|
||||
.label-on-left+.label-on-left {
|
||||
margin-top: var(--sl-spacing-medium);
|
||||
}
|
||||
|
||||
.label-on-left::part(form-control) {
|
||||
display: grid;
|
||||
grid: auto / var(--label-width) 1fr;
|
||||
gap: var(--sl-spacing-3x-small) var(--gap-width);
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.label-on-left::part(form-control-label) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.label-on-left::part(form-control-help-text) {
|
||||
grid-column-start: 2;
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
17
webapp/lsp-manager/views/profile.htm
Normal file
17
webapp/lsp-manager/views/profile.htm
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>Profile</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content" class='ProfileIndex'>
|
||||
<h2>{uid} profile</h2>
|
||||
<hr />
|
||||
<hr />
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
42
webapp/lsp-manager/views/test.htm
Normal file
42
webapp/lsp-manager/views/test.htm
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>test</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<sl-card class="card-overview">
|
||||
|
||||
<div slot="header">
|
||||
<sl-tooltip>
|
||||
<div th:text="${pdf.slug}" slot="content">path</div>
|
||||
<sl-badge th:text="${pdf.index}">{pdf.index}</sl-badge>
|
||||
</sl-tooltip>
|
||||
|
||||
<a th:href="@{/pdfs/{pdf.id}/raw}" href="/app/pdfs/{pdf.id}/details"><small>{pdf}</small></a>
|
||||
<sl-button-group label="History">
|
||||
<sl-icon-button name="file-earmark-pdf" label="Settings"
|
||||
th:href="@{/pdfs/{pdf.id}/raw}" href="/app/pdfs/{pdf.id}/view"></sl-icon-button>
|
||||
|
||||
</sl-button-group>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;">
|
||||
<div>
|
||||
<a href="/app/pdfs/{pdf.id}/details" class="holder center">
|
||||
<img src="/app/pdfs/{pdf.id}/cover" loading="{index >10?'lazy':'eager'}"
|
||||
alt="A kitten sits patiently." />
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
slug:<br /><small th:text="${pdf.id}">{pdf.id}</small><br />
|
||||
</div>
|
||||
</div>
|
||||
</sl-card>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
67
webapp/lsp-manager/views/tweets.htm
Normal file
67
webapp/lsp-manager/views/tweets.htm
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout.htm}"
|
||||
xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
|
||||
<title>Tweets</title>
|
||||
</head>
|
||||
<body>
|
||||
<div layout:fragment="content" class='Home' >
|
||||
<h2>Tweets</h2>
|
||||
<div class='Tweet'>
|
||||
<div class='Tweet-author'>
|
||||
<a href="/app/profile/{uid}"
|
||||
th:href="@{/profile/{uid}(uid='dan_abramov')}">Dan Abramov @dan_abramov</a>
|
||||
</div>
|
||||
<div class='Tweet-time'>
|
||||
<sl-relative-time date="2020-07-15T09:17:00-04:00">2020-07-15T09:17:00-04:00</sl-relative-time>
|
||||
</div>
|
||||
<div class='Tweet-content'>Another use case for 'this.context' I think might be valid: forms. They're too painful right now.</div>
|
||||
</div>
|
||||
<div class='Tweet'>
|
||||
<div class='Tweet-author'>
|
||||
<a href="/app/profile/{uid}"
|
||||
th:href="@{profile/{uid}(uid=afanasjevas)}"
|
||||
>Eduardas Afanasjevas @afanasjevas</a>
|
||||
</div>
|
||||
<div class='Tweet-time'>
|
||||
<sl-relative-time date="2024-04-15T09:17:00-04:00">2024-04-15T09:17:00-04:00</sl-relative-time></div>
|
||||
<div class='Tweet-content'>I just published “What will Datasmoothie bring to the analytics startup landscape?” https://medium.com/@afanasjevas/what-will-datasmoothie-bring-to-the-analytics-startup-landscape-f7dab70d75c3?source=tw-81c4e81fe6f8-1427630532296</div>
|
||||
</div>
|
||||
<div class='Tweet'>
|
||||
<div class='Tweet-author'>
|
||||
<a href="/app/profile/{uid}"
|
||||
th:href="@{profile/{uid}(uid=LNUGorg)}"
|
||||
>LNUG @LNUGorg</a>
|
||||
</div>
|
||||
<div class='Tweet-time'>52m52 minutes ago</div>
|
||||
<div class='Tweet-content'> new talks uploaded on our YouTube page - check them out http://bit.ly/1yoXSAO</div>
|
||||
</div>
|
||||
<style>
|
||||
|
||||
.Tweet {
|
||||
border: 1px solid #eee;
|
||||
border-radius: 3px;
|
||||
padding: 10px;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.Tweet:last-child {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.Tweet-author {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.Tweet-time {
|
||||
color: #888;
|
||||
display: inline-block;
|
||||
margin-left: 20px;
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
19
webapp/lsp-manager/views/unknown.htm
Normal file
19
webapp/lsp-manager/views/unknown.htm
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<!DOCTYPE HTML5>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{layout.htm}">
|
||||
|
||||
<head>
|
||||
<title>404</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<h2>Page not found:</h2>
|
||||
<ul>
|
||||
<li th:text="${path}">Page: pdf2/${ path }</li>
|
||||
<li>Method: ${ method }</li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue